SlideShare une entreprise Scribd logo
1  sur  19
ビジネス的に高価値な
lean/agile テスト実践
       2012/11/17(Sat)
      tchikuba@bilcom
about tchikuba

   所属
      ビルコム株式会社

   自社サービス
      ReBuy http://rebuy.jp/

      Okkru https://okkru.jp

   役割
      開発 PM

      PM = Playing Manager

   いいね!
      Linux 、ビール、宇宙平和

   facebook/twitter
      tchikuba
自社サービス: ReBuy
自社サービス: Okkru
本題。

テストの目的はシステム品質
を担保すること。

ではシステム品質を
どう担保するか?
waterfall な品質担保フロー
   原則各フェーズ毎にチェック
     要件定義
     基本設計
     詳細設計
              高価値!
     単体試験
     結合試験
     受入試験
   各フェーズ毎の納品物チェック
   各フェーズ毎のレビュー
   受入試験で要件担保
   要件変化がない前提・・・
lean/agile なテスト

ではシステム品質を
どう担保するか?
テスト自動化が肝

   Project としてテスト自動化は主
    に以下の通り
     受入試験:ユーザ主動線をカバー

     結合/単体試験:ユニットテスト

   テスト自動化の優先度
     ビジネス価値:単体<結合<受入

     開発フェーズ:単体>結合>受入
必要な実行環境の要件
   環境を用途により分ける必要性
   ( ビルド ) デプロイ自動化
   リポジトリ変更をタイムリーにハン
    ドル
   デプロイ時に必ずテストを自動実行
   開発者にタイムリーに通知
   本番環境でユーザテスト実施
   デザインモックをタイムリーに最新
    化
実行環境
   環境 (LAMP)
        開発環境:開発コード
        ステージング環境:リポジトリ最新コード
        本番環境:ある時点のリビジョン
   Capistrano
        環境毎のデプロイをコマンド化
        DB 更新 (migrate)
        facebook グループに更新内容を通知
   Jenkins
        テストケース実行
        ステージング環境自動デプロイ
        本番環境用フローチェック
        デザインモック最新化
   Facebook
        テストユーザ
        開発者用グループ
   実装
        ブランチ非採用
        フラグ採用: β 版 view,js,css のみ
lean/agile なテスト

結果、もたらされた価値
たくさんあるので抜粋

   イケてないコードを発見し凹む
   要件の迷走をコードに見出す
   リファクタリングに挑戦

   S 級障害を未然に防止
   外部要因が明確になる
   要件を開発起点で洗練
以上
    T.Chikuba@bilcom
facebook/twitter :  tchikuba
【 FYI 】テストフレームワー
ク種別
   当 Project 環境は LAMP
   なので PHPUnit を採用
   採用している PHPUnit は大別して以
    下の通り
       単体試験用
           PHPUnit_Framework_TestCase
           Zend_Test_PHPUnit_ControllerTestCase
       受入試験用
        PHPUnit_Extensions_Selenium2TestCase
        ※ 単体試験用の 2 つとは全く別モノなので注
         意!
【 FYI 】 PHPUnit_Framework_T
estCase
   主に Model の単体試験に採用
   複数の Model を多用する
    ServiceModel は setUp メソッド内に
    て MOCK_OBJECT を定義して疎結
    合化
     if(!defined('MOCK_OBJECT'))
      define('MOCK_OBJECT', true);
     $this->getModel(‘[Model 名 ]’);  ※直接
      new×
   単体の Model で完結する Model はス
    テージング環境 DB に接続して試験
【 FYI 】 Zend_Test_PHPUnit_ControllerTest
Case

   主に Controller の単体試験に採用
   以下環境でサポート外なので注意
       Zendframework1.x
       PHPUnit3.6 以降
   とはいえ意外と便利なので PHPUnit3.7 系でも無理やり使
    用
   無理やり使用 tips
       テストケース落ちでも unserialize エラーが発生し実際のエ
        ラーの中身が不明
       なので /usr/share/pear/PHPUnit/Util/PHP.php の 238 行目付
        近をまさぐってテスト実行結果を /tmp 等に出力
       出力内容に実際のエラーが記述されている
   MOCK_OBJECT は基本必ず setUp() 内で定義
   新規に手を入れる Action のテストケースをまず作成
   結果、 Controller 実装における 3 大原則を守れるように
       フローコントロールに注力するよう実装
       Model データ引き回しは厳禁
       セッションを多用しない
