SlideShare uma empresa Scribd logo
1 de 20
Baixar para ler offline
ゲーム の 自 動 テス ト を
作 って み た
竹 内   佑 介
2 0 1 5 / 0 8 / 2 3
ゲーム 画 面 の テス ト コ ー ド を 

書くの難しいと思っていませんか?
ち ょ っ と 工 夫 す れ ば 

案 外 簡 単 に で き る んで す
今 日 はそ の 方 法 を 皆 さ ん と
共 有 し た い と 思 い ま す
ゲーム 画 面 の 自 動 テス ト を
実現するには何が必要でしょうか?
こ ん な ん が 必 要 だ と 思 い ま す
• テスト対象だけ切り出せる
• 自動的に操作ができる
• 自動的に検証ができる(いわゆるアサーション)
• 好きなテストコードをいつでも実行できる
• テストコード一覧を1コマンドで実行できる
テス ト 対 象 だ け 切 り 出 す に は ?
• ゲームライブラリの基本機能を使えばOK
• 最近のは大体スプライト、シーン、グループとかある
のでそれを使えばいいでしょう
• スプライトについて

https://ja.wikipedia.org/wiki/
%E3%82%B9%E3%83%97%E3%83%A9%E3%82%A4%E
3%83%88_(%E6%98%A0%E5%83%8F%E6%8A
%80%E8%A1%93)
自 動 的 に 操 作 す る に は   そ の 1
• タイムラインとイベント発火を組み合わせれば、大体
のことはできるはず
• タイムラインの詳細、要はフレーム補間

http://wise9.github.io/enchant.js/doc/core/ja/symbols/
enchant.Timeline.html
自 動 的 に 操 作 す る に は   そ の 2
• enchant.jsでの実装例は以下の通り

https://github.com/kaidouji85/gbraver/blob/
d276ebce9ac570d9528efc2106a1467d5cdc7f36/
publicForTest/javascripts/testlib/testUtil.js

• 実際に動いてるイメージはこんな感じです

http://gbraver-beta.herokuapp.com/testClient?code=/
javascripts/changeSceneTest/
selectArmdozerToTopForPrevButtonTest.js
自 動 的 に 検 証 す る に は ?   そ の 1
• どこを検証するのか
• 前提としてゲーム画面すべてを自動検証するのは無理
• 演出、操作感とかは人間が直接みた方が早い
• 論理的には画像比較、操作履歴の比較をすれば上記項
目もテストはできるけど、どう考えても労力に見合わ
ない
自 動 的 に 検 証 す る に は ?   そ の 2
• 人間の目では確認しずらいところを検証する
• 例えば・・・・・・、
• 何かした時に、意図したイベントが発火されるか
• サーバへの送信データは正しいか
• ボタン押下->API実行、という流れは正しいのか
自 動 的 に 検 証 す る に は ?   そ の 3
• これらを検証するにはenchant.jsというかjavaScriptの
場合は、以下を検証することになる
• 意図したコールバック関数が、意図したパラメータと
共に呼ばれるか
• これなら、javaScriptにあるアサーションライブラリで
いくらでも検証できる
自 動 的 に 検 証 す る に は ?   そ の 4
• 私はアサーションライブラリとしてchaiを使っていま
す

http://chaijs.com/api/assert/
• アサーションしているコードの例(53行目あたり)

https://github.com/kaidouji85/gbraver/blob/
d276ebce9ac570d9528efc2106a1467d5cdc7f36/
publicForTest/javascripts/battleEndTest/
battleEndForWinTest.js#L53
テス ト コ ー ド を い つ で も 実 行 す る は ?   そ の 1
• ここはゲームの作りに依存するので、一概にこれとい
う方法がない
• 自分の場合はテストコードをリクエストパラメータに
渡したら、それを実行してくれるサイトを作った
• 例えばこんな感じ

http://<ゲームのドメイン>/testClient?code=<テスト
コード名>
• 公開しているテスト環境ではこんな感じで実行できま
す

http://gbraver-beta.herokuapp.com/testClient?code=/
javascripts/changeSceneTest/battleToNextStoryTest.js
テス ト コ ー ド を い つ で も 実 行 す る は ?   そ の 2
• テストコード一覧を表示するサイトも作った

