すべてテストでカバーされており、絶対にすべて

Agitar Softwareは、ソフトウェアコードの品質を評価するためのかなり興味深い指標を提供します。 明示的な名前がCRAPの式を使用すると、開発者が「ああ、くそったれ!」と叫ぶかどうかを評価できます。



もちろん、特定のコードが「ガタガタ」であるかどうかを判断する絶対に信頼できる方法はありません。 ただし、このようなレビューが不合理に複雑で混乱するコードを受け取る可能性が高いことは直感的に明らかです。 また、コードを混乱させるための自動化されたテスト(たとえば、JUnitまたはPHPUnitを使用する)の作成は簡単なことではないため、通常はテストでまったくカバーされないことが判明します。 単体テストの存在は、コードの正常性を制御するだけでなく、より理解しやすいアプリケーションアーキテクチャ、および開発者が一度にサポートコストを処理したという事実も意味します。



仕組み



数学に入ると、個々のメソッドmのCRAP(Change Risk Analysis and Prediction)の値は次の式で計算されます:



CRAP(m)= comp(m)^ 2 *(1-cov(m)/ 100)^ 3 + comp(m)



ここで、 comp(m)はメソッドmのいわゆる循環的複雑度で、メソッド内のパスの数+ 1として定義され、 cov(m)はテストでのコードカバレッジの割合です。



言い換えれば、低いCRAPインデックスは、コードを変更するときのリスクが比較的小さいことを意味します。コードは単純であり、そのパフォーマンスはテストによって十分に制御されています。 インデックスが高いと、変更を加えるのがかなりリスクがあることを示します。コードの複雑さと少数のテストを組み合わせることにより、かなり危険な組み合わせが発生し、最も予測不可能な場所で何かが破損することが確実になります。 したがって、コードの複雑なセクションの単体テストを記述するか、リファクタリングを使用してこの複雑さを軽減することにより、CRAPインデックスを下げることができます。 もちろん、テストの存在はリファクタリングのエラーを回避するのに役立つため、両方が望ましいです。



Crap4j



Java用のeclipseプラグインcrap4jの形式でのCRAP式の実装は1つだけです。 開発者自身によると、すべてのしきい値は純粋に実験的なものです。 特定のメソッドのCRAPインデックスは、1(100%テストでカバーされる複雑度1のメソッド)から非常に印象的な数値(たとえば、1つのテストなしで複雑度100のメソッドは10 100ポイントを取得します)に変化します。 手始めに、くだらないコードが始まる境界として30ポイントのしきい値を使用することが決定されました。 たとえば、テストでカバーされていない複雑度10、75%のメソッドは、テストなしで複雑度2のメソッドと同様に、まだくだらないとは見なされていません。



プロジェクトレベルでは、統計は、30を超えるクラップスインデックスを持つメソッドの割合を示します。プロジェクトには、最大5%のメソッドを含めることができます(ただし、独自のしきい値を受け入れることを妨げるものはありません)。 さらに、crap4jはいわゆるCRAP負荷を示します。これは、不足しているテストの数とそれらを記述するために必要なリファクタリングを考慮して、クラッピーなメソッドを修正するために必要な作業量の推定値です。



既存のメトリックのいずれかと同様に、CRAPはもちろん完璧ではありません。 コードは価値のないテストで完全にカバーすることも、複雑なメソッドを含めることもできますが、それでも3つの単純なメソッドよりも簡単に理解できます。 高レベルのアプリケーション指向のメトリック( 結合結合など )は考慮されません。 それにもかかわらず、式は十分な有用な情報と実験のための広範な分野を提供します。



Crap4jホーム | Eclipse更新サイト | お楽しみください!



トピックの詳細:

私のフランス語をご容赦ください。ただし、このコードはCRAPです

Code CRAPメトリックがファンにヒット-crap4jプラグインの紹介






All Articles