การทดสอบช่วยทำให้เห็นว่า
สิ่งที่สร้างตามความต้องการมันเป็นอย่างไร
ทำการอธิบายว่า การสร้างในแต่ละส่วนเป็นอย่างไร ทำงานอย่างไร
โดยที่การทดสอบมีทั้ง Manual และ Automation

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

ส่วน Manual testing มักจะทำในช่วยท้าย ๆ ของขั้นตอนการพัฒนา
ซึ่งต้องการคนทดสอบจำนวนมาก ตามขนาดของระบบ
อีกทั้งการทดสอบแต่ละครั้งต้องใช้เวลาและค่าใช้จ่ายสูง

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

สิ่งที่สำคัญในการทดสอบคือ จะทดสอบ และ verify อะไร ?

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

เรามาดูกันหน่อยว่าจะทดสอบอะไรกันบ้าง ?

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

มีอะไรอีกละ เอาแค่นี้ก่อน

การทดสอบมันมีทั้งมุมเชิงปริมาณและเชิงคุณภาพ
ซึ่งใช้ในการวัดผล และ ควบคุมคุณภาพของการทดสอบ
เป็นอีกสิ่งหนึ่งที่สำคัญ ใช้ในการวิเคราะห์และปรับปรุงต่อไป

มาดูในเรื่องการพัฒนาบ้าง

มีคำพูดที่น่าสนใจคือ
Build the Right system in the Right way

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

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

โดยรวมแล้ว
เราต้องเริ่มด้วย What คือ จะทำอะไร ทดสอบอะไรบ้าง
มีประโยชน์ หรือ คุณค่าอะไร
จากนั้นจึงเริ่ม How คือ วิธีการและเครื่องมือในการพัฒนาและทดสอบ

คำถามที่ถูกถามบ่อยมาก ๆ คือ ต้องทดสอบมากน้อยเพียงใด ?

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

อีกเรื่องคือ ถ้ามี automation test แล้ว manual test ก็ยังต้องทำนะ
จำนวน test มันต้องลดลง
รวมทั้งเวลาต้องน้อยลงอีกด้วย
แต่คุณภาพต้องสูงขึ้น

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

การทดสอบทั้ง automation test และ manual test ล้วนมีค่าใช้จ่ายเสมอ
ยกตัวอย่างเช่น
Automation test มันก็คือ code อีกชุดหนึ่ง
ดังนั้นต้องเขียนขึ้นมา ก็ต้องมีค่าใช้จ่าย
ไหนจะต้องดูแลอีก ก็ต้องมีค่าใช้จ่าย
ถ้ามีชุดการทดสอบแล้ว แต่ไม่ดูแลให้ดี ค่าใช้จ่ายในการทดสอบก็สูงอีก
ดังนั้นถ้ามีชุดการทดสอบแล้ว
ต้องดูแลให้ดี
ถ้าไม่ดีก็ต้องปรับปรุงให้ดี เช่นเดียวกับ code ของระบบงาน

ยังไม่พอนะ ถ้าไปทำงานกับระบบงานเก่า ๆ ที่ไม่มี Automation test ละ ?

จะทำกันอย่างไร
แน่นอนว่าระบบเก่า ๆ ที่ไม่มีชุดการทดสอบแบบอัตโนมัติ
ในหนังสือ Working Effectively with Legacy code จะเรียกว่า Legacy code
หรืออาจจะมีก็มี code/test coverage ที่น้อยมาก ๆ

ดังนั้นสิ่งที่ต้องทำก่อนคือ
การทำความเข้าใจกับระบบ
ในมุมของนักพัฒนาคือ ทำการ run และ ทดสอบส่วนการทำงานต่าง ๆ
ด้วยการเขียน test ในส่วนการทำงานนั้น ๆ
เพื่อเรียนรู้และเข้าใจมันมากขึ้น
เพื่อทำให้มีความมั่นใจ ก่อนจะทำงานและแก้ไขต่อไป
เช่น การ refactor หรือ แยกส่วนการทำงานออกมา
เรียกการทดสอบลักษณะนี้ว่า Explorative testing

อีกทั้งยังมีวิธีการอื่น ๆ อีก เช่น Snapshot testing หรือ Approval testing
ช่วยให้เราเก็บสถานะต่าง ๆ ของการทำงานไว้
เพื่อนำกลับมาทดสอบซ้ำ

ถามว่าการทดสอบมันมีเยอะไหม ตอบเลยว่ามาก ดังรูป

จะเยอะไปไหน !! ไม่อธิบายดีกว่า

อธิบายมายาว ตัดจบดีกว่า

การทดสอบนั้นเป็นเรื่องที่มีความซับซ้อน
ซึ่งยากต่อการทำความเข้าใจ
แต่เป็นความรู้พื้นฐานมาก ๆ ที่ต้องมี

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

คุณค่าของการทดสอบจะสูงมาก ๆ
เมื่อมีหลายคนทำงานร่วมกัน
หรือมีหลาย ๆ ระบบทำงานด้วยกัน

วันนี้เขียน test เถอะครับ
ถ้าไม่มั่นใจอะไร ก็เขียน test เถอะครับ
เพื่อทำให้มีความมั่นใจขึ้น

มาลงมือทำกัน ให้มากกว่าพูด

สวัสดี