情報処理技術者試験の説明・役に立つかどうか

2017年秋の試験までで基本から応用、スペシャリストと受けてきた私が情報処理国家試験についての知識を共有できればと思いこの記事を書くことにしました。
今回は受験経験がある__基本情報技術者試験と応用情報試験、情報処理安全確保支援士試験についてのみ書きます。__
# そもそもどんな試験なのか

>情報処理技術者試験は、「情報処理の促進に関する法律」に基づき経済産業省が、情報処理技術者としての「知識・技能」が一定以上の水準であることを認定している国家試験です。（[IPA情報処理国家試験概要](https://www.jitec.ipa.go.jp/1_08gaiyou/_index_gaiyou.html)より引用）

上記にあるように__合格すればITに対する全般（セキュリティ・プログラミング・ITに関連する法律）の知識を持っていることを証明することができる試験__です。
主な情報処理国家試験は以下の様に難易度ごとに分けられています。詳しくは[IPAのサイトで](https://www.jitec.ipa.go.jp/1_11seido/seido_gaiyo.html)
![Untitled Diagram.jpg](https://qiita-image-store.s3.amazonaws.com/0/172087/274e9a82-b9e1-fe86-b95d-e6b16d41a29b.jpeg)
まずはじめに基本情報技術者から順に試験内容や体感の難しさ、勉強の目安等をお話します。
## 基本情報技術者試験（FE）
ITに関する基本的な技術を把握しているかが以下のような問題を通して問われます。

- n進数の計算
- 浮動小数点数に関する問題（丸め誤差、桁落ち等）
- 論理演算（OR, NOT, AND, NAND, NOR, XOR）
- ネットワークの構成（OSI基本参照モデルの名称や各レイヤのネットワーク機器の特徴、IPアドレス）
- ネットワーク・プロトコル（NAPT, DHCP, HTTP, TCP, UDP等の特徴）
- HDDに関する問題（磁気ディスクのアクセス時間の計算）
- 記憶媒体の冗長化に関する問題（RAID0,1,5の特徴）
- SQLとDB（SELECT文の穴埋めとコミット制御の説明、外部キーと主キーの関係）
- 記憶管理方式（FIFO, LIFO, LRU, LFU, ガーベジコレクション、メモリコンパクションの説明）
- 工程管理（アローダイアグラム、ガントチャートの穴埋め）
- テスト（単体テスト、結合テスト、限界値分析、境界値分析、ブラックボックステスト、ホワイトボックステストの特徴）
- マネジメントに関する問題（PPM、SWOT分析、SCM等の把握）
- モジュール結合度・モジュール強度に関する問題
- 情報セキュリティ（DDos、SQLインジェクション、XSSの特徴）
- 著作権法や下請法、特許や商標に関する問題
- プログラミング（javaもしくはC言語ベースの擬似言語を用いて基本データ構造のコードの読み取り）
- etc

__試験は午前と午後があり両方とも選択式で、それぞれ60点以上で合格__です。
体感での試験の難しさは、上記で挙げた項目の内容を頭でぼんやりと浮かべることができる人なら1ヶ月勉強すれば合格できるレベルの内容です。
しかし実務でのプログラミングの経験が無い人やほぼ無知の人が合格するには3ヶ月から半年程勉強する必要があると思います。
出題範囲は広いですがテストは午前午後共に選択式な上、深い部分まで出題されることはありません。
過去問からの出題が多いので過去問を重点的に解くことをオススメします。

## 応用情報技術者試験（AP）
__応用情報も午前午後共に60点で合格__で、出題内容は基本情報の内容を少し掘り下げた物になっています。
__午後試験のみ筆記__な上に基本情報より深い内容を聞いてくることが難しさに影響しているのかと思います。
具体的な出題内容はこちら

- n進数の計算＋浮動小数点数の計算
- M/M/1待ち行列モデルの計算
- フリップフロップ回路のI/O
- メモリ管理（リトルエンディアン、ビッグエンディアン）
- マネジメント（損益分岐点計算）
- セキュリティ（公開・共通鍵暗号の種類と特徴、SMIME、PGP、TLS）
- プログラミング（ソートアルゴリズム、魔法陣アルゴリズム）
- 計算量をオーダで求める
- ハードウェア（マイコンのクロック信号、ウォッチドッグタイマ、D/A変換）
- ネットワークの冗長化構成（ロードバランサ、スパニングツリープロトコル）
- ネットワーク（OP25B、TLSアクセラレータ、WAF）
- SQLとDB（CREATE、COALESCE、UNION、INNER JOIN、OUTER JOIN、DB正規化）
- モジュール分割（STS分割、TR分割、ジャクソン法、ワーニエ法）
- 著作権法や下請法、特許や商標に関する問題（基本情報とあまり変わりなし）

少し深いところを出題してくるので、受験者の得意な分野以外でもある程度の知識が要求されると思います。
個人的に午後の筆記ではどんな解答をすれば正答扱いになるのかを掴むのが難しかったです。
午後問題においては過去問と似たような問題が出題されることは少ない気がするので、潔く試験対策本を買って勉強することが確実な合格への近道だと思います。
## 情報処理安全確保支援士試験（旧セキュリティスペシャリスト試験）
上記の図の高度な知識・技能に該当するこちらの試験は、2016年まではセキュリティスペシャリスト試験と呼ばれていました。
名称が変更された結果、情報処理安全確保支援士（以下、支援士）と名乗るにはIPAに支援士として登録しなければならなくなりました。
（IPAに未登録で履歴書や名刺等に支援士と記載した場合は罰金刑を受ける恐れがある。[ソース：よくあるご質問Q2-2]
(https://www.ipa.go.jp/siensi/#section16)）
ちなみに基本と応用と違い支援士試験は

- 午前一（選択・他の高度試験や応用情報技術者試験を合格してから2年間は免除）
- 午前二（選択）
- 午後一（記述）
- 午後二（記述）

と試験日に最大四コマ試験を受ける必要があります。
高度な知識・技能が必要な試験と区分されてはいますが、自力で脆弱性を発見できる程の技能が無ければ合格できないというわけではありません。
おそらくこの試験で求められているのはある企業のセキュリティ担当者としての対応力的なものなので、午後問題では企業のシステム上で発生したインシデントにどのように対応するかが問われたりします。
具体的な出題内容としては

- 公開鍵・共通鍵の暗号化方式（RSA・DES・tripleDES・KCipher2）
- TCPのコントロールフラグ・再送制御・ウィンドウ制御等の特徴
- 主要なHTTP/HTTPSヘッダの種類
- TLS/SSLへの主要な攻撃（Poodle攻撃・ダウングレード攻撃等）
- 反射型XSS・DOM型XSS・蓄積型XSSへの対策
- 主要なSMTPコマンド
- メールシステムのセキュリティ対策（SMTPS・SMTP-Auth・POP3 before SMTP）
- DNSシステムのセキュリティ対策（SPF・DNSSECの利用、キャッシュサーバとコンテンツサーバの分離等）
- PCがマルウェアに感染した場合の適切な対応
- IDS・IPSの特徴
- VPNの特徴（トンネルモード・トランスポートモード）
- IEEE802.11系の特徴（伝送速度・データの暗号化方式）
- 情報セキュリティの法的要項

応用情報技術者試験も同じですが、ある程度インフラの要素も絡んでくるのでネットワークの知識がないプログラマの方は辛いと思います。
現役のインフラ担当の技術者さんなんかは2,3ヶ月勉強すれば解けると思いますが、学生には少しつらい試験でしょう。
私はなんでか応用情報技術者試験より支援士試験の方が簡単に感じました。
午後問題に関しては過去問を解いているとどの程度の解答で正解になるかが掴めます。

# 合格すると役に立つのか
資格の勉強をするのは主に自分のキャリアアップや技術力向上の為だという前提でお話します。
先程説明した試験全ては何らかのプログラム言語や特定のソフトウェアの利用に関した試験ではないので、__情報処理国家試験の合格者であれば◯◯を使える__といったことは証明できません。
ですが、国家資格を持っていることで__エンジニアとして活動する上で必要となる大前提の知識を持っていますよ__という証明にはなると思います。（例：オブジェクト思考・メモリ管理方式・モジュール結合度等は知っておいて損はない）
また、情報処理国家資格を持っているだけでは自分の技術力を証明する材料にはなり得ないので、情報処理国家資格にプラスして個人・業務等での実績があればキャリアアップに役に立つでしょう。
私は昨年度就職活動を行いましたが、大手の下請けやSE系の企業では国家資格の有無を重視していましたが、web系企業では国家資格の有無より実績を重視されていました。