第2回の記事では、測定分析の実例として、機能ユニット間で分析値を比較する一番詳細なレベルの分析をご紹介しました。機能ユニットとは、画面、バッチ、ユースケースなどの大きなレベルでソフトウェア機能を分割したものを言います。今回は反復開発プロジェクトの分析についてご紹介します。
反復開発では、開発における問題点を早い段階で見つけ、以降の反復で改善することが課題となります。このため、反復開発プロジェクトの分析では反復毎に分析を行いプロジェクトにフィードバックしています。本記事では反復開発プロジェクトの分析のアプローチと分析例をご紹介します。
目次
反復開発プロジェクトの測定の目的
反復開発プロジェクトでは反復毎に開発を繰り返し、最終的にそのプロジェクトで開発する全ての機能を開発します。各反復の開発を行う中で問題点があれば、それ以降の反復で改善し、より良い開発を行うことが求められます。
反復開発プロジェクトのプロジェクト測定では、早い段階で問題点を見つけて改善するために、反復毎に分析を行ってプロジェクトにフィードバックします。
プロジェクトは反復毎にフィードバックを受けて、必要であれば次の反復以降で問題点を改善します。その改善の効果はプロジェクト測定によって定量的に把握することができます。
本記事はこのような反復開発プロジェクトを測定して分析するときの方法と具体例をご紹介します。
プロジェクト測定の目的は第1回の記事で詳しく説明していますのでこちらもご覧ください。
反復開発プロジェクトの分析のアプローチ
反復開発プロジェクトの分析
反復開発プロジェクトの分析では、
- 各反復の分析
- 反復間の分析
の二つの視点で分析します。これらの分析は各反復が終わった時に行います。
まず、各反復の分析で生産性に影響した要因を特定し、次に、反復間の分析で反復間の分析値の推移を確認します。分析値とは、ここでは測定した労力や規模などの測定値から求めた開発生産性や10CFPあたりの作業時間などの値のことを言います。
各反復の分析では、第2回でご紹介した機能ユニット間の分析のアプローチで、生産性に影響した要因を詳細に分析します。分析結果はすぐにプロジェクトにフィードバックし、以降の反復開発の改善に役立ててもらいます。
反復間の分析では、反復間の値の推移を確認して、生産性の推移や改善の効果を確認します。
分析とフィードバックのタイミング
反復開発プロジェクトでは各反復が終わったタイミングでその反復の測定結果を分析し、分析結果をプロジェクトにフィードバックします。開発途中のこの段階で分析結果をフィードバックすることで、明らかになった改善点を開発途中に改善して以降の開発を進めることが可能となります。
改善の効果は、反復間の分析値の推移を見て定量的に把握することができます。
上の図は次の章でご紹介するLプロジェクトの開発と測定、分析のスケジュールを元に、反復開発プロジェクトの分析のタイミングを簡単に表したものです。例として、反復1stが終わった時点を考えてみましょう。
この時分析する対象は反復1stで開発した機能ユニットです。その機能ユニットを対象に第2回でご紹介した機能ユニット間の分析の手順で生産性に影響した要因を詳細に分析します。分析した結果はすぐにプロジェクトにフィードバックします。
プロジェクトは分析結果のフィードバックの内容やプロジェクトで実施した振り返りの結果を元に、必要に応じて次の反復での開発の進め方を改善します。改善の効果は反復2ndが完了した時点で反復間の分析を行い、反復1stと反復2ndの生産性の推移などから確認できます。
反復期間が長いプロジェクトの場合
各反復の期間が1ヶ月より長い場合は、例えば1か月毎など反復の途中の時点でも分析とフィードバックを実施することをお勧めします。
開発途中の時点では、開発が終わっていない機能ユニットについては中間の生産性しか出ませんが、例えば10CFPあたりの作業時間を比較して他と大きく異なる機能ユニットがないか確認することができます。他より開発に時間がかかっている機能ユニットがあった場合、何らかの問題点が隠れている可能性が考えられます。このような潜在的問題点が開発途中の早い段階で見つかれば、その原因を見つけて改善することが可能です。
反復開発プロジェクトの分析例
本章では反復開発プロジェクトの分析例としてLプロジェクトの例をご紹介します。ここでは「反復間の分析」を中心にご紹介します。「各反復の分析」の例については第2回の記事でご紹介した内容と同じですのでこちらをご覧ください。
Lプロジェクトは開発期間が約1年半、開発労力が500人月超、ピーク時のメンバー数は約40人のプロジェクトです。開発に入ってからは3回の反復を行いました。開発スケジュールの概略は下図の通りです。
反復間の分析:生産性の推移
反復開発を行うプロジェクトの反復2回目以降の分析では、それ以前の反復の分析値と比較して反復間の分析値の推移を見ます。例えば、機能ユニット別画面生産性の分布の推移を見る場合は、[グラフ1]に示したような箱ひげ図を作成するのも一案です。箱ひげ図では、分析値のバラつき具合や外れ値を把握することができます。
[グラフ1]の縦軸は開発生産性を、横軸は各反復を示します。[グラフ1]の箱ひげ図は、各反復の機能ユニット別画面生産性が分布している範囲を表しています。開発生産性は、1人月に開発した機能規模(CFP)の大きさを表したものですから、数値が大きいほど生産性が高い機能と言えます。
[グラフ1]を見ると、反復が進むに従って機能ユニット別画面生産性が高くなっていることが分かります。
反復間の分析:10CFPあたりの作業時間の推移
どのような作業時間が影響して生産性が上がったのか見るため、反復毎の画面機能10CFPあたりの作業時間の推移を確認します。反復毎の画面機能10CFPあたりの作業時間は、以下の式で求めました。
本プロジェクトの測定では各機能のUI部分と非UI部分の作業を区別して測定しました。このため、グラフ中の作業種別もUIと非UIに分かれています。
[グラフ2]を見ると、詳細設計の作業時間は1回目の反復より2回目以降の反復の方が大きくなっています。10CFPあたりの作業時間は、10CFPという単位規模を開発するのに要した時間を表したものですから、値が大きいほど作業に時間がかかっています。[グラフ2]から、1回目の反復より2回目以降の反復の方が詳細設計に時間をかけたことが分かりました。
一方、実装・単体テスト時間を見ると、特に、実装・単体テスト(非UI)は反復が進むに従って10CFPあたりの作業時間が小さくなったことが分かりました。このことから、非UI部分の開発では反復が進むに従って実装効率が良くなったと推測することができます。
また、結合テスト時間は3回目の反復で作業時間が小さくなっていました。
生産性が上がった要因の分析
これらの反復毎の作業時間の推移を元に、開発の進め方をプロジェクトに確認したところ、2回目以降の反復で開発の進め方を見直していたことが分かりました。
1回目の反復では、簡単に分かりそうな不具合が検出できないことが多かったため2回目以降の反復では詳細設計およびコードとテストのレビューを強化していたのです。
この内容を踏まえてもう一度[グラフ2]の反復毎の10CFPあたりの作業時間の推移を見ると、次のことが言えます。
詳細設計のレビューを強化したことにより詳細設計の作業時間は大きくなりましたが、設計不具合がなくなったことにより実装の手戻りがなくなったため実装・単体テスト時間が小さくなったと考えられます。また、コードとテストのレビューを強化したことで実装レベルが向上して実装・単体テスト時間を小さくしたと考えられます。さらに、修正や手戻りによる再テストが減ったことによって結合テストの時間も減少したと考えられます。
今回、細かな機能ユニット毎のご説明はしませんでしたが、実際には1回目の反復での開発経験や類似機能の開発経験も2回目の以降の反復で実装・単体テスト時間を小さくする要因になったと考えられます。
反復毎の画面生産性を上げた要因
- 詳細設計およびコードとテストのレビュー強化
- 類似機能の開発経験
Lプロジェクトの分析結果
本記事ではLプロジェクトの分析結果をすべてご紹介することはできませんでしたが、Lプロジェクトの画面機能の開発生産性に関する分析結果をまとめたいと思います。
Lプロジェクトの画面生産性は他プロジェクトと比較して高く、特に反復が進むにつれて生産性が上がりました。生産性が上がった大きな要因は、反復1回目の完了時に明らかになった問題点を改善したことです。反復2回目で開発の進め方を見直し、コードとテストのレビューを強化しました。この結果、前の反復に比べて設計時間が1.5倍程度大きくなりましたが、実装・単体テストの作業時間は約3分の1に縮小し、全体的に見ると生産性が上がり、欠陥数も減少しました。
反復1回目の完了時に明らかになった問題点は、今回はプロジェクト測定分析によって特定したものではなくプロジェクトで実施した振り返りの結果でしたが、この問題点を改善した効果は、プロジェクト測定分析によって反復間の分析値の推移を見ることで定量的に把握することができました。
プロジェクト間の分析での応用
本記事では反復開発プロジェクトの分析のアプローチとして反復間の分析値の推移を見て開発における改善の効果を確認する例をご紹介しましたが、この分析は反復開発だけではなく、プロジェクト間の分析にも応用できます。
プロジェクト間の分析に応用するには、労力を記録する際の作業種別の分け方をプロジェクト間で揃える必要がありますが、例えば、継続開発プロジェクトや類似したプロジェクト間での分析に使うことができます。
実際に、継続開発したプロジェクトで、生産性の推移から開発の進め方を改善した効果と習熟による生産性の向上を定量的に把握することができました。
おわりに
今回は反復開発の測定分析の実例をご紹介しました。次回も、もう少し測定分析の実例をご紹介する予定です。