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

Alloy analyzer

  • Upload
    -

  • View
    275

  • Download
    3

Embed Size (px)

Citation preview

Alloy Analyzerで簡単設計チェック

2011年8月8日

有限会社ITプランニング

小笠原 啓

Alloy Analyzerのご紹介

Alloyって何ができるの?

データモデリング

ビジネスの仕組みの記述

手続きの検証

まとめ

アジェンダ

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

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

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

Alloy Analyzerの検証は全自動

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

小スコープ仮説

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

デモ:Alloy Analyzer

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

V字モデル

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

10

要求分析

システム設計

詳細設計

モジュール実装

受け入れテスト

システムテスト

結合テスト

単体テスト

このフェーズで嬉しい

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

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

データモデリングの例

企業

従業員

1対nの関係

Alloyではこう書けます

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

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

}

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

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

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

副業規定違反!?

モデルの修正

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

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

}

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

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

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

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

}

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

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

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

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

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

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

サンプル図でチェック!

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

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

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

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

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

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

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

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

陶器のカタログ販売

カタログ

注文

注文

Alloyで書くとこうなります

サンプル図

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

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

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

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

}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Alloyによるモデル化

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

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

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

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 //変更権限があるか?

}}

検証したい性質の記述

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 // できたりしないよね?

}

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

デモ:性質の検証

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

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

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

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

手続きの検証

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

Alloyにお伺いしよう!

ホテルの客室施錠問題。

DNSのモデル化と検証。

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

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

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

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

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

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

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

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

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

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

まとめ

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

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

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

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

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

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

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

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

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

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