ソフトウェア開発
中心となる活動
開発プロセス
要求
アーキテクチャ
設計
エンジニアリング
実装
テスト
ソフトウェアテスト (英: software testing) は、コンピュータのプログラムから仕様にない振舞または欠陥(バグ)を見つけ出す作業のことである。ソフトウェアテストで見つかったプログラム中の欠陥を修正する作業をデバッグという。ソフトウェアテストに成功するとは、テストで欠陥が発見されるか、規定した試験項目にすべて合格するか、規定した品質目標に到達することである。目標とした品質には、規定した試験項目にすべて合格することもある。例えば、OS, プログラミング言語では、仕様を満たしているかどうかの適合試験を規定している。ソフトウェアテストでは、欠陥が存在することを示すことはできるが、欠陥が存在しないことは証明できない。ソフトウェアに仕様にない振舞がないことを保証する作業を証明といい、証明用のシステム、証明しやすい言語も多数存在している。本項では動的なソフトウェアテストを中心に扱う。 ソフトウェアテストの目的には以下が挙げられる[1][2]。 ソフトウェアテストは「変更への信頼」を生むことでソフトウェアの品質・提供速度を向上させる目的・効果を持つ。 ソフトウェアの変更(例: リファクタリング・機能追加)は既存コードの破壊によるバグ(リグレッション)を引き起こしうるため、ソフトウェアエンジニアに対し、コード変更への心理的ハードルとして作用する。このハードルは変更への躊躇いを生み、品質向上の機会を減少させてしまう。 リグレッションテストはコード変更によるバグを発見して欠陥の作りこみを防止し、品質に対する信頼を積み増す。この効果により、新たな変更が既存コンポーネントを破壊しないという信頼(confidence)・安心がエンジニアに生まれる[注釈 1][3]。結果として良い変更の頻度があがり、ソフトウェアの品質・提供速度が向上する。 ただし、一度書かれたソフトウェアが「決して変更されない」場合にはこの効果が発揮されない。(参考: テスト駆動開発)
目的
作業成果物の評価による欠陥の防止(例: 要件、ユーザーストーリー、設計、コード)
明確にした要件を満たすかの検証
完成の確認・動作の妥当性確認(ユーザー等ステークホルダーに対する)
テスト対象の品質に対する信頼を積み重ねて、所定のレベルにあることの確証
欠陥の作りこみ防止
故障・欠陥の発見、それによる不十分なソフトウェア品質リスクレベルの低減
意志決定のための情報提供(テスト対象の品質レベル等)
契約上、法律上、または規制上の要件や標準の遵守、また/あるいは準拠の検証
変更への信頼