【 FYI 】 PHPUnit_Extensions_Selenium2Te
stCase

   現在本番環境デプロイ直後に
    Capistrano→Jenkins で自動実行
   ユーザが実行する遷移を忠実に再現
   クリティカルな問題を未然に防ぐ対
    策
       ホントはステージング環境でも動かし
        たい
   CentOS で動く SeleniumServer に対
    して実行
   webDriver の擬似ブラウザで動作確
    認
【 FYI 】
Selenium2 のメリット/デメ
リット
   メリット
       htmlunit が使える
            Selenium1 系だと htmlunit が使用不可 ( そうだっ
             た)
       最新なので更新が多頻度
   デメリット
       SeleniumIDE によるテストコード生成が出来な
        い
            IDE によるケースが既にあれば移植の手間
            ただし移植は比較的容易
       ドキュメント皆無
            github と戦う
            フレームワークチェック用のテストコード参照で
             書ける
【 FYI 】結合試験デバッグ
tips
   テストコードサンプル
     https://github.com/sebastianbergmann


   テスト対象 html
     https://github.com/sebastianbergmann

Contenu connexe

Tendances

第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめhakoika-itwg
 
kintoneチームを支えるSeleniumテスト
kintoneチームを支えるSeleniumテストkintoneチームを支えるSeleniumテスト
kintoneチームを支えるSeleniumテストJumpei Miyata
 
Jenkinsを利用したCI、弊社導入事例
Jenkinsを利用したCI、弊社導入事例Jenkinsを利用したCI、弊社導入事例
Jenkinsを利用したCI、弊社導入事例Ryoichi Obara
 
nGrinder3 : だれもが簡単にできる性能テスト
nGrinder3 : だれもが簡単にできる性能テストnGrinder3 : だれもが簡単にできる性能テスト
nGrinder3 : だれもが簡単にできる性能テストJunHo Yoon
 
Bat vb script_power_shellの単体テスト自動化
Bat vb script_power_shellの単体テスト自動化Bat vb script_power_shellの単体テスト自動化
Bat vb script_power_shellの単体テスト自動化Naoyuki Sano
 
自動化を支えるCI/CDツールの私の選択 ~何をするためにCI/CDツールを選ぶか~
自動化を支えるCI/CDツールの私の選択 ~何をするためにCI/CDツールを選ぶか~自動化を支えるCI/CDツールの私の選択 ~何をするためにCI/CDツールを選ぶか~
自動化を支えるCI/CDツールの私の選択 ~何をするためにCI/CDツールを選ぶか~aha_oretama
 
C++でテスト駆動開発
C++でテスト駆動開発C++でテスト駆動開発
C++でテスト駆動開発Akineko Shimizu
 
テスト自動化の様々な道具を使ってみた四方山話
テスト自動化の様々な道具を使ってみた四方山話テスト自動化の様々な道具を使ってみた四方山話
テスト自動化の様々な道具を使ってみた四方山話haljik Seiji
 
Unit testで定時帰宅!
Unit testで定時帰宅!Unit testで定時帰宅!
Unit testで定時帰宅!Funato Takashi
 
Seleniumと相性がいいテンプレートエンジンMixer2-第1回selenium勉強会ライトニングトーク
Seleniumと相性がいいテンプレートエンジンMixer2-第1回selenium勉強会ライトニングトークSeleniumと相性がいいテンプレートエンジンMixer2-第1回selenium勉強会ライトニングトーク
Seleniumと相性がいいテンプレートエンジンMixer2-第1回selenium勉強会ライトニングトークY Watanabe
 
モックライブラリを使ってきちんとユニットテストする #Objective-C
モックライブラリを使ってきちんとユニットテストする #Objective-Cモックライブラリを使ってきちんとユニットテストする #Objective-C
モックライブラリを使ってきちんとユニットテストする #Objective-CShoichi Matsuda
 
Myweekdays and testing
Myweekdays and testingMyweekdays and testing
Myweekdays and testingryuji koyama
 
サイボウズがWebアプリ自動テスト に活用しているossツールの紹介
サイボウズがWebアプリ自動テスト に活用しているossツールの紹介サイボウズがWebアプリ自動テスト に活用しているossツールの紹介
サイボウズがWebアプリ自動テスト に活用しているossツールの紹介Yuki Okada
 
