Test ไปเพื่ออะไร? แล้วใคร Test อะไร?
ขึ้นหัวโปรยแบบออกแนวหาเรื่องเล็กๆ แต่มันเป็นสิ่งที่ผู้เขียนเองเจอมากับตัวเองเลยครับ จากหลายๆ คนที่ยังไม่เข้าใจ ในเรื่องของ Software Testing แต่ก็ไม่ผิดนะครับ เพราะในประเทศไทยเราเองยังไม่ค่อยมีการสอนในเรื่องของ Software Testing อย่างเป็นจริงเป็นจังมากนัก แต่ในสองสามปีหลังนี้ เริ่มที่จะได้ยินว่าตามสถาบันการศึกษาหลายๆ แห่ง เริ่มที่จะเปิดการเรียนการสอนแล้ว แอบดีใจครับ
“Test ไปเพื่ออะไร?” และ “ใคร Test อะไรบ้าง?” ผู้เขียนเองเจอคำถามเหล่านี้อยู่เป็นระยะๆ ก็เลยหยิบมันมาเขียนละกัน แต่ขอบอกก่อนว่าเป็นเรื่องของมุมมองจากประสบการณ์การทำงานในด้าน Software Testing และจากตำรับตำราที่ได้ไปอบรมมา มานะครับ
Testing
ขอปรับความเข้าใจพื้นฐานเกี่ยวกับ Software Testing แบบไวไว ในหนึ่งย่อหน้าก่อนที่จะเข้าไปสู่ “Test ไปเพื่ออะไร?” และ “ใคร Test อะไร?” เข้าใจว่าๆ เพื่อนพ้องน้องพี่ทั้งหลายจะอยู่กับกระบวนการพัฒนา Software หรือ Application ที่ฝรั่งมั่งค่าคิด และตั้งชื่อว่า Systems Development Life Cycle (SDLC) ซึ่ง Testing อยู่ใน Phase เกือบท้ายๆ ของ SDLC
หลายๆ คนที่ยังไม่เข้าใจ อาทิ เช่น Project Manager, Product Owner หรือ ลูกค้าที่ว่าจ้างทำ Software หรือ Application (ยกเป็นตัวอย่างจากประสบการณ์ที่เจอมานะครับ :p ) ต่างก็เข้าใจว่าเมื่อ Software หรือ Application นั้นๆ ผ่านมือ Test Team หรือผ่านขั้นตอนของ Software Testing แล้วนั้น Software หรือ Application จะ Bug-Free หรือ Defect-Free จริงๆ แล้วไม่ใช่แบบนั้นนะครับ เพราะ Bug Never Die และ Bug is all Around
สรุป Testing แบบเข้าใจง่ายๆ สั้นๆ
- Software Testing มิได้ทำให้ Bug-Free หรือ Defect-Free
- Software Testing ช่วยกำจัด และลด Bug หรือ Defect ที่จะก่อให้เกิดปัญหาลงให้มากที่สุดที่จำทำได้ (ตามเวลาที่มี)
- Software Testing ช่วยลดความเสี่ยง เพิ่มความมั่นใจ และน่าเชื่อถือ ให้กับ Software หรือ Application
- Tester หา และแสดงให้ Devloper เห็นได้ว่าBug หรือ Defect เกิดขึ้นได้อย่างไร ถือว่า ประสบความสำเร็จ (หล่อมาก)
- Tester หา Bug หรือ Defect ไม่เจอ อันนี้ งานเข้า
สามคำที่คุ้นเคย
Unit Testing, Integration Testing และ System Testing สามคำ สามประเภท ของ Software Testing นี้ที่เหล่าเพื่อนพ้องน้องพี่ที่เป็น Tester, Developer และผู้อื่นที่อยู่ในวงจรของ SDLC จะต้องพบเจอเป็นพื้นฐานๆ เลยก็ว่าได้ มาทำเข้าใจเพื่อนทั้ง สาม ของเราแบบพื้นๆ กันก่อน

