ข้อบกพร่องที่พบบ่อยจากการทดสอบ Software

เราอาจมีความคุ้นเคยกับประเภทของข้อผิดพลาด (bug/defect) ที่พบบ่อยในการพัฒนาซอฟต์แวร์ที่มีการเผยแพร่ในเวปไซต์ต่าง ๆ ซึงสรุปตามประเภทของ bug เช่น ฟังก์ชันการทำงานผิด , การคำนวณผิดพลาด , ลิงค์ไม่ถูกต้อง เป็นต้น วันนี้ในฐานะที่ผู้เขียนคลุกคลีในวงการซอฟต์แวร์ ตั้งแต่การออกแบบ พัฒนา และทดสอบ มาหลายปี วันนี้จึงอยากจะยกตัวอย่างเหตุการณ์และข้อผิดพลาด ที่ผู้เขียนพบจากการทดสอบซึ่งเป็นข้อผิดพลาดด้าน Functional บ่อย ๆ ดังนี้

1. การเริ่มหรือเปลี่ยนแปลงสถานะ
แม้ว่าปัจจุบันการติดตั้งระบบซอฟต์แวร์ มักจะไม่ได้เริ่มต้นจากฐานข้อมูลเปล่า หรืออย่างน้อยจะต้องมีข้อมูลพื้นฐานที่จำเป็นในการเริ่มต้นการใช้งานติดไปด้วย เช่น รายชื่อจังหวัด อำเภอ ตำบล หรือค่าตั้งต้นต่าง ๆ แต่เราต้องไม่ลืมว่าบางครั้งเราอาจจะต้องมีการ Reset ข้อมูลอะไรบางอย่างในระหว่างการใช้งานระบบ เพื่อให้ระบบเริ่มนับหนึ่งใหม่  เช่น การเริ่มปีงบประมาณ หรือ การตัดรอบบัญชี  ซึ่งจะต้องมีการตั้งค่าข้อมูลที่เกี่ยวข้องใหม่ และส่งผลต่อการนำไปใช้งานต่อของฟังก์ชันหรือระบบอื่น ๆ

ปัญหาที่พบจากการกำหนดค่าเริ่มต้นหรือปรับสถานะที่พบบ่อยคือ ระบบมักจะลืมกำหนดค่าตัวแปรต่าง ๆ ให้ครบถ้วนหรือไม่ถูกต้อง หรือระบบอื่น ๆ ที่เกี่ยวข้องไม่มีรับทราบการเปลี่ยนแปลงของสถานะ โดยเฉพาะระบบที่พัฒนาโดย Developer หลายคนและแบ่งกันพัฒนาคนละระบบ การทำงานของระบบต่าง ๆ จึงไม่ถูกต้องตามเงื่อนไขที่ควรจะเป็น เช่น การกำหนดรหัสเอกสารผิด คำนวณผลรวมของยอดขายประจำปีไม่ถูกต้อง หรือ การประมวลผลผิดพลาด
เราควรมีความเข้าใจในสถานะ(state) ของระบบที่เกี่ยวข้องกับข้อมูลนั้น ๆ โดยอาจจะวาดเป็น State Diagram เพื่อให้มั่นใจว่ามีการทดสอบฟังก์ชันนั้นทำงานได้ครอบคลุมทุกสถานะอย่างถูกต้องแล้ว จัดทำ Checklist เพื่อใช้ในการทดสอบความถูกต้องของการทำงานให้ครบถ้วนและถูกต้องทุกครั้ง รวมถึงการจัดเตรียมฐานข้อมูลที่มีเฉพาะข้อมูลเริ่มต้นสำหรับการทำ Regression Test

2. การจำกัดประเภท รูปแบบ หรือขนาดข้อมูลนำเข้า
ในการรับ input ต่าง ๆ เรามีการกำหนดประเภทของข้อมูลที่ผู้ใช้สามารถบันทึกได้ ว่าเป็นตัวเลข หรือ ตัวอักษร แต่อาจจะลืมคำนึงถึงช่วงข้อข้อมูลที่ผู้ใช้ควรบันทึกได้ เช่น น้ำหนักของนักศึกษา ควรอยู่ในช่วง 35 – 200 กิโลกรัม หรือ หมายเลขโทรศัพท์ ควรมีรูปแบบ [0-9]{3}-[0-9]{3}-[0-9]{4} หรือกำหนดเป็นตัวเลข 12-13 หลัก รวมถึงการกำหนดความยาวของข้อมูลประเภทตัวอักษรที่ระบบสามารถรองรับและสามารถนำไปใช้งานต่อได้อย่างถูกต้อง

การไม่กำหนดประเภทหรือขนาดข้อมูลที่เหมาะสม อาจทำให้การนำข้อมูลไปใช้งานต่อไม่ได้ หรือประมวลผลผิดพลาด เช่น หากไม่ตรวจสอบรูปแบบของหมายเลขโทรศัพท์ แล้วมีฟังก์ชันการโทรอัตโนมัติ ทำให้ระบบไม่สามารถโทรออกได้ , หรือการที่เราไม่จำกัดรูปแบบหรือขนาดของข้อมูลนำเข้า อาจส่งผลต่อการทำงานของระบบได้หลายแบบ เช่น กรณีที่บันทึกข้อมูลที่เป็นตัวอักษรยาวมาก ๆ โดยไม่จำกัดขนาด ส่งผลให้การแสดงข้อมูลไม่ครบถ้วน ไม่สวยงามหรือไม่น่าใช้ และ หรืออาจบดบังฟังก์ชันหรือส่วนสำคัญขอระบบ โดยเฉพาะกรณีที่แสดงผลในมือถือซึ่งมีพื้นที่แสดงผลจำกัด เช่น Mobile Application

