印刷プレビューです。ブラウザの印刷機能でPDF保存・印刷できます。
基本情報技術者 プログラミング・ソフトウェア開発
全40問 / トルカ(https://toruca.app)
問1. 「オブジェクト指向プログラミング」の基本的な考え方として最も適切なものはどれか。
- A. データ(属性)とそれを操作する処理(メソッド)を「オブジェクト」としてひとまとめにして扱う考え方
- B. 処理を一切分割せず、1つの巨大な手続きとして記述する考え方
- C. 全てのデータをグローバル変数として管理する考え方
- D. プログラムを実行するたびにランダムな動作をさせる考え方
正解: A. データ(属性)とそれを操作する処理(メソッド)を「オブジェクト」としてひとまとめにして扱う考え方 / オブジェクト指向プログラミングは、データ(属性)とそれを操作する処理(メソッド)を「オブジェクト」としてひとまとめにして扱う考え方であり、カプセル化・継承・ポリモーフィズム(多態性)を主要な特徴とする。
問2. オブジェクト指向の三大要素の1つ「カプセル化」の説明として最も適切なものはどれか。
- A. オブジェクトの内部データを隠蔽し、外部からは公開された手段(メソッド)を通じてのみアクセスできるようにする仕組み
- B. あるクラスの性質を別のクラスがそのまま引き継ぐ仕組み
- C. 同じメソッド名で異なる振る舞いを実現する仕組み
- D. プログラムの実行速度を高速化する仕組み
正解: A. オブジェクトの内部データを隠蔽し、外部からは公開された手段(メソッド)を通じてのみアクセスできるようにする仕組み / カプセル化は、オブジェクトの内部データ(属性)を外部から直接アクセスできないよう隠蔽し、公開された手段(メソッド、ゲッター/セッター等)を通じてのみアクセス・操作できるようにする仕組みであり、データの整合性を保ちやすくする効果がある。
問3. オブジェクト指向の三大要素の1つ「継承(インヘリタンス)」の説明として最も適切なものはどれか。
- A. 既存のクラス(親クラス)の属性やメソッドを、新しいクラス(子クラス)が引き継いで再利用できる仕組み
- B. オブジェクトの内部データを外部から完全に隠蔽する仕組み
- C. 同じ名前のメソッドが呼び出し元によって異なる動作をする仕組み
- D. プログラムのメモリ使用量を削減する仕組み
正解: A. 既存のクラス(親クラス)の属性やメソッドを、新しいクラス(子クラス)が引き継いで再利用できる仕組み / 継承(インヘリタンス)は、既存のクラス(親クラス、スーパークラス)が持つ属性やメソッドを、新しいクラス(子クラス、サブクラス)が引き継いで再利用できる仕組みであり、共通部分をまとめてコードの重複を削減できる。
問4. オブジェクト指向の三大要素の1つ「ポリモーフィズム(多態性)」の説明として最も適切なものはどれか。
- A. 同じメソッド名の呼び出しに対して、呼び出し対象のオブジェクトの実際のクラスに応じて異なる振る舞いをする性質
- B. 全てのクラスが同じ名前を持たなければならないという制約
- C. オブジェクトの内部データを隠蔽する仕組み
- D. プログラムの実行を並列化する仕組み
正解: A. 同じメソッド名の呼び出しに対して、呼び出し対象のオブジェクトの実際のクラスに応じて異なる振る舞いをする性質 / ポリモーフィズム(多態性)は、同じメソッド名の呼び出しに対して、呼び出し対象のオブジェクトの実際のクラスに応じて異なる振る舞いを実現する性質であり、例えば「鳴く」というメソッドを犬クラスと猫クラスでそれぞれ異なる実装にできる。
問5. プログラミング言語における「静的型付け」と「動的型付け」の違いとして最も適切なものはどれか。
- A. 静的型付けはコンパイル時に変数の型が決定・検査され、動的型付けは実行時に型が決定される
- B. 静的型付けは実行速度が常に遅く、動的型付けは常に速い
- C. 動的型付け言語には変数という概念が一切存在しない
- D. 静的型付けと動的型付けに実質的な違いはない
正解: A. 静的型付けはコンパイル時に変数の型が決定・検査され、動的型付けは実行時に型が決定される / 静的型付けは、変数の型がコンパイル時(プログラムの実行前)に決定され型の不整合が検査される方式であり、動的型付けは実行時に型が決定される方式である。静的型付けは早期にエラーを発見しやすく、動的型付けは柔軟な記述がしやすいという特徴がある。
問6. プログラムにおける「例外処理」の目的として最も適切なものはどれか。
- A. 実行時に発生したエラー(例外)を検知し、プログラムが異常終了せず適切に対処できるようにすること
- B. プログラムのソースコードの行数を削減すること
- C. プログラムの実行速度を必ず高速化すること
- D. 変数の型を実行時に自動変換すること
正解: A. 実行時に発生したエラー(例外)を検知し、プログラムが異常終了せず適切に対処できるようにすること / 例外処理は、プログラムの実行時に発生したエラー(ゼロ除算、ファイルが見つからない等)を検知し、プログラムが予期せず異常終了することを防ぎ、エラーメッセージの表示や代替処理等、適切な対処を行えるようにする仕組みである(try-catch構文等で実装される)。
問7. 「関数型プログラミング」の特徴として最も適切なものはどれか。
- A. 関数を第一級オブジェクトとして扱い、副作用(外部の状態変更)を避けて処理を記述しようとする考え方
- B. 全ての処理を必ずオブジェクトのメソッドとして記述しなければならない考え方
- C. 変数への再代入を無制限に推奨する考え方
- D. プログラムを一切関数化せず全て1つの塊として書く考え方
正解: A. 関数を第一級オブジェクトとして扱い、副作用(外部の状態変更)を避けて処理を記述しようとする考え方 / 関数型プログラミングは、関数を値として扱える第一級オブジェクトとして位置づけ、可能な限り副作用(外部の状態を変更する処理)を避けて、入力に対して常に同じ出力を返す「純粋関数」を組み合わせて処理を記述しようとするプログラミングパラダイムである。
問8. 「API(Application Programming Interface)」の説明として最も適切なものはどれか。
- A. あるソフトウェアの機能を、他のソフトウェアから呼び出して利用できるようにするための取り決め・窓口
- B. プログラムのソースコードそのものを指す用語である
- C. データベースの一種を指す用語である
- D. コンピュータのハードウェア部品を指す用語である
正解: A. あるソフトウェアの機能を、他のソフトウェアから呼び出して利用できるようにするための取り決め・窓口 / API(Application Programming Interface)は、あるソフトウェアやサービスが提供する機能を、他のソフトウェアから呼び出して利用できるようにするための取り決め(インタフェース)であり、内部の実装を意識せずに機能を利用できるようにする窓口の役割を果たす。
問9. ソフトウェア開発における「バージョン管理システム(Gitなど)」の主な役割として最も適切なものはどれか。
- A. ソースコードの変更履歴を記録し、複数人での並行開発やバージョンの巻き戻しを可能にする
- B. プログラムの実行速度を自動的に最適化する
- C. ソースコードを自動的に他のプログラミング言語に変換する
- D. データベースのバックアップのみを行う
正解: A. ソースコードの変更履歴を記録し、複数人での並行開発やバージョンの巻き戻しを可能にする / バージョン管理システム(Git等)は、ソースコードの変更履歴を記録・管理し、複数人での並行開発(ブランチ運用)や過去のバージョンへの巻き戻し、変更内容の差分確認等を可能にするツールであり、現代のソフトウェア開発において広く利用されている。
問10. 「インタフェース(抽象クラス的な概念)」の役割として最も適切なものはどれか。
- A. 実装を持たずメソッドの仕様(名前・引数・戻り値の型)のみを定義し、実装するクラスに一貫した振る舞いを保証させる
- B. オブジェクトのメモリ使用量を計算する
- C. プログラムの実行速度を測定する
- D. データベースのテーブル構造を定義する
正解: A. 実装を持たずメソッドの仕様(名前・引数・戻り値の型)のみを定義し、実装するクラスに一貫した振る舞いを保証させる / インタフェースは、実装を持たずメソッドの仕様(名前・引数・戻り値の型)のみを定義する仕組みであり、これを実装する複数のクラスに一貫したメソッド群の実装を強制することで、ポリモーフィズムを活用した柔軟な設計を可能にする。
問11. プログラミングにおける「配列」と「連想配列(辞書・マップ)」の違いとして最も適切なものはどれか。
- A. 配列は通常インデックス(整数の番号)で要素にアクセスし、連想配列は任意のキー(文字列等)で要素にアクセスする
- B. 配列も連想配列も全く同じ方法でアクセスする
- C. 連想配列は数値データしか格納できない
- D. 配列は要素を1つしか格納できない
正解: A. 配列は通常インデックス(整数の番号)で要素にアクセスし、連想配列は任意のキー(文字列等)で要素にアクセスする / 配列は通常0または1から始まるインデックス(整数の番号)を用いて要素にアクセスするのに対し、連想配列(辞書・マップ)は文字列等の任意のキーと値のペアで要素を管理し、キーを指定して値にアクセスする点が異なる。
問12. 「単体テスト(ユニットテスト)」の説明として最も適切なものはどれか。
- A. 関数やメソッドといった、プログラムを構成する最小単位の機能が正しく動作するかを個別に検証するテスト
- B. システム全体を実際の利用者が操作して検証するテストのみを指す
- C. テストを一切行わずにリリースする手法を指す
- D. データベースの性能のみを測定するテストを指す
正解: A. 関数やメソッドといった、プログラムを構成する最小単位の機能が正しく動作するかを個別に検証するテスト / 単体テスト(ユニットテスト)は、関数やメソッドといったプログラムを構成する最小単位の機能が、仕様通りに正しく動作するかを個別に検証するテストであり、テストの自動化(xUnit系フレームワーク等)と組み合わせて継続的に実施されることが多い。
問13. 「ホワイトボックステスト」と「ブラックボックステスト」の違いとして最も適切なものはどれか。
- A. ホワイトボックステストはプログラムの内部構造(ロジック)に着目し、ブラックボックステストは入出力の仕様のみに着目してテストする
- B. ホワイトボックステストは常に自動化できず、ブラックボックステストは常に自動化できる
- C. 両者に実質的な違いはなく同じ意味である
- D. ブラックボックステストはプログラムのソースコードを必ず読む必要がある
正解: A. ホワイトボックステストはプログラムの内部構造(ロジック)に着目し、ブラックボックステストは入出力の仕様のみに着目してテストする / ホワイトボックステストは、プログラムの内部構造(分岐・ループ等のロジック)に着目し、コードのカバレッジ(網羅率)を意識してテストケースを設計する手法である。一方、ブラックボックステストは内部構造を意識せず、入力と出力の仕様のみに基づいてテストケースを設計する手法である。
問14. ブラックボックステストの技法の1つ「同値分割」の説明として最も適切なものはどれか。
- A. 入力データを、同じ結果が期待されるグループ(同値クラス)に分割し、各グループから代表値を選んでテストする技法
- B. 入力データを全て個別にテストしなければならないとする技法
- C. テストを一切行わなくてよいとする判断基準
- D. プログラムの実行速度のみを測定する技法
正解: A. 入力データを、同じ結果が期待されるグループ(同値クラス)に分割し、各グループから代表値を選んでテストする技法 / 同値分割は、入力データを同じ結果(正常・異常等)が期待されるグループ(同値クラス)に分割し、各グループから代表的な値を選んでテストすることで、全ての入力値を網羅せずとも効率的にテストの網羅性を高める技法である。
問15. ブラックボックステストの技法の1つ「限界値分析(境界値分析)」の説明として最も適切なものはどれか。
- A. 同値クラスの境界となる値(限界値)付近を重点的にテストすることで、境界条件のバグを発見しやすくする技法
- B. 入力データの中央値のみをテストする技法
- C. テストケースを完全にランダムに選定する技法
- D. プログラムのメモリ使用量の限界のみを測定する技法
正解: A. 同値クラスの境界となる値(限界値)付近を重点的にテストすることで、境界条件のバグを発見しやすくする技法 / 限界値分析(境界値分析)は、同値クラスの境界となる値(例:範囲の最小値・最大値、およびその前後の値)付近を重点的にテストする技法であり、「以上」「未満」等の境界条件の実装ミス(off-by-oneエラー等)を発見しやすくする効果がある。
問16. 「UML(統一モデリング言語)」の用途として最も適切なものはどれか。
- A. システムの構造や振る舞いを図(クラス図・シーケンス図等)を用いて視覚的に表現するための標準的な記法
- B. 特定のプログラミング言語のコンパイラを指す用語
- C. データベースの一種を指す用語
- D. ネットワークの通信プロトコルを指す用語
正解: A. システムの構造や振る舞いを図(クラス図・シーケンス図等)を用いて視覚的に表現するための標準的な記法 / UML(Unified Modeling Language:統一モデリング言語)は、システムの構造(クラス図等)や振る舞い(シーケンス図・ユースケース図等)を、標準化された図を用いて視覚的に表現するための記法であり、設計内容の共有・ドキュメント化に広く利用される。
問17. UMLの「クラス図」が表現する内容として最も適切なものはどれか。
- A. クラスの持つ属性・メソッド、およびクラス間の関連(継承・関連・依存等)の静的な構造
- B. 時間の経過に伴うオブジェクト間のメッセージのやり取り(動的な振る舞い)
- C. ネットワークの物理的な配線図
- D. データベースのバックアップスケジュール
正解: A. クラスの持つ属性・メソッド、およびクラス間の関連(継承・関連・依存等)の静的な構造 / UMLのクラス図は、システムを構成するクラスが持つ属性(データ)・メソッド(処理)、およびクラス間の関連(継承・集約・依存等)といった静的な構造を表現する図である。動的な振る舞い(時系列のやり取り)を表現するのはシーケンス図の役割である。
問18. UMLの「シーケンス図」が表現する内容として最も適切なものはどれか。
- A. オブジェクト間で時系列に沿って行われるメッセージ(メソッド呼び出し)のやり取り
- B. クラスが持つ属性とメソッドの一覧のみ
- C. データベースのテーブル構造のみ
- D. ネットワークのIPアドレス割り当て
正解: A. オブジェクト間で時系列に沿って行われるメッセージ(メソッド呼び出し)のやり取り / UMLのシーケンス図は、複数のオブジェクト(またはアクター)間で時系列に沿って行われるメッセージ(メソッド呼び出し等)のやり取りを表現する図であり、処理の流れや呼び出し順序を視覚的に把握するのに役立つ。
問19. 「アジャイル開発」の特徴として最も適切なものはどれか。
- A. 短い期間(イテレーション、スプリント)で開発とフィードバックを繰り返し、変化する要求に柔軟に対応する開発手法
- B. 要件定義から全工程を一切見直さず一直線に進める開発手法(ウォーターフォール型と同義)
- C. ドキュメントの作成を完全に禁止する開発手法
- D. テストを一切実施しない開発手法
正解: A. 短い期間(イテレーション、スプリント)で開発とフィードバックを繰り返し、変化する要求に柔軟に対応する開発手法 / アジャイル開発は、短い期間(イテレーション、スプリント等)で計画・設計・実装・テストを繰り返し、その都度フィードバックを得ながら進めることで、開発途中で変化する要求にも柔軟に対応できる開発手法である。スクラムやXP(エクストリームプログラミング)等の具体的な手法がある。
問20. 「ウォーターフォールモデル」の特徴として最も適切なものはどれか。
- A. 要件定義・設計・実装・テストといった工程を、原則として前の工程に戻らず順番に進めていく開発モデル
- B. 各工程を同時並行で無秩序に進める開発モデル
- C. テストを最初の工程として実施する開発モデル
- D. アジャイル開発の別名である
正解: A. 要件定義・設計・実装・テストといった工程を、原則として前の工程に戻らず順番に進めていく開発モデル / ウォーターフォールモデルは、要件定義→設計→実装→テスト→運用といった工程を、水が流れ落ちるように原則として前の工程には戻らず順番に進めていく開発モデルであり、計画の見通しが立てやすい反面、後工程での仕様変更への対応が難しいという特徴がある。
問21. 「リファクタリング」の説明として最も適切なものはどれか。
- A. 外部から見た挙動(機能)を変えずに、ソースコードの内部構造を整理・改善すること
- B. プログラムの機能を追加すること
- C. プログラムのバグを一切修正しないこと
- D. ソースコードを削除して機能を停止させること
正解: A. 外部から見た挙動(機能)を変えずに、ソースコードの内部構造を整理・改善すること / リファクタリングは、プログラムの外部から見た挙動(機能)を変えずに、ソースコードの内部構造(可読性・保守性等)を整理・改善する作業であり、コードの重複除去やメソッドの分割等を通じて将来の変更や不具合修正をしやすくする効果がある。
問22. 「デザインパターン」の説明として最も適切なものはどれか。
- A. ソフトウェア設計における共通の問題に対する、再利用可能な設計上の解決策のひな形
- B. 特定のプログラミング言語の文法規則のみを指す用語
- C. データベースのテーブル設計手法のみを指す用語
- D. ネットワークの配線パターンのみを指す用語
正解: A. ソフトウェア設計における共通の問題に対する、再利用可能な設計上の解決策のひな形 / デザインパターンは、ソフトウェア設計において繰り返し現れる共通の問題に対して、先人たちが編み出した再利用可能な設計上の解決策のひな形(テンプレート)であり、Singleton、Factory、Observer等、GoF(Gang of Four)が整理した23のパターンが広く知られている。
問23. 「コンパイラ」と「インタプリタ」の違いとして最も適切なものはどれか。
- A. コンパイラはソースコード全体を機械語等に事前に変換してから実行し、インタプリタはソースコードを1行ずつ解釈しながら実行する
- B. コンパイラとインタプリタに実質的な違いはない
- C. インタプリタは必ずコンパイラより高速に動作する
- D. コンパイラは実行時にのみ動作するプログラムである
正解: A. コンパイラはソースコード全体を機械語等に事前に変換してから実行し、インタプリタはソースコードを1行ずつ解釈しながら実行する / コンパイラは、ソースコード全体を事前に機械語(またはバイトコード)に変換(コンパイル)してから実行するのに対し、インタプリタはソースコードを1行(または一部)ずつ逐次解釈しながら実行する。一般にコンパイル型の方が実行速度は高速だが、インタプリタ型は開発時の試行錯誤がしやすいという特徴がある。
問24. プログラミングにおける「浮動小数点数」の演算に関する注意点として最も適切なものはどれか。
- A. 2進数で表現する際に誤差が生じることがあり、単純な等号比較(==)で意図しない結果になる場合がある
- B. 浮動小数点数の演算には一切誤差が生じない
- C. 整数型より必ず計算が速い
- D. 浮動小数点数は文字列としてのみ扱われる
正解: A. 2進数で表現する際に誤差が生じることがあり、単純な等号比較(==)で意図しない結果になる場合がある / 浮動小数点数(0.1等)は、2進数で正確に表現できない値があるため演算誤差が生じることがあり、例えば0.1+0.2が正確に0.3にならない場合がある。そのため、浮動小数点数同士を単純な等号(==)で比較すると意図しない結果になることがあり、許容誤差を設けた比較が推奨される。
問25. 「マルチスレッド処理」の説明として最も適切なものはどれか。
- A. 1つのプログラム(プロセス)内で複数の処理の流れ(スレッド)を並行して実行する仕組み
- B. 複数の異なるプログラムを同時に起動することを指す用語
- C. プログラムを1つのスレッドでのみ実行しなければならないという制約
- D. データベースのバックアップ方式の一種
正解: A. 1つのプログラム(プロセス)内で複数の処理の流れ(スレッド)を並行して実行する仕組み / マルチスレッド処理は、1つのプログラム(プロセス)内で複数の処理の流れ(スレッド)を並行して実行する仕組みであり、CPUの複数コアを活用した処理の高速化や、UIの応答性を保ちながらバックグラウンド処理を行う等の目的で利用される。ただし共有データへの同時アクセスによる不整合(競合状態)に注意が必要である。
問26. マルチスレッド処理における「デッドロック」の説明として最も適切なものはどれか。
- A. 複数のスレッドが互いに相手が保持するリソースの解放を待ち続け、処理が永久に進まなくなる状態
- B. スレッドの処理が正常に完了した状態
- C. スレッドの数が1つに制限された状態
- D. プログラムのメモリ使用量がゼロになった状態
正解: A. 複数のスレッドが互いに相手が保持するリソースの解放を待ち続け、処理が永久に進まなくなる状態 / デッドロックは、複数のスレッド(またはプロセス)が、互いに相手が保持しているリソース(ロック等)の解放を待ち続けることで、どちらの処理も先に進めなくなり、システム全体が停止してしまう状態である。リソースの取得順序を統一する等の対策が必要である。
問27. 「コーディング規約」を設ける目的として最も適切なものはどれか。
- A. 複数人での開発においてコードの記述スタイルを統一し、可読性・保守性を高めること
- B. プログラムの実行速度を必ず向上させること
- C. プログラムのバグを完全にゼロにすること
- D. 特定の開発者以外がコードを読めないようにすること
正解: A. 複数人での開発においてコードの記述スタイルを統一し、可読性・保守性を高めること / コーディング規約は、変数名の付け方やインデント、コメントの書き方等、コードの記述スタイルに関するルールを定めたものであり、複数人での開発においてコードの一貫性を保ち、可読性・保守性を高めることを目的としている。
問28. 「結合テスト(統合テスト)」の説明として最も適切なものはどれか。
- A. 個別に開発された複数のモジュール(機能)を組み合わせた際に、それらが正しく連携して動作するかを検証するテスト
- B. 個々の関数やメソッドのみを単独で検証するテスト
- C. 実際の利用者による最終的な受け入れ確認のみを指すテスト
- D. テストを一切行わないことを指す用語
正解: A. 個別に開発された複数のモジュール(機能)を組み合わせた際に、それらが正しく連携して動作するかを検証するテスト / 結合テスト(統合テスト)は、単体テストで検証済みの複数のモジュール(機能)を組み合わせた際に、モジュール間のインタフェースやデータの受け渡しが正しく連携して動作するかを検証するテストであり、単体テストの後、システムテストの前に実施されることが多い。
問29. 「回帰テスト(リグレッションテスト)」の目的として最も適切なものはどれか。
- A. プログラムの修正や機能追加によって、既存の正常に動作していた機能に予期しない影響(デグレード)が出ていないかを確認すること
- B. 新規に開発した機能のみを対象とするテスト
- C. プログラムのソースコードの行数を測定するテスト
- D. テストを一切実施しないことを正当化するための用語
正解: A. プログラムの修正や機能追加によって、既存の正常に動作していた機能に予期しない影響(デグレード)が出ていないかを確認すること / 回帰テスト(リグレッションテスト)は、プログラムの修正やバグ修正、機能追加を行った際に、それによって既存の正常に動作していた機能に予期しない悪影響(デグレード、リグレッション)が出ていないかを確認するために実施するテストである。
問30. 「コンストラクタ」の役割として最も適切なものはどれか。
- A. クラスからオブジェクト(インスタンス)を生成する際に呼び出され、初期化処理を行う特別なメソッド
- B. オブジェクトを削除するためのメソッド
- C. クラス内の全てのメソッドを一括で無効化するメソッド
- D. データベースへの接続のみを行うメソッド
正解: A. クラスからオブジェクト(インスタンス)を生成する際に呼び出され、初期化処理を行う特別なメソッド / コンストラクタは、クラスからオブジェクト(インスタンス)を生成する際に自動的に呼び出される特別なメソッドであり、オブジェクトの属性に初期値を設定する等の初期化処理を行う役割を持つ。
問31. オブジェクト指向言語における「private(プライベート)」修飾子の役割として最も適切なものはどれか。
- A. その属性やメソッドを、定義されたクラスの内部からのみアクセス可能にする(外部や他クラスからは直接アクセスできない)
- B. その属性やメソッドを、プログラム内のどこからでも自由にアクセス可能にする
- C. その属性やメソッドを実行時に完全に削除する
- D. その属性やメソッドを必ず定数として扱う
正解: A. その属性やメソッドを、定義されたクラスの内部からのみアクセス可能にする(外部や他クラスからは直接アクセスできない) / private修飾子は、その属性やメソッドを定義されたクラスの内部からのみアクセス可能にし、外部や他のクラスからは直接アクセスできないようにする仕組みであり、カプセル化を実現するための重要な要素である。
問32. 「文字コード」の説明として最も適切なものはどれか。
- A. コンピュータ上で文字を扱うために、各文字に割り当てられた数値のコード体系(UTF-8やShift-JIS等)
- B. プログラムのエラーコードを指す用語
- C. データベースの暗号化方式のみを指す用語
- D. ネットワークの通信速度を表す指標
正解: A. コンピュータ上で文字を扱うために、各文字に割り当てられた数値のコード体系(UTF-8やShift-JIS等) / 文字コードは、コンピュータ上で文字(アルファベット・数字・日本語等)を扱うために、各文字に割り当てられた数値のコード体系であり、UTF-8・Shift-JIS・EUC-JP等、複数の方式が存在する。異なる文字コード間でのやり取りでは「文字化け」が発生することがある。
問33. 「デバッグ」の説明として最も適切なものはどれか。
- A. プログラムに発生している不具合(バグ)の原因を特定し、修正する作業
- B. プログラムに新しい機能を追加する作業のみを指す
- C. プログラムのソースコードを他の言語に翻訳する作業
- D. プログラムを完全に削除する作業
正解: A. プログラムに発生している不具合(バグ)の原因を特定し、修正する作業 / デバッグは、プログラムに発生している不具合(バグ)の原因を特定し、それを修正する作業であり、デバッガというツールを用いてブレークポイントを設定し変数の値を確認しながら原因を追跡することが多い。
問34. 「DRY原則(Don't Repeat Yourself)」の説明として最も適切なものはどれか。
- A. 同じロジックやデータをプログラム内に重複して記述しないようにする設計原則
- B. 同じコードを可能な限り多く重複させることを推奨する原則
- C. テストを一切実施しないことを推奨する原則
- D. 変数名を毎回変更することを推奨する原則
正解: A. 同じロジックやデータをプログラム内に重複して記述しないようにする設計原則 / DRY原則(Don't Repeat Yourself)は、同じロジックやデータをプログラム内に重複して記述せず、共通化・部品化することで、修正が必要になった際に1箇所を直せば済むようにする設計原則であり、保守性の向上に寄与する。
問35. プログラムの「可読性」を高めるための工夫として最も適切なものはどれか。
- A. 意味の分かりやすい変数名・関数名を付け、適切なコメントや一貫したインデントを用いる
- B. 変数名を全て1文字(a, b, c等)に統一する
- C. コメントは一切記述しない方が可読性が高いとされる
- D. 1つの関数にできる限り多くの処理を詰め込む
正解: A. 意味の分かりやすい変数名・関数名を付け、適切なコメントや一貫したインデントを用いる / プログラムの可読性を高めるためには、意味の分かりやすい変数名・関数名を付けること、必要に応じて適切なコメントを記述すること、インデントや命名規則を一貫させること等が重要であり、これにより他の開発者(や将来の自分)がコードを理解しやすくなる。
問36. ソフトウェア開発における「ファンクションポイント法」の説明として最も適切なものはどれか。
- A. システムが提供する機能(入出力・照会・ファイル数等)の量に基づいて開発規模を見積もる手法
- B. プログラムの実行速度のみを測定する手法
- C. ソースコードの行数のみを数える手法(LOC法と同一である)
- D. 開発者の人数のみに基づいて見積もる手法
正解: A. システムが提供する機能(入出力・照会・ファイル数等)の量に基づいて開発規模を見積もる手法 / ファンクションポイント法は、システムが提供する機能(入力・出力・照会・内部ファイル・外部インタフェースファイルの数等)の量に基づいて開発規模を数値化し、見積もりを行う手法であり、プログラミング言語に依存しない客観的な規模の指標として利用される(ソースコードの行数を数えるLOC法とは異なる手法である)。
問37. アジャイル開発の代表的な手法の1つ「スクラム」における「スプリント」の説明として最も適切なものはどれか。
- A. 1〜4週間程度の一定期間で区切られた開発サイクルの単位で、その期間内に計画・実装・レビューを行う
- B. プログラムのバグを修正する作業のみを指す用語
- C. 開発チームの人数を指す用語
- D. システムのハードウェア構成を指す用語
正解: A. 1〜4週間程度の一定期間で区切られた開発サイクルの単位で、その期間内に計画・実装・レビューを行う / スクラムにおける「スプリント」は、1〜4週間程度(多くは2週間)の一定期間で区切られた開発サイクルの単位であり、その期間内に計画(スプリントプランニング)・実装・レビュー(スプリントレビュー)・振り返り(レトロスペクティブ)を行う。
問38. 「コードレビュー」を実施する目的として最も適切なものはどれか。
- A. 他の開発者がコードを確認することで、バグの早期発見や設計・実装の改善点を見つけ、コード品質を高めること
- B. コードレビューは開発速度を必ず低下させるだけで意義がないため実施すべきではない
- C. 特定の開発者を批判するために実施する
- D. コードレビューを行うとテストが完全に不要になる
正解: A. 他の開発者がコードを確認することで、バグの早期発見や設計・実装の改善点を見つけ、コード品質を高めること / コードレビューは、コードの作成者以外の開発者がそのコードを確認することで、バグの早期発見、設計・実装上の改善点の指摘、コーディング規約の遵守確認等を行い、コード全体の品質を高めるとともに、チーム内での知識共有にも貢献する重要なプロセスである。
問39. 「CI(継続的インテグレーション)」の説明として最も適切なものはどれか。
- A. 開発者が加えたコードの変更を頻繁に共有リポジトリへ統合し、その都度自動でビルド・テストを実行する開発プラクティス
- B. システムのハードウェアを継続的に交換する作業
- C. 顧客への継続的な営業活動を指す用語
- D. テストを一切実施しない開発プラクティス
正解: A. 開発者が加えたコードの変更を頻繁に共有リポジトリへ統合し、その都度自動でビルド・テストを実行する開発プラクティス / CI(継続的インテグレーション)は、開発者が加えたコードの変更を頻繁に共有リポジトリへ統合(マージ)し、その都度自動でビルドやテストを実行することで、問題を早期に発見し、統合作業の負担を軽減する開発プラクティスである。CD(継続的デリバリー/デプロイ)と組み合わせて「CI/CD」として語られることが多い。
問40. 基本情報技術者試験のプログラミング・開発技術分野で求められる能力として最も適切なものはどれか。
- A. 特定の言語文法の暗記にとどまらず、オブジェクト指向・テスト技法・開発手法等の普遍的な概念を理解し実務に応用できる能力
- B. 特定のプログラミング言語の構文のみを暗記していればよいという能力
- C. テストや設計の概念を一切理解する必要がないという能力
- D. アジャイル開発かウォーターフォールモデルのどちらか一方のみを知っていればよいという能力
正解: A. 特定の言語文法の暗記にとどまらず、オブジェクト指向・テスト技法・開発手法等の普遍的な概念を理解し実務に応用できる能力 / 基本情報技術者試験のプログラミング・開発技術分野で求められるのは、特定の言語の文法暗記にとどまらず、オブジェクト指向の三大要素、各種テスト技法、開発手法(ウォーターフォール・アジャイル)等の普遍的な概念を理解し、実際のシステム開発の現場で応用できる実践的な能力である。