令和7年度 春期 応用情報技術者試験 午後 問8 エラーハンドリングの設計

テクノロジシステム開発技術

この問題は2025(R7)春 応用情報技術者 午後に出題されたものです。出題時点の法令・制度に基づく内容のため、現行の内容と一致しない場合があります。

本ページの問題文・選択肢は、原本の体裁を Web 表示用に正規化しています(改行・記号・数式・図表参照の調整)。設問の趣旨および正解に影響する変更は加えていません。

学習ガイド

CRMシステムの設計を題材に、エラーハンドリングという地味ながら実務で重要なテーマを扱う問題です。エラー種別と運用担当者の対応、出力内容を参照する関係者の整理、監視対象の選定、そしてアスペクト指向プログラミングによるログ出力の共通化までが問われます。この記事では、エラー情報の受け手が誰かという視点で各設計判断を説明し、機密情報をログに出さない理由のような運用上の配慮も確認します。

この記事で押さえる論点

  • エラー種別ごとの対応と出力先(ログ・画面)の設計を説明する
  • 関係者に応じたエラーメッセージの出し分けを検討する
  • アスペクト指向プログラミングによる横断的関心事の分離を理解する

問題本文

問8 エラーハンドリングに関する次の記述を読んで、設問に答えよ。

Q社は、業務システムの受託開発会社である。Q社は、スーパーマーケットの複数の店舗を運営するB社から、CRM (Customer Relationship Management) システムの開発と運用保守業務を受託した。CRMシステムは各店舗で利用され、顧客からの意見やクレーム、店舗での対応の内容が登録・蓄積される。CRMシステムを運用する際の関係者の一覧を表1に示す。

表1 関係者の一覧
図の説明テキスト

表1 関係者の一覧

関係者 説明
顧客 B社の店舗に来店した顧客。意見やクレームを,店舗に勤務するB社の従業員に伝える。
利用者 CRMシステムへのアクセスが許可されたB社の従業員。顧客からの意見やクレームをCRMシステムに入力し,過去の類似案件の記録を参考に顧客対応を行う。顧客から聞き取った氏名と連絡先を,CRMシステムに顧客情報として登録することがある。顧客情報は,B社の従業員が顧客に連絡するためだけに利用する。
運用担当者 B社に常駐しているQ社の従業員。CRMシステムの運用手順書に従って,利用者からの質問や不具合発生時の問合せに対応する。問合せ時の状況や不具合の再現手順の確認のために,運用中のCRMシステムへのアクセスが許可されている。運用手順書で対応しきれない技術的な問題については,Q社の開発担当者に対応を依頼する。
開発担当者 Q社内で勤務しているQ社の開発担当者。運用担当者からの問合せの際は,調査に必要な最小限の情報として,不具合の状況,再現手順及び発生時刻付近のログを受け取る。運用中のCRMシステムへの入力情報を,直接参照することはできない。

Q社は、システムのリリース後に想定される、店舗からの問合せに対する迅速な対応を可能にするために、想定される問合せのパターンと対応方法を事前に整理し、対応の際に必要な要件をシステムの設計に反映させることにした。

〔CRMシステムの構造〕

CRMシステムのクラス図(一部)を図1に示す。AbstractController, AbstractService及びAbstractDaoは、それぞれ画面遷移、ビジネスロジック及びデータベースアクセスの共通処理が実装された抽象クラスである。これらのクラスを a したクラスを作成して、具体的な機能を実装する。ログを出力するにはLoggerクラスを利用する。ログの出力時には“DEBUG”, “ERROR”などの、ログの種別(以下,ログ種別という)が記録される。図1に示すクラスを使った処理の流れの例として,システムにログインする際のシーケンス図を,図2に示す。

図1 CRMシステムのクラス図(一部)
図の説明テキスト

図1 CRMシステムのクラス図(一部)
AbstractController, AbstractService, AbstractDaoの3つの抽象クラス(斜字体で表記)があり、これらをそれぞれLoginController, AuthService, UserDaoが継承している。また同様にCaseController, CaseService, CaseDaoが継承している。
LoginControllerクラスは「+ログイン画面表示()」「+ログイン実行(ID, Password)」メソッドを持つ。
AuthServiceクラスは「+認証(ID, Password)」メソッドを持つ。
UserDaoクラスは「+検索(b)」メソッドを持つ。
これらとは別にLoggerクラス(「+ログ出力(ログ種別, 内容)」メソッドを持つ)とExceptionクラスが定義されている。
注記として「各クラスとLoggerクラス及びExceptionクラスとの関連は省略する。」と記載されている。
凡例には、クラスの枠内に上から「クラス名」「+属性名」「+メソッド名()」の順で記述され、「斜字体は抽象を意味する。」と説明されている。

