システム開発のプロジェクト開始前には必ず「どのくらいの期間、人数、費用が掛かるのか」を算出します。当たり前ですが、これが無いと、見積もりが出せないですね。
ただし、プロジェクト開始前なのであくまでも概算になり、実際は「要件定義後」に機能が確定して、正式に見積もりを行うことになります。
今回はこのプロジェクト開始前にどうやってコスト見積もりを行うのか調べてみました!
基本的な算出方法の考え方
まず、見積をした時に最終的に導き出すのは「金額(お金)」です。開発に掛かるSE費用としていくら(1000万円、1億円、10億円、etc...)掛かるかがゴールとなります。
お金を出すために必要な値としては「必要工数(どの程度の人数か)」です。必要工数に「開発者の単価」を掛ければ金額が出てきます。
つまり、次のような計算になります。
開発者の単価(人月)は100万円だったり、150万円、200万円だったりと、開発者のレベルや会社によって変わってきます。
ですので、ここでは必要工数を算出することが重要になってきます。
この必要工数を算出する方法として次の二つの手法があります。
標準値法(係数積算)
ファンクションポイント法
他にもありますが、今回はこの二つの手法に関して、詳しく調べてみました!
標準値法とは?
最もシンプルな見積方法です。
プログラムソースの「ステップ数(行数、ライン数)」の総数でシステムの「開発規模(kstep(キロステップ))」を表し、その開発規模に全体もしくは工程別の「標準生産性(kstep/人月)」を用いて、必要工数を見積もる方法です。
式に表すとこんな感じです。
どのくらいのプログラムソースの量なのかを開発規模で出して、1人当たり1ヵ月ででどの程度のプログラムを作れるか(生産性)の値で割るだけです。
もちろん製造工程以外の要件定義や設計工程でも標準生産性を算出して、開発規模を割ってあげれば良いです。
例えば以下のような形になりますね。
この標準値法から必要工数を導き出すための標準生産性ですが、開発言語(C言語やCOBOLなど)によっても変わりますし、会社によっても値が変わりますし、個人のスキルによっても変わりますので、正しい値を使うことで、精度の高い見積もりが出てくると思います。
ファンクションポイント法とは?
ソフトウェアの機能である外部機能に着目した見積手法です。この機能を使って開発工数を算出します。
大きく5つに分類された(外部入力、外部出力、内部論理ファイル、外部インタフェースファイル、外部照会)の中の入出力や内部ファイルなどの標準ファンクション数と複雑度の高さからそれぞれの総ファンクション数(難易度)を算出し、そこに補正係数を使ってファンクションポイント(FP数)を算出します。
補正係数とは操作性や開発拠点、応答性能などの制約が高ければ補正係数が高くなりますので、それだけFP数が多くなる、つまり開発規模が大きくなります。
式に表すとこんな感じです。生産性(FP数/人月)は標準値法と同様に会社毎に定義されています。
②必要工数(人月)=FP数 ÷ 生産性(FP数/人月)
この手法は利用者側に見える外部仕様、すなわち入出力画面や帳票を基準に見積りを行うため、依頼者側とのコンセンサス(合意)が取りやすいという特徴があります。
まとめ
今回はプロジェクトにおけるコスト見積方法に関して学習してみました。
標準値法やファンクション方法を上手に使って概算見積を出しますが、極力正しい数値を出したいですね。
見積手法には他にも「LOC」、「類似法」や「COCOMO」などありますが、別の機会に詳しく調べてみたいです!