<p><!--
{
  "title": "IPA午前Ⅱ ソフトウェア開発の見積もり手法 解説",
  "primary_category": "情報処理技術者試験",
  "secondary_categories": ["IPA午前Ⅱ", "システム開発", "プロジェクト管理"],
  "tags": ["IPA", "午前Ⅱ", "ソフトウェア開発", "見積もり", "ファンクションポイント法", "COCOMO"],
  "summary": "ソフトウェア開発における工数や期間の見積もり手法の原理、計算方法、適用例を解説する。",
  "mermaid": true,
  "verify_level": "業務ドラフト",
  "tweet_hint": "IPA午前Ⅱで問われるソフトウェア開発の見積もり手法(FP法、COCOMO)を分かりやすく解説。基本原理から計算式まで。 
#IPA #午前Ⅱ #ソフトウェア開発",
  "link_hints": ["IPA_公式", "ソフトウェア開発見積もりガイドライン", "ファンクションポイント法_詳細"]
}
-->
本記事は<strong>Geminiの出力をプロンプト工学で整理した業務ドラフト(未検証)</strong>です。</p>
<h1 class="wp-block-heading">IPA午前Ⅱ ソフトウェア開発の見積もり手法 解説</h1>
<p>ソフトウェア開発における工数や期間の見積もりでは、定量的手法の適用とそれらの基本的な計算原理の理解が重要である。</p>
<h2 class="wp-block-heading">背景</h2>
<p>ソフトウェア開発プロジェクトの計画において、工数、期間、費用を正確に見積もることは成功に不可欠である。見積もりは、プロジェクトの予算編成、資源配分、スケジュール策定の基礎となり、不正確な見積もりはプロジェクトの遅延やコスト超過、品質低下を引き起こす可能性がある。そのため、経験に基づく直感的な見積もりだけでなく、定量的手法を用いた客観的な見積もりの導入が求められる。</p>
<h2 class="wp-block-heading">問題点</h2>
<p>IPA午前Ⅱ試験では、ソフトウェア開発の見積もりに関する主要な手法、特にファンクションポイント(FP)法やCOCOMO(Constructive Cost Model)について、その基本原理、計算ステップ、適用条件が問われる傾向にある。これらの問題では、与えられたプロジェクトの特性や機能要件から、見積もり指標(例:FP値、工数)を正確に算出する能力が試される。単に公式を覚えるだけでなく、各手法が何を測定し、どのように適用されるかを理解することが重要となる。</p>
<h2 class="wp-block-heading">計算/手順</h2>
<p>ソフトウェア開発の見積もり手法は多岐にわたるが、代表的なものとしてファンクションポイント(FP)法とCOCOMOが挙げられる。</p>
<h3 class="wp-block-heading">1. ファンクションポイント(FP)法</h3>
<p>FP法は、ユーザーに提供される機能の量(機能的規模)に基づいてソフトウェアの規模を見積もる手法である。要件定義段階で適用しやすく、特定のプログラミング言語に依存しない特徴がある。</p>
<h4 class="wp-block-heading">手順</h4>
<ol class="wp-block-list">
<li><p><strong>データ機能とトランザクション機能の識別と複雑度評価</strong></p>
<ul>
<li><p><strong>データ機能</strong>: ユーザーが認識できる論理ファイルの数。</p>
<ul>
<li><p>内部論理ファイル(ILF: Internal Logical File): アプリケーション内部で保守されるデータグループ。</p></li>
<li><p>外部インタフェースファイル(EIF: External Interface File): 別のアプリケーションによって保守されるが、現在のアプリケーションによって参照されるデータグループ。</p></li>
</ul></li>
<li><p><strong>トランザクション機能</strong>: ユーザーが認識できるプロセス。</p>
<ul>
<li><p>外部入力(EI: External Input): アプリケーションの内部論理ファイルを更新するデータ入力。</p></li>
<li><p>外部出力(EO: External Output): 処理されたデータをユーザーに提供する出力。</p></li>
<li><p>外部照会(EQ: External Inquiry): 内部論理ファイルからデータを取得し、ユーザーに提供するが、データを更新しない出力。</p></li>
</ul></li>
<li><p>識別された各機能に対して、そのデータ要素数や参照ファイル数に基づいて「単純」「平均」「複雑」のいずれかの複雑度を割り当て、それぞれに対応するポイントを積算する。</p></li>
</ul></li>
<li><p><strong>未調整ファンクションポイント(UFP: Unadjusted Function Point)の算出</strong></p>
<ul>
<li><p>各機能のポイントを合計する。</p></li>
<li><p><code>UFP = Σ (データ機能ポイント) + Σ (トランザクション機能ポイント)</code></p></li>
</ul></li>
<li><p><strong>汎用システム特性(VAF: Value Adjustment Factor)の適用</strong></p>
<ul>
<li><p>信頼性、性能、移植性など14項目からなる汎用システム特性(GSC: General System Characteristics)を評価し、各項目を0(影響なし)から5(強い影響)で採点する。</p></li>
<li><p>GSCの合計点(DI: Degree of Influence)を算出する。</p></li>
<li><p><code>VAF = (DI * 0.01) + 0.65</code> (IFPUGの場合)</p></li>
</ul></li>
<li><p><strong>調整済みファンクションポイント(AFP: Adjusted Function Point)の算出</strong></p>
<ul>
<li><code>AFP = UFP * VAF</code></li>
</ul></li>
<li><p><strong>工数の見積もり</strong></p>
<ul>
<li><p>AFPに過去の実績に基づく生産性係数(例:人月/FP)を乗じて工数を見積もる。</p></li>
<li><p><code>工数 (人月) = AFP * 生産性係数</code></p></li>
</ul></li>
</ol>
<h3 class="wp-block-heading">2. COCOMO (Constructive Cost Model)</h3>
<p>COCOMOは、ソフトウェアの規模(主としてLOC: Lines Of Code、またはKLOC: Kilo Lines Of Code)と、プロジェクトの属性(コストドライバ)に基づいて工数を見積もる経験的モデルである。</p>
<h4 class="wp-block-heading">計算式</h4>
<p>COCOMOには、基本COCOMO、中間COCOMO、詳細COCOMOがある。IPA午前Ⅱでは主に基本COCOMOや中間COCOMOが問われる。</p>
<ul class="wp-block-list">
<li><p><strong>基本COCOMO</strong>:</p>
<ul>
<li><p><code>工数 (人月) = a * (KLOC)^b</code></p></li>
<li><p><code>期間 (月) = c * (工数)^d</code></p></li>
<li><p>係数 <code>a, b, c, d</code> は開発モード(オーガニック、セミデタッチト、エンベデッド)によって異なる。</p>
<ul>
<li><p><strong>オーガニックモード</strong>: 比較的小規模で、経験豊富な開発者が集まった安定した環境。</p></li>
<li><p><strong>セミデタッチトモード</strong>: 中規模で、ある程度の経験者がいる環境。</p></li>
<li><p><strong>エンベデッドモード</strong>: 大規模で、複雑なシステムや厳格な制約がある環境。</p></li>
</ul></li>
</ul></li>
<li><p><strong>中間COCOMO</strong>: 基本COCOMOに加えて、システムの信頼性、データベース規模、製品の複雑度、開発者の能力、経験、開発ツールの利用度など、15種類の「コストドライバ」を評価し、工数調整係数(EAF: Effort Adjustment Factor)を算出する。</p>
<ul>
<li><p><code>工数 (人月) = a * (KLOC)^b * EAF</code></p></li>
<li><p>EAFは、各コストドライバの評価値(例:非常に低い、低い、普通、高い、非常に高い)に対応する係数を全て乗算した値である。</p></li>
</ul></li>
</ul>
<div class="wp-block-merpress-mermaidjs diagram-source-mermaid"><pre class="mermaid">
graph TD
    A["ソフトウェア開発見積もりプロセス"] --> B{"対象プロジェクトの特性分析"};
    B --> C{"見積もり手法の選択"};
    C --> D1["ファンクションポイント法 (FP法)"];
    C --> D2["COCOMO(\"構成型コストモデル\")"];
    D1 --> E1["機能数と複雑度評価"];
    E1 --> F1["未調整FP (UFP) 算出"];
    F1 --> G1["汎用システム特性評価 (VAF)"];
    G1 --> H1["調整済みFP (AFP) 算出"];
    D2 --> E2["規模 (KLOC) 決定"];
    E2 --> F2["開発モード選択 (オーガニック等)"];
    F2 --> G2["コストドライバ評価 (EAF) -- 中間COCOMOの場合"];
    G2 --> H2["工数算出"];
    H1 --> I["最終的な工数・期間見積もり"];
    H2 --> I;
    I --> J["見積もり結果のレビューと調整"];
    J --> K["プロジェクト計画への反映"];
