【jasst'14 tokyo】システムテストの自動化による...

100
システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 Mar/07/2014 荻野 恒太郎, パランデ アビジート, 松本 幹, 鵜飼 大志 Search Platform Group, Search Section, Big Data Department, Rakuten Inc. http://www.rakuten.co.jp/

Upload: kotaro-ogino

Post on 07-Nov-2014

5.119 views

Category:

Technology


2 download

DESCRIPTION

JaSST'14 Tokyo での"システムテストの自動化による大規模分散検索プラットフォームの開発行程改善"という題目の事例発表です。 スライドに入りきらなかったコンセプトについてhttp://kokotatata.hatenablog.com/entry/2014/03/11/104240 に書いています。そちらもご参照ください。 --- 2014/03/08 08:00 文字のレイアウトのずれや配色の問題を修正

TRANSCRIPT

Page 1: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善

Mar/07/2014 荻野 恒太郎, パランデ アビジート, 松本 幹, 鵜飼 大志 Search Platform Group, Search Section, Big Data Department, Rakuten Inc. http://www.rakuten.co.jp/

Page 2: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

2

本日お持ち帰りして頂きたい事

Page 3: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

3

本日お持ち帰りして頂きたい事

本発表の趣旨 自動化とCIやTDDを組み合わせ “継続的システムテスト”を実現し 開発のアジリティを改善した

• 誰がためのシステムテスト自動化? • アジャイルな世界でのテスターの役割は?

Page 4: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

4

バックグラウンド

• ウェブサービス開発の特徴 • システムテスト自動化の目的

Page 5: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

5

ウェブサービス

Page 6: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

6

ウェブサービス開発の特徴

要求スコープ

時間軸

• 永続的開発

フェーズ

日々サービスを成長 させるため - 市場要求の変化 - 技術トレンドの変化

“Development and Deploy in Facebook”, Facebook, 2013,

継続的なサービス改善  → 絶え間ないリリース

Page 7: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

7

バックグラウンド

• ウェブサービス開発の特徴 • システムテスト自動化の目的

Page 8: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

8

クオリティ vs アジリティ

アジリティ

低 遅い 速い

サービス

クオリティ

機能開発のリードタイム バグ修正日数 など

Page 9: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

9

クオリティ vs アジリティ

アジリティ

低 遅い 速い

サービス

クオリティ

開発 - 機能追加 - 機能改善 - パフォーマンス改善

機能開発のリードタイム バグ修正日数 など

Page 10: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

10

クオリティ vs アジリティ

アジリティ

低 遅い 速い

サービス

クオリティ

開発 - 機能追加 - 機能改善 - パフォーマンス改善

開発

開発

開発

継続的な サービス改善 → 小さく産んで 大きく育てる

機能開発のリードタイム バグ修正日数 など

Page 11: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

11

クオリティ vs アジリティ

アジリティ

低 遅い 速い

サービス

クオリティ

開発

開発

開発

開発 品質の門番としての システムテスト - 新機能の振る舞い - デグレード ?

機能開発のリードタイム バグ修正日数 など

Page 12: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

12

品質の門番:システムテスト

機能テスト - 検索機能など - 検索ランキング

探索的テスト (ET) 受け入れテスト (UAT)

単体テスト (UT) コンポーネントテスト (CT)

パフォーマンス /負荷テスト 「〜性」テスト - 運用性 - 可用性

ビジネス面

支援

製品

批評

ISBN:9784798119977“ 実践アジャイルテスト” p.96

技術面

*以前結合テスト と呼んでいた

**運用性と可用性

• アジャイルテスト4象限

Page 13: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

13

品質の門番:システムテスト

機能テスト - 検索機能など - 検索ランキング

探索的テスト (ET) 受け入れテスト (UAT)

単体テスト (UT) コンポーネントテスト (CT)

パフォーマンス /負荷テスト 「〜性」テスト - 運用性 - 可用性

ビジネス面

支援

製品

批評

ISBN:9784798119977“ 実践アジャイルテスト” p.96

技術面

*以前結合テスト と呼んでいた

**運用性と可用性

• アジャイルテスト4象限

システムテスト(ST) その他

Page 14: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

14

クオリティ vs アジリティ

アジリティ

低 遅い 速い

サービス

クオリティ

開発

開発

開発

開発

機能開発のリードタイム バグ修正日数 など

Page 15: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

15

クオリティ vs アジリティ

アジリティ

