เพิ่งคุยกับทีมที่นำ Test Automation มาใช้ในการพัฒนา Software
โดยข้อมูลที่ได้รับมาก็คือ
เราคงต้องเลิก หรือ ปิดการทำทดสอบแบบอัตโนมัติแล้ว
เพราะว่า การทดสอบมันไม่เสถียรเลย
ซึ่งจะนำมาใช้อีกครั้ง เมื่อทำการแก้ไขให้มันทำงานเสถียรก่อน !!
คำถามที่เกิดขึ้นมาทันทีก็คือ ปัญหาที่แท้จริงมันคืออะไรกันแน่ ?
เนื่องจากระบบงานต้องทำงานตลอด 24 ชั่วโมง
แน่นอนว่า ต้องมีคนคอย support ตลอดเวลา
บ่อยครั้งที่ระบบจะมีปัญหาช่วงกลางดึก (บ่อยมาก ๆ )
แถมชอบเกิดขึ้นช่วงวันหยุดอีกด้วย
สรุปได้เลยว่า งานแม่ง ….. มากมาย !!
ดังนั้นจึงนำเอา Test Automation มาช่วยทดสอบระบบทุก ๆ ชั่วโมง
ซึ่งเป็น Functional หรือ UI testing นั่นเอง
เพื่อช่วยตรวจสอบว่า
ระบบยังคงทำงานได้อย่างถูกต้องตามที่คาดหวังหรือไม่
แต่ว่ามีอยู่วันหนึ่งช่วงกลางดึก
Test Automation ทำการแจ้งบอกว่าการทดสอบมัน fail
แต่เมื่อทีม support เข้ามาตรวจสอบ
และทดสอบใช้งานระบบแล้ว พบว่าระบบไม่มีปัญหาแต่อย่างใด
ซึ่งเกิดเหตุการณ์แบบนี้บ่อยมาก ๆ
บรรดาหัวหน้าทีม และ manager ต่าง ๆ จึงสรุปปัญหาได้ดังนี้
- ระบบ Test Automation มันไม่เสถียร
- ระบบ Test Automation มันทำงานผิดพลาดตลอด
- มันไม่ยุติธรรมต่อทีม support ที่ต้องตื่นมาตรวจสอบปัญหาเหล่านี้ ทั้ง ๆ ที่มันไม่มีปัญหา
ทำให้ได้ข้อสรุปของการแก้ไขปัญหา คือ ปิดการทำงานของ Test Automation ซะเถอะ !!
แต่เดี๋ยวก่อนนะ เรามาหาความจริงกันหน่อยดีไหม ?
ระบบ Test Automation มันไม่เสถียร ?
จากการพูดคุยในรายละเอียดพบว่า
ใช้ Selenium WebDriver สำหรับการทดสอบ
โดยผลจากการทดสอบพบว่า
บางหน้าใช้เวลาในการดึงข้อมูลมาแสดงผลมากกว่า 10 วินาที !!
ซึ่ง Test Automation ที่สร้างไว้ก็รอไปเรื่อย ๆ
จนสุดท้ายก็ยังดึงข้อมูล และ แสดงผลไม่เสร็จ
คำถามที่เกิดขึ้นมาก็คือ
ปัญหาแบบนี้มันคือ Test Automation มันไม่เสถียร หรือ ระบบงานมันไม่เสถียรกันแน่ ?
ซึ่งข้อมูลที่ใช้มีทั้งรูปภาพที่ capture ไว้ พร้อม VDO
แต่ไม่นำมาใช้งาน และ นำมาวิเคราะห์กัน
คำถามที่ถามกลับไปยังทีมคือ
เรายอมรับให้ระบบงานใช้เวลาดึงข้อมูลนานเกิน 10 วินาทีกันเลยใช่ไหม ?
คำตอบที่ได้รับกลับมาก็คือ
ใช่แล้ว !!
ลองคิดดูสิว่า ลูกค้า หรือ ผู้ใช้งานระบบจะรอไหมนะ ?
อาจจะมีแต่น้อยหรือเปล่านะ
ปัญหาจริง ๆ ก็คือ
ระบบงานมันทำงานช้า ระบบงานมันดึงข้อมูลช้า
ดังนั้นได้เวลาแก้ไขปัญหาแล้วนะ
อย่าหนีปัญหากันสิ !!
ระบบ Test Automation มันทำงานผิดพลาดตลอด !!
ข้อมูลที่ได้รับมาก็คือ จะผิดพลาดประมาณ 1 ใน 10 ครั้งของการทดสอบ
ซึ่งผมสรุปได้เลยว่า มันไม่ได้ทำงานผิดพลาดบ่อยแบบที่ว่ากันนะ
โดยแนวทางการแก้ไขปัญหาแบบง่าย ๆ ที่เกิดขึ้นมา ประกอบไปด้วย
- เพิ่ม Timeout ไปสิ
- ใส่การ retry ไปสิ
แต่ลองคิดแบบใช้เหตุผลหน่อยสิ
เรากำลังจะแก้ไขปัญหา หรือ กำลังซ่อน หรือ เพิ่มปัญหาใหม่เข้ามายังระบบ
ลองคิดดูสิว่า
ตอนนี้ก็มี Timeout เป็น 10 วินาทีแล้ว
ระบบการทดสอบยังทำงานผิดพลาดเลยนะ
ยังจะเพิ่ม Timeout กันอีกหรือไง ?
หรือลองคิดดูสิว่า
ผู้ใช้งานจะทำการ retry ระบบที่มันช้า ๆ หรือไม่ ?
ถ้าไม่ ระบบการทดสอบต้องทำด้วยหรือ
ดังนั้นไปแก้ไขปัญหาที่ต้นเหตุได้แล้ว
มันไม่ยุติธรรมต่อทีม support ที่ต้องตื่นมาตรวจสอบปัญหาเหล่านี้ ทั้ง ๆ ที่มันไม่มีปัญหา
ตอบได้เลยว่า ใช่แล้ว
ไม่มีใครอยากตื่นกลางดึก
เพื่อมาแก้ไขปัญหาจากสิ่งที่ตนเองไม่ได้ทำหรอกนะ
แต่มันต้องทำ เพราะว่าเป็นงานที่ถูกจ้างมานั่นเอง
แน่นอนว่า มันทำให้สุขภาพย่ำแย่
มันทำให้เราโกรธ
แต่ควรไปลงที่ปัญหาจริง ๆ สิ ไม่ใช่ไปลงที่ Test Automation
ปัญหาจริง ๆ คืออะไรบ้าง ?
เขียน code ได้แย่
เขียน test ได้ห่วย
Server ห่วย
Network แย่
สุดท้ายแล้ว ก่อนจะเลิกใช้งาน Test Automation
ช่วยคิด วิเคราะห์ แยกแยะก่อนว่า
- วิธีการ และ เครื่องมือที่นำมาใช้สร้างนั้น มันเหมาะสม หรือ มีปัญหาหรือไม่ ?
- ต้องทำการพิสูจน์ให้ได้ว่า Test Automation มันแย่ หรือ ไม่แย่ ช่วย หรือ ไม่ช่วย ดี หรือ ไม่ดี ?
- ถ้า Test Automation มันทำงานถูกต้องของมันแล้ว ดังนั้น สิ่งต่อไปที่ต้องแก้ไขคือ การแก้ไขระบบ และ code นั่นเอง
- ทาง Manager ของคุณอาจจะไม่เห็นด้วยกับคุณ แต่สิ่งที่คุณทำได้ก็คือ นำข้อมูลต่าง ๆ ออกมาเพื่อสนับสนุนเหตุผลของคุณให้ได้มาก และ ดีที่สุด ว่าสาเหตุที่แท้จริงมันเกิดมาจากอะไร
สุดท้ายควรจะต้อง Test early, Test often นะครับ
เพื่อป้องกันไม่ให้เกิดเหตุการณ์แบบนี้กัน
หรือถ้าเกิดขึ้นเราจะรู้ได้ตั้งแต่เนิ่น ๆ ไม่ใช่มารู้กันบน production