เมนู

ข้อมูลที่อยู่ในชุดทดสอบ ควรออกแบบและดูแลอย่างไร

ข้อมูลที่อยู่ในชุดทดสอบต้องทำซ้ำได้และตรวจสอบย้อนกลับได้ บทความนี้อธิบายวิธีออกแบบชุดข้อมูลที่อยู่ให้ครอบคลุมรูปแบบโลกจริง โดยไม่นำข้อมูลส่วนบุคคลของคนจริงมาใช้

เผยแพร่เมื่อ

  • ข้อมูลทดสอบ
  • คุณภาพซอฟต์แวร์

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

ทำไมต้องใช้ข้อมูลที่อยู่สังเคราะห์ในงานทดสอบ?

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

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

เหตุผลที่สามคือความสามารถในการทำซ้ำ ชุดทดสอบที่ดีต้องให้ผลเดิมทุกครั้งที่รัน ถ้าข้อมูลอ้างอิงบุคคลจริงที่อาจย้ายที่อยู่หรือเปลี่ยนเบอร์โทรศัพท์ ผลการทดสอบจะไม่คงที่โดยไม่มีเหตุผลด้านโค้ดรองรับ

เหตุผลที่สี่คือความครอบคลุม ข้อมูลของคนจริงหนึ่งคนแทนโลกได้แค่หนึ่งจุด แต่ข้อมูลสังเคราะห์สามารถสร้างให้ครอบคลุมประเทศ ภาษา และรูปแบบรหัสไปรษณีย์ที่หลากหลายได้ตามที่ต้องการ

ชุดข้อมูลที่อยู่ที่ดีต้องมีอะไรบ้าง?

อย่างแรกคือข้อมูลที่ระบุตัวตนของประเทศชัดเจน ทั้งรหัสประเทศและชื่อประเทศในภาษาที่ระบบใช้แสดงผล เพื่อทดสอบว่าการแปลงภาษาและการแสดงผลไม่สลับกัน

อย่างที่สองคือความหลากหลายของรูปแบบรหัสไปรษณีย์ ทั้งประเทศที่ใช้ตัวเลขล้วน ประเทศที่ใช้ตัวเลขผสมตัวอักษร และประเทศที่ไม่มีระบบรหัสไปรษณีย์เลย เพราะทั้งสามกลุ่มทำให้โค้ดเดินคนละเส้นทาง รายละเอียดของแต่ละกลุ่มอยู่ในบทความรูปแบบรหัสไปรษณีย์ของแต่ละประเทศ

อย่างที่สามคือกรณีที่มีส่วนประกอบครบและกรณีที่ขาดส่วนประกอบ บางที่อยู่มีหน่วยที่พัก บางที่มีชื่ออาคาร บางที่มีเพียงชื่อถนนกับเมือง การมีทั้งกรณีเต็มและกรณีน้อยที่สุดทำให้เห็นว่าฟอร์มและตัวตรวจสอบทำงานอย่างไรเมื่อข้อมูลไม่ครบ

อย่างที่สี่คือกรณีที่ผิดอย่างจงใจ ชุดทดสอบควรมีที่อยู่ที่ตั้งใจให้ผิดรูปแบบ เพื่อยืนยันว่าตัวตรวจสอบจับได้จริง ไม่ใช่ปล่อยผ่านเงียบ ๆ แนวทางแยกสองกระบวนการนี้อธิบายไว้ในบทความการตรวจสอบที่อยู่กับการปรับให้เป็นมาตรฐาน