図2 システムにログインする際のシーケンス図
図の説明テキスト

図2 システムにログインする際のシーケンス図
「:Webブラウザ」「:LoginController」「:AuthService」「:UserDao」の4つのライフラインが登場する。
処理の流れは以下の通り。

  1. :Webブラウザから:LoginControllerへ「ログイン実行(ID, Password)」メッセージが送信される。
  2. :LoginControllerから:AuthServiceへ「認証(ID, Password)」メッセージが送信される。
  3. :AuthServiceから:UserDaoへ「検索(b)」メッセージが送信される。
  4. :UserDaoから:AuthServiceへ「利用者情報」の戻り値(点線矢印)が返される。
  5. :AuthServiceから:LoginControllerへ「c」の戻り値(点線矢印)が返される。

利用者がログイン画面で認証に必要な情報を入力しログインを実行すると,LoginControllerのログイン実行メソッドが呼び出される。ログイン実行メソッドは,画面から入力された情報をAuthServiceに引き渡す。AuthServiceは,UserDaoに実装されている,利用者情報の検索を行う機能を用いて,認証の判定に必要な利用者情報をデータベースから取得する。AuthServiceは,取得した利用者情報を用いてログイン認証の判定を行い,結果を返す。

プログラムの実行中にエラーが発生した際の,例外処理用のクラスとしてExceptionクラスがある。Exceptionクラスは,エラーの詳細情報として,エラーの発生箇所のソースファイル名,行番号,メソッドの呼び出し履歴及び直接的な原因を示すメッセージ文字列をもつ。エラー発生時には,エラーの発生箇所で Exceptionクラスのオブジェクトを作成し,呼出し元ではそれを使って例外処理を行う。

〔CRMシステムのエラーの種別の整理とその対応〕

Q社は,運用中に起き得るエラーの種別(以下,エラー種別という)を整理し,対応方法について検討した。エラー種別と運用担当者の対応を表2に,対応を行うために必要な出力機能及び出力内容と,出力内容を参照する関係者を表3に示す。

表2 エラー種別と運用担当者の対応
図の説明テキスト

表2 エラー種別と運用担当者の対応

エラー種別 説明 運用担当者の対応
システム障害 Web サーバやデータベースサーバの停止,プログラムの異常終了,ネットワーク障害などの原因によって,システム全体の稼働が継続不能になる。 利用者からの報告を受けて,サーバやサービスの稼働状況を確認し,必要に応じて再起動を行う。それでも復旧できない場合は開発担当者に対応を依頼する。
システムエラー 主にプログラムの欠陥によって発生する,想定外のエラー。操作の途中で画面にエラーメッセージが表示され,業務を続行できない。 利用者から,操作した手順を聞き取り,状況を確認する。エラー発生時の前後のログをログファイルから切り出して開発担当者に送付し,対応を依頼する。
業務エラー 業務ルール上,入力値の内容が正しくないか,禁止されている操作をしたときに発生するエラー。プログラムで想定済みのエラーで,利用者が入力値の内容を修正し,操作をやり直すことによって業務を続行できる。 利用者から,操作した手順と,画面に表示されたエラーメッセージの内容を聞き取り,状況を確認する。運用手順書を参照し,エラーの回避方法を利用者に伝える。回避方法が不明な場合は,エラーの再現手順とエラー発生時の前後のログを開発担当者に送付し,回避方法の提示を求める。
入力エラー 文字列長や文字種に関する入力値の検証時のエラー。利用者自身が入力値を修正することによって業務を続行できる。 対応なし。利用者自身が,画面に表示されているエラーメッセージを参照してエラーを解消する。
表3 出力機能及び出力内容と,出力内容を参照する関係者
図の説明テキスト

表3 出力機能及び出力内容と,出力内容を参照する関係者

出力機能 出力内容 参照する関係者
ログ出力 プログラムの実行中に想定外の事態が発生した場合は処理を中断し,処理の呼出し元にエラーの内容を返す。その際,エラーの概要,詳細情報及びメソッドの呼出し履歴を Logger クラスを使ってログファイルに出力する。 d
エラーメッセージ表示 エラーの概要,Exception クラスがもつエラーの詳細情報及び利用者が次に行うべき操作の案内を画面に表示する。 利用者

表2,表3についてレビューを行ったところ,次の3点が指摘された。