低 遅い 速い

サービス

クオリティ

機能開発のリードタイム バグ修正日数 など

Page 16: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

16

クオリティ vs アジリティ

アジリティ

低 遅い 速い

サービス

クオリティ

• 技術的負債 • システムテストの  肥大化

開発 50%

 ST 33%

QA 17%

機能開発のリードタイム バグ修正日数 など

Page 17: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

17

システムテストの問題:バグ修正日数

0 2 4 6 8

10

UT/CT ST

バグ修正日数

Q3

Q1

中央値

Q3

Q1

中央値

システムテストで 見つかったバグは 修正コストが高い

ST

Page 18: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

18

クオリティ vs アジリティ

アジリティ

低 遅い 速い

サービス

クオリティ

機能開発のリードタイム バグ修正日数 など

Page 19: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

19

クオリティ vs アジリティ

アジリティ

低 遅い 速い

サービス

クオリティ

サービス

機能開発のリードタイム バグ修正日数 など

Page 20: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

20

システムテスト自動化の目的

アジリティ

低 遅い 速い

サービス

クオリティ

サービス 目的: アジリティ改善のため システムテストを自動化

機能開発のリードタイム バグ修正日数 など

Page 21: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

21

継続的 システムテスト

• コンセプト • 課題と解決方法

Page 22: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

22

アジャイルなテストのアプローチにおけるシステムテスト

Page 23: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

23

アジャイルなテストのアプローチにおけるシステムテスト

継続的インテグレーション

Page 24: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

24

アジャイルなテストのアプローチにおけるシステムテスト

品質の門番 検索ランキングのデグレ 運用性、可用性のデグレ

Page 25: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

25

システムレベルの検証が必要な項目①: 検索ランキング

Page 26: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

26

システムレベルの検証が必要な項目①: 検索ランキング

検索キーワード

検索キーワードへの関連順で並べる

Page 27: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

27

検索ランキングに関連するコンポーネント

Storage component

Indexing component

Search component

Search API

Storage API

ドキュメント

検索結果

クエリ

GSP

Admin

Page 28: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

28

検索ランキングに関連するコンポーネント

Storage component

Indexing component

Search component

Search API

Storage API

ドキュメント

検索結果

クエリ

GSP

Admin

同義語辞書

スキーマ

データ処理

Disjunction Max

形態素解析

Page 29: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

29

システムレベルの検証が必要な項目②: 可用性•運用性

バランサ

ノード

検索クラスター 検索クラスター

... ノード ノード … ノード

Page 30: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

30

システムレベルの検証が必要な項目②: 可用性•運用性

バランサ

ノード

検索クラスター 検索クラスター

... ノード ノード … ノード

Page 31: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

31

システムレベルの検証が必要な項目②: 可用性•運用性

バランサ

ノード

検索クラスター 検索クラスター

... ノード ノード … ノード

Fail overするか?

復旧出来るか?

Page 32: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

32

運用性•可用性に関連するコンポーネント

Storage component

Indexing component

Search component

Search API

Storage API

ドキュメント

検索結果

クエリ

GSP

Admin

インデックス再構築

システム状態監視

ヘルスチェック

自動閉塞

ヘルスチェック

Page 33: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

33

“継続的システムテスト”

• コンセプト 検索ランキングや、運用性、可用性などの システムレベルの検証も継続的に実行

Page 34: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

34

“継続的システムテスト”

• コンセプト 検索ランキングや、運用性、可用性などの システムレベルの検証も継続的に実行

分析

設計 実装 UT

ST

要求スコープ

時間軸

システムテスト 自動化前

Page 35: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

35

“継続的システムテスト”

• コンセプト 検索ランキングや、運用性、可用性などの システムレベルの検証も継続的に実行

分析

設計 実装 UT

ST

要求スコープ

時間軸

システムテスト 自動化前

Page 36: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

36

“継続的システムテスト”

• コンセプト 検索ランキングや、運用性、可用性などの システムレベルの検証も継続的に実行

分析

設計 実装 UT

ST

要求スコープ

時間軸

システムテストで検証している 項目は顧客にとっての価値が高い

システムテスト 自動化前

Page 37: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

37

“継続的システムテスト”

• コンセプト 検索ランキングや、運用性、可用性などの システムレベルの検証も継続的に実行

分析

設計 実装 UT

ST

要求スコープ

時間軸

システムテストで検証している 項目は顧客にとっての価値が高い