</pre></div>
<p class="mermaid-caption">図:ソフトウェア開発の見積もりプロセスの概要</p>
<h2 class="wp-block-heading">要点</h2>
<ul class="wp-block-list">
<li><p><strong>FP法</strong>: ユーザー視点での機能的規模に基づき、要件定義段階で適用しやすい。言語非依存。調整済みファンクションポイント(AFP)を算出する。</p></li>
<li><p><strong>COCOMO</strong>: コード行数(KLOC)を主要な入力とし、プロジェクトの属性(コストドライバ)を考慮して工数を見積もる。</p></li>
<li><p>両手法とも、過去の実績データや組織固有の生産性係数、コストドライバの評価が正確な見積もりの鍵となる。</p></li>
<li><p>見積もりはプロジェクトのライフサイクルを通じて反復的に行い、情報が増えるにつれて精度を高めることが推奨される。</p></li>
</ul>
<hr/>
<p><strong>参考文献</strong></p>
<ul class="wp-block-list">
<li><p>[1] 経済産業省, “ソフトウェア開発見積もりガイドライン V2.0”, 2009年4月1日, https://www.meti.go.jp/policy/it_policy/eng/e_spt.htm</p></li>
<li><p>[2] IPA, “共通フレーム2017 (SLCP-JCF2017)”, 2017年9月11日, https://www.ipa.go.jp/archive/osc/common-frame/</p></li>
<li><p>[3] Boehm, B. W., “Software Engineering Economics”, Prentice-Hall, 1981.</p></li>
<li><p>[4] International Function Point Users Group (IFPUG), “Measurement Practices Manual”, <a href="https://www.ifpug.org/resources/counting-practices-manuals/">最新版のIFPUGガイドラインを参照</a>. (参照日: 2024年7月26日)</p></li>
</ul>
本記事はGeminiの出力をプロンプト工学で整理した業務ドラフト(未検証)です。
IPA午前Ⅱ ソフトウェア開発の見積もり手法 解説
ソフトウェア開発における工数や期間の見積もりでは、定量的手法の適用とそれらの基本的な計算原理の理解が重要である。
  
