วันนี้ทำการ review test case ของระบบ
มีทั้ง unit, integration, component และ end-to-end test
แล้วก็เจอ test case แปลก ๆ ที่คิดว่าไม่น่าจะดี
จึงสรุปไว้นิดหน่อย

ปัญหาแรก Test ผ่าน เมื่อมีการเปลี่ยนแปลงขึ้นมา !!

เมื่อมีการเปลี่ยนแปลง requirement และ code แล้ว
ผลที่ได้คือ test case ดันทำงานผ่านซะงั้น
นั่นหมายความว่า test case ที่เรามีนั้น
มันไม่ครอบคลุมเพียงพอ หรือ ไม่น่าเชื่อถือหรือไม่ ?

ปัญหาที่สอง ทำการ Fake dependency สำหรับ integration และ end-to-end test

เป็นผลมาจากปัญหาแรกด้วย
เพราะว่า มีการทำ fake พวก dependency ไว้เพียบ
ทำให้แทนที่จะติดต่อไปยังระบบปลายทางจริง ๆ กลับผ่าน fake ต่าง ๆ
มันช่วยให้ผ่านก็จริง แต่ใช้ผิดที่มันก็เป็นภัย

ปัญหาที่สาม แต่ละ test case เชื่อมต่อกันเป็นลูกโซ่มากเกินไป

แต่ละ test case ทำงานไม่จบในตัวเอง
แต่มีความสัมพันธ์กับ test case อื่น ๆ
ก็ให้เกิดปัญหาของการ run test ผ่านบ้างไม่ผ่านบ้าง
มันคือ flaky test ไหมนะ

เมื่อเกิดปัญหาขึ้นมา ก็ใช้การ retry test แทน
หรือมันช้ามาก ๆ ก็ตั้ง timeout นาน ๆ
แบบนี้มันดีไหมนะ ?

ปัญหาที่สี่ test case ไม่อธิบายว่า ทำอะไร ทดสอบอะไร เพื่ออะไร

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

ชุดการทดสอบ ควรช่วยบอกเราได้ว่า
มีปัญหาอะไรเกิดขึ้น อย่างทันท่วงที หรือแต่เนิ่น ๆ
รวมทั้งมีความน่าเชื่อถือด้วยเสมอ
ไม่ใช่มีเพียงเพื่อให้มีเท่านั้นนะ !!