Screen Shot 2558-09-11 at 12.37.05 PM
มีโอกาสไปงาน Agile Bangkok Meetup :: Embracing Agile
แน่นอนว่าเป้าหมายหลักอยู่ที่คุณ Janet Gregory
เป็นหนึ่งในคนเขียนหนังสือ Agile Testing และ More Agile Testing
มาดูกันว่ามีอะไรที่น่าสนใจบ้าง
บอกได้เลยว่า ยาวมาก ๆ

เริ่มต้นด้วย Panel discussion

คำถามหนึ่งที่มันติดหูมาก ๆ คือ

Why do we start Agile ?

เป็นคำถามที่ทรงพลังมาก ๆ
ลองถามตัวคุณเอง ทีม องค์กร ว่า นำ Agile มาใช้เพื่ออะไร ทำไม ?
ถ้าตอบว่า

  • มันเป็นของใหม่
  • แนวคิดใหม่
  • เขาบอกว่ามันดี

บอกได้เลยว่า เพียงเริ่มก็ FAIL แล้ว

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

อีกคำถาม คือ เรื่องของการ Scaling Agile ว่าทำอย่างไร ? ใช้ Framework อะไร ?
ทางคุณ Janet ตอบได้อย่างน่าสนใจ คือ
ก่อนอื่นต้องเปลี่ยน Mindset กล่าวคือ

ปรับเปลี่ยนวิธีการคิด และ การทำงานเป็นแบบ Whole Team Approach
คือทุกคนทำงานด้วยกัน ไม่ใช่ต่างคนต่างทำ

สิ่งที่สำคัญมาก ๆ
มันคือความท้าทายของฝ่าย management
เนื่องจากเป็นกลุ่มที่พยายามจะไม่ทำความเข้าใจอะไรเลย
รวมทั้งไม่ต้องการเปลี่ยนแปลง

ปัญหาที่ตามมา คือ คนกลุ่มนี้ต้องการ training มาก ๆ ครั้งแล้วครั้งเล่า
แต่กลับลืมว่า กลุ่มคนที่ต้อง training ให้มาก และ จำเป็นมาก ๆ คือ TEAM

จากนั้นเข้าสู่การพูดในหัวข้อ Pitfalls and Perils of Agile Testing

ทำการสรุป lesson learn 5 ข้อ
ที่ช่วยให้ทีมที่นำ Agile มาใช้ประสบความสำเร็จได้ง่ายขึ้น
โดยแต่ละข้อประกอบไปด้วย ปัญหา อาการ ความเสี่ยง และ แนะนำวิธีการแก้ไข

ทำความเข้าใจ Agile ก่อนดีไหม ?
และกลับไปถามตัวเองด้วยว่า นำ Agile มาใช้ทำไม ?
ต้องเข้าใจตัวเองก่อนเสมอนะครับ

Agile ว่าด้วยเรื่องของ

  • การพัฒนาแบบ iterative และ incremental
  • ทำงานร่วมกับลูกค้าอยู่อย่างสม่ำเสมอ
  • ทำงานเป็นทีม (Whole team approach)
  • ทุก ๆ feature ต้องถูกทดสอบอยู่อย่างสม่ำเสมอ
  • ต้องทำการส่งมอบสิ่งที่มีคุณค่าต่อ business อยู่อย่างสม่ำเสมอ หรือช่วงเวลาเท่า ๆ กัน
  • ทำการปรับปรุงขั้นตอนการทำงานจาก feedback ที่ได้รับอยู่อย่างสม่ำเสมอ

มันไม่ใช่ง่ายเลยนะ !!

คำถาม
เมื่อเกิดปัญหาขึ้นมา คุณทำการแก้ไข หรือ หาวิธีการแก้ไขกันอย่างไร ?
คำตอบ
ถามไงล่ะ เช่น ปัญหาจริง ๆ มันคืออะไร ?
บ้างก็ใช้ 5-Why

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

มาดู Lesson Learn 5 ข้อกันดีกว่า
น่าจะทำให้เราเห็นปัญหา และ แก้ไขได้ตรงจุดมากขึ้น