テスティングフレームワークに入門してみた - Swift編
テスティングフレームワークに入門してみた - Swift編テスティングフレームワークに入門してみた - Swift編
テスティングフレームワークに入門してみた - Swift編Hisakuni Fujimoto
 
海外のSeleniumカンファレンスではどんな発表がされているのか2014
海外のSeleniumカンファレンスではどんな発表がされているのか2014海外のSeleniumカンファレンスではどんな発表がされているのか2014
海外のSeleniumカンファレンスではどんな発表がされているのか2014Nozomi Ito
 
「Selenium実践入門」で学ぶテスト自動化の世界
「Selenium実践入門」で学ぶテスト自動化の世界「Selenium実践入門」で学ぶテスト自動化の世界
「Selenium実践入門」で学ぶテスト自動化の世界Nozomi Ito
 
Selenium boot campの紹介
Selenium boot campの紹介Selenium boot campの紹介
Selenium boot campの紹介Nozomi Ito
 
Jenkinsではじめる継続的インテグレーション
Jenkinsではじめる継続的インテグレーションJenkinsではじめる継続的インテグレーション
Jenkinsではじめる継続的インテグレーションMasanori Satoh
 

Tendances (19)

第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ
 
kintoneチームを支えるSeleniumテスト
kintoneチームを支えるSeleniumテストkintoneチームを支えるSeleniumテスト
kintoneチームを支えるSeleniumテスト
 
Jenkinsを利用したCI、弊社導入事例
Jenkinsを利用したCI、弊社導入事例Jenkinsを利用したCI、弊社導入事例
Jenkinsを利用したCI、弊社導入事例
 
nGrinder3 : だれもが簡単にできる性能テスト
nGrinder3 : だれもが簡単にできる性能テストnGrinder3 : だれもが簡単にできる性能テスト
nGrinder3 : だれもが簡単にできる性能テスト
 
Bat vb script_power_shellの単体テスト自動化
Bat vb script_power_shellの単体テスト自動化Bat vb script_power_shellの単体テスト自動化
Bat vb script_power_shellの単体テスト自動化
 
自動化を支えるCI/CDツールの私の選択 ~何をするためにCI/CDツールを選ぶか~
自動化を支えるCI/CDツールの私の選択 ~何をするためにCI/CDツールを選ぶか~自動化を支えるCI/CDツールの私の選択 ~何をするためにCI/CDツールを選ぶか~
自動化を支えるCI/CDツールの私の選択 ~何をするためにCI/CDツールを選ぶか~
 
C++でテスト駆動開発
C++でテスト駆動開発C++でテスト駆動開発
C++でテスト駆動開発
 
テスト自動化の様々な道具を使ってみた四方山話
テスト自動化の様々な道具を使ってみた四方山話テスト自動化の様々な道具を使ってみた四方山話
テスト自動化の様々な道具を使ってみた四方山話
 
Unit testで定時帰宅!
Unit testで定時帰宅!Unit testで定時帰宅!
Unit testで定時帰宅!
 
Seleniumと相性がいいテンプレートエンジンMixer2-第1回selenium勉強会ライトニングトーク
Seleniumと相性がいいテンプレートエンジンMixer2-第1回selenium勉強会ライトニングトークSeleniumと相性がいいテンプレートエンジンMixer2-第1回selenium勉強会ライトニングトーク
Seleniumと相性がいいテンプレートエンジンMixer2-第1回selenium勉強会ライトニングトーク
 
モックライブラリを使ってきちんとユニットテストする #Objective-C
モックライブラリを使ってきちんとユニットテストする #Objective-Cモックライブラリを使ってきちんとユニットテストする #Objective-C
モックライブラリを使ってきちんとユニットテストする #Objective-C
 
Myweekdays and testing
Myweekdays and testingMyweekdays and testing
Myweekdays and testing
 
サイボウズがWebアプリ自動テスト に活用しているossツールの紹介
サイボウズがWebアプリ自動テスト に活用しているossツールの紹介サイボウズがWebアプリ自動テスト に活用しているossツールの紹介
サイボウズがWebアプリ自動テスト に活用しているossツールの紹介
 
テスティングフレームワークに入門してみた - Swift編
テスティングフレームワークに入門してみた - Swift編テスティングフレームワークに入門してみた - Swift編
テスティングフレームワークに入門してみた - Swift編
 