http://gbraver-beta.herokuapp.com/testList
テス ト コ ー ド を い つ で も 実 行 す る は ?   そ の 3
テス ト 一 覧 を 実 行 す る に は ?   そ の 1
• これもゲームの作りに依存するので、これを使うとい
う方法はない
• 自分の場合はさっきのテスト一覧表示サイトと
seleniumを組み合わせて、なんとか実現した
自 分 で 作 って み た コ ー ド は
こ こ に あ り ま す
https://github.com/kaidouji85/gbraver
作 って み た コ ー ド に つ いて
• テストコードやプロダクトコードはここにあります

https://github.com/kaidouji85/gbraver
• テストコード一覧はここで見れます

http://gbraver-beta.herokuapp.com/testList
• ゲームはここで遊べます

http://gbraver.herokuapp.com/

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

Mais conteúdo relacionado

Mais procurados

HeapStats(Java解析ツールバトル)
HeapStats(Java解析ツールバトル)HeapStats(Java解析ツールバトル)
HeapStats(Java解析ツールバトル)Yasumasa Suenaga
 
Flash Playerの作り方
Flash Playerの作り方Flash Playerの作り方
Flash Playerの作り方Yu Kobayashi
 
UnitTestのためのクラス設計
UnitTestのためのクラス設計UnitTestのためのクラス設計
UnitTestのためのクラス設計Takeshi Ishida
 
やってよかったOS作り
やってよかったOS作りやってよかったOS作り
やってよかったOS作りHidemi Kawai
 
誰でも出来るosxでのローカルなウェブ開発環境構築
誰でも出来るosxでのローカルなウェブ開発環境構築誰でも出来るosxでのローカルなウェブ開発環境構築
誰でも出来るosxでのローカルなウェブ開発環境構築Hiroshi Yamato
 
20140405 mavenセントラルリポジトリへの登録のコツ 第5回渋谷java
20140405 mavenセントラルリポジトリへの登録のコツ 第5回渋谷java20140405 mavenセントラルリポジトリへの登録のコツ 第5回渋谷java
20140405 mavenセントラルリポジトリへの登録のコツ 第5回渋谷javaY Watanabe
 
WEB開発動作テストの自動化 を行うSeleniumの紹介
WEB開発動作テストの自動化 を行うSeleniumの紹介WEB開発動作テストの自動化 を行うSeleniumの紹介
WEB開発動作テストの自動化 を行うSeleniumの紹介Nobuhiko Futagami
 
うわ…私のEmacs力、低すぎ...?
うわ…私のEmacs力、低すぎ...?うわ…私のEmacs力、低すぎ...?
うわ…私のEmacs力、低すぎ...?Masahiro Sano
 
PHPカンファレンス2014の懇親会飛び込みLT資料
PHPカンファレンス2014の懇親会飛び込みLT資料PHPカンファレンス2014の懇親会飛び込みLT資料
PHPカンファレンス2014の懇親会飛び込みLT資料Junichi Ishida
 
Apache Archiva を試す
Apache Archiva を試すApache Archiva を試す
Apache Archiva を試すbouzuya
 
PHPべんちまーく
PHPべんちまーくPHPべんちまーく
PHPべんちまーくchichi1091
 
Power shellmemo
Power shellmemoPower shellmemo
Power shellmemoytanno
 
2021 01-25 lt sho kato
2021 01-25 lt sho kato2021 01-25 lt sho kato
2021 01-25 lt sho katokatosho1
 

Mais procurados (17)

CnPack の紹介
CnPack の紹介CnPack の紹介
CnPack の紹介
 
HeapStats(Java解析ツールバトル)
HeapStats(Java解析ツールバトル)HeapStats(Java解析ツールバトル)
HeapStats(Java解析ツールバトル)
 
Flash Playerの作り方
Flash Playerの作り方Flash Playerの作り方
Flash Playerの作り方
 
PHP agile test tips
PHP agile test tipsPHP agile test tips
PHP agile test tips
 
UnitTestのためのクラス設計
UnitTestのためのクラス設計UnitTestのためのクラス設計
UnitTestのためのクラス設計
 
CgiSecure
CgiSecureCgiSecure
CgiSecure
 
やってよかったOS作り
やってよかったOS作りやってよかったOS作り
やってよかったOS作り
 
誰でも出来るosxでのローカルなウェブ開発環境構築
誰でも出来るosxでのローカルなウェブ開発環境構築誰でも出来るosxでのローカルなウェブ開発環境構築
誰でも出来るosxでのローカルなウェブ開発環境構築
 