1. Tester ต้องเข้ามาร่วมทำงานด้วยเสมอ

ปัญหาที่มักพบเจอ คือ
เราค้นพบปัญหาต่าง ๆ ช้ามาก ทำให้การแก้ไขก็ช้าตาม
มันคือเรื่องของ feedback ที่ช้านั่นเอง

บ่อยครั้งพบว่า
การทดสอบมักจะอยู่ช่วงท้าย ๆ ของทุกรอบการทำงาน (iteration)
หรือถ้าแย่มาก ๆ ก็ถูกยกไปทำการทดสอบในรอบการทำงานถัดไป
แน่นอนว่า การแก้ไขมันก็ช้าตามไปด้วย

อาการที่พบได้ปกติ

  • Tester ไม่รู้ว่าตัวเองจะทดสอบอะไร
  • Story มันไม่เสร็จ หรือ DONE เลย
  • ได้ผลการทดสอบมันช้ามาก ๆ
  • มีการพูดว่า งานนั้นของฉัน งานนั้นของเรา

สิ่งที่น่าสนใจมาก ๆ คือ มีการกำหนด Done-Done
ซึ่งส่วนใหญ่มันหมายถึง

  • Done ของ developer
  • Done ของ Tester

แต่โดยรวมแล้วมันไม่เคย Done เลย !!
มันบ่งบอกว่า ภายในทีมมีการแบ่งเป็นทีมย่อย ๆ ซึ่งเป็นความเสี่ยงอย่างมาก
สุดท้ายมันส่งผลต่อ เวลาการส่งมอบอย่างแน่นอน

คำแนะนำ เพื่อแก้ไข ประกอบไปด้วย

ให้ทำงานเป็นทีม (Whole team approach)
นั่นคือทุกคนในทีมช่วยกันรับผิดชอบ
ทีมตกลงร่วมกันในเรื่องของการทดสอบ และ เรื่องของคุณภาพ
โดยทาง Tester นั้นต้องเข้าร่วมตั้งแต่การวางแผน และ สรุป requirement
ทำให้ทุก ๆ คนสามารถทำงานใด ๆ ก็ได้

Developer ควรใช้วิธีการเพื่อให้ได้มาซึ่ง feedback ในการทดสอบที่รวดเร็ว
เช่น Test-Driven Development (TDD) เป็นต้น

ในแต่ละ Story จะต้องมีงานสำหรับการทดสอบด้วยเสมอ

ให้การการ pair programming ระหว่าง developer และ tester เลย
เพื่อแบ่งปันความรู้ และ ประสบการณ์การทำงานกัน
สุดท้ายใคร ๆ ก็สามารถทำการทดสอบได้

2. ปรับเปลี่ยน Mindset ซะ

บ่อยครั้งพบว่า Agile team นั้นยังยึดติดกับ Role และ หน้าที่ความรับผิดชอบแบบเดิม
นั่นคือ หน้าที่ของตำแหน่งฉันเป็นแบบนี้ ฉันไม่สนใจใครหรอกนะ !!
หรือทำงานแบบ SILO นั่นเอง

อาการที่พบได้ปกติ

  • Bug ทุกตัวเก็บไว้ใน Defect Tracking System (DTS)
  • มีทีม Tester แยกกออกมาอย่างชัดเจน
  • ทีม Tester มีอำนาจในการสั่งหยุด หรือ ห้ามการ deploy บน production ได้

สิ่งเหล่านี้มันเกิดมาจาก
ไม่มีใครเชื่อในแนวคิด Build Quality In เลย
รวมทั้งทำการพูดคุยผ่านระบบ DTS
ยังไม่พอนะ ทาง developer และ tester ต่างมีกรอบการทำงานของตัวเองอีก

คำแนะนำ เพื่อแก้ไข ประกอบไปด้วย

  • ให้ทำการปรับเปลี่ยนแนวคิดว่า QA คือ Question Asker ซะ
  • ให้ทำการแบบ pair กับ developer
  • ให้ทำการแนะนำการทดสอบกับทาง developer
  • ให้ทำการแบ่งปันประสบการณ์กับทาง developer

แล้วการทำงานจะดีขึ้นมากมาย

