【システムテスト自動化カンファレンス2015】...
TRANSCRIPT
楽天の品質改善を加速する継続的システムテストパターンDec. 13, 2015Kotaro Ogino, Kikugawa MarikoDevelopment Support GroupService Support SectionGroup Core Service Department
2
Who am I?
役割 責任 資格とか発表とか
Product & Tech Lead 社内自動化プラットフォーム構築 PJの要求管理とアーキテクチャー設計
Senior Test Engineer テストリーダーへのアドバイスやレビュー
• JaSST’ Tokyo 2014
• SQiP 2014
Acting QA Manager テスト戦略の策定テストチームの立ち上げ
3
Blog
アジャイルテスト
検索
ウォータースクラムフォール
検索
4
本日の発表:継続的システムテスト3部作
5
本日の発表:継続的システムテスト 1 ・ 2 作目
単一のプロジェクトでのシステムテスト自動化
6
本日の発表:継続的システムテスト3部作
7
本日の発表:継続的システムテスト3部作
・ 20 サービスの共通自動化プラットフォームの構築・異なる文化ソフトウェアテスト・異なるコンテキストでの品質
8
本日の発表:継続的システムテスト3部作
・ 20 サービスの共通自動化プラットフォームの構築・異なる文化ソフトウェアテスト・異なるコンテキストでの品質
継続的システムテストの一般化
9
本日お持ち帰りいただきたいこと:継続的システムテスト
10
本日お持ち帰りいただきたいこと:継続的システムテスト
自動テスト( Product )
11
本日お持ち帰りいただきたいこと:継続的システムテスト
自動テスト( Product )
Selenium CucumberJenkins
12
本日お持ち帰りいただきたいこと:継続的システムテスト
自動テスト( Product )
Selenium CucumberJenkins
13
本日お持ち帰りいただきたいこと:継続的システムテスト
自動テスト( Product )
生産性-Speed-Cost
14
本日お持ち帰りいただきたいこと:継続的システムテスト
継続的システムテスト
自動テスト( Product )
生産性-Speed-Cost
15
本日お持ち帰りいただきたいこと:継続的システムテスト
継続的システムテスト
自動テスト( Product )
永続性-Evoluvability
-Maintainability
生産性-Speed-Cost
信頼性-Effectiveness
-Availability
16
本日お持ち帰りいただきたいこと:継続的システムテスト
継続的システムテスト
継続的テスト(Process)
自動テスト( Product )
アジャイルテスター( People)
永続性-Evoluvability
-Maintainability
生産性-Speed-Cost
信頼性-Effectiveness
-Availability
17
本日お持ち帰りいただきたいこと:継続的システムテスト
継続的システムテスト
継続的テスト(Process)
自動テスト( Product )
アジャイルテスター( People)
永続的開発Infrastructure
asCode
CI in Test
永続性-Evoluvability
-Maintainability
生産性-Speed-Cost
信頼性-Effectiveness
-Availability
CI継続的フィードバック
アジャイルテスト4象限 スキルセットTestable
Architecture
18
本日お持ち帰りいただきたいこと:継続的システムテスト
継続的システムテスト
継続的テスト(Process)
自動テスト( Product )
アジャイルテスター( People)
永続的開発Infrastructure
asCode
CI in Test
永続性-Evoluvability
-Maintainability
生産性-Speed-Cost
信頼性-Effectiveness
-Availability
CI継続的フィードバック
アジャイルテスト4象限 スキルセットTestable
Architecture
解決したい課題
( 品質 )
解決方法( コンセプト )
実装
19
本日お持ち帰りいただきたいこと
継続的システムテストの ・解決したい課題(品質) ・解決方法(コンセプト) ・実装についての ・楽天の取り組み ・そこから得た知見
20
継続的システムテスト
継続的システムテスト
継続的テスト(Process)
自動テスト( Product )
アジャイルテスター( People)
永続的開発Infrastructure
asCode
CI in Test
永続性-Evoluvability
-Maintainability
生産性-Speed-Cost
信頼性-Effectiveness
-Availability
CI継続的フィードバック
アジャイルテスト4象限 スキルセットTestability
Architecture
21
永続性と継続的テスト
継続的システムテスト
継続的テスト(Process)
自動テスト( Product )
アジャイルテスター( People)
永続的開発Infrastructure
asCode
CI in Test
永続性-Evoluvability
-Maintainability
生産性-Speed-Cost
信頼性-Effectiveness
-Availability
CI継続的フィードバック
アジャイルテスト4象限 スキルセットTestability
Architecture
22
開発の永続性と継続的テスト
・ 開発の永続性 “ Development and Deploy in Facebook”, Facebook, 2013. https://research.facebook.com/publications/247272798756913/development-and-deployment-at-facebook
・ 継続的テスト “ Continuous Testing: The missing link in the Continuous Delivery”, BlazeMeter, 2015. https://blazemeter.com/blog/continuous-testing-missing-link-continuous-delivery-process
23
開発の永続性と継続的テスト
・ 開発の永続性
・ 継続的テスト
SCM
時間サービスの
成長度
ソースコード ソースコード ソースコード ソースコード ソースコード ソースコード ソースコード
リリース
リリース
リリース
リリース
リリース
リリース
SCM
テストケース テストケース テストケース テストケース テストケース テストケース テストケース
テスト テスト テスト テスト テスト テスト
24
開発の永続性と継続的テスト
“ 継続的システムテストについての理解を理解を深めるための開発とバグのメトリクスの分析” ,SQiP 2014.
SQiP 2014 で、継続的テストにより開発の永続性を担保しているプロジェクトの分析について経験発表
25
永続性と継続的テスト
継続的システムテスト
継続的テスト(Process)
自動テスト( Product )
アジャイルテスター( People)
永続的開発Infrastructure
asCode
CI in Test
永続性-Evoluvability
-Maintainability
生産性-Speed-Cost
信頼性-Effectiveness
-Availability
CI継続的フィードバック
アジャイルテスト4象限 スキルセットTestability
Architecture
26
継続的テスト
継続的システムテスト
継続的テスト(Process)
自動テスト( Product )
アジャイルテスター( People)
永続的開発Infrastructure
asCode
CI in Test
永続性-Evoluvability
-Maintainability
生産性-Speed-Cost
信頼性-Effectiveness
-Availability
CI継続的フィードバック
アジャイルテスト4象限 スキルセットTestable
Architecture
27
継続的テストの実装
継続的テスト(Process)
永続的開発Infrastructure
asCode
CI in Test
永続性-Evoluvability
-Maintainability
CI継続的
フィードバック
28
継続的テストの実装
継続的テスト(Process)
Infrastructureas
CodeCI in Test
永続性-Evoluvability
-Maintainability
CI継続的
フィードバック
29
永続的開発
Problem ・サービスやプロダクトの永続的な改善が困難
Cause ・要求が適切に優先順位付けされていない ・要求と開発要件のトレーサビリティーがない
Solution ・バックログの導入 ・単一のソースコードレポジトリ ・バージョン管理
30
永続的開発
要求 このまま開発するのは
難しい
31
永続的開発
要求
ユーザーストーリー
ユーザーストーリー
ユーザーストーリー
ユーザーストーリー
ソースコード
ソースコード
ソースコード
ソースコード
テスト
テスト
テスト
テスト
後から変更しやすいようにトレーサビリティーを確保
32
永続的開発
要求
ユーザーストーリー
ユーザーストーリー
ユーザーストーリー
ユーザーストーリー
バックログ
ソースコード
SCM
ソースコード
ソースコード
ソースコード
テスト
テストレポジトリ
テスト
テスト
テスト
バージョン管理
33
継続的テストの実装
継続的テスト(Process)
Infrastructureas
CodeCI in Test
永続性-Evoluvability
-Maintainability
CI継続的
フィードバック
34
継続的テストの実装
継続的テスト(Process)
Infrastructureas
CodeCI in Test
永続性-Evoluvability
-Maintainability
35
CI ・継続的フィードバック
Problem ・継続的な品質のフィードバックが困難
Cause ・継続的にソースコードがコミットされていない ・テストの実行時間が長い ・品質可視化のコストが高い
Solution ・ CI の導入 ・テスト自動実行 ・品質可視化を自動化
36
CI ・継続的フィードバックが開発を強力にサポート
“ 継続的システムテストについての理解を理解を深めるための開発とバグのメトリクスの分析” ,SQiP 2014.
SQiP 2014 での経験発表 開発者がコミット直後にバグに気づき修正
37
CI ・継続的フィードバック :Jenkins による自動テスト実行
テストを Jenkins で毎日自動実行
毎日実行するので、いつ失敗したか一目瞭然
38
継続的フィードバック : ツールを用いたレポートの自動化
機能テストの結果 パフォーマンステストの結果
SauceLabs によるブラウザカバレッジの可視化
Screen Castオンプレミス環境用のJenkins Plugin
レポートも自動で生成されるので品質が簡単にわかる
39
継続的フィードバック : ツールを用いたレポートの自動化
静的解析とカバレッジ
レポートの要約
40
継続的フィードバック : ツールを用いたレポートの自動化
ELK を使って各ツールのレポートを要約プロセスメトリクスもレポートに
41
継続的テストの実装
継続的テスト(Process)
Infrastructureas
CodeCI in Test
永続性-Evoluvability
-Maintainability
42
継続的テストの実装
継続的テスト(Process)
CI in Test
永続性-Evoluvability
-Maintainability
43
Infrastructure as Code
Problem ・頻繁なデプロイ・リリースが出来ていない
Cause ・手動でのインフラ構築 ・秘伝の手順書 ・インフラの構築手順がテストされていない
Solution ・インフラ構築の自動化 ・インフラの設定を SCM で管理 ・インフラの構築手順もテスト
44
Infrastructure as Code
http://blogs.technet.com/b/livedevopsinjapan/archive/2015/10/22/devops-1-devops.aspx
45
継続的テストの実装
継続的テスト(Process)
CI in Test
永続性-Evoluvability
-Maintainability
46
継続的テストの実装
継続的テスト(Process)
永続性-Evoluvability
-Maintainability
47
CI in Test
Problem ・頻繁なテスト実行が出来ていない
Cause ・テストの継続的な変更と信頼性に問題 ・問題の切り分けに時間がかかる ・テスト設計の変更に時間がかかる
Solution ・テストのバージョン管理の導入 ・開発・テスト・本番環境の構築手順の共通化 ・テスト設計の Refactorability の改善
48
CI in Test: テストのバージョン管理の導入
自動テストはソースコードなのでもちろん Git で管理
手動テストはTestRail
49
CI in Test: 開発・テスト・本番環境の構築手順の共通化
“ システムテストの自動化による大規模分散検索プラットフォームの開発工程改善” , JaSST’Tokyo 2014
・テスト開発環境を提供・テストも、テストしてからコミットする
50
CI in Test: テストの Refactorability の改善
手順 ケース1 ケース2
ユーザ A が登録されていない事を確認 ◯ ◯登録ページ( register.xxx.com )を開く ◯ ◯ユーザ名に” A” を入力 ◯ ◯パスワードに” a” を入力 ◯ ◯メールアドレスを” a” を入力 ◯メールアドレスに[email protected]を入力 ◯登録ボタンをクリック ◯ ◯登録できましたと表示される ◯不正なメールアドレスと表示される ◯ユーザ A を削除 ◯
操作手順
システムの静的な仕様・設計
メールアドレスのバリデーションは
一般的なテスト観点しかし、再利用が難しい
テストと設計がリファクタリングしにくい例
事前準備
期待値
テスト条件
51
CI in Test:Cucumber + PageObject design
Feature file: Behavior を記述Feature: Validation for registration PageBackground: Given the user A is not registered in the system and the end user opens RegistrationPage when the user gives <userName> and <password> <mail> and submit the form then the message shown in the page is <message>Examples: | userName | password | mail | message | | “A” | “a” | “a.rakuten.com” | “registered” | | “A“ | “a” | “a” | “invalid mail address” |
Public class RegstrationPage extends WebPageOjectBase { final static public String NAME = “RegistrationPage”
public RegistrationPage() { super(NAME, “registration.xxx.com”); addInputElement(“username”,”username”); ….}
PageObjectBase
テスト観点file
PageObject file: 静的な仕様を記述
* API や Node も同じ仕組みで管理
操作手順
システムの静的な仕様・設計
テスト観点
事前準備
期待値
テスト条件
52
継続的テストの実装まとめ
継続的テスト(Process)
永続性-Evoluvability
-Maintainability
53
継続的システムテスト
継続的システムテスト
継続的テスト(Process)
自動テスト( Product )
アジャイルテスター( People)
永続的開発Infrastructure
asCode
CI in Test
永続性-Evoluvability
-Maintainability
生産性-Speed-Cost
信頼性-Effectiveness
-Availability
CI継続的フィードバック
アジャイルテスト4象限 スキルセットTestable
Architecture
54
生産性と自動テスト
継続的システムテスト
継続的テスト(Process)
自動テスト( Product )
アジャイルテスター( People)
永続的開発Infrastructure
asCode
CI in Test
永続性-Evoluvability
-Maintainability
生産性-Speed-Cost
信頼性-Effectiveness
-Availability
CI継続的フィードバック
アジャイルテスト4象限 スキルセットTestable
Architecture
55
生産性と自動テスト
継続的システムテスト
継続的テスト(Process)
自動テスト( Product )
アジャイルテスター( People)
永続的開発Infrastructure
asCode
CI in Test
永続性-Evoluvability
-Maintainability
生産性-Speed-Cost
信頼性-Effectiveness
-Availability
CI継続的フィードバック
アジャイルテスト4象限 スキルセットTestable
Architecture
56
生産性と自動テスト
・ 自動テストによる生産性改善 ・テスト実行の効率化(費用対効果) ・テスト実行頻度の増加 (CI in Test) ・レポート( CI ・継続的フィードバック)の効率化
57
生産性と自動テスト:貯金をする事を考えてみる
…
1日
目 2日
目 3日
目 N-2
日目
N-1
日目
N日
目
プロジェクト:N 日でコインを100枚貯める
オプション1https://pixabay.com/en/piggy-bank-savings-
money-bank-coin-621068/
最後にしかフィードバックが得られない
毎日フィードバックが得られる
https://pixabay.com/en/atm-machine-symbol-icon-blue-310121/
58
生産性と自動テスト:貯金をする事を考えてみる
1回こっきりのテストのイメージ 貯金箱を壊して枚数を確認する
→足らなかったらわざわざ貯金箱を 買ってきていれなおす必要 w
コインを入れたら、現在の貯金額を教えてくれる→ 今日足らなさそうだったら、 ちょっと多めに入れてみる
自動テストにより継続的にテスト実行するイメージ
毎日品質についてフィードバックするツールの一つ
59
自動テストが生産性を向上する例
“ システムテスト自動化による大規模検索プラットフォームの開発工程改善” , JaSST’Tokyo 2014
バグを作ってからすぐに修正可能なのでバグの修正日数が早くなる
60
生産性と自動テスト
継続的システムテスト
継続的テスト(Process)
自動テスト( Product )
アジャイルテスター( People)
永続的開発Infrastructure
asCode
CI in Test
永続性-Evoluvability
-Maintainability
生産性-Speed-Cost
信頼性-Effectiveness
-Availability
CI継続的フィードバック
アジャイルテスト4象限 スキルセットTestable
Architecture
61
自動テストの実装
自動テスト( Product )
生産性-Speed-Cost
TestableArchitecture
62
自動テストの実装
自動テスト( Product )
生産性-Speed-Cost
63
Testable Architecture
Problem ・テストの自動化カバレッジが低い
Cause ・テストの確認項目がシステムから取得不可 ・外部サービスとの結合テストが困難 ・テストデータの作成が困難
Solution ・プロダクトと自動テストの一体化した設計 - テストモード -Mock Internet - 本番データからのテストデータのサンプリング
64
Testable Architecture: GTAC 2015 で感じたこと
https://developers.google.com/google-test-automation-conference/2015/
・プロダクトと自動テストの一体化した設計 - テストモード -Mock Internet - 本番データからのテストデータのサンプリング
65
自動テストの実装まとめ
自動テスト( Product )
生産性-Speed-Cost
66
生産性と自動テスト
継続的システムテスト
継続的テスト(Process)
自動テスト( Product )
アジャイルテスター( People)
永続的開発Infrastructure
asCode
CI in Test
永続性-Evoluvability
-Maintainability
生産性-Speed-Cost
信頼性-Effectiveness
-Availability
CI継続的フィードバック
アジャイルテスト4象限 スキルセットTestable
Architecture
67
生産性と自動テスト
・ 自動テストは生産性を向上 ・ しかし、自動テストのみでは 信頼性や効率性などのテスト自体の品質は 担保されない
・テストの品質の向上 ・ アジャイルテスター
68
生産性と自動テスト
継続的システムテスト
継続的テスト(Process)
自動テスト( Product )
アジャイルテスター( People)
永続的開発Infrastructure
asCode
CI in Test
永続性-Evoluvability
-Maintainability
生産性-Speed-Cost
信頼性-Effectiveness
-Availability
CI継続的フィードバック
アジャイルテスト4象限 スキルセットTestable
Architecture
69
アジャイルテスターの実装
アジャイルテスター( People)
信頼性-Effectiveness
-Availability
アジャイルテスト4象限 スキルセット
70
アジャイルテスターの実装
アジャイルテスター( People)
信頼性-Effectiveness
-Availability
スキルセット
71
アジャイルテスト4象限
Problem ・バグの見落とし、遅すぎる発見
Cause ・無駄なテスト、重複、遅すぎるテスト実行 ・ ~ility テストの見落とし
Solution ・「誰の?」「どんな?」テストの価値を整理 ・(システムテストのフォーカスを決める) ・品質をテストする
72
アジャイルテスト4象限:「誰の?」「どんな?」テストの価値を整理
http://lisacrispin.com/downloads/AdpTestPlanning.pdf
73
アジャイルテスト4象限:「誰の?」「どんな?」テストの価値を整理
http://lisacrispin.com/downloads/AdpTestPlanning.pdf
開発の価値
ユーザーの価値
74
アジャイルテスト4象限:テストの価値の受け取り手(楽天の場合)
Dev Ops
Test Automation Team
BusinessValues
BusinessRequirements
https://pixabay.com/en/businessmen-men-people-office-42691/
75
アジャイルテスト4象限:テストの価値の受け取り手(楽天の場合)
76
アジャイルテスト4象限:テストの価値の受け取り手(楽天の場合)
http://lisacrispin.com/downloads/AdpTestPlanning.pdf
開発の価値
ユーザーの価値
運用者の価値
77
アジャイルテスト4象限:システムテスト(レベル/フェーズ)のフォーカスを決める
継続的システムテストなので
78
アジャイルテスト4象限:システムテスト(レベル/フェーズ)のフォーカスを決める
Commit Stage・開発者向けの機能テスト
Capacity Stage・運用者向けの性能テスト
Pre-Production Stage・ユーザ向けの β テスト
“ 継続的デリバリー” ・テスト戦略 ・デプロイメントパイプライン
*注 説明のために単純化してます
デプロイメントパイプライン
システムテスト?
システムテスト?
システムテスト?
79
アジャイルテスト4象限:システムテストのフォーカスを決める
システムテストテストレベル的に
は、、、システム全体のテスト
テストフェーズ的には、、、最後のフェーズのテスト
システム全体の最終品質が Readyか?
80
アジャイルテスト4象限:楽天での品質のテスト
・” Software System Architecture”. Rozanski Woods.http://www.viewpoints-and-perspectives.info/home/perspectives/
・“ System and Software Quality Requirements and Evaluation”http://www.iso.org/iso/catalogue_detail.htm?csnumber=35733
Quality in User Story format
Quality Analysis
81
アジャイルテスト4象限:例)オペラビリティテスト
運用者にとっての価値: 運用を安心して実施できること →運用スクリプトもテストする
82
ちなみにデプロイメントパイプライン
83
アジャイルテスターの実装
アジャイルテスター( People)
信頼性-Effectiveness
-Availability
スキルセット
84
アジャイルテスターの実装
アジャイルテスター( People)
信頼性-Effectiveness
-Availability
85
スキルセット
Problem ・テストができる人、やりたい人が少ない
Cause ・テスト自動化エンジニアは新しい ・トレーニングなどの不足
Solution ・キャリアパスの明確化 ・スキルセットの定義 ・新人研修
86
スキルセット:キャリアパスの明確化
テスト”だけ”詳しいエンジニアではなく自動化にも、リリースにも詳しいエンジニアを育てる
スキルセットの方向性
87
スキルセット:ちなみに
最近うちのチームメンバーの一番人気は Automation ArchitectRelease Automation をやってからTest Automation をやりたいというエンジニアが多かったChef はいいぞ!とみんな感じている
88
テスト自動化エンジニアは Process, Product, People に精通
継続的システムテスト
継続的テスト(Process)
自動テスト( Product )
アジャイルテスター( People)
永続的開発Infrastructure
asCode
CI in Test
永続性-Evoluvability
-Maintainability
生産性-Speed-Cost
信頼性-Effectiveness
-Availability
CI継続的フィードバック
アジャイルテスト4象限 スキルセットTestable
Architecture
89
スキルセット:新人研修
90
アジャイルテスターの実装
アジャイルテスター( People)
信頼性-Effectiveness
-Availability
91
まとめ
92
継続的システムテストパターン
継続的システムテスト
継続的テスト(Process)
自動テスト( Product )
アジャイルテスター( People)
永続的開発Infrastructure
asCode
CI in Test
永続性-Evoluvability
-Maintainability
生産性-Speed-Cost
信頼性-Effectiveness
-Availability
CI継続的フィードバック
アジャイルテスト4象限 スキルセットTestable
Architecture
93
継続的システムテストパターン
継続的システムテスト
継続的テスト(Process)
自動テスト( Product )
アジャイルテスター( People)
永続的開発Infrastructure
asCode
CI in Test
永続性-Evoluvability
-Maintainability
生産性-Speed-Cost
信頼性-Effectiveness
-Availability
CI継続的フィードバック
アジャイルテスト4象限 スキルセットTestable
Architecture
解決したい課題
( 品質 )
解決方法( コンセプト )
実装
94
Continuous System Test loves DevOps