Screen Shot 2557-04-11 at 4.53.33 PM

จาก Agile Manifesto ข้อที่ 4

Responding to change over following a plan

ในการพัฒนา software นั้น มักจะเจอกับปัญหา requirement เปลี่ยนแปลงอยู่ตลอดเวลา
ซึ่งถือเป็นเรื่องปกติอยู่แล้ว ดังนั้นไม่ว่าคุณจะทำดีเพียงใด ก็มีการเปลี่ยนแปลงอย่างแน่นอน

แล้วในฐานะนักพัฒนา software
เรามีวิธีการรับมือกับการเปลี่ยนแปลงต่างอย่างไรดี ??

โดยแนวปฏิบัติ หรือ เทคนิค ที่นำมาใช้เหล่านั้น
ต้องช่วยทำให้ระบบโตไปอย่างยั่งยืน และรองรับการเปลี่ยนแปลงที่ไม่คาดคิดได้

ปัญหาแรกที่มักเจอกันก็คือ การ regression testing ระบบ
หลังจากทำการเพิ่ม หรือ แก้ไขระบบในส่วนต่างๆ
โดยไม่ให้ไปกระทบต่อการทำงานในส่วนอื่น
แต่ในระบบส่วนใหญ่ มักจะใช้การทดสอบแบบ manual ซึ่งไม่น่าจะใช่สิ่งที่ดีนะ !!
ดังนั้นจึงเป็นที่มาของ automated test ทำให้เราลด cost ลงไปมาก

ปัญหาที่สองคือ ระบบที่พัฒนามีความซับซ้อนอย่างมาก
เช่นการแบ่ง layer การทำงานมากมาย เป็นต้น
ดังนั้นสิ่งที่เราต้องการคือ code ที่มันเรียบง่าย
ส่งผลให้ระบบมีรูปแบบที่เรียบง่าย ทำให้ง่ายต่อการพัฒนา
ดูแลรักษา และติดตั้ง

สิ่งที่น่าคิด
ทีมพัฒนามักจะใช้เวลาในการอ่าน code มากกว่าการเขียน code
ดังนั้นเราควรที่จะปรับปรุงในจุดนี้ให้ดีขึ้น ด้วยวิธีการต่างๆ

โดยหนึ่งในนั้นคือการ refactoring code
เพื่อปรับปรุงโครงสร้างระบบให้ดีขึ้นเรื่อยๆ
ลดส่วนที่มันซ้ำซ้อนลงไป
เพื่อให้มั่นใจว่าสิ่งทำอยู่นั้น มันยังใช่อยู่

แต่จะมั่นใจได้อย่างไรว่า code ที่ทำอยู่มันยังถูกต้อง ?
ยิ่งทำการ refactoring แล้วยิ่งน่ากลัวใช่ไหม !!
ดังนั้นเราควรมีการเขียน test มาคลุม code ที่เราเขียนขึ้นมาด้วย
นั่นคือแนวคิด Test Driven Development (TDD)
ทำให้เรามี feedback loop ที่รวดเร็ว ว่าสิ่งที่เราทำถูกหรือผิด
ไม่ต้องมานั่งรอการทดสอบหลังจากที่พัฒนาทั้งระบบเสร็จ
ซึ่งมันเสียเวลาไปอย่างมาก และพบว่าส่วนใหญ่ทำแบบนี้ !!!

ดังนั้นถ้าเราทำการเขียนการทดสอบสำหรับทุกส่วนของระบบแล้ว
มันจะทำให้เรามั่นใจได้ว่าระบบเรายังคงทำการถูกต้องหรือไม่
สามารถทำการ automated regression test ได้เลย
และสามารถรับมือกับการเปลี่ยนแปลงต่างๆ ได้อีกด้วย

…. วันนี้คุณเขียน test ก่อน code จริงๆ แล้วหรือยัง ….

ปล. 
การทำ TDD, Automated testing ไม่ได้บอกว่า bug ต่างๆ จะหายไปนะครับ
แต่มันช่วยทำให้เรามั่นใจได้ว่าระบบยังสามารถทำงานได้
ตาม test ที่เราเขียนคลุมระบบงานเท่านั้น
ซึ่งตรงนี้ต้องพัฒนาและปรับปรุงไปอย่างต่อเนื่อง
แต่ถ้ามีบางสิ่งที่เราเขียนไม่คลอบคลุมก็ต้องเขียนเพิ่มไปเรื่อยๆ
เนื่องจากการพัฒนาพัฒนา software มันคือ กระบวนการของการเรียนรู้

 

Reference Websites
รูปนำมาจาก http://codevanced.net/