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