海外のSeleniumカンファレンスではどんな発表がされているのか2014
海外のSeleniumカンファレンスではどんな発表がされているのか2014海外のSeleniumカンファレンスではどんな発表がされているのか2014
海外のSeleniumカンファレンスではどんな発表がされているのか2014
 
「Selenium実践入門」で学ぶテスト自動化の世界
「Selenium実践入門」で学ぶテスト自動化の世界「Selenium実践入門」で学ぶテスト自動化の世界
「Selenium実践入門」で学ぶテスト自動化の世界
 
Selenium boot campの紹介
Selenium boot campの紹介Selenium boot campの紹介
Selenium boot campの紹介
 
Jenkinsではじめる継続的インテグレーション
Jenkinsではじめる継続的インテグレーションJenkinsではじめる継続的インテグレーション
Jenkinsではじめる継続的インテグレーション
 
Casper導入資料
Casper導入資料Casper導入資料
Casper導入資料
 

Similaire à ビジネス的に高価値なアジャイルテスト

ワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeployワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeployRyutaro YOSHIBA
 
MakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発をMakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発をAtsuhiro Kubo
 
Getting Started with Testing using PHPUnit
Getting Started with Testing using PHPUnitGetting Started with Testing using PHPUnit
Getting Started with Testing using PHPUnitAtsuhiro Kubo
 
継続的デリバリー読書会 第 7 章 コミットステージ
継続的デリバリー読書会 第 7 章 コミットステージ継続的デリバリー読書会 第 7 章 コミットステージ
継続的デリバリー読書会 第 7 章 コミットステージYasutomo Arai
 
Selenium IDE for primer
Selenium IDE for primerSelenium IDE for primer
Selenium IDE for primeryasukoS
 
Introduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGoodIntroduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGoodAtsuhiro Kubo
 
Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】
Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】 Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】
Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】 智治 長沢
 
継続的デリバリー読書会 第 5 章 デプロイメントパイプラインの解剖学
継続的デリバリー読書会 第 5 章 デプロイメントパイプラインの解剖学継続的デリバリー読書会 第 5 章 デプロイメントパイプラインの解剖学
継続的デリバリー読書会 第 5 章 デプロイメントパイプラインの解剖学Takuma SHIRAISHI
 
チーム×ツール Team Foundation Server & Service 共感しActionできる開発基盤 アルティメイタム【デブサミ 2013 ...
チーム×ツール Team Foundation Server & Service 共感しActionできる開発基盤 アルティメイタム【デブサミ 2013 ...チーム×ツール Team Foundation Server & Service 共感しActionできる開発基盤 アルティメイタム【デブサミ 2013 ...
チーム×ツール Team Foundation Server & Service 共感しActionできる開発基盤 アルティメイタム【デブサミ 2013 ...智治 長沢
 
Jenkins+Play!で気軽にCI
Jenkins+Play!で気軽にCIJenkins+Play!で気軽にCI
Jenkins+Play!で気軽にCITakafumi Ikeda
 
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Tokuhiro Matsuno
 
継続的デリバリー読書会資料 #1
継続的デリバリー読書会資料 #1継続的デリバリー読書会資料 #1
継続的デリバリー読書会資料 #1Yusuke HIDESHIMA
 
TDD勉強会キックオフ for Java
TDD勉強会キックオフ for JavaTDD勉強会キックオフ for Java
TDD勉強会キックオフ for JavaYuta Kawadai
 
20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」
20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」
20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」Hiroko Tamagawa
 
メルカリの開発スピードと品質を支える Selenium on Azure Kubernetes Service
メルカリの開発スピードと品質を支える Selenium on Azure Kubernetes Serviceメルカリの開発スピードと品質を支える Selenium on Azure Kubernetes Service
メルカリの開発スピードと品質を支える Selenium on Azure Kubernetes ServiceTadashi Nemoto
 
PHPUnit でテスト駆動開発を始めよう
PHPUnit でテスト駆動開発を始めようPHPUnit でテスト駆動開発を始めよう
PHPUnit でテスト駆動開発を始めようYuya Takeyama
 
はこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テストはこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テストSeiji KOMATSU
 
C# から java へのプログラム移植で体験したtddの効果は?
C# から java へのプログラム移植で体験したtddの効果は?C# から java へのプログラム移植で体験したtddの効果は?
C# から java へのプログラム移植で体験したtddの効果は?Shinichi Hirauchi
 

