SIGSE-RE-WG (2004.7.15) 内容 モデル検査技術に基づくソフトウェア検証の概要 モデル検査技術の概要 事例の紹介 おわりに 国立情報学研究所 科学技術振興機構さきがけ 中島 震 応用のサーベイ SPINの概要 モデル検査の概要 はじめに システムの信頼性を高める技術 テスト技術 ⌧最終生成物(プログラム)が対象 ⌧網羅性に問題:テストケース 形式手法、形式検証技術 ⌧デザインが対象 → 開発上流工程での信頼性向上 ⌧テスト技術より良い網羅性 本発表の立場 ○:モデル検査技術の概要、使い方の事例 ×:モデル検査技術の理論的な側面、モデル検査ツールの仕組み 形式検証技術の現状 検証技術の発展 演繹手法 … 対話的な証明のガイドが必要 → 実用化の障壁 モデル検査手法 … 自動化が可能 → 適用可能性が大、注目技術 ⌧不具合がある場合、反例が求まる → 修正の参考情報として有益 現状 モデル検査ツールが実用化へ SMV、SPIN、LTSA、CWB、FDR、SAL/PVS 等 通信プロトコル、分散アルゴリズム、ソフトウエア・アーキテクチャを 対象とするモデル検査検証の成功事例が蓄積 「形式検証」は高度な差別化技術 → 内製化の要求 ⌧検証ツールに不具合があったら … !? 参考資料 (中島によるチュートリアル・解説など): 〔1〕 日本ソフトウェア科学会DSW’04、(2004年2月) 〔2〕 コンピュータソフトウェア、(2004年3月) 〔3〕 情報処理、(2004年7月) 形式検証技術への期待 形式検証技術 昔: 誤りがないことを示す技術 今: 誤りを早期に発見する技術 → 開発上流工程 実用性 形式検証は仕様作成コストが高い ⌧厳密な「仕様」 高安全性システムで実績 ⌧原子力発電所の制御、航空管制、汎用CPU、自動運行制御、等 今後の可能性 ⌧大量販売、大量消費 ⌧もし、不良があると、リコールや和解金により、企業の存亡に関る 自動検証の方法の例 (1) 例題 PとQが2つの資源を同時利用、両方が同時に必要 資源獲得の順序によっては デッドロック 例: P -> Printer, Q -> Scanner, P -> Scanner 解析のための抽象化 資源アクセスをイベントとするイベント系列 P Printer Q Scanner 細かい改善技法や現実問題への対応といったノウハウが大切 ⌧経験しないとわからない … !! 1 自動検証の方法の例 (2) 自動検証の方法の例 (3) pr.get sc.get sc.put pr.put 仕様の記述例 P Printer Q Scanner イベントの送受に着目した抽象化 P Q pr.get sc.get copy sc.get pr.put pr.get copy pr.put sc.put sc.put システム記述 chan pr = [SYNCH] of { short }; chan sc = [SYNCH] of { short }; p.pr.get p.pr.get proctype P () { endLoop: do :: pr!GET; sc!GET -> copy -> pr!PUT; sc!PUT od } proctype Q () { endLoop: do :: sc!GET; pr!GET -> copy -> pr!PUT; sc!PUT od } デッドロック!! q.sc.get q.sc.get proctype Printer () { endLoop: do :: pr?GET -> pr?PUT od } q.sc.put proctype Scanner () { endLoop: do :: sc?GET -> sc?PUT od } 自動検証の方法の例 (4) p.sc.get p.sc.put おおまかな流れ 1980 1990 2000 不具合に至るシナリオ 初期状態から始まりデッドロックに至る最短のイベント系列 p.pr.get q.sc.get 前史 問題の定式化 ツール技術の発展 通信プロトコル検証 q.sc.get p.pr.get ハードウェア検証 命題時相論理 (Pnueli, Manna, …) EMC(Clarke) → SMV(McMillan) → NuSMV, CadenceSMV PAN → SPIN → … COSPAIN ⌧有限状態モデル (LTS)の内部表現に変換 ステップ3: 状態空間の網羅的な探索 ⌧予め決められた「観点」からのチェック:デッドロック、無限ループ、等 モデル検査技法 → SPIN4.0 Bandera(KSU) JPF (NASA) CSP CCS SLAM(MS) 電子レンジの例 1 歴史的には Start oven S:状態の集合 R:遷移関係 L:S → 2AP 関連する技術 オートマトンの受理言語の包含関係判定 他の関係(プロセス代数の観測等価、等)の判定 最近は 有限の状態遷移系を対象とする網羅的な探索技法 2 Start ~Close ~Heat Error Open door 5 Open door Open door 3 Close door reset Start Close ~Heat Error AG(Start -> AF Heat) ~Start ~Close ~Heat ~Error 時相論理 (CTL) の式 f を満たす状態を求める問題 Kripke構造 M = (S, R, L) 有界モデル検査 LTLとオートマトン ステップ1: 解析のための抽象化 ステップ2: 対象システムの作成 { s ∈ S | M, s |= f } プログラム検証 CTL* CTL記号モデル検査・BDD ペトリネット可達木 要するに μcalculus 実用ツール SWデザイン検証 6 Close door ~Start Close ~Heat ~Error cook 4 done Start oven Start Close ~Heat ~Error ~Start Close Heat ~Error Start cooking 7 warmup Start Close Heat ~Error 2 G. Holzmann The SPIN Model Checker, Addison Wesley 2004. McMillan Symbolic Model Checking, 1993 モデル検査ツール:SMV モデル検査ツール:SPIN SMV 対象モデルの記述 CMUで開発・公開、もともとハードウエア検証が目的 ASSIGN init(state0) := noncritical next(state0) := case (state0 = noncritical) : trying, noncritical; (state0 = trying) & (state1 = noncritical) : critical; (state0 = trying) & (state1 = trying) & (turn = turn0) : critical; (state0 = critical) : critical, noncritical; 1 : state0; esac LTL式 言語:Promela チャネル通信オートマトン 状態遷移マシンによる システム記述 自動 生成 性質記述 性質オートマトン LTL (線形時相論理) 式 CTLによる性質記述 対象モデル 性質オートマトン ツール機能 シミュレーション実行 モデル検査 SPEC EF((s0 = critical) & (s1 = critical)) SPEC AG ((s0 = trying) -> AF(s0 = critical)) ⌧状態空間の網羅的な探索 SPIN/pan M, s |= f L(A) SPINの基礎 SPINの時相論理 L(S) not L(S) Σω (σ, j ) p 命題pが状態jで成り立つ Buchi オートマトン σ = (s0, s1, s2, ...) 無限長の語を扱う有限状態オートマトン システムならびに検証性質の双方を同じ枠組みで表現 [] p 仕様 j k > j, (σ, k ) (σ, j ) p k <> p L(A) ∩ (not L(S)) = ∅ 積オートマトンの空判定 k > j, (σ, k ) p p strong until (σ, j ) 満たしてはならない性質 (not S … bad behavior) A L( A * (not S) ) = ∅ k> 仕様記述言語 Promela k p U q E never-claim 「空」でない場合、その要素が反例 k > j, (σ, k ) q (σ, i ) p i > j, q p Promelaの雰囲気:みかけ (初期データ) チャネル通信オートマトン in large split 非同期通信 (同期通信も可能) 一方向、名前つき、データ型つき merge small 通信チャネル (受信)プロセス (送信)プロセス (送信)プロセス p eventually L(A) ⊆ L(S) E システム 受理言語の包含関係 (σ, j ) A 検証とは 状態の列 always C言語に似た構文 通信式の構文はCSPに準じる proctype split () { short cargo; do :: in?cargo -> if :: (cargo >= N) -> large!cargo :: (cargo < N) -> small!cargo fi init { od run split(); run merge(); } in!13; in!10; in!18; in!15; in!20 } chan in = [SIZE] of { short }; chan large = [SIZE] of { short }; chan small = [SIZE] of { short }; proctype merge () { short cargo; do :: if :: large?cargo :: small?cargo fi; in!cargo od } 3 内容 ソフトウェア検証:2つの見方 “Classic” Model-Checking ⇒ デザイン検証 モデル検査技術の概要 事例の紹介 おわりに デザイン 検証モデル モデリング・抽象化 プログラム (人手)詳細化・具体化 モデルチェッカ “Modern” Model-Checking ⇒ プログラム検証 プログラム 検証モデル 自動抽出 モデルチェッカ デザイン検証への応用事例 1990 スライシング 抽象解釈、など 具体的な適用事例 2000 EJBコンポーネント基盤の振舞い検証 開発上流工程 航空管制の要求仕様(RSML) UML statechartsサブセット 自動運行制御(SCR) ADL(Wright) 2004ICSE受賞 EJB基盤の振舞い検証 Andrewファイルシステムのキャッシュプロトコル 分散基盤・分散システム CS型システムの攻撃 セキュリティ・耐故障性 公開鍵交換プロトコル Needham-Schroeder, Otway-Ress サバイバビリティ解析 S.Nakajima and T.Tamai : Behavioural Analysis of the Enterprise JavaBeans Component Architecture, Proc. SPIN2001, pp.163-182 (2001). 中島、玉井: EJBコンポーネントアーキテクチャのSPINによる振舞い解析、コンピュータソフ トウェア、Vol.19, No.2, pp.2-18 (2002). 本事例を紹介する目的 既存の仕様書からSPINを用いた検証方法の手順 形式仕様ならびに検証の過程から得る知見 BPEL情報フロー Webサービスフロー ワークフロー・Webサービス WSFL, BPEL 業務フロー ワークフロースキーマ コンポーネント基盤の振舞い仕様検証 EJBコンポーネントフレームワークの検証 コンポーネント技術 EJB (Enterprise JavaBeansTM): 分散サーバのコンポーネント基盤 仕様書が規定する振舞い(メソッド起動系列)を形式化し自動検証 クライアント要求と実行時サービスが干渉しないことが正しさの基準 → 曖昧さや場合分けの漏れがあることを発見 Client Home Remote Container Naming Server (JNDI) EJB Server 干渉!? Beans 研究の背景 狙い:分散アプリケーション、オブジェクト指向再利用 核技術:コンポーネントモデル、統合フレームワーク基盤 具体例:COM+、EJB、OMG CORBA Component、… ドキュメント インフォーマル:自然言語、ダイアグラム 問題点:曖昧さ、矛盾、誤り、等 形式検証への期待と適用例 Beans 仕様の厳密な表現、自動検証による不具合の発見 Sullivan&Jackson (COM, Z/Alloy), Sousa&Garlan (EJB, Wright・CSP) Runtime Services 4 検証のメソッド EnterpriseBean 構造的な側面 複数の観点からの インフォーマルな記述 EntityBean Entity Beans EJB1.1仕様書 永続データを表現 安全性解析 複数の観点を統合 したシステム記述 特定の観点から 見た性質記述 システムモデル (Promela記述) Home EJBHome ejbActivate ejbLoad ejbPassivate ejbStore ejbRemove ... Remote remove ... EJBObject remove ... 個別の性質 (LTL式) <X>Bean ejbCreate ejbFind <BM> ... create find 進行性解析 <X> <BM> Client Entity Bean Instance Entity Beans のライフサイクル 振舞いの側面 exception does not exist 状態遷移ダイアグラム Entity Beansのライフサイクルを明示 newInstance()/ setEntityContext(sc) オブジェクト相互作用ダイアグラム 参加オブジェクトを明示したシナリオ 自然言語 Java APIの説明 時間的な制約条件 callback implements <X>Home システム+性質 (Promela記述) 実行時サ ービスが 起動する ejbActivate ejbLoad+ Business method The Container invokes at least one ejbLoad between ejbActivate and the first business method in the instance unsetEntityContext() ejbFind<XXX>() pooled ejbCreate(args)/ ejbActivate() ejbPostCreate(args) ejbRemove() ejbPassivate() ready ejbStore() ejbLoad() BM 関連シナリオ 振舞い性質 BM 起動 と Passivation サービス スワップアウトされたEntity BeanにBM起動 Invoking BM (usually) Client EJBObject BM Bean (ready) BM Invoking BM (after Passivation) Client EJBObject Container ejbStore() Bean DB Swap Area (1) BM_Req Entity Bean (3) ejbLoad Entity Bean (pooled) BM Swap Out (Passivation) Bean Client-1 ejbActivate() DB read from DB DB Main Memory (2) ejbActivate (4) BM_Exec ejbLoad() Update DB ejbPassivate() (pooled) BM (ready) [] (Swapped && BM_Req -> <>ejbActivate) [] (ejbActivate && <>BM_Exec -> (!BM_Exec U ejbLoad)) 5 Promela プロセス構成 検証した性質 ドキュメント化されている時間的な制約 Start Up The Container invokes at least one ejbLoad between ejbActivate and the first business method in the instance EJB Server Client The Container invokes at least one ejbStore between the last business method on the instance and ejbPassivate EJB Home Business Method EJB Object True (satisfied) Container Delegation 進行性 (leads to) Business Method, Swap Out, ... [] (M_Client -> <>M_Bean) Bean Instance 進行性 (1) Entity Beans のライフサイクル create [] (create -> <>ejbCreate) exception does not exist True newInstance()/ setEntityContext(sc) ejbCreate is followed by ejbPostCreate unsetEntityContext() ejbFind<XXX>() pooled [] (create -> <>(ejbCreate && <>ejbPostCreate)) ejbRemove() ejbCreate(args)/ ejbActivate() ejbPostCreate(args) False ejbCreateが例外を発生する場合がある ejbPassivate() ready ejbStore() ejbLoad() BM 進行性 (2) 関連シナリオ BM 起動 と Passivation サービス Business Method [] (BM_Req -> <>BM_Exec) Invoking BM (usually) False Client Beanが pooled 状態の場合、複数メソッドが起動さ れる可能性がある (ejbActivate, ejbLoad) EJBObject BM Bean (ready) BM Swap Out (Passivation) ! (<>(BM_Req && <>BM_Exec)) Client EJBObject True Container ejbStore() Bean Bean DB (pooled) BM さらに、ejbActivateが例外を発生する場合がある [] (BM_Req -> <>(BM_Exec || Exception)) Invoking BM (after Passivation) ejbActivate() read from DB DB ejbLoad() Update DB False トレースは予想通りのメソッド起動系列を示す ejbPassivate() BM (ready) (pooled) 6 進行性 (3) Entity Beans のライフサイクル remove exception does not exist [] (remove -> <>ejbRemove) False ejbLoad と ejbStoreがライブロック(無限ループ) 弱い公平性の下で解析 newInstance()/ setEntityContext(sc) ejbFind<XXX>() pooled False ejbRemove と ejbPassivate が干渉 unsetEntityContext() ejbCreate(args)/ ejbActivate() ejbPostCreate(args) Bean は ejbPassivateによって pooled 状態へ遷移 (実行時サービスが非同期に実行) EJB1.1 仕様書の不具合 検証作業の実際 ready ejbStore() BM 検証のメソッド(再考) 複数の観点からの インフォーマルな記述 EJB1.1仕様書 目的:整合性のある Promela 仕様記述 曖昧さの除去、システム記述の洗練 Promela 記述の デバッグ 簡単な性質の検証 (例: 例外発生を考慮しない場合) 不具合の可能性を発見 (例: remove と ejbPassivate) ライブロック 個所は構築の際の自由度に相当 ejbPassivate() ejbLoad() 形式化フェーズ 検証フェーズ ejbRemove() 安全性解析 複数の観点を統合 したシステム記述 システムモデル (Promela記述) 特定の観点から 見た性質記述 個別の性質 (LTL式) 検証過程 = 試行錯誤を必要とする繰り返し過程 システム記述の洗練、性質記述の洗練 内容 モデル検査技術の概要 事例の紹介 おわりに システム+性質 (Promela記述) 形式化過程での課題 進行性解析 •追跡性 •有限性への抽象化 おわりに 形式検証技術の適用経験から 検証可能な規模の問題 → 計算機・検証アルゴリズムの進歩 検証対象のモデル化・抽象化が鍵 → 難しい モデリング 成り立つべき性質の網羅性・完全性 → これも難しい 高まる重要性 が課題 ソフトウエアの広がり → 従来にない本質的な難しさ ⌧分散、並行・並列、通信特性、ノンストップ、オープンさ、動的改変、等 ⌧基盤ミドルウエア のみでは対応不可能 開発上流工程でのデザイン検証による信頼性向上 今後 プログラム検証の重要性が増す? 7 ソフトウェア検証:2つの見方 プログラム検証ツール 1995 “Classic” Model-Checking ⇒ デザイン検証 2000 VeriSoft (Bell研、C/UNIX、デッドロック解析・表明チェック、抽象化しない!) デザイン 検証モデル モデリング・抽象化 プログラム (人手)詳細化・具体化 FeaVer (Bell研、C交換機、デッドロック解析、構文変換・対話型) Bandera (KSU、Java、デッドロック解析・表明チェック、スライシング) モデルチェッカ JPF (NASA、Java、表明チェック、いろいろやっているらしい) “Modern” Model-Checking ⇒ プログラム検証 検証モデル SLAM (MS、Cデバイスドライバ、表明チェック、述語抽象) プログラム BLAST (UCB、Cデバイスドライバ、監視FA、述語抽象・繰り返し) 自動抽出 モデルチェッカ スライシング 抽象解釈、など MAGIC (CMU、Cドライバ、監視FA・有界モデル検査、述語抽象・繰り返し) ツール名称(機関、対象言語、解析の種類、抽象化技法) 情報源 教科書 Clarke, Grumberg, and Peled : Model Checking, The MIT Press 1999. Holzman : The SPIN Model Checker, Addison Wesley 2004. Magee and Kramer : Concurrency, Wiley 1999. 代表的な国際学会 IEEE/ACM ICSE ACM SIGSOFT FSE FME フォーマルメソッド関連研究ホームページのURL http://www.afm.sbu.ac.uk/ おわりです 8
© Copyright 2024 Paperzz