応用情報技術者 2016年 春期 午後 問08
通信販売用Webサイトにおける決済処理の設計に関する次の記述を読んで、設問1~4に答えよ。
T社ではインターネットを用いた通信販売を行っている。通信販売用Webサイト(以下、Webサイトという)で利用できる決済方法は、クレジットカードを利用して決済するクレジット決済だけであったが、顧客の利便性向上を目的に、新たにU社が運営するコンビニエンスストア(以下、コンビニという)での支払(以下、コンビニ決済という)の導入を検討することになった。
顧客は、購入する商品を選択し、顧客IDを入力して商品の配送先を指定した後、決済方法選択画面から希望する決済方法を選択することが可能となる。
Webサイトでのクレジット決済処理の処理内容を表1に、コンビニ決済処理の処理内容を表2、表3に示す。


〔アクティビティ図〕
現在のアクティビティ図を基に、コンビニ決済処理(リアルタイム処理)を加えたアクティビティ図を図1に、入金データチェック処理のアクティビティ図を図2に、入金期限チェック処理のアクティビティ図を図3に示す。

〔クラス図〕
現在のクラス図を基に、コンビニ決済処理を加えた決済処理に関連するクラス図を図4に示す。
〔入金期限チェック処理の処理タイミング〕
図2の入金データチェック処理と図3の入金期限チェック処理の処理タイミングについて考察する。
日付が変わった後、入金期限チェック処理の前には必ず入金データチェック処理を実施する必要がある。これは、①入金期限チェック処理が入金データチェック処理よりも先に実施された場合に発生する不具合を防止するためである。
設問1:
問題文を見る模範解答
a:配送センタへ商品の発送を指示する
b:顧客に商品の発送を通知する
c:入金期限日を過ぎている
d:入金期限日を過ぎていない
解説
解答の論理構成
-
表3“購入取消”の記述は
「Webサイトは、入金期限日が過ぎても入金されていない購入情報を取り消して、メールで顧客に通知する。」
です。図3の c はこの“取消ルート”に入る条件なので
「入金期限日を過ぎている」となります。 -
“入金期限確認”後に“取消”しない場合は、まだ期限内であることを示します。
したがって d は c の否定形で
「入金期限日を過ぎていない」となります。
誤りやすいポイント
- 表現を短縮し過ぎて「発送指示」「発送通知」など主語・対象を落としてしまう。
- c を「入金なし」だけにしてしまい、“期限を過ぎた”条件を欠落させる。
- d を「入金あり」と誤記し、期限内でも未入金というケースを取り逃す。
FAQ
Q: aとbの順序は答案に影響しますか?
A: 問題文には「aとbは順不同」とあるため、どちらをa/bにしても減点されません。
A: 問題文には「aとbは順不同」とあるため、どちらをa/bにしても減点されません。
Q: 「入金なし」だけではcの条件として不十分ですか?
A: 不十分です。「入金期限日が過ぎても入金されていない」という二つの要素が揃って初めて取消処理に入るため、期限の超過を必ず含める必要があります。
A: 不十分です。「入金期限日が過ぎても入金されていない」という二つの要素が揃って初めて取消処理に入るため、期限の超過を必ず含める必要があります。
Q: dに「期限内」と書いても正しいですか?
A: 意味は通じますが、設問は“条件”を求めています。表現をそろえて「入金期限日を過ぎていない」とする方が適切です。
A: 意味は通じますが、設問は“条件”を求めています。表現をそろえて「入金期限日を過ぎていない」とする方が適切です。
関連キーワード: フォークジョイン, バッチ処理, 入金確認, 取消処理, アクティビティ図
設問2:
問題文を見る解答群
ア:カード情報送信
イ:カード情報入力
ウ:決済情報通知
エ:購入取消
オ:コンビニ支払
カ:再決済依頼
模範解答
e:カ
f:エ
解説
解答の導き方
-
まずどのクラスに入れる操作かを確認します。図4では、e はクレジット購入情報クラス、f はコンビニ購入情報クラスの操作です。どちらも購入情報クラスを継承しており、購入情報には抽象操作「商品発送()」があります。購入情報の派生クラスは、決済の結果を受けてその購入をどう扱うか、という処理を受け持つことが分かります。
-
決済クラス側の操作を確認します。決済クラスには「決済方法選択()」と抽象操作「決済手続(注文ID)」があり、クレジット決済クラス・コンビニ決済クラスがそれぞれ「決済手続」を実装しています。設問3 のとおり、コンビニ決済の「決済手続」には決済番号取得や決済情報通知が含まれます。同じように、クレジット決済の「決済手続」には、表1 の「カード情報入力」と「カード情報送信」が含まれると考えられます。したがって、解答群のア(カード情報送信)とイ(カード情報入力)は決済クラス側の処理で、購入情報クラスの操作ではありません。
-
e(クレジット購入情報)について考えます。表1 で、クレジットカード会社の回答を受けた後の処理は二つです。
- 商品発送:「クレジットカード会社の回答が決済完了の場合、配送センタに商品の発送を指示し、…」
- 再決済依頼:「クレジットカード会社の回答がカード利用不可の場合、再度カード情報入力の画面を表示する。」 商品発送は既にクレジット購入情報クラスの操作として図4 にあるので、もう一方の「再決済依頼」が e に入ります。選択肢では カ が該当します。
- f(コンビニ購入情報)について考えます。コンビニ購入情報には「商品発送()」と「入金期限確認()」があります。表3 に「入金期限日が過ぎても入金されていない購入情報を取り消して、メールで顧客に通知する。」とあり、図3 にも「購入を取り消す」処理があります。購入の取消しはコンビニ支払特有の振る舞いなので、f には「購入取消」が入ります。選択肢では エ が該当します。
最終解答:
e:カ(再決済依頼)
f:エ(購入取消)
e:カ(再決済依頼)
f:エ(購入取消)
誤りやすいポイント
- e にイ(カード情報入力)を選んでしまう。カード情報の入力は決済の手続そのもので、クレジット決済クラスの「決済手続」に含まれます。購入情報クラスが受け持つのは、決済の結果(決済完了・カード利用不可)に応じた処理です。
- e にア(カード情報送信)を選んでしまう。クレジットカード会社とのやり取りも決済手続の一部です。
- 「再決済依頼」を画面表示の処理だからクラスの操作ではないと考えてしまう。商品発送も配送センタへの指示と顧客への通知を行う処理であり、二つは同じく「回答を受けた後の購入の扱い」として対になっています。
FAQ
Q: クラス図で、どの操作をどのクラスに置くかはどう判断しますか?
A: その処理の責務を持つクラスに置きます。本問では、決済の手続(方法の選択、カード情報の入力・送信、決済番号の取得など)は決済クラス群、決済の結果を受けた購入の扱い(商品発送、再決済依頼、購入取消など)は購入情報クラス群が受け持ちます。
A: その処理の責務を持つクラスに置きます。本問では、決済の手続(方法の選択、カード情報の入力・送信、決済番号の取得など)は決済クラス群、決済の結果を受けた購入の扱い(商品発送、再決済依頼、購入取消など)は購入情報クラス群が受け持ちます。
Q: 購入情報の「商品発送()」が斜体(抽象)になっているのはなぜですか?
A: 商品を発送するタイミングが決済方法によって異なるからです。クレジット決済では決済完了の回答を受けたとき、コンビニ決済では入金を確認したときに発送するので、派生クラスごとに実装します。
A: 商品を発送するタイミングが決済方法によって異なるからです。クレジット決済では決済完了の回答を受けたとき、コンビニ決済では入金を確認したときに発送するので、派生クラスごとに実装します。
関連キーワード: オブジェクト指向、継承、クラス図、責務の割当て、抽象操作
設問3:
問題文を見る模範解答
決済番号取得、決済情報通知
解説
解答の論理構成
- クラス図の前提
決済クラスの操作“決済手続”は抽象操作で、サブクラスが具体的処理を実装します。問題文には「図4中の決済クラスの操作“決済手続”は抽象操作(抽象メソッド)であり、処理の実体を含まない。」と明記されています。 - コンビニ決済クラスが担当する処理範囲
システム側が実行する処理だけが“決済手続”の実装対象になります。顧客が店舗で行う行為や、ユーザ操作そのものはクラス内のロジックではありません。 - 表2の処理名称を整理
表2には次の4つの処理名称が列挙されています。
・「決済方法選択」
・「決済番号取得」
・「決済情報通知」
・「コンビニ支払」 - 含める/含めないの判定
- 「決済方法選択」:購入フロー共通の入口であり、スーパークラスまたは画面制御が担当。サブクラス固有ではないので除外。
- 「決済番号取得」:U社へ購入情報を送信し決済番号を取得する処理であり、システム内ロジック。→ 含める。
- 「決済情報通知」:取得した決済番号をメールで顧客へ通知する処理であり、システム内ロジック。→ 含める。
- 「コンビニ支払」:顧客が店舗で行う行為であり、クラスのロジック外。→ 除外。
- 結論
以上から、コンビニ決済クラスの“決済手続”に含まれる処理名称は
「決済番号取得」「決済情報通知」
となります。
誤りやすいポイント
- 「決済方法選択」もサブクラスが処理すると誤解しやすい。実際には決済種別を選択するUIロジックであり、共通部品または親クラス側で扱います。
- 「コンビニ支払」をシステム処理と見做してしまう。店頭支払は顧客アクションであり、プログラム内で実装できる処理ではありません。
- 表1~表3の区分を見落とし、クレジット決済の処理名称を混在させるケース。
FAQ
Q: 「決済方法選択」を入れてはいけない明確な理由は?
A: 「決済方法選択」は顧客が画面で選ぶ操作であり、決済種別に依存しない共通フローだからです。抽象操作“決済手続”は各サブクラスが固有に実装する部分のみを対象にします。
A: 「決済方法選択」は顧客が画面で選ぶ操作であり、決済種別に依存しない共通フローだからです。抽象操作“決済手続”は各サブクラスが固有に実装する部分のみを対象にします。
Q: メール送信も“決済手続”に含めて良いのですか?
A: はい。「決済情報通知」は表2に「Webサイトは、U社から回答された決済番号と金額、入金期限日の情報…をメールで顧客に通知する。」と提示されており、システムが実行する処理として実装する必要があります。
A: はい。「決済情報通知」は表2に「Webサイトは、U社から回答された決済番号と金額、入金期限日の情報…をメールで顧客に通知する。」と提示されており、システムが実行する処理として実装する必要があります。
Q: 「コンビニ支払」を除外すると、入金後の処理はどこで扱いますか?
A: 入金後に行うのは表3のバッチ処理「入金データチェック」です。こちらは“決済手続”とは別のバッチジョブで実装されます。
A: 入金後に行うのは表3のバッチ処理「入金データチェック」です。こちらは“決済手続”とは別のバッチジョブで実装されます。
関連キーワード: アクティビティ図, クラス図, 抽象メソッド, 責務分割, リアルタイム処理
設問4:
問題文を見る本文中の下線①の不具合について、その内容を30字以内で述べよ。
模範解答
入金されている購入情報が取り消されてしまう。
解説
解答の論理構成
- 原因となる処理順の記述
問題文には「“入金期限チェック処理”の前には必ず“入金データチェック処理”を実施する必要がある」とあり、その理由として「“入金期限チェック処理”が“入金データチェック処理”よりも先に実施された場合に発生する不具合を防止するため」と明示されています。 - “入金データチェック処理”の役割
表3には「Webサイトは、U社から1時間に1回送信される入金データファイルを1件ずつ読み込み、入金データの決済番号がWebサイトで保持している決済番号と一致するかどうかを確認する。」とあり、この処理で支払済み情報をシステムに反映させます。 - “入金期限チェック処理”の動作
同じく表3に「Webサイトは、入金期限日が過ぎても入金されていない購入情報を取り消して、メールで顧客に通知する。」とあります。ここでは“入金されていない”かどうかを判定します。 - 不具合の発生タイミング
支払済みなのにまだファイル読込前の場合、システム上は未入金と認識されるため “購入情報” が誤って取消対象になります。 - 結論
したがって不具合の内容は「入金されている購入情報が取り消されてしまう。」となります。
誤りやすいポイント
- “入金データチェック処理”をリアルタイム処理と思い込み、バッチ順序の重要性を見落とす。
- 「取消」=キャンセルメール送信まで完了するため、その後の復旧コストを軽視しやすい。
- エラーファイル作成と購入取消を混同し、誤って「エラー扱いになる」と答えてしまう。
FAQ
Q: なぜファイル読込は1時間に1回なのですか?
A: 問題文には頻度だけが示され、設計上の理由は示されていませんが、実務では店舗側集計や回線負荷を考慮して一定間隔のバッチ取得が選ばれることが多いです。
A: 問題文には頻度だけが示され、設計上の理由は示されていませんが、実務では店舗側集計や回線負荷を考慮して一定間隔のバッチ取得が選ばれることが多いです。
Q: “入金データチェック処理”と“入金期限チェック処理”を並列実行してもロック制御で防げませんか?
A: ロックで同時更新は防げても「未入金と判断して取消」というロジック自体が先行してしまうため整合性は保証できません。処理順序を固定する方が確実です。
A: ロックで同時更新は防げても「未入金と判断して取消」というロジック自体が先行してしまうため整合性は保証できません。処理順序を固定する方が確実です。
Q: エラーファイルに書き込まれたデータはどう扱いますか?
A: 本問では記載がありませんが、通常はオペレータが内容を確認し、決済番号誤りや重複などを個別に調査・修正します。
A: 本問では記載がありませんが、通常はオペレータが内容を確認し、決済番号誤りや重複などを個別に調査・修正します。
関連キーワード: バッチ処理, データ整合性, 同期制御, アクティビティ図, トランザクション