Similaire à ビジネス的に高価値なアジャイルテスト (20)

ワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeployワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeploy
 
MakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発をMakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発を
 
Getting Started with Testing using PHPUnit
Getting Started with Testing using PHPUnitGetting Started with Testing using PHPUnit
Getting Started with Testing using PHPUnit
 
継続的デリバリー読書会 第 7 章 コミットステージ
継続的デリバリー読書会 第 7 章 コミットステージ継続的デリバリー読書会 第 7 章 コミットステージ
継続的デリバリー読書会 第 7 章 コミットステージ
 
Selenium
SeleniumSelenium
Selenium
 
Selenium IDE for primer
Selenium IDE for primerSelenium IDE for primer
Selenium IDE for primer
 
Introduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGoodIntroduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGood
 
Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】
Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】 Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】
Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】
 
継続的デリバリー読書会 第 5 章 デプロイメントパイプラインの解剖学
継続的デリバリー読書会 第 5 章 デプロイメントパイプラインの解剖学継続的デリバリー読書会 第 5 章 デプロイメントパイプラインの解剖学
継続的デリバリー読書会 第 5 章 デプロイメントパイプラインの解剖学
 
チーム×ツール Team Foundation Server & Service 共感しActionできる開発基盤 アルティメイタム【デブサミ 2013 ...
チーム×ツール Team Foundation Server & Service 共感しActionできる開発基盤 アルティメイタム【デブサミ 2013 ...チーム×ツール Team Foundation Server & Service 共感しActionできる開発基盤 アルティメイタム【デブサミ 2013 ...
チーム×ツール Team Foundation Server & Service 共感しActionできる開発基盤 アルティメイタム【デブサミ 2013 ...
 
Jenkins+Play!で気軽にCI
Jenkins+Play!で気軽にCIJenkins+Play!で気軽にCI
Jenkins+Play!で気軽にCI
 
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)
 
継続的デリバリー読書会資料 #1
継続的デリバリー読書会資料 #1継続的デリバリー読書会資料 #1
継続的デリバリー読書会資料 #1
 
TDD勉強会キックオフ for Java
TDD勉強会キックオフ for JavaTDD勉強会キックオフ for Java
TDD勉強会キックオフ for Java
 
20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」
20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」
20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」
 
メルカリの開発スピードと品質を支える Selenium on Azure Kubernetes Service
メルカリの開発スピードと品質を支える Selenium on Azure Kubernetes Serviceメルカリの開発スピードと品質を支える Selenium on Azure Kubernetes Service
メルカリの開発スピードと品質を支える Selenium on Azure Kubernetes Service
 
PHPUnit でテスト駆動開発を始めよう
PHPUnit でテスト駆動開発を始めようPHPUnit でテスト駆動開発を始めよう
PHPUnit でテスト駆動開発を始めよう
 
はこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テストはこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テスト
 
C# から java へのプログラム移植で体験したtddの効果は?
C# から java へのプログラム移植で体験したtddの効果は?C# から java へのプログラム移植で体験したtddの効果は?
C# から java へのプログラム移植で体験したtddの効果は?
 
Case study puppet
Case study puppetCase study puppet
Case study puppet
 

Plus de Tsutomu Chikuba

Ebisu.rb#15LT「turnipいいよturnip」
Ebisu.rb#15LT「turnipいいよturnip」Ebisu.rb#15LT「turnipいいよturnip」
Ebisu.rb#15LT「turnipいいよturnip」Tsutomu Chikuba
 
Meguro.rb#3LT「Ruby入門書を書いてて得られた知見5選+3α」
Meguro.rb#3LT「Ruby入門書を書いてて得られた知見5選+3α」Meguro.rb#3LT「Ruby入門書を書いてて得られた知見5選+3α」
Meguro.rb#3LT「Ruby入門書を書いてて得られた知見5選+3α」Tsutomu Chikuba
 
オープンデータ利活用への道のり@未来型不動産サービス「IESHIL(イエシル)」の事例
オープンデータ利活用への道のり@未来型不動産サービス「IESHIL(イエシル)」の事例オープンデータ利活用への道のり@未来型不動産サービス「IESHIL(イエシル)」の事例
オープンデータ利活用への道のり@未来型不動産サービス「IESHIL(イエシル)」の事例Tsutomu Chikuba
 
