ฉันควรเขียนการทดสอบเพื่อพิสูจน์ว่าการลบรหัสแก้ไขข้อผิดพลาดหรือไม่?


14

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

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


8
ฉันคิดว่าการทดสอบการถดถอยมีประโยชน์โดยไม่คำนึงถึงว่าข้อผิดพลาดได้รับการแก้ไขอย่างไร
Ismail Badawi

1
การทดสอบไม่ได้ยืนยันว่ารหัสถูกลบออก - การทดสอบยืนยันข้อผิดพลาดได้รับการแก้ไข ...
user253751

คำตอบ:


50

คุณกำลังมองมันผิดทาง การทดสอบไม่ได้ยืนยันว่ารหัสถูกลบออก การทดสอบไม่ยืนยันการทำงานบางอย่าง

การทดสอบไม่สนใจจำนวนรหัสที่ต้องใช้เพื่อให้ผ่านและไม่ทราบว่าคุณได้ลบรหัสบางส่วนแล้ว มูลค่าของการทดสอบนั้นเหมือนกับการทดสอบอื่น ๆ ที่คุณสร้างขึ้นเนื่องจากข้อผิดพลาด: คุณมีความมั่นใจในการไม่มีบั๊กเมื่อการทดสอบผ่านและการรวมการทดสอบเข้ากับกระบวนการสร้างทำให้มั่นใจได้ว่าข้อผิดพลาดจะ ส่วนใหญ่มีแนวโน้มที่จะไม่ได้รับการแนะนำ

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


3
+1 แต่ฉันสามารถจินตนาการถึงสถานการณ์ต่อไปนี้: รหัสที่ลบออกมีฟังก์ชันการทำงานที่ไร้สาระบางคนเพิ่มซึ่งไม่เข้าใจโดเมนปัญหาอย่างถูกต้อง ตอนนี้ในระหว่างการตรวจสอบโค้ด dev อีกคนหนึ่งเห็นว่าส่วนทั้งหมดนั้นไร้สาระจริงๆและรหัสจะถูกลบออก การมีการทดสอบมากมายสำหรับพฤติกรรมไร้สาระเช่นนั้นอาจทำให้ชุดการทดสอบของคุณขยายตัว
Doc Brown

2
เห็นได้ชัดว่าฟังก์ชั่นที่ลบออกจัดการกับอินพุต / เอาต์พุตบางอย่างผิดปกติ เห็นได้ชัดว่าใครบางคนในอนาคตอาจเข้าใจผิดปัญหาในลักษณะเดียวกัน ถ้าคุณกลัวชุดทดสอบขยายฉันไม่คิดว่า TDD เหมาะสำหรับคุณ ชุดทดสอบขยายตัวคืออะไร?
Dorus

3
@DocBrown: หากพวกเขากำลังทำ TDD จะต้องมีการทดสอบบางอย่างที่ต้องใช้ฟังก์ชั่นที่ไร้สาระมิฉะนั้นพวกเขาจะไม่ได้รับอนุญาตให้เขียนโค้ดนั้นตั้งแต่แรก! โปรดจำไว้ว่าคุณได้รับอนุญาตให้เขียนโค้ดจำนวนต่ำสุดที่แน่นอนเพื่อให้ผ่านการทดสอบ หากไม่มีการทดสอบดังกล่าวรหัสนั้นไม่ควรถูกเขียนขึ้นตั้งแต่แรกและสามารถลบได้ หากมีคือการทดสอบว่ากองกำลังว่าพฤติกรรมไร้สาระแล้วทดสอบที่ควรจะออกและตอนนี้เราอยู่ที่กรณีเดียวกับผมก่อนที่จะอธิบาย: การทดสอบจะหายไปลบรหัส
Jörg W Mittag

ในทั้งสองกรณีที่คุณไม่เคยเพิ่มการทดสอบใด ๆ กับชุดทดสอบและในกรณีที่สองที่คุณจะลบหนึ่ง อย่างไรก็ตามหากปรากฎว่าการทดสอบนั้นสมเหตุสมผลจริง ๆ แล้วฟังก์ชั่นก็ไม่ได้ไร้สาระเลย
Jörg W Mittag
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.