regression
เช้านี้อ่านเจอบทความเรื่อง What is Regression Testing ?
ทำการอธิบายเกี่ยวกับ Regression testing ว่าคืออะไร ?
มีเป้าหมายเพื่ออะไร ?
และจะลงมือทำการทดสอบเมื่อใด ?
จึงทำการสรุปการอ่านไว้นิดหน่อย

Regression Testing คืออะไร ?

เป็นการทดสอบชนิดหนึ่งใน Functional testing
ใช้สำหรับการตรวจสอบปัญหาที่เกิดขึ้นมาจาก
การเพิ่มหรือแก้ไข code ของระบบ
เพื่อหาว่าต้นเหตุของปัญหาอยู่ที่ไหน
เพื่อยืนยันว่าการเพิ่มหรือแก้ไขสามารถแก้ไขปัญหาได้
หรือไม่ส่งผลกระทบต่อการทำงานของระบบ

คำถามต่อมาคือ Functional testing มันคืออะไรล่ะ ?

เป็นการทดสอบ และ เป็นขั้นตอนที่ถูกสร้างขึ้นมาเพื่อ
ใช้ยืนยันว่าแต่ component ของระบบ
ทำงานร่วมกันได้อย่างถูกต้องตามความต้องการที่ตกลงไว้ร่วมกัน
โดยเน้นที่การทดสอบจาก interface ของระบบงาน
เพื่อทำให้มั่นใจว่าระบบงานนั้นสามารถทำงานได้อย่างเหมาะสมกับผู้ใช้งาน
เช่น
ถ้าเป็นระบบ Web application ก็เน้นไปที่ User Interface บน browser
ถ้าเป็นระบบ API ก็เน้นไปที่การใช้งานผ่าน API

Functional testing ประกอบไปด้วยการทดสอบชนิดต่าง ๆ ดังนี้

  • Smoke testing
  • Sanity testing
  • Integration testing
  • Acceptance testing
  • Regression testing

คำถามต่อมาคือ ทำ Regression testing ตอนไหน ?

Regression testing เป็นการทดสอบที่สำคัญมาก ๆ ของการพัฒนา software
จะลงมือทำเมื่อ

  • ทำการ release ระบบ หรือ feature ใหม่ ๆ
  • เมื่อทำการแก้ไขข้อผิดพลาดต่าง ๆ ที่สำคัญ

ถ้าจะให้ดีมาก ๆ ชุดการทดสอบของ Regression testing นั้น
ควรทำการทดสอบอยู่อย่างบ่อย ๆ
ควรทำการทดสอบอย่างรวดเร็ว
เพื่อทำให้เรารู้ปัญหาได้อย่างรวดเร็ว
เพื่อทำให้เราแก้ไขปัญหาได้อย่างรวดเร็ว

ถ้าจะให้ดีมากขึ้นไปอีก ให้เริ่มต้นทำตั้งแต่วันแรกของการพัฒนาเลย
เริ่มจากง่าย ๆ ก่อนเป็นดีที่สุด
บางคนอาจจะบอกว่า เป็นไปไม่ได้หรอก
แต่ผมขอแนะนำว่า ให้ลองทำเถอะนะ

คำว่าเป็นไปไม่ได้ มันคืออะไร ?
ไม่เคยทำ หรือ ทำไม่เป็น หรือ …
ดังนั้นลงมือทำเถอะครับ ถ้าไม่ลงมือทำสักทีจะทำเป็นหรือไง ?

เนื่องจากทุกการเปลี่ยนแปลงของระบบล้วนมีความเสี่ยง !!

ดังนั้นสิ่งที่นักพัฒนาต้องตอบให้ได้คือ

  1. สิ่งที่สร้างและแก้ไขไปนั้น มันทำงานได้อย่างถูกต้องหรือไม่ ?
  2. สิ่งที่สร้างและแก้ไขไปนั้น มันไม่ส่งผลกระทบต่อการทำงานในส่วนอื่น ๆ หรือไม่ ?

ยิ่งถ้าทีมพัฒนามีระบบพวก Continuous Integration และ Continuous Delivery ด้วยแล้ว
แนะนำให้นำเอา Regression testing เข้ามาอยู่ในระบบนี้เสมอ
เพราะว่าจะทำการทดสอบทุกครั้ง
เมื่อ code มีการเปลี่ยนแปลง
ซึ่งมันแจ่มมาก ๆ และควรทำอย่างแรงนะครับ
แสดงการทำงานดังรูป

what-is-regression-testing

สุดท้ายแล้ว ถ้าเราต้องการป้องกันความผิดพลาด

ก็ต้องทำการค้นหาความผิดพลาดให้รวดเร็วที่สุดนั่นเอง
เนื่องจากยิ่งค้นหาได้ช้า ค่าใช้จ่ายสำหรับการแก้ไขก็ยิ่งแพงนะครับ
และลด ละ เลิกการ debug เถอะนะ

หรือว่าคนจริงต้องแก้ไขข้อผิดพลาดบน Production กันนะ !!