SlideShare a Scribd company logo
Friendlyと
TestAssistantProで
テスト自動化やってみた
プログラミング生放送勉強会 第56回@大阪
わんくま同盟 大阪勉強会 #74
11/10 中井優作(@nkpnLib)
ちょっとだけ自己紹介
 中井優作 (@nkpnLib)
 株式会社Codeerに所属
 もともとゲームプログラマでした
 C++/C#がお気に入り
 最近やってること
 Windowsシステム開発
 Friendlyでシステムテスト自動化
 TestAssistantProの開発
などなど
今日話す内容
1. Friendlyって何ですの?
2. TestAssistantProって何ですの?
3. ↑を使ったテスト自動化の話
FriendlyとTestAssistantProを使うとどんな得
があるのか?という話
1. Friendlyって何ですの?
1. Friendlyって何ですの?
Friendlyは、自動テスト作成用のライブラリです!
Windowsアプリに対して、
外部(例えばテストプロセスとか)から、
様々なGUI操作を簡単・高速・確実に行えるようになり
ます。
1. Friendlyって何ですの?
アプリ
テスト
プロセス
操作
操作
操作
イメージ
1. Friendlyって何ですの?
アプリ
• 関数呼び出し
• 値の代入
• インスタンス
の生成
などなど…
もう少し具体的に
テスト
プロセス
とりあえず、これを見てください
※デモ
1. Friendlyって何ですの?
プロセスの壁を越えて、プロパティ取得したり、
関数を呼び出したり出来ちゃう。
しかも、こんなに簡単
1. Friendlyって何ですの?
プロセスの壁を越えて、プロパティ取得したり、
関数を呼び出したり出来ちゃう。
しかも、こんなに簡単
たったこれだ
け!!!!
1. Friendlyって何ですの?
プロセスの壁を越えて、操作対象アプリの内部に
インスタンスを生成出来ちゃう。
これも、めちゃくちゃ簡単
1. Friendlyって何ですの?
できます!!
プロセスの壁を越えて、操作対象アプリの内部に
インスタンスを生成出来ちゃう。
これも、めちゃくちゃ簡単
1. Friendlyって何ですの?
できます!!
プロセスの壁を越えて、操作対象アプリの内部に
インスタンスを生成出来ちゃう。
これも、めちゃくちゃ簡単
めっちゃできま
す!!!!
1. Friendlyって何ですの?
できます!!
プロセスの壁を越えて、操作対象アプリの内部に
インスタンスを生成出来ちゃう。
これも、めちゃくちゃ簡単
めっちゃできま
す!!!!
たったこれだ
け!!!!
1. Friendlyって何ですの?
DLLインジェクションがあまりにも簡単に書ける!
たった1行!!驚異的です。
1. Friendlyって何ですの?
DLLインジェクションがあまりにも簡単に書ける!
たった1行!!驚異的です。
たったこれだ
け!!!!
1. Friendlyって何ですの?
DLLインジェクションがあまりにも簡単に書ける!
たった1行!!驚異的です。
Injectionした
関数呼び出し
1. Friendlyって何ですの?
DLLインジェクションがあまりにも簡単に書ける!
たった1行!!驚異的です。
Injectionした
関数呼び出し
アプリ側のプロ
セスで実行!!
1. Friendlyって何ですの?
インジェクションしたい処理の例
・イベントハンドラの追加/削除
イベントハンドラの追加と削除はDLLインジェクションして
アプリ側で行わないと出来ないです。
・アトミックな処理
他の処理に割り込まれると結果が変わるような一連の処理
・高速に動作させたい処理
10000件のデータ抽出とか
Friendlyでプロセス越しに10000件のデータ取得したりすると、
さすがに遅いです。
1. Friendlyって何ですの?
privateだろうが、関係ないぜ
1. Friendlyって何ですの?
privateだろうが、関係ないぜ
もはや何でも
出来る!!!
1. Friendlyって何ですの?
ヤバい所まとめ
 アプリ側で実装している関数をprivateとか関係な
く呼び出せます。
 アプリ側の変数やプロパティもprivateとか関係な
く取得・代入出来ます。
 直接APIを呼ぶので、高速に動作し、確実に意図し
た操作を行う事が出来ます。
 DLLインジェクションを1行で書けます。
