Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

จาก Zero Tests สู่ TDD: คู่มือปฏิบัติการ Test-Driven Development

คุณตื่นเต้นกับแอปที่สร้าง แต่มีปัญหาหนึ่ง - ไม่มี tests เลย อยากเขียนแบบ TDD แตไม่อรู้จักเริ่มที่ไหน ค้างอยู่ จากแอปไม่มี tests ไปสู่การเขียนแอปแบบ TDD ทำยังไง?

ทดสอบโค้ดที่มีอยู่แล้ว

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

มันไม่ใช่ TDD แต่การทดสอบโค้ดเดิมจะช่วย เรียนรู้ TDD:

  • ฝึกคิด edge cases และ error conditions

    เขียน tests โดยไม่ใช้ปีทดสอบทุก input ต้องคิดว่าโค้ดแตกง่ายที่ไหน เมธอดรับ string ส่ง symbol แล้วไง? ส่ง nil แล้วไง? ทดสอบฟังก์ชันหาร ต้องทดสอบด้วย 0 แต่น่าจะไม่ต้องทดสอบ 1 และ 2

    เขียน tests พอสมควร จะเริ่มทายได้ว่าเมธอดไหนแตกง่าย และตอน TDD จะใช้ skill นี้เขียน tests มั่นคงบังคับโค้ดจัดการ edge cases ได้ดี

  • ฝึกเขียน tests ที่มีโครงสร้างดี

    เขียน tests after-the-fact ลอง patterns ต่างๆ โค้ดที่ทดสอบอยู่แล้ว โฟกัสที่ test และโครงสร้าง และเรียนรู้ patterns ดีๆ จะเขียน tests ดีตอน ไม่มี โค้ดพิง

  • ค้นพบสิ่งที่ทำให้โค้ดยากต่อการทดสอบ

    เขียน tests มากขึ้น จะเริ่มรู้สึกพื้นที่ไหนของระบบยากต่อการทดสอบ ตอนสังเกต ไฮไลต์ว่าเป็นพื้นที่ต้อง refactor และดีกว่านั้น จะเริ่มเขียนโค้ดที่ทดสอบง่ายครั้งแรก

    รู้จัก easy-to-test code แล้ว จะ TDD easy-to-test APIs ด้วยความรู้นั้น และช่วยสร้างแอปเร็วขึ้น

滑入 TDD

ใช้ test-after สร้าง skills ช่วย เรียนรู้ TDD แตยังอยาก TDD ส่วนของแอปในที่สุด มีวิธีง่าย滑入 TDD และยังพึ่งโค้ดเดิม: เขียน regression tests

Regression tests กันการพังของโค้ดที่แก้แล้ว แนวคิดง่าย: เวลารู้บั๊ก แทนที่จะคลิกใน browser reproduce:

  • เขียน failing test reproduce บั๊ก
  • รัน tests ให้แน่ใจว่า fail (เพราะบั๊กยังอยู่)
  • แก้บั๊ก แบบง่ายที่สุด
  • รัน tests ให้แน่ใจว่า pass
  • Refactor fix ถ้าจำเป็น

ง่ายกว่า TDD ระบบใหม่จากศูนย์ เพราะแค่ test-drive การเปลี่ยนแปลงโค้ดที่มีอยู่ สร้าง habit "Red, Green, Refactor" วงจรสำคัญของ TDD และจากนี้ TDD ใกล้กว่าพยายามไป TDD โดยตรงจาก no tests

จากไม่มีอะไร สู่ TDD

แอปไม่มี tests ไม่ใช่ที่เริ่มต้นแย่ ตอนทดสอบโค้ดเดิม จะเรียนรู้มากสำหรับ TDD tests ที่ดี Test-after ง่ายกว่า TDD ตอนแรก เพราะไม่ต้องจินตนาการ APIs ที่ยังไม่รู้ design และตอนตัดสินใจนำ TDD เข้าแอป สามารถ滑入ได้ด้วย regression tests

ดังนั้น ถ้าไม่รู้จะ TDD ระบบที่จินตนาการ ให้เขียน tests ต่อไป แม้ต้องเขียนโค้ดก่อนก็ตาม