見出し画像

システムをテストする ─プログラムが出てこないプログラミング能力を測る問題

西田知博(大阪学院大学)

 情報の入試ではプログラミングに関する問題に大きな関心が集まっていると思いますが,ここでは少し角度を変えてプログラム(コード)を書くことなく,プログラミングの能力を測る問題を紹介したいと思います。

プログラムを見ずにプログラムを検証する問題

 ここで取り上げるのは,松澤先生の「情報システム分野の問題(2)」でも取り上げられた平成29年度文部科学省 大学入学者選抜改革推進委託事業『情報学的アプローチによる「情報科」大学入学者選抜における評価手法の研究開発』でCBTとして行われた試験で出題されたものです.この問題は,この事業の成果報告書の別添資料4$${^{1)}}$$に公開されている,試験問題V2情報2a第1問です.

 まずは問題のリード文を見てみましょう。

スーパーマーケットに新しいレジが導入され,そのプログラムが正しく動作しているかの確認を依頼された.ただし,プログラムの中身を見ることはできず,レジで商品を購入した結果の表示を元に確認を行わなければいけない.以下では,選択肢に並んだ商品の購入をシミュレートすることでプログラムの動作を推測し,その結果をもとにしてプログラム動作の「確認結果」を解答してもらう.なお,購入する商品は自由に組み合わせることができ,それぞれの問において,「確認結果」を選択して解答を終えるまでは何度でも確認を続けることができる.

 ここで行うのは,プログラムの中身を見ることができない状況でそのプログラムが正しく動作しているかを確認する「ブラックボックステスト」です.システム開発を行う場合,プログラムを見ることができる状態で,それぞれの処理が正しく行われるかを検証することを「ホワイトボックステスト」と呼びます.これは,システムを開発する側が行うテストで,条件分岐などのプログラムの制御の流れを網羅して実行するなどにより,システムが正しく動くかを確かめます.一方,この問題で扱われている「ブラックボックステスト」は中身を見ることができないので,システムの仕様を満たしているかを入力に対する結果(出力)が正しいかなどを確かめることによって検証します.ブラックボックステストはシステムの利用者側が行うテストですが,ユーザ視点での検証が行えるため,システム開発側にとっても重要なテストになります.

 この試験はCBTで行ったため,受験者の入力に応じた出力を返すことができます.これを利用し,この問題ではいろいろなパターンで商品を購入し,それぞれでレジがどのような計算結果を出すかを確認していくことができます.問題は2つに分かれており,消費税とポイントの計算が設計どおりに行われるかを検証します.

問1:消費税の計算が正しいかを検証

 問1は消費税の計算が正しく行われるかの検証を行う問題です.

問1
以下の規則で計算される消費税について正しく動作するかを確認せよ.正しく動作しない場合は,どのような不具合があるのかを「確認結果」の選択肢から全て選んで答えよ.
 ・購入金額合計の8%とする.
 ・小数点以下は切り捨てる.

 これに対して,以下の確認作業の画面が示されます.

 個数は1個ずつですが,異なった価格の商品を購入した場合の結果が確認できるようになっています.ここで消費税が正しく計算されているか,間違いがある場合はどういう間違いをしているのかが分かるように,商品の組合せを変えて確認作業を行います.ここで「確認作業を終了する」を選ぶと,以下の問題が表示され,これに解答することになります.この問題の解答パートでは「確認作業に戻る」を選ぶことができるようにしているので,この時点で確認が不十分と気づいた場合は,戻って検証を追加することができます.

 この問題で確認作業ができるのは以下の表に示す15通りになります.表にはそれぞれの商品のうちどれを購入したかと,その際にこのレジが結果として出してくる金額(結果),最後に正しく計算されている場合に出るはずの金額(正解)を示しています.

 ここでテストすべきは消費税について「購入金額合計の8%」「小数点以下は切り捨てる」ということが正しく計算されているかです.すべての場合を試してその結果から判断してもいいのですが,もっと少ない試行でも検証できる方法を考えてみます.

  • 消費税が正しいかのチェック
    消費税が8%であるかをチェックするためには,計算結果として小数点以下が出ないと思われる100円の商品を購入したときの結果を検証することがまず考えられます.これで出てきた結果は「110円」となり,8%では計算されていないことが分かります.これだけを見ると消費税を10%で計算されているのではないかと考えられますが,ほかの税率で小数点以下の計算結果が出て,その端数の処理の結果「110円」となってしまっている可能性があります.そこで,1,000円の商品を購入したときの結果を検証すると「1,095円」となり,解答の選択肢から考えると「消費税を9.5%として計算している」という間違いがあることが分かります.

  • 小数点以下の処理が正しいかのチェック
    100円の商品を購入したときの結果から分かるように,このレジでは計算結果の小数点以下を切り捨てる処理はできていないことが伺えます.そこで,1円の商品を購入した検証を行います.1円の商品に選択肢の最大の税率10%を加えても計算結果は1.01ですが,結果は「2円」となります.この結果より,小数点以下は切り捨てや四捨五入ではなく,「消費税の小数点以下を切り上げたものになっている」という間違いがあることが分かります.

問2:ポイントの計算が正しいかを検証

 次の問題は,ポイント計算についての検証です.この問題では解答の選択肢を見た後に後戻りして確認作業を続けることはできないようにしているので,どういう検証が必要かをあらかじめ考え,十分に確認を行う必要があります.

