อ่านบทความเรื่อง Test Desiderata ของคุณ Kent Beck
ซึ่งบทความนี้แปลง่าย ๆ คือ คุณสมบัติที่จำเป็นของ test นั่นเอง
โดยทำการสรุปไว้ 12 เรื่อง
จึงทำการแปลและสรุปตามความเข้าใจไว้นิดหน่อย
Isolated
ไม่ว่าลำดับการทดสอบจะเป็นอย่างไรก็ตาม
ผลการทดสอบยังคงเหมือนเดิม
นั่นหมายความว่า
แต่ละการทดสอบจะถูกแยกหรือควบคุม dependency ต่าง ๆ ได้
Composable
ถ้าผ่านข้อ Isolated มาได้แล้ว
ไม่ว่าจะจัดกลุ่มการทดสอบอย่างไร
ผลการทดสอบก็ยังคงเหมือนเดิม
Fast
การทดสอบต้องเร็ว
เพื่อให้เรารู้ผลกระทบได้อย่างรวดเร็ว
เพื่อทำให้เราสามารถทดสอบได้บ่อย ๆ
ถ้ามีปัญหาจะได้แก้ไขได้ทันที นั่นคือ fast feedback นั่นเอง
Inspiring
ถ้าชุดการทดสอบผ่านแล้ว
มันต้องช่วยเสริมสร้างกำลังใจและเพิ่มความเชื่อมั่นต่อระบบ
ในตรงนี้ เคยไหมที่ชุดการทดสอบผ่านทั้งหมด แต่เราก็ยังไม่เชื่อมัน ?
สิ่งที่ต้องตอบให้ได้คือ ทำไมถึงไม่เชื่อมั่น ?
เพื่อจะได้เพิ่มชุดการทดสอบต่อไปนั่นเอง
Writable
ชุดการทดสอบต้องเขียนได้ง่ายหรือใช้ค่าใช้จ่ายที่น้อยหรือถูก
เมื่อเทียบกับ code ที่ถูกทดสอบ หรือ production code นั่นเอง
ถ้าการเขียนชุดทดสอบยากมาก ๆ ก็น่าจะเป็นแนวทางที่ไม่ถูกต้อง
แต่ต้องเข้าใจก่อนว่า คำว่ายากหรือแพงมันคืออะไรกันแน่
เช่นเขียนไม่เป็นเลยยาก แบบนี้ก็ไม่น่าใช่นะ !!
Readable
ชุดการทดสอบต้องอ่านเข้าใจได้ง่าย ในมุมมองผู้ผู้อ่านนะ ไม่ใช่ผู้เขียน
Behavioral
ถ้ามีการเปลี่ยนพฤติกรรมการทำงานของ production code แล้ว
ชุดการทดสอบต้องโดนผลกระทบจากการเปลี่ยนด้วยเสมอ
นั่นคือผลการทดสอบต้องเปลี่ยนไปตามพฤติกรรมที่เปลี่ยนไป
Structure-insensitive
ถ้ามีการเปลี่ยนแปลงโครงสร้างการทำงานของ production code แล้ว
ชุดการทดสอบต้องไม่กระทบจากการเปลี่ยนแปลงด้วยเสมอ
นั่นคือผลการทดสอบต้องไม่เปลี่ยนแปลงไปตามโครงสร้างของ code ที่เปลี่ยนไป
การเปลี่ยนแปลงในรูปแบบนี้ มันคือการ refactoring ชัด ๆ
Automated
การทดสอบควรทำงานแบบอัตโนมัติทั้งหมด ไม่มีคนเข้าไปยุ่งเกี่ยว
Specific
การทดสอบควรมีความเฉพาะเจาะจงมาก ๆ
นั่นหมายความว่า
ถ้ามีชุดการทดสอบใดมีปัญหาแล้ว แต่รู้หรือเข้าใจทันทีว่า
มีปัญหาหรือต้นเหตุมาจากอะไรบ้าง
ไม่ต้องมานั่งเดา มา debug กันอีก
Deterministic
ถ้าไม่มีการเปลี่ยนแปลงใด ๆ เกิดขึ้นเลย ผลการทดสอบก็ต้องไม่เปลี่ยนเช่นกัน
Predictive
ถ้าการทดสอบผ่านทั้งหมดแล้ว
นั่นแสดงว่า product code ในขณะนั้น
เหมาะสมที่จะนำขึ้นไป deploy บน production ได้แล้ว
ปิดท้ายด้วย VDO อธิบายด้วย
ไปดูกันครับ ตัวอย่างใน VDO เป็นภาษา Ruby