ベストセラー対策本の著者が分析! 新・基本情報技術者試験の難易度 ~ポイントは IRT の導入にあり!


2022-06-07 更新
本記事は「情報処理試験教科書 プロジェクトマネージャ」(翔泳社刊) など情報処理技術者試験で数多くの人気試験対策本を執筆している 三好 康之 さんに依頼して、 2023 年 4 月以降の基本情報技術者試験の難易度に関する寄稿をいただきました。

2023 年 4 月から開始される “新” 基本情報技術者試験の難易度について考えてみました。

info_outline変更内容に関する記事

基本情報技術者試験が2023年4月から通年試験になり午後試験が大きく変更。プログラミング言語の選択も廃止

現段階(補足発表後の 5 月 25 日時点)で確認できることを整理すると、次のようになります。

  • 上期 / 下期試験から通年試験へ(受験日時を選ぶ方式へ)
  • 午前 / 午後試験から A 試験 / B 試験へ変更
    • A 試験の主題範囲は従来の午前試験と変更なし
  • fiber_new 午後試験の試験範囲が大きく変更され、情報セキュリティから 4 問とアルゴリズム(擬似言語)から 16 問の出題
    • 選択分野を廃止(従来は、テクノロジ系 [ハードウェア、ソフトウェア、データベース、ネットワーク、ソフトウェア設計] とマネジメント系とストラテジ系から選択)
    • 従来の Java や Python などプログラミング言語の選択を廃止
  • 試験時間、試験問題数を削減(上記の IPA プレス発表より抜粋)
    変更前 変更後
    変更前午前試験
    (小問)
    試験時間: 150 分
    出題数: 80 問
    解答数: 80 問
    変更後科目 A 試験
    (小問)
    試験時間: 90 分
    出題数: 60 問
    解答数: 60 問
    変更前午後試験
    (大問)
    試験時間: 150 分
    出題数: 11 問
    解答数: 5 問
    ※選択問題あり
    変更後科目 B 試験
    (小問)
    試験時間: 100 分
    出題数: 20 問
    解答数: 20 問
    ※選択問題なし(全問必須)
  • 合格基準を従来の 60 点以上という絶対評価から IRT 方式へ変更(項目ごとに点数を調整)
  • 午前試験免除制度は維持

IPA は B 試験の問題サンプルを合わせて公開しました。

「基本情報技術者試験 科目 B 試験のサンプル問題」

ポイントは IRT (項目応答理論)の導入

難易度を考える前に、なぜ今回、このような変更が行われたのかを整理しておきましょう。

今回の変更は、急きょ実施せざるを得なかった 2 年前に( CBT 化された時点で)考えられていたものです。 既定路線の変更で、ようやく準備が整ったということですね(参考資料参照)。

2 年かけて準備していたのは「 IRT (項目応答理論)の導入」です。

IRT を導入すれば、個人によって異なる問題が出題できるので、 “試験の随時実施” や “一部問題の公開” 等も可能になるからです。

したがって、決して難易度を上げたり下げたりすることが目的ではありません。 とはいえ、 IRT を導入することで “試験の質” が変わります。当然ながら“合格するための対策”も変えなければなりません。

参考
経済産業省「デジタル時代の人材政策に関する検討会」
経済産業省「デジタル時代の人材政策に関する検討会」試験ワーキンググループ:議事要旨

情報処理技術者試験における IRT (項目応答理論)とは

試験対策を考える上で重要になってくるのが IRT (項目応答理論)への戦略的対応です。

IRT とは、(簡単に言うと)試験で評価する際、受験者の実力をより正確に測って “まぐれ合格” の撲滅を目指す理論 になります。 具体的には、統計情報を利用して問題ごとの配点を変えたり、出題する順番を変えたりする方法です。

情報処理技術者試験では、現行の IT パスポート試験で採用されているほか、現行試験のような “絶対評価” になる前(平成 20 年)まで採用されていた方式です。

しかし、その詳細は公表されていないので、対策もなかなか難しいのですが … シンプルに「難しい問題に正解する!」ことを目標にすればいいと思います。

A 試験の難易度(旧午前試験)

元々、これまでの午前試験は CBT 化しやすく、問題のストックも豊富にあるため、難易度に大きな変化はないと考えます。

