開発からリリースまでの期間が短くなる傾向にある中、ウォーターフォール型の開発手法に代わってアジャイル開発が盛んに行われるようになりました。開発期間が短くなるということは、設計や実装はもちろん品質担保のための施策にかける時間も短縮されることを意味しますが、開発リードタイムの短縮と品質の担保は両立できるのでしょうか。
今回は、アジャイル開発と従来のウォーターフォール開発の違い、およびアジャイル開発の主な手法と、それに合わせたテストの在り方についてご紹介します。
アジャイル開発とは
アジャイル開発(Agile Software Development)とは、システムやソフトウェアの開発手法の1つで、短期間(イテレーション)で実装とテストを繰り返して修正・改善を重ねながら開発を行う方法です。チームメンバー同士で密にコミュニケーションをとり、日々開発・検証・フィードバックを繰り返すことで、顧客の要望を実現させるために臨機応変に対応することを重視しています。
アジャイル開発とウォーターフォール開発の違い
アジャイル開発は、従来のウォーターフォール開発とは異なる特徴を持っています。それぞれの違いについて見ていきましょう。
ウォーターフォール開発
ウォーターフォール開発とは、滝の水が流れ落ちるように、それぞれの開発工程を後戻りなく順番に実施する開発手法で、要件定義や設計などの上流工程から実装・テストなどの下流工程に向かって、あらかじめ定めた期間と順序で計画的に開発を行います。
ウォーターフォール開発の場合、要件定義・設計・実装・テストと、開発のフェーズを順に進めるため、プロジェクトの進捗管理や開発要員の確保がしやすいというメリットがあります。また一方で、要件定義や設計、ドキュメントの準備に時間がかかる、プロジェクト途中での仕様変更に対応しづらいというデメリットがあります。
アジャイル開発
アジャイル開発は短いスパンで試作品を作成し、フィードバックや検証を踏まえて改善していきます。短い開発サイクルを何回も繰り返しながら、時にはデモも使いながら評価するにより、仕様変更にも柔軟に対応できるようにします。アジャイル開発は小規模開発に向いているとされてきましたが、最近では少人数のチームを複数作り、大規模開発をアジャイル開発で行うこともあるようです。
アジャイル開発の手法
アジャイル開発にはさまざまな手法があります。各手法の特徴を以下に記載します。
スクラム
スクラムとは、ラグビーのスクラムにちなんで名付けられた、アジャイル開発をチームで効率的に進めるためのマネジメントフレームワークです。スクラムのチームメンバーは、以下のいずれかの役割を与えられます。
【1】プロダクトオーナー
開発するプロダクトの責任者として、顧客やユーザーの意見の取りまとめを行います。プロダクトオーナーはコーディングには携わらず、プロジェクトの進行や予算の管理、方針転換時の決定など、プロジェクトマネジャーとしての役割を担います。
【2】スクラムマスター
プロダクトオーナーと開発メンバーの仲介役として、開発の進行管理や業務内容の調整を担当します。開発メンバーの相談に乗ったり、開発チームが抱えている問題を解決したりすることも、スクラムマスターの役目です。
【3】開発メンバー
実際にスクラム開発を行うメンバーです。スクラム開発では設計担当・テスト担当のような役割分担はされず、一人のメンバーが複数の開発工程を担当することもあります。
XP(エクストリームプログラミング)
XP(エクストリームプログラミング:eXtreme Programming)とは、以下の4つの価値をチームで共有し、コーディングとテストの両方を開発初期段階から重視する開発手法です。
- コミュニケーション(関係者間の円滑なコミュニケーションを重視すること)
- 単純さ(必要最低限の設計のみ行うこと)
- フィードバック(頻繁なテストによるフィードバックを重視すること)
- 勇気(大胆な設計変更に立ち向かうこと)
FDD(ユーザー機能駆動開発)
FDD(ユーザー機能駆動開発:Feature-Driven Development)は、顧客にとって価値ある機能(ユーザー機能)を基本作業単位とする開発手法です。製品のユーザー機能ごとにチームで計画や設計、コーディングを行うため、複数のチームによる大規模開発にも適用できます。
アジャイル開発の流れ
一般的なアジャイル開発では、プロジェクト全体を管理する「リリース計画」と数週間のイテレーションと呼ばれる開発期間ごとに管理する「イテレーション計画」に基づいて進めます。リリース計画は「ユーザーストーリー」と呼ばれるユーザーの意図・要求を反映させるように立案します。イテレーション計画では、これから実施するイテレーションの目標、詳細計画およびタスクを決定します。
アジャイル開発における計画は、単に当初の予定を遂行するためではなく、今チームがどのように開発を進めていくのかをチームや関係者全体で共有し、変更をどの程度許容できるかの判断材料として利用されることが多いようです。
アジャイル開発におけるテストの組み立て方と品質管理の方法
アジャイル開発は短期間での実装と検証・改善を特徴とするため、目標とする品質に到達するように管理することが難しい側面があります。この場合の対策としては、TDD(Test-Driven Development:テスト駆動開発)の導入や各イテレーションで共通となるテストの自動化、ユーザーストーリーをベースとしたテストの導入が考えられます。
開発工程とテスト工程を明確に分けずに反復的に改修を加えるような、不具合が発生しやすい状況下では、TDDでテストを実装・リファクタリングを繰り返すことが適しています。単体レベルのテストは、最初に定義したモジュールメソッドの要件を元に作成して自動化しておけば、仕様変更時の対応もスムーズです。
データや処理の負荷を確認するパフォーマンステストの自動化や、プログラムに変更を加えた場合も変わる可能性が低い、ユーザーから見たシステムの振る舞いに基づくストーリーテストやシナリオテストをあらかじめ用意することも、有効な手段となります。
まとめ
アジャイル開発は、従来のウォーターフォール開発に比べて、柔軟性が高くユーザーの視点を取り入れやすいという特徴を持っており、スクラムやXPといった手法の中から適切な手法を選択することで、短期間でのシステム開発を実現できます。
顧客満足度を左右するソフトウェアの品質に関しては、テストチームやテスト会社と協力しながら、自動化やテスト駆動開発などのテスト手法を駆使して、開発開始前に目標とした品質を維持することが重要です。