ソフトウェアの品質を学びまくる2.0

ソフトウェアの品質、テストなどについて学んだことを記録するブログです。旧ブログからゆっくり移行中です。http://blog.livedoor.jp/prjmng/

進捗管理のメトリクスに関するメモ

 作業の進捗における、計画値と実績値の乖離の表現について、考えたことの整理&実験です。
 ここでは例として、テストケースの件数ベースの進捗管理を考えます。

遅延率と「相対的進捗率」

 「どれだけ遅延しているか」を表現する場合によく使われるのは、「遅延率」です。
 たとえば、ある時点で50件が消化済みである予定だったが、実際には45件しか消化できていない。この場合、分母が50、分子が5(=50-45)なので、遅延率は10%ということになります*1。直感的でわかりやすいですね。

 一方、Squash TMというテスト管理ツールでは、「Real vs. prev. progress」というメトリクスが使われています。

sites.google.com

 計算式が不明なのでいろいろ試してみると、以下のようなものだと判明しました。名前がないので、ここでは仮に「相対的進捗率」と呼ぶことにします。

相対的進捗率 = 進捗率 / 期間経過率

 自然言語でいうと、「経過した時間に相当するだけの進捗が出ているか」ということです。
 たとえば、全10日のテスト期間に対し3日間がすでに終わったとして、全100のテストケースのうち20件が消化済みだとしましょう。進捗率 = 20%、期間経過率 = 30%なので、相対的進捗率は66.7%ということになります。

 遅延率を使う場合、「妥当な消化計画があること」という暗黙の前提がありますが、相対的進捗率の計算には「消化計画」は出てこないので、計画を立てない場合でも利用できます。逆に言うと、たとえば「最初の立ち上がりは遅いが、途中からテストケース消化のスピードが上がり・・・」といったニュアンスは加味してくれません。

 ちなみにSquash TMでは、テストケースごとの消化計画という概念がありません。理由はわかりませんが、短期間のイテレーションごとにテストを行うという文脈でのツールなので、わざわざ綿密な消化計画は立てず、期間で簡易に進捗状況を把握しようということなのかもしれません。

遅延率と相対的進捗率の比較

 ざくっと整理すると、以下の表のようになります。

遅延率 相対的進捗率
意味 計画した消化済み件数に対する、計画と実績の差分 すでに経過した期間の割合に対する、すでに消化した件数の割合
計算式 (消化済み件数(計画)-消化済み件数(実績)) / 消化済み件数(計画) 進捗率 / 期間経過率
値域 -∞~0~100% 0%~∞
0%の意味 計画に対して遅延がない状態 進捗がない状態
100%の意味 進捗がない状態 経過した時間に対して遅延がない状態
-100%の意味 計画に対して実際の進捗が倍の状態
長所 計画が適切であれば、遅延の程度がわかりやすい。 計画がなくても、日数の経過だけで算出できる。
短所 計画が不適切だと、重大な遅延を見逃すことがある。 件数の重みがある場合などが考慮できない。

2つのメトリクスの挙動

 まずは一番単純なケースとして、「毎日同じ件数だけ消化していく」計画を考えてみましょう。マーカーがある方が第1軸、ない方が第2軸です。

01

 最初は計画を上回る進捗速度でしたが、次第に鈍化していき、7日目には計画を下回っています(赤の実線)。
 遅延率(青の実線)は0%が基準、相対的進捗率(緑の実線)は100%が基準であり、正負は逆転しているものの、本質的に同じ動きをしています。

 次に、「始めはなだらかに、中間は急に、終盤はまたなだらかに」という計画を考えてみます。テストの場合、最初の立ち上がりに時間がかかったりするケースはよくありますね。
 この計画に対し、1日目だけ1件遅延するケースはどうなるか。

02a

 遅延率はいきなり100%と最悪値ですが、それ以降は計画どおりなので急速に0に戻っていきます。一方相対的進捗率は、計画とは無関係に、「経過した時間の分だけ進捗しているか」なので、進捗スピードの速くなる中盤になるまでは正常値に戻りません。

 こうして比べてみると、妥当性のある計画がある場合には遅延率で、そうでない場合は相対的進捗率で様子を見るとよさそうですね。

遅延率と相対的進捗率の問題点

 さて、2つのメトリクスの今ひとつの欠点について。

 たとえば毎日、計画の8割ずつしか進められなかったとしましょう。遅延率は、ずっと20%です。それ自体は正しいのですが、期間の序盤の遅延20%と、終盤のそれとでは、「ヤバさ」が異なるはずです。が、それを読み取ることは難しい。

03a

  そして奇妙なことに、相対的進捗率の方も、なだらかながら「改善」しています。進捗スピードこそ計画の半分ながら、中盤の急な計画に対する半分なので、期間比率からみると改善しているように見えてしまうのです。
 となると、この2つを合わせて見ても、「遅延は一定だが、全体的には回復傾向にある」とミスリードされかねません。

遅延率に残期間を織り込んでみる

 ということで、遅延率の考え方と、相対的進捗率の2つの要素を合わせて、次のような式を作ってみましょう。仮に名前を「進捗リスク」と置きます。

進捗リスク = 遅延率 / 期間残余率

 期間残余率 = 1- 期間経過率 で、要は10日の期間のうち8日経過したのであれば、残余率は20%です。
 これを先ほどのグラフに追加すると、こう。

03b

 「リスク」(赤い実践)があからさまに増大していることがわかります。8日では分母が0.2、9日目では0.1になるので、全体として倍になるためです。

 「1件だけ遅れ続けている」ケースにおいても、

02b

 序盤では「あー、遅れてると言っても1件だけね、特に問題ないかな」って感じで0に近づいてきますが、中盤から「は? いつまで遅延残してるの?」って雰囲気を出し始めて、終盤で「おーい! 早く回復しろよ!」と訴え始めるふるまいになっています。なんかかわいいですね。

 いや、進捗管理の定石メトリクスってこれだろ普通!っていうのがあれば教えてください。特に何も調べず、Excelとにらめっこしながら考えただけなので・・・。

*1:前倒しの場合、遅延率はマイナスになります。