基本情報技術者 2011年 秋期 午前(科目A) 問23
問題文
静的テストツールの機能に分類されるものはどれか。
選択肢
ア:ソースコードを解析して、プログラムの誤りを検出する。(正解)
イ:テスト対象モジュールに必要なドライバ又はスタブを生成する。
ウ:テストによって実行した経路から網羅度を算出する。
エ:プログラムの特定の経路をテストするためのデータを生成する。
静的テストツールの機能に分類されるものはどれか。 【午前2 解説】
要点まとめ
- 結論→静的テストツールはプログラムを実行せずにソースコードや仕様を解析して潜在的欠陥や規約違反を検出するツールです。
- 根拠→「静的」は実行を伴わない解析を意味し、構文・データフロー・型・コーディング規約違反を検出する手法が該当します。
- 差がつくポイント→動的テスト(実行して観測する)との違いを押さえ、カバレッジや実行パス生成は動的側の機能と覚えると有利です。
正解の理由
正解は ア です。静的テストツールはソースコードを解析して実行せずに誤りや潜在的脆弱性、コーディング規約違反を指摘します。よくある静的解析器(lint、静的解析器、フォーマル検証ツールなど)はコードの構文、型・データフロー、未使用変数、NULL参照の可能性などを検出するため、選択肢アの記述が該当します。
よくある誤解
- 静的解析で「テストデータを生成する」や「カバレッジを算出する」と考える誤り:これらは通常プログラムの実行が前提のため動的テストの領域です。
- シンボリック実行など一部技術を静的と混同する誤解:高度な静的解析は入力候補を示唆することがあるが、設問では「テストデータ生成」は動的アプローチとして扱います。
- 「ドライバやスタブの生成=静的ツールの機能」と誤認する点:これはテスト実行環境を作る工程であり、静的解析の本質とは異なります。
解法ステップ
- 問題文のキーワード「静的」を確認し、「実行しない解析」を意味することを思い出す。
- 各選択肢を「実行を伴うか否か」で分類する(実行を伴えば動的)。
- 実行不要でコードを解析して問題を検出するものを正答とする。
- 試験では細部の用語(ドライバ/スタブ/網羅度/データ生成)の意味を正確に理解して切り分ける。
選択肢別の誤答解説
- ア: ソースコードを解析して、プログラムの誤りを検出する。→ 正解。実行を伴わない静的解析の典型的説明です。
- イ: テスト対象モジュールに必要なドライバ又はスタブを生成する。→ 誤り。これはテストハーネスや単体テスト環境の準備であり、テスト実行支援の範疇で静的解析とは区別されます。
- ウ: テストによって実行した経路から網羅度を算出する。→ 誤り。網羅度(カバレッジ)は実行結果に基づく評価で、動的テスト(実行)で求められます。
- エ: プログラムの特定の経路をテストするためのデータを生成する。→ 誤り(※注)。一般的にテストデータ生成は実行・シミュレーションや制約解法を用いる動的/準動的手法に属します。シンボリック実行など例外的に静的に近い手法で入力候補を生成する技術もありますが、午前問題の文脈では動的側と判断します。
補足コラム
代表的な静的解析ツールには ESLint(JavaScript)、Pylint(Python)、SpotBugs/FindBugs(Java)、Clang Static Analyzer、Coverity などがあります。静的解析はコンパイル時やCIパイプラインでの自動化に適しており、早期の品質改善やセキュリティ脆弱性の検出に有効です。ただし、実行時の環境依存バグやメモリ使用時の不具合は動的テストで確認する必要があります。
FAQ
Q1: 静的解析だけでバグは全部見つかりますか?
A1: いいえ。静的解析は早期に多くの欠陥を発見しますが、実行時の振る舞いや環境依存の不具合は動的テストでしか検出できません。両者は補完関係です。
A1: いいえ。静的解析は早期に多くの欠陥を発見しますが、実行時の振る舞いや環境依存の不具合は動的テストでしか検出できません。両者は補完関係です。
Q2: シンボリック実行は静的ツールですか?
A2: シンボリック実行はコードを解析してパス制約を解く手法であり、静的解析的な側面を持ちますが、実用上は特殊な解析であり「テストデータ生成」に直接対応する技術として位置づけられるため、問題文の文脈では分けて考えるのが安全です。
A2: シンボリック実行はコードを解析してパス制約を解く手法であり、静的解析的な側面を持ちますが、実用上は特殊な解析であり「テストデータ生成」に直接対応する技術として位置づけられるため、問題文の文脈では分けて考えるのが安全です。
Q3: カバレッジ測定はどの場面で使うべきですか?
A3: 単体テストや結合テストの効果を評価するために、テスト実行後に網羅度を算出してテスト不足の箇所を特定する際に使います。これは動的評価です。
A3: 単体テストや結合テストの効果を評価するために、テスト実行後に網羅度を算出してテスト不足の箇所を特定する際に使います。これは動的評価です。
関連キーワード: 静的解析、静的テスト、ソースコード解析、Lint、コード品質、セキュリティ診断、単体テスト、テストハーネス、スタブ、ドライバ、カバレッジ、シンボリック実行、テスト自動化

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