リリース直前にバグが見つかり 継続的な改善が困難

システムテスト 自動化前

Page 38: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

38

“継続的システムテスト”

• コンセプト 検索ランキングや、運用性、可用性などの システムレベルの検証も継続的に実行

分析

設計 実装 UT

ST

要求スコープ

時間軸

システムテスト 自動化前

Page 39: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

39

“継続的システムテスト”

• コンセプト 検索ランキングや、運用性、可用性などの システムレベルの検証も継続的に実行

分析

設計 実装 UT

ST

要求スコープ

時間軸

分析

設計 実装 UT

要求スコープ

ST 時間軸

システムテスト 自動化前

システムテスト 自動化後

Page 40: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

40

“継続的システムテスト”

• コンセプト 検索ランキングや、運用性、可用性などの システムレベルの検証も継続的に実行

分析

設計 実装 UT

ST

要求スコープ

時間軸

分析

設計 実装 UT

要求スコープ

ST 時間軸

システムテスト 自動化前

システムテスト 自動化後

Page 41: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

41

“継続的システムテスト”

• コンセプト 検索ランキングや、運用性、可用性などの システムレベルの検証も継続的に実行

分析

設計 実装 UT

ST

要求スコープ

時間軸

システムテスト 自動化前

分析

設計 実装 UT

要求スコープ

ST 時間軸

システムテスト 自動化後

顧客にとって価値の高い領域での 開発者や分析者の継続的な改善をサポート

Page 42: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

42

継続的 システムテスト

• コンセプト • 課題と解決方法

Page 43: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

43

継続的インテグレーション

コンポーネント

ソースコード レポジトリ

ビルド

ビルド サーバー

UT

システムテスト

コンポーネント

… STG

Page 44: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

44

継続的インテグレーションから継続的システムテストへ

コンポーネント

ソースコード レポジトリ

ビルド

ビルド サーバー

UT

システムテスト

コンポーネント

自動化!!

STG

Page 45: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

45

継続的システムテスト概要図

コンポーネント

ソースコード レポジトリ

ビルド

ビルド サーバー

UT

自動化された システムテスト

コンポーネント

… STG

毎日、継続的に実行

Page 46: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

46

継続的システムテスト:課題

コンポーネント

ソースコード レポジトリ

ビルド

ビルド サーバー

UT

自動化された システムテスト

コンポーネント

… STG

Page 47: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

47

継続的システムテスト:課題

コンポーネント

ソースコード レポジトリ

ビルド

ビルド サーバー

UT

自動化された システムテスト

コンポーネント

… STG

① 複数のチームや コンポーネントの スムーズな結合

Page 48: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

48

継続的システムテスト:課題

コンポーネント

ソースコード レポジトリ

ビルド

ビルド サーバー

UT

自動化された システムテスト

コンポーネント

② システムテストの 自動化は高コスト?

STG

① 複数のチームや コンポーネントの スムーズな結合

Page 49: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

49

継続的システムテスト:課題

コンポーネント

ソースコード レポジトリ

ビルド

ビルド サーバー

UT

自動化された システムテスト

コンポーネント

① 複数のチームや コンポーネントの スムーズな結合

③ テストと開発の サイクルを作るには?

STG

② システムテストの 自動化は高コスト?

Page 50: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

50

自動化された継続的システムテストの課題①: スムーズな結合

インデクサー サーチ ストレージ アドミン

問題点: - チームの属人的な設計 → テスト自動化可能性に問題 - 低レイヤのコンポーネントのバグ → 他のコンポーネントの結合やテストに支障

… … … …

Page 51: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

51

課題①への取り組み: Software Engineer in Test (SET)

役割:自動化の専門部隊 テスト自動化方針に則った自動化

http://googletesting.blogspot.jp/2010/03/google-is-hiring-sets.html

Page 52: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

52

課題①への取り組み: Software Engineer in Test (SET)

コンポーネント 開発者 Software

Engineer in Test

Search

Indexer

Storage

Admin

開発

機能の開発工程 テスト自動化方針 分析 設計 実装

テスト

役割:自動化の専門部隊 テスト自動化方針に則った自動化

分析 設計 実装

テスト

………

http://googletesting.blogspot.jp/2010/03/google-is-hiring-sets.html

Page 53: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

53

課題①への取り組み: Software Engineer in Test (SET)

コンポーネント 開発者 Software

Engineer in Test

Search

Indexer

Storage

Admin

開発

