工数見積もりの見える化
なぜ工数の見積もりが必要なのか
最近ソフトウエア業界で話題となっている工事進行基準でも、「工事進ちょく度の計算根拠となる工事原価総額が信頼性を持って見積もられなければ工事進行基準を適用することができない」と述べられているように、ソフトウエア開発における工数見積もりの重要性はますます高くなってきている。
「見積もる」という言葉を広辞苑(こうじえん)で引くと、「1. 目で見て大体を測る。目分量ではかる。2. 物事のあらましを考え計算して予測を立てる。つもる。概算する」とある。ソフトウエアの工数見積もりは、2.の意味、つまり、対象となるソフトウエア開発のあらましを頭に描き、投入されるであろう、あるいは、投入すべき工数を予測する、ということになる。
ソフトウエア開発管理の主な観点はQCD(品質、コスト、納期)である。厳密にいえば、工数(人月)はコストとイコールではない。しかし、工数に基づき算出される作業費(人件費)がソフトウエア開発コストの大半を占めることや、ハードウエア費、旅費、光熱費、間接的人件費など、作業費以外のコストの多くも作業費と相関があることから、コストに代えて工数が管理の観点とされる場合が多い。
もちろん、技術的な議論において、開発費がいくら、といった具体的な金額を対象とすることがなじまないという面もある。そして、一般に、開発に投入される資源の中で、工数を生み出す人的資源の確保が一番難しいこと、また、一度に投入できる人的資源には現実的な限界があり工数の大小が開発期間(納期)に大きく影響することなどから、工数見積もりは、ソフトウエア開発の初期において、非常に重要な技術の1つである。
工数見積もり手法
工数見積もり手法は、図1の6つに大別される。
「契約価格に基づく決定」とは、開発工数は、開発すべきソフトウエアの機能や品質で決まるのではなく、顧客の予算(投資可能なコスト)に一致する、という考えである。また、「パーキンソン(Parkinson)の法則」とは、開発工数は、客観的な分析によって決まるのではなく、利用できる資源により決まる、という考えである。
例えば、納期まで1ヶ月で、割り当て可能な開発者が5名であれば、開発工数は5人月になる、という考えである。以上の2つは、見積もり手法と呼んでよいかどうか疑問であるが、ソフトウエア開発の現場では散見されるものである。
「専門家による判定」とは、開発すべきソフトウエアの領域(ドメイン)や利用予定の開発技術に関する専門家を複数集め、それら専門家の意見に基づいて工数を見積もるものである。もちろん、専門家の意見が初めから一致するとは限らないので、デルファイ法などを使って専門家全員の合意を形成するプロセスが必要となる。見積もりの精度は、専門家の知識と合意形成プロセスに大きく依存する。
「類似プロジェクトからの類推」とは、開発すべきソフトウエアとよく似たソフトウエアを開発した過去プロジェクト(類似プロジェクト)の実績データに基づく見積もりである。
類似プロジェクトが存在する場合、見積もりに要するコストは非常に小さくなるが、類似しているとはいえ、全く同じ条件での開発というわけではないので、その差異をどう評価し見積もりに反映させるかで、見積もり精度は大きく変わる。
また、過去プロジェクトのデータが多ければ多いほど、類似プロジェクトが存在する確率は高くなり、差異の評価も容易になるので、多くのソフトウエア開発プロジェクトにかかわってきた開発者による見積もりや、過去プロジェクトデータのデータベース化などにより見積もり精度の向上が見込まれる。
「積算法」とは、ソフトウエア開発で必要となる作業を洗い出し、それら作業ごとに工数を積み上げる手法である。見積もりという言葉、つまり「積む」という語感には一番フィットする。建築の分野では確立された手法であり、例えば、床や壁などの面積と施工方法などが決まると必要工数を得ることができる。
ソフトウエア開発の場合、作業の洗い出しには、WBS(Work Breakdown Structure)などが用いられる。ただし、ソフトウエア開発を構成する標準的な作業(タスク)の集合としてどのようなものを定義するのか、また、それらタスクの標準工数をどのようにして与えるのかによって見積もり精度が大きく左右されるだけでなく、適用範囲が著しく限定されることもある。
残るは「計算式などのモデルによる算出」である。いわゆる数学的なモデル式に、これから開発しようとするソフトウエアの特性や開発プロジェクトの特性をパラメータとして与えることで工数を見積もる手法である。次は、このモデルによる工数見積もり、特に、用いるパラメータがあらかじめ定められている既製モデルによる工数見積もりについて少し詳しく紹介する。