Q)でも、お高いんでしょう?
A)
Friendlyはオープンソースなライブラリです。
Github上にてソースコードを公開しています。
もちろん、無料でお使いいただけます。
ちなみに開発者は、Codeerの代表 石川達也 さんです。
僕じゃないです。w
Q)でも、お高いんでしょう?
Friendlyはまだまだ奥が深いです。
紹介しきれていない機能もたくさんあります。
是非一度使ってみてください!
CodeerではFriendlyのトレーニングも行っています・・・(有償)
2. TestAssistantProって
何ですの?
2. TestAssistantProって何ですの?
Friendlyを使ったテストコードの生成を強力に支援する
ツールです!
VisualStudio拡張で作ってます。
Marketplaceから入手できます。(現在β版で無料)
アプリを操作するためのアプリケーションドライバの自
動生成を行ったり、
アプリの操作を行うと、その操作を行うコードを自動生
成したりしてくれます。
2. TestAssistantProって何ですの?
自動生成コードで自動化、夢のようですね。
見た方が早いですよね
※TestAssistantPro デモ
2. TestAssistantProって何ですの?
Analyze Window
現在開いているウィンドウを解析して、アプリケーショ
ンドライバの実装に必要な情報を確認する事が出来ます。
2. TestAssistantProって何ですの?
Analyze Window
よく見てみると、選択しているコントロールの周りに
赤い枠が表示されていて、どのコントロールがどこに
あるのか、一目で分かるようになっています。
2. TestAssistantProって何ですの?
Analyze Window → Create Driver
選択したコントロールに対応するドライバを生成してく
れます。
Generateボタンを押すと、ソースコードが生成されます。
2. TestAssistantProって何ですの?
Analyze Window → Create Driver
生成したドライバコードはこんな感じです。
GUI要素のマップみたいなもんです。
2. TestAssistantProって何ですの?
Capture
ドライバを用意したGUIに対する操作コードを自動生成
してくれます。
Generateボタンを押すと、ソースコードが生成されます。
2. TestAssistantProって何ですの?
Capture
ドライバが正しく実装されていれば、この生成された
コードはほとんどの場合、正しく動作します。
しかし、特殊な条件下では手動でコードを修正したりす
る事もあります。
あくまで、テストコード作成支援としての位置づけなの
です。
Assertは手動で追加します。
2. TestAssistantProって何ですの?
Execute
右クリックした位置の関数を実行します。
Captureで生成した操作コードが、正しく動くかどうか
のチェックに使うのが主な目的です。
2. TestAssistantProって何ですの?
Debug
右クリックした位置の関数をデバッグ実行します。
Captureで生成した操作コードが、正しく動かない時と
かに、どこがちゃんと動いていないかチェックしたい時
とかに使います。
2. TestAssistantProって何ですの?
メインとなる機能
 Analyze Window
 Analyze Window → Create Driver
 Capture
+αでテストの実装を助ける機能
 Execute
 Debug
2. TestAssistantProって何ですの?
まとめ
 Friendlyを使った、高速・確実に動作するテストコー
ドが自動で生成できます。
 自動生成なので、テストを書く人の工数が大幅に削減
できます。
 Friendlyに慣れている方が使うと、最大限の費用対効
果を上げる事が出来ます。
 もちろん、効果の高いテストを作るためには、全て自
動生成という訳にはいきませんが、単純なGUI操作な
どは自動生成したコードで十分です。
Q)でも、お高いんでしょう?
A)
今はβ版なので、無料でお試し頂けます!
近々β期間が終わるので、お早めにお試しください!
正式なライセンス料金は、まだ協議中です。
決まり次第、 HPとかでアナウンスすると思います。
Q)でも、お高いんでしょう?
TestAssistantProは、
現在β版なので無料で使えます。
今のうちに、是非一度使ってみてください!
3. Friendlyと
TestAssistantProを使った
テスト自動化の話
FriendlyとTestAssistantProを使ったら
何が嬉しいのか?
テスト自動化を
簡単かつ効果的に行える!
そもそもテスト自動化の恩恵って
何だろう?
3. テスト自動化のお話
テスト自動化の恩恵?
 手動テストのコスト削減
 デグレの防止に貢献
 リリースの判断材料
 不具合修正(調査)コストの削減
恩恵を得るためには?
3. テスト自動化のお話
恩恵を得るためには?
 自動テストの不安定さの排除
 タイミング依存などで不安定さがあるとロスが発生
 テスト自体にバグがあると調査・解析コストが発生
 テストケースの積み立て
 自動化したケースが少ない内はメリットよりデメリット
の方が上かも
 自動化コスト自体を抑える
 自動化コスト自体が高いと、その分自動化で削減できる
工数が減っていきます。もったいない。
自動テストの不安定さを排除する
3. テスト自動化のお話
 自動テストの不安定さの排除
これはFriendlyを使うとほぼ排除可能になるはずです。
タイミング依存やキーマウスエミュレートの不安定さは、
内部APIを直接叩く事で発生しなくなります。
ただ、Friendlyが向いていないテストの場合は、タイミン
グを合わせるための機構や、キーマウスエミュレートが必
要になると思います。
↑例えば、お絵かきアプリのテストとか。
テストケースの積み立て
3. テスト自動化のお話
 テストケースの積み立て
テストケースを積み立てていくには、テストの作成コストを下
げて、テストを作りやすくする事が活きてくるのではないかと
思います。
ここはTestAssistantProが役に立つかと思います。
TestAssistantProを使えば、テスト作成コストは大幅に抑えら
れるので、
アプリケーションドライバが用意されていれば、検証チーム側
でアプリ操作を行い、どんどんテストケースを作成(テスト
コードを自動生成)することが出来ます。
自動化コスト自体を抑える
3. テスト自動化のお話
 自動化コスト自体を抑える
自動化コストとして考えられるのは、
・テスト作成コスト
・テスト保守コスト
・ランニングコスト
・自動化ツール料金
あたりが考えられます。
3. テスト自動化のお話
 自動化コスト自体を抑える
