ความผิดพลาดที่มักเกิดขึ้น ในขั้นตอนการทดสอบซอฟต์แวร์
ขั้นตอนในการทดสอบซอฟต์แวร์นั้น ถือเป็นขั้นตอนที่สำคัญมากขั้นตอนหนึ่ง เนื่องจากมันเป็นขั้นตอนที่ยืนยันคุณภาพของวงจรการพัฒนาระบบซอฟต์แวร์ (Software Testing Life Cycle, STLC) จะดีเพียงพอที่ผู้ใช้จะนำไปติดตั้งเพื่อใช้งานแล้วหรือไม่ ถึงกระนั้นเรื่องราวของความผิดพลาดที่องค์กรมักประสบในขั้นของการทดสอบระบบ ก็ยังคงพบเจอได้อยู่เสมอๆ
ในขั้นตอนการทดสอบซอฟต์แวร์นั้น ควรจะเริ่มได้ตั้งแต่ข้อกำหนดความต้องการ (Requirement) ของระบบหรือฟังก์ชั่นเกิดขึ้นมาเลย การทดสอบข้อกำหนดความต้องการนั้น จะช่วยได้มากในการกำจัดข้อบกพร่องในวงจรการพัฒนาซอฟต์แวร์เสียแต่เนิ่นๆ ซึ่งจะส่งผลให้สามารถลดรายจ่าย ประหยัดเวลาและแรงงานที่จะเกิดขึ้นในขั้นตอนต่อๆ ไปได้อย่างมาก โดยที่ขั้นตอนการกำหนดวิธีการในการทดสอบ และวางแผนการในการทดสอบนั้น ต่างก็เป็นส่วนหนึ่งในขั้นตอนของการออกแบบเช่นกัน ขั้นตอนของการทดสอบในวงจรการพัฒนาซอฟต์แวร์ มักแบ่งเป็น 4 ช่วง ได้แก่ การทดสอบแต่ละส่วนของซอฟต์แวร์แบบเดี่ยว (Unit Testing) การทดสอบซอฟต์แวร์ทั้งระบบ (System Testing) การทดสอบการเชื่อมประสานระบบ (System Integration Testing) และการทดสอบการยอมรับ (Acceptance Testing)
การทดสอบส่วนซอฟต์แวร์แบบเดี่ยว จะเป็นการตรวจโดยผู้ทดสอบจะได้รับทราบข้อมูลของการทำงานระบบมาก่อน ซึ่งมันจะช่วยได้มากในการตรวจแก้ข้อผิดพลาดของโค้ด ในขณะที่การทดสอบทั้งระบบ จะเน้นที่การมองระบบทั้งในแง่ของฟังก์ชั่นการทำงานและประเด็นอื่นๆ การทดสอบการเชื่อมประสานระบบ จะก่อให้เกิดความมั่นใจในแง่ของการใช้งานระบบทั้งในส่วนที่เป็นฟังก์ชั่นการใช้งานหลักและฟังก์ชั่นประกอบอื่นๆ การทดสอบการยอมรับ จะเป็นงานทดสอบการยอมรับจากผู้ใช้ การยอมรับจากผู้ปฏิบัติงาน การยอมรับเงื่อนไขตามสัญญาที่ตกลงกับผู้ใช้ ตลอดจนการทดสอบในขั้นอัลฟ่าและเบต้า
โดยข้อผิดพลาดแบบพื้นฐาน 5 ประการที่มักเกิดขึ้นในขั้นตอนการทดสอบซอฟต์แวร์มีดังนี้
1) ไม่ได้เตรียมนักทดสอบที่มีความละเอียดหรือเป็นมืออาชีพเพียงพอมาทำการทดสอบ ในทางกลับกันเรามักจะเห็นองค์กรที่อยู่ๆ จับเอานักพัฒนาหรือนักวิเคราะห์งานด้านธุรกิจมาทำการทดสอบซอฟต์แวร์แทนอยู่เสมอๆ
การทดสอบระบบนั้น ถือเป็นงานที่ต้องอาศัยความชำนาญ และนักพัฒนาระบบที่เขียนโค้ดนั้นๆ ก็มักจะมองข้ามข้อผิดพลาดของโค้ดตนเองได้ง่ายๆ ซึ่งจำเป็นต้องอาศัยมุมมองจากนักทดสอบระบบมืออาชีพ จึงจะสามารถมองประเด็นเหล่านี้ออก อีกทั้งนักพัฒนาระบบส่วนใหญ่ มักจะเร่งรีบเกินไปในขั้นตอนการทดสอบ เพื่อปรับเวลาให้เข้ากับเส้นตายที่กำหนด ซึ่งส่งผลให้โค้ดที่ถูกทดสอบไปแล้วนั้น ไม่ได้มาตรฐานที่ดีพอ
2) ไม่ได้ใช้เวลาที่เพียงพอกับการทดสอบ เนื่องจากขั้นตอนของการทดสอบนั้น มักจะโดนผลกระทบจากความล่าช้าในกำหนดการจากขั้นตอนก่อนหน้านั้นอยู่เป็นประจำ
หากขั้นตอนของการออกแบบหรือการสร้างซอฟต์แวร์ ใช้เวลามากเกินกว่าที่วางแผนเอาไว้ เวลาที่ขั้นตอนการทดสอบได้นั้น ก็จะถูกลดทอนลงเพื่อปรับกำหนดการให้เข้ากับเส้นตาย หากขั้นตอนทั้งหลายก่อนหน้าล่าช้าอย่างมากแล้ว ผลที่ได้ก็มักจะเป็นซอฟต์แวร์ที่เปิดให้ใช้งานได้ทันเวลา แต่เต็มไปด้วยบั๊ก
3) รอจนการเขียนโค้ดหรือการทดสอบส่วนซอฟต์แวร์แบบเดี่ยวเสร็จก่อน แล้วจึงเริ่มทำการทดสอบ ทั้งๆ ที่การทดสอบนั้น ควรเริ่มได้ตั้งแต่เริ่มมีข้อกำหนดความต้องการแล้ว ซึ่งมันอาจจะช่วยลดปัญหาที่จะเจอได้แต่เนิ่นๆ ราว 20-30 เปอร์เซ็นต์ทีเดียว
หลักการข้อหนึ่งของกรรมวิธีวิศวกรรมซอฟต์แวร์แบบ Agile นั้นก็คือการเขียนขั้นตอนการทดสอบส่วนซอฟต์แวร์เดี่ยวให้เสร็จก่อนที่การติดตั้งระบบจะเสร็จสิ้น ซึ่งจะทำให้การทำงานมีประสิทธิภาพขึ้น เนื่องจากมันจะช่วยรับประกันได้ว่า ซอฟต์แวร์ออกมาจะตรงตามข้อกำหนดความต้องการของลูกค้า มากกว่าที่จะเสียเวลาไปกับการทดสอบซอฟต์แวร์ซึ่งทำงานได้แค่ตามที่ผู้พัฒนาคาดหวังไว้
4) ไม่ได้ทำการสร้างกระบวนการตรวจสอบย้อนกลับ (Traceability) ในกระบวนการพัฒนา ข้อผิดพลาดที่พบเจอได้เสมอๆ ก็คือ ไม่ได้ทำการประเมินความครอบคลุม (Coverage) การใช้และเข้าถึงโปรแกรม จริงอยู่ที่เราอาจไม่สามารถประเมินการครอบคลุมได้หมดทั้ง 100 เปอร์เซ็นต์ แต่มันก็ควรจะถูกวางครอบคลุมตามจุดประสงค์ของระบบเป็นสำคัญ
กระบวนการตรวจสอบย้อนกลับโค้ดที่ผิดพลาดนั้น จะช่วยให้เราสามารถระบุสาเหตุของบั๊กเหล่านั้นได้อย่างรวดเร็ว หาไม่แล้ว มันจะกลายเป็นงานที่กินเวลาอย่างมาก อีกทั้งการทดสอบความครอบคลุมของระบบ ก็จะช่วยสร้างความมั่นใจได้ว่า ฟังก์ชั่นที่มีอยู่จะถูกทดสอบในขั้นตอนใดขั้นตอนหนึ่งอย่างแน่นอน
5) ไม่ได้ทำการสรุปว่าความผิดพลาดที่เกิดขึ้นมีสาเหตุมาจากอะไร การค้นหาต้นตอที่แท้จริงของปัญหานั้น จะช่วยลดข้อผิดพลาดในซอฟต์แวร์รุ่นต่อๆ ไปได้