基本情報技術者 2014年 春期 午前(科目A) 問19
問題文
静的テストツールの機能に分類されるものはどれか。
選択肢
ア:ソースコードを解析して、プログラムの誤りを検出する。(正解)
イ:テスト対象モジュールに必要なドライバ又はスタブを生成する。
ウ:テストによって実行した経路から網羅度を算出する。
エ:プログラムの特定の経路をテストするためのデータを生成する。
🔒 解説は解答すると表示されます
静的解析ツールの機能【午前解説】
正解の理由
アは「ソースコードを解析して、プログラムの誤りを検出する。」とあり、これが静的テスト(静的解析)の本質です。静的テストツールはコンパイル前後にソースを解析して、文法エラー、型の不一致、未使用変数、潜在的なバグパターン(例:ヌル参照、リソースリーク)を検出します。実行を伴わないため、プログラムを走らせずにコードの品質や安全性をチェックする用途に適合します。
解法ステップ
- 問題文のキーワード「静的テストツール」を確認し、静的=実行しない解析であると認識します。
- 各選択肢を「実行を伴うか」「ソース解析か」「テストデータ生成か」で分類します。
- 実行を伴わない「ソース解析で誤りを検出」が静的解析の説明と一致することを確認して正解とします。
- 残りの選択肢は動的解析やテスト支援(スタブ生成、カバレッジ算出、テストデータ生成)に該当するため誤りと判断します。
選択肢別の誤答解説
- ア: 正解。静的解析はソースコードを解析して潜在的な欠陥やコーディング規約違反を検出します(例:lint、静的型チェック)。
- イ: 誤り。ドライバやスタブの生成はテスト支援ツールや自動テストフレームワークの機能で、テスト実行環境を準備するものであり静的解析ではありません。
- ウ: 誤り。網羅度(カバレッジ)を算出するにはテストを実行して実行経路を取得する必要があり、これは動的解析の作業です。
- エ: 誤り。特定の経路を通すテストデータを生成することはテストデータ生成ツール(自動テスト入力生成、制約解決器など)の役割で、実行を伴う分析やモデル化が必要です。
よくある誤解
- 静的解析で実行時のカバレッジや実行経路が得られると誤解しやすいですが、これらは実際にプログラムを動かす動的解析の領域です。
- テスト用ドライバやスタブの生成を静的解析ツールの機能だと思う人がいますが、自動生成はビルド支援やテスト支援ツールの機能で、静的解析とは別物です。
- 静的解析はすべてのバグを見つけられると考えるのは誤りで、実行時の振る舞いに依存する欠陥は検出できません。
補足コラム
静的解析ツールの代表例には lint 系ツール(C言語の cppcheck、Java の Checkstyle)、脆弱性検出やバグパターン検出を行う FindBugs/SpotBugs、Coverity、静的セキュリティ解析を行うツールなどがあります。静的解析は早期発見コストが低く、CI に組み込むことで品質を継続的に保てますが、実行時依存の欠陥(競合状態、環境依存のバグなど)は検出できないため、動的テストと併用するのがベストプラクティスです。
簡単な例:Python での静的解析
# pylint を使ってソースを解析し潜在的な問題を検出する
pylint my_module.py
動的解析で行うものの一例としては、カバレッジ計測(coverage.py)やテスト実行時にスタブ/モックを使った単体テストがあります。これらは実行を前提とするため静的解析とは明確に区別されます。
FAQ
Q1: 静的解析だけで十分なテストになるでしょうか?
A1: いいえ。静的解析は早期に一定の問題を検出できますが、実行時の振る舞いや統合時の問題は動的テストで確認する必要があります。
A1: いいえ。静的解析は早期に一定の問題を検出できますが、実行時の振る舞いや統合時の問題は動的テストで確認する必要があります。
Q2: スタブやドライバの自動生成ツールは存在しますか?
A2: はい。テスト自動化ツールやテストフレームワークによっては、インタフェースからスタブやテストダブルを自動生成する機能がありますが、これは静的解析の機能ではありません。
A2: はい。テスト自動化ツールやテストフレームワークによっては、インタフェースからスタブやテストダブルを自動生成する機能がありますが、これは静的解析の機能ではありません。
Q3: 静的解析でカバレッジ情報が取れることはありますか?
A3: 静的に理論上の経路や実行可能性を解析する研究はありますが、実用的な「カバレッジ(どの行が実行されたか)」は実行結果に基づくため動的解析で計測します。
A3: 静的に理論上の経路や実行可能性を解析する研究はありますが、実用的な「カバレッジ(どの行が実行されたか)」は実行結果に基づくため動的解析で計測します。
関連キーワード: 静的解析、動的解析、ソースコード解析、カバレッジ、テストデータ生成、スタブ生成、テスト自動化、コード品質、lint、セキュリティ解析

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

