น้อยกว่าหนึ่งปีที่ผ่านมาฉันโชคดีที่สามารถหยุดงานได้ 9 เดือน ฉันตัดสินใจว่าในเวลานั้นฉันจะฝึกฝนทักษะ C # ของฉัน ฉันเริ่มทำงานหลายโครงการและบังคับให้ตัวเองต้องติดตาม TDD
มันเป็นกระบวนการที่ค่อนข้างกระจ่างแจ้ง
มันยากในตอนแรก แต่เมื่อเวลาผ่านไปฉันเรียนรู้วิธีเขียนโค้ดที่ทดสอบได้มากขึ้น (ซึ่งกลายเป็นว่ามีแนวโน้มที่จะเป็นรหัสที่มั่นคงมากขึ้น) และในกระบวนการฉันก็เพิ่มทักษะการออกแบบ OO ของฉัน
ตอนนี้ฉันกลับมาทำงานแล้วและฉันสังเกตเห็นบางสิ่งแปลก ๆ
ฉันไม่ต้องการติดตาม TDD
ฉันพบว่า TDD ทำให้ฉันช้าลงและทำให้ยากต่อการออกแบบแอปพลิเคชั่นที่สะอาด
ฉันได้ใช้แนวทางที่แตกต่างเล็กน้อย (หนาแน่น) แทน
- เลือกชิ้นงานตามแนวตั้ง
- พัฒนาต้นแบบการทำงาน
- Refactor จนกว่าทุกอย่างจะดีและเป็นระเบียบ
- เอนหลังชื่นชมความสวยงามและรหัสที่ทดสอบได้ที่ฉันเขียน
คุณอาจสังเกตเห็นว่าขั้นตอนที่ 1 ไม่ได้ "กำหนดพื้นผิวสาธารณะของเป้าหมายการทดสอบของฉัน" และขั้นตอนที่ 2 ไม่ใช่ "ทดสอบ bejesus จากพื้นผิวสาธารณะดังกล่าว" คุณอาจสังเกตเห็นว่าไม่มีขั้นตอนใดที่เกี่ยวข้องกับการทดสอบ ฉันกำลังเขียนโค้ดที่สามารถทดสอบได้ แต่ฉันยังไม่ได้ทดสอบ ...
ตอนนี้ฉันต้องการทำให้ชัดเจนว่าจริง ๆ แล้วฉันไม่ได้ทำการทดสอบใด ๆ รหัสที่ฉันกำลังเขียนนั้นใช้งานได้ มันทำงานได้เพราะฉันกำลังทดสอบด้วยตนเอง
ฉันต้องการทำให้ชัดเจนว่าฉันไม่ได้ทำการทดสอบอัตโนมัติทั้งหมดเช่นกัน นี่คือที่กระบวนการของฉันแตกต่าง และนี่คือเหตุผลที่ฉันถามคำถามนี้
ทฤษฎี TDD ไม่ได้อยู่ในทางปฏิบัติ
กระบวนการของฉันพัฒนาไปเล็กน้อยและฉันมีความสมดุลระหว่าง TDD และไม่มีการทดสอบที่ฉันพบว่ามีประสิทธิผลมากและปลอดภัยพอสมควร มันจะเป็นดังนี้:
- ใช้ชิ้นงานตามแนวตั้งที่ทำงานด้วยการทดสอบในใจ แต่ไม่ต้องเขียนการทดสอบใด ๆ
- หากลงที่ถนน (เช่นเดือนต่อมา) ชิ้นที่ต้องการแก้ไข
- เขียนการทดสอบหน่วยการทดสอบการรวมการทดสอบพฤติกรรมและอื่น ๆ ที่รับประกันว่าชิ้นงานนั้นถูกต้อง
- แก้ไขรหัส
- หากชิ้นส่วนนั้นไม่ต้องการการแก้ไข
- ไม่ทำอะไร
เพียงแค่เปลี่ยนภาระของการเขียนแบบทดสอบจากก่อนที่จะเขียนรหัสเป็นก่อนที่จะแก้ไขโค้ดฉันสามารถสร้างโค้ดที่ใช้งานได้มากขึ้น และเมื่อฉันได้รับรอบในการเขียนการทดสอบฉันเขียนของพวกเขาน้อยลง แต่ครอบคลุมเกือบพื้นดิน (ROI ที่สูงขึ้น)
ฉันชอบกระบวนการนี้ แต่ฉันกังวลว่าอาจไม่ดีขึ้น ความสำเร็จของมันขึ้นอยู่กับนักพัฒนาที่ขยันเกี่ยวกับการเขียนแบบทดสอบก่อนที่จะเปลี่ยนสิ่งต่าง ๆ และนั่นดูเหมือนจะเป็นความเสี่ยงที่ค่อนข้างใหญ่ แต่ TDD มีความเสี่ยงเช่นเดียวกัน
ดังนั้นฉันจะไปที่ [BT] DD นรกหรือนี่คือรูปแบบทั่วไปของการเข้ารหัสและการทดสอบในทางปฏิบัติ?
ฉันต้องการทำงานต่อไปอย่างนี้ ฉันจะทำอย่างไรเพื่อให้กระบวนการนี้ทำงานในระยะยาว
บันทึก:ฉันเป็นผู้พัฒนาเพียงผู้เดียวในโครงการของฉันและฉันรับผิดชอบทุกอย่าง: การรวบรวมความต้องการการออกแบบสถาปัตยกรรมการทดสอบการใช้งานและอื่น ๆ ฉันสงสัยว่านี่เป็นสาเหตุที่กระบวนการของฉันทำงาน
If that slice doesn't need modification
เสมอ lizkeogh.com/2012/06/24/beyond-test-driven-development