อย่างที่ห้าคือคำอธิบายว่าข้อมูลแต่ละรายการทดสอบอะไร เพราะชุดข้อมูลที่ไม่มีคำอธิบายจะกลายเป็นของที่ไม่มีใครกล้าแก้ในอีกหกเดือนข้างหน้า

  • ข้อมูลระบุตัวตนของประเทศ: ทั้งรหัสประเทศและชื่อประเทศในภาษาที่ระบบใช้แสดงผล
  • ความหลากหลายของรูปแบบรหัสไปรษณีย์: ประเทศที่ใช้ตัวเลขล้วน ประเทศที่ใช้ตัวเลขผสมตัวอักษร และประเทศที่ไม่มีระบบรหัสไปรษณีย์เลย
  • ความครบของส่วนประกอบ: ทั้งกรณีที่มีหน่วยที่พักหรือชื่ออาคาร และกรณีที่เหลือเพียงชื่อถนนกับเมือง
  • กรณีที่ผิดอย่างจงใจ: ที่อยู่ที่ตั้งใจให้ผิดรูปแบบ เพื่อยืนยันว่าตัวตรวจสอบจับได้จริง
  • คำอธิบายประจำรายการ: ระบุว่าข้อมูลแต่ละรายการทดสอบอะไร เพื่อให้ผู้ที่มาดูแลต่อกล้าแก้ไข

ควรแยกข้อมูลทดสอบออกจากข้อมูลจริงอย่างไร?

วิธีที่ตรงไปตรงมาที่สุดคือใช้ฐานข้อมูลคนละชุดสำหรับการทดสอบ และห้ามไม่ให้ข้อมูลจริงไหลเข้าฐานข้อมูลทดสอบโดยเด็ดขาด แต่ในทางปฏิบัติ การนำเข้าข้อมูลจากระบบจริงเพื่อจำลองปัญหาก็เป็นเรื่องที่หลีกเลี่ยงได้ยากในบางครั้ง

เมื่อจำเป็นต้องใช้ข้อมูลที่ใกล้เคียงของจริง ควรทำให้ข้อมูลถูกทำให้ไม่ระบุตัวตนได้ตั้งแต่ก่อนออกจากระบบต้นทาง ไม่ใช่หลังจากที่มันไปถึงฐานข้อมูลทดสอบแล้ว เพราะเมื่อข้อมูลไปถึงที่นั่น มันจะถูกคัดลอกต่อไปยังที่อื่นอีกหลายแห่ง

อีกวิธีที่ใช้ได้ผลคือการทำเครื่องหมายข้อมูลทดสอบไว้ที่ระดับแถวข้อมูลตั้งแต่ตอนสร้าง ไม่ใช่ดูจากชื่อหรืออีเมล เพราะวิธีหลังจะพังทันทีที่มีคนใช้ข้อมูลจริงที่ไม่ตรงกับรูปแบบที่คาดไว้

สิ่งที่ต้องระวังคือไฟล์สำรองข้อมูลของฐานข้อมูลทดสอบ ซึ่งมักถูกละเลยและกลายเป็นที่เก็บข้อมูลจริงที่ถูกลืมไปแล้ว การลบข้อมูลจริงออกจากฐานข้อมูลโดยไม่จัดการไฟล์สำรองจึงไม่ช่วยอะไร

ข้อมูลทดสอบมีอายุการใช้งานหรือไม่?

มี และเป็นเรื่องที่ทีมมักมองข้าม ชุดข้อมูลทดสอบที่สร้างไว้เมื่อสองปีก่อนอาจอ้างอิงรหัสเขตการปกครองที่ถูกยุบไปแล้ว หรือใช้รูปแบบรหัสไปรษณีย์ที่หน่วยงานไปรษณีย์เปลี่ยนไปแล้ว เมื่อรันชุดทดสอบก็จะล้มเหลว และทีมอาจเสียเวลาไปกับการหาว่าโค้ดผิดทั้งที่ข้อมูลต่างหากที่ล้าสมัย

วิธีรับมือคือกำหนดวันทบทวนให้ชุดข้อมูล และระบุไว้ในคำอธิบายว่าข้อมูลอ้างอิงมาตรฐานชุดใด เมื่อมีการปรับปรุงมาตรฐานหรือพบว่าข้อมูลอ้างอิงเปลี่ยน ควรมีรายการว่ารายการใดในชุดข้อมูลได้รับผลกระทบ

อีกวิธีที่ช่วยลดปัญหาได้มากคือแยกข้อมูลส่วนที่คงที่ออกจากข้อมูลส่วนที่เปลี่ยนได้บ่อย ข้อมูลอย่างรหัสประเทศและชื่อประเทศเปลี่ยนช้า ส่วนรหัสไปรษณีย์และเขตการปกครองอาจเปลี่ยนได้เร็วกว่า การแยกสองส่วนนี้ออกจะทำให้การอัปเดตทำได้เฉพาะส่วนที่จำเป็น

