ABCソフトウェアメトリックは、 LOCの欠点を克服するために1997年にJerry Fitzpatrickによって導入されました。[1] このメトリックは、ABCスコアを、ソースコードステートメントセットのサイズを表す3つの値として定義します。ABCスコアは、プログラム内の代入数(A)、分岐数(B)、条件文数(C)を数えることで計算されます。ABCスコアは、プログラム内の個々のメソッド、関数、クラス、モジュール、またはファイルに適用できます。
ABC スコアは、3 次元ベクトル< 割り当て (A)、分岐 (B)、条件 (C) > で表されます。また、ベクトル < 割り当て (A)、分岐 (B)、条件 (C) > の大きさであるスカラー値として表すこともできます。計算方法は次の通りです。
慣例により、ABC マグニチュード値は最も近い 10 分の 1 に丸められます。
歴史
ソフトウェアのサイズを測定する概念は、1975年にパデュー大学のモーリス・ハルステッド[2]によって初めて導入されました。彼は、すべてのコンピュータプログラムは主にトークン、つまり演算子とオペランドで構成されていると提案しました。彼は、一意の演算子とオペランドの数を数えることでプログラムのサイズを測定できると結論付けました。しかし、これはプログラムのサイズの測定方法として採用されませんでした。
コード行数(LOC)は、プログラムのサイズを測るもう一つの一般的な尺度です。LOCは、同じ機能を持つプログラムでもコーディングスタイルによって行数が異なる場合があるため、プログラムのサイズを正確に測る尺度とは考えられていませんでした。[3]
ファンクションポイント(FP)メトリックと呼ばれる別のメトリックは、ユーザーの入力と出力のトランザクションの数を計算するために導入されました。ファンクションポイントの計算では、プログラムの機能性やプログラムに含まれるルーチンに関する情報は得られませんでした。[4]
ABC メトリックは、LOC、FP、トークン (演算とオペランド) カウントの欠点を克服することを目的としています。ただし、FP スコアを使用して ABC スコアを補足することもできます。
著者はABC指標は規模を測定するものだと主張しているが、複雑さを測定するものだと考える人もいる。[5] ABC指標が複雑さを測定できるかどうかは、複雑さがどのように定義されるかによって決まる。
意味
ABC スコアの 3 つの要素は次のように定義されます。
C、C++、Javaなどの基本言語には変数の割り当て、関数呼び出し、テスト条件などの操作のみがあるため、ABCスコアにはこれら3つの要素が含まれます。[1]
サブルーチンのABC ベクトルが⟨5,11,9⟩と表記されている場合、サブルーチンには 5 つの割り当て、11 の分岐、および 9 つの条件があることを意味します。標準化のため、カウントは山括弧で囲み、表記法⟨A、B、C⟩に従って同じ順序で記述する必要があります。
多くの場合、スカラー値を使用してソース コードのサイズを比較する方が便利です。個々の ABC カウントは異なるため、Jerry Fitzpatrick によれば、3 つのコンポーネントは直交しているとみなされ、上記のようにスカラー ABC の大きさを計算できます。
スカラー ABC スコアでは、ベクトルの利点の一部が失われます。ベクトルの大きさを計算する代わりに、ベクトルの加重合計によって、より正確なサイズ比較がサポートされる場合があります。スカラー値はサイズを完全に表すものではないため、ABC スカラー スコアは、付随する ABC ベクトルなしでは提示しないでください。
理論
ABC ベクトル値をカウントするための特定のルールは、言語間の意味の違いにより、言語ごとに異なる方法で解釈する必要があります。
したがって、ABCベクトルを計算するためのルールは言語によって若干異なります。以下にC、C++、JavaのABCメトリックの計算ルールを定義します。これらのルールに基づいて、他の命令型言語のルールを解釈することができます。[1]
CのABCルール
次のルールは、 Cの ABC メトリックにおける割り当て、分岐、条件の数を示します。
- 次の場合に割り当てカウントに 1 を追加します。
- 代入演算子の発生 ( =、*=、/=、%=、+=、-=、<<=、>>=、&=、!=、^= )。
- 増分演算子または減分演算子( ++、-- )の発生。
- 次の場合にブランチ数に 1 を追加します。
- 次の場合に条件カウントに 1 を追加します。
C++ の ABC ルール
次のルールは、 C++の ABC メトリックにおける割り当て、分岐、条件文の数を示します。
- 次の場合に割り当てカウントに 1 を追加します。
- 次の場合にブランチ数に 1 を追加します。
- 関数呼び出しまたはクラスメソッド呼び出しの発生。
- goto のレベルよりも深いネスト レベルにターゲットを持つ goto ステートメントの発生。
- 「new」または「delete」演算子の発生。
- 次の場合に条件カウントに 1 を追加します。
- 条件演算子の発生 ( <、>、<=、>=、==、!= )。
- 次のキーワードの出現 (' else '、' case '、' default '、' ? '、' try '、' catch ')。
- 単項条件演算子の発生。
JavaのABCルール
次のルールは、 Javaの ABC メトリックにおける割り当て、分岐、条件文の数を示します。
- 次の場合に割り当てカウントに 1 を追加します。
- 代入演算子の発生 (定数宣言とデフォルトパラメータの代入は除く) ( =、*=、/=、%=、+=、-=、<<=、>>=、&=、!=、^=、>>>= )。
- 増分演算子または減分演算子(前置または後置)の発生(++、--)。
- ブランチ数に1を加える
- 関数呼び出しまたはクラスメソッド呼び出しの発生。
- 「新しい」演算子の発生。
- 次の場合に条件カウントに 1 を追加します。
- 条件演算子の発生 ( <、>、<=、>=、==、!= )。
- 次のキーワードの出現 (' else '、' case '、' default '、' ? '、' try '、' catch ')。
- 単項条件演算子の発生。
アプリケーション
[1]
コーディングスタイルに依存しない
ABC スコア メトリックは、データの保存、分岐、条件付きテストなどのタスクの概念に基づいて構築されているため、このメトリックはユーザーのコーディング スタイルとは無関係です。
プロジェクト時間の見積もり
ABC スコアの計算は、プロジェクトの完了に必要な時間を見積もるのに役立ちます。これは、プロジェクトの ABC スコアを大まかに見積もって、特定の日のプログラムの ABC スコアを計算することによって行うことができます。プロジェクトの完了に要する時間は、プロジェクトの ABC スコアを 1 日で達成された ABC スコアで割ることで得られます。
バグ率の計算
バグ率は、もともとバグ数 / LOCとして計算されていました。ただし、LOC はコーディング スタイルに依存するため、プログラムのサイズを測定する信頼できる方法ではありません。バグ率を測定するより正確な方法は、バグ数 / ABC スコアを数えることです。
プログラム比較
ほとんどの言語では代入、分岐、条件文が使用されるため、異なる言語で書かれたプログラムは ABC スコアを使用して比較できます。
個々のパラメータの数 (割り当て、分岐、条件の数) に関する情報は、プログラムを「データ重視」または「機能重視」または「ロジック重視」に分類するのに役立ちます。ABC スコアのベクトル形式は、アプリケーションの背後にある駆動原理についての洞察を提供しますが、スコアのスカラー形式では詳細は失われます。
線形メトリック
ABC スコアは線形なので、任意のファイル、モジュール、クラス、関数、メソッドをスコアリングできます。たとえば、モジュールの (ベクトル) ABC スコアは、そのサブモジュールのスコアの合計です。ただし、スカラー ABC スコアは非線形です。
参照
参考文献
- ^ abcd Fitzpatrick, Jerry (1997). 「ABC メトリックの C、C++、Java への適用」(PDF) . C++ レポート.
- ^ ハルステッド、モーリス (1977)。ソフトウェアサイエンスの要素。ノースホランド:エルゼビア。
- ^ Fenton, Norman E. (1991). 「ソフトウェアメトリクス: 成功、失敗、そして新たな方向性」(PDF) . Chapman & Hall .
- ^ Kitchenham, Barbara (1995年12 月)。「ソフトウェア測定検証のフレームワークに向けて」。IEEE Transactions on Software Engineering 21 ( 12 ): 929–944。doi :10.1109/32.489070。S2CID 8608582。
- ^ フィッツパトリック、ジェリー (2017)。「付録 A」。ソフトウェア開発の永遠の法則。ソフトウェアリノベーションコーポレーション。ISBN 978-0999335604。
外部リンク
- ABC メトリックを C、C++、Java に適用する
- ABC Metric は 2018-03-28 にWayback Machineにアーカイブされました
- サイズと複雑さのルール
- Ruby コードメトリクスの解読
- ABC指標
