ソフトウェアテストの基本#
テストの種類#
基本のテスト工程
単体テスト(unit test) :ソフトウェアの最小単位(モジュール)ごとの動作をテストする
結合テスト(integration test) :複数のモジュールを組み合わせて動作をテストする。モジュール間の実行順序も確認する
機能テスト(feature test) :機能として正しく役割を果たせているかを確認するテスト
システムテスト :製品として提供できるかを確認する
回帰テスト#
回帰テスト(regression test) はソフトウェアのコードを変更した際に、その変更が既存の機能に意図しない悪影響(デグレード)を及ぼしていないかを確認するためのテスト
同値分割テスト・境界値テスト#
ソフトウェアは入力値や条件によって処理方法が変わる。多くの場合、入力値の組み合わせは膨大になるため、すべての入力値・すべての条件を網羅してテストするのは不可能になる。
そこで、テストケースの枝刈りをして代表的な入力値だけテストするのが同値分割テストや境界値テスト。
パスワードの文字数を「8文字以上16文字以下」としていて、文字数が条件を満たすかどうか を判定する関数があったとする
def is_valid_length(password: str) -> bool:
...
この関数のテストに際して、想定される全部の入力値の組み合わせを試すわけにはいかない(記号をどこまで含むかにもよるが、\(94^{16} \approx 3.7\times 10^{31}\) 通りとかになる)。
同値分割テスト#
同じ出力になる入力値の集合( 同値パーティション )ごとに代表的な入力値だけをテストケースとする
パスワードの条件が「8文字以上16文字以下」のため
8文字以上16文字以下
の場合は正しい値として is_valid_length()の返り値が true になる( 有効同値パーティション )
8文字未満や16文字を超える場合
はis_valid_length()の返り値が false になる( 無効同値パーティション )
テストケースとしては、例えば
有効同値パーティション の代表例として「9文字」
無効同値パーティション の代表例として「6文字」
を設定する、というのが同値分割テスト
境界値テスト#
境界値テスト は条件の境界となる値とその隣の値に対してテストを行う技法。
パスワードの長さは数値であるため、異なる同値パーティションが隣り合っている部分
7文字と8文字
16文字と17文字
が境界となる
隠れた境界値
度重なる仕様変更の過去があるコードでは、従来の条件分岐が残っている場合がある。
そのため、現在の仕様上の境界値以外にも実装では条件分岐が存在することがある点に注意。