平成27年春期試験午前問題 午後問8

問8 情報システム開発

チケット販売システムの在庫調整機能の開発に関する次の記述を読んで,設問1~3に答えよ。

 C社とD社は,インターネットを用いたチケット販売用Webサイトをそれぞれ運営している。C社,D社のWebサイトは,ともに複数の公演を取り扱い,24時間販売可能である。両社は,イベントの主催者であるV社の委託を受けて,チケットを販売している。
 V社は,公演ごとに両社の売行きを予想し,販売開始前にC社,D社にチケット在庫を割り当てる。両社のWebサイトでは,それぞれ自社に割り当てられたチケット在庫だけを販売する。
 近年,同じ公演のチケットが,一方のWebサイトでは売切れになっているにもかかわらず,他方のWebサイトではまだ販売されているという状況が多く見られる。そこでV社は,C社とD社に対して,販売開始後に在庫が多いWebサイトから少ないWebサイトへチケット在庫を移動する在庫調整機能の開発を依頼した。
 C社,D社は依頼を受けて検討に着手した。C社は開発部門のE氏,D社は開発部門のF氏がそれぞれ設計を担当することになった。

〔V社の要望〕
 在庫調整機能に関するV社の要望は,次のとおりである。
  • 在庫調整を行うかどうかは,公演ごとに決定し,販売開始後も変更可能とする。
  • 在庫調整は,利用者のアクセスが少ない時間帯を選び,1日に数回実施できる。
  • 在庫調整実施中の公演のチケットは,数分程度であれば一時的に販売不可となってもよい。
  • 公演ごとに,在庫調整を実施するチケット在庫数のしきい値を設定する。しきい値はC社WebサイトとD社Webサイトで同じ値とする。在庫調整を開始する時点でC社Webサイト,D社Webサイトのどちらか一方の販売可能なチケット在庫数がしきい値未満であった場合,チケット在庫を移動する。ただし,販売可能なチケット在庫数が,両方のWebサイトでしきい値以下の場合,チケット在庫の移動は実施しない。
  • これらの要望を満たす実現方式の中で,できるだけ費用を掛けずに済む方式を採用したい。

〔V社チケット在庫のデータ項目〕
 C社,D社で保持するV社チケット在庫のデータ項目(抜粋)を表1に示す。チケット在庫データは,公演の全席分をC社,D社の両社で保持する。データ項目は将来的にV社の意向によって追加される可能性がある。
pm08_1.gif
〔在庫移動処理の検討〕
 E氏とF氏は,チケット在庫を移動するための処理(在庫移動処理)の内容について検討した。しきい値を50席とした場合の在庫移動処理の内容を表2に示す。
pm08_2.gif
〔システム処理方式の検討〕
 E氏とF氏は,V社の費用面の要望も考慮した結果,D社システムがファイルを送信することによって処理を開始し,ファイルを受信したC社システムが在庫移動処理を実施した後,D社システムへ結果のファイルを送信するという,ファイルを用いた疎結合構成の在庫調整処理を採用することとした。
 決定した処理方式の案は次のとおりである。

 D社システムは,スケジューラによって1日に数回,在庫調整処理を起動する。D社Webサイトでその公演の販売停止を行った後,データベース(以下,DBという)から処理対象公演全席分のチケット在庫データを抽出し,一つのファイル(以下,I/Fファイルという)に編集してC社へ送信する。
 C社システムは,D社からI/Fファイルを受信すると,在庫調整処理を開始する。C社Webサイトでその公演の販売停止を行った後,DBから処理対象公演全席分のチケット在庫データを抽出する。C社,D社のチケット在庫データを基に表2の在庫移動処理を行い,処理結果のチケット在庫データをDBに反映し,C社Webサイトでその公演の販売再開を行った後,処理対象公演全席分の在庫移動結果をI/Fファイルに編集してD社へ送信する。
 D社システムは,C社からI/Fファイルを受信すると,処理結果のチケット在庫データをDBに反映した後,D社Webサイトでその公演の販売再開を行う。
 通信の異常などで,C社からのI/Fファイル送信のエラーを検出した場合,又はD社側でI/Fファイル受信タイムアウトを検出した場合は,その時点でC社,D社とも在庫調整処理前のDBの状態で販売を再開する。

〔ファイル形式の検討〕
 在庫調整処理で使用するI/Fファイルの形式として,"CSV形式"と"XML形式"を比較した。
 検討の結果,aの追加によってデータ項目を追加できるという,"XML形式"のもつ拡張性に注目して,ファイル形式は"XML形式"を採用することにした。

