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

2014.2.12 DevLove #157
福井修 @iR3
ルビールビールビー
Ruby大好き
福井修@iR3
2012 Rubykaja
sendagaya.rb
#七輪life

Ruby関西cofounder

2009Ruby会議スタッフ

&スポンサー
2002年KOFにて Matzを囲む
エンドツーエンドにはTurnip
from 2009.11
刻言道場「まいトレ」
http://maitore.net/
販売管理・在庫管理システム

株式会社 iRubySystems
世間の動向
ドメイン特化言語
(DSL:Domain Specific Language)

DSLのLをLibraryと広義に解釈すると…
Rails,sinatraはWebのDSL
ChefはシステムアドミストレーションのDSL
Fluentdはマシン間配送のDSL
RSpecはテストのDSL
Gherkinは仕様記述DSL
Capybaraはe2e検証のDSL
結論を先に
• Rubyの進んだテストツールを使うと自動
テストも美味しくええとこ取りできる

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

• 外部テスト管理ツー...
CucumberとTurnipを
利用するメリットの
本質は
Gherkinにあり
時代の流れの背景

テスト自動化のうねり
Andreas Spillner:	

“The W-MODEL – Strengthening the Bond Between Development and Test” STAREAST2002
http://www.ipa.go.jp/files/000005144.pdf
高信頼性ソフトウェアのための開発手法ハンドブックより
テストの種類
1.単体テスト、Unit-Test
2.結合テスト、Integration-Test,Component-Test
3.システムテスト、System-Test,e2e-Test
4.受け入れテスト、Acceptance-Test
...
内部テスト
内部テストは「ホワイトボックステスト」
プログラマが意図したとおりにプログラムが
動作することを確認するテストのこと
具体的には、プログラマが変数の値を変えな
がらコードを直接実行して、期待する結果が
得られるかどうかを検証
外部テスト
外部テストは「ブラックボックステスト」
プログラムのコードに立ち入ることなくプログラムの外部イ
ンターフェース (画面 etc.) を介して評価
→

エンドツーエンドテスト

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


評価

リーン

Biz
開発


検証


運用


Dev

Ver

Ops

設計→実装→テスト
↓
↑
ここを俊敏に繰り返し

やるのがAgile,TDD/BDD

(回帰テスト)

システムテスト

受け入れテスト

e2...
経営


評価

リーン

Biz
開発


検証


運用


Dev

Ver

Ops

設計→実装→テスト
↓
↑
ここを俊敏に

繰り返し

やるのがAgile

フォーマル

に検証

カジュアル

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

 ベタ ←――――――――――――――→ メタ
Unit Test → Integration Test       
         → System Test、e2eTest
→ 回帰テスト
...
Unitテスト自動化
↓
e2eテスト自動化
『テストツールもベタからメタへ』
!

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

 Test::Unit → RSpec
→ Gherkin (Cucumber/Turnip)
るびま42号 「エンドツーエンドテストの自動化は Cu...
CucumberとTurnip
・featureファイルと step_definitionsファイル

の構成 (Gherkin 書式) を 実行するのは同じ
・Cucumberは独立なプログラム(2本立て)
・TurnipはRSpec内で実行す...
検証項目列挙方式
単体テスト項目積み上げ

ボトムアップアプローチ

TDD/BDDの


機能仕様書から掘り下げ

トップダウンアプローチ

Excelシート


成果物

テスト設計
出典:るびま42号
gherkin書式
システムの振る舞いを記述するための自然言語に近い
書式
Business Readable DSLとも呼ばれ、ベタなテストコー
ドにメタな説明 (機能・シナリオ・ステップ) の層 (レ
イヤ) を付加し、プログラムの実装者で...
Gherkin書式の導入で
プログラマ以外の
関係者による日本語
テストシナリオの記述
が可能に
そこが画期的!!
Gerkin書式は
 1.機能feature
 2.シナリオ
 3.ステップ
の3階層で記述
具体的な.featureファイルへ
view01.feature
# encoding: utf-8

# language: ja

機能: 1.画面表示確認

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

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

ならば 'ようこそ 関西Ruby会議05' が表示...
view02.feature
## encoding: utf-8

# language: ja

機能: 2.検索動作確認

シナリオ: 2.一覧確認

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

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

ならば Zipco...
xx_steps.rbは
featureファイルでステップ
に記述した具体的な操作を
RSpecとCapybaraの
ライブラリの仕様にて
Rubyスクリプトで実装
具体的なsteps.rbファイルへ
# encoding: utf-8

!
require 'capybara/rspec'

Capybara.javascript_driver = :webkit

!
step 'kanrk05サイトにアクセスする' do

Capyba...
view2_steps.rb

#encoding: utf-8

!

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

#click_link '郵便番号一覧'

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

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

Excelテストケース

