<p><!--
{
"title": "COCOMO IIにおけるソフトウェア開発工数見積もり",
"primary_category": "情報処理技術者試験",
"secondary_categories": ["IPA午前Ⅱ", "ソフトウェア開発", "プロジェクト管理"],
"tags": ["COCOMO II", "見積もり", "工数", "SLOC", "コストドライバ", "スケールファクタ", "バリー・ボーム"],
"summary": "COCOMO IIモデルを用いたソフトウェア開発工数の見積もり計算方法について、その構成要素である規模、スケールファクタ、コストドライバの適用手順とともに詳細に解説します。",
"mermaid": true,
"tweet_hint": "COCOMO IIによるソフトウェア工数見積もり、その計算ロジックを解説!規模、スケールファクタ、コストドライバがどう影響する? #IPA午前Ⅱ
#COCOMOII",
"link_hints": ["https://ja.wikipedia.org/wiki/COCOMO"]
}
-->
本記事は<strong>Geminiの出力をプロンプト工学で整理した業務ドラフト(未検証)</strong>です。</p>
<h1 class="wp-block-heading">COCOMO IIにおけるソフトウェア開発工数見積もり</h1>
<p>COCOMO IIモデルを用いたソフトウェア開発工数の見積もり計算と、その基礎となる規模、スケールファクタ、コストドライバの適用方法を解説する。</p>
<div class="wp-block-merpress-mermaidjs diagram-source-mermaid"><pre class="mermaid">
graph TD
A["ソフトウェア規模 (KSLOC)"] --> B{"COCOMO II 計算モデル選択"};
B -- 初期設計 --> C1["公称工数 E_nominal"];
B -- 事後アーキテクチャ --> C2["公称工数 E_nominal"];
C1 --> D{"スケールファクタ"};
C2 --> D;
D -- 5つのスケールファクタ適用 --> E["スケールファクタ調整済工数"];
E --> F{"コストドライバ"};
F -- 17のコストドライバ適用 --> G["調整済工数 E_adjusted"];
G --> H["最終工数見積もり (人月)"];
subgraph 計算ステップ
B; C1; C2; D; E; F; G; H;
end
</pre></div>
<h2 class="wp-block-heading">背景</h2>
<p>現代のソフトウェア開発は、大規模化、複雑化、そして反復的な開発プロセスが一般的であり、プロジェクトの成功には正確な工数見積もりが不可欠である。しかし、従来の経験則や専門家の直感に頼った見積もりでは、精度が低く、プロジェクトの遅延や予算超過の原因となることが多かった。特に、技術の急速な変化や新しい開発手法の導入は、見積もりの難しさを一層高めている。</p>
<h2 class="wp-block-heading">COCOMO IIの導入と課題解決</h2>
<p>COCOMO II(Constructive Cost Model II)は、バリー・ボーム(Barry Boehm)によって開発されたソフトウェア開発工数見積もりモデルであり、1981年のオリジナルCOCOMOモデルを現代のソフトウェア開発プラクティスに合わせて進化させたものである。このモデルは、システムの規模、開発の複雑さ、組織の能力、技術的制約など、多岐にわたる要因を定量的に評価することで、より現実的で信頼性の高い工数見積もりを提供することを目指している。</p>
<p>COCOMO IIは主に以下の3つのサブモデルから構成され、プロジェクトの段階に応じて使い分けることができる。</p>
<ol class="wp-block-list">
<li><p><strong>アプリケーション合成モデル(Application Composition Model)</strong>: 初期段階でRADツールやプロトタイピングを用いる小規模プロジェクト向け。</p></li>
<li><p><strong>初期設計モデル(Early Design Model)</strong>: 要件定義後、アーキテクチャ設計前の段階で、まだ詳細なSLOCが不明な場合向け。</p></li>
<li><p><strong>事後アーキテクチャモデル(Post-Architecture Model)</strong>: 詳細設計後の段階で、ソースコード行数(SLOC)が明確になった時点向け。最も精度の高い見積もりを可能にする。</p></li>
</ol>
<p>IPA午前Ⅱでは、主に事後アーキテクチャモデルにおける計算ロジックが問われることが多い。</p>
<h2 class="wp-block-heading">COCOMO IIにおける工数見積もりの計算手順</h2>
<p>COCOMO IIの事後アーキテクチャモデルにおける工数(E: Effort, 人月)の基本的な計算式は以下の通りである。</p>
<p>$$ E = A \times \text{Size}^B \times \prod_{i=1}^{17} \text{EM}_i $$</p>
<p>ここで、各要素は以下の意味を持つ。</p>
<ul class="wp-block-list">
<li><p><strong>A</strong>: モデル係数(定数)。</p></li>
<li><p><strong>Size</strong>: ソフトウェアの規模。通常はKSLOC(千行ソースコード)で表される。ファンクションポイントやオブジェクトポイントから変換することも可能。</p></li>
<li><p><strong>B</strong>: スケールファクタによって計算される指数。プロジェクトの規模が大きくなるにつれて工数が非線形に増加する効果を表す。
$$ B = 1.01 + 0.01 \times \sum_{j=1}^{5} \text{SF}_j $$</p></li>
<li><p><strong>EM$_i$</strong>: 第 $i$ 番目のコストドライバ乗数(Effort Multiplier)。</p></li>
</ul>
<p>計算は以下のステップで進められる。</p>
<h3 class="wp-block-heading">ステップ1: 公称工数 (Nominal Effort) の算出</h3>
<p>まず、スケールファクタやコストドライバを考慮しないベースラインの工数を算出する。</p>
<p>$$ E_{\text{nominal}} = A \times \text{Size}^B $$</p>
<p>COCOMO IIでは <code>A</code> の値は通常 2.94 であり、<code>B</code> はスケールファクタによって動的に変化する。</p>
<h3 class="wp-block-heading">ステップ2: スケールファクタ (Scale Factors, SF) の適用</h3>
<p>COCOMO IIには5つのスケールファクタがあり、それぞれプロジェクトの組織的成熟度、柔軟性、リスクへの対応能力など、プロジェクト全体の特性を評価する。各スケールファクタは6段階(非常に低い~非常に高い)で評価され、それぞれに数値が割り当てられている。これらの合計値が <code>B</code> の計算に用いられる。</p>
<ol class="wp-block-list">
<li><p><strong>PREC (Precedentedness)</strong>: 前例の有無</p></li>
<li><p><strong>FLEX (Development Flexibility)</strong>: 開発の柔軟性</p></li>
<li><p><strong>RESL (Architecture/Risk Resolution)</strong>: アーキテクチャとリスク解決</p></li>
<li><p><strong>TEAM (Team Cohesion)</strong>: チームのまとまり</p></li>
<li><p><strong>PMAT (Process Maturity)</strong>: プロセス成熟度</p></li>
</ol>
<p>これら5つのスケールファクタの評価値の合計が<code>$\sum_{j=1}^{5} \text{SF}_j$</code>となり、指数 <code>B</code> を決定する。</p>
<h3 class="wp-block-heading">ステップ3: コストドライバ (Effort Multipliers, EM) の適用</h3>
<p>COCOMO IIには17のコストドライバがあり、それぞれが6段階(非常に低い~非常に高い)で評価され、乗数(Effort Multiplier)が割り当てられている。これらは、製品の特性、開発環境、人員の特性などの詳細な要因を反映し、工数に与える影響を調整する。例えば、要求される信頼性が高いほど、または開発者の能力が低いほど、EM値が大きくなり、結果として工数が増加する。</p>
<p><strong>製品属性</strong></p>
<ul class="wp-block-list">
<li><p>RELY (Required Software Reliability): ソフトウェア信頼性</p></li>
<li><p>DATA (Database Size): データベース規模</p></li>
<li><p>CPLX (Product Complexity): 製品の複雑性</p></li>
<li><p>RUSE (Required Reusability): 要求される再利用性</p></li>
<li><p>DOCU (Documentation Match to Life-Cycle Needs): ドキュメントの適合性</p></li>
</ul>
<p><strong>ハードウェア属性</strong></p>
<ul class="wp-block-list">
<li><p>TIME (Execution Time Constraint): 実行時間制約</p></li>
<li><p>STOR (Main Storage Constraint): 主記憶制約</p></li>
<li><p>PVOL (Platform Volatility): プラットフォームの不安定性</p></li>
</ul>
<p><strong>人的属性</strong></p>
<ul class="wp-block-list">
<li><p>ACAP (Analyst Capability): 分析者の能力</p></li>
<li><p>PCAP (Programmer Capability): プログラマの能力</p></li>
<li><p>APEX (Applications Experience): アプリケーション経験</p></li>
<li><p>PLEX (Platform Experience): プラットフォーム経験</p></li>
<li><p>LTEX (Language and Tool Experience): 言語とツールの経験</p></li>
</ul>
<p><strong>プロジェクト属性</strong></p>
<ul class="wp-block-list">
<li><p>TOOL (Use of Software Tools): ソフトウェアツールの利用</p></li>
<li><p>SITE (Multisite Development): マルチサイト開発</p></li>
<li><p>SCED (Required Development Schedule): 開発スケジュール要求</p></li>
</ul>
<p>これら17のコストドライバの乗数を全て掛け合わせたものが<code>$\prod_{i=1}^{17} \text{EM}_i$</code>となる。</p>
<h2 class="wp-block-heading">要点</h2>
<ul class="wp-block-list">
<li><p><strong>規模、スケールファクタ、コストドライバ</strong>: COCOMO IIは、ソフトウェアの規模(KSLOC)をベースに、プロジェクト全体の特性を評価するスケールファクタと、詳細な開発環境・人員・製品特性を評価するコストドライバを組み合わせることで、工数見積もりの精度を高める。</p></li>
<li><p><strong>段階的適用</strong>: プロジェクトの進行度合いに応じて、アプリケーション合成、初期設計、事後アーキテクチャの3つのサブモデルを使い分ける。</p></li>
<li><p><strong>非線形な工数増加</strong>: スケールファクタによって計算される指数 <code>B</code> により、プロジェクト規模が大きくなるほど工数も非線形に増加する現実を反映している。</p></li>
<li><p><strong>リスクと不確実性の考慮</strong>: コストドライバの評価を通じて、開発リスクや不確実性が工数に与える影響を定量的に把握できる。</p></li>
<li><p><strong>反復開発への対応</strong>: 2024年7月20日時点では、アジャイル開発などの反復的な開発手法にも対応できるよう、継続的な見積もり調整が推奨されている。</p></li>
</ul>
本記事はGeminiの出力をプロンプト工学で整理した業務ドラフト(未検証)です。
COCOMO IIにおけるソフトウェア開発工数見積もり
COCOMO IIモデルを用いたソフトウェア開発工数の見積もり計算と、その基礎となる規模、スケールファクタ、コストドライバの適用方法を解説する。
graph TD
A["ソフトウェア規模 (KSLOC)"] --> B{"COCOMO II 計算モデル選択"};
B -- 初期設計 --> C1["公称工数 E_nominal"];
B -- 事後アーキテクチャ --> C2["公称工数 E_nominal"];
C1 --> D{"スケールファクタ"};
C2 --> D;
D -- 5つのスケールファクタ適用 --> E["スケールファクタ調整済工数"];
E --> F{"コストドライバ"};
F -- 17のコストドライバ適用 --> G["調整済工数 E_adjusted"];
G --> H["最終工数見積もり (人月)"];
subgraph 計算ステップ
B; C1; C2; D; E; F; G; H;
end
背景
現代のソフトウェア開発は、大規模化、複雑化、そして反復的な開発プロセスが一般的であり、プロジェクトの成功には正確な工数見積もりが不可欠である。しかし、従来の経験則や専門家の直感に頼った見積もりでは、精度が低く、プロジェクトの遅延や予算超過の原因となることが多かった。特に、技術の急速な変化や新しい開発手法の導入は、見積もりの難しさを一層高めている。
COCOMO IIの導入と課題解決
COCOMO II(Constructive Cost Model II)は、バリー・ボーム(Barry Boehm)によって開発されたソフトウェア開発工数見積もりモデルであり、1981年のオリジナルCOCOMOモデルを現代のソフトウェア開発プラクティスに合わせて進化させたものである。このモデルは、システムの規模、開発の複雑さ、組織の能力、技術的制約など、多岐にわたる要因を定量的に評価することで、より現実的で信頼性の高い工数見積もりを提供することを目指している。
COCOMO IIは主に以下の3つのサブモデルから構成され、プロジェクトの段階に応じて使い分けることができる。
アプリケーション合成モデル(Application Composition Model): 初期段階でRADツールやプロトタイピングを用いる小規模プロジェクト向け。
初期設計モデル(Early Design Model): 要件定義後、アーキテクチャ設計前の段階で、まだ詳細なSLOCが不明な場合向け。
事後アーキテクチャモデル(Post-Architecture Model): 詳細設計後の段階で、ソースコード行数(SLOC)が明確になった時点向け。最も精度の高い見積もりを可能にする。
IPA午前Ⅱでは、主に事後アーキテクチャモデルにおける計算ロジックが問われることが多い。
COCOMO IIにおける工数見積もりの計算手順
COCOMO IIの事後アーキテクチャモデルにおける工数(E: Effort, 人月)の基本的な計算式は以下の通りである。
$$ E = A \times \text{Size}^B \times \prod_{i=1}^{17} \text{EM}_i $$
ここで、各要素は以下の意味を持つ。
A: モデル係数(定数)。
Size: ソフトウェアの規模。通常はKSLOC(千行ソースコード)で表される。ファンクションポイントやオブジェクトポイントから変換することも可能。
B: スケールファクタによって計算される指数。プロジェクトの規模が大きくなるにつれて工数が非線形に増加する効果を表す。
$$ B = 1.01 + 0.01 \times \sum_{j=1}^{5} \text{SF}_j $$
EM$_i$: 第 $i$ 番目のコストドライバ乗数(Effort Multiplier)。
計算は以下のステップで進められる。
ステップ1: 公称工数 (Nominal Effort) の算出
まず、スケールファクタやコストドライバを考慮しないベースラインの工数を算出する。
$$ E_{\text{nominal}} = A \times \text{Size}^B $$
COCOMO IIでは A の値は通常 2.94 であり、B はスケールファクタによって動的に変化する。
ステップ2: スケールファクタ (Scale Factors, SF) の適用
COCOMO IIには5つのスケールファクタがあり、それぞれプロジェクトの組織的成熟度、柔軟性、リスクへの対応能力など、プロジェクト全体の特性を評価する。各スケールファクタは6段階(非常に低い~非常に高い)で評価され、それぞれに数値が割り当てられている。これらの合計値が B の計算に用いられる。
PREC (Precedentedness): 前例の有無
FLEX (Development Flexibility): 開発の柔軟性
RESL (Architecture/Risk Resolution): アーキテクチャとリスク解決
TEAM (Team Cohesion): チームのまとまり
PMAT (Process Maturity): プロセス成熟度
これら5つのスケールファクタの評価値の合計が$\sum_{j=1}^{5} \text{SF}_j$となり、指数 B を決定する。
ステップ3: コストドライバ (Effort Multipliers, EM) の適用
COCOMO IIには17のコストドライバがあり、それぞれが6段階(非常に低い~非常に高い)で評価され、乗数(Effort Multiplier)が割り当てられている。これらは、製品の特性、開発環境、人員の特性などの詳細な要因を反映し、工数に与える影響を調整する。例えば、要求される信頼性が高いほど、または開発者の能力が低いほど、EM値が大きくなり、結果として工数が増加する。
製品属性
RELY (Required Software Reliability): ソフトウェア信頼性
DATA (Database Size): データベース規模
CPLX (Product Complexity): 製品の複雑性
RUSE (Required Reusability): 要求される再利用性
DOCU (Documentation Match to Life-Cycle Needs): ドキュメントの適合性
ハードウェア属性
TIME (Execution Time Constraint): 実行時間制約
STOR (Main Storage Constraint): 主記憶制約
PVOL (Platform Volatility): プラットフォームの不安定性
人的属性
ACAP (Analyst Capability): 分析者の能力
PCAP (Programmer Capability): プログラマの能力
APEX (Applications Experience): アプリケーション経験
PLEX (Platform Experience): プラットフォーム経験
LTEX (Language and Tool Experience): 言語とツールの経験
プロジェクト属性
TOOL (Use of Software Tools): ソフトウェアツールの利用
SITE (Multisite Development): マルチサイト開発
SCED (Required Development Schedule): 開発スケジュール要求
これら17のコストドライバの乗数を全て掛け合わせたものが$\prod_{i=1}^{17} \text{EM}_i$となる。
要点
規模、スケールファクタ、コストドライバ: COCOMO IIは、ソフトウェアの規模(KSLOC)をベースに、プロジェクト全体の特性を評価するスケールファクタと、詳細な開発環境・人員・製品特性を評価するコストドライバを組み合わせることで、工数見積もりの精度を高める。
段階的適用: プロジェクトの進行度合いに応じて、アプリケーション合成、初期設計、事後アーキテクチャの3つのサブモデルを使い分ける。
非線形な工数増加: スケールファクタによって計算される指数 B により、プロジェクト規模が大きくなるほど工数も非線形に増加する現実を反映している。
リスクと不確実性の考慮: コストドライバの評価を通じて、開発リスクや不確実性が工数に与える影響を定量的に把握できる。
反復開発への対応: 2024年7月20日時点では、アジャイル開発などの反復的な開発手法にも対応できるよう、継続的な見積もり調整が推奨されている。
コメント