コンテンツにスキップ

英文维基 | 中文维基 | 日文维基 | 草榴社区

「LOC」の版間の差分

出典: フリー百科事典『ウィキペディア(Wikipedia)』
削除された内容 追加された内容
編集の要約なし
タグ: モバイル編集 モバイルウェブ編集
Cewbot (会話 | 投稿記録)
m Bot作業依頼: sourceタグをsyntaxhighlightタグに置換 (Category:非推奨のsourceタグを使用しているページ) - log
21行目: 21行目:
== 簡単な例 ==
== 簡単な例 ==
1からnまでの[[総和|和]]を計算する[[C++]]のプログラムを例に取る。次の標準的なソースコードのLOCは(物理LOC、論理LOCとも)3行である。
1からnまでの[[総和|和]]を計算する[[C++]]のプログラムを例に取る。次の標準的なソースコードのLOCは(物理LOC、論理LOCとも)3行である。
<source lang="cpp">
<syntaxhighlight lang="cpp">
int s = 0;
int s = 0;
for (int i = 1; i <= n; i++)
for (int i = 1; i <= n; i++)
s += i;
s += i;
</syntaxhighlight>
</source>
コメント行があっても論理LOCは同じ3行である。(物理LOCは4行である)
コメント行があっても論理LOCは同じ3行である。(物理LOCは4行である)
<source lang="cpp">
<syntaxhighlight lang="cpp">
// 1からnまでの和
// 1からnまでの和
int s = 0;
int s = 0;
for (int i = 1; i <= n; i++)
for (int i = 1; i <= n; i++)
s += i;
s += i;
</syntaxhighlight>
</source>
次のソースコードは論理LOCが4行だが、処理内容はまったく同じである。
次のソースコードは論理LOCが4行だが、処理内容はまったく同じである。
<source lang="cpp">
<syntaxhighlight lang="cpp">
int s = 0;
int s = 0;
int i = 1;
int i = 1;
for (i = 1; i <= n; i++)
for (i = 1; i <= n; i++)
s += i;
s += i;
</syntaxhighlight>
</source>
次のソースコードは、同じ結果を出す非常に高速なアルゴリズムで、論理LOCは1行である。
次のソースコードは、同じ結果を出す非常に高速なアルゴリズムで、論理LOCは1行である。
<source lang="cpp">
<syntaxhighlight lang="cpp">
int s = (n + 1) * n / 2;
int s = (n + 1) * n / 2;
</syntaxhighlight>
</source>


== 実際の製品の例 ==
== 実際の製品の例 ==

2020年7月5日 (日) 22:58時点における版

LOCは、lines of codeの略で、ソフトウェアの規模を表す指標のひとつ。ソースコードの行数を意味する。何の行数かを明確に示すため、SLOC (source lines of code) ということもある。

テキストファイルとしての行数を物理LOC (physical LOC) というが、これをそのまま使うことは少ない。空行(改行など空白だけの行)やコメント行(コメントと空白だけの行)は除く、2つの命令が書かれた行は2行と数える、括弧だけの行を除くなどの換算をした行数を論理LOC (logical LOC) といい、通常はこちらを使う。ただし、細かい規則にはさまざまな流儀がある。物理行数であればwc -lなど汎用の行数を数えるツールで、論理行数であれば汎用のテキスト処理ツールを利用するなどして、作業を自動化できる。

問題点

LOCには以下のような問題がある。

  • ソフトウェアのサイズを表すが、機能の量や開発工数の結びつくものではない。また書き方次第で簡単に水増しできる。
  • 優れた開発者や開発チームは少ないLOCで多くの価値を提供するが、未熟なチームだとLOCは多くとも実現する機能も質もは少なくなる。そのためLOCと開発コストを紐付けることはできない。
  • プログラミング言語の記述にはある程度の自由度があり、まったく動作が等しいプログラムであってもさまざまな記述ができる。これは特に、C言語の流れを汲む自由度の高い言語で著しい。
  • 同じまたは類似の処理をコピー&ペーストすればLOCは簡単に増える。マクロ化、関数化、クラス化などすれば、ソースコードは読みやすく保守しやすくなるが、LOCは減る。
  • 同じ問題を解決するためにもさまざまな解決法があり、無駄な処理をしたり効率の悪いアルゴリズムを使ったりすればLOCは増えることが多い。
  • 同じ処理内容であっても、プログラミング言語の種類によって必要なLOCは大きく変わる。たとえば、C言語を基準にすると、COBOLFORTRANは数倍、アセンブリ言語では十倍以上の行数が必要であることが多い。ただしこれは、ソフトウェア開発のコストの指標としてはむしろ適切な長所であると言える。

このような問題があるため、LOCでソフトウェアの実際の規模を測るのは難しい。そのため、LOCに変わる指標としてファンクションポイント法などが利用されてきている[1]

簡単な例

1からnまでのを計算するC++のプログラムを例に取る。次の標準的なソースコードのLOCは(物理LOC、論理LOCとも)3行である。

int s = 0;
for (int i = 1; i <= n; i++)
    s += i;

コメント行があっても論理LOCは同じ3行である。(物理LOCは4行である)

// 1からnまでの和
int s = 0;
for (int i = 1; i <= n; i++)
    s += i;

次のソースコードは論理LOCが4行だが、処理内容はまったく同じである。

int s = 0;
int i = 1;
for (i = 1; i <= n; i++)
    s += i;

次のソースコードは、同じ結果を出す非常に高速なアルゴリズムで、論理LOCは1行である。

int s = (n + 1) * n / 2;

実際の製品の例

How Many Lines of Code in Windows?, Knowing.NET, (December 06, 2005), http://www.knowing.net/PermaLink,guid,c4bdc793-bbcf-4fff-8167-3eb1f4f4ef99.aspx 2007年10月18日閲覧。  より。

製品名 100万SLOC
1993 Windows NT 3.1 4-5
1994 Windows NT 3.5 7-8
1996 Windows NT 4.0 11-12
2000 Windows 2000 29以上
2001 Windows XP 40
2003 Windows Server 2003 50

関連項目

脚注