SlideShare uma empresa Scribd logo
1 de 33
Baixar para ler offline
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シナリオの検証」で優秀賞
を獲得しています。

Mais conteúdo relacionado

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

“Stay Right”ペンテスト体験:SANS Holiday Hack Challenge 2017の解説 & Walkthrough
“Stay Right”ペンテスト体験:SANS Holiday Hack Challenge 2017の解説 & Walkthrough“Stay Right”ペンテスト体験:SANS Holiday Hack Challenge 2017の解説 & Walkthrough
“Stay Right”ペンテスト体験:SANS Holiday Hack Challenge 2017の解説 & WalkthroughIsaac Mathis
 
BLEラジコン基板でIoTしてみた
BLEラジコン基板でIoTしてみたBLEラジコン基板でIoTしてみた
BLEラジコン基板でIoTしてみたBizan Nishimura
 
CODE BLUE 2014 : バグハンターの愉しみ by キヌガワマサト Masato Kinugawa
CODE BLUE 2014 : バグハンターの愉しみ by キヌガワマサト Masato KinugawaCODE BLUE 2014 : バグハンターの愉しみ by キヌガワマサト Masato Kinugawa
CODE BLUE 2014 : バグハンターの愉しみ by キヌガワマサト Masato KinugawaCODE BLUE
 
Alteryxの空間分析で学ぶ、最寄りの指定緊急避難場所と低水位地帯 Developers.IO Tokyo 2019
Alteryxの空間分析で学ぶ、最寄りの指定緊急避難場所と低水位地帯 Developers.IO Tokyo 2019Alteryxの空間分析で学ぶ、最寄りの指定緊急避難場所と低水位地帯 Developers.IO Tokyo 2019
Alteryxの空間分析で学ぶ、最寄りの指定緊急避難場所と低水位地帯 Developers.IO Tokyo 2019Yuji Kanemoto
 
PythonからV-Sido CONNECTで ロボットを操る ~ ハードウェアの絡んだ仕組みの制御を考える ~
PythonからV-Sido CONNECTで ロボットを操る ~ ハードウェアの絡んだ仕組みの制御を考える ~PythonからV-Sido CONNECTで ロボットを操る ~ ハードウェアの絡んだ仕組みの制御を考える ~
PythonからV-Sido CONNECTで ロボットを操る ~ ハードウェアの絡んだ仕組みの制御を考える ~Daisuke Imai
 
2010年11月27日土曜日FlexUserGroup勉強会 第125回 京都 Flex & Google App Engine for Java & ...
2010年11月27日土曜日FlexUserGroup勉強会 第125回 京都  Flex & Google App Engine for Java & ...2010年11月27日土曜日FlexUserGroup勉強会 第125回 京都  Flex & Google App Engine for Java & ...
2010年11月27日土曜日FlexUserGroup勉強会 第125回 京都 Flex & Google App Engine for Java & ...Sadao Tokuyama
 
ぼっけもんデザイナーへの道
ぼっけもんデザイナーへの道ぼっけもんデザイナーへの道
ぼっけもんデザイナーへの道Hideki Akiba
 
初心者向けAndroidゲーム開発ノウハウ
初心者向けAndroidゲーム開発ノウハウ初心者向けAndroidゲーム開発ノウハウ
初心者向けAndroidゲーム開発ノウハウKentarou Mukunasi
 
HTML5 conference 2013
HTML5 conference 2013HTML5 conference 2013
HTML5 conference 2013Takuo Kihira
 
Elastic stack 世界にさらしたサーバを可視化してみた
Elastic stack 世界にさらしたサーバを可視化してみたElastic stack 世界にさらしたサーバを可視化してみた
Elastic stack 世界にさらしたサーバを可視化してみたMasamitsu Maehara
 
ハードウェア脳とソフトウェア脳
ハードウェア脳とソフトウェア脳ハードウェア脳とソフトウェア脳
ハードウェア脳とソフトウェア脳Shinichiro Niiyama
 
どこでも動くゲームを作るためのベタープラクティス
どこでも動くゲームを作るためのベタープラクティスどこでも動くゲームを作るためのベタープラクティス
どこでも動くゲームを作るためのベタープラクティス5mingame2
 