(1) 表2のシステム障害及びシステムエラーは,利用者の問合せの前にシステムが自動的に検出して運用担当者が対応を開始できるようにすべきである。
(2) 表3の出力内容には,セキュリティの観点における潜在的なリスクがある。
(3) 表3について,エラーに関するログだけでは,開発担当者が原因を調査するための情報としては不足するので,追加の情報を出力する必要がある。

指摘事項の(1)に対応するために,監視の機能を用意することにした。監視の機能は,監視対象の情報を定期的に取得し,エラー発生時の特徴を検出した場合に電子メールで運用担当者に通知する。指摘事項の(2)については,表3の出力内容を一部変更することにした。指摘事項の(3)については,アスペクト指向プログラミングを導入して,プログラムの処理の中で,要所ごとにログを出力することにした。

〔アスペクト指向プログラミングの導入〕

レビューの指摘事項の(3)に関連して,利用者が行った操作内容を一律でログに出力することにし,これを実現するためにアスペクト指向プログラミングを導入することにした。

アスペクト指向プログラミングでは,特定のルールを定義しておくことによって,そのルールに合致する全ての箇所で同じ処理を実行させる。ルールの定義の条件にはクラス名,メソッド名に含まれる文字列のパターンが利用できる。また,特定の条件に合致する場合には実行の対象から除外するように指定することもできる。

ここでは,実装上の制約ができるだけ少なくなるようなルールの定義方法で,画面遷移に関するクラスに実装された全てのメソッドについて,クラス名,メソッド名及び全ての引数の内容をログに出力することにした。これを実現するために,eを親クラスにもつクラスのfには必ず特定の文字列のパターンを含み,それ以外のクラスのfには特定の文字列のパターンを含まないように命名規則を定義した。ただし,秘匿情報や個人情報の保護の観点から,認証に関する情報や,顧客情報を扱う箇所はログに出力しないようにした。

Q社は,表2,表3に関する検討結果をシステムの設計に反映させ,開発を開始した。

設問と解答・解説

設問1

(1)

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

模範解答

継承

採点基準(配点 2点)

正確性(内容)(2点)

  • 2: 「継承」という字句を正確に解答している。
  • 1: 意味は通じるが、指定された字句と完全には一致していない(別名やタイポなど)。
  • 0: 無解答、または全く異なる内容を解答している。

解説

【解説】 業務運用の開始後に想定外の不具合が発生した場合、限られた情報を頼りに対応を行う必要があるため、エラーハンドリングの機能を設計時に考慮しておくことが望ましいです。本問ではCRMシステムの設計を題材にオブジェクト指向の基本概念を問うています。スーパークラスの特性(属性やメソッド)をサブクラスが引き継ぐ仕組みを継承と呼びます。エラーハンドリング機能において、共通の処理を抽象クラスに定義し、各具象クラスでそれを継承して利用することで、設計の共通化と再利用性の向上が図られます。 【高得点のポイント】 ・オブジェクト指向の基本用語である「継承」を文脈に合わせて正しく導出できていること。

(2)

図1及び図2中の b に入れる適切な字句を答えよ。

模範解答

ID

採点基準(配点 2点)

正確性(内容)(2点)

  • 2: 「ID」という字句を正確に解答している。
  • 1: 意味は通じるが、指定された字句と完全には一致していない。
  • 0: 無解答、または全く異なる内容を解答している。

解説

【解説】 エラーログなどの記録において、各事象を一意に識別するための識別子が必要です。図1や図2の文脈において、各処理やログレコードを紐付けるために利用されるのがID(識別子)です。障害調査の際には、このIDをキーとして関連するログを抽出します。 【高得点のポイント】 ・ログやレコードの一意性を担保する項目として「ID」を特定できること。

(3)

図2中の c に入れる適切な字句を答えよ。

模範解答

ログイン認証の判定結果

採点基準(配点 2点)

正確性(内容)(2点)

  • 2: 「ログイン認証の判定結果」という字句を正確に解答している。
  • 1: 意味は通じるが、指定された字句と完全には一致していない(一部の単語の欠落など)。
  • 0: 無解答、または全く異なる内容を解答している。

解説

【解説】 セキュリティ監査やエラー調査において、ログインの成功・失敗の履歴は非常に重要です。図2のエラー処理フローにおいて、認証に関連する記録としてログイン認証の判定結果をログに残すことが求められます。これにより、不正アクセスの試みや認証エラーの原因究明が可能になります。 【高得点のポイント】 ・認証処理に関するログとして必要な情報(ログイン認証の判定結果)を正しく補完できること。

設問2

表3中の d について,どの関係者に向けた表現として出力をすべきか。表1の関係者から全て選び答えよ。

  1. 顧客 顧客
  2. 利用者 利用者
  3. 運用担当者 運用担当者
  4. 開発担当者 開発担当者

