テストアナリスト
本章では、Advanced Level シラバス 日本語版 テストアナリストについて記載します。
JSTQBのFoundation Level(FL)についても記載しています。
ソフトウェアテスト
ソフトウェアテストとは、テスト対象物であるソフトウェアの品質を評価して改善する方法です。
ソフトウェアの品質は、利用者や顧客の要求や要件を満たすことを指します。
テストは、品質コントロール(QC)を実施します。
プロセスの実装と改善のアプローチとして、品質保証(QA)があります。
JSTQBでは、ソフトウェアテストにテスト活動(分析・設計・実装・実行)とマネジメントをする役割の2つが主要な役割と記載されています。
ソフトウェアテストの目的
JSTQBでは、ソフトウェアテストの目的を以下が記載されています。
- 作業成果物の評価(要件、ユーザストーリー、設計書など)
- 欠陥の発見
- テスト対象のカバレッジの確保
- 要件飽和の検証
- テスト対象の契約、法律、規制の適合を検証
- ステークホルダーへの情報提供
- テスト対象の品質に対する信頼の積み上げ
- 期待通りの成果物かの妥当性確認(ステークホルダー)
JSTQBでは、欠陥や故障など以下のように定義されています。
-
エラー(誤り)
人が発生させた誤った結果
-
欠陥(バグ)
ソフトウェアやドキュメントなど要求や要件を満たさない不備
-
故障
コンポーネントやシステムが欠陥により期待通りに動作しなくなった結果
ソフトウェアテストの原則
JSTQBには、ソフトウェアテストの原則があります。
ソフトウェアテストの原則は、JSTQBのテストのガイドラインとし以下7つが記載されています。
-
テストは欠陥があることは示せるが、欠陥がないことは示せない
テストでは、ソフトウェアに欠陥がないことは証明できません。
-
全数テストは不可能
全てのテストは、時間が掛かりすぎるため現実的に難しいです。
-
早期テストで時間とコストを節約
ソフトウェア開発ライフサイクルの早期で欠陥を発見すると後期よりも修正コストが少なくすみます。
-
欠陥の偏在
特定のフィーチャーでエラーが集中することが多いです。
-
テストの弱化
同じテストを実施しても欠陥が発見されなくなってくる可能性が向上するためテストケースや内容の見直しが重要です。
-
テストはコンテキスト次第
テストはソフトウェアの種類やプロジェクトのテスト計画、テスト戦略で定義されたスコープや手法などでも異なるためコンテキストの理解が必要です。
-
「欠陥ゼロ」の落とし穴
テストが完了して欠陥がないまたは修正しても利用者の期待を満たせていない場合があります。
テストアナリスト
テストアナリストとは、ソフトウェアやシステムの品質を評価するためにテストの分析、設計、実装、実行を行うテスト技術者です。
ビジネスドメイン(以下ドメインと省略)の観点から貢献して、テスト技法やリスクベーステストなどテストの技術面でテストプロセスに参加して品質の向上に貢献します。
JSTQBのシラバス上では、テスト担当者やテストエンジニアも記載されていますが、これらの役割は主にテストの実行のみに特化しています。
JSTQBのシラバスにはテストテクニカルアナリストの記載がありますが、テストアナリストと比べて技術領域と担当するテストの品質特性が異なります。
テストプロセスにおけるテストアナリストのタスク
テストアナリストのタスクは前述している通り、テストの分析、設計、実装、実行です。
テストアナリストが担当するソフトウェア品質特性として、機能適合性や使用性がメインになります。
ソフトウェア品質特性とテストアナリストのタスク
ソフトウェア品質特性とは、品質を標準化して一定のレベルを保つために定められた主要なカテゴリです。
JSTQBのシラバスでは、ISO/IEC 25010が利用されており、ISO/IEC 25010では以下のように8つのカテゴリがあります。
-
機能適合性
ソフトウェアがユーザが要件を満たしているか評価します。
-
使用性
ユーザーがソフトウェアを効率的に使用できるか評価します。
-
互換性
ソフトウェアが他のシステムやソフトウェアとどれだけうまく連携できるか評価します。
-
信頼性
ソフトウェアが一定の条件下でどれだけ安定して動作するか評価します。
-
性能効率性
ソフトウェアがリソースをどれだけ効率的に使用するか評価します。
-
保守性
ソフトウェアがどれだけ容易に修正や改良ができるか評価します。
-
移植性
ソフトウェアが異なる環境でどれだけ容易に使用できるか評価します。
-
セキュリティ
ソフトウェアにセキュリティリスクがないか評価します。
テストアナリストが実施するソフトウェア品質特性については、ソフトウェア品質特性の章で詳細を記載します。
利用時の品質モデル
ISO/IEC 25010には、ソフトウェア品質特性以外にも利用時の品質モデルがあり、利用者が実際に利用するときの品質を定義しています。
利用時の品質モデルには、以下の5つの定義があります。
- 有効性
- 効率性
- 満足性
- リスク回避性
- 利用状況網羅性
テストプロセス
テストプロセスとは、ソフトウェアテストを進めるための工程や流れです。
JSTQBのシラバスによるとテストプロセスは以下の7つのプロセスが定義されています。
テストプロセスは、前の工程が全て完了していなくても、並行して次の工程を進めることが可能です。
これにより、完了した部分から順次次の工程に移行できます。
テスト計画
テスト計画は、テスト活動全体の戦略を定めます。
テストの目的、スコープ、スケジュール、必要なリソース(人員、ツール、時間)、リスクや課題を確認します。
テストポリシーとテスト戦略に基づいてテスト計画書(テストプロジェクトの前提と制約、ステークホルダー、予算とスケジュールなどを記載)を作成します。
テストすべき機能や品質特性とテストしない機能や品質特性のスコープを定義します。
テストのモニタリング、コントロール
テストのモニタリングは、テスト計画で定めた通りにテスト活動が進んでいるか監視します。
主に、リスク、欠陥、テスト、適用範囲をモニタリングします。
コントロールでは、モニタリング結果からテスト活動を調整するプロセスです。
テストのモニタリングとコントロールはテストが完了するまで継続します。
テスト進捗レポートを作成してテストの進捗をレビューします。
テスト分析
テスト分析は、テストベースを分析し、テスト可能なフィーチャーを識別して関連するテスト条件を定義し、優先順位を付けます。
関連するリスクとリスクレベルの分析やテスト対象を評価して欠陥の識別、試験性のアセスメントを行います。
テスト分析とは「何をテストするか?」が主な作業内容です。
テスト設計
テスト設計は、テスト条件を具体的なテストケースやテストウェア(テストチャーターなど)に変換する作業です。
カバレッジアイテムを識別し、テストデータの要件定義、テスト環境の設計、必要なインフラやツールの識別も行います。
テスト設計とは「どのようにテストするか?」が主な作業内容です。
テスト実装
テスト実装は、テスト実行に必要なテストウェアの作成や取得を含みます。
テストケースをテストプロシジャーに編成し、テストスイートにまとめます。
テストケースのレビューを実施します。
手動および自動のテストスクリプトを作成し、効率的なテスト実行のために優先順位を付けて配置します。
テストデータの作成やテスト環境を構築し、正しく設定されていることを検証します。
テスト実行
テスト実行は、スケジュールに従って手動または自動でテストを行い、結果を記録し、期待結果と比較します。
テスト実行は、欠陥を検出して品質向上に貢献します。テスト結果は建設的な方法で伝えます。
検出した欠陥を分析し、原因を特定して報告します。
テスト完了
テスト完了は、終了基準を満たしているか確認し満たしている場合に完了します。
テストウェアを識別して、保管または適切なチームに引き渡します。
レポートを作成して必要なステークホルダーに提供します。
テストアナリストの主な業務は、前述している通り3~6の分析、設計、実装、実行のプロセスです。
具体的な業務については各プロセスの詳細で説明します。
テスト計画、モニタリング、コントロール、テスト終了はテストマネージャーの役割に含まれます。
これらについては、テストマネージャーの章で詳しく説明します。
テストアナリストは、テスト計画、モニタリング、コントロール、テスト終了の各プロセスにおいて、テストマネージャーから依頼された業務を遂行し、必要な情報を提供する必要があります。
例えば、テスト計画ではテストに関わるスケジュールを作成して提供し、モニタリングやコントロールでは進捗レポートや正確な欠陥情報を提供することで、プロジェクトの推進に貢献します。
テストレベル
テストレベルとは、ソフトウェア開発でテスト活動を段階で実施するテストの種類です。
4種類のテストレベルがあります。
-
ユニットテスト
プログラムを構成するコンポーネント単位で実施するテストです。
単体テスト、コンポーネントテスト、モジュールテストとも呼ばれます。
ソースコード、システム構造設計書、モジュール仕様書などを基にテストを実施します。 -
結合テスト
複数のコンポーネントを組み合わせて実施するテストです。
コンポーネント統合テストやシステム統合テストがあります。
インターフェース仕様書、モジュール間の設計仕様書などを基にテストを実施します。 -
システムテスト
構築したシステム全体を通して実施するテストです。
テストする環境も実際に運用する環境か近い環境にします。
システム要件仕様書、機能仕様書、ユーザーストーリーなどを基にテストを実施します。 -
受け入れテスト
顧客の要件が通りに稼働するかを確認するテストです。
受け入れ基準、ユーザーストーリー、ビジネス要件などを基にテストを実施します。
テストレベルはレベルごとに目的や目標が異なります。
テストタイプ
テストタイプとは、ソフトウェア品質特性をまとめたものです。
JSTQBのシラバスでは、以下の4つのタイプが定義されています。
-
機能テスト
機能完全性、機能正確性、機能適切性
-
非機能テスト
性能効率性、互換性、使用性、信頼性、セキュリティ、保守性、移植性
-
ブラックボックステスト
「3. テスト技法」で説明します。
-
ホワイトボックステスト
「3. テスト技法」で説明します。
機能テストでは、「何をするのか」で非機能テストは「どのように動作するのか」に重点をおいてテストします。
テストレベルとテストタイプ
すべてのテストタイプはすべてのテストレベルで実行できます。
テストレベルで、どのテストタイプを実行するはテスト計画で定義します。
静的テスト
ソフトウェアを実行しないで、ドキュメントやソースコードをレビューして欠陥を検出するテスト実施方法です。
動的テスト
ソフトウェアを実行して、その結果から欠陥を検出するテスト実施方法です。
テストの独立性
テストの独立性は、テストを実施する際に、テスト担当者が開発チームや他の関係者から独立しているかです。
独立していることで、テストを客観的に実行できて品質や信頼性の向上が期待できます。
独立したテストは以下のような利点があります。
-
品質の向上
技術的視点やバイアスが異なるため開発者と異なる観点で欠陥を識別できて品質向上に寄与します。
-
要件の妥当性確保
ステークホルダーが想定しているシステムを検証することで要件の妥当性が確保されます。
独立したテストのデメリットとして、テスト担当者に情報が共有されなかったりテスト担当者がボトルネックとして扱われる場合があります。
テストの独立性についてはテストマネージャーの章で詳しく記載します。
テストに必要な用語
テストに関する用語を以下に記載します。
-
テストポリシー
高位レベルのドキュメントで、品質保証に対する会社の哲学やテスト方法やテストプロセスに関する会社の価値やゴールが記述されています。
テストプロセス改善活動やテストの効果と効率を評価するための方法が含まれる場合もあります。 -
テスト戦略
テスト戦略は、組織全体のテスト方法、リスク管理、高レベルのテスト活動に関するガイドラインが記述されています。
リスク管理・テスト計画・テスト実行・テストの管理方法などの詳細が含まれています。 -
テストベース
テスト対象となる情報やドキュメントのことです。
要件仕様書、設計書、ユーザーストーリー(ユーザからみた機能や要件を簡潔にしたもの)などが含まれます。 -
テスト可能なフィーチャー
テスト対象となるシステムやソフトウェアの機能や特性のことです。
ユーザーインターフェース、データ処理、セキュリティ機能などが該当します。 -
テストウェア
テストを実行するために必要なソフトウェアやツールのことです。
テストスクリプト、テストデータ、テスト環境などが含まれます。 -
テストケース
機能や要件を検証するために具体的な手順や条件を記述したものです。
テスト戦略に準拠して要件を遡って追跡することができます。
検証することが可能で繰り返し利用できるように考慮します。 -
テストスクリプト
テストケース通りに実施するテストです。
自動が付いていない場合、テスターがテストケース通りに実施していきます。 -
テストスイート
ソフトウェアテストを実施するためのテストケースの集まりです。
-
テストチャーター
探索的テストを行う際の指針や目標を記載したドキュメントです。
テストの目的、範囲、アプローチなどが記載されます。 -
テストプロシジャー
テストケースを実行するための具体的な手順や方法を記載したドキュメントです。
テストの準備、実行、結果の記録方法などが含まれます。 -
テストオラクル
テスト結果が正しいかどうかを判断するための基準や参照情報のことです。
期待される結果や動作を記述したドキュメントや仕様書、既存のシステムの出力結果などです。 -
ユーザストーリ
ユーザの視点で、要件やニーズから必要な機能を簡潔に記述したものです。
アジャイル開発のフレームワークです。 -
テストインフラストラクチャー
ソフトウェアテストを効率的かつ効果的に行うための場所、機器、担当者、ソフトウェア、ツール、周辺機器、通信機器、ユーザー権限、およびテストを実行するために必要な他のすべてのアイテムことです。
-
デバッグ
コンポーネント・システムの故障の原因を識別して修正することです。
「故障の再現」→「診断」→「原因の修正」のプロセスで実施します。 -
ドライバー
テスト対象のコンポーネントを呼び出す上位のモジュールやコンポーネントの代わりをします。
テスト対象のメソッドに渡すパラメータを用意して、戻りの値を受け取ります。 -
スタブ
テスト対象のコンポーネントが呼び出す下位のモジュールやコンポーネントの代わりをします。
呼び出したときに単に戻りの値を返すだけの動作をします。 -
モック
テスト対象のコンポーネントが依存する外部のモジュールやサービスの代わりをします。
-
メトリクス
メトリクスとは、目的や目標を達成するために使用される測定基準の指標です。
JSTQBのシラバスでは、テストのメトリクスにプロジェクト進捗メトリクス、テスト進捗メトリクス、プロダクト品質メトリクス、欠陥メトリクス、リスクメトリクス、カバレッジメトリクス、コストメトリクスがあります。
テストが主導するソフトウェア開発
通常は、プログラムの実装時にコードを記載してからテストケースを定義しますが、テストが主導するソフトウェア開発ではテストケースを定義してからコードを記載します。
-
テスト駆動開発(TDD)
テストケースを作成してから、テストケースを満たすようにコードを書いていきます。
-
受け入れテスト駆動開発)(ATDD)
受け入れ基準のテストケースを作成してから、テストケースを満たすようにコードを書いていきます。
ステークホルダーが理解できるように自然言語の文章で表現します。 -
振る舞い駆動開発
アプリケーションの振る舞いを自然言語で記載してそのテストケースを作成してからコードを記載します。
テスト分析
テストアナリストは、テスト計画で定義された範囲からテストベースを分析します。
テスト計画のテスト目的とテストベースを分析して、テスト条件を識別します。
テスト分析では、何をテストするかを決めます。
リスク分析とテスト計画で識別した優先度基準は、分析から実行するまでテストプロセス全体を通して維持する必要があります。
テスト分析のタスク
テストアナリストがテスト分析で実施するタスクには以下に記載します。
- テストベースの分析
- テストベースの欠陥識別
- テスト条件とフィーチャーの識別と優先度設定
- テストベースとテスト条件のトレーサビリティ確立
- リスクベースドテストのタスク実行
トレーサビリティを確立することは、テストのモニタリングとコントロールが効果的になり、カバレッジの評価とテスト監査時のITガバナンスの基準を満たすのに役立ちます。
テスト分析を開始するために満たす開始基準
テストアナリストが、テスト分析を効果的に進めるために満たすための基準を以下に記載します。
- テストベースの内容把握(要件、フィーチャー、ユーザーストーリーを把握して、情報の整理)
- テストベースのレビューとレビューの完了(アジャイル開発ではイテレーションの開始時にユーザーストーリーの洗練)
- テスト対象に対して、残りのテストタスクを完了するための予算とスケジュールの確保
テスト分析では、テスト条件を様々な詳細度合いで定義する必要があります。
テスト条件は、抽象的な条件で識別していき、具体的な条件を識別する階層アプローチで実施していきます。
詳細度合いは、ハイレベルとローレベルで定義することがあります。
ハイレベルは抽象的なアプローチで、ローレベルは具体的なアプローチです。
ハイレベルとローレベルの詳細と例を以下に記載します。
ハイレベル(アーキテクチャ)
システム全体を抽象的に捉えて、テストの設計指針や基本的な方向性を記載します。
ハイレベルでは、具体的な記載がないため、テスト実施者によってテストケースが異なります。
以下に例を記載しますが、何を買うかやいくら入れるかの記載がありません。
例)自動販売機にお金を入れて、飲み物を購入する。
期待結果:入れる金額や購入する飲み物などテスト実施者の内容によって異なる。
ハイレベルの長所と短所
ハイレベルの長所について以下に記載します。
-
テストを実施する時のガイドラインを提供して、実行時にデータや手順を実行者が確定します。
そのため、テストを実行する度にデータや手順を柔軟に変更にできます。 - 実行する度に異なるテストになる可能性があるため、リスクカバレッジが優れています。
- 要件のプロセスで作成できるため、早い段階で定義可能です。
- テストアナリストの経験を活用できます。
- 詳細なドキュメントが不要な場合に適しています。
- 異なるテストデータを使用でき、再利用性の向上が期待できます。
ハイレベルの短所について以下に記載します。
- 再現性が低く、検証が困難です。
- 経験のあるテスト担当者が必要です。
- 自動化する際に詳細な情報が不足し、誤った結果を検証するリスクがあります。
ローレベル(コンポーネント)
テストを具体的にし記載します。
そのため、テストを実行者による違いがなく、同じ結果になります。
詳細なテスト手順をドキュメント化し、実施するテストをスクリプトテストともいいます。
ハイレベルの設計を基にして具体的な内容に落とし込んで、実際のテストケースやシナリオを作成してその流れでテストが実行できるように記載します。
以下に例を記載しますが、何をいくら入れて買うかも記載します。
例)自動販売機に150円を入れて、120円の水を購入する。
期待結果:水がと30円のおつりがでること。
ローレベルの長所と短所
ローレベルの長所について以下に記載します。
- 詳細な情報が提供されるため、経験の少ないテスト担当者でも実行可能です。
- 異なる担当者が再実行しても同じ結果が得られます。
- 自明ではない欠陥を検出できます。
- 監査や独立した検証が可能です。
- 自動化に使う場合、実装時間を削減できます。
ローレベルの短所について以下に記載します。
- 作成とメンテナンスに多くの労力が必要です。
- テスト担当者の創造力を制限します。
- テストベースを明確に定義する必要があります。
- トレーサビリティの確保に多くの労力が必要です。
プロダクトリスクが定義済みの場合、各リスクに対処するためのテスト条件を識別し、リスクアイテムに遡る必要があります。
テスト戦略やテスト計画で識別されたテスト技法を適用することで、テスト分析活動を促進してテスト分析の目的達成が容易になります。
テスト分析の目的
テスト分析の目的は、以下の4つです。
- テスト条件の識別
- 重要なテスト条件のカバレッジ達成
- 正確なテスト条件の定義
- 要件の明確化とテストのプロジェクトゴールへの一致
テスト分析の完了は、テスト領域が明確で次のテスト設計が行えるようになっていることです。
テスト設計
テストアナリストは、テスト分析で決めたテストする項目をどのようにテストするかテスト設計で決めます。
テスト設計のタスク
テストアナリストがテスト設計で実施するタスクには以下があります。
- ローレベルテストケースまたはハイレベルテストケースがどのテスト領域で最も適切であるかを判断します。
- 必要なカバレッジを確保するテスト技法を決定します。
- 識別したテスト条件をカバーするテストケースおよびテストケースをセットします。
- テスト条件とテストケースに準じた必要なテストデータを識別します。
- テスト環境を設計し、必要なインフラストラクチャーやツールを識別します。
- テストベース、テスト条件、テストケースなどの間で双方向のトレーサビリティを確立します。
テストケースを設計するときには、テストケースは再利用・検証・トレーサビリティがを考慮する必要があります。
テスト設計の留意点
テストアナリストが、テスト設計を実施するときに留意する点を次に記載します。
- テストアイテムによって、実行手順を指定するテストスクリプトよりもテスト条件のみを定義するべきと設計した場合はテスト条件をガイドとして使用できるように定義します。
- 合格と不合格の基準を明確にします。
-
テストケースは、作成者以外のテスト担当者が理解できるように定義します。
作成者がテストを実行しない場合、他の担当者がテスト目的や重要事項を理解するために、仕様化されたテストケースを参照する必要があります。 - テストケースは、開発者や監査担当者などの他のステークホルダーも理解できるようにします。
- テストケースは、ユーザーインターフェースを通じた相互作用だけでなく、他のシステムや技術的/物理的イベントとの相互作用もカバーします。
- テスト対象の振る舞いだけでなく、様々なテスト対象間のインターフェースもテストするように設計します。
- テスト設計の労力は、リスクレベルとビジネス価値に応じて優先度を割り当て、バランスを取ります。
テスト設計の識別するアイテム
テストアナリストが、テスト設計を実施するときに識別するアイテムを次に記載します。
- テストの目的
- テスト実行前の事前条件(テスト環境やシステムの状態など)
- テストデータ要件
- テスト実施後の期待結果
- テスト実行後の事後条件(システムの状態、後続処理のトリガーなど)
テスト実施後の期待結果は、テストオラクルが必要になることが多いです。
テストオラクルがない場合、誤った期待結果を記載したり、期待結果の作成に長い時間を費やすこともあります。
テスト設計では、テスト成果物の文書化に影響を与える要素として、プロジェクトリスク、付加価値、標準や規制、SDLC、トレーサビリティなどがあります。
また、テストケースやリスク分析などの成果物は、テスト設計のレビュー対象です。
そのため、テスト分析およびテスト設計は、静的テストとみなされることがあります。
終了基準は測定可能で、次のプロセス以降で必要な情報が提供され、準備が整っていることが求められます。
テスト実装
テストアナリストはテスト分析とテスト設計に基づいて、テスト実行を行うために必要なものを全て準備します。
テスト実装のタスク
テストアナリストがテスト実装で行う作業を以下に記載します。
-
テスト手順や自動テストスクリプトの作成
テストケースの効率的な実行順序を決定します。
実行順序の決定には、制約や依存関係を識別する必要があります。 -
テスト手順と自動テストスクリプトをテストスイートとして整理
テストを効率的に行えるようにテストスイートを整理します。
これにより、関連のテストがまとめて実行できて効率化が図れます。 -
テストケースとテストスイートの優先度付けについてテストマネージャーに確認
優先度は、リスク分析およびテスト計画で識別した優先度で優先度付けしテストマネジャーに確認をします。
特にリスクレベルは、テストケースの優先順位に影響します。 -
テスト実行スケジュールの作成
開発側のリリース計画により、テスト実行が制限されます。
ソフトウェアがテストできる順序とプログラムのリリースの整合性が合うように調整します。 -
テストデータとテスト環境の準備
テストデータは重要で、欠陥を検出するための入力データや環境データを作成します。
テスト環境構築は、本番環境やエンドユーザー環境を再現する必要があります。
正しいテスト環境てテストを実施することで、欠陥の洗い出しや環境に依存する故障や性能問題が発生しないようにできます。
テスト実行時に環境を変更する場合、その影響を評価する必要があります。 -
テストベースとテストウェアのトレーサビリティの更新
テストベース、テスト条件、テストケース、テスト手順、テストスクリプト、テストスイートなどのテストウェア間のトレーサビリティを更新します。
通常、テストケースを作成してスクリプトテストを実施しますが、アジャイルなど経験ベースのテスト技法ではスクリプトがない場合もあります。
経験ベースのテスト技法を正しく実施できない場合、期間と予測が困難になり欠陥の検出も低下することが考えられます。
テスト実装では、テスト計画で決定したバランスのとれたアプローチでテストを実装します。例えば、リスクベースのテスト戦略と対処的テスト戦略を組み合わせることがあります。
リスクベースのテスト戦略は次の章で説明します。
対処的テスト戦略は、戦略を策定せずに発生したインシデントにに都度対応していく手法です。
そのため、対処的テスト戦略は軽量で欠陥検出には有効ですが、以下の短所もあります。
- 専門知識が必要
- 期間の予測が困難
- カバレッジの追跡が困難
- 再現性を維持するために優れたドキュメントやツールのサポートが必要
テストアナリストは、イテレーティブやインクリメンタル開発モデルのときに開発側のリリースとテスト可能な順序を調整します。
終了基準として、テスト環境が構築されてすべてのテストスクリプト・テストウェア・ツールなどテスト実行に必要なものが使用可能であることです。
この作業で、構成管理・欠陥マネジメント・テスト結果の記録と管理が行えるようになっています。
また、終了基準を評価するテスト結果レポートの作成に必要なデータ収集手順も検証します。
テスト実行
テストアナリストは、テスト実装で実装したテストスイートやテストウェアを利用してテスト計画で定めたスケジュールに沿ってテストを実施します。
テスト実行はテスターとテストアナリストが実施します。
テスト実行のタスク
テスト実行で実施する作業を以下に記載します。
- 手動テスト(探索的テストを含む)の実行
- 自動テストの実行
- 実行結果と期待結果の比較
- 欠陥を分析して、可能性のある原因を特定
- 故障を観察し、観察に基づいて欠陥を報告
- テスト実行の実際の結果を記録
- テスト結果を検討するためテストベースとテストウェアの間でトレーサビリティを更新
- リグレッションテストの実行
テストアナリストはテスト実行中に以下のタスクも行います。
- 欠陥が集中した場合、追加のテストが必要かどうかを検討し、テスト対象の特定
- 探索的テストの結果から、将来の探索的テストに対する提案を作成
- テスト実行タスクで取得した情報から新しいリスクの識別
- テスト実装活動の成果物を改善するための提案の作成
ソフトウェア開発ライフサイクルにおけるテスト
ソフトウェア開発ライフサイクル(以下、SDLCと省略)は、ソフトウェアを開発するプロセス(設計、開発、テストなど)を効率的かつ高品質なソフトウェアを作成するために定められた一連のプロセスや手順です。
このライフサイクルは、ソフトウェアの構想からリリース後の運用・保守に至るまでの各フェーズで構成されていて、それぞれのフェーズに特有のタスクが含まれます。
JSTQBのシラバスでは、以下が紹介されています。
-
シーケンシャル開発モデル
ウォーターフォールモデル、V字モデル、Wモデルなど
-
イテレーティブ開発モデル
スパイラルモデル、プロトタイピングなど
-
インクリメンタル開発モデル
統一プロセス
SDLCは、テスト活動の以下に対して影響を与えます。
- テスト活動・範囲・タイミング
- テストドキュメントの詳細レベル
- テスト技法とテストアプローチの選択
- テスト自動化の範囲
- テスト担当者の役割と責任
テストアナリストの関与
テストアナリストが関わるタイミングや関わり方、必要な時間、利用可能な情報、期待される内容は、使用するSDLCによって異なります。
テストアナリストは、他の関連組織に提供する情報の種類を理解しておくことが重要です。
JSTQBのシラバスには、以下のように提供先と提供する情報が記載されています
-
要求エンジニアリングおよびマネジメント
要件レビューのフィードバックを行います。
-
プロジェクトマネジメント
スケジュールに対する入力を行います。
-
構成管理および変更管理
ビルド検証テストの結果、バージョンコントロールの情報を提供します。
-
ソフトウェア開発
検出された欠陥を通知します。
-
ソフトウェアメンテナンス
欠陥レポート、欠陥除去効率、確認テストを実施します。
-
テクニカルサポート
正確に文書化した回避策および既知の問題を確認します。
-
テクニカルドキュメント作成
テクニカルドキュメントの入力とドキュメントのテクニカルレビューを行います。
前述している通り、テストアナリストが関与するタイミングや内容はSDLC事で異なります。
テストアナリストが各SDLCで関与するタイミングや内容を各SDLC毎に記載します。
シーケンシャル開発モデル
シーケンシャル開発モデルとは、ソフトウェア開発プロセスを一連の順序にして工程で分けて進行する方法です。
各工程は明確に定義されていて、前の工程が完了するまでは次の工程に移行しません。
次の工程に移行することをステップ移行といい、一般的にはドキュメントやソースコードなどのチェックを行う審査があります。 V字モデルは以下の図のように、オレンジ色の工程が上流工程で、青色の工程が下流工程を示しています。
シーケンシャル開発モデルでは、要求分析が完了したら次の工程である要件定義を実施します。
要求分析には受け入れテスト、基本設計には結合テストと設計に応じてテストレベルが異なります。
ソフトウェア開発ライフサイクルの早い段階(要件定義や設計段階など)でテスト活動を行うことをシフトレフトテストといいます。
このアプローチを行うことで、バグやインシデントを早期に発見・修正して、後ろの工程で発生する修正コストやリスク軽減できます。
シーケンシャル開発にはWモデルがあり、それは従来のV字モデルで課題となっていた「手戻りが困難」「テスト活動が後ろの工程に集中」などの問題を改善するためのモデルです。
このモデルでは、シフトレフトテストなどのアプローチを活用し、開発工程とテスト工程を密接に連携させます。
各開発段階に対応するテスト活動を並行して進めることで、バグや問題を早期に発見し、品質を保証しながら効率的に開発を進めることが可能となります。
シーケンシャル開発モデルでのテストアナリストの役割
シーケンシャル開発モデルでは、テストアナリストがシステムテストを担当することが多くなります。
システムテストでは、プロジェクト計画と同時にシステムテストの計画をはじめ、システムテストが完了するまでテストマネージャーがモニタリングとコントールします。
テストアナリストは、以下のように対応します。
テスト分析・設計
要件定義に基づいて実施すべきテストを分析し、具体的なテストケースやテストシナリオを設計します。
テスト計画書に基づき、テストに必要な工数を見積もることで、テストスケジュールの詳細な調整や実行計画の策定を支援します。
このプロセスで作成されたスケジュールは、プロジェクト全体の進行スケジュールに影響を与える可能性があるため、テストアナリストには正確な分析力と協調性が求められます。
テスト実装
システムテストを実行するためには、テストを行う環境が必要です。
この環境構築はシステム設計時から開始する場合もありますが、コーディングやコンポーネントテストと同時に開始することも多いです。
そのため、システムテスト環境の準備がシステムテスト実行の開始数日前まで続くこともあり、スケジュールが不十分になるリスクもテストアナリストは考慮して進めます。
テスト実行
テスト実行するには、テストの開始基準と終了基準の事前条件を定義して、その条件を満たす必要があります。
条件を満たした場合にテストを開始することができますが、必要に応じて事前条件を免除する場合もあります。
テストの開始基準の事前条件は、リソースの可用性、テストウェアの可用性、テスト対象の初期品質レベルなどです。
テスト実行の事前条件にコンポーネントテストや統合テストの終了基準が満たされている必要があります。
テスト完了
テストの終了基準の事前条件には、テストケースの結果(達成されたカバレッジレベル、未解決の欠陥数、欠陥密度、テスト結果など)や、テスト計画で計画されたテストが計画通りに完了したことなどがあります。
システムテストの終了基準を満たした後に、システムテストの完了活動が実施されます。
システムテスト以外のテストレベルにもテストアナリストが関与することはあります。
テストレベルごとに目的や対象は異なり、開始基準と終了基準も定義されますので注意が必要です。
イテレーティブ・インクリメンタル開発モデル
イテレーティブ・インクリメンタル開発モデルとは、システムを小さな部分に分割し、その分割した部分ごとにソフトウェア開発プロセスを繰り返す方法です。
各イテレーションでは、静的テストと動的テストの両方が実行されます。
段階的な開発、繰り返しのプロセス、早期のフィードバック、リスク軽減などの特徴があります。
要件の変更が発生しやすいプロジェクトに向いていますのでユーザストーリなどテストが重要になります。
繰り返す作業が多いため、修正した機能と影響する機能にはリグレッションテスト(回帰テスト)が必要不可欠で、リグレッションテストを自動化することで効率よくテストを実施することができます。
イテレーティブ・インクリメンタルでは、以下のように小さな部分に分割したのを1つのイテレーションとして分割した分繰り返して実施します。
要件定義、設計、開発、テストの各活動をアクティビティといいます。
図のテストには、テスト分析、設計、実装、実行が含まれています。
そのため、イテレーションごとにテスト分析、設計、実装、実行を行います。
イテレーティブ開発モデルとインクリメンタル開発モデルでは、アクティビティの順序は変更可能でアクティビティを省略することもできます。
アクティビティはイテレーションごとに行い、プロジェクトの開始時に計画を立てて、終了時にタスクを完了させます。
テストアナリストは、イテレーションやインクリメンタルな活動中に、よりインタラクティブな役割を担います。
ハイブリッドモデル
ハイブリッドモデルとは、シーケンシャル開発モデル、イテレーティブ開発モデル、インクリメンタル開発モデルなどのSDLCを組み合わせて使用します。
それにより、シーケンシャル開発モデルのステップ移行を取り入れつつ、イテレーティブ開発モデルの繰り返しのサイクルを合わせます。
繰り返しのサイクルを取り入れつつ、各サイクルの中でV字モデルのように計画、設計、実装、テストを行います。
顧客の要件が変化することを前提として、柔軟に対応することができます。
アジャイルソフトウェア開発
アジャイルソフトウェア開発は、ソフトウェア開発の手法で世の中の変化に柔軟に対応します。
そのため、ステークホルダーと密な関係を気づいていくことが大切です。
前述したイテレーティブ・インクリメンタル開発モデルでスクラム・カンバン・エクストリームプログラミングなどがあります。
テストアナリストの役割が定義されていないことが多く、ドキュメントの作成も最低限になっています。
開始時点で、テスト活動を実施して定期的にコミュニケーションを実施することが大切です。
テストアナリストの役割
使用するSDLCに関わらず、テストアナリストは期待される関与の度合いとタイミングを理解する必要があります。
特定のSDLCに応じて、事前に定義されたロールモデルに固執しない活動と関与のタイミングを調整してソフトウェア品質に貢献します。