SlideShare una empresa de Scribd logo
1 de 32
Descargar para leer sin conexión
GUI Test is
             (not) necessary
                  @Posaune




13年3月9日土曜日
じこしょーかい
             まえかわ ひろし
             a.k.a @Posaune
             やってること
               京都アジャイル勉強会 #京アジャ
               TABOK勉強会
               あーだCoder
               Visual Studio 勉強会 ← New!!




13年3月9日土曜日
すきなもの
             .NET言語
               C#, F#, XAML系テクノロジ
             Emacs歴4ヶ月くらい。
             ReSharper無しで生きていけない。
             TDD
             アジャイル
             自動化(Jenkinsさん)
             UX, HCD(UCD)
             Business Model Generation
13年3月9日土曜日
最近書いた気がするもの
             JUnit実践入門 MSTestパッチ
              http://posaune.hatenablog.com/entry/
              2012/12/13/085507


             NaturalSpecを使ってC#のテストコードを書いてみ
             た。
              http://posaune.hatenablog.com/entry/
              2012/12/08/001052




13年3月9日土曜日
さて、本題。




13年3月9日土曜日
GUI Testを定義しとく
             GUIを用いて実行するテスト
             所謂テストフェイズでよく行われるのがたぶんこれ


             あんまいいイメージ無いのでは?
              エクセル・ホーガン氏に結果をひたすら書き込み
              スクリーンショットを証拠写真にしたり
              ストップウォッチ片手に処理時間測ったり
             基本的に手動のイメージ。
             自動化派は目の敵にしがち。

13年3月9日土曜日
GUI test is necessary
             エンドツーエンドテストという考え方。


                   ① Red     ② Green



                      ③ Refactor




13年3月9日土曜日
GUI test is necessary
             エンドツーエンドテストという考え方。


                   ① Red     ② Green
    ☆ E2E Test

                      ③ Refactor




13年3月9日土曜日
エンドツーエンドテスト
             フィーチャ(機能)の実装を自動化された受け入れ
             テストから始める
             受け入れテストは外部からのみシステムと相互作用
             する
              ライブラリならAPIからのみ
              Webならブラウザ画面からのみ
              GUIならGUIからのみ
             はやめにシステム全体をエンドツーエンドでテスト
             できる環境を整える(ウォーキングスケルトン)
             ビッグバン結合はダメ、絶対。

13年3月9日土曜日
【必読】【ステマ】【FYI】
             みんなも「実践テスト駆動開発」を読もう!




13年3月9日土曜日
GUI Testを行う方法
             Record & Play
             画像認識系
             Coded UI Test
             UI Automation




13年3月9日土曜日
Record & Play
             所謂操作記録系のソフト
             Windowsだと定番はUWSCじゃね?
              http://www.uwsc.info/index.html


             記録したものをスクリプト化してくれる。システムテ
             ストでの連続運転なんかには威力を発揮。
             基本的なフォーカスは「操作の自動化」でTDDとは根
             本的に合わない。
             要するに、開発中に入れちゃうとメンテが大変です。
              ボタンの位置を変えたら落ちるとか正直勘弁

13年3月9日土曜日
画像認識系
             画面を画像認識して捜査対象を探すSikuliってのが
             があったりする。
              http://www.sikuli.org/




             こっちのPCでは動かないので省略・・・
             (´・ω・`)
             そこそこお手軽、そこそこ堅牢?

13年3月9日土曜日
Coded UI Test
             Visual Studio Premium以上では、UI操作を.NETコ
             ードに変換できるらしいよ!
             Pro以下は察して。
             ・・・あ、今日はいっぱいいそうなMVPな方に見せ
             てもらってください。




             マジレスすると、やっぱり「出来上がったUIをテス
             トする」感が強い



13年3月9日土曜日
UI Automation
             UIをコードから操作できるライブラリ
             .NET 3.5くらいから整備された
             コントロールにIDとか振れるのでちょっとやそっとい
             じったくらいでは壊れない頑丈なテストが書ける。


             がんばれば大体のコントロールは操作できる。
              WPFもWinFormもOK。
              サードパーティはサポートしてたりしてなかったり
                某IG社はWinFormはサポートしないってさ。
                へぇ。

13年3月9日土曜日
がんばれば?
// 操作対象のコントロールへの参照を
// AutomationElementオブジェクトとして取得
AutomationElement txtInput = FindElement(aeForm, "txtInput");
AutomationElement btnAdd = FindElement(aeForm, "btnAdd");
AutomationElement lstResults = FindElement(aeForm, "lstResults");

// 操作対象のコントロール・パターンを取得
ValuePattern vpTxtInput =
(ValuePattern)txtInput.GetCurrentPattern(ValuePattern.Pattern);
InvokePattern ipBtnAdd =
(InvokePattern)btnAdd.GetCurrentPattern(InvokePattern.Pattern);

// 1つ目の値を入力、[追加]ボタン押下
vpTxtInput.SetValue("ねこ");
ipBtnAdd.Invoke();

// 2つ目の値を入力、[追加]ボタン押下
vpTxtInput.SetValue("いぬ");
ipBtnAdd.Invoke();

13年3月9日土曜日
やってられるかー!
             (ノ`Д´)ノ彡┻━┻




13年3月9日土曜日
大人しくWhite使おう。
             UI Automationをラップしたライブラリで、非常に書
             きやすい
             イメージとしては、WinGUI版のSelenium
             地味にThoughtworks謹製だったりする。
               今は別の所に移管されたっぽい。
               コミットログ見ててもかなりアクティブ。


             https://github.com/TestStack/White
             同じようなコンセプトでNUnitFormがあるけれど
             NUnitのバージョン上げる以外の更新がない・・・

13年3月9日土曜日
Whiteデモ①
             普通のUI操作




