
【ソフトウェアテスト】ソフトウェア開発とテスト活動について ①
ソフトウェアはほとんどの場合、複数の機能を組み合わせてシステムを構築し、さまざまなシステムをまとめたものを運用する想定で開発プロジェクトが進行します。
Webシステム開発、アプリケーション開発、組み込みシステム開発など、開発プロジェクトにもそれぞれ種類はありますが、アプリケーションに付随するWebサービスを展開する場合にWebシステムを開発したり、組み込みシステムと連携するアプリケーションを展開する場合にアプリケーション開発をするなど、複数のサービスやプラットフォームが関連しているのがソフトウェアの現状であり、開発プロジェクトもそれに伴って複雑で多様な関係性の中で進行していきます。
このため、何か一つを開発して終わりとなることはほとんどなく、開発プロジェクトの開始・終了・進行中に至るまで、そのほか複数の開発プロジェクトの進行も関連してきます。
とはいえ、多くのプロジェクトが相互に関連しながら進行しているとしても、プロジェクト進行の工程という点でいうならば、サービスやシステムの企画と検討に始まり、リリース後の継続的な運用保守から運用の終了に至るまでを一つのサイクルとして、開発プロジェクトは段階を経て進行していくといえます。
1. 進行形式について

後述のソフトウェア開発ライフサイクルモデルのパターンによっては、開発期間の長短や対象とする開発活動内容の範囲に差がありますが、おおよそ大別してソフトウェア開発プロジェクトは、以下の工程を元に進行します。
・要件定義
開発対象の段階によってはこの工程を他の工程と並行して進めたり、非常に簡潔に済ませたりする場合もありますが、最も初期の段階で行う活動は要件定義です。何を開発するのかを考えるところから始まり、誰が何をどうするためのシステムを開発するのかを検討、方針が決定したら開発内容を要件定義書のようなドキュメント形式などでまとめ、それをもとに開発チームへ共有展開し、実際にものを作る開発活動を進めていきます。
・設計
要件定義をもとに、実際に開発するシステムの設計を行います。対象となる開発要件に対してどのようなシステムの仕様が必要となるかを設計し、システム仕様に関連して必要になる画面仕様やデータ仕様やインターフェース仕様などの設計を行います。
・開発
要件定義と仕様策定が完了したら、それを元に実際の開発作業を進めます。しかし、開発作業中に要件や仕様に変更が入る可能性は常にあり、そうした事態に対してどのように対処するかという方針については、開発ライフサイクルの形式によって対応方法は変わってきます。
仕様の変更が必要になった際、
「開発中→仕様変更→対応」
という1サイクルで完了するならば、変更された部分に対して一時的に対応すればよいですが、
「開発中→仕様変更→対応→さらに仕様変更→対応→さらに仕様変更→対応」
を無限に繰り返してしまうと、開発作業が延々と終わらなくなってしまうので、要件や仕様に変更があった場合はその対応をまた別の開発プロジェクトとして分けたり、仕様変更はある程度までを許容としてそれ以降はいったん開発サイクルが完了するまで変更を行わない等、工程の進行形式を守って進めるような判断も必要になります。
・テスト
どの工程を取っても言えることかも知れませんが、一口にテストと言っても、開発サイクル内で実施されるテストとは静的テスト動的テスト含めて、あらゆる段階で実施可能であるため、必ずしもテストが開発の次段階に位置するとは限りません。後述する開発ライフサイクルモデルの形式次第では、要件定義段階から以降の工程にそれぞれ対応するテストを実施する場合もあります。
しかし、テストはテスト対象となる何かしらの成果物があってこそ実施可能であるため、要件定義~開発の工程があって後に実施することに変わりはありません。
・リリース/保守
テストの工程を経てリリース可能な品質と判断された後、本番環境へ展開されます。展開後はシステム運用状況についてのモニタリングを行ったり、障害が発生した際には修正対応を行ったりします。
また、リリース後にも機能の追加開発が行われる場合は、追加部分について要件定義から再度各工程を経て、繰り返し開発活動が継続していきます。
2. 開発ライフサイクルモデル

上記の項目内でも何度か触れていますが、ソフトウェア開発ライフサイクルにはモデルはあり、JSTQB FLシラバスの記載に依れば、ソフトウェア開発ライフサイクルのモデルは大別して以下の2パターンになります。
2-1. シーケンシャル開発モデル
sequence(連続、順序 等)という語のとおり、開発の工程が順次進行していくモデルです。
具体的なモデルの種類として以下のものがあります。
・ウォーターフォールモデル
要件定義からリリースまでの作業工程が順次進行するモデルです。
原則として前の工程には戻らないとされています。
・V字モデル
ウォーターフォールモデルの各工程ごとに対応するテストを実行するモデルです。
V字で工程を並べて表現し、V字の左側にシステムを作成する工程を並べ、V字の右側には左側に並べた工程の品質を確認する工程を並べて表現します。
2-2. イテレーティブ開発モデルとインクリメンタル開発モデル
iterative(反復)という語は単に反復という意味ですが、イテレーティブ開発モデルは対象システムの開発活動を一定の基準で分割して、システム全体の開発を繰り返して進めて徐々に完成度を高めていくモデルです。
また、increment(増加)という語のとおり、インクリメンタル開発モデルはシステムを独立性の高い機能単位で分割して、機能ごとに各開発工程を実行しながら、システムに徐々に追加をしていってシステム全体の完成を目指すモデルです。
・プロトタイプ型開発
開発の序盤の段階でプロトタイプを開発して、ユーザーに向けてリリースし、利用結果のフィードバックを受けて開発を進める方法です。
・スパイラル型開発
システムの機能ごとに要件定義からテストまでの開発工程を繰り返して、開発を進める方法です。
・アジャイル型開発
プロジェクト自体を複数のイテレーションで分割して、各イテレーションで機能追加を進める方法です。
・スクラム
アジャイル開発の一種として具体的なフレームワークを持つ手法です。
開発期間の単位をスプリントという単位で区切って、スプリント内で計画から完了と振り返りまでを行い、スプリントを繰り返して進めることで開発活動を継続的に進める方法です。
・エクストリーム・プログラミング
主にプログラマの開発におけるプラクティスを定義した手法であり、テスト駆動開発・ペアプログラミング・YAGNI等の要素を含んでいます。
・リーンソフトウェア開発
主にプロジェクトのマネジメントにフォーカスした手法ですが、開発プロセスから無駄を排除して、低コストかつ短期間でプロジェクトを進められるような改善を目的とした方法です。