44
カジュアルにテストして、 フォーマルに検証する 2013.9.21 toRuby 福井修@iR3 13921日土曜日

20130921 カジュアルにテストしてフォーマルに検証する #toRuby

Embed Size (px)

DESCRIPTION

とちぎRuby会議05 で発表したスライドです http://regional.rubykaigi.org/tochigi05

Citation preview

Page 1: 20130921 カジュアルにテストしてフォーマルに検証する #toRuby

カジュアルにテストして、フォーマルに検証する

2013.9.21 toRuby 福井修@iR3

13年9月21日土曜日

Page 2: 20130921 カジュアルにテストしてフォーマルに検証する #toRuby

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

福井修@iR3

2012 Rubykaja

sendagaya.rb

#七輪life

Ruby関西cofounder2009Ruby会議スタッフ

&スポンサー13年9月21日土曜日

Page 3: 20130921 カジュアルにテストしてフォーマルに検証する #toRuby

2002年KOFにて Matzを囲む13年9月21日土曜日

Page 4: 20130921 カジュアルにテストしてフォーマルに検証する #toRuby

刻言道場「まいトレ」

http://maitore.net/

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

株式会社 iRubySystems

13年9月21日土曜日

Page 5: 20130921 カジュアルにテストしてフォーマルに検証する #toRuby

2013.8.31 関西Ruby会議05

福井修@iR3

No RubyNo Test

13年9月21日土曜日

Page 6: 20130921 カジュアルにテストしてフォーマルに検証する #toRuby

Test

テストから逃れられない

13 August 31 2013

13年9月21日土曜日

Page 7: 20130921 カジュアルにテストしてフォーマルに検証する #toRuby

RubyなしではTestはできない

Rubyのないテストなんて

13年9月21日土曜日

Page 8: 20130921 カジュアルにテストしてフォーマルに検証する #toRuby

結論を先に• DevOpsの開発と運用の間には    検証Verificationという場が必要   → DevVerOps

• VerificationにはGherkin+Capybaraという検証DSLをTurnipで使うのがよさげ

• Turnipでエンドツーエンド検証自動化の波を!

13年9月21日土曜日

Page 9: 20130921 カジュアルにテストしてフォーマルに検証する #toRuby

ではまず世間を鳥瞰

13年9月21日土曜日

Page 11: 20130921 カジュアルにテストしてフォーマルに検証する #toRuby

「テストツール丸わかりガイド」より

13年9月21日土曜日

Page 12: 20130921 カジュアルにテストしてフォーマルに検証する #toRuby

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

13年9月21日土曜日

Page 13: 20130921 カジュアルにテストしてフォーマルに検証する #toRuby

高信頼性ソフトウェアのための開発手法ハンドブックより13年9月21日土曜日

Page 14: 20130921 カジュアルにテストしてフォーマルに検証する #toRuby

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

13年9月21日土曜日

Page 15: 20130921 カジュアルにテストしてフォーマルに検証する #toRuby

高信頼性ソフトウェアのための開発手法ハンドブックより13年9月21日土曜日

Page 16: 20130921 カジュアルにテストしてフォーマルに検証する #toRuby

自論      展開

13年9月21日土曜日

Page 17: 20130921 カジュアルにテストしてフォーマルに検証する #toRuby

DevOps

DevOpsBiz

DevVerOpsBizVerfication

13年9月21日土曜日

Page 18: 20130921 カジュアルにテストしてフォーマルに検証する #toRuby

開発Dev

運用Ops

検証Ver

開発Dev

運用Ops

正しいということを検証するという

ベリフィケーション を経て受け渡し13年9月21日土曜日

Page 19: 20130921 カジュアルにテストしてフォーマルに検証する #toRuby

ベリフィケーション 【 verfication 】 と バリデーション 【 validation 】

妥当性を確認する, 実証(する)

(正しいということの)確認; 立証,検証,証明

正しいということを検証するという意味では

ベリフィケーション

が使われる。

13年9月21日土曜日

Page 20: 20130921 カジュアルにテストしてフォーマルに検証する #toRuby

開発Dev

運用Ops

検証Ver

設計→実装→テスト↓↑

ここを俊敏に繰り返し

やるのがAgile

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

経営Biz

評価リーン

13年9月21日土曜日

Page 21: 20130921 カジュアルにテストしてフォーマルに検証する #toRuby

では「本番系で検証をする」

「テストなら開発系でやれよ」となる

というのには違和感

「本番系でテストをする」

というのはどう? →とても納得感あり

そうか「エンドツーエンド回帰テスト」は「エンドツーエンド検証」

と言う方がよさげという気づき!!!

13年9月21日土曜日

Page 22: 20130921 カジュアルにテストしてフォーマルに検証する #toRuby

カジュアルにテストして、フォーマルに検証する

2013.9.21 toRuby 福井修@iR3

13年9月21日土曜日

Page 23: 20130921 カジュアルにテストしてフォーマルに検証する #toRuby

開発Dev

運用Ops

検証Ver

設計→実装→テスト↓↑

ここを俊敏に繰り返し

やるのがAgile

経営Biz

評価リーン

フォーマルに検証

カジュアルにテスト

13年9月21日土曜日