LEANSTARTUPの現場 #leanstartup
LEANSTARTUPの現場 #leanstartupLEANSTARTUPの現場 #leanstartup
LEANSTARTUPの現場 #leanstartupItsuki Kuroda
 
今日こそわかる、安全なWebアプリの作り方2010
今日こそわかる、安全なWebアプリの作り方2010今日こそわかる、安全なWebアプリの作り方2010
今日こそわかる、安全なWebアプリの作り方2010Hiroshi Tokumaru
 
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】DeNA
 
CEDEC 2015 チートチャレンジ
CEDEC 2015 チートチャレンジCEDEC 2015 チートチャレンジ
CEDEC 2015 チートチャレンジAkira Saso
 
課題研究 JavaScriptの基礎理論と活用方法
課題研究 JavaScriptの基礎理論と活用方法課題研究 JavaScriptの基礎理論と活用方法
課題研究 JavaScriptの基礎理論と活用方法igucci
 

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

“Stay Right”ペンテスト体験:SANS Holiday Hack Challenge 2017の解説 & Walkthrough
“Stay Right”ペンテスト体験:SANS Holiday Hack Challenge 2017の解説 & Walkthrough“Stay Right”ペンテスト体験:SANS Holiday Hack Challenge 2017の解説 & Walkthrough
“Stay Right”ペンテスト体験:SANS Holiday Hack Challenge 2017の解説 & Walkthrough
 
BLEラジコン基板でIoTしてみた
BLEラジコン基板でIoTしてみたBLEラジコン基板でIoTしてみた
BLEラジコン基板でIoTしてみた
 
CODE BLUE 2014 : バグハンターの愉しみ by キヌガワマサト Masato Kinugawa
CODE BLUE 2014 : バグハンターの愉しみ by キヌガワマサト Masato KinugawaCODE BLUE 2014 : バグハンターの愉しみ by キヌガワマサト Masato Kinugawa
CODE BLUE 2014 : バグハンターの愉しみ by キヌガワマサト Masato Kinugawa
 
Alteryxの空間分析で学ぶ、最寄りの指定緊急避難場所と低水位地帯 Developers.IO Tokyo 2019
Alteryxの空間分析で学ぶ、最寄りの指定緊急避難場所と低水位地帯 Developers.IO Tokyo 2019Alteryxの空間分析で学ぶ、最寄りの指定緊急避難場所と低水位地帯 Developers.IO Tokyo 2019
Alteryxの空間分析で学ぶ、最寄りの指定緊急避難場所と低水位地帯 Developers.IO Tokyo 2019
 
PythonからV-Sido CONNECTで ロボットを操る ~ ハードウェアの絡んだ仕組みの制御を考える ~
PythonからV-Sido CONNECTで ロボットを操る ~ ハードウェアの絡んだ仕組みの制御を考える ~PythonからV-Sido CONNECTで ロボットを操る ~ ハードウェアの絡んだ仕組みの制御を考える ~
PythonからV-Sido CONNECTで ロボットを操る ~ ハードウェアの絡んだ仕組みの制御を考える ~
 
2010年11月27日土曜日FlexUserGroup勉強会 第125回 京都 Flex & Google App Engine for Java & ...
2010年11月27日土曜日FlexUserGroup勉強会 第125回 京都  Flex & Google App Engine for Java & ...2010年11月27日土曜日FlexUserGroup勉強会 第125回 京都  Flex & Google App Engine for Java & ...
2010年11月27日土曜日FlexUserGroup勉強会 第125回 京都 Flex & Google App Engine for Java & ...
 
ぼっけもんデザイナーへの道
ぼっけもんデザイナーへの道ぼっけもんデザイナーへの道
ぼっけもんデザイナーへの道
 
初心者向けAndroidゲーム開発ノウハウ
初心者向けAndroidゲーム開発ノウハウ初心者向けAndroidゲーム開発ノウハウ
初心者向けAndroidゲーム開発ノウハウ
 
HTML5 conference 2013
HTML5 conference 2013HTML5 conference 2013
HTML5 conference 2013
 
