アジャイル開発の生産性について
IPAの「非ウォーターフォール型開発に関する調査」という文書を読んでいて,ソフトウェア開発の生産性に関する興味深い結果を見つけた.アジャイル型開発(非ウォーターフォール型開発の一種)によって,生産性が向上したにもかかわらず,開発コストはさほど削減されていない,という結果が出ているのだ. 下のグラフを見てほしい.生産性も,Time-to-Marketの加速も,ソフトウェア不具合の削減も,半数以上で10%以上の改善ができているにもかかわらず,10%以上のコスト低減が実現されているところは30%ほどにとどまっている. 出所:情報処理推進機構「非ウォーターフォール型開発に関する調査」より抜粋. 生産性は,ソフトウェア開発によって生み出されるソフトウェア価値を,開発工数で割ったものである. 生産性 = ソフトウェア価値 ÷ 開発工数 もし,ソフトウェア価値が変わらないものとすれば,生産性の向上は開発工数の減少を意味し,それは,開発コストの減少につながるはずだ.なぜなら,特別な開発ツールへの投資をしない限り,開発コストは開発工数に比例するからだ.しかし,調査結果はこれに反する.いったい,どうなっているのだろうか? コストが減らない理由は,「ソフトウェア価値も増加している」としか考えられない.ソフトウェア価値は,すなわち,ソフトウェア品質である.生産性は高まったのだが,要求されるソフトウェア価値(品質)が上昇しているため,開発工数はさほど減っていないのだ.そのため,開発コストも減らない. この推測を支持する情報がもうひとつある.それは,「ソフトウェア不具合の削減」である.不具合が減るということは,品質が高まるということである.つまり,ソフトウェア価値を高めるために,開発工数がつぎ込まれている,と考えられるのだ. ここに,日本のソフトウェア開発の慣習が見えてくる.日本のソフトウェア開発の特徴のひとつに,「品質に関して明確な取り決めを行わない」というものがある.ユーザー側が,期限ぎりぎりまで,品質向上(機能追加や不具合修正)を求めるのである.つまり,開発側が,品質に対して,無制限の責任を負う習慣があるのだ. 生産性の向上を,開発コストの削減につなげるためには,この習慣を断ち切る必要がある.完成品の品質基準を明確に記述し,それ以上の品質改善は別契約...