Image : https://applitools.com/blog/examples-software-ui-bugs/

 

เราจึงควรมีการกำหนดประเภท รูปแบบและขนาดของข้อมูลนำเข้าที่เหมาะสมตามความต้องการใช้งานจริง และทำการ Validate ข้อมูลก่อนการจัดเก็บหรือนำมาใช้ในการประมวลผลในระบบ และจัดเตรียมข้อมูลสำหรับใช้ในการทดสอบให้ครอบคลุม โดยสามารถใช้เทคนิค Boundary Value Analysis และ Equivalence Partitioning ในการออกแบบข้อมูลทดสอบให้มีความครอบคลุมทุกช่วงของข้อมูลที่เป็นไปได้ (ศึกษาข้อมูลเพิ่มเติมได้ที่ https://www.guru99.com/equivalence-partitioning-boundary-value-analysis.html )
3. การอ้างถึงข้อมูลเก่าหรือข้อมูลที่ถูกยกเลิก
เป็นเรื่องธรรมดาที่ข้อมูลจะต้องมีการสร้างใหม่ แก้ไข และ ลบหรือยกเลิก เช่น ข้อมูลอำเภอหนึ่งของประเทศไทย อาจถูกยกระดับเป็นจังหวัดใหม่ , สถานะของพนักงานที่มีการพ้นสภาพไป หรือการ โดยปกติแล้วข้อมูลเหล่านี้มักจะถูกปรับปรุงสถานะแทนการลบออกจากฐานข้อมูลจริง (ปกติการลบข้อมูลประเภทนี้จะถูกจำกัดด้วย foreign key ของฐานข้อมูลอยู่แล้ว)
เมื่อข้อมูลถูกยกเลิกไปโดยยังมีข้อมูลที่อ้างไปยังข้อมูลเดิมอยู่ อาจจะทำให้การการแสดงผลหรือการนำข้อมูลไปประมวลผลผิดพลาด เช่น


ในการบันทึกข้อมูลใบสั่งขายใหม่ Developer จะ Filter ข้อมูลเพื่อแสดงในหน้าจอเฉพาะพนักงานที่มีสถานะ Active เท่านั้น เมื่อ Dataset เดียวกัน ถูกนำมาใช้ในการแสดงข้อมูลใบสั่งขายที่มีบันทึกไว้โดยพนักงานที่ลาออกไปแล้ว จะทำให้ข้อมูลพนักงานไม่แสดงในใบสั่งขาย
การจัดการกับข้อมูลลักษณะนี้จำเป็นจะต้องแยก Dataset ข้อมูลสำหรับการใช้ในการบันทึกและการแสดงผล โดยหากเป็นข้อมูลที่ยกเลิกแล้ว และจำเป็นต้องมีการปรับปรุงข้อมูลก่อน จึงจะนำไปใช้งานต่อได้ เช่น ข้อมูลที่อยู่ลูกค้าที่อยู่เคยอยู่ในอำเภอที่ถูกยกระดับเป็นจังหวัดแล้ว อาจจะใช้แสดงสัญลักษณ์เพื่อให้ผู้ใช้งานทราบว่าข้อมูลนั้นหมดอายุแล้ว หรือ การเคลียร์ข้อมูลที่ไม่ได้ใช้แล้วเพื่อให้ผู้ใช้งานตระหนักว่าข้อมูลยังไม่ครบถ้วน และหากเป็นไปได้การ migrate ข้อมูลแบบ batch แทนการให้ผู้ใช้งานแก้ไขทีละรายการจะทำให้ได้ข้อมูลได้รับการปรับปรุงให้ถูกต้องและครบถ้วนกว่า โดยในส่วนของการออกแบบการทดสอบนั้น จะต้องมีการออกแบบการทดสอบให้ครอบคลุมทุกสถานะของ Life cycle ของข้อมูลด้วย
นอกจากนี้ยังอาจมีข้อบกพร่องอื่น ๆ ที่สามารถพบได้จากการทดสอบซอฟต์แวร์ ซึ่งส่วนมากแล้วสามารถตรวจจับได้โดยการออกแบบกรณีทดสอบให้ครอบคลุมฟังก์ชันการทำงานของระบบ ซึ่งสามารถทำได้โดยการวิเคราะห์ตาม workflow , Data Lifecycle และ Data Range ของข้อมูลต่าง ๆ ที่เกี่ยวข้อง ซึ่งข้อมูลเหล่านี้สามารถรวบรวมได้ตั้งแต่เริ่มต้นของการพัฒนาซอฟต์แวร์ เพื่อให้สามารถออกแบบกรณีทดสอบให้มีความครอบคลุมและสอดคล้องตามวัตถุประสงค์ในการพัฒนาซอฟต์แวร์ให้มากที่สุด

 

ผู้เขียน : Sirisuda Thiangfak

อ้างอิ งรูปภาพปก : https://all-free-download.com/free-vector/download/businessman-wearing-goggle-vr-with-touching-interface-into-virtual-reality-world-future-technology-flat-isometric-web-header-template-flat-isometric-vector-illustration_6844846.html