การเพิ่มการทดสอบหน่วยในโครงการ C ธรรมดา


12

ชื่อกล่าวมันทั้งหมด บริษัท ของฉันกำลังนำโครงการเฟิร์มแวร์มรดกมาใช้ใหม่สำหรับอุปกรณ์ไมโครคอนโทรลเลอร์ซึ่งเขียนด้วยภาษา C ล้วนๆ

มีบางส่วนที่ผิดอย่างชัดเจนและจำเป็นต้องเปลี่ยนและมาจากพื้นหลัง C # / TDD ฉันไม่ชอบความคิดในการสร้างสิ่งต่าง ๆ แบบสุ่มโดยไม่มีการทดสอบเพื่อรับรองว่าการทำงานจะไม่เปลี่ยนแปลง นอกจากนี้ฉันยังเห็นว่ามีการแนะนำข้อบกพร่องที่หายากในหลาย ๆ ครั้งผ่านการเปลี่ยนแปลงเล็กน้อย (ซึ่งเป็นสิ่งที่ฉันเชื่อว่าจะได้รับการแก้ไขหากใช้การทดสอบการถดถอย) ต้องระมัดระวังเป็นอย่างมากเพื่อหลีกเลี่ยงข้อผิดพลาดเหล่านี้: มันยากที่จะติดตามกลุ่มรอบตัวรอบรหัส

เพื่อสรุป:

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

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

คำตอบ:


7

หยิบสำเนาของการทำงานอย่างมีประสิทธิภาพด้วยรหัสมรดกโดย Michael Feathers มันมีไว้เพื่อจัดการกับสถานการณ์ดังกล่าว แม้ว่ามันจะให้ความสำคัญกับภาษา OO เช่น C ++ และ Java แต่ฉันเชื่อว่ามันอาจช่วยคุณได้มาก

หน้าตาเหมือนเป็นส่วนหนึ่งของมัน (หรือบทความร่าง) แม้จะสามารถใช้ได้ฟรีที่นี่


+1 ขอบคุณ แต่ฉันเชื่อว่าฉันค่อนข้างดีในการ refactoring รหัส OO ด้วยรหัส OO เพิ่มเติม สิ่งที่ฉันไม่รู้คือวิธีทดสอบโค้ดโพรซีเดอร์และโค้ดโพรซีเดอร์กระบวนการ refactor ที่มีโค้ดโพรซีเดอร์คู่น้อยกว่า
Groo

@Groo หนังสือเล่มนี้ไม่ได้เกี่ยวกับการปรับปรุงอีกครั้ง มันเกี่ยวกับวิธีการแปลงรหัสสปาเก็ตตี้โดยไม่ต้องทำการทดสอบหน่วยใด ๆ ให้กลายเป็นรหัส (สปาเก็ตตี้ค่อนข้างน้อย) ซึ่งครอบคลุมการทดสอบหน่วย รหัสดังกล่าวนั้นยากที่จะทดสอบดังนั้นคุณต้อง refactor ก่อนเพื่อให้สามารถทดสอบได้ อย่างไรก็ตามอย่างที่คุณพูดถึงการปรับเปลี่ยนโดยไม่ต้องทดสอบหน่วยนั้นมีความเสี่ยงดังนั้นจึงเป็นสถานการณ์ที่ถูกจับได้ 22 ครั้ง หนังสือเล่มนี้จะแนะนำวิธีการเปลี่ยนแปลงรหัสที่เล็กที่สุดและปลอดภัยที่สุดซึ่งช่วยให้คุณสามารถครอบคลุมได้ด้วยการทดสอบหน่วยดังนั้นจึงเริ่มทำการปรับโครงสร้างใหม่อย่างจริงจัง
PéterTörök

หนังสือเล่มนี้เป็นคำแนะนำที่ดีและครอบคลุม C พร้อมกับภาษา OO
ThomasW

7

สำหรับเทคนิคน่าจะเป็นไมเคิลขนหนังสือในคำตอบเตอร์Törökของจะครอบคลุมสวย หากคุณไม่ต้องการไปที่หนังสือฉันขอแนะนำกระบวนการสามขั้นตอน:

  1. ตรวจสอบรหัสที่ไม่สามารถทดสอบได้และทำซ้ำส่วนเล็ก ๆของการทำงานของรหัสนั้นลงในฟังก์ชั่นที่ทดสอบได้ สิ่งสำคัญคือฟังก์ชั่นใหม่มีพฤติกรรมที่เห็นได้ชัดว่าเทียบเท่ากับฟังก์ชั่นที่คุณพยายามทำซ้ำ - จริง ๆ แล้วฉันไม่ได้สนับสนุนการทดสอบหน่วยการเขียนเกี่ยวกับรหัสดั้งเดิมดังนั้นคุณต้องระมัดระวังและ จำกัด ขอบเขตของคุณ เพื่อรักษาความมั่นใจในการปรับโครงสร้าง
  2. ทดสอบหน่วยการเขียนรอบฟังก์ชั่นใหม่เหล่านั้น
  3. แก้ไขรหัสเดิมเพื่อเรียกใช้ฟังก์ชั่นใหม่

ทำซ้ำขั้นตอนนี้สองสามครั้งและคุณควรพบว่าคุณภาพของรหัสฐานเดิมเพิ่มขึ้นอย่างมีนัยสำคัญ

เท่าที่เครื่องมือไปได้โปรดทราบว่า C ++ สามารถโทรเข้า C ดังนั้นกรอบการทดสอบหน่วย C ++ ใด ๆ สามารถใช้ในการทดสอบรหัส C ตัวอย่างเช่นเรากำลังใช้CPPUnitเพื่อทดสอบหน่วยรหัส C จำนวนมากในโครงการของเรา


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