20140212 develove テスト自動化のアプローチ拡張トレンド...

50
テスト自動化のアプローチ拡張トレンド ~e2eはExcel項目定義手動テスト からTurnip自動テストへ~ 2014.2.12 DevLove #157 福井修 @iR3

Upload: fukui-osamu

Post on 31-May-2015

3.139 views

Category:

Technology


7 download

TRANSCRIPT

Page 1: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜

テスト自動化のアプローチ拡張トレンド ~e2eはExcel項目定義手動テスト

からTurnip自動テストへ~

2014.2.12 DevLove #157 福井修 @iR3

Page 2: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜

ルビールビールビーRuby大好き

福井修@iR3

2012 Rubykaja

sendagaya.rb

#七輪life

Ruby関西cofounder2009Ruby会議スタッフ

&スポンサー

Page 3: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜

2002年KOFにて Matzを囲む

Page 4: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜

エンドツーエンドにはTurnip

Page 5: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜

from 2009.11 刻言道場「まいトレ」

http://maitore.net/

販売管理・在庫管理システム

株式会社 iRubySystems

Page 6: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜

世間の動向

Page 7: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜

ドメイン特化言語

(DSL:Domain Specific Language)

DSLのLをLibraryと広義に解釈すると…

Page 8: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜

Rails,sinatraはWebのDSL

ChefはシステムアドミストレーションのDSL

Fluentdはマシン間配送のDSL

RSpecはテストのDSL

Gherkinは仕様記述DSL

Capybaraはe2e検証のDSL

Page 9: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜

結論を先に• Rubyの進んだテストツールを使うと自動テストも美味しくええとこ取りできる

•エンドツーエンド(e2e)テスト自動化には Gherkin+Capybara +Turnip   ライブラリが有利

•外部テスト管理ツールもそろそろExcelからWebDBに

Page 10: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜

CucumberとTurnipを利用するメリットの

本質は Gherkinにあり

Page 11: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜

テスト自動化のうねり

時代の流れの背景

Page 12: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜
Page 13: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜
Page 14: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜

Andreas Spillner: “The W-MODEL – Strengthening the Bond Between Development and Test” STAREAST2002

Page 15: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜

http://www.ipa.go.jp/files/000005144.pdf

Page 16: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜

高信頼性ソフトウェアのための開発手法ハンドブックより

Page 17: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜

1.単体テスト、Unit-Test

2.結合テスト、Integration-Test,Component-Test

3.システムテスト、System-Test,e2e-Test

4.受け入れテスト、Acceptance-Test

(5.回帰テスト、regression-Test)

テストは、視点や範囲の違いでベタからメタ方向に

守備範囲の違いで区別があり

当然自動テストにもこの区別は該当

テストの種類

Page 18: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜

内部テストは「ホワイトボックステスト」

プログラマが意図したとおりにプログラムが動作することを確認するテストのこと

具体的には、プログラマが変数の値を変えながらコードを直接実行して、期待する結果が

得られるかどうかを検証

内部テスト

Page 19: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜

外部テスト外部テストは「ブラックボックステスト」

プログラムのコードに立ち入ることなくプログラムの外部インターフェース (画面 etc.) を介して評価

→ エンドツーエンドテスト

 エンドツーエンドは略して e2e

Page 20: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜

開発 Dev

運用 Ops

検証 Ver

設計→実装→テスト↓↑

ここを俊敏に繰り返し

やるのがAgile,TDD/BDD

(回帰テスト) システムテスト 受け入れテスト

e2eテスト

経営 Biz

評価 リーン

2013.9.21toRuby「カジュアルにテストして、 フォーマルに検証する」に加筆

Page 21: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜

開発 Dev

運用 Ops

検証 Ver

設計→実装→テスト↓↑

ここを俊敏に 繰り返し

やるのがAgile

経営 Biz

評価 リーン

フォーマル に検証

カジュアル にテスト

Page 22: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜

『自動テストのニーズはベタからメタへ』

!

 ベタ ←――――――――――――――→ メタ

Unit Test → Integration Test       

         → System Test、e2eTest

→ 回帰テスト

るびま42号 「エンドツーエンドテストの自動化は Cucumber から Turnip へ」を編集

Page 23: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜

Unitテスト自動化 ↓

e2eテスト自動化

Page 24: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜

るびま42号 「エンドツーエンドテストの自動化は Cucumber から Turnip へ」より

『テストツールもベタからメタへ』

!

 ベタ ←――――――――――――――→ メタ

!

 Test::Unit → RSpec

→ Gherkin (Cucumber/Turnip)

Page 25: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜

CucumberとTurnip・featureファイルと step_definitionsファイルの構成 (Gherkin 書式) を 実行するのは同じ

・Cucumberは独立なプログラム(2本立て)

・TurnipはRSpec内で実行することができる  (RSpec一本化)

・Cucumberは正規表現を使用(結構面倒)

・Turnipは代わりにプレースフォルダ

Page 26: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜

検証項目列挙方式

