Skip to content

Unit test และ Test-driven development (TDD)

รู้จัก Unit test / ทำไมต้องทำ Unit test

ผมเชื่อว่าหลายคนคงเขียน unit test กันอยู่แล้วหละ (ใครยังไม่เริ่มทำก็ควรเริ่มเลยครับ) เพราะการเขียน unit test เป็นการควบคุมคุณภาพของซอฟต์แวร์คืออย่างน้อยก็เป็นสบายใจได้ว่าฟังก์ชันนั้น คลาสนั้น เมธอดนั้นซึ่งเป็นส่วนประกอบเล็กๆ ของซอฟต์แวร์จะทำงานได้ถูกต้อง (ณ environment นั้นๆ)

เพื่อหลีกเลี่ยงความยุ่งยากในการดีบั๊กและง่ายต่อการบำรุงรักษาโค้ด โปรแกรมสิ่งที่โปรแกรมเมอร์ (ที่ดี) ควรทำคือพยายามเขียนแต่ละส่วนของซอฟต์แวร์ ให้เล็กที่สุดและทำงานได้อย่างถูกต้อง ทำเพิ่มทีละน้อยแล้วเทสบ่อยๆ แทนการทำไปเยอะๆ แล้วค่อยมาเทสทีหลังเพราะมันดีบั๊กยาก

Test-driven development คืออะไร?

ปกติ cycle ของการพัฒนาซอฟต์แวร์ที่เราคุ้นเคยกันดีคือ

  1. เริ่มเขียนโปรแกรม
  2. เทสโปรแกรม
  3. รันโปรแกรม
  4. ดูว่าทำงานถูกหรือไม่
  5. แก้โปรแกรมให้ทำงานให้ถูก

ทำวนไปเรื่อยๆ จนกว่าจะได้โค้ดที่ทำงานได้ถูกต้อง เป็นการทำงานแบบ top-down จากบนลงล่าง แต่ TDD จะต่างออกไปคือ

  1. เขียนเทสของโปรแกรมก่อน
  2. รันเทสเพิ่มดูว่ามัน fail ตรงไหนบ้าง
  3. เริ่มเขียนโปรแกรม
  4. รันเทสอีกครั้งว่าทำงานถูกหรือไม่
  5. แก้โค้ดจนทำงานถูกต้อง

TDD เป็นการทำงานแบบ bottom-up จากข้างล่างขึ้นไปข้างบนนั่นเอง

ทำไมถึงควรทำ Test-driven development

หลายคน (รวมทั้งผมเอง) แต่ก่อนเวลาจะพัฒนาซอฟต์แวร์ก็ลงมือเขียนเลยแล้วค่อยมาเทสทีหลังแล้วก็มักเจอปัญหาว่าพอทำไปเรื่อยๆ ความคิดเกิดบานปลายเขียนโค้ดส่วนเกินขึ้นมาเยอะแยะแต่โค้ดส่วนนั้นกลับไม่ได้ถูกใช้เลยซึ่งการที่มีโค้ดที่ไม่จำเป็นเพิ่มขึ้นโอกาสที่จะมีบั๊กก็เพิ่มขึ้นด้วย จนมีคนกล่าวติดตลกว่า

“ถ้าการดีบั๊กคือการเอาบั๊กออกไป การเขียนโปรแกรมก็คือการเพิ่มบั๊กนั่นแหละ”

การทำ TDD จะช่วยให้เราเขียนโค้ดเท่าที่จำเป็นเอาแค่ให้เทนผ่านก็พอ เมื่อโฟกัสเฉพาะสิ่งที่จำเป็นต้องทำเวลาในการพัฒนาก็จะสั้นลงไปด้วย ซึ่งเหตุผลนี้ก็คงเพียงพอแล้วที่เรา “ควร” ทำ TDD

สรุป

แล้วถ้าไม่ทำ TDD ล่ะ ได้ไหม? แน่นอนว่าไม่ทำก็ได้ครับ ไม่บาป แล้วแต่คนชอบครับ บางคนอาจจะชอบ top-down บางคนอาจจะชอบ bottom-up ไม่เหมือนกัน การทำ TDD ก็เป็นเพียงวิธีการหนึ่งในการพัฒนา software เท่านั้น ไม่ได้เป็นการการันตีว่าโปรแกรมจะไม่มีบั๊กและไม่ได้การันตีว่าโปรแกรมจะมีคุณภาพมากกว่า เพราะสุดท้ายก็อยู่ที่คนอยู่ดี (อ้าว!) แต่ถ้ามันทำให้เราได้โฟกัสแล้วเขียนโค้ดเท่าที่จำเป็น แก้โค้ดแล้วรู้ว่าพังตรงไหนบ้าง? ก็ดีกว่าไม่ใช่เหรอ ดังนั้นทำเถอะครับ

สุดท้ายแล้วอยากบอกว่า …

Dominic

“เราบังคับให้ใครทำ TDD ไม่ได้หรอก” — Dominic Toreto ไม่ได้กล่าวไว้

ที่มาของรูปจาก http://fastandfurious.wikia.com

Be First to Comment

Leave a Reply

Your email address will not be published.