JSTQBのシラバスを読む【第二章】

公開日: 2025/7/9

本記事ではJSTQB:Foundation Levelのシラバスを読んでいきます。

ISTQBテスト技術者資格制度
Foundation Level シラバス 日本語版 Version 2023V4.0.J01:
https://jstqb.jp/dl/JSTQB-SyllabusFoundation_VersionV40.J01.pdf

1. ソフトウェア開発ライフサイクル全体を通してのテスト


キーワード
受け入れテスト、ブラックボックステスト、コンポーネント統合テスト、コンポーネントテスト、確認テスト、機能テスト、統合テスト、メンテナンステスト、非機能テスト、リグレッションテスト、シフトレフト、システム統合テスト、システムテスト、テストレベル、テスト対象、テストタイプ、ホワイトボックステスト

2. コンテキストに応じたソフトウェア開発ライフサイクルでのテスト


ソフトウェア開発ライフサイクル(SDLC)モデルとは、ソフトウェア開発プロセスを抽象的かつハイレベルに表現したものである。SDLC モデルは、このプロセスの中で実施するさまざまな開発フェーズや活動の種類が、論理的かつ時系列的にどのように互いに関連しているかを定義する。

SDLC モデルの例としては、シーケンシャル開発モデル(例えば、ウォーターフォールモデル、V 字モデル)、イテレーティブ開発モデル(例えば、スパイラルモデル、プロトタイピング)、インクリメンタル開発モデル(例えば、統一プロセス)などがある。

ソフトウェア開発プロセスの中には、より詳細なソフトウェア開発手法やアジャイルプラクティスで説明できる活動もある。例としては、受け入れテスト駆動開発(ATDD)、振る舞い駆動開発(BDD)、ドメイン駆動設計(DDD)、エクストリームプログラミング(XP)、フィーチャー駆動開発(FDD)、カンバン、リーン IT、スクラム、テスト駆動開発(TDD)がある。

1.ソフトウェア開発ライフサイクルがテストに与える影響

テストの成功のためには、SDLC への適応をしなければならない。SDLC の選択は、以下のことに影響する:

・テスト活動の範囲とタイミング(テストレベルやテストタイプなど)
・テストドキュメントの詳細レベル
・テスト技法とテストアプローチの選択
・テスト自動化の範囲
・テスト担当者の役割と責任

シーケンシャル開発モデルでは、初期段階では、テスト担当者は通常、要件レビュー、テスト分析、およびテスト設計に参加する。実行可能なコードは通常、後のフェーズで作成されるため、通常、動的テストは SDLC の初期には実施できない。

イテレーティブ開発モデルやインクリメンタル開発モデルでは、各イテレーションで作業成果物であるプロトタイプやプロダクトインクリメントを提供することが前提となっているものがある。これは、各イテレーションにおいて、静的テストと動的テストの両方が、すべてのテストレベルで実行される可能性があることを意味する。インクリメントを頻繁に提供するためには、迅速なフィードバックと広範なリグレッションテストが必要となる。

アジャイルソフトウェア開発では、プロジェクトを通じて変更が生じる可能性があることを想定している。そのため、アジャイルプロジェクトでは、作業成果物の文書化を軽量化し、リグレッションテストを容易にするためのテスト自動化を充実させることが好まれる。また、手動テストのほとんどは、事前の大規模なテスト分析やテスト設計を必要としない経験ベースのテスト技法(4.4 節参照)を使用して行われる傾向がある。

2.ソフトウェア開発ライフサイクルとよい実践例

選択した SDLC モデルとは関係なく、よいテストの実践には、以下のようなものがある。

・各開発活動に対応してテスト活動がある。そのため、すべての開発活動が品質コントロールの
対象となる。
・異なるテストレベル(2.2.1 項参照)には、冗長性を避けつつ適切に包括したテストをすること
ができる、そのレベル特有の異なる目的がある。
・各テストレベルのテスト分析や設計は、対応する SDLC の開発フェーズの間に開始する。そう
することで、テストが早期テストの原則(1.3 節参照)に従うことができる。
・テスト担当者は作業成果物のドラフトができたらすぐにそのレビューに関与する。そうするこ
とで、この早期テストと欠陥検出がシフトレフト戦略(2.1.5 項参照)を支援できる。

3.テストが主導するソフトウェア開発

TDD、ATDD、BDD は、類似の開発アプローチであり、いずれもテストが開発を導く手段であると定義している。これらのアプローチはいずれも、コードを書く前にテストケースを定義するため、早期テストの原則(1.3 節参照)を実装し、シフトレフトアプローチ(2.1.5 項参照)を採用している。

これらは、イテレーティブ開発モデルをサポートする。これらのアプローチの特徴は、以下の通りである:

テスト駆動開発(TDD):
・(広範なソフトウェア設計の代わりに)テストケースを通じてコーディングを導く(Beck
2003)
・テストを最初に書き、次にテストを満たすようにコードを書き、そしてテストとコードをリフ
ァクタリングする

受け入れ

3. テストレベルとテストタイプ


テストレベルは、系統的にまとめ、マネジメントしていくテスト活動のグループである。各テストレベルは、個々のコンポーネント単位から完成したシステムまで、または必要に応じてシステムオブシステムズまでの開発段階に応じたテストプロセスのインスタンスである。

