ナレッジ

アジャイルテストとは?4象限の内容や実践手順を解説

アジャイルテストとは?4象限の内容や実践手順を解説

昨今、アジャイル開発への取り組みは、欧米のみならず日本でも普及しています。

一方、アジャイル開発特有のイテレーション(スプリント)単位でのリリースでは、品質面に対する配慮や担保まで手が回らず、従来型のウォーターフォール開発と比べてソフトウェア品質の低下を懸念する声も依然としてあります。

本記事では、アジャイル開発におけるソフトウェアテスト(以下、「アジャイルテスト」)について解説していきます。

アジャイル開発とは?

アジャイル開発とは、日本のトヨタ生産方式の「カンバン」に影響を受けており、2001年にアメリカで公開された「アジャイルソフトウェア開発宣言」を基本としている開発手法です。

アジャイルソフトウェア開発宣言

「アジャイルソフトウェア開発宣言」を以下にまとめました(図表1)。その内容は、「何に価値をおくか」というマインドセットです。

図表1:アジャイルソフトウェア開発宣言
図表1:アジャイルソフトウェア開発宣言

アジャイル設計と開発手法

上記で示したように、「アジャイルソフトウェア開発宣言」ではソフトウェア開発を行う上での「マインドセット」が書かれており、アジャイル設計についての具体的な進め方について言及されていません。

そのため、「アジャイルソフトウェア開発宣言」の思想をベースとした、アジャイルの開発手法フレームワークが複数登場しました。

ここでは代表的なフレームワークを3つ紹介します。

1)スクラム

スクラムは、アジャイル開発手法の中でも最も広く採用されている手法の一つです。

固定された期間(スプリント)で作業を進め、毎日のスタンドアップミーティングやスプリントレビュー、スプリントレトロスペクティブ(スプリントの中で、“何がうまくいったのか”、“何がうまくいかなかったのか”を振り返るプロセス。いわゆる「振り返り」のイメージ)を通じてチームの進捗を確認し、改善を行います。 

2)イテレーション開発

イテレーション開発とは、短いサイクル(イテレーション)を繰り返しながら、段階的にシステムを完成させる手法です。

各イテレーションの終了時には、動くソフトウェアが提供され、その都度フィードバックを受けて次のイテレーションに反映させます。

3)XP(エクストリームプログラミング)

XP(エクストリームプログラミング)は、アジャイル開発の一つの手法で、テスト駆動開発(TDD)、ペアプログラミング、リファクタリングなどのプラクティスにのっとって実装を進めます。

開発プロセス全体を通じて品質を向上させることを目的とし、短いサイクルでのリリースや継続的インテグレーションを重視します。

アジャイルテストの基本

アジャイル開発では、ウォーターフォール開発とは異なり、全ての開発が完了してからテストを実施することは非効率であるため、開発の早い段階から連続かつ反復的にテストを行う必要があります(図表2)。

これにより、早期に問題を発見し、迅速に修正することが可能となり、品質の高いソフトウェアの提供が可能となります。

図表2:ウォーターフォール開発とアジャイル開発の違い
図表2:ウォーターフォール開発とアジャイル開発の違い

アジャイルテストの4象限 

アジャイルテストを効果的に実施するためのフレームワークとして、「アジャイルテストの4象限」があります(図表3)。 

「アジャイルテストの4象限」とは、テスト活動を体系化し、4つの象限ごとに異なる視点と目的を持つテストを行うことで、総合的な品質保証を実現するためのモデルです。 

  • Q1:技術的なテスト - 開発者による単体テストやコンポーネントテスト 
  • Q2:業務的なテスト - ビジネス要件を確認するための機能テスト 
  • Q3:ユーザー受け入れテスト - エンドユーザーによるシステムの受け入れテスト 
  • Q4:非機能テスト - パフォーマンステストやセキュリティテストなど 

これらのテストは、ソフトウェアの品質を全方位から保証するために重要です。

図表3:アジャイルテストの4象限
図表3:アジャイルテストの4象限

アジャイルテストの実践手順

前提として、アジャイル開発におけるテストレベル自体は、ウォーターフォール開発でもアジャイル開発でも変わりません。異なるポイントはそのスピード感とタイミングです。 

工程は同じですが、アジャイルテストをする上でのポイントを工程別に記載します。 

また、ここではテスト工程内の「システムテスト」「受け入れテスト」フェーズを想定し、「コンポーネントテスト」および「コンポーネント統合テスト」は対象外とします。

1)テスト戦略の策定

テスト戦略とは、特定の状況におけるテスト目的を達成するための、テスト実施方法の記述となります。 

アジャイルテストは開発の後工程で実施するのではなく、全期間にわたってテスト活動を行います。 

そのため、テストが開発工程全体にどう関わるのかを戦略として決めます。

2)テスト計画書の策定

テスト計画書はISTQB用語集では『達成すべきテスト目的およびそれらを達成するための手段やスケジュールを示し、調整したテスト活動を体系化したドキュメント』と定義されています。

