アジャイルと品質
アジャイル開発の中で、品質はどのように担保されるべきか、というお話です。
品質を確保する目的は何でしょうか?それは、プロジェクト全体のスピードを落とさないためです。
ウォーターフォールの時代から、品質を担保する理由は一貫しています。バグを早期に見つけて修正しないと、後のフェーズで問題が発覚してから修正に余計なコストがかかるからです。後から修正が必要になると、開発スピードがガクンと落ちます。
アジャイル開発でも、品質を担保する理由は全く変わりません。バグが見つかるタイミングが遅れれば遅れるほど、その修正には多くの時間がかかり、結果としてプロジェクト全体の進行が遅くなってしまいます。デバッグは非常に工数を消費しますからね。
納期と品質のバランスというのは、よく聞く話ですが、実際には「品質が低ければ納期は遅れる」のが現実です。製造業からの影響かもしれませんが、ITプロジェクトにおいては、品質が悪いと納期が守れないというのは多くの経験からも明らかです。
品質が低いアジャイル開発なんて存在しません。品質を無視すれば、アジャイル開発自体が成立しなくなります。
アジャイルの品質が低いと言っている人は、おそらくカウボーイコーディングと混同しているのでしょう。アジャイルでもなく、ウォーターフォールでもない、ただプログラマーの直感や経験だけで進めるやり方です。これでは本当のアジャイルとは言えません。
アジャイル開発においては、顧客に頻繁に動作を見せることが求められるため、機能追加が常に前提にあります。ですから、品質が悪いとこのサイクルが成立しません。
そこで登場するのがTDD(テスト駆動開発)やペアプログラミングです。
TDDは、最初にテストを書くので、手を抜かなければほぼ100%のテストカバレッジが実現できます。また、コードの可読性もリファクタリングによって保たれます。
ペアプログラミングは、教育面での利点もありますが、品質の観点から見ると、リアルタイムでのレビューと同じ効果があります。レビューを繰り返すことでバグを早期に発見し、結果として開発速度が上がるのです。
ただ、ペアプログラミングは普及度が今ひとつ。理由の一つとして、プログラマーが一日中会話しながら作業するのが苦手な人が多いという点が挙げられます。その場合は、レビューを強化するなど、他の方法で対応することが必要です。
アジャイル開発において、品質が低いということはあり得ません。高品質でなければ、アジャイルは成り立たないのです。
品質が高いからこそ、デバッグに時間を取られず、機能追加がスムーズに行えます。これこそ、良いサイクルが回っている証です。
アーキテクチャ選定にも品質は大きく影響します。マイクロサービスなどの複雑な構成では、高品質なアジャイルが前提でないと実現は困難です。複雑なシステムほど、アジャイルの品質管理が重要になります。
高品質なアジャイルを実現することで、以下のような新たな世界が広がります。
- 影響範囲の調査不要
- どのコードでも安心して書き直せる
- 機能追加がスムーズ
- ライブラリのアップデートも安心
- 変更をすぐに本番に反映
- 言語変更以外は慌てず対応可能
このような未来を目指して、高品質なアジャイル開発を実現していきましょう。
(編集協力:ChatGPT 4o様)
(当記事はQiitaにもマルチポストされます)
Qiita
(スライド全体はこちら)
Discussion