Test Driven Development (TDD) คืออะไร

     Test-Driven Development (TDD) เป็นแนวทางในการพัฒนาซอฟต์แวร์ที่ให้ความสำคัญในการทดสอบ มีการตรวจสอบว่า Code ที่เราพัฒนาขึ้นมานั้นทำอะไร ตรงตาม Requirement หรือไม่ สาเหตุที่ต้องมี TDD นั้นเพราะ โดยทั่วไปแล้วเมื่อเราพัฒนาซอฟต์แวร์แล้วมักจะเกิดข้อผิดพลาดในการเขียนโปรแกรม โดยสาเหตุที่เกิดข้อผิดพลาดก็เพราะการเขียน Code ที่ไม่มีประสิทธิภาพพอ เช่น สร้างโปรแกรมไม่ตรงตาม Requirement เขียน Code อ่านยาก เขียน Code ซ้ำซ้อนกัน เป็นต้น ดังนั้นการนำ TDD มาช่วยในการพัฒนาซอฟต์แวร์จะช่วยลดข้อผิดพลาดลงได้ เพราะเวลา Developer พัฒนาซอฟต์แวร์นั้นจะต้องสร้าง Test Case ทดสอบกับ Code ที่กำลังเขียนอยู่ เช่น Developer กำลังพัฒนาโปรแกรมตัดเกรดอยู่ เมื่อเขียนเสร็จจะต้องทดสอบไปด้วยโดยการ Input ค่าต่างๆทุกกรณีลงไป เช่น คะแนน 79 = B+ และ 80 = A เป็นต้น



  • Test Fails ในขั้นตอนนี้ Developer จะเขียน Unit Test เพื่อสร้าง Test Case ตาม Requirement ของโปรแกรมก่อนที่จะมีการเขียน Code ของโปรแกรมจริง ในขั้นตอนนี้หากเรา Run หาผลลัพธ์จบพบว่ามันจะ Fail เพราะว่าเรายังไม่มีการ Code จริงๆ อย่างไรก็ตามขั้นตอนนี้จะเน้นการสร้าง Test Case ตาม Requirement เป็นหลัก
  • Test Passes ในขั้นตอนนี้จะเป็นการ Code โปรแกรมจริงๆ เมื่อเสร็จแล้วจะนำ Test Case ที่สร้างจากขั้นตอนก่อนหน้ามาทดสอบว่าผ่านหรือไม่ ซึ่งความคาดหวังคือต้องผ่านทุกกรณีหากมีกรณีไหนไม่ผ่านต้องแก้ไขจนกว่าจะผ่าน ดังนั้นการเขียน Code ของโปรแกรมจะทำตาม Test Case เป็นหลักหากทุกตัว Execute ผ่านก็จะหยุดเขียน Code
  • Refactor เมื่อ Run Code ผ่านแล้วขั้นตอนนี้เราก็จะมาพิจารณา Refactor Code คือจุดไหนที่ Code อ่านยากหรือมีแนวโน้มทำให้เกิด Bug ก็ Refactor ให้ดีขึ้น เช่น ลดความซับซ้อนของ Code เขียนให้อ่านง่านขึ้น มี Comment เพื่อให้คนอื่นสามารถเข้าใจ Code และปรับ Code ให้มี Performance ให้ดีมากขึ้น เมื่อปรับแต่ง Code เสร็จแล้วก็ทำซ้ำในขั้นตอนแรกไปเรื่อยๆกลายเป็น lifecycle ของ TDD ขึ้นมา

การเขียน Code ที่ดีควรคำนึงอะไรบ้าง

  • ใช้งานได้: เป็นหัวใจสำคัญสำหรับการเขียน Code เลยเพราะโปรแกรมต้องใช้งานได้และตรงตาม Requirement
  • ง่ายต่อการอ่าน: การเขียน Code ให้อ่านง่าย เช่น การตั้งชื่อตัวแปร การตั้งชื่อ method และ Class เป็นต้น การทำให้ Code อ่านง่ายจะเป็นประโยชน์ทั้งตัวเราเองเพราะบางครั้งการกลับมาเขียนใหม่ก็มักจะลืม Feature เก่าๆที่เขียนไปแล้ว หรือจะเป็นประโยชน์ต่อคนอื่นที่จะพัฒนา Code ต่อจากเราด้วย
  • งดเขียน Code ที่ซ้ำซ้อน: เช่น การ Copy paste มาใช้จะทำให้เกิดความซ้ำซ้อน แก้ไขยากและอาจทำให้เกิด Bug ได้ง่าย
  • Code ต้องทดสอบได้: Code ที่เราเขียนควรจะทดสอบได้เพราะทำให้มั่นใจเรา Deploy ไปแล้วจะไม่เกิดปัญหา Unit Test เป็นการทดสอบที่ดีในระดับ Code ทำให้เราเจอข้อผิดพลาดและแก้ไขได้อย่างรวดเร็ว
  • มีประสิทธิภาพ: Code ที่สร้างขึ้นมานั้นนอกจากสามารถใช้งานได้ตาม Requirement แล้วยังต้องประสิทธิภาพสูง คือใช้ทรัพยากรน้อย เช่น CPU Memory เป็นต้น

