Take's Software Engineer Blog

TOEIC200点&プロマネな私が社内公募を経て、ソフトエンジニア&英語部門へ異動して奮闘していく話をしていきます

情報処理安全確保支援士試験 令和5年度 春期 午後1 問1 その2

[システム テスト]
システムテストを開始したところ、注文情報照会機能において不具合が見つかった。この不具合は、ある得意先の利用者IDでログインして画面から注文番号を入力すると、別の得意先の注文情報が出力されるというものであった。なお、ログイン処理時に、ログインした利用者IDと、利用者IDにひも付く得意先コード及び得意先名はセッションオブジェクトに保存されている。
 注文情報照会機能には、業務処理を実行するクラス(以下、ビジネスロジッククラスという)及びリクエスト処理を実行するクラス(以下、サーブレットクラスという)が使用されている。注文情報照会機能が参照するデータベースのE-R図を図3に、Eさんが作成したビジネスロジッククラスのソースコードを図4に、サーブレットクラスのソースコードを図5に示す。

 D主任、Eさん、Fさんは、不具合の原因が特定できず、セキュアプログラミングに詳しい技術課のHさんに協力を要請した。
 Hさんはアプリケーションログ及びソースコードを解析し、不具合の原因を特定した。原因は、図4で変数(e)が(f)として宣言されていることである。この不具合は、①並列動作する複数の処理が同一のリソースに同時にアクセスしたとき、想定外の処理結果が生じるものである。
 原因を特定することができたので、Eさんは、Hさんの支援の下、次の4点を行った。

⑴図4の2行目から5行目までのソースコードを削除する。
⑵図4の6行目を、図6に示すソースコードに修正する。

⑶図5の4行目と5行目を、図7に示すソースコードに修正する。

⑷保険的な対策として、図4の10行目の抽出条件に、セッションオブジェクトに保存された(i)と注文ヘッダテーブルの(j)の完全一致の条件をAND条件として追加する。

ソースコードの修正後、改めてシステム テストを実施した。システムテストの結果は良好であり、システムがリリースされた。

設問2

 

e:orderNo、f:static、下線①の不具合は何と呼ばれるか。15字以内で答えよ。:レースコンディション

不具合の原因を特定した。原因は、図4で変数(e)が(f)として宣言されていることである。

今回の問題においては、複数のメソッドから変更されるものが焦点となるので、

複数の個所から呼ばれているorderNoが原因となる。

orderNoはStaticで宣言されているので、答えはstaticとなる。

プログラミング言語の変数には、global/Static変数が存在します

クラス内に適宜され、複数のメソッドで呼ばれるような変数はクラス変数と呼びます。

①並列動作する複数の処理が同一のリソースに同時にアクセスしたとき、想定外の処理結果が生じる

このような不具合をレースコンディションといいます
www.ipa.go.jp

g:String orderNo、h:new、i:getOrderInfoBean(orderNo)

レースコンディションでクラス変数を削除した際に修正するコードになります

変更前:クラス変数を呼んでいたため、上から渡す必要がなかった

変更後:上から渡す必要がある

string orderNoを渡す。

変更前

変更後

クラス変数による影響を修正する問題です。hの部分には、Newで新規に作り、

Newで作成したinfoBLObjにgetOrderInfoBean(orderNo)を入れて情報を取得するとなります。

j:得意先コード

⑷保険的な対策として、図4の10行目の抽出条件に、セッションオブジェクトに保存された(i)と注文ヘッダテーブルの(j)の完全一致の条件をAND条件として追加する。

この対策をしましょうという話なので、

①注文ヘッダテーブルの要素であること

②セッションオブジェクトに保存されている情報

つまり、問題文に書かれています得意先コード・得意先名

 

①と②の条件を満たすものは、得意先コードしかありません。

IPAの問題は迷った際には問題文に書いてあることがあるため、問題文に立ち返り、自分の妄想で書かないことが大事です

 

 

 

 

 

 

div #breadcrumb div{ display: inline;font-size:13px;}