Sebagai seorang insinyur perangkat lunak, saya menulis banyak kode untuk produk industri. Hal-hal yang relatif rumit dengan kelas, utas, beberapa upaya desain, tetapi juga beberapa kompromi untuk kinerja. Saya melakukan banyak pengujian, dan saya bosan dengan pengujian, jadi saya tertarik pada alat bukti formal, seperti Coq, Isabelle ... Bisakah saya menggunakan salah satunya untuk membuktikan secara resmi bahwa kode saya bebas dari bug dan dilakukan dengan itu? - tetapi setiap kali saya memeriksa salah satu alat ini, saya pergi dengan tidak yakin bahwa mereka dapat digunakan untuk rekayasa perangkat lunak sehari-hari. Sekarang, itu hanya bisa saya, dan saya mencari petunjuk / pendapat / ide tentang itu :-)
Secara khusus, saya mendapat kesan bahwa untuk membuat salah satu alat ini bekerja bagi saya akan membutuhkan investasi besar untuk mendefinisikan dengan tepat objek yang tepat, metode ... dari program yang sedang dipertimbangkan. Saya kemudian bertanya-tanya apakah pepatah tidak akan kehabisan tenaga mengingat ukuran semua yang harus dihadapi. Atau mungkin saya harus menghilangkan efek samping (alat-alat yang tepat tampaknya sangat baik dengan bahasa deklaratif), dan saya bertanya-tanya apakah itu akan menghasilkan "kode terbukti" yang tidak dapat digunakan karena tidak akan cepat atau cukup kecil. Juga, saya tidak memiliki kemewahan mengubah bahasa tempat saya bekerja, itu perlu Java atau C ++: Saya tidak bisa memberi tahu bos saya bahwa saya akan kode dalam OXXXml mulai sekarang, karena itu satu-satunya bahasa di yang saya dapat membuktikan kebenaran kode ...
Bisakah seseorang dengan pengalaman lebih banyak alat bukti formal berkomentar? Sekali lagi - Saya akan SENANG menggunakan alat pepatah formal, saya pikir mereka hebat, tetapi saya memiliki kesan mereka berada di menara gading yang tidak dapat saya jangkau dari parit rendah Java / C ++ ... (PS: I juga CINTA Haskell, OCaml ... jangan salah paham: Saya penggemar bahasa deklaratif dan bukti formal, saya hanya mencoba melihat bagaimana saya bisa secara realistis membuat itu berguna untuk rekayasa perangkat lunak)
Pembaruan: Karena ini cukup luas, mari kita coba pertanyaan yang lebih spesifik berikut: 1) apakah ada contoh menggunakan prover untuk membuktikan kebenaran program Java / C ++ industri? 2) Apakah Coq akan cocok untuk tugas itu? 3) Jika Coq cocok, haruskah saya menulis program dalam Coq terlebih dahulu, kemudian menghasilkan C ++ / Java dari Coq? 4) Bisakah pendekatan ini menangani threading dan optimalisasi kinerja?