自動化コストとして考えられるのは、
・テスト作成コスト
・テスト保守コスト
・ランニングコスト
・自動化ツール料金
あたりが考えられます。
TestAssistantProを使えば大幅
に削減可能
Friendlyは無料です。
重いGUI操作は、Friendlyで内部APIを叩く事
でGUI操作を省略し実行時間を大幅に削減可能。
アプリケーションドライバを用意
アプリケーションドライバって?
3. テスト自動化のお話
 アプリケーションドライバ
アプリに対する「操作」を記述しているレイヤーです。
テストシナリオ上にアプリの内部設計が出てくるのを抑えるために
用意します。
アプリの内部設計が変更されてもテストが壊れないようにするため
の設計です。
テスト
シナリオ
.dll
アプリ
.exe
アプリケーション
ドライバ
.dll
・イメージはこんな感じ テストプロセス
3. テスト自動化のお話
 アプリケーションドライバ
アプリを簡単に操作する手段を提供する。
アプリ操作を目的とする。
内部仕様に依存する。
 テストシナリオ
外部仕様に従って、テストシナリオを簡潔に記述する。
品質保証を目的とする。
内部仕様に依存しない。
FriendlyとTestAssistantProを使うと
FriendlyとTestAssistantProを使うと
 Friendlyを使えば、アプリに対する操作を外部から、
簡単・高速・確実に行えるようになります。
 TestAssistantProを使えば、Friendlyを使ったテストコードを
自動で生成してくれます。
 Friendlyを使えば、テストのランニングコストを大幅に削減でき
ます。
 TestAssistantProを使えば、テスト作成コストを大幅に削減出来
ます。
 また、自然とアプリケーションドライバを作成する事になる
ので、テストの保守性も高まります。
FriendlyとTestAssistantProを使うと
 Friendlyは、無料です!(オープンソース)
 TestAssistantProも、一応まだ無料です!(β版)
あんまり高くならないんじゃないかなと思います(多分)
Friendlyの導入実績はたくさんあります。
TestAssistantProはまだβですが、すでに
使いたいと言ってくださるお客様が多いです。
ご清聴ありがとうございました。

More Related Content

What's hot

Friendlyで始めるwindowsアプリシステムテスト自動化+内部使用技術解説
Friendlyで始めるwindowsアプリシステムテスト自動化+内部使用技術解説Friendlyで始めるwindowsアプリシステムテスト自動化+内部使用技術解説
Friendlyで始めるwindowsアプリシステムテスト自動化+内部使用技術解説
Tatsuya Ishikawa
 
Friendlyを使ったwindowsアプリテスト自動化
Friendlyを使ったwindowsアプリテスト自動化Friendlyを使ったwindowsアプリテスト自動化
Friendlyを使ったwindowsアプリテスト自動化Tatsuya Ishikawa
 
自動テスト知識体系TABOKのご紹介
自動テスト知識体系TABOKのご紹介自動テスト知識体系TABOKのご紹介
自動テスト知識体系TABOKのご紹介
Shinsuke Matsuki
 
TDD のこころ
TDD のこころTDD のこころ
TDD のこころ
Takuto Wada
 
GUI Test is (not) necessary
GUI Test is (not) necessaryGUI Test is (not) necessary
GUI Test is (not) necessary
Hiroshi Maekawa
 
詳解!自動結合テスト #jasst
詳解!自動結合テスト #jasst詳解!自動結合テスト #jasst
詳解!自動結合テスト #jasst
kyon mm
 
Ninja Testing at Toteka03
Ninja Testing at Toteka03Ninja Testing at Toteka03
Ninja Testing at Toteka03
Nakajima Shigeru
 
Ninja Testing at XP Matsuri
Ninja Testing at XP MatsuriNinja Testing at XP Matsuri
Ninja Testing at XP Matsuri
Nakajima Shigeru
 
テスト自動化読書会 第3章 20150523
テスト自動化読書会 第3章 20150523テスト自動化読書会 第3章 20150523
テスト自動化読書会 第3章 20150523
dnoguchi
 
ユニットテストと始める始める安全なPythonライブラリ開発
ユニットテストと始める始める安全なPythonライブラリ開発ユニットテストと始める始める安全なPythonライブラリ開発
ユニットテストと始める始める安全なPythonライブラリ開発
Yuya Oka
 
Test Plugins
Test PluginsTest Plugins
Test Pluginsykhr
 
テストを書こう!!
テストを書こう!!テストを書こう!!
テストを書こう!!
拓 小林
 
Stac2014 石川
Stac2014 石川Stac2014 石川
Stac2014 石川
Tatsuya Ishikawa
 
実践で学ぶ、効率的な自動テストスクリプトのメンテナンス
実践で学ぶ、効率的な自動テストスクリプトのメンテナンス実践で学ぶ、効率的な自動テストスクリプトのメンテナンス
実践で学ぶ、効率的な自動テストスクリプトのメンテナンス
Nozomi Ito
 
自動テストのすすめ
自動テストのすすめ自動テストのすすめ
自動テストのすすめKatsunori Kanda
 
