COCOMO(ココモ法)とは何か?システム開発の工数・期間の見積り

2020年3月7日

COCOMO(ココモ法)とは

COCOMO(ココモ法)とは、ソフトウェアのソースコードでシステム開発の工数や期間を見積もる手法です。
COCOMOは"constructive cost model"の略であり、 日本語訳すれば「構造的なコスト推計モデル」となります。

IPAのプロジェクト・マネージャ試験でのCOCOMOの出題

IPAのプロジェクト・マネージャ試験(PM試験)では、以下の図1のようなグラフを見て開発規模と開発生産の関係を表したグラフを選択させる問題が出ています[1]平成28年度春期PM試験午後Ⅱ問11より
ここでいう開発生産性とは、開発規模(ソースコードの行数)を開発工数で除したもの、すなわち「開発生産性 = 開発規模/開発工数」を意味しています。

図1

今回はこのCOCOMOのグラフを読み取れるように、COCOMOの手法を解説していきます。

COCOMOによる工数・期間の見積り

2つの重要な方程式

COCOMOでは2つの重要な方程式が存在します。

図2:COCOMOの方程式

図2にはCOCOMOの方程式を掲載しています。COCOMOにはいろいろと計算式がありますが、今回は基本的な方程式のみご紹介します。
数式を見ると苦手意識を持ってしまう人がいるかもしれませんが、書いてあることは簡単です。
図2に掲載したそれぞれの数式の内容を口語訳してみると以下のようになります。

  • E = a × KLOCb  … 開発工数はソースコードの行数(もしくは開発規模)を一定の数値で累乗し、一定の数値で掛け合わせて計算する。
  • T = c × Ed … 開発期間は開発工数を一定の数値で累乗し、一定の数値で掛け合わせて計算する。

こうしてみると、開発工数がソースコードの行数、つまりプログラムの規模で決まり、その開発工数で開発期間が決定するなんて当たり前なのですが、図2はそれを仰々しく数式化しているだけです。
数式にでてくる数字の意味を説明していくと、Eは工数を意味する"effort"を意味し、人月を表しています。人月とは、1人の作業者の1ヶ月の作業量という意味です。システム開発で言えば、プログラマー1人が1ヶ月間の営業時間に開発できる作業量をイメージしてみてください。 Tは時間・期間を意味する"time"からとってきています。これは月単位の時間を表しています。
KLOCは見慣れない文字ですが、"Kilo Lines of Code"を表しており、千単位のコードの行数を意味しています[2]Software Engineering | COCOMO Model – javatpoint
この他、a、b、c、dについてですが、実はこの部分がCOCOMOの面白いところであり、この文字にどんな数値が入るかはプロジェクトによって変わるとしています。
次はこれら a、b、c、dにどのような数値を代入していくのかを見ていきましょう。

プロジェクトによる数値の変化

COCOMOでは同じソースコードの行数であっても、プロジェクトの種類によって開発工数・開発期間が変わるとしています。
COCOMOではプロジェクトを以下の3つの種類に分けています。

  • オーガニックタイプ(Organic)
  • セミデタッチタイプ(Semi-detached)
  • エンベッドタイプ(Embedded)

ここから、これら3つのプロジェクトの種類について説明していきます[3] COCOMOのプロジェクトの種類の説明については、Software Engineering | COCOMO Model – GeeksforGeeks を参考に作成した
オーガニックタイプのプロジェクトは、必要とするチームの規模が小さく、起こりうるリスクや問題が十分に理解されたり、過去に解決されており、チームメンバーが問題に関して経験があるプロジェクトです。作業内容が明確なプロジェクトはこのオーガニックタイプに属していると言えるでしょう。
セミデタッチタイプのプロジェクトは、チーム規模、経験、様々なプログラミング環境の知識などの重要な特性が先ほどのオーガニックと次に見るエンベッドの中間に位置するプロジェクトです。つまり、オーガニックタイプよりは開発内容に比較的馴染みがなく、開発内容も難しいプロジェクトを指しています。
最後のエンベッドタイプのプロジェクトは、他のタイプに比べて最高レベルの複雑さを持っています。開発メンバーは創造性、経験を必要とし、チームサイズも大規模になります。
このように、COCOMOはプロジェクトを内容がはっきりしているオーガニックタイプ、わからない部分があるセミデタッチタイプ、複雑すぎるエンベッドタイプの3つに分けています。そして、これらのプロジェクトの種類によって図1に掲載した方程式の4つの定数の数値が変化するとしています。その数値の内容は以下の通りです。

