Microsoft PowerPoint - A1-2_株式会社ネクスト_藤澤正通_S _005.pptx

Similar documents
D5-2_S _003.pptx

Microsoft Word 基_シラバス.doc

ご利用のコンピュータを設定する方法 このラボの作業を行うには 事前設定された dcloud ラボを使用するか 自身のコンピュータをセットアップします 詳細については イベントの事前準備 [ 英語 ] とラボの設定 [ 英語 ] の両方のモジュールを参照してください Python を使用した Spar

自己紹介 2 上田 和樹 JaSST 北海道実行委員 TEF 道 札幌で活躍するアマチュアミュージシャン兼ソフトウェアエンジニア

事業計画

Python によるジオプロセシング スクリプト入門

Microsoft PowerPoint - B3-3_差替版.ppt [互換モード]

Python によるジオプロセシング スクリプト入門

Microsoft PowerPoint - Tutorial_2_upd.ppt

Microsoft Word - rocketcms_manual01

スライド 1

1

編集する ファイルを開く マイクロデータの設定を行うファイルまたはファイルを開きます 開かれたファイルは編集画面に表示されて ブラウザ表示した時のプレビューも同時に表示されます HTML ファイルの選択 編集する ファイルを開くためにメインメニューから ファイル 開く を選びます ファイル選択ダイア

Blue Asterisk template

JACi400のご紹介~RPGとHTMLで簡単Web化~

Java言語 第1回

クラス図とシーケンス図の整合性確保 マニュアル

目次 ペトリネットの概要 適用事例

Microsoft PowerPoint _2.プログラミングの基礎_final.pptx

目次 第 1 章はじめに 動作環境 Internet Explorer の設定 取引先テスト実施内容... 5 第 2 章取引先テストの手順 ログイン 出荷梱包 ( 紐付けあり )

Microsoft Word - Gmail操作ガイドver1.1.docx

2 概要 市場で不具合が発生にした時 修正箇所は正常に動作するようにしたけど将来のことを考えるとメンテナンス性を向上させたいと考えた リファクタリングを実施して改善しようと考えた レガシーコードなのでどこから手をつけて良いものかわからない メトリクスを使ってリファクタリング対象を自動抽出する仕組みを

PowerPoint プレゼンテーション

Microsoft PowerPoint - ●SWIM_ _INET掲載用.pptx

独立行政法人産業技術総合研究所 PMID-Extractor ユーザ利用マニュアル バイオメディシナル情報研究センター 2009/03/09 第 1.0 版

GEC-Java

Microsoft PowerPoint - SJ2018_東芝テック_加藤裕.pptx

1 本ドキュメントが想定するネットワーク環境 本ドキュメントが想定するネットワーク環境を図に示す 各種モダリティで撮像した DICOM データは DICOM サーバに送信され データベースに登録される クライアントパソコンには InVesalius がインストールされている これらの機器はすべてネッ

V8.1新規機能紹介記事

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

メソッドのまとめ

C#の基本

WebOTX V6 J2EEアプリケーションのトラブルシューティング

Microsoft PowerPoint _2.プログラミングの基礎_final


スライド 1

PowerPoint プレゼンテーション

システム操作インターフェイス最適化によるテスト自動化ROI向上

JaSST'16 Tokai 特別講演

040402.ユニットテスト

10th Developer Camp - B5

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

