Screen Shot 2559-02-14 at 12.32.58 PM
ผมเชื่อว่า Developer ทุกคนทำการทดสอบสิ่งที่ตัวเองสร้าง
แต่ Developer บางคนอาจจะไม่เขียน test ขึ้นมา (Manual test)
แต่ Developer หลายคนอาจจะเขียน test ขึ้นมา ( Automated test )
เพื่อทำการตรวจสอบสิ่งที่กำลังแก้ไข ว่าทำงานได้อย่างถูกต้อง
เพื่อทำให้มีความมั่นใจต่อระบบที่กำลังพัฒนา

แต่ปัญหาที่มักพบเจอมาก ๆ สำหรับ Testa ก็คือ

  • Developer มักจะไม่ค่อยสนใจ test มากเท่าไร
  • Developer มักจะไม่ทำการ refactor test เลย
  • Developer ไปสนใจเพียง production code เท่านั้น

สุดท้าย test มันกลับก่อให้เกิดปัญหาตามมา
ดังนั้น เรามา refactor test กันหน่อยดีไหม ?

1. จงจำไว้ว่า Test มันคือ code นะ

อย่าปล่อยให้ test มันเป็น code ชั้น 2 รองจาก production code
แต่ให้มองว่าเป็น production code ที่ต้องถูกส่งมอบด้วยเสมอ

มีคำพูดของคุณ Uncle Bob กล่าวไว้ว่า
The good tests are more valuable than production code

ดังนั้น test มันจึงมีความสำคัญอย่างมาก
อย่าปล่อยให้ test มันรกรุงรังนะครับ

2. Test ควรต้องอ่าน และ ทำความเข้าใจได้ง่าย

เช่นเดียวกับ production code นั่นคือ
เราไม่ได้เขียน code เพียงให้ computer เข้าใจและทำงานได้เท่านั้น
แต่เราเขียน code เพื่อให้คนอ่าน
แต่เราเขียน code เพื่อให้คนเข้าใจได้ง่าย
แต่เราเขียน code เพื่อคนอื่นที่จะเข้ามาดูแลรักษาต่อไป

ดังนั้น
เรื่องของการตั้งชื่อ test
เรื่องของการตั้งชื่อตัวแปร
เรื่องของการตั้งชื่อ method
ต้องใช้ชื่อที่สื่อสารได้ชัดเจน
ไม่ใช่ test 1, 2, 3, 4, 5 …

3. Test ควรต้องง่ายต่อการดูแลรักษา ทั้งการเพิ่ม แก้ไข และ ลบ

โดยปกติ
ถ้า production code มีการเปลี่ยนแปลงแล้ว
จะพบว่าต้องทำการแก้ไข test จำนวนมาก !!

ดังนั้น ปัญหามันจึงเกิด ?
บางคนอาจจะบอกว่า
ต้องใช้เวลาแก้ไข test มากกว่า production code เสียอีก !!
บางคนถึงกับลบ test ออกไปเลย !!

ดังนั้นถ้าต้องการลดเวลาในการแก้ไข
แสดงว่า test มันต้องแก้ไขง่ายนะสิ
แสดงว่า test มันต้องไม่ซับซ้อนนะสิ
แสดงว่า test มันต้องไม่มีเงื่อนไขที่เยอะนะสิ
แสดงว่า test มันต้องไม่มี loop ทำงานนะสิ
แสดงว่า test มันต้อง DRY (Don’t Repeat Yourself) นะสิ
แสดงว่า test มันต้องไม่ซ้ำซ้อนนะสิ ยุบไปเป็น method ซะ ใช่ไหม ?

Developer ลองกลับไปดู test ของระบบสิ

ว่าเป็นไปตาม 3 ข้อข้างต้นหรือไม่ ?
ถ้าไม่ ก็น่าจะต้องลงมือ refactor test ได้แล้ว
หรือต้องทำอะไรให้มันดีขึ้นแล้วนะ
สามารถทำได้ทั้ง manual test และ automated test

อย่าลืมว่า การ refactoring นั้น
ต้องทำทั้ง test และ production code เสมอ