Tujuan penting dari metode formal adalah untuk membuktikan kebenaran sistem, baik dengan cara otomatis atau yang diarahkan manusia. Namun, tampaknya bahkan jika Anda dapat memberikan bukti kebenaran, Anda TIDAK mungkin dapat menjamin bahwa sistem tidak akan gagal. Sebagai contoh:
- Spesifikasi mungkin tidak memodelkan sistem dengan benar, atau sistem produksi mungkin terlalu rumit untuk dimodelkan, atau sistem mungkin cacat secara inheren karena persyaratan yang bertentangan. Teknik apa yang diketahui untuk menguji apakah suatu spesifikasi masuk akal sama sekali?
- Proses pembuktian mungkin juga cacat! Siapa yang tahu bahwa aturan inferensi itu benar dan sah? Selain itu, buktinya bisa sangat besar, dan bagaimana kita tahu mereka tidak mengandung kesalahan? Ini adalah jantung dari kritik di de Millo, Lipton, dan Perlis "Proses Sosial dan Bukti Teorema dan Program". Bagaimana para peneliti metode formal modern merespons kritik ini?
- Saat runtime, ada banyak kejadian dan faktor nondeterministik yang dapat secara serius mempengaruhi sistem. Sebagai contoh, sinar kosmik dapat mengubah RAM dengan cara yang tidak dapat diprediksi, dan lebih umum kami tidak memiliki jaminan bahwa perangkat keras tidak akan mengalami kesalahan Bizantium, yang telah terbukti Lamport sangat sulit untuk dikuatkan. Jadi kebenaran sistem statis tidak menjamin sistem tidak akan gagal! Apakah ada teknik yang diketahui bertanggung jawab atas kesalahan perangkat keras yang sebenarnya?
- Saat ini, pengujian adalah alat paling penting yang kami miliki untuk menetapkan bahwa perangkat lunak berfungsi. Sepertinya itu harus menjadi alat pelengkap dengan metode formal. Namun, saya kebanyakan melihat penelitian yang berfokus pada metode formal atau pengujian. Apa yang diketahui tentang menggabungkan keduanya?