alloy analyzer lt
DESCRIPTION
Alloy Analyzerの紹介TRANSCRIPT
ALLOY ANALYZERA LIGHTWEIGHT FORMAL METHOD
2011 年 11 月 5 日有限会社 IT プランニング小笠原 啓 (@osiire)
Alloy Analyzer とは 200X 年、 MIT の Daniel Jackson 教授率いる
チームが極秘裏に開発した仕様記述・検証ツール。 URL : http://alloy.mit.edu/alloy4/ ネットの噂によると、通常では発見が難しいキラバグ
を見つけるために作成されたらしい。 集合と関係を基礎とした一階の論理体系を持つ有
界モデル発見器。 シンプルな仕様記述が可能な上に全自動解析。他の仕
様記述ツールにはない圧倒的なお手軽感。 有界な領域でも仕様は十分検証できる(小スコープ仮
説)。
Alloy Analyzer(Ver4.2RC)外観 Alloy コードエディタ
インスタンス
Alloy でレイトン教授を超える頭脳を手に入れる
5頭の牛がいる。うち2頭は本当の事しか言わないトンホー種。3頭はウソしか言わないソーウ種だという。さて、次の会話からウソつき牛に × 印をつけてほしい。 A 「 D はソーウ種だね」 B 「 C はトンホー種じゃないよ」 C 「 A はソーウ種じゃない」 D 「 E はソーウ種です」 E 「 B はトンホー種じゃないぞ」
enum Cow { A, B, C, D, E } // A,B,C,D,E という牛がいるsig Liar in Cow {} { #Liar = 3 } // 3 匹がソーウ種run {
not A in Liar iff D in Liar //A 「 D はソーウ種だね」 not B in Liar iff C in Liar //B 「 C はトンホー種じゃないよ」 not C in Liar iff not A in Liar //C 「 A はソーウ種じゃない」 not D in Liar iff E in Liar //D 「 E はソーウ種です」 not E in Liar iff B in Liar //E 「 B はトンホー種じゃないぞ」 }
Alloy による仕様記述
Alloy Analyzer を開発の仕事に活かす
3つのプラクティス
1. ERD の代わりに使おう
open util/relation // 関係ライブラリの利用sig Company, Person {} // 法人と人one sig Employ { // 雇用 employee : Company lone -> set Person // 1 対 n の関係}
one sig Business { // 提携 alliance : Company set -> set Company // n 対 n の関係} {
~alliance in alliance // 提携は相互的 no alliance & iden // 自分自身と提携しない}
2.独立性の高い仕様を狙い打とう
通信プロトコルの記述と検証 障害リカバリーはできている?
権限の仕様と検証 セキュリティ制限は破られていない?
データ構造の操作 不変条件が崩れていない?
排他制御手順の確認 デッドロックを引き起こさない?
3.とにかく書いてみよう
仕様は形式的に書くことで整理できる。曖昧性が見つかったら儲けもの。やってみると意外と複雑かもしれない。
費用対効果は結果論。 仕様を書き始めて、難しすぎれば止めれば
いい。 Alloy で難しいなら、本格的に難しい問題の可能性もあり。モデル検査ツール、定理証明支援器の導入を検討。
書いてみるコストが低いのが Alloy Analyzer の最大の強み。
抽象によるソフトウェア設計Alloyではじめる形式手法
Daniel Jackson ( 著 ), 中島 震 (監訳 ), 今井 健男 (翻訳 ), 酒井 政裕 (翻訳 ), 遠藤 侑介 (翻訳 ), 片岡 欣夫 (翻訳 ) オーム社
Alloy でキラバグを捕まえよう!
ご清聴ありがとうございました。ANY QUESTION?