基本情報技術者 2017年 春期 午後 問05
購買システムにおける注文書出力処理に関する次の記述を読んで、設問1〜3に答えよ。
電気製品を製造しているJ社では、製造部門が要求する電子部品(以下、商品という)を購買部門が発注する際に利用する購買システムの構築が進行中である。購買システムを利用するには、Webブラウザを使用する。J社の購買部門の社員(以下、購買担当者という)は社内ネットワーク経由で、仕入先の営業員はインターネット経由で、それぞれ購買システムを利用する。
〔購買システムを利用した発注業務の説明〕
(1) 発注する全ての商品は、商品ごとに一意になる商品番号で管理する。商品ごとに、仕入先は1社に定まっている。
(2) 購買部門は三つのグループ(以下、購買グループという)に分かれており、購買グループごとに取り扱う商品が異なる。
(3) 各購買担当者は、自グループが取り扱う商品について、製造部門からの要求を取りまとめ、仕入先ごとに分類し、発注登録を行う。このとき、仕入先ごとに、一意の注文番号が割り当てられ、商品ごとに001から始まる注文枝番が連番で割り当てられる。
購買担当者の発注登録、仕入先の営業員の注文書出力及び購買システムの関係は、図1のとおりである。

購買システムの構築プロジェクトのメンバK君は、図1の破線で囲まれた注文書出力処理の開発を担当することになった。注文書出力処理は、仕入先の営業員が購買システムからJ社の注文書を出力するための処理である。
〔注文書出力処理の説明〕
(1) 仕入先の営業員が注文書を出力する操作の流れを、図2に示す。

(2) 仕入先の端末の注文書出力画面には、まだ注文書として出力していない注文情報だけが、図3に示すように注文番号ごとの注文枝番ごとに一覧で表示される。
(3) 購買システムから出力される注文書は、購買グループごとに作成され、注文情報が希望納期、注文番号、注文枝番の昇順に並んでいる。注文書の各ページには、最大5件の注文情報が含まれる。注文情報は、購買グループ名、希望納期、注文番号、注文枝番、商品番号、数量、納品場所、購買担当者などを要素としてもつ。
注文書出力画面と注文書の例を、それぞれ図3と図4に示す。


K君は、注文書出力画面で注文書出力ボタンがクリックされたときに実行する処理の一つである出力準備処理の流れ図を作成した。作成した流れ図を、図5に示す。
出力準備処理とは、注文書に含める注文情報を出力順に並べて出力ワーク領域に格納するものである。出力ワーク領域は、1回の注文書出力処理で出力される注文書に含まれる注文情報を格納する2次元配列である。出力ワーク領域[i][j]は、iが注文書のページを表し、jは注文書のページ内での出力順を表している。iもjも1から始まる。
出力準備処理は処理を開始するとき、注文書出力画面で選択された注文情報を、購買グループ名、希望納期、注文番号、注文枝番の順にそれぞれ昇順に整列して格納した1次元配列である注文データ[]と、注文情報件数を引数で受け取る。ここで、注文データ[1]には、注文書の1ページ目の第1番目に出力する注文情報が格納されている。
設問1:
問題文を見る 図5中のに入れる正しい答えを、解答群の中から選べ。
a, bに関する解答群
ア:0
イ:1
ウ:2
エ:3
オ:4
カ:5
キ:50
模範解答
a:イ、b:カ
解説
解答の導き方
図5の空欄は、ページ内で何件目に注文情報を置くかを示す値と、1ページに入る注文情報の上限を示す値です。順に考えます。
まず、注文情報を格納する位置を確認します。問題文では、出力ワーク領域の2番目の添字が「ページ内での出力順」を表し、添字は1から始まると説明されています。また、図5では最初に出力件数を1にしています。つまり、ページに注文情報を格納するときは、最初の位置から使います。
注文情報を1件格納した後、出力件数が上限に達していなければ、出力件数を1増やして次の位置に進みます。上限に達した場合は、ページ変数を1増やして次のページへ移り、出力件数を最初の位置に戻します。したがって、出力件数を戻す値であるaは1です。
次に、1ページに入る注文情報の上限を確認します。問題文には、注文書の各ページには「最大5件」の注文情報が含まれるとあります。図5では、注文情報を格納した後に「出力件数 < b」を判定しています。5件目を格納した後は出力件数が5なので、ここで上限に達したと判断できる必要があります。よって、bは5です。
注文データの例で確認すると、同じ購買グループの注文情報は同じページに並び、購買グループが切り替わると次のページから始まります。たとえば、図6ではAグループの3件はページ1の位置1から3に入り、次のBグループの注文情報はページ2の位置1から始まります。このときも、最初の位置に戻す値は1です。
誤りやすいポイント
- bを「次のページに移るときの出力件数」と考えてしまうことがあります。bはページの切替えを判断する上限であり、問題文にある1ページ当たりの最大件数に合わせます。
- 出力件数を0にすると考える誤りがあります。注文情報を格納する位置は1から始まるため、ページの先頭は1です。
- 購買グループが変わったときに、いつもページ変数を増やすとは限りません。直前のページが満杯になった場合は、すでに図5の処理でページ変数を増やしています。ページカウントフラグは、この二重の加算を防ぐために使われます。
FAQ
Q: なぜ5件目を格納した後にページを切り替えるのですか?
A: 1ページの上限が5件だからです。5件目を格納した時点で上限に達するので、次の注文情報は次のページに置きます。
A: 1ページの上限が5件だからです。5件目を格納した時点で上限に達するので、次の注文情報は次のページに置きます。
Q: 購買グループが変わると、出力件数を最初の位置に戻すのはなぜですか?
A: 購買グループごとに注文書を作成するためです。新しいグループの注文情報は、新しいページの先頭から並べます。
A: 購買グループごとに注文書を作成するためです。新しいグループの注文情報は、新しいページの先頭から並べます。
Q: ページカウントフラグは何のためにありますか?
A: 直前の注文情報でページが満杯になり、すでにページ変数を増やしたかどうかを記録します。グループの切替え時に、ページを二重に進めないためです。
A: 直前の注文情報でページが満杯になり、すでにページ変数を増やしたかどうかを記録します。グループの切替え時に、ページを二重に進めないためです。
関連キーワード: 配列、添字、カウンタ、フラグ、流れ図
設問2:
問題文を見る K君は、出力準備処理のホワイトボックステストを実施するために、図6に示す注文データのテストデータを作成した。次の記述中のに入れる正しい答えを、解答群の中から選べ。

