プログラムの悪臭は、code duplicationです。 クローン検出機能を使用して重複を見つけることができます。多くのクローン検出器は、正確な一致のためにテキスト行だけを比較します。他のものはトークンストリームを比較し、差異がちょうど変更された識別子であるところでほぼ正確に一致するものを見つける。 CloneDRを使用すると、ランゲージ文法を参考にして、任意のランゲージ構造を挿入または削除する重複を見つけることができます。 CloneDRは、大規模なC++システムだけでなく、他の多くの言語でも動作します。このリンクには、典型的なクローン検出レポートがあります。
一般的な広域静的チェッカーはPCLintです。これにより、ツールで事前定義されたさまざまな共通のコーディングエラーがチェックされます。私はC++の "不可解な"(コンパイラ)方言をどれくらいうまく処理しているか分かりません。
カスタムチェックを定義する場合は、full C++ front end parserと、チェックを任意に設定する機能が必要です。私たちのDMS Software Reengineering Toolkitは、これを実現するように設定できるエンジンです。DMSのC++フロントエンドは、 "不可解な" C++の方言を扱うように設定できますが、すでにANSI、GCC3、GCC4、MS Visual Studio 7、および2005もカバーしています。DMSはプログラム変換エンジンなので、コードを "改善"貧弱な構造物をより良い構造物に置き換えることによって品質を向上させる。
静的解析ではありませんが、test coverageコードをどの程度テストしたかを測定するツールは、コード品質を評価する上で非常に役立ちます。すべてのテストが合格しただけなので、あなたがうまくテストしたことを意味するわけではありません。おそらく、未発達のコードは、あらゆる/さまざまな問題を抱えている可能性があります。
良い古いバウンドチェッカーと精製についてはどうですか?彼らは有力なアプリを味わっていますか? – Olav
静的解析を求めて、動的解析ツールを例として挙げるのは奇妙です。 –
バウンドチェッカーには静的な機能もあります。とにかく、私はそれを動的に行うのが最善だと思いますが、私たちがそれを遠くに得るかどうかはわかりません。 – Olav