กรอบการทดสอบหน่วยใดที่ฉันสามารถใช้สำหรับโครงการ mcu ที่ใช้ ac


15

ฉันกำลังคิดเกี่ยวกับวิธีที่ฉันสามารถใช้การทดสอบหน่วยในโครงการ mcu ของฉันและกรอบอะไรที่ฉันสามารถใช้เพื่อทำให้มันง่ายขึ้น

วันนี้ฉันใช้ stm32 กับ OpenOCD-jtag จากลีนุกซ์พีซีซึ่งมันถูกควบคุมจาก Makefile แบบคลาสสิกและคอมไพล์ด้วย gcc

ฉันสามารถสร้างบางสิ่งบางอย่างด้วยตัวเอง แต่ถ้ามีกรอบที่ฉันสามารถใช้มันจะดี (เป็นโบนัสหากกรอบงานสามารถแสดงผลลัพธ์ในรูปแบบที่เจนกินส์ / ฮัดสันสามารถอ่านได้)

มีวิธีใช้กรอบการทดสอบหน่วยกับ stm32 หรือไม่?


3
ฉันไม่มีเวลาเขียนคำตอบแบบเต็ม แต่ฉันใช้เครื่องมือและเทคนิคจำนวนมากที่พบในเอกสารเหล่านี้และชุดบล็อกนี้ ในคำ: CMock!
Kevin Vermeer

คำตอบ:


4

ตรวจสอบ CppUTest และยอดเยี่ยมของ James Grenning ที่http://pragprog.com/book/jgade/test-driven-development-for-embedded-c

CppUTest รองรับ C และ C ++ และมีเทมเพลต Makefile ที่ทำให้ฉันเริ่มต้นได้อย่างรวดเร็ว


ซื้อรุ่น ePub ขอดูว่ามันเป็นสิ่งที่ดีใด ๆ :)
โจฮาน

หนังสือเล่มนี้ดี แต่ฉันคิดว่าความสามัคคี (กรอบอื่น ๆ ในหนังสือเล่มนั้น) จะตอบสนองความต้องการของฉันได้ดีขึ้น
Johan

ยอมรับตั้งแต่หนังสือผลักฉันไปในทิศทางที่ถูกต้อง
Johan

5

มีตัวแปรมากมายที่จะกำหนดกรอบการทดสอบหน่วยที่ดีที่สุดที่จะใช้ในสถานการณ์ของคุณ บางรายการที่อาจมีผลต่อการเลือกของคุณคือ:

  • ภาษาเป้าหมาย
  • รองรับห้องสมุดอะไรบ้าง เช่น libc หรือเวอร์ชันที่ตัดทอนไป
  • ระบบปฏิบัติการของเป้าหมาย เช่นไม่มี, FreeRTOS, กำหนดเอง

เฟรมเวิร์กชนิด xUnit ส่วนใหญ่จะให้ระดับการทำงานพื้นฐานบางอย่างซึ่งอาจมีประโยชน์ ฉันเคยใช้Cunitกับความสำเร็จในอดีต (แพคเกจ libcunit1-dev บน Ubuntu / Debian) เฟรมเวิร์กส่วนใหญ่จะต้องใช้ libc เพื่อให้สามารถใช้ได้บางส่วนจะต้องใช้การสนับสนุนระบบปฏิบัติการเพิ่มเติม

altermative ซึ่งเป็นเพียง 3 สายยาวก็คือMinunit

ฉันพบว่าการทดสอบหน่วยโดยใช้ไมโครคอนโทรลเลอร์เป็นเป้าหมายที่ค่อนข้างยุ่งยากเพราะคุณต้องสามารถนำเสนอสภาพแวดล้อมที่เหมาะสมสำหรับการดาวน์โหลดการทดสอบเรียกใช้พวกเขาแล้วจึงได้ผลลัพธ์กลับมา เพิ่งได้รับแพลตฟอร์มในสถานที่ซึ่งจะช่วยให้คุณทำเช่นนี้เป็นงานใหญ่

อีกวิธีที่ฉันใช้ซึ่งได้ผลสำหรับฉันคือทำการทดสอบหน่วยบนโฮสต์โดยใช้เลเยอร์นามธรรมระหว่างไดรเวอร์และรหัสแอปพลิเคชัน เนื่องจากคุณใช้ gcc สำหรับเป้าหมายรหัสควรคอมไพล์บนโฮสต์ด้วย

การทดสอบในโฮสต์คอมไพล์นั้นง่ายกว่ามากเนื่องจากคุณได้รับการสนับสนุนอย่างสมบูรณ์จากโฮสต์ระบบปฏิบัติการและเครื่องมือทั้งหมด ตัวอย่างเช่นเมื่อทำการทดสอบกับโฮสต์ฉันมีไดร์เวอร์ไร้สายรุ่นที่จำลองมาด้วยอินเทอร์เฟซเดียวกับไดรเวอร์จริงที่ทำงานบนเป้าหมาย รุ่นโฮสต์ใช้แพ็คเก็ต UDP เพื่อจำลองการถ่ายโอนแพ็คเก็ตไร้สายด้วยไดรเวอร์จำลองที่สนับสนุนความสามารถในการปล่อยแพ็คเก็ตเพื่อให้ฉันสามารถทดสอบโปรโตคอลของฉัน