คำว่า DONE หมายถึง ผ่านการทดสอบด้วยเสมอ
ที่สำคัญให้จำไว้ว่า

Testing is not a phase, Testing is activity

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

สิ่งที่ผมชอบมาก ๆ คือ
ลองให้ทาง Developer และ Tester ทำ Manual Regression Testing ในทุก ๆ story สิ
แล้วจะพบว่า ทุก ๆ คนจะเริ่มถามหา Automated Testing !!
แต่ถ้ายังทนไหว ก็ปล่อยไป …

3. เรียนรู้ Business Domain ซะ

ปัญหาที่มักพบเจอ สำหรับทีม คือ
ไม่รู้เกี่ยวกับ business domain ที่ตนเองกำลังทำอยู่
แปลกดีไหมล่ะ ?

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

หรือกว่าจะรู้ว่า ถูก เป็นอย่างไร มันก็สายไปเสียแล้ว

ผมชอบรูปนี้เป็นอย่างมาก มันอธิบายได้ดีจริง ๆ

Screen Shot 2558-09-11 at 9.46.00 AM

อาการที่พบได้ปกติ

Bug ที่เกิดจาก requirement ดันไปเจอบน production
Bug มันไม่ใช่ปัญหาที่แท้จริง
แต่มันกลับเป็นเรื่องความผิดพลาดของ data test และ คน
ทีมใช้เวลานานมาก ๆ เพื่อทำความเข้าใจ Bug นั่นคือการแก้ไขก็ล่าช้า

คำแนะนำ เพื่อแก้ไข ประกอบไปด้วย

  • ทำการแตก story ออกมาให้มันเล็ก ๆ สิ ให้มันสามารถทดสอบได้ง่าย
  • ข้อมูลที่ใช้ในการทดสอบ ควรเป็นข้อมูลจริง ๆ ไม่ใช่พวก asdsfgafgafg ฟหกดเ้
  • ต้องส่งสิ่งที่จะทดสอบให้ทาง developer ตั้งแต่เนิ่น ๆ เลย อย่ารอช้า
  • ให้ถามกันว่าในตอนนี้เรากำลังแก้ไขปัญหาอะไร ? เพื่อจะได้ช่วยเหลือกันได้
  • ถ้าไม่เข้าใจ business domain ภาพใหญ่ ก็ให้แบ่งบางเรื่องมาเรียนรู้กันสิ
  • ให้พูดคุยกันด้วยรูปภาพ เพื่อให้เข้าใจตรงกัน อย่าพูดกันแบบลอยบนอากาศ

และแนวคิดที่ดีมาก ๆ คือ ATDD (Acceptance Test-Driven Development)
มันไม่ใช่ best practice แต่มันคือแนวทางหนึ่งที่ดี
มีขั้นตอนการทำงานดังรูป

Screen Shot 2558-09-11 at 11.34.35 AM

4. ทำความเข้าใจกับภาพรวมของระบบซะ (Understand Big Picture)

เมื่อคุณไม่รู้ว่าภาพรวมของระบบเป็นอย่างไร ?
อาการที่มักพบเจอ คือ

  • ทดสอบในส่วนของตัวเอง หรือ ในส่วนที่ทีมรับผิดชอบเท่านั้น
  • ปัญหาระดับ integration testing เยอะมาก ๆ แต่กลับรู้ปัญหาช้าซะงั้น
  • ทำการทดสอบตามที่ developer พัฒนาขึ้นมาเท่านั้น

อาการเหล่านี้คือ ต้นตอของปัญหา
ส่งผลต่อขั้นตอนการทำงานของระบบ
บ่อยครั้งมักจะทำการเปลี่ยนแปลงเป้าหมายระหว่างการพัฒนา
ทำให้สุดท้าย ผลลัพธ์ไม่เป็นไปตามที่ฝั่ง business ต้องการอีก
มันน่ากลัวอย่างมากมาย !!

