テストでバグ発見!(3)単位取得判定プログラムに潜むファイル入力のバグ:山浦恒央の“くみこみ”な話(145)(3/4 ページ)
提示された仕様とプログラム(バグを含む)から、自身の手でテストケースを設計し、バグを実際に見つけ、バグレポートまでを作成する実践的なシリーズ「テストでバグ発見!」。第3回は、大学の単位取得を判定するプログラムから、ファイル入力に潜むバグを見つけ出しましょう。
4.解答
今回は、平均点を算出するプログラムを出題しました。この程度の処理ならば、プログラムを組むまでもなく、Excelで簡単に作ることができますので、「意味のないプログラムを作っている」という最大級のバグには、目をつぶっていただければと思います。
4.1 出題の意図
今回は、ファイル入力を題材とし、バグ検出の超基本技法である「同値分割」と「境界値分析」を実施し、不良箇所を指摘できるかという問題です。
今回のバグは以下の2件です。
(1)(中間テスト+期末テスト)=120点の場合でも、グレードが「/」となる。
問題には、「(中間テスト+期末テスト)が120〜139点」はCとなると書いてあるのですが、120点の場合は、/となってしまいます。
(2)学籍番号の先頭が0の場合、8桁ではなくなってしまう
学籍番号の先頭に0が入っている場合、出力結果のデータ(Result.csv)には、先頭の0が消えます。例えば、「01234567」を入力すると、データ定義上、学籍番号はint型ですから、「1234567」に変換することになります(3.3.1の表2のNo.1参照)。結果として、先頭に0が含まれていると、出力結果は先頭の0を省いて表示します。
4.2 テスト項目作成例
下記に、テスト項目作成例を下記に示します(表3)。
No. | テスト項目 | 期待値 | 出力結果 | 良/否 |
---|---|---|---|---|
1 | 成績評価がSとなることを確認する 12345678,100,100 |
12345678,100,100,S | 12345678,100,100,S | 良 |
2 | 成績評価がSとなることを確認する 12345678,90,90 |
12345678,90,90,S | 12345678,90,90,S | 良 |
3 | 成績評価がAとなることを確認する 12345678,90,89 |
12345678,90,89,A | 12345678,90,89,A | 良 |
4 | 成績評価がAとなることを確認する 12345678,80,80 |
12345678,80,80,A | 12345678,80,80,A | 良 |
5 | 成績評価がBとなることを確認する 12345678,79,80 |
12345678,79,80,B | 12345678,79,80,B | 良 |
6 | 成績評価がBとなることを確認する 12345678,70,70 |
12345678,70,70,B | 12345678,70,70,B | 良 |
7 | 成績評価がCとなることを確認する 12345678,70,69 |
12345678,70,69,C | 12345678,70,69,C | 良 |
8 | 成績評価がCとなることを確認する 12345678,60,60 |
12345678,60,60,C | 12345678,60,60,/ | 否 |
9 | 成績評価が/となることを確認する 12345678,59,60 |
12345678,59,60,/ | 12345678,59,60,/ | 良 |
10 | 成績評価が/となることを確認する 12345678,0,0 |
12345678,0,0,/ | 12345678,0,0,/ | 良 |
11 | 学籍番号が出力結果に記載されることを確認する 00000000,100,100 |
00000000,100,100,S | 0,100,100,S | 否 |
12 | 学籍番号が出力結果に記載されることを確認する 99999999,100,100 |
99999999,100,100 | 99999999,100,100 | 良 |
13 | 学籍番号の桁数が4文字の場合、エラーとなることを確認する 1234,100,100 |
入力エラー | 入力エラー | 良 |
14 | 学籍番号が9桁となる場合、エラーとなることを確認する 100000000,100,100 |
入力エラー | 入力エラー | 良 |
15 | 学籍番号が-1となる場合、エラーとなることを確認する -1,100,100 |
入力エラー | 入力エラー | 良 |
16 | 中間テストの点数が規定範囲外の場合、エラーとなることを確認する 12345678,101,100 |
入力エラー | 入力エラー | 良 |
17 | 中間テストの点数が規定範囲外の場合、エラーとなることを確認する 12345678,-1,100 |
入力エラー | 入力エラー | 良 |
表3 テスト項目作成例 |
テスト項目は、エラー処理などを含めると無限に増やせますが、制限時間を考えますと、こんなものでしょうか。他にも、「点数を空欄、文字、中央値」「ファイルを開いた状態で実行する」などのテスト項目を実行してもよいでしょう。
4.3 バグレポート
以下に2件のバグレポートを示します(図2、図3)。
4.4 気付き
気付きの項目としては、例えば、以下があると思います。
- 入力エラーとなった場合、過去のResult.csvがそのままとなってしまう
- テストの点数を0〜100以外に設定できるようにすべきではないか
- そもそもExcelを使った方がよいのではないか
いろいろなご意見があるかと思いますので、自分なりの意見をまとめていただければと思います。
5.終わりに
今回は、ファイル入力を題材に出題しましたが、いかがでしたか。テスト項目は、ここに取り上げた以上に作ることができますので、さまざまな条件を考えると、筆者が想定していないバグが見つかるかもしれません。
加えて、ファイルに関連するプログラムでは、プログラム自体を十分にテストしたとしても、入力ファイル自体に問題があると正しく動作しない可能性がありますので、注意してください。
本コラムをきっかけにして、バグ検出の能力と説明力を養っていただければ幸いです。
Copyright © ITmedia, Inc. All Rights Reserved.