〔シーケンス図の作成〕
 E氏とF氏は,ここまでの検討を基に処理のシーケンス図を作成した。作成したシーケンス図を図1に示す。
pm08_3.gif
 図1中の"タイマ"オブジェクト,"処理生成",及び"タイムアウト発生"以降のメッセージは,シーケンス図作成段階で,①"C社ファイル送信がエラーとなった場合にD社Webサイトで不具合が発生する"という問題に対応するために追加した処理である。

〔テストで見つかった不具合〕
 在庫調整処理中に回線の不通によってC社ファイル送信がエラーとなる異常系のテストを行ったところ,あるチケット在庫に関するC社Webサイト,D社Webサイトでの販売状況に,シーケンス図の誤りに起因する不具合が発生した。
 表2の項番3に該当するテストデータでは一部のチケット在庫がC社Webサイト,D社Webサイトの両方でd,表2の項番4に該当するテストデータでは一部のチケット在庫がC社Webサイト,D社Webサイトの両方でeとなることが確認された。
 E氏とF氏は,シーケンス図の不具合を修正するために,②C社在庫調整処理が呼び出す,又は受け取る"処理結果反映","販売再開","C社ファイル送信",及び"C社ファイル受信回答"のメッセージの順序を見直した

設問1

本文中のaに入れる適切な字句を答えよ。

解答例・解答の要点

a:要素

解説

C社およびD社に割り当てたチケットの在庫を必要に応じて移動し、チケットの在庫を調整する機能を設計検討する問題です。主に在庫データをどう管理するのかと、在庫調整処理のシーケンス(手順)を正しく理解し、適切なテストが行えるかどうかを問うています。

aについて〕
本文の〔ファイル形式の検討〕に登場します。在庫調整処理で使用するI/F(インタフェース)ファイルの形式としてCSV形式とXML形式を比べ、「[a]の追加によってデータ項目を追加できる」という特徴を備えたXML形式を採用しています。

CSVは Comma-Separated Values または Comma-Separated Variables の略で、日本語では「カンマ区切り」などと呼びます。テキストデータを複数のフィールド(項目)に分け、区切り文字カンマ「,」を使って区切ったデータ形式です。
一方XMLは「Extensible Markup Language」の略で、ユーザが独自に定義したタグを用いて文書構造を記述するマークアップ言語です。、XMLでは各データを要素(Element)と呼び、要素名と属性(Attribute)をつけたタグで挟んで表現します。要素を自由に追加することができ、入れ子構造にもできるので汎用性が高いという特徴があります。
pm08_4.gif
データ項目は将来的にV社の意向によって追加される可能性があるので、要素の追加によりデータ項目を追加できることが、本システムでXMLを採用する大きなメリットとなります。したがって[a]には「要素」が入ります。

a=要素

設問2

〔シーケンス図の作成)について,(1),(2)に答えよ。
  • タイムアウト処理がない場合に発生する,本文中の下線①の不具合とはどのような内容か。20字以内で述べよ。
  • 図1中のbcに入れる分岐の条件は何か。図1中のメッセージ名称を用いた適切な字句を答えよ。

解答例・解答の要点

  • 対象公演が販売停止のままとなる (15文字)
  • b:C社ファイル受信回答未実施
    c:C社ファイル受信回答済み