Elastic stack 世界にさらしたサーバを可視化してみた
Elastic stack 世界にさらしたサーバを可視化してみたElastic stack 世界にさらしたサーバを可視化してみた
Elastic stack 世界にさらしたサーバを可視化してみた
 
ハードウェア脳とソフトウェア脳
ハードウェア脳とソフトウェア脳ハードウェア脳とソフトウェア脳
ハードウェア脳とソフトウェア脳
 
IkaLog Presentation v1.3
IkaLog Presentation v1.3IkaLog Presentation v1.3
IkaLog Presentation v1.3
 
Miyazaki.js vol.2
Miyazaki.js vol.2Miyazaki.js vol.2
Miyazaki.js vol.2
 
どこでも動くゲームを作るためのベタープラクティス
どこでも動くゲームを作るためのベタープラクティスどこでも動くゲームを作るためのベタープラクティス
どこでも動くゲームを作るためのベタープラクティス
 
2021_recruit
2021_recruit2021_recruit
2021_recruit
 
LEANSTARTUPの現場 #leanstartup
LEANSTARTUPの現場 #leanstartupLEANSTARTUPの現場 #leanstartup
LEANSTARTUPの現場 #leanstartup
 
今日こそわかる、安全なWebアプリの作り方2010
今日こそわかる、安全なWebアプリの作り方2010今日こそわかる、安全なWebアプリの作り方2010
今日こそわかる、安全なWebアプリの作り方2010
 
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
 
CEDEC 2015 チートチャレンジ
CEDEC 2015 チートチャレンジCEDEC 2015 チートチャレンジ
CEDEC 2015 チートチャレンジ
 
課題研究 JavaScriptの基礎理論と活用方法
課題研究 JavaScriptの基礎理論と活用方法課題研究 JavaScriptの基礎理論と活用方法
課題研究 JavaScriptの基礎理論と活用方法
 

Mais de Masaru Nagaku

GTMF2018大阪Meet-ups
GTMF2018大阪Meet-upsGTMF2018大阪Meet-ups
GTMF2018大阪Meet-upsMasaru Nagaku
 
教育・研究クラウドサービスのためのパターンランゲージ
教育・研究クラウドサービスのためのパターンランゲージ教育・研究クラウドサービスのためのパターンランゲージ
教育・研究クラウドサービスのためのパターンランゲージMasaru Nagaku
 
会議室を現場にする! リアルタイム共同編集によるプロトタイピング
会議室を現場にする! リアルタイム共同編集によるプロトタイピング会議室を現場にする! リアルタイム共同編集によるプロトタイピング
会議室を現場にする! リアルタイム共同編集によるプロトタイピングMasaru Nagaku
 
人類の単一個体融合に向けて
人類の単一個体融合に向けて人類の単一個体融合に向けて
人類の単一個体融合に向けてMasaru Nagaku
 
An Experiment of 1/319
An Experiment of 1/319An Experiment of 1/319
An Experiment of 1/319Masaru Nagaku
 
ワークショップ「ゲーム開発チームにおけるパトレット」
ワークショップ「ゲーム開発チームにおけるパトレット」ワークショップ「ゲーム開発チームにおけるパトレット」
ワークショップ「ゲーム開発チームにおけるパトレット」Masaru Nagaku
 
ゲーム業界から見たアジャイル開発
ゲーム業界から見たアジャイル開発ゲーム業界から見たアジャイル開発
ゲーム業界から見たアジャイル開発Masaru Nagaku
 

Mais de Masaru Nagaku (9)

GTMF2018大阪Meet-ups
GTMF2018大阪Meet-upsGTMF2018大阪Meet-ups
GTMF2018大阪Meet-ups
 
教育・研究クラウドサービスのためのパターンランゲージ
教育・研究クラウドサービスのためのパターンランゲージ教育・研究クラウドサービスのためのパターンランゲージ
教育・研究クラウドサービスのためのパターンランゲージ
 
会議室を現場にする! リアルタイム共同編集によるプロトタイピング
会議室を現場にする! リアルタイム共同編集によるプロトタイピング会議室を現場にする! リアルタイム共同編集によるプロトタイピング
会議室を現場にする! リアルタイム共同編集によるプロトタイピング
 
