「モデル検査」のススメ (ゲームシナリオ進行編)
Upcoming SlideShare
Loading in...5
×
 

「モデル検査」のススメ (ゲームシナリオ進行編)

on

  • 3,489 views

CEDEC2013「『モデル検査』のススメ (ゲームシナリオ進行編)」講演スライド増補版

CEDEC2013「『モデル検査』のススメ (ゲームシナリオ進行編)」講演スライド増補版

Statistics

Views

Total Views
3,489
Views on SlideShare
3,261
Embed Views
228

Actions

Likes
11
Downloads
19
Comments
1

7 Embeds 228

https://twitter.com 128
http://iteman.tumblr.com 62
http://hoothoot.gamefreak.co.jp 32
http://b.hatena.ne.jp 2
https://www.chatwork.com 2
http://www.tumblr.com 1
http://192.168.33.10 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

「モデル検査」のススメ (ゲームシナリオ進行編) 「モデル検査」のススメ (ゲームシナリオ進行編) Presentation Transcript

  • Copyright (C) 2013 National Institute of Informatics, All rights reserved. 「モデル検査」のススメ (ゲームシナリオ進行編) 2013年8月21日 国立情報学研究所 GRACEセンター/先端ICTセンター 長久勝 mailto : nagaku@nii.ac.jp Twitter : @mnagaku
  • Copyright (C) 2013 National Institute of Informatics, All rights reserved. 2 がいよう  仕様の通りに正しく振る舞うソフトウェアを開発するのは 極めて困難であるが、ソフトウェア工学において検討され てきた「モデル検査」は、ソフトウェアをモデル化し、その 振る舞いを網羅的に検証することで、仕様の通りに正しく 振る舞うソフトウェアの開発を支援する。  コンピュータゲームにおけるシナリオ進行は、状態遷移 に基づくスクリプト表現(DSL)で記述されることが多く、モ デル検査を行うためのモデル表現と親和性が高い。  本講演では、簡単なノベルゲームエンジンを示し、その上 に記述されたゲームのシナリオ進行を、モデル検査によ って検証できることを示す。
  • Copyright (C) 2013 National Institute of Informatics, All rights reserved. 3 じゅこうすきるとえられるちけん  受講スキル 大学教養レベルの論理学。ノベルゲームなどの スクリプトが書ける程度のゲーム開発経験  得られる知見 ゲームシナリオ進行に関してモデル検査を使うた めの具体的なノウハウ。ゲーム開発にモデル検 査を導入するためのヒント
  • Copyright (C) 2013 National Institute of Informatics, All rights reserved. 4 おはなしするおじさん  長久勝(ながくまさる)  国立情報学研究所 GRACEセンター/先端ICTセンター 特任技術専門員  ゲーム、映像配信の技術職を経て現職。ソフトウェア工学教育 と、学術クラウドに携わっている。早稲田大学MNC非常勤講師 兼務。NADEC主宰、ゲームコミュニティサミット2013実行委員、 IGDA日本 福島ゲームジャムT/F副世話人。単著「Javaゲーム プログラミング アルゴリズムとフレームワーク」、雑誌特集「生 物の生きるしくみを応用する免疫アルゴリズム」、TopSE修了 制作「FDRによるRPGシナリオの検証」、共著「ゲームクリエイ ターが知るべき97のこと」。CEDECでは、2005-2011「ゲームAI RT」、CEDECラボ2008プログラム委員、2009講演「僕より賢い SATソルバー」。
  • Copyright (C) 2013 National Institute of Informatics, All rights reserved. 5 おはなしするおじさん  日科技連SQuBOK開発領域委員  もうすぐ改定作業が終わります  最新刊「ゲームクリエイターが知るべき97のこと②」  今日の話は①の方の話だけど
  • Copyright (C) 2013 National Institute of Informatics, All rights reserved. 6 かいじょうあんけーと  職種 プログラマ スクリプタ、レベルデザイナ 企画、シナリオライタ その他  知識 三段論法が分かる 状態機械が分かる 網羅的試験が分かる
  • Copyright (C) 2013 National Institute of Informatics, All rights reserved. 7 おしながき  正しく動くソフトウェア  モデル検査  ゲームシナリオ  デモ
  • Copyright (C) 2013 National Institute of Informatics, All rights reserved. 8 ただしくうごくそふとうぇあ  正しく動く≠イイ感じ 「イイ感じ」は曖昧 何が「正しい」か決めて、 それが損なわれないように動くのが「正しく動く」  何が「正しい」か書くのが仕様書 何が「正しい」かを明らかにするために、 何が「正しくない」か書くこともある 「正しい」とも「正しくない」とも判断できない部分が 残っている仕様書は「『正しくない』仕様書」
  • Copyright (C) 2013 National Institute of Informatics, All rights reserved. 9 ただしくうごくそふとうぇあ  「戦闘で勝つとアイテムがもらえる」 大雑把過ぎて何が「正しい」挙動か分からない  「戦闘に勝った後、戦闘画面からフィールド画面 に戻ると、敵の居た場所に、別途定める確率で、 別途定めるアイテムが入った宝箱が出現する。 宝箱に隣接した位置で、宝箱を向いて、Aボタン を押すと、アイテムを取得した旨の演出が行わ れ、持ち物にアイテムが加えられる」 確率やアイテムの種別は定めた通りか、宝箱の どの方向からも開けられるか、持ち物にちゃんと アイテムが入るか
  • Copyright (C) 2013 National Institute of Informatics, All rights reserved. 10 ただしくうごくそふとうぇあ  宝箱からアイテムを取らないで別の画面に移動 したらどうなる?取らないままじっとしていたらど うなる? 異常系とかも明示しないとダメ 必要なら非機能についても書く  段階的詳細化 大雑把な要求から、実装や試験が可能な仕様に 詳細化していく 各段階での対応関係(トレーサビリティ)、守るべ き性質を壊さないように工夫して行う
  • Copyright (C) 2013 National Institute of Informatics, All rights reserved. 11 もでるけんさ  仕様書に書かれた「正しい」を、設計もしくは実装 が守っているか検証するための手法の一つ  検査対象となるシステムを 状態機械としてモデル化  モデル上の全ての状態遷移について 網羅的に「正しい」が破られないか探す
  • Copyright (C) 2013 National Institute of Informatics, All rights reserved. 12 じょうたいきかい  100円玉と50円玉だけ受け入れて 100円の商品を出す自動販売機の例 内部留保0円 内部留保100円 100円玉投入 内部留保50円 50円玉投入 50円玉投入 100円玉投入 / 50円玉排出 50円玉投入 / 50円玉排出 100円玉投入 / 100円玉排出 購入ボタン押下 / 商品排出 購入ボタン押下 購入ボタン押下
  • Copyright (C) 2013 National Institute of Informatics, All rights reserved. 13 じょうたいきかいでみるただしさ  どんな状態からでも商品を得る遷移が存在する 内部留保0円 内部留保100円 100円玉投入 内部留保50円 50円玉投入 50円玉投入 100円玉投入 / 50円玉排出 50円玉投入 / 50円玉排出 100円玉投入 / 100円玉排出 購入ボタン押下 / 商品排出 購入ボタン押下 購入ボタン押下
  • Copyright (C) 2013 National Institute of Informatics, All rights reserved. 14 じょうたいきかいでみるただしくなさ  どんな状態からでも商品を得る遷移が 存在する? 内部留保0円 内部留保100円 100円玉投入 内部留保50円 50円玉投入 50円玉投入 / 50円玉排出 100円玉投入 / 100円玉排出 購入ボタン押下 / 商品排出 購入ボタン押下
  • Copyright (C) 2013 National Institute of Informatics, All rights reserved. 15 もでるけんさき  モデル検査器  「状態機械で見る正しさ」を検査するツール  SPIN、SMV、UPPAAL、LTSA、FDR2、PAT、 JavaPathFinder、CBMC、SyncStitch、etc…  今日はLTSAを紹介します
  • Copyright (C) 2013 National Institute of Informatics, All rights reserved. 16 もでるけんさき  LTSA http://www.doc.ic.ac.uk/ltsa/ Javaで書かれてるので、どこでも動く Appletでも動く 簡単な使い方や情報を紹介してるBlog http://d.hatena.ne.jp/susumu/searchdiary?word=ltsa  http://ameblo.jp/kenkyu-nisshi/entry-10602734547.html 講義用スライドを玉井先生が日本語化したもの (英語の本家教科書を読む際にも参考になる)  http://www.graco.c.u-tokyo.ac.jp/~tamai/concurrency.html
  • Copyright (C) 2013 National Institute of Informatics, All rights reserved. 17 もでるをかく S自販機 = S内部留保0円, S内部留保0円 = (e50円玉投入 -> S内部留保50円 | e100円玉投入 -> S内部留保100円), S内部留保50円 = (e購入ボタン押下げ -> S内部留保50円), S内部留保100円 = (e購入ボタン押下げ -> a商品排出 -> S内部留保0円 | e50円玉投入 -> a50円玉排出 -> S内部留保100円 | e100円玉投入 -> a100円玉排出 -> S内部留保100円). 内部留保0円 内部留保100円 100円玉投入 内部留保50円 50円玉投入 50円玉投入 / 50円玉排出 100円玉投入 / 100円玉排出 購入ボタン押下 / 商品排出 購入ボタン押下
  • Copyright (C) 2013 National Institute of Informatics, All rights reserved. 18 もでるを けんさする 内部留保0円 内部留保100円 100円玉投入 内部留保50円 50円玉投入 50円玉投入 / 50円玉排出 100円玉投入 / 100円玉排出 購入ボタン押下 / 商品排出 購入ボタン押下 //メニューの[check]-[progress] Composition: DEFAULT = S自販機 State Space: 6 = 2 ** 3 Progress Check... -- States: 6 Transitions: 9 Memory used: 128062K Finding trace to cycle... Depth 1 -- States: 1 Transitions: 1 Memory used: 128062K Finding trace in cycle... Progress violation for actions: {a100円玉排出, a50円玉排出, a商品排出, e100円玉投入, e50円玉投入} Trace to terminal set of states: e50円玉投入 Cycle in terminal set: e購入ボタン押下げ Actions in terminal set: e購入ボタン押下げ Progress Check in: 0ms
  • Copyright (C) 2013 National Institute of Informatics, All rights reserved. 内部留保0円 内部留保100円 100円玉投入 内部留保50円 50円玉投入 50円玉投入 100円玉投入 / 50円玉排出 50円玉投入 / 50円玉排出 100円玉投入 / 100円玉排出 購入ボタン押下 / 商品排出 購入ボタン押下 購入ボタン押下 19 もでるをかく けんさする S自販機 = S内部留保0円, S内部留保0円 = (e購入ボタン押下げ -> S内部留保0円 | e50円玉投入 -> S内部留保50円 | e100円玉投入 -> S内部留保100円), S内部留保50円 = (e購入ボタン押下げ -> S内部留保50円 | e50円玉投入 -> S内部留保100円 | e100円玉投入 -> a50円玉排出 -> S内部留保100円), S内部留保100円 = (e購入ボタン押下げ -> a商品排出 -> S内部留保0円 | e50円玉投入 -> a50円玉排出 -> S内部留保100円 | e100円玉投入 -> a100円玉排出 -> S内部留保100円). Composition: DEFAULT = S自販機 State Space: 7 = 2 ** 3 Progress Check... -- States: 7 Transitions: 13 Memory used: 22162K No progress violations detected. Progress Check in: 2ms
  • Copyright (C) 2013 National Institute of Informatics, All rights reserved. 20 げーむしなりお  攻略情報でフローチャートがよく出てくる ゲームシナリオは状態機械で表現可能  フラグが立つ ゲームシナリオ進行に使われる道具は 限られている フラグは進行状態を表す フラグの変化に注目したモデル化で検査ができる
  • Copyright (C) 2013 National Institute of Informatics, All rights reserved. 21 げーむしなりお do / 鍵取得=false 開始 さて進めて どんどん進めて ぐるぐる脱出最後のドア 探索 do / 鍵取得=true 鍵発見 もうないドア開 開く 開かない 終了 次へ 次へ 次へ 次へ 周りを探すドアを開ける 次へ [鍵取得==false] 次へ [鍵取得==true] 次へ 次へ 次へ [鍵取得==true] 次へ [鍵取得==false] 次へ 次へ 次へ
  • Copyright (C) 2013 National Institute of Informatics, All rights reserved. 22 でも  ゲームのスクリプトに潜むバグを LTSAで取ってみます  http://code.9leap.net/codes/show/37974 ログインして、Forkして、自分用の環境を作る config.jsのdebugフラグをtrueに変える 実行するとLTSA用のモデルがdialogで出る LTSAにコピペで持って行く ブラウザによってコピペ不可なのがあるので注意
  • Copyright (C) 2013 National Institute of Informatics, All rights reserved. 23 けんさできるせいしつ  const False = 0 const True = 1 fluent HAS_KEY = <{m.s鍵発見.s最後のドア}, {m.sさて進めて.sどんどん進めて}> initially False fluent OPEN_DOOR = <{m.s開く.s終了}, {m.sさて進めて.sどんどん進めて}> initially False assert P1 = [](OPEN_DOOR -> HAS_KEY)  イベントによって変化する状態を定義し、その状態の関係をLTLで検査式として書く  P1:ドアが開いた状態の時は、必ず鍵を持っている状態でなければならない  progress END = {m.s終了.s開始}  進行性検証  どんな状態からでも、いつか「m.s終了.s開始」のイベントを起こせる  「m.s終了.s開始」のイベントが起こせなくなる進行とは、エンディングに到達できないパスがあるということ  property Test = (m.s鍵発見.s最後のドア -> m.s開く.s終了 -> Test).  安全性検証  システムを抽象化(捨象)して守るべき性質を記述  「m.s鍵発見.s最後のドア」、「m.s開く.s終了」以外のイベントを無視した場合、システムが 「Test = (m.s鍵発見.s最後のドア -> m.s開く.s終了 -> Test)」 と等価か調べる  鍵を発見していないのにドアが開いたり、鍵を複数回発見してからドアが開いたりすると、等価にならない
  • Copyright (C) 2013 National Institute of Informatics, All rights reserved. 24 げーむしなりおともでるけんさ  デモでの不具合は単純に見える 人間の認識可能な量は簡単に超えてしまう  モデル検査は本来、並行システムの検証に用い られるが、今回題材としているシナリオ進行では 並行性を扱わない  一般的なゲームシナリオ進行では、並行性がな い、もしくは、既に並行合成が終わった後の並行 性がないプロセスを扱う  並行性のないモデル化ができるので、状態爆発 を回避できる
  • Copyright (C) 2013 National Institute of Informatics, All rights reserved. 25 ひんと  スクリプトも、リポジトリにコミットした時、CIでモデ ル検査される仕組みだと、うれしい  ルールやツールを工夫すれば、ゲーム内の設定 の一貫性などを検査することも可能
  • Copyright (C) 2013 National Institute of Informatics, All rights reserved. 26 ついかさんぷる  http://code.9leap.net/codes/show/38365 デモと同じ手順でLTSAにモデルを持って行く  const False = 0 const True = 1 fluent DEAD_ME = <{m.s死ぬ.s終了}, {m.s終了.s開始}> initially False fluent LIVE_CAT = <{m.s終了.s開始}, {m.s猫死ぬ.s死ぬ}> initially True assert P1 = [](DEAD_ME -> LIVE_CAT)  自分を殺すのが必ず猫だとした場合、 自分が死んだ時に、既に猫が死んでいたらおかしい  ほんとは、死んだら生き返らない検査項目も必要だけど、ここでは割愛  物語の内容についての制約も検査できる  モデル化に工夫しておくと、自動化も可能  キャラ表示命令から香盤表を自動生成して、その情報を使うとか  シーンにアノテーション(タグ)を付けて、遷移以外のイベントを自動で埋め込めるようにするとか
  • Copyright (C) 2013 National Institute of Informatics, All rights reserved. 27 かたよったさんこうぶんけん  CSPベースのモデル検査器は、LTSAの他にも FDR2やPATなど、結構ある
  • Copyright (C) 2013 National Institute of Informatics, All rights reserved. 28 ふつうのさんこうぶんけん  日本語だと中島先生のSPIN本かな
  • Copyright (C) 2013 National Institute of Informatics, All rights reserved. 29 ろんぶんなど  [CEDEC2008]モデル検証入門 ~ツールに振る舞いを検査させる~ http://cedil.cesa.or.jp/session/detail/154  モデル検査のゲームシナリオへの適用 http://www.seiki.org/mass/modelchecking/  設計段階におけるゲームシナリオのモデル検査 http://www.ppll.jp/mt.pdf  FDRによるRPGシナリオの検証  https://docs.google.com/file/d/0B4r-xhiV8R5xd1QyaE8yOVBrNmc/edit?usp=sharing
  • Copyright (C) 2013 National Institute of Informatics, All rights reserved. 30 このりんぐ、われわれのうえに、 ひとり、かみがいる  菅野ひろゆき(1968-2011) 「この世の果てで恋を唄う少女YU-NO」に代表さ れる複雑なシナリオ進行において先駆的  もし「複雑なシナリオ進行」の開発コストが低かっ たとしたら、もっとシナリオ進行で遊ばせるゲー ムが増えるのではないだろうか  モデル検査をその道具に使えないだろうか  アニメで表現できない面白さを
  • Copyright (C) 2013 National Institute of Informatics, All rights reserved. 31 ここまでよんでくれてありがとうね  Twitterで絡んでもらえば、いろいろお話します @mnagaku  今回のセッション、いろいろ反省した 「ゲームとモデル検査ワークショップ」をやる ハンズオンで体験してもらう会 少人数で、 参加者各自が何がしかの納得を持って帰れる会 平日20時-22時、神保町を予定 そのうちTwitterで情報流します
  • Copyright (C) 2013 National Institute of Informatics, All rights reserved. 32 じょうほうけんってどんなとこ?  国立情報学研究所  http://www.nii.ac.jp/  講演者の所属する国立情報学研究所は、情報学という新しい 学問分野での「未来価値創成」を目指すわが国唯一の学術総 合研究所として、ネットワーク、ソフトウェア、コンテンツなどの 情報関連分野の新しい理論・方法論から応用展開までの研究 開発を総合的に推進しています。また、大学共同利用機関と して、学術コミュニティ全体の研究・教育活動に不可欠な最先 端学術情報基盤(サイバー・サイエンス・インフラストラクチャ: CSI)の構築を進めるとともに、全国の大学や研究機関はもと より民間企業やさまざまな社会活動との連携・協力を重視した 運営を行っています。民間企業出身の研究者も在籍しており、 民間企業との共同研究も多く行われています。
  • Copyright (C) 2013 National Institute of Informatics, All rights reserved. 33 とっぷえすいーってなあに?  トップエスイー  http://www.topse.jp/  講演者が国立情報学研究所GRACEセンターの一員として運 営に参加しているソフトウェア工学の社会人向け教育プログラ ム「トップエスイー」は、ソフトウェアシステム構築の現場で強力 なツール類を十分利用できる”スーパーアーキテクト”を育成 するために創設されました。先端的な教材を基に、ソフトウェア 産業における次世代リーダの育成を行っています。モデル検 査などソフトウェアの設計を検証する技術も学ぶことができま す。これまで7期189名の修了生を輩出しており、講演者も2期 生として修了制作「FDRによるRPGシナリオの検証」で優秀賞 を獲得しています。