表1:プロジェクトの種類ごとの定数の値
プロジェクトの種類abcd
オーガニックタイプ2.41.052.50.38
セミデタッチタイプ31.122.50.35
エンベッドタイプ3.61.22.50.32

それではこの数値を使って実際に開発工数と開発期間を見積もっていきましょう。

COCOMOで開発工数を見積もる

上述の通り、開発工数は「E = a × KLOCb」で算出することができます。例として、1,000行のソースコードを書くプロジェクトと10,000行のソースコードを書くプロジェクトを比較しながら考えてみましょう。
例えばオーガニックタイプのプロジェクトで1,000行のソースコードを書く開発をしたとすると、以下のような計算式になります。

  • E = a × KLOCb = 2.4 × 11.05 ≒ 2.4

「E = a × KLOCb」の中で、先ほどの表1からオーガニックタイプのaには2.4が、bには1.05が入ることがわかりますので、これらの数値を代入します。 KLOCの部分が1になっていますが、KLOCが「何千行」というように、千行単位の数を表しているため、1,000行であれば1を代入します。
ここから、オーガニックタイプで1,000行のソースコードを書く場合の開発は2.4人月かかるということがわかります。
よくあるお問い合わせフォームのソースコードが300~500行程度のソースコードで開発でき、1つ作るのに1ヶ月弱かかります。そうしたお問い合わせフォームが2つ、3つ分と考えると、ソースコード1,000行の開発工数・2.4人月という数値は確かに近いかもしれません。

開発工数を計算するExcelの画面
Excelなどの表計算ソフトを使えば簡単に数値を出すことができる

こうした開発工数の計算はMicrosoft社のExcelのような表計算ソフトを使用すると、簡単に値を求めることができます。
下の表は、Excelを使って開発工数を出した結果をまとめています(小数点第二位以下を四捨五入)。

表2:開発工数
プロジェクトの種類1,000行のソースコード10,000行のソースコード
オーガニックタイプ2.426.9
セミデタッチタイプ3.039.5
エンベッドタイプ3.657.1

このプロジェクトの種類による開発規模の傾向をグラフにまとめると下の図3のようになります。

図3:COCOMOによるソースコード(開発規模)と開発工数の関係

先ほどの表2と図3から様々なことがわかりますが、まずはソースコードが増加したときの工数の変化を見ていきましょう。
オーガニックタイプのプロジェクトでは1,000行のソースコードのプロジェクトと10,000行のプロジェクトを比べると、開発工数が約11倍に増えていることがわかります。ソースコードが10倍になっているので、その倍率より少し多く開発工数が増えていることがわかります。しかし、エンベッドタイプのプロジェクトでは、ソースコードが10倍に増えると開発工数は3.6人/月から57.1人/月に増加し、約16倍に膨れ上がっています。このように、ソースコードが増加したときの開発工数の変化は、プロジェクトの種類によって大きく左右されることがわかります。
また、プロジェクトの種類によっても、開発工数は大きく違います。ソースコード1,000行のオーガニックタイプのプロジェクトであっても、複雑なエンベッドタイプのプロジェクトはオーガニックタイプのプロジェクトの1.5倍以上の開発工数が必要であることは注目に値するでしょう。ソースコードの量がさらに増えていけば、エンベッドタイプのプロジェクトとオーガニックタイプのプロジェクトの開発工数の開きはますます激しくなっていきます。