13年3月9日土曜日
Whiteデモ②
             モーダルウィンドウ。
             メッセージボックス。


             メッセージボックスは各位ラップしてプルリクエス
             ト投げようぜ。




13年3月9日土曜日
Whiteデモ③
             もうちょい複雑なUI
              DataGrid




13年3月9日土曜日
Whiteデモ③
             もうちょい複雑なUI
              DataGrid




               動かない(´・ω・`)


13年3月9日土曜日
そんなわけで、ガンガン
         WhiteでGUIテスト書こう!




13年3月9日土曜日
・・・




13年3月9日土曜日
13年3月9日土曜日
GUI Test is not
                necessary




13年3月9日土曜日
GUI Test is not
                necessary
               ...not so much




13年3月9日土曜日
GUIテストに頼っちゃダメ
             どんなに頑張って書いても、やっぱりGUIテストは
             壊れやすい。
             全パターン網羅しようと思ったら恐ろしく複雑なコ
             ードになる。
             どう頑張ったってスローテストに絶対なる。


             GUIテストはあくまで「シンプルな受け入れテス
             ト」の実行に留めるべき。




13年3月9日土曜日
GUIテストに頼らない為に
             UIはあくまで表層の実装であることを意識しませう
              UI取っ払ってもロジックがちゃんと動くように作
              るのが重要


             そのためにもレイヤー化をちゃんとしましょう。
              MVCとかMVVMとかPresentationModelとか。
              参考:http://ugaya40.net/architecture/
              20120804wankuma.html の2つの記事を正座して読
              もう。



13年3月9日土曜日
各階層とテストのイメージ
                  (MVVM/PMの場合)
                       シンプルな受け入れテスト
              UI       を少数。スモークテストに
                       近い。
                       シナリオテストレベルをそ
      View Model/      こそこ記述したい所。結合
  Presentation Model   動作自体はここで完結する


                       内部の各Objectの動作を記
                       述する詳細なテスト。粒度
             Model     を細かく、数多く。TDDの
                       細かいステップを踏むのも
                       ここ。
13年3月9日土曜日
UIの動作自体がややこしいんだけど・・・

             本当にGUIの描画自体がややこしいのか、GUIの
             描画プロパティを決めるのがややこしいのか
             後者ならViewModelなりPresenterなりに処理を
             委譲できるはず。




    UI:時計を描画                  UI:時計を描画

    VM:時間を保持                VM/P:針の角度を保持

13年3月9日土曜日
結局何が言いたかったのかというと
             Whiteあたり使えば、GUIテストはSeleniumレベルく
             らいにはWindowsでも何とかなる(Win32、WPF)
             かといってそれに頼りきると脆弱なテストを量産し
             てしまうので非常に(゚д゚)マズ-
              レガシーだと頼りきらざるをえない時もあるけれど。

             GUIテストはあくまで最小限に。
             そのためにもちゃんとレイヤー化アーキテクチャを
             考えるべき。
              MVC/MVP/MVVMあたりはテストの観点からも注目。



13年3月9日土曜日

Más contenido relacionado

La actualidad más candente

テスト自動化読書会 第3章 20150523
テスト自動化読書会 第3章 20150523テスト自動化読書会 第3章 20150523
テスト自動化読書会 第3章 20150523dnoguchi
 
ディープラーニングとAppiumでモバイルテスト自動化
ディープラーニングとAppiumでモバイルテスト自動化ディープラーニングとAppiumでモバイルテスト自動化
ディープラーニングとAppiumでモバイルテスト自動化Nozomi Ito
 
ゲームエンジンとMVC
ゲームエンジンとMVCゲームエンジンとMVC
ゲームエンジンとMVCAimingStudy
 
テストの自動化を考える前に
テストの自動化を考える前にテストの自動化を考える前に
テストの自動化を考える前にbleis tift
 
システムテスト自動化標準ガイド 5章発表資料
システムテスト自動化標準ガイド 5章発表資料システムテスト自動化標準ガイド 5章発表資料
システムテスト自動化標準ガイド 5章発表資料Masatoshi Itoh
 
ゲーム開発とMVC
ゲーム開発とMVCゲーム開発とMVC
ゲーム開発とMVCTakashi Komada
 
Robotium を使った UI テストとレイアウト確認の効率化
Robotium を使った UI テストとレイアウト確認の効率化Robotium を使った UI テストとレイアウト確認の効率化
Robotium を使った UI テストとレイアウト確認の効率化健一 辰濱
 
モックライブラリを使ってきちんとユニットテストする #Objective-C
モックライブラリを使ってきちんとユニットテストする #Objective-Cモックライブラリを使ってきちんとユニットテストする #Objective-C
モックライブラリを使ってきちんとユニットテストする #Objective-CShoichi Matsuda
 
Selenium boot campの紹介
Selenium boot campの紹介Selenium boot campの紹介
Selenium boot campの紹介Nozomi Ito
 
第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめhakoika-itwg
 
もしAppiumとディープラーニングを組み合わせたら
もしAppiumとディープラーニングを組み合わせたらもしAppiumとディープラーニングを組み合わせたら
もしAppiumとディープラーニングを組み合わせたらNozomi Ito
 
GUI自動テストの保守性を高めるには
GUI自動テストの保守性を高めるにはGUI自動テストの保守性を高めるには
GUI自動テストの保守性を高めるにはNozomi Ito
 
「UI自動テストツールとAI」〜AIを使った自動テストの「今」と「未来」〜
「UI自動テストツールとAI」〜AIを使った自動テストの「今」と「未来」〜「UI自動テストツールとAI」〜AIを使った自動テストの「今」と「未来」〜
「UI自動テストツールとAI」〜AIを使った自動テストの「今」と「未来」〜Nozomi Ito
 
JUnit実践入門 xUnitTestPatternsで学ぶユニットテスト
JUnit実践入門 xUnitTestPatternsで学ぶユニットテストJUnit実践入門 xUnitTestPatternsで学ぶユニットテスト
JUnit実践入門 xUnitTestPatternsで学ぶユニットテストShuji Watanabe
 
FriendlyとTestAssistantProでテスト自動化やってみた
FriendlyとTestAssistantProでテスト自動化やってみたFriendlyとTestAssistantProでテスト自動化やってみた
FriendlyとTestAssistantProでテスト自動化やってみたNakaiYusaku
 
自動テスト知識体系TABOKのご紹介
自動テスト知識体系TABOKのご紹介自動テスト知識体系TABOKのご紹介
自動テスト知識体系TABOKのご紹介Shinsuke Matsuki
 
脱・独自改造! GebでWebDriverをもっとシンプルに
脱・独自改造! GebでWebDriverをもっとシンプルに脱・独自改造! GebでWebDriverをもっとシンプルに
脱・独自改造! GebでWebDriverをもっとシンプルにHiroko Tamagawa
 

La actualidad más candente (20)

テスト自動化読書会 第3章 20150523
テスト自動化読書会 第3章 20150523テスト自動化読書会 第3章 20150523
テスト自動化読書会 第3章 20150523
 
XP祭り2013-LT-Codeer
XP祭り2013-LT-CodeerXP祭り2013-LT-Codeer
XP祭り2013-LT-Codeer
 
ディープラーニングとAppiumでモバイルテスト自動化
ディープラーニングとAppiumでモバイルテスト自動化ディープラーニングとAppiumでモバイルテスト自動化
ディープラーニングとAppiumでモバイルテスト自動化
 
ゲームエンジンとMVC
ゲームエンジンとMVCゲームエンジンとMVC
ゲームエンジンとMVC
 
テストの自動化を考える前に
テストの自動化を考える前にテストの自動化を考える前に
テストの自動化を考える前に
 
システムテスト自動化標準ガイド 5章発表資料
システムテスト自動化標準ガイド 5章発表資料システムテスト自動化標準ガイド 5章発表資料
システムテスト自動化標準ガイド 5章発表資料
 
ゲーム開発とMVC
ゲーム開発とMVCゲーム開発とMVC
ゲーム開発とMVC
 
Robotium を使った UI テストとレイアウト確認の効率化
Robotium を使った UI テストとレイアウト確認の効率化Robotium を使った UI テストとレイアウト確認の効率化
Robotium を使った UI テストとレイアウト確認の効率化
 
モックライブラリを使ってきちんとユニットテストする #Objective-C
モックライブラリを使ってきちんとユニットテストする #Objective-Cモックライブラリを使ってきちんとユニットテストする #Objective-C
モックライブラリを使ってきちんとユニットテストする #Objective-C
 
Selenium boot campの紹介
Selenium boot campの紹介Selenium boot campの紹介
Selenium boot campの紹介
 
第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ
 
もしAppiumとディープラーニングを組み合わせたら
もしAppiumとディープラーニングを組み合わせたらもしAppiumとディープラーニングを組み合わせたら
もしAppiumとディープラーニングを組み合わせたら
 
VDMX_WS20160214
VDMX_WS20160214VDMX_WS20160214
VDMX_WS20160214
 
GUI自動テストの保守性を高めるには
GUI自動テストの保守性を高めるにはGUI自動テストの保守性を高めるには
GUI自動テストの保守性を高めるには
 
「UI自動テストツールとAI」〜AIを使った自動テストの「今」と「未来」〜
「UI自動テストツールとAI」〜AIを使った自動テストの「今」と「未来」〜「UI自動テストツールとAI」〜AIを使った自動テストの「今」と「未来」〜
「UI自動テストツールとAI」〜AIを使った自動テストの「今」と「未来」〜
 
VDMX_WS20160227
VDMX_WS20160227VDMX_WS20160227
VDMX_WS20160227
 
JUnit実践入門 xUnitTestPatternsで学ぶユニットテスト
JUnit実践入門 xUnitTestPatternsで学ぶユニットテストJUnit実践入門 xUnitTestPatternsで学ぶユニットテスト
JUnit実践入門 xUnitTestPatternsで学ぶユニットテスト
 
FriendlyとTestAssistantProでテスト自動化やってみた
FriendlyとTestAssistantProでテスト自動化やってみたFriendlyとTestAssistantProでテスト自動化やってみた
FriendlyとTestAssistantProでテスト自動化やってみた
 
自動テスト知識体系TABOKのご紹介
自動テスト知識体系TABOKのご紹介自動テスト知識体系TABOKのご紹介
自動テスト知識体系TABOKのご紹介
 
脱・独自改造! GebでWebDriverをもっとシンプルに
脱・独自改造! GebでWebDriverをもっとシンプルに脱・独自改造! GebでWebDriverをもっとシンプルに
脱・独自改造! GebでWebDriverをもっとシンプルに
 

Destacado

Gui自動入力ツール
Gui自動入力ツールGui自動入力ツール
Gui自動入力ツールyanoojapan
 
第1回キーワード駆動テスト勉強会
第1回キーワード駆動テスト勉強会第1回キーワード駆動テスト勉強会
第1回キーワード駆動テスト勉強会Kinji Akemine
 
テスト自動化のパターンと実践
テスト自動化のパターンと実践テスト自動化のパターンと実践
テスト自動化のパターンと実践Hiroshi Maekawa
 
ZFSでストレージ
ZFSでストレージZFSでストレージ
ZFSでストレージ悟 宮崎
 
scikit-learnを用いた機械学習チュートリアル
scikit-learnを用いた機械学習チュートリアルscikit-learnを用いた機械学習チュートリアル
scikit-learnを用いた機械学習チュートリアル敦志 金谷
 
キーワード駆動によるシステムテストの自動化について 2015
キーワード駆動によるシステムテストの自動化について 2015キーワード駆動によるシステムテストの自動化について 2015
キーワード駆動によるシステムテストの自動化について 2015Toru Koido
 
Chainerチュートリアル -v1.5向け- ViEW2015
Chainerチュートリアル -v1.5向け- ViEW2015Chainerチュートリアル -v1.5向け- ViEW2015
Chainerチュートリアル -v1.5向け- ViEW2015Ryosuke Okuta
 
TensorFlow を使った 機械学習ことはじめ (GDG京都 機械学習勉強会)
TensorFlow を使った機械学習ことはじめ (GDG京都 機械学習勉強会)TensorFlow を使った機械学習ことはじめ (GDG京都 機械学習勉強会)
TensorFlow を使った 機械学習ことはじめ (GDG京都 機械学習勉強会)徹 上野山
 
機械学習概論 講義テキスト
機械学習概論 講義テキスト機械学習概論 講義テキスト
機械学習概論 講義テキストEtsuji Nakai
 
キーワード駆動テストチュートリアルハンズアウト.03.06
キーワード駆動テストチュートリアルハンズアウト.03.06キーワード駆動テストチュートリアルハンズアウト.03.06
キーワード駆動テストチュートリアルハンズアウト.03.06Toru Koido
 
Deep Learningと画像認識   ~歴史・理論・実践~
Deep Learningと画像認識 ~歴史・理論・実践~Deep Learningと画像認識 ~歴史・理論・実践~
Deep Learningと画像認識   ~歴史・理論・実践~nlab_utokyo
 
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築Tatsuya Tojima
 
Pythonとdeep learningで手書き文字認識
Pythonとdeep learningで手書き文字認識Pythonとdeep learningで手書き文字認識
Pythonとdeep learningで手書き文字認識Ken Morishita
 
機械学習によるデータ分析まわりのお話
機械学習によるデータ分析まわりのお話機械学習によるデータ分析まわりのお話
機械学習によるデータ分析まわりのお話Ryota Kamoshida
 
機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual Talks機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual TalksYuya Unno
 

Destacado (15)

Gui自動入力ツール
Gui自動入力ツールGui自動入力ツール
Gui自動入力ツール
 
第1回キーワード駆動テスト勉強会
第1回キーワード駆動テスト勉強会第1回キーワード駆動テスト勉強会
第1回キーワード駆動テスト勉強会
 
テスト自動化のパターンと実践
テスト自動化のパターンと実践テスト自動化のパターンと実践
テスト自動化のパターンと実践
 
ZFSでストレージ
ZFSでストレージZFSでストレージ
ZFSでストレージ
 
scikit-learnを用いた機械学習チュートリアル
scikit-learnを用いた機械学習チュートリアルscikit-learnを用いた機械学習チュートリアル
scikit-learnを用いた機械学習チュートリアル
 
キーワード駆動によるシステムテストの自動化について 2015
キーワード駆動によるシステムテストの自動化について 2015キーワード駆動によるシステムテストの自動化について 2015
キーワード駆動によるシステムテストの自動化について 2015
 
Chainerチュートリアル -v1.5向け- ViEW2015
Chainerチュートリアル -v1.5向け- ViEW2015Chainerチュートリアル -v1.5向け- ViEW2015
Chainerチュートリアル -v1.5向け- ViEW2015
 
TensorFlow を使った 機械学習ことはじめ (GDG京都 機械学習勉強会)
TensorFlow を使った機械学習ことはじめ (GDG京都 機械学習勉強会)TensorFlow を使った機械学習ことはじめ (GDG京都 機械学習勉強会)
TensorFlow を使った 機械学習ことはじめ (GDG京都 機械学習勉強会)
 
機械学習概論 講義テキスト
機械学習概論 講義テキスト機械学習概論 講義テキスト
機械学習概論 講義テキスト
 
キーワード駆動テストチュートリアルハンズアウト.03.06
キーワード駆動テストチュートリアルハンズアウト.03.06キーワード駆動テストチュートリアルハンズアウト.03.06
キーワード駆動テストチュートリアルハンズアウト.03.06
 
Deep Learningと画像認識   ~歴史・理論・実践~
Deep Learningと画像認識 ~歴史・理論・実践~Deep Learningと画像認識 ~歴史・理論・実践~
Deep Learningと画像認識   ~歴史・理論・実践~
 
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
 
Pythonとdeep learningで手書き文字認識
Pythonとdeep learningで手書き文字認識Pythonとdeep learningで手書き文字認識
Pythonとdeep learningで手書き文字認識
 
機械学習によるデータ分析まわりのお話
機械学習によるデータ分析まわりのお話機械学習によるデータ分析まわりのお話
機械学習によるデータ分析まわりのお話
 
機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual Talks機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual Talks
 

Similar a GUI Test is (not) necessary

プログラミング学習のための学習
プログラミング学習のための学習プログラミング学習のための学習
プログラミング学習のための学習siranon *
 
GroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hackGroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hackTakahiro Yoshimura
 
『JUnit実践入門』写経・実践会 in 横浜 #2
『JUnit実践入門』写経・実践会 in 横浜 #2『JUnit実践入門』写経・実践会 in 横浜 #2
『JUnit実践入門』写経・実践会 in 横浜 #2shinyaa31
 
1時間で分かるSTA (Software Test Automation) #stac2014
1時間で分かるSTA (Software Test Automation) #stac20141時間で分かるSTA (Software Test Automation) #stac2014
1時間で分かるSTA (Software Test Automation) #stac2014Kazuhiro Suzuki
 
Enpit bizapp_aiit_20130902_for_WindowsEnvironment
Enpit bizapp_aiit_20130902_for_WindowsEnvironmentEnpit bizapp_aiit_20130902_for_WindowsEnvironment
Enpit bizapp_aiit_20130902_for_WindowsEnvironmentYukio Saito
 
Should we write such like plugin or not?
Should we write such like plugin or not?Should we write such like plugin or not?
Should we write such like plugin or not?SATOSHI TAGOMORI
 
Cod2012 デバッグ講座
Cod2012 デバッグ講座Cod2012 デバッグ講座
Cod2012 デバッグ講座Masuda Tomoaki
 
Pythonの開発環境を調べてみた
Pythonの開発環境を調べてみたPythonの開発環境を調べてみた
Pythonの開発環境を調べてみたKenji NAKAGAKI
 
FlashBuilderでスマホアプリ開発
FlashBuilderでスマホアプリ開発FlashBuilderでスマホアプリ開発
FlashBuilderでスマホアプリ開発utweb
 
『JUnit実践入門』写経・実践会 in 横浜 #3
『JUnit実践入門』写経・実践会 in 横浜 #3『JUnit実践入門』写経・実践会 in 横浜 #3
『JUnit実践入門』写経・実践会 in 横浜 #3shinyaa31
 
Jenkins+Play!で気軽にCI
Jenkins+Play!で気軽にCIJenkins+Play!で気軽にCI
Jenkins+Play!で気軽にCITakafumi Ikeda
 
Pex を試してみよう!
Pex を試してみよう!Pex を試してみよう!
Pex を試してみよう!Oda Shinsuke
 
コンポーネントテストで開発効率を上げよう
コンポーネントテストで開発効率を上げようコンポーネントテストで開発効率を上げよう
コンポーネントテストで開発効率を上げようMatsuoka Hiromitsu
 
配布用Supervisordによるnode.jsの運用
配布用Supervisordによるnode.jsの運用配布用Supervisordによるnode.jsの運用
配布用Supervisordによるnode.jsの運用yut148atgmaildotcom
 
WACATE 2010夏 ゆもつよ講演スライド
WACATE 2010夏 ゆもつよ講演スライドWACATE 2010夏 ゆもつよ講演スライド
WACATE 2010夏 ゆもつよ講演スライドTsuyoshi Yumoto
 
smartphone test (know how & tools)
smartphone test (know how & tools)smartphone test (know how & tools)
smartphone test (know how & tools)Yukio Andoh
 
Unityとスマートフォンアプリの最適化
Unityとスマートフォンアプリの最適化Unityとスマートフォンアプリの最適化
Unityとスマートフォンアプリの最適化COLOPL, Inc.
 

Similar a GUI Test is (not) necessary (20)

WPFことはじめ
WPFことはじめWPFことはじめ
WPFことはじめ
 
Kifの紹介
Kifの紹介Kifの紹介
Kifの紹介
 
プログラミング学習のための学習
プログラミング学習のための学習プログラミング学習のための学習
プログラミング学習のための学習
 
GroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hackGroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hack
 
『JUnit実践入門』写経・実践会 in 横浜 #2
『JUnit実践入門』写経・実践会 in 横浜 #2『JUnit実践入門』写経・実践会 in 横浜 #2
『JUnit実践入門』写経・実践会 in 横浜 #2
 
1時間で分かるSTA (Software Test Automation) #stac2014
1時間で分かるSTA (Software Test Automation) #stac20141時間で分かるSTA (Software Test Automation) #stac2014
1時間で分かるSTA (Software Test Automation) #stac2014
 
Enpit bizapp_aiit_20130902_for_WindowsEnvironment
Enpit bizapp_aiit_20130902_for_WindowsEnvironmentEnpit bizapp_aiit_20130902_for_WindowsEnvironment
Enpit bizapp_aiit_20130902_for_WindowsEnvironment
 
Should we write such like plugin or not?
Should we write such like plugin or not?Should we write such like plugin or not?
Should we write such like plugin or not?
 
Cod2012 デバッグ講座
Cod2012 デバッグ講座Cod2012 デバッグ講座
Cod2012 デバッグ講座
 
DevSap20130921
DevSap20130921DevSap20130921
DevSap20130921
 
Pythonの開発環境を調べてみた
Pythonの開発環境を調べてみたPythonの開発環境を調べてみた
Pythonの開発環境を調べてみた
 
FlashBuilderでスマホアプリ開発
FlashBuilderでスマホアプリ開発FlashBuilderでスマホアプリ開発
FlashBuilderでスマホアプリ開発
 
『JUnit実践入門』写経・実践会 in 横浜 #3
『JUnit実践入門』写経・実践会 in 横浜 #3『JUnit実践入門』写経・実践会 in 横浜 #3
『JUnit実践入門』写経・実践会 in 横浜 #3
 
Jenkins+Play!で気軽にCI
Jenkins+Play!で気軽にCIJenkins+Play!で気軽にCI
Jenkins+Play!で気軽にCI
 
Pex を試してみよう!
Pex を試してみよう!Pex を試してみよう!
Pex を試してみよう!
 
コンポーネントテストで開発効率を上げよう
コンポーネントテストで開発効率を上げようコンポーネントテストで開発効率を上げよう
コンポーネントテストで開発効率を上げよう
 
配布用Supervisordによるnode.jsの運用
配布用Supervisordによるnode.jsの運用配布用Supervisordによるnode.jsの運用
配布用Supervisordによるnode.jsの運用
 
WACATE 2010夏 ゆもつよ講演スライド
WACATE 2010夏 ゆもつよ講演スライドWACATE 2010夏 ゆもつよ講演スライド
WACATE 2010夏 ゆもつよ講演スライド
 
smartphone test (know how & tools)
smartphone test (know how & tools)smartphone test (know how & tools)
smartphone test (know how & tools)
 
Unityとスマートフォンアプリの最適化
Unityとスマートフォンアプリの最適化Unityとスマートフォンアプリの最適化
Unityとスマートフォンアプリの最適化
 

Más de Hiroshi Maekawa

新しい技術を取り入れるための実験のやり方 〜サーバーレス・機械学習・PWAを実戦に投入するまで〜
新しい技術を取り入れるための実験のやり方 〜サーバーレス・機械学習・PWAを実戦に投入するまで〜新しい技術を取り入れるための実験のやり方 〜サーバーレス・機械学習・PWAを実戦に投入するまで〜
新しい技術を取り入れるための実験のやり方 〜サーバーレス・機械学習・PWAを実戦に投入するまで〜Hiroshi Maekawa
 
老舗大企業からスタートアップでの二年間
老舗大企業からスタートアップでの二年間老舗大企業からスタートアップでの二年間
老舗大企業からスタートアップでの二年間Hiroshi Maekawa
 
芯を通す開発を目指して ー アジャイル"ファン"が本気でアジャイル開発に取り組んだ2年間 ー
芯を通す開発を目指して ー アジャイル"ファン"が本気でアジャイル開発に取り組んだ2年間 ー芯を通す開発を目指して ー アジャイル"ファン"が本気でアジャイル開発に取り組んだ2年間 ー
芯を通す開発を目指して ー アジャイル"ファン"が本気でアジャイル開発に取り組んだ2年間 ーHiroshi Maekawa
 
第8回大阪Jenkins勉強会LT: iOS vs CI
第8回大阪Jenkins勉強会LT: iOS vs CI第8回大阪Jenkins勉強会LT: iOS vs CI
第8回大阪Jenkins勉強会LT: iOS vs CIHiroshi Maekawa
 
Visual Studio Online as a CI Service
Visual Studio Online as a CI ServiceVisual Studio Online as a CI Service
Visual Studio Online as a CI ServiceHiroshi Maekawa
 
Travis, Circle そして Jenkins 2.0
Travis, Circle そして Jenkins 2.0Travis, Circle そして Jenkins 2.0
Travis, Circle そして Jenkins 2.0Hiroshi Maekawa
 
Getting Start with React Native
Getting Start with React NativeGetting Start with React Native
Getting Start with React NativeHiroshi Maekawa
 
「価値探索」がつないだクライアントと開発者の絆
「価値探索」がつないだクライアントと開発者の絆 「価値探索」がつないだクライアントと開発者の絆
「価値探索」がつないだクライアントと開発者の絆 Hiroshi Maekawa
 
「価値探索」がつないだ
クライアントと開発者の絆
 〜Craful開発チームの60日〜
「価値探索」がつないだ
クライアントと開発者の絆
 〜Craful開発チームの60日〜「価値探索」がつないだ
クライアントと開発者の絆
 〜Craful開発チームの60日〜
「価値探索」がつないだ
クライアントと開発者の絆
 〜Craful開発チームの60日〜Hiroshi Maekawa
 
スタートアップこそ巨人の肩に乗りまくれ! 〜Craful開発とMackerel〜
スタートアップこそ巨人の肩に乗りまくれ! 〜Craful開発とMackerel〜スタートアップこそ巨人の肩に乗りまくれ! 〜Craful開発とMackerel〜
スタートアップこそ巨人の肩に乗りまくれ! 〜Craful開発とMackerel〜Hiroshi Maekawa
 
ドメイン『駆動』『開発』
ドメイン『駆動』『開発』ドメイン『駆動』『開発』
ドメイン『駆動』『開発』Hiroshi Maekawa
 
ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略Hiroshi Maekawa
 
iOSのCI as a Service事情
iOSのCI as a Service事情iOSのCI as a Service事情
iOSのCI as a Service事情Hiroshi Maekawa
 
テストって何をするもの? - テストの5W1H -
テストって何をするもの? - テストの5W1H -テストって何をするもの? - テストの5W1H -
テストって何をするもの? - テストの5W1H -Hiroshi Maekawa
 
ホントは楽しいエイブンポー
ホントは楽しいエイブンポーホントは楽しいエイブンポー
ホントは楽しいエイブンポーHiroshi Maekawa
 
テスト自動化のパタンランゲージ@Agilet Tour Osaka
テスト自動化のパタンランゲージ@Agilet Tour Osakaテスト自動化のパタンランゲージ@Agilet Tour Osaka
テスト自動化のパタンランゲージ@Agilet Tour OsakaHiroshi Maekawa
 
雑食系エンジニアの作りかた
雑食系エンジニアの作りかた雑食系エンジニアの作りかた
雑食系エンジニアの作りかたHiroshi Maekawa
 

Más de Hiroshi Maekawa (20)

新しい技術を取り入れるための実験のやり方 〜サーバーレス・機械学習・PWAを実戦に投入するまで〜
新しい技術を取り入れるための実験のやり方 〜サーバーレス・機械学習・PWAを実戦に投入するまで〜新しい技術を取り入れるための実験のやり方 〜サーバーレス・機械学習・PWAを実戦に投入するまで〜
新しい技術を取り入れるための実験のやり方 〜サーバーレス・機械学習・PWAを実戦に投入するまで〜
 
老舗大企業からスタートアップでの二年間
老舗大企業からスタートアップでの二年間老舗大企業からスタートアップでの二年間
老舗大企業からスタートアップでの二年間
 
芯を通す開発を目指して ー アジャイル"ファン"が本気でアジャイル開発に取り組んだ2年間 ー
芯を通す開発を目指して ー アジャイル"ファン"が本気でアジャイル開発に取り組んだ2年間 ー芯を通す開発を目指して ー アジャイル"ファン"が本気でアジャイル開発に取り組んだ2年間 ー
芯を通す開発を目指して ー アジャイル"ファン"が本気でアジャイル開発に取り組んだ2年間 ー
 
第8回大阪Jenkins勉強会LT: iOS vs CI
第8回大阪Jenkins勉強会LT: iOS vs CI第8回大阪Jenkins勉強会LT: iOS vs CI
第8回大阪Jenkins勉強会LT: iOS vs CI
 
Visual Studio Online as a CI Service
Visual Studio Online as a CI ServiceVisual Studio Online as a CI Service
Visual Studio Online as a CI Service
 
Travis, Circle そして Jenkins 2.0
Travis, Circle そして Jenkins 2.0Travis, Circle そして Jenkins 2.0
Travis, Circle そして Jenkins 2.0
 
Dockerとdev ops
Dockerとdev opsDockerとdev ops
Dockerとdev ops
 
Getting Start with React Native
Getting Start with React NativeGetting Start with React Native
Getting Start with React Native
 
「価値探索」がつないだクライアントと開発者の絆
「価値探索」がつないだクライアントと開発者の絆 「価値探索」がつないだクライアントと開発者の絆
「価値探索」がつないだクライアントと開発者の絆
 
「価値探索」がつないだ
クライアントと開発者の絆
 〜Craful開発チームの60日〜
「価値探索」がつないだ
クライアントと開発者の絆
 〜Craful開発チームの60日〜「価値探索」がつないだ
クライアントと開発者の絆
 〜Craful開発チームの60日〜
「価値探索」がつないだ
クライアントと開発者の絆
 〜Craful開発チームの60日〜
 
スタートアップこそ巨人の肩に乗りまくれ! 〜Craful開発とMackerel〜
スタートアップこそ巨人の肩に乗りまくれ! 〜Craful開発とMackerel〜スタートアップこそ巨人の肩に乗りまくれ! 〜Craful開発とMackerel〜
スタートアップこそ巨人の肩に乗りまくれ! 〜Craful開発とMackerel〜
 
ドメイン『駆動』『開発』
ドメイン『駆動』『開発』ドメイン『駆動』『開発』
ドメイン『駆動』『開発』
 
なれる!IL
なれる!ILなれる!IL
なれる!IL
 
ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略
 
iOSのCI as a Service事情
iOSのCI as a Service事情iOSのCI as a Service事情
iOSのCI as a Service事情
 
テストって何をするもの? - テストの5W1H -
テストって何をするもの? - テストの5W1H -テストって何をするもの? - テストの5W1H -
テストって何をするもの? - テストの5W1H -
 
ホントは楽しいエイブンポー
ホントは楽しいエイブンポーホントは楽しいエイブンポー
ホントは楽しいエイブンポー
 
テスト自動化のパタンランゲージ@Agilet Tour Osaka
テスト自動化のパタンランゲージ@Agilet Tour Osakaテスト自動化のパタンランゲージ@Agilet Tour Osaka
テスト自動化のパタンランゲージ@Agilet Tour Osaka
 
雑食系エンジニアの作りかた
雑食系エンジニアの作りかた雑食系エンジニアの作りかた
雑食系エンジニアの作りかた
 
T4 Template 入門
T4 Template 入門T4 Template 入門
T4 Template 入門
 

GUI Test is (not) necessary

  • 1. GUI Test is (not) necessary @Posaune 13年3月9日土曜日
  • 2. じこしょーかい まえかわ ひろし a.k.a @Posaune やってること 京都アジャイル勉強会 #京アジャ TABOK勉強会 あーだCoder Visual Studio 勉強会 ← New!! 13年3月9日土曜日
  • 3. すきなもの .NET言語 C#, F#, XAML系テクノロジ Emacs歴4ヶ月くらい。 ReSharper無しで生きていけない。 TDD アジャイル 自動化(Jenkinsさん) UX, HCD(UCD) Business Model Generation 13年3月9日土曜日
  • 4. 最近書いた気がするもの JUnit実践入門 MSTestパッチ http://posaune.hatenablog.com/entry/ 2012/12/13/085507 NaturalSpecを使ってC#のテストコードを書いてみ た。 http://posaune.hatenablog.com/entry/ 2012/12/08/001052 13年3月9日土曜日
  • 6. GUI Testを定義しとく GUIを用いて実行するテスト 所謂テストフェイズでよく行われるのがたぶんこれ あんまいいイメージ無いのでは? エクセル・ホーガン氏に結果をひたすら書き込み スクリーンショットを証拠写真にしたり ストップウォッチ片手に処理時間測ったり 基本的に手動のイメージ。 自動化派は目の敵にしがち。 13年3月9日土曜日
  • 7. GUI test is necessary エンドツーエンドテストという考え方。 ① Red ② Green ③ Refactor 13年3月9日土曜日
  • 8. GUI test is necessary エンドツーエンドテストという考え方。 ① Red ② Green ☆ E2E Test ③ Refactor 13年3月9日土曜日
  • 9. エンドツーエンドテスト フィーチャ(機能)の実装を自動化された受け入れ テストから始める 受け入れテストは外部からのみシステムと相互作用 する ライブラリならAPIからのみ Webならブラウザ画面からのみ GUIならGUIからのみ はやめにシステム全体をエンドツーエンドでテスト できる環境を整える(ウォーキングスケルトン) ビッグバン結合はダメ、絶対。 13年3月9日土曜日
  • 10. 【必読】【ステマ】【FYI】 みんなも「実践テスト駆動開発」を読もう! 13年3月9日土曜日
  • 11. GUI Testを行う方法 Record & Play 画像認識系 Coded UI Test UI Automation 13年3月9日土曜日
  • 12. Record & Play 所謂操作記録系のソフト Windowsだと定番はUWSCじゃね? http://www.uwsc.info/index.html 記録したものをスクリプト化してくれる。システムテ ストでの連続運転なんかには威力を発揮。 基本的なフォーカスは「操作の自動化」でTDDとは根 本的に合わない。 要するに、開発中に入れちゃうとメンテが大変です。 ボタンの位置を変えたら落ちるとか正直勘弁 13年3月9日土曜日
  • 13. 画像認識系 画面を画像認識して捜査対象を探すSikuliってのが があったりする。 http://www.sikuli.org/ こっちのPCでは動かないので省略・・・ (´・ω・`) そこそこお手軽、そこそこ堅牢? 13年3月9日土曜日
  • 14. Coded UI Test Visual Studio Premium以上では、UI操作を.NETコ ードに変換できるらしいよ! Pro以下は察して。 ・・・あ、今日はいっぱいいそうなMVPな方に見せ てもらってください。 マジレスすると、やっぱり「出来上がったUIをテス トする」感が強い 13年3月9日土曜日
  • 15. UI Automation UIをコードから操作できるライブラリ .NET 3.5くらいから整備された コントロールにIDとか振れるのでちょっとやそっとい じったくらいでは壊れない頑丈なテストが書ける。 がんばれば大体のコントロールは操作できる。 WPFもWinFormもOK。 サードパーティはサポートしてたりしてなかったり 某IG社はWinFormはサポートしないってさ。 へぇ。 13年3月9日土曜日
  • 16. がんばれば? // 操作対象のコントロールへの参照を // AutomationElementオブジェクトとして取得 AutomationElement txtInput = FindElement(aeForm, "txtInput"); AutomationElement btnAdd = FindElement(aeForm, "btnAdd"); AutomationElement lstResults = FindElement(aeForm, "lstResults"); // 操作対象のコントロール・パターンを取得 ValuePattern vpTxtInput = (ValuePattern)txtInput.GetCurrentPattern(ValuePattern.Pattern); InvokePattern ipBtnAdd = (InvokePattern)btnAdd.GetCurrentPattern(InvokePattern.Pattern); // 1つ目の値を入力、[追加]ボタン押下 vpTxtInput.SetValue("ねこ"); ipBtnAdd.Invoke(); // 2つ目の値を入力、[追加]ボタン押下 vpTxtInput.SetValue("いぬ"); ipBtnAdd.Invoke(); 13年3月9日土曜日
  • 17. やってられるかー! (ノ`Д´)ノ彡┻━┻ 13年3月9日土曜日
  • 18. 大人しくWhite使おう。 UI Automationをラップしたライブラリで、非常に書 きやすい イメージとしては、WinGUI版のSelenium 地味にThoughtworks謹製だったりする。 今は別の所に移管されたっぽい。 コミットログ見ててもかなりアクティブ。 https://github.com/TestStack/White 同じようなコンセプトでNUnitFormがあるけれど NUnitのバージョン上げる以外の更新がない・・・ 13年3月9日土曜日
  • 19. Whiteデモ① 普通のUI操作 13年3月9日土曜日
  • 20. Whiteデモ② モーダルウィンドウ。 メッセージボックス。 メッセージボックスは各位ラップしてプルリクエス ト投げようぜ。 13年3月9日土曜日
  • 21. Whiteデモ③ もうちょい複雑なUI DataGrid 13年3月9日土曜日
  • 22. Whiteデモ③ もうちょい複雑なUI DataGrid 動かない(´・ω・`) 13年3月9日土曜日
  • 23. そんなわけで、ガンガン WhiteでGUIテスト書こう! 13年3月9日土曜日
  • 26. GUI Test is not necessary 13年3月9日土曜日
  • 27. GUI Test is not necessary ...not so much 13年3月9日土曜日
  • 28. GUIテストに頼っちゃダメ どんなに頑張って書いても、やっぱりGUIテストは 壊れやすい。 全パターン網羅しようと思ったら恐ろしく複雑なコ ードになる。 どう頑張ったってスローテストに絶対なる。 GUIテストはあくまで「シンプルな受け入れテス ト」の実行に留めるべき。 13年3月9日土曜日
  • 29. GUIテストに頼らない為に UIはあくまで表層の実装であることを意識しませう UI取っ払ってもロジックがちゃんと動くように作 るのが重要 そのためにもレイヤー化をちゃんとしましょう。 MVCとかMVVMとかPresentationModelとか。 参考:http://ugaya40.net/architecture/ 20120804wankuma.html の2つの記事を正座して読 もう。 13年3月9日土曜日
  • 30. 各階層とテストのイメージ (MVVM/PMの場合) シンプルな受け入れテスト UI を少数。スモークテストに 近い。 シナリオテストレベルをそ View Model/ こそこ記述したい所。結合 Presentation Model 動作自体はここで完結する 内部の各Objectの動作を記 述する詳細なテスト。粒度 Model を細かく、数多く。TDDの 細かいステップを踏むのも ここ。 13年3月9日土曜日
  • 31. UIの動作自体がややこしいんだけど・・・ 本当にGUIの描画自体がややこしいのか、GUIの 描画プロパティを決めるのがややこしいのか 後者ならViewModelなりPresenterなりに処理を 委譲できるはず。 UI:時計を描画 UI:時計を描画 VM:時間を保持 VM/P:針の角度を保持 13年3月9日土曜日
  • 32. 結局何が言いたかったのかというと Whiteあたり使えば、GUIテストはSeleniumレベルく らいにはWindowsでも何とかなる(Win32、WPF) かといってそれに頼りきると脆弱なテストを量産し てしまうので非常に(゚д゚)マズ- レガシーだと頼りきらざるをえない時もあるけれど。 GUIテストはあくまで最小限に。 そのためにもちゃんとレイヤー化アーキテクチャを 考えるべき。 MVC/MVP/MVVMあたりはテストの観点からも注目。 13年3月9日土曜日