【応用情報技術者試験】工数見積もり方法のまとめ

# 概要
応用情報技術者試験に出題されうる、見積もり方法についてまとめました。

# 目次
- [類推法](#類推法)
- [積み上げ法](#積み上げ法)
- [三点見積もり法](#三点見積もり法)
- [係数見積もり法](#係数見積もり法)
- [COCOMO法](#COCOMO法)
- [ファンクションポイント法](#ファンクションポイント)

# 類推法
過去の似た案件、プロジェクトを参考に見積もる方法。適用することが簡単な方法。ただ、過去の似たプロジェクトと比べて、機能要件や性能が異なる部分については、KKD法[^1]になってしまいがち。

# 積み上げ法
ボトムアップ法ともいわれる。
開発対象のシステムの機能や工程を細分化し、それぞれひとつずつ工数を計算して、全体を見積もる手法。
工程の抜けや漏れを防げたり、過去に同様の作業の実績があれば、計算する工数にも大きな誤差がでないため、正確に見積もりやすい。ただ、見積もり段階で、システム開発に必要な機能や仕様部分も把握しておかなければならず、初期の段階での見積もりには適用し辛い。
加えて、過去に実績がない場合や、そもそも大規模な開発の場合は細分化する工程が多くなりすぎてしまい、工数を算出することが困難になりがち。
そもそも、再分化された作業に対する一つ一つの見積もりに関しては、「経験」と「勘」になってしまう。

# 三点見積もり法
冷戦期にロッキード社が、アメリカ海軍の潜水艦のミサイル「[ポラリス](https://ja.wikipedia.org/wiki/UGM-27_%E3%83%9D%E3%83%A9%E3%83%AA%E3%82%B9)」を開発するプロジェクトの際、PERT法とともに三点見積りを導入して有名になった手法。
「楽観値」「悲観値」「最可能値」の三点を算出する。
#### 楽観値
全ての作業が問題無く円滑に進んだ場合の値

#### 悲観値
悪条件が重なって、円滑にタスクが進まなかった場合の値

#### 最可能値
今までの経験から、実際に作業完了までに必要と想定される値

上記3つの値を以下の計算式にあてはめて算出する。
工数 = (悲観値 + 最可能値 × 4 + 楽観値) ÷ 6

例えば、楽観値が30日、最可能値が40日、そして悲観値が60日とすると、
計算式が「(60 + 40 × 4 + 30) ÷ 6」となるので、「41.666...」が工数値となる。

# 係数見積もり法
パラメトリック見積もり法とも呼ばれる。
過去のプロジェクトのコストや工数のデータをもとに、パラメータを設けて、プロジェクトのコストや工数を算出する手法。
後述する[ファンクションポイント法](#ファンクションポイント法)や[COCOMO法](#cocomo法)がこの係数見積もり法に該当する。

簡単な例だと、おにぎり:rice_ball:を20個作成したいとき、過去に10個のおにぎりを5分で作成した実績があったとする。その場合、過去の実績からおにぎり1個分の作成時間は0.5分とわかる。なので、20個 X 0.5分 = 10分 となり、20個のおにぎりは1時間40分で作成できると判断できる。

上記のように、過去データから計算式を組み立てて見積もる手法が係数見積もり法になる。
手法自体は1980年代前後に活発に研究されており、[類推法](#類推法)や[積み上げ法](#積み上げ法)などのノンパラメトリックな手法と比較される。

係数は単価やスキルが変わってくるとずれるため、そういう場合は適宜係数の見直しが必要。

# ファンクションポイント法
1979年にIBMのアレン・J・アルブレヒトが考案した見積もり手法。係数見積もり法のひとつで、システムの機能（ファンクション）に着目した手法。
対象のソフトウェアのタイプや複雑性をもとに工数を計算する形だが、このタイプや複雑性という指標や、計算方法の考え方にさまざまな種類がある。
計算方法は、IFPUG法やSPR法、MESMA法、COSMIC法などがあるが、一般的に使用されているのはIFPUG法になる。
### IFPUG
International Function Point Users Groupの略。1986年にアメリカで設立された、非営利組織の名称でもある。ISOやJIS規格にもなっている。(ISO/IEC 20926、JIS X 0142)

計算方法は以下の通り。

1. 扱うデータを「外部入力」「外部出力」「外部照会」「内部論理ファイル」「外部インタフェースファイル」の5種類に分類する。
1. 扱うデータごとに、「データの項目の数」「そのデータに関連するレコードの種類の数」を求める。結果をもとに、その扱うデータの機能の複雑さを「低」「中」「高」の3つのいずれかに分別する。
1. ファンクションの複雑さに応じた重み係数を各データに掛けて合計して、システム全体の「未調整FP」を求める。
1. 上記までの計算とは別に、対象のシステムの特性を14個の観点から6段階（0～5）評価を行って、合計する。
1. これまでの計算とは別に、対象とするシステムの特性を14の観点から０～５の６段階評価し、合計する。
1. システム特性係数 = 0.65 ＋（4）で計算した合計値 × 0.01 を計算。
FP ＝システム特性係数 × 未調整FP

参考：
- [IFPUG公式サイト](https://ifpug.org/)
- [Wiki](https://en.wikipedia.org/wiki/IFPUG)
- [FP 計測手法におけるFP 規模と工数の相関の差](https://www.ipa.go.jp/archive/files/000066544.pdf)

# COCOMO法
1981年にバリー・ベームが考案した見積もり手法。係数見積もり法のひとつ。
「constructive cost model (構造的なコスト推計モデル)」の略。

以下の重要な方程式があります。

- E (開発工数) = a (定数) × KLOC^b (KLOC：ソースコードの行数) (b：定数)
- T (開発期間) = c (定数) × E^d (E：開発工数) (d：定数) 

※太字の部分は下記の略
- E：effort (人月)
- KLOC：Kilo Lines of Code (千単位のコードの行数)
- T：Time (時間・期間)

開発工数をソースコードの行数 (プログラムの規模) で決定し、開発工数をもとに開発期間を決定している形。
また、COCOMOにはプロジェクトの種類を「オーガニックタイプ」「セミデタッチタイプ」「エンベッドタイプ」の3種類に分け、その種類ごとに、a～dの定数の値を決定している。
ちなみに、ギャンブルなどで使われる賭け方の手法の「ココモ法」とは全く別。

参考：
- [COCOMO（ココモ法）とは何か？システム開発の工数・期間の見積り](https://ssaits.jp/promapedia/method/cocomo-model.html)
- [COCOMO による工数計算](https://typea-info.appspot.com/cocomo)

***
**[記載した応用情報技術者試験の記事まとめ](https://qiita.com/MetroOsamu/items/550001240d76e24f505f)**

[^1]:日本語の「経験」「勘」「度胸」の頭文字をとってできた言葉。主に製造業で、職人の技として昔から存在している種法。そもそも経験がないと見積もりが難しく、思い込みによっても実工数と大きく差が発生する場合がある。