模範解答

選択肢運用担当者: 運用担当者

選択肢開発担当者: 開発担当者

配点 1

解説

【解説】 エラーハンドリングにおけるシステムエラーの出力先について、誰がその情報を必要とするかを問う問題です。システム内部の異常や詳細なエラーログは、システムの維持管理を担う運用担当者や、不具合の調査・修正を行う開発担当者に向けた情報です。 【各選択肢の解説】 ・顧客: システムの利用者側であり、詳細なシステムエラー情報を提示するのはセキュリティ上も適切ではありません。 ・利用者: 顧客と同様に、システムの内部情報は不要です。 ・運用担当者: 正解。システムの監視や一次対応を行うため必要です。 ・開発担当者: 正解。障害の根本原因を調査・修正するために必要です。

設問3

本文中の下線①について,業務運用中のCRMシステムの何を対象に監視するか。システム障害とシステムエラーのそれぞれについて,最も適切なものを解答群の中から選び,記号で答えよ。

(1)

システム障害について最も適切なものを解答群の中から選び,記号で答えよ。

  1. 画面に表示されたエラーメッセージ
  2. データベースの接続確認の結果
  3. 電子メール送信履歴
  4. ログ種別の文字列
  5. ログファイルのサイズ

模範解答

選択肢イ: データベースの接続確認の結果

配点 1

解説

【解説】 「システム障害」とは、システムが提供するべき機能を果たせなくなった状態を指します。データベースへの接続不可などは、システム全体の機能停止に直結する重大な障害です。したがって、データベースの接続確認の結果を監視することは、システム障害の検知に直結します。 【各選択肢の解説】 ・ア: エラーメッセージはユーザー向けであり、システム全体の障害監視としては不十分です。 ・イ: 正解。データベース接続はシステムの基幹であり、これが失敗することはシステム障害を意味します。 ・ウ: 電子メール送信履歴は個別の業務結果であり、障害監視の直接的な指標ではありません。 ・エ: ログ種別の文字列はエラーの分類に用いるもので、障害そのものの監視対象としては適切ではありません。 ・オ: ログファイルのサイズは容量監視には有効ですが、システム障害の即時検知には向きません。

(2)

システムエラーについて最も適切なものを解答群の中から選び,記号で答えよ。

  1. 画面に表示されたエラーメッセージ
  2. データベースの接続確認の結果
  3. 電子メール送信履歴
  4. ログ種別の文字列
  5. ログファイルのサイズ

模範解答

選択肢エ: ログ種別の文字列

配点 1

解説

【解説】 「システムエラー」とは、システムの機能や挙動に直接的な影響は与えないものの、内部的に発生した異常や状態変化を指します。これを捉えるためには、出力されるログの中に含まれるエラーレベルやログ種別の文字列(例:ERROR, WARNINGなど)を監視し、異常を検知することが有効です。 【各選択肢の解説】 ・ア: 画面のエラーメッセージはユーザー操作による業務エラーの可能性もあり、システムエラーの確実な監視対象とはいえません。 ・イ: これはシステム障害の監視に該当します。 ・ウ: 個別の処理結果であり、システム全体のエラー監視指標ではありません。 ・エ: 正解。ログ種別(エラーレベル等)の文字列を監視することで、システムエラーを適切に拾い上げることができます。 ・オ: ログの肥大化は監視できますが、エラー内容の検知はできません。

設問3の“システムエラー”は,正答率がやや低かった。システムの機能や挙動に影響を与えず,異常や状態変化を捉えるために,どの情報をよりどころにすることができるかを見極めることは,無理なく有効な監視機能を用意するために非常に重要である。

設問4

(1)

本文中の下線②について,変更した出力機能を答えよ。

模範解答

エラーメッセージ表示

採点基準(配点 2点)

知識・理解度(内容)(1点)

  • 1: 変更対象となる出力機能が「エラーメッセージ表示」であることを正しく理解し、解答に含めている。
  • 0: 該当する機能が記載されていない、または誤っている。

論理性(構造)(1点)

  • 1: 不必要な装飾がなく、問われた機能を明確かつ簡潔に記述している。
  • 0: 記述が不明瞭であり、どの機能を指しているか特定しづらい。

解説

【解説】 システムエラーの出力先として、誰に対して情報を提示するべきかの判断が問われます。不特定多数や一般利用者が目にする可能性のあるエラーメッセージ表示には、詳細な内部情報を出力すべきではありません。そのため、変更対象となる出力機能は「エラーメッセージ表示」となります。システムが出力する情報は必ずしも多ければよいわけではなく、対象者に応じた適切な判断が必要です。 【高得点のポイント】 ・対象となる出力機能が「エラーメッセージ表示」であることを正しく特定できていること。