システムテスト自動化標準ガイド 5章発表資料
システムテスト自動化標準ガイド 5章発表資料システムテスト自動化標準ガイド 5章発表資料
システムテスト自動化標準ガイド 5章発表資料Masatoshi Itoh
 
ビルドプロセスとCI #STAC2014
ビルドプロセスとCI #STAC2014ビルドプロセスとCI #STAC2014
ビルドプロセスとCI #STAC2014
Koji Hasegawa
 
テスト駆動ゲーム開発をJava scriptで実践
テスト駆動ゲーム開発をJava scriptで実践テスト駆動ゲーム開発をJava scriptで実践
テスト駆動ゲーム開発をJava scriptで実践Yuusuke Takeuchi
 
Myweekdays and testing
Myweekdays and testingMyweekdays and testing
Myweekdays and testingryuji koyama
 
ぼくのかんがえた iOSテスト戦略
ぼくのかんがえた iOSテスト戦略ぼくのかんがえた iOSテスト戦略
ぼくのかんがえた iOSテスト戦略
Naoki Umehara
 

What's hot (20)

Friendlyで始めるwindowsアプリシステムテスト自動化+内部使用技術解説
Friendlyで始めるwindowsアプリシステムテスト自動化+内部使用技術解説Friendlyで始めるwindowsアプリシステムテスト自動化+内部使用技術解説
Friendlyで始めるwindowsアプリシステムテスト自動化+内部使用技術解説
 
Friendlyを使ったwindowsアプリテスト自動化
Friendlyを使ったwindowsアプリテスト自動化Friendlyを使ったwindowsアプリテスト自動化
Friendlyを使ったwindowsアプリテスト自動化
 
自動テスト知識体系TABOKのご紹介
自動テスト知識体系TABOKのご紹介自動テスト知識体系TABOKのご紹介
自動テスト知識体系TABOKのご紹介
 
TDD のこころ
TDD のこころTDD のこころ
TDD のこころ
 
GUI Test is (not) necessary
GUI Test is (not) necessaryGUI Test is (not) necessary
GUI Test is (not) necessary
 
詳解!自動結合テスト #jasst
詳解!自動結合テスト #jasst詳解!自動結合テスト #jasst
詳解!自動結合テスト #jasst
 
Ninja Testing at Toteka03
Ninja Testing at Toteka03Ninja Testing at Toteka03
Ninja Testing at Toteka03
 
Ninja Testing at XP Matsuri
Ninja Testing at XP MatsuriNinja Testing at XP Matsuri
Ninja Testing at XP Matsuri
 
テスト自動化読書会 第3章 20150523
テスト自動化読書会 第3章 20150523テスト自動化読書会 第3章 20150523
テスト自動化読書会 第3章 20150523
 
ユニットテストと始める始める安全なPythonライブラリ開発
ユニットテストと始める始める安全なPythonライブラリ開発ユニットテストと始める始める安全なPythonライブラリ開発
ユニットテストと始める始める安全なPythonライブラリ開発
 
Test Plugins
Test PluginsTest Plugins
Test Plugins
 
テストを書こう!!
テストを書こう!!テストを書こう!!
テストを書こう!!
 
Stac2014 石川
Stac2014 石川Stac2014 石川
Stac2014 石川
 
実践で学ぶ、効率的な自動テストスクリプトのメンテナンス
実践で学ぶ、効率的な自動テストスクリプトのメンテナンス実践で学ぶ、効率的な自動テストスクリプトのメンテナンス
実践で学ぶ、効率的な自動テストスクリプトのメンテナンス
 
自動テストのすすめ
自動テストのすすめ自動テストのすすめ
自動テストのすすめ
 
システムテスト自動化標準ガイド 5章発表資料
システムテスト自動化標準ガイド 5章発表資料システムテスト自動化標準ガイド 5章発表資料
システムテスト自動化標準ガイド 5章発表資料
 
ビルドプロセスとCI #STAC2014
ビルドプロセスとCI #STAC2014ビルドプロセスとCI #STAC2014
ビルドプロセスとCI #STAC2014
 
テスト駆動ゲーム開発をJava scriptで実践
テスト駆動ゲーム開発をJava scriptで実践テスト駆動ゲーム開発をJava scriptで実践
テスト駆動ゲーム開発をJava scriptで実践
 
Myweekdays and testing
Myweekdays and testingMyweekdays and testing
Myweekdays and testing
 
ぼくのかんがえた iOSテスト戦略
ぼくのかんがえた iOSテスト戦略ぼくのかんがえた iOSテスト戦略
ぼくのかんがえた iOSテスト戦略
 

Similar to FriendlyとTestAssistantProでテスト自動化やってみた

スマートフォンアプリの テスト自動化をはじめよう
スマートフォンアプリの テスト自動化をはじめようスマートフォンアプリの テスト自動化をはじめよう
スマートフォンアプリの テスト自動化をはじめよう
Koji Hasegawa
 
