モデル検査技術に基づくソフトウェア検証の概要

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