Unit Testing
- A ถึง G เป็น Module ย่อยๆ ที่ถูกออกแบบ และ Code ตามเงื่อนไข และ Logic ตามที่ได้ออกแบบไว้
- การทดสอบว่า Module ทำงานถูกต้องตามที่ได้ออกแบบหรือไม่ (Verify) เท่ากับ Unit Testing
Integration Testing
- Module A ทำงานร่วมกับ Module D ตามเงื่อนไข และ Logic ที่ออกแบบไว้
- การทดสอบการทำงานร่วมกันของ Module ต่างๆ ถูกต้องตามที่ได้ออกแบบหรือไม่ (Verify) เท่ากับ Integration Testing
System Testing
- Module A จนถึง Module G ทำงานร่วมกัน ตามเงื่อนไข และ Logic ที่ออกแบบไว้
- การทดสอบการทำงานของระบบทั้งหมด ที่ประกอบไปด้วย Module A จนถึง Module G ถูกต้องตามที่ได้ออกแบบหรือไม่ (Validate) เท่ากับ System Testing
Test Objectives
เมื่อเราทำอะไรสักอย่าง มันก็ต้องมีจุดประสงค์ว่าเราทำไปทำไม Software Testing ก็เช่นเดียวกัน ในแต่ละประเภทของการทดสอบ (Type of Test) ก็มีจุดประสงค์ของการ Test เฉกเช่นเดียวกัน ตามตัวอย่างในตาราง

จากตารางเป็นตัวอย่างของ Software Testing ประเภทต่างๆ รวมทั้งจุดประสงค์ในการทดสอบของแต่ละประเภท แต่ก็ขึ้นอยู่กับแต่ละที่ แต่ละองค์กร ที่จะกำหนดจุดประสงค์ของการ Test ไว้แตกต่างจากตัวอย่างก็ได้ครับ
ที่เคยเห็นมาบางองค์กรจะรวม Integration Testing และ System Testing เข้าด้วยกัน และเรียกว่า System/Integration Testing โดยจุดประสงค์ก็ Functionality
End-to-End Testing ก็เป็นอีกหนึ่งประเภทที่ได้พบเจอมาเช่นกัน จุดประสงค์ก็ Functionality
Who Tests
ลองมามองในมุมว่าแล้วใครที่จะเข้ามา Test บ้าง เพื่อความเข้าใจง่ายๆ แบบพื้นฐานก่อน ผู้เขียนขอกำหนดตัวละครไว้ 3 ตัวละคร ดังนี้
- Developer
- Tester
- User
ทีนี้ลองมาดูตัวอย่างว่าตัวละครของเราทั้ง 3 จะเกี่ยวข้องกับการ Test ประเภทใดบ้าง

จากตารางตัวอย่างจะเห็นได้ว่า
Developer มิได้ทำแค่เพียง Unit Testing เท่านั้น Developer จะต้องทำ Integration Testing ด้วยเช่นกัน หรือในบางองค์กร Developer เองก็อาจจะต้องทำ System Testing ก่อนที่จะส่งมอบ Software หรือ Application มายัง Tester
Tester ก็จะรับผิดชอบในการ Test แบบต่างๆ มากมาย (พุดเหมือนเยอะ
) ซึ่งก็ขึ้นอยู่กับการ Test Stretegy ของแต่ละองค์กร ว่าจะเป็นอย่างไร ซึ่งในบางที Tester ถูกกำหนดให้รับผิดชอบการทำ Unit Testing ก็มีด้วยเช่นกัน
User ที่รักของเราทั้งหลายก็จะรับผิดชอบในการทำ User Acceptance Testing ซึ่งหลักๆ จะเป็นเรื่องของ ความพึงพอใจ มากเสียกว่าเน้นในเรื่องของ Functionality แต่ในบางองค์กรที่มีทีม UAT ที่แข็งแรง ก็จะมีความเชี่ยวชาญ และคุ้นเคยใน Software หรือ Application มาก ก็จะเน้นเรื่องของ ความพึงพอใจ+Business Logic+Functionality ก็มี
จบ
ข้างต้นที่เขียนเล่ามานั้นก็เป็นเพื่อสร้างความเข้าใจพื้นฐานแบบง่ายๆ อ่านกันสบายๆ และเห็นภาพ สำหรับ Tester, ผู้ที่เกี่ยวข้องกับ Software Testing และผู้ที่สนใจในเรื่องของ Software Testing หากเพื่อนพ้องน้องพี่ท่านใดมีความคิดเห็นอื่นใดที่จะมาร่วมแบ่งปัน ก็ยินดีครับ post ลงในส่วนของ comment ก้ได้ครับ
ขอจบสำหรับบทความนี้ไว้เพียงเท่านี้ก่อนครับ ได้เวลาล่ำรากันแล้วครับ
ปล.
เริ่มเต้นเขียน: 25 มิถุนายน 2552 เวลา 00:05 น.
เขียนเสร็จ: 29 มิถุนายน 2552 เวลา 22:46 น.
เอกสารประกอบ: Software Testing Techniques for Improving Software Quality