COCOMOで開発期間を見積もる

最後に開発期間を見積もっていきましょう。すでに見た通り、開発期間は「T = c × Ed」の方程式で導き出すことができます。
表1と表2からソースコード1,000行のオーガニックタイプのプロジェクトの開発期間を見積もると、以下の式のようになります。

  • T = c × Ed = 2.5 × 2.40.38 ≒ 3.5

表1からプロジェクトの種類にかかわらずcには2.5が、オーガニックタイプのプロジェクトのdには0.38が入ることがわかります。さらに表2でまとめたように、ソースコード1,000行のオーガニックタイプのプロジェクトの開発工数は2.4人月だったので、Eには2.4を代入します。
このようにして、ソースコード1,000行のオーガニックタイプのプロジェクトの開発期間は約3.5ヶ月であることがわかりました。先ほど、1,000行のソースコードを書くプロジェクトとしてお問い合わせフォーム2~3つ分とお話ししましたが、だいたいこうしたプロジェクト期間として3.5ヶ月というのは妥当なラインです。
この他、表2で作成した各開発工数の開発期間をまとめたものが下の表3です。

表3:開発期間
プロジェクトの種類1,000行のソースコード10,000行のソースコード
オーガニックタイプ3.58.7
セミデタッチタイプ3.79.1
エンベッドタイプ3.89.1

この表3からもわかる通り、開発期間はプロジェクトの種類で大きな差はなく、さらにソースコードが増えたとしても、その倍率と同程度では開発期間は伸びません。開発の規模が大きくなると、プログラマーなど、投入されるリソースが増えていくので、結局は同程度になるということでしょうか。
また、表3でも10,000行のソースコードを書く場合は、セミデタッチのタイプのプロジェクトでもエンベッドタイプのプロジェクトでも開発期間に変わりはなく、これ以上の規模になるとむしろセミデタッチタイプのプロジェクトのほうが開発期間は計算上において長くなります(といっても、そこまで大差はでないのですが)。
このような開発期間の性質をグラフにしたのが、下の図4です。

COCOMOによる開発工数と開発期間の関係の図
図4:COCOMOによる開発工数と開発期間の関係

PM試験の答え

今回はCOCOMOを使ったシステム開発の工数・開発期間の見積り手法を解説していきました。
COCOMO法はソースコードの行数を使って開発工数を見積もっていき、ソースコードの行数が増えると開発工数が増えていきますが、その増加率はプロジェクトの種類によって異なりました。
開発期間も開発工数を使って算出できますが、開発工数とは違いプロジェクトの種類による違いはあまりなく、開発工数が増加しても、それに応じて期間が膨れあがるということはありませんでした。
最後に冒頭で紹介したPM試験の答えを見ていくと、表2からわかるように、開発規模が10倍になると、開発工数はオーガニックタイプのプロジェクトでも約11倍に増えていました。つまり、開発規模が増えれば増えるほど、開発工数はそれ以上に増えていきます。
PM試験の問題の開発生産性は開発規模を開発工数(開発規模/開発工数)で割った数値を意味していました。 開発規模が大きくなり、開発工数が増えていくと、開発生産性の分母の開発工数が分子の開発規模よりも大きくなっていくので、開発生産性はどんどん小さくなっていきます。
図1の中で開発規模が増えると開発生産性が減っていっているのは、グラフ④だけですので、答えはグラフ④であることがわかります(とはいえ、開発規模が大きくなれば、開発の生産性が落ちていくというのは自明の理かもしれません)。

参考

参考にしたWebサイト

1平成28年度春期PM試験午後Ⅱ問11より
2Software Engineering | COCOMO Model – javatpoint
3 COCOMOのプロジェクトの種類の説明については、Software Engineering | COCOMO Model – GeeksforGeeks を参考に作成した