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