20140405 mavenセントラルリポジトリへの登録のコツ 第5回渋谷java
20140405 mavenセントラルリポジトリへの登録のコツ 第5回渋谷java20140405 mavenセントラルリポジトリへの登録のコツ 第5回渋谷java
20140405 mavenセントラルリポジトリへの登録のコツ 第5回渋谷java
 
WEB開発動作テストの自動化 を行うSeleniumの紹介
WEB開発動作テストの自動化 を行うSeleniumの紹介WEB開発動作テストの自動化 を行うSeleniumの紹介
WEB開発動作テストの自動化 を行うSeleniumの紹介
 
うわ…私のEmacs力、低すぎ...?
うわ…私のEmacs力、低すぎ...?うわ…私のEmacs力、低すぎ...?
うわ…私のEmacs力、低すぎ...?
 
PHPカンファレンス2014の懇親会飛び込みLT資料
PHPカンファレンス2014の懇親会飛び込みLT資料PHPカンファレンス2014の懇親会飛び込みLT資料
PHPカンファレンス2014の懇親会飛び込みLT資料
 
Apache Archiva を試す
Apache Archiva を試すApache Archiva を試す
Apache Archiva を試す
 
PHPべんちまーく
PHPべんちまーくPHPべんちまーく
PHPべんちまーく
 
HighBatch
HighBatchHighBatch
HighBatch
 
Power shellmemo
Power shellmemoPower shellmemo
Power shellmemo
 
2021 01-25 lt sho kato
2021 01-25 lt sho kato2021 01-25 lt sho kato
2021 01-25 lt sho kato
 

Semelhante a ゲームの自動テストを 作ってみた

ブラウザ自動化ツール カオスマップ風 - STAC2018 LT
ブラウザ自動化ツール カオスマップ風 - STAC2018 LTブラウザ自動化ツール カオスマップ風 - STAC2018 LT
ブラウザ自動化ツール カオスマップ風 - STAC2018 LThnisiji
 
自動テストのすすめ
自動テストのすすめ自動テストのすすめ
自動テストのすすめKatsunori Kanda
 
Pythonを使った簡易診断スクリプトの作り方
Pythonを使った簡易診断スクリプトの作り方Pythonを使った簡易診断スクリプトの作り方
Pythonを使った簡易診断スクリプトの作り方Yuichi Hattori
 
開発者による現実的な自動化テスト及びRubyのテストツールについて
開発者による現実的な自動化テスト及びRubyのテストツールについて開発者による現実的な自動化テスト及びRubyのテストツールについて
開発者による現実的な自動化テスト及びRubyのテストツールについてTakaaki Kasai
 
継続的インテグレーション3分クッキング
継続的インテグレーション3分クッキング継続的インテグレーション3分クッキング
継続的インテグレーション3分クッキングTakayuki Kondou
 
Asakusa バッチの運用を支える技術
Asakusa バッチの運用を支える技術Asakusa バッチの運用を支える技術
Asakusa バッチの運用を支える技術KinebuchiTomo
 
FriendlyとTestAssistantProでテスト自動化やってみた
FriendlyとTestAssistantProでテスト自動化やってみたFriendlyとTestAssistantProでテスト自動化やってみた
FriendlyとTestAssistantProでテスト自動化やってみたNakaiYusaku
 
Sansan における Android アプリ自動テスト導入事例
Sansan における Android アプリ自動テスト導入事例Sansan における Android アプリ自動テスト導入事例
Sansan における Android アプリ自動テスト導入事例健一 辰濱
 
Behat Driven Development
Behat Driven DevelopmentBehat Driven Development
Behat Driven DevelopmentRyo Tomidokoro
 
[UE4]自動テストでもっと楽したい!
[UE4]自動テストでもっと楽したい![UE4]自動テストでもっと楽したい!
[UE4]自動テストでもっと楽したい!com044
 
採用LT「まだお祈りデプロイで消耗してるの?」
採用LT「まだお祈りデプロイで消耗してるの?」採用LT「まだお祈りデプロイで消耗してるの?」
採用LT「まだお祈りデプロイで消耗してるの?」Takayuki Fukumoto
 
密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境Fumihito Yokoyama
 
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情Junichi Ishida
 
Azure VMを検証に使う - 便利なHyper-Vスナップショットを使う方法
Azure VMを検証に使う - 便利なHyper-Vスナップショットを使う方法Azure VMを検証に使う - 便利なHyper-Vスナップショットを使う方法
Azure VMを検証に使う - 便利なHyper-Vスナップショットを使う方法Study Group by SciencePark Corp.
 