単体テスト項目積み上げ ボトムアップアプローチ

機能仕様書から掘り下げ トップダウンアプローチ

TDD/BDDの 成果物

Excelシート テスト設計

Page 27: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜

出典:るびま42号

Page 28: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜

gherkin書式

システムの振る舞いを記述するための自然言語に近い書式

Business Readable DSLとも呼ばれ、ベタなテストコードにメタな説明 (機能・シナリオ・ステップ) の層 (レイヤ) を付加し、プログラムの実装者でなく第三者や受け入れ者が記述し理解できる (日本語でも記述できる)

https://github.com/cucumber/cucumber/wiki/Gherkin

Page 29: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜

Gherkin書式の導入で プログラマ以外の 関係者による日本語 テストシナリオの記述

が可能に そこが画期的!!

Page 30: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜

Gerkin書式は  1.機能feature  2.シナリオ  3.ステップ

の3階層で記述

Page 31: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜

具体的な.featureファイルへ

Page 32: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜

# encoding: utf-8 # language: ja 機能: 1.画面表示確認

シナリオ: 1.トップページ確認

前提 対象ページを表示する

ならば 'ようこそ 関西Ruby会議05' が表示されていること

view01.feature

Page 33: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜

## encoding: utf-8 # language: ja 機能: 2.検索動作確認

シナリオ: 2.一覧確認

前提 対象ページを表示する

かつ 郵便番号一覧 をクリックする

ならば Zipcode が表示されていること

!

view02.feature

Page 34: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜

xx_steps.rbは featureファイルでステップ に記述した具体的な操作をRSpecとCapybaraの ライブラリの仕様にて Rubyスクリプトで実装

Page 35: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜

具体的なsteps.rbファイルへ

Page 36: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜

# encoding: utf-8 !require 'capybara/rspec' Capybara.javascript_driver = :webkit !step 'kanrk05サイトにアクセスする' do

Capybara.app_host = "http://kanrk05.ruby.iijgio.com/" Capybara.current_driver = :webkit end !step 'トップページを表示する' do

visit '/' end !step '対象ページを表示する' do

send 'kanrk05サイトにアクセスする'

send 'トップページを表示する'

end !step ":hoge が表示されていること" do |hoge|

expect(page).to have_content hoge end !

Page 37: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜

#encoding: utf-8 !

step '郵便番号一覧 をクリックする' do

#click_link '郵便番号一覧'

first(:link, '郵便番号一覧').click

end

view2_steps.rb

Page 38: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜

Excelテストケース .feature ファイル

xx_step.rb ファイル

Excelから文言を抜き出して.featureの骨組みを作るツールは作成可能

step.rbファイルを記述するにはCapybara,RspecのmatcherやWeb操作仕様の詳細を理解しておく必要があり習熟コストはかかる

自動化の肝は、.featureファイルとxx_step.rbファイルの作成

この2種類のファイルさえ作成すれば、ツール群で自動実行可能! ただしxx_step.rbに記述できない処理は当然実行できない

Page 39: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜

環境構築

Page 40: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜

Turnip入門 http://magazine.rubyist.net/?0042-FromCucumberToTurnip#l36

Page 41: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜

group :development, :test do

gem 'capybara-webkit'

gem 'headless'

gem 'rspec-rails'

gem 'spork', '~> 1.0.0rc4'

gem 'turnip'

end

Turnipインストール Gemfileでturnip..を組み込み指定 2014.2.12時点では

Turnipは1.2.0, capybaraは2.1.0, capybara-webkitは1.1.1, gherkinは2.12.2 (Rails4ではプレロードはsporkからspringに)

Page 42: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜

エンドツーエンド検証の実行

エンドツーエンド検証スクリプトを個別に実行

$ rspec -r turnip/rspec --drb spec/features/xxxxx.feature

Page 43: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜

demoサイト関西Ruby会議05用Rails4 demoサイト

高速郵便番号検索

http://kanrk05.ruby.iijgio.com/zipcodes

MOGOKは速い!

mogokでRails4は使える!(一部制約あり)

mogok無料枠美味しい!!!

Page 44: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜

Turnip入門のソースコード

https://github.com/ir3/e2etest

Page 45: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜

テストコンテンツの 管理へ

次なるテーマ

Page 46: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜
Page 47: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜
Page 48: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜

再びまとめ• Rubyの進んだテストツールを使うと自動テストも美味しくええとこ取りできる

•エンドツーエンド(e2e)テスト自動化には Gherkin+Capybara +Turnip   ライブラリが有利

•外部テスト管理ツールもそろそろExcelからWebDBに

Page 49: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜

おまけ

Page 50: 20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜

RSpec自体はテストを記述するためのドメイン特化言語(DSL:Domain Specific Language)を提供するフレームワークなので、まさに「言語」と

して広い範囲をカバー

feature spec、request specs、controller spec の使い分け

feature spec : システムテスト,e2eテスト

request specs : インテグレーションテスト

controller spec : ユニットテスト