開発プロセス
開発プロセスとは、ソフトウェア開発における一連の活動や手順のことです。
ソフトウェアの開発を体系化したものとして、ソフトウェア開発ライフサイクル(以下、SDLC)があります。
SDLCは、設計・開発・テストなどの工程を通じて、効率的かつ高品質なソフトウェアを作成するために定められたプロセスの体系です。
このライフサイクルは、ソフトウェアの構想段階からリリース後の運用・保守に至るまでの各フェーズで構成され、それぞれのフェーズには特有のタスクが含まれます。
JSTQBのシラバスでは、SDLCとして以下が紹介されています。
-
シーケンシャル開発モデル
ウォーターフォールモデル、V字モデル、Wモデルなど
-
イテレーティブ・インクリメンタル開発モデル
ラピッドアプリケーション開発(RAD)、ラショナル統一プロセス(RUP)など
-
ハイブリット開発モデル
シーケンシャル開発モデル、イテレーティブ開発モデル、インクリメンタル開発モデルなどの組み合わせ
-
アジャイル開発モデル
スクラム、エクストリームプログラミング(XP)など
-
スパイラルモデル
スパイラルモデル、プロトタイピング
SDLCは、テスト活動の以下に対して影響を与えます。
- テスト活動・範囲・タイミング
- テストドキュメントの詳細レベル
- テスト技法とテストアプローチの選択
- テスト自動化の範囲
- テスト担当者の役割と責任
テストアナリストの関与
テストアナリストが関わるタイミングや関わり方、必要な時間、利用可能な情報、期待される内容は、使用するSDLCによって異なります。
テストアナリストは、他の関連組織に提供する情報の種類を理解しておくことが重要です。
JSTQBのシラバスには、以下のように提供先と提供する情報が記載されています
-
要求エンジニアリングおよびマネジメント
要件レビューのフィードバックを行います。
-
プロジェクトマネジメント
スケジュールに対する入力を行います。
-
構成管理および変更管理
ビルド検証テストの結果、バージョンコントロールの情報を提供します。
-
ソフトウェア開発
検出された欠陥を通知します。
-
ソフトウェアメンテナンス
欠陥レポート、欠陥除去効率、確認テストを実施します。
-
テクニカルサポート
正確に文書化した回避策および既知の問題を確認します。
-
テクニカルドキュメント作成
テクニカルドキュメントの入力とドキュメントのテクニカルレビューを行います。
前述している通り、テストアナリストが関与するタイミングや内容はSDLC事で異なります。
テストアナリストが各SDLCで関与するタイミングや内容を各SDLC毎に記載します。
シーケンシャル開発モデル
シーケンシャル開発モデルとは、ソフトウェア開発プロセスを一連の順序にして工程で分けて進行する方法です。
各工程は明確に定義されていて、前の工程のすべての成果物と活動が完了するまでは次の工程(フェーズ)に移行しません。
-
要求分析
要求分析は、プロジェクトの初期段階で顧客やステークホルダーのニーズを明確にします。
システムが満たすべき機能や性能の要求を洗い出します。 -
要件定義
要求分析で洗い出したシステムが満たすべき機能や性能の要求を具体的なシステム要件にします。
機能要件(システムが何をすべきか)と非機能要件(システムのパフォーマンス、セキュリティなど)を定義します。 -
基本設計
要件定義を基に、システム全体の構造を設計します。
システムアーキテクチャやデータフロー、主要コンポーネント、ユーザーインターフェースなどの設計を行います。 -
詳細設計
基本設計に基づいて、各コンポーネントの詳細な設計を行います。
データベーススキーマ、アルゴリズム、インターフェースなどコーディングが行えるように詳細に設計します。 -
コーディング
詳細設計書に基づいて、システム全体を構築して実際のプログラムをコーディングします。
-
ユニットテスト
コーディングした各コンポーネントを詳細設計に基づいて単体でテストします。
-
結合テスト
ユニットテストが完了した各コンポーネントを統合し、基本設計に基づいてテストします。
-
システムテスト
システム全体を要件定義に基づいてテストします。
機能テスト、性能テスト、セキュリティテストなどが対象になります。 -
テスト
要求分析で顧客やステークホルダーのニーズが満たせているからテストします。
顧客が実際のシステムを検証し、問題がなければ、システムは正式にリリースされます。
次の工程に移行することをステップ移行といい、一般的にはドキュメントやソースコードなどのチェックを行う審査があります。 V字モデルは以下の図のように、オレンジ色の工程が上流工程で、青色の工程が下流工程を示しています。

