ソフトウェアテストとは:挙動と仕様を比較する
ソフトウェア開発において品質の保証は非常に重要なトピックです。 開発したソフトウェアがユーザーの要求を満たすかどうかを確かめるために、ソフトウェアテストが行われます。
このレクチャーでは、ソフトウェアテストとはなにか、どのように実施するかについて解説します。
目次
ソフトウェアテストとは
ソフトウェアテストとは、ソフトウェアの正しさを確認するために
- ソフトウェアの仕様 と
- ソフトウェアの挙動
が一致するかどうかを確かめる活動です。 ソフトウェアには、それ自体に絶対的な正しさはありません。 ソフトウェアが正しいかどうかは、「ソフトウェアの仕様」と「ソフトウェアの挙動」の比較によって判断されます。
ソフトウェアの正しさについて「オブジェクト指向入門 第2版 原則・コンセプト」の文章を引用します:
ソフトウェアシステムあるいはソフトウェア要素、それ自体は正しくもないし、間違いでもない。 特定の仕様に照らし合わせて、正しいか間違っているかである。 厳密に言えば、ソフトウェアの要素が正しいかどうかを論ずるべきではない。 対応する仕様書と一致する (consistent) かどうかを論じるべきである。
出典:オブジェクト指向入門 第2版 原則・コンセプト p.432
具体例で考えてみましょう。 次のようなソフトウェアは「正しい」でしょうか?
- ある勤怠管理アプリケーションを使っていたところ、勤務時間の修正ボタンをクリックしたら急にエラーページが表示された
答えは、「仕様による」ということになります。 操作中に急にエラーベージが表示されることはユーザーにとって望ましくない体験かもしれません。 でも、ソフトウェアに絶対的な正しさはないのです。 仕様と一致するなら、それは正しい挙動といえます。 このケースで言えば
- 上長承認済みの勤務時間を修正しようとするとエラーページが表示される
という仕様があるのかもしれません。 その場合、エラーページが表示されるアプリケーションは「正しいソフトウェア」です。
まとめると、ソフトウェアテストとは
- 「動作するソフトウェア」と「ソフトウェアの仕様書」の2点セットを準備して
- 「実際に動かしてみたときの挙動」と「仕様書に書かれた挙動」を比較して一致するかどうかを確認する
という活動です。
どのようにソフトウェアテストを行うか
ソフトウェアテストは次の2つのステップで進みます:
- テスト設計
- テスト実行
この講座で学ぶことは、主にテスト設計の部分です。 テスト設計では、
- ソフトウェアの仕様を理解し
- 仕様を確かめるためにどのような観点でテストを行うかを考え
- そのテスト観点をもとにテストケースを作成します
ソフトウェアテストは、大きく分けて「手動テスト」と「自動化テスト」のどちらかの方法で実行されます。
- 自動テスト:プログラムがテストを実行します。JUnit を使った単体テストや、Selenium を使った E2E テストなどがあります
- 手動テスト:人間がテストを実行します。実際のアプリケーションを操作して、仕様と挙動が一致するかを確認します
自動テストでも手動テストでも、テスト設計は重要です。 テスト設計に漏れがあると、いくらテストを実行したとしてもソフトウェアの品質を向上させることはできません。
開発者の日々の活動に目を向けると、とくに自動テストを実装するとき、コーディングのテクニックやテストライブラリ、モックライブラリの使い方に意識が向きがちです。 しかし、ソフトウェアの品質を向上させるのは網羅的かつ効果的なテストです。そして、そのようなテストを支えるのはテスト設計です。 ソフトウェアの品質を高めるために、テスト設計のスキルを磨きましょう。
まとめ
このレクチャーでは、ソフトウェアテストとはどのような活動であるかについて解説しました。
- 「正しいソフトウェア」とは、実際の挙動が仕様と一致するソフトウェアのことです
- ソフトウェアテストでは、仕様書と動作するソフトウェアを用意して、挙動と仕様が一致するかを確かめます
- よいソフトウェアテストを実行するためには、テスト設計が重要です