第4章 第4章
- - ソフトウェアの規模の測 ソフトウェアの規模の測
定 定 - -
20102010 年年 1010 月月 22 日日 (( 土土 ))
@浜松クリエイト
@浜松クリエイト 都築 将夫
都築 将夫
4 4 . . 1章 ソフトウエアの物理的測定 1章 ソフトウエアの物理的測定
ソフトウエア規模を測定する ソフトウエア規模を測定する 伝統的なメトリクス
伝統的なメトリクス
– コード行数コード行数 (Lines of Code: LOC)(Lines of Code: LOC) を数えるを数える
……….
………
….
… ……….
………
….
… ……….
……… ……….
………
……….
………
“nkf.c” と” nkf32dll.c” のコード行数を数えてみる
3/15
4 4 . . 1章 ソフトウエアの物理的測定 1章 ソフトウエアの物理的測定
ソフトウエア規模を測定する ソフトウエア規模を測定する 伝統的なメトリクス
伝統的なメトリクス
– コード行数コード行数 (Lines of Code: LOC)(Lines of Code: LOC) を数えるを数える
・ ・ ・
#if defined(UTF8_INPUT_ENABLE) || defined(UTF8_OUTPUT_ENABLE) static void
nkf_unicode_to_utf8(nkf_char val, nkf_char *p1, nkf_char *p2, nkf_char *p3, nkf_char *p4) {
val &= VALUE_MASK; if (val < 0x80){
*p1 = val;
*p2 = 0;
*p3 = 0;
*p4 = 0; }else if (val < 0x800){
*p1 = 0xc0 | (val >> 6); ・
・ ・
nkf.c のコード行数を数えてみる
何も考えずに行数を数える
→6717 行
コメントと空行以外の行数を数 える
→3685 行
4 4 . . 1章 ソフトウエアの物理的測定 1章 ソフトウエアの物理的測定
ソフトウエア規模を測定する ソフトウエア規模を測定する 伝統的なメトリクス
伝統的なメトリクス
– コード行数コード行数 (Lines of Code: LOC)(Lines of Code: LOC) を数えるを数える
・ ・ ・
#ifdef UNICODESUPPORT wchar_t *guessbuffW = NULL;
UINT guessCodePage = CP_OEMCP;
DWORD guessdwFlags = MB_PRECOMPOSED; wchar_t *tounicode(const char *p)
{
static wchar_t buff[GUESS]; int sts;
sts = MultiByteToWideChar(guessCodePage,guessdwFlags,p,-1,buff,sizeof(buff) / sizeof(wchar_t)); if ( sts ) {
・ ・
nkf32dll.c のコード行数を数えてみる
何も考えずに行数を数える
→1006 行
コメントと空行以外の行数を数 える
→380 行
5/15
4 4 . . 1章 ソフトウエアの物理的測定 1章 ソフトウエアの物理的測定
ソフトウエア規模を測定する ソフトウエア規模を測定する 伝統的なメトリクス
伝統的なメトリクス
– コード行数コード行数 (Lines of Code: LOC)(Lines of Code: LOC) を数えるを数える
・ ・ ・
#ifdef UNICODESUPPORT wchar_t *guessbuffW = NULL;
UINT guessCodePage = CP_OEMCP;
DWORD guessdwFlags = MB_PRECOMPOSED; wchar_t *tounicode(const char *p)
{
static wchar_t buff[GUESS]; int sts;
sts = MultiByteToWideChar(guessCodePage,guessdwFlags,p,-1,buff,sizeof(buff) / sizeof(wchar_t)); if ( sts ) {
・ ・ ・
“nkf.c” と” nkf32dll.c” のコード行数を数えてみた
数える基準
数える基準 nkf.cnkf.c nkf32dllnkf32dll .c.c
何も考えずに行数を数える
何も考えずに行数を数える 67176717 行行 10061006 行行 コメントと空行以外の行数を数え
コメントと空行以外の行数を数え
るる 3685
3685 行行 380380 行行 LOC は何を基準に数えれ
ば、 信頼性の高い 測定なのか…
4 4 . . 1 1 . . 1章 コード行数の測定 1章 コード行数の測定
と、いうことでと、いうことで LOCLOC の数え方は、 の数え方は、 何らかの規則や基準に沿って運営しないと、 何らかの規則や基準に沿って運営しないと、 いくつかのプロジェクトで いくつかのプロジェクトで
ソフトウエアの規模がよく分からない。 ソフトウエアの規模がよく分からない。
カーネギーメロン大学カーネギーメロン大学 (CMU)(CMU) の の
ソフトウエア工学研究所
ソフトウエア工学研究所 (SEI)(SEI) で、で、 LOCLOC の の 数え方に対する枠組みが公開されている!! 数え方に対する枠組みが公開されている!!
そこで…
7/15
4 4 . . 1 1 . . 1章 コード行数の測定 1章 コード行数の測定
http://www.sei.cmu.edu/reports/92tr020.pdf ちなみに、
組織や研究では、
『非コメント 1k 行 数』や『論理行数』が
よく使われとる。
社内で LOC 数え方の 基準を決めておくと、
複数プロジェクトで ソフトウエアの規模が
比較できるがね。
4 4 . . 1 1 . . 2章 言語補正係数 2章 言語補正係数
LOCLOC の数え方のみで、 の数え方のみで、 ソフトウエアの規模について議論できない。 ソフトウエアの規模について議論できない。
様々な視点で、 ソ様々な視点で、 ソ フトウエアの規模を検証しないと、 プ フトウエアの規模を検証しないと、 プ ロジェクトを成功するための作戦が 立 ロジェクトを成功するための作戦が 立
案できない。 案できない。
もう少し、プロジェクトを違う視点で もう少し、プロジェクトを違う視点で 考えてみよう!
考えてみよう!
⇒ 開発言語は何?
9/15
4 4 . . 1 1 . . 2章 言語補正係数 2章 言語補正係数
何故、開発言語を知る必要があるか?何故、開発言語を知る必要があるか?
⇒⇒ 開発者は、 開発者は、 コテコテロジックな言語を駆使して コテコテロジックな言語を駆使して
コーディングしているか、 コーディングしているか、
シンプルロジックな言語を瞬殺で シンプルロジックな言語を瞬殺で
コーディングしているかで、 コーディングしているかで、
言語の「生産性」に差が出てくる!! 言語の「生産性」に差が出てくる!!
と思われる。 と思われる。
10/15
4 4 . . 1 1 . . 2章 言語補正係数 2章 言語補正係数
言語の「生産性」に差があることを 言語の「生産性」に差があることを
“ケイバーズ・ジョーンズ”が
“ケイバーズ・ジョーンズ”が 19911991 年に 発年に 発 表。表。
内容は…
アセンブリ
アセンブリ (( 基本命令基本命令 )) 320320 アセンブリ
アセンブリ (( マクロマクロ )) 213213
CC 128128
C++C++ 5555 JavaJava 5353 Visual C++
Visual C++ 3434
補正係数表
補正係数表 ((抜粋、※抜粋、※))
※LOC※LOC とファンクションポイントとの関係を示すためにとファンクションポイントとの関係を示すために 作成された
作成された
例えば、
”Hello World”を出力させるため
、
Cでは 128LOC 書く必要があるが、 C++では 55LOC 書けばよい。
つまり、
C++で 1LOC 書けばすむことが、 Cで 2.3LOC 書く必要がある。
11/15
4 4 . . 1 1 . . 3章 3章
再利用されたコードおよび再利用されたコードおよび リファクタリングされたコードの算出 リファクタリングされたコードの算出 生産性や欠陥密度のようなメトリクスを 生産性や欠陥密度のようなメトリクスを 有効に比較するためには、 有効に比較するためには、
再利用の範囲を示す必要がある。 再利用の範囲を示す必要がある。
→→ 再利用コードやリファクタリングされた再利用コードやリファクタリングされた
コードは、ゼロから作成しているわけでない。 コードは、ゼロから作成しているわけでない。
つまり、ベースとなるネタがあるため。 つまり、ベースとなるネタがあるため。
⇒ コードを数える or 数えないの基準は?
4 4 . . 1 1 . . 3章 3章
再利用されたコードおよび再利用されたコードおよび リファクタリングされたコードの算出 リファクタリングされたコードの算出 NASANASA では、 以では、 以 下の順序尺度による分類方法を 下の順序尺度による分類方法を
使用している。 使用している。
修正なしの再利用 修正なしの再利用
⇒⇒
再利用再利用
(( 25%未満の変更25%未満の変更 ))
若干の修正
若干の修正 (( 25%未満25%未満 ))
大規模な修正
大規模な修正 (( 25%以上の修25%以上の修
正正 )) 新規新規
新規新規 (( ゼロから作成ゼロから作成 ))
数えない
数える
13/15
4 4 . . 1 1 . . 4章 4章
非手続き型のコード行数の測非手続き型のコード行数の測 定定 非手続き型とは?非手続き型とは? (Wikipedia(Wikipedia から引用から引用 ))
– コンピュータのプログラミング言語の コンピュータのプログラミング言語の 文法による分類のひとつ
文法による分類のひとつ
– 問題そのもの 問題そのもの (“what”)(“what”) を記述することに を記述することに 力点を置く
力点を置く
言語としては、言語としては、 LISPLISP やや SQLSQL がある。がある。
手続き型とは?手続き型とは? (Wikipedia(Wikipedia から引用から引用 ))
– 問題の解法 問題の解法 (“how”)(“how”) を記述することに を記述することに 力点を置く
力点を置く
言語としては、言語としては、 CC やや C++C++ などがあるなどがある
4 4 . . 1 1 . . 4章 4章
非手続き型のコード行数の測非手続き型のコード行数の測 定定 Visual BasicVisual Basic やや Visual C++Visual C++ などの などの VisualVisual 言語言語
– 「選択」や「クリック」が『コード』になった「選択」や「クリック」が『コード』になった
LOCLOC でソフトウエアの規模を議論するのはでソフトウエアの規模を議論するのは
、ネタとしては苦しい
、ネタとしては苦しい
代わりに、 代わりに、 機能規模測定
機能規模測定 (( ファンクションポイントファンクションポイント )) が 用いられる。
が 用いられる。
内容は…
15/15
4 4 . . 1 1 . . 5章 仕様と設計の長さの測 5章 仕様と設計の長さの測
定 定
システムの仕様や設計の長さで システムの仕様や設計の長さで 実際のコード規模や工数を予測できると 実際のコード規模や工数を予測できると
考えるのは魅力的である。 考えるのは魅力的である。
試みて大きな成功に至っていないが、 フ試みて大きな成功に至っていないが、 フ ェントンとフリーガー曰く、
ェントンとフリーガー曰く、
「相関関係が得られるかどうかは
「相関関係が得られるかどうかは 組織に強く依存する。」
組織に強く依存する。」
4 4 . . 1 1 . . 5章 仕様と設計の長さの測 5章 仕様と設計の長さの測
定 定
仕様や設計の長さを測定する2つの方法仕様や設計の長さを測定する2つの方法
– (( ドキュメントのドキュメントの )) ページを数える。ページを数える。
– ドキュメント内の 「ドキュメント内の 「 shasha ll(ll( ~しなければならない~しなければならない )) 」という語を 数」という語を 数 える。える。
設計書設計書 11 ページでページで 300NLOC(Non-commented LOC300NLOC(Non-commented LOC 、非コ、非コ メント行数
メント行数 )) とすると、 現在のプロとすると、 現在のプロ ジェクトが
ジェクトが 1212 ページであればページであれば 3600NLOC3600NLOC のコードを書のコードを書 くと予想される。
くと予想される。