(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-06-12
(45)【発行日】2023-06-20
(54)【発明の名称】ソフトウェアの操作シナリオの生成を支援するプログラム、方法およびソフトウェアの操作シナリオの生成を支援する装置
(51)【国際特許分類】
G06F 11/36 20060101AFI20230613BHJP
G06F 8/30 20180101ALI20230613BHJP
【FI】
G06F11/36 184
G06F8/30
(21)【出願番号】P 2019123702
(22)【出願日】2019-07-02
【審査請求日】2022-06-06
【新規性喪失の例外の表示】特許法第30条第2項適用 平成30年 7月 3日 Microsoft CorporationのVisual Studio Marketplaceのウェブサイト「https://marketplace.visualstudio.com/items?itemName=Codeer.TestAssistantPro」を通じて公開 平成30年 7月 4日 株式会社Codeerのウェブサイト 「https://www.codeer.co.jp/」および「https://www.codeer.co.jp/Tools/TestAssistantPro」を通じて公開 平成30年 7月 4日 GitHub,Incのウェブサイト 「https://github.com/Codeer-Software/TestAssistantPro」および「https://github.com/Codeer-Software/TestAssistantPro.Samples」を通じて公開 平成30年 7月 5日および6日 ET & IoT Technology West 2018にて公開 平成30年 9月28日 Developers Summit 2018 KANSAIにて公開 平成30年11月10日 わんくま同盟 大阪勉強会 #74にて公開 平成30年12月22日 meetup app osaka@3にて公開 平成31年 1月26日 BuriKaigi2019にて公開 平成31年 2月19日 はてなブログのウェブサイト「http://ishikawa-tatsuya.hatenablog.com/entry/2019/02/19/123109」を通じて公開 平成31年 2月21日 第三回 Friendly勉強会にて公開 平成31年 3月 8日 デスクトップアプリ向け.NET Core 3対応セミナーにて公開 平成31年 3月10日 テスト自動化向けライブラリ”Friendly”勉強会 at 東京 vol1.にて公開 令和 1年 5月29日および30日 de:code 2019にて公開
(73)【特許権者】
【識別番号】519241314
【氏名又は名称】株式会社Codeer
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】石川 達也
【審査官】武田 広太郎
(56)【参考文献】
【文献】特開2011-159113(JP,A)
【文献】特開2013-149178(JP,A)
【文献】特開2009-205242(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/36
G06F 3/04842
G06F 8/30
(57)【特許請求の範囲】
【請求項1】
コンピューターを制御するプログラムであって、前記プログラムは前記コンピューターに、
1以上のコントロールを含み、前記コンピューターのモニターに表示されているGUI(Graphical User Interface)の情報を取得するステップと、
前記1以上のコントロールの各々をそれぞれ操作する1以上のコントロールドライバーを含むGUIドライバーを選択するステップと、
取得した前記GUIの情報と、前記1以上のコントロールドライバーとに基づいて、前記1以上のコントロールの中から、キャプチャー対象となるコントロールを選択するステップと、
前記選択されたコントロールが受け付けた操作をキャプチャーするステップと、
前記1以上のコントロールドライバーの各々に対応する操作コード生成プログラムを呼び出すステップと、
前記キャプチャーの結果に基づいて、前記1以上のコントロールドライバーのいずれかに対応する操作コードを生成するステップと、
前記操作コード生成プログラムから、前記GUIのイベント発生時または前記コントロールに関連するデータの変化時に、前記操作コード生成プログラムが生成する操作コードを受信するステップとを実行させる、プログラム。
【請求項2】
前記1以上のコントロールドライバーの各々は、前記1以上のコントロールの各々を外部から操作するクラスであり、
前記GUIドライバーは、
前記1以上のコントロールドライバーをメソッドまたはプロパティとして含むクラスであり、
前記GUIの情報に含まれる前記1以上のコントロールの各々を指定する情報と、前記1以上のコントロールドライバーの各々とを関連付けており、
前記操作コードは、前記1以上のコントロールドライバーのいずれかのメソッドまたはプロパティを含む、請求項1に記載のプログラム。
【請求項3】
前記1以上のコントロールドライバーは、ユーザーにより定義されたカスタムコントロールドライバーを含む、請求項1または2に記載のプログラム。
【請求項4】
前記プログラムは前記コンピューターに、
前記1以上のコントロールドライバーを含む外部プログラムを読み込むステップをさらに実行させる、請求項1~3のいずれかに記載のプログラム。
【請求項5】
前記プログラムは前記コンピューターに、
前記操作コードを実行した場合の出力結果を確認するための確認コードを生成するステップをさらに実行させ、
前記確認コードは、前記1以上のコントロールドライバーのいずれかのメソッドまたはプロパティを含む、請求項1~
4のいずれかに記載のプログラム。
【請求項6】
ソフトウェアの操作コードを生成する方法であって、
1以上のコントロールを含み、コンピューターのモニターに表示されているGUIの情報を取得するステップと、
前記1以上のコントロールの各々をそれぞれ操作する1以上のコントロールドライバーを含むGUIドライバーを選択するステップと、
取得した前記GUIの情報と、前記1以上のコントロールドライバーとに基づいて、前記1以上のコントロールの中から、キャプチャー対象となるコントロールを選択するステップと、
前記選択されたコントロールが受け付けた操作をキャプチャーするステップと、
前記1以上のコントロールドライバーの各々に対応する操作コード生成プログラムを呼び出すステップと、
前記キャプチャーの結果に基づいて、前記1以上のコントロールドライバーのいずれかに対応する操作コードを生成するステップと、
前記操作コード生成プログラムから、前記GUIのイベント発生時または前記コントロールに関連するデータの変化時に、前記操作コード生成プログラムが生成する操作コードを受信するステップとを含む、方法。
【請求項7】
ユーザーからの操作を受け付ける入力部と、
GUIを表示する表示部と、
1以上のGUIドライバーを格納するメモリーと、
制御部とを備え、
前記制御部は、
前記表示部に表示されている1以上のコントロールを含む前記GUIの情報を取得し、
前記メモリーを参照し、前記1以上のコントロールの各々をそれぞれ操作する1以上のコントロールドライバーを含む前記GUIドライバーを選択し、
取得した前記GUIの情報と、前記1以上のコントロールドライバーとに基づいて、前記1以上のコントロールの中から、キャプチャー対象となるコントロールを選択し、
前記選択されたコントロールが前記入力部から受け付けた操作をキャプチャーし、
前記1以上のコントロールドライバーの各々に対応する操作コード生成プログラムを呼び出し、
前記キャプチャーの結果に基づいて、前記1以上のコントロールドライバーのいずれかに対応する操作コードを生成
し、
前記操作コード生成プログラムから、前記GUIのイベント発生時または前記コントロールに関連するデータの変化時に、前記操作コード生成プログラムが生成する操作コードを受信する、装置。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、ソフトウェアの操作シナリオの生成に関し、より特定的には、グラフィカルユーザーインターフェイスの操作シナリオの生成を支援する技術に関する。
【背景技術】
【0002】
PC(Personal Computer)、スマートフォンおよびタブレット等の機器には、多くのアプリケーションがインストールされる。これらの機器にインストールされるアプリケーションは、所謂ネイティブアプリケーションと呼ばれる。これらのネイティブアプリケーションは、一般的に、GUI(Graphical User Interface)を含む。GUIは、入力フォームやボタン等を有し、視覚的および直感的に操作することができるユーザーインターフェイスである。
【0003】
さらに、近年、ネットワークの高速化およびクラウドの発展等により、ウェブアプリケーションが多く使用されている。ウェブアプリケーションにおいて、サーバーは、ウェブアプリケーションの画面をユーザーの持つ機器に配信する。ユーザーは、配信された画面を操作することで、ウェブアプリケーションの機能を使用することができる。このようなウェブアプリケーションの画面は、ブラウザによって視覚的に表示されることが多い。
【0004】
上記のように、近年、多くのソフトウェアは、GUIを含むことが多い。これ以降の説明では、GUIを含むネイティブアプリケーションおよびウェブアプリケーションを総称して、「GUIアプリケーション」と呼ぶ。プログラマーは、開発したGUIアプリケーションおよびGUIアプリケーションの操作に基づくアプリケーションの内部動作等をテストする必要がある。
【0005】
GUIアプリケーションの自動テスト手法には、大きく分けて2種類あり、1つ目は、プログラマーが手書きの操作シナリオを用意する方法である。操作シナリオとは、複数のアプリケーションの操作コードを順次実行する一連の処理を指す。以降の説明では、アプリケーションのテストに使用される操作コードおよび操作シナリオをそれぞれ「テストコード」および「テストシナリオ」と呼ぶ。手書きのテストシナリオを作成する方法は、可読性の高いテストシナリオを生成できるという利点があるが、その反面、テストシナリオを作成できるプログラマーが限られるという問題があった。2つ目は、GUI操作のキャプチャーリプレイソフトを使用する方法である。この方法は、手書きのテストコードを用意する方法と比較して、作業難易度は低くなるという利点はあるが、その反面、キャプチャーリプレイソフトが生成したテストコードは可読性が低く、メンテナンス性が低いという問題があった。そのため、より効率的なGUIのテスト手法が求められている。
【0006】
その他にも、近年、IT(Information Technology)業務の効率化が加速している。そのため、従来、職員がGUIアプリケーションを使ってデータの入出力をしていた業務の自動化、所謂RPA(Robotic Process Automation)が進んでいる。RPAにおいても、GUIアプリケーションの操作シナリオを効率よく作成する手段が求められている。
【0007】
GUIの操作シナリオの作成手法に関し、例えば、特開2011-048714号公報(特許文献1)は、「グラフィカル・ユーザ・インターフェースの指定状態を検出するコマンドを付加した共通様式のシナリオを、グラフィカル・ユーザ・インターフェースに応じた様式のコマンドに変更して、指示するステップと、グラフィカル・ユーザ・インターフェースの状態が指定状態であるか判断するステップと、判断するステップで、グラフィカル・ユーザ・インターフェースが指定状態にあるとコマンドを実行するステップとを含む」テスト支援方法を開示している([要約]参照)。
【先行技術文献】
【特許文献】
【0008】
【発明の概要】
【発明が解決しようとする課題】
【0009】
特許文献1に開示された技術によると、効率的に可読性およびメンテナンス性の高い操作シナリオを生成することができない。したがって、効率的に可読性およびメンテナンス性の高い操作シナリオを生成する技術が必要とされている。
【0010】
本開示は、上記のような背景に鑑みてなされたものであって、ある局面における目的は、効率的に可読性およびメンテナンス性の高い操作シナリオを生成する技術を提供することにある。
【課題を解決するための手段】
【0011】
ある実施の形態に従うと、コンピューターを制御するプログラムが提供される。このプログラムはコンピューターに、1以上のコントロールを含み、コンピューターのモニターに表示されているGUI(Graphical User Interface)の情報を取得するステップと、1以上のコントロールの各々をそれぞれ操作する1以上のコントロールドライバーを含むGUIドライバーを選択するステップと、取得したGUIの情報と、1以上のコントロールドライバーとに基づいて、1以上のコントロールの中から、キャプチャー対象となるコントロールを選択するステップと、選択されたコントロールが受け付けた操作をキャプチャーするステップと、キャプチャーの結果に基づいて、1以上のコントロールドライバーのいずれかに対応する操作コードを生成するステップとを実行させる。
【0012】
ある局面において、1以上のコントロールドライバーの各々は、1以上のコントロールの各々を外部から操作するクラスである。GUIドライバーは、1以上のコントロールドライバーをプロパティとして含むクラスであり、GUIの情報に含まれる1以上のコントロールの各々を指定する情報と、1以上のコントロールドライバーの各々とを関連付けている。操作コードは、1以上のコントロールドライバーのいずれかのメソッドまたはプロパティを含む。
【0013】
ある局面において、1以上のコントロールドライバーは、ユーザーにより定義されたカスタムコントロールドライバーを含む。
【0014】
ある局面において、プログラムはコンピューターに、1以上のコントロールドライバーを含む外部プログラムを読み込むステップをさらに実行させる。
【0015】
ある局面において、プログラムはコンピューターに、1以上のコントロールドライバーの各々に対応する操作コード生成プログラムを呼び出すステップと、操作コード生成プログラムから、GUIのイベント発生時またはコントロールに関連するデータの変化時に、操作コード生成プログラムが生成する操作コードを受信するステップとをさらに実行させる。
【0016】
ある局面において、プログラムはコンピューターに、操作コードを実行した場合の出力結果を確認するための確認コードを生成するステップをさらに実行させる。確認コードは、1以上のコントロールドライバーのいずれかのメソッドまたはプロパティを含む。
【0017】
他の実施の形態に従うと、ソフトウェアの操作コードを生成する方法が提供される。この方法は、1以上のコントロールを含み、コンピューターのモニターに表示されているGUIの情報を取得するステップと、1以上のコントロールの各々をそれぞれ操作する1以上のコントロールドライバーを含むGUIドライバーを選択するステップと、取得したGUIの情報と、1以上のコントロールドライバーとに基づいて、1以上のコントロールの中から、キャプチャー対象となるコントロールを選択するステップと、選択されたコントロールが受け付けた操作をキャプチャーするステップと、キャプチャーの結果に基づいて、1以上のコントロールドライバーのいずれかに対応する操作コードを生成するステップとを含む。
【0018】
他の実施の形態に従うと、ソフトウェアの操作コードを生成する装置が提供される。この装置は、ユーザーからの操作を受け付ける入力部と、GUIを表示する表示部と、1以上のGUIドライバーを格納するメモリーと、制御部とを備える。制御部は、表示部に表示されている1以上のコントロールを含むGUIの情報を取得し、メモリーを参照し、1以上のコントロールの各々をそれぞれ操作する1以上のコントロールドライバーを含むGUIドライバーを選択し、取得したGUIの情報と、1以上のコントロールドライバーとに基づいて、1以上のコントロールの中から、キャプチャー対象となるコントロールを選択し、選択されたコントロールが入力部から受け付けた操作をキャプチャーし、キャプチャーの結果に基づいて、1以上のコントロールドライバーのいずれかに対応する操作コードを生成する。
【発明の効果】
【0019】
本技術によれば、効率的に可読性およびメンテナンス性の高いソフトウェアの操作シナリオを生成することが可能である。
【0020】
この発明の上記および他の目的、特徴、局面および利点は、添付の図面と関連して理解されるこの発明に関する次の詳細な説明から明らかとなるであろう。
【図面の簡単な説明】
【0021】
【
図1】ある実施の形態に従う自動化支援プログラムによるテストシナリオ生成の概要の一例を示す図である。
【
図2】装置100のハードウェア構成の一例を示す図である。
【
図3】ある実施の形態に従う自動化支援プログラムの構成の一例を示す図である。
【
図4】PCで動作するネイティブアプリケーション400の一例を示す図である。
【
図5】GUIドライバー301の第1の例を示す図である。
【
図6】ウェブアプリケーションのGUI600の一例を示す図である。
【
図7】GUIドライバー301の第2の例を示す図である。
【
図8】キャプチャージェネレイター303の動作概要の一例を示す図である。
【
図10】生成されたテストシナリオ1001をエディタ等に貼り付けた例を示す図である。
【
図11】自動化支援プログラム300の通信処理の手順の一例を示す図である。
【
図12】自動化支援プログラム300のテストシナリオ生成の処理手順の一例を示す図である。
【発明を実施するための形態】
【0022】
以下、図面を参照しつつ、本開示に係る技術思想の実施の形態について説明する。以下の説明では、同一の部品には同一の符号を付してある。それらの名称および機能も同じである。したがって、それらについての詳細な説明は繰り返さない。
【0023】
以降の説明では、本実施の形態に従う自動化支援プログラムによるGUIアプリケーションのテストコードおよびテストシナリオの作成手順について説明する。RPA用(GUIアプリケーションの操作自動化用)の操作コードおよび操作シナリオに関しても、検証用コードが不要な点を除けば、同様の手順で作成可能である。
【0024】
図1は、本実施の形態に従う自動化支援プログラムによるテストシナリオ生成の概要の一例を示す図である。本実施の形態に従う自動化支援プログラムは、アプリケーションに含まれるGUIのテストを支援するためのものであり、従来よりも少ない工数で可読性およびメンテナンス性に優れたテストシナリオを生成し得る。
【0025】
自動化支援プログラムは、単体で動作してもよいし、他のソフトウェアと連携して動作してもよい。一例として、他のソフトウェアは、アプリケーション開発用のエディタまたは統合開発環境(以下、IDE(Integrated Development Environment)と呼ぶ)であってもよい。ある局面において、自動化支援プログラムは、ウェブアプリケーションとして提供されてもよい。以降の説明では、自動化支援プログラムがIDEと連携してアプリケーション102のテストシナリオを生成する例を説明する。
【0026】
装置100は、自動化支援プログラムを実行する。ある局面において、装置100は、PC、ワークステーション、タブレットまたはスマートフォン等であってもよい。他の局面において、装置100は、サーバーまたはクラウド上で仮想的に構成された装置等であってもよい。
【0027】
IDE101は、エディタ、デバッガおよびコンパイラ等のアプリケーション開発に必要な機能を備えた開発用ソフトウェアである。IDE101は、プラグインまたはエクステンション等と呼ばれるソフトウェアまたはファイルを読み込むことにより、機能を拡張することができる。本実施の形態においては、自動化支援プログラムは、プラグインとしてIDE101と連携するものとして説明するが、自動化支援プログラムの実現方法はこれに限られない。ある局面において、自動化支援プログラムは、IDE101とは別に起動されるソフトウェアであってもよいし、自動化支援プログラムおよびIDE101が1つのアプリケーションとして提供されてもよい。
【0028】
アプリケーション102は、テスト対象となる事前に開発されたアプリケーションであり、GUIを含む。アプリケーション102は、装置100によりテスト実行される。ある局面において、アプリケーション102は、PC等で動作するスタンドアロンのネイティブアプリケーションであってもよい。他の局面において、アプリケーション102は、装置100上でエミュレートされたスマートフォンまたはタブレット等の機器上で動作するGUIを含むネイティブアプリケーションであってもよい。他の局面において、アプリケーション102は、ブラウザ等のHTML(Hyper Text Markup Language)を表示するソフトウェア上で実行されるウェブアプリケーションのフロント部分であってもよい。
【0029】
アプリケーション102のGUIは、操作可能なテキストボックス、ボタンおよびプルダウン等の各種部品を含む。本実施の形態において、これらの部品をコントロールと呼ぶ。ある局面において、コントロールは、ウェブアプリケーションのHTMLで表現されたテキストボックス、ボタンおよびプルダウン等の各種部品も包含する。
【0030】
アプリケーション102は、上記のコントロールを貼り付けたパネルとして表現されることが多く、これらのコントロールを貼り付ける枠の役割を果たす部品をウィンドウと呼ぶこともある。これらの枠となる部品は、入れ子型に配置することもできる。アプリケーション102は、これらコントロールと、ウィンドウ等の枠となる部品との組み合わせによって実現され得る。ウェブアプリケーションは、HTMLのタグによって構成されるウィンドウ等の枠に相当する部品を含み得る。
【0031】
アプリケーション102のテストの手順は、大きく分けて、ドライバーの作成、キャプチャー、テストシナリオの実行の3つを含む。以下に、これらの3つの手順について概要を説明する。
【0032】
(手順1 ドライバーの作成)
ここではアプリケーション102を操作するソフトウェアをドライバーと呼ぶ。ある局面において、ドライバーは、なんらかのプログラミング言語で定義されたクラスであってもよい。より具体的には、ドライバーは、各コントロールに対応するコントロールドライバーと、各ウィンドウまたは各GUIに対応するGUIドライバー(ウィンドウドライバー)とを含む。以下、一例として、ドライバーは、クラスであるものとして説明する。
【0033】
最初に、ユーザーは、アプリケーション102のGUIに対応するGUIドライバーを用意または定義する必要がある。自動化支援プログラムは、GUIドライバー作成のための半自動生成機能または完全な自動生成機能を提供し得る。
【0034】
コントロールドライバーは、アプリケーション102のGUIに含まれる個別のコントロールに対応する。より具体的には、コントロールドライバーは、他のアプリケーションのコントロールを外部から操作することができる。コントロールドライバーは、内部に当該コントロールドライバーに対応するコントロールを操作するためのメソッドまたはプロパティを含む。自動化支援プログラムは、コントロールドライバーのメソッドまたはプロパティを呼び出すことで、アプリケーション102の各コントロールを外部から操作することができる。一例として、ボタンのコントロールドライバーであれば、他のアプリケーション内のボタンを操作することができる。ボタン以外にも、テキストボックス、ラベル、チェックボックスおよびラジオボタン等の任意のコントロールに対応する複数のコントロールドライバーが定義され得る。
【0035】
ある局面において、特定のOS上で動作するアプリケーションに使用され得る全てまたは一部のコントロールの各々に対応する複数のコントロールドライバーがそれぞれ予めクラスとして定義されていてもよい。他の局面において、ウェブアプリケーションに使用され得る全てまたは一部のコントロールの各々に対応する複数のコントロールドライバーのそれぞれが予めクラスとして定義されていてもよい。
【0036】
GUIドライバーは、テスト対象となるアプリケーションの個別のGUIに対応し得る。一例として、アプリケーション102が、操作画面としてGUI(1)、GUI(2)およびGUI(3)を含む場合、GUI(1)、GUI(2)およびGUI(3)の各々に対応したGUIドライバーが定義され得る。
【0037】
GUIドライバーは、当該GUIドライバーに対応するGUIが含む1以上のコントロールに対応する1以上のコントロールドライバーをプロパティもしくはメソッドとして含み得る。GUIドライバーは、コントロールドライバーをクラスのプロパティとして含み得る。一例として、GUIドライバー(A)は、GUI(A)に対応しているとする。GUI(A)が、コントロール(X),(Y),(Z)を含む場合、GUIドライバー(A)は、コントロール(X),(Y),(Z)にそれぞれ対応するコントロールドライバー(X),(Y),(Z)をプロパティとして含み得る。GUIドライバー(A)は、これらのコントロールドライバー(X)~(Z)を含むことにより、GUI(A)に含まれる各種コントロール(X)~(Z)を操作することが可能になる。さらに、GUIドライバーは、他のGUIドライバーをプロパティもしくはメソッドとして含み得る。ある局面において、テスト対象のGUI(M)の画面の一部(N)に対応するGUIドライバー(N)があるとする。この場合、GUI(M)に対応するGUIドライバー(M)は、GUIドライバー(N)を、プロパティもしくはメソッドとして含み得る。すなわち、画面全体に対応するGUIドライバー(M)は、画面の一部に対応するGUIドライバー(N)を含み得る。
【0038】
GUIドライバーは、対応するGUIが含む全てのコントロールの各々に対応するコントロールドライバーを含む必要は無く、GUIが含む一部のコントロールに対応するコントロールドライバーのみを含んでいてもよい。一例として、上記のGUIドライバー(A)は、コントロールドライバー(X)~(Z)をプロパティとして含み得るが、その一部であるコントロールドライバー(X)のみを含んでいてもよい。
【0039】
さらに、GUIドライバーは、アプリケーション102の各コントロールをそれぞれ指定するための情報と、各コントロールドライバーとをそれぞれ関連付けている。一例として、Microsoft(商標登録)社のWPF(Windows Presentation Foundation)機能を使ったアプリケーション102であれば、WPFに関する情報が、各コントロールをそれぞれ指定するための情報として使用され得る。ウェブアプリケーションであれば、HTMLタグに指定されるID(Identifier)等が各コントロールをそれぞれ指定するための情報として使用され得る。
【0040】
ある局面において、各コントロールをそれぞれ指定するための情報は、各コントロールドライバーに引数として渡されてもよいが、関連付け方法はこれに限られない。各コントロールをそれぞれ指定するための情報と、各コントロールドライバーとの関連付けは、任意の方法によって実行され得る。
【0041】
上記のように、GUIドライバーは、各コントロールをそれぞれ指定するための情報と、各コントロールドライバーとをそれぞれ関連付けることで、「各コントロールをそれぞれ指定するための情報」を隠蔽し得る。後述するテストコードは、GUIドライバーに含まれるコントロールドライバーのメソッドまたはプロパティを含む。そのため、GUIの仕様に変更が発生した場合でも、ユーザーはGUIドライバー内部の記載を変更するだけでテストコードを使用することができ、テストコードは極めて高いメンテナンス性を有する。
【0042】
さらに、コントロールドライバーは、「コントロールを直接操作する処理」をメソッドとして隠蔽し得る。ユーザーは、コントロールドライバーのインスタンス名、メソッド名等を自由に定義できる。そのため、コントロールドライバーのメソッドまたはプロパティを含むテストコードは、極めて高い可読性を有する。
【0043】
ある局面において、コントロールドライバーは、ライブラリまたは外部リンクに含めて再利用可能な形式で提供され得る。ユーザーは、これらの提供されるコントロールドライバーを利用して、アプリケーション102のGUIに対応するGUIドライバーを定義し得る。さらに、ユーザーは、独自のコントロールドライバーを定義し得る。ユーザーは、任意のコントロールに対して、自身で定義したメソッドを含むコントロールドライバーを定義することができる。コントロールドライバーは、これらのユーザー定義のカスタムコントロールドライバーを含むことにより、任意のコントロールを操作することができる。
【0044】
他の局面において、自動化支援プログラムは、各コントロールをそれぞれ指定するための情報と、予め用意されたコントロールドライバーとに基づいて、GUIドライバーを自動で生成してもよい。
【0045】
自動化支援プログラムは、各コントロールをそれぞれ指定するための情報を取得するために、例えば、Codeer社が提供するライブラリFriendlyを用いてもよいし、Seleniumを用いてもよい。自動化支援プログラムは、これらのソフトウェアを内部に組み込んでもよいし、これらのソフトウェアと連携してもよい。ユーザーは、生成されたGUIドライバーをそのまま使用してもよいし、編集してもよい。具体的なGUI、コントロールドライバーおよびGUIドライバーの例は後述する。
【0046】
(手順2 キャプチャー)
次に、ユーザーは、アプリケーション102のGUIをテストするためのテストシナリオを用意する。自動化支援プログラムは、テストシナリオ作成のためのキャプチャー機能を提供する。ここでのキャプチャーとは、テスト対象のGUIの各コントロールの状態を取得することである。状態とは、イベントの発生または各コントロールに関連するデータ(入力フォームに入力された値等)の変化等を含み得る。
【0047】
上述したように、テストシナリオは、テストコードを含む。テストコードは、アプリケーション102のGUIに含まれるコントロールの操作および検証コードを定義する。テストシナリオは、これらコントロールの操作および検証コードを定義するテストコード以外にも、ユーザー定義の任意のコードを含み得る。一例として、テストコード(A),(B),(C)を順番に実行するテストシナリオ(T1)があるとする。テストコード(A)は、テキストボックス(A)に何らかの文字列を書き込む機能を有する。テストコード(B)は、テキストボックス(B)にEメールアドレスを書き込む機能を有する。テストコード(C)は、送信ボタン(C)を押す機能を有する。この場合、テストシナリオ(T1)は、アプリケーション102のGUIに対して、メール本文と宛先アドレスとを設定して、メールを送信することになる。
【0048】
ユーザーは、これらのテストコード(A)~(C)を含むテストシナリオ(T1)を手動で書くことも可能であるが、手動でテストシナリオを作成した場合、プログラマーの作業工数が増えてしまう。そこで、自動化支援プログラムは、アプリケーション102のGUIの操作をキャプチャーし、当該操作に対応するテストコードを生成する機能を提供する。
【0049】
ある局面において、自動化支援プログラムは、アプリケーション102のGUIの操作をキャプチャーするとき、FriendlyまたはSelenium等を用いて、操作されたコントロールに関する情報を取得してもよい。
【0050】
自動化支援プログラムは、キャプチャー結果に基づいて、コントロールドライバーに基づくテストコードを生成する。より具体的には、コントロールドライバーのクラスに含まれるメソッドまたはプロパティを呼び出すテストコードを生成する。一例として、アプリケーション102のGUIに含まれるボタンが押された場合、自動化支援プログラムは、ボタンを押すテストコードを生成する。このテストコードは、「ボタンに対応するコントロールドライバーのクラス」が有する「ボタンを押す操作を実行するメソッド」を呼び出す。
【0051】
上記のように、自動化支援プログラムが生成するテストコードは、コントロールドライバー(クラス)のメソッドまたはプロパティを含むため、従来のキャプチャーリプレイソフトの生成するテストコードと比較して、極めて高い可読性を有する。さらに、GUIドライバーが、各コントロールをそれぞれ指定するための情報を隠蔽しているため、テストコードは、高いメンテナンス性も有する。自動化支援プログラムは、一連のキャプチャー結果に基づいて生成された複数のテストコードを含むテストシナリオをユーザーに提供する。具体的なテストコードの例は後述する。
【0052】
(手順3 テストシナリオの実行)
次に、ユーザーは、装置100にテストシナリオを実行させて、アプリケーション102の動作を確認する。装置100は、手書きのテストシナリオと同様に、自動化支援プログラムによって生成されたテストシナリオを実行することができる。
【0053】
ある局面において、自動化支援プログラムによって生成されたテストシナリオは、プログラミング用のエディタ、IDEまたはコンソールアプリケーション等によって実行されてもよい。他の局面において、自動化支援プログラムが、テストシナリオを実行してもよい。
【0054】
図2は、装置100のハードウェア構成の一例を示す図である。
図2を参照して、装置100のハードウェア構成と、各構成の機能とについて説明する。装置100は、上述したとおり、例えば、PCまたはワークステーション等である。ユーザーは、装置100を用いて、アプリケーション102のテストを実行する。
【0055】
装置100は、制御装置201と、RAM(Random Access Memory)202と、入力インターフェイス203と、出力インターフェイス204と、外部機器インターフェイス205と、通信インターフェイス206と、記憶装置207とを含む。
【0056】
制御装置201は、装置100を制御し、自動化支援プログラム、アプリケーション102および各種プログラミングツール等を実行する。制御装置201は、例えば、少なくとも1つの集積回路によって構成される。集積回路は、例えば、少なくとも1つのCPU(Central Processing Unit)、少なくとも1つのASIC(Application Specific Integrated Circuit)、少なくとも1つのFPGA(Field-Programmable Gate Array)、またはこれらの組み合わせ等によって構成される。
【0057】
RAM202は、制御装置201によって実行されるプログラムと、制御装置201によって参照されるデータとを格納する。ある局面において、DRAM(Dynamic Random Access Memory)またはSRAM(Static Random Access Memory)が、RAM202として使用されてもよい。制御装置201は、アプリケーション102、自動化支援プログラムおよびその他のプログラミングツール等をRAM202から読み込んで実行する。
【0058】
入力インターフェイス203は、キーボード、マウスまたはゲームパッド等の任意の入力装置に接続され得る。ある局面において、USB(Universal Serial Bus)端子、PS/2端子およびBluetooth(登録商標)モジュール等が入力インターフェイス203として使用されてもよい。ユーザーは、入力インターフェイス203を介して、自動化支援プログラムに対するキャプチャー実行命令等を装置100に入力する。
【0059】
出力インターフェイス204は、ブラウン管ディスプレイ、液晶ディスプレイまたは有機EL(electro-luminescence)ディスプレイ等の任意の出力装置に接続され得る。ある局面において、USB(Universal Serial Bus)端子、D-sub端子、DVI端子およびHDMI(登録商標)端子等が出力インターフェイス204として使用されてもよい。ユーザーは、出力インターフェイスを介して、液晶ディスプレイ等に表示されたアプリケーション102およびテストシナリオの実行結果等を確認することで、アプリケーション102の動作確認を行う。
【0060】
外部機器インターフェイス205は、プリンター、スキャナーおよび外付けHDD(Hard Disk Drive)等の任意の外部機器に接続され得る。ある局面において、USB(Universal Serial Bus)端子等が外部機器インターフェイス205として使用されてもよい。
【0061】
通信インターフェイス206は、有線または無線のネットワーク機器と接続される。ある局面において、有線LAN(Local Area Network)ポートおよびWi-Fi(登録商標)モジュール等が通信インターフェイス206として使用されてもよい。
【0062】
記憶装置207は、不揮発性の記憶媒体であり、装置100の電源が切れた後もデータを保存しておくことができる。記憶装置207は、制御装置201によって実行されるプログラムと、制御装置201によって参照されるデータとを格納する。ある局面において、HDDおよびSSD(Solid State Drive)が記憶装置207として使用されてもよい。自動化支援プログラムによって生成されたGUIドライバーおよびテストシナリオ等は、記憶装置207に保存され得る。
【0063】
図3は、本実施の形態に従う自動化支援プログラム300の構成の一例を示す図である。自動化支援プログラム300は、GUIドライバー301と、コントロールドライバー302と、キャプチャージェネレイター303とを含む。
【0064】
GUIドライバー301は、上述したように、テスト対象となるアプリケーションの個別のGUIに対応するクラスである。GUIドライバー301は、テスト対象となるアプリケーションのGUIごとに作成される。そのため、GUIドライバー301は、テスト対象となるアプリケーションのGUIの数だけ、自動または手動によって生成され得る。ある局面において、自動化支援プログラム300は、全てまたは一部のGUIドライバー301を外部プログラムとして読み込んでもよい。
【0065】
コントロールドライバー302は、上述したように、GUIに含まれ得る個別のコントロールに対応するクラスである。特定のOS上で動作するアプリケーションまたはウェブアプリケーションに使用される全てのコントロールの各々に対応する複数のコントロールドライバー302が事前に定義されてもよい。ある局面において、自動化支援プログラム300は、コントロールドライバー302を外部プログラムとして読み込んでもよい。例えば、コントロールドライバー302は、各種コントロールという汎用的な部品に対応しており、DLL(Dynamic Link Library)等に組み込まれて外部プログラムとして使用されることで、ユーザーの利便性が向上する。
【0066】
キャプチャージェネレイター303は、テストコードを生成するプログラムであり、コントロールごとに定義され得る。各キャプチャージェネレイター303は、各コントロールドライバー302にそれぞれ対応する。一例として、ボタンのキャプチャージェネレイター303は、ボタンのコントロールドライバー302に対応する。他の例として、テキストボックスのキャプチャージェネレイター303は、テキストボックスのコントロールドライバー302に対応する。
【0067】
ユーザーは、キャプチャージェネレイター303も、コントロールドライバー302と同様に独自に定義することができる。自動化支援プログラム300は、ユーザー定義の任意のコントロールドライバー302およびキャプチャージェネレイター303を使用し得る。
【0068】
キャプチャージェネレイター303は、テスト対象のアプリケーションのGUIに含まれるコントロールが操作されたときに、当該操作に対応するテストコードを生成する。ある局面において、自動化支援プログラム300は、テスト対象のアプリケーションにキャプチャージェネレイター303を送信してもよい。この場合、テスト対象のアプリケーションのGUIに含まれるコントロールが操作されたとき(イベントが発生またはコントロールに関連するデータに変化が発生したとき)、テスト対象のアプリケーション内でキャプチャージェネレイター303が実行される。キャプチャージェネレイター303は、テストコードを生成し、当該テストコードを自動化支援プログラム300に送信する。
【0069】
他の局面において、自動化支援プログラム300は、FriendlyまたはSelenium等のソフトウェアの機能を利用して、テスト対象のアプリケーションのイベント発生またはコントロールに関連するデータの変化を常に監視てしておいてもよい。この場合、自動化支援プログラム300は、テスト対象のアプリケーションのGUIに含まれるコントロールが操作されたとき(イベントが発生またはコントロールに関連するデータに変化が発生したとき)、キャプチャージェネレイター303に当該操作に対応するテストコードを生成させる。
【0070】
次に、
図4~
図7を参照して、テスト対象のアプリケーションのGUI、GUIドライバー301およびコントロールドライバー302の詳細について説明する。以下の説明では、PC上で動作するネイティブアプリケーションおよびウェブアプリケーションを例示しているが、タブレットおよびスマートフォン等の他の機器で動作するGUIアプリケーションについても同様の手法を適用できる。
【0071】
図4は、PCで動作するネイティブアプリケーション400の一例を示す図である。ネイティブアプリケーション400は、コントロールの一部として、名前のテキストボックス401と、カレンダー402と、数字入力ボックス403と、Eメールのテキストボックス404と、言語選択のプルダウンメニュー405と、性別選択のラジオボタン406と、エントリーボタン407と、キャンセルボタン408とを含む。ネイティブアプリケーション400のName、Birthday等のラベルおよび画面上部のメニュー等もコントロールであるが、以下の説明には関係しないため、詳細は説明しない。
【0072】
テキストボックス401,404は、文字列の入力を受け付ける。カレンダー402は、年月日の選択操作を受け付ける。数字入力ボックス403は、数値の入力を受け付け、数値のカウントアップ、カウントダウンのボタンを含む。プルダウンメニュー405は、予め定められたメニューの選択操作を受け付ける。ラジオボタン406は、選択肢のうちの1つを選択する操作を受け付ける。エントリーボタン407およびキャンセルボタン408は、押下処理を受け付ける。
【0073】
ユーザーは、上記のネイティブアプリケーション400を作成し、テキストボックス401~キャンセルボタン408までのコントロールを用いたテストを行いたいとする。その場合、一例として、
図5に示すGUIドライバー301のクラス501が必要になる。
【0074】
図5は、GUIドライバー301の第1の例を示す図である。
図5に示されるソースコードは、GUIドライバー301の一部分を示している。ある局面において、自動化支援プログラム300は、GUIドライバー301を使用するとき、当該GUIドライバー301のソースファイルを読み込んでビルドしてもよい。他の局面において、自動化支援プログラム300は、予めビルドされたGUIドライバー301のバイナリファイルを読み込んでもよい。
【0075】
クラス501は、GUIドライバー301を定義する。クラス501は、複数のコントロールドライバー302をコントロールプロパティ502として含み得る。より具体的には、クラス501は、テキストボックス401~キャンセルボタン408までのコントロールの各々に対応する各コントロールドライバー302のインスタンスの作成処理を含む。
【0076】
さらに、クラス501は、「各コントロールをそれぞれ指定するための情報」と、「各コントロールドライバー302のインスタンス」とを対応付けする。
図5の例では、各コントロールをそれぞれ指定するための情報を各コントロールドライバー302に、引数として渡すことで、関連付けている。
【0077】
以降の説明では、区別のために、コントロールドライバー302によって特定されるGUIドライバー301内のインスタンスを「コントロールプロパティ」と呼ぶ。例えば、「Name」,「Birthday」はコントロールプロパティ502である。コントロールプロパティ502に割り当てられるクラスを「コントロールドライバー302」と呼ぶ。例えば、「WPFTextBox」,「WPFCalendar」はコントロールドライバー302である。
【0078】
図5の例では、コントロールプロパティ502は、WPFを用いて作成されたコントロールを操作する機能を有するが、各コントロールドライバー302の機能はこれに限られない。ある局面において、各コントロールドライバー302は、任意のOS、ウェブ等の各種プラットフォームのコントロールごとに定義され得る。
【0079】
クラス501は、テキストボックス401~キャンセルボタン408までのコントロールの各々に対応する各コントロールプロパティ502を含むことにより、外部からネイティブアプリケーション400のコントロール(テキストボックス401~キャンセルボタン408)を操作することができる。
【0080】
各コントロールプロパティ502は、上述したように、任意のOS、ウェブ等の各種プラットフォームのコントロールごとに定義される汎用的なコントロールドライバー302によって作成される。そのため、ユーザーは、GUIドライバー301に、自身の作成したネイティブアプリケーション400に含まれるコントロールに対応するコントロールドライバー302のコントロールプロパティ502(インスタンス)の作成処理を追加するだけでよい。例えば、Name~Cancelまでのインスタンスは、全て事前に用意されているコントロールドライバー302から作成されている。
【0081】
装置100は、実際に自動化支援プログラム300を実行するときに、各コントロールプロパティ502のインスタンス生成時のクラス名(コントロールドライバー302)および引数(各コントロールをそれぞれ指定するための情報)を参照することで、各コントロールプロパティ502が、いずれのコントロールを操作するのか判別することができる。一例として、「Email」は、「WPFTextBox」クラスであり、テキストボックスを操作する。「Email」の引数(各コントロールをそれぞれ指定するための情報)は、「~ByBinding("Mail.Value").Single()」となっており、「Email」は、Eメールのテキストボックス404を操作することがわかる。各コントロールをそれぞれ指定するための情報となる情報は、プラットフォームにより異なる。
【0082】
上述のように、コントロールドライバー302は、GUIドライバー301内で汎用的な部品を操作するコントロールプロパティ502として使用され得る。さらに、自動化支援プログラム300は、ユーザーによって作成された新しいコントロールをテストすることも可能である。自動化支援プログラム300は、ユーザー定義のコントロールドライバー302を使用することで、ユーザー定義のコントロールドライバー302に対応する任意のコントロールのテストコードを生成できる。これらの新しく作成されたコントロールドライバー302は、DLL等に含められて配信されることで、他のユーザーも使用し得る。このように、自動化支援プログラム300は、汎用的なコントロールに対応するコントロールドライバー302以外にも、ユーザー定義のコントロールに対応するコントロールドライバー302を使用し得る。
【0083】
後述するテストコードは、GUIドライバー301に定義された各コントロールプロパティ502のメソッドまたはプロパティを呼び出す。すなわち、本実施の形態において、GUIドライバー301およびコントロールプロパティ502の定義と、テストコードを含むテストシナリオとは分離されている。GUIドライバー301およびコントロールプロパティ502の定義と、テストシナリオとが分離されることにより、テストシナリオの可読性およびメンテナンス性が高くなる。
【0084】
従来のテストシナリオを作成するキャプチャープログラムは、「各コントロールをそれぞれ指定するための情報」および「コントロールを直接操作する処理」を全て含んだ可読性およびメンテナンス性の低いテストコードを生成していた。そのため、アプリケーションの仕様変更が発生した場合、今までに生成された全てのテストコードは使用できなくなった。
【0085】
これに対し、本実施の形態における自動化支援プログラム300は、ネイティブアプリケーション400の仕様が変更されたとしても、コントロールプロパティ502の定義(クラスの型、引数等(各コントロールをそれぞれ指定するための情報))等を変更するだけで、テストシナリオを利用することができる。
【0086】
図6は、ウェブアプリケーションのGUI600の一例を示す図である。ウェブアプリケーションは、ブラウザ等により実行されるため、様々な機器に配信されるアプリケーションとして使用されることも多い。自動化支援プログラム300は、このようなウェブアプリケーションのGUIに関しても、ネイティブアプリケーションのGUIと同様にテストすることができる。
【0087】
ウェブアプリケーション600は、コントロールの一部として、タイトルのテキストボックス601と、放送開始日のテキストボックス602と、ジャンルのテキストボックス603と、値段のテキストボックス604と、保存ボタン605とを含む。
【0088】
ユーザーは、上記のウェブアプリケーションのGUI600を作成し、テキストボックス601~保存ボタン605までのコントロールを用いたテストを行いたいとする。その場合、一例として、
図7に示すGUIドライバー301のクラス701が必要になる。
【0089】
図7は、GUIドライバー301の第2の例を示す図である。
図7に示すソースコードは、GUIドライバー301の一部分を示している。ある局面において、自動化支援プログラム300は、GUIドライバー301を使用するとき、当該GUIドライバー301のソースファイルを読み込んでビルドしてもよい。他の局面において、自動化支援プログラム300は、予めビルドされたGUIドライバー301のバイナリファイルを読み込んでもよい。
【0090】
クラス701は、GUIドライバー301を定義する。クラス701は、複数のコントロールドライバー302をコントロールプロパティ702として含み得る。より具体的には、クラス501は、テキストボックス601~保存ボタン605までのコントロールの各々に対応するコントロールドライバー302のインスタンスの作成処理を含む。
【0091】
図5と
図7とを比較すると、コントロールプロパティ502およびコントロールプロパティ702の記述が異なることがわかる。コントロールプロパティ502は、WPFのコントロールを操作するコントロールドライバー302に、WPFに関する情報を渡している。一方で、コントロールプロパティ702は、ウェブアプリケーションのコントロールを操作するコントロールドライバー302に、ウェブアプリケーションに関する情報を渡している。すなわち、自動化支援プログラム300は、GUIドライバー301内で使用するコントロールドライバー302および当該コントロールドライバー302に渡される情報(各コントロールをそれぞれ指定するための情報)を変更するだけで、様々なプラットフォームに対応することができる。
【0092】
次に、
図8~
図10を参照して、テストシナリオの生成処理について説明する。以降の説明では、
図4のネイティブアプリケーション400を例に説明するが、自動化支援プログラム300は、ウェブアプリケーション600およびその他のプラットフォームのGUIアプリケーションのテストに関しても、同様の手順でテストシナリオを作成できる。
【0093】
図8は、キャプチャージェネレイター303の動作概要の一例を説明する。手順801において、自動化支援プログラム300は、アプリケーション102に、キャプチャージェネレイター303を送信する。このとき、コントロールプロパティ502の各々に対応したキャプチャージェネレイター303が、アプリケーション102に送信される。キャプチャージェネレイター303は、アプリケーション102内部で実行される。
【0094】
ある局面において、自動化支援プログラム300は、GUIドライバー301としてクラス501を使用する場合、コントロールプロパティ502の各々に対応する各キャプチャージェネレイター303をアプリケーション102に送信してもよい。
【0095】
他の局面において、キャプチャージェネレイター303は、同一のコントロールドライバー302によって定義された複数のコントロールプロパティ502に対応付けられていてもよい。例えば、コントロール(A)~(C)に対応するコントロールプロパティ(A)~(C)のいずれもが、「WPFTextBox」クラスである場合、「WPFTextBox」クラスに対応するキャプチャージェネレイター303(X)がコントロールプロパティ(A)~(C)に対応付けられてもよい。その場合、自動化支援プログラム300は、コントロール(A)~(C)の操作をキャプチャーするために、キャプチャージェネレイター303(X)をアプリケーション102に送信し得る。
【0096】
手順802において、送信された各キャプチャージェネレイター303は、アプリケーション102で発生したイベントまたはコントロールに関連するデータの変化を検知して、対応するテストコードを生成する。例えば、テキストボックス401を監視するキャプチャージェネレイター303(Y)は、テキストボックス401の操作イベントの発生を検知して、当該操作イベントに対応するテストコードを生成する。テストコードは、実際に行われた操作と同じ処理になる。一例として、テキストボックス401に「たなか」と入力された場合、キャプチャージェネレイター303(Y)は、テキストボックス401に「たなか」と入力するテストコードを生成する。自動化支援プログラム300は、各キャプチャージェネレイター303によって生成されたテストコードを取得し、一つにまとめることによりテストシナリオ803を作成する。
【0097】
ある局面において、自動化支援プログラム300は、キャプチャージェネレイター303をアプリケーション102に送信する代わりに、Friendly等の機能を用いてアプリケーション102の各コントロールの操作(イベント発生またはコントロールに関連するデータの変化)を監視するだけでもよい。自動化支援プログラム300は、各コントロールの操作を検知したときに、キャプチャージェネレイター303にテストコードを生成させてもよい。
【0098】
図9は、テストシナリオの一例を示す図である。テストシナリオは、生成されたテストコード901と、検証用コード902とを含む。テストコード901は、キャプチャージェネレイター303によって生成されたものであり、当該テストコード901は、アプリケーション102に対して、テスト操作を実行する。
【0099】
検証用コード902は、テストコード901が実行されたときの各コントロールへの出力結果等を検証する。キャプチャージェネレイター303は、テストコードを生成したときの出力結果に基づいて、当該検証用コード902を生成し得る。検証用コード902は、本来と異なる出力結果が得られたときに例外を発生させ得る。検証用コード902は、テストコード901と同様に、コントロールドライバー302のメソッドまたはプロパティを含む。
【0100】
各テストコード901および検証用コード902は、いずれもGUIドライバー301のクラス501に含まれるコントロールプロパティ502のメソッドまたはプロパティを呼び出している。そのため、手書きコードと同様に可読性が高く、編集も容易である。さらに、GUIドライバー301のクラス501およびテストシナリオは分離されているので、コントロールプロパティ502の各コントロールをそれぞれ指定するための情報が変更されても、自動化支援プログラム300は、問題無くテストシナリオを実行可能である。
【0101】
図10は、生成されたテストシナリオ1001の例を示す図である。ユーザーは、IDE等のビルド機能を有するソフトウェアがあれば、生成されたテストシナリオ1001を実行することができる。
【0102】
図11は、自動化支援プログラム300の通信処理の手順の一例を示す図である。
図11を参照して、自動化支援プログラム300およびテスト対象のアプリケーション102の通信処理について説明する。ある局面において、アプリケーション102は、ネイティブアプリケーションでもよいし、ウェブアプリケーションのフロント部分であってもよい。他の局面において、制御装置201は、RAM202に自動化支援プログラム300を読み込んで、
図11の処理を実行してもよい。
【0103】
処理は、主に、処理1150と、処理1160とに分けられる。処理1150は、GUIドライバー301を生成する処理であり、処理1160は、テストシナリオを作成する処理である。ステップS1110において、自動化支援プログラム300は、FriendlyまたはSelenium等と連携して、各コントロールをそれぞれ指定するためのアプリケーション102に関する情報を取得する。
【0104】
ある局面において、自動化支援プログラム300は、起動時に、テスト対象のアプリケーション102を示す情報を取得し得る。テスト対象のアプリケーション102を示す情報は、例えば、プロセスIDまたはURL(Uniform Resource Locator)等の任意の情報であってよい。他の局面において、自動化支援プログラム300は、テスト対象のアプリケーション102を起動させてもよいし、ブラウザを起動して、当該ブラウザにウェブアプリケーションのGUIを表示させてもよい。
【0105】
ステップS1120において、自動化支援プログラム300は、アプリケーション102から、各コントロールをそれぞれ指定するための情報を受信する。各コントロールをそれぞれ指定するための情報は、各コントロールの種類に関する情報と、各コントロールを一意に特定する情報とを含み得る。自動化支援プログラム300は、各コントロールをそれぞれ指定するための情報に基づいて、GUIドライバー301を自動生成し得る。ユーザーは、自動生成されたGUIドライバー301を編集することができる。
【0106】
ステップS1130において、自動化支援プログラム300は、監視対象のコントロールに対応するキャプチャージェネレイター303をアプリケーション102に送信する。ステップS1140において、自動化支援プログラム300は、アプリケーション102内で動作するキャプチャージェネレイター303から、テストコードを受信する。
【0107】
図12は、自動化支援プログラム300のテストシナリオ生成の処理手順の一例を示す図である。
図12を参照して、自動化支援プログラム300の内部処理について説明する。ある局面において、制御装置201は、RAM202に自動化支援プログラム300を読み込んで、
図12の処理を実行してもよい。
【0108】
ステップS1210において、自動化支援プログラム300は、GUIドライバー301を生成する。当該ステップは、処理1150に相当する。自動化支援プログラム300は、テスト対象のアプリケーション102に関する情報を取得し、アプリケーション102が含むコントロールを判別する。自動化支援プログラム300は、判別したコントロールに対応するコントロールドライバー302を用いて、コントロールプロパティを生成する。
【0109】
ステップS1220において、自動化支援プログラム300は、ユーザーからのGUIドライバー301の編集処理を受け付ける。ある局面において、ユーザーは、他のエディタまたはIDE等でGUIドライバー301を編集してもよい。他の局面において、ユーザーは、手動でGUIドライバー301を定義してもよい。
【0110】
ステップS1230において、自動化支援プログラム300は、装置100に表示されているアプリケーション102の情報を取得する。ある局面において、自動化支援プログラム300は、起動時または実行中に、ユーザーからアプリケーション102を示す情報の入力を受け付けてもよい。アプリケーション102を示す情報は、一例として、プロセスIDまたはURL等である。他の局面において、自動化支援プログラム300は、ファイル上のパスまたはURL等に基づいて、アプリケーション102を起動してもよい。
【0111】
ステップS1240において、自動化支援プログラム300は、アプリケーション102の情報に基づいて、予め作成されているGUIドライバー301の中から、使用するGUIドライバー301を選択する。
【0112】
ステップS1250において、自動化支援プログラム300は、GUIドライバー301のコントロールプロパティに基づいて、キャプチャー対象であるコントロールを特定する。より具体的には、自動化支援プログラム300は、コントロールプロパティ(インスタンス)を生成するコントロールドライバー302の種類と、コントロールプロパティに渡される各コントロールをそれぞれ指定するための情報とに基づいて、キャプチャー対象であるコントロールを特定する。
【0113】
ステップS1260において、自動化支援プログラム300は、ステップS1250で特定したコントロールプロパティに対応するキャプチャージェネレイター303をアプリケーション102に送信し、アプリケーション102の受け付ける操作を監視する。キャプチャージェネレイター303は、アプリケーション102の操作に基づいて、テストコードを生成し、当該テストコードを自動化支援プログラム300に送信する。
【0114】
ステップS1270において、自動化支援プログラム300は、テストコードを受信し、当該テストコードをテストシナリオに含める。ステップS1280において、自動化支援プログラム300は、テストコードの出力結果を検証する検証用コードを生成し、テストシナリオに追加する。
【0115】
以上説明したように、本実施の形態において、GUIドライバー301およびコントロールドライバー302がテストシナリオとは独立して定義される。GUIドライバー301は、コントロールドライバー302をコントロールプロパティとして含むことで、各コントロールをそれぞれ指定するための情報と、コントロールを直接操作する処理とを隠蔽する。さらに、自動化支援プログラム300は、テスト対象のアプリケーションの操作のキャプチャー時に、コントロールドライバー302のメソッドまたはプロパティを呼び出すテストコードを生成する。当該処理により、自動化支援プログラム300は、可読性およびメンテナンス性の高いテストコードを含むテストシナリオを作成し得る。さらに、自動化支援プログラム300は、上記したテストシナリオの作成手順から検証用コードの追加処理を除くことにより、RPA用のシナリオを生成することができる。
【0116】
今回開示された実施の形態は全ての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味及び範囲内で全ての変更が含まれることが意図される。
【符号の説明】
【0117】
10,100 装置、101 IDE、102 アプリケーション、201 制御装置、202 RAM、203 入力インターフェイス、204 出力インターフェイス、205 外部機器インターフェイス、206 通信インターフェイス、207 記憶装置、300 自動化支援プログラム、301 GUIドライバー、302 コントロールドライバー、303 キャプチャージェネレイター、400 ネイティブアプリケーション、401,404,601,602,603,604 テキストボックス、402 カレンダー、403 数字入力ボックス、405 プルダウンメニュー、406 ラジオボタン、407 エントリーボタン、408 キャンセルボタン、501,701 クラス、502,702 コントロールプロパティ、600 ウェブアプリケーション、605 保存ボタン、803,1001 テストシナリオ、901 テストコード、902 検証用コード。