アジャイル開発では、イテレーション(スプリント)ごとにテスト計画を策定します。

このテスト計画書は、「テスト対象システム」「テスト対象範囲(テストスコープ)」「テスト環境」「テストに必要なリソース情報」などを含めます。

3)テスト設計書の策定 

アジャイルテストにおけるテスト設計書は、ユーザーストーリーや受け入れ基準に基づいて策定します。ここでより重要となるのが、“価値”を軸としたアプローチとなっているのかです。具体的には以下のような流れに基づいて策定していきます。 

①ユーザーストーリーの分析

ユーザーストーリーでは、ユーザー視点から開発するフィーチャー(機能群)やサービスを分析し、ユーザーに対してどのようなニーズを満たし、価値を提供するのかを分析します。  

②テストシナリオの作成 

各ユーザーストーリーに対して、どのようなテスト設計技法を用いれば良いのかを分析・設計し、テストシナリオを作成します。 

このテストシナリオでは、「テスト対象システム」「テスト対象範囲」「テスト環境」「テストに必要なリソース」を具体的に含めます。 

また、テストシナリオには「正常系」「異常系」のシナリオを含めることで、より品質に貢献することができます。 

③テスト仕様書の記載

テスト仕様書には、テストケースやテストデータ、期待結果などを記載します。 

テストシナリオをベースにテストケースとテスト手順を詳細に作成することで、リグレッションテスト(回帰テスト)に対しても有効なものを作れます。 さらに将来的には、テスト自動化によるテスト品質と効率に役立てることができるのです。 

4)テスト観点を基にテストを実施

テスト観点とは、「何をテストするのか(テストケースの意図)のみを端的に記述したもの」と言えます。 このテスト観点とテストケース、テスト手順に基づいて、テストを実行します。 

アジャイル開発では期間があらかじめ決まっており、全てのテスト観点でのテストを実行するのは非現実的です。 そのため、優先度の高いテスト観点からテストを実行することが大切です。 優先度の高いテストから実行することで、テストすべきテスト観点をカバーできるため重要度の高い不具合を検出することが可能となります。

5)結果の分析とフィードバック

テストを実行した後はテスト結果を分析し、テストカバレッジや検出した不具合、改善点を開発チームに対してフィードバックします。 

テストカバレッジの確認

ソフトウェアテストの7原則に「欠陥の偏在」「テストは欠陥があることは示せるが、欠陥がないことは示せない」というものがあります。 
実行したテストのテストカバレッジを分析することで、実行したテスト自体の質を分析し、フィードバックを行います。 

不具合管理と不具合分析

期間内に検出した不具合をBTS(バグトラッキングシステム)を用いて管理します。併せて不具合に対して不具合分析を行い、「欠陥の偏在」を明確化させます。 
このフィードバックは、次のイテレーションでの品質向上への取り組み活動に役立てます。 

6)レビューと調整

実践手順の最後は「レビュー」と「調整」です。

レビューは、イテレーション内で実施した各工程での進め方や成果物、課題点などをチームとして実施します。 レビューではレトロスペクティブやKPT手法など、プロジェクトの状況に応じてレビューの手法を使い分けます。 

そして、レビューで見つかった改善や新規の取り組み事項を各工程に入れ込む「調整」を行います。

システム同様に、テストプロセス自体も常に改善を加えることで、システムもテストプロセスもより良いものとなっていくのです。

アジャイルテストの自動化について

アジャイルテストの効率をさらに向上させるためには、テストの自動化が必須です。

テストプロセスを自動化することで、リグレッションテストやパフォーマンステストなど、頻繁に実施が必要なテストにおいて、人の手を介さずともテストを実施でき、人によるケアレスミスや、メンバーアサインを気にすることなく、テストサイクルを回すことができます。

開発者は自身の実装したソフトウェアに対して、テスト自動化によるCI環境が自動でテストを行ってくれるため、不具合の作り込みを早期に検知できます。

アジャイル開発のようにスピード感が求められる開発手法に対して、テスト自動化なしでは効率化を実現できないといっても過言ではありません。

アジャイルテストを自動化して開発スピードと品質の向上を

アジャイルテストは、ソフトウェアの品質を確保しつつ、迅速な開発を可能とするために強力な手段です。

特に昨今では、システム開発における現場でアジャイル開発やDevOps開発などスピード感が求められる組織が多くなっています。

アジャイルテストに精通した人材とテスト自動化エンジニアが組織に参画することで、開発スピードと品質の両方を向上できるようになります。

アジャイル開発において、人によるアジャイルテストとテスト自動化という双方の役割を理解した上で、適切に実践、導入していくことで、より高品質なソフトウェアを迅速に提供できるようになるでしょう。

■参考■

(※1)アジャイルソフトウェア開発宣言より引用

SNSシェア

この記事は面白かったですか?

今後の改善の参考にさせていただきます!

Search Articles By The Cast出演者/執筆者から記事を探す

Search Articless By The Categoryカテゴリから記事を探す

Ranking

ランキング

もっと見る