ใช้ข้อมูลจริงทำให้การทดสอบดีขึ้นจริงหรือไม่?

ข้อมูลจริงมีประโยชน์ในแง่ที่มันสะท้อนความหลากหลายที่เราไม่คาดคิด เช่นการสะกดชื่อถนนที่ผิดไวยากรณ์แต่เป็นทางการ การเว้นวรรคที่ไม่สม่ำเสมอ และการใช้อักษรผสมในช่องเดียว ซึ่งข้อมูลสังเคราะห์มักไม่ค่อยมี

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

ทางเลือกที่สมดุลคือใช้ข้อมูลจริงเพียงเพื่อศึกษาว่าความหลากหลายที่แท้จริงมีลักษณะใด แล้วนำความรู้ที่ได้ไปสร้างชุดข้อมูลสังเคราะห์ที่จำลองความหลากหลายนั้น โดยไม่เก็บข้อมูลจริงไว้ในระบบทดสอบ

ข้อดีเพิ่มเติมของวิธีนี้คือทำให้ชุดข้อมูลเล็กลงมาก เพราะเราเก็บเฉพาะความหลากหลายที่ต้องการทดสอบ ไม่ได้เก็บข้อมูลทุกแถวเหมือนต้นฉบับ ซึ่งช่วยให้การรันชุดทดสอบเร็วขึ้นด้วย

สำหรับนักพัฒนา: รูปแบบไฟล์และจุดทดสอบที่ควรมี

ข้อแรกคือเก็บชุดข้อมูลในรูปแบบที่อ่านออกด้วยตาและเปรียบเทียบความเปลี่ยนแปลงได้ เช่นไฟล์ข้อความที่มีโครงสร้างชัดเจน แทนที่จะเป็นไฟล์ทึบหรือข้อมูลที่สร้างจากโค้ดในขณะรัน เพราะเมื่อชุดข้อมูลอยู่ในไฟล์ การแก้ไขจะผ่านการตรวจสอบได้ตามกระบวนการปกติ

ข้อที่สองคือให้แต่ละรายการมีรหัสอ้างอิงของตัวเอง เพื่อให้กรณีทดสอบอ้างถึงรายการได้โดยไม่ต้องคัดลอกเนื้อหาทั้งก้อนและไม่พังเมื่อมีการแก้ข้อความ

ข้อที่สามคือเขียนกรณีทดสอบที่ตรวจว่าข้อมูลที่ระบบผลิตออกมาตรงกับรูปแบบที่ชุดข้อมูลกำหนด ไม่ใช่ตรวจว่าตรงกับสตริงตายตัว เพราะการตรวจแบบสตริงตายตัวจะพังทุกครั้งที่มีการปรับปรุงชุดข้อมูลอย่างถูกต้อง

ข้อที่สี่คือทดสอบว่าระบบของเราปฏิบัติต่อข้อมูลทดสอบกับข้อมูลอื่นเหมือนกันจริง หากมีเส้นทางโค้ดพิเศษที่ทำงานเฉพาะเมื่อตรวจพบว่าข้อมูลเป็นข้อมูลทดสอบ แสดงว่าชุดทดสอบกำลังทดสอบเส้นทางพิเศษนั้น ไม่ใช่เส้นทางที่ผู้ใช้จริงจะเจอ

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

ก้าวต่อไป

เปิดชุดข้อมูลทดสอบของคุณแล้วตรวจว่ามีที่อยู่จากประเทศที่ไม่มีระบบรหัสไปรษณีย์หรือยัง ถ้ายัง ให้เพิ่มเข้าไปก่อน เพราะเป็นกรณีที่ระบบจำนวนมากทำพังโดยไม่มีใครสังเกต

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

อ่านต่อ

บทความเกี่ยวกับ เครื่องมือสร้างที่อยู่ปลอม

บทความเกี่ยวกับ เครื่องมือสร้างที่อยู่ปลอม

รายการนี้แสดงเฉพาะบทความในหัวข้อของหน้านี้