Acceptance testは開発者がつくるべき(公開版)
Acceptance testは開発者がつくるべき(公開版)Acceptance testは開発者がつくるべき(公開版)
Acceptance testは開発者がつくるべき(公開版)Ken Muryoi
 
Jenkins使ってみた~Windows編~
Jenkins使ってみた~Windows編~Jenkins使ってみた~Windows編~
Jenkins使ってみた~Windows編~Yuta Matsumura
 
GCSアジャイル開発を使ったゲームの作り方
 GCSアジャイル開発を使ったゲームの作り方 GCSアジャイル開発を使ったゲームの作り方
GCSアジャイル開発を使ったゲームの作り方Hiroyuki Tanaka
 

Semelhante a ゲームの自動テストを 作ってみた (20)

ブラウザ自動化ツール カオスマップ風 - STAC2018 LT
ブラウザ自動化ツール カオスマップ風 - STAC2018 LTブラウザ自動化ツール カオスマップ風 - STAC2018 LT
ブラウザ自動化ツール カオスマップ風 - STAC2018 LT
 
自動テストのすすめ
自動テストのすすめ自動テストのすすめ
自動テストのすすめ
 
Pythonを使った簡易診断スクリプトの作り方
Pythonを使った簡易診断スクリプトの作り方Pythonを使った簡易診断スクリプトの作り方
Pythonを使った簡易診断スクリプトの作り方
 
開発者による現実的な自動化テスト及びRubyのテストツールについて
開発者による現実的な自動化テスト及びRubyのテストツールについて開発者による現実的な自動化テスト及びRubyのテストツールについて
開発者による現実的な自動化テスト及びRubyのテストツールについて
 
Gamedevenvstudy1
Gamedevenvstudy1Gamedevenvstudy1
Gamedevenvstudy1
 
継続的インテグレーション3分クッキング
継続的インテグレーション3分クッキング継続的インテグレーション3分クッキング
継続的インテグレーション3分クッキング
 
ゆるかわPhp
ゆるかわPhpゆるかわPhp
ゆるかわPhp
 
Asakusa バッチの運用を支える技術
Asakusa バッチの運用を支える技術Asakusa バッチの運用を支える技術
Asakusa バッチの運用を支える技術
 
FriendlyとTestAssistantProでテスト自動化やってみた
FriendlyとTestAssistantProでテスト自動化やってみたFriendlyとTestAssistantProでテスト自動化やってみた
FriendlyとTestAssistantProでテスト自動化やってみた
 
Sansan における Android アプリ自動テスト導入事例
Sansan における Android アプリ自動テスト導入事例Sansan における Android アプリ自動テスト導入事例
Sansan における Android アプリ自動テスト導入事例
 
Behat Driven Development
Behat Driven DevelopmentBehat Driven Development
Behat Driven Development
 
[UE4]自動テストでもっと楽したい!
[UE4]自動テストでもっと楽したい![UE4]自動テストでもっと楽したい!
[UE4]自動テストでもっと楽したい!
 
採用LT「まだお祈りデプロイで消耗してるの?」
採用LT「まだお祈りデプロイで消耗してるの?」採用LT「まだお祈りデプロイで消耗してるの?」
採用LT「まだお祈りデプロイで消耗してるの?」
 
密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境
 
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
 
Azure VMを検証に使う - 便利なHyper-Vスナップショットを使う方法
Azure VMを検証に使う - 便利なHyper-Vスナップショットを使う方法Azure VMを検証に使う - 便利なHyper-Vスナップショットを使う方法
Azure VMを検証に使う - 便利なHyper-Vスナップショットを使う方法
 
Acceptance testは開発者がつくるべき(公開版)
Acceptance testは開発者がつくるべき(公開版)Acceptance testは開発者がつくるべき(公開版)
Acceptance testは開発者がつくるべき(公開版)
 
Vagrant chef
Vagrant chefVagrant chef
Vagrant chef
 
Jenkins使ってみた~Windows編~
Jenkins使ってみた~Windows編~Jenkins使ってみた~Windows編~
Jenkins使ってみた~Windows編~
 
GCSアジャイル開発を使ったゲームの作り方
 GCSアジャイル開発を使ったゲームの作り方 GCSアジャイル開発を使ったゲームの作り方
