เมนู

อายุ กับเกณฑ์ขั้นต่ำที่มีมากกว่าหนึ่งค่าในระบบเดียว

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

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

  • ข้อมูลทดสอบ
  • การยืนยันอายุ

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

ทำไมเกณฑ์อายุจึงมีหลายค่า?

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

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

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

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

การให้ผู้ใช้กรอกวันเกิดเองต่างจากการตรวจเอกสารอย่างไร?

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

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

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

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

กรณีทดสอบที่ขอบเขตควรมีอะไรบ้าง?

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

ระเบียนกลุ่มที่สองคือผู้ที่ยังไม่ครบเกณฑ์อีกไม่กี่วัน ซึ่งเป็นกลุ่มที่ระบบมักปล่อยผ่านผิดเพราะคำนวณจากปีเพียงอย่างเดียว

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

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

กลุ่มระเบียนที่ชุดทดสอบที่ขอบเขตควรมี:

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

คนที่เกิดวันที่ 29 กุมภาพันธ์ถูกคำนวณอย่างไร?

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

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

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

สำหรับนักพัฒนา: เกณฑ์ควรเป็นค่าตั้งค่า ไม่ใช่ค่าคงที่ในโค้ด

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

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

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

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

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

ข้อที่ควรกำหนดเมื่อใช้เกณฑ์อายุเป็นค่าตั้งค่า:

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

ก้าวต่อไป

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

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

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

อ่านต่อ

บทความเกี่ยวกับ เครื่องมือสร้างข้อมูลตัวตนและข้อมูลทดสอบออนไลน์

บทความเกี่ยวกับ เครื่องมือสร้างข้อมูลตัวตนและข้อมูลทดสอบออนไลน์

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