(2)

本文中の下線②について,その変更の内容を20字以内で答えよ。

模範解答

エラーの詳細情報を出力しない。

採点基準(配点 2点)

知識・理解度(内容)(1点)

  • 1: 「エラーの詳細情報を出力しない」という内容の変更点が正しく記述されている。
  • 0: 変更内容が誤っている、または不要な情報を出力し続けるような内容となっている。

論理性(構造)(1点)

  • 1: 20字以内という制限の中で、変更内容が簡潔かつ論理的に表現されている。
  • 0: 文章の繋がりが不自然であるか、意味が正しく伝わらない構成となっている。

解説

【解説】 運用担当者や開発担当者向けの詳細なシステムエラー情報は、攻撃者にシステムの内部構造(脆弱性のヒントなど)を教えることになりかねません。そのため、一般の利用者が目にする画面上には、エラーの詳細情報を出力しないように変更する必要があります。情報の受け手に合わせた出力内容の制御が重要です。 【高得点のポイント】 ・エラーの詳細情報を画面等に出力しないようにするという変更内容が含まれていること。 ・利用者に不要かつ機密性の高い情報を見せないという意図が反映されていること。

設問4は,正答率が平均的であった。システムが出力する情報は,必ずしも多ければよいわけではない。誰に向けての情報を,どこに,どのように出力するべきかについて,適切に判断するよう心掛けてほしい。

設問5

(1)

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

模範解答

AbstractController

採点基準(配点 3点)

正確性(内容)(3点)

  • 3: 「AbstractController」という字句を正確に解答している。
  • 1: 意味は通じるが、大文字小文字の誤りなど完全に一致していない表記揺れがある。
  • 0: 無解答、または全く異なる内容を解答している。

解説

【解説】 アスペクト指向プログラミング(AOP)を導入することで、ログ出力やエラーハンドリングといった横断的な関心事を分離できます。本文の構造上、各コントローラで共通して行われるべき例外補足や処理は、それらの親となるAbstractControllerに集約するか、AOPの仕組みを用いて共通化されます。文脈から、共通のコントローラ基底クラスであるAbstractControllerが該当します。 【高得点のポイント】 ・AOPの適用対象または共通処理の集約先として「AbstractController」を正しく導出できること。

(2)

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

模範解答

クラス名

採点基準(配点 2点)

正確性(内容)(2点)

  • 2: 「クラス名」という字句を正確に解答している。
  • 1: 意味は通じるが、指定された字句と完全には一致していない表現である。
  • 0: 無解答、または全く異なる内容を解答している。

解説

【解説】 ログを出力する際、どのクラスでエラーや例外が発生したかを特定することは、原因調査において不可欠です。AOPを利用してログ出力を一元化する場合でも、実行時の情報から発生元のクラス名を取得し、ログに含める必要があります。 【高得点のポイント】 ・エラー発生箇所を特定するために必要な情報として「クラス名」を挙げられること。

(3)

本文中の下線③について,出力しないようにした理由を,20字以内で答えよ。

模範解答

ログは開発担当者も参照するから

採点基準(配点 2点)

知識・理解度(内容)(1点)

  • 1: ログの参照者に「開発担当者」が含まれるという事実を正しく把握し、解答に含めている。
  • 0: 開発担当者に関する言及がない、あるいは見当違いの理由を記載している。

説得力(考察)(1点)

  • 1: 出力しないようにした理由として、開発担当者が参照することによるリスク・影響が文脈から論理的に伝わる表現となっている。
  • 0: 理由としての説得力が不足している、または文章が破綻している。

解説

【解説】 システムに関連する情報について、誰が参照する可能性があるのかを見誤ると重大なセキュリティインシデントを引き起こしかねません。ログの参照権限を持つのが運用担当者だけでなく、開発担当者も参照する場合、開発環境や委託先などに機密情報が流出するリスクが高まります。そのため、参照範囲を考慮して機密性の高い情報はログに出力しない設計が必要です。 【高得点のポイント】 ・ログの参照者に「開発担当者」が含まれていることを指摘できていること。 ・情報の参照可能性に起因するセキュリティリスクを回避する意図が読み取れること。

設問5(2)は,正答率が低かった。システムに関連する情報について,誰が,どのような場合に参照する可能性があるのかを見誤ると,重大なセキュリティインシデントを引き起こしかねない。システムに関連する情報の参照可能性については,条件をよく読み慎重に判断するよう心掛けてほしい。