問2
消費税の計算が正しいことが確認されたレジのプログラムに以下の規則でポイントを与える計算を追加することになり,プログラムが更新された.このプログラムがポイントを正しく計算できているかを確認せよ.正しく計算できていない場合は,どのような不具合があるのかを「確認結果」の選択肢から全て選んで答えよ.
 ・合計の購入金額 100 円(税込)ごとに1ポイントを加算する
 ・5,000 円(税込)以上購入でポイントを通常の2倍にポイントアップ
 ・10,000 円(税込)以上購入でポイントを通常の3倍にポイントアップ
 ・15,000 円(税込)以上購入でポイントを通常の4倍にポイントアップ
 ・ポイントアップは重複して適用するのではなく,最も高くなる倍率を適用
なお,この問題は「確認結果」の解答に進んだ後は再び確認作業に戻ることはできないので,確認作業の内容をメモしておくこと.

 この問題で確認作業ができるのは以下の表に示す63通りになります.これをすべて検証するのは大変ですので,問題文から何を検証すべきかを考えてみましょう.

 問題文から確認すべきと考えられる項目は以下のものが挙げられます.

  • 100 円(税込)ごとに1ポイント加算となっているか.

  • 合計金額に対してのポイント加算になっているか.

  • 5,000円,10,000円,15,000円でポイントアップの倍率が変更されているか.また,ポイントアップは重複して適用するのではなく,最も高くなる倍率を適用しているか.

 これらそれぞれについて検証してみましょう.

  • 100 円(税込)ごとに1ポイント加算となっているか
    まずは,100円前後が境界になると考えられるので,その付近を調べてみます.まずは,90円の商品を購入したときですが,これは「0ポイント」です.次に100円の商品を購入したときは「1ポイント」ですので100円で1ポイント加算されていることが伺えます.しかし,これだけでは税込みの金額についてポイントが計算されているかが検証できません.そこで,5,000円の商品を購入したときを調べてみます.この結果は「108ポイント」となり,5,000円に消費税を加えた5,400円に対して,5,000円での2倍のポイントアップも含めて54×2=108ポイントとなっているので正しいことが確認できます.

  • 合計金額に対してのポイント加算になっているか
    10円と90円の商品を購入したときは合計が100円を超えるので1ポイントとなるはずですが,結果は「0ポイント」と出ます.同様に,10円と90円と100円の商品を購入したときは合計が200円を超えるので2ポイントとなるはずですが,結果は「1ポイント」と出ます.これより,合計金額に対してのポイント加算ができておらず,個々の商品ごとにポイント計算されていることが推測されます.

  • 5,000円,10,000円,15,000円でのポイントアップ
    上記の通り,5,000円の商品を購入した時の結果は「108ポイント」となり,正しくポイントアップされていることが確認できます.次に,10,000円の商品を購入したときの結果は「216ポイント」となり,10,000円に消費税を加えた10,800円に対して,108×2=216ポイントで,108×3=324ポイントとなっていないことが分かります.最後に,5,000円と10,000円の商品を購入したときの検証をすると,結果は「1,296ポイント」となります.しかし,本来は合計の15,000円に消費税を加えた16,200円に対して162×4=648ポイントになるはずです.どうやら,162×8という計算で1,296ポイントになっているようです.10,000円以上でのポイントアップ処理が行われていないこととあわせて考えると,5,000円以上で2倍となったポイントアップにさらに15,000円以上の4倍を重複して適用した結果,ポイントアップが8倍となったことが推測できます.

 以上の検証から,問題の解答に進んでみましょう.

 あらかじめ行った検証から「合計金額ではなく個々の商品ごとにポイントを計算している」「ポイントアップを重複して適用している」「10,000円(税込)以上購入でポイントアップの倍率を変更する処理が行われていない」が導き出される確認結果となります.

まとめ

 ここでは,プログラムの中身を見ずにプログラムが正しく動作しているかを確認する「ブラックボックステスト」を題材とした問題を紹介しました.この問題はCBTで出題することで可能になったもので,当て推量ではなく,適切な検証で答えを導き出しているかも測れる問題になっています.プログラミングはコードを書くことも大切ですが,それが上手く動作するかを確かめることも重要です.CBTが入試に使われるようになれば,プログラムを書くだけでなく,このような問題が出る可能性もあることを知っていただければと思います.

参考文献
1)平成29年度 文部科学省 大学入学者選抜改革推進委託事業「情報学的アプローチによる『情報科』大学入学者選抜における評価手法の研究開発」成果報告書 (2018),https://www.mext.go.jp/a_menu/koutou/senbatsu/1412881.htm(2022.11.29に参照)

(2022年12月5日受付)
(2022年12月28日note公開)

■西田知博(正会員)
1991年大阪大学基礎工学部情報工学科卒業.博士(情報科学).大阪大学情報処理教育センター助手,大阪学院大学情報学部講師,准教授を経て,現在同大学教授.プログラミング教育,情報教育に関する研究に従事.

情報処理学会ジュニア会員へのお誘い

小中高校生,高専生本科~専攻科1年,大学学部1~3年生の皆さんは,情報処理学会に無料で入会できます.会員になると有料記事の閲覧,情報処理を学べるさまざまなイベントにお得に参加できる等のメリットがあります.ぜひ,入会をご検討ください.入会はこちらから!

この記事が気に入ったらサポートをしてみませんか?