การพัฒนาที่ขับเคลื่อนด้วยการทดสอบคืออะไร: คู่มือสำหรับมือใหม่
เผยแพร่แล้ว: 2018-03-12โปรแกรมเมอร์และแมลงต่างต่อสู้เพื่ออำนาจสูงสุดอย่างไม่สิ้นสุดตั้งแต่ยังไม่ทราบ หลีกเลี่ยงไม่ได้ แม้แต่โปรแกรมเมอร์ที่เก่งที่สุดก็ยังตกเป็นเหยื่อของแมลง ไม่มีโค้ดใดปลอดภัยจากบั๊ก เราจึงทำการทดสอบ โปรแกรมเมอร์ อย่างน้อยก็เป็นคนมีเหตุผล ทดสอบโค้ดโดยรันบนเครื่องสำหรับการพัฒนาเพื่อให้แน่ใจว่าได้ทำในสิ่งที่ตั้งใจไว้ ตามเนื้อผ้า กรณีทดสอบถูกเขียนขึ้นหลังจากเขียนโค้ดแล้ว แต่ใน Test-driven Development จะมีการเขียนกรณีทดสอบอัตโนมัติก่อนที่จะเขียนโค้ดใดๆ เพื่อให้สามารถตรวจสอบการดำเนินการและการทดสอบได้พร้อมกัน
ในบทความนี้ เราจะมาพูดถึง Test-Driven Development ในเชิงลึกและทำไมมันถึงดีกว่าวิธีการแบบเดิมๆ!

