chapter7 -Intro to Software Testing WATTANAPONG SUTTAPAK, SE, ICT, UP, Thailand
จุดประสงค์การเรียนรู้ เข้าใจถึงความหมายของการทดสอบซอฟต์แวร์ เข้าใจถึงหลักการทดสอบซอฟต์แวร์เบื้องต้นได้
Software Testing การพิสูจน์การทำงานที่ตรงความต้องการ(verification) และมีความสมบูรณ์ของซอฟต์แวร์ตรงตามความต้องการของลูกค้า (validation) ก่อนที่จะนำส่งซอฟต์แวร์ก่อนการใช้งานจริง หรือกระบวนการตรวจสอบซอฟต์แวร์ที่ได้ ตรงกับซอฟต์แวร์ที่ ต้องการหรือไม่ โดยไร้ซึ่งข้อผิดพลาดของซอฟต์แวร์(defect free)
Why Software Tesing is important? 1. China Airlines Flight 140 On 26 April 1994 264 people dead สาเหตุ : ระบบซอฟต์แวร์ทำงานผิดพลาด ตอนเครื่องลงจอด นักบินที่ 2 ลงจอดด้วยระบบอัตโนมัติ โดย TOGA=Take off Go Around ทำให้ตัวเครื่องแหงนขึ้น ณ 1070 ฟุต นักบินที่ 2 ได้ทำการปลดระบบแรงขับอัตโนมัติ Auto thrust และ ปรับลดคันเร่งเครื่องยนต์ด้วยตัวเองหรือ Manual Thrust
Why Software Tesing is important? 1. China Airlines Flight 140 ณ 1030 ฟุต นักบิน ที่ 2 กลับมาใช้ Auto Pilot แต่ระบบคอมพิวเตอร์ที่ใช้ ควบคุมการบินได้สั่งการให้ตัวเครื่องทำการบินไต่ ระดับไปที่ 18 องศาโดย อัตโนมัติ (TOGA 12 วินาที) นักบินพยายามกดคันบังคับเพื่อให้หัวเครื่องลดองศาการไต่ระดับ แต่ระบบ คอมพิวเตอร์ควบคุมการบินยังคงทำการปรับแพนหางให้เครื่องบินไต่ระดับ ความสูงต่อไป 42 วินาทีต่อมา ระบบออโต้ไพลอตได้ปลดตัวเองโดยอัตโนมัติ แต่ตัวเครื่อง อยู่ในท่าทางของการไต่ระดับความสูง ระบบป้องกันของตัวเครื่องหรือ Alpha Floor Protection ใช้ TOGA อีกครั้ง ทำ ให้ตัวเครื่องทำมุมตั้งถึง 52.6 องศาจากพื้น กัปตันพยายามตัดระบบป้องกันออก โดยใช้การลดคันเร่งของเครื่องยนต์ มาที่ตำแหน่งต่ำสุด ซึ่งสามารถปลดล็อกระบบป้้องกันออก แต่ ความเร็วเพียง 78 นอตต่อชั่วโมง ทำให้เกิดการร่วงหล่นที่ระดับความสูง 1,800 ฟุต
Why Software Tesing is important? 2. therac-25 radiation therapy machine สาเหตุ : ซอฟต์แวร์บั๊กและมีการให้รังสีเกินอัตรา ตาย 3 ราย บาดเจ็บรุนแรง 3 ราย
Why Software Tesing is important? 3. failed satellite launch สาเหตุ : ซอฟต์แวร์บั๊ก รัสเซียเสียเงิน 1200 ล้านดอลล่าร์
Software Testing
Software Testing Static Testing Dynamic Testing การทดสอบสมบูรณ์โดยไม่ต้องรันโปรแกรม การทดสอบสมบูรณ์ต้องรันโปรแกรม ใช้การทวนสอบ(verification) ใช้การตรวจสอบ(validation) ป้องกันการเกิดข้อผิดพลาด แก้ข้อผิดพลาด การประเมินเอกสาร การหาบั๊คและปัญหาคอขวดในระบบ สร้างเช็คลิสต์ของกระบวนการที่ต้องมีในระบบ สร้าง test cases
Software Testing Static Testing Dynamic Testing ทำการก่อนคอมไพล์ ทำหลังจากคอมไพล์ไปแล้ว ครอบคลุมโครงสร้างของระบบ ครอบคลุมตัวโค้ดที่ใช้งาน ค่าใช้จ่ายในการทดสอบน้อย ค่าใช้จ่ายในการทดสอบสูง ให้ผลผลิตที่สูงเนื่องจากทำตั้งแต่ก่อนเริ่มกระบวนการ ให้ผลผลิตที่ต่ำเนื่องจากต้องทำหลังกระบวนการสร้างเสร็จ คุณภาพขึ้นกับข้อเสนอแนะ คุณภาพขึ้นกับการตรวจเจอข้อผิดพลาด ต้องมีการเจรจาเยอะ ไม่ต้องมีการเจรจาเยอะ
Non-Functional Testing Dynamic Testing Functional Testing Non-Functional Testing วัดตามความต้องการของฟังก์ชันที่ทดสอบ วัดด้วย ประสิทธิภาพ ความน่าเชื่อถือ ความยืดหยุ่น ถูกทดสอบก่อน ทดสอบหลัง functional testing ทดสอบแบบ manual หรือ ใช้เครื่องมือทดสอบก็ได้ ควรใช้เครื่องมือในการทดสอบ ตัวแปรในการวัดประสิทธิภาพ คือ ตอบสนองความต้องการเชิงธุรกิจ ตัวแปรในการวัดประสิทธิภาพคือ ความเร็ว ความยืดหยุ่นของโปรแกรม อธิบายว่า ผลผลิตที่ได้ ทำอะไรได้บ้าง อธิบายว่า ผลผลิตที่ดี ทำงานอย่างไร ง่ายในการทดสอบแบบ manual ยากในการทดสอบแบบ manual
Non-Functional Testing Dynamic Testing Functional Testing Non-Functional Testing ประเภทการทดสอบ Unit Testing Smoke Testing Sanity Testing Integration Testing White box testing Black Box testing User Acceptance testing Regression Testing Performance Testing Load Testing Volume Testing Stress Testing Security Testing Installation Testing Penetration Testing Compatibility Testing Migration Testing