การประยุกต์ TDD ใน Agile

     ปัจจุบันหลายบริษัทนิยมใช้ Process Model แบบ Agile ในการพัฒนาซอฟต์แวร์ TDD เป็นกระบวนการที่สามารถนำไปประยุกต์ใช้กับ Agile ได้จาก Concept ที่ว่า การสร้างซอฟต์แวร์ที่สามารถนำไปใช้งานได้จริงมากกว่าเอกสาร (Working software over comprehensive documentation)

1. การใช้ Agile มาเป็น Model ในการพัฒนาซอฟต์แวร์นั้นย่อมมีโอกาสสูงที่จะมีการเปลี่ยนแปลง Requirement จากลูกค้าอยู่บ่อยครั้ง ซึ่งการนำ TDD เข้ามาประยุกต์ใช้ใน Agile นั้นย่อมเป็นผลดีเพราะหากมีการเปลี่ยนแปลงใหม่เกิดขึ้นก็ต้องสร้าง Test Case ขึ้น ซึ่งทำให้เราทราบ feedback จากซอฟต์แวร์ได้อย่างรวดเร็ว
2. Agile นั้นเป็น Process Model ที่พร้อมที่จะรองรับการเปลี่ยนแปลงส่วน TDD นั้นจะช่วยให้คุณภาพของ​ซอฟต์แวร์ดีขึ้น ดังนั้นเมื่อประยุกต์ทั้ง 2 อย่างมาใช้ด้วยกันจะทำให้การส่งมอบซอฟต์แวร์ตรงความต้องการอย่างรวดเร็วและมีคุณภาพ
3. จาก TDD เราสามารถสร้าง Test Script ได้ก่อนที่จะพัฒนาซอฟต์แวร์ หากใน Sprint เราเขียน Code เสร็จไว เราก็สามารถหยิบ Story อื่นใน Backlog มาได้ โดยเริ่มจากพัฒนา Test Case ของ TDD ก่อน

ประโยชน์ของ TDD

  • มั่นใจได้ว่าระบบจะสามารถทำงานได้ตาม Requirement เพราะจะต้อง Code ตาม Test Case ที่สร้างไว้ ซึ่ง Test Case ก็ถูกสร้างตาม Requirement นั้นเอง
  • เขียน Code เท่าที่จำเป็น เนื่องจากจุดประสงค์หลักของ TDD นั้นต้องการให้ Test Case ทั้งหมด Run ผ่านดังนั้นก็เป็นการลดการเขียน Code ส่วนที่ไม่จำเป็นออกไปได้
  • ช่วยลด Defect และ Effort ในการ Development ได้
  • ช่วยลดความซับซ้อนของ Code และช่วยให้ Code อ่านได้ง่ายขึ้นเพราะมี Phase ที่ Refactor อยู่ตลอดเวลา

ป้ายกำกับ

แสดงเพิ่มเติม

บทความยอดนิยม

Software Development Life Cycle (SDLC) คืออะไร ทำไมจำเป็นต่อการพัฒนาซอฟต์แวร์

Automation testing หรือ การทดสอบซอฟต์แวร์อัตโนมัติ คืออะไร ทำไมถึงสำคัญต่อการทดสอบซอฟต์แวร์

วิธีเก็บ วิเคราะห์ รวบรวม requirement อย่างไรให้มีประสิทธิภาพ

ม.ปลายอยากเข้าสายคอม วิทยาการคอม วิศวกรรมคอม เตรียมตัวอย่างไร ต้องมีพื้นฐานอะไรบ้าง

Performance Test คือ อะไร วัดประสิทธิภาพของระบบ ล่มไม่ล่ม จะรู้ได้อย่างไร

ถอดรหัสความลับเครื่อง Enigma จุดเริ่มต้นและจุดจบของสงครามโลกครั้งที่ 2

วิเคราะห์เทรน แนวโน้มของเทคโนโลยีด้วย Gartner Hype Cycle

Data Privacy คืออะไร ข้อมูลส่วนบุคคลนั้นสำคัญขนาดไหน

Fibonacci ความลับของตัวเลขทางคณิตศาสตร์สู่เครื่องมือวิเคราะห์หุ้น

Formal verification การหาข้อผิดพลาด การทดสอบ การทวนสอบ ขั้นสูง