การพัฒนาที่ขับเคลื่อนด้วยการทดสอบคืออะไร: คู่มือสำหรับมือใหม่

เผยแพร่แล้ว: 2018-03-12

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

สารบัญ

การพัฒนาที่ขับเคลื่อนด้วยการทดสอบคืออะไร?

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

วงจรการพัฒนาที่ขับเคลื่อนด้วยการทดสอบ

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

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

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

    • เขียนโค้ด: เมื่อคุณมีการทดสอบแล้ว ขั้นตอนต่อไปที่ชัดเจนคือการเขียนโค้ดเพื่อล้างการทดสอบ รหัสนี้ไม่จำเป็นต้องสมบูรณ์แบบในทุกด้าน แต่ต้องเคลียร์การทดสอบ เมื่อเราแน่ใจว่าโค้ดนี้ล้างการทดสอบแล้ว ก็สามารถแก้ไขได้ตามข้อกำหนด

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

    • Refactor the code: การดำเนินการนี้ทำขึ้นเพื่อล้างโค้ด การปรับโครงสร้างใหม่ไม่ก่อให้เกิดความเสียหายต่อฟังก์ชันการทำงานใดๆ เป็นเพียงการทำความสะอาดโค้ดโดยลบการซ้ำซ้อนระหว่างโค้ดทดสอบและโค้ดการผลิต

  • ทำซ้ำ: รอบนี้ซ้ำแล้วซ้ำอีกด้วยการทดสอบใหม่เพื่อเพิ่มฟังก์ชันการทำงานมากขึ้น แต่ละฟังก์ชันจะผ่านวงจรเดียวกัน โดยพื้นฐานแล้ว ขนาดของขั้นตอนไม่ควรเกิน 1-10 แก้ไขระหว่างการทดสอบแต่ละครั้ง หากโค้ดไม่ผ่านการทดสอบอย่างรวดเร็ว ผู้พัฒนาต้องเปลี่ยนกลับและไม่แก้ไขจุดบกพร่องมากเกินไป
เหตุใดบริษัทต่างๆ จึงมองหาการจ้าง Full Stack Developers

ข้อดีและข้อเสียของ การพัฒนาที่ขับเคลื่อนด้วยการทดสอบ

การพัฒนาที่ขับเคลื่อนด้วยการทดสอบมีข้อดีบางอย่างที่ชัดเจนกว่าวิธีการทดสอบแบบเดิม ซึ่งส่วนใหญ่ใช้วิธีการทดสอบด้วยตนเอง อย่างไรก็ตามมันไม่ผิดพลาด เช่นเดียวกับเทคโนโลยีอื่น ๆ การพัฒนาที่ขับเคลื่อนด้วยการทดสอบก็มีข้อเสียเช่นกัน

มาดูประโยชน์ของ TDD โดยละเอียดกันดีกว่า:

    • การเขียนการทดสอบขนาดเล็กช่วยให้มั่นใจได้ว่าโค้ดของคุณเป็นแบบโมดูลาร์ การฝึก TDD จะช่วยให้คุณเข้าใจหลักการพื้นฐานของการออกแบบโมดูลาร์ที่ดี

    • TDD ให้ความกระจ่างระหว่างการนำโค้ดของคุณไปใช้ ซึ่งช่วยให้เครือข่ายปลอดภัยในระหว่างขั้นตอนการปรับโครงสร้างใหม่

    • เมื่อใช้ TDD การทำงานร่วมกันจะง่ายขึ้นมาก เนื่องจากตอนนี้ผู้คนสามารถแก้ไขโค้ดได้อย่างมั่นใจ เนื่องจากการทดสอบจะแจ้งให้ทราบหากการเปลี่ยนแปลงไม่ถึงเกณฑ์ของการทดสอบ

    • พื้นฐานของ TDD คือการทดสอบหน่วย ด้วยเหตุนี้การปรับโครงสร้างใหม่จึงทำได้ง่ายกว่าและเร็วกว่ามาก การรีแฟคเตอร์โค้ดเก่าเป็นเรื่องที่ยุ่งยาก แต่ถ้าโค้ดได้รับการสนับสนุนจากการทดสอบหน่วย จะกลายเป็นเรื่องง่ายขึ้นมาก

    • ช่วยในการชี้แจงข้อกำหนดทั้งหมดก่อนที่คุณจะเริ่มส่วนการเข้ารหัส วิธีนี้จะช่วยหลีกเลี่ยงความคลุมเครือที่อาจเกิดขึ้นในภายหลังได้

    • การพัฒนาที่ขับเคลื่อนด้วยการทดสอบมุ่งเน้นไปที่การทดสอบขณะเขียน สิ่งนี้บังคับให้โปรแกรมเมอร์ทำให้อินเทอร์เฟซสะอาดพอที่จะผ่านการทดสอบ เป็นการยากที่จะเข้าใจข้อดีนี้จนกว่าคุณจะทำงานกับโค้ดที่ยังไม่ผ่าน TDD

  • ข้อผิดพลาดโง่ ๆ ถูกจับได้เกือบจะในทันที ช่วยในการขจัดข้อผิดพลาดที่อาจเสียเวลามากหากพบใน QA

