ความเดิม
ความเดิมจากบทความที่ผมขอให้เพื่อนๆร่วมแชร์ประสบการณ์ว่าทำไม Automated Testing ล้มเหลวนั้น ต้องขอบคุณคุณ AMp และคุณ zyracuze ที่ช่วยออกความคิดเห็นที่ผมก็เห็นด้วยว่าเป็นสาเหตุที่สำคัญของความล้มเหลวที่เกิดขึ้นเลยหละครับ ผมเองก็รวบรวมข้อมูลจากแหล่งอื่นๆด้วยก่อนสรุปมาเป็น 4 สาเหตุสำคัญที่ทำให้ Automated Testing ล้มเหลวพร้อมทั้งแนวทางป้องกันปัญหา

1. หนุ่ม-สาว QA ไม่ใช่ Developer
คงไม่ใช่เรื่องยากเท่าไรที่จะเขียน Test Script ที่สั่งให้โปรแกรมเปลี่ยนจากหน้าหนึ่งไปอีกหน้าหนึ่ง หรือตรวจสอบดูว่ามีข้อความนี้อยู่บนหน้าจอหรือไม่ แต่มันไม่ง่ายเท่าไรครับในการที่จะเขียน Test Script ที่ฉลาดพอที่จะทดสอบ input ได้ทุกรูปแบบและวนไปทุก field ที่มีบนหน้านั้นๆ รวมไปถึงการเขียน Test Script ที่เื้อื้อต่อการ reuse และ maintenance ครับ
ซึ่งคุณ zyracuze ก็ได้แสดงความเห็นไว้อย่างชัดเจนครับว่า Programming Skills เป็นปัจจัยสำคัญที่จะช่วยให้ QA ทำ Automated Testing ได้สำเร็จครับ
แนวทางป้องกันปัญหา:
- หา Developer จริงๆมาเป็นพี่เลี้ยงในช่วงแรกๆเพื่อแนะนำให้ QA วางโครงสร้างของ Test Script ได้อย่างถูกต้อง (reusability และ maintainability)
- QA ที่รับผิดชอบ Test Script ควรจะมี Programming Skills ด้วย
- จัดเวลาให้ QA หาความรู้เิพิ่มเติมเกี่ยวกับ Programming Practices
2. Automated Test นั้นเปราะบาง
การดูแลรักษา (maintenance) Test Script นั้นเป็นงานที่เสียเวลามากเพราะว่า Automated Test Script นั้น “เปราะบาง” และ “โง่” ครับ การแก้ User Interface นิดเดียว เช่น ชื่อปุ่ม หรือ warning message อาจจะทำให้ Test ทั้งหมดของเรา Fail ได้เลยครับ ถ้าอยากจะใช้งานมันได้ต่อไป เราก็ต้องมาคอยแก้ Test Script เรื่อยๆ
นึกภาพว่า QA ต้องสร้าง Test Cases, เตรียม Test Scripts, ตรวจสอบผลการ Test, และแก้ Test Scripts ทุกครั้งที่ระบบมีการเปลี่ยนแปลง กระบวนการตรงนี้เสียเวลามากกว่าทำ Manual Testing แน่ๆครับ
แนวทางป้องกันปัญหา:
- แก้ไข Test Script ให้ตรงกับการทำงานจริงๆของระบบอยู่เรื่อยๆ พยายามฝึกให้เป็นนิสัยครับ มันง่ายกว่ามากที่เราจะแก้วันละ 1 Test เมื่อเทียบกับการรอให้เวลาผ่านไป 1 สัปดาห์แล้วค่อยมานั่งแก้ทีเดียวเป็น 10-20 Test ครับ
- ตกลงกับ Developer ว่ากรุณาอย่าแก้ Interface (ไม่ว่าจะเป็น User Interface หรือ API Interface) ทุกๆวัน … หรือถ้าจะแก้จริงๆก็ให้บอกกันก่อนครับ
3. Automated Test ที่ซับซ้อนและเกี่ยวพันกันมากเกินไป
เป็นเรื่องง่ายครับที่จะเขียนให้ 1 Automated Test Case สามารถตรวจสอบได้หลายๆ Feature ของระบบ แต่แย่หน่อยครับ…ทำไมหนะหรอ? หนึ่งเป็นเรื่องยากมากๆเลยที่จะดูแลรักษา Test Case ที่ว่านี้ถ้าระบบมีการเปลี่ยนแปลงบ่อยๆ สองถ้า Test Case นี้ fail มันจะยากมากขึ้นในการหาสาเหตุว่าทำไมถึง fail ครับ และสามมันจะกลายเป็นฝันร้ายเลยครับถ้าเราเขียน Automated Test Case ไปขึ้นกับ Test Case ก่อนหน้าและก่อนหน้าครับ
เหตุผลที่จุดนี้เป็นปัจจัยอีกอย่างที่ทำให้ Automated Testing ล้มเหลวก็เพราะว่าเราต้องเสียเวลาอย่างมากในการทำ maintenance, และการหา reproducing steps เมื่อ fail จนสุดท้ายกลับกลายเป็นว่าทำ Manual Testing คุ้มค่ากว่าครับ ดังนั้นเราจึงควรทำให้ Automated Test Case นั้นไม่ซับซ้อนและเป็นอิสระต่อกันให้มากที่สุดครับ มีคนพูดไว้ว่า “ถ้าคุณไม่สามารถอธิบายจุดประสงค์ของ Test Case ได้ด้วยคำ 5 คำหละก็ Test Case ของคุณซับซ้อนเกินไปแล้ว” Test Case ของเพื่อนๆตอนนี้ซับซ้อนเกินไปรึเปล่าครับ?
แนวทางป้องกันปัญหา:
- เขียน 1 Automated Test Case เพื่องาน 1 งานเท่านั้น ห้ามขาดห้ามเกิน
- เขียน Automated Test Case ให้เป็นอิสระต่อกัน นั่นจะทำใ้ห้เราสามารถ Run Test Case ไหนก็ได้และเมื่อไรก็ได้ ผลจะออกมา Pass หรือ Fail ก็จะไม่ขึ้นกับ Test Case อื่นๆด้วย
- แตก Feature ให้ย่อยๆลงมาเพื่อง่ายต่อการเขียน Test Case และเตรียม Test Data ไว้ให้แต่ละ Test Case เลย
4. Automated Test ที่ไม่ค่อยมีประโยชน์
ทั้งคุณ AMp และคุณ zyracuze มีความเห็นตรงกันว่าปัจจัยนี้เป็นหนึ่งในสาเหตุสำคัญที่ทำให้ Automated Testing ของเราล้มเหลวครับ ผมขอขยายความนิดนึงเกี่ยวกับคำว่า “ไม่่ค่อยมีประโยชน์” นั้นหมายถึงว่า เราไปทำ Automated Test Case สำหรับส่วนงานที่ไม่สำคัญ และไม่ถูก Retest บ่อยๆนั่นเองครับ
แนวทางป้องกันปัญหา:
- เลือก Test ในส่วนที่สำคัญก่อน ถ้ามีเวลาเหลือจริงๆค่อยมาพิจารณาส่วนอื่นๆ
- ต้องเตรียมแผนที่ชัดเจนเกี่ยวกับ Test Coverage
สรุป
ทั้ง 4 ข้อนี้คือสาเหตุหลักๆที่ทำให้ Automated Testing ล้มเหลวหรือไม่ประสบความสำเร็จตามที่เราคาดหวังไว้ครับ หวังว่าจะเป็นประโยชน์กับเพื่อนๆทุกคนที่สนใจหรือประยุกต์ใช้ Automated Testing อยู่นะครับ