図6の注文データのテストデータを利用して、出力準備処理をテストしたときに、図5のcの処理が行われなかった。K君は、全ての処理を実行するために、d。
cに関する解答群
ア:①
イ:②
ウ:③
エ:④
dに関する解答群
ア:購買グループ名がAグループである注文情報を1件追加した
イ:購買グループ名がBグループである注文情報を3件追加した
ウ:購買グループ名がCグループである注文情報を2件追加した
エ:購買グループ名がCグループである注文情報を3件追加した
模範解答
c:ウ、d:イ
解説
解答の導き方
この設問は、図5の流れ図で実行されていない処理を見つけ、その処理が実行されるように図6の注文情報を追加する問題です。ホワイトボックステスト(プログラム内部の処理や分岐が実行されたかを確かめるテスト)なので、注文情報の件数と、流れ図の分岐条件に注目します。
まず、注文書の1ページに入れられる注文情報は最大5件です。したがって、図5の判定「出力件数 < b」の b には5が入ります。また、ページ内の出力位置は1番目から始まるため、出力件数を先頭に戻す a は1です。
ここで、図5には出力件数を1に戻す処理が2か所あります。
- 購買グループ名が変わったときに戻す処理(①)
- ページ内の件数が上限に達したときに戻す処理(③)
どちらも出力件数を1に戻しますが、実行される条件が異なります。特に③は、同じ購買グループの注文情報を出力している途中で、ページが5件に達したときに実行されます。
図6の注文データを順に見ると、購買グループごとの件数は次のとおりです。
注文書の1ページに最大5件まで出力できますが、どのグループも5件に達していません。したがって、③の処理は実行されません。
一方、①は購買グループ名がAグループからBグループへ、BグループからCグループへ変わるときに実行されます。注文情報を出力する処理(②)も各注文情報について実行されます。また、同じグループの注文情報を出力した後、出力件数が5未満であれば、出力件数を増やす処理(④)が実行されます。
③を実行するには、同じ購買グループの注文情報を5件にすればよいです。Bグループはすでに2件あるため、3件追加すると合計5件になります。Aグループに1件追加しても4件、Cグループに2件追加しても3件、Cグループに3件追加しても4件です。したがって、③を実行できるのは、Bグループの注文情報を3件追加する場合です。
誤りやすいポイント
- ①と③はどちらも出力件数を1に戻しますが、実行条件は別です。①は購買グループ名の変更、③はページの5件目を出力したときに実行されます。
- グループごとの合計件数を数えるときは、追加する件数だけでなく、図6にすでにある件数も含めます。Bグループは元から2件あるため、5件にするには3件の追加が必要です。
- 出力件数が5になった時点で③が実行されるのではありません。5件目を出力した後に「出力件数 < 5」が成り立たないため、③に進みます。
FAQ
Q: Bグループに注文情報を3件追加すると、なぜ③が実行されるのですか?
A: Bグループは元から2件あり、追加後は5件になります。5件目を出力する時点で出力件数が5なので、「出力件数 < 5」が成り立たず、③に進みます。
A: Bグループは元から2件あり、追加後は5件になります。5件目を出力する時点で出力件数が5なので、「出力件数 < 5」が成り立たず、③に進みます。
Q: ③が実行された後、次のグループの注文情報はどのページに出力されますか?
A: ③でページ変数が1増えるため、次のグループの注文情報は新しいページに出力されます。ページカウントフラグは、ページがすでに切り替わったことを示し、グループ変更時にページを重ねて進めないために使われます。
A: ③でページ変数が1増えるため、次のグループの注文情報は新しいページに出力されます。ページカウントフラグは、ページがすでに切り替わったことを示し、グループ変更時にページを重ねて進めないために使われます。
Q: 追加する注文情報の希望納期などは、③の実行に関係しますか?
A: ③の実行条件は、同じ購買グループ内の注文情報がページの上限件数に達することです。そのため、希望納期などの値ではなく、グループごとの件数が関係します。
A: ③の実行条件は、同じ購買グループ内の注文情報がページの上限件数に達することです。そのため、希望納期などの値ではなく、グループごとの件数が関係します。
関連キーワード: ホワイトボックステスト、配列、二次元配列、フラグ、分岐処理
設問3:
問題文を見る 出力準備処理のブラックボックステストを行う場合、K君が実施すべきこととして適切な答えを、解答群の中から選べ。
解答群
ア:流れ図の全ての分岐処理が実行されたことを確認する。
イ:入力として渡した引数の注文データ、注文情報件数の内容が仕様どおりであることを確認する。
ウ:入力として渡した引数の内容に対して出力ワーク領域の内容が仕様どおりであることを確認する。
模範解答
ウ
解説
解答の導き方
この設問は、出力準備処理をブラックボックステストで確認するとき、何を確かめるべきかを問うています。ブラックボックステストとは、処理の内部の手順には注目せず、与えた入力に対して、出力が仕様どおりになるかを確認する試験です。
本文には、出力準備処理について「注文書に含める注文情報を出力順に並べて出力ワーク領域に格納する」とあります。つまり、この処理に注文データと注文情報件数を渡したとき、注文情報が正しい順序で出力ワーク領域に格納されるかを確認します。
この考え方に当てはまるのは、入力として渡した引数の内容に対して、出力ワーク領域の内容が仕様どおりであることを確認するウです。入力に対する出力が正しいかを調べているため、ブラックボックステストの目的に合っています。
アの「流れ図の全ての分岐処理が実行されたことを確認する」は、処理の内部を見て、分岐の通り方を確かめています。これは、内部の処理経路を確認するホワイトボックステストの考え方です。すべての分岐を実行したかを調べる方法は、分岐網羅と呼ばれます。
イは、渡した注文データや注文情報件数が仕様どおりかを確認する内容です。テストに使う入力が適切であることは大切ですが、それだけでは処理の結果が正しいかどうかは分かりません。出力ワーク領域の内容まで確認する必要があります。
誤りやすいポイント
- アのように、流れ図の分岐をすべて通ったか調べるのは、ブラックボックステストではなく、処理の内部を確認するテストです。
- テスト用の入力データが正しいかを確認するだけでは、処理が正しく動いたとは判断できません。入力に対する出力も確かめます。
- ブラックボックステストでは、内部の変数や処理順ではなく、「入力」と「期待する出力」の組合せに注目します。
FAQ
Q: ブラックボックステストでは、処理の内部をまったく調べないのですか?
A: ブラックボックステストとして確認するときは、内部の処理手順ではなく、入力に対する出力が仕様どおりかを中心に調べます。内部の分岐を確認するのは、ホワイトボックステストの考え方です。
A: ブラックボックステストとして確認するときは、内部の処理手順ではなく、入力に対する出力が仕様どおりかを中心に調べます。内部の分岐を確認するのは、ホワイトボックステストの考え方です。
Q: 入力データが仕様どおりか確認する必要はないのですか?
A: 入力データを適切に用意する必要はあります。ただし、入力が正しいことの確認だけでは処理結果の正しさを確かめられません。期待する出力と実際の出力を比べることが重要です。
A: 入力データを適切に用意する必要はあります。ただし、入力が正しいことの確認だけでは処理結果の正しさを確かめられません。期待する出力と実際の出力を比べることが重要です。
Q: 分岐網羅とは何ですか?
A: 条件判定で「Yes」と「No」になる場合など、すべての分岐を実行することを確認する方法です。処理の内部を調べるテストで使われます。
A: 条件判定で「Yes」と「No」になる場合など、すべての分岐を実行することを確認する方法です。処理の内部を調べるテストで使われます。
関連キーワード: ブラックボックステスト、ホワイトボックステスト、テストケース、分岐網羅、入出力仕様




