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