สารบัญ
การพัฒนาที่ขับเคลื่อนด้วยการทดสอบคืออะไร?
Test-Driven Development ถูกสร้างขึ้นโดยเป็นส่วนหนึ่งของวิธีการ Extreme Programming (XP) และถูกเรียกว่าแนวคิด 'Test-First ' การพัฒนาที่ขับเคลื่อนด้วยการทดสอบทำให้คุณสามารถทดสอบโค้ดของคุณได้อย่างละเอียด และยังทำให้คุณสามารถทดสอบโค้ดของคุณซ้ำได้อย่างรวดเร็วและง่ายดาย เนื่องจากเป็นแบบอัตโนมัติ โดยพื้นฐานแล้ว ก่อนเขียนโค้ดใดๆ โปรแกรมเมอร์จะสร้างการทดสอบหน่วยก่อน จากนั้นโปรแกรมเมอร์ก็สร้างโค้ดที่เพียงพอสำหรับการทดสอบหน่วย เมื่อผ่านการทดสอบและปรับโครงสร้างโค้ดแล้ว โปรแกรมเมอร์สามารถดำเนินการปรับปรุงเพิ่มเติมต่อไปได้ การพัฒนาที่ขับเคลื่อนด้วยการทดสอบช่วยให้แน่ใจว่าโค้ดได้รับการทดสอบอย่างละเอียด ซึ่งจะนำไปสู่โค้ดแบบแยกส่วน ขยายได้ และยืดหยุ่นได้
ทุกครั้งที่มีการเพิ่มคุณสมบัติใหม่ จะต้องผ่านสิ่งที่เรียกว่า “วงจรชีวิต” ของ TDD มาพูดถึงวงจรชีวิตนี้กันดีกว่า
วิธีการเป็นนักพัฒนาเต็มกอง
วงจรการพัฒนาที่ขับเคลื่อนด้วยการทดสอบ
วงจรชีวิตการพัฒนาที่ขับเคลื่อนด้วยการทดสอบครอบคลุมทุกอย่างตั้งแต่การเขียนการทดสอบหน่วยเริ่มต้นไปจนถึงการนำโค้ดกลับมาใช้ใหม่
- เพิ่มการทดสอบ: ทุกฟีเจอร์ใหม่ต้องผ่านการทดสอบก่อนที่จะนำไปใช้ ข้อกำหนดที่จำเป็นสำหรับการเขียนแบบทดสอบคือการทำความเข้าใจข้อกำหนดทั้งหมดอย่างชัดเจน ทำได้โดยใช้กรณีการใช้งานและเรื่องราวของผู้ใช้
- เรียกใช้การทดสอบทั้งหมดและตรวจสอบการทดสอบสุทธิ: ดำเนินการเพื่อให้แน่ใจว่าการทดสอบของเราทำงานอย่างถูกต้อง โดยพื้นฐานแล้ว ระยะนี้มีจุดมุ่งหมายเพื่อตรวจสอบว่าการทดสอบไม่ผ่านการทดสอบโดยรหัสใดๆ ที่ไม่ตรงตามข้อกำหนด การทำเช่นนี้จะช่วยขจัดความเป็นไปได้ที่จะมีการทดสอบผิดพลาดในมือ
- เขียนโค้ด: เมื่อคุณมีการทดสอบแล้ว ขั้นตอนต่อไปที่ชัดเจนคือการเขียนโค้ดเพื่อล้างการทดสอบ รหัสนี้ไม่จำเป็นต้องสมบูรณ์แบบในทุกด้าน แต่ต้องเคลียร์การทดสอบ เมื่อเราแน่ใจว่าโค้ดนี้ล้างการทดสอบแล้ว ก็สามารถแก้ไขได้ตามข้อกำหนด
- เรียกใช้การทดสอบ: เมื่อเขียนโค้ดแล้ว ก็ถึงเวลาดูว่าโค้ดผ่านการทดสอบหรือไม่ หากรหัสของคุณผ่านการทดสอบ แสดงว่ารหัสของคุณตรงตามข้อกำหนดจนถึงปัจจุบัน
- Refactor the code: การดำเนินการนี้ทำขึ้นเพื่อล้างโค้ด การปรับโครงสร้างใหม่ไม่ก่อให้เกิดความเสียหายต่อฟังก์ชันการทำงานใดๆ เป็นเพียงการทำความสะอาดโค้ดโดยลบการซ้ำซ้อนระหว่างโค้ดทดสอบและโค้ดการผลิต
- ทำซ้ำ: รอบนี้ซ้ำแล้วซ้ำอีกด้วยการทดสอบใหม่เพื่อเพิ่มฟังก์ชันการทำงานมากขึ้น แต่ละฟังก์ชันจะผ่านวงจรเดียวกัน โดยพื้นฐานแล้ว ขนาดของขั้นตอนไม่ควรเกิน 1-10 แก้ไขระหว่างการทดสอบแต่ละครั้ง หากโค้ดไม่ผ่านการทดสอบอย่างรวดเร็ว ผู้พัฒนาต้องเปลี่ยนกลับและไม่แก้ไขจุดบกพร่องมากเกินไป
ข้อดีและข้อเสียของ การพัฒนาที่ขับเคลื่อนด้วยการทดสอบ
การพัฒนาที่ขับเคลื่อนด้วยการทดสอบมีข้อดีบางอย่างที่ชัดเจนกว่าวิธีการทดสอบแบบเดิม ซึ่งส่วนใหญ่ใช้วิธีการทดสอบด้วยตนเอง อย่างไรก็ตามมันไม่ผิดพลาด เช่นเดียวกับเทคโนโลยีอื่น ๆ การพัฒนาที่ขับเคลื่อนด้วยการทดสอบก็มีข้อเสียเช่นกัน

