ในปัจจุบันมีการพูดถึง Automated test เยอะมากๆ
แต่การสร้าง Automated test สำหรับระบบที่มีอยู่แล้ว
หรือพัฒนากันมาอย่างยาวนาน มันจะยากลำบากมากๆ
เนื่องจากหลายๆ ทีมมักจะไม่ค่อยลงทุนกับมันเท่าไร
และมองว่าเราไม่มีเวลา หรือ ค่าใช้จ่ายเพียงพอ
หรือ บางทีมอาจจะบอกว่า ระบบงานของเราต้องทำการ Automated test ให้หมดเลย
ไม่มีการทำ manual test หรอกนะ
ซึ่งทั้งสองแนวคิดนั้น ไม่น่าจะใช่เรื่องที่ถูกต้องมากนัก
เมื่อเริ่มต้นพัฒนาระบบ
การทดสอบระบบแบบ manual test นั้นมันง่าย และ ใช้เวลาน้อยมาก
แต่เมื่อระบบเริ่มโตขึ้นเรื่อยๆ เวลาและความยากสำหรับการทดสอบแบบ manual ก็เพิ่งขึ้นเรื่อยๆ
จนกระทั่งการทดสอบทำได้ยาก และ กินเวลาสูงมาก
ทำให้การหาปัญหายากขึ้นมาก
ผลคือ การทดสอบแบบ manual นั้นมันไม่น่าจะเป็นวิธีการที่ยั่งยืนนะ
คำถาม
ดังนั้นในการทดสอบระบบควรเป็นอย่างไรล่ะ ?
คำตอบ
มันน่าจะ Automated test + Manual test ดีกว่าไหมนะ ?
ดังนั้นต้องเริ่มพิจารณา Atumated test กันได้แล้ว !!
ลองมาย้อนดูประวัติความเป็นมาของการพัฒนาระบบ
เริ่มต้นในการพัฒนา software เราจะเริ่มต้นการทดสอบแบบ manual
และเราก็มักจะคาดหวังว่าการทดสอบจะเป็นไปดังรูป ซึ่งสวยงามมากๆ
คำอธิบาย
ถ้า development ต้องใช้ effort ไปในการพัฒนา feature จำนวนเท่ากับ 10
ในการ test จะต้องใช้ effort ไปในการทดสอบ feature จำนวนเท่ากับ 5
และเรามักจะคิดว่ามันจะเป็นแบบนี้ไปเสมอ
แต่นั่นคือ การคิดที่ผิดพลาดอย่างแรง …
ปัญหาที่เกิดขึ้นมันเป็นอย่างไร ?
เขาบอกไว้ว่า 25% ของ defect ทั้งหลายมันจะมาจากการเปลี่ยนแปลง code และ แก้ไข bug
นั่นหมายความว่า software หรือ ระบบที่เราพัฒนานั้น
มันต้องมีการเปลี่ยนแปลง วิวัฒนาการ ของมันอยู่อย่างเสมอ
ดังนั้น เราต้องหาทางแก้ไขปัญหาที่เกิดจากข้างต้นลงไปให้ได้
เพื่อทำให้เราอยู่กับมันอย่างมีความสุขต่อไป
แต่บังเอิญว่า เรายังทำการทดสอบแบบ manual อยู่
ซึ่งแน่นอนว่ากำลังคน กำลังเงิน ก็มีเท่าเดิม
ยิ่งนับวันจำนวน feature ก็เยอะขึ้น
ยิ่งนับวันจำนวน bug ก็เยอะขึ้น
ยิ่งนับวันจำนวน defect ก็เยอะขึ้น
ยิ่งนับวันจำนวนการเปลี่ยนแปลงก็เยอะขึ้น
ส่งผลให้การ retest และ regression test มันทำได้ยากขึ้น
และทำให้มีส่วนที่ไม่ถูกทดสอบสูงขึ้น ดังรูป
การแก้ไขปัญหานี้มันง่ายมากๆ นั่นคือ
การเพิ่ม resource ไปสิคร้าบบบบบบ
แต่ในความเป็นจริงคุณไม่มีต้นทุนเยอะขนาดนั้น (ถ้าใครมีเงินเยอะก็ไม่น่าจะเป็นไรมั้ง)
ทำให้ทีมพัฒนา และ ทีมทดสอบ ก็ทำไปตามมีตามเกิด
ด้วยการทดสอบแบบ manual ต่อไป ผลมันก็เลยเป็นดังรูป
คำอธิบาย
ยิ่งนานวันยิ่งมี code หรือ ระบบงานที่ไม่ทำการทดสอบมากขึ้นเรื่อยๆ
นั่นคือเส้นทางที่คอยฆ่าเราๆ ท่านๆ อยู่
ทั้งในเรื่องของ productivity ที่จะตกลงไปอย่างมาก แตะอะไรตรงไหนพังไปหมด
ทั้งในเรื่องของการทำนาย วางแผนต่างๆ ทำไม่ได้เลย
เพราะว่า เมื่อมี defect/bug เข้ามา เราหามันยากมากๆ
บางครั้งมันก็ซ่อนตัวอยู่ในมุมมืดอีก
… มาถึงตรงนี้ก็เกิดปรากฏการณ์ไฟไหม้บ้านสิครับ ดับยังไงก็ดับไม่ได้ …
มาถึงตรงนี้แล้วเราจะสู้กับมันอย่างไรล่ะ ?
คำถาม
คุณคิดว่าคุณจะทนอยู่กับระบบที่มีแต่ defect/bug อย่างนี้ไปได้หรือ ?
คุณคิดว่าคุณจะทนอยู่กับระบบที่มีการทดสอบยาวนานอย่างนี้ไปได้หรือ ?
คุณคิดว่าคุณจะทนอยู่กับระบบที่มีการแก้ไข code อย่างนี้ไปได้หรือ ?
ถ้าคุณตอบว่า ไม่ …
แสดงว่าคุณยอมรับว่า วิธีการทดสอบแบบ manual ของคุณนั้นมันไม่ใช่แนวทางที่ยั่งยืนล่ะ
เพราะว่า ระบบที่สร้างมามันไม่ยั่งยืนเลยใช่ไหม !!!
ดังนั้นคุณจำเป็นต้องหาวิธีการอื่นๆ ในการทดสอบมาช่วยบ้างแล้ว
นั่นคือ การนำ Automated test มาใช้ร่วมกับ Manual test
เน้นวย้ำว่า การทดสอบแบบ manual ยังอยู่นะครับ
มันไม่ได้หายไปไหน แต่เพียงแค่ลดลง
เพื่อไปทดสอบในส่วนที่สำคัญๆ เท่านั้นเอง