turnipとcapybaraとBDDと私
turnipとcapybaraとBDDと私turnipとcapybaraとBDDと私
turnipとcapybaraとBDDと私Tsutomu Chikuba
 
いよいよPHPerもリーンで行こう
いよいよPHPerもリーンで行こういよいよPHPerもリーンで行こう
いよいよPHPerもリーンで行こうTsutomu Chikuba
 
Php unit extensions_selenium2_testcaseによる結合試験でらくらくテスト♪
Php unit extensions_selenium2_testcaseによる結合試験でらくらくテスト♪Php unit extensions_selenium2_testcaseによる結合試験でらくらくテスト♪
Php unit extensions_selenium2_testcaseによる結合試験でらくらくテスト♪Tsutomu Chikuba
 
【参観レポート】Lean startupnight real startup dialog
【参観レポート】Lean startupnight   real startup dialog【参観レポート】Lean startupnight   real startup dialog
【参観レポート】Lean startupnight real startup dialogTsutomu Chikuba
 
リーンソフトウェア開発で始めるFacebookアプリ開発
リーンソフトウェア開発で始めるFacebookアプリ開発リーンソフトウェア開発で始めるFacebookアプリ開発
リーンソフトウェア開発で始めるFacebookアプリ開発Tsutomu Chikuba
 

Plus de Tsutomu Chikuba (10)

Megurorb 15 lt
Megurorb 15 ltMegurorb 15 lt
Megurorb 15 lt
 
Ebisu.rb#15LT「turnipいいよturnip」
Ebisu.rb#15LT「turnipいいよturnip」Ebisu.rb#15LT「turnipいいよturnip」
Ebisu.rb#15LT「turnipいいよturnip」
 
Meguro.rb#3LT「Ruby入門書を書いてて得られた知見5選+3α」
Meguro.rb#3LT「Ruby入門書を書いてて得られた知見5選+3α」Meguro.rb#3LT「Ruby入門書を書いてて得られた知見5選+3α」
Meguro.rb#3LT「Ruby入門書を書いてて得られた知見5選+3α」
 
オープンデータ利活用への道のり@未来型不動産サービス「IESHIL(イエシル)」の事例
オープンデータ利活用への道のり@未来型不動産サービス「IESHIL(イエシル)」の事例オープンデータ利活用への道のり@未来型不動産サービス「IESHIL(イエシル)」の事例
オープンデータ利活用への道のり@未来型不動産サービス「IESHIL(イエシル)」の事例
 
turnipとcapybaraとBDDと私
turnipとcapybaraとBDDと私turnipとcapybaraとBDDと私
turnipとcapybaraとBDDと私
 
いよいよPHPerもリーンで行こう
いよいよPHPerもリーンで行こういよいよPHPerもリーンで行こう
いよいよPHPerもリーンで行こう
 
behatで始めるBDD
behatで始めるBDDbehatで始めるBDD
behatで始めるBDD
 
Php unit extensions_selenium2_testcaseによる結合試験でらくらくテスト♪
Php unit extensions_selenium2_testcaseによる結合試験でらくらくテスト♪Php unit extensions_selenium2_testcaseによる結合試験でらくらくテスト♪
Php unit extensions_selenium2_testcaseによる結合試験でらくらくテスト♪
 
【参観レポート】Lean startupnight real startup dialog
【参観レポート】Lean startupnight   real startup dialog【参観レポート】Lean startupnight   real startup dialog
【参観レポート】Lean startupnight real startup dialog
 
リーンソフトウェア開発で始めるFacebookアプリ開発
リーンソフトウェア開発で始めるFacebookアプリ開発リーンソフトウェア開発で始めるFacebookアプリ開発
リーンソフトウェア開発で始めるFacebookアプリ開発
 