ตอนนี้ มาดูกันว่าข้อจำกัดของการพัฒนาที่ขับเคลื่อนด้วยการทดสอบมีอะไรบ้าง:

    • ชุดทดสอบที่ใช้สำหรับการทดสอบจะต้องได้รับการบำรุงรักษา มิฉะนั้น การทดสอบอาจไม่สามารถกำหนดได้อย่างสมบูรณ์

    • การทดสอบนั้นเขียนยาก – โดยเฉพาะอย่างยิ่งที่อยู่นอกเหนือขั้นตอนการทดสอบหน่วย

    • TDD ชะลอความเร็วของการพัฒนา อย่างน้อยก็ในขั้นต้น

    • เช่นเดียวกับการพัฒนารูปแบบใด ๆ มีความแตกต่างอย่างมากระหว่างการทำมันกับทำได้ดี การเขียนแบบทดสอบหน่วยที่ดีต้องมีระดับความเชี่ยวชาญพิเศษ

    • เป็นการยากที่จะใช้วิธีนี้กับโค้ดเดิม (ที่มีอยู่)

    • TDD ต้องการให้คุณดำเนินการทำความสะอาดตามปกติ จำเป็นต้องปรับแต่งการทดสอบเพื่อให้ทำงานเร็วขึ้น

    • มันง่ายที่จะฟุ้งซ่านจากฟีเจอร์แฟนซีในเฟรมเวิร์กการทดสอบหน่วยใดๆ แต่ควรจำไว้ว่าการทดสอบอย่างง่ายมักจะให้ผลลัพธ์ที่ดีที่สุด

  • เว้นแต่ทุกคนในทีมจะรักษาการทดสอบของตนไว้อย่างถูกต้อง ทั้งระบบก็สามารถลดระดับลงได้อย่างรวดเร็ว
วิธีประสบความสำเร็จในงานพัฒนาซอฟต์แวร์ครั้งแรกของคุณ

สรุปแล้ว…
การพัฒนาที่ขับเคลื่อนด้วยการทดสอบเป็นหนทางสู่อนาคตของการพัฒนาแอปพลิเคชัน มีเฟรมเวิร์กการทดสอบอัตโนมัติจำนวนมาก เช่น PHPUnit, Serenity, Robot, RedWoodHQ และอื่นๆ อีกมากมาย เลือกอันที่เหมาะกับความต้องการของคุณและเริ่มต้นสร้างแอปพลิเคชันที่บำรุงรักษาได้ดียิ่งขึ้นในเวลาไม่นาน!

ลงทะเบียนเรียนหลักสูตรวิศวกรรมซอฟต์แวร์จากมหาวิทยาลัยชั้นนำของโลก รับโปรแกรม PG สำหรับผู้บริหาร โปรแกรมประกาศนียบัตรขั้นสูง หรือโปรแกรมปริญญาโท เพื่อติดตามอาชีพของคุณอย่างรวดเร็ว

มาเป็นนักพัฒนาเต็มรูปแบบ

ประกาศนียบัตร PG ของ UpGrad และ IIIT-Bangalore ด้านการพัฒนาซอฟต์แวร์
Executive PG Program ในการพัฒนาซอฟต์แวร์จาก IITB