但し、これまでは( 150 分で 80 問だったので) 1 問あたり約 1 分 50 秒かけることができていたところ、 A 試験では( 90 分で 60 問なので) 1 問あたり 1 分 30 秒と、 20 秒ほど短くなります。 しかも IRT なので、次のように考えておく必要があります。

  • 簡単な問題に時間をかけない。できるだけ速く解く
  • 難しい問題に時間をかける

しかも、 “簡単” とか “難しい” というのは主観的なものなので、それが相対的に(誰にとっても)難しいの問題なのか否かを区別できるようになっておくことも必要です。 最初は自分自身の判断基準で構いませんが、学習を進めて高得点の難しい問題かどうかを判断できるようになることを目指すことも必要でしょう。

そういうことを考えれば、A試験対策は応用情報技術者試験の過去問題を使って進めるのが得策だと思います。他にも次のような理由もありますからね。

  • 基本情報技術者試験の問題は非公開なので、新規問題がわからない
  • 基本情報技術者試験と応用情報技術者試験の午前問題に、それほど差は無い
  • 次に応用情報技術者試験を受験する

なお、午前免除制度はこれまで通り継続になるようなので、それを利用するという手もあります。

B 試験の難易度(旧午後試験)

B 試験については大きく変わります。 CBT に適した短い問題になるということですね。 筆者も CBT 化された直後の基本情報技術者試験を受験してみましたが、(午後の問題の)長文には苦労しました。 やりにくいのなんのって。 事実上「短期記憶能力の試験」でしたからね。

試験対策本の著者が CBT になった基本情報技術者試験を受験してみた

試験時間は 100 分で問題数は 20 問です。サンプル問題も公開されていますが、それを見る限り個々の問題の難易度に大きな差はありません。 実際には、 IRT に合うように難易度に差を付けてくるのかもしれませんが、現段階ではさほど差があるようには見えません。

難易度には差はなく、(選択肢もあることから)比較的簡単な問題ばかりでしたが、平均すると 1 問あたり 5 分程度しか使えません。 そう考えると、その問題で何をしようとしているのか、何が問われているのかということに、いかに速く気付くかが合格するためのポイントになると想像できます。 A 試験同様、次のように考えることが必要です。

  • 何が問われているのか?何をしたいのかがすぐに把握できた問題
    arrow_forward選択肢を活用するなどして少しでも速く解く
  • 上記以外の問題には次のように取り組む
    arrow_forwardたっぷり時間を使い、多角的な視点に切り替えながら把握することに専念する