機能の開発工程 テスト自動化方針 分析 設計 実装

テスト

役割:自動化の専門部隊 テスト自動化方針に則った自動化

分析 設計 実装

テスト

自動化の観点から 分析や設計に

積極的に関わる

………

http://googletesting.blogspot.jp/2010/03/google-is-hiring-sets.html

Page 54: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

54

課題①への取り組み: :スモークテスト

• 最低限の結合を保証するスモークテストを自動化

Page 55: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

55

課題①への取り組み: :スモークテスト

• 最低限の結合を保証するスモークテストを自動化

Smoke Test 機能テスト 非機能テスト

Pass

Version

Pass Yes

No

大規模 データ

UT&Build

Yes

Jenkins

STG

手動システムテスト

No

A A

Page 56: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

56

課題①への取り組み: :スモークテスト

• 最低限の結合を保証するスモークテストを自動化

Smoke Test 機能テスト 非機能テスト

Pass

Version

Pass Yes

No

大規模 データ

UT&Build

Yes

Jenkins

STG

手動システムテスト

No

A A

• スモークテストを パスしたバージョン を記録

• 上記のバージョンを システムテストで   対象とする

Page 57: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

57

自動化された継続的システムテストの課題②: テストにまつわるコスト

テストケース

手動 自動

フレームワーク

手動 自動

Page 58: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

58

自動化された継続的システムテストの課題②: テストにまつわるコスト

テストケース

手動 自動

フレームワーク

手動 自動

学習 開発

Page 59: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

59

自動化された継続的システムテストの課題②: テストにまつわるコスト

テストケース

手動 自動

フレームワーク

手動 自動

学習 開発

フレームワークの 学習や開発は 必要な投資

Page 60: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

60

自動化された継続的システムテストの課題②: テストにまつわるコスト

テストケース

手動 自動

フレームワーク

手動 自動

学習 開発

テスト実行

フレームワークの 学習や開発は 必要な投資

Page 61: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

61

自動化された継続的システムテストの課題②: テストにまつわるコスト

テストケース

手動 自動

フレームワーク

手動 自動

学習 開発

テスト実行

フレームワークの 学習や開発は 必要な投資

実行コストは自動化で0に

Page 62: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

62

自動化された継続的システムテストの課題②: テストにまつわるコスト

テストケース

手動 自動

フレームワーク

手動 自動

学習 開発

テスト実行 テスト実装

フレームワークの 学習や開発は 必要な投資

実行コストは自動化で0に

Page 63: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

63

自動化された継続的システムテストの課題②: テストにまつわるコスト

テストケース

手動 自動

フレームワーク

手動 自動

学習 開発

テスト実行 テスト実装

フレームワークの 学習や開発は 必要な投資

実行コストは自動化で0に

原因調査

原因調査 テスト保守

テスト保守

Page 64: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

64

自動化された継続的システムテストの課題②: テストにまつわるコスト

テストケース

手動 自動

フレームワーク

手動 自動

学習 開発

テスト実行 テスト実装

フレームワークの 学習や開発は 必要な投資

実行コストは自動化で0に

原因調査

原因調査 テスト保守

テスト保守

テスト実装や、原因調査、保守の コストを抑えるための工夫が重要

Page 65: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

65

課題②への取り組み: ドメイン固有テスト言語

検索結果のテストケースを表現する ドメイン固有テスト言語(DSTL)を定義  → 実装•保守コストを低減

Page 66: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

66

テストツール: Ngauto

ドメイン固有テスト 言語で記述された シナリオ

• アクション1   デプロイ

• アクション2   データ投入

• アクション3   検索クエリ

テストツールの中で アクションに対する実際の 振る舞いを定義 “検索クエリ” アクションの例) --- Report report    = issueSapiQuery(testId,query); … int expectedHttpStatus = getExpectedHttpstatus(testId); int actualHttpstatus = report.getActualHttpStatus() TestCase.assertEquals( message, expectedHttpStatus, actualHttpstatus ); …

Ngauto (内製の

テストツール)

Page 67: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

67

課題②への取り組み: トレーサビリティ

JUnitベースのテストツール - JenkinsやIDEの画面からバグの追跡が可能 → 原因調査コストの低減

テストケースが失敗した場合の画面

Page 68: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

68

APPAPP

自動化された継続的システムテストの課題③: テストと開発のサイクル

APP

検証環境 開発マシン

テスト

開発

Page 69: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

69

APPAPP