20140903 じどうかの窓口特別編 君にもなれる!?テスト自動化エンジニア
20140903 じどうかの窓口特別編 君にもなれる!?テスト自動化エンジニア20140903 じどうかの窓口特別編 君にもなれる!?テスト自動化エンジニア
20140903 じどうかの窓口特別編 君にもなれる!?テスト自動化エンジニア
SHIFT Inc.
 
20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」
20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」
20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」
Hiroko Tamagawa
 
GCSアジャイル開発を使ったゲームの作り方
 GCSアジャイル開発を使ったゲームの作り方 GCSアジャイル開発を使ったゲームの作り方
GCSアジャイル開発を使ったゲームの作り方
Hiroyuki Tanaka
 
ワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeployワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeploy
Ryutaro YOSHIBA
 
テスト駆動で行うネットワーク自動化のすすめ
テスト駆動で行うネットワーク自動化のすすめテスト駆動で行うネットワーク自動化のすすめ
テスト駆動で行うネットワーク自動化のすすめ
kinunori
 
テスト初心者Androiderのためのソフトウェアテスト入門
テスト初心者Androiderのためのソフトウェアテスト入門テスト初心者Androiderのためのソフトウェアテスト入門
テスト初心者Androiderのためのソフトウェアテスト入門Satoshi Watanabe
 
機械学習を活用したテスト自動化システムの設計
機械学習を活用したテスト自動化システムの設計機械学習を活用したテスト自動化システムの設計
機械学習を活用したテスト自動化システムの設計
Nozomi Ito
 
第2回nseg slideshare
第2回nseg slideshare第2回nseg slideshare
第2回nseg slideshareko ty
 
Web制作者視点で理解するソフトェアテスト
Web制作者視点で理解するソフトェアテストWeb制作者視点で理解するソフトェアテスト
Web制作者視点で理解するソフトェアテスト
祐磨 堀
 
iOSアプリの自動テストをはじめよう
iOSアプリの自動テストをはじめようiOSアプリの自動テストをはじめよう
iOSアプリの自動テストをはじめよう
Toshiyuki Hirata
 
いままでのJaSSTnanoLT動画を振り返る&おススメしたいの! / Looking back and recommend on the JaSSTna...
いままでのJaSSTnanoLT動画を振り返る&おススメしたいの! / Looking back and recommend on the JaSSTna...いままでのJaSSTnanoLT動画を振り返る&おススメしたいの! / Looking back and recommend on the JaSSTna...
いままでのJaSSTnanoLT動画を振り返る&おススメしたいの! / Looking back and recommend on the JaSSTna...
ICO
 
.Netconf
.Netconf.Netconf
20121019 jenkins勉強会lt資料
20121019 jenkins勉強会lt資料20121019 jenkins勉強会lt資料
20121019 jenkins勉強会lt資料
Hiroko Tamagawa
 
アジャイルソフトウェア開発の道具箱
アジャイルソフトウェア開発の道具箱アジャイルソフトウェア開発の道具箱
アジャイルソフトウェア開発の道具箱
Koichi ITO
 
自動テストとJenkinsの活用 公開版
自動テストとJenkinsの活用 公開版自動テストとJenkinsの活用 公開版
自動テストとJenkinsの活用 公開版
baroqueworksdev
 
第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ
hakoika-itwg
 
はこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テストはこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テスト
Seiji KOMATSU
 
とりあえず30分でひととおり分かった気にはなれるアジャイル入門
とりあえず30分でひととおり分かった気にはなれるアジャイル入門とりあえず30分でひととおり分かった気にはなれるアジャイル入門
とりあえず30分でひととおり分かった気にはなれるアジャイル入門
陽一 滝川
 
Jenkins+Play!で気軽にCI
Jenkins+Play!で気軽にCIJenkins+Play!で気軽にCI
Jenkins+Play!で気軽にCI
Takafumi Ikeda
 

Similar to FriendlyとTestAssistantProでテスト自動化やってみた (20)

スマートフォンアプリの テスト自動化をはじめよう
スマートフォンアプリの テスト自動化をはじめようスマートフォンアプリの テスト自動化をはじめよう
スマートフォンアプリの テスト自動化をはじめよう
 
20140903 じどうかの窓口特別編 君にもなれる!?テスト自動化エンジニア
20140903 じどうかの窓口特別編 君にもなれる!?テスト自動化エンジニア20140903 じどうかの窓口特別編 君にもなれる!?テスト自動化エンジニア
20140903 じどうかの窓口特別編 君にもなれる!?テスト自動化エンジニア
 
20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」
20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」
20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」
 
GCSアジャイル開発を使ったゲームの作り方
 GCSアジャイル開発を使ったゲームの作り方 GCSアジャイル開発を使ったゲームの作り方
GCSアジャイル開発を使ったゲームの作り方
 
ワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeployワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeploy
 
テスト駆動で行うネットワーク自動化のすすめ
テスト駆動で行うネットワーク自動化のすすめテスト駆動で行うネットワーク自動化のすすめ
テスト駆動で行うネットワーク自動化のすすめ
 
テスト初心者Androiderのためのソフトウェアテスト入門
テスト初心者Androiderのためのソフトウェアテスト入門テスト初心者Androiderのためのソフトウェアテスト入門
テスト初心者Androiderのためのソフトウェアテスト入門
 
