Bir yazılım mühendisi olarak, endüstriyel ürünler için çok fazla kod yazıyorum. Sınıflar, iplikler, bazı tasarım çabaları ile nispeten karmaşık şeyler, fakat aynı zamanda performanstan ödün verir. Çok fazla test yapıyorum ve test yapmaktan bıktım, bu yüzden Coq, Isabelle gibi resmi kanıt araçlarına ilgi duydum ... Kodumun hatasız olduğunu ve yapıldığını resmi olarak kanıtlamak için bunlardan birini kullanabilir miyim Bununla birlikte? - ama bu araçlardan birini her kontrol ettiğimde, günlük yazılım mühendisliği için kullanılabilir olduklarına ikna olmuyorum. Şimdi, bu sadece ben olabilirim ve bu konuda işaretçilere / düşüncelere / fikirlere bakıyorum :-)
Özellikle, bu araçlardan birinin benim için çalışmasını sağlamak için, incelenen programın amaçlarını, yöntemlerini ... doğrulamak için büyük bir yatırım gerektireceği izlenimini edindim. O zaman merak ediyorum, başa çıkması gereken her şeyin boyutu göz önüne alındığında, ispatcının buharı bitip bitmeyeceğini merak ediyorum. Veya belki de yan etkilerden kurtulmam gerekebilir (bu kanıtlayıcı araçlar bildirimsel dillerle gerçekten iyi sonuç verir) ve bunun hızlı bir şekilde kullanılmayacağı için kullanılamayan "kanıtlanmış kod" ile sonuçlanıp sonuçlanmayacağını merak ediyorum. yeterince küçük. Ayrıca, çalıştığım dili değiştirme lüksüne sahip değilim, Java veya C ++ olması gerekiyor: Patronuma bundan sonra OXXXml'de kod yazacağımı söyleyemem, çünkü ki kodun doğruluğunu ispatlayabilirim ...
Resmi ispat araçları hakkında daha fazla deneyime sahip biri yorum yapabilir mi? Yine - Resmi bir prover aracı kullanmayı SEVİYORUM , harika olduklarını düşünüyorum, ama Java / C ++ 'nın alçak hendekinden ulaşamadığım fildişi bir kulede oldukları izlenimini edindim ... (PS: I ayrıca LOVE Haskell, OCaml ... yanlış bir fikre kapılmayın: Ilancı dillerin ve resmi ispatların hayranıyım, sadece bunu yazılım mühendisliği için gerçekçi olarak nasıl faydalı hale getirebileceğimi görmeye çalışıyorum)
Güncelleme: Bu oldukça geniş olduğundan, aşağıdaki daha spesifik soruları deneyelim: 1) endüstriyel Java / C ++ programlarının doğruluğunu kanıtlamak için kanıt kullanmanın örnekleri var mı? 2) Coq bu görev için uygun olur mu? 3) Coq uygunsa, önce Coq'da programı yazmalı mı, sonra da Coq dan C ++ / Java oluşturmalı mıyım? 4) Bu yaklaşım diş çekme ve performans optimizasyonlarını gerçekleştirebilir mi?