基本情報技術者 2016年 春期 午前(科目A) 問21
問題文
静的テストツールの機能に分類されるものはどれか。
選択肢
ア:ソースコードを解析して、プログラムの誤りを検出する。(正解)
イ:テスト対象モジュールに必要なドライバ又はスタブを生成する。
ウ:テストによって実行した経路から網羅度を算出する。
エ:プログラムの特定の経路をテストするためのデータを生成する。
🔒 解説は解答すると表示されます
静的コード解析【午前解説】
正解の理由
正解: ア
選択肢ア「ソースコードを解析して、プログラムの誤りを検出する。」は、ソースコードを実行せずにコード構造や文法、定義の不整合、セキュリティ上の問題などを検出する静的解析ツール(lint、静的セキュリティスキャナ等)の典型的な機能に該当します。静的テストツールは実行を伴わずプログラムを解析する点で定義され、選択肢アはこの定義に一致します。
選択肢ア「ソースコードを解析して、プログラムの誤りを検出する。」は、ソースコードを実行せずにコード構造や文法、定義の不整合、セキュリティ上の問題などを検出する静的解析ツール(lint、静的セキュリティスキャナ等)の典型的な機能に該当します。静的テストツールは実行を伴わずプログラムを解析する点で定義され、選択肢アはこの定義に一致します。
解法ステップ
- 問題文の「静的テストツール」の定義を確認する(実行せずに解析するツール)。
- 各選択肢の動詞に注目する(「解析して」=静的、「生成する/実行した経路から算出」=動的)。
- 静的解析の代表的な作業(文法チェック、型チェック、デッドコード検出、セキュリティルール検査)と照らし合わせ、一致するものを選ぶ。
選択肢別の誤答解説
- ア: ソースコードを解析して、プログラムの誤りを検出する。
正解。静的解析ツールの代表的機能であり、実行を伴わずコードを解析して問題点を報告します。 - イ: テスト対象モジュールに必要なドライバ又はスタブを生成する。
誤り。ドライバ/スタブ生成はテスト環境(ハーネス)構築で、主に動的テストの実行支援に属します。 - ウ: テストによって実行した経路から網羅度を算出する。
誤り。網羅度(カバレッジ)は実際にテストを実行して得られる実行情報に基づくため、動的解析/計測です。 - エ: プログラムの特定の経路をテストするためのデータを生成する。
誤り。テストデータ生成は通常、動的実行や動的解析を前提とすることが多く、問題文の静的ツール定義とは区別されます(シンボリック実行など静的技法もあるが、本問の意図は動的データ生成を指します)。
よくある誤解
- シンボリック実行や形式手法で「テストデータを生成できるから静的だ」と誤解するケース。これらは静的解析的手法を含みますが、問題文の意図する「テストの実行・検証に使うデータ生成」とは区別されます。
- カバレッジに関して「ソースから算出できるので静的だ」と混同するケース。実際の網羅度算出は実行結果(経路の実行情報)に基づくため動的手法です。
- ドライバやスタブの自動生成を静的ツールの機能と考える誤り。これはテストハーネス作成であり、動的テスト支援の一部です。
補足コラム
静的解析ツールの例としては lint 系(ESLint、pylint)、静的セキュリティ解析(SpotBugs、Coverity、SonarQube)などが挙げられます。利点は早期発見(ビルド前に検出可能)、自動化の容易さ、一貫したコーディングスタイル維持です。一方で誤検出(false positive)や実行時の振る舞いに依存するバグ(タイミング、状態依存)を検出できないという限界もあります。現代のテストでは静的解析と動的テストを組み合わせるハイブリッド運用が一般的です。
FAQ
Q1: 静的解析だけで十分なことはありますか?
A1: 一部のコード品質やスタイル、明白なバグは静的解析で十分検出できますが、ランタイムの依存や実行経路に依るバグは動的テストが不可欠です。両者の併用が推奨されます。
A1: 一部のコード品質やスタイル、明白なバグは静的解析で十分検出できますが、ランタイムの依存や実行経路に依るバグは動的テストが不可欠です。両者の併用が推奨されます。
Q2: シンボリック実行は静的ツールですか?
A2: シンボリック実行はソースや中間表現を解析して入力条件を導出する静的要素を持ちますが、実用ではハイブリッド的に扱われ、問題文の「テストデータ生成」は一般に動的寄りの項目とみなされます。
A2: シンボリック実行はソースや中間表現を解析して入力条件を導出する静的要素を持ちますが、実用ではハイブリッド的に扱われ、問題文の「テストデータ生成」は一般に動的寄りの項目とみなされます。
Q3: 静的解析でカバレッジは測れますか?
A3: 実行ベースのカバレッジ測定は動的ですが、静的に関数呼び出し関係や到達可能性を解析して「潜在的な網羅性」を評価する手法はあります。しかし試験問題では「実行して得た経路から算出する」=動的と区別されます。
A3: 実行ベースのカバレッジ測定は動的ですが、静的に関数呼び出し関係や到達可能性を解析して「潜在的な網羅性」を評価する手法はあります。しかし試験問題では「実行して得た経路から算出する」=動的と区別されます。
関連キーワード: 静的テスト、静的解析ツール、ソースコード解析、スタティックコード分析、静的検証、動的テスト、カバレッジ測定、ドライバ生成、スタブ生成、テストデータ生成、シンボリック実行、Lint、SonarQube、Coverity, ESLint

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