機械学習を活用したテスト自動化システムの設計
機械学習を活用したテスト自動化システムの設計機械学習を活用したテスト自動化システムの設計
機械学習を活用したテスト自動化システムの設計
 
第2回nseg slideshare
第2回nseg slideshare第2回nseg slideshare
第2回nseg slideshare
 
Web制作者視点で理解するソフトェアテスト
Web制作者視点で理解するソフトェアテストWeb制作者視点で理解するソフトェアテスト
Web制作者視点で理解するソフトェアテスト
 
iOSアプリの自動テストをはじめよう
iOSアプリの自動テストをはじめようiOSアプリの自動テストをはじめよう
iOSアプリの自動テストをはじめよう
 
いままでのJaSSTnanoLT動画を振り返る&おススメしたいの! / Looking back and recommend on the JaSSTna...
いままでのJaSSTnanoLT動画を振り返る&おススメしたいの! / Looking back and recommend on the JaSSTna...いままでのJaSSTnanoLT動画を振り返る&おススメしたいの! / Looking back and recommend on the JaSSTna...
いままでのJaSSTnanoLT動画を振り返る&おススメしたいの! / Looking back and recommend on the JaSSTna...
 
.Netconf
.Netconf.Netconf
.Netconf
 
20121019 jenkins勉強会lt資料
20121019 jenkins勉強会lt資料20121019 jenkins勉強会lt資料
20121019 jenkins勉強会lt資料
 
アジャイルソフトウェア開発の道具箱
アジャイルソフトウェア開発の道具箱アジャイルソフトウェア開発の道具箱
アジャイルソフトウェア開発の道具箱
 
自動テストとJenkinsの活用 公開版
自動テストとJenkinsの活用 公開版自動テストとJenkinsの活用 公開版
自動テストとJenkinsの活用 公開版
 
第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ
 
はこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テストはこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テスト
 
とりあえず30分でひととおり分かった気にはなれるアジャイル入門
とりあえず30分でひととおり分かった気にはなれるアジャイル入門とりあえず30分でひととおり分かった気にはなれるアジャイル入門
とりあえず30分でひととおり分かった気にはなれるアジャイル入門
 
Jenkins+Play!で気軽にCI
Jenkins+Play!で気軽にCIJenkins+Play!で気軽にCI
Jenkins+Play!で気軽にCI
 

FriendlyとTestAssistantProでテスト自動化やってみた