ในผลิตภัณฑ์ที่ฉันทำงานอยู่มีการใช้ระบบปฏิบัติการเธรดดังนั้นเลเยอร์นามธรรมสำหรับการทดสอบบนโฮสต์ระบบจึงใช้ pthreads แทน

ในขณะที่ไม่สมบูรณ์แบบยิ่งง่ายขึ้นสำหรับคุณที่จะเขียนและเรียกใช้การทดสอบมีแนวโน้มมากขึ้นที่คุณจะใช้กรณีทดสอบมากขึ้น ข้อดีอีกอย่างของการใช้โค้ดในแพลตฟอร์มที่แตกต่างกันคือการทดสอบว่าโค้ดนั้นพกพาได้ คุณจะรับข้อผิดพลาด endian ได้อย่างรวดเร็วหากเป้าหมายและสถาปัตยกรรมโฮสต์แตกต่างกัน

ตอนนี้ฉันค่อนข้างหัวข้อ แต่ความคิดเหล่านี้อาจช่วยคุณเลือกกรอบการทดสอบและวิธีทดสอบ


ฉันได้แก้ไขวิธีที่ฉันได้รหัสบนเป้าหมายและฉันสามารถใช้ gdb ในโหมดสคริปต์เพื่อหยุดที่เบรกพอยต์ที่แตกต่างกันเช่น test_ok หรือ test_fail ( fun-tech.se/stm32/TestSuite/index.php ) ดังนั้นฉันครึ่งทาง นี่เป็นคำถามเพิ่มเติมว่าจะสร้าง "การทดสอบ" ที่แตกต่างกันอย่างไร ความคิดของฉันในวันนี้เป็นเรื่องเล็กน้อยที่ไม่ยืดหยุ่นนั่นคือเหตุผลที่ฉันเริ่มค้นหากรอบบางอย่าง
Johan

1

ตรวจสอบ embUnit http://embunit.sourceforge.net/embunit/index.html มันเป็นกรอบการทดสอบหน่วย C ฝังตัวที่มีรอยเท้าต่ำ

เราใช้มันประสบความสำเร็จในโครงการไมโครคอนโทรลเลอร์ที่ฝังตัวอยู่สองรายการ อย่าคาดหวังว่าตัวเลือกและคุณสมบัติที่คุณจะได้รับจากกรอบการทดสอบหน่วยเดสก์ท็อป แต่มันก็ทรงพลังพอสมควร

มันมีการกำหนด asserts ที่กำหนดไว้สำหรับคุณดังนั้นคุณไม่ต้องเสียเวลาในการเขียน asserts ที่กำหนดเองเช่นเดียวกับ minUnit


1

บางเวลาที่ผ่านมาฉันเขียนบทช่วยสอนอย่างละเอียดในหัวข้อ: แอปพลิเคชันการทดสอบหน่วย (แบบฝัง) C พร้อม Ceedling ; ฉันใช้เทคนิคเหล่านี้ในหลายโครงการและฉันก็มีความสุขมาก


2
นี่เป็นคำตอบสำหรับลิงค์เท่านั้นและจะไม่มีค่าหากการเปลี่ยน URL หรือลิงค์นั้นลดลง คุณควรอธิบายข้อมูลที่เกี่ยวข้องในคำตอบจากนั้นคุณสามารถเพิ่มลิงค์เป็นการอ้างอิง
ท่อ

2
@pipe ใช่ แต่คำถาม (แนะนำผลิตภัณฑ์เป็นหลัก) มีคำตอบเช่นนี้
Dmitry Grigoryev

0

ฉันแค่มองเข้าไปในตัวเอง ฉันพบบทความสามส่วนที่สรุปโครงร่างการทดสอบหน่วยที่นี่:

http://www.eetimes.com/design/embedded/4007177/Doing-C-code-unit-testing-on-a-shoestring-Part-1-The-basics-and-the-tools

ฉันจะเห็นด้วยกับทุกสิ่งที่ออสตินได้กล่าวถึง


-1

ลองใช้ผ้าสำลี แต่ฉันไม่คิดว่ามันสำหรับการทดสอบหน่วยมันสำหรับการวิเคราะห์รหัส


2
การวิเคราะห์โค้ดแบบสแตติกไม่สามารถช่วยดำเนินการและทดสอบโค้ดได้ดังนั้นจึงไม่เป็นประโยชน์จริง ๆ
Johan

1
อาจไม่มีประโยชน์ในบริบทของการทดสอบหน่วย แต่ทุกคนควรใช้เครื่องมือวิเคราะห์แบบคงที่บางประเภท
ทิม
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.