スレッド処理に関する次の記述を読んで,設問に答えよ。
B社は,首都圏に約50店の美容室を運営する美容室チェーンである。B社では顧客に顧客カードを発行し,B社の全店舗で顧客カードを持参した顧客に割引価格でサービスを提供している。近年,テレワークなどで外出機会が減ったことによって,顧客の来店回数が減少しており,売上げが減少傾向にある。
そこでB社では,顧客に美容室に来てもらうために販売促進活動を行うことにした。この販売促進活動の一つとして,スマートフォン向けサービス(以下,新サービスという)を提供することにした。この新サービスの開発は,B社のWebサイトの構築経験がある情報システム担当のCさんが担当することになった。
〔新サービスの機能〕
Cさんは新サービスの開発に向けて,全店舗の店長から"顧客にもっと来店してもらうためのアイディア”を募った。集まったアイディアを基にCさんが考えた新サービスのトップ画面と四つの機能を図1に示す。
図1 新サービスのトップ画面と四つの機能
〔新サービスを提供するアプリケーションソフトウェア〕
次にCさんは,新サービスを提供するためのアプリケーションソフトウェア(以下,アプリケーションという)について調査した。その結果,アプリケーションの代表的な種類には, a と b があることが分かった。 a は,サーバでHTMLを生成してスマートフォンに送信する。スマートフォンのOSの差異を考慮した開発は不要だが,カメラやGPSなどのデバイスの利用が一部制限される。一方 b は,それ自体をスマートフォンにインストールして実行するもの(以下,スマホアプリという)である。OSの差異を考慮した開発が必要であるが,カメラやGPSなどのデバイスを制限なく利用できる。この調査結果からCさんは,新サービスは a として開発することを提案し,上司の承認を得た。
〔トップ画面の開発〕
次にCさんは,Java言語を用いてスマホアプリのトップ画面の開発に着手した。トップ画面を実装し,画面の描画処理の中で,顧客番号に関連付けられた顧客氏名,来店日付,担当美容師氏名の情報をサーバから取得して画面に表示する処理を行うようにした。しかし,このスマホアプリを実行したところ並行処理に関するエラー(例外)が発生し,スマホアプリの実行が中断された。
このエラーの原因を究明するために,スマートフォン上で動作するGUIアプリケーションにおける並行処理を行う仕組みに関して調査を行った。スマートフォンのOS上で処理を実行するための仕組みとして c と d とがある。
c は,独立したメモリ空間を割り当てて実行されるものであり,多くの場合アプリケーションの実行単位ごとに一つの c で実行される。一方 d は,一つのメモリ空間を共有しながら実行されるもので,一つの c の中で,複数の d を実行することができる。
GUIアプリケーションの開発では,画面描画,画面操作などの画面ユーザーインタフェースに関する処理を行うメインスレッドと,メインスレッドと並行して比較的処理時間が長い処理を行う①バックグラウンドスレッド(以下,ワーカースレッドという)とを分けて実装する必要がある。また,ワーカースレッドによる画面ユーザーインタフェースに関する処理は禁止されていることが分かった。
そこで,トップ画面の処理をメインスレッドとワーカースレッドとに分けて実装することにし,トップ画面を完成させた。
〔おすすめの髪型機能の開発〕
次にCさんは,おすすめの髪型機能の開発に着手した。おすすめの髪型機能の実現に必要な処理を表1に示す。なお,表1中の開始条件とは当該処理の実行を開始するために必要な条件であり,処理時間は当該処理の実行に必要なスマートフォン内の計算時間と標準的な通信時間の合計時間である。
処理名 | 処理内容 | 開始条件 | 処理時間 (ミリ秒) |
処理1 | スマートフォンのカメラデバイスから取得したカメラ映像を画面に表示して,顧客が撮影ボタンを押した時点の画像を顔写真として保存する。 | なし | 100 |
処理2 | 画面に“処理中”のメッセージを表示する。 | 処理1の完了 | 10 |
処理3 | 処理で保存した顔写真から顔の特徴点を抽出処理1の完了する。 | 処理1の完了 | 100 |
処理4 | 処理で保存した顔写真から毛髪部分を削除す処理3の完了る画像処理を行う。 | 処理3の完了 | 150 |
処理5 | 処理3で抽出した特徴点をサーバに送信し,おすすめの髪型の画像を取得する。 | 処理3の完了 | 200 |
処理6 | 処理4の結果画像と処理5の画像を合成する。 | 処理4,処理5の完了 | 50 |
処理7 | 処理6で合成した写真を画面に表示する。 | 処理6の完了 | 10 |
表1の七つの処理を行うために,②メインスレッドと二つのワーカースレッドを作成して処理を行うプログラムを実装した。処理4と処理5は並行に実行できるので,別々のワーカースレッドで処理することにした。このとき,処理6の実行の開始条件は処理4と処理5が共に完了していることなので,二つのスレッドの完了を待ち合わせる e 操作を処理6のプログラムに記載した。
Cさんは,処理1〜処理7で構成されるおすすめの髪型機能を実装してテスト用に準備したスマートフォンで実行したところ,通信環境の良い場所では正常に動作したが,通信環境が悪い場所ではサーバからの応答を待ち続けてしまう問題が発生した。この問題を解決するために③処理5のプログラムにある処理を追加した。
その後,Cさんはスマホアプリの全ての機能の開発とテストを完了させ,B社は新サービスを用いた販売促進活動を開始した。
設問1 本文中の a , b に入れる適切な字句を解答群の中から選び,記号で答えよ。
- Javaアプレット
- Webアプリケーション
- コンソールアプリケーション
- ネイティブアプリケーション
解答・解説
解答例
a:イ b:エ
解説
ー
設問2 〔トップ画面の開発〕について答えよ。
(1)本文中の c , d に入れる適切な字句を解答群の中から選び,記号で答えよ。
- イベント
- ウィンドウ
- スレッド
- プロセス
解答・解説
解答例
c:エ d:ウ
解説
ー
(2)本文中の下線①について,ワーカースレッドで実行すべきではない処理を解答群の中から選び,記号で答えよ。
- サーバから取得した情報を画面に表示する処理
- サーバからのレスポンスを待つ処理
- サーバヘリクエストを送信する処理
- ホスト名からIPアドレスを取得しTCPコネクションを確立する処理
解答・解説
解答例
ア
解説
ー
設問3 〔おすすめの髪型機能の開発〕について答えよ。
(1)本文中の下線②について,表1中の処理2〜処理7のうちメインスレッドで実行すべき処理だけを,表1中の処理名で全て答えよ。
解答・解説
解答例
処理2,処理7
解説
ー
(2)本文中の e に入れる適切な操作名を解答群の中から選び,記号で答えよ。
- break
- fork
- join
- wait
解答・解説
解答例
ウ
解説
ー
(3)本文中の下線③について,Cさんが追加した処理の内容を20字以内で答えよ。
解答・解説
解答例
一定時間でタイムアウトする処理
解説
ー
(4)おすすめの髪型機能を実行するために必要な処理時間は何ミリ秒か。ここで,通信は標準的な時間で実行でき,表1に記載の処理時間以外については無視できるものとする。
解答・解説
解答例
460[ミリ秒]
解説
ー
IPA公開情報
出題趣旨
昨今,スマートフォンの普及によって,顧客とのチャネル強化のためにスマートフォンアプリケーションソフトウェアが活用されている。
本問では,スマートフォンアプリケーションソフトウェアの開発を題材として,複数の処理を並行して行うためのマルチスレッド処理について,基本的な理解と設計能力を問う。
採点講評
問 8 では,美容室の販売促進活動で用いるスマートフォンアプリケーションソフトウェアの開発を題材に,マルチスレッド処理について出題した。全体として正答率は平均的であった。
設問 3(1)は,正答率が低かった。スマートフォンアプリケーションをはじめとしたユーザの端末上で動作するアプリケーションを開発するには,各処理の処理内容を理解した上で適切なスレッドで処理を実行する設計が重要になるので,スレッドに関する理解を深めておいてほしい。
設問 3(2)は,正答率が低かった。二つのスレッドの完了を待ち合わせる join について問うた。昨今の高性能な CPU を搭載したスマートフォンや PC では,アプリケーションソフトウェアがマルチスレッドで処理を行うことは一般的であるので,スレッドの分岐や待合せ処理については,是非理解しておいてほしい。