アジャイル開発テストの全て!4象限とは何?実践方法からTDDまで
2023.12.12

プロダクトに対する要求が刻々と変化する昨今において、開発手法としてアジャイル開発が広まっています。

短期間でリリースを繰り返すアジャイル開発では、効率的かつ網羅的なテストの実施が重要です。この記事では、アジャイル開発におけるテストの重要性や、アジャイル開発におけるテストの4象限について解説します。

1.アジャイル開発とは?

まずはアジャイル開発についておさらいしておきましょう。


そもそも「アジャイル (Agile)」は、「素早い」「俊敏な」という意味を持つ言葉です。


その意味の通り、アジャイル開発とは「短いスパンでスピーディーに開発を行うこと」を指します。アジャイル開発は、プロジェクト全体をいくつかのサイクルに分け、サイクルごとに計画・設計・実装・テストを行い、短期間でリリースし続けるのが特徴です。

アジャイルの開発サイクル

かつては、全体を設計してから開発を行う「ウォーターフォール開発」が主流でした。しかし近年は、システムに対する要求の変化スピードが速く、より柔軟な開発が求められるようになったことから、アジャイル開発が普及したのです。


サイクルに分けて細かく開発を行うことで、仕様変更やユーザーニーズに素早く柔軟に対応できます。

なお、このサイクルのことを「スプリント」もしくは「イテレーション」と呼びます。




2.アジャイル開発におけるテスト


従来のウォーターフォール開発とアジャイル開発とでは、テストのタイミングや役割にも違いがあります。ここでは、アジャイル開発におけるテストについて解説します。

①    アジャイル開発でテストを行うシーン

ウォーターフォール開発では、全ての実装が完了したあとにのみテストを行います。一方、スプリントごとに開発を行うアジャイル開発では、テストもスプリントの数だけ実施します。

また、実装と並行してテストが行われる点が、アジャイル開発の特徴です。

タイミングや回数に違いはあっても、テストを行うシーンについては、従来の開発手法と変わらない部分もあります。


・実装前にテストシナリオの検討

・実装と並行して行う単体テストや結合テスト

・スプリント終了前の受け入れテスト

・リリース前の回帰テスト

詳しくは次の章で解説します。

②アジャイル開発におけるテストの重要性

スプリントごとにテストを実施するアジャイル開発。そのメリットの一つに、機能などの細かい単位ごとの仕様変更やバグ修正に対応することで手戻りが少なくなり、結果的に開発コストを削減できる点が挙げられます。


ただし、正しくテストを実施しないと、本来早期発見できるはずだったバグなどを発見できず、アジャイル開発のメリットを享受できない可能性が出てしまうので注意が必要です。


アジャイル開発では、従来の開発手法よりもテストの回数が多くなります。一回一回のテストに時間や手間がかかると、全体としてかかる工数も膨れてしまうため、正確かつ円滑なテストの実行が重要になるのです。



3.アジャイル開発における「テストの4象限」とは


アジャイル開発において、従来のウォーターフォール開発と同じように、全ての開発が終わってからテストを実施したり、V字モデルを用いてテストを実施したりするのは賢明ではありません。


理由は二つあり、一つはアジャイル開発ではスピード感が求められるため、迅速かつ効率的にテストを実施する必要があること。


もう一つは、アジャイル開発では短期間でリリースまでを行うため、そもそもタスクを工程に分割することがほとんどなく、水平対向させるという考えを当てはめにくいからです。


そこでアジャイル開発では、「テストの4象限」と呼ばれる手法を用いてテストを行います。



①アジャイル開発における「テストの4象限」の概要

アジャイルテストの4象限では、「ビジネス面でのテストか技術面でのテストか」「製品の批評を重視するかチームを支援するか」の4つに分けて、テストを考えます。

テストの4象限の概要図

縦軸の上方向を「ビジネス」、下方向を「技術」。横軸の右方向を「製品の批評」、左方向を「チームの支援」とします。


上半分に位置するビジネス面のテストは、顧客やユーザー視点で必要なテストだと捉えてください。対する技術面のテストは、開発者視点でのテストが該当します。


左半分に位置するチーム支援のテストは、先にテストコードが書かれ、そのテストに合格する機能を開発する、「テストファースト」な手法です。右半分に位置する製品を批評するテストは、仕様と目的との間にギャップがないかどうかを確認・発見するテストです。


ここからはそれぞれの象限について、さらに詳しく見ていきます。

②第1象限 チーム内の技術的なテスト

左下の第1象限では、コードの品質確保を目的としてテストを行います。


<例>

・単体テスト

・コンポーネントテスト


担当するのは主に開発者ですが、テスト範囲が広範囲に渡るためテスト自体は自動化されることが多いです。量が多いテストを自動化によって機械的に行うので、チームをサポートしたうえで品質も確保できます。


テスト駆動開発(TDD)によって作成されることも少なくありません。テスト駆動開発(TDD)については後ほど解説します。

③第2象限 チーム内のビジネス的なテスト

機能が要件通りに正しく動作することを確認するのが左上、第2象限のテストの目的です。


<例>

・ストーリーテスト

