14.1 もっと良く速く安く
内容
アジャイルプラクティスの各種効果事例を紹介している。
それらによりテスト駆動開発(TDD)は「テストも書くのでコードは倍書くが、質もスピードも上げることができる」と論理付けている。
開発者はコーディングとテストに時間を費やしているわけではない。
仕様書の解読、ドキュメント作成、会議出席にも時間を費やすし、いちばん多くの時間を浪費しているデバッグ。
TDDはバグを意図的に発生させ修正しながら進める。
「それがバグであること」と「修正が正しいこと」を仕様となるテストコードで担保しながら開発を進める。
そしてコード変更のたびにテスト実行するため、後で意図しないバグ発生を抑え、デバッグの時間を減らすことができる。
生産性を向上させるのに、品質低下の犠牲を払う必要はない。
以下、論文や調査事例を紹介。
QSMA社によるアジャイルプラクティス導入効果調査
- ウォーターフォール
- 欠陥率が大規模チームであるほど高い。
- 平均の4倍以上の場合もある。
- XP、スクラム
- 欠陥率が平均より30%〜50%減。
論文:Realizing Quality Improvement Through Test-driven Development: Results and Experiences of Four Industrial Teams
(テスト駆動開発を通じた品質向上の気づき:4つの事業チームの事例から)
調査対象のTDDを実践しているすべてのチームが欠陥密度の大幅な低下を示し、「テスト駆動開発は開発チームは生産性を大幅に減らすことなく、開発したソフトウェアの欠陥密度を大幅に減らす」ことができるとしている。
- IBMのチーム → 40%減
- マイクロソフトのチーム → 60%〜90%減
論文:Evaluating the Efficacy of Test-Driven Development: Industrial Case Studies(テスト駆動開発の有効性評価:業界事例)
同じ組織で、TDDを使ったプロジェクトと使っていない似たようなプロジェクトで、使った方がコード品質が2倍以上良い。
ノースカロライナ州立大学のボビー・ジョージとローリー・ウィリアムズによる2つのソフトウェア開発者のグループ調査
- テスト駆動開発者は
- 高品質なコードを生み出した
- 18%多くブラックボックステストをパス
- 開発できる時間が16%も長くなったにも関わらず、テスト駆動開発者のテストケースは平均「メソッドの98%、命令文の92%、分岐の97%のカバー」を達成。
- 開発者の92%が「テスト駆動開発は高品質なコードを生み出す」と信じていることもわかった
Exploring Extreme Programming in Context: An Industrial Case Study(エクストリームプログラミングのコンテキストでの探求:ある業界における事例)
XPを使う前のリリースと使ったあとのリリースとで比較すると、XPを使う方が以下のように生産性と品質が向上し、双方はシナジー関係にあると結論づけている。
- 50%の生産性の向上
- 65%のリリース直前品質の向上
- 35%のリリース直後品質の向上
QSMとカッターコンソーシアムの調査
- XPは業界標準と比較しておよそ5か月のスケジュール短縮と倍の品質(欠陥が半減)が見られた。
- フォレットは130万ドルの節約を成し遂げ、6つのリリースにまたがる節約額を合わせると、節約額は合計780万ドルにも上った
論文:Quantitatively Evaluating Test-Driven Development by Applying ObjectOriented Quality Metrics to Open Source Projects(オープンソースプロジェクトにおけるオブジェクト指向品質メトリクスの適用によるテスト駆動開発の定量的評価)
テスト駆動開発の使用状況に違いのある複数のオープンソースプロジェクトでのコード品質についての調査。テスト駆動開発を使用しているプロジェクトでは、
- 凝集度は21.33%まで上がった(クラスがどれだけ責任分担に集中しているか)
- 結合度は10.05%にまで改善(モジュールがどれだけ適切に分割できているか)
- 複雑度は30.98%まで下がった(条件パターンの複雑さ)
2013年のState of Scrum Report(スクラム現況調査)
調査に回答した企業のうち
- 40%がスクラム
- 15%がカンバン
- 11%がリーン
- エクストリームプログラミングはたった7%
学び
- キレイだからこそ早い
- バグ発生をあとにしないから問題が複雑にならない
- XP(のTDD)はやる価値はあると思う
学びを活かすアイディア・行動
- 簡単な案件でペアプロとTDD実践
- CI/CD環境構築