TEF道勉強会'15#05『UIテスト自動化の段階的導入』 | TEF-DO

TEF-DO

TEF北海道テスト勉強会「TEF-DO」

こんばんは
TEF道メンバーが毎回一人ずつ自分の気になるネタを発表する、
TEF道勉強会の2015年5回目を開催しました!!

お題は上田さんによる「UIテスト自動化の段階的導入
主にSeleniumのお話しです。さぁ、スタート!!

■はじめに
参加者は上田さん含めて8名で、うち、UIテスト自動化をちょっとでも
試したことのある人は2名。さらにそのうち、うまくいかなかった人は2名。。。
そう、難しいんですよね、UIテストの自動化。

上田さんも過去トライしては失敗してきたそうなんですが、Seleniumを軸にして
段階的にUIテスト自動化の導入を進めることで、手応えを感じているようです。
勉強会では、その経緯や段階についてくわしく説明してくれました!

■背景の確認など
まずは、テスト自動化とは、そしてその問題などの解説から。
そもそも、人間が行うテスト、それもTestingではなくCheckingの
一部を自動化しようというのが目的のはずだけれども、現場を知らない
上司なんかは過度に期待してしまうんですよね。
また、実際にやってみると、スクリプトの保守が大変!といった問題が、
次から次へと出てきて、コストメリットが出ない、と諦めてしまう。。。
そこで、上田さんはテスト自動化を導入していくステップを考えたそうです。
一体どういうことなんでしょうか!?

■Selenium!
で、その説明の前にSeleniumの説明から。詳しくは省略しますが、
当初から現在の二系統に至る歴史や、インストールの方法、使い方などを
デモを交えて詳し~く説明してくれましたので、IDEとWebDriverに対する
敷居はかなり下がりました。思ったより簡単ですね!

■本題へ
そして、段階的に導入のすすめのお話へ。
以下のような段階(上田さんはデザインパターンとも呼んでた)を、
導入目的や状況に応じて選ぶとよいそうです。それぞれの段階の
ポイントや注意点も含めて解説してくれました。

第一段階・・・キャプチャプレイバックツールとしてSelenium IDEを使う。
第二段階・・・簡易テスト自動化ツールとしてSelenium IDEを使う。

ここまでは、今までSeleniumを扱ったことがなくても1~2時間あれば到達できそうです。
Selenium IDEはFirefoxのプラグインで、ブラウザー操作のキャプチャプレイバックと、
簡単なスクリプトの編集機能を持ちます。
単発で、簡単なプロジェクトならこれでも十分使えると思えました。
#実際に家に帰って試したところ、Firefoxのプラグインをダウンロードして、
#アドインに登録して、適当にキャプチャ、プレイバックを試すのに10分でできました(^^

第三段階・・・スクリプトの管理を行う。

ここからはWeb Driverが登場。IDEはFirefoxのプラグインのため対象ブラウザーが
Firefoxに限定されてしまうので、プロジェクトがマルチブラウザー対応の場合は
少なくともこの段階の導入が必要になる。
テストコードをガリガリ書く必要があるのでちょっとつらそうに見えたが、
IDEでキャプチャ・編集したケースをスクリプトに出力できるので、それをちょちょいと
調整すればそれなりに動くものが出来上がる。すばらしい。
ただテスト実行してからブラウザーが起動するまでがかなり遅い・・・これは仕方ないですね。
#勉強会でC#/NUnitは?という話が出ましたが、NUnit用にちゃんとエクスポートできました。

第四段階・・・保守運用性を高める。

残念ながらIDEが吐き出すコードは対象や期待値が直接コードに埋め込まれていたりして、
このままでは変更に耐えられません。
上田さんはPageObjectパターンを適用してこの問題に対処しているそうで、
サンプルのコードを紹介してくれました。なるほど、これなら保守する気になります。

第五段階・・・データ・キーワード駆動テスト

テストデータや操作を外部ファイルから読み取るようにして、さらに保守性を高める。
ここまで来れれば、コストメリットが明らかになりそうですね。
これからU/Iテスト自動化を導入しようとする場合の最初の目標にすると良いかな、と感じました。

そしてここから先は上田さんもまだ調査・検証中のようですが、紹介してくれました。
すでに実現に向けて動いているそうです。

第六段階・・・マルチブラウザー・モバイル対応
第七段階・・・Selenium Gridなどで実機テストの分散処理
第八段階・・・JenkinsなどでCI連携

・・・

■最後に&次回は
U/Iテスト自動化・・・自分も過去導入してうまくいかなかったことがあり、
やっても無駄だという先入観を持ってしまっていました。

でもこうやって、導入目標を明確に分けることで、今できること、
今はまだできなくて良いことがはっきりするので、段階的に進められそうです。

今回感じたのは、ほんとうに、今後はテスト技術者も言語やCIツールの知識が必要になる、
ということ。#うえださんがJava書いてたのに驚いた(^^;

さらには、良いテストコード書くためには、例えばデザインパターンの知識も必要ですね。
TEF道はプログラマーが多いので、そのうちデザインパターンとかクラス図書く練習とか、勉強しましょうか!!

次回はくっきーさんによる「ペアテスティング」を予定。
では~ by小楠(貴)