GCSアジャイル開発を使ったゲームの作り方
 

Mais de Yuusuke Takeuchi

自作ゲームをWebpack対応させてみた
自作ゲームをWebpack対応させてみた自作ゲームをWebpack対応させてみた
自作ゲームをWebpack対応させてみたYuusuke Takeuchi
 
本職のプログラマーが趣味で対戦ゲーム作ってみた Part10
本職のプログラマーが趣味で対戦ゲーム作ってみた Part10本職のプログラマーが趣味で対戦ゲーム作ってみた Part10
本職のプログラマーが趣味で対戦ゲーム作ってみた Part10Yuusuke Takeuchi
 
Passportでサクッと外部認証を組み込もう
Passportでサクッと外部認証を組み込もうPassportでサクッと外部認証を組み込もう
Passportでサクッと外部認証を組み込もうYuusuke Takeuchi
 
Node.jsで対戦ゲーム作ったよ
Node.jsで対戦ゲーム作ったよNode.jsで対戦ゲーム作ったよ
Node.jsで対戦ゲーム作ったよYuusuke Takeuchi
 
Gブレイバー1人用モード開発案
Gブレイバー1人用モード開発案Gブレイバー1人用モード開発案
Gブレイバー1人用モード開発案Yuusuke Takeuchi
 
東京Node学園祭2014 飛び入りLT
東京Node学園祭2014 飛び入りLT東京Node学園祭2014 飛び入りLT
東京Node学園祭2014 飛び入りLTYuusuke Takeuchi
 
2014年上期Gブレイバー振り返り
2014年上期Gブレイバー振り返り2014年上期Gブレイバー振り返り
2014年上期Gブレイバー振り返りYuusuke Takeuchi
 
Html5の通信対戦ゲームをテスト駆動開発で作ってみた
Html5の通信対戦ゲームをテスト駆動開発で作ってみたHtml5の通信対戦ゲームをテスト駆動開発で作ってみた
Html5の通信対戦ゲームをテスト駆動開発で作ってみたYuusuke Takeuchi
 
Gブレイバー開発計画3スプリント目
Gブレイバー開発計画3スプリント目Gブレイバー開発計画3スプリント目
Gブレイバー開発計画3スプリント目Yuusuke Takeuchi
 
Gブレイバー開発計画 2スプリント目
Gブレイバー開発計画 2スプリント目Gブレイバー開発計画 2スプリント目
Gブレイバー開発計画 2スプリント目Yuusuke Takeuchi
 
テスト駆動ゲーム開発をJava scriptで実践 in jscafe20
テスト駆動ゲーム開発をJava scriptで実践  in jscafe20テスト駆動ゲーム開発をJava scriptで実践  in jscafe20
テスト駆動ゲーム開発をJava scriptで実践 in jscafe20Yuusuke Takeuchi
 
テスト駆動ゲーム開発をJava scriptで実践
テスト駆動ゲーム開発をJava scriptで実践テスト駆動ゲーム開発をJava scriptで実践
テスト駆動ゲーム開発をJava scriptで実践Yuusuke Takeuchi
 
Gブレイバーのことれからとこの先
Gブレイバーのことれからとこの先Gブレイバーのことれからとこの先
Gブレイバーのことれからとこの先Yuusuke Takeuchi
 
日曜プログラマーがHtml5とかで通信対戦ゲームを作ってます
日曜プログラマーがHtml5とかで通信対戦ゲームを作ってます日曜プログラマーがHtml5とかで通信対戦ゲームを作ってます
日曜プログラマーがHtml5とかで通信対戦ゲームを作ってますYuusuke Takeuchi
 
日曜プログラマーとigoogle先生
日曜プログラマーとigoogle先生日曜プログラマーとigoogle先生
日曜プログラマーとigoogle先生Yuusuke Takeuchi
 
日曜プログラマーが
1週間くらいで通信対戦ゲームを作ってみた
日曜プログラマーが
1週間くらいで通信対戦ゲームを作ってみた日曜プログラマーが
1週間くらいで通信対戦ゲームを作ってみた
日曜プログラマーが
1週間くらいで通信対戦ゲームを作ってみたYuusuke Takeuchi
 
Node.jsでサーバプログラマ デビューしよう
Node.jsでサーバプログラマ デビューしようNode.jsでサーバプログラマ デビューしよう
Node.jsでサーバプログラマ デビューしようYuusuke Takeuchi
 

Mais de Yuusuke Takeuchi (20)

