Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

形式手法とalloyの紹介

7 739 vues

Publié le

s

  • Identifiez-vous pour voir les commentaires

形式手法とalloyの紹介

  1. 1. 形式手法でバグの少ないモデリングができたらいいな 2012/4/19 by TANAKA Daisuke
  2. 2. 形式手法って?
  3. 3. • 計算機科学における数学を基盤としたソフトウェアおよびハードウェアシステムの仕様記述、開発、検証の技術である。 http://ja.wikipedia.org/wiki/%E5%BD%A2%E5%BC%8F%E6%89%8B%E6%B3%95
  4. 4. 仕様記述?
  5. 5. identifier ::= "a..z,$,_" { "a..z,$,_,0..9,unicode character over 00C0" } class_name ::= identifier | ( package_name "." identifier )• バッカス・ナウア記法でJavaのクラス名の仕 様を記述
  6. 6. 検証?
  7. 7. モデル検査、自動定理証明…
  8. 8. モデル検査• モデル検査(Model Checking)とは、形式システムをアルゴリズム的に検証する手法である。ハードウェアやソフトウェアの設計から導出されたモデルが形式仕様を満足するかどうか検証する。 http://ja.wikipedia.org/wiki/%E3%83%A2%E3%83%87%E3%83%AB%E6%A4%9C%E6%9F%BB
  9. 9. 自動定理証明 • コンピュータプログラムによって数学的定理に対する 証明を発見すること。 →プログラムの正しさを保証したり、安全なプログラ ムを書くことができる。http://ja.wikipedia.org/wiki/%E8%87%AA%E5%8B%95%E5%AE%9A%E7%90%86%E8%A8%BC%E6%98%8E
  10. 10. …( ゚Д゚)ポカーン
  11. 11. (ー_ー)...ZZZZZZ乙乙
  12. 12. まずはalloyで始めてみよう
  13. 13. alloyで何ができるの?
  14. 14. • ソフトウェア設計の仕様記述言語• 統合アプリケーション• 検証はもちろん、視覚化がすごい
  15. 15. 数独(充足可能性問題(SAT) NP困難)
  16. 16. 数独
  17. 17. 1つのブロックに1∼9
  18. 18. 1つの行に1∼9
  19. 19. 1つの列に1∼9
  20. 20. 数独のルール=仕様 を記述する
  21. 21. Numberの定義 集合論でいう直和abstract sig Number { data: Number -> Number }abstract sig Region1, Region2, Region3 extends Number {}one sig N1, N2, N3 extends Region1 {}one sig N4, N5, N6 extends Region2 {}one sig N7, N8, N9 extends Region3 {}
  22. 22. 3×3のブロック の定義 集合論でいう継承abstract sig Number { data: Number -> Number }abstract sig Region1, Region2, Region3 extends Number {}one sig N1, N2, N3 extends Region1 {}one sig N4, N5, N6 extends Region2 {}one sig N7, N8, N9 extends Region3 {}
  23. 23. (R1,R1),(R1,R2),(R1,R3) 実体の定義 (R2,R1),(R2,R2),(R2,R3) (R3,R1),(R3,R2),(R3,R3)abstract sig Number { data: Number -> Number }abstract sig Region1, Region2, Region3 extends Number {}one sig N1, N2, N3 extends Region1 {}one sig N4, N5, N6 extends Region2 {}one sig N7, N8, N9 extends Region3 {} Nは数字であり座標である
  24. 24. pred complete(rows: set Number,cols: set Number) {! Number in cols.(rows.data)} 指定された行or列に N1∼N9が1つずつ存在
  25. 25. pred rules() {! all x, y: Number { lone y.(x.data) } N1∼N9は1つずつ、か つN1∼N9のマップを保 持している! all row: Number { complete[row , Number] }! all col: Number { complete[Number, col] }!! complete[Region1, complete[Region1, Region1] Region2] 行・列に1∼9まで存在! complete[Region1, Region3]! complete[Region2, Region1]! complete[Region2, Region2]!! complete[Region2, complete[Region3, Region3] Region1] 9個のブロックはそれ! complete[Region3, Region2]! complete[Region3, Region3] ぞれ1∼9が1つずつ存在}
  26. 26. DEMO
  27. 27. ┐(´-`)┌で?
  28. 28. 参照カウント式GC from きしだのはてなhttp://d.hatena.ne.jp/nowokay/20120106#1325874065
  29. 29. 「参照されているかどうか」でGCする仕様は問題ないか?
  30. 30. abstract sig メモリ{ 参照しているメモリ(ルート) 参照: set 割り当て 参照されているメモリ(割り当} て)の定義one sig ルート extends メモリ{}sig 割り当て extends メモリ{}
  31. 31. fact{ all a:割り当て | some m:メモリ | not a in a.参照 and a in m.参照} 自己参照はなし
  32. 32. DEMO
  33. 33. 視覚化するとこんな感じ
  34. 34. assert ルートからたどれる{ no a:割り当て | not a in ルート.^参照}check ルートからたどれる 全ての割り当てメモリがルー トからたどれるかチェック
  35. 35. DEMO
  36. 36. 視覚化するとこんな感じ
  37. 37. 「参照されているかどうか」ではGCできないメモリがあった
  38. 38. おさらい
  39. 39. 仕様を記述した
  40. 40. 初期値を入力し、仕様を満たすか確認した
  41. 41. さらに仕様を満たす OR 満たさない組み合わせを調べた
  42. 42. (参考)中身が気になる人向け• 実世界の問題(だいたいは論理命題に変換する)を扱う 場合、考えられる全ての状態を確認するモデル検査 は、得てして状態組み合わせ爆発を起こすことが多い• しかし記号的アルゴリズムを使用して、暗黙的にグラ フ化し解くことが可能• alloyには強力なSAT Solverが実装されている
  43. 43. 形式手法って使われているの?
  44. 44. Coq• 自動定理証明のための言語• 関数指向言語のような、副作用のない言語と仲がよい• 某SIerで研究・検討されている
  45. 45. CSP• 仕様記述言語• NASAなどでも研究されている。実際に“普通のソフトウェアテスト”では見つからないバグを発見している
  46. 46. まとめ
  47. 47. 仕様を記述する
  48. 48. UTをやる前に、その仕様が正 しいかを検証する
  49. 49. でも集合理論、論理命題、圏論のような抽象的指向は難し そう
  50. 50. alloy、無料です http://alloy.mit.edu/alloy/
  51. 51. 以上、ご清聴ありがとうございました

×