Als Softwareentwickler schreibe ich viel Code für Industrieprodukte. Relativ kompliziertes Zeug mit Klassen, Threads, einigen Designbemühungen, aber auch einigen Kompromissen für die Leistung. Ich teste viel und bin es leid zu testen. Daher interessierte ich mich für formale Proof-Tools wie Coq, Isabelle ... Könnte ich eines davon verwenden, um zu beweisen, dass mein Code fehlerfrei und fehlerfrei ist? damit? - Aber jedes Mal, wenn ich eines dieser Tools auschecke, bin ich nicht überzeugt, dass sie für die alltägliche Softwareentwicklung geeignet sind. Nun, das könnte nur ich sein, und ich suche nach Hinweisen / Meinungen / Ideen dazu :-)
Insbesondere habe ich den Eindruck, dass es eine enorme Investition erfordert, um die Objekte, Methoden ... des betrachteten Programms für den Prüfer richtig zu definieren, damit eines dieser Tools für mich funktioniert. Ich frage mich dann, ob dem Prüfer angesichts der Größe von allem, mit dem er zu tun haben würde, nicht einfach der Dampf ausgeht. Oder vielleicht müsste ich die Nebenwirkungen beseitigen (diese Beweiser-Tools scheinen mit deklarativen Sprachen wirklich gut zurechtzukommen), und ich frage mich, ob dies zu "bewährtem Code" führen würde, der nicht verwendet werden könnte, weil er nicht schnell oder nicht gut wäre klein genug. Außerdem habe ich nicht den Luxus, die Sprache zu ändern, mit der ich arbeite. Es muss Java oder C ++ sein. Ich kann meinem Chef nicht sagen, dass ich ab sofort in OXXXml codieren werde, da dies die einzige Sprache in ist Womit ich die Richtigkeit des Codes beweisen kann ...
Könnte jemand mit mehr Erfahrung mit formalen Proof-Tools einen Kommentar abgeben? Ich würde es LIEBEN , ein formales Prüferwerkzeug zu verwenden. Ich denke, sie sind großartig, aber ich habe den Eindruck, sie befinden sich in einem Elfenbeinturm, den ich aus dem niedrigen Graben von Java / C ++ nicht erreichen kann ... (PS: I auch LIEBE Haskell, OCaml ... verstehe nicht die falsche Idee: Ich bin ein Fan von deklarativen Sprachen und formalen Beweisen, ich versuche nur zu sehen, wie ich das für die Softwareentwicklung realistisch machen kann.
Update: Da dies ziemlich weit gefasst ist, versuchen wir die folgenden spezifischeren Fragen: 1) Gibt es Beispiele für die Verwendung von Testern, um die Korrektheit industrieller Java / C ++ - Programme zu beweisen? 2) Wäre Coq für diese Aufgabe geeignet? 3) Wenn Coq geeignet ist, sollte ich das Programm zuerst in Coq schreiben und dann C ++ / Java aus Coq generieren? 4) Könnte dieser Ansatz Threading- und Leistungsoptimierungen bewältigen?