79
できるところから始めよう~ ゲーム開発支援ツールの テスト自動化事例

できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

できるところから始めよう~ ゲーム開発支援ツールの

テスト自動化事例

Page 2: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

自己紹介

• 白柳隆澄(しらやなぎ たかずみ)

– 株式会社インテリジェントシステムズ

– 総合開発部総合開発課 システムプログラマー

ゲームプログラマーとして3年間働いたのち、2010年に株式会社インテリジェントシステムズに入社。システムプログラマーとして、ゲーム開発支援ツールの開発に従事。組み込みソフトウェア、Windows ソフトウェアの開発のほか、Jenkins の管理者としてテスト自動化やビルド環境構築にも従事。

2

Page 3: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

ゲーム開発支援ツールって何?

インテリジェントシステムズの代表作

– ファイアーエムブレムシリーズ

– ペーパーマリオシリーズ

– メイドインワリオシリーズ

– 引ク押スシリーズ

– ゲーム開発支援ツール

• ゲームソフトを制作するための機材・ソフトウェア

3

Page 4: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

ゲーム開発支援ツールって何?

インテリジェントシステムズは

ゲーム開発会社であり

ツールベンダーでもある

とても珍しい会社

• ゲーム開発とツール開発で相互に情報共有

• より良いものを作るための良い関係

4

Page 5: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

ゲーム開発支援ツールって何?

• ハードウェア(機材) 市販のゲーム機ではできないデバッグや 映像出力などを可能にした開発専用のハードウェア

• ソフトウェア ハードウェアを操作するためのソフトウェア

– デバッガー

– キャプチャー

– ビデオ出力

– テスティング支援

5

Page 6: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

ゲーム開発支援ツールって何?

どんなものか わかっていただけましたか?

6

Page 7: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

どういうことを話すの?

• テストとそれにまつわる自動化の話

• ゲーム開発支援ツールの開発ではこうしている!

• お話する内容が正解ではありません

• テスト自動化に関しての情報共有 意見交換ができたらいいなと考えています

7

Page 8: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

このセッションは参考になるの?

ところで、 ゲーム開発とツール開発って

全然違うんじゃないの?

8

Page 9: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

テスト自動化の観点での共通点

• ゲーム開発もツール開発も同じソフトウェア開発

• テスト自動化に対する考え方などは一緒と言って良い

• プログラミング言語も(ほぼ)一緒

• 専用ハードウェア上で動作する点も同じ

9

Page 10: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

アジェンダ

1. ゲーム開発支援ツールって何?

2. テスト自動化事例

1. 単体テスト

2. システムテスト

3. テスト戦略

3. できるところから始めよう

4. まとめ

10

Page 11: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

開発規模

• 開発メンバー

– 少人数で開発

• 開発ソフトウェア

– デバッガー

– キャプチャー

– ビデオ出力

– テスティング支援

– Visual Studio 連携

11

Page 12: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

開発規模

• プログラム開発

– C/C++

– プラットフォーム

• Windows(約45万行)

• 組み込み (約10万行)

• ゲーム機(約10万行)

• ゲーム開発支援ツールはシリーズもの

– ゲーム機の進化とともにツールも進化

– ノウハウやソースコードを引き継いで開発

12

Page 13: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

開発規模

• 継続的にアップデート

– 1~2ヶ月に1回のペースでリリース

– 常に新規機能を開発

• デバッグ

– すべて自分たちでデバッグ

– 変更点のみに集中してデバッグ テストがあるからできること

13

Page 14: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

ソフトウェア開発に テスト自動化は欠かせない

14

Page 15: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

アジェンダ

1. ゲーム開発支援ツールって何?

2. テスト自動化事例

1. 単体テスト

2. システムテスト

3. テスト戦略

3. できるところから始めよう

4. まとめ

15

Page 16: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

テスト自動化事例

• 単体テスト

• システムテスト

• テスト戦略

16

Page 17: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

アジェンダ

1. ゲーム開発支援ツールって何?

2. テスト自動化事例

