15
1 激激激 UI 激激激激激激 激激激激激激激激激 激激激激 激激激激激激激激激激激激激激激激激 2013

20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」

Embed Size (px)

DESCRIPTION

システムテスト自動化カンファレンス2013(http://kokucheese.com/event/index/118294/)にて発表した内容です。UI変更に強い自動ブラウザテストの作り方についての資料です。

Citation preview

Page 1: 20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」

1

激しい UI 変更との戦い

テスト自動化研究会玉川紘子

システムテスト自動化カンファレンス 2013

Page 2: 20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」

2

自己紹介

名前:玉川 紘子(たまがわ ひろこ)所属:株式会社 SHIFT  ソフトウェアテスト事業部コミュニティ: STAR (テスト自動化研究会)       日本 Jenkins ユーザ会

Page 3: 20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」

3

CI ・自動テストなんでも屋さんとして活動中

開発言語: Java/PHP/Ruby など業務でよく使うツール: Jenkins/Selenium

メイン業務は CI ・自動テストに関するなんでもお手伝い

運用方針の提案

実際に稼働する CI 環境の構築

テストの書き方指南

Jenkins ってどうやって使えばいいんだっけ?

Selenium でテストを書いてみたい

んだけど…

Page 4: 20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」

4

本日のテーマGUI ベースの自動テストを保守すること

• 前提– GUI を通してエンドユーザ操作を代替する自動テスト– ツールは Selenium を使用

• 課題– 自動テストの保守性を高めるにはどうしたら良いか?

• アプリケーション変更時のメンテナンスコストが低いこと• メンテナンス作業自体がやりやすいこと• 非プログラマでも対応できること

• 本日のスコープ「外」– 自動テスト初期作成の効率化

Page 5: 20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」

5

なぜ保守が大変になってしまうのか?

• その1:度重なる仕様変更( UI 、文言)

– 類似箇所の一斉変更が大変– 不具合とテストケース不備の切り分けが大変

これまで動いていたケースの大部分が動かなくなってしまうことがある

Page 6: 20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」

6

なぜ保守が大変になってしまうのか?

• その2:可読性の問題– 失敗時の対応– どこで何をやっているかが分かりにくい

ありがちなケース• テストケースを書いた人以外は解析してくれない• 「自動テストだから失敗したのでは?」という理不尽な疑い• テストの手順と確認項目がパッと見て分からない

Page 7: 20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」

7

作戦① テストしづらい製品コードは指摘する

• 開発者とのコミュニケーションを恐れない– 結果的に、コードも綺麗になる

• 例①:要素に ID や class がない

• 例②:純粋なテスト対象を切り分けられない

<a href=“...”> 社員登録 </a><a href=“...”> 社員一覧 </a>

<a id=“user_register” href=“...”> 社員登録 </a><a id=“user_list” href=“...”> 社員一覧 </a>

◀ 文言で指定するしかなく変更に弱いBefore

After

<li> メールアドレス: [email protected]</li>

<li> メールアドレス:<span id=“mail”>[email protected]</span>

</li>

Before

After

▲ この部分だけテストしたいのに…

Page 8: 20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」

8

作戦② テストケースの「素」をメンテする 

• スクリプト自体ではなく抽象化したレベルでメンテナンス– スクリプトはそこから自動生成する– HTML 要素のパスなどは一元管理– 人の目にも読みやすいシナリオ

人が見て分かるテストケース 実行可能な

テストケース変換ルール

自動生成

▲ こちらをメンテナンス

Page 9: 20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」

9

STEP1 テスト対象のアプリケーションと会話するための基本動作を定義する 

• Selenium の1コマンドである「クリックする」「テキストを入力する」よりもほんの少しだけ抽象化する– 「メニューを選択する」– 「編集中のデータの削除を行う」– 「一覧からデータの検索を行う」

ユーザにとって意味のある単位でまとめると、多少UI が変わってもこの単位の中で変更すれば済むことがほとんど

Page 10: 20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」

10

STEP2 基本動作と対象を組み合わせて各機能の操作用言語を作る

• 例– 「社員一覧画面で社員名を確認する」

• 基本動作:特定の場所のテキストの内容を確認する   ו 対象:社員一覧画面の中の社員名

– 「社員登録画面で電話番号を入力する」

• パラメタも指定できるようにする– 「社員一覧画面で社員名を確認する (name) 」– 「社員登録画面で電話番号を入力する (phone) 」

Page 11: 20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」

11

STEP3個別のテストシナリオを作る

• 例▼STEP2 で定義した 個別機能の操作

▼操作のパラメタ (複数パターン作成可能)

Page 12: 20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」

12

デモ

Page 13: 20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」

13

スクリプトの「素」をメンテするメリット

• 保守性の向上– UI が変わってもスクリプトの変更箇所が最低限で済む

• 可読性の向上– どんな操作を行っているかが一目で分かる– 初心者でもメンテしやすい

• + αのメリット– ログ出力などの共通処理を入れ込みやすい

• 「キーワード駆動テスト」という考え方を参考にしています

Page 14: 20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」

14

まとめ

• GUI ベースの自動テストは UI 変更との戦い

• 保守性を高めるために– 開発・テスト間のコミュニケーションを取って製品

コードも改善していく– スクリプトの自動記録に頼らず、変更箇所を少なくま

とめられるように工夫する

• TODO– WebDriver 対応– 脱 Excel…

Page 15: 20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」

15

ご清聴ありがとうございました。