Screen Shot 2558-06-27 at 3.24.50 PM
เขาบอกไว้ว่าคุณค่าจาก การออกแบบที่มันทดสอบได้ง่าย (Testable design)
มันจะส่งผลให้ code ที่สร้างมานั้น ดีขึ้นกว่าเดิม
ดังนั้น เรามาดูหน่อยกันหน่อยสิว่า
Testable design มันเป็นอย่างไร รวมทั้งมีแนวคิดต่างๆ อย่างไร ?

Testable design คืออะไร ?

คุณ Roy Osherove
ผู้เขียนหนังสือ The art of unit testing with example in .Net กล่าวไว้ว่า

“a given piece of code should be easy and quick to write a unit test against”

ในแต่ละส่วนของ code มันควรจะสามารถเขียน unit test เพื่อทดสอบได้ง่าย และ รวดเร็ว
นั่นหมายความว่า code ที่มัน testable design นั้น
จะง่ายต่อการสร้าง object
จะง่ายต่อการ implement
จะง่ายต่อการจำลองเหตุการณ์ต่างๆ เพื่อทดสอบ
จะง่ายต่อการเรียกใช้งาน

ดังนั้น software ที่เราสร้างขึ้นมานั้น
ควรที่จะทำการทดสอบได้ง่าย (Testability)

คำถาม :: เราจะออกแบบอย่างไรดีล่ะ ?

วิธีการที่เรามักได้ยิน หรือ ถูกบอกต่อมาอย่างยาว
นั่นก็คือ ออกแบบในรูปแบบ Modular สิ

แล้วไอ้ Modular มันคืออะไรล่ะ ?

มันการแยกส่วนการทำงานที่ต่างกัน ออกจากกัน
โดยแต่ละดลุ่มเรียกว่า module

ทำให้แต่ละ module มีหน้าที่การทำงานอย่างใดอย่างหนึ่ง
ไม่ใช่ทำงานแบบมากมายมหาศาล
ทำให้ระบบงานมีความยืดหยุ่นสูงมาก
รวมทั้งดูแลรักษาง่ายอีกด้วย

เมื่อเราออกแบบระบบให้มีความยึดหยุ่นแล้ว
มันจะส่งผลต่อ code ด้วยเช่นกัน
นั่นคือ จะลด dependency ต่างๆ ออกไปเยอะ
ยิ่ง dependency ระหว่าง module ด้วย ก็จะลดไปได้มาก
แสดงดังรูป
Screen Shot 2558-06-27 at 3.11.37 PM

โดยการออกแบบแบบ modular นั้น

เป็นแนวทางหนึ่งสำหรับการสร้างระบบให้ทดสอบได้ง่าย
แน่นอนว่า ส่งผลต่อ code ก็เช่นเดียวกัน

แต่แนวทางนี้มันเป็นเพียง แนวคิด ที่ไม่สามารถจับต้องได้
ดังนั้น เรามาลองศึกษาวิธีการที่สามารถจับต้อง และ เข้าถึงได้ง่าย
ตลอดจนสามารถนำไปใช้งานได้เลยดีกว่า …

ซึ่งจะนำมาอธิบายใน blog ต่อไปครับ …

อย่าลืมว่า
การออกแบบที่ดี คือ มันจะต้องง่ายต่อการเรียนรู้ นะครับ