ビジネス的に高価値なアジャイルテスト

  • 2. about tchikuba  所属  ビルコム株式会社  自社サービス  ReBuy http://rebuy.jp/  Okkru https://okkru.jp  役割  開発 PM  PM = Playing Manager  いいね!  Linux 、ビール、宇宙平和  facebook/twitter  tchikuba
  • 6. waterfall な品質担保フロー  原則各フェーズ毎にチェック  要件定義  基本設計  詳細設計 高価値!  単体試験  結合試験  受入試験  各フェーズ毎の納品物チェック  各フェーズ毎のレビュー  受入試験で要件担保  要件変化がない前提・・・
  • 8. テスト自動化が肝  Project としてテスト自動化は主 に以下の通り  受入試験:ユーザ主動線をカバー  結合/単体試験:ユニットテスト  テスト自動化の優先度  ビジネス価値:単体<結合<受入  開発フェーズ:単体>結合>受入
  • 9. 必要な実行環境の要件  環境を用途により分ける必要性  ( ビルド ) デプロイ自動化  リポジトリ変更をタイムリーにハン ドル  デプロイ時に必ずテストを自動実行  開発者にタイムリーに通知  本番環境でユーザテスト実施  デザインモックをタイムリーに最新 化
  • 10. 実行環境  環境 (LAMP)  開発環境:開発コード  ステージング環境:リポジトリ最新コード  本番環境:ある時点のリビジョン  Capistrano  環境毎のデプロイをコマンド化  DB 更新 (migrate)  facebook グループに更新内容を通知  Jenkins  テストケース実行  ステージング環境自動デプロイ  本番環境用フローチェック  デザインモック最新化  Facebook  テストユーザ  開発者用グループ  実装  ブランチ非採用  フラグ採用: β 版 view,js,css のみ
  • 12. たくさんあるので抜粋  イケてないコードを発見し凹む  要件の迷走をコードに見出す  リファクタリングに挑戦  S 級障害を未然に防止  外部要因が明確になる  要件を開発起点で洗練
  • 13. 以上 T.Chikuba@bilcom facebook/twitter :  tchikuba
  • 14. 【 FYI 】テストフレームワー ク種別  当 Project 環境は LAMP  なので PHPUnit を採用  採用している PHPUnit は大別して以 下の通り  単体試験用  PHPUnit_Framework_TestCase  Zend_Test_PHPUnit_ControllerTestCase  受入試験用 PHPUnit_Extensions_Selenium2TestCase ※ 単体試験用の 2 つとは全く別モノなので注 意!
  • 15. 【 FYI 】 PHPUnit_Framework_T estCase  主に Model の単体試験に採用  複数の Model を多用する ServiceModel は setUp メソッド内に て MOCK_OBJECT を定義して疎結 合化  if(!defined('MOCK_OBJECT')) define('MOCK_OBJECT', true);  $this->getModel(‘[Model 名 ]’);  ※直接 new×  単体の Model で完結する Model はス テージング環境 DB に接続して試験
  • 16. 【 FYI 】 Zend_Test_PHPUnit_ControllerTest Case  主に Controller の単体試験に採用  以下環境でサポート外なので注意  Zendframework1.x  PHPUnit3.6 以降  とはいえ意外と便利なので PHPUnit3.7 系でも無理やり使 用  無理やり使用 tips  テストケース落ちでも unserialize エラーが発生し実際のエ ラーの中身が不明  なので /usr/share/pear/PHPUnit/Util/PHP.php の 238 行目付 近をまさぐってテスト実行結果を /tmp 等に出力  出力内容に実際のエラーが記述されている  MOCK_OBJECT は基本必ず setUp() 内で定義  新規に手を入れる Action のテストケースをまず作成  結果、 Controller 実装における 3 大原則を守れるように  フローコントロールに注力するよう実装  Model データ引き回しは厳禁  セッションを多用しない
  • 17. 【 FYI 】 PHPUnit_Extensions_Selenium2Te stCase  現在本番環境デプロイ直後に Capistrano→Jenkins で自動実行  ユーザが実行する遷移を忠実に再現  クリティカルな問題を未然に防ぐ対 策  ホントはステージング環境でも動かし たい  CentOS で動く SeleniumServer に対 して実行  webDriver の擬似ブラウザで動作確 認
  • 18. 【 FYI 】 Selenium2 のメリット/デメ リット  メリット  htmlunit が使える  Selenium1 系だと htmlunit が使用不可 ( そうだっ た)  最新なので更新が多頻度  デメリット  SeleniumIDE によるテストコード生成が出来な い  IDE によるケースが既にあれば移植の手間  ただし移植は比較的容易  ドキュメント皆無  github と戦う  フレームワークチェック用のテストコード参照で 書ける
  • 19. 【 FYI 】結合試験デバッグ tips  テストコードサンプル  https://github.com/sebastianbergmann  テスト対象 html  https://github.com/sebastianbergmann