เมนู

การตรวจสอบแบบกลุ่ม: ขั้นตอนสำหรับรายการยาว

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

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

  • การตรวจสอบแบบกลุ่ม
  • ทำความสะอาดข้อมูล
  • ข้อมูลทดสอบ

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

การตรวจสอบแบบกลุ่มต่างจากการตรวจทีละรายการตรงไหน?

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

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

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

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

ทำความสะอาดข้อมูลก่อน แล้วจึงเริ่มคำนวณ

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

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

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

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

ผลลัพธ์ควรถูกแบ่งเป็นกี่ประเภท?

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

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

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

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

รายการซ้ำ ค่าว่าง และไฟล์ขนาดใหญ่

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

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

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

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

เขียนรายงานอย่างไรจึงจะลงมือแก้ได้จริง

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

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

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

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

สำหรับนักพัฒนา: ประมวลผลเป็นช่วงและทำซ้ำได้

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

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

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

ก้าวต่อไป

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

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

อ่านต่อ

บทความเกี่ยวกับ ตรวจสอบเลขบัตรประชาชน