狠狠撸

狠狠撸Share a Scribd company logo
楽天の品質改善を加速する
継続的システムテストパターン
Dec. 13, 2015
Kotaro Ogino, Kikugawa Mariko
Development Support Group
Service Support Section
Group 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
as
Code
CI in Test
永続性
-Evoluvability
-Maintainability
生産性
-Speed
-Cost
信頼性
-Effectiveness
-Availability
CI
継続的フィードバック
アジャイルテスト
4象限
スキルセットTestable
Architecture
18
本日お持ち帰りいただきたいこと:
継続的システムテスト
継続的システムテスト
継続的テスト
(Process)
自動テスト
(Product)
アジャイルテスター
(People)
永続的開発
Infrastructure
as
Code
CI in Test
永続性
-Evoluvability
-Maintainability
生産性
-Speed
-Cost
信頼性
-Effectiveness
-Availability
CI
継続的フィードバック
アジャイルテスト
4象限
スキルセットTestable
Architecture
解決したい課題
(品質)
解決方法
(コンセプト)
実装
19
本日お持ち帰りいただきたいこと
継続的システムテストの
?解決したい課題(品質)
?解決方法(コンセプト)
?実装
についての
?楽天の取り組み
?そこから得た知見
20
継続的システムテスト
継続的システムテスト
継続的テスト
(Process)
自動テスト
(Product)
アジャイルテスター
(People)
永続的開発
Infrastructure
as
Code
CI in Test
永続性
-Evoluvability
-Maintainability
生産性
-Speed
-Cost
信頼性
-Effectiveness
-Availability
CI
継続的フィードバック
アジャイルテスト
4象限
スキルセットTestability
Architecture
21
永続性と継続的テスト
継続的システムテスト
継続的テスト
(Process)
自動テスト
(Product)
アジャイルテスター
(People)
永続的開発
Infrastructure
as
Code
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
as
Code
CI in Test
永続性
-Evoluvability
-Maintainability
生産性
-Speed
-Cost
信頼性
-Effectiveness
-Availability
CI
継続的フィードバック
アジャイルテスト
4象限
スキルセットTestability
Architecture
26
継続的テスト
継続的システムテスト
継続的テスト
(Process)
自動テスト
(Product)
アジャイルテスター
(People)
永続的開発
Infrastructure
as
Code
CI in Test
永続性
-Evoluvability
-Maintainability
生産性
-Speed
-Cost
信頼性
-Effectiveness
-Availability
CI
継続的フィードバック
アジャイルテスト
4象限
スキルセットTestable
Architecture
27
継続的テストの実装
継続的テスト
(Process)
永続的開発
Infrastructure
as
Code
CI in Test
永続性
-Evoluvability
-Maintainability
CI
継続的
フィードバック
28
継続的テストの実装
継続的テスト
(Process)
Infrastructure
as
Code
CI in Test
永続性
-Evoluvability
-Maintainability
CI
継続的
フィードバック
29
永続的開発
Problem
?サービスやプロダクトの永続的な改善が困難
Cause
?要求が適切に優先順位付けされていない
?要求と開発要件のトレーサビリティーがない
Solution
?バックログの導入
?単一のソースコードレポジトリ
?バージョン管理
30
永続的開発
要求 このまま開発するの
は
難しい
31
永続的開発
要求
ユーザー
ストーリー
ユーザー
ストーリー
ユーザー
ストーリー
ユーザー
ストーリー
ソース
コード
ソース
コード
ソース
コード
ソース
コード
テスト
テスト
テスト
テスト
後から変更しやすいように
トレーサビリティーを確保
32
永続的開発
要求
ユーザー
ストーリー
ユーザー
ストーリー
ユーザー
ストーリー
ユーザー
ストーリー
バックログ
ソース
コード
SCM
ソース
コード
ソース
コード
ソース
コード
テスト
テスト
レポジトリ
テスト
テスト
テスト
バージョン管理
33
継続的テストの実装
継続的テスト
(Process)
Infrastructure
as
Code
CI in Test
永続性
-Evoluvability
-Maintainability
CI
継続的
フィードバック
34
継続的テストの実装
継続的テスト
(Process)
Infrastructure
as
Code
CI 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)
Infrastructure
as
Code
CI 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/livedevopsinj
apan/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”を入力 ?
メールアドレスにa@rakuten.comを入力 ?
登録ボタンをクリック ? ?
登録できましたと表示される ?
不正なメールアドレスと表示される ?
ユーザAを削除 ?
操作手順
システムの
静的な仕様?設計
メールアドレスの
バリデーションは
一般的なテスト観点
しかし、再利用が難しい
テストと設計がリファクタリングしにくい例事前準備
期待値
テスト条件
51
CI in Test:Cucumber + PageObject design
Feature file: Behaviorを記述
Feature: Validation for registration Page
Background:
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
as
Code
CI in Test
永続性
-Evoluvability
-Maintainability
生産性
-Speed
-Cost
信頼性
-Effectiveness
-Availability
CI
継続的フィードバック
アジャイルテスト
4象限
スキルセットTestable
Architecture
54
生産性と自動テスト
継続的システムテスト
継続的テスト
(Process)
自動テスト
(Product)
アジャイルテスター
(People)
永続的開発
Infrastructure
as
Code
CI in Test
永続性
-Evoluvability
-Maintainability
生産性
-Speed
-Cost
信頼性
-Effectiveness
-Availability
CI
継続的フィードバック
アジャイルテスト
4象限
スキルセットTestable
Architecture
55
生産性と自動テスト
継続的システムテスト
継続的テスト
(Process)
自動テスト
(Product)
アジャイルテスター
(People)
永続的開発
Infrastructure
as
Code
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
as
Code
CI in Test
永続性
-Evoluvability
-Maintainability
生産性
-Speed
-Cost
信頼性
-Effectiveness
-Availability
CI
継続的フィードバック
アジャイルテスト
4象限
スキルセットTestable
Architecture
61
自動テストの実装
自動テスト
(Product)
生産性
-Speed
-Cost
Testable
Architecture
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
as
Code
CI in Test
永続性
-Evoluvability
-Maintainability
生産性
-Speed
-Cost
信頼性
-Effectiveness
-Availability
CI
継続的フィードバック
アジャイルテスト
4象限
スキルセットTestable
Architecture
67
生産性と自動テスト
? 自動テストは生産性を向上
? しかし、自動テストのみでは
信頼性や効率性などのテスト自体の品質は
担保されない
?テストの品質の向上
? アジャイルテスター
68
生産性と自動テスト
継続的システムテスト
継続的テスト
(Process)
自動テスト
(Product)
アジャイルテスター
(People)
永続的開発
Infrastructure
as
Code
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
Business
Values
Business
Requirements
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 Architect
Release Automation をやってから
Test Automationをやりたいという
エンジニアが多かった
Chefはいいぞ!とみんな感じている
88
テスト自動化エンジニアはProcess, Product, Peopleに精通
継続的システムテスト
継続的テスト
(Process)
自動テスト
(Product)
アジャイルテスター
(People)
永続的開発
Infrastructure
as
Code
CI in Test
永続性
-Evoluvability
-Maintainability
生産性
-Speed
-Cost
信頼性
-Effectiveness
-Availability
CI
継続的フィードバック
アジャイルテスト
4象限
スキルセットTestable
Architecture
89
スキルセット:新人研修
90
アジャイルテスターの実装
アジャイルテスター
(People)
信頼性
-Effectiveness
-Availability
91
まと
め
92
継続的システムテストパターン
継続的システムテスト
継続的テスト
(Process)
自動テスト
(Product)
アジャイルテスター
(People)
永続的開発
Infrastructure
as
Code
CI in Test
永続性
-Evoluvability
-Maintainability
生産性
-Speed
-Cost
信頼性
-Effectiveness
-Availability
CI
継続的フィードバック
アジャイルテスト
4象限
スキルセットTestable
Architecture
93
継続的システムテストパターン
継続的システムテスト
継続的テスト
(Process)
自動テスト
(Product)
アジャイルテスター
(People)
永続的開発
Infrastructure
as
Code
CI in Test
永続性
-Evoluvability
-Maintainability
生産性
-Speed
-Cost
信頼性
-Effectiveness
-Availability
CI
継続的フィードバック
アジャイルテスト
4象限
スキルセットTestable
Architecture
解決したい課題
(品質)
解決方法
(コンセプト)
実装
94
Continuous System Test
loves DevOps

More Related Content

【システムテスト自動化カンファレンス2015】 楽天の品質改善を加速する継続的システムテストパターン #stac2015