テストしなイカ?
Seleniumで自動ブラウザテスト

      @MIKAGE014

       2011.11.05

    第11回山口県WEB勉強会
About Me

          インフラエンジニア 5年→転職
Linux, Solarisでインターネットシステムの設計・構築

             プログラマ 3年目
CAKEPHP + Postgresqlで業務系WEBシステムの設
                計・構築

                  ブログ
    http://d.hatena.ne.jp/mikage014/

          Twitter: @mikage014
          ←このアイコンが目印です
今日話すこと


   1.仕様変更に潜むバグ

     2.開発の三本柱

3.SELENIUMで自動ブラウザテスト
きっかけ

 稼働中の業務システムの追加変更
   フォームの項目追加

   ステータス追加。ステータスによって表示の仕方を変える

 変更した後、今まで動いてた部分が動かなくなった
  り
 バグを直すと別のところがバグったり


 ・・・どげんかせんといかん
仕様変更に潜むバグ
    5
仕様変更をピラミッドの建設に例え
唐突ですが…

          ると

 実物がない段階
仕様変更をピラミッドの建設に例え
唐突ですが…

          ると

 徐々に形が見えてくる
唐突ですが… 仕様変更をピラミッドの建設に例え
            ると

 完成
仕様変更をピラミッドの建設に例え
唐突ですが…

          ると
仕様変更をピラミッドの建設に例え
唐突ですが…

          ると

 積み上げた石を元に戻す
 部屋の数を増やして積みなおす
   空間が増えた。強度は大丈夫・・・?

 石を元に戻して積み直す時間は確保されている?
仕様変更をピラミッドの建設に例え
唐突ですが…

          ると
唐突ですが…  仕様変更をピラミッドの建設に例え
             ると

 DB設計書を変更
 DBのカラムを増やす
   テストDBに追加して確認 → 本番DBに反映

 表示・編集・検索結果・CSV出力・PDF出力 各画面
 に項目を追加
    抜けは無い? ちゃんと更新できて表示される?
    jQueryなどで触っているところも問題ない?
 すべての影響範囲をチェックする時間は確保されて
 いる?
    ( ╹ω╹)? そもそもどこまで影響するの?
仕様変更に潜むバグ

 当初の仕様に沿って作っているとき
   各フェーズに集中して作業すればよい
仕様変更に潜むバグ

 変更を加えるとき
   各フェーズを行ったり来たり

   仕様に沿って作るときよりも考えなければならないことが多
    い
仕様変更に潜むバグ

 あとは作り方とか
   ほんとはきっちり作るべきだけど時間無いからやっつけコー
    ドで
   みたいな箇所が変更対象になったりするとカオスさが増す
現実的なところとして

 どうしても無理! なところ以外は割と対応する
   お客さんは業務のことは詳しい、がプログラムのことは詳し
    くない
   開発者はプログラムのことは詳しい、が業務のことは詳しく
    ない
   業務の暗黙知は結構ある
        この条件の時はーこうなって、条件が重なったときはこうで~
    人的処理のあいまいさ
        帳票系の欄外記入とか…
つまり

 常に変更に備えよう


 変更に強い作りにする


 PHPカンファレンス2011でいい話を聞いてきまし
た。
開発の三本柱
  19
開発の三本柱

 バージョン管理
   Subversion, Git, etc.

 テスティング
   PHPUnit, SimpleTest, etc.

 自動化
   IDE連携
         Eclipseプラグイン, Netbeansプラグイン, Emacsプラグイン, etc.
     CI(Continuous Integration)
         Jenkins(Hudson) etc.
余談ですが

 バージョン管理について第6回山口県WEB勉強会で発表しました
 http://www.slideshare.net/mikage014/yamaguchi-webgroup06-subversion
テスト

 テスト駆動開発(TDD: Test-Driven Development)
 Red → Green → リファクタリング
   プログラムが正しく動いていることをテストするコードを先
    に書いて開発する
 テストにパスしている限り、正しく動いていること
 を担保する
テストの例

 プログラムのロジック
   空のデータベースに1件のレコードを登録して、検索すると1
    件のデータが返ってくるはず
     登録機能がうまく動いて、検索機能もうまく動いている


 フォーム画面
   郵便番号欄に数値を入力すれば登録できるが、数値ではない
    文字が入っていたらエラーで登録できないはず
     バリデーションに引っかかって所定のエラーメッセージが出るこ
      と
テストを書いていくと何がうれしいのか?

 仕様通りに作っているときはそれほどでもない
仕様変更に潜むバグ

 当初の仕様に沿って作っているとき
   各フェーズに集中して作業すればよい
テストを書いていくと何がうれしいのか?

 仕様変更を加えるとき、今まで動いていたところが
動かなくなっていないか?
仕様変更に潜むバグ

 変更を加えるとき
   各フェーズを行ったり来たり

   仕様に沿って作るときよりも考えなければならないことが多
    い
従来のやり方では…

 ある程度確認したらあとは   祈る!
テストがある環境では…

 これまでのテストをすべてパスしているかチェック
すればよい
   テストしている範囲においては安全であることが担保される
       もちろんテスト漏れは有り得る
Seleniumで自動ブラウザテスト
        30
Selenium

 http://seleniumhq.org/


 Selenium IDE
   単体動作するFirefox プラグイン。最初はこれがおすすめ



 Selenium Server + Selenium Client Driver
   プログラムから制御する構成
        Java, C#, Ruby, Python, PHP
    テストに組み込むにはこちら
Selenium Demo

 Selenium IDE


 Selenium Server + Selenium Client Driver
   CakePHP+SimpleTest+Testing::Selenium

   おまけでテスト結果のグラフ化
まとめ
 33
まとめ

 テストの導入によって仕様変更の不安を軽減する
 デグレードのチェックをコンピュータに任せられる


 Seleniumを使うとブラウザ操作の自動テストができ
  る
 IE、Firefox、Chrome、Safariなどクロスブラウザ
  チェックも可能
未知数

 作りこんだ後での仕様変更やバグ修正にテストが追
 従できる?

 テストに割く時間がコストに見合う?
   未来のバグ修正の時間を先取りしていると考える

   費用対効果の高い個所を優先してテストを仕込んでいく
     お客さんが最初に開くページ、よく見るページとか
テストの先にある自動化(Jenkins)

 プログラムやHTMLファイルをリポジトリにコミッ
 トする度にテストを自動実行
    エラーが出たらメールで通知とか
    最新のプログラムが動く状態であることを担保
 Ex.    http://ci.cakephp.org/
ご静聴ありがとうございました
                                 37

                            @MIKAGE014

                             2011.11.05

                          第11回山口県WEB勉強会


使用画像
http://piapro.jp/t/bvvK

テストしなイカ? Seleniumで自動ブラウザテスト