research

深さ優先ヒューリスティック探索によるソフトウェアモデル検査効率化

Abstract

モデル検査技術は,対象とするモデルが取りうる全状態を網羅的に探索し,モデルが満たすべき性質への適合を調べることで,モデルの正しさを検証する技術である.近年では,実装コードそのものを扱うソフトウェアモデル検査技術が注目されている.本論文で扱うJava PathFinder (JPF) は,Java プログラムを対象としたモデル検査器であり,プログラム中の不具合の検出や,プログラムの正しさの検証に利用することができる.ソフトウェアモデル検査技術は,テスト工程における不具合検出に有効である.通常のテストは,想定される様々な入力や環境パラメータに対してプログラムを動作させることで,不具合を洗い出す.しかしながらテストにおいては,非決定的にプログラムが実行される部分があり,必ずしも不具合が発生する状況を再現することができない.例えば,並行プログラムにおいて,複数のスレッドが特定の順序で実行された場合に発生する不具合は,その再現がスレッドの実行順序という非決定要因に依存するため,テストおいて再現できない場合が発生する.これに対して,ソフトウェアモデル検査では,そのような非決定的要因について,全ての選択肢を試行することで,取りうる全てのプログラム状態を再現することで,不具合の発見漏れを防ぐことが可能となる.しかし,モデル検査技術は,モデルの取りうる状態を全て探索するため,モデルの規模に応じて,探索すべき状態数が指数的に増加し,現実的な時間で検証が終了しないという状態爆発への対応が課題となる.とくにソフトウェアモデル検査では,プログラムという抽象度の低いモデルを対象とするため,この状態爆発の問題が顕著である.そこで,この課題を解決する手法として優先度に基づくヒューリスティック探索手法が提案されている.ヒューリスティック探索では,各探索状態について,その先に不具合の含まれる見込みが高いと思われる状態から優先的に探索を進めることによって,不具合の発見を早期化することを目的としている.本研究の対象とするJPF においても探索アルゴリズムとして選択可能である.しかし,従来のヒューリスティック探索には二つ課題があった.一つは,優先度を算出するためのヒューリスティックを適切に選択しないと,優先度が均一となり,横方向に広く探索を行うことになり,探索空間の深いところに到達しづらいという点である.もう一つは,活性等の検証に用いるLinear Temporal Logic (LTL) 検証の実装に適さないという点である.LTL 検証に広く活用されているアルゴリズムは,深さ優先探索をベースとしたものである.これに対して,ヒューリスティック探索は,探索空間中を任意の順序で探索するため,深さ優先ベースのLTL 検証と組み合わせることが困難である.そこで本研究では,従来手法と異なる考え方に基づくヒューリスティック探索手法を提案する.従来手法は,各状態に対して,その先,不具合に至る可能性の高さを見積もり,探索順序を決定する「優先順序付け」探索である.これに対して提案手法は,優先度付けは行わず,探索順序は深さ優先のままとし,その代わりに,不具合に至る見込みが低いと判断した場合に,その先の枝の探索を打ち切る「枝刈り」探索である.提案手法をDepth First Heuristic Search (DFHS) と呼ぶ.従来手法の優先度の算出および,DFHS の枝刈りの判定は,いずれも各状態におけるヒューリスティックによって決定する.例えば,実行パスにおける各スレッドのインターリーブの状態が代表的な指標である.さらにDFHS では,探索順序は深さ優先ではあるものの,各状態から遷移可能な枝が複数存在する場合に,その状態からどの枝に遷移するかについてのみ順序制御可能とする.このときの指標も,例えばできるだけインターリーブが発生するような枝を先に選ぶ,といった観点で指定する.枝刈りのヒューリスティックと組み合わせることで,複合的な効果が期待できる.従来手法とDFHS は,ある意味でコインの両面であり,どちらの方式が有利であるか(あるいはどちらも有効でないか) は,探索空間における不具合状態の分布によって異なると考えられるため,従来手法が苦手としていた探索空間で,DFHS が有効にはたらく可能性がある.本研究では,JPF の機能拡張機構を活用してDFHS を実装し,手法の検証を行った.DFHS は,深さ優先探索を基本としているため,LTL 検証アルゴリズムにも適用可能である.そこで本研究では,LTL 検証についてもDFHS の適用を行った.JPF はアサーションの確認,未捕捉例外の発生,デッドロックなどの安全性の検証を主眼としており,標準では活性の検証をサポートしていない.そこで,活性等の検証を可能とするために,LTL 検証のための探索エンジンを実装した.LTL 検証は,対象とするプログラムが,LTL 式で表された活性等の性質を満たすかどうかを検証する.LTL 式をBAijchi オートマトンに変換したものと,プログラムの状態空間を掛け合わせた同期積に対して探索を実施するため,安全性検証よりもさらに大きな状態空間の探索となる.LTL 検証についても,DFHS の効果が大きく働くと期待できる.さらに,LTL 検証で重要となる公平性の考慮についてDFHS を拡張した.LTL 式としては公平性条件を記述せず,反例の公平性充足を確認する手法により,さらなる改善を図った.拡張したJPF を用いて検証ツール評価用テストプログラムによるDFHS の評価実験を行った.実験の結果,安全性検証,LTL 検証ともに,既存手法よりも多くのケースでDFHS が早期に不具合を発見できることを示し,DFHS による効率化が実現できる可能性が十分に高いことを実証した.本研究による貢献は,(1) 安全性検証について新しいヒューリスティック探索手法を確立し,ヒューリスティック探索適用の幅を広げたこと,(2) 従来不可能であったLTL 検証に対してヒューリスティック探索を実現したこと,(3) 提案手法を実用のツールとして実装したこと,の三点である.電気通信大学201

    Similar works