テストレベルは SDLC 内の他の活動と関連付けられる。シーケンシャルな SDLC モデルでは、テストレベルは、あるレベルの終了基準が次のレベルの開始基準の一部であるように定義されることが多い。いくつかのイテレーティブなモデルにおいては、これは適用されないかもしれない。開発活動は、複数のテストレベルにまたがることがある。テストレベルは、時間的に重なることがある。

テストタイプは、特定の品質特性に関連するテスト活動のグループであり、それらのテスト活動のほとんどは、すべてのテストレベルで実行することができる。

1.テストレベル

本シラバスでは以下の 5 つのテストレベルを説明する:

コンポーネントテスト(ユニットテストとも呼ばれる)は、コンポーネントを単独でテストすることに焦点を当てる。コンポーネントテストは、テストハーネス、またはユニットテストフレームワークのような特定のサポートを必要とすることが多い。コンポーネントテストは、通常、開発者が開発環境で行う。

コンポーネント統合テスト(ユニット統合テストとも呼ばれる)は、コンポーネント間のインターフェース、および相互処理に焦点を当てる。コンポーネント統合テストは、ボトムアップ、トップダウン、ビッグバンといった統合戦略のアプローチに大きく依存する。

システムテストは、多くの場合、エンドツーエンドのタスクに対する機能テストや品質特性に対する非機能テストといったシステムやプロダクト全体の振る舞いや能力の全般に焦点を当てる。一部の非機能品質特性については、本番相当のテスト環境において、すべて揃ったシステムでテストすることが望ましい(例えば、使用性テスト)。サブシステムのシミュレーションを使用することも可能である。システムテストは、システムの仕様に関連するものであり、独立したテストチームによって実施されることがある。

システム統合テストは、テスト対象システムと他のシステム、外部サービスとのインターフェースのテストに焦点を当てる。システム統合テストには、できれば運用環境に近い適切なテスト環境が必要となる。

受け入れテストは、妥当性確認と、デプロイの準備ができていることの実証に焦点を当てる。これは、システムがユーザーのビジネスニーズを満たしていることを意味する。受け入れテストは、想定ユーザーによって実施をすることが理想的である。受け入れテストの主な形式としては、ユーザー受け入れテスト(UAT)、運用受け入れテスト、契約、および規制による受け入れテスト、アルファテストおよびベータテストがある。

テストレベルは、テスト活動の重複を避けるため、以下の代表的な属性のリストで区別する:

・テスト対象
・テスト目的
・テストベース
・欠陥、および故障
・アプローチと責務

2.テストタイプ

テストタイプには多くのものが存在し、プロジェクトに適用することができる。本シラバスでは 4 つのテストタイプを取り上げる。

機能テストでは、コンポーネント、およびシステムが実行する機能を評価する。機能とはテスト対象が「何」をすべきかである。機能テストの主な目的は、機能完全性、機能正確性、および機能適切性をチェックすることである。

非機能テストでは、コンポーネント、およびシステムが実行する機能特性以外の属性を評価する。非機能テストは、システムが「どのようにうまく振る舞うか」をテストする。非機能テストの主な目的は、非機能的なソフトウェア品質特性をチェックすることである。ISO/IEC 25010 標準では、非機能ソフトウェア品質特性について、以下のように分類している:

・性能効率性
・互換性
・使用性
・信頼性
・セキュリティ
・保守性
・移植性

非機能テストは、ライフサイクルの早期(例えば、レビューやコンポーネントテスト、システムテストの一部として)に開始するのが適切な場合もある。多くの非機能テストのテストケースは、同じ機能テストのテストケースを使用するため、機能テストのテストケースから導出する。ただし、機能

4. メンテナンス(保守)テスト


メンテナンスにはさまざまなカテゴリーがある。メンテナンスには、修正を伴うもの、環境の変化に適応するもの、パフォーマンスや保守性を改善するもの(詳細は ISO/IEC 14764 を参照)などがある。そのため、計画的なリリース/デプロイと計画外のリリース/デプロイ(ホットフィックス)が含まれる。システムの他の領域への潜在的な影響に基づき変更をするべきかどうかを判断するために、変更をする前に影響度分析を行うことがある。本番稼働中のシステムに対する変更のテストには、変更の実装の成功を評価することと、変更されないシステムの部分(通常はシステムの大部分)で起こりうるリグレッションをチェックすることの両方が含まれる。

メンテナンステストの範囲は、典型的には次に依存する:

・変更のリスクの度合い
・既存システムの大きさ
・変更の大きさ

メンテナンスのきっかけやメンテナンステストのきっかけは、以下のように分類する:

・計画的な機能拡張(すなわち、リリースベース)、修正を伴う変更またはホットフィックスと
いった改良。
・あるプラットフォームから別のプラットフォームへといった運用環境の更新、または移行。
新しい環境や変更されたソフトウェアに関連するテストが必要となる場合があり、別のアプリ
ケーションのデータを保守しているシステムに移行する場合は、データ変換のテストが必要と
なる。
・アプリケーションの寿命などによる廃棄。

システムを廃棄する際、長期間のデータ保持が要件となる場合は、データアーカイブのテスト
が必要となることがある。また、アーカイブ期間中にデータの取得が必要な場合は、アーカイ
ブ後の復元や取得手順のテストも必要になることがある。