Reduxについて
ReduxについてReduxについて
Reduxについて
 
自作ゲームをWebpack対応させてみた
自作ゲームをWebpack対応させてみた自作ゲームをWebpack対応させてみた
自作ゲームをWebpack対応させてみた
 
本職のプログラマーが趣味で対戦ゲーム作ってみた Part10
本職のプログラマーが趣味で対戦ゲーム作ってみた Part10本職のプログラマーが趣味で対戦ゲーム作ってみた Part10
本職のプログラマーが趣味で対戦ゲーム作ってみた Part10
 
Passportでサクッと外部認証を組み込もう
Passportでサクッと外部認証を組み込もうPassportでサクッと外部認証を組み込もう
Passportでサクッと外部認証を組み込もう
 
春のJs祭2015 lt
春のJs祭2015 lt春のJs祭2015 lt
春のJs祭2015 lt
 
Node.jsで対戦ゲーム作ったよ
Node.jsで対戦ゲーム作ったよNode.jsで対戦ゲーム作ったよ
Node.jsで対戦ゲーム作ったよ
 
Gブレイバー1人用モード開発案
Gブレイバー1人用モード開発案Gブレイバー1人用モード開発案
Gブレイバー1人用モード開発案
 
東京Node学園祭2014 飛び入りLT
東京Node学園祭2014 飛び入りLT東京Node学園祭2014 飛び入りLT
東京Node学園祭2014 飛び入りLT
 
2014年上期Gブレイバー振り返り
2014年上期Gブレイバー振り返り2014年上期Gブレイバー振り返り
2014年上期Gブレイバー振り返り
 
Enchant.js入門
Enchant.js入門Enchant.js入門
Enchant.js入門
 
Html5の通信対戦ゲームをテスト駆動開発で作ってみた
Html5の通信対戦ゲームをテスト駆動開発で作ってみたHtml5の通信対戦ゲームをテスト駆動開発で作ってみた
Html5の通信対戦ゲームをテスト駆動開発で作ってみた
 
Gブレイバー開発計画3スプリント目
Gブレイバー開発計画3スプリント目Gブレイバー開発計画3スプリント目
Gブレイバー開発計画3スプリント目
 
Gブレイバー開発計画 2スプリント目
Gブレイバー開発計画 2スプリント目Gブレイバー開発計画 2スプリント目
Gブレイバー開発計画 2スプリント目
 
テスト駆動ゲーム開発をJava scriptで実践 in jscafe20
テスト駆動ゲーム開発をJava scriptで実践  in jscafe20テスト駆動ゲーム開発をJava scriptで実践  in jscafe20
テスト駆動ゲーム開発をJava scriptで実践 in jscafe20
 
テスト駆動ゲーム開発をJava scriptで実践
テスト駆動ゲーム開発をJava scriptで実践テスト駆動ゲーム開発をJava scriptで実践
テスト駆動ゲーム開発をJava scriptで実践
 
Gブレイバーのことれからとこの先
Gブレイバーのことれからとこの先Gブレイバーのことれからとこの先
Gブレイバーのことれからとこの先
 
日曜プログラマーがHtml5とかで通信対戦ゲームを作ってます
日曜プログラマーがHtml5とかで通信対戦ゲームを作ってます日曜プログラマーがHtml5とかで通信対戦ゲームを作ってます
日曜プログラマーがHtml5とかで通信対戦ゲームを作ってます
 
日曜プログラマーとigoogle先生
日曜プログラマーとigoogle先生日曜プログラマーとigoogle先生
日曜プログラマーとigoogle先生
 
日曜プログラマーが
1週間くらいで通信対戦ゲームを作ってみた
日曜プログラマーが
1週間くらいで通信対戦ゲームを作ってみた日曜プログラマーが
1週間くらいで通信対戦ゲームを作ってみた
日曜プログラマーが
1週間くらいで通信対戦ゲームを作ってみた
 
Node.jsでサーバプログラマ デビューしよう
Node.jsでサーバプログラマ デビューしようNode.jsでサーバプログラマ デビューしよう
Node.jsでサーバプログラマ デビューしよう
 