1. 単体テスト

2. システムテスト

3. テスト戦略

3. できるところから始めよう

4. まとめ

17

Page 18: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

単体テスト

18

Page 19: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

Windows プログラムの単体テスト

単体テストを導入して 最初に書いたのが Windows プログラムのテスト

19

Page 20: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

テスティングフレームワーク

Google Test を採用

• 言語は C++

• 有名どころ

– Google Test

– Boost.Test

– CppUnit

– Catch

なぜか?

• Jenkins で集計可能な XML を出力できる

• 記述量が少なくてすむ

• 日本語ドキュメントが充実

• CEDEC 2010に参加したときに良いと聞いた

20

Page 21: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

テストコード例

TEST(CEDEC, Test) { for( int i=0; i < 100; ++i ) { SCOPED_TRACE(Message() << "loop " << i); ASSERT_EQ(nullptr, p); EXPECT_EQ("IS", p->name); EXPECT_LT(0, p->size); for( int j=0; j < p->size; ++j ) { EXPECT_NE(0, p->data[j]) << “ [" << j << "]"; } } }

• テストが失敗しても なるべく続行する

– ASSERT は続行不可能な場合にだけ使う

– それ以外は EXPECT

• 失敗したときの情報をなるべく出力する

– SCOPED_TRACE

– EXPECT_EQ(x,y) << "情報"

21

Page 22: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

自動化

Jenkins !!

• Google Test が出力する テスト結果XMLを集計

• 失敗通知等は Jenkins から

22

Page 23: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

構成

特に難しいことはしてません

23

Page 24: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

詳しい話は別の機会があれば…

Jenkins 関連の話は尽きないので 別の機会があれば…

24

Page 25: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

Groovy ちょー便利

• Groovy Postbuild Plugin ビルド後の処理で Groovy Script を実行できる

– テスト結果の説明に自動で書き込み

– パラメータの見える化

– 致命的な失敗が発生した場合にオフラインにする

25

Page 26: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

組み込みプログラムの単体テスト

組み込みソフトウェアの場合

26

Page 27: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

Windows 上で実行可能にする

• プラットフォームやハードウェアに依存しない アルゴリズムなどは 簡単に対応可能

• 入力と出力を整理して まとめることで テスタビリティが向上

27

Page 28: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

Windows 上で実行可能にする

• プラットフォームやハードウェアに依存する場合でも モックを作ることで テスト可能

28

Page 29: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

Windows 上で実行できない場合

• ハードウェア上でしかできない or したいテストがある

– プラットフォーム、ハードウェアに依存する

– モック作成が困難、もしくは手間がかかる

• ハードウェア側にテストプログラムを置く方法

– ツールの場合、容量不足のため不可

29

Page 30: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

通信プログラムを介してテスト

• PC とハードウェア間で 情報をやりとりできる プログラムを作成

• PC 側にテストを書く

30

Page 31: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

通信プログラムを介してテスト

• 入力をハードウェア側に与える

• ハードウェア側が指示に従い 動作をする

• 動作した結果をハードウェア側に尋ねる

• 返ってきた結果を出力とし 比較テストする

31

Page 32: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

ゲーム開発の場合

組み込みの場合と一緒

• Windows 上で実行できるようにする

• ハードウェア上でしかできないテスト

– PC側と情報をやりとりする

• PC側と通信する環境は用意されているので、それを利用

– ハードウェア側にテストプログラムを置く

• テスティングフレームワークが提供されている

• テストの自動実行と結果のフィードバックがあれば 独自フレームワークでも可能

32

Page 33: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

アジェンダ

1. ゲーム開発支援ツールって何?

2. テスト自動化事例

1. 単体テスト

2. システムテスト

3. テスト戦略

3. できるところから始めよう

4. まとめ

33

Page 34: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

システムテスト自動化の道のり

デバッガーソフトウェアのシステムテスト

34

Page 35: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

システムテストの導入

デバッグの単純作業の繰り返しを テスト化するところから始まった

35

Page 36: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

システムテスト(初期)

• 手動で行っていた作業のテストコード化

– テストコードはアプリケーションの中に埋め込み

– メニューバーから手動で実行

– 半自動

36

Page 37: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

システムテスト(初期)

結果

• 毎回やっていた多くの デバッグ手順が自動化

• デバッグ工数の コストダウンができた

問題

• テスト漏れ

• テスト時間増加

• テスト中に PC を占有

– 誰もテストをしなくなり…

– 最終的に メンテナンスされなくなり…

37

Page 38: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

システムテストの自動化

Jenkins の導入をきっかけに自動化対応

• 自動化のポイントは以下の3つ

– テスト実行の自動化

– 比較の自動化

– フィードバックの 自動化

38

Page 39: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

• 既存のシステムテストを再利用

• テスト実行の自動化

– 管理クラスに登録されたテストを順番に実行

– コマンドライン引数からの テスト実行に対応

– Jenkins のジョブに登録

テスト実行の自動化

39

Page 40: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

テストの事前・事後処理の自動化

• スクリプト化

– コマンド機能をスクリプトから実行

– テストに必要なテストプログラム(ゲーム)の ダウンロード実行や、 ブレークポイント設置など

40

Page 41: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

比較の自動化

• スクリプトで比較処理

– 特定のバージョンを正しい挙動のバージョンと決め その出力を比較データとした

• 比較する出力(一例)

– ログ出力などのテキスト情報

– コールスタック、ウォッチ等

• ツリー構造など、見た目に関わる部分もテキスト化

41

Page 42: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

比較の自動化

• ログの一例

42

Watch

├─a 0x0000000A 0x0FFFFFEC int

├─i --- ‘i’ は、最適化により評価できません。

├─test 0x00000014 0x0FFFFFE4 CTest

│ ├─m_nData 0x0000000A 0x0FFFFFE4 int

│ └─m_nData2 0x00000014 0x0FFFFFE8 int

└─pTest 0x0FFFFFE4 0x0FFFFFE0 CTest*

├─m_nData 0x0000000A 0x0FFFFFE4 int

└─m_nData2 0x00000014 0x0FFFFFE8 int

Page 43: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

比較データ作成の自動化

• テストモードと比較データ作成モードを スクリプトに用意

• モード変更のみで 比較データを自動作成

43

Page 44: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

テストセットの管理

比較データ、テストスクリプト、テストデータなど、

テスト実行に必要なファイルの管理

• 比較データ、テストスクリプトはバージョン管理

– 最新仕様にあわせて、比較データ・スクリプトは更新される

– 古いバージョンでもテストができるように、 ソースコードと一緒にバージョン管理

• テストデータはネットワークドライブ上に配置

44

Page 45: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

フィードバックの自動化

Jenkins !!

• Google Test と同じ形式で XML 出力する機能を実装

• 単体テストのときと同様に XML を集計

• 失敗時の通知等は Jenkins から

45

Page 46: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

自動化できました

46

Page 47: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

まだまだある問題

• 失敗したテストが修正されない

• テスト数増加によるコストアップ

47

Page 48: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

失敗したテストが修正されない

• 修正されないテスト

– 放置されたテスト

– たまにしか失敗しないテスト

– Jenkins で実行したときだけ失敗するテスト

テストの失敗が続くと 重大なテストの失敗が埋もれてしまう

フィードバック情報の改善、テスト間依存の排除など対処したが、 どうしても修正されないテストは残ってしまった

48

Page 49: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

テスト数増加によるコストアップ

• テスト数の増加

– メンテナンスコストが増加

– テスト時間が増加

– すべてのテストが終わるのに、12時間以上かかったことも…

テスト時間が増えると 変更に対してのテストフィードバックが遅くなる

ビルドごとにやるテスト、1日1回、週1回のテストと分けているが新しいテストが追加されていくので、増加の一途をたどるばかり…

49

Page 50: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

テストのフィルタリング

テスト属性でフィルタリング

• 自動テスト対象かどうか、テスト頻度など

• ハードウェア前提条件

• 検証テスト属性を追加

50

Page 51: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

さらなる自動化

テストの自動振り分けに対応

51

Page 52: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

テストの自動振り分け

テスト属性に対応した Jenkins ジョブ

52

「メインテストジョブ」

TEST •ビルドごとにテスト •重要なテスト

「デイリーテストジョブ」

TEST-DAILY •1日1回のテスト •安定した、変更の少ない所のテスト

「テスト検証ジョブ」

TEST-INSPECTION •テストの検証用ジョブ •不安定、失敗が連続したテスト

「ウィークリーテストジョブ」

TEST-WEEKLY •週1回のテスト •安定した、変更の少ない所のテスト

Page 53: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

テストの自動振り分け

■ テスト本来の属性と 付加ファイルの属性をマージ

■ 長期間失敗がなく 成功しているテスト → DAILY や WEEKLY へ

■ 不安定なテスト、 失敗が連続したテスト → INSPECTION へ

53

Page 54: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

テストの自動振り分け

自動振り分けに対応したことで

• ジョブが成功状態を保ちやすくなった

• 失敗したテストにすぐに気付ける

• テストの回転率が向上

• 検証属性のテストは再評価

– テスト側の不備、前提条件不足 タイミング依存や実行順序依存などが炙り出される

– メンテナンス性の悪いテストや効果の薄いテストを 捨てやすくなった

54

Page 55: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

システムテスト自動化事例

ここまでが現時点でツールチームが行っている システムテストの全てです

しかし、これで完成ではなく 改善を積み重ねていくのが大事

55

Page 56: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

ゲーム開発の場合

自動化におけるポイントは同じ

• 初めは手動実行でも OK

• 自動化の各ポイントを押さえる

– テスト実行の自動化

– 比較の自動化

– フィードバックの自動化

56

Page 57: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

GUI テスト

GUI のテストについて少しだけ紹介します

57

Page 58: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

GUI テスト

• システムテストを利用

– システムテストの仕組み上で GUIテスト

– GUI 操作と同等のコマンドや イベントが発生したふりをして関数呼び出し

• GUI 操作スクリプトを使用(一部だけ)

– AutoIt を使用していた

– Friendly を最近使い始めた

– Sikuli が気になっている

58

Page 59: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

アジェンダ

1. ゲーム開発支援ツールって何?

2. テスト自動化事例

1. 単体テスト

2. システムテスト

3. テスト戦略

3. できるところから始めよう

4. まとめ

59

Page 60: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

テスト戦略

ツールチームでは明確なテスト戦略はありません テストをしていく上で気をつけている部分など、 どのようにテストと向き合っているかを紹介します

• テストの目的

• テストの記述

• 網羅・取捨選択

• チームでの取り組み

60

Page 61: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

テストの目的

• 不具合を検出するためのテスト

• 動作保障のためのテスト

– 既に出来上がっているものに対してテストを書くことが 多いため、仕様を保障するのが目的

– テストで保障をすることで、リリース前のデバッグでは 変更点のみに集中できる

61

Page 62: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

テストの記述

• Red/Green/Refactor のサイクル

• 厳格なテスト駆動開発ではない

– テストファーストや、 カバレッジ100% はしてない

62

Page 63: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

テストの記述

• バグが出たとき

– バグを直す前に、まずは再現テスト

– バグを直したら、テストで確認

– 高速化、メンテナンス性の向上 などリファクタリング

– Red/Green/Refactor のサイクル で修正しやすい

63

Page 64: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

網羅・取捨選択

• すべてのコードを網羅するのは(時間的に)不可

• 挙動の違いが出やすい部分を選択する

– 上限・下限値、境界値

– 代表値(同値分割)

• エラーケースは忘れがちなので注意

• なるべく低レベル層でテストしておく

– 下のレイヤーから保障することで、 上のレイヤーも保障しやすい

64

Page 65: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

網羅・取捨選択

状況から考える

• 正確性が必要な部分はきっちりテスト

– 認証試験、お金が絡む部分など、失敗できないところ

• 不安をテストにする

– この修正を入れたいけど、大丈夫かな…

– とりあえずできたけど…

– テストを書くことで不安を解消

65

Page 66: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

チームでの取り組み

• マネージャー/リーダー

– テストや自動化の課題を投げる

– チームの課題として扱う

• テスト自動化担当者

– チームメンバーが課題を 解決するための土台作り

– テスト環境や自動化フロー、 Jenkins のユーティリティ、etc...

– オレオレ環境にしない、情報共有

66

Page 67: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

アジェンダ

1. ゲーム開発支援ツールって何?

2. テスト自動化事例

1. 単体テスト

2. システムテスト

3. テスト戦略

3. できるところから始めよう

4. まとめ

67

Page 68: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

テスト自動化の話をしてきたが…

最後に失敗談

私が担当しているソフトウェアには、 システムテストがなかった

• 私は優秀なテストエンジニアではない

• テストよりも機能実装していた方が楽しい

• 引き継いだ膨大なソースコード

• 時間は待ってくれない

68

Page 69: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

一言でいうと

テストを書くのが面倒臭かった

69

Page 70: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

致命的なバグが出てしまった

ただ、それで上手くいくわけがなく… 致命的なバグが発生しました

対処

• 原因調査

• コード修正

• 動作確認

70

Page 71: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

バグを直したし今後は安心?

本当はテストで保護したいけど…

• 一度直したから大丈夫

• 今後同じ所でバグは出ない

71

Page 72: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

同じ致命的なバグが再発

そんなわけがない!

致命的なバグだったため、修正を優先して対応

対処

• 原因調査

• コード修正

• 動作確認

72

Page 73: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

なんでテスト書かなかったの?

• 最初にバグが出た時にテストを書いておけば…

– テストを書く環境がなかった

– 致命的なバグのため修正スピードが重要だった

• なぜ、テスト環境を用意していなかったのか…

– テスト環境を構築する時間がなかった

– 既存のテスト環境(システムテスト)と比べ、 より高機能なテスト環境を想定していた

73

Page 74: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

テスト環境の構築をした

• 同じミスを何回も繰り返してはいけない

• テスト環境を構築

– 最低限のことができればよい

– Google Test を採用

• 最低限のテストを記述

– バグは修正済みだが、テストを記述

– 他のテストは一切なし

74

Page 75: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

別の致命的なバグが出た

• 原因調査

• 再現テスト記述(テストで再現することを確認)

• コード修正

• 動作確認

テスト環境があるためテストがすぐ書ける!

すぐにテストが書ける環境があるかないかで 全然違う

75

Page 76: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

テスト書いてバグ修正した方が

気持ちいい!!

76

Page 77: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

アジェンダ

1. ゲーム開発支援ツールって何?

2. テスト自動化事例

1. 単体テスト

2. システムテスト

3. テスト戦略

3. できるところから始めよう

4. まとめ

77

Page 78: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

まとめ

• 組み込みやゲーム開発でもテストできます

• できるところから始めよう

– まずは始めること、小さな一歩が大きな歩みとなる

– 「テストが書ける」環境を作りましょう

• 改善を繰り返そう

– テスト自動化に対する問題は プロジェクトごとにそれぞれ出てきます

– 1つ1つ改善を積み重ねていくことが大事です

78

Page 79: できるところから始めよう~ ゲーム開発支援ツールの テスト自 … · –C/C++ –プラットフォーム •Windows(約45万行) •組み込み (約10万行)

79

Windows® の正式名称は、Microsoft® Windows® Operating Systemです。

Microsoft、Windows および Visual Studio は、米国 Microsoft Corporation の、米国およびその他の国における登録商標または商標です。

Jenkins Logo: https://wiki.jenkins-ci.org/display/JENKINS/Logo

INTELLIGENT SYSTEMSロゴは株式会社インテリジェントシステムズの登録商標です。

その他記載されている会社名、製品名、ロゴは各社の登録商標または商標です。