「ソフトウェアの開発工数って、どうやって数字で見積もるの?」と疑問に思ったことはありませんか。応用情報技術者試験では、その代表的な手法としてCOCOMOが顔を出します。
この記事では、COCOMOの考え方と試験での出題ポイントを、身近な例えで一気に整理します。
対象試験と出題頻度
COCOMOは、応用情報技術者試験(AP)の午前問題で出題されるテーマです。
ソフトウェア開発の工数見積もり手法の比較問題として登場し、ファンクションポイント法・Putnamモデル・Dotyモデルといった他の見積もり手法との違いを区別できるかが問われます。
詳細をクリックして確認
応用情報技術者
★☆☆☆☆
ランクD(発展)参考程度
用語の定義
情報処理試験を勉強していると、「COCOMOって聞いたことはあるけど、結局どんな見積もり方法?」と混乱しがちです。
COCOMO(Constructive Cost Model)とは、一言で言うと
「予想プログラム行数を入力にして、補正係数を掛けて開発工数や期間を算出するモデル」
のことです。
イメージとしては、「引っ越し料金の見積もりサイト」です。
引っ越し料金は、まず「荷物の量(段ボール何箱)」を入力し、そこに「距離」「階数」「エレベーターの有無」といった条件を掛けて最終金額が出ます。荷物量が同じでも、条件次第で料金は大きく変わります。
COCOMOも同じ発想で、「予想行数」という荷物量に、開発チームのスキルや要求の難しさといった補正係数を掛けて工数を算出します。
📊 COCOMOの基本情報
| 項目 | 内容 |
|---|---|
| 正式名称 | Constructive Cost Model(建設的コストモデル) |
| 提唱者 | Barry W. Boehm(1981年) |
| 主な入力値 | 予想プログラム行数(KDSI:千行単位) |
| 主な出力値 | 開発工数(人月:MM)、開発期間 |
| 分類 | 係数見積もり法(パラメトリック見積もり) |
解説
ソフトウェア開発の現場では、「このプロジェクトに何人月かかるか」を着工前に見積もる必要があります。
経験と勘だけで数字を出すと、見積もりが大きく外れてプロジェクト炎上の原因になります。
そこでBarry W. Boehmが1981年、米国TRW社で集めた63件の開発実績データを統計的に分析し、規模から工数を算出する公式を提案しました。これがCOCOMOです。
IPAの公式資料でも、見積モデルの体系化された最初の代表例として紹介されています。
基本式の形
COCOMOの基本構造は、応用情報の過去問でも提示される次の式です。
MM = a × (KDSI)b × EAF
| 記号 | 意味 |
|---|---|
| MM | Man-Month(人月)。求めたい開発工数 |
| KDSI | Kilo Delivered Source Instructions。納品される予想プログラム行数(千行) |
| a, b | 開発モードに応じた定数(例:基本式 a=3.0, b=1.12) |
| EAF | Effort Adjustment Factor。技術者の能力・要求信頼性などの補正係数 |
注目すべきは指数 b が 1 より大きい点です。これは「規模が2倍になっても工数は2倍では済まず、それ以上に膨らむ」ことを意味します。
大規模開発ほど通信コストや管理コストが増えるという経験則を、数式に組み込んでいます。
図解:規模と生産性のグラフ
MM = 3.0 × (KDSI)1.12 から、生産性(KDSI/MM)を縦軸に取ると右肩下がりの曲線になります。
規模が大きくなるほど1人月あたりの生産行数が落ちる、という関係です。
開発規模(KDSI)と生産性(KDSI/MM)の関係
▲ 指数 b > 1 のため、規模が増えると生産性は低下する
3つの開発モード
初代COCOMO(COCOMO 81)では、プロジェクトの性質に応じて3つの開発モードが定義されています。
| モード | 特徴 | a, b |
|---|---|---|
| オーガニック | 小規模・経験豊富なチーム・要求が緩い | 2.4, 1.05 |
| セミディタッチド | 中規模・経験混在・要求は中程度 | 3.0, 1.12 |
| エンベデッド | 大規模・厳しい制約(組込み・リアルタイム) | 3.6, 1.20 |
他の見積もり手法との比較
COCOMOを正しく位置づけるには、他の見積もり手法との「入力値の違い」で整理するのが近道です。
| 手法 | 入力(基準) | 特徴 |
|---|---|---|
| COCOMO | 予想プログラム行数(KDSI) | 補正係数で工数・期間を算出 |
| ファンクションポイント法 | 入出力・ファイル数などの機能 | ユーザ視点の機能数から規模を算出 |
| Putnamモデル | 規模と工数・期間の関係 | 大規模向け、Rayleigh曲線を用いる |
| 類推法 | 過去の類似プロジェクト | 経験則ベース、初期段階で有効 |
なお、COCOMOを使うには「自社の生産性データの蓄積」が前提になります。補正係数を自社環境に合わせて調整しないと、Boehmの初期データそのままの数値になり、現実とズレるためです。
1981年版を「COCOMO 81」、2000年に発表されたオブジェクト指向・反復型開発に対応した改訂版を「COCOMO II」と呼びます。試験範囲では深追い不要です。
では、この用語が試験でどのように出題されるか見ていきましょう。
💡 COCOMOの核心を3行で
・予想プログラム行数(KDSI)に補正係数を掛けて、開発工数(人月)と期間を算出するモデル
・基本式は MM = a ×(KDSI)b× EAF。指数 b > 1 のため大規模ほど生産性は低下
・自社の生産性データの蓄積が利用前提。提唱者はBarry Boehm(1981年)
試験ではこう出る!
COCOMOは応用情報技術者試験(AP)の午前問題で、見積もり手法の比較問題として繰り返し出題されています。出題パターンは大きく3つに分かれます。
📊 過去問での出題実績
| 試験回 | 出題内容 | 問われたポイント |
|---|---|---|
| AP H28春 午前 問54 |
工数見積もりに関する記述として適切なものを選ぶ問題。 | ・正解は「自社における生産性データの蓄積が必要」 ・他選択肢はFP法・標準タスク法・類推法のひっかけ |
| AP H25秋 午前 問51 |
入出力やファイル数などを集計した値が規模に相関する見積もり手法を選ぶ問題。 | ・正解は「ファンクションポイント法」 ・COCOMO・Dotyモデル・Putnamモデルがひっかけ |
| SW H17秋 午前 問47 |
COCOMOの説明として、予想行数に補正係数を掛けて工数・期間を求めるものを選ぶ問題。 | ・キーワードは「予想プログラム行数」「補正係数」 ・APの祖先試験で出題された定番文言 |
📝 IPA試験での出題パターン
パターン1:「COCOMOの説明文を選べ」
4つの見積もり手法の説明文が並び、COCOMOに該当するものを選ぶ形式。正解の文には必ず「予想プログラム行数」「補正係数」のキーワードが含まれます。
パターン2:「COCOMOの利用前提を問う」
H28春問54のように、「COCOMOの使用には自社の生産性データの蓄積が必要」という記述を正解として選ばせる形式。「データ蓄積不要」「公開された万能式」のような文はひっかけです。
パターン3:「他手法と取り違えさせる」
H25秋問51のように、ファンクションポイント法の説明として並ぶ選択肢にCOCOMOが混ざる逆パターン。「機能数から規模を算出」ならFP法、「行数から工数を算出」ならCOCOMOと識別します。
頻出度Dの用語なので、ここまででOKです。Boehmの名前と「行数×補正係数」のキーワードだけ確実に押さえてください。
【確認テスト】理解度チェック
ここまでの内容を理解できたか、簡単なクイズで確認してみましょう。
Q. ソフトウェア開発の工数見積もりに関する記述として、COCOMOの説明に最も合致するものはどれでしょうか?
- A. ユーザー視点で入力・出力・ファイル・問い合わせ・インタフェースの数を集計し、その値から開発規模を算出する。
- B. 予想されるプログラム行数を基準に、エンジニアの能力や要求の信頼性などの補正係数を掛け合わせて開発工数や期間を算出する。
- C. 過去に実施した類似プロジェクトの実績データから、新規プロジェクトの工数を相対的に推定する。
正解と解説を見る
正解:B
解説:
COCOMOは、予想プログラム行数(KDSI)を入力に取り、開発モードに応じた定数と補正係数(EAF)を掛け合わせて工数(人月)と期間を算出する係数見積もりモデルです。Boehmが1981年に提唱しました。
選択肢Aはファンクションポイント法の説明です。FP法は行数ではなくユーザ視点の機能数を基準にする点が、COCOMOとの根本的な違いです。選択肢Cは類推法(類推見積もり)の説明です。類推法は数式モデルではなく、過去プロジェクトとの相対比較で工数を見積もる手法であり、COCOMOのような係数見積もり法とは別カテゴリに属します。
よくある質問(FAQ)
Q. COCOMOとCOCOMO IIの違いは何ですか?
COCOMO(COCOMO 81)は1981年にBoehmが発表した初代モデルで、ウォーターフォール型開発を前提にプログラム行数(KDSI)から工数を算出します。一方COCOMO IIは2000年に発表された改訂版で、オブジェクト指向・反復型開発・再利用・COTS(市販コンポーネント)の利用といった現代的な開発スタイルに対応しています。応用情報試験ではほぼ初代COCOMOの内容が問われ、COCOMO IIの式まで踏み込む出題はまずありません。
Q. KDSI、KLOC、SLOCの違いは何ですか?
どれもプログラム行数を表す単位ですが、視点が少し異なります。SLOC(Source Lines of Code)はソースコード行数全般、KLOCはその千行単位(Kilo SLOC)、KDSI(Kilo Delivered Source Instructions)は「納品されるソースの千行」を指しBoehmが用いた用語です。試験では細かな区別は問われず、「千行単位の予想行数」と理解すれば十分です。
Q. 実務でCOCOMOは今でも使われていますか?
プログラム行数ベースという性質上、要件定義段階で「行数」を予測する難しさがあり、現代の業務系開発ではファンクションポイント法やストーリーポイントによる見積もりが主流です。ただし航空宇宙・防衛・組込み系といった行数管理が成熟している領域、および見積もりツール(COCOMO IIベースの製品)の内部ロジックとして現役で活用されています。
Q. COCOMOで「指数 b が 1 より大きい」のはなぜですか?
大規模開発では、メンバー間のコミュニケーションコスト・設計の整合性確保・テスト工程の複雑化が、規模の増加を上回るペースで膨らむためです。Brooksの「人月の神話」で語られる「人を増やしても開発期間は短縮されない」という経験則を、Boehmは数式に落とし込みました。指数 b が 1 を超えることで、規模が2倍になると工数は2倍以上になる「ディスエコノミー・オブ・スケール(規模の不経済)」が表現されます。