基本情報技術者試験(午前問題)の要点を学習した

四則演算

四則演算の答えを日本語で言うときの単語を確認しておきましょう。

和は足し算の答え。
差は引き算の答え。
積はかけ算の答え。
商は割り算の答えです。

次に社会人が意外と忘れがちなのが手計算のやり方です。
試験会場への電卓の持ち込みは禁止なので小数の計算などは手計算で解けるようにしておきましょう。
試しに以下の問題を手計算で解いてみてください。

0.25 * 0.09
0.9 / 1.25

基数変換(2進法、16進法)

長くなるので、以下の記事にまとめました。最近は2進数・16進数の小数を扱う問題が出る傾向が強いので、しっかりとおさえておいてください。

基数変換のメモ

試しに以下の問題を解いてみましょう。

  1. 10進数 1450 を2進数に変換するといくらか。

解説:
各ビットと10進数の対応付けを見て足していきます。
1450に一番近いのが11ビット目なのでビットを立てます。このビットは1024です。
次に9ビット目を立てます。このビットは256です。
このように次々に足して1450に近づくようにビットを立てていくと、以下のようになります。

1024 + 256 + 128 + 32 + 8 + 2 = 1450

これをビットにすると 010110101010 になります。

答え:010110101010

  1. 16進数 020AF を10進数に変換するといくらか。

解説:
各16進数の桁と10進数の対応付けを見て足していきます。
4桁目の2は4096 * 2 = 8192、2桁目のAは16 * 10 = 160、1桁目のFは15 * 1 = 15です。
これを足すと8192 + 160 + 15 = 8367になります。

答え:8367

  1. 10進数の演算式7÷32を2進数で表すといくらか。

解説:
2進数の桁を10進数の分数との対応付けを見て足していきます。
小数点から2桁目が1/4ですが、約分すると8/32になってしまうので、この桁は使用できないと分かります。
小数点から3桁目が1/8なので、約分すると4/32になります。
続いて、小数点から4桁目が1/16なので、約分すると2/32になります。
最後に小数点から5桁目が1/32なので、上記を足していくと4/32 + 2/32 + 1/32 = 7/32になるので、小数点から3、4、5桁目のビットを立てればいいことが分かります。

答え:0.00111

  1. 16進数の小数 0.248 を10進数の分数で表したものはどれか。

解説:
16進数の桁を10進数の分数との対応付けを見て足していきます。
小数点から1桁目が2なので2/16です。
小数点から2桁目が4なので4/256です。
小数点から3桁目が8なので8/4096です。
8/4096を約分すると1/512になります。
他の2つを合わせて通分すると、64/512 + 8/512 + 1/512 = 73/512になります。

答え:73/512

データの単位

情報の単位には主にビットとバイトの2つがあり、1バイトは8ビットです。

ビットは、コンピューターの中で扱うデータの最小単位です。1ビットで2進数の1桁が0か1かを表すことができます。文字や画像など、すべての情報はビットの組み合わせで表現されています。ただし、実際にコンピューターが扱う情報の単位は8ビットを1組にしたバイト単位で表すことが多いです。

数の単位

IT分野では以下の数の単位がよく登場します。

名称 記号 乗じる倍数 説明
テラ(Tera) T $10^{12}$ 1兆倍。最近のハードディスクの容量はテラバイト単位であることが多い。
ギガ(Giga) G $10^{9}$ 10億倍。最近のDRAMの容量はギガバイト単位であることが多い。
メガ(Mega) M $10^{6}$ 100万倍。音楽ファイル(mp3)の容量は5メガバイトくらい。
キロ(Kiro) K $10^{3}$ 1000倍。大きめのテキストファイルの容量は1キロバイトくらいになることもある。
ミリ(mili) m $10^{-3}$ 1000分の1。IDEで表示されるプログラムの実行完了時間などはミリ秒で表示されることが多い。
マイクロ(micro) µ $10^{-6}$ 100万分の1。CPUがキャッシュメモリ(SRAM)や主記憶装置(DRAM)にアクセスするときの時間単位などに使用される。
ナノ(nano) n $10^{-9}$ 10億分の1。CPUがキャッシュメモリ(SRAM)や主記憶装置(DRAM)にアクセスするときの時間単位などに使用される。
ピコ(piko) p $10^{-12}$ 1兆分の1。

単に1KB(キロバイト)というと、1000バイトを指す場合と1024バイトを指す場合があります。簡単に言えば人間側から見れば1KBは1000バイト(10進法)であり、コンピュータ側から見れば1024バイト(2進法)となっています。

論理演算

1か0の2つの値をもとに、TRUE(真)かFALSE(偽)を算出することを論理演算と言います。
論理演算の種類としてはAND、OR、NOT、NAND、NOR、XORがあります。
それぞれに与える値と演算結果は以下のとおりです。

