Cyclomatic Complexity の他に、他にどのようなコード メトリック システムが存在しますか?
4 に答える
ウィキペディア には、メトリクスの簡単な概要が記載されています。
実際には非常に多くの指標があります。実際、ソース コードを測定スケール (整数、実数、分類列挙型) にマップするソース コードの関数はすべて、メトリックと見なすことができます。
ほとんどのコード メトリクスの問題は、それらが SLOC に比例する傾向があることです。その場合は、SLOC も同様に優れています。メトリクスを使用する最善の方法は、今すぐコードを測定し、メトリクスが時間の経過とともにどのように変化するかを追跡することです。上昇傾向や下降傾向は、メトリクスそのものよりも多くのことを教えてくれます。アップは悪いニュースを意味します。コードはますます複雑になっています。
バグ率と併せてコード (複雑さ) の指標を検討することも役立ちます。モジュールの複雑性が高く、同じモジュールのバグ率が高いということは、そのモジュールの再設計がフィールドでのさらなるトラブルを防ぐために良い考えである可能性があることを示唆しています。複雑さが高く、バグ発生率が低いということは、コードが恐ろしく見えることを示唆していますが、そうではありません。
Halstead の Software Scienceは、プログラムの実際の構造について興味深い洞察を与える素晴らしいメトリクス スイートです。
Card and Glass によって作成されたモデルもありますが、書籍以外で入手できるかどうかはわかりません。気にせず探します。
Visual Studio 2012、2010、および 2008 に統合されたツール NDepend でサポートされている 82 のコード メトリクス定義をご覧ください。免責事項: 私はこのツールの開発者の 1 人です。
これらのコード メトリックは、CQLinq クエリとルールを使用して構成し、独自のカスタム コード メトリックを定義できることに注意してください。
たとえば、Cyclomatic Complexity以外の一般的なコード メトリックはCRAPメトリックです。基本的に、CRAPはくだらないコードを ( Cyclomatic Complexityが高い) 複雑なメソッドとして定義し、テストで十分にカバーされていません。CRAPメトリックを定義するデフォルトのCQLinq ルールは次のとおりです。
// <Name>C.R.A.P method code metric</Name>
// Change Risk Analyzer and Predictor (i.e. CRAP) code metric
// This code metric helps in pinpointing overly complex and untested code.
// Reference: http://www.artima.com/weblogs/viewpost.jsp?thread=215899
// Formula: CRAP(m) = comp(m)^2 * (1 – cov(m)/100)^3 + comp(m)
warnif count > 0
from m in JustMyCode.Methods
// Don't match too short methods
where m.NbLinesOfCode > 10
let CC = m.CyclomaticComplexity
let uncov = (100 - m.PercentageCoverage) / 100f
let CRAP = (CC * CC * uncov * uncov * uncov) + CC
where CRAP != null && CRAP > 30
orderby CRAP descending, m.NbLinesOfCode descending
select new { m, CRAP, CC, uncoveredPercentage = uncov*100, m.NbLinesOfCode }