ในการทดสอบ Software นั้น มีวิธีการและแนวทางที่เยอะมาก
ดังนั้น เรามาลองแบ่งกลุ่มของการทดสอบ
ตามแนวทางของ Five Ws กันหน่อย
ประกอบไปด้วย
- Who ? ทดสอบเพื่อใคร
- What ? ทดสอบอะไร
- Where ? ทดสอบที่ไหน
- When ? ทดสอบเมื่อใด
- Why ? ทดสอบไปทำไม
- How ? ทดสอบอย่างไร
1. Who ? Programmer vs. Customer
เราทำการทดสอบเพื่อทำให้มั่นใจว่า software ทำงานได้ตามที่คาดหวังนะ ทั้งในมุมมองของ Programmer และ Customer (ลูกค้า) ซึ่งแต่ละฝั่งต่างมีชุดการทดสอบ เพื่อสร้างความเชื่อมั่นให้ตนเอง ว่าได้ software ตามที่คาดหวังนะ2. What ? Functionality vs. Performance vs. Security
ต้องบอกให้ได้ว่า เรากำลังทดสอบอะไรกัน ซึ่งโดยทั่วไปถ้าเราไม่ได้กำหนดแบบเฉพาะเจาะจง ก็มักจะบอกว่า เราทำการทดสอบ feature ต่าง ๆ นั่นเอง หรืออาจจะเรียกว่า Functional requirement แต่สิ่งที่มักจะลืมไปก็คือ Non-functional requirment เช่น Performance และ Security เป็นต้น3. When ? ทำการทดสอบ หรือ สร้างการทดสอบเมื่อใด ?
ทำก่อน หรือ หลังจากการเขียน code ? ถ้าเราทำการสร้างและทดสอบหลังจากที่เขียน code เสร็จ จะเรียกว่า Test Last ถ้าเราทำการสร้างและระบุการทดสอบก่อนที่จะเขียน code จะเรียกว่า Test First จากทั้งสองแบบนั้น จะพบว่า Test First มันแปลก ๆ ดูไม่เป็นธรรมชาติเลย เนื่องจากจะทดสอบได้ยังไง ถ้าไม่เขียน code ให้เสร็จก่อน !! แต่มันกลับมีข้อดีต่าง ๆ ดังนี้- ทำให้มั่นใจได้ว่า code ที่เขียนมันทดสอบได้
- ป้องกันไม่ให้เกิดความผิดพลาดจาก code ที่เขียนขึ้นมา ซึ่งมันเป็นวิธีที่ดีกว่า การมานั่งจุดผิดพลาดและแก้ไข
- ทำให้สามารถออกแบบโครงสร้างของ code ได้ พร้อมลงมือสร้างมันขึ้นมาตามที่เราคิด
4. Where ? Unit test vs. Integration test vs. System test
การทดสอบนั้นมีหลายระดับเช่น Unit, Integration และ System เป็นต้น- Unit test คือการทดสอบส่วนทำงานหน่อยเล็ก ๆ เช่น class และ method
- Integration test คือการทดสอบการทำงานระหว่างหน่วยการทำงานเล็ก ๆ ว่ามันเป็นอย่างไร
- System test คือการทดสอบในภาพรวมของระบบ
คำถามคือ จะทดสอบในระดับไหนดีบ้าง ? จงตอบมาหน่อยสิ !!ซึ่งจำนวนการทดสอบควรเป็นไปตาม Test Pyramid นะ ยิ่งเป็นการทดสอบในภาพใหญ่ หรือ ภาพรวมของระบบ จำนวนการทดสอบยิ่งต้องลดน้อยลงไป
5. Why ? Verification vs. Specification vs. Design
ทำการทดสอบไปทำไม ? ในแต่ละการทดสอบควรมีเหตุผลที่เหมาะสม ว่าจะทดสอบไปทำไม ? เพื่ออะไร ? เช่น- ตรวจสอบการทำงานของ code ของระบบว่า ทำงานได้ตรงตามความคาดหวังนะ
- ตรวจสอบว่าทำงานตาม specification นะ
- ตรวจสอบว่า code ของระบบทำงานตามที่ได้ออกแบบไว้นะ
6. How ? Automated test vs. Manual test
จะทำการทดสอบอย่างไรดีล่ะ ? ทดสอบแบบ manual หรือ แบบอัตโนมัติดี ? หรือทำการทดสอบด้วยคน หรือ เครื่องคอมพิวเตอร์ดี ? โดย Manual testing นั้นจะมีประโยชน์อย่างมาก ถ้าทำการทดสอบในรูปแบบ Exploratory testing แต่ถ้าระบบงานที่คุณดูแลนั้น ต้องทำการ deploy/release feature ใหม่ ๆ อยู่อย่างสม่ำเสมอ นั่นหมายความว่า คุณต้องทำการทดสอบซ้ำแล้วซ้ำอีกในทุก ๆ feature หรือเรียกว่าต้องทำ regression testing อยู่เสมอ ถ้าทำการทดสอบแบบ manual คงไม่น่าจะไหว ดังนั้นมาทำการทดสอบแบบอัตโนมัติน่าจะเหมาะสมกว่านะ หรือถ้าทนได้ก็ทำไป !!มาดูตัวอย่างการนำ Five Ws มาคิด วิเคราะห์ แยกแยะ
ปล. ให้ลองเขียนด้วยตอนเองก่อน แล้วเอามาเทียบกันนะครับ TDD (Test-Driven Development)- Who ? => เพื่อ Programmer
- What ? => Functionality
- Where ? => Unit และ Integration test
- When ? => ก่อนที่จะเขียน code
- Why ? => ทำการออกแบบ และ กำหนดการทดสอบของสิ่งที่จะพัฒนา
- How ? => Automated test
- Who ? => เพื่อ Customer
- What ? => Functionality
- Where ? => System test
- When ? => ก่อนที่จะเขียน code
- Why ? => ทำการออกแบบ และ กำหนดการทดสอบของสิ่งที่จะพัฒนา
- How ? => Automated test
- Who ? => เพื่อ Customer
- What ? => Functionality
- Where ? => Unit และ Integration test
- When ? => หลังจากที่เขียน code เสร็จแล้ว
- Why ? => เพื่อทำการตรวจสอบความถูกต้องของระบบ
- How ? => Manual test
- Who ? => เพื่อ Customer
- What ? => Security
- Where ? => System test
- When ? => หลังจากที่เขียน code เสร็จแล้ว
- Why ? => เพื่อทำการตรวจสอบความถูกต้องของระบบ
- How ? => Automated test