Là một kỹ sư phần mềm, tôi viết rất nhiều mã cho các sản phẩm công nghiệp. Công cụ tương đối phức tạp với các lớp, chủ đề, một số nỗ lực thiết kế, nhưng cũng có một số thỏa hiệp cho hiệu suất. Tôi làm rất nhiều thử nghiệm và tôi cảm thấy mệt mỏi khi thử nghiệm, vì vậy tôi đã quan tâm đến các công cụ chứng minh chính thức, như Coq, Isabelle ... Tôi có thể sử dụng một trong số này để chính thức chứng minh rằng mã của tôi không có lỗi và được thực hiện với nó? - nhưng mỗi lần tôi kiểm tra một trong những công cụ này, tôi bỏ đi không tin rằng chúng có thể sử dụng được cho công nghệ phần mềm hàng ngày. Bây giờ, đó chỉ có thể là tôi và tôi đang tìm kiếm con trỏ / ý kiến / ý tưởng về điều đó :-)
Cụ thể, tôi có ấn tượng rằng để làm cho một trong những công cụ này hoạt động với tôi sẽ cần một khoản đầu tư lớn để xác định đúng cách để cung cấp các đối tượng, phương thức ... của chương trình đang xem xét. Sau đó tôi tự hỏi liệu người hoạt ngôn sẽ không hết hơi với kích thước của mọi thứ mà nó sẽ phải đối phó. Hoặc có lẽ tôi sẽ phải loại bỏ các tác dụng phụ (những công cụ hoạt động đó dường như thực sự tốt với các ngôn ngữ khai báo), và tôi tự hỏi liệu điều đó có dẫn đến "mã đã được chứng minh" không thể được sử dụng bởi vì nó sẽ không nhanh hoặc đủ nhỏ Ngoài ra, tôi không có sự thay đổi ngôn ngữ mà tôi làm việc cùng, nó cần phải là Java hoặc C ++: Tôi không thể nói với sếp của mình rằng tôi sẽ viết mã bằng OXXXml kể từ bây giờ, vì đó là ngôn ngữ duy nhất trong mà tôi có thể chứng minh tính đúng đắn của mã ...
Ai đó có thể có nhiều kinh nghiệm hơn về các công cụ bằng chứng chính thức nhận xét? Một lần nữa - Tôi sẽ yêu sử dụng một công cụ Prover chính thức, tôi nghĩ rằng họ là rất lớn, nhưng tôi có ấn tượng họ đang ở trong một tháp ngà mà tôi không thể đạt được từ các mương thấp kém của Java / C ++ ... (PS: Tôi còn TÌNH YÊU Haskell, OCaml ... đừng hiểu lầm: Tôi là người hâm mộ ngôn ngữ khai báo và bằng chứng chính thức, tôi chỉ đang cố gắng để xem làm thế nào tôi có thể thực sự hữu ích cho công nghệ phần mềm)
Cập nhật: Vì điều này khá rộng, chúng ta hãy thử các câu hỏi cụ thể hơn sau đây: 1) có ví dụ nào về việc sử dụng provers để chứng minh tính đúng đắn của các chương trình Java / C ++ công nghiệp không? 2) Coq có phù hợp với nhiệm vụ đó không? 3) Nếu Coq phù hợp, tôi có nên viết chương trình trong Coq trước không, sau đó tạo C ++ / Java từ Coq? 4) Cách tiếp cận này có thể xử lý tối ưu hóa luồng và hiệu suất?