ちょっと厨二っぽいSEのブログ

プログラミングとかのシステム備忘録など

【プロジェクトマネジメント】見積もりについて考えてみましょう【PMBOK】

■見積もりの種類

一言で見積もりといっても、色々あります。
まず、「何のための見積もりか」について考えてみましょう。

例えば以下のように、見積もりを提出する先によって見積もりの意味が変わってきます。

1.自チームのPMが見積もった、そのプロジェクトに実際にかかるコスト
2.自チームのPMが見積もった、ある程度のバグフィックス(バッファ)を加味した現実的なコスト
3.自チームのPMが見積もった、クライアントに報告するための少しゆとりのあるコスト
4.お客様ベンダーに対して報告するための見積もり

たとえば4の場合、競合他社に勝つために実際よりも少ないコストを報告する場合があります。
いわゆるコンペの場合などがそれにあたり、実際に見積もりコストとかけ離れる場合があります。

と、このように
「見積もり」と言ったらどの見積もりを指すのかを把握しておかないと、後々のノウハウになりません。


■見積もり粒度には2種類ある

PMBOK的には、見積もりは以下の種類があります。

概算見積もり
確定見積もり


概算見積もりは読んで字のごとく、ざっくりとした見積もりです。
このような不確実な見積もりでも、ざっくりとした予定が立てられたり、投資の妥当性(そのプロジェクトをやる意味があるのか)などがわかります。

確定見積もりは、実際にプロジェクトを行う時に必要な、最終的に確定した見積もりのことです。

■見積もりの不確実性

見積もりは不確実なものです。
プロジェクトの大きさにもよりますが、初期段階の見積もりは実際のコストに対して0.25倍~4倍程度の誤差が生まれます。

多くの場合、納期の見積もりは過小見積もりである場合が多く
開発者自身が見積もりを行う場合においてその傾向が強いと言われています。

認知バイアスとは

例えばあなたが以下のような質問をされたとします。

「だいたい5日くらいで作れる?」
「だいたい100万円くらいで作れる?」

このような質問をされると最初に出された数字(アンカー)に近づくバイアスがかかってしまいます。

その数字で実現しようとする力が働き、過小見積もりをしてしまうのです。

このことを「アンカリング」と呼びます。

このような間違った見積もりを避けるための手法として、
チームメンバーでバラバラに見積もる方法があります。

■よく使われる見積もり手法

以下のように、タスクや要件の難易度をポイント化(重み付け)して見積もる方法が主流です。

ファンクションポイント法

それぞれのタスクを難易度によってポイント付けをし、それを集計して見積もる。
また、ユーザーから見た機能を5種類に分類して集計する。
f:id:ryokwkm:20160725010354p:plain

それぞれ
内部論理ファイル(ILF):アプリケーション内部にあるデータ
外部インターフェースファイル(EIF):アプリケーション外にあるデータ
外部入力(EI):アプリケーションの外部からデータや命令を受け取って行う処理
外部出力(EO):アプリケーション外部にデータを出力
外部紹介(EQ):アプリケーション外部に対して、データ照会(検索など)結果を出力する処理

このようにあらかじめ定義しておくことで、恣意性が入らず制度の高い見積もりが多いという調査結果があります。

ユースケースポイント法

システムのユースケースを複雑度に応じてポイント化し、集計する方法

f:id:ryokwkm:20160725011420p:plain

COCOMOⅡ法

見積もったシステムの規模から、費用・納期を見積もる手法
システムの規模と工数は比例関係にないという知見から、さまざまな工数変動要因を取り込むモデルを提示している

f:id:ryokwkm:20160725011834p:plain

CoBRA

定量的なモデルと熟練者の意見を取り込むハイブリッドな見積もり方法