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