【基本情報の実務】テスト項目は「思いつく値」を並べても増えない
買い物アプリを作る依頼主から、数量入力欄のテスト項目づくりの相談が届く。
「新しい買い物アプリの数量入力欄です。半角数字で1から99までの整数だけ受け付けて、0以下や100以上、文字や記号や空欄はエラーにする仕様です。このあと動作確認をしたいのですが、どんな値を試せばよいか整理できていません。どんな入力を試して、そのときどう動けば正しいか、書き出してもらえますか?」
基本情報の知識がここで力になるのは、値を「思いつく順」に出すのをやめたときだ。5・10・50・80と並べても、4回とも同じことを確かめている。項目の数は増えるが、確かめられる範囲は広がらない。この記事では、その分け方から整理する。
まず結論:まとまりに分けて、1つずつ取る
| まとまり | 範囲 | 代表として取る値 |
|---|---|---|
| 小さすぎる | 0以下 | 0/マイナスの値 |
| 正しい | 1〜99 | 1/途中の値/99 |
| 大きすぎる | 100以上 | 100 |
| 数でない | 文字・記号・空欄など | それぞれ1つずつ |
同じまとまりの中の値はアプリから見ると、同じ扱いである。5も50も、1〜99の中の値にすぎない。
だからまとまりごとに1つ取れば足りる。同じまとまりから3つ取っても、1つ取ったのと変わらない。
これが分かると項目の数を減らしながら、抜けを減らせる。数を増やす作業ではなくなる。
そしてまとまりの「端」だけは、別扱いにする。そこが、いちばん間違いが出るところだからである。
端の両側を、必ず取る
作る側が書くのは「1以上99以下なら通す」といった条件である。
ここで起きる間違いはほとんどが1つずれである。「より大きい」と「以上」を取り違える形になる。
1つずれていると1が通らないか100が通ってしまう。50を試しても、どちらも見つからない。
だから端の値と、その隣を取る。
- 0(通らないはず)と1(通るはず)
- 99(通るはず)と100(通らないはず)
両側で1組である。片方だけでは、ずれを見つけられない。
0だけ試して通らなければ「正しく弾いた」ように見える。ところが1も弾いていたかもしれない。1を試してはじめて分かる。
ここがテスト項目づくりでいちばん効く一手である。
仕様に書いていない入力を、どう選ぶか
仕様には「文字や記号や空欄はエラー」とある。ここで困るのは受け付けないものは、数えきれないことである。
仕様は受け付けるものを書くことはできる。受け付けないものを全部書くことはできない。
だからテスト項目の側で、代表を選ぶことになる。性質の違うものを1つずつ取る。
- 空欄——何も入っていない
- 文字——数字でない
- 記号——数字でも文字でもない
- 全角の数字——数字に見えるが、半角ではない
- 小数——数字だが、整数ではない
- マイナス——数字だが、0以下
- 先頭に空白——見た目は数字
後ろの4つが大事である。「数字ではないもの」より、「数字に見えるもの」のほうが通ってしまいやすい。
全角の数字は、とくに現場で起きる。入力する人には、見た目の区別がつきにくいためである。
だから仕様に書いていないからといって、試さない理由にはならない。書いていないから試す、という順になる。
「どう動けば正しいか」を、先に書く
ここを飛ばすとテストが感想になる。
期待する動きを書かずに試すと、「動いた」「なんか変」という記録しか残らない。あとから見て、正しかったのかが分からない。
そして「エラーになる」だけでは足りない。エラーの出方まで書く。
- どこに、何と出るか——欄の下か、画面の上か
- 入力した値は残るか、消えるか
- 次に進むボタンは、押せる状態か
2つ目は、書かれていないことが多い。作る側は気にしないが、使う人には大きい。
消えると、最初から入れ直すことになる。間違えた人に、もう一度全部やらせる形になる。
仕様に書いていないならテスト項目を作る段階で聞く。作ってから直すより、ここで決めるほうが早い。
テスト項目づくりは、仕様の抜けが見つかる場でもある。
テスト項目の例
数量入力欄 テスト項目(第1版)
仕様:半角数字、1〜99の整数のみ受け付ける。それ以外はエラー。
番号 入力する値 ねらい 正しい動き 1 (空欄) 未入力 エラー。欄の下に理由を表示 2 0 下の端の外 エラー 3 1 下の端 受け付ける 4 50 正しい範囲の途中 受け付ける 5 99 上の端 受け付ける 6 100 上の端の外 エラー 7 -1 マイナス エラー 8 1.5 整数でない エラー 9 10(全角) 数字に見えるが半角でない エラー 10 あ 文字 エラー 11 @ 記号 エラー 12 (空白)5 先頭に空白 要確認(下記) 13 012 先頭に0 要確認(下記) 3・5 と 2・6 は、必ず対で実施してください。片方だけだと、条件が1つずれていても気づけません。
エラーの表示について(全項目共通)
エラーのとき、次の3点をあわせてご確認ください。
- どこに、何と表示されるか
- 入力した値が、欄に残るか消えるか
- 次へ進むボタンが、押せる状態か
ご確認いただきたいこと(仕様に記載がない点)
- 先頭や末尾の空白は、取り除いて受け付けますか。エラーにしますか。
- 「012」のように先頭に0が付く場合は、12として受け付けますか。
- エラーのとき、入力した値は残しますか。
消える場合、お客様は最初から入れ直すことになります。3点とも、作ってから変えるより、いま決めておくほうが早く済みます。
「ねらい」の列を付けた。なぜその値を試すのかが残ると、項目を減らすときに判断できる。
対で実施してください、と本文で書いた。表の中だけだと、順番に消化されて対の意味が失われる。
エラーの確認3点を全項目共通として外に出した。各行に書くと、表が読めなくなる。
最後の3つはテスト項目ではなく、仕様の質問である。作る前に出す。
作り方の手順
- 思いつく順に値を出すのをやめる。
- まとまりに分ける。小さすぎる/正しい/大きすぎる/数でない。
- まとまりごとに1つ取る。
- 端は別扱いにする。
- 端の両側を対で取る。片方だけでは、ずれが見つからない。
- 仕様に書いていない入力の代表を選ぶ。
- 「数字に見えるもの」を入れる。全角・小数・空白付き。
- 期待する動きを、先に書く。
- エラーの出方まで書く。値が残るかどうかを含める。
- 仕様の抜けは、その場で質問にする。
この場面で効いている基本情報の知識
- 同値分割——同じ扱いになる値は、1つ試せば足りる
- 境界値分析——端とその隣を、対で取る
- 異常系——受け付けないものは数えきれないので、代表を選ぶ
- 期待結果——先に書かないと、テストが感想になる
知識そのものより、項目を増やす作業から、抜けを減らす作業に切り替えられることが、この場面で効いている。
テスト項目で外したくないポイント
- 思いつく値を並べても、範囲は広がらない。
- まとまりごとに1つ。同じ性質の値は、何回試しても同じ。
- 端は別扱い。いちばん間違いが出る。
- 端の両側を対で取る。片方だけでは、ずれが隠れる。
- 0だけ試して通らなくても、1が通るとは限らない。
- 受け付けないものは数えきれない。代表を選ぶ。
- 「数字に見えるもの」を入れる。全角・小数・空白付き。
- 期待する動きを先に書く。感想にしない。
- 入力した値が残るか消えるかまで決める。
- テスト項目づくりは、仕様の抜けが見つかる場。