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

20
ゲームの自動テストを 作ってみた 竹内 佑介 2015/08/23

Upload: yuusuke-takeuchi

Post on 16-Apr-2017

543 views

Category:

Software


0 download

TRANSCRIPT

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

ゲームの自動テストを

作ってみた

竹内 佑介

2 0 1 5 / 0 8 / 2 3

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

ゲーム画面のテストコードを 書くの難しいと思っていませんか?

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

ちょっと工夫すれば 案外簡単にできるんです

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

今日はその方法を皆さんと共有したいと思います

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

ゲーム画面の自動テストを

実現するには何が必要でしょうか?

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

こんなんが必要だと思います

• テスト対象だけ切り出せる

• 自動的に操作ができる

• 自動的に検証ができる(いわゆるアサーション)

• 好きなテストコードをいつでも実行できる

• テストコード一覧を1コマンドで実行できる

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

テスト対象だけ切り出すには?

• ゲームライブラリの基本機能を使えばOK

• 最近のは大体スプライト、シーン、グループとかあるのでそれを使えばいいでしょう

• スプライトについてhttps://ja.wikipedia.org/wiki/%E3%82%B9%E3%83%97%E3%83%A9%E3%82%A4%E3%83%88_(%E6%98%A0%E5%83%8F%E6%8A%80%E8%A1%93)

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

自動的に操作するには その1

• タイムラインとイベント発火を組み合わせれば、大体のことはできるはず

• タイムラインの詳細、要はフレーム補間http://wise9.github.io/enchant.js/doc/core/ja/symbols/enchant.Timeline.html

Page 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

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

自動的に検証するには? その1

• どこを検証するのか

• 前提としてゲーム画面すべてを自動検証するのは無理

• 演出、操作感とかは人間が直接みた方が早い

• 論理的には画像比較、操作履歴の比較をすれば上記項目もテストはできるけど、どう考えても労力に見合わない

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

自動的に検証するには? その2

• 人間の目では確認しずらいところを検証する

• 例えば・・・・・・、

• 何かした時に、意図したイベントが発火されるか

• サーバへの送信データは正しいか

• ボタン押下->API実行、という流れは正しいのか

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

自動的に検証するには? その3

• これらを検証するにはenchant.jsというかjavaScriptの場合は、以下を検証することになる

• 意図したコールバック関数が、意図したパラメータと共に呼ばれるか

• これなら、javaScriptにあるアサーションライブラリでいくらでも検証できる

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

自動的に検証するには? その4

• 私はアサーションライブラリとしてchaiを使っていますhttp://chaijs.com/api/assert/

• アサーションしているコードの例(53行目あたり)

https://github.com/kaidouji85/gbraver/blob/d276ebce9ac570d9528efc2106a1467d5cdc7f36/publicForTest/javascripts/battleEndTest/battleEndForWinTest.js#L53

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

テストコードをいつでも実行するは? その1

• ここはゲームの作りに依存するので、一概にこれという方法がない

• 自分の場合はテストコードをリクエストパラメータに渡したら、それを実行してくれるサイトを作った

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

• 例えばこんな感じhttp://<ゲームのドメイン>/testClient?code=<テストコード名>

• 公開しているテスト環境ではこんな感じで実行できますhttp://gbraver-beta.herokuapp.com/testClient?code=/javascripts/changeSceneTest/battleToNextStoryTest.js

テストコードをいつでも実行するは? その2

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

• テストコード一覧を表示するサイトも作ったhttp://gbraver-beta.herokuapp.com/testList

テストコードをいつでも実行するは? その3

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

テスト一覧を実行するには? その1

• これもゲームの作りに依存するので、これを使うという方法はない

• 自分の場合はさっきのテスト一覧表示サイトとseleniumを組み合わせて、なんとか実現した

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

自分で作ってみたコードはここにあります

https://github.com/kaidouji85/gbraver

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

作ってみたコードについて

• テストコードやプロダクトコードはここにありますhttps://github.com/kaidouji85/gbraver

• テストコード一覧はここで見れますhttp://gbraver-beta.herokuapp.com/testList

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

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

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