解説

  • 問題文には、"C社ファイル送信がエラーとなった場合にD社Webサイトで不具合が発生する"問題の解消のためにタイムアウト処理を追加したとあります。したがって、ここでは図1のタイムアウト処理がなかったときに発生する問題を考えることになります。

    〔システム処理方式の検討〕では「通信の異常などで,C社からのI/Fファイル送信のエラーを検出した場合,又はD社側でI/Fファイル受信タイムアウトを検出した場合は,その時点でC社,D社とも在庫調整処理前のDBの状態で販売を再開する。」という記載がありますが、図1のシーケンス図でタイムアウト処理がない場合には、D社在庫調整処理オブジェクトがC社ファイルを受け取って正常応答しない限り、D社の販売は再開されないことがわかります。つまり、C社ファイル送信がエラーとなった場合、チケット移動対象となった公演がD社Webサイトで販売停止のままとなる問題が発生します。

    ∴対象公演が販売停止のままとなる

  • bcについて〕
    シーケンス図における複合フラグメント「alt」はAlternativeの略で、複数の条件分岐を表します。altの中を点線で区切り、各区画に記入されたゲート条件が成立するとその区画内のシーケンスを実行します。

    図1ではゲート条件[b]が成立したときにC社在庫調整処理オブジェクトに処理中止のメッセージ、D社販売処理オブジェクトに販売再開のメッセージを送っていることから、[b]は「通信がうまくいかなかった」ことを表す条件である必要があります。問題文に「図1中のメッセージ名称を用いた適切な字句を答えよ」という条件が付いていることに注意すると、[b]には「C社ファイル受信応答未実施」「C社ファイル受信応答未完了」といった字句が入ります。

    ここで「C社ファイル送信の未受信」という旨の条件にしてしまうと、C社から受信したI/Fファイルにエラーがあり、C社ファイル受信応答を返さないケースで販売再開がされなくなってしまうので不適切です。問題文内で、受信タイムアウトだけでなく、I/Fファイルのエラー検出時も在庫調整処理前のDBの状態で再開すると記述されていることに注意しましょう。

    一方、タイマイベント時点までに「通信がうまくいった」ときは特に何もする必要がありません。一般的なC言語などのプログラム言語では「else」を使って、先の条件式が成立しないときの処理を書くことができますが、やはり「図1中のメッセージ名称を用いた適切な字句を答えよ」という条件がついているため、ゲート条件[c]にうっかり「else」と書いてしまうと不正解になります(一般的にシーケンス図では「else」で済まさず、きちんとすべてのゲート条件を書きます)。したがって、[c]には[b]とは逆の記述、すなわち「C社ファイル受信回答済み」「C社ファイル受信回答完了」といった旨の字句が入ります。

    b=C社ファイル受信回答未実施
     c=C社ファイル受信回答済み

設問3

〔テストで見つかった不具合〕について,(1),(2)に答えよ。
  • 本文中のdeに入れる適切な字句を答えよ。
  • 本文中の下線②で"処理結果反映","販売再開","C社ファイル送信",及び"C社ファイル受信回答"のメッセージの順序をどのように修正したか。修正後の処理順を解答群の記号を用いて答えよ。
解答群
  • 処理結果反映
  • 販売再開
  • C社ファイル送信
  • C社ファイル受信回答

解答例・解答の要点

  • d:販売可能
    e:販売不可
  • (ウ)→(エ)→(ア)→(イ)

解説

  • dについて〕
    表2の項番3は、D社の未販売チケットをC社に移動させる処理です。これをC社ファイル送信がエラーになる状態で実行すると、次の流れになります。
    1. C社側でD社のチケットをC社に移動する(C社増、D社減)
    2. C社のDBに反映させ、販売再開する
    3. C社ファイル送信エラー
    4. タイムアウト処理によりD社販売再開
    C社は在庫調整処理を実施してデータベース上の在庫を増やした後に販売を再開するのに対し、D社は更新情報を受け取ることができないため、在庫調整前のデータのまま販売を再開します。その結果、D社からC社に移動したはずの在庫情報がD社のデータベースに反映されず、移動対象となった公演のチケットがC社・D社の両方で「販売可能」状態となります。

    d=販売可能

    eについて〕
    表2の項番4は、C社の未販売チケットをD社に移動させる処理です。これをC社ファイル送信がエラーになる状態で実行すると、次の流れになります。
    1. C社側でC社のチケットをD社に移動する(C社減、D社増)
    2. C社のDBに反映させ、販売再開する
    3. C社ファイル送信エラー
    4. タイムアウト処理によりD社販売再開
    C社は在庫調整処理を実施してデータベース上の在庫を減らした後に販売を再開するのに対し、D社は更新情報を受け取ることができないため、在庫調整前のデータのまま販売を再開します。その結果、C社からD社に移動したはずの在庫情報がD社のデータベースに反映されず、移動対象となった公演のチケットがC社・D社の両方で「販売不可」状態となります。

    e=販売不可

  • C社とD社のデータベース間で在庫情報の不整合が起こるのは、D社からのC社ファイル受信回答を待たずにC社側の処理結果反映と販売開始が行われるためです。この不整合が起こらないようにするためには、C社からファイルを送信(ウ)した後、D社に正しく届いたことを確認(エ)してから、C社とD社両方がデータベースに処理結果を反映(ア)し、販売を再開(イ)すればよいので、「(ウ)→(エ)→(ア)→(イ)」が正解となります。

    ∴(ウ)→(エ)→(ア)→(イ)

Pagetop