コード行数の数え方は一見すると簡単に思えますが、実は意外と難しいものです。本稿ではその理由を説明するとともに、現実的なコード行数との付き合い方についての見解をまとめてみました。
LOC(lines of code)とは
「LOC」とはソースコードの行数を意味し、生産性や品質の分析に使われる指標です。
独立行政法人情報処理推進機構(IPA)が毎年発行している「ソフトウェア開発データ白書」では「SLOC (source lines of code) 」という同義の言葉が使われています。
日本では「ステップ数」と表現されることもありますが、海外では「LOC」、「SLOC」という表現の方が一般的です 。
物理LOC(physical LOC)
「物理LOC」とは テキストファイルとしての総行数 のことです。物理LOCは完全に客観的な数値であり、これの数え方については全く問題ありません。
論理LOC(logical LOC)
問題は「論理LOC」です。「論理LOC」とは 物理LOCから空行やコメント行などを除いた行数 です。
論理LOCの数え方はプロジェクトによって(最悪の場合、プログラマーによって)以下のような 様々な定義があります 。
- スペースやタブだけの行をカウントする
- 2つの命令が書かれた行は2行としてカウントする
- 括弧だけの行をカウントしない
- 連続した空行は1行としてカウントする
コードの差分比較では以下のように定義がさらに複雑になります。
- スペースやタブの数のみを変更した行はカウントしない
- 空行の数の変更はカウントしない
見積もり手法「COCOMO」を提唱したBarry Boehmの論文「A SLOC counting standard」によると、論理LOCはその定義が異なれば 1.5倍以上の差 が生じることもあります。このことは生産性や品質の評価値に大きな誤差を生み出す原因となります。
現状、論理LOCは世界的な標準となる定義が存在しない、 ワールドワイドでカオスな指標 となっています。
世の中にはコード計測ツールがたくさんありますが、同じファイルであっても各ツールによって算出される論理LOCは大きく異なっています。
このように、論理LOCは生産性や品質を図る上で大変便利な指標ですが、 客観的な指標には向いていないということを認識しましょう 。
LOC - Wikipedia
Nguyen, Vu, et al. "A SLOC counting standard." COCOMO II Forum. Vol. 2007. 2007.
COCOMO - Wikipedia
「ソフトウェア開発データ白書」ではどのように論理LOCが定義されているのか
「ソフトウェア開発データ白書」では、どのように論理LOCが定義されているのでしょうか。以下の表は定義を要約したものです。
項目 | 説明 |
---|---|
SLOC規模 | コメント行 及び 空行を含まない コード行数 |
SLOC実績値 | 総合テスト完了時 のSLOC値 |
実効SLOC実績値 | 実効SLOC実績値 = SLOC実績値(追加・新規) + SLOC実績値(変更) + SLOC実績値(削除) |
「ソフトウェア開発データ白書」においても、これ以上明確な論理LOCの説明はありません。
また、「ソフトウェア開発データ白書」シリーズに関するよくある質問と回答:IPA 独立行政法人 情報処理推進機構では論理LOCに関して以下のように言及しています。
物理行数、論理行数、言語による定義の違い等ありますが、どのように定義するかは各社で取り方が異なります。統一はできないため、各社の方針に任せております。
「ソフトウェア開発データ白書」では分析のために論理LOCが多用されていますが、 収集された論理LOCのデータは 定義が統一されておらず、各データによってバラバラである ということです。「ソフトウェア開発データ白書」に記載されている平均指標値はあくまで 参考程度 に留めておくべきです。
ソフトウェア開発データ白書 2016-2017 | 3.2.2 データ項目の取り扱いに関する取り決め
ソフトウェア開発データ白書 2016-2017 | A.2 データ項目定義 Version 3.3
ソフトウェア開発データ白書 2016-2017 | A.4 導出指標の名称と定義
論理LOCとうまく付き合うために
このように現場に混乱をもたらしかねない論理LOCですが、生産性や品質を簡単に示すことができるため見限ることはできません。では、どのようにすれば論理LOCを客観的な指標とすることができるでしょうか。
その最善策は以下の3つです。
- プロジェクトで使用するコード計測ツールを選定する
- 採用したツールにおける論理LOCの定義をできる限り明文化する
- すべてのプログラマーが同じツールを使って論理LOCを算出する
ツールを統一することでプロジェクトにおける論理LOCはすべて同じ定義に従って算出することができ、生産性や品質を客観的に評価することができます。
この 作品 は クリエイティブ・コモンズ 表示 4.0 国際 ライセンスの下に提供されています。