Editor's Notes

  1. 今日は、「FriendlyとTestAssistantProでテスト自動化やってみた」というお話をしたいと思います。よろしくお願いします。
  2. 最初にちょっとだけ自己紹介します。 私は中井優作と申します。 株式会社Codeerに所属しています。 もともとゲームプログラマでした。 C++/C#がお気に入りです。 最近は、システム開発したり、Friendlyでテスト自動化を行ったり、TestAssistantProの開発を行ったり、などなどしております。 自己紹介はこの辺で終わっておきます。
  3. 今日話す内容について、あらかじめ説明したいと思います。 まず初めに、Friendlyって何ですの?と。Friendlyとは一体何なのか、説明したいと思います。 次に、TestAssistantProって何ですの?と。TestAssistantProとは一体何なのか、説明したいと思います。 そして最後に、これらを使ったテスト自動化のお話をちょっとだけしたいと思います。 今日話す事は大体こんな感じです。
  4. じゃあ早速Friendlyって何ですの?という所から始めたいと思います。
  5. Friendlyとは、一言でいうと、テスト作成用のライブラリです。 Friendlyを使うと、Windowsアプリに対して、外部、例えばテストプロセスとかから、様々なGUI操作を簡単・高速・確実に行えるようになります。
  6. こんなイメージです。 まぁこれだとあまりにもイメージなんで、もうちょっと具体的にしたものがこちらです。
  7. テストプロセスから、アプリに対して、 アプリ内部の関数を呼び出したり、 アプリ内部の変数に対して値を代入したり、 テストプロセス側のコードで、アプリ側のメモリ上にクラスのインスタンスを生成したりとか、 などなどを簡単・高速・確実に、行えるようになるライブラリです。
  8. でまぁ、百聞は一見に如かずというわけで、Friendlyを使うと、どんな事が出来るかが分かるデモをちょっとしたいと思います。
  9. いまやったデモで書いたコードを元にFriendlyで出来る事を紹介したいと思います。 まず、Friendllyの大きな特徴として、 「プロセスの壁を越えて、内部のプロパティを取得したり、関数を呼び出せたりしちゃう」というものがあります。 しかも、
  10. たったこれだけのコードで実現できます。 めちゃくちゃ簡単です。
  11. さらに、プロセスの壁を越えて、操作対象アプリの内部にインスタンスを生成出来ちゃいます。 これも、めちゃくちゃ簡単です。
  12. 出来ます!
  13. 100回でも出来ます!
  14. たったこれだけのコードで実現できます。 めちゃくちゃ簡単です。
  15. 続いて、DLLインジェクションです。 たった1行で出来ます。驚異的です。
  16. たったこれだけです。簡単すぎます。
  17. 当然、インジェクションした関数も呼び出せます。
  18. もちろん、アプリ側のプロセスで動きます。
  19. DLLインジェクションってどんな時使うのかちょっと分かりにくいんですけど、こんな時使います。 イベントハンドラの追加や削除させたい時はDLLインジェクションしてアプリ側で行わないといけないです。 アトミックな処理とか、高速に動作させたい処理とかでも使います。
  20. privateなメンバでも自由にアクセスする事が出来ます。
  21. もはや、何でもできます。 何でもできるって言うと、少し言い過ぎですが、まぁほとんどの事は出来ます。
  22. Friendlyのやばい所をまとめました。 アプリ側で実装している関数をprivateとか関係なく呼び出せます。 アプリ側の変数やプロパティもprivateとか関係なく取得・代入出来ます。 直接APIを呼ぶので、高速に動作し、確実に意図した操作を行う事が出来ます。 DLLインジェクションを1行で書けます。 とまぁこんな感じです。
  23. で、そんなやばいFriendlyなんですけど、 でも、お高いんでしょう?って思った方、いるかもしれませんが、
  24. Friendlyはオーブンソースなライブラリです。 Github上にてソースコードを公開しています。 もちろん、無料でお使いいただけます。 ちなみに開発者は、Codeerの代表 石川達也 さんです。 僕じゃないです。w
  25. Friendlyはまだまだ奥が深いです。 紹介しきれていない機能もたくさんあります。 是非一度使ってみてください! ちなみになんですけど、CodeerではFriendlyのトレーニングも有償で行っています。
  26. 続いて、TestAssistantProって何ですの?一体何者なのか?について話したいと思います。
  27. Friendlyを使ったテストコードの生成を強力に支援するツールです! VisualStudio拡張で作ってます。 Marketplaceから入手できます。(現在β版で無料) アプリを操作するためのアプリケーションドライバの自動生成を行ったり、 アプリの操作を行うと、その操作を行うコードを自動生成したりしてくれます。
  28. 自動生成コードで自動化、夢のようですね。 まぁこれは半分言い過ぎ、半分ほんとです。
  29. 見た方が早いですよねって事で、今度はTestAssistantProのデモを行ってみたいと思います。
  30. まずAnalyze Windowという機能の説明をします。 こいつは、現在開いているウィンドウを解析して、アプリケーションドライバの実装に必要な情報を確認する事が出来ます。 アプリケーションドライバってのは名前の通り、アプリの操作を行うためのドライバです。GUIのマップみたいなものです。
  31. よく見てみると、選択しているコントロールの周りに赤い枠が表示されていて、どのコントロールがどこにあるのか、一目でわかるようになっています。
  32. 続いてCreate Driverの説明です。 Analyze Windowでコントロールを選択して、右クリックから行えます。 Generateボタンを押すと、選択したコントロールに対応するドライバのコードが生成されます。
  33. 生成したドライバコードはこんな感じです。 GUI要素のマップみたいなものです。 よく見ると、Friendlyらしさが見受けられます。
  34. 次にCapture機能の説明です。 ドライバを用意したGUIに対する操作コードを自動生成してくれます。 Generateボタンを押すと、ソースコードが生成されます。
  35. ドライバが正しく実装されていれば、この生成されたコードはほとんどの場合、正しく動作します。 しかし、特殊な条件下では手動でコードを修正したりする事もあります。 あくまで、テストコード作成支援としての位置づけなのです。 Assertは手動で追加します。
  36. 続いてExecuteの説明です。 右クリックした位置の関数を実行します。 Captureで生成した操作コードが、正しく動くかどうかのチェックに使うのが主な目的です。
  37. 続いてDebugの説明です。 右クリックした位置の関数をデバッグ実行します。 Captureで生成した操作コードが、正しく動かない時とかに、どこがちゃんと動いていないかチェックしたい時とかに使います。
  38. メインとなる機能は、 Analyze Window Analyze Window → Create Driver Capture です。 これだけでテストコードは生成できます。 プラスアルファで、テストの実装を助ける機能として、 ExecuteとDebugがあります。
  39. まとめです。 Friendlyを使った、高速・確実に動作するテストコードがある程度自動で生成できます。 自動生成なので、テストを書く人の工数が大幅に削減できます。 Friendlyに慣れている方が使うと、最大限の費用対効果を上げる事が出来ます。 もちろん、効果の高いテストを作るためには、全て自動生成という訳にはいきませんが、単純なGUI操作などは自動生成したコードで十分です。
  40. で、そんなイケてるTestAssistantProなんですけど、 でも、お高いんでしょう?って思った方、いるかもしれません
  41. 今はβライセンス中なので、無料でお試し頂けます! 近々β期間が終わるので、お早めにお試しください! 正式なライセンス料金は、まだ協議中です。 決まり次第、 HPとかでアナウンスすると思います。 石川さん辺りに聞いてみると、予定している料金が伺えるかもしれません。
  42. TestAssistantProは、 現在β版なので無料で使えます。 今のうちに、是非一度使ってみてください!
  43. では最後に、FriendlyとTestAssistantProを使ったテスト自動化の話をしたいと思います。 FriendlyとTestAssistantProを使ったら何が嬉しいのかというお話です。
  44. FriendlyとTestAssistantProを使ったら何が嬉しいのか?
  45. テスト自動化を簡単かつ効果的に行えるから、FriendlyとTestAssistantProを使うわけですが、
  46. そもそもテスト自動化の恩恵って何だろう?という話をします
  47. 自分が思いつく限りでは、この辺りが主な恩恵かなと思います。 まず、手動テストのコスト削減。これが一番大きな恩恵かと思います。ただ、ここはシステムの規模と比例すると思います。 次にデグレの防止に貢献。人間がチェックすると漏れがあったりミスがあったりします。 リリースの判断材料。テストがオールグリーンになった時に、リリースできると判断する材料の1つになります。 不具合修正(調査)コストの削減。これはテストを行った際の情報を元に調査工数を削減できるから、と考えました。
  48. ではそれらの恩恵を受けるためには、具体的にどうすればいいのか?という所で、
  49. 自動テストの不安定さの排除。 これがすごく大事で、不安定なテストは失敗した時に再度走らせたり、調査したりするので追加コストが発生します。 また、自動テストに対して不信感を持ってしまうと、手動テストしないと安心できなくなって、手動テストをするようになるかもしれません。 そうなるともはや意味がなくなってくるので、不安なテストは絶対に見逃してはいけないと考えています。 次にテストケースの積み立て。 これも大事で、自動化したケースが少ない内はメリットよりデメリットの方が大きいかもしれません。 自動テスト作成のコストとか、自動テストはコードですので、保守コストがかかります。 そしてこれも大事なんですが、自動化コスト自体を抑える必要があります。 自動化コスト自体が高いと、その分自動化で削減できる工数が減りますから。もったいないです。
  50. 一個ずつ話したいと思います。 まずは、自動テストの不安定さを排除する事。
  51. 結論から言うと、自動テストの不安定さの排除するには、Friendlyを使うといいです。 タイミング依存やキーマウスエミュレートの不安定さは、内部APIを直接叩く事で発生しなくなります。 ただ、Friendlyが向いていないテストの場合は、タイミングを合わせるための機構や、キーマウスエミュレートが必要になると思います。 例えば、お絵かきアプリのテストとかですね。 Friendlyは正確に動作するキーマウスエミュレート機能も一応あるので、できなくはないです。向いていないだけで。
  52. 次にテストケースの積み立ての話です
  53. テストケースを積み立てていくには、テストの作成コストを下げて、テストを作りやすくする事が活きてくるのではないかと思います。 ここはTestAssistantProが役に立つかと思います。 TestAssistantProを使えば、テスト作成コストは大幅に抑えられるので、 アプリケーションドライバが用意されていれば、検証チーム側でアプリ操作を行い、どんどんテストケースを作成(テストコードを自動生成)することが出来ます。
  54. そして、自動化コスト自体を抑える、についてです
  55. 自動化コストとして考えられるのは、 ・テスト作成コスト ・テスト保守コスト ・ランニングコスト ・ツール料金 あたりが考えられます。
  56. テスト作成コストは、TestAssistantProを使えば大幅に削減可能です。 次に保守コストですが、これはアプリケーションドライバという物を使うようにすれば効果が出せます。これは後で説明します。 ランニングコストは、重いGUI操作に対して、Friendlyで内部APIを叩く事でGUI操作を省略し実行時間を大幅に削減可能です。 自動化ツールは有料の物が多いですが、Friendlyは無料です。 TestAssistantProは有料ですが、まぁまぁ安くなると思います。
  57. 何度も出てきたアプリケーションドライバという物について、ここで初めて説明が入ります。
  58. アプリケーションドライバとは、アプリに対する操作を記述しているレイヤーです。 テストシナリオ上にアプリの内部設計が出てこないようにするための機構です。 Friendlyは内部APIを直接叩けますが、内部APIは内部設計なので、開発者しか知らない情報ですし、開発中に変更されたりします。 もしテストシナリオ上に内部設計が出てきてしまっていると、開発者が変数名を変えただけでテストが壊れてしまいます。これでは非常に保守性が悪いです。 そこで、アプリケーションドライバの出番というわけです。
  59. アプリケーションドライバに内部仕様への依存を集めて、テストシナリオの保守性を高めます。 また、アプリケーションドライバは開発担当者が、内部仕様変更時に同時に変更するようなルールにすれば、テスト全体の保守性はぐっと高まります。 さらにいうと、開発チームの人がアプリケーションドライバを用意していれば、検証チームは外部仕様に従ってどんどんテストシナリオを書いていく事ができます。 分担して作業して、チームとしてテスト自動化を成功に持っていくという認識が大事なんだろうなと思います。
  60. じゃあ実際に、FriendlyとTestAssistantProを使うとどんないいことがあるのか、まとめます。
  61. Friendlyの導入実績はたくさんあります。 TestAssistantProはまだβですが、すでに 使いたいと言ってくださるお客様が多いです。 今後、知名度と実績を積み重ねていきたいなぁと思っています。