40
1 http://www.flickr.com/photos/centerforbookarts/338532899/ 株式会社クレスコ 技術研究所 小川 充( @mitsuruog ~リグレッションテスト編~ 賢くツールを使って 脱・人海戦術駆動テスト

賢くツールを使って脱人海戦術駆動テスト

Embed Size (px)

DESCRIPTION

社内で話した内容です。テストもっと楽したいな〜^^

Citation preview

Page 1: 賢くツールを使って脱人海戦術駆動テスト

�1http://www.flickr.com/photos/centerforbookarts/338532899/

株式会社クレスコ 技術研究所 小川 充(@mitsuruog)

!

!

~リグレッションテスト編~

賢くツールを使って 脱・人海戦術駆動テスト

Page 2: 賢くツールを使って脱人海戦術駆動テスト

自己紹介小川充(おがわみつる) !株式会社クレスコ 技術研究所 フロントエンジニア !!!!!・HTML5jエンタープライズ部 運営メンバー

・OSSドキュメント翻訳コミュニティ enja-ossメンバー

・Github:https://github.com/mitsuruog

・Twitter:https://twitter.com/mitsuruog

進化し続けるフロントエンド技術と システム開発の現場をいかに融合させるか! 業務システムエンジニア目線で活動しています。

�2

Page 3: 賢くツールを使って脱人海戦術駆動テスト

はじめにWebシステムにおいて、リグレッションテスト自動化について以前よ

り議論されてきました。

これまではテスト実施手順の自動化・HTMLの文書構造レベルでの検

証について自動化するケースがほとんどでした。

今日、お話するのは手順からブラウザ上に描画される画像そのもの

の検証まで自動化する話。

�3

Page 4: 賢くツールを使って脱人海戦術駆動テスト

アジェンダ1. 人海戦術駆動テストとは

2. テスト自動化のためのマインドセット

3. 賢いツールのご紹介

3.1.Wraith

3.2.PhantomCSS

4. まとめ

�4

Page 5: 賢くツールを使って脱人海戦術駆動テスト

�5http://flic.kr/p/57t1p5

1.人海戦術駆動テストとは

Page 6: 賢くツールを使って脱人海戦術駆動テスト

人海戦術駆動テスト「人月の神話」時代から行われている、伝統的はテスト手法。

テストケースを人の手で一つ一つ丁寧かつ優しく消化していく。

様々なシステム開発の現場にて最も採用事例が多い。

導入の手軽であり、現場での人気が根強い。

�6

Page 7: 賢くツールを使って脱人海戦術駆動テスト

人海戦術駆動テスト伝統的な人海戦術駆動テストの手法

�7

Page 8: 賢くツールを使って脱人海戦術駆動テスト

人海戦術駆動テスト伝統的な人海戦術駆動テストの手法

�8

画面を操作 (Action)

Page 9: 賢くツールを使って脱人海戦術駆動テスト

人海戦術駆動テスト伝統的な人海戦術駆動テストの手法

�9

画面を操作 (Action)

画面キャプチャ (Capture)

Page 10: 賢くツールを使って脱人海戦術駆動テスト

人海戦術駆動テスト伝統的な人海戦術駆動テストの手法

�10

画面を操作 (Action)

Excelに貼付け

(Paste)

画面キャプチャ (Capture)

Page 11: 賢くツールを使って脱人海戦術駆動テスト

人海戦術駆動テスト伝統的な人海戦術駆動テストの手法

�11

画面を操作 (Action)

Excelに貼付け

(Paste)目視で確認 (Decision)

画面キャプチャ (Capture)

Page 12: 賢くツールを使って脱人海戦術駆動テスト

人海戦術駆動テスト伝統的な人海戦術駆動テストの手法

�12

画面を操作 (Action)

Excelに貼付け

(Paste)目視で確認 (Decision)

画面キャプチャ (Capture)

PDCAサイクル!?

Page 13: 賢くツールを使って脱人海戦術駆動テスト

人海戦術駆動テスト伝統的な人海戦術駆動テストの手法

�13

画面を操作 (Action)

Excelに貼付け

(Paste)目視で確認 (Decision)

画面キャプチャ (Capture)

そんな訳ないでしょ…

Page 14: 賢くツールを使って脱人海戦術駆動テスト

人海戦術駆動テスト伝統的な人海戦術駆動テストには危険が一杯!!

�14

画面を操作 (Action)

画面キャプチャ (Capture)

Excelに貼付け

(Paste)目視で確認 (Decision)

Page 15: 賢くツールを使って脱人海戦術駆動テスト

人海戦術駆動テスト伝統的な人海戦術駆動テストには危険が一杯!!

�15

画面を操作 (Action)

画面キャプチャ (Capture)

Excelに貼付け

(Paste)目視で確認 (Decision)

画面操作ミス キャプチャ取得忘れ

画像の上書き

貼付け画像間違い確認ミス

やり直せない

Page 16: 賢くツールを使って脱人海戦術駆動テスト

人海戦術駆動テストの問題点

�16

速度・正確性が個人の能力に依存する。

テストプロセスが個人に依存する。

繰り返しに弱い。

Page 17: 賢くツールを使って脱人海戦術駆動テスト

人海戦術駆動テストの問題点

�17

速度・正確性が個人の能力に依存する。

テストプロセスが個人に依存する。

繰り返しに弱い。

人にやらせない。

Page 18: 賢くツールを使って脱人海戦術駆動テスト

人海戦術駆動テストの問題点

�18

速度・正確性が個人の能力に依存する。

テストプロセスが個人に依存する。

繰り返しに弱い。

人にやらせない。

スクリプト化しましょう Excelの手順書なんて 読んでくれません

Page 19: 賢くツールを使って脱人海戦術駆動テスト

人海戦術駆動テストの問題点

