質問

KDEなどの大規模で実世界の大規模な、ほとんどC ++、分散システムのモデルチェックを処理できるツールはありますか?

(KDEは、IPCを使用するという意味で分散システムですが、通常はすべてのプロセスは同じマシンにあります。はい、これは「分散システム」の有効な使用法です - Wikipediaを確認してください。)

このツールは、イントリプロセスイベントやプロセス間メッセージに対処できる必要があります。

(ツールがC ++をサポートしているが、KDEがMOCなどを使用する他のものをサポートしていない場合、それを回避するために何かをハッキングできると仮定します。)

実際のモデルチェッカーの代わりに、私は喜んであまり一般的ではない(例えば、特定のクラスのバグを見つけることに特化した静的アナライザー)またはより一般的な静的分析の代替案を受け入れます。しかし、私はできるツールにのみ興味があります 実際に KDEのサイズと複雑さのプロジェクトを処理します。

役に立ちましたか?

解決

あなたは明らかに、できる静的分析ツールを探しています

  • 規模でC ++を解析します
  • 関心のあるコードフラグメントを見つけます
  • モデルを抽出します
  • そのモデルをモデルチェッカーに渡します
  • その結果をあなたに報告してください

重要な問題は、誰もがどのモデルをチェックしたいかについて異なる考えを持っていることです。それだけで、各モデル抽出ツールがモデルとしてキャプチャしたいものを選択し、それが望むものが正確にゼロに近いものである可能性について選択したため、それだけであなたが望むものを正確に見つける可能性を殺す可能性があります。

具体的にモデル化するものは明確ではありませんが、コミュニケーションのプリミティブを見つけてプロセスの相互作用をモデル化してデッドロックのようなものをチェックしたいと思いますか?

商業的な静的分析ツールベンダーは、見た目が論理的な場所のように見えますが、まだそこにいるとは思いません。 カバー性 最善の策のように思われますが、Javaスレッドの問題については何らかの動的分析しか持っていないようです。

この論文はこれを行うと主張していますが、私は詳細に検討していません。 Verisoftを使用したC/C ++プログラムの組成分析. 。関連はです PDF] Verisoftでのコンピューター支援の仮定/保証推論. 。関心のあるモデリング要素を示すために、ソースコードを手で解決する必要があるようです。 VerifySoftツール自体は、Bell Labsの独自のものであるように見え、取得するのは難しい可能性があります。

同様にこれ: マルチスレッドC ++プログラムの分散検証 .

このペーパーは興味深い主張もしますが、タイトルにもかかわらずC ++を処理しません。マルチスレッドC/C ++プログラムのランタイムモデルチェック.

これのすべての部分は困難ですが、彼らが共有する問題は、C ++(以前に引用された論文で例示されているように)を解析し、モデルの生情報を提供するコードパターンを見つけることです。また、使用しているC ++の特定の方言を解析する必要があります。 C ++コンパイラがすべて異なる言語を受け入れるのは良くありません。また、ご想像のとおり、大規模なC ++コードの処理が必要です。モデルチェッカー(スピンと友達)は比較的簡単に見つけることができます。

私たちの DMSソフトウェアリエンジニアリングツールキット カスタマイズ可能なパターンマッチングとファクト抽出を備えた汎用解析を提供し、堅牢性があります C ++フロントエンド これは、C ++の多くの方言を処理します(2019年2月編集:ANSI、GCC、MSフレーバーのC ++ 17を含む)。気にするモデルに対応する事実を見つけて抽出するように構成されている可能性があります。しかし、これは棚からこれを行いません。

DMSがあります c フロントエンドは、非常に大きなCアプリケーション(19,000の編集ユニット!)を処理するために使用されています。 C ++フロントエンドは、さまざまな大規模なC ++プロジェクトで怒りで使用されています(2019年2月編集:3000+コンピレーションユニットのAPIの大規模リファクタリングを含む)。 DMSの一般的な機能を考えると、かなり大きなコードのチャンクを処理できる可能性が高いと思います。 ymmv。

他のヒント

静的コードアナライザーは、大規模なコードベースに対して初めて使用された場合、通常、非常に多くの警告とアラートを作成するため、それらすべてを合理的な時間で分析できません。ツールに疑わしいように見えるコードから実際の問題を選出することは困難です。

実行時に知覚された不変剤をキャプチャする「Daikon」のような自動不変ディスカバリーツールを使用することを試みることができます。発見された不変剤(変数の等価「a == b+1」)が理にかなっている場合、後で検証できます。このようにして、あなたの変化の結果として不変に違反されると、おそらくあなたがあなたの変化によって何かを壊したという警告が得られます。この方法は、テストと模擬を追加するためにコードの再構築または変更を避けるのに役立ちます。

正式な技術を大規模システムに適用する通常の方法は、それらをモジュール化し、各モジュールのインターフェイスの仕様を作成することです。次に、各モジュールを個別に検証できます(モジュールを検証しながら、コードではなく仕様をインポートします。このアプローチにより、検証がスケーラブルになります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top