Top Banner
Alloy Analyzer簡単設計チェック 201188有限会社ITプランニング 小笠原
45

Alloy analyzer

Jul 19, 2015

Download

Technology

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Alloy analyzer

Alloy Analyzerで簡単設計チェック

2011年8月8日

有限会社ITプランニング

小笠原 啓

Page 2: Alloy analyzer

Alloy Analyzerのご紹介

Alloyって何ができるの?

データモデリング

ビジネスの仕組みの記述

手続きの検証

まとめ

アジェンダ

Page 3: Alloy analyzer

Alloy Analyzerのご紹介

Page 4: Alloy analyzer

Alloy AnalyzerはMITで開発されたオープンソース(MITライセンス)のJava製GUI付き仕様記述・検証ツール。

B, Z, VDMのようなツールは仲間。

2006年頃から公開されており、Version 4で解析速度向上、文法のブラッシュアップ。

2011年8月現在Version 4.1.10が最新(4.2 RCあり)。

Alloy Analyzerとは

開発者のDaniel Jackson@MIT

Page 5: Alloy analyzer

簡素な言語で仕様を記述すると、その仕様を満たす状態を検索して図示してくれる(モデルファインダー)。

検証したい性質を記述すると、その性質が満たされるかどうか全自動でチェックしてくれる。

Alloy Analyzerの検証は全自動

Page 6: Alloy analyzer

全自動チェックにはスコープ(チェックする範囲)があり有限。それでも多くの設計がチェックできる。(小スコープ仮説)

小スコープ仮説

探索空間とAlloyのスコープ(イメージ)

Page 7: Alloy analyzer

デモ:Alloy Analyzer

Page 8: Alloy analyzer

Alloyって何が嬉しいの?どういう時に使えるの?

Page 9: Alloy analyzer

V字モデル

高効率・高信頼なソフトウェア開発のための関数プログラミングと形式手法

10

要求分析

システム設計

詳細設計

モジュール実装

受け入れテスト

システムテスト

結合テスト

単体テスト

このフェーズで嬉しい

Page 10: Alloy analyzer

データ構造を表現して、その制約条件などを記述する。ER図を作成する工程。

例えば、データモデリング

Page 11: Alloy analyzer

データモデリングの例

企業

従業員

Page 12: Alloy analyzer

1対nの関係

Page 13: Alloy analyzer

Alloyではこう書けます

sig Company, Person {} // 企業と従業員

one sig Employ {employee : Company -> set Person // 雇用関係

}

Page 14: Alloy analyzer

実行するとサンプル図が出てきます

Page 15: Alloy analyzer

次々と色々なサンプル図が出てきます

Page 16: Alloy analyzer

サンプル図を続けて見ていると・・・

副業規定違反!?

Page 17: Alloy analyzer

モデルの修正

sig Company, Person {} // 企業と従業員

one sig Employ {employee : Company lone -> set Person// 雇用関係

}

一人の人が複数の企業に雇われないように。 従業員は0人以上。

Page 18: Alloy analyzer

1対nの関係のバリエーション

sig Company, Person {} // 企業と従業員

one sig Employ { // 雇用関係employee : Company lone -> set Person

}

lone(0か1)one(1のみ)

set(0以上)some(1以上)

Page 19: Alloy analyzer

一口に1対nの関係といっても、厳密にはいくつかの種類が考えられる。n対nはもっと種類が多い。

複雑なデータを扱うときは、しっかりとモデリングしておかないと、後工程での手戻りが高コストとなる。

Alloyを使ってモデルを記述すると、意図したモデリングができているかどうか、サンプル図を見ながらチェックできる。

完成したAlloyコードとサンプル図を設計書に張っておくと効果的。

サンプル図でチェック!

Page 20: Alloy analyzer

正確性向上!レビュー時間短縮!

Page 21: Alloy analyzer

データモデルと同じように

ビジネスの仕組みの記述にも使えます。

Page 22: Alloy analyzer

陶器の窯元さんは自社で陶器を制作している。

ただ、個別に売っていては効率が良くないので、窯元さんが何社も集まって、一つの陶器カタログを作る。

そのカタログをホテルや外食産業に配布して、カタログを見て注文してもらう。受注は、カタログに参加している窯元さんがそれぞれ受ける。

窯元さんは受注を受けた時に、自社製品以外の注文は、カタログ参加窯元に仕入発注を出して対応する。

ケーススタディ陶器のカタログ販売

Page 23: Alloy analyzer

陶器のカタログ販売

カタログ

注文

注文

Page 24: Alloy analyzer

Alloyで書くとこうなります

Page 25: Alloy analyzer

サンプル図

Page 26: Alloy analyzer

窯元さんの製品は必ず一社オリジナル?同じ製品を二社以上が作っていることは無い?

カタログに載せる製品は参加窯元さんの全ての製品?それとも一部だけ?