h21a-pm-a01-1

記憶装置の違い RAM、DRAM、SRAM、SSD、HDD…

以下の5分の動画を見ると大体理解できます。

要点として以下をおさえてください。

  • 各記憶装置の用途の違い。
  • CPUはキャッシュメモリ(SRAM)と主記憶装置(DRAM)にアクセスする。

論理回路

論理回路は、論理演算を行う電気回路及び電子回路である。真理値の「真」と「偽」、あるいは二進法の「0」と「1」を、電圧の正負や高低、電流の方向や多少、位相の差異、パルスなどの時間の長短、などで表現し、論理素子などで論理演算を実装する。電圧の高低で表現する場合それぞれを「H(ハイ)」「L(ロー)」等という。基本的な演算を実装する論理ゲートがあり、それらを組み合わせて複雑な動作をする回路を構成する。論理演算の結果には、「真」、「偽」の他に「不定」がある。「不定」にはラッチ回路のdon't care, フリップフロップ回路の禁止が相当する。

論理回路には以下の種類があります。

  • 組み合わせ回路
    状態を持たない回路です。AND、OR、NOT、XORなど基本となる論理演算を行うものです。
  • 順序回路
    順序回路は過去の内部状態と取得時の入力信号とで出力が決まる回路です。組み合わせ回路は、伝播遅延によって信号が遅れることを除けば、入力の組み合わせだけで出力が一意に決まるが、順序回路はループにより内部に状態を保持しており、過去の入力に影響されるその状態も、出力の決定に関わります。

フリップフロップ回路

フリップフロップ回路とは、最も基本的な構造の論理回路の一つで、二つの状態(通常「0」および「1」に対応付けられる)のいずれかを保持することができるものです。現在の入力と共に過去の入力も利用する「順序回路」の一種で、SRAMやマイクロプロセッサ(CPU/MPU)内部のレジスタ、キャッシュメモリなどに応用されています。

メモリアクセス時間の計算問題

ここまでの知識を確認するために、以下の計算問題を解いてみましょう。

図のメモリマップで,セグメント2が解放されたとき,セグメントを移動(動的再配置)し,分散する空き領域を集めて一つの連続領域にしたい。1回のメモリアクセスは4バイト単位で行い,読取り,書込みがそれぞれ30ナノ秒とすると,動的再配置をするのに必要なメモリアクセス時間は合計何ミリ秒か。ここで,1kバイトは1,000バイトとし,動的再配置に要する時間以外のオーバヘッドは考慮しないものとする。

19

解説:
セグメント2がなくなるので、100kバイトの分散した空き領域ができます。セグメント3を左に詰めることで分散していた空き領域を、後方の800kバイトの空き領域に合流させます。つまり、セグメント2がいなくなった分、セグメント3を左に詰めるので、800kバイトの動的再配置を行う必要があります。

800kバイトは800000バイトです。1回のメモリアクセスは4バイトなので、800000 / 4を計算すると、200000回のアクセスが必要だと分かります。読み取り、書き込みがそれぞれ30ナノ秒なので、200000 * (30 * 2)を行うと、12000000ナノ秒かかることが分かります。これをミリ秒に直すには下から6桁(マイクロ秒に直したいときは3桁)削ればいいので12ミリ秒になります。

答え:12ミリ秒

出現率

出現率の計算問題で登場する単語について説明します。

  • クロック周波数
    1秒間当たりの信号数。
  • Hz
    1秒間あたりの振動回数を表す周波数の単位。
  • MIPS(million instructions per second)
    100万命令毎秒。1MIPSは1秒間に100万命令を実行できる。

以下の問題を解いてみましょう。

動作クロック周波数が700MHzのCPUで,命令の実行に必要なクロック数とその命令の出現率が表に示す値である場合,このCPUの性能は約何MIPSか。

09

解説:
700MHzのCPUなので、700 * 1000000 = 700000000が1秒間当たりのクロック周波数になります。Mはメガという100万倍を表す単位だということを思い出してください。
まずは図のクロック数と出現率の積を求めます。

4 * 0.3 = 1.2
8 * 0.6 = 4.8
10 * 0.1 = 1

これらの和を求めると7になります。つまり、1秒あたり平均7クロックです。
CPUは700MHzなので、700000000 / 7 = 100000000の性能になります。
MIPSは100万命令毎秒なので、100000000から6桁削ればいいので、100MIPSになります。

答え:100MIPS

稼働率

回線の稼働率を求めるためには公式を覚える必要があります。

稼働率の計算式

  • 直列の場合
    稼働率 * 稼働率
  • 並列の場合
    1 - ((1 - 稼働率) * (1 - 稼働率))