(Microsoft PowerPoint - ClickFramework.ppt [\214\335\212\267\203\202\201[\203h])

2 COPYRIGHT TempNate. ALL RIGHTS RESERVED.

<4D F736F F F696E74202D208A778F708FEE95F197AC92CA82F08EC08CBB82B782E98B5A8F E97708B5A8F70816A5F94D196EC8D758E742E >

プログラミング基礎

5-3- 基統合開発環境に関する知識 1 独立行政法人情報処理推進機構

アクセス履歴の確認 アクセス履歴の確認 名刺データへのアクセス履歴を 日単位で確認または月単位でファイル出力できます 日単位の履歴を確認する 名刺データへの過去 1 ヵ月のアクセス履歴を 日単位で確認できます 1 名刺管理画面を表示し 名刺管理 アクセス履歴 の順にクリックします 名刺管理画面の表示

Rの基本操作

PowerPoint プレゼンテーション

個人依存開発から組織的開発への移行事例 ~ 要求モデル定義と開発プロセスの形式化 による高生産性 / 高信頼性化 ~ 三菱電機メカトロニクスソフトウエア ( 株 ) 和歌山支所岩橋正実 1

◎phpapi.indd

(Microsoft PowerPoint - Java\221\3462\225\224\211\357\224\255\225\\\216\221\227\ ppt)

智美塾 ゆもつよメソッドのアーキテクチャ

Web データ管理 JavaScript (1) (4 章 ) 2011/12/7( 水 ) 湘南工科大学講義資料 Web データ管理 (2011) 阿倍 1/21

CodeRecorderでカバレッジ

2 COPYRIGHT TempNate. ALL RIGHTS RESERVED.

Using VectorCAST/C++ with Test Driven Development

PowerPoint プレゼンテーション

アクセス履歴の確認 アクセス履歴の確認 名刺データへのアクセス履歴を 日単位で確認または月単位でファイル出力できます 日単位の履歴を確認する 名刺データへの過去 1 ヵ月のアクセス履歴を 日単位で確認できます 1 名刺管理画面を表示し 名刺管理 アクセス履歴 の順にクリックします 名刺管理画面の表示

Code_Aster / Salome-Meca 中級者への道 2015年5月31日

TDK Equivalent Circuit Model Library

Microsoft PowerPoint - Tutorial_6.ppt

機能性表示食品制度届出データベース届出マニュアル ( 食品関連事業者向け ) 4-6. パスワードを変更する 画面の遷移 処理メニューより パスワード変更 を選択すると パスワード変更 画面が表示されます パスワード変更 画面において パスワード変更 をクリックすると パスワード変更詳細 画面が表示

TestDesign for Web

スライド 1

USDM Quick Start Guide 2014 年 1 月 第 1.0 版 第 29 年度 (2013 年度 ) SQiP 研究会第 6 分科会 D グループ

Si 知識情報処理

平成 30 年度 プログラミング研修講座 岩手県立総合教育センター

JUnit 概要 2015/4/16 版今泉俊幸 2015 bbreak Systems 1

Office Survey System V4 オフィスサーベイシステム Ver.4.0 社員拡張属性機能のご紹介 2018 年 8 月 有限会社アルファ アソシエイツ

【NEM】発表資料(web掲載用).pptx

IronPython による柔軟なゲーム開発 筑波大学 AmusementCreators

PowerPoint プレゼンテーション

コードテンプレートフレームワーク 機能ガイド 基礎編

ICLT 操作マニュアル (2011 年 05 月版 ) Copyright 2011NE 東京株式会社 All Rights Reserved

yukarik

QualysGuard(R) Release Notes

サイボウズ Office 9 掲示板マニュアル

Microsoft PowerPoint - Session4古賀様.ppt

機能紹介:コンテキスト分析エンジン

目次 はじめに 4 概要 4 背景 4 対象 5 スケジュール 5 目標点 6 使用機材 6 第 1 章 C# 言語 7 C# 言語の歴史 7 基本構文 8 C 言語との違い 9 Java 言語との違い 10.Netフレームワーク 10 開発資料 10 第 2 章 Mono 11 Monoの歴史 1

スライド 1

06.7 作成.EndNote Basic について -.EndNote Basic とは? EndNote は文献情報を保存 管理するツールです また 保存した文献情報をもとに文献リストを簡単に作成することができます デスクトップ版と EndNote Basic と呼ばれる Web 版があり 信州

Episys301と見える化君の使用方法

■POP3の廃止について

QualysGuard(R) Release Notes

Vista IE7 ブラウザの設定手順

Microsoft PowerPoint - 09.pptx

ゲームプログラミング講習 第0章 導入

レコードとオブジェクト

An introduction and future of Ruby coverage library

第 1 章 : はじめに RogueWave Visualization for C++ の Views5.7 に付属している Views Studio を使い 簡単な GUI アプリケーションの開発手順を紹介します この文書では Windows 8 x64 上で Visual Studio2010

Microsoft Word - 操作マニュアル(PowerPoint2013)

2 / /08/07 16:53 図 2 スマートフォンの影響を きく受けたデスクトップ環境 2012 年 3 29 にリリースされた Ubuntu LTS ベータ 2 のデスクトップ画 です このようなデスクトップ環境は スマートフォンやタブレットで成功している機能などを取

Microsoft PowerPoint - kougi2.ppt

プログラミング基礎I(再)

Microsoft Word - 操作マニュアル(PowerPoint2010).doc

変更の影響範囲を特定するための 「標準調査プロセス」の提案 2014年ソフトウェア品質管理研究会(30SQiP-A)

スライド 1

Transcription:

SQiP シンポジウム 2012 ページオブジェクトパターンによる 動テストメンテナンスの効率化 株式会社ネクスト HOMEʼS事業本部 サービス推進部 品質管理グループ 藤澤 正通 FujisawaMasamichi@next-group.jp 1

動化への取組み 2011 年 4 : リグレッションテストの 動化検討を開始 6 :Selenium IDE を採 動化に着 7 : 機能カバレッジ 10% に到達部分的な運 を開始 10 : 機能カバレッジ 50% に到達リグレッションを数度検出し効果を実感同時にメンテ 数の増加を感じ始める 12 : テスト対象システムの 規模な拡張メンテナンスがほぼ毎 の作業となる 2012 年 1 : テスト対象システムがさらに拡張 Selenium IDE に限界を感じ始める 2012 年 2 : テスト対象システムがさらに拡張 Selenium IDE の破棄を決意 Selenium IDE の良いところ 無料 簡単 レコード & プレイバック テストシナリオ通りにブラウザを操作すれば 動的にテストが 成される シンプルな 法 法がシンプルなので コードを で記述する場合でも簡単 例 : 物件を検索 検索後のページタイトルを検証する場合 open http://www.homes.co.jp/search/ type //input[@id='freeword_input'] 海が える物件 clickandwait verifytitle //input[@value=' 検索 '] 海が える物件 の検索結果 2

Selenium IDE の今 歩なところ 常にシンプルなスクリプト 語なので 次のような処理はできない 変数の定義と利 関数の定義と利 条件分岐 (if...else...) 繰り返し処理 (loop/iteration) 厳密には可能なのですが可読性が悪く 使いこなすのは困難でした その結果 テストスクリプトには同じような記述が何度も登場することになる! Selenium IDE の課題 ( 具体例 ) 例えば 不動産情報の検索システムに関する次のようなテストシナリオがあるとする 1. 検索画 を開く 2. キーワードを 検索ボタンをクリック 3. 検索結果ページのタイトルに検索キーワードが含まれることを確認 4. キーワードを変更 検索ボタンをクリック 5. 検索結果ページのタイトルに新しい検索キーワードが含まれることを確認 これを Selenium IDE のスクリプトで表現すると 3

Selenium IDE の課題 ( 具体例 ) 1. 検索画 を開く open http://www.homes.co.jp/serarch/ 2. キーワードを 検索ボタンをクリック type //input[@id=ʻkeywordʼ] dʼ] ペット可 clickandwait //input[@id=ʻsubmitʼ] 3. 検索結果ページのタイトルに検索キーワードが含まれることを 確認 verifytitle ペット可の物件検索結果 4. キーワードを変更 検索ボタンをクリック type //input[@id=ʻkeywordʼ] 23 区ペット可 clickandwait //input[@id=ʻsubmitʼ] 5. 検索結果ページのタイトルに新しい検索キーワードが含まれる ことを確認 verifytitle 23 区ペット可の物件検索結果 Selenium IDE の課題 ( 具体例 ) 1. 検索画 を開く open http://www.homes.co.jp/serarch/ 2. キーワードを 検索ボタンをクリック type //input[@id=ʻkeywordʼ] dʼ] ペット可 clickandwait //input[@id=ʻsubmitʼ] 3. 検索結果ページのタイトルに検索キーワードが含まれることを同じ要素指定の確認繰り返し verifytitle ペット可の物件検索結果 4. キーワードを変更 検索ボタンをクリック type //input[@id=ʻkeywordʼ] 23 区ペット可 clickandwait //input[@id=ʻsubmitʼ] 5. 検索結果ページのタイトルに新しい検索キーワードが含まれることを確認 verifytitle 23 区ペット可の物件検索結果 4

Selenium IDE の課題 この例のように Selenium IDEで作成したスクリプトには重複した記述が多くなる ( 同じ要素を複数の で指定 ) 重複は複数のファイルに及ぶ その結果 システムのUIが1 箇所変更されただけで テストスクリプトは何箇所も修正が必要になる テストケース数が少ないうちは問題ないが テストケース数が増えてくると メンテナンス性が著しく低下する 解決策 ページオブジェクトパターン導 による効率化 5

Page Object Pattern( ページオブジェクトパターン ) Page Object Pattern とは テストシナリオを記述 するスクリプトと 実際にページを操作 するスクリプトを分離しシナリオは常にページオブジェクトを経由してテスト対象を操作 検証する設計パターン シナリオ ---------------------- テストシナリオを記述するスクリプト テスト対象ページを直接は操作せず ページオブジェクトに対して指 を う ページオブジェクト ---------------------- シナリオからの指 を受け取り ページの操作とページが持つ情報の取得を う テスト対象ページ 使 するツールと 語 Selenium 2(WebDriver) Selenium を API として様々なプログラミング 語から呼び出すことが可能なフレームワーク 利 可能な 語 Java C# Ruby Python など このスライドでは例として Python を使 しています 6

STEP1: Selenium IDE のコードをプログラミング 語で書きなおす 最初から IDE を使ってない場合はもちろん不要 #scenario1.py # 検索ページを開く driver.get(ʻhttp://www.homes.co.jp/search/ʼ) # 検索キーワード テキストボックスを取得し 字列をセット search_text_field = driver.find_element_by_xpath(//input[@id='keyword']) search_text_field.send_keys(' ペット可 ') #[ 検索 ] ボタンを取得し ボタンをクリック search_btn = driver.find_element_by_xpath(//input[@id='submit']) search_btn.click() # 検索結果ページのページタイトルを検証 assert(driver.title == ʻ ペット可の検索結果 ʼ) STEP2: 要素を取得する処理を別のファイルに抜き出す # 検索キーワード テキストボックスを取得 search_text_field = driver.find_element_by_xpath(//input[@id='keyword']) #[ 検索 ] ボタンを取得 search_btn = driver.find_element_by_xpath(//input[@id='submit']) #scenario1.py di driver.get(ʻhttp://www.homes.co.jp/search/ʼ) h / h/ʼ) # 検索ページを開く search_text_field.send_keys(ʻ ペット可 ʼ) search_btn.click() # 検索キーワードをセット #[ 検索 ] ボタンをクリック assert(driver.title == ʻ ペット可の検索結果 ʼ) # 結果ページのタイトルを検証 7

STEP3: 抜き出したファイルに名前を付け それをシナリオファイルにインポートして完成 #search_page.py py # 検索キーワード テキストボックスを取得 search_text_field = driver.find_element_by_xpath(//input[@id='keyword']) #[ 検索 ] ボタンを取得 search_btn = driver.find_element_by_xpath(//input[@id='submit']) #scenario1.py import search_page as page driver.get(ʻhttp://www.homes.co.jp/search/ʼ) page.search_text_field.send_keys(ʻ ペット可 ʼ) page.search_btn.click() # 検索ページを開く # 検索キーワードをセット #[ 検索 ] ボタンをクリック assert(driver.title == ʻ ペット可の検索結果 ʼ) # 結果ページのタイトルを検証 このように要素の取得を うファイルをページ毎に作成 利 することで シナリオファイルには純粋なシナリオとしての記述のみが残る #search_page.py # 実際にはこのファイルをページ毎にクラスとして作成します # 検索キーワード ボックス search_text_field = driver.find_element_by_xpath(//input[@id='keyword']) #[ 検索 ] ボタン search_btn = driver.find_element_by_xpath(//input[@id='submit']) #scenario2.py import search_page as page driver.get(ʻhttp://www.homes.co.jp/search/ʼ) # 検索ページを開く page.search_text_field.send_keys(ʼ 海が える物件 ʼ) # 検索キーワードをセット page.search_btn.click() #[ 検索 ] ボタンをクリック assert(driver.title == ʼ 海が える物件の検索結果 ʼ) # 結果ページタイトルを検証 8

適 前 open http://www.homes.co.jp/ type //input[@id=ʻkeywordʼ] ペット可 clickandwait //input[@id=ʻsubmitʼ] verifytitle ペット可の検索結果 適 後 #scenario1.py import search_page as page driver.get(ʻhttp://www.homes.co.jp/search/ʼ) # 検索ページを開く page.search_text_field.send_keys(ʻ ペット可 ʼ) # 検索キーワードをセット page.search_btn.click() #[ 検索 ] ボタンをクリック assert(driver.title == ʻ ペット可の検索結果 ʼ) # 結果ページのタイトルを検証 Page Object Pattern の効果 可読性の向上 シナリオファイルから //input[@id=ʻsubmitʼ] のような直感的ではない記述がなくなる 代わりに search_text_field や search_btn のように 間が読んで理解できる名前になり 可読性が向上する シナリオ作成の効率化 すでにページオブジェクトを作成済みのページに対するテストシナリオを作成する場合は 純粋なシナリオの記述のみでケースを作成できるため 短時間でシナリオを量産できる シナリオで定形的に われる処理は関数化することで 再利 が可能になる 9

Page Object Pattern の効果 メンテナンス 数の削減 例えば 仕様変更によりアプリーションのGUIが変更され 検索ボタンの位置が //input[@id=ʻsubmitʼ] から //div[@id=ʻsend_qʼ]/img に変更された場合 ページオブジェクトを利 していなければ そのボタンを利 している全てのシナリオを修正しなければならない ページオブジェクトを利 していれば シナリオの数が何百あっても該当のページオブジェクトを 1 箇所のみ修正すれば良い まとめ Page Object Pattern を使うと コードの再利 が促進され 重複を排除できる テストが読みやすくなり 修正がしやすくなる メンテナンス性が 幅に向上するので 仕様変更が多いシステムのテストでは是 取り れるべき 10

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