【合格体験記】エンベデッドシステムスペシャリストで8割以上得点して合格した話

IT関連

こんにちは、novです。
プロフィールページでは更新済みですが、昨年10月に実施されたIPAの情報処理技術者試験・高度区分のエンベデッドシステムスペシャリスト試験(以下ES試験)に合格していました。

Twitterにも投稿しましたが、午前Ⅱ・午後Ⅰ・午後Ⅱの全てで8割以上の得点率でした。

受験した経緯ですが、自動運転という車載システムに関わる仕事をしているので、自己啓発がてら受けようと会社のメンバーに誘われたからですね。業務は研究チックで、システム開発に直接携わっていないのもあり、知見を広げることになるかなーと思ったのもあります。

勉強期間は昨年の3月と、8月後半~10月の計3ヶ月といったところです。総勉強時間は100~150時間程度です(厳密には測っていないのでアバウトですが)。
ちなみに間が空いているのは、もともと4月に実施されるはずだった試験が緊急事態宣言の関係で秋に延期されたからですね。

ネット上で具体的な勉強方法について調べてもあまり記事が出てこないので、どういうところに注意して対策すると良さそうなのかを自分なりにまとめてみようと思います。また、直前にやっていたことも含めて整理してみようと思います。

マイナーな試験で情報がなかなか見つからないという方の助けになればと思い、可能な限り詳細に書こうと思います。
興味がある人は読んでみてください♪

ES試験ってどんな試験?

IPAの主催する情報処理技術者試験のうち、「高度試験」に区分されるものです。レベルとしては応用情報の上に位置するもので、特に組み込みシステムに関わる知識が問われる試験です。最近の言葉でいうとIoTと親和性が高いものですね。

公式の解説は以下を参照ください。

試験区分一覧 | 試験情報 | IPA 独立行政法人 情報処理推進機構
情報処理推進機構(IPA)の「試験区分一覧」に関する情報です。

レベル感について、Wikipediaには以下のように記述されています。

本試験の合格率は例年10%台であるが、受験者の大部分は既に下位区分の応用情報技術者試験(スキルレベル3)や基本情報技術者試験(スキルレベル2)に合格できる実力を有している場合が多いため、難易度は相対的に高くなっている。試験の水準は非常に高く、日本国内で実施される組み込み(エンベデッド)システムに関する資格試験としては最難関であると言われ、実務経験者でもしっかり対策しなければ合格するのは難しいとされる。

本試験は情報処理技術者試験の一区分として実施されているものの、電子回路や電気に関する知識も要求される。計算問題のパターン(種類)が多いため(例えば、モーターの回転数を制御する、時間を計算で求める、など)、数学の能力も重要である。

本試験の最大の特徴としては、合格に有効な参考書を入手しにくいことがあげられる。

その理由としては、

・ 出題範囲が非常に広く、開発対象となるシステムが無人航空機(ドローン)、自動車の自動運転、エンタテインメントロボット、カメラ付き防犯灯、医療用ロボット、スマートグリッド、コインパーキングなど多岐にわたること
・ セキュリティやネットワーク、データベースといった他のスペシャリスト(テクニカルエンジニア)試験に比べて受験者が少ないこと

があげられる。そのため、高校の物理の教科書、電子回路や電気、モーター等の専門書を揃えてやっと合格したという人も少なくない。近年ではIoT領域からの出題が強化されている。
ちなみに、エンベデッドシステムスペシャリスト試験だけでなく、システムアーキテクト試験やITストラテジスト試験でも組み込みシステムに関する内容は出題される。ただし、こちらはあくまで設計者(上流工程)や経営者の立場から見た組み込みシステムに関する内容である。組み込みシステム自体の専門性はエンベデッドシステムスペシャリスト試験が最も要求される。

少し長いのでまとめると

  • Windows 8.1SDK が項目にないので、 Windows 10 SDK を選択(これで問題ない)
  • .NET Framework 4.6.1 SDK, Targeting Pack の二つにもチェックを入れる必要がある(Unreal Engine のビルドに必要)

ざっくりこんな感じです。これに追加して、個人的には 「記述量が多い」 ことも特徴かなと思います(他の高度試験もそうだとは思いますが)。

さて、この内容を踏まえたうえで、自分の勉強方法・戦略について書いていきたいと思います。

試験形式

試験の形式は、午前・午後とも2部に分かれて行われます。午前はマークシートによる選択問題、午後は記述式の試験となっています。細かい内訳は以下の通りです。

午前I