ゲームの自動テストを 作ってみた

  • 1. ゲーム の 自 動 テス ト を 作 って み た 竹 内   佑 介 2 0 1 5 / 0 8 / 2 3
  • 2. ゲーム 画 面 の テス ト コ ー ド を 
 書くの難しいと思っていませんか?
  • 3. ち ょ っ と 工 夫 す れ ば 
 案 外 簡 単 に で き る んで す
  • 4. 今 日 はそ の 方 法 を 皆 さ ん と 共 有 し た い と 思 い ま す
  • 5. ゲーム 画 面 の 自 動 テス ト を 実現するには何が必要でしょうか?
  • 6. こ ん な ん が 必 要 だ と 思 い ま す • テスト対象だけ切り出せる • 自動的に操作ができる • 自動的に検証ができる(いわゆるアサーション) • 好きなテストコードをいつでも実行できる • テストコード一覧を1コマンドで実行できる
  • 7. テス ト 対 象 だ け 切 り 出 す に は ? • ゲームライブラリの基本機能を使えばOK • 最近のは大体スプライト、シーン、グループとかある のでそれを使えばいいでしょう • スプライトについて
 https://ja.wikipedia.org/wiki/ %E3%82%B9%E3%83%97%E3%83%A9%E3%82%A4%E 3%83%88_(%E6%98%A0%E5%83%8F%E6%8A %80%E8%A1%93)
  • 8. 自 動 的 に 操 作 す る に は   そ の 1 • タイムラインとイベント発火を組み合わせれば、大体 のことはできるはず • タイムラインの詳細、要はフレーム補間
 http://wise9.github.io/enchant.js/doc/core/ja/symbols/ enchant.Timeline.html
  • 9. 自 動 的 に 操 作 す る に は   そ の 2 • enchant.jsでの実装例は以下の通り
 https://github.com/kaidouji85/gbraver/blob/ d276ebce9ac570d9528efc2106a1467d5cdc7f36/ publicForTest/javascripts/testlib/testUtil.js
 • 実際に動いてるイメージはこんな感じです
 http://gbraver-beta.herokuapp.com/testClient?code=/ javascripts/changeSceneTest/ selectArmdozerToTopForPrevButtonTest.js
  • 10. 自 動 的 に 検 証 す る に は ?   そ の 1 • どこを検証するのか • 前提としてゲーム画面すべてを自動検証するのは無理 • 演出、操作感とかは人間が直接みた方が早い • 論理的には画像比較、操作履歴の比較をすれば上記項 目もテストはできるけど、どう考えても労力に見合わ ない
  • 11. 自 動 的 に 検 証 す る に は ?   そ の 2 • 人間の目では確認しずらいところを検証する • 例えば・・・・・・、 • 何かした時に、意図したイベントが発火されるか • サーバへの送信データは正しいか • ボタン押下->API実行、という流れは正しいのか
  • 12. 自 動 的 に 検 証 す る に は ?   そ の 3 • これらを検証するにはenchant.jsというかjavaScriptの 場合は、以下を検証することになる • 意図したコールバック関数が、意図したパラメータと 共に呼ばれるか • これなら、javaScriptにあるアサーションライブラリで いくらでも検証できる
  • 13. 自 動 的 に 検 証 す る に は ?   そ の 4 • 私はアサーションライブラリとしてchaiを使っていま す
 http://chaijs.com/api/assert/ • アサーションしているコードの例(53行目あたり)
 https://github.com/kaidouji85/gbraver/blob/ d276ebce9ac570d9528efc2106a1467d5cdc7f36/ publicForTest/javascripts/battleEndTest/ battleEndForWinTest.js#L53
  • 14. テス ト コ ー ド を い つ で も 実 行 す る は ?   そ の 1 • ここはゲームの作りに依存するので、一概にこれとい う方法がない • 自分の場合はテストコードをリクエストパラメータに 渡したら、それを実行してくれるサイトを作った
  • 17. テス ト 一 覧 を 実 行 す る に は ?   そ の 1 • これもゲームの作りに依存するので、これを使うとい う方法はない • 自分の場合はさっきのテスト一覧表示サイトと seleniumを組み合わせて、なんとか実現した
  • 18. 自 分 で 作 って み た コ ー ド は こ こ に あ り ま す https://github.com/kaidouji85/gbraver
  • 19. 作 って み た コ ー ド に つ いて • テストコードやプロダクトコードはここにあります
 https://github.com/kaidouji85/gbraver • テストコード一覧はここで見れます
 http://gbraver-beta.herokuapp.com/testList • ゲームはここで遊べます
 http://gbraver.herokuapp.com/

  • 20. ご 静 聴 あ り が と う ご ざ い ま し た