(57)【特許請求の範囲】
【請求項１】
コンピュータ上で動作するアプリケーションに対するユーザ操作時のＧＵＩ表示状態を表すデータをログ取得プログラムにより取得し、ログとして記録する方法であって、
ＧＵＩ表示状態を表すデータとして種別の異なるデータをそれぞれ取得可能な複数のログ取得プログラムを保持するとともに、当該各ログ取得プログラムが取得可能なデータ種別に関する情報を保持するＧＵＩ表示状態取得手段管理部と、
ログのＧＵＩ表示状態として取得するデータ種別の指定情報および予備取得するデータ種別の指定情報を登録するログ取得条件管理部と、
ログ取得部とを用い、
ログ取得部により、ログ取得条件管理部に登録されている予備取得するデータ種別のデータおよびログのＧＵＩ表示状態として取得する複数のデータ種別の各データを、ＧＵＩ表示状態取得手段管理部に保持されている該当ログ取得プログラムをそれぞれ用いて取得し、記憶装置にキャッシュする第１のステップと、
ログ取得部により、ユーザ操作が発生した時、前記予備取得するデータ種別のデータを前記同様に取得して前記記憶装置にキャッシュした予備取得データと比較し、等しい場合は前記記憶装置にキャッシュした複数のデータ種別の各データをそのままログとして記録するとともに対象アプリケーションにユーザ操作のイベントを通知し、等しくない場合は前記ログのＧＵＩ表示状態として取得する複数のデータ種別の各データを前記同様に取得してログとして記録するとともに対象アプリケーションにユーザ操作のイベントを通知する第２のステップと、
ログ取得部により、その後、ユーザ操作が発生するまでの間、所定の待ち時間毎に前記予備取得するデータ種別のデータを前記同様に取得して前記記憶装置にキャッシュした予備取得データと比較し、等しくない場合は前記ログのＧＵＩ表示状態として取得する複数のデータ種別の各データを前記同様に取得し、前記取得した予備取得するデータ種別のデータとともに記憶装置のキャッシュを更新する第３のステップとを具備する
ことを特徴とするユーザ操作のログ記録方法。
【請求項２】
前記第２のステップは、
対象アプリケーションへのユーザ操作があった場合に予備取得するデータ種別のデータを取得するステップと、
前記取得したデータと、記憶装置にキャッシュした予備取得するデータ種別のデータとを比較し、等しければ記憶装置にキャッシュした複数のデータ種別の各データをＧＵＩ表示状態として操作イベントと共に操作ログに記録するステップと、
記録後に記憶装置のキャッシュをクリアし、対象アプリケーションへ操作イベントを通知するステップとからなる
ことを特徴とする請求項１に記載のユーザ操作のログ記録方法。
【請求項３】
前記第３のステップは、
対象アプリケーションへのユーザ操作がないときに、指定された所定の待ち時間の経過を計測するステップと、
所定の待ち時間が経過したときに、予備取得するデータ種別のデータを取得するステップと、
前記取得したデータと記憶装置にキャッシュした予備取得のデータとを比較するステップと、
等しくなければ、さらにログのＧＵＩ表示状態として取得する複数のデータ種別の各データを前記同様に取得し、前記取得した予備取得するデータ種別のデータとともに記憶装置のキャッシュを更新するステップとからなる
ことを特徴とする請求項１に記載のユーザ操作のログ記録方法。
【請求項４】
前記第３のステップは、
取得したデータと記憶装置にキャッシュした予備取得データとの比較で連続して等しかった数を計数するためのカウント変数を設定するステップと、
対象アプリケーションへのユーザ操作がないときに、指定された所定の待ち時間の経過またはカウント変数の予め設定された所定の閾値の超過を計測するステップと、
所定の待ち時間が経過したときに、予備取得するデータ種別のデータを取得するステップと、
前記取得したデータと記憶装置にキャッシュした予備取得のデータとを比較するステップと、
等しければカウント変数をインクリメントするステップと、
等しくなければ、さらにログのＧＵＩ表示状態として取得する複数のデータ種別の各データを前記同様に取得し、前記取得した予備取得するデータ種別のデータとともに記憶装置のキャッシュを更新するステップとからなる
ことを特徴とする請求項１に記載のユーザ操作のログ記録方法。
【請求項５】
予備取得するデータのデータ種別として、他のデータ種別のデータよりも高速に取得し比較することが可能なデータ種別を選択する
ことを特徴とする請求項１乃至４のいずれかに記載のユーザ操作のログ記録方法。
【請求項６】
コンピュータに請求項１乃至５のいずれかに記載のユーザ操作のログ記録方法の各ステップを実行させるためのプログラム。
【請求項７】
コンピュータ上で動作するアプリケーションに対するユーザ操作時のＧＵＩ表示状態を表すデータをログ取得プログラムにより取得し、ログとして記録する装置であって、
ＧＵＩ表示状態を表すデータとして種別の異なるデータをそれぞれ取得可能な複数のログ取得プログラムを保持するとともに、当該各ログ取得プログラムが取得可能なデータ種別に関する情報を保持するＧＵＩ表示状態取得手段管理部と、
ログのＧＵＩ表示状態として取得するデータ種別の指定情報および予備取得するデータ種別の指定情報を登録するログ取得条件管理部と、
ログ取得条件管理部に登録されている予備取得するデータ種別のデータおよびログのＧＵＩ表示状態として取得する複数のデータ種別の各データを、ＧＵＩ表示状態取得手段管理部に保持されている該当ログ取得プログラムをそれぞれ用いて取得し、記憶装置にキャッシュし、
ユーザ操作が発生した時、前記予備取得するデータ種別のデータを前記同様に取得して前記記憶装置にキャッシュした予備取得データと比較し、等しい場合は前記記憶装置にキャッシュした複数のデータ種別の各データをそのままログとして記録するとともに対象アプリケーションにユーザ操作のイベントを通知し、等しくない場合は前記ログのＧＵＩ表示状態として取得する複数のデータ種別の各データを前記同様に取得してログとして記録するとともに対象アプリケーションにユーザ操作のイベントを通知し、
その後、ユーザ操作が発生するまでの間、所定の待ち時間毎に前記予備取得するデータ種別のデータを前記同様に取得して前記記憶装置にキャッシュした予備取得データと比較し、等しくない場合は前記ログのＧＵＩ表示状態として取得する複数のデータ種別の各データを前記同様に取得し、前記取得した予備取得するデータ種別のデータとともに記憶装置のキャッシュを更新するログ取得部とを具備する
ことを特徴とするユーザ操作のログ記録装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアにおけるグラフィカルユーザインタフェースに対するユーザ操作のログを記録する技術に関する。
【背景技術】
【０００２】
コンピュータ上で動作するアプリケーションプログラム（以下、アプリケーション）などのソフトウェアによって実現される、企業における業務システム等の情報処理システム向けのソリューションとして、近年、ユーザ操作のログ（記録）を活用した技術が数多く提案されている。これらは、情報処理システムを構成するコンピュータの端末装置（以下、情報システム端末）におけるユーザの操作を記録・蓄積し、セキュリティ違反となる操作が行われていないことの監視を実現したり、操作のボトルネックを分析することにより業務の効率化を達成する用途に用いられている。
【０００３】
前述した情報処理システムを実現するソフトウェアの多くは、ユーザビリティ向上のためのインタフェースとして、グラフィカルユーザインタフェース（以下、ＧＵＩ）を採用している。従って、前記のユーザ操作のログを活用した技術においても、ＧＵＩに対するユーザ操作を記録・蓄積することが必要となる。
【０００４】
ＧＵＩに対するユーザ操作は、主にマウス操作やキーボード入力であり、情報システム端末のオペレーティングシステム（以下、ＯＳ）のイベントとして発生時刻などの情報と共に検出することができる。しかし、このような操作に関するイベントのみを記録したとしても、用途によっては、操作ログを十分に活用できない場合がある。
【０００５】
例えば、分析の観点として、アプリケーションのウインドウに表示されているデータの初期化ボタンを押下する操作を、ログから違反操作として検出する場合を考える。しかし、実際にはこのような操作の全てが違反操作というわけではない。トラブルが発生してどうしてもデータを初期化する必要があったのかもしれないし、管理者が必要に応じて実施した操作かもしれない。本当に違反操作であるかの判断は、データ初期化ボタンを押した時、あるいはそれ以前のアプリケーションのＧＵＩの表示状態を精密に調査する必要がある。
【０００６】
よって、単に操作のイベントを記録するだけでなく、ユーザの操作に合わせてそのときのＧＵＩの表示状態も記録し、操作によるＧＵＩの表示状態の変化を時系列にログとして記録する技術が必要である。
【０００７】
ＧＵＩの表示状態として取得するデータは、分析の用途やＯＳ等によって様々なものが考えられる。
【０００８】
例えば、画面キャプチャは人手で操作ログを確認するとき、視覚的にＧＵＩの状態を理解し易い。別の表示状態を示すデータとしては、ＵＩ  Ａｕｔｏｍａｔｉｏｎ（非特許文献１参照）などのアクセシビリティＡＰＩやインスツルメンテーション技術などによって取得できるオブジェクトデータがある。
【０００９】
オブジェクトデータはＧＵＩを構成するＧＵＩ要素の表示状態を示す形式的なデータであり、ＧＵＩ要素間の表示上の親子関係や各要素が保持する表示に関する属性情報（キャプションやＧＵＩ要素の種類、座標位置、活性状態など）を含む。図１にオブジェクトデータの一例を示す。
【００１０】
オブジェクトデータは人が直接参照してもＧＵＩの表示状態を把握するのは難しい。しかし、ＧＵＩ要素の表示に関する情報が形式的に表現されるため、プログラムからの分析が非常に容易である。例えば、ＧＵＩの画像データから、何のボタンが表示されているかをプログラムで識別するためには画像認識等のアルゴリズムが必要になるが、オブジェクトデータにはボタンという情報（テキストデータなど）がそのまま含まれているため、プログラムから直接扱うことができる。
【００１１】
先にも述べたが、これらのデータは分析の用途に応じて長所と短所が存在する。そのため、分析の用途が決まっている場合には、適したデータをＧＵＩの表示状態としてログに記録すれば良い。しかし、この場合、分析する観点が時間の経過ともに変化してしまうと、その分析の観点に適したデータがログとして記録されておらず、ログの分析が困難になってしまう。
【００１２】
以上のことから、操作ログの記録では、ユーザ操作によって発生する操作イベントとそのイベントによって変化したＧＵＩの表示状態を表す複数種別のデータを正確に記録する技術が必要になる。
【００１３】
［従来技術］
操作ログは、形式的に次のように表現することができる。すなわち、操作前のＧＵＩの表示状態をｇi-1、操作イベントをｅi、操作後のＧＵＩの表示状態をｇiとしたとき、これらの組ｔi＝（ｇi-1，ｅi，ｇi）の有限列により、（ｇ0，ｅ1，ｇ1）（ｇ1，ｅ2，ｇ2）・・・（ｇn-1，ｅn，ｇn）と表現することができる。ここでは操作イベントｅiによる操作後のＧＵＩ表示状態ｇiは、操作イベントｅi+1を実施する直前の操作前のＧＵＩの表示状態と等しいとする。
【００１４】
ユーザ操作のログを取得するときは、情報システム端末でアプリケーションを起動し、そのバックグラウンドでログ取得プログラムを動作させなければならない。ログ取得プログラムに実装される記録方法は様々提案されているが、ＧＵＩの表示状態の記録タイミングによって大きく２つの方法が考えられる。
【００１５】
１つは操作イベントが発生し、そのイベントが発生する直前のＧＵＩの表示状態を記録する操作前記録方法である。図２にその概要を示す。
【００１６】
操作イベントは、通常はデバイス（マウスやキーボード）からＯＳ、ＯＳから操作対象のアプリケーションへ通知され、ＧＵＩの表示状態が変化する。
【００１７】
操作前記録方法の場合は、バックグラウンドで動作するログ取得プログラム（検知エージェント）が、通常、ＯＳから操作対象のアプリケーションへ通知される操作イベント（ここではその操作イベントをｅiとする。）をフックし、操作対象アプリケーションへ操作イベントを通知する前に、画面キャプチャやアクセシビリティＡＰＩ等によって画像データやオブジェクトデータを取得する。
【００１８】
操作を実施する直前のアプリケーションのＧＵＩの表示状態をｇi-1とすると、操作イベントを操作対象アプリケーションに通知する前なので、その操作イベントによるＧＵＩ変化は発生しておらず、このとき取得されるデータは操作を実施する直前の表示状態ｇi-1となる。ＧＵＩの表示状態に関する一連のデータを取得した後、ログ取得プログラムはフックしている操作イベントを操作対象のアプリケーションへ通知すると共に、それまで蓄積してきた操作ログｔ1・・・ｔi-1の末尾へｔi＝（ｇi，ｅi+1，null）を追加し、ｔi-1の操作後のＧＵＩの表示状態へｇiを代入する。この処理をユーザ操作のたびに繰り返して操作ログを構成する。
【００１９】
もう１つの操作ログの記録方法は、操作イベントが発生し、そのイベントによって変化した後のＧＵＩの表示状態を記録する操作後記録方法である。図３に操作後記録方法を示す。
【００２０】
操作後記録の場合には、操作前記録方法と同様に、まずＯＳから操作対象アプリケーションへ通知される操作イベントｅiをログ取得プログラムがフックする。しかし、操作前記録方法とは違って、操作イベントｅiを直ちに操作対象アプリケーションへ送信してしまう。ログ取得プログラムは事前に設定されている待ち時間が経過した後、操作対象アプリケーションのＧＵＩ表示状態を示す各データを取得する。操作イベントｅiを操作対象アプリケーションへ通知してから待ち時間の経過までに、ＧＵＩの表示状態の変化が完了していれば、操作後のＧＵＩの表示状態であるｇiを取得することができる。このとき、ログ取得プログラムはそれまで蓄積してきた操作ログのｔ1・・・ｔi-1の末尾に（ｇi-1，ｅi，ｇi）を追加する。なおここでのｇi-1はｔi-1の操作後のＧＵＩ表示状態となる。
【発明の概要】
【発明が解決しようとする課題】
【００２１】
しかしながら、これら操作前記録方法や操作後記録方法にはそれぞれ課題が存在する。
【００２２】
すなわち、操作前記録方法の場合、操作対象アプリケーションへ操作イベントを通知する前にＧＵＩの表示状態のデータを取得するため、正確に操作直前のＧＵＩの表示状態を記録することができる。その一方で、ユーザが操作を行ってから操作対象アプリケーションのＧＵＩが変化するまでの間に、ＧＵＩの表示状態のデータを取得する処理が追加される。そのため、ユーザにとってはアプリケーションの応答が遅れるように感じる。特にＧＵＩの表示状態として取得するデータの種別が増えると、それだけ取得処理に必要とする時間（図２のΔt）が増加し、アプリケーションの応答の遅延が大きくなる。
【００２３】
アプリケーションの応答の遅延が大きくなると、アプリケーションへの操作そのものにユーザがストレスを感じてしまう場合がある。ＧＵＩの表示状態のデータを複数種別取得する場合でも、アプリケーションの応答遅延を抑えて正確に操作ログを取得する方法が必要である。
【００２４】
一方、操作後記録方法の場合、ログ取得プログラムは、ＯＳから操作イベントをフックしたらすぐに操作対象アプリケーションへ操作イベントを送信する。結果として、操作イベントによるＧＵＩ変化は遅延なく発生するため、アプリケーションの応答の遅延は発生しない。しかし、待ち時間を経過した後のＧＵＩの表示状態を取得するため、その待ち時間以内に操作イベントに対するＧＵＩ変化が完了していない場合、例えば図４に示すように操作後のＧＵＩの表示状態としてＧＵＩ変化が完了した表示状態のｇiではなく、変化前の表示状態ｇi-1を取得してしまう場合がある。待ち時間を十分長く設定すれば、その待ち時間が経過するまでにＧＵＩの表示状態の変化が完了するかもしれないが、待ち時間経過前にユーザがアプリケーションに対して次の操作を実施し、別の表示状態に変化してしまう可能性がある。このように操作後記録方法の場合は、操作後のＧＵＩ表示状態の記録の正確性に問題がある。
【００２５】
本発明では、複数種別のＧＵＩの表示状態を取得するときに、正確にＧＵＩの表示状態を記録しつつ、操作対象アプリケーションの応答遅延を抑止するという課題を解決する。
【課題を解決するための手段】
【００２６】
本発明では、前述の課題を解決するために、以下の特徴を有する。
【００２７】
本発明の第一の発明として、
コンピュータ上で動作するアプリケーションに対するユーザ操作時のＧＵＩ表示状態を表すデータをログ取得プログラムにより取得し、ログとして記録する方法であって、
ＧＵＩ表示状態を表すデータとして種別の異なるデータをそれぞれ取得可能な複数のログ取得プログラムを保持するとともに、当該各ログ取得プログラムが取得可能なデータ種別に関する情報を保持するＧＵＩ表示状態取得手段管理部と、
ログのＧＵＩ表示状態として取得するデータ種別の指定情報および予備取得するデータ種別の指定情報を登録するログ取得条件管理部と、
ログ取得部とを用い、
ログ取得部により、ログ取得条件管理部に登録されている予備取得するデータ種別のデータおよびログのＧＵＩ表示状態として取得する複数のデータ種別の各データを、ＧＵＩ表示状態取得手段管理部に保持されている該当ログ取得プログラムをそれぞれ用いて取得し、記憶装置にキャッシュする第１のステップと、
ログ取得部により、ユーザ操作が発生した時、前記予備取得するデータ種別のデータを前記同様に取得して前記記憶装置にキャッシュした予備取得データと比較し、等しい場合は前記記憶装置にキャッシュした複数のデータ種別の各データをそのままログとして記録するとともに対象アプリケーションにユーザ操作のイベントを通知し、等しくない場合は前記ログのＧＵＩ表示状態として取得する複数のデータ種別の各データを前記同様に取得してログとして記録するとともに対象アプリケーションにユーザ操作のイベントを通知する第２のステップと、
ログ取得部により、その後、ユーザ操作が発生するまでの間、所定の待ち時間毎に前記予備取得するデータ種別のデータを前記同様に取得して前記記憶装置にキャッシュした予備取得データと比較し、等しくない場合は前記ログのＧＵＩ表示状態として取得する複数のデータ種別の各データを前記同様に取得し、前記取得した予備取得するデータ種別のデータとともに記憶装置のキャッシュを更新する第３のステップとを具備する
ことを特徴とするユーザ操作のログ記録方法を提案する。
【００２８】
また、本発明の第二の発明として、第一の発明における第２のステップは、
対象アプリケーションへのユーザ操作があった場合に予備取得するデータ種別のデータを取得するステップと、
前記取得したデータと、記憶装置にキャッシュした予備取得するデータ種別のデータとを比較し、等しければ記憶装置にキャッシュした複数のデータ種別の各データをＧＵＩ表示状態として操作イベントと共に操作ログに記録するステップと、
記録後に記憶装置のキャッシュをクリアし、対象アプリケーションへ操作イベントを通知するステップとからなる
ことを特徴とするユーザ操作のログ記録方法を提案する。
【００２９】
また、本発明の第三の発明として、第一の発明における第３のステップは、
対象アプリケーションへのユーザ操作がないときに、指定された所定の待ち時間の経過を計測するステップと、
所定の待ち時間が経過したときに、予備取得するデータ種別のデータを取得するステップと、
前記取得したデータと記憶装置にキャッシュした予備取得のデータとを比較するステップと、
等しくなければ、さらにログのＧＵＩ表示状態として取得する複数のデータ種別の各データを前記同様に取得し、前記取得した予備取得するデータ種別のデータとともに記憶装置のキャッシュを更新するステップとからなる
ことを特徴とするユーザ操作のログ記録方法を提案する。
【００３０】
また、本発明の第四の発明として、第一の発明における第３のステップは、
取得したデータと記憶装置にキャッシュした予備取得データとの比較で連続して等しかった数を計数するためのカウント変数を設定するステップと、
対象アプリケーションへのユーザ操作がないときに、指定された所定の待ち時間の経過またはカウント変数の予め設定された所定の閾値の超過を計測するステップと、
所定の待ち時間が経過したときに、予備取得するデータ種別のデータを取得するステップと、
前記取得したデータと記憶装置にキャッシュした予備取得のデータとを比較するステップと、
等しければカウント変数をインクリメントするステップと、
等しくなければ、さらにログのＧＵＩ表示状態として取得する複数のデータ種別の各データを前記同様に取得し、前記取得した予備取得するデータ種別のデータとともに記憶装置のキャッシュを更新するステップとからなる
ことを特徴とするユーザ操作のログ記録方法を提案する。
【００３１】
また、本発明の第五の発明として、第一乃至第四のいずれかの発明において、
予備取得するデータのデータ種別として、他のデータ種別のデータよりも高速に取得し比較することが可能なデータ種別を選択する
ことを特徴とするユーザ操作のログ記録方法を提案する。
【００３２】
また、本発明の第六の発明として、
コンピュータに第一乃至第五のいずれかの発明の各ステップを実行させるためのプログラムを提案する。
【００３３】
また、本発明の第七の発明として、
コンピュータ上で動作するアプリケーションに対するユーザ操作時のＧＵＩ表示状態を表すデータをログ取得プログラムにより取得し、ログとして記録する装置であって、
ＧＵＩ表示状態を表すデータとして種別の異なるデータをそれぞれ取得可能な複数のログ取得プログラムを保持するとともに、当該各ログ取得プログラムが取得可能なデータ種別に関する情報を保持するＧＵＩ表示状態取得手段管理部と、
ログのＧＵＩ表示状態として取得するデータ種別の指定情報および予備取得するデータ種別の指定情報を登録するログ取得条件管理部と、
ログ取得条件管理部に登録されている予備取得するデータ種別のデータおよびログのＧＵＩ表示状態として取得する複数のデータ種別の各データを、ＧＵＩ表示状態取得手段管理部に保持されている該当ログ取得プログラムをそれぞれ用いて取得し、記憶装置にキャッシュし、
ユーザ操作が発生した時、前記予備取得するデータ種別のデータを前記同様に取得して前記記憶装置にキャッシュした予備取得データと比較し、等しい場合は前記記憶装置にキャッシュした複数のデータ種別の各データをそのままログとして記録するとともに対象アプリケーションにユーザ操作のイベントを通知し、等しくない場合は前記ログのＧＵＩ表示状態として取得する複数のデータ種別の各データを前記同様に取得してログとして記録するとともに対象アプリケーションにユーザ操作のイベントを通知し、
その後、ユーザ操作が発生するまでの間、所定の待ち時間毎に前記予備取得するデータ種別のデータを前記同様に取得して前記記憶装置にキャッシュした予備取得データと比較し、等しくない場合は前記ログのＧＵＩ表示状態として取得する複数のデータ種別の各データを前記同様に取得し、前記取得した予備取得するデータ種別のデータとともに記憶装置のキャッシュを更新するログ取得部とを具備する
ことを特徴とするユーザ操作のログ記録装置を提案する。
【発明の効果】
【００３４】
本発明により、操作前記録方法と同様に正確にＧＵＩ表示状態を記録することができる。さらに従来の操作前記録方法と異なり、操作の都度、ＧＵＩ表示状態として取得する全てのデータ種別を取得する必要がなくなり、アプリケーションの応答の遅延を防止することができる。
【図面の簡単な説明】
【００３５】
【図１】表示状態を示すオブジェクトデータの一例を示す説明図
【図２】従来の操作前記録方法のシーケンスの一例を示す説明図
【図３】従来の操作後記録方法のシーケンスの一例を示す説明図
【図４】従来の操作後記録方法のシーケンスの他の例を示す説明図
【図５】本発明の操作ログを記録する方法を実施する装置の実施の形態の一例を示す構成図
【図６】ＧＵＩ表示状態のデータ種別とプログラムモジュールとの対応関係の一例を示す説明図
【図７】ログ取得条件管理部の保持内容の一例を示す説明図
【図８】本発明におけるＧＵＩの状態のログ記録手続きの処理フロー図
【図９】本発明におけるＧＵＩの状態のログ記録手続きの処理フロー図
【図１０】本発明におけるＧＵＩの状態のログ記録手続きの処理フロー図
【図１１】ユーザ操作に伴うＧＵＩ表示状態の変化とそのときの取得情報および各変数の一例を示す説明図
【発明を実施するための形態】
【００３６】
図５は本発明のユーザ操作のログ記録方法を実施する装置の実施の形態の一例、ここでは周知のコンピュータ上に実現した例を示すもので、図中、１は入力装置、２は記憶装置、３は表示装置、４はコンピュータである。
【００３７】
入力装置１は、キーボード、マウス等からなり、ユーザがコンピュータ４に所定の情報、ここではＧＵＩ表示状態を示すデータ種別（画像データやオブジェクトデータ等）とそのデータを取得するログ取得プログラム（以下、プログラムモジュール）、さらにログのＧＵＩ表示状態として取得するデータ種別の指定、予備取得するデータ種別の指定、待ち時間の指定を入力し、さらに、操作ログの記録の開始と終了の指示を入力するためのものである。また、本来はログに記録する操作イベントの種別も指定する。これは、例えばマウス操作であれば、クリック、ダブルクリック、ドラッグ操作や、押下したマウスボタンの種類等であり、キーボード操作であれば、押したキーの内容、キーダウン、キーアップなどである。
【００３８】
なお、本発明では、ユーザが操作したときのＧＵＩの表示状態をログに記録する方法に焦点にあてている。説明を簡単にするために、操作イベントの記録方法については、公知の技術と同様として説明を割愛する。
【００３９】
記憶装置２は、後述するログ取得部が図８、図９（または図１０）に示す手続きを実施する際に必要とするキャッシュ変数や操作ログを格納する操作ログ変数を記録するためのものである。表示装置３は、液晶ディスプレイ、ＣＲＴ等からなり、アプリケーションの画面を表示するとともに、コンピュータ４が実施する図８、図９（または図１０）の手続き中の画面を必要に応じて表示するためのものである。
【００４０】
コンピュータ４は、ＧＵＩ表示状態取得手段管理部５、ログ取得条件管理部６およびログ取得部７を構成し、ユーザ操作のログを記録する。
【００４１】
ＧＵＩ表示状態取得手段管理部５は、入力装置１から入力されたＧＵＩ表示状態に関するデータ（画像データやオブジェクトデータ等）を取得する各プログラムモジュールを内部に登録・保持すると共に、ＧＵＩ表示状態に関するデータの種別とそのデータを取得することができるプログラムモジュールとの対応関係を例えば、図６に示すにように登録・保持している。また、図８、図９（または図１０）の手続きから呼び出されたときに対応するプログラムモジュールを実行し、ＧＵＩ表示状態に関するデータを返す。
【００４２】
ログ取得条件管理部６は、入力装置１から入力された、ログのＧＵＩ表示状態（ユーザ操作時のＧＵＩ表示状態）として取得するデータ種別の指定と、予備取得するデータ種別の指定とを内部に登録・保持している。またログ取得条件管理部６は、入力装置１から入力された、所定の待ち時間を登録・保持している。
【００４３】
ログのＧＵＩ表示状態として取得するデータ種別の指定は、ＧＵＩ表示状態取得手段管理部５に登録済みのデータ種別を指定する必要がある。本指定は異なる複数のデータ種別を指定しても良い。例えば、ＧＵＩ表示状態取得手段管理部５に図６のデータ種別とプログラムモジュールが登録されている場合、画像データとオブジェクトデータを指定しても良いし、画像データのみ、あるいはオブジェクトデータのみを指定しても良い。
【００４４】
予備取得するデータ種別の指定も同様に、ＧＵＩ表示状態取得手段管理部５に登録済みのデータ種別を指定する必要があるが、この指定はデータ種別を１つのみ選択する。よってＧＵＩ表示状態取得手段管理部５に図６のデータ種別とプログラムモジュールが登録されている場合は、画像データ、もしくはオブジェクトデータの指定ができる。なお、ログのＧＵＩ表示状態として取得するデータ種別として指定したデータ種別の中から、予備取得するデータ種別を指定する必要はない。
【００４５】
ログのＧＵＩ表示状態として取得するデータ種別として画像データとオブジェクトデータ、予備取得するデータ種別としてオブジェクトデータ、待ち時間が500msであるときのログ取得条件管理部６の保持内容を図７に示す。
【００４６】
ログ取得部７は、入力装置１からの操作ログの記録の開始の指示を受けて、図８、図９（または図１０）の手続きを実施する。なお本説明では、図８の手続きを開始する前に操作対象アプリケーションを事前に起動しているものとして説明を進める。これはユーザが事前に起動させても良いし、本装置に操作対象アプリケーションの起動方法が与えられている場合には、操作ログの記録開始の指示を受けて本装置が操作対象アプリケーションを起動しても良い。
【００４７】
図８の手続きを実施するに当たっては、記憶装置２にＧＵＩ表示状態のデータを一時的に格納するキャッシュの役割をはたす変数Ｃと、これから取得する操作ログを格納する変数Ｌを用意する。
【００４８】
Ｓ１のステップではキャッシュ変数Ｃと操作ログ変数Ｌをクリアする。本説明ではこれら変数のクリアされた状態を定数nullが代入された状態で表すこととする。続くＳ２のステップでログ取得条件管理部６に登録されている予備取得するデータ種別Ｄを読み込む。さらにデータ種別Ｄをキーに、ＧＵＩ表示状態取得手段管理部５が保持するデータの種別とそのデータを取得することができるプログラムモジュールの対応関係から、データ種別Ｄを取得するプログラムモジュールを特定し実行する。結果としてＧＵＩ表示状態に対するデータ種別ＤのデータとしてＶを取得する。
【００４９】
Ｓ３のステップではログ取得条件管理部６に登録されているログのＧＵＩ表示状態として取得するデータ種別｛Ｄ1，Ｄ2，…，ＤN｝を読み込む。さらに読み込んだ各データ種別をキーに、ＧＵＩ表示状態取得手段管理部５が保持するデータの種別とそのデータを取得することができるプログラムモジュールの対応関係から、各データ種別を取得するプログラムモジュールを特定しそのプログラムモジュールを実行する。結果、各データ｛Ｖ1，Ｖ2，…，ＶN｝を取得する。
【００５０】
さらにＳ４のステップでは、Ｓ２のステップで取得した予備取得データＶとＳ３のステップで取得したＧＵＩ表示状態の各データ｛Ｖ1，Ｖ2，…，ＶN｝を記憶装置２のキャッシュ変数Ｃに代入し、Ｃ＝（Ｖ，｛Ｖ1，Ｖ2，…，ＶN｝）とし、操作回数をカウントする変数ｉに０を設定する。
【００５１】
Ｓ５のステップでは入力装置１から操作ログの記録終了の指示が入力されたかを判定し、記録終了の指示があれば処理を終了する。その指示がなければ、指示が入力装置１から入力されるまでＳ５からＳ１３のステップを繰り返す。
【００５２】
まずＳ６のステップでは、ユーザが操作対象アプリケーションに対して操作を実施したかを検知する。発生していなければＳ５のステップに戻る。発生していればＳ７のステップに進み、まず変数ｉをインクリメントし、検知した操作イベントをｅiとする。
【００５３】
さらにＳ８のステップでは、Ｓ２のステップと同様にログ取得条件管理部６に登録されている予備取得するデータ種別ＤのデータＶ’を取得する。なお、現段階では本装置は検知した操作イベントを操作対象アプリケーションへ通知していない状態であるため、アプリケーションは操作による画面遷移は発生していない。この状態でＧＵＩの表示状態を取得する場合、操作直前の状態が取得されることに注意されたい。
【００５４】
Ｓ９のステップでは、現在のキャッシュ変数Ｃの予備取得したデータＶとＳ８のステップで取得したデータＶ’の比較を実施する。もしＶとＶ’が等しければ、Ｓ１０のステップでキャッシュ変数ＣのＧＵＩ表示状態として取得した各データ｛Ｖ1，Ｖ2，…，ＶN｝をｇi-1とする。等しくなければＳ１１のステップにおいてＳ３のステップと同様に、ログ取得条件管理部６に登録されているログのＧＵＩ表示状態として取得するデータ種別｛Ｄ1，Ｄ2，…，ＤN｝の各データ｛Ｖ1’，Ｖ2’，…，ＶN’｝を取得してｇi-1とする。
【００５５】
そしてＳ１２のステップで操作前のＧＵＩ表示状態、操作イベント、操作後のＧＵＩ表示状態の組ｔiを（ｇi-1，ｅi，null）として、記憶装置２の操作ログ変数Ｌの末尾に追加する。なおこの時、ｉ＞０であるなら、すでにＬに記録されているｔi-1の操作後のＧＵＩ表示状態をnullからｇi-1に変更する。
【００５６】
Ｓ１３のステップでは、キャッシュ変数Ｃの内容をクリアする。さらに操作イベントをアプリケーションへ通知し、別スレッドで図９（または図１０）の手続きを起動した後、Ｓ５のステップへ戻る。
【００５７】
本発明の１つの特徴は、予備取得したデータとキャッシュの予備取得したデータをＳ８のステップで比較し、もしそのデータが同じであれば、キャッシュで取得したときのＧＵＩの表示状態と現在の表示状態が同じであるとみなし、キャッシュで取得したＧＵＩ表示状態の各データを操作ログとして記録する点にある。これにより、操作イベントのタイミングで毎回、ＧＵＩ表示状態の各データを取得する必要がなくなり、操作前記録方法に比べてアプリケーションの応答劣化を防止することが可能となる。
【００５８】
本発明ではＧＵＩの表示状態が異なるかの判定はこの予備取得時に取得するデータで行う。ユーザはＧＵＩの表示状態の変化を識別できるデータ種別を予備取得のデータ種別として指定する必要がある。また、ＧＵＩ表示状態として取得する他のデータ種別よりも高速に取得、比較することができるデータ種別を予備取得として選択することにより、アプリケーションの応答劣化を防止するという効果をより大きくすることができる。
【００５９】
図９に、図８のＳ１３のステップにおいて別スレッドで起動される手続きの一例を示す。本手続きは、操作後のＧＵＩ表示状態の変化をポーリング的に監視し、ユーザがアプリケーションを操作していない間にキャッシュ変数へＧＵＩ表示状態を蓄積することを目的としている。この手続きは図８の手続きと並列的に実行されることに注意されたい。
【００６０】
まずＳ２１において操作対象アプリケーションへ操作が発生したかを調べ、もし操作が発生したらその時点で処理を停止する。操作が発生していなければＳ２２のステップにおいて、時間の経過とともに値が増加する変数Ｔの値をリセットし０を代入する。
【００６１】
Ｓ２３のステップでは、変数Ｔとログ取得条件管理部６に登録されている待ち時間Ｗを比較しＴ＜Ｗであれば、待ち時間分、時間が経過していないため、再度Ｓ２３のステップを繰り返す。もしＴ≧Ｗであれば待ち時間分時間が経過したので、Ｓ２４のステップへと進み、図８の手続きのＳ２のステップと同様に、ログ取得条件管理部６に登録されている予備取得するデータ種別ＤのデータＶ’を取得する。Ｓ２５のステップでは、現在のキャッシュ変数Ｃの予備取得したデータＶとＳ２４のステップで取得したデータＶ’の比較を実施する。もしＶとＶ’が等しければ、既にキャッシュ変数に現在のＧＵＩ表示状態が蓄積されているため、Ｓ２１のステップへと戻る。等しくなければＳ２６のステップにおいて図８のＳ３のステップと同様に、ログ取得条件管理部６に登録されているログのＧＵＩ表示状態として取得するデータ種別｛Ｄ1，Ｄ2，…，ＤN｝の各データ｛Ｖ1’，Ｖ2’，…，ＶN’｝を取得する。
【００６２】
最後にＳ２７のステップで、Ｓ２４のステップで取得した予備取得データＶとＳ２６のステップで取得したＧＵＩ表示状態の各データ｛Ｖ1，Ｖ2，…，ＶN｝を記憶装置２のキャッシュ変数Ｃに代入し、Ｃ＝（Ｖ，｛Ｖ1’，Ｖ2’，…，ＶN’｝）とする。その後はＳ２１のステップへと戻る。
【００６３】
なお、図９の手続きにおけるＳ２３のステップでは、単純に待ち時間が経過したか判定し、経過したらＳ２４からＳ２７までのステップを実施しているため、ＧＵＩの変化が完了し表示が安定した後も毎回Ｓ２４の予備取得を実施してしまう。そこで、図１０に示すような、Ｓ２５のステップのキャッシュ変数Ｃの予備取得データＶとＳ２４のステップで取得したデータＶ’との比較で連続して等しかった回数をカウントするためのカウント変数Ｃｏｕｎｔを設定してカウントし（Ｓ２０，Ｓ２９）、Ｓ２３’のステップにおいてカウント変数Ｃｏｕｎｔが予め設定された所定の閾値ＴＨを超えた場合にはＧＵＩの変化が完了したとみなし、以後はＳ２４からＳ２７までのステップを実施しないという手続きを図９の手続きの代わりに実施しても良い。
【００６４】
また、前述した実施の形態では、ＧＵＩ表示状態取得手段管理部５、ログ取得条件管理部６およびログ取得部７をコンピュータ４上で実現した例を示したが、ハードウェアで実現しても良い。またこれら各装置が、適切な通信路で相互に接続された複数のハードウェア上に分散して存在し、相互に通信し合いながら実行することもできる。
【００６５】
本発明の装置がログの記録対象とするアプリケーションは、コンピュータ４において動作しても良いし、適切な通信路で相互に接続された別のハードウェア上で動作していても良い。
【実施例１】
【００６６】
ここでは、本発明の実施例として、図５の構成をとった場合における操作ログの記録方法を説明する。
【００６７】
まず、本発明を利用するにあたって、事前にＧＵＩの表示状態として取得するデータ種別とそのデータを取得するプログラムモジュールを入力装置１から入力する。ここでは、画像データに対してモジュールＡ、オブジェクトデータに対してモジュールＢを入力し、これらの情報は、ＧＵＩ表示状態取得手段管理部５に図６の状態で蓄積される。また、ＧＵＩ表示状態として取得するデータ種別として画像データとオブジェクトデータを入力装置１から指定する。画像データとオブジェクトデータのどちらの取得・比較処理が高速であるかは、ＯＳなどのプラットフォームごとに異なる。本実施例ではオブジェクトデータのほうが高速であると仮定し、予備取得するデータ種別として入力装置１からオブジェクトデータを指定する。さらに、待ち時間として500msを入力装置１から指定する。これらの入力パラメータは、ログ取得条件管理部６に蓄積され、図７の情報を保持する。
【００６８】
本発明の装置を利用するユーザは、操作対象アプリケーションを起動し（起動時のＧＵＩをGUI Aとする。）、入力装置１へ操作記録の開始指示を入力する。この記録の開始指示を受け、ログ取得部７は図８および図９の手続きを実施し、操作ログを記録する。本実施例では図１１に示すタイミングで操作イベントが発生した場合の本装置の動作を説明する。
【００６９】
（１）記録開始の指示直後、まず図８のＳ１を実施し、記憶装置２上のキャッシュ変数Ｃと操作ログ変数Ｌをクリアし、null値を代入する。
【００７０】
（２）次に図８のＳ２，Ｓ３のステップを実行して、現在のＧＵＩの表示状態Ａに関する予備取得のためにオブジェクトデータOBJ Aと、ＧＵＩ表示状態として画像データIMG A，OBJ Aとを取得する。さらにＳ４のステップでキャッシュ変数Ｃへ（OBJ A，｛IMG A，OBJ A｝）を格納する。なお、本実施例では予備取得で取得するオブジェクトデータは、ＧＵＩ表示状態としても取得しているため、図１１ではキャッシュ変数Ｃの予備取得のデータの表記は割愛し、ＧＵＩ表示状態として取得したデータのみ表記する。
【００７１】
以降は入力装置１から操作ログ記録終了の通知があるまで繰り返し、操作対象アプリケーションへ操作が発生しているかを監視する（Ｓ５、Ｓ６のステップ）。
【００７２】
（３）操作イベントOP Aが発生したとき、図８のＳ７，Ｓ８のステップが実行され、ｉ＝１のもとで、ｅ1＝OP Aとなる。さらに予備取得としてオブジェクトデータの取得を実施し、結果としてGUI AのオブジェクトデータOBJ Aが取得される。
【００７３】
つづくＳ９のステップでキャッシュ変数Ｃの予備取得のデータOBJ A（図１１の（２）のキャッシュ変数Ｃの内容）と直前に予備取得で取得したデータを比較する。この場合は等しいため、Ｓ１０のステップでキャッシュ変数ＣのＧＵＩ表示状態｛IMG A，OBJ A｝をｇ0とする。つづく、Ｓ１２のステップでｔ1＝（ｇ0，ｅ1，null）を、記憶装置２の操作ログ変数Ｌの末尾に追加し、Ｌ＝（ｇ0，ｅ1，null）とする。Ｓ１３のステップではキャッシュ変数Ｃをクリアし、アプリケーションへ操作イベントOP Aを通知する。
【００７４】
さらに別スレッドで、図９の手続きを実施する。従来の操作前取得方法ではキャッシュや予備取得は実施していない。このため操作のタイミングでアプリケーションへ操作イベントを通知する前に毎回、画像データとオブジェクトデータの２つのデータを取得する処理時間が必要となり、アプリケーションの応答時間の劣化を招いていた。それに対して本発明では、操作よりも前に取得していたキャッシュ変数の情報を参照し、取得や比較時間の短いオブジェクトデータのみを取得し、キャッシュに蓄積しているＧＵＩ表示状態をログとして記録する。この例の場合、画像データの取得時間を省くことができ、従来よりもアプリケーションの応答時間を改善することができる。
【００７５】
（４）操作イベントOP AによってＧＵＩがＢへ変化する。その変化が完了する前、つまりまだＧＵＩの表示がＡのときに図９におけるＧＵＩ表示状態の取得が発生する場合を説明する。
【００７６】
このとき、操作対象アプリケーションへのユーザ操作はまだ発生していないため、Ｓ２１からＳ２３のステップへと進み、時間の経過を示す変数Ｔがログ取得条件管理部６の待ち時間500msよりも少ない間、Ｓ２３のステップをループする。500ms以上時間が経過すると、Ｓ２４のステップを実施し、予備取得でGUI AのオブジェクトデータであるOBJ Aを取得する。
【００７７】
さらにＳ２５のステップでキャッシュ変数Ｃの予備取得のデータと比較するが、この場合はキャッシュ変数はクリアされた状態であるため、Ｓ２６のステップへと進む。Ｓ２６のステップでは、ＧＵＩ表示状態として取得する画像データIMG AとオブジェクトデータOBJ Aを取得し、Ｓ２７のステップでキャッシュ変数Ｃへ（OBJ A，｛IMG A，OBJ A｝）を代入する。
【００７８】
（５）操作イベントOP AによるＧＵＩのＢへの変化が完了し、ユーザによる操作イベントは発生せずに図９におけるＧＵＩ表示状態の取得が発生する場合を説明する。
【００７９】
この場合（４）と同様に、Ｓ２１からＳ２４のステップへと進み、予備取得のデータとしてオブジェクトデータを取得する。このときＧＵＩはＢへと変化しているため、OBJ Bというデータを取得する。さらにＳ２５のステップで、キャッシュ変数Ｃ（図１１の（４）のキャッシュ変数Ｃの内容）の予備取得データOBJ Aと比較し、異なるデータであるため、Ｓ２６のステップでＧＵＩの表示状態としてIMG BとOBJ Bが取得される。Ｓ２７のステップでキャッシュ変数Ｃが更新され、（OBJ B，｛IMG B，OBJ B｝）と最新のＧＵＩの表示状態を反映したものに変更される。
【００８０】
（６）GUI Bに対してユーザが操作を実施し、操作イベントとしてOP Bを検知した場合を説明する。
【００８１】
まず操作イベントを検知したため、図９のＳ２１のステップにてこの手続きは一度終了する。また図８のＳ７，Ｓ８のステップが実行され、ｉ＝２のもとで、ｅ2＝OP Bとなる。さらに予備取得としてオブジェクトデータの取得を実施し、結果としてGUI BのオブジェクトデータOBJ Bが取得される。
【００８２】
つづくＳ９のステップでキャッシュ変数Ｃの予備取得のデータOBJ B（図１１の（５）のキャッシュ変数Ｃの内容）と直前に予備取得で取得したデータを比較する。この場合は等しいため、Ｓ１０のステップでキャッシュ変数ＣのＧＵＩ表示状態｛IMG B，OBJ B｝をｇ1とする。
【００８３】
つづく、Ｓ１２のステップでｔ2＝（ｇ1，ｅ2，null）を記憶装置２の操作ログ変数Ｌの末尾に追加し、さらにｉ＞０であるためｔ1＝（ｇ0，ｅ1，null）の操作後のＧＵＩ表示をｇ1へ置き換える。結果としてＬ＝（ｇ0，ｅ1，ｇ1） （ｇ1，ｅ2，null）となる。Ｓ１３のステップではキャッシュ変数Ｃをクリアし、アプリケーションへ操作イベントOP Bを通知する。さらに別スレッドで、図９の手続きを実施する。
【００８４】
（７）操作イベントOP BによってＧＵＩがＣへ変化する。その変化が完了する前、つまりまだＧＵＩの表示がＣのときに図９におけるＧＵＩ表示状態の取得が発生する場合は、（４）のときと同様の処理が実施され、（７）のようなキャッシュ変数Ｃ、操作ログ変数Ｌの内容となる。
【００８５】
（８）操作イベントOP BによってＧＵＩがＣへ変化が完了し、図９におけるＧＵＩ表示状態の取得が発生する前にユーザが操作を実施した場合を説明する。
【００８６】
操作イベントとしてOP Cが本装置で検知され、図９のＳ２１のステップにてこの手続きは一度終了する。また図８のＳ７，Ｓ８のステップが実行され、ｉ＝３のもとで、ｅ3＝OP Cとなる。さらに予備取得としてオブジェクトデータの取得を実施し、結果としてGUI CのオブジェクトデータOBJ Cが取得される。
【００８７】
つづくＳ９のステップでキャッシュ変数Ｃの予備取得のデータOBJ B（図１１の（７）のキャッシュ変数Ｃの内容）と直前に予備取得で取得したデータを比較する。この場合は異なるデータであるため、Ｓ１１のステップでＧＵＩ表示状態として取得する画像データとオブジェクトデータを取得する。
【００８８】
アプリケーションはGUI Cを表示しているためそれぞれIMG C，OBJ Cを取得し、ｇ2＝｛IMG C，OBJ C｝とする。つづく、Ｓ１２のステップでｔ3＝（ｇ2，ｅ3，null）を記憶装置２の操作ログ変数Ｌの末尾に追加し、さらにｉ＞０であるためｔ2＝（ｇ1，ｅ2，null）の操作後のＧＵＩ表示をｇ2へ置き換える。結果としてＬ＝（ｇ0，ｅ1，ｇ1） （ｇ1，ｅ2，ｇ2）（ｇ2，ｅ3，null）となる。Ｓ１３のステップではキャッシュ変数Ｃをクリアし、アプリケーションへ操作イベントOP Cを通知する。さらに別スレッドで、図９の手続きを実施する。
【００８９】
以降は、入力装置１から操作記録終了の通知があるまで、同様の処理を繰り返す。
【００９０】
本発明では、操作前記録方法により正確にＧＵＩ表示状態を記録することができる。さらにユーザからの操作が実施されていない間に図９の手続きを実施することによって、ＧＵＩの表示状態を事前に取得しキャッシュしておく。ユーザが操作を行ったときは、ＧＵＩ表示状態として取得するデータ種別の全てをいきなり取得せず、ＧＵＩ表示状態の変化が検出可能で取得や比較が高速なデータ種別のテータを予備取得し、キャッシュのデータと比較する。もし同じデータだった場合は、既にキャッシュとして取得している各データ種別のデータを操作前のＧＵＩ表示状態として操作ログに記録する。これによって、従来の操作前記録方法と異なり、操作の都度、ＧＵＩ表示状態として取得する全てのデータ種別を取得する必要がなくなり、アプリケーションの応答の遅延を防止することができる。
【符号の説明】
【００９１】
１：入力装置、２：記憶装置、３：表示装置、４：コンピュータ、５：ＧＵＩ表示状態取得手段管理部、６：ログ取得条件管理部、７：ログ取得部。
【先行技術文献】
【非特許文献】
【００９２】
【非特許文献１】”ＵＩオートメーションの概要”、［ｏｎｌｉｎｅ］、Microsoft Corpolation、［平成２６年１月２８日検索］、インターネット＜ＵＲＬ：http://msdn.microsoft.com/ja-jp/library/ms747327.aspx＞
【非特許文献２】中島一、増田健、高橋郁也、「業務アプリケーション操作可視化のためのハイブリッドなＧＵＩ状態の取得方式の提案」、電子情報通信学会技術研究報告、第１１１巻、第２７９号、pp.49-54、2011.11
【図１】
0006037397.tif 000002
【図２】
0006037397.tif 000003
【図３】
0006037397.tif 000004
【図４】
0006037397.tif 000005
【図５】
0006037397.tif 000006
【図６】
0006037397.tif 000007
【図７】
0006037397.tif 000008
【図８】
0006037397.tif 000009
【図９】
0006037397.tif 000010
【図１０】
0006037397.tif 000011
【図１１】
0006037397.tif 000012