人類の単一個体融合に向けて
人類の単一個体融合に向けて人類の単一個体融合に向けて
人類の単一個体融合に向けて
 
GameJamCanvas
GameJamCanvasGameJamCanvas
GameJamCanvas
 
An Experiment of 1/319
An Experiment of 1/319An Experiment of 1/319
An Experiment of 1/319
 
ワークショップ「ゲーム開発チームにおけるパトレット」
ワークショップ「ゲーム開発チームにおけるパトレット」ワークショップ「ゲーム開発チームにおけるパトレット」
ワークショップ「ゲーム開発チームにおけるパトレット」
 
ゲーム業界から見たアジャイル開発
ゲーム業界から見たアジャイル開発ゲーム業界から見たアジャイル開発
ゲーム業界から見たアジャイル開発
 
Xp20120915
Xp20120915Xp20120915
Xp20120915
 

Último

Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdffurutsuka
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 

Último (9)

Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 

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

  • 1. Copyright (C) 2013 National Institute of Informatics, All rights reserved. 「モデル検査」のススメ (ゲームシナリオ進行編) 2013年8月21日 国立情報学研究所 GRACEセンター/先端ICTセンター 長久勝 mailto : nagaku@nii.ac.jp Twitter : @mnagaku
  • 2. Copyright (C) 2013 National Institute of Informatics, All rights reserved. 2 がいよう  仕様の通りに正しく振る舞うソフトウェアを開発するのは 極めて困難であるが、ソフトウェア工学において検討され てきた「モデル検査」は、ソフトウェアをモデル化し、その 振る舞いを網羅的に検証することで、仕様の通りに正しく 振る舞うソフトウェアの開発を支援する。  コンピュータゲームにおけるシナリオ進行は、状態遷移 に基づくスクリプト表現(DSL)で記述されることが多く、モ デル検査を行うためのモデル表現と親和性が高い。  本講演では、簡単なノベルゲームエンジンを示し、その上 に記述されたゲームのシナリオ進行を、モデル検査によ って検証できることを示す。
  • 3. Copyright (C) 2013 National Institute of Informatics, All rights reserved. 3 じゅこうすきるとえられるちけん  受講スキル 大学教養レベルの論理学。ノベルゲームなどの スクリプトが書ける程度のゲーム開発経験  得られる知見 ゲームシナリオ進行に関してモデル検査を使うた めの具体的なノウハウ。ゲーム開発にモデル検 査を導入するためのヒント
  • 4. 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ソルバー」。
  • 5. Copyright (C) 2013 National Institute of Informatics, All rights reserved. 5 おはなしするおじさん  日科技連SQuBOK開発領域委員  もうすぐ改定作業が終わります  最新刊「ゲームクリエイターが知るべき97のこと②」  今日の話は①の方の話だけど
  • 6. Copyright (C) 2013 National Institute of Informatics, All rights reserved. 6 かいじょうあんけーと  職種 プログラマ スクリプタ、レベルデザイナ 企画、シナリオライタ その他  知識 三段論法が分かる 状態機械が分かる 網羅的試験が分かる
  • 7. Copyright (C) 2013 National Institute of Informatics, All rights reserved. 7 おしながき  正しく動くソフトウェア  モデル検査  ゲームシナリオ  デモ
  • 8. Copyright (C) 2013 National Institute of Informatics, All rights reserved. 8 ただしくうごくそふとうぇあ  正しく動く≠イイ感じ 「イイ感じ」は曖昧 何が「正しい」か決めて、 それが損なわれないように動くのが「正しく動く」  何が「正しい」か書くのが仕様書 何が「正しい」かを明らかにするために、 何が「正しくない」か書くこともある 「正しい」とも「正しくない」とも判断できない部分が 残っている仕様書は「『正しくない』仕様書」
  • 9. Copyright (C) 2013 National Institute of Informatics, All rights reserved. 9 ただしくうごくそふとうぇあ  「戦闘で勝つとアイテムがもらえる」 大雑把過ぎて何が「正しい」挙動か分からない  「戦闘に勝った後、戦闘画面からフィールド画面 に戻ると、敵の居た場所に、別途定める確率で、 別途定めるアイテムが入った宝箱が出現する。 宝箱に隣接した位置で、宝箱を向いて、Aボタン を押すと、アイテムを取得した旨の演出が行わ れ、持ち物にアイテムが加えられる」 確率やアイテムの種別は定めた通りか、宝箱の どの方向からも開けられるか、持ち物にちゃんと アイテムが入るか
  • 10. Copyright (C) 2013 National Institute of Informatics, All rights reserved. 10 ただしくうごくそふとうぇあ  宝箱からアイテムを取らないで別の画面に移動 したらどうなる?取らないままじっとしていたらど うなる? 異常系とかも明示しないとダメ 必要なら非機能についても書く  段階的詳細化 大雑把な要求から、実装や試験が可能な仕様に 詳細化していく 各段階での対応関係(トレーサビリティ)、守るべ き性質を壊さないように工夫して行う
  • 11. Copyright (C) 2013 National Institute of Informatics, All rights reserved. 11 もでるけんさ  仕様書に書かれた「正しい」を、設計もしくは実装 が守っているか検証するための手法の一つ  検査対象となるシステムを 状態機械としてモデル化  モデル上の全ての状態遷移について 網羅的に「正しい」が破られないか探す
  • 12. 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円玉排出 購入ボタン押下 / 商品排出 購入ボタン押下 購入ボタン押下
  • 13. Copyright (C) 2013 National Institute of Informatics, All rights reserved. 13 じょうたいきかいでみるただしさ  どんな状態からでも商品を得る遷移が存在する 内部留保0円 内部留保100円 100円玉投入 内部留保50円 50円玉投入 50円玉投入 100円玉投入 / 50円玉排出 50円玉投入 / 50円玉排出 100円玉投入 / 100円玉排出 購入ボタン押下 / 商品排出 購入ボタン押下 購入ボタン押下
  • 14. Copyright (C) 2013 National Institute of Informatics, All rights reserved. 14 じょうたいきかいでみるただしくなさ  どんな状態からでも商品を得る遷移が 存在する? 内部留保0円 内部留保100円 100円玉投入 内部留保50円 50円玉投入 50円玉投入 / 50円玉排出 100円玉投入 / 100円玉排出 購入ボタン押下 / 商品排出 購入ボタン押下
  • 15. Copyright (C) 2013 National Institute of Informatics, All rights reserved. 15 もでるけんさき  モデル検査器  「状態機械で見る正しさ」を検査するツール  SPIN、SMV、UPPAAL、LTSA、FDR2、PAT、 JavaPathFinder、CBMC、SyncStitch、etc…  今日はLTSAを紹介します
  • 16. 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
  • 17. 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円玉排出 購入ボタン押下 / 商品排出 購入ボタン押下
  • 18. 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
  • 19. 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
  • 20. Copyright (C) 2013 National Institute of Informatics, All rights reserved. 20 げーむしなりお  攻略情報でフローチャートがよく出てくる ゲームシナリオは状態機械で表現可能  フラグが立つ ゲームシナリオ進行に使われる道具は 限られている フラグは進行状態を表す フラグの変化に注目したモデル化で検査ができる
  • 21. Copyright (C) 2013 National Institute of Informatics, All rights reserved. 21 げーむしなりお do / 鍵取得=false 開始 さて進めて どんどん進めて ぐるぐる脱出最後のドア 探索 do / 鍵取得=true 鍵発見 もうないドア開 開く 開かない 終了 次へ 次へ 次へ 次へ 周りを探すドアを開ける 次へ [鍵取得==false] 次へ [鍵取得==true] 次へ 次へ 次へ [鍵取得==true] 次へ [鍵取得==false] 次へ 次へ 次へ
  • 22. 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にコピペで持って行く ブラウザによってコピペ不可なのがあるので注意
  • 23. 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)」 と等価か調べる  鍵を発見していないのにドアが開いたり、鍵を複数回発見してからドアが開いたりすると、等価にならない
  • 24. Copyright (C) 2013 National Institute of Informatics, All rights reserved. 24 げーむしなりおともでるけんさ  デモでの不具合は単純に見える 人間の認識可能な量は簡単に超えてしまう  モデル検査は本来、並行システムの検証に用い られるが、今回題材としているシナリオ進行では 並行性を扱わない  一般的なゲームシナリオ進行では、並行性がな い、もしくは、既に並行合成が終わった後の並行 性がないプロセスを扱う  並行性のないモデル化ができるので、状態爆発 を回避できる
  • 25. Copyright (C) 2013 National Institute of Informatics, All rights reserved. 25 ひんと  スクリプトも、リポジトリにコミットした時、CIでモデ ル検査される仕組みだと、うれしい  ルールやツールを工夫すれば、ゲーム内の設定 の一貫性などを検査することも可能
  • 26. 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)  自分を殺すのが必ず猫だとした場合、 自分が死んだ時に、既に猫が死んでいたらおかしい  ほんとは、死んだら生き返らない検査項目も必要だけど、ここでは割愛  物語の内容についての制約も検査できる  モデル化に工夫しておくと、自動化も可能  キャラ表示命令から香盤表を自動生成して、その情報を使うとか  シーンにアノテーション(タグ)を付けて、遷移以外のイベントを自動で埋め込めるようにするとか
  • 27. Copyright (C) 2013 National Institute of Informatics, All rights reserved. 27 かたよったさんこうぶんけん  CSPベースのモデル検査器は、LTSAの他にも FDR2やPATなど、結構ある
  • 28. Copyright (C) 2013 National Institute of Informatics, All rights reserved. 28 ふつうのさんこうぶんけん  日本語だと中島先生のSPIN本かな
  • 29. 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
  • 30. Copyright (C) 2013 National Institute of Informatics, All rights reserved. 30 このりんぐ、われわれのうえに、 ひとり、かみがいる  菅野ひろゆき(1968-2011) 「この世の果てで恋を唄う少女YU-NO」に代表さ れる複雑なシナリオ進行において先駆的  もし「複雑なシナリオ進行」の開発コストが低かっ たとしたら、もっとシナリオ進行で遊ばせるゲー ムが増えるのではないだろうか  モデル検査をその道具に使えないだろうか  アニメで表現できない面白さを
  • 31. Copyright (C) 2013 National Institute of Informatics, All rights reserved. 31 ここまでよんでくれてありがとうね  Twitterで絡んでもらえば、いろいろお話します @mnagaku  今回のセッション、いろいろ反省した 「ゲームとモデル検査ワークショップ」をやる ハンズオンで体験してもらう会 少人数で、 参加者各自が何がしかの納得を持って帰れる会 平日20時-22時、神保町を予定 そのうちTwitterで情報流します
  • 32. Copyright (C) 2013 National Institute of Informatics, All rights reserved. 32 じょうほうけんってどんなとこ?  国立情報学研究所  http://www.nii.ac.jp/  講演者の所属する国立情報学研究所は、情報学という新しい 学問分野での「未来価値創成」を目指すわが国唯一の学術総 合研究所として、ネットワーク、ソフトウェア、コンテンツなどの 情報関連分野の新しい理論・方法論から応用展開までの研究 開発を総合的に推進しています。また、大学共同利用機関と して、学術コミュニティ全体の研究・教育活動に不可欠な最先 端学術情報基盤(サイバー・サイエンス・インフラストラクチャ: CSI)の構築を進めるとともに、全国の大学や研究機関はもと より民間企業やさまざまな社会活動との連携・協力を重視した 運営を行っています。民間企業出身の研究者も在籍しており、 民間企業との共同研究も多く行われています。
  • 33. Copyright (C) 2013 National Institute of Informatics, All rights reserved. 33 とっぷえすいーってなあに?  トップエスイー  http://www.topse.jp/  講演者が国立情報学研究所GRACEセンターの一員として運 営に参加しているソフトウェア工学の社会人向け教育プログラ ム「トップエスイー」は、ソフトウェアシステム構築の現場で強力 なツール類を十分利用できる”スーパーアーキテクト”を育成 するために創設されました。先端的な教材を基に、ソフトウェア 産業における次世代リーダの育成を行っています。モデル検 査などソフトウェアの設計を検証する技術も学ぶことができま す。これまで7期189名の修了生を輩出しており、講演者も2期 生として修了制作「FDRによるRPGシナリオの検証」で優秀賞 を獲得しています。