はじめに
テストケース作成を始めた頃の私は、
- NULL
- 空文字
- 閾値(しきいち)
という言葉がよく分かっていませんでした。
特に、
「NULLと空文字って何が違うの?」
と思っていました。
しかし実務でテストケースを作成していると、
この違いを理解しているかどうかで、作成するテストケースが変わってきます。
今回は、実際のコード例を使いながら、
- NULL
- 空文字
- 閾値
について初心者向けに解説します。
NULLとは?
NULLとは、値が存在しない状態 を表します。
例えば会員登録画面があるとします。
String name = null;
この場合、
「名前という項目はあるけれど、値が設定されていない」
状態です。
イメージとしては、
「名前を書く紙そのものはあるけれど、まだ何も書いていない」
状態です。
空文字とは?
空文字は、
String name = "";
のような状態です。
文字数は0文字ですが、
値としては存在しています。
つまり、
| 状態 | 意味 |
|---|---|
| NULL | 値が存在しない |
| "" | 0文字の文字列 |
になります。
イメージで考える
名前記入欄で考えてみます。
NULL
名前欄そのものが渡されていない
空文字
名前欄はあるけれど何も入力していない
プログラムによっては、
この2つを別々に扱います。
コード例
例えば、
名前が入力されているか確認する処理があります。
public boolean canRegister(String name) {
if (name == null) {
return false;
}
if (name.isEmpty()) {
return false;
}
return true;
}
この場合、
- NULL
- 空文字
の両方をチェックしています。
テストケースを考えてみる
仕様
名前は必須入力
だった場合、
どのようなテストケースを作るでしょうか。
テストケース
| No | 入力値 | 期待結果 |
|---|---|---|
| 1 | "田中" | 正常 |
| 2 | NULL | エラー |
| 3 | "" | エラー |
となります。
実務では、
NULLだけ確認して終わりではなく、
空文字も確認することが多いです。
半角スペースはどうなる?
実務ではさらに、
" "
も確認することがあります。
見た目は空ですが、
実際にはスペース1文字です。
そのため、
| 入力値 | 内容 |
|---|---|
| NULL | 値なし |
| "" | 0文字 |
| " " | スペース1文字 |
は全て別物として扱われます。
閾値(しきい値)とは?
次に閾値です。
閾値とは、結果が切り替わる基準値 のことです。
例えば、
購入金額が10,000円以上なら送料無料
という仕様があったとします。
この場合、
10,000円が閾値になります。
コード例
public boolean isFreeShipping(int price) {
return price >= 10000;
}
どの値をテストする?
初心者だった頃の私は、
5000円
7000円
12000円
くらいしか考えていませんでした。
しかし本当に重要なのは、
閾値の前後です。
テストケース
| No | 金額 | 期待結果 |
|---|---|---|
| 1 | 9999 | 送料あり |
| 2 | 10000 | 送料無料 |
| 3 | 10001 | 送料無料 |
です。
ここで、
price > 10000
と誤って実装されていた場合、
10000円が送料無料になりません。
だから閾値付近を確認するのです。
今回学んだこと
NULL
値そのものが存在しない状態
String name = null;
空文字
値は存在するが0文字
String name = "";
閾値
結果が切り替わる基準値
price >= 10000
の10000が閾値
最終的なテストケース例
会員登録機能の仕様
名前:必須
購入金額:10000円以上で送料無料
テストケース
| No | 名前 | 購入金額 | 期待結果 |
|---|---|---|---|
| 1 | 田中 | 12000 | 正常 |
| 2 | NULL | 12000 | エラー |
| 3 | "" | 12000 | エラー |
| 4 | " " | 12000 | 仕様確認 |
| 5 | 田中 | 9999 | 送料あり |
| 6 | 田中 | 10000 | 送料無料 |
| 7 | 田中 | 10001 | 送料無料 |
おわりに
第2回では、
同値分割や境界値分析を使って数値のテストケースを考えました。
今回は、
- NULL
- 空文字
- 閾値
という入力値の観点を学びました。
私自身、実務に入るまでNULLと空文字の違いを意識したことはありませんでした。
しかしテストケース作成では、この違いが不具合発見につながることもあります。
今回までで、
- 同値分割
- 境界値分析
- 最大値
- 最小値
- NULL
- 空文字
- 閾値
という、実務でよく出会う基本的なテスト観点を一通り学ぶことができました。
これからテストケースを作成する方の参考になればうれしいです。
