บทที่ 20 Testing
การทดสอบระบบจะแบ่งออกเป็น
ส่วนใหญ่ผู้พัฒนา Software มักจะเป็นผู้ทดสอบในระดับ component แต่ในระดับ Integration มักจะให้บุคคลที่ 3 ที่ไม่เกี่ยวข้องกับการพัฒนา Software เป็นผู้ทดสอบ
1. Component testing
1.1 Defect testing จุดประสงค์เพื่อทดสอบว่า
component นั้นๆมีข้อผิดพลาดอะไรบ้าง ประกอบด้วยขั้นตอน
- ออกแบบสถานะการณ์ที่ต้องการจะทดสอบ และจะได้ออกมาเป็นกรณีทดสอบพร้อมทั้งระบุได้ว่าผลลัพธ์ที่ได้จะเป็นยังไง
- เตรียวข้อมูลที่จะทดสอบ
- ลงมือทดสอบ
- เอาผลลัพธ์ที่ได้จากการทดสอบจริงมาเปรียบเทียบกับที่คาดการณ์ไว้ในตอนแรก
1.2 Black box testing เป็นการทดสอบระดับฟังก์ชัน
โดยเราจะไม่สนใจว่าฟังก์ชันนั้นทำงานยังไง แต่จะสนใจเพียงว่า input ที่เข้าไปเป็นอะไรและได้
output อะไรออกมา ในตอนออกแบบจะมีการกำหนดเป็น specification ของฟังก์ชันไว้เลยว่า
input ของมันคืออะไรและได้ output อะไร รวมทั้งระบุด้วยว่า input ที่ทำให้เกิดความผิดพลาดมีอะไรบ้างและทำการทดสอบด้วยว่าเกิดความผิดพลาดตามที่คาดไว้หรือเปล่า
1.3 Equivalence partitioning ( เคยพูดไปแล้ว ) เราจะแบ่งช่วงของข้อมูลโปรเซสออกเป็นส่วนๆให้ครอบคลุมทุกความเป็นไปได้
เรียกว่า partitioning แล้วทดสอบให้ครบทุกส่วน เช่นโปรแกรมทำงานได้ที่ช่วงเลข 1-10
ข้อมูลในช่วงที่ต้องทดสอบก็คือ 1-10 , 0 , -1 , 11 , ตัวอักษร เป็นต้น
1.4 Search routine specification จะเป็นการแบ่งเนื้อหาในตัวโปรแกรมออกเป็นตัวย่อยๆแล้วเอาแต่ละส่วนย่อยๆมาทดสอบ
ในลักษณะเป็น partitioning อีกทีหนึ่ง ( แต่เป็นการทดสอบแต่ละกรณีที่เป็นไปได้ไม่ใช่ข้อมูลที่เป็นไปได้
) ในตย. ข้างล่าง (slide13) จะทดสอบว่าถ้ามีการใส่ข้อมูลในกรณีต่างๆเพื่อจะไปค้นหาข้อมูลนั้นผลจะเป็นอย่างไรบ้าง
เช่น ใส่ลงไปทีละค่า เรียงตามลำดับและไม่เรียงตามลำดับ หรือใส่ลงไปมากกว่า 1 ค่าเรียงตามลำดับและไม่เรียงตามลำดับ
1.5 Structural testing เป็นการทดสอบในระดับโครงสร้างหรือเรียกว่าเป็น
Whitebox เพราะว่าเป็นการเข้าไปทดสอบในแต่ละคำสั่งในฟังก์ชันย่อยเลย เพราะฉะนั้นเราจะเอาโมดูลมาแตกเป็นทีละ
block ของคำสั่งแล้วมาทดสอบว่าทำงานได้จริงหรือเปล่า
1.6 Path testing
เป็นการทดสอบว่าเวลาเราออกแบบโปรแกรมมาแล้ว
Flow ของโปรแกรมจะถูกใช้งานจริงทุก Path หรือไม่ แล้วถ้าถูกใช้งานจริงทุก Path
แต่ละ Path จะทำให้เกิดข้อผิดพลาดอะไรหรือเปล่า ดังรูปตย.ข้างล่าง (slide17,18)Path
ทั้งหมดที่เป็นไปได้
- 1, 2, 3, 8, 9
- 1, 2, 3, 4, 6, 7, 2
- 1, 2, 3, 4, 5, 7, 2
- 1, 2, 3, 4, 6, 7, 2, 8, 9
2. Integration testing
คือการที่เราเอาระบบย่อยๆแต่ละระบบเอามารวมเข้ากับระบบใหญ่ทีละระบบย่อยแล้วทดสอบทั้งระบบ
แล้วก็นำระบบย่อยที่เหลือมารวมแล้วก็ทดสอบอีก ทำอย่างนี้ซ้ำไปเรื่อยๆจนครบทุกระบบย่อย
ดังตย.ข้างล่าง (slide20) ในการทดสอบนี้จะให้ความสำคัญกับการที่เราเอาแต่ละส่วนมารวมกันแล้วนั้นมันสามารถทำงานได้จริงหรือไม่
ซึ่งจะมีการทดสอบเป็น 2 ลักษณะ คือ
- แบบ Top down จะเป็นการทดสอบในระดับบนสุดก่อนแล้วจึงทดสอบในระดับย่อยลงมา
- แบบ Bottom-up จะเป็นการทดสอบในระดับย่อยก่อนขึ้นไปสู่ระดับบน
วิธีการในการทดสอบ
2.1 Interface testing เป็นการทดสอบ interface
ระหว่างโมดูลย่อย ไม่ใช่ User interface สิ่งที่ต้องทดสอบคือ
- ทดสอบว่ามี Parameter อะไรบ้าง
- ทดสอบการใช้ memory ร่วมกัน
- ทดสอบการเรียกใช้งาน Procedure กันระหว่างแต่ละระบบย่อย
- ทดสอบการส่งค่ากันระหว่างโมดูล
2.2 Stress testing เป็นการทดสอบความคงทนของระบบ โดยเรามักจะใส่ข้อมูลเข้าไปให้เกิด Overload แล้วดูว่าระบบจะทนอยู่ได้นานแค่ไหน
2.3 Object - Oriented testing ในกรณีที่เราพัฒนา
software ในลักษณะ Object สิ่งที่เราเน้นการทดสอบในระดับ Class เป็นหลัก และมักใช้
White-box ในการทดสอบ โดยเข้าไปทดสอบยังตัว Method ต่างๆในแต่ละ Class สิ่งที่เราจะต้องทดสอบคือ
- การทำงานร่วมกันของแต่ละ Object
- ทดสอบ Class แต่ละ Class
- ทดสอบ Object หลายๆ Object ที่เป็นกลุ่มเกี่ยวข้องกัน
- ทดสอบทั้งระบบ
บรรยายเมื่อ 25 กพ. 2545 เทอม 2/44
ฺBack | Lesson 16 | Lesson 17 | Lesson 18 | Lesson 20 | Lesson 29 | Index | Mores |