以下の問題を解いてみましょう。

東京と福岡を結ぶ実線の回線がある。東京と福岡の間の信頼性を向上させるために,大阪を経由する破線の迂回回線を追加した。迂回回線追加後における,東京と福岡の間の稼働率は幾らか。ここで,回線の稼働率は,東京と福岡,東京と大阪,大阪と福岡の全てが0.9とする。

15

解説:
東京と福岡間の稼働率を求める問題です。
まずは迂回路の稼働率を求めます。直列の公式に当てはめると0.9 * 0.9 = 0.81になります。
東京と福岡間には迂回路を含めて2つの回線が通っているので、これは並列の回線と考えます。並列の公式に当てはめると1 - ((1 - 0.9) * (1 - 0.81)) = 0.981になります。

答え:0.981

伝送効率

伝送効率についてはデータの単位や数の単位を正しく認識できていれば解くことができます。

以下の問題を解いてみましょう。

1.5Mビット/秒の伝送路を用いて12Mバイトのデータを転送するために必要な伝送時間は何秒か。ここで,伝送路の伝送効率を50%とする。

解説:
12Mバイトが何Mビットかをまずは計算します。12 * 8 = 96で96Mビットだと分かります。
続いて、1秒当たり1.5Mビットの伝送路を用いますが、伝送効率が50%なので1.5 * 0.5 = 0.75で1秒当たり0.75Mビットだと分かります。
最後に96Mビットのデータを転送するために1秒当たり0.75Mビットなので、96 / 0.75 = 128で、128秒かかると分かりました。

答え:128秒

プロジェクトマネジメント

システム開発の場合、要件定義、設計、実装、テストなどの工程のことです。
PMBOK(Project Management Body Of Knowledge)というプロジェクト管理の知識体系をまとめたガイドラインが存在します。

プロジェクトの管理対象として、以下のものがあります。

  • スコープ
  • 時間
  • コスト
  • 品質

スコープ管理

作業範囲を明確にし、作業の漏れをなくすためにスコープ管理を行います。
主にWBS(Work Breakdown Structure)を使用します。WBSとは、成果物(設計書、システム自体)をもとに、作業を洗い出し、細分化、階層化した図です。

currywbs

アローダイアグラム(プロジェクト管理の時間管理)

アローダイアグラムでは作業が完了するまでにもっとも実行に時間がかかるパスをクリティカルパスと言います(遅れると致命的な作業)。

問題
図に示すアローダイアグラムは,あるシステムの開発作業を表したものである。クリティカルパスはどれか。ここで,矢印に示す数字は各作業の所要日数を表す。

46

選択肢
ア A-B-G-L-N

イ A-B-H-K-N

ウ A-C-E-G-L-N

エ A-C-I-N

解説:
クリティカルパスを計算すると、5 + 10 + 8 + 12 + 7 + 3 = 45になり、ウが一番時間がかかるから。

答え:ウ

続けて、もう1問解いてみましょう。

図のプロジェクトの日程計画において,プロジェクトの所要日数は何日か。

52

解説:
先ほどの問題とは違って、ダミー作業という概念が加わっています。
ダミー作業とは、他の作業によって作業の完了待ちが発生している状態のことで、例えば、Bの所要時間は5日間ですが、Aの作業が10日かかるので5日分の待ち時間が発生します。

これを考慮したうえで、もっとも作業時間がかかるパスは A ⇒ D ⇒ ダミー ⇒ E ⇒ Hとなります。

答え:55日

ファンクションポイント法(プロジェクト管理のコスト管理)

工数を見積もる際のやり方のひとつです。

問題
ある新規システムの機能規模を見積もったところ,500FP(ファンクションポイント)であった。このシステムを構築するプロジェクトには,開発工数のほかに,システム導入と開発者教育の工数が,合計で10人月必要である。また,プロジェクト管理に,開発と導入・教育を合わせた工数の10%を要する。このプロジェクトに要する全工数は何人月か。ここで,開発の生産性は1人月当たり10FPとする。

ア 51
イ 60
ウ 65
エ 66

解説:
既に見積もられた500FPに、システム導入と開発者教育の工数にかかる人月をFPに直して足します。

500 + (10人月 * 10FP) = 600

続いて、「また,プロジェクト管理に,開発と導入・教育を合わせた工数の10%を要する」と書いてあるので10%増やします。

600 * 1.1 = 660

最後に人月に直します。

660 / 10 = 66

答えは66です。

答え:エ

パレート図(プロジェクト管理の品質管理)

品質マネジメントでは、パレート図を使うことがあります。パレート図とは棒グラフと折れ線グラフを合わせた複合グラフです。
分析対象から重要な要素を識別するために使用されます。テスト報告会の不具合分析などで使用されます。

