令和5年秋期試験午後問題 問8

問8 情報システム開発

⇱問題PDF
スレッド処理に関する次の記述を読んで,設問に答えよ。
 B社は,首都圏に約50店の美容室を運営する美容室チェーンである。B社では顧客に顧客カードを発行し,B社の全店舗で顧客カードを持参した顧客に割引価格でサービスを提供している。近年,テレワークなどで外出機会が減ったことによって,顧客の来店回数が減少しており,売上げが減少傾向にある。
 そこでB社では,顧客に美容室に来てもらうために販売促進活動を行うことにした。この販売促進活動の一つとして,スマートフォン向けサービス(以下,新サービスという)を提供することにした。この新サービスの開発は,B社のWebサイトの構築経験がある情報システム担当のCさんが担当することになった。

〔新サービスの機能〕
 Cさんは新サービスの開発に向けて,全店舗の店長から"顧客にもっと来店してもらうためのアイディア"を募った。集まったアイディアを基にCさんが考えた新サービスのトップ画面と四つの機能を図1に示す。
pm08_1.png
〔新サービスを提供するアプリケーションソフトウェア〕
 次にCさんは,新サービスを提供するためのアプリケーションソフトウェア(以下,アプリケーションという)について調査した。その結果,アプリケーションの代表的な種類には,abがあることが分かった。aは,サーバでHTMLを生成してスマートフォンに送信する。スマートフォンのOSの差異を考慮した開発は不要だが,カメラやGPSなどのデバイスの利用が一部制限される。一方bは,それ自体をスマートフォンにインストールして実行するもの(以下,スマホアプリという)である。OSの差異を考慮した開発が必要であるが,カメラやGPSなどのデバイスを制限なく利用できる。この調査結果からCさんは,新サービスはbとして開発することを提案し,上司の承認を得た。

〔トップ画面の開発〕
 次にCさんは,Java言語を用いてスマホアプリのトップ画面の開発に着手した。トップ画面を実装し,画面の描画処理の中で,顧客番号に関連付けられた顧客氏名,来店日付,担当美容師氏名の情報をサーバから取得して画面に表示する処理を行うようにした。しかし,このスマホアプリを実行したところ並行処理に関するエラー(例外)が発生し,スマホアプリの実行が中断された。
 このエラーの原因を究明するために,スマートフォン上で動作するGUIアプリケーションにおける並行処理を行う仕組みに関して調査を行った。スマートフォンのOS上で処理を実行するための仕組みとしてcdとがある。cは,独立したメモリ空間を割り当てて実行されるものであり,多くの場合アプリケーションの実行単位ごとに一つのcで実行される。一方dは,一つのメモリ空間を共有しながら実行されるもので,一つのcの中で,複数のdを実行することができる。
 GUIアプリケーションの開発では,画面描画,画面操作などの画面ユーザーインタフェースに関する処理を行うメインスレッドと,メインスレッドと並行して比較的処理時間が長い処理を行う①バックグラウンドスレッド(以下,ワーカースレッドという)とを分けて実装する必要がある。また,ワーカースレッドによる画面ユーザーインタフェースに関する処理は禁止されていることが分かった。
 そこで,トップ画面の処理をメインスレッドとワーカースレッドとに分けて実装することにし,トップ画面を完成させた。

〔おすすめの髪型機能の開発〕
 次にCさんは,おすすめの髪型機能の開発に着手した。おすすめの髪型機能の実現に必要な処理を表1に示す。なお,表1中の開始条件とは当該処理の実行を開始するために必要な条件であり,処理時間は当該処理の実行に必要なスマートフォン内の計算時間と標準的な通信時間の合計時間である。
pm08_2.png
 表1の七つの処理を行うために,②メインスレッドと二つのワーカースレッドを作成して処理を行うプログラムを実装した。処理4と処理5は並行に実行できるので,別々のワーカースレッドで処理することにした。このとき,処理6の実行の開始条件は処理4と処理5が共に完了していることなので,二つのスレッドの完了を待ち合わせるe操作を処理6のプログラムに記載した。
 Cさんは,処理1~処理7で構成されるおすすめの髪型機能を実装してテスト用に準備したスマートフォンで実行したところ,通信環境の良い場所では正常に動作したが,通信環境が悪い場所ではサーバからの応答を待ち続けてしまう問題が発生した。この問題を解決するために③処理5のプログラムにある処理を追加した。
 その後,Cさんはスマホアプリの全ての機能の開発とテストを完了させ,B社は新サービスを用いた販売促進活動を開始した。

