Screen Shot 2559-02-18 at 8.13.07 PM
ก่อนจะมาเรียน Course The Whole Team Approach to Agile Testing ที่สิงคโปร์
สอนโดยคุณ  Janet Gregory ผู้ร่วมเขียนหนังสือ Agile Testing และ More Agile Testing

มีคำถามที่ถามตัวเองอยู่เสมอว่า Agile Testing มันคืออะไร ?
มันคือ methodology หรือ ระเบียบวิธี หรือ ขั้นตอนวิธีหรือไม่ ?
มันคือ กลุ่มของ principle หรือ แนวคิดหรือไม่ ?
มันคือ กลุ่มของ practice หรือ แนวปฏิบัติหรือไม่ ?
มันคือ framework หรือ กรอบของการทำงานหรือไม่ ?

เมื่อผ่านวันแรกของการเรียน
พบว่ามีรายละเอียดต่าง ๆ เยอะมาก
ซึ่งทำให้ตอบคำถามของตัวเองได้บ้างแล้ว

เริ่มจากเรื่องของ Agile ก่อน

มันประกอบไปด้วย 4 core value
มันประกอบไปด้วย 12 principle
ดังนั้น Agile ไม่ใช่ methodology อย่างแน่นอน

Extreme Programming หรือ XP Programming มันคือ
method หรือ framework หนึ่งในการพัฒนา software
แน่นอนว่า ต้องมีแนวคิดตาม Agile ทั้ง core value และ principle
และมีกลุ่มของ practice เฉพาะ เพื่อให้ปฏิบัติตาม

ส่วน Scrum มันคือ project management framework
ที่ปฏิบัติตามแนวคิดของ Agile เช่นเดียวกัน
ต่างจาก XP Programming ก็คือ กลุ่มของ practice เท่านั้นเอง

กลับมาที่ Agile Testing กันบ้าง มีความหมายอย่างไร ?

ถ้าแปลกันตามตรง ก็สามารถตีความได้สองแบบ คือ

  1. การทดสอบ Agile project นะสิ เป็นสิ่งที่คนส่วนใหญ่คิด
  2. การทำให้การทดสอบใน project อะไรก็ได้ มีความเป็น Agility หรือ กระฉับกระเฉง ว่องไว

ซึ่งไม่มีข้อใดผิด
แต่ Agile Testing ไม่ใช่ methodology อย่างแน่นอน

เนื่องจาก Agile Testing มันคือ แนวทางหนึ่งของการการทำงาน
เนื่องจาก Agile Testing มันคือ แนวทางหนึ่งของการทดสอบระบบ
เนื่องจาก Agile Testing มันคือ กระบวนการคิด
สามารถนำไปใช้ในวิธีการพัฒนาแบบไหนก็ได้
ไม่ว่าจะเป็น Agile, Scrum, Kanban และ XP Programming

เนื่องจาก Agile Testing มันคือ การพูดคุย และ ทำงานร่วมกันของ Whole Team หรือ Delivery team
โดยการทดสอบนั้นจะเป็นกิจกรรม (Activity) ที่เกิดขึ้นขึ้นตลอด
มิใช่เป็น phase หรือ แยกทีมไปทดสอบอีกแล้ว

เนื่องจาก Agile Testing เน้นในเรื่องของการป้องกันไม่ให้เกิด defect หรือ ข้อผิดพลาดเกิดขึ้น
มิใช่การค้นหา defect ให้ได้มากที่สุด
ดังนั้นเรื่อง mindset สำคัญอย่างมาก
จะต้องทำการปรับเปลี่ยนด้วยทั้งตัวเราเอง ทีม และ องค์กร
เนื่องจากเมื่อใดก็ตาม มีการจับวัดด้วยตัวเลขแล้ว
วิธีการทำงานของคนเราจะเปลี่ยนไปทีนที
ซึ่งมันไม่ใช่แนวทางการทำงานที่ดีเลย

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

โดยขั้นตอนการแก้ไข defect ที่ดีเป็นดังนี้

  1. เมื่อเจอ defect ให้ทำการเขียนชุดการทดสอบเพื่อให้เกิด defect นั้นจริง ๆ
  2. ทำการแก้ไข
  3. ทำการทดสอบด้วยชุดการทดสอบที่สร้างขึ้นมา (ได้ชุดของ Automate test มาแล้ว)
  4. ถ้าผ่านทั้งหมดแล้ว ให้ลืม defect นั้นไปซะ เพราะว่า มีชุดการทดสอบครอบคลุมไว้แล้ว เอาเวลาไปคิดอย่างอื่นที่มีประโยชน์ดีกว่านะ

เนื่องจาก Agile Testing เน้นเรื่องการทำงานร่วมกันของทีม
และร่วมกันสร้าง automate regression test ขึ้นมา
เพื่อทำให้ทีมรับรู้ feedback ของการทำงานได้อย่างรวดเร็ว (Fast Feedback)
มันทำให้ทีมสามารถรับรู้ถึงปัญหา และ ทำการแก้ไขได้อย่างรวดเร็ว
และพร้อมรับต่อการเปลี่ยนแปลงอีกด้วย

เมื่อทีมทั้งหมดทำงานร่วมกัน
สิ่งที่สมาชิกทุกคนในทีมต้องรู้คือ การ testing จะต้องมาคู่กับการ coding เสมอ
นั่นหมายความว่า งานที่เสร็จ (Done)
หมายถึงงานที่ต้องผ่านการ testing และ coding เสร็จนั่นเอง
ไม่มีการตามมาทดสอบในภายหลัง
มิเช่นนั้น จะเกิดการทำงานแบบ mini-Waterfall ซึ่งไม่ควรทำอย่างเด็ดขาด !!

เนื่องจาก Agile Testing เปิดเผยให้ทีม และ องค์กร เห็นถึงสถานะของการทดสอบระบบว่าเป็นอย่างไร
โดยที่ Agile tester นั้นจะช่วยยกปัญหาต่าง ๆ ของการทดสอบระบบขึ้นมา
เพื่อให้ทีมรับรู้ และให้ทีมช่วยกันคิดวิธีแก้ไข
เพื่อเรียนรู้ที่จะปรับและเปลี่ยนการทำงานให้ดีขึ้นกว่าเดิม (Make it Better)
นี่มันคือ Visibility และ Transparency ของการทำงานเลยนะ

ตัวอย่างเช่น
ทาง Tester อาจจะยกปัญหาของการทำ manual regression test ขึ้นมา
ว่าต้องใช้เวลาการทดสอบนานมาก ๆ
แถมเป็นการทดสอบแบบช้ำ ๆ มากมาย
ดังนั้น ทีมช่วยออกความคิดเห็นหน่อยว่า จะแก้ไขอย่างไรดี ?
ซึ่งหนึ่งในวิธีการก็คือ

  • สร้าง Automate regression test สิ
  • ช่วยกันการทดสอบสิ

ไม่ว่าจะเป็นทางไหน มันดีขึ้นกว่าเดิมแน่นอน

ยังไม่พอนะ ยังมีการใช้ Test Pyramid มาเพื่อ
ช่วยให้ทีมพูดคุยกันว่า
ในแต่ละชั้นของการทดสอบทั้ง Unit test, Functional test, UI test และ Manual Test นั้น
จะทำการทดสอบเรื่องอะไรบ้าง
ซึ่งทำให้แต่ละคนในทีมมีความรู้ความเข้าใจเรื่องของการทดสอบตรงกัน

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

คุณล่ะ คิดอย่างไรกับ Agile Testing บ้าง ?