มีเครื่องกำเนิดทดสอบหน่วยช่วยคุณเมื่อทำงานกับรหัสเดิมหรือไม่


10

ฉันกำลังดูขนาดเล็ก (~ 70kLOC รวมถึงสร้าง) C # (. NET 4.0, Silverlight บางส่วน) รหัสฐานที่มีความครอบคลุมการทดสอบต่ำมาก รหัสตัวเองทำงานในที่ผ่านการทดสอบการยอมรับของผู้ใช้ แต่มันเปราะและในบางพื้นที่ไม่ได้รับปัจจัยดีมาก ฉันต้องการเพิ่มการทดสอบหน่วยที่มั่นคงรอบรหัสดั้งเดิมโดยใช้ผู้ต้องสงสัยตามปกติ (NMock, NUnit, StatLight สำหรับบิต Silverlight)

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

อย่างไรก็ตามในครั้งนี้ฉันกำลังคิดที่จะใช้ตัวสร้างการทดสอบ (โดยเฉพาะอย่างยิ่งPex ) เพื่อสร้างกรอบการทดสอบจากนั้นจึงสร้างมันออกมาด้วยตนเอง

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

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


ฉันลองใช้ PeX หนึ่งครั้งและผลลัพธ์ก็ดีเอาเป็นว่าไม่พอใจมาก - YMMV อย่าคาดหวังว่าเครื่องมือดังกล่าวจะ "เข้าใจ" โค้ดของคุณและความต้องการใช้งานของมัน - มันไม่ควรพลาดเพียงแค่ "ความแตกต่างเชิงความหมาย" แต่ก็ไม่ได้หมายถึงความหมายทั้งหมด นอกจากนี้เมื่อคุณเริ่มต้นด้วยฐานรหัสดั้งเดิมโดยทั่วไปคุณจะไม่เริ่มต้นด้วยการทดสอบหน่วยก่อน แต่เป็นการทดสอบระบบหรือการรวมระบบ นั่นคือสิ่งที่ PeX สร้างขึ้นมาอย่างแน่นอน
Doc Brown

คำตอบ:


9

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

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

เวลาในการเพิ่มรหัสทดสอบหน่วย:

  • การเพิ่มฟังก์ชั่นใหม่
  • ใส่รหัสอีกครั้ง
  • แก้ไขข้อบกพร่อง
  • เรียนรู้สิ่งที่รหัสทำ
  • พิสูจน์ข้อผิดพลาดอยู่

เป็นการยากที่จะหาจำนวนค่าของการเพิ่มการทดสอบหน่วยหลังจากข้อเท็จจริง

ปกติฉันไม่อนุญาตให้ตัวเองเขียนคำตอบที่ขัดต่อสิ่งที่ผู้ถามต้องการ แต่ฉันรู้สึกว่านี่เป็นบทเรียนที่ดีที่จะผ่านไป


ฉันเห็นด้วยกับคุณ 100% - คำถามนี้เกิดขึ้นจากฉันสงสัยว่าวิธีที่ดีที่สุดที่จะใช้เวลาหยุดทำงาน การปฏิบัติตามปกติของฉันคือการทดสอบและสร้างใหม่ในกระบวนการแก้ไขข้อบกพร่องหรือเพิ่มคุณสมบัติ ฉันหวังว่าบางคนอาจจะสามารถแบ่งปันเรื่องราวสงครามในพื้นที่นี้ ...
Duncan Bayne

1
+1, การถ่ายภาพเพื่อให้ครอบคลุมหลังจากข้อเท็จจริงแล้วมักไม่ได้ผล การทดสอบข้อบกพร่องคงที่ที่ป้องกันการถดถอยนั้นมีประสิทธิผลมาก การถดถอยของบั๊กอาจสร้างความรำคาญให้กับทุกคนที่เกี่ยวข้อง การทดสอบนั้นเหมาะสมกับการช่วยให้คุณเขียนโค้ดได้ดีขึ้น การโบลท์กับการทดสอบมักส่งผลให้การทดสอบต่ำกว่ามาตรฐาน ฉันคิดว่าความกลัวของ OP ได้รับการพิสูจน์แล้วและอัตราส่วนสัญญาณต่อเสียงรบกวนจากการทดสอบที่สร้างขึ้นจะเข้าทาง รหัสที่ไม่ผ่านการทดสอบอาจมีบิตที่แตกแขนงบางส่วน เครื่องมือที่ชี้ให้เห็นถึงกลิ่นรหัสอาจมีประโยชน์มากกว่า อาจ FXCop และเครื่องมือที่คล้ายกัน
kevpie
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.