設問1

本文中のabに入れる適切な字句を解答群の中から選び,記号で答えよ。
a,b に関する解答群
  • Javaアプレット
  • Webアプリケーション
  • コンソールアプリケーション
  • ネイティブアプリケーション

解答例・解答の要点

a:
b:

解説

abについて〕
スマートフォンなどモバイル向けのアプリケーションは、主に「Webアプリケーション」と「ネイティブアプリケーション」の2種類があります。

Webアプリケーションは、インターネットの仕組みを用いてWebサイト上で機能を提供するタイプのアプリケーションです。一般的なWebサイトのようにWebブラウザ上で動作するので、ユーザーは特にアプリをインストールする必要がありません。また、HTML・CSS・JavaScriptと言ったWeb標準の機能で構築されるため、OSの違いを特段意識せずに開発をすることができます。ただし、デバイス内のデータへのアクセスやデバイスの機能の使用には制限があります。"過去問道場"はWebアプリケーションの形態です。
もう一つのネイティブアプリケーションは、AppleストアやGooglePlayストアなどからデバイスにインストールして利用するタイプのアプリケーションです。Webアプリケーションに比べて動作が早く、カメラやプッシュ機能をはじめ、デバイスの様々な機能を利用できるというメリットがあります。しかし、OSごとに使用する開発言語や開発環境が変わるため、iOS・Androidのどちらのユーザーにも対応するにはOSごとにアプリケーションを構築しなければなりません。

したがって、空欄aは「イ:Webアプリケーション」、空欄bは「エ:ネイティブアプリケーション」が当てはまります。

なお、「ア:Javaアプレット」は、Java言語で開発されたWebブラウザに組み込まれて動作するアプリケーションを指します。現在、ほとんどのWebブラウザではセキュリティ上の問題からJavaアプレットをサポートしていません。「ウ:コンソールアプリケーション」は、コマンドプロンプトなどのCUI(文字により操作や表示を行う形式)上で動作するプログラムのことで、スマートフォンでは実行できません。

a=イ:Webアプリケーション
 b=エ:ネイティブアプリケーション

設問2

〔トップ画面の開発〕について答えよ。
  • 本文中のcdに入れる適切な字句を解答群の中から選び,記号で答えよ。
  • 本文中の下線①について,ワーカースレッドで実行すべきではない処理を解答群の中から選び,記号で答えよ。
c,d に関する解答群
  • イベント
  • ウィンドウ
  • スレッド
  • プロセス
解答群
  • サーバから取得した情報を画面に表示する処理
  • サーバからのレスポンスを待つ処理
  • サーバヘリクエストを送信する処理
  • ホスト名からIPアドレスを取得しTCPコネクションを確立する処理

解答例・解答の要点

  • c:
    d:

解説

  • cdについて〕
    アプリケーションが実行されると、OSはそのアプリケーションに独立したメモリ空間を割り当てます。メモリ空間に展開されたプログラムのインスタンスが「プロセス」で、OSから見たアプリケーションの実行単位となります。プロセスはその中にメモリ空間を共有する1つ以上の「スレッド」を有しています。スレッドはプログラム上の実行単位であり、OSがCPU時間を割り当てる対象となります。複数のスレッドを扱うことをマルチスレッドと言い、独立したプロセスで実行させるよりも少ない資源で並列処理を行うことができます。
    pm08_3.png
    したがって、空欄cは「プロセス」、空欄dは「スレッド」が当てはまります。

    なお、「ア:イベント」は、クリック、キーボードの入力、マウスの移動など、プログラム内の特定の処理を開始する契機となる事象のことです。「イ:ウィンドウ」は、個々のアプリケーションを操作するため画面上に表示される矩形の領域(小窓)のことです。

    c=エ:プロセス
     d=ウ:スレッド

  • 〔トップ画面の開発〕の終盤に「ワーカースレッドによる画面ユーザーインタフェースに関する処理は禁止されている」とあるように、スマートフォンOSにおけるマルチスレッド処理では、原則として、ワーカースレッドから画面の表示を直接変更することは禁止されています。1つのプロセス内のスレッド同士は同一のメモリ空間を共有していることから、内部データへのアクセス競合によって想定外の動作が起こることを防ぐための制限です。

    ユーザーインタフェース(以下、UI)とは、ユーザーからの入力を受け付けたり、処理結果をユーザーに知らせたりする役割を果たすものであり、スマホアプリでは操作画面がこれに相当します。したがって、選択肢のうち「ア:情報を画面に表示する処理」が画面ユーザーインタフェースに関する処理に該当し、ワーカースレッドで実行すべきでないものとなります。

    ∴ア:サーバから取得した情報を画面に表示する処理

