4Copyright (C) MasanoriKataoka, All Rights Reserved.
2.テスト自動化の推進戦略
2.1 テスト自動化の推進戦略
テスト自動化の必要性は理解しても、実際にそれを推進するとなる
と多様な困難に直面することになる。ただやみくもに自動化を進める
のではなくテスト作業全体を考慮に入れた自動化戦略が大切である。
テスト自動化戦略は、次の基本要素にしたがって立案されるべきで
ある。
① テスト対象となるソフトウェア構造
② テスト作業のライフサイクル(テスト仕様の作成、テストデータの
作成、テスト実行順序の決定、テスト環境の作成、テストの実行、
テスト結果の検証、不良の分析・管理、テスト進捗状況の管理)
③ 標準化(被テストソフトウェアの標準化、テスト資産の標準化)
④ 既存テスト資産の蓄積・再利用
27Copyright (C) MasanoriKataoka, All Rights Reserved.
5. 機能テストとその支援ツール
5.1 APIテスト支援ツール
APIのテストのためには多様な入出力の組み合わせのテストが必要
であり、たとえば、次のようなツールがある。
1) Fit(Framework for Integrated Test)
テストケースを表形式(MS Excel/Word等の形式)で記述し、ユー
ザと開発者との間のコミュニケーションを良くする。Java, C#, C++,
Python に対応している。Fitは、OSSである。現状では日本語版はな
い。Fitは、Wikiの発明者である W. Cunninghamが開発した。
図5.1にFitによるテストの例を示す。
2) WebDriver(Selenium2)
WebDriverは、GUIテスト用の機能をAPIで提供する。近年Webシ
ステムの比率が大きくなるとともに、GUIテストのニーズが拡大し、
その道具としてWebDriverが広く活用されるようになってきている。
WebDriverについては、より詳細を後述する。
28.
28Copyright (C) MasanoriKataoka, All Rights Reserved.
<テスト内容>このビール会社は様々なタイプの飲料を販売している。大きく分けると、季節商
品(seasonal)と通年商品(year-round)、という2つのカテゴリーに分類することができる。すべ
ての飲料はケース単位で販売され、複数ケース買いに対する値引きサービスがある。
図5.1 Fit を用いたテスト
5. 機能テストとその支援ツール
29.
29Copyright (C) MasanoriKataoka, All Rights Reserved.
5. 機能テストとその支援ツール
5.1 APIテスト支援ツール(続き)
3) DSL(Domain Specific Language:応用領域固有言語)
DSLは、各々のアプリケーションドメインに適した記述方式(API、
図表形式等)で入力と出力の関係を記述して、これにより多様な組み
合わせ条件のテストを実施する。
例えば、ThoughtWorks社のテスト支援ツール twist は動的スクリ
プト言語Groovyにより、DSL相当の記述を可能としている。
(注:Groovyは、Java環境下で動作するスクリプト言語であり、Java
にRubyの長所を取り入れている)
後述するBDD支援ツールJBehave, CucumberもこのようなDSLの
一つである。また、Rubyは様々なDSLを作成(記述)するためのメタ
言語として活用されていて、それは更に広がっていく動向にある。
30.
30Copyright (C) MasanoriKataoka, All Rights Reserved.
5. 機能テストとその支援ツール
5.2 TestNG(Testing, the Next Generation)
JUnitは、単体テスティングフレームワークの代表的な存在である
が、このTDDの考え方と機能を引き継ぎながら、かつ、その限界を打
ち破るものとして、TestNG(Testing, the Next Generation)がある。
TestNGは、Java SE5.0から導入されたアノテーション機能を用いる
等により、結合テスト、機能テストに向けた次の特徴を実現している。
1) Java SE5.0のアノテーション機能をサポート
2) テストにおける各種の設定をXMLで記述可能
3) 前後処理のタイミングを細かく指定出来る
4) テストをグループ化することが出来る
5) テスト間に依存関係を作れる
6) テストを並列実行出来る、スレーブマシンで分散実行出来る
7) Antからテストを実行出来る
8) これら1)~7)の特徴により、単体テストだけに限らず、機能テス
ト、結合テスト、統合テスト他にも利用できる
32Copyright (C) MasanoriKataoka, All Rights Reserved.
5.機能テストとその支援ツール
5.4 Eclipse TPTP(Test and Performance Tools Platform)
Eclipse TPTP は、Eclipse環境においてテストを単体テスト、機能テ
スト、性能テストについて、総合的に支援するテスト支援環境である。
TPTP配下で他のテスト支援ツールを動かすことも出来る。
TPTPは、次の機能から構成されている。
1) TPTP Platform: 共通インフラ機能
2) Testing Tools: JUnitをテストの編集、実行面等から支援
3) Monitoring Tools: モニタリングやログ解析等の性能評価、
分析機能
4) Tracing and Profiling Tools: 実行状況のトレースやリソース
(CPU、メモリ等)の使用状況の分析
33.
33Copyright (C) MasanoriKataoka, All Rights Reserved.
6.GUIテストとその支援ツール
6.1 GUIテストの自動化の重要性
近年、GUIテストの自動化は、極めて重要なものになって来ている。
1) GUIベースのAP の急増
GUIベースのAP(Application Program)は、これまでも急増してき
たが、今後とも更なる増加が見込まれる。
a) 情報の共有、統合化を目的としたネットベースのAPの増加、
そして、そのGUIとしてのWebの活用。
b) スマートフォンの出現が、上記を加速化。
c) GUIの利用は、Androidなどを活用した組み込み機器にも拡大。
2) GUIテストの自動化が必須
a) GUIのテストの全てを手作業で行うには膨大な工数がかかると
共に、確認漏れ等の信頼性の問題が生じる。
b) ビジネスが加速化される中で、WebApに対する短期間、高頻度
の改変要求が生じる。改変に伴うデグレードを防止するためのテス
トの自動化が必須となって来ている。
34.
34Copyright (C) MasanoriKataoka, All Rights Reserved.
6. GUIテストとその支援ツール
6.2 主なGUIテスト支援ツール
1) Selenium: Seleniumは、OSSベースのWebApテスト自動化支援
システムの代表的な存在である。Webブラウザを実行させるための
スクリプトを記述し、それを実行させることが出来る。このことにより、
手間をかけて手動で実行していたWebApのテストを自動化するこ
とが出来る。Seleniumについては、その詳細を7.8.で説明する。
2) Watij(Web Application Testing in Java): Web, Javaアプリケー
ション向けの総合テスト支援ツール。Ruby向けのテスト支援ツール
Watirのシンプルさを引き継ぎながら、Java向けの機能を強化して
いる。(Seleniumよりも使い易いという人もいる。しかしながら、現
状においては、Seleniumと比べて日本での普及は遅れている。)
47Copyright (C) MasanoriKataoka, All Rights Reserved.
7.Selenium
7.5 Selenium RC
Selenium RC(Remote Control)は、
① リモートサーバにアクセスしてテストを行う
② 開発言語でテストを作成し、実行する
の二つの機能を持つ。
Seleniumコマンドによりテストを実行する方法については、既に7.4
で述べた。Selenium RCを用いて、開発言語でテストを作成すれば、
繰り返し使われる機能等は共通メソッドとして作成して、必要時に呼び
出す、と言ったより高度なことが出来る。そして、その開発言語に備
わっているテスト支援機能と組み合わせての活用も出来る。
Selenium RCは、Java, C#, Ruby, PHP, Perl, Python
等、多様な開発言語に対応している。Javaの場合は、単体テスト支援
ツールJUnitと組み合わせて利用することも出来る。
48.
48Copyright (C) MasanoriKataoka, All Rights Reserved.
7.Selenium
7.6 Selenium IDE
Selenium IDEは、
① ブレイクポイントの設定が可能なデバッグ支援機能
② Web操作の記録機能
③ 上記②によるテストコードの自動生成機能
等を実現している。Selenium IDEの開発者は、日本のAppirits社の笠
谷氏であり、日本語にも対応している。
上記の③の機能では、HTML形式のSeleniumコマンドの他に、各開
発言語対応のテストコードを生成する。したがって、最初に手作業でテ
ストした後は、2回目からは、生成したコードを使って自動リグレッショ
ンテストが実行出来る。また、いちいちテストコードを自分で記述する
手間が省ける。
しかしながら、生成されたテストコードが正しいか、また、共通化等の
改善の必要性が無いか、の確認が必要である。
49.
49Copyright (C) MasanoriKataoka, All Rights Reserved.
8.Selenium WebDriver
8.1 Selenium2
Google社のSimon Stewart は、Web GUIのテスト自動化支援を目
的としたWebDriverを開発した。2011年にリリースされたSelenium2
は、Seleniumの特徴を継承しつつWebDriverの良さを取り込んでいる。
Selenium + WebDriver = Selenium2
Selenium 2 は WebDriver の簡潔なオブジェクト指向の API を継承
し、ブラウザーとのやりとりは、そのブラウザーに最善の方法で行うよう
になっていて、テストプログラムが書きやすくなっている。
また、Selenium2は、Seleniumの機能を包含していて、Seleniumで
作成したテストデータをSelenium2向けに簡単に変換・移行できるよう
にしてある。
Selenium2が提供開始され始めてから5年が経過しつつあるが、
人々が受け入れたのはSelenium2全体ではなく、WebDriverの機能で
あった。Selenium2全体ではなく、Selenium WebDriverあるいは単に
WebDriverの名でWebDriver機能だけが取り出されることが多い。
53Copyright (C) MasanoriKataoka, All Rights Reserved.
8.Selenium WebDriver
8.4 WebDriverの高度な操作
前節8.3では、WebDriverの基本的な操作について述べたが、さらに
次のような高度な操作もWebDriverで実現できる。
1)複数のアクションの合成
複数のアクションを同時に行う(例えば、複数キイの同時押下)ため
にはActionsクラスを用いて、次のプロセスを実行する。
① 複数のアクションをActionsクラスを用いてグループ化する
② この合成されたアクションをbuildする
③ 合成されたアクションをperformする
2)マウスベースの操作
マウスベースの操作を表8.2に示す。
3)キーボードベースの操作
キーボードの操作を表8.3に示す。
62Copyright (C) MasanoriKataoka, All Rights Reserved.
8.Selenium WebDriver
8.6 WebDriverがサポートするブラウザー
WebDriverでは、次のようなブラウザーをサポートしている。各ブラ
ウザー対応のDriverを起動して、それぞれに固有な機能、インタ
フェースの相違を吸収している。
① Firefox
② InternetExplorer
③ Chrome
④ Safari
⑤ Opera
63.
63Copyright (C) MasanoriKataoka, All Rights Reserved.
8.Selenium WebDriver
8.7 PageObject パターン
PageObjectパターンとは、アプリケーションの画面を一つのオブジェ
クトと捉えるデザインパターンである。WebDriverの利用に当たっては、
PageObjectの活用が次のような効果をもたらす。(参考文献8))
① 画面内部(配置情報等)にアクセスするコードとこれを外から利用
するテスト用のコードとを完全に分離する。画面内部にアクセスす
るコードによりPageクラスを実現する。外からこの画面にアクセス
する場合はこのPageクラスだけを用いてアクセスする。
② 画面に関するコードがばらばらに分散配置されずに一か所に
集中管理される。
すなわち、PageObjectは、画面を仮想化し、画面の外からの画面へ
のアクセスをサービス化する。これにより画面固有の内部の変更が外
部のサービスに影響しないようにする。そして画面機能の再利用を容
易にし、そのソフトウェアの保守性を優れたものにする。
64.
64Copyright (C) MasanoriKataoka, All Rights Reserved.
9.BDDとJBehave
9.1 BDDが求められる背景
BDD(Behavior Driven Development)は、顧客が求める動作要求
(Behavior)に基づき、ソフトウェアを開発しよう、とする開発技法である。
このBDDが求められてきた背景として次の二つがあげられる。
① TDDへの批判、改善要求(4.8 TDDの課題 を参照)
② 顧客要求を顧客にも理解できる形式で記述し、それに基づき
テストをしたい、との基本的要請への対応
BDDという言葉は、上記①を意識したもので、TDDの利点を取り込
み、欠点を改善しようとの考え方に基づく。
一方、②は、古くから現在に至るまで継続的に追及されてきたテーマ
であり、その実現方式が多様な形態で発展してきた。現代的には、
DSL(Domain Specific Language)と表現されることが多い。
BDDとDSLは、表現形式は異なるが考え方に共通する部分が多い。
BDDのBehavior = DSLのDomain Specification +テストシナリオ
と捉えられる。
65.
65Copyright (C) MasanoriKataoka, All Rights Reserved.
9.BDDとJBehave
9.2 BDDの考え方
BDD(Behavior Driven Development)は、4.8に述べたTDDに対す
る批判に基づいて生まれた開発技法である。
1) BDD: BDDは、顧客他(Stakeholders)の観点からの振る舞い
(Behavior)の記述に基づくソフトウェアの開発技法である。
Behaviorを先に記述し、それに基づきコードを書き、テストを実行
する。
2) BDDの3原則
a) It’s all behavior: コードレベルであっても、アプリケーションレベル
であっても、どのような粒度であっても、常に 振る舞い(behavior )
の観点で考える。
b) Deliver Stakeholder value: 顧客等関与者にとって価値のある
ものを開発、提供する。それ以外のものは開発、提供しない。
c) Enough is enough: やるべきことはきちんとやる。しかし、それ
以上の無駄なことはやらない。浪費になる。
79Copyright (C) MasanoriKataoka, All Rights Reserved.
1) 「現場で使えるソフトウェアテスト Java編」 町田欣史、高橋和也、小堀一雄、飯
山教史 2008年 翔泳社
2) “The ThoughtWorks Anthology-Essays on Software Technology and
Innovation” R. Singham, M. Fowler, et al. 2005 by O’Reilly
「ThoughtWorksアンソロジー」 (訳)オージス総研 2008年 オライリー・ジャ
パン
3) “Agile Testing: A Practical Guide for Testers and Agile Teams” L. Crispin,
J. Gregory 2009 by Pearson Education, Inc. 「実践アジャイルテスト:テス
ターとアジャイルチームのための実践ガイド」 (訳)榊原 彰 他 翔泳社
4) “The RSpec Book: Behavior-Driven Development with RSpec, Cucumber,
and Friends” David Chelimsky 2010 The Pragmatic Bookshelf
5) 「はじめる! Cucumber」 諸橋恭介 2010.12.09版 達人出版会
(電子ブック)
6) Cucumberのblogから転載: http://blog.geekdaily.org/2009/06/cucumber-
webrat-who-names-these-things.html
7) JBehave Official Site: http://jbehave.org/
8) Selenium Official Site: http://www.seleniumhq.org/
<以上>