物理行と論理行
例題のようにLOC計測が唯一にならないのは、LOCの考え方に「物理行」と「論理行」という違いがあるからです。わたしは、物理行ではなく、論理行で計測することをお勧めしています。
2つの違いを言い分けてみます。
まず、どちらもコメントと空白行を除いた全ての行を対象としましょう(→補足6参照)。この時、物理行は改行するまでが一行です。これに対し、論理行は、日本語の文章でいうところの読点「。」で区切られた文字のまとまりです。改行の多少にかかわらず、文として区切られるものを1行とします。
お分かりいただけますでしょうか。では、ここでまた演習です(下記のPascal風のダミーコードは参考文献からの引用です)。
If A > B
then begin A := A - B end
else begin A := A + B end;
If A > B
then
begin
A := A - B
end
else begin A := A + B end;
If A > B
then
begin
A := A - B
end
else
begin
A := A + B
end;
答1: 物理 3行、論理 1行 答2: 物理 6行、論理 1行 答3: 物理 9行、論理 1行 答4: いずれも1行
考察
3つの文章が内容的にはまったく同じであることは、一目瞭然です。よって、問1-3 のソースコードを開発する労力はほぼ同じと考えていいでしょう。
ということでこの演習を通して分かることが2つあります。
- LOCの計測の際には、あらかじめ定義をして「この測り方が正解」と決めておくこと(標準を作ること)が必要不可欠です。
- 今回の答えを見ると、論理行の場合、問1~3の答えがすべて1行となっていることが分かると思います。ですから、規模の計測の大切なことである、開発労力に最も比例する、という観点で、記述スタイルによる変化に影響されずに計測できる、論理行を採用することを勧めます。
以前、「コード行数で生産性を測り、待遇に反映させますと言ったら、物理行で計測すると決めたうえで、おそろしくたくさん改行をして、ずば抜けた生産性をたたき出したプログラマがいた」と、私は講義で聞きました(そのトンチ自体は称賛ですが)。
皆さんが使用しているプログラム言語においての読点「。」は何ですか? 次回に備えて決めておきましょう。
PSPで規模の単位としてLOCの使用を推奨している理由についての詳細は文末の参考文献を紐といてください。
例題の1-3の答え(の例)。
例題1: 物理 1行、論理 2行 例題2: 物理 6行、論理 2行 例題3: 物理 2行、論理 2行
本来コメントと空白行の扱いは、任意です。例えば保守のしやすさ、管理のしやすさなどの観点から、開発方法や再利用元などの参照情報を、大量のコメントとして残す方もおられます。その場合はコメントも含めて規模として計上した方が、開発工数との相関は強いかもしれません。
まとめ
それでは今回のまとめです。
- 計測の目的は、見積もりのためのデータを作ることにある
- 時間・欠陥・規模を測ることで、プロセスを測っている
- 規模を測るには定義が必要
- LOCを使用する(開発労力に相関するから)
- 物理行と論理行とがある
- ミナミカワが作る例題にはなぜか肉が出てくる
それでは今日はここまで。次回またお目にかかれますよう。
