Screen Shot 2558-05-20 at 10.45.22 AM
วันนี้ได้พูดคุยเรื่อง source code
พบว่าสามารถแบ่งออกเป็นได้หลายกลุ่ม
เช่น Good code, Bad code เป็นต้น
แต่เรามักแบ่งกลุ่มของ code จากความรู้สึกและประสบการณ์

บางคนก็บอกว่า code ที่พัฒนาด้วยแนวคิด TDD มันทำให้ code ดีนะ ?
บางคนก็บอกว่า code ที่พัฒนาด้วยแนวคิด TDD มันทำให้ code แย่นะ ?

ดังนั้นลองมาหาคำตอบกันดีกว่า …

Source code สามารถแบ่งกลุ่มได้ดังรูป

Screen Shot 2558-05-19 at 10.42.47 PM

คำอธิบาย
จะเห็นได้ว่าการเขียน code ตามแนวคิด TDD นั้น
มันก็ทั้ง code ที่ดี และ ไม่ดี นะ !!

อีกอย่างที่น่าสนใจ คือ
code ส่วนใหญ่มักจะไม่ดี และ ไม่เขียนตามแนวคิด TDD หรือ Test-first
code ส่วนนี้มันน่ากลัวมากๆ และ มีเยอะมากอีกด้วย !!

มาพูดถึง code ที่พัฒนาด้วยแนวคิด TDD

สิ่งที่ TDD มันสอนเรามีอะไรบ้าง ?

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

ผลที่ได้คือ code ที่แยกกันทำงานชัดเจน
รวมทั้งความซับซ้อนของ code น้อยลงไป

แต่ละ test case มันจะบอกและอธิบายว่า
ระบบ หรือ code ที่ต้องการนั้นมีพฤติกรรมการทำงานอย่างไร
ทำให้เราเห็นว่า code มีส่วนที่เกี่ยวข้องกันอย่างไร
หรือส่วนที่ dependency กันอย่างไร
ส่งผลให้เราต้องหาวิธีการแยกส่วนต่างๆ ออกจากกันให้ได้
ซึ่งมันนำไปสู่สิ่งที่เรียกว่า Test Double

TDD มันสอนให้เรารู้ว่า
เราจะทำการจัดการกับ exception หรือความผิดพลาดต่างๆ ได้อย่างไร
ลองกลับไปถามตัวเราเองหน่อยสิว่า
คุณทดสอบส่วนการทำงานที่ผิดพลาดอย่างไร ?

เราจะทำการแยกส่วนการทำงานต่างๆ ออกจากกันอย่างไร
ยิ่งถ้าระบบมีการทำงานหลายๆ layer แล้วด้วย
มันยิ่งท้าทายความสามารถในการออกแบบ !!

ที่สำคัญ ทำให้เรารู้ว่า ผู้ใช้งาน code จะใช้งานอย่างไร ง่ายหรือไม่
มากกว่าว่าจะสร้างมันขึ้นมาอย่างไร
เนื่องจาก test จะอธิบายการใช้งาน code นั่นเอง

บางครั้ง code ที่ได้ออกมานั้น อาจจะไม่ดีก็ได้
แต่เราได้เรียนรู้อะไรจากมันบ้างล่ะ ?
ซึ่งทำให้เราสามารถปรับปรุงให้ดีขึ้นได้ใช่ไหม ?

ดังนั้น TDD มันจึงสอนเรา และ เราได้เรียนรู้อะไรจากมันบ้าง
นั่นคือ เป้าหมายหลักเลยนะ
มิใช่เพียงดูผลจากการ run test เท่านั้น…

แต่ก่อนอื่นคุณต้อง ลงมือทำก่อนนะ !!

ถ้าไม่ฝึกฝนอยู่อย่างเสมอ ต่อเนื่อง และ ถูกต้อง
คุณก็จะไม่ได้เรียนรู้อะไรจากมันเลย

บางคนบอกว่ายาก
ผมตอบได้เลยว่าใช่แล้ว มันยาก
แต่ยาก กับ ไม่ลงมือทำ มันต่างกันนะครับ !!

ลองเลือกดูว่า code ที่คุณเขียนขึ้นมาจะให้อยู่กลุ่มไหน ?

Reference Website
Way to learn TDD

Tags: