20161218 selenium study4

69
Seleniumキーワード駆動テストを 実践した時のあれこれ 18 th -Dec-2016 Naoya Kojima @jugemix

Upload: naoya-kojima

Post on 08-Jan-2017

776 views

Category:

Engineering


9 download

TRANSCRIPT

Page 1: 20161218 selenium study4

Seleniumでキーワード駆動テストを実践した時のあれこれ

18th-Dec-2016

Naoya Kojima

@jugemix

Page 2: 20161218 selenium study4

Profile

I am …

Father / Husband / A just application developer interested in Application design & Testing

I love making / drinking coffee very much (^^)v

Specialty

Automation Test ( with JavaSE AspectJ Junit/TestNG Selenium WebDriver )

I make a keyword-driven test system.

Page 3: 20161218 selenium study4

伝えたいことセッションの主旨をお伝えします

Page 4: 20161218 selenium study4

テストの自動化に興味ある皆さんへ

テストの自動化をはじめるにあたり、皆さんが気になるであろうポイントを、キーワード駆動テストの実践を通してご紹介します

難しく考えずに、できる範囲ではじめてみてください

テストを自動化する目的を明らかにしてみてください

テストをシステム化する上で重要だと思うことを、テストシステムの開発方針に取り入れてみてください

取り組んだ結果をぜひ皆さんに教えてください

Selenium を使う自動テストの手法は状況に応じて千差万別だと思います。私の伝えたいことが皆さんとって適切なシステム構築の一助になれば幸いです

Page 5: 20161218 selenium study4

話の流れ

伝えたいこと

キーワード駆動テストに取り組む前に考えたこと

キーワード駆動テストとは

構造化スクリプティングとの比較

キーワード駆動テストを実践した話

深く考えずにまずはやってみた編

リファクタリング編

テストシステムの構造、機能の検討

テストのしやすさの検討

ICONIX によるテストシステムの要求分析設計の実施

適切なキーワードの検討

まとめ

Page 6: 20161218 selenium study4

キーワード駆動テストに取り組む前に考えたこと• キーワード駆動テストとは

• 構造化スクリプティングとの比較

Page 7: 20161218 selenium study4

キーワード駆動テストとはテストシステムを実装する立場からの考察

Page 8: 20161218 selenium study4

自動化アプローチの種類

システムテスト自動化標準ガイドによると

スクリプティング技法

リニアスクリプト

テスト対象への操作をレコーディングして、何度も実行出来るようにするアプローチ

構造化スクリプト

「テスト対象の操作方法」を"テストコード"を書き、何度も実行出来るようにするアプローチ

データ駆動スクリプト

構造化スクリプトを構成するテストコードからテストデータを独立させて、テストコードに柔軟性を持たせたアプローチ

キーワード駆動スクリプト

特定のルールに基づき構成されたスクリプトをテストシステムが解釈(プリプロセス)してから実行するアプローチ

Page 9: 20161218 selenium study4

概要

ISO/IEC/IEEE 29119-5 によると

一般的に、次の2つで構成される

自動テスト

テスト自動化フレームワークの開発

すべてのテストレベルで使用できる

システム様々なタイプのテスト

例)機能テスト、信頼性テスト

キーワード駆動テストの基本的な考え方

プログラミングやテストツールの専門知識を詳しく知らなくても、手動または自動のテストケースの作成に使用する「キーワード」と呼ばれる一連の「構成要素」を提供する

この為、各キーワードをソフトウェアで実装する必要がある

Page 10: 20161218 selenium study4

「キーワード駆動テストとは」 まとめ

目的

構造化/データ駆動の課題の、「テスト対象の操作方法」を1つ1つテストシステムに伝える、という手間を軽減する

実現方法

テストシステムが「テスト対象の操作方法」を解釈してから、テストを実行できるようにする

解釈(プリプロセス)の為に、テストシステムには特定のルールに基づいて抽出した「キーワード」を知識として与える

効果

テストシステムが「解釈」出来るようになった結果、テスト実装者は「テスト対象の操作方法」をある纏まりとして扱うことが可能になる

特定のドメインにフォーカスして、一定のルールに基づき「ある纏まり」を構成することで、テストコードを書けない組織でも比較的容易にスクリプトを記述出来るようになり、自動化の敷居を下げることが出来る

Page 11: 20161218 selenium study4

構造化スクリプティングとの比較採用するアプローチの決定にあたり、組織の状況と照合する為の観点

Page 12: 20161218 selenium study4

自動テストのライフサイクル

テストシステ

ム開発テスト実装 テスト実行

テストシステ

ム保守

Page 13: 20161218 selenium study4

観点 構造化 キーワード

・テストシステム開発要員のスキル

テスト計画、分析、設計に関する知識や経験例)どのようにテストを実施していくか

必要 必要

各々が置かれた状況から導かれた要求に対して適切に設計をするスキル例)保守、拡張しやすい構造にするスキル、キーワードの設計スキル

必要 必要

・コーディングスキル 必要 必要

・テストシステムの開発工数(相対比較) 低 高

テストシステム開発時の比較観点

Page 14: 20161218 selenium study4

テスト実装時の比較観点

観点 構造化 キーワード

・テスト実装者のスキル

テスト技法に関する知識例)どのように効果的なテストを実施するか

必要 必要

コーディングスキル 必要 不要

キーワードの設計スキル 不要 必要

・テストの実装環境

開発環境 必要 不要

・テストの実装工数(相対比較) 高 低

Page 15: 20161218 selenium study4

テスト実行時の比較観点

観点 S/K

テスト実行者のスキル

コーディング不要/不要

テスト失敗時の原因分析スキル不要/不要

テストの実行環境

テストシステム稼働環境必要/必要

テストスクリプト実行環境必要/必要

観点 構造化 キーワード

・テスト実行者のスキル

コーディング 不要 不要

テスト失敗時の原因分析スキル 不要 不要

・テストの実行環境

テストシステム稼働環境 必要 必要

テストスクリプト実行環境 必要 必要

Page 16: 20161218 selenium study4

テストシステム保守時の比較観点

観点 構造化 キーワード

・テストシステム保守要員のスキル

テストプロセスに関する知識例)どのようにテストを実施していくか

必要 必要

開発時の方針 に従って保守・拡張設計をするスキル例)キーワード設計方針に従いキーワードを拡張する

必要 必要

コーディングスキル 必要 必要

・テストシステムの保守工数(相対比較) 低 高

Page 17: 20161218 selenium study4

構造化スクリプティングとの比較 まとめ

自動化のアプローチを決定する上で大切な事

自動テストのライフサイクル別に必要なリソースを検討すること

ライフサイクルの一部だけに「テストシステム開発」だけ、「テストの実装」だけに焦点を当ててしまうと、想定していないフェーズで必要となってくるリソース不足で、自動テストを継続できなくなってしまう

状況に応じて判断、選択すること

判断基準となる観点を導くポイント

ヒト、モノ、カネ

自分が置かれた状況にどれだけあるか 、手配できるかを踏まえて判断すること

Page 18: 20161218 selenium study4

キーワード駆動テストを実践した話深く考えずにまずはやってみた編

Page 19: 20161218 selenium study4

実践の背景

定期的に同じ操作のテストを繰り返していた

約 30 時間

依頼通りに値が設定されてることを検証する必要があった

約 20 時間

テストデータは間違いなく入力する必要があった

間違えたらやり直し

間違いなく入力されていることを検証(受入)する必要があった

テストコードを書ける人がいなかった

Page 20: 20161218 selenium study4

ビジネス要求

同じテスト内容を何度も繰り返し入力したくない

受入検証で誤ったテストを発見するような運用はやめたい

例え誤りを発見しても、迅速に修正、短時間で再実行したい

テストコードを書けない人でも自動テストを実装出来るようにしたい

Page 21: 20161218 selenium study4

機能要求

1つのテストケースで何度も同じテストを実施出来なければならない

テストは自動実行される必要がある

テストの実施中にテストの合否を誤りなく判定しなければならない

誤りがあったテストケースだけを実行出来る仕組みが必要である

キーワード駆動テスト手法を採用しなければならない

さらに、テストケース表は自然言語で記述される必要がある

Page 22: 20161218 selenium study4

ユースケース

テストケース取り込み、実行、合否判定、結果報告

POI

TestNG

DataProvider 、Suite、Assertion、Report

実行有無の判定処理の追加

Maven

キーワード駆動テスト専用のテストケース表の作成

テスト対象への自然言語による操作を、テストシステムが処理可能な形に変換するテストケース表の作成

Page 23: 20161218 selenium study4

テストシステムビルダー(Maven)

テストランナー(TestNG)

テストケース

ローダ(POI)

WebDriverの

管理キーワードエンジン

テストケース

ファイル

(Excel)

テストステップ

ファイル

(Excel)

キーワードページオブ

ジェクト

レポーター

(TestNG)

作ったもの 1/3

テストシステムの構造Programming Part

selenium-javaを利用した「WebDriver」、「操作」、「ロケータ」の記述箇所

Page 24: 20161218 selenium study4

作ったもの 2/3

テストケースファイル

Page 25: 20161218 selenium study4

作ったもの 3/3

テストステップファイル

Page 26: 20161218 selenium study4

成果

同じ内容のテストを繰り返し操作しなくて済むようになった

受入検証ではテスト結果と証跡を確認するだけで済むようになった

テストシステムが意図した通りに動作することが保証されている為

誰でも自動テストを実装出来るようになった

さらに

ちょっとしたテストデータの変更にも対応できるようになった

Page 27: 20161218 selenium study4

課題 1/2

1. テストシステムのあるべき姿が分からなかった

テストシステムがどのような構造を持つべきか分からなかった

テストシステムの目的が不明確だった

2. 適切なキーワードの実装方法が分からなかった

汎用性の高いキーワードはテストケースが長くなった。一方でテストケースを短くする為にキーワードの独自性を強めると、汎用性に欠けた再利用性の低いキーワードが増えてしまった。

Page 28: 20161218 selenium study4

課題 2/2

3. 脆いテストになった

画面上の要素の変更を伴う改修により、テストケース表毎にロケータを書き直す羽目になってしまった

4. テストの実装よりテストシステムの実装に工数を取られた

マルチブラウザのテストを独自に実装する必要があった

ブラウザの種類によりスクリーンショットの範囲が異なっていた

スクリーンショットに基づいたブラウザ間の差異の比較を出来なかった

失敗したテストの原因を特定する為に、自分でロギングを設計する必要があった

テストの実行を並列化出来ず、実行に時間が掛かっていた

テストの実行により画面を占有されてしまい、別の端末が必要になっていた

Page 29: 20161218 selenium study4

対応方針 1/2

1. テストシステムの構造、機能の検討

先駆者のテストシステムを参考にした

現状の構造と比較し、改善した

テストシステムの目的を明確化した

テストシステムは一つのシステムであると捉え、テストシステムへの要求、及び機能を整理した

2. テストスクリプトにおける適切なキーワードの検討

先駆者の考え方を参考にした

シナリオテストに登場するドメインの用語をキーワードとした

デザインパターンを参考にした

クラス階層と機能階層を分離するBridgeパターン

オブジェクトをコマンド化するCommand パターン…etc

OOADによるオブジェクト抽出方法を参考にした

ICONIXのドメイン分析手法から、特定のドメインからオブジェクトを抽出できるようにした

Page 30: 20161218 selenium study4

対応方針 2/2

3. 脆いテストへの対策

テストシステムに実装したロケータをテストケース表に取込可能にした

4. テストシステムの実装の省力化

Pitaliumにテストシステムの基本機能を委譲した

マルチブラウザテスト対応

スクリーンショットの範囲補正、取得

テストログ(stacktrace含む)取得

テストのマルチスレッド実行

Selenium Server をdaemon(サービス)化した

Java Service Wrapperを利用した

Page 31: 20161218 selenium study4

キーワード駆動テストを実践した話リファクタリング編

Page 32: 20161218 selenium study4

テストシステムの構造、機能の検討• 先駆者のテストシステムを参考にした

• テストシステムの目的を明確化した

Page 33: 20161218 selenium study4

先駆者のテストシステムを参考にした

参考にしたテストシステム、考え方

SQiP 併設チュートリアル 2「キーワード駆動による自動テスト構築」

http://jugemix.hatenablog.com/entry/2016/09/20/230954

Page 34: 20161218 selenium study4

テストシステムの目的を明確化した

テストシステムは一つのシステムであると捉え、テストシステムへの要求、及び機能を整理した

要求、機能整理の為に採用したアプローチ

「テストのしやすさ」の検討

テストのしやすい状況、テストを検討してテストシステムの目的を明確にする

ICONIX (OOADのプロセスの一つ)によるテストシステムの要求分析設計の実施

ICONIXでは、ビジネス要求→機能要求→ユースケースというOOA(分析)を経て、ユースケースは機能設計へと落とし込まれていきます。そこで、ICONIXの要求分析アプローチに基づき、テストシステムへの要求を明確化していきます。

Page 35: 20161218 selenium study4

「テストのしやすさ」の検討

Page 36: 20161218 selenium study4

自動テストにしやすい状況

手動テストがテストスクリプトに基づいて実施されていること

テスト実行者への指示となるもの(ドキュメント等)があること

これはアドホックなテストを否定する意味ではなく、テストを実行するテストシステムへの指示が物理的な形になっていることを意味する

一般に知られる方法だが、ドキュメントに従い作られた正しさが証明されたテストのアウトプット(ログ)と、今回実行したテストのアウトプットを比較することで、テスト対象に変更が無いことを回帰的に確認することも出来る

効果的なテストがあること

テストがテストとしての目的を果たしている

テスト対象を適切に分析、設計できること

不適切な(意味のない)テストを自動化しても時間と労力が無駄になるだけである

テスト技法はテストプロセスを示すものではなく、効果的に欠陥を発見する為のものであることを理解する

Page 37: 20161218 selenium study4

自動テストにしずらい状況

テストスクリプトの無い機能が多い場合

テストを実装する為には、その元(ドキュメント等)が必要である為

アドホックなテストを否定しているわけではない

以下の投稿でアドホックな手動テストが必要、大切とされる理由を参照して頂きたい

http://qiita.com/ledsun/items/b6c22afe321ac3052182

頻繁に改修のある機能

改修が加われば、成功していたテストも失敗するようになる。手動テストなどを経た上で、成功するように誤りがなく適切な自動テストを実装する必要がある為。

Page 38: 20161218 selenium study4

実施しやすいテスト 1/2

複数のテストレベルに焦点を当てた場合

テストレベル

テストタイプ

単体テスト

ユニットテスト

統合テスト

機能テスト

機能間テスト

システムテスト

ユースケーステスト

サイクルテスト

性能テスト

Page 39: 20161218 selenium study4

実施しやすいテスト 2/2

システムテストに焦点を絞った場合

テストレベル

テストタイプ

目的

システムテスト

ユースケーステスト(シナリ

オテスト)

アクターにとってのシステム目的

の、様々なシナリオによる検証

サイクルテスト 性能テスト

Easy to test relatively

Page 40: 20161218 selenium study4

テストの実施時期と自動化の対象

いつどのテストを実施すべきかーという判断は、開発の効率に影響する

例えば、単体テストで発見できる欠陥がその後工程で発見されれば、その分の手戻りが発生する

一方、開発の効率を抜きにして考えれば、実施すべきテストはいつ実施さても良いことになる

よって、テストレベル毎のテストタイプに縛られずに、対象に必要なテストと実施手法を検討してその中から自動化すべきテストを決定する

Page 41: 20161218 selenium study4

ユースケーステスト

ユースケーステスト

ユースケーステストは、「ユースケース記述」で表現する基本シナリオ・代替シナリオから、比較的テストシナリオを導きやすい

参考情報

https://www.ibm.com/developerworks/jp/rational/library/04/r-3217/

テストシナリオを導きやすい為、テストスクリプトの準備が容易になりやすい

ただし、テストシナリオ導出の為には、テスト対象の分析、設計の実施が前提である

そこで、次スライドからOOADによるテスト対象の要求分析設計手法を紹介する

Page 42: 20161218 selenium study4

ICONIX によるテストシステムの要求分析設計の実施• Object-Oriented Analysis and Design

• The ICONIX Practical Method of OOAD

Page 43: 20161218 selenium study4

Object-Oriented Analysis and Design

Abstract OOAD Structure

Requests

Application

Architecture

Components

Object Object Object Object

Analysis

Design

Object

Roles

Responsibilities

Task Info

has

Roles

Page 44: 20161218 selenium study4

The ICONIX

Practical Method of OOAD

Quote from 「Use Case Driven Object Modeling with UML Theory and Practice」Doug Rosenberg, others.

Abstraction of ICONIX

ICONIX自体はOOADよりも広い範囲をサポートする開発手法

静的+動的なワークフローが構成するイテレーティブなプロセス

1イテレーションでは、ユースケースまたはその論理的な集合に対して、要求分析〜単体テストをスコープとする実践的な手法

イテレーティブな為、agileプラクティスとの親和性が高い

UP(統一プロセス)よりも使用するUMLやドキュメントの種類が少なく、軽量である

他の手法との折衷案を採用してもよい(私見)

マイルストーンと確認ポイントが示されているので分かりやすい

Page 45: 20161218 selenium study4

The ICONIX

Practical Method of OOAD 2

Abstraction of ICONIX Process (One Iteration)

要求定義 機能要求 振る舞い要求ドメイン分析

ドメインモデリングレビュー

要求分析

予備設計

ロバストネス分析属性追加(ドメイン

モデルの更新)

コントローラオブ

ジェクトの識別レビュー

詳細設計 シーケンス図作成操作の追加(ドメイ

ンモデルの更新)シーケンス図の更新 レビュー

実装コーディング

ユニットテスト実施

統合テスト、テスト

シナリオの実施コードレビュー 各モデルの更新

To Next

Iteration

Page 46: 20161218 selenium study4

The ICONIX

Practical Method of OOAD 3

要求定義

機能要求

•システムができることを記述する。

•例)1ヶ月ログインのないユーザは、パス

ワードを再設定しなければならない。

振る舞い要求

•アクター(ユーザ、システム等)との対話

を叙述的に記述(ユースケース記述)する。

•例)ログイン画面で、ユーザはIDとパス

ワードを入力する。システムは、ユーザの

最終ログイン日を取得し、現在日付との比

較結果が1ヶ月以内かを判定する。また、

ログイン情報と一致するかを判定する。シ

ステムは、判定結果を元にメニュー画面を

表示する。

ドメイン分析、モデリング

•ユースケース記述から問題領域のオブジェ

クトを抽出する。

•抽出にはCRCカードを使うとオブジェクト

の目的、責務、相互作用先の候補を挙げや

すい。(私見)

•ドメインオブジェクト同士を相互作用の観

点で結ぶ。

Page 47: 20161218 selenium study4

The ICONIX

Practical Method of OOAD 4

分析・予備設計

ロバストネス分析

•ユースケース記述をロバストネス図上に表

現する。

• UC記述中、オブジェクトはバウンダリ、エ

ンティティとし、タスク・処理はコント

ローラとする。

•例)ログイン画面で、ユーザはIDとパス

ワードを入力する。システムは、ユーザの

最終ログイン日を取得し、現在日付との比

較結果が1ヶ月以内かを判定する。また、

ログイン情報と一致するかを判定する。シ

ステムは、判定結果を元にメニュー画面を

表示する。

ドメインモデルの更新1

•ロバストネス図を記述した結果、ドメイン

モデルに不足するオブジェクトがあれば追

加する。

•例えば、UC記述上ではユーザはアクターだ

が、判定処理を行う際にIDとパスワードは

どこに格納しておくのか?

•結果、「ユーザ情報」というエンティティ

(タスクの実行を補助判断する情報を格納

するオブジェクト)が必要であると考える

ことができる。

• IDとパスワードはユーザ情報の属性とする。

コントローラオブジェクトの識別

•ロバストネス分析の結果、次の箇所をコン

トローラの候補とする。

•「ユーザの最終ログイン日を取得」

•「現在日付との比較結果が1ヶ月以内かを

判定する」

•「ログイン情報と一致するかを判定する」

Page 48: 20161218 selenium study4

The ICONIX

Practical Method of OOAD 5

詳細設計

シーケンス図作成

•ロバストネス図から、バウンダリ、エン

ティティ、コントローラをシーケンス図に

反映する。

•例)ログイン画面とユーザ情報はオブジェ

クトとして表現する。

•例)「ユーザの最終ログイン日を取得」、

「現在日付との比較結果が1ヶ月以内かを

判定する」、「ログイン情報と一致するか

を判定する」、「メニュー画面を表示す

る」は相互作用(オブジェクト間のメッ

セージ)として表現する。

ドメインモデルの更新2

•シーケンス図を記述した結果、ドメインモ

デルのオブジェクトにメッセージを追加す

る。

•その他、メッセージのインプット(引数)、

アウトプット(戻り値)等からオブジェク

トに不足する属性を判断する。

•この結果、ドメインモデルはクラス図とし

て完成する。

シーケンス図の更新

• Java EEやフレームワークを利用する場合は、

RequestDispatcherの実装オブジェクトも

シーケンス図上で表現することでActorとオ

ブジェクト間の相互作用がより詳細に分か

るようになる。

Page 49: 20161218 selenium study4

The ICONIX

Practical Method of OOAD 6

実装

コーディング・ユニットテストの記述

•完成したクラス図を元にクラスを実装する。

•設計を元にユニットテストを記述する。

統合テスト・テストシナリオの実施

•設計を元に統合テスト、テストシナリオを

実装する。

•テストシナリオにおいては、ユースケース

を元に実装することでユースケーステスト

を設計することができる。

コードレビュー・各モデルの更新

•コードレビューを実施し、パターンの適用

や適切な責務の実装を促す。

•次のIterationに備えてモデルを更新する。

Page 50: 20161218 selenium study4

新たなテストシステムのビジネス要求

テストシステムの目的

想定するユースケースにおける欠陥の発見

テストシステムの構築方針

利用者の学習コストが少ないこと

利用者が既存の開発プロセスでも受け入れ易いテスト手法であること

利用者がテストの実装に専念できる事

テストシステム開発者(Java User)が保守し易いこと

OOADに基づきドメインオブジェクトとその相互関係を表したドメインモデルを作ること

複数の問題領域で共通するドメインオブジェクトの実装には既存のツールを積極活用し、個別に考察を必要とするドメインオブジェクトの実装に専念する

テストシステムがテスト対象システムの変更に強いこと

Page 51: 20161218 selenium study4

ドメインモデルとは

特定の領域(問題領域)を解決領域へと導く為に、それを構成する抽象的な概念(オブジェクト)同士の関係でその領域を表した図のこと

例えば、「テストをする」という行為を1つの業務(ビジネス領域)と捉え、「〇〇業務システムの回帰テストを実行したい」というビジネス要求を受けたとする

ドメインモデルを作ると、ビジネス要求から「〇〇業務システム」、「回帰テスト」というワードを元に、それらを構成するオブジェクトを抽出し、ビジネス要求が対象とするオブジェクトとオブジェクト間の関係をモデルとして表現出来る

Page 52: 20161218 selenium study4

ドメインオブジェクトとは

問題領域を構成する要素

例えば「〇〇業務システムの回帰テストを実行する」という問題領域では、以下をドメインオブジェクトの一例として挙げられる

〇〇業務システムへの要求、機能仕様

