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