(57)【要約】      （修正有）【課題】アプリケーションの処理の流れを可視化する処理可視化プログラム、処理可視化方法および情報処理装置を提供する。【解決手段】開発者端末１０は、通信部１１と記憶部１２と制御部１５を有する。記憶部１２のコンポーネントＤＢ１２ａは、アプリケーションを構成する各コンポーネントの接続関係を示すコンポーネント図を記憶し、ログＤＢ１２ｃは、各コンポーネントが実行した処理に関する各ログデータを記憶する。制御部１５の付与部１９は、コンポーネント図に基づいて、呼び出し関係にある処理ごとにログデータを関連付けて生成した中間データを中間データＤＢ１２ｄに記憶し、可視化部２０は、中間データにしたがって、処理ごとの流れを可視化する。【選択図】図１
2016212747.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
アプリケーションを構成する各コンポーネントが実行した処理に関する各ログデータを、前記各コンポーネントの接続関係を示すコンポーネント図に基づいて、呼び出し関係にある処理ごとに関連付け、
関連付けられたログデータにしたがって、前記処理ごとの流れを出力する
処理を実行させることを特徴とする処理可視化プログラム。
【請求項２】
前記関連付ける処理は、各ログデータを出力したコンポーネントの接続関係、前記各コンポーネントが実行する処理の依存関係、前記各ログデータの出力時間の差を用いて、前記呼び出し関係にある処理ごとにログデータを関連付けることを特徴とする請求項１に記載の処理可視化プログラム。
【請求項３】
前記関連付ける処理は、第１のコンポーネントが出力した第１のログデータに第１の識別子を付与し、第２のログデータを出力した第２のコンポーネントが前記第１のコンポーネントから到達可能かつ前記第１のログデータの出力時間と前記第２のログデータとの出力時間との差が閾値以下の場合には、前記第２のログデータに前記第１の識別子を付与して、前記第１の識別子を用いて前記ログデータを関連付けることを特徴とする請求項２に記載の処理可視化プログラム。
【請求項４】
前記関連付ける処理は、前記第２のコンポーネントが前記第１のコンポーネントから到達可能かつ前記第１のログデータの出力時間と前記第２のログデータとの出力時間との差が閾値以上の場合には、前記第１のログデータおよび前記第２のログデータに第２の識別子を付与して、前記第２の識別子を用いて前記ログデータを関連付けることを特徴とする請求項３に記載の処理可視化プログラム。
【請求項５】
前記関連付ける処理は、前記第２のコンポーネントが前記第１のコンポーネントから到達不可能な場合には、前記第２のログデータに第３の識別子を付与して、前記第３の識別子を用いて前記ログデータを関連付けることを特徴とする請求項３または４に記載の処理可視化プログラム。
【請求項６】
前記出力する処理は、前記コンポーネントの属性に応じて色分けしたコンポーネント図上に、前記呼び出し関係にある処理ごとに、各処理の流れを表示することを特徴とする請求項１から５のいずれか一つに記載の処理可視化プログラム。
【請求項７】
前記出力する処理は、前記各処理を時系列で、前記コンポーネント図上に表示することを特徴とする請求項６に記載の処理可視化プログラム。
【請求項８】
コンピュータが、
アプリケーションを構成する各コンポーネントの接続関係を示すコンポーネント図を記憶するメモリと、当該メモリに接続されるプロセッサとを有し、
前記プロセッサが、
前記各コンポーネントが実行した処理に関する各ログデータを、前記コンポーネント図に基づいて、呼び出し関係にある処理ごとに関連付け、
関連付けられたログデータにしたがって、前記処理ごとの流れを出力する
処理を実行することを特徴とする処理可視化方法。
【請求項９】
アプリケーションを構成する各コンポーネントの接続関係を示すコンポーネント図と、前記各コンポーネントが実行した処理に関する各ログデータとを記憶する記憶部と、
前記コンポーネント図に基づいて、呼び出し関係にある処理ごとにログデータを関連付ける関連付け部と、
前記関連付け部によって関連付けられたログデータにしたがって、前記処理ごとの流れを出力する出力部と
を有することを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、処理可視化プログラム、処理可視化方法および情報処理装置に関する。
【背景技術】
【０００２】
近年、コンポーネント間の非同期処理やコンポーネントの並列処理を含むアプリケーションが開発されている。また、アプリケーションの開発においては、デバッガなどを用いて、エラー箇所の特定などが実行される。例えば、開発段階のアプリケーションに対してテストを実行してエラーが発生した場合、デバッガを用いてエラー箇所の特定が行われる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特表２００５−５２７００８号公報
【特許文献２】特開２０１４−０８５７６２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ところで、アプリケーションなどでは様々な処理が関連して動作することがある。このため、処理Ａでエラーが発生した場合、処理Ａに原因があるのか、処理Ａと並列で動作する処理Ｂに原因があるのか、処理Ａの前に動作していた処理Ｃに原因があるのか、様々な原因が考えられる。
【０００５】
しかしながら、デバッガなどを用いた場合、エラー箇所を特定したとしても、処理の流れを可視化することができないので、エラーの原因がどのコンポーネントかを特定できず、エラーの原因究明やエラーの修正に時間がかかる。
【０００６】
１つの側面では、処理の流れを可視化することができる処理可視化プログラム、処理可視化方法および情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００７】
第１の案では、処理可視化プログラムは、コンピュータに、アプリケーションを構成する各コンポーネントが実行した処理に関する各ログデータを、前記各コンポーネントの接続関係を示すコンポーネント図に基づいて、呼び出し関係にある処理ごとに関連付ける処理を実行させる。処理可視化プログラムは、コンピュータに、関連付けられたログデータにしたがって、前記処理ごとの流れを出力する処理を実行させる。
【発明の効果】
【０００８】
一実施形態によれば、処理の流れを可視化することができる。
【図面の簡単な説明】
【０００９】
【図１】図１は、実施例１に係る開発者端末の機能構成を示す機能ブロック図である。
【図２】図２は、コンポーネントＤＢに記憶されるコンポーネント図の例を示す図である。
【図３】図３は、定義ＤＢに記憶されるイベントマッパー定義の例を示す図である。
【図４】図４は、ログＤＢに記憶されるログデータの例を示す図である。
【図５】図５は、中間データＤＢに記憶される中間データの例を示す図である。
【図６】図６は、中間データの生成例を示す図である。
【図７】図７は、処理の可視化を説明する図である。
【図８】図８は、処理の可視化を説明する図である。
【図９】図９は、処理の可視化を説明する図である。
【図１０】図１０は、処理の流れを示すフローチャートである。
【図１１】図１１は、開発環境と実行環境との連携例を説明する図である。
【図１２】図１２は、ハードウェア構成例を説明する図である。
【発明を実施するための形態】
【００１０】
以下に、本願の開示する処理可視化プログラム、処理可視化方法および情報処理装置の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【実施例１】
【００１１】
［全体構成］
実施例１で説明する開発者端末１０は、アプリケーション（以下では、アプリと記載する場合がある）などを開発する開発者が使用するコンピュータの一例である。開発者端末１０は、開発中のアプリケーションまたは開発が完了したアプリケーションに対して各種動作テストを実行する。
【００１２】
ここで、アプリケーションは、スマートフォンなどの移動体端末やパーソナルコンピュータなどで実行されるクライアントアプリの一例である。クライアントアプリとしては、ＯＳ（Operating  System）の標準的な開発言語で開発されたネイティブアプリ、HTML/JavaScript（登録商標）/CSSで記述し、インストール可能な形態に変換したハイブリッドアプリなどがある。また、クライアントアプリとしては、HTML/JavaScript/CSSで記述し、ブラウザで実行するＷｅｂアプリなどがある。なお、本実施例では、いずれのアプリを採用することができる。
【００１３】
本実施例では、巡回営業アプリを一例にして説明する。なお、巡回営業アプリは、営業担当者がスマートフォンなどにインストールして使用するものであり、訪問スケジュール、目的地までの道のり、地図などを表示する。
【００１４】
そして、開発者端末１０は、アプリケーションを構成する各コンポーネントが実行した処理に関する各ログデータを、各コンポーネント（以下、コンポまたは制御コンポと記載する場合がある）の接続関係を示すコンポーネント図に基づいて、呼び出し関係にある処理ごとに関連付ける。開発者端末１０は、関連付けられたログデータにしたがって、処理ごとの流れを出力する。
【００１５】
例えば、開発者端末１０は、アプリの各コンポーネントから出力された時系列のログを、コンポーネント図の接続関係とログの出力時間差に基づき一連の処理ごとに関連付け、各処理をコンポーネント図上に表示する。この結果、開発者端末１０は、処理の流れを可視化することができる。
【００１６】
［機能構成］
図１は、実施例１に係る開発者端末の機能構成を示す機能ブロック図である。図１に示すように、開発者端末１０は、通信部１１と記憶部１２と制御部１５を有する。
【００１７】
通信部１１は、有線通信や無線通信を用いて、他の装置との通信を実行する処理部であり、例えばネットワークインタフェースカードなどである。例えば、通信部１１は、管理者端末などからテスト対象のアプリを受信する。また、通信部１１は、テスト対象のアプリが外部装置にインストールされている場合、外部装置から各種ログを受信する。
【００１８】
記憶部１２は、プログラムやデータなどを記憶する記憶装置の一例であり、例えばメモリやハードディスクなどである。この記憶部１２は、コンポーネントＤＢ１２ａ、定義ＤＢ１２ｂ、ログＤＢ１２ｃ、中間データＤＢ１２ｃを記憶する。
【００１９】
コンポーネントＤＢ１２ａは、アプリケーションを構成する各コンポーネントの接続関係を示すコンポーネント図を記憶するデータベースである。具体的には、コンポーネントＤＢ１２ａは、各コンポーネントが実行する処理の読出し関係を図示したコンポーネント図を記憶する。なお、コンポーネント図は、アプリの開発者が作成することもでき、公知の開発ツールを用いてアプリのソースコードから自動で作成することもできる。
【００２０】
図２は、コンポーネントＤＢ１２ａに記憶されるコンポーネント図の例を示す図である。図２に示すコンポーネント図は、各コンポーネントの接続関係、コンポーネントが発行可能なイベント、コンポーネントに実装されたファンクションなどを図示し、これらを関連付けている。また、１画面などのある単位には、ひとつの制御コンポが存在し、その他のコンポは制御コンポの子であり、制御コンポから操作することができる（図２の一点鎖線）。
【００２１】
例えば、HeaderComp（ヘッダ部品コンポ）がイベント（HeaderButtonClicked）を発行すると、PageComp（ページ制御コンポ）がファンクション（settingChanged）を実行する。また、ScheduleComp（スケジュールデータ管理コンポ）がイベント（ScheduleUpdated）を発行すると、MapComp（マップ部品コンポ）がファンクション（updata）を実行し、SchduleConvComp（スケジュールデータコンバータコンポ）がファンクション（convert）を実行する。
【００２２】
また、各コンポーネントは、種別によって色分けすることもできる。例えば、HeaderCompやMapCompなどの制御ロジックが規定されるコンポーネントと、ScheduleCompやSchduleConvCompなどの表示制御を伴うロジックが規定されるコンポーネントとを色で区別して表示することもできる。なお、色分けは、後述する可視化部２０が処理の可視化を実行する際に、行うこともできる。
【００２３】
なお、本実施例では、説明を簡略化するために、図２の領域Ａで囲まれたコンポーネント図を例にして説明する。この領域Ａで囲まれたコンポーネント図は、ScheduleCompがスケジュールデータを読み込み、読み込まれたスケジュールデータがマップ部のMapCompやリスト部のListCompに渡され、スケジュールデータに応じた画面表示が行われる部分に該当する。
【００２４】
定義ＤＢ１２ｂは、コンポーネント図から生成されるイベントマッパー定義を記憶するデータベースである。図３は、定義ＤＢ１２ｂに記憶されるイベントマッパー定義の例を示す図である。図３に示すイベントマッパー定義では、イベントに対し、関連付けるコンポーネントの名前（comp）とファンクション（func）を定義する。アプリ実行時、制御コンポーネントがイベントマッパー定義を読み込み、イベント発行に対して行う処理を認識して実行する。
【００２５】
ログＤＢ１２ｃは、アプリケーションを構成する各コンポーネントが実行した処理に関する各ログデータを記憶するデータベースである。具体的には、ログＤＢ１２ｃは、図２に示すページ制御コンポによって採取された、コンポーネントが発行するイベントとその結果呼び出されたファンクションを記録したログデータを記憶する。
【００２６】
図４は、ログＤＢ１２ｃに記憶されるログデータの例を示す図である。図４に示すように、ログデータは、「コンポ、イベント／ファンクション、タイムスタンプ」を有する。ここで、「コンポ」は、ログを出力したコンポーネントを識別する情報であり、コンポーネントの名称などが設定される。「イベント／ファンクション」は、コンポーネントが発行したイベントまたはコンポーネントが実行したファンクションが設定される。「タイムスタンプ」は、ログが出力された時刻が設定される。
【００２７】
図４の例では、ScheduleCompが、10：00：00.000にイベント（ScheduleUpdated）を発行し、MapCompが、10：00：00.002にファンクション（updata）を実行し、SchduleConvCompが、10：00：00.003にファンクション（convert）を実行したことを示す。
【００２８】
中間データＤＢ１２ｄは、後述する付与部１９や可視化部２０などによって生成される、処理の可視化に際する中間データを記憶するデータベースである。図５は、中間データＤＢ１２ｄに記憶される中間データの例を示す図である。図５に示すように、中間データは、「コンポ、イベント／ファンクション、タイムスタンプ、マーカー」を有する。ここで、「コンポ、イベント／ファンクション、タイムスタンプ」は、図４と同様の項目である。「マーカー」は、処理毎にログデータを関連付ける識別子である。
【００２９】
図５の例では、ScheduleCompのイベント（ScheduleUpdated）とMapComのファンクション（updata）とがマーカー「１」で関連付けられており、一連の処理でこれらが実行されることがわかる。また、ScheduleCompのイベント（ScheduleUpdated）と、SchduleConvCompのファンクション（convert）とがマーカー「２」で関連付けられており、一連の処理でこれらが実行されることがわかる。
【００３０】
制御部１５は、開発者端末１０全体を司る処理部であり、例えばプロセッサなどである。この制御部１５は、取得部１６、生成部１７、アプリ実行部１８、付与部１９、可視化部２０を有する。なお、取得部１６、生成部１７、アプリ実行部１８、付与部１９、可視化部２０は、プロセッサが有する電子回路の一例やプロセッサが実行するプロセスの一例である。また、付与部１９は、関連付け部の一例であり、可視化部２０は、出力部の一例である。
【００３１】
取得部１６は、外部の管理者端末などからテスト対象のアプリケーションや当該アプリケーションのコンポーネント図を取得する処理部である。具体的には、取得部１６は、アプリケーションを取得して記憶部１２に格納したり、各処理部に出力したりする。また、取得部１６は、取得したコンポーネント図をコンポーネントＤＢ１２ａに格納する。なお、取得部１６は、記憶媒体に記憶されるアプリケーションコンポーネント図を読み出すこともできる。
【００３２】
生成部１７は、イベントマッパー定義を生成する処理部である。具体的には、生成部１７は、コンポーネントＤＢ１２ａにコンポーネント図が格納されると、当該コンポーネント図を読み出してイベントマッパー定義を生成して、定義ＤＢ１２ｂに格納する。なお、イベントマッパー定義の生成手法は、公知の手法を採用することができるので、ここでは詳細な説明は省略する。
【００３３】
アプリ実行部１８は、取得部１６によって取得されたアプリケーションを実行する処理部である。具体的には、アプリ実行部１８は、アプリケーションを実行して、出力されたログを収集して、ログＤＢ１２ｃに格納する。つまり、アプリ実行部１８は、アプリケーションを実行し、コンポーネントが発行するイベントとその結果呼び出されたファンクションがページ制御コンポによって記録された、ログデータを採取する。
【００３４】
なお、ここでは、アプリを実行してログデータを収集する例を説明したが、これに限定されるものではない。例えば、ログＤＢ１２ｃは、他の装置が採取したログデータを記憶することもできる。また、アプリ実行部１８は、ユーザ端末にすでにインストールされているアプリケーションが実行されて出力されたログを当該ユーザ端末から取得してログＤＢ１２ｃに格納することもできる。
【００３５】
付与部１９は、ログＤＢ１２ｃに記憶される各ログデータを、コンポーネントＤＢ１２ａに記憶されるコンポーネント図に基づいて、呼び出し関係にある処理ごとに関連付ける処理部である。具体的には、付与部１９は、各ログデータを出力したコンポーネントの接続関係、各コンポーネントが実行する処理の依存関係、各ログデータの出力時間の差を用いて、呼び出し関係にある処理ごとにログデータにマーカーを付与した中間データを生成する。そして、付与部１９は、生成した中間データを中間データＤＢ１２ｄに格納する。
【００３６】
例えば、付与部１９は、初めにログを出力したコンポーネントを基準にして、条件１、条件２、条件３にしたがって、各ログデータにマーカーを付与する。ここで、初めにログを出力したコンポーネントを第１のコンポーネントとし、第１のログデータにマーカー「１」が付与されているものとする。
【００３７】
（条件１）第２のログデータを出力した第２のコンポーネントがマーカー付与済みのコンポーネントから到達可能かつログの出力時間の差が閾値以下の場合には、第２のログデータに、当該付与済みのマーカーを付与する。
（条件２）第２のログデータを出力した第２のコンポーネントがマーカー付与済みのコンポーネントから到達可能かつログの出力時間の差が閾値以上の場合には、両ログデータに、新たにマーカーを付与する。
（条件３）第２のログデータを出力した第２のコンポーネントがマーカー付与済みのいずれのコンポーネントからも到達不可能な場合には、第２のログデータに新たなマーカーを付与する。
【００３８】
ここで、図５に示したログデータを処理毎に分類して中間データを生成する具体的に説明する。図６は、中間データの生成例を示す図である。図６に示すように、付与部１９は、１件目のログデータ「ScheduleComp、ScheduleUpdated、10:00:00.000」を読み込み、このログデータが先頭であることから、このログデータにマーカー「１」を付与する。
【００３９】
続いて、付与部１９は、２件目のログデータ「MapComp、update、10:00:00.002」を読み込む。そして、付与部１９は、図２のコンポーネント図を参照し、MapCompとScheduleCompとが直接接続されていることから、MapCompがScheduleCompから到達可能と判定する。さらに、付与部１９は、１件目と２件目のタイプスタンプの差が閾値（例えば１秒）以下であると判定する。この結果、付与部１９は、２件目が条件１を満たすと判定し、２件目のログデータ「MapComp、update、10:00:00.002」に、１件目と同じマーカー「１」を付与する。
【００４０】
続いて、付与部１９は、３件目のログデータ「ScheduleConvComp、convert、10:00:00.003」を読み込む。そして、付与部１９は、図２のコンポーネント図を参照し、２件目のMapCompと３件目のScheduleConvCompとが直接接続されていないことから、３件目は２件目から到達不可能と判定する。そして、付与部１９は、３件目のScheduleConvCompと１件目のScheduleCompとが直接接続されていることから、３件目は１件目から到達可能と判定する。さらに、付与部１９は、１件目と３件目のタイプスタンプの差が閾値以下であると判定する。この結果、付与部１９は、３件目が条件２を満たすと判定し、１件目のログデータ「ScheduleComp、ScheduleUpdated、10:00:00.000」と３件目のログデータ「ScheduleConvComp、convert、10:00:00.003」に、新たなマーカー「２」を付与する。
【００４１】
続いて、付与部１９は、４件目のログデータ「ScheduleConvComp、ScheduleConverted、10:00:00.014」を読み込む。そして、付与部１９は、３件目と４件目が同じコンポーネントによるログであることから、到達可能と判定する。さらに、付与部１９は、３件目と４件目のタイプスタンプの差が閾値以下であると判定する。この結果、付与部１９は、４件目が条件１を満たすと判定し、４件目のログデータ「ScheduleConvComp、ScheduleConverted、10:00:00.014」に、３件目と同じマーカー「２」を付与する。
【００４２】
続いて、付与部１９は、５件目のログデータ「ListComp、updata、10:00:00.016」を読み込む。そして、付与部１９は、図２のコンポーネント図を参照し、４件目のScheduleConvCompと５件目のListCompとが直接接続されていることから、５件目は４件目から到達可能と判定する。さらに、付与部１９は、４件目と５件目のタイプスタンプの差が閾値以下であると判定する。この結果、付与部１９は、５件目が条件１を満たすと判定し、５件目のログデータ「ListComp、updata、10:00:00.016」に、４件目と同じマーカー「２」を付与する。
【００４３】
続いて、付与部１９は、６件目のログデータ「MapComp、IconSelected、10:00:02.149」を読み込む。そして、付与部１９は、各ログデータを遡っていくと、２件目の「MapComp」から到達可能と判定する。しかし、付与部１９は、２件目と６件目のタイプスタンプの差が閾値以上であると判定する。この結果、付与部１９は、６件目が条件３を満たすと判定し、６件目のログデータ「MapComp、IconSelected、10:00:02.149」に、新たなマーカー「３」を付与する。
【００４４】
このようにして、付与部１９は、図５に示した中間データを生成して中間データＤＢ１２ｄに格納する。なお、付与部１９は、中間データの生成が完了したことを、可視化部２０に出力することもできる。
【００４５】
可視化部２０は、中間データにしたがって、処理の流れを可視化する処理部である。具体的には、可視化部２０は、コンポーネントの属性に応じて色分けしたコンポーネント図上に、各処理を時系列で表示する。例えば、可視化部２０は、ログデータの時系列で、コンポーネント上に、付与したマーカーを順次表示させる。
【００４６】
ここで、図５に示した中間データを用いて、処理を可視化する例を説明する。図７から図９は、処理の可視化を説明する図である。まず、図７に示すように、可視化部２０は、最初のレコードの時刻「10：00：00.000」に、該当コンポのイベント／ファンクションの根本にマーカーを出現させる。ここでは、可視化部２０は、ScheduleComp上に、マーカー「１」と「２」を出現させる（図７の右上図）。なお、可視化部２０は、マーカー「１」は、２レコード目に別コンポに移動し、マーカー「２」は、３レコード目で別コンポに移動するので、それらの時刻から逆算してマーカーの移動アニメーションの位置計算を行う。
【００４７】
次に、可視化部２０は、２レコード目の時刻に、マーカー「１」がMapCompのupdateの根本に到達するように、マーカー「１」を経路に沿って移動させる（図７の右下図）。また、可視化部２０は、マーカー「２」が３レコード目の10:00:00.003にScheduleConvCompに到達するので、２レコード目の時点では経路上の２/３の位置まで移動させる（図７の右下図）。なお、以降のレコードではマーカー「１」は出現しないので、ここで移動は終了となる。つまり、マーカー「１」で関連付けられた処理は、２つ目のログデータで終了したことになる。
【００４８】
ここで、可視化部２０は、ScheduleCompのイベント「ScheduleUpdated」にマーカー「１」とマーカー「２」が分岐して移動することを表示する。つまり、可視化部２０は、処理の並列分岐を可視化することができる。
【００４９】
続いて、図８に示すように、可視化部２０は、マーカー「２」について、３レコード目の時刻「10:00:00.003」にScheduleConvCompのconvertに到達し、４レコード目の時刻「10:00:00.014」にScheduleConvComp内のScheduleConvertedに移動するように、逆算して移動アニメーションの位置や移動時間を計算する。そして、可視化部２０は、計算した移動時間にしたがって、マーカー「２」をScheduleConvCompへ向かって移動させる（図８の右上図）。
【００５０】
さらに、可視化部２０は、マーカー「２」について、４レコード目の時刻「10:00:00.014」にScheduleConvCompのScheduleConvertedの根本に到達し、５レコード目の時刻「10:00:00.016」にListComp内のupdateに移動するように、逆算して移動アニメーションの位置を計算する。そして、可視化部２０は、計算した移動時間にしたがって、ScheduleConvCompを経由してListConpへ向かって、マーカー「２」の移動を開始する（図８の右下図）。
【００５１】
続いて、図９に示すように、可視化部２０は、５レコード目の時刻「10:00:00.016」にListCompのupdateの根本に位置するように、マーカー「２」を移動させる（図９の右上図）。以降のレコードでマーカー「２」は出現しないので、ここで移動は終了となる。つまり、マーカー「２」で関連付けられた処理は、５つ目のログで終了したことになる。
【００５２】
最後に、可視化部２０は、６レコード目の時刻「10:00:02.149」に、マーカー「３」をMapCompのIconSelectedの根本に出現させる。つまり、この時点で、画面部品のユーザ操作による新規処理フローが発生したことになる。このようにして、可視化部２０は、中間データにしたがってマーカーをコンポーネント図上に表示させるとともに移動させることで、各処理を可視化することができる。
【００５３】
［処理の流れ］
図１０は、処理の流れを示すフローチャートである。ここでは、マーカーを付与する処理について説明する。なお、マーカーは生成順に１ずつ増えるものとする。
【００５４】
図１０に示すように、付与部１９は、ログＤＢ１２ｃに記憶されるログデータを時系列に並び替える（Ｓ１０１）。なお、すでに時系列で記憶されている場合は、処理を省略することができる。
【００５５】
続いて、付与部１９は、先頭のログデータにマーカー「１」を設定し（Ｓ１０２）、次のログデータを読み込む（Ｓ１０３）。
【００５６】
そして、付与部１９は、読み込んだログデータに対応するコンポーネントが、存在するマーカーから到達可能か否かを判定する（Ｓ１０４）。例えば、付与部１９は、読み込んだログデータに対応するコンポーネントが、マーカー付与済みのログデータに対応するコンポーネントのいずれかに到達可能か否かを判定する。
【００５７】
ここで、付与部１９は、読み込んだログデータに対応するコンポーネントが、存在するマーカーから到達可能である場合（Ｓ１０４：Ｙｅｓ）、ログデータの出力時間の差が閾値以下か否かを判定する（Ｓ１０５）。
【００５８】
そして、付与部１９は、ログデータの出力時間の差が閾値以下である場合（Ｓ１０５：Ｙｅｓ）、対象のログデータに、到達可能と判定されたログデータに付与されているマーカーを付与する（Ｓ１０６）。
【００５９】
一方、付与部１９は、ログデータの出力時間の差が閾値より大きい場合（Ｓ１０５：Ｎｏ）、対象のログデータと、到達可能と判定されたログデータとのそれぞれに、新たなマーカーを付与する（Ｓ１０７）。
【００６０】
また、付与部１９は、読み込んだログデータに対応するコンポーネントが、存在するマーカーのいずれからも到達不可能である場合（Ｓ１０４：Ｎｏ）、対象のログデータに、新たなマーカーを付与する（Ｓ１０８）。
【００６１】
そして、Ｓ１０６、Ｓ１０７、Ｓ１０８の後、付与部１９は、未完了のログデータがあるか否かを判定し（Ｓ１０９）、未完了のログデータがある場合には（Ｓ１０９：Ｙｅｓ）、Ｓ１０３以降を実行する。一方、付与部１９は、未完了のログデータがない場合には（Ｓ１０９：Ｎｏ）、処理を終了する。
【００６２】
その後、可視化部２０は、付与部１９が生成した中間データにしたがって、処理を可視化する。具体的には、可視化部２０は、先頭のログデータのタイムスタンプを処理開始時刻とし、各ログデータのタイムスタンプにしたがって、コンポーネント図にマーカーを出現させたり移動させたりして、処理を可視化する。
【００６３】
例えば、１件目のログデータ（コンポＡ）の時刻が１０：００：００でマーカーが「１」、２件目のログデータ（コンポＢ）の時刻が１０：００：０３でマーカーが「１」であるとする。この場合、可視化部２０は、まずコンポＡにマーカー「１」を出現させ、３秒後にコンポＢに到達するように、マーカー「１」をコンポＡからコンポＢへ移動させる。なお、コンポＡからコンポＢまでの距離は、コンポーネント図やイベントマッパー定義（ＪＳＯＮ）から取得することができる。
【００６４】
［効果］
このように、開発者端末１０は、採取ログデータを時系列に並べ、最初のログデータを起点として、起点のコンポーネント上にマーカーを表示する。開発者端末１０は、次のログデータのコンポーネントが、コンポーネント図上で最初のマーカーのコンポから移動可能なコンポかどうかを判定する。そして、開発者端末１０は、移動可能なら最初のマーカーと連続した処理とみなし、マーカーを移動する。
【００６５】
一方、開発者端末１０は、移動不可なら、最後に出現した移動可能地点から分岐したとみなしてその箇所から現ログへの分岐マーカーを追加する。この場合、開発者端末１０は、前のログデータとの時間間隔を求め、設定したしきい値を超えている場合、継続した処理ではなく新たな契機による処理の流れとみなし、新たなマーカーによってそれを表現する。以降、開発者端末１０は、マーカーの移動または追加を繰り返し、マーカーによる処理の流れの可視化を実現する。
【００６６】
したがって、開発者端末１０は、可視化や分析に用いるデータを、業務ロジックに影響を与えずに採取することができる。また、開発者端末１０は、採取したデータを用いて、アプリの構成を示すコンポーネント図上でコンポーネント間の処理の流れを、並列処理や非同期処理などを考慮して可視化する。この結果、開発者端末１０は、実際の処理の流れに近い形での可視化が可能になる。
【００６７】
また、開発者端末１０は、コンポーネント仕様に従って、コンポーネントの集合としてアプリを構築することにより、データ採取機能は自動的に組み込まれ、また、可視化の基盤となるコンポーネント図も自動的に生成することができる。
【００６８】
また、開発者端末１０は、自動生成される採取データとコンポーネント図を入力とし、コンポーネント図上で処理の流れを可視化し、アプリ内部の追加開発なしにアプリ挙動の分析を実行できる。
【００６９】
また、開発者端末１０は、ログデータとコンポーネント図を入力とし、解析を加えて可視化することにより、アプリ側で特別な仕組みを追加実装することなく、並列的に実行された処理フローも可視化することができる。
【００７０】
また、開発者端末１０は、複数ソースやアプリ全体など、大きな範囲での処理やデータの流れを可視化することで、問題のある箇所の絞り込みを実行できる。また、開発者端末１０は、問題発生箇所だけでなく、問題発生に至るまでに、どの部分がどのような順序で実行されたかを表示することにより、間接的なエラー発生原因が判定しやすくなる。
【実施例２】
【００７１】
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。
【００７２】
［閾値の設定］
上記実施例で説明した閾値については任意に設定変更することができる。したがって、どのような閾値を設定するかによって、フロー等で説明した閾値以下や閾値未満などの判定条件を任意に変更することができる。
【００７３】
［開発と実行の連携］
上記説明した処理の可視化は、開発環境と実行環境とを連携させることもできる。図１１は、開発環境と実行環境との連携例を説明する図である。図１１に示すように、開発部でアプリを生成し、実行部であるスマートデバイスにインストールする。そして、スマートデバイスで当該アプリを実行し、開発部側で、実行された際のログデータを採取する。そして、開発部側では、実施例１で説明した手法で処理を可視化し、アプリのエラーなどを検出する。その後、開発部側では、検出されたエラー原因を修正したアプリを再度スマートデバイスにインストールして、ログデータの採取を実行する。
【００７４】
このように、開発部と実行部の連携により、設計図上で直接可視化が実現でき、ログデータの採取と可視化が容易になり、アプリの設計や修正が容易になる。
【００７５】
［システム］
また、図示した装置の各構成は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、任意の単位で分散または統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【００７６】
また、本実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともでき、あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【００７７】
［ハードウェア］
図１２は、ハードウェア構成例を説明する図である。図１２に示すように、開発者端末１０は、通信インタフェース１０ａ、ＨＤＤ（Hard  Disk  Drive）１０ｂ、メモリ１０ｃ、プロセッサ１０ｄを有する。また、図１２に示した各部は、バス等で相互に接続される。
【００７８】
通信インタフェース１０ａは、他の装置との通信を制御するインタフェースであり、例えばネットワークインタフェースカードである。ＨＤＤ１０ｂは、図１等に示した機能を動作させるプログラム、ＤＢ、テーブルなどを記憶する。
【００７９】
プロセッサ１０ｄは、図１等に示した各処理部と同様の処理を実行するプログラムをＨＤＤ１０ｂ等から読み出してメモリ１０ｃに展開することで、図１等で説明した各機能を実行するプロセスを動作させる。
【００８０】
すなわち、このプロセスは、開発者端末１０が有する各処理部と同様の機能を実行する。具体的には、プロセッサ１０ｄは、取得部１６、生成部１７、アプリ実行部１８、付与部１９、可視化部２０と同様の機能を有するプログラムをＨＤＤ１０ｂ等から読み出す。そして、プロセッサ１０ｄは、取得部１６、生成部１７、アプリ実行部１８、付与部１９、可視化部２０と同様の処理を実行するプロセスを実行する。
【００８１】
このように開発者端末１０は、プログラムを読み出して実行することで処理可視化方法を実行する情報処理装置として動作する。また、開発者端末１０は、媒体読取装置によって記録媒体から上記プログラムを読み出し、読み出された上記プログラムを実行することで上記した実施例と同様の機能を実現することもできる。なお、この他の実施例でいうプログラムは、開発者端末１０によって実行されることに限定されるものではない。例えば、他のコンピュータまたはサーバがプログラムを実行する場合や、これらが協働してプログラムを実行するような場合にも、本発明を同様に適用することができる。
【符号の説明】
【００８２】
１０  開発者端末
１１  通信部
１２  記憶部
１２ａ  コンポーネントＤＢ
１２ｂ  定義ＤＢ
１２ｃ  ログＤＢ
１２ｄ  中間データＤＢ
１５  制御部
１６  取得部
１７  生成部
１８  アプリ実行部
１９  付与部
２０  可視化部
【図１】
2016212747.tif 000003
【図２】
2016212747.tif 000004
【図３】
2016212747.tif 000005
【図４】
2016212747.tif 000006
【図５】
2016212747.tif 000007
【図６】
2016212747.tif 000008
【図７】
2016212747.tif 000009
【図８】
2016212747.tif 000010
【図９】
2016212747.tif 000011
【図１０】
2016212747.tif 000012
【図１１】
2016212747.tif 000013
【図１２】
2016212747.tif 000014