試験時間50分。マークシートを使用した四択問題で、30問出題。スキルレベル3相当の問題が出題されるので、応用情報レベルの知識が要求されることになります。

なお、ES試験受験の2年前までに、応用情報または他の高度試験の午前Ⅰ試験を合格している場合には受験が免除されます。
自分も受験の1年前に応用情報に合格していたので、午前Ⅰ試験は免除されていました。

午前Ⅱ

試験時間40分。マークシートを使用した四択問題で、25問出題されます。午前Ⅰとは異なり、よりハードウェア・組み込み領域に特化した問題が出題されます。
また、IoTもES試験の範囲に入ることから、ネットワーク周りの内容も出題されます。なお、過去問からの出題が多く、対策しやすいのが特徴です。

午後Ⅰ

試験時間90分。組み込み製品の設計開発に関する文章題が出題され、3問中2問回答します。目安は1問6ページ。例年、問1が必須回答、問2・問3が選択でしたが、2020年秋試験から問1が必須ではなくなりました。ハードウェア設計中心の問題が1問、ソフトウェア設計中心の問題が2問出題されます。

午後Ⅱ

試験時間120分。組み込み製品の設計開発に関する文章題が出題され、2問中1問回答します。目安は1問12ページです。ハードウェア設計中心の問題が1問、ソフトウェア設計中心の問題が1問出題されます。2時間かけてじっくり1問解くイメージですね。

自分の戦略

基本的にはしっかり知識を付けて勝負することになるのですが、午後問題は何を選択するかが結構重要だと考えていました。
少し過去問を眺めるとわかるのですが、ソフトウェア設計の問題は午後Ⅰで少なくとも1問選択することになるほか、大体パターンが決まっています。
勉強に大量の時間を割けるわけでもなかったので、午後問題は全部ソフトウェア設計を選択するということにしました。

