การทดสอบช่วยทำให้เห็นว่า
สิ่งที่สร้างตามความต้องการมันเป็นอย่างไร
ทำการอธิบายว่า การสร้างในแต่ละส่วนเป็นอย่างไร ทำงานอย่างไร
โดยที่การทดสอบมีทั้ง 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 เถอะครับ
เพื่อทำให้มีความมั่นใจขึ้นมาลงมือทำกัน ให้มากกว่าพูด
สวัสดี