連載
» 2021年09月16日 10時00分 公開

テストでバグ発見!(3)単位取得判定プログラムに潜むファイル入力のバグ山浦恒央の“くみこみ”な話(145)(3/4 ページ)

[山浦恒央 東海大学 大学院 組込み技術研究科 非常勤講師(工学博士),MONOist]

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)。

図2 図2 バグレポート1(クリックで拡大)
図3 図3 バグレポート2(クリックで拡大)

4.4 気付き

 気付きの項目としては、例えば、以下があると思います。

  • 入力エラーとなった場合、過去のResult.csvがそのままとなってしまう
  • テストの点数を0〜100以外に設定できるようにすべきではないか
  • そもそもExcelを使った方がよいのではないか

 いろいろなご意見があるかと思いますので、自分なりの意見をまとめていただければと思います。

5.終わりに

 今回は、ファイル入力を題材に出題しましたが、いかがでしたか。テスト項目は、ここに取り上げた以上に作ることができますので、さまざまな条件を考えると、筆者が想定していないバグが見つかるかもしれません。

 加えて、ファイルに関連するプログラムでは、プログラム自体を十分にテストしたとしても、入力ファイル自体に問題があると正しく動作しない可能性がありますので、注意してください。

 本コラムをきっかけにして、バグ検出の能力と説明力を養っていただければ幸いです。

Copyright © ITmedia, Inc. All Rights Reserved.