自動化された継続的システムテストの課題③: テストと開発のサイクル

APP

検証環境 開発マシン

テスト

開発

環境差異による テスト結果の再現性の問題によって壊れる!!

Page 70: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

70

APPAPP

課題③への取り組み:シナリオ実行の透過性

テストツール

テストシナリオ

APP

検証環境 開発マシン

実行

Page 71: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

71

APPAPP

課題③への取り組み:シナリオ実行の透過性

テストツール

テストシナリオ

APP

検証環境 開発マシン

実行

開発マシンの テスト環境を

仮想化により統一

Page 72: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

72

APPAPP

課題③への取り組み:シナリオ実行の透過性

テストツール

テストシナリオ

APP

検証環境 開発マシン

実行

開発マシンの テスト環境を

仮想化により統一

プロファイル ローカルマシン

プロファイル STG

構成情報 構成情報

環境の構成情報を テストシナリオから分離

環境の構成情報を テストシナリオから分離 → シナリオ実行の

透過性を担保

Page 73: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

73

開発 サイクル

Page 74: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

Implement

GIT

merge

UT

Smoke Test 機能テスト 非機能テスト

Smoke Test

Pass Pass

Version

Pass Yes

No No

大規模 データ

UT&Build

実装

Yes

システムテスト自動化後の開発サイクル

LOCAL Jenkins

STG

手動システムテスト

機能テスト 非機能テスト

No Yes

A A A

A

Page 75: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

Implement

GIT

merge

UT

Smoke Test 機能テスト 非機能テスト

Smoke Test

Pass Pass

Version

Pass Yes

No No

大規模 データ

UT&Build

実装

Yes

システムテスト自動化後の開発サイクル

LOCAL Jenkins

STG

手動システムテスト

機能テスト 非機能テスト

自動化されたすべてのテストを毎日、継続的に実行 → リードタイム、バグ修正日数が最短1日に

No Yes

A A A

A

Page 76: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

76

評価

Page 77: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

77

システムテスト自動化の効果の評価方法

•自動化前後のバグ修正日数の比較 •継続的システムテスト適用後の累積バグ数

参考情報:自動化前後のテストの比較 継続的システムテスト 前 後

自動化テストの カバレッジ

機能テスト の一部

(604件)

機能テスト 非機能テスト 大規模テスト

(2887件) SET ◯

スモークテスト ◯ ◯ ドメイン固有テスト言語 ◯ バグのトレーサビリティ △ テストシナリオの透過性 △

◯:最初から△:途中から

Page 78: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

78

0

2

4

6

8

10

UT/CT ST 0

2

4

6

8

10

UT/CT ST

評価結果:バグ修正日数の比較

Q3

Q1

中央値

Q3

Q1

中央値 Q3

Q1

中央値

Q3

Q1

中央値

最大値 59 最大値 64 最大値 75 最大値 87

ST 後

(10572*) (11453*)

*テストメソッド数

(日数) (日数)

Page 79: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

79

0

2

4

6

8

10

UT/CT ST 0

2

4

6

8

10

UT/CT ST

評価結果:バグ修正日数の比較

Q3

Q1

中央値

Q3

Q1

中央値 Q3

Q1

中央値

Q3

Q1

中央値

システムテストで発見された バグの修正日数が大幅に改善

最大値 59 最大値 64 最大値 75 最大値 87

ST 後

(10572*) (11453*)

*テストメソッド数

(日数) (日数)

Page 80: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

80

自動化された継続的システムテスト適用後の累積バグ数

0

20

40

60

80

100 非機能テスト

機能テスト

スモーク

3月 5月 7月 9月

開発

テスト 自動化

Page 81: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

81

自動化された継続的システムテスト適用後の累積バグ数

0

20

40

60

80

100 非機能テスト

機能テスト

スモーク

3月 5月 7月 9月

開発

テスト 自動化

Page 82: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

82

自動化された継続的システムテスト適用後の累積バグ数

0

20

40

60

80

100 非機能テスト

機能テスト

スモーク

3月 5月 7月 9月

機能テスト 自動化完了

大きな 機能要件

受け入れテスト 開発

テスト 自動化

Page 83: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

83

自動化された継続的システムテスト適用後の累積バグ数

0

20

40

60

80

100 非機能テスト

機能テスト

スモーク

3月 5月 7月 9月

機能テスト 自動化完了

大きな 機能要件

受け入れテスト 開発

テスト 自動化