情報セキュリティの3要素 C・I・A

1992年にOECD(経済開発協力機構)が発表した情報セキュリティに関するガイドラインで示されている3要素のこと。

  • 機密性(Confidentiality)
    正当な権限を持つものだけが、その情報にアクセスし、使用できること。
    データを暗号化するなどして、第三者に盗まれたり盗聴されたりしないようにする。
    対策例:暗号化
  • 完全性(Integrity)
    情報の改ざんや欠落のない、正確な状態を保っていること。Webページの改ざんなど。
    対策例:脆弱性の対策、ディジタル署名
  • 可用性(Availability)
    強化されたアクセスに対しては、必要な時にその情報を使用できる状態であること。
    対策例:システムの二重化

サブネットマスクの計算方法

サブネットマスクは、ネットワーク部とホスト部の境界を表すものです。/16というCIDRを2進数では11111111.11111111.00000000.00000000のようにネットワーク部を1、ホスト部を0で表すことができます。10進数では255.255.0.0と表現できます。このような表現方法をサブネットマスクと呼びます。

問題
次のIPアドレスとサブネットマスクをもつPCがある。このPCのネットワークアドレスとして,適切なものはどれか。

IPアドレス: 10.170.70.19
 サブネットマスク:255.255.255.240

ア 10.170.70.0
イ 10.170.70.16
ウ 10.170.70.31
エ 10.170.70.255

答え:イ

解説:
サブネットマスクの255.255.255.240を2進数で表現すると、以下になります。

11111111 11111111 11111111 11110000

これはつまり、1が立っている28ビットをネットワーク部、残りの4ビットをホスト部にすると言う意味です。
ウ 10.170.70.31は第4オクテットが31なので、2進数では00011111となってしまいます。サブネットマスクの第4オクテットの11110000という左から4ビット目までを1にしなければならないという制約を破ってしまうため(サブネットマスクの範囲から外れてしまうため)、これは間違いです。
ア 10.170.70.0は第4オクテットが0なので、2進数で表すと00000000になってしまいます。これはサブネットマスクの範囲から外れているので間違いです。
エ 10.170.70.255は第4オクテットが255なので、2進数で表すと11111111になります。これはサブネットマスクの範囲内ではありますが、ブロードキャストアドレスなので間違いです。
イ 10.170.70.16は第4オクテットが16なので、2進数では11110000になります。これはサブネットマスクの範囲内になり、ネットワークアドレスとして正しいので正解です。

その他

この他にもネットワークとデータベースについては一通り勉強しました。

勉強した内容は以下の記事にまとめています。

受験時の時間配分

基本情報技術者試験の制限時間は、午前・午後ともに150分間です。

午前問題は全80問なので、1問あたり最大2分程度の時間配分で進めます。ぱっと見で2分以上かかると思う計算問題は後回しにします。

午後問題は問1が必須回答、問2~7のうちから4問選択、問8が必須回答、問9~13から1問選択です。
点数配分は、問1~問7の配点は12点で、問8~問13の配点は20点です。
単純に配点の割合で時間配分をすると、問1~7は18分で、問8~13は30分です。
午後問題の鬼門は問8~13です。かなり長文であり、プログラムの読解力が試される問題です。完全に読み解くには時間が30分では足らないので、要所をおさえながら処理を追いかけることになります。

設問の内容は以下の通りです。

設問 問題内容
1 情報セキュリティ
2 ハードウェア、離散数学
3 データベース(SQL)
4 ネットワーク
5 ソフトウェア開発
6 プロジェクトマネジメント
7 OR/IE、システム戦略
8 データ構造とアルゴリズム
9 C
10 COBOL
11 Java
12 アセンブラ
13 表計算

選択問題は、私は問3~6、問11を選んでいます。過去問題を何問か解き、平均正答率から選択する問題を決めると良いと思います。

問題を解いていく順番としては、問8~13を先に終わらせてから問1~7を解くと良いでしょう。元気なうちに鬼門を終わらせておいたほうがミスが少ないと思います。その際に、問8~13にかける30分という時間は必ず守るようにしてください。

追記

平成31年春の基本情報技術者試験を受験してきました。
帰宅後に午前問題を自己採点してみたところ、80問のうち55問正解していました。

参考資料
Schooの動画教材 基本情報技術者試験
計画やスケジュール管理でよく聞く用語「WBS」ってなんだろう? | Think! management(シンク!マネジメント)
フリップフロップ回路とは(flip flop回路とは)~制御工学の基礎あれこれ~
平成21年度 秋期 午後 問01 | 基本情報技術者試験に合格する勉強講座