📊
そのテストは何のため? - ソフトウェア品質の探求
ソフトウェア品質について様々な観点から考える記事群です。
はじめに
ソフトウェアのテストって何のために行うのでしょうか? ソフトウェア開発で当たり前のように行われるテストですが、効果的に実施するために私なりの理解を書いてみたい思います。
私見
テスト目的は2つに大別できる
個人的にはテストの目的は以下の2つに大別できると考えています。このどちらを目的としているかを明確にすることで、より効果的にテストを行うことができると思います。
No. | テスト目的 | 説明 | 求められる技能 |
---|---|---|---|
1 | 要件の保証 | 要件/仕様通りに動いていることを確認する | 手順に則って抜け・漏れ・間違いなく作業すること |
2 | 問題の検出 | 顕在化していない新しいバグを見つけ出す | プロダクト(システム/ユーザー)に関する高度な知識を有している |
開発手法とテスト目的
- ウオーターフォール
いわゆるV字型で「要件の保証」テストを網羅的に実施するのが望ましいとされるはずです。
テスト設計を担当するメンバーには非常に高度なスキルが求められます(テストに限らずWFの上流工程の宿命ですかね)。 - アジャイル
同じ工程を何度も繰り返すことになるため「要件の保証」型のテストは、効率やMVPを重視して一部が選択されるはずです。
このため、開発メンバーは効率的に「問題の検出」テストを行うことを求められます(経験ベースでテストを行う探索的テストとの相性が良いはずです)。
テスト技法との関連
以下のような多くのテスト技法は、どちらの目的に対しても効果的に機能すると思います。
- 同値分割
- 境界値分析
- デシジョンテーブル
しかし、探索的テストは「2.問題の検出」をより強く狙ったテストと考えられるでしょう。
他の出典と比較してみる
そもそも「ソフトウェアテスト」ってなに?
ソフトウェアテスト技術者の認定試験を実施しているJSTQB(Japan Software Testing Qualifications Board)が公開している「シラバス」をあたってみましょう。
1.1 テストとは何か?
ソフトウェアテストは、ソフトウェアの品質を評価し、運用環境でソフトウェアの故障が発生するリスクを低減する手助けとなる。
ソフトウェアテストは、欠陥を発見し、ソフトウェアアーティファクトの品質を評価するための一連の活動である。
短い2文ですが「ソフトウェアの品質を評価」という言い回しが2回もでてきます(2つ目はソフトウェアアーティファクトですが)。ソフトウェテストは品質を評価するための活動と言ってよさそうです。
テスト目的の突合確認
さらにシラバスを読み進めてみましょう。テストの典型的な目的として以下の9つが明示されています。
1.1.1 典型的なテスト目的は以下の通り
- 要件、ユーザーストーリー、設計、およびコードなどの作業成果物を評価する。
- 故障を引き起こし、欠陥を発見する。
- 求められるテスト対象のカバレッジを確保する。
- ソフトウェア品質が不十分な場合のリスクレベルを下げる。
- 仕様化した要件が満たされているかどうかを検証する。
- テスト対象が契約、法律、規制の要件に適合していることを検証する。
- ステークホルダーに根拠ある判断をしてもらうための情報を提供する。
- テスト対象の品質に対する信頼を積み上げる。
- テスト対象が完成し、ステークホルダーの期待通りに動作するかどうかの妥当性確認をする。
私見によるテスト目的と概ね一致するように振り分けることができます。
- 要件の保証
- 要件、ユーザーストーリー、設計、およびコードなどの作業成果物を評価する
- 求められるテスト対象のカバレッジを確保する
- 仕様化した要件が満たされているかどうかを検証する
- テスト対象が完成し、ステークホルダーの期待通りに動作するかどうかの妥当性確認をする
- ステークホルダーに根拠ある判断をしてもらうための情報を提供する
- テスト対象が契約、法律、規制の要件に適合していることを検証する
- テスト対象の品質に対する信頼を積み上げる
- 問題の検出
2. 故障を引き起こし、欠陥を発見する
4. ソフトウェア品質が不十分な場合のリスクレベルを下げる
さいごに
アジャイル開発を担当している場合は、テストの実施目的を明確にして考えてみると効率的にテストを行えるでしょう。
品質関連の他の記事は「ソフトウェア品質の探求」からどうぞ。
Discussion