仕様を記述する過程で疑問に思った事

sig Maker {products: disj set Product // 自社製品

}

// 商品はカタログ参加企業の商品products in member.products

Page 27: Alloy analyzer

シンプルな仕様だと思っていても、書き下してみると意外と曖昧さが残っている。

Alloyで仕様を記述する事で、簡単に曖昧性が浮き彫りになる。

プログラムを書くわけではないので、実装の詳細には縛られずに、仕様だけを表現できる。

仕様記述で仕様の穴を早期に見つける

Page 28: Alloy analyzer

仕様バグとはもう言わせない!

Page 29: Alloy analyzer

読み込み権限があるファイルのみ読み込み可能、書き込み権限があるファイルのみ書き込み可能とする簡易ファイルシステムを考えてみる。

権限を勝手に変えられると元も子もないので、権限変更フラグも用意する。権限変更フラグがあるファイルの権限のみ、読み込み・書き込み権限を含めて、変更できる。

手続きの検証例ファイルシステムの権限

Page 30: Alloy analyzer

簡易ファイルシステム権限のイメージ

foo/ 256 12:23:22 rwpbar 421 12:20:01 r--aaa 482 12:39:39 rw-

・全権限・読み込みのみ・読み書き

Page 31: Alloy analyzer

木構造のファイルシステムと4つの操作(新規作成、コピー、削除、権限変更)をモデル化。

各操作を実行する前に権限をチェック。

Alloyによるモデル化

abstract sig Elem {// 全てのファイルシステムエレメントには権限が設定されている。permission : Permission

}sig File extends Elem {contents : Contents // ファイルには内容がある。

}sig Dir extends Elem {} // ディレクトリ。子要素は別途定義する。

Page 32: Alloy analyzer

Alloyによるモデル化操作定義と権限チェックの実施

//オペレーション定義abstract sig Operation {}sig Create extends Operation { target : Path } //新規作成sig Copy extends Operation { disj src, dst : Path } //コピーsig Delete extends Operation { target : Path } //削除sig Chmod extends Operation { target : Path, perm : Permission } //権限変更

//抜粋else #(Chmod & x.command) > 0 => {

let c = (x.command <: Chmod), s = x.state {exists[s, c.target]getElem[s, c.target].chmodable //変更権限があるか?

}}

Page 33: Alloy analyzer

検証したい性質の記述

pred PermissionConsistency {some x : StateTrans | some y : x.^next | some p : sameFiles[x.state, y.state] | let xe = getElem[x.state, p], ye = getElem[y.state, p] |

xe.contents = ye.contents and xe.permission.perm = none and // 権限変更できないはずなのにye.permission.perm = P // できたりしないよね?

}

権限変更フラグが立っていないファイルをどう操作しても、権限変更フラグを立てた状態にはできない。(フラグを立てた状態に至るパスを見つけろ)

Page 34: Alloy analyzer

デモ:性質の検証

Page 35: Alloy analyzer

少し複雑な組合せ問題になると、人間はすぐに見落としをしてしまう。

Alloyは網羅的にチェックしてくれるので、人間が見落としがちなケースもカバーしてくれる。

記述に慣れてくれば、比較的短時間にモデルを構築できる。

アルゴリズムが少し変更になったとき、Alloyのモデルがあれば簡単に回帰チェックができる。

手続きの検証

Page 36: Alloy analyzer

複雑な問題は人間がチェックするより

Alloyにお伺いしよう!

Page 37: Alloy analyzer

ホテルの客室施錠問題。

DNSのモデル化と検証。

バージョン管理システムのモデル化と検証。

メモリキャッシュ戦略のモデル化と検証。

コミットプロトコルのモデル化と検証。

タスクのスケジューリング問題。

数独、連立方程式、正直うそつきパズル。

手続きのモデル化と検証その他の例

Page 38: Alloy analyzer

Alloy AnalyzerはMITで作られたオープンソースの仕様記述・検証ツール。

決められたスコープ内での網羅的全自動チェックが可能。

正確なデータモデリングの支援、仕様記述による曖昧さの早期発見、複雑な手続きの検証など、使い方次第で様々な利点が得られる。

日本語の情報源も登場!応用を始めるには良い時期。

まとめ

Page 39: Alloy analyzer

情報源(1):本家サイト

http://alloy.mit.edu/alloy4/

Page 40: Alloy analyzer

情報源(2):コミュニティサイト

http://alloy.mit.edu/community/

Page 41: Alloy analyzer

情報源(3):チュートリアル

http://alloy.mit.edu/alloy4/tutorial4/

Page 43: Alloy analyzer

情報源(5):日本のコミュニティ

https://groups.google.com/group/alloy-jp?hl=ja/

Page 44: Alloy analyzer

設計に自動チェックの力を!

Page 45: Alloy analyzer

ご清聴ありがとうございました。