テストケース

テストシナリオ

テストシステム

テスト結果

「〇〇業務の回帰テストを達成すること」が一番の問題(本質)であり、「どのように回帰テストを達成するか」は一番では無い

どちらも実装される必要はあるが、本質的な部分(テストケース、テストシナリオ)の作り込みに専念する為に、ここでは本質でない部分(テストシステム)には外部の解決策を利用する手段を採用した

Page 53: 20161218 selenium study4

新たなテストシステムの機能要求

テストシステムの利用目的

シナリオの実行を通してユースケースの正しさを検討すること

対策も加味した新たな機能要求

テストケース表は従来の書式を踏襲しなければならない

従来のテスト実装から、キーワード駆動テストケース表が導出される必要がある

Pitalium、JUnitを活用して適用対象システムの改修、変更時に実装するオブジェクトを以下に限定する必要がある

テストケース表の取り込み(TestcaseLoader)

キーワード(Keyword)

ページオブジェクト(PageObject)

WebElementの変更による影響を一箇所に集約する必要がある

Page 54: 20161218 selenium study4

新たなテストシステムのユースケース

テストケース取り込み、実行、合否判定、証跡取得、結果報告

POI

Junit、Pitalium、AspectJ

ParameterizedRunner 、Parameters 、AssertView

実行有無の判定処理の追加

Maven

テストケース表の作成

テスト対象への自然言語による操作を入手すると、テストシステムが処理可能なキキーワードを選択するセルを従来の表に追加

レイアウトは従来のままとし、テストケース表が参照するページオブジェクト一覧表の作成

Page 55: 20161218 selenium study4

テストシステムの要求分析設計の成果物

ユースケース図

ユースケース記述

ドメインモデル

ロバストネス図

シーケンス図

クラス図

Page 56: 20161218 selenium study4

テストスクリプトにおける適切なキーワードの検討• キーワードの粒度の検討ー先駆者の考え方を参考にした

• キーワードの実装方法の検討ーデザインパターンを参考にした

• キーワードの抽出方法の検討ーOOADによるオブジェクト抽出方法を参考にした

Page 57: 20161218 selenium study4

キーワードの粒度の検討ー 先駆者の考え方を参考にした

粒度の調整

「ドメイン言語 > スクリプト言語 > プログラム言語」

参考情報 51スライド

http://www.slideshare.net/koido1961/2015-56092163

「ISO/IEC/IEEE 29119-5」でも上記と同様に以下の表現で言及されている

ドメインレイヤーキーワード

例)ファイルを保存する(=アクターに提供する一連の画面操作の組み合わせ)

コンテンツを取得する→メニューを選択する→保存する

アクターへ提供するシステムの振る舞いを表す為、ユースケースに近いと思う(私見)

テストインタフェースレイヤーキーワード(キーワードの実装部分)

例)メニューを選択する

Page 58: 20161218 selenium study4

キーワードの実装方法の検討 1/2

ー デザインパターンを参考にした

Command Pattern

「キーワード」をクラスとして定義し、OOADの恩恵(保守/拡張性)を受ける

DomainLayerKeyword Class

例)

Class ファイルを保存する

action()ファイルを保存する

1. コンテンツを取得する

2. メニューを選択する

3. 保存する

Class メニューを選択する

Action() メニューを選択する

1. メニューリンクをクリックする

Selenium-java等のライブラリを使い実装する

キーワードクラスのaction()内で別のキーワードクラスのaction()

を再帰的に呼び出している

Page 59: 20161218 selenium study4

キーワードの実装方法について 2/2

ー デザインパターンを参考にした

Bridge Pattern

機能のクラス階層が実装のクラス階層のインスタンスを保持し、役割を保持する

例)SaveFileAsXmlキーワードクラス

Implフィールド

SaveFileのインスタンス

or

SaveDBのインスタンス

saveFileAsXML_actionメソッド

rawSave_actionメソッドを実行する

機能のクラス階層(繰り返し階層化して深くなる)

実装のクラス階層(並列化して実装が増える)