シーケンシャル開発モデルでは、要求分析が完了したら次の工程である要件定義を実施します。
要求分析には受け入れテスト、基本設計には結合テストと設計に応じてテストレベルが異なります。
ソフトウェア開発ライフサイクルの早い段階(要件定義や設計段階など)でテスト活動を行ってフィードバックを行うことをシフトレフトテストといいます。
このアプローチを行うことで、欠陥やインシデントを早期に発見・修正して、後ろの工程で発生する修正コストやリスク軽減できます。
シーケンシャル開発にはWモデルがあり、それは従来のV字モデルで課題となっていた「手戻りが困難」「テスト活動が後ろの工程に集中」などの問題を改善するためのモデルです。
このモデルでは、シフトレフトテストなどのアプローチを活用し、開発工程とテスト工程を密接に連携させます。
各開発段階に対応するテスト活動を並行して進めることで、欠陥や問題を早期に発見し、品質を保証しながら効率的に開発を進めることが可能となります。
システムテストでは、プロジェクトの開始から計画が始まり各プロセスの開始時期は以下になります。
-
分析および設計
要求分析から詳細設計までのプロセスと並行して実施
-
テスト実装
基本設計時で開始したり、コーディングやユニットテストど同時に実施
-
テスト実行
システムテスト開始基準に合致(または条件付き免除)したときに開始し、終了基準に合致するまで実行を継続
テストログ保管や欠陥レポートやテスト結果のレポートを作成 -
システムテスト終了作業
システムテスト終了基準に合致しテスト実行の終了を宣言
シーケンシャル開発モデルでのテストアナリストの役割
シーケンシャル開発モデルでは、テストアナリストがシステムテストを担当することが多くなります。
システムテストでは、プロジェクト計画と同時にシステムテストの計画をはじめ、システムテストが完了するまでテストマネージャーがモニタリングとコントールします。
テストアナリストは、以下のように対応します。
テスト分析・設計
要件定義に基づいて実施すべきテストを分析し、具体的なテストケースやテストシナリオを設計します。
テスト計画書に基づき、テストに必要な工数を見積もることで、テストスケジュールの詳細な調整や実行計画の策定を支援します。
このプロセスで作成されたスケジュールは、プロジェクト全体の進行スケジュールに影響を与える可能性があるため、テストアナリストには正確な分析力と協調性が求められます。
テスト実装
システムテストを実行するためには、テストを行う環境が必要です。
この環境構築はシステム設計時から開始する場合もありますが、コーディングやコンポーネントテストと同時に開始することも多いです。
そのため、システムテスト環境の準備がシステムテスト実行の開始数日前まで続くこともあり、スケジュールが不十分になるリスクもテストアナリストは考慮して進めます。
テスト実行
テスト実行するには、テストの開始基準と終了基準の事前条件を定義して、その条件を満たす必要があります。
条件を満たした場合にテストを開始することができますが、必要に応じて事前条件を免除する場合もあります。
テストの開始基準の事前条件は、リソースの可用性、テストウェアの可用性、テスト対象の初期品質レベルなどです。
テスト実行の事前条件にコンポーネントテストや統合テストの終了基準が満たされている必要があります。
テスト完了
テストの終了基準の事前条件には、テストケースの結果(達成されたカバレッジレベル、未解決の欠陥数、欠陥密度、テスト結果など)や、テスト計画で計画されたテストが計画通りに完了したことなどがあります。
システムテストの終了基準を満たした後に、システムテストの完了活動が実施されます。
システムテスト以外のテストレベルにもテストアナリストが関与することはあります。
テストレベルごとに目的や対象は異なり、開始基準と終了基準も定義されますので注意が必要です。
イテレーティブ・インクリメンタル開発モデル
イテレーティブ・インクリメンタル開発モデルとは、システムを小さな部分に分割し、その分割した部分ごとにソフトウェア開発プロセスを繰り返す(イテレーション)方法です。
イテレーションには、成果物と活動を含む工程が発生し、シーケンシャルで実施したり、工程を重複して実施します。
本開発モデルは、シーケンシャル開発のウォーターフォールよりも迅速(Rapid)に行うためのラピッドアプリケーション開発(RAD)のアプローチや複雑なシステムに対応したラショナル統一プロセス(RUP)のフレームワークがあります。
各イテレーションでは、静的テストと動的テストの両方が実行されます。 段階的な開発、繰り返しのプロセス、早期のフィードバック、リスク軽減などの特徴があります。
要件の変更が発生しやすいプロジェクトに向いていますのでユーザストーリなどテストが重要になります。
繰り返す作業が多いため、修正した機能と影響する機能にはリグレッションテスト(回帰テスト)が必要不可欠で、リグレッションテストを自動化することで効率よくテストを実施することができます。
イテレーティブ・インクリメンタルでは、以下のように小さな部分に分割したのを1つのイテレーションとして分割した分繰り返して実施します。
要件定義、設計、開発、テストの各活動をアクティビティといいます。