サンプル問題を見る限りという前提にはなりますが、イメージとしてはある団体の IQ 試験に似ているところがありますよね。 そのため、問題をパターンごとに分類し(体系化し)、そのパターンごとに “短時間で解く方法” を確立させるという対策が王道になると思います。

    分類の例

  • 実行結果が問われている問題(サンプル問題の問 4
  • 条件式( if 文)の穴埋め問題(サンプル問題の問 1問 3
  • 繰り返し条件の穴埋め問題
  • その他

このパターンが多くなれば、限られた時間の中で様々な解法をスイッチしながら進めていくことができるようになりますからね。

まとめ

このように、基本情報技術者試験は大きく変わろうとしています。

とは言うものの、 IRT を導入するということは(そのコンセプト通りなら)実力がそのまま結果につながるということです。 普段から “生産性向上” を意識しているプログラマの方にとっては “良い変化” になるはずです。

逆に、プログラミングができない IT エンジニアにとっては “厳しい変化” になります。 これまでのようにマネジメント系、ストラテジ系の問題でカバーすることが出来なくなったからです。

合格ラインをどこにするのかで、この資格の価値も変わってきますが、プログラミングに特化した内容になるのは良いことです。 筆者も、 IT エンジニアの端くれとしてプログラミングスキルは劣化させたくないので、定期的に受験してみたいと思います。

 

サンプル問題

( IPA 発表 「基本情報技術者試験 科目 B 試験のサンプル問題」 picture_as_pdfより出典)

問 4

次の記述中のacに入れる正しい答えの組合せを,解答群の中から選べ。ここで,配列の要素番号は 1 から始まる。

要素の多くが 0 の行列を疎行列という。次のプログラムは,二次元配列に格納された行列のデータ量を削減するために,疎行列の格納に適したデータ構造に変換する。

関数 transformSparseMatrix は,引数 matrix で二次元配列として与えられた行列を,整数型配列の配列に変換して返す。 関数 transformSparseMatrix を
transformSparseMatrix({{3, 0, 0, 0, 0}, {0, 2, 2, 0, 0}, {0, 0, 0, 1, 3}, {0, 0, 0, 2, 0}, {0, 0, 0, 0, 1}}) として呼び出したときの戻り値は,{{ a }, { b }, { c }} である。

〔プログラム〕

○整数型配列の配列: transformSparseMatrix(整数型の二次元配列: matrix)
 整数型: i, j
 整数型配列の配列: sparseMatrix
 sparseMatrix ← {{}, {}, {}} /* 要素数0の配列を三つ要素にもつ配列 */
 for (i を 1 から matrixの行数 まで 1 ずつ増やす)
   for (j を 1 から matrixの列数 まで 1 ずつ増やす)
     if (matrix[i, j] が 0 でない)
       sparseMatrix[1]の末尾 に iの値 を追加する
       sparseMatrix[2]の末尾 に jの値 を追加する
       sparseMatrix[3]の末尾 に matrix[i, j]の値 を追加する
     endif
   endfor
 endfor
 return sparseMatrix

解答群

a b c
1, 2, 2, 3, 3, 4, 5 1, 2, 3, 4, 5, 4, 5 3, 2, 2, 1, 2, 3, 1
1, 2, 2, 3, 3, 4, 5 1, 2, 3, 4, 5, 4, 5 3, 2, 2, 1, 3, 2, 1
1, 2, 3, 4, 5, 4, 5 1, 2, 2, 3, 3, 4, 5 3, 2, 2, 1, 2, 3, 1
1, 2, 3, 4, 5, 4, 5 1, 2, 2, 3, 3, 4, 5 3, 2, 2, 1, 3, 2, 1

問 1

次のプログラム中のに入れる正しい答えを,解答群の中から選べ。

ある施設の入場料は,0 歳から 3 歳までは 100 円,4 歳から 9 歳までは 300 円,10 歳以上は 500 円である。関数 fee は,年齢を表す 0 以上の整数を引数として受け取り,入場料を返す。

〔プログラム〕

○整数型: fee(整数型: age)
 整数型: ret
 if (age が 3 以下)
   ret ← 100
 elseif (  )
   ret ← 300
 else
   ret ← 500
 endif
 return ret

解答群

(age が 4 以上) and (age が 9 より小さい)
(age が 4 と等しい) or (age が 9 と等しい)
(age が 4 より大きい) and (age が 9 以下)
age が 4 以上
age が 4 より大きい
age が 9 以下
age が 9 より小さい

問 3

次のプログラム中のabに入れる正しい答えの組合せを,解答群の中から選べ。

手続 append は,引数で与えられた文字を単方向リストに追加する手続である。単方向リストの各要素は,クラス ListElement を用いて表現する。クラス ListElement の説明を図に示す。ListElement 型の変数はクラス ListElement のインスタンスの参照を格納するものとする。大域変数 listHead は,単方向リストの先頭の要素の参照を格納する。リストが空のときは,listHead は未定義である。

メンバ変数 説明
val 文字型 リストに格納する文字。
next ListElement リストの次の文字を保持するインスタンスの参照。初期状態は未定義である。
コンストラクタ 説明
ListElement(文字型: qVal) 引数 qVal でメンバ変数 val を初期化する。
図 クラス ListElement の説明

〔プログラム〕

大域: ListElement: listHead ← 未定義の値
○append(文字型: qVal)
 ListElement: prev, curr
 curr ← ListElement(qVal)
 if (listHead が a)
   listHead ← curr
 else
   prev ← listHead
   while (prev.next が 未定義でない)
     prev ← prev.next
   endwhile
   prev.next ← b
 endif

解答群

a b
未定義 curr
未定義 curr.next
未定義 listHead
未定義でない curr
未定義でない curr.next
未定義でない listHead

 

label 関連タグ
科目A試験は、
免除できます。
独習ゼミで科目A試験を1年間免除して、科目B試験だけに集中しましょう。
免除試験を受けた 74.9% の方が、
科目A免除資格を得ています。
科目A免除試験 最大 2 回の
受験チャンス !
info_outline
科目A免除試験 最大 2 回の
受験チャンス !
詳しく見てみるplay_circle_filled
label これまでの『資格ガイド』の連載一覧 label 著者