SlideShare une entreprise Scribd logo
1  sur  14
2011年11月5日 
有限会社ITプランニング 
小笠原啓(@osiire) 
ALLOY ANALYZER 
A LIGHTWEIGHT FORMAL METHOD
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はトンホー種じゃないぞ」
Alloyによる仕様記述 
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 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?

Contenu connexe

Plus de 啓 小笠原

函数プログラミングの エッセンスと考え方
函数プログラミングのエッセンスと考え方函数プログラミングのエッセンスと考え方
函数プログラミングの エッセンスと考え方啓 小笠原
 
線形型のある言語でLEDを光らせる
線形型のある言語でLEDを光らせる線形型のある言語でLEDを光らせる
線形型のある言語でLEDを光らせる啓 小笠原
 
状態遷移機械を構成するための新しいイベントコンビネーターの提案(PPL2014 カテ3ポスター)
状態遷移機械を構成するための新しいイベントコンビネーターの提案(PPL2014 カテ3ポスター)状態遷移機械を構成するための新しいイベントコンビネーターの提案(PPL2014 カテ3ポスター)
状態遷移機械を構成するための新しいイベントコンビネーターの提案(PPL2014 カテ3ポスター)啓 小笠原
 
ぱわわっぷOCaml
ぱわわっぷOCamlぱわわっぷOCaml
ぱわわっぷOCaml啓 小笠原
 
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)啓 小笠原
 
GADTブランチの今
GADTブランチの今GADTブランチの今
GADTブランチの今啓 小笠原
 

Plus de 啓 小笠原 (6)

函数プログラミングの エッセンスと考え方
函数プログラミングのエッセンスと考え方函数プログラミングのエッセンスと考え方
函数プログラミングの エッセンスと考え方
 
線形型のある言語でLEDを光らせる
線形型のある言語でLEDを光らせる線形型のある言語でLEDを光らせる
線形型のある言語でLEDを光らせる
 
状態遷移機械を構成するための新しいイベントコンビネーターの提案(PPL2014 カテ3ポスター)
状態遷移機械を構成するための新しいイベントコンビネーターの提案(PPL2014 カテ3ポスター)状態遷移機械を構成するための新しいイベントコンビネーターの提案(PPL2014 カテ3ポスター)
状態遷移機械を構成するための新しいイベントコンビネーターの提案(PPL2014 カテ3ポスター)
 
ぱわわっぷOCaml
ぱわわっぷOCamlぱわわっぷOCaml
ぱわわっぷOCaml
 
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
 
GADTブランチの今
GADTブランチの今GADTブランチの今
GADTブランチの今
 

Alloy Analyzer LT