Page 84: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

84

自動化された継続的システムテスト適用後の累積バグ数

0

20

40

60

80

100 非機能テスト

機能テスト

スモーク

3月 5月 7月 9月

機能テスト 自動化完了

シナリオの 透過性

大きな 機能要件

断続的な 小さな要件

受け入れテスト 開発

テスト 自動化

Page 85: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

85

自動化された継続的システムテスト適用後の累積バグ数

0

20

40

60

80

100 非機能テスト

機能テスト

スモーク

3月 5月 7月 9月

機能テスト 自動化完了

シナリオの 透過性

大きな 機能要件

断続的な 小さな要件

受け入れテスト 開発

テスト 自動化

Page 86: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

86

自動化された継続的システムテスト適用後の累積バグ数

0

20

40

60

80

100 非機能テスト

機能テスト

スモーク

3月 5月 7月 9月

機能テスト 自動化完了

シナリオの 透過性

大規模テスト 自動化完了

バグの トレーサビリティ

大きな 機能要件

システム リファクタリング

断続的な 小さな要件

受け入れテスト

受け入れテスト 開発

テスト 自動化

Page 87: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

87

自動化された継続的システムテスト適用後の累積バグ数

0

20

40

60

80

100 非機能テスト

機能テスト

スモーク

3月 5月 7月 9月

機能テスト 自動化完了

シナリオの 透過性

大規模テスト 自動化完了

バグの トレーサビリティ

大きな 機能要件

システム リファクタリング

断続的な 小さな要件

受け入れテスト

受け入れテスト 開発

テスト 自動化

Page 88: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

88

継続的システムテストについてまとめ

分析

設計 実装 UT

ST

要求スコープ

時間軸

自動化前

分析

設計 実装 UT

要求スコープ

自動化後

ST 時間軸

Page 89: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

89

継続的システムテストについてまとめ

分析

設計 実装 UT

ST

要求スコープ

時間軸

自動化前

分析

設計 実装 UT

要求スコープ

自動化後

ST 時間軸

自動化前: リリース直前にバグが見つかり てんやわんやしていた

Page 90: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

90

継続的システムテストについてまとめ

分析

設計 実装 UT

ST

要求スコープ

時間軸

自動化前

分析

設計 実装 UT

要求スコープ

自動化後

ST 時間軸

自動化前: リリース直前にバグが見つかり てんやわんやしていた

自動化後: 開発者や分析者が積極的かつ安全な改善を 継続的に行う事が可能に!

Page 91: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

91

まとめと 今後の課題

Page 92: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

92

まとめ:継続的システムテストの意味

クオリティ

バグ修正日数の逆数 ( アジリティ )

低 遅い 速い

自動化前

自動化前

Page 93: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

93

まとめ:継続的システムテストの意味

クオリティ

バグ修正日数の逆数 ( アジリティ )

低 遅い 速い

自動化前

自動化後 自動化前

Page 94: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

94

まとめ:継続的システムテストの意味

クオリティ

バグ修正日数の逆数 ( アジリティ )

低 遅い 速い

自動化前

1/5 1/2

自動化後 自動化前

Page 95: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

95

まとめ:継続的システムテストの意味

クオリティ

バグ修正日数の逆数 ( アジリティ )

低 遅い 速い

自動化前

1/5 1/2

自動化後 自動化前

まとめ • システムテスト自動化とCIやTDDの アイデアを組み合わせる事で 継続的システムテストを実現 • バグ修正日数を改善

Page 96: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

96

まとめ:継続的システムテストの意味

クオリティ

バグ修正日数の逆数 ( アジリティ )

低 遅い 速い

自動化前

1/5 1/2

自動化後 自動化前

Page 97: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

97

まとめ:継続的システムテストの意味

クオリティ

バグ修正日数の逆数 ( アジリティ )

低 遅い 速い

自動化前

1/5 1/2

自動化後 自動化前

Page 98: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

98

まとめ:継続的システムテストの意味

クオリティ

バグ修正日数の逆数 ( アジリティ )

低 遅い 速い

自動化前

1/5 1/2

自動化後 自動化前

今後の課題 • システムのリファクタリングによる パフォーマンスの向上 • 検索ランキングの改善 → どういった“クオリティ”に有効か?

Page 99: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

99

謝辞

エバンジェリストの方たち、 社内勉強会の方たち、 ありがとうございました!!!

Page 100: 【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST

100

Good to see system test getting some