.featur...
環境構築
Turnip入門
http://magazine.rubyist.net/?0042-FromCucumberToTurnip#l36
Turnipインストール
Gemfileでturnip..を組み込み指定 2014.2.12時点では
Turnipは1.2.0, capybaraは2.1.0, capybara-webkitは1.1.1, gherkinは2.12.2
(Rai...
エンドツーエンド検証の実行
エンドツーエンド検証スクリプトを個別に実行

$ rspec -r turnip/rspec --drb
spec/features/xxxxx.feature
demoサイト
関西Ruby会議05用Rails4 demoサイト

高速郵便番号検索 

http:/
/kanrk05.ruby.iijgio.com/zipcodes
MOGOKは速い!
mogokでRails4は使える!(一部制約あり)...
Turnip入門のソースコード
https:/
/github.com/ir3/e2etest
次なるテーマ

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

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

• 外部テスト管理ツー...
おまけ
RSpec自体はテストを記述するためのドメイン特
化言語(DSL:Domain Specific Language)を提
供するフレームワークなので、まさに「言語」と
して広い範囲をカバー
feature spec、request specs、c...
20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜
20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜
20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜
20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜
Upcoming SlideShare
Loading in …5
×

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

4,002 views
3,822 views

Published on

Published in: Technology
0 Comments
13 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,002
On SlideShare
0
From Embeds
0
Number of Embeds
831
Actions
Shares
0
Downloads
25
Comments
0
Likes
13
Embeds 0
No embeds

No notes for slide

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

  1. 1. テスト自動化のアプローチ拡張トレンド ∼e2eはExcel項目定義手動テスト からTurnip自動テストへ∼ 2014.2.12 DevLove #157 福井修 @iR3
  2. 2. ルビールビールビー Ruby大好き 福井修@iR3 2012 Rubykaja sendagaya.rb #七輪life Ruby関西cofounder 2009Ruby会議スタッフ &スポンサー
  3. 3. 2002年KOFにて Matzを囲む
  4. 4. エンドツーエンドにはTurnip
  5. 5. from 2009.11 刻言道場「まいトレ」 http://maitore.net/ 販売管理・在庫管理システム 株式会社 iRubySystems
  6. 6. 世間の動向
  7. 7. ドメイン特化言語 (DSL:Domain Specific Language) DSLのLをLibraryと広義に解釈すると…
  8. 8. Rails,sinatraはWebのDSL ChefはシステムアドミストレーションのDSL Fluentdはマシン間配送のDSL RSpecはテストのDSL Gherkinは仕様記述DSL Capybaraはe2e検証のDSL
  9. 9. 結論を先に • Rubyの進んだテストツールを使うと自動 テストも美味しくええとこ取りできる • エンドツーエンド(e2e)テスト自動化に は Gherkin+Capybara +Turnip    ライブラリが有利 • 外部テスト管理ツールもそろそろExcel からWebDBに
  10. 10. CucumberとTurnipを 利用するメリットの 本質は Gherkinにあり
  11. 11. 時代の流れの背景 テスト自動化のうねり
  12. 12. Andreas Spillner: “The W-MODEL – Strengthening the Bond Between Development and Test” STAREAST2002
  13. 13. http://www.ipa.go.jp/files/000005144.pdf
  14. 14. 高信頼性ソフトウェアのための開発手法ハンドブックより
  15. 15. テストの種類 1.単体テスト、Unit-Test 2.結合テスト、Integration-Test,Component-Test 3.システムテスト、System-Test,e2e-Test 4.受け入れテスト、Acceptance-Test (5.回帰テスト、regression-Test) テストは、視点や範囲の違いでベタからメタ方向に 守備範囲の違いで区別があり 当然自動テストにもこの区別は該当
  16. 16. 内部テスト 内部テストは「ホワイトボックステスト」 プログラマが意図したとおりにプログラムが 動作することを確認するテストのこと 具体的には、プログラマが変数の値を変えな がらコードを直接実行して、期待する結果が 得られるかどうかを検証
  17. 17. 外部テスト 外部テストは「ブラックボックステスト」 プログラムのコードに立ち入ることなくプログラムの外部イ ンターフェース (画面 etc.) を介して評価 → エンドツーエンドテスト  エンドツーエンドは略して e2e
  18. 18. 経営 評価 リーン Biz 開発 検証 運用 Dev Ver Ops 設計→実装→テスト ↓ ↑ ここを俊敏に繰り返し やるのがAgile,TDD/BDD (回帰テスト) システムテスト 受け入れテスト e2eテスト 2013.9.21toRuby「カジュアルにテストして、 フォーマルに検証する」に加筆
  19. 19. 経営 評価 リーン Biz 開発 検証 運用 Dev Ver Ops 設計→実装→テスト ↓ ↑ ここを俊敏に 繰り返し やるのがAgile フォーマル に検証 カジュアル にテスト
  20. 20. 『自動テストのニーズはベタからメタへ』 !  ベタ ←――――――――――――――→ メタ Unit Test → Integration Test                 → System Test、e2eTest → 回帰テスト るびま42号 「エンドツーエンドテストの自動化は Cucumber から Turnip へ」を編集
  21. 21. Unitテスト自動化 ↓ e2eテスト自動化
  22. 22. 『テストツールもベタからメタへ』 !  ベタ ←――――――――――――――→ メタ !  Test::Unit → RSpec → Gherkin (Cucumber/Turnip) るびま42号 「エンドツーエンドテストの自動化は Cucumber から Turnip へ」より
  23. 23. CucumberとTurnip ・featureファイルと step_definitionsファイル の構成 (Gherkin 書式) を 実行するのは同じ ・Cucumberは独立なプログラム(2本立て) ・TurnipはRSpec内で実行することができる    (RSpec一本化) ・Cucumberは正規表現を使用(結構面倒) ・Turnipは代わりにプレースフォルダ
  24. 24. 検証項目列挙方式 単体テスト項目積み上げ ボトムアップアプローチ TDD/BDDの 機能仕様書から掘り下げ トップダウンアプローチ Excelシート 成果物 テスト設計
  25. 25. 出典:るびま42号
  26. 26. gherkin書式 システムの振る舞いを記述するための自然言語に近い 書式 Business Readable DSLとも呼ばれ、ベタなテストコー ドにメタな説明 (機能・シナリオ・ステップ) の層 (レ イヤ) を付加し、プログラムの実装者でなく第三者や受 け入れ者が記述し理解できる (日本語でも記述できる) https://github.com/cucumber/cucumber/wiki/ Gherkin
  27. 27. Gherkin書式の導入で プログラマ以外の 関係者による日本語 テストシナリオの記述 が可能に そこが画期的!!
  28. 28. Gerkin書式は  1.機能feature  2.シナリオ  3.ステップ の3階層で記述
  29. 29. 具体的な.featureファイルへ
  30. 30. view01.feature # encoding: utf-8 # language: ja 機能: 1.画面表示確認 シナリオ: 1.トップページ確認 前提 対象ページを表示する ならば 'ようこそ 関西Ruby会議05' が表示されて いること
  31. 31. view02.feature ## encoding: utf-8 # language: ja 機能: 2.検索動作確認 シナリオ: 2.一覧確認 前提 対象ページを表示する かつ 郵便番号一覧 をクリックする ならば Zipcode が表示されていること !
  32. 32. xx_steps.rbは featureファイルでステップ に記述した具体的な操作を RSpecとCapybaraの ライブラリの仕様にて Rubyスクリプトで実装
  33. 33. 具体的なsteps.rbファイルへ
  34. 34. # 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
  35. 35. view2_steps.rb #encoding: utf-8 ! step '郵便番号一覧 をクリックする' do #click_link '郵便番号一覧' first(:link, '郵便番号一覧').click end
  36. 36. 自動化の肝は、.featureファイルとxx_step.rbファイルの作成 この2種類のファイルさえ作成すれば、ツール群で自動実行可能! ただしxx_step.rbに記述できない処理は当然実行できない Excelテストケース .feature ファイル xx_step.rb ファイル Excelから文言を抜き出 して.featureの骨組みを 作るツールは作成可能 step.rbファイルを記述するには Capybara,Rspecのmatcherや Web操作仕様の詳細を理解し ておく必要があり習熟コストは かかる
  37. 37. 環境構築
  38. 38. Turnip入門 http://magazine.rubyist.net/?0042-FromCucumberToTurnip#l36
  39. 39. 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に) group :development, :test do gem 'capybara-webkit' gem 'headless' gem 'rspec-rails' gem 'spork', ' > 1.0.0rc4' gem 'turnip' end
  40. 40. エンドツーエンド検証の実行 エンドツーエンド検証スクリプトを個別に実行 $ rspec -r turnip/rspec --drb spec/features/xxxxx.feature
  41. 41. demoサイト 関西Ruby会議05用Rails4 demoサイト 高速郵便番号検索 http:/ /kanrk05.ruby.iijgio.com/zipcodes MOGOKは速い! mogokでRails4は使える!(一部制約あり) mogok無料枠美味しい!!!
  42. 42. Turnip入門のソースコード https:/ /github.com/ir3/e2etest
  43. 43. 次なるテーマ テストコンテンツの 管理へ
  44. 44. 再びまとめ • Rubyの進んだテストツールを使うと自動 テストも美味しくええとこ取りできる • エンドツーエンド(e2e)テスト自動化に は Gherkin+Capybara +Turnip    ライブラリが有利 • 外部テスト管理ツールもそろそろExcel からWebDBに
  45. 45. おまけ
  46. 46. RSpec自体はテストを記述するためのドメイン特 化言語(DSL:Domain Specific Language)を提 供するフレームワークなので、まさに「言語」と して広い範囲をカバー feature spec、request specs、controller spec の使い分け feature spec : システムテスト,e2eテスト request specs : インテグレーションテスト controller spec : ユニットテスト

×