เป้าหมายสำคัญของวิธีการที่เป็นทางการคือการพิสูจน์ความถูกต้องของระบบไม่ว่าจะด้วยวิธีอัตโนมัติหรือโดยมนุษย์ อย่างไรก็ตามดูเหมือนว่าแม้ว่าคุณจะสามารถให้การพิสูจน์ความถูกต้องคุณอาจไม่สามารถรับประกันได้ว่าระบบจะไม่ล้มเหลว ตัวอย่างเช่น:
- ข้อมูลจำเพาะอาจไม่เป็นแบบอย่างของระบบอย่างถูกต้องหรือระบบการผลิตอาจซับซ้อนเกินกว่าที่จะเป็นแบบจำลองหรือระบบอาจมีข้อบกพร่องโดยเนื้อแท้เนื่องจากข้อกำหนดที่ขัดแย้งกัน เทคนิคใดที่เป็นที่รู้จักในการทดสอบว่าข้อกำหนดนั้นเหมาะสมหรือไม่?
- กระบวนการพิสูจน์อาจมีข้อบกพร่องเช่นกัน! ใครจะรู้ว่ากฎการอนุมานเหล่านั้นถูกต้องและถูกต้องตามกฎหมาย นอกจากนี้การพิสูจน์อาจมีขนาดใหญ่มากและเราจะรู้ได้อย่างไรว่าพวกเขาไม่มีข้อผิดพลาด? นี่คือหัวใจของการวิจารณ์ในเดอมิลโลลิปตันและ "กระบวนการทางสังคมและบทพิสูจน์ทฤษฎีบทและโปรแกรมของ Perlis" นักวิจัยวิธีการอย่างเป็นทางการที่ทันสมัยตอบสนองต่อการวิจารณ์นี้ได้อย่างไร
- ณ รันไทม์มีเหตุการณ์และปัจจัยหลายอย่างที่อาจส่งผลกระทบต่อระบบอย่างจริงจัง ยกตัวอย่างเช่นรังสีคอสมิกสามารถเปลี่ยนแปลงแรมในรูปแบบที่ไม่สามารถคาดเดาได้และโดยทั่วไปเราไม่รับประกันว่าฮาร์ดแวร์จะไม่ประสบกับข้อผิดพลาดของไบเซนไทน์ซึ่ง Lamport ได้พิสูจน์แล้วว่าเป็นเรื่องยากที่จะทนทาน ดังนั้นความถูกต้องของระบบคงไม่รับประกันว่าระบบจะไม่ล้มเหลว! มีเทคนิคใดที่ทราบกันดีว่ามีความผิดพลาดของฮาร์ดแวร์จริงหรือไม่?
- ในปัจจุบันการทดสอบเป็นเครื่องมือที่สำคัญที่สุดที่เรามีในการสร้างซอฟต์แวร์นั้น ดูเหมือนว่ามันควรจะเป็นเครื่องมือเสริมที่มีวิธีการอย่างเป็นทางการ อย่างไรก็ตามฉันส่วนใหญ่เห็นการวิจัยซึ่งเน้นทั้งวิธีการหรือการทดสอบอย่างเป็นทางการ สิ่งที่เป็นที่รู้จักกันเกี่ยวกับการรวมทั้งสองเข้าด้วยกัน?