2012年6月17日日曜日

[アジャイル] 不確実性コーンのモデル式とベロシティ予測

現在仕事で担当しているプロジェクトではアジャイル開発を採用しています。

アジャイル開発では繰り返し単位であるイテレーションにおいてどのくらいの進捗があったかを表す値をベロシティと呼び、このベロシティの見積りがスケジュールを立てる、あるいは進捗の予測を立てる上で非常に重要です。

マイク・コーン著 「アジャイルな見積りと計画づくり」(安井力、角谷信太郎 翻訳) によると、ベロシティの見積りには不確実性コーンを活用できる、とあります。
(不確実性コーン自体の説明はこちら→ アジャイルな見積もりと計画づくりに学ぶ 不確実性のコーン | Act as Professional - hiroki.jp by HIROCASTER

その方法は実施したイテレーション数に基づき、ベロシティの予測値に幅を持たせるための下限係数と上限係数を不確実性コーンによって決めるというものです。具体的な数値も示されています。

実施したイテレーション数下限係数上限係数
10.601.60
20.801.25
30.851.15
4以上0.901.10
(出典:「アジャイルな見積りと計画づくり」p.194 表16.1)

例えば実施したイテレーション数が2の場合、下限係数0.80、上限係数1.25ですので、仮にベロシティの実測平均値を10とすれば、ベロシティの予測は8~12.5の範囲ということになります。

しかしイテレーション数で決めるのもいいですが、それだと全イテレーション数の違いを計算に含めることができません。例えば、実施したイテレーション数が2の場合、全体のイテレーション数が8の時は進捗率25%ですが、全体のイテレーション数が15の時は進捗率13%です。

進捗率が違えば、本来なら不確実性コーンによる下限係数と上限係数も違わなくてはなりません。そこで不確実性コーンのモデルを近似式で作って進捗率から下限係数と上限係数を計算できるようにできないか、と考えました。

というわけで作ったモデル式がこちらです。

下限係数log10(63+進捗率×937)/3
上限係数2-log10(16+進捗率×984)/3
(0 <= 進捗率 <= 1)

Excel でグラフを出すとこんな感じになります。

不確実性コーンのモデル式とグラフ
不確実性コーンのモデル式とグラフ

対数関数を選んだのは単純に不確実性コーンに合わせやすいと思ったのが理由です。

進捗率は「実施したイテレーション数/全イテレーション数」でもいいですが、「完了ストーリーポイント/全ストーリーポイント」のほうが正確だと思います。後者の方が実際の状況を表していますので。

ここで「アジャイルな見積りと計画づくり」でも指摘されているように、プロジェクトの進捗が進んでくると不確実性コーンの右の方では下限係数・上限係数共に1に近づくため、ベロシティの幅を持たせるには範囲が狭すぎるという問題があります。上限係数の方は下がっても問題ないかもしれませんが、下限係数の方を上げ過ぎるとベロシティが落ちるリスクを少なく見積もりすぎてしまうので危険です。

したがって下限係数による予測はプロジェクトの進捗にともなって実績値による指標に置き換える必要があります。「アジャイルな見積と計画づくり」ではベロシティの実績値による指標として

  • 直近8イテレーションの平均値
  • ワースト3の平均値
  • 最後のイテレーションの値

の3つを挙げています。これらのうち最初の2つが統計的意味を持つので、私は次のようにしています。

平均予測
ベロシティ
直近8イテレーションの平均値(小数点以下四捨五入)
(実施したイテレーション回数が8より少ない場合は全ての平均値)
最高予測
ベロシティ
平均予測ベロシティ×不確実性コーンの上限係数(小数点以下四捨五入)
最低予測
ベロシティ
平均予測ベロシティ×不確実性コーンの下限係数(小数点以下切り捨て)

ワースト3の平均値(小数点以下切り捨て)
のうち、値の小さい方

上記のようにすることにより、プロジェクト中盤~終盤にかけては下限係数による予測よりもワースト3平均のほうが小さくなるため、実測に基づくより安全な値を採用することができます。

0 件のコメント:

コメントを投稿