・プロトタイプ

・シミュレーション


ここでは、開発者とビジネスステークホルダーが協力して実施します。第2象限も第1象限と同様、手動ではなく自動で行うことが多いので、チームの支援になるでしょう。


なお、第1象限のテストと部分的に重複することもありますが、単体の機能よりもシステム全体の動作を重要視するのが第2象限です。第2象限のテストを早期に、頻繁に実行することが、円滑にリリースするためには重要になるでしょう。

④第3象限 チーム外でのビジネス的なテスト

第1、第2象限のテストに対するフィードバックとして行うのが、右上の第3象限です。第3象限では、プロダクトが実際のユーザー環境で適切に動作するかどうかをテストします。


<例>

・探索的テスト

・シナリオ

・ユーザビリティテスト

・UAT(受け入れテスト)

・アルファ/ベータ

ここでは、QAエンジニアや実際のユーザーが手動でテストを実施し、プロダクトを批評。用意されたテストシナリオに従ったり、探索的アプローチを行ったりすることで、信頼性を確認します。

⑤第4象限 チーム外での技術的なテスト

右下の第4象限の目的は、システム全体の非機能要件を確認することです。プロダクトの反応スピードやパフォーマンス、セキュリティなど、ユーザーが実際に使用する機能とは直接関係ない部分をテストします。


<例>

・パフォーマンス/負荷テスト

・セキュリティテスト

・「~性」テスト


ここでは通常、専門的なツールを用いてテストを実施することがほとんどです。これにより、快適に使用できるか、安全に使用できるかという面での信頼性を高めます。



4.アジャイル開発におけるテストの具体的な方法

アジャイルテストの4象限についての知識が深まったところで、ここからはアジャイル開発におけるテストの具体的な方法について見ていきましょう。

①アジャイル開発における自動テストと手動テスト

前項で解説した通り、アジャイル開発のテストには「自動テスト」と「手動テスト」の2種類が存在します。

 自動テスト手動テスト
テストシーン第1象限、第2象限の一部、第4象限第2象限の一部、第3象限
メリットアジャイル開発のメリットである「スピーディーな開発」を損なうことなくテストができる機能に問題がないか、ユーザー視点でテストできる
デメリット導入にコストがかかる時間と手間がかかる


アジャイルテストの4象限に当てはめると、自動化できるテストは第1象限、第2象限の一部、第4象限になります。


自動化テストは、技術面のテストや、機械的にテストを実施するシーンに最適です。自動テストツールとして、「JUnit」や「Selenium」、「TestNG」などが挙げられます。


一方手動テストは、第2象限の一部、第3象限で用いられることが多いです。シナリオテストやα・βテストなどが該当します。

手動テストは、ユーザーの視点に立ち、実際に操作する手順に沿ってテストができる点がメリットです。

②アジャイル開発のテストにおけるチーム内でのコミュニケーション方法

アジャイル開発のテストにおいて、進捗報告などのコミュニケーション方法は従来の開発手法と大きく変わりません。


JIRATrelloなどのツールを使用して進捗を管理し、Slackなどのツールでコミュニケーションをとることが一般的でしょう。


スピード感が重視されるアジャイル開発では、スプリントの期間中は「デイリースクラム」で毎日進捗報告し、その日の目標や開発を進めるうえでの課題を共有します。



5.テスト駆動開発(TDD)とは


テスト駆動開発(TDD)とは、プログラムの実装前にテストコードを書き、そのテストコードに見合うように実装・リファクタリングを進める方法のこと。


ウォーターフォール開発のように、設計→実装→テストを一方向で進めるようなやり方ではなく、テスト→実装→リファクタリングを何度も繰り返しながらプロダクトを作り上げる手法をとります。


テスト駆動開発は、3つのステップで進められます。

  1. レッド
    必ず失敗するテストコードを書く
  2. グリーン
    方法は問わず、テストが成功するコードを書く
  3. リファクタリング
    テストが成功する状態を維持しながら簡潔なコードにする

テスト駆動開発を実践することにより、コードの品質や保守性の向上が見込まれます。また、バグの早期発見やリファクタリングが容易になるなどのメリットも得られるでしょう。



6.まとめ


アジャイル開発では、テストの4象限にならって、ビジネス面・技術面・チーム支援・製品批評の観点からテストを行います。


スピーディーな開発が求められるアジャイル開発において、テストを円滑に進めることは、プロジェクト全体の成功につながるといっても過言ではありません。


そしてテストを円滑に進めるためには、プログラミングだけでなくコミュニケーションスキルももった人材を確保することが重要になります。

優秀なIT人材の確保は業界全体で厳しい状況となっており、おいそれと確保できるとは限らないのが現状です。プロジェクトを成功へと導くために、今後は自社の人材を育成することが必要になるでしょう。


トレノケートでは、アジャイル開発を推進できる人材を教育するカリキュラムを提供予定です。

またエンジニア人材育成のための「伴走型メンタリングサービス」も提供しています。

即戦力となる人材育成にお役立ててください。

伴走型

※掲載された社名、製品名は、各社の商標及び登録商標です。

この記事をシェア