Page 24: 20130921 カジュアルにテストしてフォーマルに検証する #toRuby

次はエンドツーエンド検証自動化へTurnip

13年9月21日土曜日

Page 25: 20130921 カジュアルにテストしてフォーマルに検証する #toRuby

エンドツーエンド検証TurnipとCapybara

13年9月21日土曜日

Page 26: 20130921 カジュアルにテストしてフォーマルに検証する #toRuby

郡司さん編集では大変お世話になりました。ありがとうございました

13年9月21日土曜日

Page 27: 20130921 カジュアルにテストしてフォーマルに検証する #toRuby

Turnipとは?

feature ファイルと step_definitions ファイルの構成 (Gherkin 書式) を RSpec 内で実行することができるツール(Rspec一本化)

Cucumber の面倒さである正規表現を使用しないという改善(代わりにプレースフォルダ)

13年9月21日土曜日

Page 28: 20130921 カジュアルにテストしてフォーマルに検証する #toRuby

13年9月21日土曜日

Page 29: 20130921 カジュアルにテストしてフォーマルに検証する #toRuby

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

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

13年9月21日土曜日

Page 30: 20130921 カジュアルにテストしてフォーマルに検証する #toRuby

検証項目列挙方式

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

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

TDD/BDDの成果物

Excelシートテスト設計

13年9月21日土曜日

Page 31: 20130921 カジュアルにテストしてフォーマルに検証する #toRuby

Gerkin書式は機能feature

シナリオステップの3階層

13年9月21日土曜日

Page 32: 20130921 カジュアルにテストしてフォーマルに検証する #toRuby

# encoding: utf-8# language: ja機能: 1.画面表示確認 シナリオ: 1.トップページ確認 前提 対象ページを表示する ならば 'ようこそ 関西Ruby会議05' が表示されていること

view01.feature

13年9月21日土曜日

Page 33: 20130921 カジュアルにテストしてフォーマルに検証する #toRuby

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

xx_step.rb ファイル

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

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

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

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

13年9月21日土曜日

Page 34: 20130921 カジュアルにテストしてフォーマルに検証する #toRuby

Jenkins

検証コンテンツGherkin書式

RSpec

Turnip

xx.feature

xx_steps.rb

Capybara

Spork

Capybara-webkit

Polterguist

selenium

systemu

expect

本番サーバ

ステージングサーバ

エンドツーエンド検証

13年9月21日土曜日

Page 35: 20130921 カジュアルにテストしてフォーマルに検証する #toRuby

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

高速郵便番号検索

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

MOGOKは速い!

mogokでRails4は使える!mogok無料枠美味しい!!!

13年9月21日土曜日

Page 36: 20130921 カジュアルにテストしてフォーマルに検証する #toRuby

# encoding: utf-8# language: ja機能: 1.画面表示確認 シナリオ: 1.トップページ確認 前提 対象ページを表示する ならば 'ようこそ 関西Ruby会議05' が表示されていること

view01.feature

13年9月21日土曜日

Page 37: 20130921 カジュアルにテストしてフォーマルに検証する #toRuby

# encoding: utf-8

require 'capybara/rspec'Capybara.javascript_driver = :webkit

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

Capybara.app_host = "http://kanrk05.ruby.iijgio.com/" Capybara.current_driver = :webkitend

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

visit '/'end

step '対象ページを表示する' do

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

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

end

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

expect(page).to have_content hogeend

common_steps.rb

13年9月21日土曜日

Page 38: 20130921 カジュアルにテストしてフォーマルに検証する #toRuby

## encoding: utf-8# language: ja機能: 2.検索動作確認 @javascript シナリオ: 2.一覧確認 前提 対象ページを表示する かつ 郵便番号一覧 をクリックする ならば Zipcode が表示されていること

view02.feature

13年9月21日土曜日

Page 39: 20130921 カジュアルにテストしてフォーマルに検証する #toRuby

#encoding: utf-8

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

#click_link '郵便番号一覧'

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

end

view2_steps.rb

13年9月21日土曜日

Page 40: 20130921 カジュアルにテストしてフォーマルに検証する #toRuby

Turnip入門のソースコード

https://github.com/ir3/e2etest

13年9月21日土曜日

Page 41: 20130921 カジュアルにテストしてフォーマルに検証する #toRuby

おまけ

13年9月21日土曜日

Page 42: 20130921 カジュアルにテストしてフォーマルに検証する #toRuby

Rails,sinatraはWebのDSLRSpecはテストのDSL

ChefはシステムアドミストレーションのDSLFluentdはマシン間配送のDSL

DSL ゴレンジャー

13年9月21日土曜日

Page 43: 20130921 カジュアルにテストしてフォーマルに検証する #toRuby

Rails,sinatraはWebのDSLRSpecはテストのDSL

ChefはシステムアドミストレーションのDSLFluentdはマシン間配送のDSL

↓VDMは仕様記述DSLTurnipは検証のDSL

今日からはDSL 7レンジャー

13年9月21日土曜日

Page 44: 20130921 カジュアルにテストしてフォーマルに検証する #toRuby

 カジュアルなテストから フォーマルな検証に「検証自動化」もっと大事!検証自動化にTurnipを活用しよう!!

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

13年9月21日土曜日