アジャイルとウォーターフォールの品質の守り方

 成果物の製造品質を担保するために重要なのがテストです。テストによって仕様通りに動かない部分(不具合)が判明したら、それを修正して、製造品質を担保します。ウォーターフォール型アプローチとアジャイル型アプローチでは、不具合に対する考え方と対処の仕方が違っています。

 ウォーターフォール型アプローチでは、要件定義の記述を全て実現することを前提に、設計を行い、計画を立てます。実際の開発は機能や、ソフトウェアであればプログラム単位の部品に分割され、分担して詳細設計、開発、単体テストを行います。その後、部品が全部揃ったところで、全てをつないで結合テストが行われます。できたものには不具合が内包されていることを前提として、漏れなく抽出するためのテストケースを作成してテストを行い、必要であれば設計まで立ち戻って見直し、修正します。

 対して、アジャイル型アプローチでは、「不具合がない状態をキープする」ことを前提とします。そのため、小さく作って不具合がない状態であることを確認し、イテレーションごとに成果をマージしてテストし、不具合がない状態を確認して動く成果物とします。

 これを継続し、少しずつ実現できるユーザーストーリーを増やしていきます。「早く機能を作るのがアジャイル」というイメージのみを先行させ、イテレーションの最後にそれまでの成果物と結合したテストを行わないという誤解がよくあります。

 もしウォーターフォールと同様に、どこかのタイミングで「テストフェーズ」を設けて複数のイテレーションの成果を一気に結合してテストしたなら、当然、結合したことで不具合が顕在化します。設計書も残っていないので、原因の追究は困難を極めることになります。

 そうではなく、アジャイル型アプローチでは、常に「成果はそれまでの動く成果物と結合してテストされている」ことが重要です。そのときに、過去にテストした項目についても、原則としてテストは省略しません。今回の成果を結合すると、過去に動作していたものが動かなくなることは十分に考えられるからです。

 そして、完了したユーザーストーリーが増えるほど、テストの量も、頻度も増えていきます。なので、製造品質を担保するアジャイル型アプローチでは人が手を動かさずコードを動かすだけでテストを実行する、「自動テスト」が欠かせなくなってくるのです。

アジャイルをこれからやろうと思っている人へ