Page 60: 20161218 selenium study4

キーワードの抽出方法についてー OOADによるオブジェクト抽出方法を参考にした

キーワードをオブジェクトとして扱うアーキテクチャにできた

テスト対象システムの要求分析設計にもICONIXを用いる

テスト対象システムのユースケース記述から、ドメインオブジェクトの抽出と同時に、「タスク・処理」の抽出も行うことになり、それを元にキーワードの抽出が出来る

また、この開発アプローチにより、同時にユースケーステストの為のシナリオを作成するテスト分析も出来た状態になる

この結果、キーワード駆動テストを実施しやすい環境を整えることができる

ICONIXによるテスト

対象の開発

「タスク・処理」の

抽出

キーワードの抽出キーワード駆動テス

トスクリプトの作成

キーワード駆動アプ

ローチによるテスト

キーワード駆動テストシステムの設計にもICONIXが使われている

Page 61: 20161218 selenium study4

ドメインオブジェクトからキーワードの抽出

「ファイルを保存する」ユースケース

ユースケース記述

「タスク・処理」の抽出

•ログイン画面で、ユーザはIDとパスワードを入力する。

•システムは、ユーザの最終ログイン日を取得し、

•現在日付との比較結果が1ヶ月以内かを判定する。•また、ログイン情報と一致するかを判定する。システムは、判定結果を元にメニュー画面を表示する。

•ユーザの最終ログイン日を取得する

•現在日付との比較結果が1ヶ月以内かを判定する

•ログイン情報と一致するかを判定する

•メニュー画面を表示する

キーワードの抽出

キーワードの精査

抽出結果を基に、キーワードを精査することで、無駄なくテストに必要なキーワードを抽出できる

•ログインする

>Loginキーワード

•最終ログイン日を取得する

>GetLastLoginTimestampキーワード

•現在日付との比較結果が1ヶ月以内かどうか比較する

>AssertWithinAMonthキーワード

•一致するかどうか判定する

>AssertAccountEqualsキーワード

•画面を表示する

>DisplayKeywordキーワード

Page 62: 20161218 selenium study4

脆いテストへの対応• to be continued on Next time

• テストシステム上のロケータをテストケース表に取込可能にした

Page 63: 20161218 selenium study4

テストシステムの実装の省力化• to be continued on “Selenium AdventCalendar 2016”

• Pitaliumにテストシステムの基本機能を委譲した

• Selenium Server をdaemon(サービス)化した

Page 64: 20161218 selenium study4

テストシステムビルダー(Maven)

テストランナー(Pitalium based JUnit)

TestCaseLoder(POI)

テストケースファ

イル(Excel)

テストステップ

ファイル(Excel)

TestClass

KeywordInvokerClass

Abstruct Keyword Class

Concrete Keyword Class

PageLocator Class

リファクタリング後のテストシステム

テストシステムの構造Programming Part

Ptaliumに「WebDriverの管理」、「レポート」機能を委譲

selenium-javaを利用した「操作」、「ロケータ」の記述箇所

Page 65: 20161218 selenium study4

今後の展望

「脆いテストへの対応」への効果的な対策

キーワード駆動テストへ対応するテストタイプの拡張

Page 66: 20161218 selenium study4

まとめ実践を通して学んだこと、そして伝えたかったこと

Page 67: 20161218 selenium study4

大切だと思ったこと

難しく考えずに、はじめてみること

自動テストに対する要求が、課題として自然と湧いてくると思います

自動化する目的を明らかにすること

テスティングについて再考する場面に出会すと思います

テストの目的と自動テストの目的を分けて考えてみましょう

今大切にしたいと思うことを、開発方針に取り入れてみること

現状に合うテスト手法を検討することができると思います

取り組んだ結果を共有すること

誰かの助けになれば、それがいつか自分に返ってくると思います

Page 68: 20161218 selenium study4

より良い環境作りに向けて

これからもお互いに情報を提供し合い、より良い環境を整えていきましょう

Page 69: 20161218 selenium study4

本日はありがとうございました