背景
ソフトウェア開発プロジェクトの計画において、工数、期間、費用を正確に見積もることは成功に不可欠である。見積もりは、プロジェクトの予算編成、資源配分、スケジュール策定の基礎となり、不正確な見積もりはプロジェクトの遅延やコスト超過、品質低下を引き起こす可能性がある。そのため、経験に基づく直感的な見積もりだけでなく、定量的手法を用いた客観的な見積もりの導入が求められる。
問題点
IPA午前Ⅱ試験では、ソフトウェア開発の見積もりに関する主要な手法、特にファンクションポイント(FP)法やCOCOMO(Constructive Cost Model)について、その基本原理、計算ステップ、適用条件が問われる傾向にある。これらの問題では、与えられたプロジェクトの特性や機能要件から、見積もり指標(例:FP値、工数)を正確に算出する能力が試される。単に公式を覚えるだけでなく、各手法が何を測定し、どのように適用されるかを理解することが重要となる。
計算/手順
ソフトウェア開発の見積もり手法は多岐にわたるが、代表的なものとしてファンクションポイント(FP)法とCOCOMOが挙げられる。
1. ファンクションポイント(FP)法
FP法は、ユーザーに提供される機能の量(機能的規模)に基づいてソフトウェアの規模を見積もる手法である。要件定義段階で適用しやすく、特定のプログラミング言語に依存しない特徴がある。
手順
- データ機能とトランザクション機能の識別と複雑度評価 - 
- データ機能: ユーザーが認識できる論理ファイルの数。 
- トランザクション機能: ユーザーが認識できるプロセス。 - 
- 外部入力(EI: External Input): アプリケーションの内部論理ファイルを更新するデータ入力。 
- 外部出力(EO: External Output): 処理されたデータをユーザーに提供する出力。 
- 外部照会(EQ: External Inquiry): 内部論理ファイルからデータを取得し、ユーザーに提供するが、データを更新しない出力。 
 
