(57)【要約】【課題】データフロー上で処理の連続性／不連続性を可視化できるデバッグ装置を提供することを課題とする。【解決手段】解析対象のプログラムのデータフローを表示するデバッグ装置であって、データフローを処理に連続性があるまとまり毎にグループ化し、このグループ化を明示してデータフローを表示することを特徴とし、特に、プログラムを実行してプログラムで使用される各変数の値を取得し、プログラムで使用される変数毎に、取得した変数の値の時系列データに基づいて周波数解析を行い、周波数解析による各変数についての周波数成分に基づいてグループ化すると好適である。【選択図】図７
2014203165.tif 000002
【特許請求の範囲】
【請求項１】
解析対象のプログラムのデータフローを表示するデバッグ装置であって、
データフローを処理に連続性があるまとまり毎にグループ化するグループ化手段を備え、
前記グループ化手段によるグループ化を明示してデータフローを表示することを特徴とするデバッグ装置。
【請求項２】
プログラムを実行し、プログラムで使用される各変数の値を取得する実行手段と、
プログラムで使用される変数毎に、前記実行手段で取得した変数の値の時系列データに基づいて周波数解析を行う周波数解析手段と、
を備え、
前記グループ化手段は、前記周波数解析手段での周波数解析による各変数についての周波数成分に基づいてグループ化することを特徴とする請求項１に記載のデバッグ装置。
【請求項３】
プログラムで使用される各変数の更新を行うタスクを取得する更新タスク取得手段を備え、
前記グループ化手段は、前記更新タスク取得手段で取得した各変数についての更新タスクに基づいてグループ化することを特徴とする請求項１に記載のデバッグ装置。
【請求項４】
プログラムを実行し、プログラムで使用される各変数の値を取得する実行手段と、
プログラムで使用される変数毎に、前記実行手段で取得した変数の値の時系列データに基づいて更新周期を取得する更新周期取得手段と、
を備え、
前記グループ化手段は、前記更新周期取得手段で取得した各変数についての更新周期に基づいてグループ化することを特徴とする請求項１に記載のデバッグ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムのデバッグを支援するためのデバッグ装置に関する。
【背景技術】
【０００２】
制御等のプログラム（ソフトウェア）を開発した場合、プログラムが正常に動作するかを検証する必要があり、その支援装置としてデバッグ装置がある。特許文献１には、プログラムを静的に解析し、指定された変数を基準に計算式（例えば、算術演算命令、論理演算命令）を追跡して変数間の依存関係を解析し、変数間の依存関係を視覚的に表示するデバッグ装置が開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００３−１０８４０４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
上記のデバッグ装置の場合、変数間の計算式だけを追跡しているので、変数の更新周期や更新タイミング等に関わる情報が得られず、不連続に更新される可能性のある変数（例えば、異なるタイミングで更新される変数）が区別なく表示されている。そのため、処理の不連続性（例えば、変数の更新タイミング）を原因とする不具合を見つけるのが困難である。
【０００５】
そこで、本発明は、データフロー上で処理の連続性／不連続性を可視化できるデバッグ装置を提供することを課題とする。
【課題を解決するための手段】
【０００６】
本発明に係るデバッグ装置は、解析対象のプログラムのデータフローを表示するデバッグ装置であって、データフローを処理に連続性があるまとまり毎にグループ化するグループ化手段を備え、グループ化手段によるグループ化を明示してデータフローを表示することを特徴とする。
【０００７】
このデバッグ装置では、グループ化手段によって、処理に連続性のあるまとまり毎にデータフローをグループ分けする。処理に連続性のあるまとまりとしては、例えば、同じ更新タスクのまとまり、同じ更新タイミングのまとまり、同じ更新周期のまとまり、同じ周波数成分のまとまりがある。そして、デバッグ装置では、そのグループ化しや各グループを明示してデータフローを表示する。このように、このデバッグ装置は、データフローを処理に連続性のあるまとまり毎にグループ分けして表示することにより、データフロー上で処理の連続性／不連続性を可視化できる。開発者は、このデータフローを見ることによって、重点的にデバッグすべき箇所が判り、処理の不連続性を原因とする不具合を見つけることができるとともにデバッグ工数が削減してデバッグ効率が向上する。
【０００８】
本発明の上記デバッグ装置では、プログラムを実行し、プログラムで使用される各変数の値を取得する実行手段と、プログラムで使用される変数毎に、実行手段で取得した変数の値の時系列データに基づいて周波数解析を行う周波数解析手段とを備え、グループ化手段は、周波数解析手段での周波数解析による各変数についての周波数成分に基づいてグループ化する構成としてもよい。
【０００９】
このデバッグ装置では、実行手段によって、実際にプログラムを実行し、プログラムで使用される各変数の値を時系列データとして取得する。そして、デバッグ装置では、周波数解析手段によって、プログラムで使用される変数毎に、変数の値の時系列データに基づいて周波数解析を行って周波数成分を取得する。さらに、デバッグ装置では、グループ化手段によって、その各変数の周波数成分に基づいて処理に連続性のあるまとまりを判別してグループ化する。このように、デバッグ装置では、各変数の値の時系列データを周波数解析して周波数成分を取得することによって、その各変数の周波数成分に基づいて処理に連続性のあるまとまりを簡単かつ高精度に判別できる。
【００１０】
本発明の上記デバッグ装置では、プログラムで使用される各変数の更新を行うタスクを取得する更新タスク取得手段を備え、グループ化手段は、更新タスク取得手段で取得した各変数についての更新タスクに基づいてグループ化する構成としてもよい。
【００１１】
このデバッグ装置では、更新タスク取得手段によって、プログラムで使用される各変数の更新を行うタスクをそれぞれ取得する。そして、デバッグ装置では、グループ化手段によって、その各変数の更新タスクに基づいて処理に連続性のあるまとまりを判別してグループ化する。このように、デバッグ装置では、各変数の更新を行うタスクを取得することによって、その各変数の更新タスクに基づいて処理に連続性のあるまとまりを簡単かつ高精度に判別できる。特に、この方法の場合、プログラムを実際に実行する必要がないので、プログラムを静的に解析するだけで、グループ分けしたデータフローを表示できる。
【００１２】
本発明の上記デバッグ装置では、プログラムを実行し、プログラムで使用される各変数の値を取得する実行手段と、プログラムで使用される変数毎に、実行手段で取得した変数の値の時系列データに基づいて更新周期を取得する更新周期取得手段とを備え、グループ化手段は、更新周期取得手段で取得した各変数についての更新周期に基づいてグループ化する構成としてもよい。
【００１３】
このデバッグ装置では、実行手段によって、実際にプログラムを実行し、プログラムで使用される各変数の値を時系列データとして取得する。そして、デバッグ装置では、更新周期取得手段によって、プログラムで使用される変数毎に、変数の値の時系列データに基づいて更新周期を取得する。そして、デバッグ装置では、グループ化手段によって、その各変数の更新周期に基づいて処理に連続性のあるまとまりを判別してグループ化する。このように、デバッグ装置では、各変数についての更新周期を取得することによって、その各変数の更新周期に基づいて処理に連続性のあるまとまりを簡単かつ高精度に判別できる。
【発明の効果】
【００１４】
本発明によれば、データフローを処理に連続性のあるまとまり毎にグループ分けして表示することにより、データフロー上で処理の連続性／不連続性を可視化できる。
【図面の簡単な説明】
【００１５】
【図１】本実施の形態に係る制御ソフトウェア開発環境の構成図である。
【図２】第１の実施の形態に係る解析処理の流れを示すフローチャートである。
【図３】解析対象のサンプルプログラムの一例である。
【図４】第１の実施の形態に係る解析処理を図３のサンプルプログラムに適用した例であり、（ａ）がコールツリーであり、（ｂ）がデータフローであり、（ｃ）が従来のコールツリー（比較例）であり、（ｄ）が従来のデータフロー（比較例）である。
【図５】第２の実施の形態に係る解析処理の流れを示すフローチャートである。
【図６】第２の実施の形態に係る解析処理を図３のサンプルプログラムに適用した例である。
【図７】第３の実施の形態に係る解析処理の流れを示すフローチャートである。
【図８】解析対象のサンプルプログラムの他の例である。
【図９】図８のサンプルプログラムの各変数の値の時系列データであり、（ａ）が変数ｉｎ３であり、（ｂ）が変数ｉｎ２であり、（ｃ）が変数ｉｎ１であり、（ｄ）が変数ｒ０であり、（ｅ）が変数ｐ０であり、（ｆ）が変数ｑ０であり、（ｇ）が変数ｂ（ｏｕｔ）である。
【図１０】図８のサンプルプログラムの各変数の周波数成分データであり、（ａ）が変数ｉｎ３であり、（ｂ）が変数ｉｎ２であり、（ｃ）が変数ｉｎ１であり、（ｄ）が変数ｒ０であり、（ｅ）が変数ｐ０であり、（ｆ）が変数ｑ０であり、（ｇ）が変数ｂ（ｏｕｔ）である。
【図１１】第３の実施の形態に係る解析処理を図８のサンプルプログラムに適用した例であり、（ａ）がデータフローであり、（ｂ）が第１の実施の形態に係る解析処理に用いるコールツリー（比較例）であり、（ｃ）が第２の実施の形態に係る解析処理によるデータフロー（比較例）である。
【図１２】第４の実施の形態に係る解析処理の流れを示すフローチャートである。
【図１３】第４の実施の形態に係る解析処理を図８のサンプルプログラムに適用した例である。
【発明を実施するための形態】
【００１６】
以下、図面を参照して、本発明に係るデバッグ装置の実施の形態を説明する。なお、各図において同一又は相当する要素については同一の符号を付し、重複する説明を省略する。
【００１７】
本実施の形態では、本発明に係るデバッグ装置を、車両等の開発中の制御プログラム（制御ソフトウェア）をデバッグするための制御プログラム開発環境（特に、ホストパソコン）に適用する。本実施の形態に係る制御プログラム開発環境では、制御プログラムをコーディングすると、その制御プログラムのデータフローを処理に連続性があるまとまり毎にグループ分けして表示する。制御プログラムの開発者は、このグループ分けされたデータフローを見て、デバッグを行う。本実施の形態には、グループ分けの方法が異なる４つの実施の形態がある。
【００１８】
図１を参照して、本実施の形態に係る制御プログラム開発環境１について説明する。図１は、本実施の形態に係る制御プログラム開発環境の構成図である。制御プログラム開発環境１は、ホストパーソナルコンピュータ（以下、「ホストパソコン」と記載）２、制御コンピュータ３、制御対象４からなる。ホストパソコン２は、プログラム（ソフトウェア）をコーディング／デバッグするためのコンピュータである。制御コンピュータ３は、制御対象４を制御するためのターゲットのコンピュータであり、例えば、車両の場合にはエンジンやブレーキ等を制御するためのＥＣＵ[Electronic Control Unit]である。制御対象４は、例えば、車両の場合にはエンジンやブレーキである。プログラムは、ホストパソコン２上で作成される。作成（開発）されたプログラムは、制御コンピュータ３に書き込み、実行させることにより、正常に動作しているかを確認する。また、プログラムは、静的な解析だけで確認する場合もある。開発者が、ホストパソコン２上で解析対象のプログラムをコーディングすると、以下で説明する各実施の形態に係る解析処理をホストパソコン２上で行わせる。なお、以下で第１〜第４の実施の形態について説明するが、ホストパソコン２は各実施の形態に対応して構成される。
【００１９】
まず、図２を参照して、第１の実施の形態に係るホストパソコン２における解析処理によるデータフローのグループ分けについて説明する。図２は、第１の実施の形態に係る解析処理の流れを示すフローチャートである。第１の実施の形態では、プログラムで使用される各変数の更新を行うタスクを取得し、この変数の更新タスクに基づいてデータフローをグループ分けし、このグループ分けをデータフロー上で明示して表示する。
【００２０】
ホストパソコン２では、解析対象のプログラムを読み込み（Ｓ１０）、このプログラムにおけるデバッグの対象範囲が指定される（Ｓ１１）。そして、ホストパソコン２では、その範囲のプログラムを静的に解析し（Ｓ１２）、指定された変数を基準に変数間の依存関係（データフロー）を生成する（Ｓ１３）。さらに、ホストパソコン２では、変数を更新している処理タスク（例えば、Ｃ言語での関数）のツリー（コールツリー）を生成し、このコールツリーにおいて実行ツリー毎にＩＤを作成する（Ｓ１４）。そして、ホストパソコン２では、変数間の依存関係における変数の更新処理（ノード）毎に、コールツリーの各実行ツリーのＩＤ（変数がどの実行ツリーで更新されているか）に応じてＩＤを付加する（Ｓ１５）。ここまでの処理が、静的な解析処理である。
【００２１】
ホストパソコン２では、その付加されたＩＤ毎（つまり、更新を行うタスク毎）に変数の更新処理（ノード）を色分けし（グループ分け）、変数の依存関係に基づいてデータフローを生成する（Ｓ１６）そして、ホストパソコン２では、その色分け済みのデータフロー（グループ分けしたデータフロー）を表示する（Ｓ１７）。ここまでの処理が、表示処理である。
【００２２】
このように、第１の実施の形態に係る解析処理は静的な解析処理だけである。なお、第１の実施の形態では、このホストパソコン２における各処理が特許請求の範囲に記載するグループ化手段及び更新タスク取得手段に相当する。
【００２３】
ここで、図３及び図４を参照して、この第１の実施の形態に係る解析処理によるデータフローのグループ分けを適用した一例を説明する。図３は、解析対象のサンプルのプログラム（ソースコード）の一例である。図４は、第１の実施の形態に係る解析処理を図３のサンプルプログラムに適用した例であり、（ａ）がコールツリーであり、（ｂ）がデータフローであり、（ｃ）が従来のコールツリー（比較例）であり、（ｄ）が従来のデータフロー（比較例）である。
【００２４】
図３に示すプログラムは、車両の制御に用いられるプログラムである。このプログラムでは、Ｔａｓｋ１が５ｍ秒毎に実行されるタスクであり、Ｔａｓｋ２がエンジンのクランクアングルの５度毎に実行されるタスクである。したがって、Ｔａｓｋ１は、時間単位で実行され、一定の時間間隔で実行される時間同期のタスクである。Ｔａｓｋ２は、外的要因で実行され、任意の時間間隔で実行される割り込み同期のタスクである。
【００２５】
図４（ｃ）には図３に示すプログラムの従来のコールツリーを示し、図４（ｄ）には図３に示すプログラムのｔを出力変数とする従来のデータフロー（変数間の依存関係）を示している。この従来のデータフローの場合、不連続に更新される可能性のある変数（例えば、異なるタスクで更新される変数、異なる周期やタイミングで更新される変数、異なる周波数成分を持つ変数）間が区別なく表示されている。そのため、そのような不連続性を原因とする不具合を見つけるのが困難である。
【００２６】
第１の実施の形態に係る解析処理では、図４（ａ）に示すように、図３のプログラムのコールツリーを作成すると、時間５ｍ秒毎に実行されるＴａｓｋ１のツリーＴ１にＩＤ＝１と付加し、クランクアングル５度毎に実行されるＴａｓｋ２のツリーＴ２にＩＤ＝２と付加する。そして、この各ツリーのＩＤに応じて、変数（ノード）ｐ１，ｐ２，ｐ０，ｑ００，ｔにＩＤ＝１を付加し、変数（ノード）ｑ２，ｑ１，ｑ０にＩＤ＝２を付加する。そして、図４（ｂ）に示すように、データフローにおいて、その各変数のＩＤに応じて、グループＧ１（ｐ１，ｐ２，ｐ０，ｑ００，ｔ）とグループＧ２（ｑ２，ｑ１，ｑ０）とを色分けしたデータフローを生成し、表示する。但し、図４（ｂ）では、色分けについては各ノード（各変数）の背景の模様を変えて示している。開発者は、このように色分け（グループ分け）された各グループの境界部分（不連続に更新される可能性のある変数間）を重点的にデバッグを行ったり、あるいは、問題のある変数（例えば、異常波形の変数）を含むグループを重点的にデバッグしたりする。
【００２７】
この第１の実施の形態によれば、コールツリーから取得した各変数の更新タスクに応じてグループ分けしたデータフローを表示することにより、更新タスクの相違に応じてデータフロー上で変数更新の連続性／不連続性を可視化できる。この更新タスクによってグループ分けされたデータフローを用いてデバッグを行うことにより、開発者は、重点的にデバッグやレビューを行う箇所が判り、更新タスクによる不連続性を原因とする不具合を見つけることができるとともにデバッグ工数が削減してデバッグ効率が向上する。特に、第１の実施の形態の解析処理の場合、プログラムを実際に実行する必要がないので、プログラムを静的に解析するだけで、グループ分けしたデータフローを表示できる。
【００２８】
次に、図５を参照して、第２の実施の形態に係るホストパソコン２における解析処理によるデータフローのグループ分けについて説明する。図５は、第２の実施の形態に係る解析処理の流れを示すフローチャートである。第２の実施の形態では、プログラムで使用される各変数の更新周期を動作ログから取得し、この変数の更新周期に基づいてデータフローをグループ分けし、このグループ分けをデータフロー上で明示して表示する。
【００２９】
第１の実施の形態と同様に、ホストパソコン２では、解析対象のプログラムを読み込み（Ｓ２０）、デバッグの対象範囲が指定され（Ｓ２１）、その範囲のプログラムを静的に解析し（Ｓ２２）、変数間の依存関係を生成する（Ｓ２３）。ここまでの処理が、静的な解析処理である。
【００３０】
その解析対象のプログラムが、制御コンピュータ３に書き込まれ、実行される（Ｓ２４）。この実行によって、制御対象４をプログラムに従って実際に動作させ、制御コンピュータ３で各変数の時系列データを取得し、この時系列データをホストパソコン２に取り込む。ホストパソコン２では、この各変数の時系列データ（動作ログ）を記録する（Ｓ２５）。ここでは、各変数の時系列の値を解析可能な十分に細かい時間精度にて記録する。そして、ホストパソコン２では、変数間の依存関係における各変数について、時系列データを用いて更新状態（時刻、変化量等）を解析し（Ｓ２６）、時刻毎にその解析した更新状態に従って分類して各更新周期（各更新タイミング）のＩＤを付加する（Ｓ２７）。ここまでの処理は、プログラム実行による解析である。
【００３１】
ホストパソコン２では、その付加されたＩＤ毎（つまり、更新周期毎）に各変数（ノード）を色分けし、変数の依存関係に基づいてデータフローを生成する（Ｓ２８）そして、ホストパソコン２では、その色分け済みのデータフローを表示する（Ｓ２９）。ここまでの処理が、表示処理である。
【００３２】
このように、第２の実施の形態に係る解析処理は静的な解析処理とプログラム実行による解析処理である。なお、第２の実施の形態では、ホストパソコン２における各処理が特許請求の範囲に記載するグループ化手段及び更新周期取得手段に相当し、制御コンピュータ３が特許請求の範囲に記載する実行手段に相当する。
【００３３】
ここで、図６を参照して、この第２の実施の形態に係る解析処理によるデータフローのグループ分けを適用した一例を説明する。図６は、第２の実施の形態に係る解析処理を図３のサンプルプログラムに適用した例である。この例では、図３の解析対象のサンプルのプログラム（ソースコード）及び図４（ｄ）のデータフロー（変数間の依存関係）に適用した。
【００３４】
図６には、図３のプログラムが実際に実行されて取得された各変数ｐ１，ｐ２，ｐ０，ｑ２，ｑ１，ｑ０，ｑ００，ｔについての値の時系列データＤｐ１，Ｄｐ２，Ｄｐ０，Ｄｑ２，Ｄｑ１，Ｄｑ０，Ｄｑ００，Ｄｔをそれぞれ示している。この時系列データは、横軸が時間であり、縦軸が変数の値である。例えば、拡大図でも示す変数ｐ０の時系列データＤｐ０の波形を解析すると、変数の値が比較的長い周期で更新（変化）していることが判る。これと同じ周期で更新される変数がｐ１，ｐ２であり、この変数ｐ１，ｐ２，ｐ０にＩＤ＝１を付加する。また、拡大図でも示す変数ｑ０の時系列データＤｑ０の波形を解析すると、変数の値が比較的短い周期で更新（変化）していることが判る。これと同じ周期で更新される変数がｑ２，ｑ１であり、この変数ｑ２，ｑ１，ｑ０にＩＤ＝２を付加する。また、拡大図でも示す変数ｑ００，ｔの各時系列データＤｑ００，Ｄｔの波形を解析すると、変数の値が変数ｐ１，ｐ２，ｐ０の更新周期や変数ｑ２，ｑ１，ｑ０の更新周期とは異なる周期（変数ｐ０の長い周期＋変数ｑ０の短い周期）で更新(変化)していることが判る。そこで、この変数ｑ００，ｔにＩＤ＝３を付加する。そして、図６に示すように、データフローにおいて、その各変数のＩＤに応じて、グループＧ１（ｐ１，ｐ２，ｐ０）と、グループＧ２（ｑ２，ｑ１，ｑ０）と、グループＧ３（ｑ００，ｔ）とで色分けしたデータフローを生成し、表示する。但し、図６では、色分けについては各ノード（各変数）の背景の模様を変えて示している。ちなみに、この図６では説明のために各変数の値の時系列データも示しているが、この時系列データを示さなくてもよい。
【００３５】
この第２の実施の形態によれば、動作ログから取得した各変数の更新周期（更新タイミング）に応じてグループ分けしたデータフローを表示することにより、更新周期の相違に応じてデータフロー上で変数更新の連続性／不連続性を可視化できる。この更新周期によってグループ分けされたデータフローを用いてデバッグを行うことにより、開発者は、重点的にデバッグやレビューを行う箇所が判り、更新周期による不連続性を原因とする不具合を見つけることができるとともにデバッグ工数が削減してデバッグ効率が向上する。特に、第２の実施の形態の解析処理の場合、周期呼び出しの中で分周して処理を行っていたり、外部信号をポーリングして外部信号に同期するような、コーディング上の呼び出し周期と信号の更新周期とが異なる場合において適切に変数更新に連続性のあるもの同士をグループ分けできる。
【００３６】
次に、図７を参照して、第３の実施の形態に係るホストパソコン２における解析処理によるデータフローのグループ分けについて説明する。図７は、第３の実施の形態に係る解析処理の流れを示すフローチャートである。第３の実施の形態では、プログラムで使用される各変数の動作ログを周波数解析して周波数成分を取得し、この変数の周波数成分に基づいてデータフローをグループ分けし、このグループ分けをデータフロー上で明示して表示する。なお、ホストパソコン２でのＳ３０〜Ｓ３３の処理については、第２の実施の形態で説明したＳ２０〜Ｓ２３と同様の静的な解析処理である。
【００３７】
第２の実施の形態と同様に、解析対象のプログラムが制御コンピュータ３で実行され（Ｓ３４）、制御コンピュータ３で各変数の時系列データが取得され、ホストパソコン２に取り込む。ホストパソコン２では、この各変数の時系列データを記録する（Ｓ３５）。そして、ホストパソコン２では、変数間の依存関係における各変数について、時系列データを用いて時刻毎に周波数成分を解析する（Ｓ３６）。この周波数解析では、時系列データの値を適切な時刻範囲毎に周波数変換（範囲を区切って、ＦＦＴ、ウェーブレット変換等）を行い、各変数の時刻毎の周波数成分を取り出す。そして、ホストパソコン２では、変数間の依存関係における各変数について、時刻毎にその解析した周波数成分の特徴に従って各周波数成分のＩＤを付加する（Ｓ３７）。ここまでの処理は、プログラム実行による解析である。
【００３８】
ホストパソコン２では、その付加されたＩＤ毎（つまり、周波数成分毎）に各変数（ノード）を色分けし、変数の依存関係に基づいてデータフローを生成する（Ｓ３８）そして、ホストパソコン２では、その色分け済みのデータフローを表示する（Ｓ３９）。ここまでの処理が、表示処理である。
【００３９】
このように、第３の実施の形態に係る解析処理は静的な解析処理とプログラム実行による解析処理である。なお、第３の実施の形態では、ホストパソコン２における各処理が特許請求の範囲に記載するグループ化手段及び周波数解析手段に相当し、制御コンピュータ３が特許請求の範囲に記載する実行手段に相当する。
【００４０】
ここで、図８〜図１１を参照して、この第３の実施の形態に係る解析処理によるデータフローのグループ分けを適用した一例を説明する。図８は、解析対象のサンプルのプログラム（ソースコード）の一例である。図９は、図８のサンプルプログラムの各変数の値の時系列データである。図１０は、図８のサンプルプログラムの各変数の周波数成分データである。図１１は、第３の実施の形態に係る解析処理を図８のサンプルプログラムに適用した例であり、（ａ）がデータフローであり、（ｂ）が第１の実施の形態に係る解析処理に用いるコールツリー（比較例）であり、（ｃ）が第２の実施の形態に係る解析処理によるデータフロー（比較例）である。
【００４１】
図８に示すプログラムは、車両の制御に用いられるプログラムである。このプログラムでは、Ｔａｓｋ１が２００ｎ秒毎に実行されるタスクであり、Ｔａｓｋ２が４００ｍ秒毎に実行されるタスクであり、Ｔａｓｋ３が２００ｍ秒毎に実行されるタスクである。したがって、Ｔａｓｋ１、Ｔａｓｋ２、Ｔａｓｋ３は、時間単位で実行され、一定の時間間隔で実行される時間同期のタスクであるが、その時間間隔はそれぞれ異なる。Ｔａｓｋ１におけるｔ０（＝ｉｎ０（））はトリガ信号（ｔｒｉｇ信号）であり、このトリガ信号に応じて変数ａの値が変数ｒ０か変数ｐ０に切り替わる。
【００４２】
図９には、図８のプログラムが実際に実行されて取得された各変数の値の時系列データをそれぞれ示している。この時系列データは、横軸が時間であり、縦軸が変数の値である。また、図１０には、図９の各時系列データを用いて周波数成分を解析して得られた周波数成分データを示している。この周波数成分データは、横軸が周波数成分であり、縦軸が強度である。変数ｉｎ３については、図９（ａ）に値の時系列データを示しており、図１０（ａ）にこの時系列データを周波数解析して得られたある時刻での周波数成分データを示しており、３Ｈｚの周波数成分が取り出される。変数ｉｎ２については、図９（ｂ）に値の時系列データを示しており、図１０（ｂ）にこの時系列データを周波数解析して得られたある時刻での周波数成分データを示しており、２Ｈｚの周波数成分が取り出される。変数ｉｎ１については、図９（ｃ）に値の時系列データを示しており、図１０（ｃ）にこの時系列データを周波数解析して得られたある時刻での周波数成分データを示しており、１Ｈｚの周波数成分が取り出される。変数ｒ０については、図９（ｄ）に値の時系列データを示しており、図１０（ｄ）にこの時系列データを周波数解析して得られたある時刻での周波数成分データを示しており、３Ｈｚの周波数成分が取り出される。変数ｐ０については、図９（ｅ）に値の時系列データを示しており、図１０（ｅ）にこの時系列データを周波数解析して得られたある時刻での周波数成分データを示しており、２Ｈｚの周波数成分が取り出される。変数ｑ０については、図９（ｆ）に値の時系列データを示しており、図１０（ｆ）にこの時系列データを周波数解析して得られたある時刻での周波数成分データを示しており、１Ｈｚの周波数成分が取り出される。変数ｂ（ｏｕｔ）については、図９（ｇ）に値の時系列データを示しており、図１０（ｇ）にこの時系列データを周波数解析して得られたある時刻での周波数成分データを示しており、１Ｈｚと２Ｈｚの周波数成分が取り出される。
【００４３】
なお、変数ａについては、時系列データを示していないが、周波数解析によって、この同じ時刻において２Ｈｚの周波数成分が取り出される。変数ａの値は、上記したうように、トリガ信号である変数ｔ０の値によって切り替えられる。この２Ｈｚの周波数成分が取り出されている時刻では、変数ｔ０が０であり、変数ｐ０の値に応じて変数ａの値が更新されていた。そのため、変数ｐ０の周波数成分である２Ｈｚが、変数ａでも取り出された。ちなみに、トリガ信号である変数ｔ０の値が１のときの時刻では、変数ｒ０の値に応じて変数ａの値が更新される。したがって、変数ｒ０の周波数成分である３Ｈｚが、変数ａでも取り出される。
【００４４】
上記の各変数のある時刻での周波数成分に従って、周波数成分が３Ｈｚの変数ｉｎ３，ｒ０にＩＤ＝１を付加し、周波数成分が２Ｈｚの変数ｉｎ２，ｐ０，ａにＩＤ＝２を付加し、周波数成分が１Ｈｚの変数ｉｎ１，ｑ０にＩＤ＝３を付加し、周波数成分が１Ｈｚと２Ｈｚの変数ｂ（ｏｕｔ）にＩＤ＝１＋２を付加する。トリガ信号の変数ｔ０（＝ｉｎ０）は、周波数成分が不明であり、ＩＤを付加せず、グループ分けの対象としない。なお、この周波数成分が不明の変数ｔ０，ｉｎ０についてもＩＤを付加して、グループ分けの対象としてもよい。
【００４５】
図１１（ａ）に示すように、その各変数のＩＤに応じて、３ＨｚのグループＧ１（ｉｎ１，ｒ０）と、２ＨｚのグループＧ２（ｉｎ２，ｐ０，ａ）と、１ＨｚのグループＧ３（ｉｎ１，ｑ０）と、１Ｈｚ＋２ＨｚのグループＧ４（ｂ，ｏｕｔ）で色分けしたデータフローを生成し、表示する。但し、図１１（ａ）では、色分けについて各ノード（各変数）の背景の模様を変えて示しており、各グループを視認し易くするために矩形の破線で囲んでいる。このデータフローの場合、出力の変数ｂ（ｏｕｔ）が１Ｈｚと２Ｈｚの周波数成分を持った出力（つまり、１Ｈｚの入力と２Ｈｚの入力によって得られる出力）であることが判る。また、トリガ信号の変数ａにより、切り替えられる変数ａの変化点を抽出することができる。そのため、入力信号の違いによる注意点を可視化することができ、各時刻においてデータフロー上のどこに変数の変化があるかを可視化できる。
【００４６】
この図１１（ａ）に示す表示例では、右下に時刻を指定するスライドバーがあり、このスライドバーで示す時刻（時刻範囲）において周波数成分に従って色分けしたデータフローを表示する。さらに、ＧＵＩによるスライドバーに対する操作によって時刻を変えると、違う時刻での周波数成分で色分けしたデータフローに切り替えることができる。この表示例では、このスライドバーで特定の時刻が選択され、その時刻における出力信号に含まれる周波数成分の特徴（例えば、１Ｈｚと２Ｈｚ）から、その時刻において出力信号に影響する信号（例えば、１Ｈｚの変数と２Ｈｚの変数）を可視化できる。
【００４７】
なお、第１の実施の形態の場合、図１１（ｂ）に示すように、図８のプログラムを静的に解析して得られるコールツリーにおいて、時間２００ｎ秒毎に実行されるＴａｓｋ１のツリーＴ１にＩＤ＝１を付加し、時間４００ｍ秒毎に実行されるＴａｓｋ２のツリーＴ２にＩＤ＝２を付加し、時間２００ｍ秒毎に実行されるＴａｓｋ３のツリーＴ３にＩＤ＝３を付加する。そして、この各ツリーのＩＤに応じて、各変数にＩＤを付加し、このＩＤに応じてデータフローを色分けする。第１の実施の形態のデータフローの場合、Ｔａｓｋ１で使用される変数が全て同じＩＤが付加されて色分けされるので、Ｔａｓｋ１、Ｔａｓｋ２、Ｔａｓｋ３の流れをそれぞれ把握することはできるが、トリガ信号の変数ｔ０により切り替えられる変数ａの変化点を抽出することができない。
【００４８】
また、第２の実施の形態の場合、図８のプログラムが実際に実行されて取得された各変数についての値の時系列データが得られと、その各変数の時系列データが解析されて得られた各変数の更新周期に従って、変数ｉｎ３，ｒ０にＩＤ＝１を付加し、変数ｉｎ２，ｐ０，ａにＩＤ＝２を付加し、変数ｉｎ１，ｑ０にＩＤ＝３を付加し、変数ｂ（ｏｕｔ）にＩＤ＝４を付加する。この例でも、トリガ信号である変数ｔ０の値が０であり、変数ｐ０の値に応じて変数ａの値が更新されている。図１１（ｃ）に示すように、その各変数のＩＤに応じて、グループＧ１（ｉｎ１，ｒ０）と、グループＧ２（ｉｎ２，ｐ０，ａ）と、グループＧ３（ｉｎ１，ｑ０）と、グループＧ４（ｂ，ｏｕｔ）で色分けしたデータフローを生成し、表示する。第２の実施の形態の場合、更新周期毎に各変数が全て同じＩＤが付加されて色分けされるので、第３の実施の形態と同様のグループ分け（色分け）は可能であるが、出力の変数ｂ（ｏｕｔ）が１Ｈｚと２Ｈｚの周波数成分を持った出力（つまり、１Ｈｚの変数の入力と２Ｈｚの変数の入力によって得られる出力）であることは判らない。
【００４９】
この第３の実施の形態によれば、動作ログを周波数解析して取得した各変数の周波数成分に応じてグループ分けしたデータフローを表示することにより、周波数成分の相違に応じてデータフロー上で変数更新の連続性／不連続性を可視化できる。この周波数成分によってグループ分けされたデータフローを用いてデバッグを行うことにより、開発者は、重点的にデバッグやレビューを行う箇所が判り、周波数成分による不連続性を原因とする不具合を見つけることができるとともにデバッグ工数が削減してデバッグ効率が向上する。特に、第３の実施の形態の解析処理の場合、ある変数がどの入力の変数の影響を受けて出力されているかが判るので、ある変数に影響を与えている出自の変数を抽出してデバッグを行うことができる。また、処理周期と周波数との関係の問題を明らかにできる。
【００５０】
次に、図１２を参照して、第４の実施の形態に係るホストパソコン２における解析処理によるデータフローのグループ分けについて説明する。図１２は、第４の実施の形態に係る解析処理の流れを示すフローチャートである。第４の実施の形態では、プログラムで使用される各変数の動作ログを周波数解析して周波数成分を取得し、この変数の周波数成分に基づいてデータフローをグループ分けするとともに変数間の依存関係を抽出し、このグループ分けと各周波数成分の伝達経路をデータフロー上で明示して表示する。なお、ホストパソコン２でのＳ４０〜Ｓ４３の処理については、第２の実施の形態で説明したＳ２０〜Ｓ２３と同様の静的な解析処理である。
【００５１】
第２の実施の形態と同様に、解析対象のプログラムが制御コンピュータ３で実行され（Ｓ４４）、制御コンピュータ３で各変数の時系列データを取得され、ホストパソコン２に取り込む。ホストパソコン２では、この各変数の時系列データを記録する（Ｓ４５）。そして、第３の実施の形態と同様に、ホストパソコン２では、各変数について、時系列データを用いて時刻毎に周波数成分を解析し（Ｓ４６）、時刻毎に周波数成分の特徴に従って各周波数成分のＩＤを付加する（Ｓ４７）。さらに、ホストパソコン２では、各周波数成分のＩＤに基づいて周波数成分の伝達経路（変数間の依存関係（つながり））を分析し、各周波数成分の伝達経路にＩＤを付加する（Ｓ４８）。ここまでの処理は、プログラム実行による解析である。
【００５２】
ホストパソコン２では、その各周波数成分のＩＤ毎（つまり、周波数成分毎）に各変数（ノード）を色分けしするとともに、各伝達経路のＩＤ毎（つまり、周波数成分で伝達経路毎）に各変数（ノード）を区分し、変数の依存関係に基づいてデータフローを生成する（Ｓ４９）そして、ホストパソコン２では、その色分け済みかつ区分け済みのデータフローを表示する（Ｓ５０）。ここまでの処理が、表示処理である。
【００５３】
このように、第４の実施の形態に係る解析処理は静的な解析処理とプログラム実行による解析処理である。なお、第４の実施の形態では、ホストパソコン２における各処理が特許請求の範囲に記載するグループ化手段及び周波数解析手段に相当し、制御コンピュータ３が特許請求の範囲に記載する実行手段に相当する。
【００５４】
ここで、図１３を参照して、この第４の実施の形態に係る解析処理によるデータフローのグループ分けを適用した一例を説明する。図１３は、第４の実施の形態に係る解析処理を図８のサンプルプログラムに適用した例である。この例は、周波数成分のＩＤ毎のデータフローの色分け（グループ分け）については図１１（ａ）を用いて説明した第３の実施の形態の例と同様である。
【００５５】
第３の実施の形態の例で説明したある時刻での各変数の周波数成分に基づいて、各周波数成分から変数間の依存性（つながり）を抽出する。これによって、周波数成分が３Ｈｚの信号の伝達経路に含まれる変数ｉｎ３，ｒ０に経路のＩＤ＝１を付加し、周波数成分が２Ｈｚの信号の伝達経路に含まれる変数ｉｎ２，ｐ０，ａ，ｂ（ｏｕｔ）に経路のＩＤ＝２を付加し、周波数成分が１Ｈｚの信号の伝達経路に含まれる変数ｉｎ１，ｑ０，ｂ（ｏｕｔ）にＩＤ＝３を付加し、周波数不明の信号の伝達経路に含まれる変数ｉｎ０，ｔ０にＩＤ＝４を付加する。
【００５６】
図１３に示すように、その各変数の経路のＩＤに応じて、周波数成分が３Ｈｚの経路Ｐ１（ｉｎ１，ｒ０）と、周波数成分が２Ｈｚの経路Ｐ２（ｉｎ２，ｐ０，ａ，ｂ，ｏｕｔ）と、周波数成分が１Ｈｚの経路Ｐ３（ｉｎ１，ｑ０，ｂ，ｏｕｔ）と、周波数成分が不明の経路Ｐ４（ｉｎ０，ｔ０）とで区分けする。そして、周波数成分のＩＤ毎に色分けしかつ経路のＩＤ毎に区分けしたデータフローを表示する。但し、図１３では、色分けについて各ノード（各変数）の背景の模様を変えて示し、区分けについては矩形の破線で示している。このデータフローの場合、第３の実施の形態の例で説明したことに加えて、主要な制御演算である線形演算に用いられている入力信号の流れを可視化することができる。この表示例では、スライドバーで特定の時刻が選択されると、その時刻における各経路のデータの流れを出力信号に含まれる周波数成分の特徴（例えば、１Ｈｚと２Ｈｚ）から抽出して、その時刻において出力信号に影響する各経路の信号（例えば、２Ｈｚの信号の経路と１Ｈｚの信号の経路）を可視化できる。
【００５７】
この第４の実施の形態によれば、第３の実施の形態と同様の効果を有する上に、以下の効果も有している。特に、第４の実施の形態の場合、各変数の周波数成分に基づいて変数間の依存関係に応じた経路を区分けしたデータフローを表示することにより、データフロー上の変数を解析対象としていない別のソースコードで更新している関係も抽出でき、その関係もデバッグやレビューの対象とすることができる。
【００５８】
以上、本発明に係る実施の形態について説明したが、本発明は上記実施の形態に限定されることなく様々な形態で実施される。
【００５９】
例えば、本実施の形態では車両等の制御用のプログラムのデバッグに適用したが、他の様々なプログラムに適用できる。また、本実施の形態では制御プログラム開発環境の一例を示したが、他の様々な開発環境に適用できる。
【００６０】
また、本実施の形態ではデータフロー上のグループ分けを色分けで明示したが、他の方法によってグループ分けを明示してもよい。また、データフロー上の経路の区分けを破線の矩形で明示したが、他の方法によって区分けを明示してもよい。
【符号の説明】
【００６１】
１…制御プログラム開発環境、２…ホストパソコン、３…制御コンピュータ、４…制御対象。
【図１】
2014203165.tif 000003
【図２】
2014203165.tif 000004
【図３】
2014203165.tif 000005
【図４】
2014203165.tif 000006
【図５】
2014203165.tif 000007
【図６】
2014203165.tif 000008
【図７】
2014203165.tif 000009
【図８】
2014203165.tif 000010
【図９】
2014203165.tif 000011
【図１０】
2014203165.tif 000012
【図１２】
2014203165.tif 000013
【図１１】
2014203165.tif 000014
【図１３】
2014203165.tif 000015