ดังนั้นแนะนำให้
เริ่มที่จากการปรับเปลี่ยนแนวคิดก่อน
ซึ่งมีลำดับดังรูป
Screen Shot 2558-09-11 at 11.47.55 AM

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

  • Feature done คือ ต้องผ่านการทดสอบตาม Agile Testing Quadrant 3 และ 4 เช่น UAT, Exploratory, Performance และ Security testing เป็นต้น
  • ทุก ๆ story ของ feature จะต้อง done คือ ต้องผ่านการทดสอบตาม Agile Testing Quadrant 1 และ 2 เช่น Unit, Integration และ Automated Acceptance testing เป็นต้น

5. Automate as you can

ความผิดปกติที่มักเกิดขึ้น คือ ระบบต้องทำงานแบบอัตโนมัติ 100%
การทดสอบก็เช่นกัน !!!
แต่เดี๋ยวก่อนนะ อะไรที่มันไม่สามารถทำแบบอัตโนมัติได้ ก็อย่าไปฝืนมันเลยนะ

You can not Automate anything .
Automate as you can

แต่สิ่งที่แปลกกว่า คือ ทีมส่วนใหญ่ยังทำงานแบบ Manual กันอยู่เลย !!

อาการที่มักพบเจอ

  • ถ้าใช้ Scrum จะพบว่าเมื่อจบ Sprint แล้วไม่มีของส่ง หรือ Potentially Shippable Product
  • ไม่มีใครบอกได้เลยว่า สิ่งที่สร้างขึ้นมามันกระทบระบบการทำงานเดิมหรือไม่
  • ไม่ทำ regression testing ทุกวัน … น่าจะทำ manual testing อยู่มั้ง !!
  • วัน ๆ Tester ทำแต่การทดสอบ และ retest
  • Bug เดิม ๆ มันกลับมาอยู่อย่างเสมอ
  • ไม่มีการทำ Exploratory testing เลย

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

ยังไม่พอนะ
ความผิดพลาดจากคน มันมีตลอดเวลา
และมากขึ้นตามความกดดัน และ ปริมาณ

อีกอย่าง คือ
ทีมไม่มีการเรียนรู้ technology ใหม่ ๆ
เพื่อมาช่วยเหลือ และ แก้ไข ปัญหาที่ตนเองเผชิญอยู่เลย
หรือว่าไม่รู้ว่ามีปัญหากันแน่ ?

ดังนั้นลองแก้ไขแบบนี้ก่อนดีไหม ?

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

การสร้าง Automated Testing นั้น
ให้ปฏิบัติตามแนวคิดของ Pyramid Testing เลย ดังรูป

idealautomatedtestingpyramid

สิ่งที่สำคัญมาก ๆ อีกอย่างคือ ควรให้เวลาในการทำ Exploratory Testing ด้วยล่ะ
มันคือการทดสอบในแบบนี้คุณไม่คาดคิด คาดฝัน
มันคือการเดินทางตาม workflow ในรูปแบบที่ต่างออกไป
มันคือการ hack ระบบงาน
มันคือการใช้ persona เพื่อกำหนดพฤติกรรมการทำงานของกลุ่มผู้ใช้งาน
มันคือการค้นหาความเสี่ยงในรูปแบบต่าง ๆ
ดังนั้น ต้องมีเวลามาทดสอบกันด้วยนะ

โดยรวมแล้ว

  • มันคือการสร้าง Trust หรือ ความเชื่อมั่นระหว่างทีม และ ลูกค้า
  • แสดงความคืบหน้าต่าง ๆ ของการทำงานความชัดเจน ทุกคนเห็น ไม่ปิดบังหรือซ่อนปัญหาไว้
  • ทำงานกันเป็นทีม
  • ให้ความเคารพซึ่งกันและกัน
  • หลีกเลี่ยงการทำงานแบบ SILO และ functional team
  • ให้พยายาม Build Quality In อยู่อย่างเสมอ
  • สุดท้ายก็คือ ต้องทำด้วยความสนุก ( Fun and Enjoy )

ปิดท้ายด้วย

Testing in agile project is not easy.
But Let’s try to do and journey to find your way

ขอบคุณสำหรับงาน Meetup ดีๆ ครับ
มีเรื่องต้องกลับมาคิด มาทำ และ ปรับปรุงอีกมากมาย