エンドツーエンドテストを自動化したら
チームがすごく良くなった @ XP祭り2015 LT
2015/09/12
楽天株式会社 トラベルサービス開発・運用部
渡邉太一
2
About Me
• Webエンジニア
• 言語: Java
• 楽天トラベル内の
一つの開発チームのリーダー
twitter:@taichiw0424
Taichi Watanabe
3
今日のお話
サーバ上に
デプロイ済み
商品登録
コアAPI
E2E test
Tool
(自作)
HTTP
これを作った。
4
Our team & Our product
Web
管理画面
外部連携用
API
商品登録
コアAPI
ホテル
・
旅館
5
テストの例: 「部屋を作るAPI」のテストをする
コアAPI
DB
E2E test
Tool
Start Test Scenario
Verify
部屋を参照するAPI
Select
TearDown
部屋を削除するAPI
Delete
Assertion!
Execute
部屋を作るAPI
Insert/Update
Test Result
HTTP
6
Number of test cases (始めてから9ヶ月経過)
UTで見つけられなかったバグが時々出てくる
7
何が変わった?
8
良かったこと1 案件用に作ったテストがずっと使える
UT
&
実装
まず
E2E test
を作る
E2E test
実行!
QA
QA
Run
Regression
Test
Project 1
Project 2
同じテストを
再利用
UT
&
実装
まず
E2E test
を作る
E2E test
実行!
9
1年間で
リグレッションによる
不具合
0件
10
良かったこと2 コードレビューの効果が高まった
UT
&
実装
E2E test
実行!
コード
レビュー
E2E test
実行!
【レビュア視点】
• 既に要件を満たすことがわかっている
• レビュアがコードの書き方に集中できる
• 何度でもテストできるので思い切った指摘ができる
11
良かったこと3 メンバーのテスタビリティに対する意識向上
コアAPI
DB
E2E test
Tool
Start Test Scenario
Verify
写真のメタデータを
取得するAPI
Select
TearDown
写真のメタデータを
削除するAPI
Delete
Assertion!
Execute
写真のメタデータを
登録するAPI
Insert/Update
Test Result
HTTP
サービスでは使わないけど、テストに必要そうだから作る?
という提案がメンバーから「自然に」出てくる
12
良かったこと3 メンバーのテスタビリティに対する意識向上
コアAPI
DB
E2E test
Tool
Start Test Scenario
Verify
写真のバイナリデータ
を取得するAPI
Select
TearDown
写真のバイナリデータ
を削除するAPI
Delete
Assertion!
…
どうやって?
Execute
写真のバイナリデータ
を登録するAPI
Insert/Update
Test Result
HTTP
どう自動化するか考えるという話が
メンバーから「自然に」出てくる
13
もともと良いチームだったけど
すごく良いチームになった!
14
…
もうちょっとだけ続くんじゃ
15
私 異動しました
2年間、APIばかり作ってたんだけど
久しぶりに画面のある世界へ。
16
GUIのテスト自動化
難しいです
17
APIと勝手が違うところ
• 予約などはステートフル&複数ページから構成
されるため、1シナリオが長い
• Seleniumなどブラウザを使うと1通信に時間が
かかる
→ ケースの網羅性を上げるのが難しい
• 画面内のパーツが多い
• 細部の仕様は頻繁に変わる
→ 細かい部分までテストするのが難しい
18
テスト改善よりもアーキテクチャ改善?
画面 コアAPIエンド
ユーザ
UI層と ロジック層と きっちり分けて
ロジック層に対してたっぷりE2E test
かなぁ… と思案中。
19
是非、お知恵を
ください!

エンドツーエンドテストを自動化したらチームがすごく良くなった@XPまつり2015LT