Software Testing
- การทดสอบมีจุดมุ่งหมายเพื่อแสดงให้เห็นว่าโปรแกรมทำในสิ่งที่เราตั้งใจและช่วยให้ค้นพบข้อบกพร่องของโปรแกรมก่อนที่จะนำมาใช้งาน
- การทดสอบซอฟต์แวร์เป็นเรียกใช้โปรแกรมจริงโดยใช้ข้อมูลเทียม
- ในการทดสอบ เราตรวจสอบผลลัพธ์ของการทดสอบเพื่อหาข้อผิดพลาด ความผิดปกติต่าง ๆ หรือข้อมูลเกี่ยวกับ non-functional ของโปรแกรม
- การทดสอบ ทำเพื่อหาข้อผิดพลาด ไม่ใช่ทำเพื่อที่จะบอกว่า โปรแกรมของเราไม่มีข้อผิดพลาด Program testing goals
- เพื่อแสดงให้นักพัฒนาซอฟต์แวร์และลูกค้าเห็นว่าซอฟต์แวร์ตรงกับ software requirement
- สำหรับซอฟต์แวร์ที่ลูกค้าออกแบบเอง ควรมีการทดสอบอย่างน้อยหนึ่งข้อสำหรับแต่ละ requirement
- สำหรับผลิตภัณฑ์ซอฟต์แวร์ทั่วไป ควรมีการทดสอบคุณลักษณะระบบทั้งหมด รวมถึง combination ของคุณลักษณะเหล่านั้น
- เพื่อค้นหาสถานการณ์ที่ซอฟต์แวร์ไม่ถูกต้องไม่พึงประสงค์หรือไม่เป็นไปตาม software requirement
- เพื่อขจัดพฤติกรรมที่ไม่พึงประสงค์ เช่น ระบบล่ม, การโต้ตอบที่ไม่พึงประสงค์กับระบบอื่น, การคำนวณที่ไม่ถูกต้อง และความเสียหายของข้อมูล เป็นต้น Validation and defect testing
- เป้าหมายแรกนำคือการทดสอบความถูกต้อง
- คาดว่าระบบจะทำงานได้อย่างถูกต้องโดยใช้ test case ที่กำหนดซึ่งสะท้อนถึงการใช้งานที่คาดไว้ของระบบ
- เป้าหมายที่สองคือการทดสอบข้อบกพร่อง
- test case ถูกออกแบบมาเพื่อแสดงข้อบกพร่อง
- test case ในการทดสอบข้อบกพร่องอาจทำให้เกิดความคลุมเครือและไม่จำเป็นต้องสะท้อนถึงระบบที่ใช้ตามปกติ Testing process goals
- การทดสอบความถูกต้อง
- เพื่อแสดงให้ผู้พัฒนาและลูกค้าระบบเห็นว่าซอฟต์แวร์มีคุณสมบัติตรงตามข้อกำหนด
- ความสำเร็จในการทดสอบนี้คือ การแสดงให้เห็นว่าระบบทำงานตามที่ตั้งใจ
- การทดสอบความบกพร่อง
- เพื่อค้นหาข้อบกพร่องหรือข้อบกพร่องในซอฟต์แวร์ที่มีพฤติกรรมไม่ถูกต้องหรือไม่เป็นไปตามข้อกำหนด
- ความสำเร็จในการทดสอบนี้คือ การทดสอบที่ทำให้ระบบทำงานได้ไม่ถูกต้องและทำให้เกิดข้อบกพร่องในระบบ An input-output model of program testing Verification vs validation
- การยืนยัน (Verification):
- "Are we building the product right”.
- ซอฟต์แวร์ควรเป็นไปตามข้อกำหนด
- การตรวจสอบ (Validation):
- "Are we building the right product”.
- ซอฟต์แวร์ควรทำในสิ่งที่ผู้ใช้ต้องการจริง ๆ V & V confidence
- จุดมุ่งหมายของ V & V คือการสร้างความเชื่อมั่นว่าระบบนี้ ‘fit for purpose’.
- ขึ้นอยู่กับวัตถุประสงค์ของระบบ ความคาดหวังของผู้ใช้ และสภาพแวดล้อมทางการตลาด
- วัตถุประสงค์ของซอฟต์แวร์
- ระดับความเชื่อมั่นขึ้นอยู่กับความสำคัญของซอฟต์แวร์ต่อองค์กร
- ความคาดหวังของผู้ใช้
- ผู้ใช้อาจมีความคาดหวังต่ำในบางประเภทของซอฟต์แวร์
- สภาพแวดล้อมทางการตลาด
- การปล่อยผลิตภัณฑ์สู่ตลาดในช่วงต้นอาจมีความสำคัญมากกว่าการค้นหาข้อบกพร่องในโปรแกรม Inspections and testing
- การตรวจสอบซอฟท์แวร์เพื่อค้นพบปัญหาในการวิเคราะห์ระบบแบบคงที่ (static verification)
- อาจจะใช้ tool-based document and code analysis
- การทดสอบซอฟต์แวร์ที่เกี่ยวข้องกับทดสอบและการสังเกตพฤติกรรมของผลิตภัณฑ์ (dynamic verification)
- ระบบถูกทดสอบด้วยข้อมูลเทียมและมีการสังเกตุพฤติกรรมการทำงาน Inspections and testing Software inspections
- อาจจะใช้คนตรวจสอบ source code โดยมีวัตถุประสงค์เพื่อค้นหาความผิดปกติและข้อบกพร่อง
- การตรวจสอบนี้ไม่จำเป็นต้อง run ระบบจึงอาจทำการตรวจสอบใช้ก่อนการใช้งานระบบจริงได้
- สามารถนำไปประยุกต์ใช้กับการนำเสนอระบบ (requirements, design, configuration data, test data, เป็นต้น).
- วิธีการนี้เป็นเทคนิคที่มีประสิทธิภาพสำหรับการค้นพบข้อผิดพลาดของโปรแกรม Advantages of inspections
- ในระหว่างการทดสอบ เรามักจะพบว่าข้อผิดพลาดหนึ่งสามารถปกปิด (ซ่อน) ข้อผิดพลาดอื่น ๆ ได้
- แต่เนื่องจากการตรวจสอบเป็นกระบวนการแบบคงที่ เราจึงไม่จำเป็นต้องสนใจการเชื่อมโยงระหว่างข้อผิดพลาด
- สามารถตรวจสอบระบบเวอร์ชันที่ไม่สมบูรณ์ได้ (โดยไม่มีค่าใช้จ่ายเพิ่มเติม)
- แต่หากโปรแกรมไม่สมบูรณ์เราจะต้องพัฒนา test harness ขึ้นมาโดยเฉพาะเพื่อทดสอบชิ้นส่วนที่พร้อมใช้งาน
- ในขณะค้นหาข้อบกพร่องของโปรแกรม เรายังสามารถพิจารณาคุณลักษณะอื่น ๆ ที่แสดงคุณภาพที่สูงขึ้นของโปรแกรม เช่น การเป็นไปตามมาตรฐาน ความเป็น portability และ maintainability Inspections and testing
- การตรวจสอบ (Inspections) และการทดสอบ (testing) เป็นส่วนเสริมซึ่งกันและกัน และไม่ใช่เทคนิคที่มีความคัดค้านกันเอง
- ทั้งสองควรดำเนินการระหว่างกระบวนการ V & V
- การตรวจสอบ (Inspections) สามารถตรวจสอบความสอดคล้องกับข้อกำหนด แต่อาจจะไม่สอดคล้องกับความต้องการที่แท้จริงของลูกค้า
- การตรวจสอบไม่สามารถตรวจสอบคุณลักษณะที่เป็น non-functional เช่นประสิทธิภาพ, การใช้งาน ฯลฯ A model of the software testing process Stages of testing
- Development testing
- ระบบจะถูกทดสอบในระหว่างการพัฒนา เพื่อค้นหาข้อผิดพลาดและข้อบกพร่อง
- Release testing,
- ทำโดยทีมทดสอบที่แยกจากทีมพัฒนา จะทดสอบเวอร์ชันที่สมบูรณ์ของระบบก่อนปล่อยออกสู่ผู้ใช้
- User testing
- ผู้ใช้ (หรือผู้ที่อาจเป็นผู้ใช้ระบบ) ทำการทดสอบระบบในสภาพแวดล้อมของตนเอง