基本情報技術者試験とは?
基本情報技術者試験とは、独立行政法人情報処理推進機構(IPA)が実施する、ITを活用したシステムやソフトウェアを開発・運用するための基礎的な知識と技能を証明する国家試験です。ITエンジニアの登竜門とも呼ばれ、IT業界で働く上で必要な広範な基礎知識が問われます。
試験方法・試験内容は?
基本情報技術者試験では2023年4月から試験制度が変更になり、従来の「午前試験」「午後試験」がそれぞれ「科目A試験」「科目B試験」に変わりました。
試験方法
| 科目A | 科目B | |
|---|---|---|
| 試験時間 | 90分 | 100分 |
| 出題形式 | 多肢選択式(四肢択一) | 多肢選択式 |
| 出題・回答数 | 出題 60問 解答 60問 | 出題 20問 解答 20問 |
| 合格基準 | 1000点満点中600点 | 1000点満点中600点 |
試験内容
科目A 「知識を問う試験」
IT技術者が知っておくべき、テクノロジ・マネジメント・ストラテジ分野の基礎知識が幅広く問われます。
科目B 「技能を問う試験」
より実践的な内容に特化しており、長文を読んで解答する形式で、プログラミング的思考力や情報セキュリティの実践能力が問われます。
基本情報技術者試験を勉強して学んだこと
勉強を始める前の自分の現状
大学・大学院で情報工学部に所属していましたが、学部4年からはハードウェアの研究に進んだため、ソフトウェアの知識はほぼ皆無でした。また、ネットやPCゲーム、プログラミングなどにも興味がなかったため、ソフトウェアエンジニアとしてはほぼ素人の状態でした。
科目A
科目Aは、とにかく「知識」「知識」「知識」、そして時々計算問題です。出題範囲を一言で言うと「とても広く、とても浅く」です。難しい部分は少ない一方で、暗記する量はかなり多く、暗記が苦手な自分にとってはかなり苦労しました。
私が科目Aを勉強したときに『役に立った知識』を紹介したいと思います。
『役に立った知識』
・ネットワーク知識
ネットワークとは、複数のコンピュータを回線で繋いだシステムです。内容は「ネットワーク方式」、「データ通信と制御」、「通信プロトコル」などです。ここではネットワークの超基本的な知識を学べるのですが、超初心者からすると、そういった知識もなかったのでとても勉強になった分野でした。
出題範囲 具体例
・『LAN』と『WAN』の違い
LAN(Local Area Network):狭い範囲のコンピュータで構成される小規模ネットワーク
WAN(Wide Area Network):大規模(広範囲)なネットワーク
・IPアドレス
IPアドレスとは、ネットワークに接続している「コンピュータ」を識別するための番号です。具体的には「13.112.248.159」などのように、数値とピリオドで構成されます。
・データベース知識
データベースとは、情報の集まりです。データベースに情報を集めることで、データを一元管理できます。内容は「データベース方式」「データベース設計」「データ操作」「トランザクション処理」です。データベース知識は、科目Aの中では一番役に立った知識でした。
出題範囲 具体例
・データベース管理システム
データベース管理システム(DataBase Management System: DBMS)とは、アプリケーションソフトウェアの要求に応じて、データベースを操作するシステムです。
科目B
科目Bはよりプログラミングに近く、実践的な試験になります。旧制度の午後試験では実際のプログラミング言語が使われていましたが、科目Bでは擬似言語が利用されます。この擬似言語に慣れることが最も重要で、プログラムを実際に手で書きながら処理の流れを追いかける(トレースする)練習を繰り返す必要があります。
『役に立った知識』
・オブジェクト指向の勉強になった。
・より技術的な知識が問われるので、プログラミングの考え方を身につけるには良い練習になった。
『難しいと感じたところ』
・試験の解答時間と練習問題
基本情報技術者試験における最大の壁が、科目Bの解答時間だと感じました。擬似言語やオブジェクト指向の仕組みを理解しないと、1問5分のペースでは解けません。
・練習問題の少なさ
科目Aは過去問がたくさんあり練習問題は豊富ですが、科目Bは過去問やサンプル問題が共に少なく、多くの数をこなすことはできません。しかし、試験の傾向やパターンはかなり似ているので、1問1問の理解を深める学習方法がおすすめです。
ぜひみなさんも基本情報技術者試験にチャレンジしてみてください!
1問チャレンジ
手続き processArray は、引数で与えられた整数型の配列 data の要素を先頭から順に調べ、条件に応じて新しい配列 result を生成して返す。手続き processArray を processArray({5, 8, 2, 10, 3, 4}) のように呼び出したとき、返される配列 result の要素はどうなるか。
ここで、配列の添字は1から始まる。
| 記述形式 | 説明 |
|---|---|
整数型: a |
変数 a が整数型であることを宣言する。 |
整数型の配列: arr |
配列 arr が整数型であることを宣言する。 |
a ← b |
変数 a に b を代入する。 |
arr[i] |
配列 arr の i 番目の要素を示す。 |
arr.length() |
配列 arr の要素数を返す。 |
result.append(x) |
配列 result の末尾に要素 x を追加する。 |
手続き processArray(整数型の配列: data)
整数型: i, total, count
整数型の配列: result
total ← 0
count ← 0
i ← 1
while (i <= data.length())
if (data[i] % 2 = 0) then
total ← total + data[i]
count ← count + 1
result.append(data[i])
endif
i ← i + 1
endwhile
if (count > 0) then
result.append(total / count)
endif
return result
end手続き
選択肢
ア. {8, 2, 10, 4, 6}
イ. {8, 2, 4, 24}
ウ. {5, 8, 2, 10, 3, 4, 8}
エ. {8, 2, 10, 4}
解説と正解
正解:ア
この問題は、与えられた配列 data の中から偶数だけを取り出し、新しい配列 result に追加していく処理です。そして最後に、取り出した偶数の平均値を result の末尾に追加します。
トレース(処理の追跡)
初期状態: data = {5, 8, 2, 10, 3, 4}, result = {}, total = 0, count = 0
-
i = 1: data[1] は 5。偶数ではないので何もしない。
-
i = 2: data[2] は 8。偶数なので、
total ← 0 + 8 = 8
count ← 0 + 1 = 1
result に 8 を追加 → result = {8} -
i = 3: data[3] は 2。偶数なので、
total ← 8 + 2 = 10
count ← 1 + 1 = 2
result に 2 を追加 → result = {8, 2} -
i = 4: data[4] は 10。偶数なので、
total ← 10 + 10 = 20
count ← 2 + 1 = 3
result に 10 を追加 → result = {8, 2, 10} -
i = 5: data[5] は 3。偶数ではないので何もしない。
-
i = 6: data[6] は4。偶数なので、
total ← 20 + 4 = 24
count ← 3 + 1 = 4
result に 4 を追加 → result = {8, 2, 10, 4}
while ループが終了。この時点で total = 24, count = 4。
最後の if 文: count (4) は 0 より大きいので、
total / count (24 / 4 = 6) を計算する。
result に 6 を追加 → result = {8, 2, 10, 4, 6}