図のテストには、テスト分析、設計、実装、実行が含まれています。
そのため、イテレーションごとにテスト分析、設計、実装、実行を行います。
イテレーティブ開発モデルとインクリメンタル開発モデルでは、アクティビティの順序は変更可能でアクティビティを省略することもできます。
アクティビティはイテレーションごとに行い、プロジェクトの開始時に計画を立てて、終了時にタスクを完了させます。
テストアナリストは、イテレーションやインクリメンタルな活動中に、よりインタラクティブな役割を担います。
ハイブリッドモデル
ハイブリッドモデルとは、シーケンシャル開発モデル、イテレーティブ開発モデル、インクリメンタル開発モデルなどのSDLCを組み合わせて使用します。
それにより、シーケンシャル開発モデルのステップ移行を取り入れつつ、イテレーティブ開発モデルの繰り返しのサイクルを合わせます。
繰り返しのサイクルを取り入れつつ、各サイクルの中でV字モデルのように計画、設計、実装、テストを行います。
顧客の要件が変化することを前提として、柔軟に対応することができます。
アジャイルソフトウェア開発
アジャイルソフトウェア開発は、ソフトウェア開発の手法で世の中の変化に柔軟に対応します。
そのため、ステークホルダーと密な関係を気づいていくことが大切です。
前述したイテレーティブ・インクリメンタル開発モデルでスクラム・カンバン・エクストリームプログラミングなどがあります。
イテレーションは、2~4週間と短いサイクルで、各イテレーションの成果物と活動が完結して次のイテレーションを開始します。
テストはイテレーティブモデルと同様に進行し、開発活動とさまざまなテスト活動が重複して行われます。
テストマネージャは、直接的なマネジメントではなく、技術的な専門家またはアドバイザとして実施します。
テストアナリストの役割が定義されていないことが多く、ドキュメントの作成も最低限になっています。
開始時点で、テスト活動を実施して定期的にコミュニケーションを実施することが大切です。
スパイラルモデル
スパイラルモデルとは、リスクを管理しながらシーケンシャルやイテレーションなアプローチで行うソフトウェア開発手法です。
プロジェクトの早期にプロトタイプを使用し、ビジネス優先度とテクニカルリスクに基づいて開発の順番を選択します。
プロトタイプをテストして未解決の技術的問題を特定し、主要な技術的問題が解決していきます。
テストアナリストの役割
使用するSDLCに関わらず、テストアナリストは期待される関与の度合いとタイミングを理解する必要があります。
特定のSDLCに応じて、事前に定義されたロールモデルに固執しない活動と関与のタイミングを調整してソフトウェア品質に貢献します。