« Haskellの環境づくり | トップページ | Redmineに入れたプラグイン一覧 »

2010/01/12

RedmineプラグインRodmapsにEVMの機能を追加する

Redmineのロードマップス・プラグインにEVMの機能を追加するアイデアをメモ。
下記はあくまでもラフなメモ。

【元ネタ】
Redmineプラグイン開発 - Roadmapsプラグインリリース - フジハラボ -- 目指せ!スーパーエンジニア

Redmineのチケット集計機能を強化するプラグイン: プログラマの思索

Redmineの集計プラグイン、statSVN諸々: プログラマの思索

プロジェクトマネジメント・コンサルティング・サービス会社 ピーエム・アラインメント PM Alignment

PMBOKのEVMは「WBS/EVMによるITプロジェクトマネジメント」が一番分かりやすい。
公式とその具体例がグラフで掲載されているので、理解しやすい。

EVMがすごいのは、PV・AC・EVというたった三つの値で、今後のコストやスケジュールを予測できてシミュレーションできることだ。

EVMをRedmineに実装したいのは、PV・AC・EVという三つの値は既にDBに格納されているので、今後のコストやスケジュールを簡単にシミュレーションできるからだ。

PMBOKのEVMで定義されているPV・AC・EVは理解しづらいが、Redmineによるチケット駆動開発上では、下記のように簡単に定義できる。
特に、EV(達成価値)が「終了チケットの総予定工数」として表現できるのに注意せよ。

【RedmineにおけるEVMの定義】
・BAC:プロジェクト総予算 → 全チケットの総予定工数に相当する。

・PV:計画出来高 → 今日時点のチケットの総予定工数に相当する。
・AC:実績コスト → 今日時点のチケットの総実績工数に相当する。
・EV:実績出来高 → 今日時点の終了チケットの総予定工数に相当する。

・SAC:当初予定期間 →「プロジェクトの期限日-プロジェクトの開始日」に相当する。

【EVMの計算式】
・スケジュール差異。SV > 0なら予定よりも進捗が進んでいるので良い。
SV = EV - PV

・コスト差異。CV > 0なら予定よりもコストがかかっていないので良い。
CV = EV - AC

・スケジュール効率指数。SPI > 1なら予定よりも進捗が進んでいるので良い。
SPI = PV / EV

・コスト効率指数。CPI > 1なら予定よりもコストがかかっていないので良い。
CPI = AC / EV

・危険度指数。SPIとCPIが共に1.0未満の場合、CRはより小さくなる。スケジュールやコストを含めたプロジェクト全体の効率指標と言える。
CR = CPI * SPI

・出来高パーセント。プロジェクトの全体価値に対してどのくらい(何%分)達成しているかを表す。
PC = 100 * EV / BAC

・残作業効率指数。残作業を残予算で完了するために必要なコスト効率。例えば、TCPIが1.5ならば今よりも1.5倍働かないと、採算が合わなくなる。
TCPI = (BAC-EV) / (BAC-AC)

・完成時総コスト見積り。上司や顧客にとってすごく重要。CPI < 1ならば、予定よりもコストオーバーになる。
EAC = BAC / CPI

・完成時コスト差異。VAC<0ならば、コストオーバー。
VAC = BAC - EAC

・完了期間予測。上司や顧客にとってすごく重要。SPI < 1ならば、予定よりも納期が遅れる。
TEAC = TAC / SPI

・完了時期予測差異。TVAC<0ならば、納期が遅れる。
TVAC = SAC - TEAC

・完了予定日=プロジェクト開始日 + TEAC

【RedmineのRoadmapsプラグイン】
Redmineプラグイン開発 - Roadmapsプラグインリリース - フジハラボ -- 目指せ!スーパーエンジニア

Roadmapsプラグインはバージョン単位の進捗を集計表示してくれる。
実は、Roadmapsプラグインで出てくる値はEVMの概念とほぼ似ている。

・進捗(%) → 終了チケット数/総チケット数。チケットの工数の粒度が安定していれば、PCとほぼ一致するはず。
・バージョンの期限日-バージョンの開始日 → 当初予定期間。SACに相当する。
・予定工数 → バージョンに紐づく全チケットの総予定工数。BACに相当する。
・経過時間 → 今日時点のチケットの総実績工数。ACに相当する。

できれば、EVとPVの値を集計表示して欲しい。

・実績出来高:EV → 今日時点の終了チケットの総予定工数
・計画出来高:PV → 今日時点のチケットの総予定工数

そうすれば、バージョン単位で下記の値を計算できる。

・スケジュール差異:SV = EV - PV
・コスト差異:CV = EV - AC
・スケジュール効率指数:SPI = EV / PV
・コスト効率指数:CPI = EV / AC
・危険度指数:CR = CPI * SPI
・出来高パーセント:PC = 100 * EV / BAC
・残作業効率指数:TCPI = (BAC-EV) / (BAC-AC)
・完成時総コスト見積り:EAC = BAC / CPI
・完成時コスト差異:VAC = BAC - EAC
・完了期間予測:TEAC = TAC / SPI
・完了時期予測差異:TVAC = SAC - TEAC
・完了予定日=バージョン開始日 + TEAC

Rodmapsプラグインはサブプロジェクト単位でバージョンの進捗を集計してくれるから、最終的にはサブプロジェクトやプロジェクト全体のEVMを計算することができる。
つまり、チケットの入力ルールが徹底できれば、Redmine上でスケジュールだけでなくコストの管理も可能だ。

あるいは、プロジェクト開始前に、WBSをチケットにして、予定工数と実績工数をチケットの属性として登録して一括インポートすれば、プロジェクトの進捗やコストをシミュレーションできる。
そのシミュレーションでは、納期やコストが予算内に収まるSPIやCPIの下限値を計算できると良い。
そうすれば、その下限値よりSPIやCPIが低くなるならば、プロジェクトが危険な状況になった、というアラームを知らせることができるだろう。

WBS/EVMによるITプロジェクトマネジメント」では、SPIやCPIが0.9以下になると危険というアドバイスがある。
実際のプロジェクトで、実績を貯めていければ、予測しやすくなると思う。

EVMの公式にある概念は、パイロットが操縦している時の計測器に喩えられる。
パイロットの部屋は、計測器だらけ。
理由は、飛行機を操縦する時に現在の状況を確かめるには、実際の窓から見ることはできず、たくさんの計測器によって知るしかないからだ。
SW開発のプロジェクト管理も同様だ。
EVMのたくさんの概念を計測して、実際のプロジェクトの危険度を察知できれば、Redmineはかなり強力なツールになるだろう。

|

« Haskellの環境づくり | トップページ | Redmineに入れたプラグイン一覧 »

Redmine」カテゴリの記事

ソフトウェア工学」カテゴリの記事

チケット駆動開発」カテゴリの記事

プロジェクトマネジメント」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/49479/47275419

この記事へのトラックバック一覧です: RedmineプラグインRodmapsにEVMの機能を追加する:

« Haskellの環境づくり | トップページ | Redmineに入れたプラグイン一覧 »