�19

速度・正確性が個人の能力に依存する。

テストプロセスが個人に依存する。

繰り返しに弱い。

人にやらせない。

スクリプト化しましょう Excelの手順書なんて 読んでくれません

だから、スクリプト化したら 何度もできるって!!

Page 20: 賢くツールを使って脱人海戦術駆動テスト

人は間違いを犯す 生き物です

人が苦手な部分を頑張ってやる必要はありません

http://flic.kr/p/5BAYMk

Page 21: 賢くツールを使って脱人海戦術駆動テスト

�21

2.テスト自動化のための マインドセット

Page 22: 賢くツールを使って脱人海戦術駆動テスト

テスト自動化のためのマインドセット

�22

再実行可能 検証可能 メンテナンス可能

Page 23: 賢くツールを使って脱人海戦術駆動テスト

再実行可能何度でも実行できること。何度やっても結果が変わらないこと。 !手続きとデータを組み合わせれば、常に同じ結果となるようにすることが大事。 !手続き(ex. 人の画面操作)

URL(REST)

スクリプト(Selenium、Casperjs)

データ(ex. 実際に表示される画面)

ダミーレスポンス(HTML、JSON) データベース上のダミーデータ

�23

Page 24: 賢くツールを使って脱人海戦術駆動テスト

検証可能テスト実行結果を残せること、前回との違いを検出できること。 !Image DIFF 2つの画像を解析し、機械的に差異を抽出する技術。

どこが違うか考えてみてください

�24

Page 25: 賢くツールを使って脱人海戦術駆動テスト

検証可能画面の細かな違いは、人の目では判別できない。

�25

ここ?

Page 26: 賢くツールを使って脱人海戦術駆動テスト

検証可能画面の細かな違いは、人の目では判別できない。

細かな違いが!!イメージDIFFでの結果

�26

Page 27: 賢くツールを使って脱人海戦術駆動テスト

メンテナンス可能テストは組み合わせ爆発しやすい。

テスト自動化が重荷となっているケースは確かに存在する。

!

テスト自動化のアンチパターンを意識して計画すること。

様々な種類のテストを同時におこなってないか?

テスト実行に時間が掛かり過ぎてないか?

テストは簡単に実行することができるか?

�27

大事なことなのでもう一回言おう。

テストは組み合わせ爆発しやすい。﹅ ﹅ ﹅ ﹅ ﹅ ﹅ ﹅ ﹅ ﹅ ﹅ ﹅ ﹅ ﹅ ﹅ ﹅

Page 28: 賢くツールを使って脱人海戦術駆動テスト

組み合わせ爆発しないいかにテストの組み合わせ爆発を避けるか…

!様々なテストを一緒に行うと、ケースの粒度が細かくなる。 まず適切にレイアー、モジュール分割し小さい単位でユニットテスト。

業務のクリティカルパスを意識してテストする。 カバレッジ100%に本当に価値があるのか?

�28

ユニットテスト ユニットテスト

ユニット間結合まとめてやらない!!

Page 29: 賢くツールを使って脱人海戦術駆動テスト

�29

3.賢いツールのご紹介

Page 30: 賢くツールを使って脱人海戦術駆動テスト

Wraith https://github.com/BBC-News/wraith

�30

Page 31: 賢くツールを使って脱人海戦術駆動テスト

WraithBBCNewsが公開しているOSS 使用技術

Ruby ImageMagic phantomJS

�31

Page 32: 賢くツールを使って脱人海戦術駆動テスト

Wraith特徴 様々な画面サイズのキャプチャが取得可能 画像の差分をDIFFイメージとして出力

テストケースの手続き方法がURL とにかく手軽、でも遅い

�32

Page 33: 賢くツールを使って脱人海戦術駆動テスト

Wraith用途 異なるドメイン間での比較。 (テスト環境とステージング環境など) 手続き方法がURLであるため、REST型か静的サイトがいい。 画面全体をキャプチャするため、広告など動きのあるサイトには向かない。

�33

Page 34: 賢くツールを使って脱人海戦術駆動テスト

PhantomCSS https://github.com/Huddle/PhantomCSS

�34

Page 35: 賢くツールを使って脱人海戦術駆動テスト

PhantomCSSCSSリグレッションテストのためのOSS 使用技術

CasperJS phantomJS Resemble.js

�35

Page 36: 賢くツールを使って脱人海戦術駆動テスト

PhantomCSS特徴 画面サイズは1つ固定。

画像の差分をDIFFイメージとして出力。 画面の部分単位でスクリーンショットが取得、除外が可能。 テストケースの手続き方法がプログラム的(CasperJS形式)。 そこそこ速い。

画面の一部分を指定して スクリーンショットが取得可能 (同じ方法で除外指定が可能)

�36

Page 37: 賢くツールを使って脱人海戦術駆動テスト

PhantomCSS用途 同じドメインでの比較。(前日との違いなど) 手続き方法がプログラムであるため、REST型から画面遷移型まで幅広く対応可能。 あらゆるテストフェーズにて利用できる(そう)。

DIFF画像はフォルダを指定して分離・出力可能

�37

Page 38: 賢くツールを使って脱人海戦術駆動テスト

�38

4.まとめ

Page 39: 賢くツールを使って脱人海戦術駆動テスト

まとめ!!テスト自動化Toolの進化はかなり進んでいる。

!Toolを利用するためには、事前に入念な計画と準備(設計)が必要。

!今後は、作ってから適用するアプローチから、適用することを念頭に設計するアプローチへの変革が大事。 !Toolの進化スピードは早いので、その時々で複数の選択肢から検討する必要がある。

�39

Page 40: 賢くツールを使って脱人海戦術駆動テスト

ご静聴ありがとうございました

小川 充(@mitusurog)

�40