<p><!--
{
"title": "ファンクションポイント法によるソフトウェア規模の見積もり",
"primary_category": "情報処理技術者試験",
"secondary_categories": ["午前II", "プロジェクトマネジメント", "システム開発"],
"tags": ["ファンクションポイント法", "ソフトウェア見積もり", "工数見積もり", "FP", "IFPUG", "システム規模"],
"summary": "ファンクションポイント法は、ソフトウェアの機能的側面から規模を測定し、開発工数を見積もる手法である。主要な要素の識別と複雑度による重み付け、および汎用システム特性による調整が核となる。",
"mermaid": true,
"verify_level": "未検証",
"tweet_hint": "IPA午前II対策!ファンクションポイント法を分かりやすく解説。機能に着目したソフトウェア規模見積もりの基本を理解しよう。
#IPA #午前II #ファンクションポイント法",
"link_hints": [
"https://www.ifpug.org/resources/what-is-function-points/",
"https://www.ipa.go.jp/shiken/kubun/pm.html"
]
}
-->
本記事は<strong>Geminiの出力をプロンプト工学で整理した業務ドラフト(未検証)</strong>です。</p>
<h1 class="wp-block-heading">ファンクションポイント法によるソフトウェア規模の見積もり</h1>
<p>ファンクションポイント法は、ソフトウェアの機能に着目して規模を定量的に測定し、開発工数を見積もるための標準化された手法である。その核となるのは、ユーザー視点での入力・出力・照会・ファイルといった機能要素の識別と、それらの複雑度に基づく重み付け、そしてシステム全体の特性による調整係数の適用である。</p>
<h2 class="wp-block-heading">背景</h2>
<p>従来のソフトウェア規模の見積もり手法として、LOC(Lines Of Code:ソースコード行数)が広く用いられていた。しかし、LOCは使用するプログラミング言語や開発者のスキル、コーディングスタイルによって大きく変動し、プロジェクトの初期段階で見積もることが困難という課題があった。この問題に対し、IBMのA.J. Albrechtが1979年に提唱したファンクションポイント法は、ソフトウェアが提供する機能に着目し、言語や技術に依存しない形で規模を測定する手法として注目を集めた。その後、IFPUG(International Function Point Users Group)によって標準化が進められ、国際的に広く利用されるようになった。</p>
<h2 class="wp-block-heading">問題点</h2>
<p>LOCによる見積もりは、以下の点で限界があった。</p>
<ul class="wp-block-list">
<li><p><strong>言語依存性:</strong> プログラミング言語によって同じ機能でもコード行数が大きく異なるため、公平な比較が難しい。</p></li>
<li><p><strong>開発工程後期での確定:</strong> ソースコードが完成しないと正確なLOCが算出できないため、開発初期段階での見積もりが困難。</p></li>
<li><p><strong>ユーザー視点の欠如:</strong> ユーザーが求める機能ではなく、開発者の視点での量に過ぎない。</p></li>
</ul>
<p>ファンクションポイント法はこれらの問題点を解決し、システム開発の初期段階から、ユーザーが認識する機能に基づいた客観的で一貫性のある規模見積もりを可能にする。これにより、より正確な工数・コスト見積もりや生産性評価が可能となる。</p>
<h2 class="wp-block-heading">計算/手順</h2>
<p>ファンクションポイント法による規模の見積もりは、主に以下の3つのステップで構成される。</p>
<ol class="wp-block-list">
<li><p><strong>非調整ファンクションポイント(UFP: Unadjusted Function Point)の算出</strong></p></li>
<li><p><strong>汎用システム特性(GSC: General System Characteristics)と調整係数(VAF: Value Adjustment Factor)の算出</strong></p></li>
<li><p><strong>ファンクションポイント(FP: Function Point)の算出</strong></p></li>
</ol>
<h3 class="wp-block-heading">1. 非調整ファンクションポイント(UFP)の算出</h3>
<p>UFPは、以下の5つの機能タイプに分類された項目について、それぞれの数と複雑度に応じて重み付けを行うことで算出される。</p>
<figure class="wp-block-table"><table>
<thead>
<tr>
<th style="text-align:left;">機能タイプ</th>
<th style="text-align:left;">定義</th>
<th style="text-align:left;">重み(単純)</th>
<th style="text-align:left;">重み(平均)</th>
<th style="text-align:left;">重み(複雑)</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left;"><strong>外部入力 (EI)</strong></td>
<td style="text-align:left;">ユーザーがシステムに情報を入力する機能(例:データ入力画面)</td>
<td style="text-align:left;">3</td>
<td style="text-align:left;">4</td>
<td style="text-align:left;">6</td>
</tr>
<tr>
<td style="text-align:left;"><strong>外部出力 (EO)</strong></td>
<td style="text-align:left;">システムがユーザーに情報を出力する機能(例:帳票出力、レポート)</td>
<td style="text-align:left;">4</td>
<td style="text-align:left;">5</td>
<td style="text-align:left;">7</td>
</tr>
<tr>
<td style="text-align:left;"><strong>外部照会 (EQ)</strong></td>
<td style="text-align:left;">ユーザーがシステムに情報を照会する機能(例:検索画面)</td>
<td style="text-align:left;">3</td>
<td style="text-align:left;">4</td>
<td style="text-align:left;">6</td>
</tr>
<tr>
<td style="text-align:left;"><strong>内部論理ファイル (ILF)</strong></td>
<td style="text-align:left;">システム内部で保持され、管理される論理ファイル(例:マスターデータ)</td>
<td style="text-align:left;">7</td>
<td style="text-align:left;">10</td>
<td style="text-align:left;">15</td>
</tr>
<tr>
<td style="text-align:left;"><strong>外部インタフェースファイル (EIF)</strong></td>
<td style="text-align:left;">他のシステムで保持され、参照される論理ファイル(例:外部連携データ)</td>
<td style="text-align:left;">5</td>
<td style="text-align:left;">7</td>
<td style="text-align:left;">10</td>
</tr>
</tbody>
</table></figure>
<p><strong>計算式:</strong>
UFP = Σ (各機能タイプのカウント数 × 各機能タイプの複雑度に応じた重み)</p>
<h3 class="wp-block-heading">2. 汎用システム特性(GSC)と調整係数(VAF)の算出</h3>
<p>ソフトウェアの特性を評価する14の汎用システム特性(GSC)について、それぞれ0(影響なし)から5(強い影響)の5段階で評価し、合計影響度(TDI: Total Degree of Influence)を算出する。</p>
<p>14のGSCの例:</p>
<ul class="wp-block-list">
<li><p>データ通信</p></li>
<li><p>分散処理機能</p></li>
<li><p>性能</p></li>
<li><p>利用頻度</p></li>
<li><p>運用容易性</p></li>
<li><p>再利用性</p></li>
<li><p>導入容易性</p></li>
<li><p>複数拠点対応</p></li>
<li><p>変更容易性</p></li>
<li><p>複雑な処理</p></li>
<li><p>データ変換</p></li>
<li><p>同時実行性</p></li>
<li><p>セキュリティ</p></li>
<li><p>将来的な拡張性</p></li>
</ul>
<p><strong>計算式:</strong>
TDI = Σ (各GSCの評価値)
VAF = 0.65 + (0.01 × TDI)</p>
<p>TDIの最大値は 14項目 × 5点 = 70点。この場合、VAF = 0.65 + (0.01 × 70) = 0.65 + 0.70 = 1.35 となる。
TDIの最小値は 14項目 × 0点 = 0点。この場合、VAF = 0.65 + (0.01 × 0) = 0.65 となる。
したがって、VAFは0.65から1.35の範囲に収まる。</p>
<h3 class="wp-block-heading">3. ファンクションポイント(FP)の算出</h3>
<p>最終的なファンクションポイント(FP)は、UFPとVAFを乗算して算出する。</p>
<p><strong>計算式:</strong>
FP = UFP × VAF</p>
<h3 class="wp-block-heading">ファンクションポイント法による見積もりフロー</h3>
<div class="wp-block-merpress-mermaidjs diagram-source-mermaid"><pre class="mermaid">
graph TD
A["システム要件定義"] --> B{"機能要素の識別"};
B --> C1["外部入力 (EI)"];
B --> C2["外部出力 (EO)"];
B --> C3["外部照会 (EQ)"];
B --> C4["内部論理ファイル (ILF)"];
B --> C5["外部インタフェースファイル (EIF)"];
C1 --> D1{"EIの複雑度評価"};
C2 --> D2{"EOの複雑度評価"};
C3 --> D3{"EQの複雑度評価"};
C4 --> D4{"ILFの複雑度評価"};
C5 --> D5{"EIFの複雑度評価"};
D1 & D2 & D3 & D4 & D5 --> E["各機能タイプに重みを適用し合計"];
E --> F["非調整ファンクションポイント (UFP) 算出"];
F --> G{"汎用システム特性 (GSC) の評価 (0-5)"};
G --> H["合計影響度 (TDI) 算出"];
H --> I["調整係数 (VAF) 算出"];
F & I --> J["ファンクションポイント (FP) 算出"];
J --> K["工数・コストの見積もり"];
</pre></div>
<h2 class="wp-block-heading">要点</h2>
<ul class="wp-block-list">
<li><p>ファンクションポイント法は、ソフトウェアの<strong>機能</strong>に着目し、<strong>言語や技術に依存しない</strong>形で規模を測定する。</p></li>
<li><p>システム開発の<strong>初期段階</strong>から客観的な規模見積もりが可能である。</p></li>
<li><p><strong>非調整ファンクションポイント(UFP)</strong>は、5つの機能タイプ(EI, EO, EQ, ILF, EIF)とそれぞれの複雑度から算出される。</p></li>
<li><p><strong>調整係数(VAF)</strong>は、14の<strong>汎用システム特性(GSC)</strong>を評価し、その合計影響度(TDI)に基づいて算出される。</p></li>
<li><p>最終的なソフトウェア規模は、<strong>FP = UFP × VAF</strong> の式で求められる。</p></li>
</ul>
本記事はGeminiの出力をプロンプト工学で整理した業務ドラフト(未検証) です。
ファンクションポイント法によるソフトウェア規模の見積もり
ファンクションポイント法は、ソフトウェアの機能に着目して規模を定量的に測定し、開発工数を見積もるための標準化された手法である。その核となるのは、ユーザー視点での入力・出力・照会・ファイルといった機能要素の識別と、それらの複雑度に基づく重み付け、そしてシステム全体の特性による調整係数の適用である。
背景
従来のソフトウェア規模の見積もり手法として、LOC(Lines Of Code:ソースコード行数)が広く用いられていた。しかし、LOCは使用するプログラミング言語や開発者のスキル、コーディングスタイルによって大きく変動し、プロジェクトの初期段階で見積もることが困難という課題があった。この問題に対し、IBMのA.J. Albrechtが1979年に提唱したファンクションポイント法は、ソフトウェアが提供する機能に着目し、言語や技術に依存しない形で規模を測定する手法として注目を集めた。その後、IFPUG(International Function Point Users Group)によって標準化が進められ、国際的に広く利用されるようになった。
問題点
LOCによる見積もりは、以下の点で限界があった。
言語依存性: プログラミング言語によって同じ機能でもコード行数が大きく異なるため、公平な比較が難しい。
開発工程後期での確定: ソースコードが完成しないと正確なLOCが算出できないため、開発初期段階での見積もりが困難。
ユーザー視点の欠如: ユーザーが求める機能ではなく、開発者の視点での量に過ぎない。
ファンクションポイント法はこれらの問題点を解決し、システム開発の初期段階から、ユーザーが認識する機能に基づいた客観的で一貫性のある規模見積もりを可能にする。これにより、より正確な工数・コスト見積もりや生産性評価が可能となる。
計算/手順
ファンクションポイント法による規模の見積もりは、主に以下の3つのステップで構成される。
非調整ファンクションポイント(UFP: Unadjusted Function Point)の算出
汎用システム特性(GSC: General System Characteristics)と調整係数(VAF: Value Adjustment Factor)の算出
ファンクションポイント(FP: Function Point)の算出
1. 非調整ファンクションポイント(UFP)の算出
UFPは、以下の5つの機能タイプに分類された項目について、それぞれの数と複雑度に応じて重み付けを行うことで算出される。
機能タイプ
定義
重み(単純)
重み(平均)
重み(複雑)
外部入力 (EI)
ユーザーがシステムに情報を入力する機能(例:データ入力画面)
3
4
6
外部出力 (EO)
システムがユーザーに情報を出力する機能(例:帳票出力、レポート)
4
5
7
外部照会 (EQ)
ユーザーがシステムに情報を照会する機能(例:検索画面)
3
4
6
内部論理ファイル (ILF)
システム内部で保持され、管理される論理ファイル(例:マスターデータ)
7
10
15
外部インタフェースファイル (EIF)
他のシステムで保持され、参照される論理ファイル(例:外部連携データ)
5
7
10
計算式:
UFP = Σ (各機能タイプのカウント数 × 各機能タイプの複雑度に応じた重み)
2. 汎用システム特性(GSC)と調整係数(VAF)の算出
ソフトウェアの特性を評価する14の汎用システム特性(GSC)について、それぞれ0(影響なし)から5(強い影響)の5段階で評価し、合計影響度(TDI: Total Degree of Influence)を算出する。
14のGSCの例:
データ通信
分散処理機能
性能
利用頻度
運用容易性
再利用性
導入容易性
複数拠点対応
変更容易性
複雑な処理
データ変換
同時実行性
セキュリティ
将来的な拡張性
計算式:
TDI = Σ (各GSCの評価値)
VAF = 0.65 + (0.01 × TDI)
TDIの最大値は 14項目 × 5点 = 70点。この場合、VAF = 0.65 + (0.01 × 70) = 0.65 + 0.70 = 1.35 となる。
TDIの最小値は 14項目 × 0点 = 0点。この場合、VAF = 0.65 + (0.01 × 0) = 0.65 となる。
したがって、VAFは0.65から1.35の範囲に収まる。
3. ファンクションポイント(FP)の算出
最終的なファンクションポイント(FP)は、UFPとVAFを乗算して算出する。
計算式:
FP = UFP × VAF
ファンクションポイント法による見積もりフロー
graph TD
A["システム要件定義"] --> B{"機能要素の識別"};
B --> C1["外部入力 (EI)"];
B --> C2["外部出力 (EO)"];
B --> C3["外部照会 (EQ)"];
B --> C4["内部論理ファイル (ILF)"];
B --> C5["外部インタフェースファイル (EIF)"];
C1 --> D1{"EIの複雑度評価"};
C2 --> D2{"EOの複雑度評価"};
C3 --> D3{"EQの複雑度評価"};
C4 --> D4{"ILFの複雑度評価"};
C5 --> D5{"EIFの複雑度評価"};
D1 & D2 & D3 & D4 & D5 --> E["各機能タイプに重みを適用し合計"];
E --> F["非調整ファンクションポイント (UFP) 算出"];
F --> G{"汎用システム特性 (GSC) の評価 (0-5)"};
G --> H["合計影響度 (TDI) 算出"];
H --> I["調整係数 (VAF) 算出"];
F & I --> J["ファンクションポイント (FP) 算出"];
J --> K["工数・コストの見積もり"];
要点
ファンクションポイント法は、ソフトウェアの機能 に着目し、言語や技術に依存しない 形で規模を測定する。
システム開発の初期段階 から客観的な規模見積もりが可能である。
非調整ファンクションポイント(UFP) は、5つの機能タイプ(EI, EO, EQ, ILF, EIF)とそれぞれの複雑度から算出される。
調整係数(VAF) は、14の汎用システム特性(GSC) を評価し、その合計影響度(TDI)に基づいて算出される。
最終的なソフトウェア規模は、FP = UFP × VAF の式で求められる。
コメント