소프트웨어 엔지니어로서 저는 산업용 제품에 대한 많은 코드를 작성합니다. 클래스, 스레드, 일부 디자인 노력, 성능 저하와 함께 비교적 복잡한 작업. 나는 많은 테스트를 수행하고 테스트에 지쳤으므로 Coq, Isabelle과 같은 공식적인 증거 도구에 관심이있었습니다 ...이 중 하나를 사용하여 내 코드에 버그가 없으며 완료되었음을 증명할 수 있습니까 그것으로? -그러나 이러한 도구 중 하나를 확인할 때마다 일상적인 소프트웨어 엔지니어링에 사용할 수 있는지 확신 할 수 없습니다. 이제, 그것은 나만이 될 수 있으며, 나는 그것에 대해 포인터 / 의견 / 아이디어를 찾고 있습니다 :-)
특히,이 도구 중 하나를 작동하게하려면 고려중인 프로그램의 객체, 방법 ...을 입증하기 위해 막대한 투자가 필요하다는 인상을 얻었습니다. 그런 다음 프로 버가 처리해야 할 모든 것의 크기를 감안할 때 스팀이 부족하지 않은지 궁금합니다. 또는 부작용을 제거해야 할 수도 있습니다 (이 입증 된 도구는 선언적 언어와 실제로 잘 작동하는 것처럼 보입니다). 그렇지 않으면 "입증 된 코드"가 빠르지 않아 사용할 수 없는지 궁금합니다. 충분히 작습니다. 또한, 내가 사용하는 언어를 바꿀 수있는 사치를 가지고 있지 않으며 Java 또는 C ++이어야합니다. 오래 전부터 보스에게 OXXXml로 코딩 할 것이라고 말할 수는 없습니다. 코드의 정확성을 증명할 수 있습니다 ...
공식적인 교정 도구에 대한 경험이 많은 사람이 의견을 제시 할 수 있습니까? 다시 - 나는 것 사랑 나는 그들이 좋은 생각, 공식적인 증명 도구를 사용하지만, 나는 그들이 내가 자바 / C ++ (PS의 낮은 도랑에서 도달 할 수 상아탑에있는 인상을 : 나는 또한 LOVE Haskell, OCaml ... 오해하지 마십시오. 나는 선언적 언어와 공식적인 증거를 좋아합니다. 소프트웨어 엔지니어링에 실제로 유용하게 사용할 수있는 방법을 찾으려고 노력하고 있습니다)
업데이트 : 이것은 상당히 광범위하므로 다음과 같은 더 구체적인 질문을 시도해 보겠습니다. 1) 산업 Java / C ++ 프로그램의 정확성을 입증하기 위해 프로 버를 사용하는 예가 있습니까? 2) Coq가 해당 작업에 적합합니까? 3) Coq가 적합한 경우 먼저 Coq로 프로그램을 작성하고 Coq에서 C ++ / Java를 생성해야합니까? 4)이 접근 방식이 스레딩 및 성능 최적화를 처리 할 수 있습니까?