メインコンテンツへ
ソフトウェア

モデル検査(Model Checking)の説明として正しいものはどれか。

ア.テストケースを大量に実行して統計的にバグ数を推定する手法であり、仕様の網羅的検証は行わない。
イ.システムの有限状態モデルを構築し、時相論理式で表現した性質を状態空間の網羅的探索によって自動検証する手法である。正解
ウ.ソースコードのスタイル(インデント・命名規約)を自動チェックするlintツールの総称である。
エ.モデル検査はハードウェア設計にのみ適用可能で、ソフトウェアには使えない。

解説

モデル検査は「ゲームのすべてのルートを機械に探索させて、どこかでバグが起きないか確かめる」手法。人間が見落とすコーナーケースも、機械的全探索なら逃がさない。

なぜ イ が正解か

イが正解。モデル検査(Model Checking)は①システムを有限状態機械(FSM)としてモデル化②「デッドロックが起きない」「特定の状態に必ず到達する」等の性質をCTL・LTL等の時相論理式で記述③状態空間を網羅的に探索して性質が成立するか自動検証する手法。SPIN、NuSMV、UPPAAL等のツールが有名。

なぜ ア は間違いか

大量テストによる統計的推定はバグ密度推定(信頼度成長曲線等)の話。モデル検査は「網羅的」が本質であり確率的アプローチとは異なる。

なぜ ウ は間違いか

lintはコードスタイルチェックツール。モデル検査は仕様レベルの論理的性質検証。階層がまったく異なる。

なぜ エ は間違いか

モデル検査はソフトウェア(プロトコル検証・並行プログラム・安全クリティカルシステム)に広く使われる。Intelのプロセッサ設計バグ検出が有名事例だがSW用途が主流。

出典: AI生成問題(学習用)