ソフトウェア開発時の見積もりに関して

少し今回はインフラぽくない話を。
普段機会がないのですが、ソフトウェア開発における見積もり技法に関して
触れる機会があったので、その際の情報をまとめておく。

普段サーバ構築等しかしないので、実はとても新鮮という。。。だめだとは思いますが。

■見積もり技法
 ■類似法
  過去の類似Prjを参考にして見積もる方法。
  ちゃんと類似のPrjを参考にすれば、実績と見積もりの差が乖離はしにくい。
  ただし、客観性が乏しい。

 ■積み上げ法
  開発しなければならない成果物の構成要素を洗い出し、
  それぞれの作成に必要な工数を積み上げる方法。
  ソースコードの行数や、各工程の工数を足してくのがこれに該当。

 ■パラメトリックス法
  必要工数を目的変数として、入力値に開発規模や特性をいれることで
  数式的に算出する方法。
  例としてSLIMとか。

今回は、定番である積み上げ法に関して。

■LOC(Lines of Code)
 開発モジュールのステップ数を算出
 一人当たりの生産性ステップ数/月で割り算してコスト・必要人数を算出。
 ただしソースコードのカウントの仕方(コメント、ヘッダ含めるか)とかは事前に
 どのようにカウントするか決めること。
 また、人によりステップ数のカウントの仕方はことなると思うので、
 そのあたりの統一も難しい。
 当然、要件が未確定の段階ではソースコードの行数など正確にだすのは難しいので、
 見積もり制度としても低くなることがよくある。

 LOC法はこのあたりがあいまいなので、規模尺度法の要件を満たしていない。
  ※規模尺度法・・・ISOがソフトウエアの規模の測定尺度のために策定

 参考にソフトウエアの生産性は、1MMで1000ステップ前後と言われているとかどうとか。

 参考:
  http://monoist.atmarkit.co.jp/mn/articles/1108/23/news003.html
  http://monoist.atmarkit.co.jp/mn/articles/1109/14/news011.html

■FP法
 FP(ファンクションポイント)・・・仕様をベースにして、言語や設計方式に依存せず、 
 開発対象となるシステムの機能規模をFPという単位で計測する。

 FPはデータ要素をもとに計算するので、内部のロジックの複雑性は考慮していない。
 なので数値計算プログラムなどには不向きでビジネス系のシステム向け。

 また、FP法には複数の種類がある。

 ■IFPUG法
  これが全部入りのフルバージョン。
  システムの扱うデータ、入出力データ、参照データすべてが計算対象

 ■FP概算法
  IFPUGの簡略版。

 ■FP試算法
  最も簡易版。概算の見積もりの時はこの手法が利用される。

 以下、FP試算法の計算方法をざっくりメモする。
 FPとはデータの種類・数から開発規模を推定している。
 よって、対象システムのデータとファイルを決めれば見積もりが可能。
 アルゴリズムとかは一切関係ない。
 流れは下記の通り。
  内部ファイルの数をカウントして、x35
  外部インターフェースファイルの数をカウントして、x15
  上記2つを合計したものが総FP数となる。
  総FP数から使用する言語のステップ数に換算が可能。


 参考:
  http://monoist.atmarkit.co.jp/mn/articles/1110/13/news007.html
  http://monoist.atmarkit.co.jp/mn/articles/1111/16/news008.html

■最後に
 IPAがSEC BOOKSとして、事業成果をまとめています。
 その中に、ソフトウェア開発データ白書というのがあるのですが、
 様々なPrjとの見積もり等、実績が載っているので参考にしてみるのがいいかと。

 https://www.ipa.go.jp/sec/publish/index.html