タグ付けされた質問 「program-correctness」

6
実際の正式なプログラム検証
ソフトウェアエンジニアとして、工業製品用のコードをたくさん書いています。クラス、スレッド、いくつかの設計作業、およびパフォーマンスの妥協を伴う比較的複雑なもの。私は多くのテストを行い、テストにうんざりしているので、Coq、Isabelleなどの正式な証明ツールに興味を持ちました...これらのいずれかを使用して、コードにバグがないことを正式に証明できますか?それと?-しかし、これらのツールの1つをチェックアウトするたびに、日常のソフトウェアエンジニアリングに使用できると確信せずに立ち去ります。今、それは私だけである可能性があり、私はそれについてのポインタ/意見/アイデアを探しています:-) 特に、これらのツールの1つを機能させるには、検討中のプログラムのオブジェクト、メソッドなどを証明者に適切に定義するために莫大な投資が必要になるという印象を受けます。それから、証明者は、対処しなければならないすべてのサイズを考えると、蒸気が尽きないのではないかと思います。または、副作用を取り除く必要があるかもしれません(これらの証明ツールは宣言型言語で本当にうまくいくようです)、それが高速ではないため使用できない「実証済みのコード」になるかどうか疑問に思います十分に小さい。また、使用する言語を変更する余裕はありません。JavaまたはC ++である必要があります。OXXXmlでコードを作成するのは上司に伝えることはできません。コードの正確性を証明できます... フォーマルプルーフツールの経験が豊富な人はコメントできますか?再び-私なりLOVE正式な証明ツールを使用して、私は彼らが素晴らしいと思いますが、私は彼らが私は、Java / C ++の卑しい溝から到達することはできません象牙の塔にいるという印象を持っている...(PS:IまたLOVEハスケル、OCamlは...間違った考え方得ることはありません:私は、宣言型言語や形式的な証明のファンですが、私は)私は現実的ソフトウェア工学にその便利を作ることができる方法を確認しようとしています 更新:これはかなり広いので、次のより具体的な質問を試してみましょう:1)証明者を使用して産業用Java / C ++プログラムの正確性を証明する例はありますか?2)Coqはそのタスクに適していますか?3)Coqが適切な場合、最初にCoqでプログラムを作成し、次にCoqからC ++ / Javaを生成する必要がありますか?4)このアプローチは、スレッド化とパフォーマンスの最適化を処理できますか?

2
プログラムの正確性、仕様
ウィキペディアから:理論的なコンピューターサイエンスでは、アルゴリズムが仕様に関して正しいと言われているときに、アルゴリズムの正当性が主張されます。 しかし問題は、「適切な」仕様を取得することは簡単な作業ではなく、正しいものを取得するための100%正しい方法(私が知る限り)がないため、単なる推定であるため、 「1つ」のように「見える」という理由だけで述語を仕様としてとるのは、プログラムが「正しく」見えるという理由だけでプログラムを正しいとみなさないのはなぜですか?

6
プログラム検証手法は、ハートブリードのジャンルのバグの発生を防ぐことができますか?
ハートブリードバグの問題について、ブルースシュナイアーは4月15日の暗号グラムで次のように書いています。「破滅的」は正しい言葉です。1から10のスケールで、これは11です。私は数年前に、特定のオペレーティングシステムのカーネルが最新のプログラム検証システムで厳密に検証されていることを読みました。したがって、今日のプログラム検証手法を適用することで、Heartbleedのジャンルのバグが発生するのを防ぐことができますか、それとも、これはまだ非現実的か、または基本的に不可能でしょうか。

5
部分的に正しいプログラムがどれほど正しいかを定量化できますか?
部分的正しさと呼ばれるものがあることは知っていますが、半正解が完全正解にどれだけ近いかを知る方法があるのか​​と思っていました。 たとえば、配列をほぼ完全に並べ替える並べ替えプログラムがある場合、Hoareロジックを使用して、正しい答えを得るのにどれだけ近いかを判断できますか?これを行う1つの方法は、一連のandステートメントを前提条件にして、これらのステートメントのうち、プログラムを通じて伝播される事後条件の結果として最も弱い前提条件がいくつあるかを確認することです。 ただし、この方法は非常に粗雑なようです。このようなことをする他の方法はありますか?

6
すべての言語に意味的および論理的なエラーがある可能性はありますか?
私はPHPについて読んでおり、多くの著者がセマンティックエラーと論理エラーを別々に言及しています。セマンティックエラーの例として、不正な数のパラメーターで呼び出される関数が提供されます。これはパーサーによってキャッチされませんが、実行時にエラーをスローします。 しかし、C ++などの言語では、これはコンパイラーによってキャッチされます。その時それは構文エラーだと思います。意味的エラーと論理的エラーの違いは何ですか? たとえば、「コンピュータサイエンティストのように考える方法」では、著者は「論理エラー」と「意味エラー」を同じ意味で使用しています。一方、Visual Basic .NETでは。Primer Plusでは、「論理エラー」は「セマンティックエラー」から分離されています。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.