設問3

〔おすすめの髪型機能の開発〕について答えよ。
  • 本文中の下線②について,表1中の処理2~処理7のうちメインスレッドで実行すべき処理だけを,表1中の処理名で全て答えよ。
  • 本文中のeに入れる適切な操作名を解答群の中から選び,記号で答えよ。
  • 本文中の下線③について,Cさんが追加した処理の内容を20字以内で答えよ。
  • おすすめの髪型機能を実行するために必要な処理時間は何ミリ秒か。ここで,通信は標準的な時間で実行でき,表1に記載の処理時間以外については無視できるものとする。
e に関する解答群
  • break
  • fork
  • join
  • wait

解答例・解答の要点

  • 処理2,処理7
  • e:
  • 一定時間でタイムアウトする処理 (15文字)
  • 460

解説

  • 〔トップ画面の開発〕には「画面描画,画面操作などの画面ユーザーインタフェースに関する処理を行うメインスレッドと,メインスレッドと並行して比較的処理時間が長い処理を行う①バックグラウンドスレッド(以下,ワーカースレッドという)とを分けて実装する必要がある」とあります。メインスレッドでネットワークアクセス、データベース操作などの時間の掛かる処理を実行すると、その処理中は画面の描画処理や入力受付がブロックされてしまい、応答性の低下を引き起こすためです。

    メインスレッドで実行すべきなのは「画面描画,画面操作などの画面ユーザーインタフェースに関する処理」ですから、表1の処理2~7から、画面ユーザーインタフェースに関する処理を探すと、以下の2つがこれに該当します。
    • 処理2:画面に"処理中"のメッセージを表示する
    • 処理7:処理6で合成した写真を画面に表示する
    ∴処理2,処理7

  • 複数のスレッドが同時進行で処理されていくことをマルチスレッドと呼びます。マルチスレッドでは、他のスレッドと協調して処理を進めていくための操作が用意されています。
    • join … 指定したスレッドが終了するのを待つ
    • wait … スレッドを一時停止させる
    • notify … 一時停止したスレッドを再開させる
    処理6の開始条件は処理4及び処理5の完了なので、処理6では処理4及び処理5の両方が完了するのを待つ必要があります。処理4と処理5は別々のワーカースレッドで処理するとあるので、処理6では別のスレッドが実行終了するまで待機する処理が必要となります。このように、別のスレッドの終了を待つときに使う操作はjoinです。したがって、空欄eには「join」が当てはまります。

    なお、「ア:break」は繰返し(ループ)処理を任意の位置で強制的に終了させる時に利用します。「イ:fork」は非同期でタスク処理を開始します。いずれも、単独で「別のスレッドが実行終了するまで待機」といった制御をすることはできません。

    e=ウ:join

  • ユーザーの通信環境によっては、端末からのリクエストがサーバに届かず、サーバからの応答が返ってこない場合もあります。何も対策をしていないと永遠に応答を待ち続けてしまい、画面は処理中のまま動かなくなってしまいます。このようなケースを想定し、一定時間を超えても応答がないときは処理を中断し、エラーメッセージを表示するなどの実装をします。これをタイムアウト処理と言います。したがって、答えは「一定時間でタイムアウトする処理」です。

    ∴一定時間でタイムアウトする処理

  • 表1「おすすめの髪型機能の実現に必要な処理」から、必要な処理時間を計算します。各スレッドがどの処理をどの順番で実行するのか、下の図のように整理するとわかりやすいでしょう。画面表示を行う処理1、処理2、処理7はメインスレッドが担当すること、処理4と処理5は2つのスレッドで並行処理することに注意が必要です。

    処理1の完了後、処理2と処理3は並行して実行されます。同じく、処理3の完了後、処理4と処理5が並行して実行されます。処理手順のクリティカルパスは「処理1⇒処理3⇒処理5⇒処理6⇒処理7」で、この処理時間を合計すると「100+100+200+50+10=460秒」となります。

    ∴460
    pm08_4.png
模範解答

Pagetop