ยืนยันไม่รอดความเป็นจริง
โดยทั่วไปแล้วการยืนยันไม่รอดจากการสัมผัสกับข้อมูลจริง เป็นส่วนหนึ่งของกระบวนการวิศวกรรมซอฟต์แวร์ในการตัดสินใจว่าข้อมูลใดที่คุณต้องการจัดการและอยู่นอกขอบเขต
กราฟครอบครัวแบบวงกลม
เกี่ยวกับครอบครัว "ต้นไม้" (อันที่จริงมันเป็นกราฟที่พัดเต็มรวมถึงรอบ) มีเกร็ดเล็กเกร็ดน้อยที่ดี:
ฉันแต่งงานกับหญิงม่ายที่มีลูกสาวโต พ่อของฉันที่มาเยี่ยมเราบ่อยครั้งหลงรักลูกสาวของฉันและแต่งงานกับเธอ เป็นผลให้พ่อของฉันกลายเป็นลูกชายของฉันและลูกสาวของฉันกลายเป็นแม่ของฉัน หลังจากนั้นไม่นานฉันก็ให้ลูกชายภรรยาของฉันซึ่งเป็นพี่ชายของพ่อของฉันและลุงของฉัน ภรรยาของพ่อของฉัน (ซึ่งเป็นลูกสาวของฉันและแม่ของฉัน) มีลูกชายด้วย เป็นผลให้ฉันได้รับพี่ชายและหลานชายในบุคคลเดียวกัน ภรรยาของฉันตอนนี้ยายของฉันเพราะเธอเป็นแม่ของฉัน ดังนั้นฉันเป็นสามีของภรรยาของฉันและในเวลาเดียวกันหลานชายของภรรยาของฉัน กล่าวอีกนัยหนึ่งฉันเป็นปู่ของฉันเอง
สิ่งต่าง ๆ น่าประหลาดใจยิ่งขึ้นเมื่อคุณนำตัวแทนหรือ "บิดาคลุมเครือ" มาพิจารณา
วิธีจัดการกับสิ่งนั้น
กำหนดรอบเป็นนอกขอบเขต
คุณสามารถตัดสินใจว่าซอฟต์แวร์ของคุณไม่ควรจัดการกับกรณีที่หายากเช่นนี้ หากเกิดกรณีเช่นนี้ขึ้นผู้ใช้ควรใช้ผลิตภัณฑ์อื่น สิ่งนี้ทำให้การจัดการกับกรณีที่พบบ่อยมีประสิทธิภาพมากขึ้นเนื่องจากคุณสามารถยืนยันได้มากขึ้นและเป็นโมเดลข้อมูลที่ง่ายขึ้น
ในกรณีนี้เพิ่มคุณสมบัติการนำเข้าและส่งออกที่ดีให้กับซอฟต์แวร์ของคุณเพื่อให้ผู้ใช้สามารถโยกย้ายไปยังผลิตภัณฑ์อื่นได้อย่างง่ายดายเมื่อจำเป็น
อนุญาตความสัมพันธ์ด้วยตนเอง
คุณสามารถอนุญาตให้ผู้ใช้เพิ่มความสัมพันธ์ด้วยตนเอง ความสัมพันธ์เหล่านี้ไม่ใช่ "พลเมืองชั้นหนึ่ง" เช่นซอฟต์แวร์ที่นำมาใช้อย่างที่เป็นอยู่ไม่ได้ตรวจสอบพวกเขาและไม่ได้จัดการกับพวกเขาในรูปแบบข้อมูลหลัก
ผู้ใช้สามารถจัดการกรณีที่หายากด้วยมือ แบบจำลองข้อมูลของคุณจะยังคงค่อนข้างง่ายและการยืนยันของคุณจะอยู่รอด
ระมัดระวังความสัมพันธ์ด้วยตนเอง มีสิ่งล่อใจที่จะทำให้สามารถกำหนดค่าได้อย่างสมบูรณ์และสร้างโมเดลข้อมูลที่กำหนดค่าได้อย่างสมบูรณ์ สิ่งนี้จะไม่ทำงาน: ซอฟต์แวร์ของคุณจะไม่ขยายคุณจะได้รับข้อผิดพลาดที่แปลกและในที่สุดอินเทอร์เฟซผู้ใช้จะไม่สามารถใช้งานได้ รูปแบบการต่อต้านนี้เรียกว่า"soft coding"และ"The WTF รายวัน"เต็มไปด้วยตัวอย่างสำหรับสิ่งนั้น
ทำให้แบบจำลองข้อมูลของคุณมีความยืดหยุ่นมากขึ้นข้ามการยืนยันยืนยันค่าคงที่
วิธีสุดท้ายคือการทำให้ข้อมูลของคุณมีความยืดหยุ่นมากขึ้น คุณจะต้องข้ามการยืนยันเกือบทั้งหมดและวางโมเดลข้อมูลของคุณบนกราฟที่ถูกเป่า ดังที่ตัวอย่างข้างต้นแสดงให้เห็นว่าเป็นไปได้ที่คุณจะเป็นปู่ของคุณเองได้อย่างง่ายดายดังนั้นคุณสามารถมีรอบได้
ในกรณีนี้คุณควรทดสอบซอฟต์แวร์อย่างกว้างขวาง คุณต้องข้ามการยืนยันเกือบทั้งหมดดังนั้นจึงมีโอกาสที่ดีสำหรับข้อบกพร่องเพิ่มเติม
ใช้เครื่องสร้างข้อมูลการทดสอบเพื่อตรวจสอบกรณีทดสอบที่ผิดปกติ มีห้องสมุดสำหรับการตรวจสอบอย่างรวดเร็วมีHaskell , ErlangหรือC สำหรับ Java / Scala มีScalaCheckและNyaya แนวคิดการทดสอบอย่างหนึ่งคือการจำลองประชากรสุ่มปล่อยให้มันเป็นการรวมกันแบบสุ่มจากนั้นให้ซอฟต์แวร์ของคุณนำเข้าก่อนแล้วจึงส่งออกผลลัพธ์ ความคาดหวังจะเป็นไปได้ว่าการเชื่อมต่อทั้งหมดในเอาท์พุทก็อยู่ในอินพุทและข้อรองด้วย
กรณีที่คุณสมบัติยังคงเหมือนเดิมเรียกว่าค่าคงที่ ในกรณีนี้ค่าคงที่คือชุดของ "ความสัมพันธ์แบบโรแมนติก" ระหว่างบุคคลในประชากรจำลอง พยายามหาค่าคงที่ให้ได้มากที่สุดและทดสอบด้วยข้อมูลที่สร้างแบบสุ่ม ค่าคงที่สามารถทำงานได้เช่น:
- ลุงยังคงเป็นลุงแม้เมื่อคุณเพิ่ม "ความสัมพันธ์แบบโรแมนติก" มากขึ้น
- เด็กทุกคนมีผู้ปกครอง
- ประชากรที่มีสองชั่วอายุคนมีปู่ย่าตายายอย่างน้อยหนึ่งคน
หรืออาจเป็นเทคนิค:
- ซอฟต์แวร์ของคุณจะไม่ผิดพลาดบนกราฟมากถึง 10,000 ล้านสมาชิก (ไม่ว่าจะเชื่อมโยงกันกี่ครั้ง)
- ซอฟต์แวร์ของคุณปรับขนาดด้วย O (จำนวนโหนด) และ O (จำนวนขอบ ^ 2)
- ซอฟต์แวร์ของคุณสามารถบันทึกและโหลดกราฟครอบครัวใหม่ได้สูงสุดถึง 10,000 ล้านสมาชิก
เมื่อทำการทดสอบแบบจำลองคุณจะพบกับมุมที่แปลกประหลาดมากมาย การแก้ไขจะใช้เวลานาน นอกจากนี้คุณจะสูญเสียการปรับแต่งมากมายซอฟต์แวร์ของคุณจะทำงานช้าลงมาก คุณต้องตัดสินใจว่ามันคุ้มค่าหรือไม่และหากอยู่ในขอบเขตของซอฟต์แวร์ของคุณ