- 識別された各機能に対して、そのデータ要素数や参照ファイル数に基づいて「単純」「平均」「複雑」のいずれかの複雑度を割り当て、それぞれに対応するポイントを積算する。 
 
- 未調整ファンクションポイント(UFP: Unadjusted Function Point)の算出 
- 汎用システム特性(VAF: Value Adjustment Factor)の適用 - 
- 信頼性、性能、移植性など14項目からなる汎用システム特性(GSC: General System Characteristics)を評価し、各項目を0(影響なし)から5(強い影響)で採点する。 
- GSCの合計点(DI: Degree of Influence)を算出する。 
- VAF = (DI * 0.01) + 0.65(IFPUGの場合)
 
 
- 調整済みファンクションポイント(AFP: Adjusted Function Point)の算出 
- 工数の見積もり 
2. COCOMO (Constructive Cost Model)
COCOMOは、ソフトウェアの規模(主としてLOC: Lines Of Code、またはKLOC: Kilo Lines Of Code)と、プロジェクトの属性(コストドライバ)に基づいて工数を見積もる経験的モデルである。
計算式
COCOMOには、基本COCOMO、中間COCOMO、詳細COCOMOがある。IPA午前Ⅱでは主に基本COCOMOや中間COCOMOが問われる。
graph TD
    A["ソフトウェア開発見積もりプロセス"] --> B{"対象プロジェクトの特性分析"};
    B --> C{"見積もり手法の選択"};
    C --> D1["ファンクションポイント法 (FP法)"];
    C --> D2["COCOMO(\"構成型コストモデル\")"];
    D1 --> E1["機能数と複雑度評価"];
    E1 --> F1["未調整FP (UFP) 算出"];
    F1 --> G1["汎用システム特性評価 (VAF)"];
    G1 --> H1["調整済みFP (AFP) 算出"];
    D2 --> E2["規模 (KLOC) 決定"];
    E2 --> F2["開発モード選択 (オーガニック等)"];
    F2 --> G2["コストドライバ評価 (EAF) -- 中間COCOMOの場合"];
    G2 --> H2["工数算出"];
    H1 --> I["最終的な工数・期間見積もり"];
    H2 --> I;
    I --> J["見積もり結果のレビューと調整"];
    J --> K["プロジェクト計画への反映"];
図:ソフトウェア開発の見積もりプロセスの概要
要点
- FP法: ユーザー視点での機能的規模に基づき、要件定義段階で適用しやすい。言語非依存。調整済みファンクションポイント(AFP)を算出する。 
- COCOMO: コード行数(KLOC)を主要な入力とし、プロジェクトの属性(コストドライバ)を考慮して工数を見積もる。 
- 両手法とも、過去の実績データや組織固有の生産性係数、コストドライバの評価が正確な見積もりの鍵となる。 
- 見積もりはプロジェクトのライフサイクルを通じて反復的に行い、情報が増えるにつれて精度を高めることが推奨される。 
参考文献
- [1] 経済産業省, “ソフトウェア開発見積もりガイドライン V2.0”, 2009年4月1日, https://www.meti.go.jp/policy/it_policy/eng/e_spt.htm 
- [2] IPA, “共通フレーム2017 (SLCP-JCF2017)”, 2017年9月11日, https://www.ipa.go.jp/archive/osc/common-frame/ 
- [3] Boehm, B. W., “Software Engineering Economics”, Prentice-Hall, 1981. 
- [4] International Function Point Users Group (IFPUG), “Measurement Practices Manual”, 最新版のIFPUGガイドラインを参照. (参照日: 2024年7月26日) 
 
コメント