Ein wichtiges Ziel formaler Methoden ist es, die Korrektheit von Systemen entweder automatisiert oder durch den Menschen zu beweisen. Es scheint jedoch, dass Sie möglicherweise NICHT garantieren können, dass das System nicht ausfällt, auch wenn Sie einen Korrektheitsnachweis erbringen können. Beispielsweise:
- Die Spezifikation modelliert das System möglicherweise nicht richtig, oder das Modell eines Produktionssystems ist möglicherweise zu kompliziert, oder das System weist aufgrund widersprüchlicher Anforderungen von Natur aus Fehler auf. Welche Techniken sind bekannt, um zu testen, ob eine Spezifikation überhaupt Sinn macht?
- Der Proofprozess kann auch fehlerhaft sein! Wer weiß, dass diese Inferenzregeln korrekt und legitim sind? Außerdem können Beweise sehr umfangreich sein, und woher wissen wir, dass sie keine Fehler enthalten? Dies ist das Herzstück der Kritik in de Millo, Lipton und Perlis '"Sozialen Prozessen und Beweisen von Theoremen und Programmen". Wie reagieren moderne formale Methodenforscher auf diese Kritik?
- Zur Laufzeit gibt es viele nicht deterministische Ereignisse und Faktoren, die das System ernsthaft beeinflussen können. Kosmische Strahlung kann beispielsweise den Arbeitsspeicher auf unvorhersehbare Weise verändern, und wir können im Allgemeinen nicht garantieren, dass die Hardware keine byzantinischen Fehler aufweist, gegen die Lamport nachweislich nur sehr schwer robust ist. Die Korrektheit des statischen Systems garantiert also nicht, dass das System nicht ausfällt! Gibt es Techniken, die dafür verantwortlich sind, dass echte Hardware nicht funktioniert?
- Derzeit ist das Testen das wichtigste Werkzeug, um sicherzustellen, dass die Software funktioniert. Es scheint, als sollte es ein komplementäres Instrument mit formalen Methoden sein. Ich sehe jedoch hauptsächlich Forschung, die sich entweder auf formale Methoden oder auf das Testen konzentriert. Was ist über die Kombination der beiden bekannt?