มาดูประโยชน์ของ TDD โดยละเอียดกันดีกว่า:
- การเขียนการทดสอบขนาดเล็กช่วยให้มั่นใจได้ว่าโค้ดของคุณเป็นแบบโมดูลาร์ การฝึก TDD จะช่วยให้คุณเข้าใจหลักการพื้นฐานของการออกแบบโมดูลาร์ที่ดี
- TDD ให้ความกระจ่างระหว่างการนำโค้ดของคุณไปใช้ ซึ่งช่วยให้เครือข่ายปลอดภัยในระหว่างขั้นตอนการปรับโครงสร้างใหม่
- เมื่อใช้ TDD การทำงานร่วมกันจะง่ายขึ้นมาก เนื่องจากตอนนี้ผู้คนสามารถแก้ไขโค้ดได้อย่างมั่นใจ เนื่องจากการทดสอบจะแจ้งให้ทราบหากการเปลี่ยนแปลงไม่ถึงเกณฑ์ของการทดสอบ
- พื้นฐานของ TDD คือการทดสอบหน่วย ด้วยเหตุนี้การปรับโครงสร้างใหม่จึงทำได้ง่ายกว่าและเร็วกว่ามาก การรีแฟคเตอร์โค้ดเก่าเป็นเรื่องที่ยุ่งยาก แต่ถ้าโค้ดได้รับการสนับสนุนจากการทดสอบหน่วย จะกลายเป็นเรื่องง่ายขึ้นมาก
- ช่วยในการชี้แจงข้อกำหนดทั้งหมดก่อนที่คุณจะเริ่มส่วนการเข้ารหัส วิธีนี้จะช่วยหลีกเลี่ยงความคลุมเครือที่อาจเกิดขึ้นในภายหลังได้
- การพัฒนาที่ขับเคลื่อนด้วยการทดสอบมุ่งเน้นไปที่การทดสอบขณะเขียน สิ่งนี้บังคับให้โปรแกรมเมอร์ทำให้อินเทอร์เฟซสะอาดพอที่จะผ่านการทดสอบ เป็นการยากที่จะเข้าใจข้อดีนี้จนกว่าคุณจะทำงานกับโค้ดที่ยังไม่ผ่าน TDD
- ข้อผิดพลาดโง่ ๆ ถูกจับได้เกือบจะในทันที ช่วยในการขจัดข้อผิดพลาดที่อาจเสียเวลามากหากพบใน QA
ตอนนี้ มาดูกันว่าข้อจำกัดของการพัฒนาที่ขับเคลื่อนด้วยการทดสอบมีอะไรบ้าง:
- ชุดทดสอบที่ใช้สำหรับการทดสอบจะต้องได้รับการบำรุงรักษา มิฉะนั้น การทดสอบอาจไม่สามารถกำหนดได้อย่างสมบูรณ์
- การทดสอบนั้นเขียนยาก – โดยเฉพาะอย่างยิ่งที่อยู่นอกเหนือขั้นตอนการทดสอบหน่วย
- TDD ชะลอความเร็วของการพัฒนา อย่างน้อยก็ในขั้นต้น
- เช่นเดียวกับการพัฒนารูปแบบใด ๆ มีความแตกต่างอย่างมากระหว่างการทำมันกับทำได้ดี การเขียนแบบทดสอบหน่วยที่ดีต้องมีระดับความเชี่ยวชาญพิเศษ
- เป็นการยากที่จะใช้วิธีนี้กับโค้ดเดิม (ที่มีอยู่)
- TDD ต้องการให้คุณดำเนินการทำความสะอาดตามปกติ จำเป็นต้องปรับแต่งการทดสอบเพื่อให้ทำงานเร็วขึ้น
- มันง่ายที่จะฟุ้งซ่านจากฟีเจอร์แฟนซีในเฟรมเวิร์กการทดสอบหน่วยใดๆ แต่ควรจำไว้ว่าการทดสอบอย่างง่ายมักจะให้ผลลัพธ์ที่ดีที่สุด
- เว้นแต่ทุกคนในทีมจะรักษาการทดสอบของตนไว้อย่างถูกต้อง ทั้งระบบก็สามารถลดระดับลงได้อย่างรวดเร็ว
สรุปแล้ว…
การพัฒนาที่ขับเคลื่อนด้วยการทดสอบเป็นหนทางสู่อนาคตของการพัฒนาแอปพลิเคชัน มีเฟรมเวิร์กการทดสอบอัตโนมัติจำนวนมาก เช่น PHPUnit, Serenity, Robot, RedWoodHQ และอื่นๆ อีกมากมาย เลือกอันที่เหมาะกับความต้องการของคุณและเริ่มต้นสร้างแอปพลิเคชันที่บำรุงรักษาได้ดียิ่งขึ้นในเวลาไม่นาน!
ลงทะเบียนเรียนหลักสูตรวิศวกรรมซอฟต์แวร์จากมหาวิทยาลัยชั้นนำของโลก รับโปรแกรม PG สำหรับผู้บริหาร โปรแกรมประกาศนียบัตรขั้นสูง หรือโปรแกรมปริญญาโท เพื่อติดตามอาชีพของคุณอย่างรวดเร็ว