要は

  • 午後Ⅰ → 大問1、2を選択
  • 午後Ⅱ → 大問2
  • を選択すると決め打ちした訳ですね。リソースが限られているときは選択と集中です。
    余談ですが、「選択と集中」=「余計なものは捨てる」ということです。やらないことを決めないと、集中はできません。

    実際の勉強方法

    基本的なスタンスとしては、参考書をざっと読んで、掲載されている問題を解くという方向性で行きました。
    特に午前Ⅱは過去問からの出題が多いので、選択肢レベルで理解していく方法で勉強しました(本番でも過去問からの出題は結構ありました)。
    午後問題はとにかく問題形式と、解答の記述方法に慣れていくというのが基本スタンスです。
    以下、時期別にどういう勉強方法だったかを述べていきます。

    ~1か月前

    まずは基礎的な部分の知識を付けていく感じでした。使った書籍は以下ですね。

    以下、各試験のもう少し具体的な内容と自分の意識した内容を書き記していきます。

    午前Ⅱ対策

    まずは上記書籍の内容を一通り確認し、掲載されている四択問題(計100問)を何回か解きました。

    書籍内でも分類されていますが、分野を列挙すると以下のようになります。

    • コンピュータ構成要素
    • システム構成要素
    • ソフトウェア
    • ハードウェア
    • ネットワーク
    • セキュリティ
    • システム開発技術
    • ソフトウェア開発管理技術

    コンピュータ構成要素はさらに「プロセッサ」「メモリ」「バス」「入出力デバイス」「入出力装置」の項目に分解されます。
    ソフトウェアに関しては「オペレーティングシステム」「ミドルウェア」「ファイルシステム」「開発ツール」「OSS」という項目に分解されています。
    ただ、過去出題されたパターンが少ないジャンルもあるので、覚えてしまうのが良い部分でもあります。

    それぞれで問われる内容をざっくり書いておくと、以下のようになります。

  • プロセッサ:ノイマン型アーキテクチャに関する知識・割り込みに関する知識・パイプラインの知識など
  • メモリ:RAM/ROMに関する知識・キャッシュに関する知識・メモリアクセス時間の計算問題など
  • バス:ラッチ回路やバスプロトコルに関する知識
  • 入出力デバイス:LEDの不要点灯を避けるためのレジスタ制御や、I/Oポートアクセス時のプログラムでの注意点(volatile修飾子など)、デバイスドライバなどに関する知識
  • 入出力装置:PWM信号による音声出力など(復調する際にローパスフィルタを用いるなど)
  • システム構成要素:信頼性ブロック図やアムダールの法則に関する計算問題など
  • オペレーティングシステム:タスクの状態遷移・スケジューリング・コンテキスト切り替え・デッドロック・排他制御・ページングなどに関する知識
  • ミドルウェア:JavaEEの構成要素・コンポーネントソフトウェアの仕様(過去2種類のみ出題)
  • ファイルシステム:ディスク領域の管理方法・ハッシュ表の探索時間など(過去4種類のみ出題)
  • 開発ツール:エミュレータやデバッガ・コンパイラ最適化の知識など
  • OSS:ディストリビュータの役割・SELinuxについての知識など(過去4種類のみ出題)
  • ハードウェア:組み合わせ回路・順序回路に関する知識、計算・論理ハザード発生原因・チップセレクタの知識・エンコーダに関する知識・DRAMのリフレッシュ周期に関する計算・反転増幅器に関する計算など
  • ネットワーク:CANやFTPなどに関する知識(OSI参照モデルのうち、物理層・データリンク層・ネットワーク層・トランスポート層が中心に出題)
  • セキュリティ:サイドチャネル攻撃や耐タンパ性、TLS・暗号化方式などに関する知識
  • システム開発技術:DFD・事象応答分析・UML・アーキテクチャパターン・MISRA-C・テスト技法などに関する知識
  • ソフトウェア開発管理技術:コデザイン・リバースエンジニアリング・ライセンスなどに関する知識(特許関連が近年は多い模様)
  • もちろん各項目で問われることはこれ以外にもあります。組み込みシステムに関する資格であることから、ソフトウェア・ハードウェアに関する知識は結構細かいことも聞かれます。基本的な考え方を理解して、選択肢を吟味できるようにすることが重要ですね。

    その他出題されている種類が少ないものに関しては、過去問を洗い出して内容を覚えてしまうのがいいと思います。

    ちなみに、過去問と解答だけならIPAの公式ホームページにPDFが公開されています。

    過去問題 | 試験情報 | IPA 独立行政法人 情報処理推進機構
    情報処理推進機構(IPA)の「過去問題」に関する情報です。

    余談ですが、もし需要があれば過去問の各選択肢に関して図解などを交えた解説記事も作ろうと考えています。

    午後Ⅰ&午後Ⅱ対策

    午後の問題に関しては、ボリュームが異なるだけで午後Ⅰも午後Ⅱも考え方はあまり変わらないので同じ方針で進めることに。
    一か月前までは時間をあまり気にせず、考え方・解答方法に慣れることを意識しながら対策していました。

    問題の形式は午後Ⅰ・午後Ⅱともに各大問に設問が3つあり、それぞれに小問が付随するものです。また、典型的なパターンは

    • 設問1:システムの仕様理解を問う
    • 設問2:制御部のソフトウェア設計の理解を問う
    • 設問3:機能追加・仕様変更に伴う設計の変更・問題点を問う

    というものです。問題文の流れもある程度パターンがあります。午後Ⅰの問題で典型的なものは以下のような感じです。

    • システムの外観や構成をブロック図で表したものが1ページ目に掲載
    • システム構成要素について、表や文章で説明(2ページ目くらいまで)
    • さらにシステムの中核部分は、その構成要素や機能が一覧表で記載(3ページ目くらいまで)
    • 場合によっては動作概要が文章でも記載
    • 制御部のソフトウェア構成が一覧表で記載(タスク単位で処理の概要が書かれている・ここまでで大体4ページくらい)
    • 設問のパートが始まる(2ページ程度)
    • 設問3では追加機能・変更される仕様について言及があり、問題文が続く形になっている。たいていの場合、タスクの処理をどう変更するかが問われる。

    設問の趣旨と、問題文の構成を照らし合わせると、

    • 設問1 → 制御部に関する解説までに回答の根拠が書かれている。
    • 設問2 → 問によっては、問題文全体に渡って根拠を探す必要がある。制御部のタスクは「仕様」をソフトウェアに落とすために書かれているため、そことの整合が取れるように穴埋めを行う必要がある。
    • 設問3 → 仕様との整合を取りつつ、何を変更すれば影響範囲が小さいかなどを考えながら解答することになる。

    ということが分かるかと思います。大きな流れはやはり 「仕様理解」→「制御系設計」→「仕様変更への対応」 ですね。これを念頭に置くだけで問題文の読み方がかなり変わると思います。

    さて、実際に自分がどういう考えで勉強していたかですが、この時期は基本的に 解答の根拠が何か? というところをかなり意識しながら勉強していましたね。

    例えば、解答に使うワードのチョイスについて色々分析をしたりしていました。本文内で、「~××(以下、〇〇と呼ぶ)」という文言を見かけたらまず間違いなくそれは解答に使用する(少なくとも設問に絡む)ものでしたし、図や表の下部に「注:〇〇~」という部分があれば解答の根拠になることも多々あったので、本番ではかなり注意して読むようにしていました(実際に注記の部分で結構重要なことが書かれていました)。

    また、「動作概要」などの記述は、ユースケース図アクティビティ図シーケンス図などに落とすとビジュアル化されて理解できることもあったので、こういったUML図の活用も検討しながら戦略を練っていました。
    特に近年の問題ではセンサネットワークなどIoTに絡む問題が出題されがちということもあり、複数のアクターが登場するシステムであることも多かったので、図に変換するというのは結構重要だったように思います(問題の中でシーケンス図が登場したり、ということもあります)。

    さらに、計算問題に関しても「システムの挙動」を正しく理解していないと解答できないものが多々ありました。計算方法を知っている、というだけでは間違える問題が多いように思います。

    例えば、アクチュエータに動作指示を出してから実際に動作するまで3分かかる、というシステムにおいて、指示を出してから28分後のある物理量を答える、みたいな問題で何も考えずに解答すると「3分のラグ」を見落としたりします。

    まとめて書かれているとまず間違えませんが、要素が分散していると忘れがちなので注意するポイントだと思います(実際ミスしがちだったので本番でもかなり意識していました)。

    具体例は午後Ⅰの問題を中心に出しましたが、冒頭で述べたように午後Ⅱも似たような感じです。

    ただ、問題文が長くなる関係上、より細かい内容が設問で問われます。

    また、制御系の設計についても、単にタスクの構成があるだけでなく、他のデバイスとの通信メッセージという要素が入るなど、複数のデバイスが絡み合うシステムの設計がテーマとして取り上げられている印象です。

    複雑なシステムの挙動が理解できているか?ということで、シーケンス図や状態遷移図が設問の中で登場し、やり取りするメッセージや各状態を答えさせる設問が登場する傾向があるのも特徴です。

    とまあこのような感覚を掴むために過去問を解き、知識が足りない部分は参考書に再び戻り…ということを繰り返していたのが1ヵ月前までの話になります。

    直前1ヵ月

    直前1ヵ月は時間を図りながらひたすら過去問を解くということをしていました。
    特に午後試験については過去問を印刷し、実際の冊子状にして書き込みながら解くようにして本番とのギャップを少なくするよう努めていました。

    午前Ⅱについて

    時間を測りながら解くというのが基本スタンスでした。午後問題よりは体力を使わない関係上、飽きたらやるみたいな感じで勉強していました。
    過去問をこなすにつれ「見たことある!」という問題が増えてくるため、各選択肢が何故正解・不正解なのかも調べて、本番では確実に得点できるようにしていました。

    実際に自分が受けた試験では、過去問とかなり似ているものの解答が異なるという問題もあったので、選択肢を吟味できるようにしていたのは正解だったと感じています。
    とはいえ実際のところは60%の得点で合格(=25問中15問正解でOK)なので、少々ミスした程度では落ちないのでそこまで神経質になる必要はないかと思います。

    午後問題について

    これも時間を測りながら解くようにしていました。社会人である以上、当然仕事が終わった後に勉強するのですが、この午後問題が「少なくとも90分集中する必要がある」ので、結構キツかったですね。。。
    また、過去問には解答があるものの解説はないので「何故その解答になるのか?」を答え合わせの後でまた考えるのが結構苦行でした。
    自分を奮い立たせるために厳しめの採点をして、危機感を自作自演したりとか結構迷走していた記憶があります。

    とにかく、感覚を鈍らせないようにするのが第一だったので、疲れているときは午後Ⅰの問題を大問1つだけでも解くようにするという方向でやりくりしていました。
    また、午後Ⅱの問題については割り切って土日に勉強するようにしていましたね。

    もうここまでくると上記で記載したような「注意事項」をもとに、確実に得点するところは得点する(計算問題など)ことを意識してひたすら解くという形になります。
    直前1週間の過去問演習では、自己採点でギリギリ合格点に届かなかったりして結構冷や汗モノだったなあ。。。

    あまり具体的に示唆に富む内容を書いていませんが、知識を押さえたらあとは本当に感覚を磨くという話になるのでメンタル面の話になりがちなんですよね。

    前日は早めに寝て、体調を整えるようにしました。

    あまり粘っても良い結果にはならないので、前日は少し演習したら割り切って休んでしまうのが吉です。

    ES試験を合格した感想

    試験本番

    ゆっくり寝て準備したので、体調はバッチリ。とりあえず試験の合間の糖分補給にチョコを数個所持して行きました。

    午前Ⅰは免除だったので午前Ⅱから参加。いくつかよくわからない問題も出ましたが過去問も多数あったので15問は正解していることを確信して終了。昼休憩の間、確信が持てなかった問題は調べて、大体8割はあるだろうということで一安心していました。

    午後Ⅰはまず選択を間違えないように、ソフトウェア問題が問1・問2であることを確認してスタート。問1は紙幣の自動整理機、問2は所有者を追尾する機能を持つスーツケースに関する問題でした。
    問1はパーツの数が多く、仕様を理解するのに少し時間をかけた記憶があります。少し複雑な内容でしたが、落ち着いて考えれば特に問題なく解けた気がします。
    問2はある意味自立走行システムとも言えるので、専門分野に近い話でした。問題文には必要な内容が明記されていますが、こういうロボティクスの話では

    「観測」→「自己位置推定」→「行動計画」→「制御指令出力」

    という流れがあるので、これが頭に入っているか否かで読み進めるスピードに違いが出たような気がします。
    この流れを知らなくとも、問題の解答自体は書かれている内容を読み取ればある程度できるものでした。

    計算問題については、問1も問2も「ある量が最大でどれくらいになりうるか?」を計算させるものでした。ワーストケースを考慮させるタイプのもので、動作パターンをしっかりイメージする必要があったように思います。

    午後Ⅱ試験はスマートバスシステムについての問題でした。通信対象がバス・バス停・管理サーバと複数に渡るので、どのメッセージがどこへ送られるのか? を正確に把握することが重要でした。パターン通り、シーケンス図を用いた問題も出題され、それぞれの要素がどういう通信をしているのか答えさせる設問がありました。

    設問3はスマートバス同士の通信が追加されるというものでした。これも追加される機能を落ち着いて読み、どことどこが通信するのかを把握すれば理解できたと思います。

    なお余談ですが、このように車両とインフラ、車両と車両の通信はV2Xと呼ばれ、自動車業界ではCASEと呼ばれる変化のうちCのConnectedの分野に該当します。こういうシステムの設計ができる人材が足りていないという国からのメッセージともとれるでしょうか(考えすぎかもしれませんが)。

    それなりに解けたと感じていたものの、記述部分は確信が持てない以上、この時点では結果について何とも言えないなーという感じでした。

    結果発表

    今回の試験は結果発表が2020/12/25のクリスマスでした。心臓に悪い。。。
    在宅勤務をしていたので、12時を迎えた瞬間に確認。

    「合格」の2文字があって一安心でした。時間かけたのに結果出なかったら悲しいですからねえ。

    現在の心境

    とりあえず高度試験一発目として、車載システムと関わりの深いES試験を無事突破して一安心しているというところです。
    一方、やはり資格が取れるだけでは実務に必要なスキルは身につかないよなーと痛感しているところです(当たり前ですが)。

    このブログのテーマでもありますが、一般論を理解していることと超具体的なモノに関わる部分の技量には乖離があります。
    後者は経験がモノをいう部分が多いので実際に手を動かさないと分からないことがやはり多数あります。
    実際のSoCを相手にするときには当然データシートを見ながらアセンブリ言語で弄る部分もあるでしょうし、車載ECUで使われるCAN通信なんかでは通信プロトコルが記載された資料を基に解析などをすることになります。

    まだまだ知らないことが多すぎるので、知識と経験を積み上げていかなければなあと思っている次第です。

    とりあえず実務ではPythonとかで甘えている部分があるので、もっとCやC++も触っていかないとなあ。。。
    (もちろんPoCとか、目的によって変わりますけどね)

    まとめ

    今回は自分がES試験を受験するにあたって、どんな内容の勉強を行ってきたか、実際に意識していた部分についても触れつつまとめてみました。
    懸念だった午後問題も8割以上得点できていたので勉強の方針はあまり間違っていなかったのかなと感じています。

    ES試験の午後問題はなかなか勉強方法についての資料が落ちていないので自分の経験をまとめてみましたが、やっぱり範囲が広すぎて抽象的にならざるを得ないんだなあというのが率直な感想です。参考書を書いている人、大変ですね笑

    さて、今回は以上です。この記事がES試験を受ける方の参考になれば幸いです!

    情報処理教科書 エンベデッドシステムスペシャリスト 2019~2020年版【電子書籍】[ 牧隆史 ]

    コメント

    タイトルとURLをコピーしました