正式な方法の重要な目標は、自動化された手段または人間主導の手段によってシステムの正確性を証明することです。ただし、正当性を証明できたとしても、システムが故障しないことを保証できない場合があります。例えば:
- 仕様がシステムを正しくモデル化していないか、実動システムが複雑すぎてモデル化できないか、矛盾する要件のためにシステムに本質的に欠陥がある可能性があります。仕様がまったく意味をなすかどうかをテストするためにどのようなテクニックが知られていますか?
- 証明プロセスにも欠陥がある可能性があります!これらの推論規則が正しく、正当であることを誰が知っていますか?さらに、証明は非常に大きくなる可能性がありますが、エラーが含まれていないことをどのようにして知ることができますか?これは、デミロ、リプトン、およびペルリスの「社会プロセスと定理とプログラムの証明」の批評の中心です。現代の形式的手法の研究者は、この批判にどのように対応しますか?
- 実行時には、システムに深刻な影響を与える可能性のある多くの非決定的なイベントと要因があります。たとえば、宇宙線はRAMを予測不可能な方法で変更する可能性があり、より一般的には、ハードウェアがビザンチン障害を被らないという保証はありません。したがって、静的システムの正確さは、システムが失敗しないことを保証しません!実際のハードウェアの誤りを説明するために知られている技術はありますか?
- 現在、テストは、ソフトウェアが機能することを確認するための最も重要なツールです。正式な方法を備えた補完的なツールであるように思われます。しかし、私は主に正式な方法またはテストに焦点を当てた研究を見ています。2つの組み合わせについては何が知られていますか?