本文へスキップ

平成22年度 秋期 ITパスポート試験 問90

この問題の解説と、これまでの解答の記録です。

問90
頻出度★★★

M さんは,総務課の N さんから宅配荷物の発送業務で利用する料金計算プログラム(以下,プログラムという)の作成を依頼された。そこで,N さんから聞いた料金計算の方法を基に次のように要件をまとめ,プログラムを作成した。 (1) 料金はサイズ区分と発送先の地区から表1の料金表で求める。サイズ区分は荷物の3辺計(荷物の縦,横,高さの長さの合計で1cm単位)と重量(1kg単位)を比較し,どちらか大きい方の区分を適用する。 なお,3辺計が140cm又は重量が20kgを超える荷物は受け付けない。 (2) 荷物の3辺計と重量,発送先の地区(A~D)を入力すると,料金を出力する。 表1 料金表(単位 円)

区分3辺計(cm)重量(kg)ABCD
180まで5まで1,3009501,1501,800
2100まで10まで1,6001,2001,4002,350
3140まで20まで2,0001,6001,8003,400

M さんは,プログラムを N さんに引き渡す前にテストを行うことにした。 テストに当たり,表2の出力結果表を作成し,これに基づいてテストデータを準備した。表2は,入力データが各列に示す Yes の組合せに該当する値であるときの正しい出力を,欄“予想出力”に記入したものである。 表2 出力結果表

123456…36
地区AYesYesYesYesYesYes…
B…
C…
D…Yes
3辺計(cm)80までYesYesYes…
100までYesYesYes…
140まで…Yes
重量(kg)5までYesYes…
10までYesYes…
20までYesYes…Yes
予想出力(円)a…
↑ b↑ c

注 網掛けの部分は,表示していない。 表2の出力結果表のaに入る予想出力はどれか。

出典 平成22年度 秋期 ITパスポート試験 問90
解説

問 90

  • 不正解ア

    1,300円 は表1 の区分1・地区A の料金。3辺計「80まで」だけを見て区分1 と決めてしまった場合の値で、重量「20まで」(=区分3) を無視している。要件は「大きい方の区分を適用する」なので、小さい方の区分1 を採ってはいけない。この列を 1,300円 と誤って出力するプログラムこそ、このテストが見つけたいバグである。

  • 不正解イ

    1,600円 は表1 の区分2・地区A の料金 (または区分3・地区B の料金)。しかし第3列の3辺計は「100まで」ではなく「80まで」、重量も「10まで」ではなく「20まで」なので区分2 にはならず、地区も B ではなく A である。区分1 と区分3 の中間を取るような計算方法は要件のどこにも書かれていない。

  • ウ

    正解 正解は ウ (2,000円)。a は表2 の第3列の予想出力で、その列の入力条件は「地区=A」「3辺計=80まで」「重量=20まで」の3つ。ここで要件 (1) の「サイズ区分は3辺計と重量を比較し、どちらか大きい方の区分を適用する」がカギになる。表1 を見ると、3辺計「80まで」は区分1、重量「20まで」は区分3。両者を比べて大きい方、すなわち区分3 を適用する。あとは表1 の区分3 の行と地区A の列が交わるところを読むだけで、2,000円 が得られる。つまり「軽くて小さい荷物の料金」ではなく、「小さいが重い荷物なので重量側の区分で課金される」というのがこの列の意図であり、a=2,000円 となる。

  • 不正解エ

    3,400円 は表1 の区分3・地区D の料金。区分3 という判断は正しいが、地区の読み違いである。第3列は「地区=A」に Yes が付いており、D に Yes が付いているのは表2 の右端の第36列。区分の行だけ合わせても、地区の列を取り違えると料金は大きくずれる。

ここがポイント
  • サイズ区分の決定ルール: 3辺計から求めた区分と重量から求めた区分が食い違うときは、大きい方 (料金の高い方) の区分を適用する。第3列は 3辺計→区分1、重量→区分3 なので区分3 が採用され、地区A と交差する 2,000円 が答えになる。
  • この表2 は、地区4通り × 3辺計3通り × 重量3通り = 36通りの入力条件の組合せをすべて並べ、内部の処理手順ではなく入力と期待される出力の対応だけで正しさを確かめる表である。プログラムの中身を見ずに仕様どおりの出力が出るかを検証するこのやり方をブラックボックステストといい、表2 のような期待値表を先に作ってからテストデータを用意するのが定石。
用語

解答の記録