(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-04-25
(45)【発行日】2024-05-08
(54)【発明の名称】デバッグ支援装置、デバッグ支援方法およびプログラム
(51)【国際特許分類】
G06F 11/36 20060101AFI20240426BHJP
【FI】
G06F11/36 196
(21)【出願番号】P 2020081694
(22)【出願日】2020-05-07
【審査請求日】2023-03-14
(73)【特許権者】
【識別番号】591036457
【氏名又は名称】三菱電機エンジニアリング株式会社
(74)【代理人】
【識別番号】110003166
【氏名又は名称】弁理士法人山王内外特許事務所
(72)【発明者】
【氏名】伊藤 芳浩
【審査官】渡辺 一帆
(56)【参考文献】
【文献】特開2003-248504(JP,A)
【文献】特開2018-067057(JP,A)
【文献】特開平01-154256(JP,A)
【文献】再公表特許第2020/166345(JP,A1)
【文献】特開2011-221772(JP,A)
【文献】特開平01-226045(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/36
(57)【特許請求の範囲】
【請求項1】
第1のアプリケーションプログラムの実行状態に関する情報および各処理の実行結果の期待値が設定されたテストケースデータを収集する実行状態収集部と、
前記テストケースデータに基づいて、前記第1のアプリケーションプログラムの各処理の実行状態を再現する実行状態再現部と、
前記第1のアプリケーションプログラムの処理の実行結果を前記期待値と比較した結果に基づいて、前記第1のアプリケーションプログラムの各処理の不具合の有無を判定する期待値判定部と、
を備えたことを特徴とするデバッグ支援装置。
【請求項2】
前記実行状態再現部は、前記第1のアプリケーションプログラムにおいて不具合があると判定された処理の直前に実行される処理の実行状態を再現すること
を特徴とする請求項1記載のデバッグ支援装置。
【請求項3】
前記実行状態収集部は、前記第1のアプリケーションプログラムとは異なる第2のアプリケーションプログラムにおける前記第1のアプリケーションプログラムと連携した処理の実行状態に関する情報が設定された前記テストケースデータを収集し、
前記実行状態再現部は、前記テストケースデータに基づいて、前記第2のアプリケーションプログラムにおける、前記第1のアプリケーションプログラムと連携した処理の実行状態を再現すること
を特徴とする請求項1または請求項2記載のデバッグ支援装置。
【請求項4】
前記実行状態収集部は、ターゲットシステムによって前記第1のアプリケーションプログラムおよび前記第2のアプリケーションプログラムが実行されて得られた前記テストケースデータを収集し、
前記実行状態再現部は、前記テストケースデータに基づいて、前記第1のアプリケーションプログラムおよび前記第2のアプリケーションプログラムの実行状態を再現すること
を特徴とする請求項3記載のデバッグ支援装置。
【請求項5】
前記実行状態再現部は、前記第2のアプリケーションプログラムの実行時間を再現すること
を特徴とする請求項3または請求項4記載のデバッグ支援装置。
【請求項6】
実行状態収集部が、第1のアプリケーションプログラムの実行状態に関する情報および各処理の実行結果の期待値が設定されたテストケースデータを収集するステップと、
実行状態再現部が、前記テストケースデータに基づいて、前記第1のアプリケーションプログラムの各処理の実行状態を再現するステップと、
期待値判定部が、前記第1のアプリケーションプログラムの処理の実行結果を前記期待値と比較した結果に基づいて、前記第1のアプリケーションプログラムの各処理の不具合の有無を判定するステップと、
を備えたことを特徴とするデバッグ支援方法。
【請求項7】
前記実行状態再現部は、前記第1のアプリケーションプログラムにおいて不具合があると判定された処理の直前に実行される処理の実行状態を再現すること
を特徴とする請求項6記載のデバッグ支援方法。
【請求項8】
前記実行状態収集部は、前記第1のアプリケーションプログラムとは異なる第2のアプリケーションプログラムにおける前記第1のアプリケーションプログラムと連携した処理の実行状態に関する情報が設定された前記テストケースデータを収集し、
前記実行状態再現部は、前記テストケースデータに基づいて、前記第2のアプリケーションプログラムにおける、前記第1のアプリケーションプログラムと連携した処理の実行状態を再現すること
を特徴とする請求項6または請求項7記載のデバッグ支援方法。
【請求項9】
前記実行状態収集部は、ターゲットシステムによって前記第1のアプリケーションプログラムおよび前記第2のアプリケーションプログラムが実行されて得られた前記テストケースデータを収集し、
前記実行状態再現部は、前記テストケースデータに基づいて、前記第1のアプリケーションプログラムおよび前記第2のアプリケーションプログラムの実行状態を再現すること
を特徴とする請求項8記載のデバッグ支援方法。
【請求項10】
コンピュータを、
第1のアプリケーションプログラムの実行状態に関する情報および各処理の実行結果の期待値が設定されたテストケースデータを収集する実行状態収集部、
前記テストケースデータに基づいて、前記第1のアプリケーションプログラムの各処理の実行状態を再現する実行状態再現部、
前記第1のアプリケーションプログラムの処理の実行結果を前記期待値と比較した結果に基づいて、前記第1のアプリケーションプログラムの各処理の不具合の有無を判定する期待値判定部、
として機能させるためのプログラム。
【請求項11】
前記実行状態再現部は、前記第1のアプリケーションプログラムにおいて不具合があると判定された処理の直前に実行される処理の実行状態を再現すること
を特徴とする請求項10記載のプログラム。
【請求項12】
前記実行状態収集部は、前記第1のアプリケーションプログラムとは異なる第2のアプリケーションプログラムにおける前記第1のアプリケーションプログラムと連携した処理の実行状態に関する情報が設定された前記テストケースデータを収集し、
前記実行状態再現部は、前記テストケースデータに基づいて、前記第2のアプリケーションプログラムにおける、前記第1のアプリケーションプログラムと連携した処理の実行状態を再現すること
を特徴とする請求項10または請求項11記載のプログラム。
【請求項13】
前記実行状態収集部は、ターゲットシステムによって前記第1のアプリケーションプログラムおよび前記第2のアプリケーションプログラムが実行されて得られた前記テストケースデータを収集し、
前記実行状態再現部は、前記テストケースデータに基づいて、前記第1のアプリケーションプログラムおよび前記第2のアプリケーションプログラムの実行状態を再現すること
を特徴とする請求項12記載のプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、デバッグ支援装置、デバッグ支援方法およびプログラムに関する。
【背景技術】
【0002】
近年、コンピュータシステムの動作の高度化および多機能化に伴って、コンピュータに搭載するアプリケーションプログラムのデバッグに要する時間および労力が多大になっている。例えば、特許文献1には、制御プログラムの動作時における履歴情報を保存しておき、その履歴情報を使用し、オフライン状態で制御プログラムを使用したターゲットシステムの動作確認を、表示手段上で繰り返し行うデバッグ方法が記載されている。制御プログラムのデバッグにあたって、ターゲットシステムの機械を何度も動作させる危険な作業を現場につきっきりで行う必要がなく、機械装置と切り離したデータ上でのデバッグ作業を簡易に行うことができる。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
特許文献1に記載されたデバッグ方法では、制御プログラムの動作手順と、制御プログラムで制御されたターゲットシステムにおける実際の動作タイミングとの関係が、表示部の画面上に表示され、制御プログラムにおける対応箇所のリレーシンボルを、履歴情報に従って変化させるトレース動作が行われる。しかしながら、条件が異なる複数の履歴情報が用意された場合には、それぞれの履歴情報を用いたトレース動作を繰り返し行う必要があり、不具合箇所を特定するためには制御プログラムにおける全ての箇所をトレースする必要があった。このように特許文献1に記載されたデバッグ方法は、デバッグ対象であるプログラムにおける不具合箇所(バグ)の特定に時間と労力を要し、デバッグが効率的ではないという課題があった。
【0005】
本開示は、上記課題を解決するものであり、デバッグの効率的な実行を支援することができるデバッグ支援装置、デバッグ支援方法およびプログラムを得ることを目的とする。
【課題を解決するための手段】
【0006】
本開示に係るデバッグ支援装置は、第1のアプリケーションプログラムの実行状態に関する情報および各処理の実行結果の期待値が設定されたテストケースデータを収集する実行状態収集部と、テストケースデータに基づいて、第1のアプリケーションプログラムの各処理の実行状態を再現する実行状態再現部と、第1のアプリケーションプログラムの処理の実行結果を期待値と比較した結果に基づいて、第1のアプリケーションプログラムの各処理の不具合の有無を判定する期待値判定部とを備える。
【発明の効果】
【0007】
本開示によれば、第1のアプリケーションプログラムの実行状態に関する情報および各処理の実行結果の期待値が設定されたテストケースデータを収集し、テストケースデータに基づいて、第1のアプリケーションプログラムの各処理の実行状態を再現し、第1のアプリケーションプログラムの処理の実行結果を期待値と比較した結果に基づいて、第1のアプリケーションプログラムの各処理の不具合の有無が判定される。テストケースデータに設定された期待値に基づいて不具合箇所を絞り込むことで、本開示に係るデバッグ支援装置は、デバッグの効率的な実行を支援することができる。
【図面の簡単な説明】
【0008】
【
図1】実施の形態1に係るデバッグ支援装置の構成を示すブロック図である。
【
図2】実行状態収集部によって提供されるグラフィカルユーザインタフェース(以下、GUIと記載する)の一例を示す画面図である。
【
図4】入出力データ格納部のフォルダ構成を示す図である。
【
図5】デバッグプログラムの動作設定の設定ファイルを示す図である。
【
図6】
図2のGUIの起動に応じて実施の形態1に係るデバッグ支援装置により実行される処理を示すフローチャートである。
【
図7】実行状態収集処理を示すフローチャートである。
【
図8】デバッグ対象のアプリケーションプログラムの起動に応じて実施の形態1に係るデバッグ支援装置により実行される処理を示すフローチャートである。
【
図9】実行状態再現処理および期待値判定処理を示すフローチャートである。
【
図10】
図10Aは、実施の形態1に係るデバッグ支援装置の機能を実現するハードウェア構成を示すブロック図であり、
図10Bは、実施の形態1に係るデバッグ支援装置の機能を実現するソフトウェアを実行するハードウェア構成を示すブロック図である。
【
図11】実施の形態2に係るデバッグ支援装置およびターゲットシステムの構成を示すブロック図である。
【発明を実施するための形態】
【0009】
実施の形態1.
図1は、実施の形態1に係るデバッグ支援装置1の構成を示すブロック図である。
図1において、デバッグ支援装置1は、デバッグ対象の第1のアプリケーションプログラムの不具合箇所(バグ)を特定してデバッグ処理を支援する装置であり、表示部2、記憶部3および入力部4を備えたコンピュータにより実現される。
図1に示すデバッグ支援装置1は、デバッグ装置の機能とターゲットシステムの機能の両方を兼ねている。デバッグ装置は、第1のアプリケーションプログラムをデバッグする機能を有し、ターゲットシステムは、第1のアプリケーションプログラムを搭載するコンピュータである。
【0010】
表示部2には、例えば、実行中の第1のアプリケーションプログラムの処理画面、第1のアプリケーションプログラムのデバッグに関するGUI画面またはプログラム開発環境の画面が表示される。表示部2は、デバッグ支援装置1が備える表示装置であってもよいし、デバッグ支援装置1とは別に設けられた外部装置が備える表示装置であってもよい。
【0011】
記憶部3には、例えば、第1のアプリケーションプログラム、デバッグプログラムの動作設定の設定ファイル、第1のアプリケーションプログラムの実行に使用される入力データ、テストケースデータ、およびテストケースの処理が実行されたときの入出力データが記憶される。記憶部3は、デバッグ支援装置1が備える記憶装置に構成されてもよいし、デバッグ支援装置1とは別に設けられた外部装置が備える記憶装置に構成されてもよい。
【0012】
入力部4は、デバッグ支援装置1へのデータ入力を受け付ける。例えば、入力部4は、表示部2の画面に設けられたタッチパネル、マウスあるいはキーボタンを用いて、データの入力を受け付けたデータをデバッグ支援装置1に与える。
【0013】
デバッグ支援装置1は、プログラム実行部10およびプログラム開発部11を備える。プログラム実行部10は、第1のアプリケーションプログラムを実行する。例えば、プログラム実行部10は、記憶部3からデバッグ支援装置1の作業用記憶場所へ読み出された第1のアプリケーションプログラムを実行する。表示部2に表示されたGUI画面に基づいて、入力部4を用いてメイン処理の開始が指示されると、プログラム実行部10は、第1のアプリケーションプログラムのメイン処理を構成する個々の内部処理を実行する。内部処理とは、メイン処理を構成する一連の処理であり、プログラム実行部10によって順次実行される。
【0014】
プログラム開発部11は、プログラムコードの編集、デバッグおよびプログラムコードのコンパイルを実行するためのプログラム開発環境を提供する。例えば、プログラム開発部11は、第1のアプリケーションプログラムのプログラムコードの編集を行う。また、プログラム開発部11は、プログラム実行部10によって実行中の第1のアプリケーションプログラムのプログラムコードの場所と変数値を確認しながら第1のアプリケーションプログラムのデバッグを実行する。例えば、ターゲットシステムが、デバッグ支援装置1とは別のコンピュータである場合、プログラム開発部11は、プログラムコードをコンパイルすることにより、ターゲットシステムが実行可能な第1のアプリケーションプログラムを生成する。
【0015】
なお、プログラム開発部11は、デバッグ支援装置1とは別に設けられたデバッグ装置が備えてもよい。この場合、デバッグ装置が備えるプログラム開発部11が、デバッグ支援装置1から出力された第1のアプリケーションプログラムにおける不具合箇所に関する情報に基づいて、不具合箇所のデバッグを行う。
【0016】
プログラム実行部10は、
図1に示すように、実行状態収集部10a、実行状態再現部10bおよび期待値判定部10cを備える。第1のアプリケーションプログラムには、デバッグプログラムが組み込まれている。デバッグ支援装置1を実現するコンピュータのプロセッサが第1のアプリケーションプログラムに組み込まれたデバッグプログラムを実行することで、実行状態収集部10a、実行状態再現部10bおよび期待値判定部10cの機能が実現される。
【0017】
実行状態収集部10aは、プログラム実行部10による第1のアプリケーションプログラムの実行状態が設定されたテストケースデータを収集する。テストケースデータには、第1のアプリケーションプログラムの実行状態に関する情報と各処理の実行結果の期待値が設定される。第1のアプリケーションプログラムの実行状態に関する情報には、例えば初期設定情報と、個々の内部処理実行情報が含まれる。
【0018】
初期設定情報は、第1のアプリケーションプログラムにおけるメイン処理前の実行条件の設定情報であり、例えば、第1のアプリケーションプログラムにおけるメイン処理前に実行される処理で必要な入出力データが含まれる。初期設定情報に対応する処理における入出力データは、例えば、GUI画面を参照しながら、入力部4を用いて指定された入力ファイルの入力値および出力ファイルの入力値である。
【0019】
内部処理実行情報は、第1のアプリケーションプログラムにおける内部処理の実行状態を示す情報であり、例えば、プログラム実行部10によって第1のアプリケーションプログラムにおける個々の内部処理が実行されたときの入出力データおよび引数パラメータが逐次格納される。さらに、内部処理実行情報には、個々の内部処理の実行結果の期待値が含まれる。なお、内部処理実行情報には、第1のアプリケーションプログラムとは異なる第2のアプリケーションプログラムの実行状態に関する情報が含まれてもよい。
【0020】
第1のアプリケーションプログラムは、既存のアプリケーションプログラムではなく、開発対象のアプリケーションプログラムである。これに対して、第2のアプリケーションプログラムは、第1のアプリケーションプログラムと連携した動作が可能な既存のアプリケーションプログラムである。前述した第2のアプリケーションプログラムの実行状態に関する情報には、第2のアプリケーションプログラムが実行されたときの入出力データ、引数パラメータおよび終了コードと第2のアプリケーションプログラムの実行時間情報とが含まれる。
【0021】
実行状態再現部10bは、テストケースデータに基づいて、第1のアプリケーションプログラムの各処理の実行状態を再現する。例えば、実行状態再現部10bは、実行状態収集部10aによって収集されたテストケースデータに含まれる初期設定情報に基づいて、第1のアプリケーションプログラムのメイン処理前の処理の実行状態を再現する。また、実行状態再現部10bは、テストケースデータに含まれる内部処理実行情報に基づいて、第1のアプリケーションプログラムのメイン処理の内部処理で用いられるパラメータの値および入力ファイルの値を再現することにより、個々の内部処理の実行状態を再現する。
【0022】
また、実行状態再現部10bは、期待値判定部10cによって不具合があると判定された内部処理に関する情報を受け取ると、テストケースデータに基づいて、この処理の直前の内部処理の実行状態を再現する。これにより、第1のアプリケーションプログラムにおける不具合箇所を容易に特定でき、不具合箇所を再現するために必要な待ち時間も短縮されるので、プログラム開発部11によって不具合箇所に対するデバッグの繰り返しを容易に実行することができる。
【0023】
期待値判定部10cは、実行状態再現部10bによって再現された内部処理の実行結果と、テストケースデータに含まれる内部処理の実行結果の期待値とを比較した結果に基づいて、内部処理の不具合の有無を自動的に判定する。例えば、期待値判定部10cは、再現された内部処理の実行結果と内部処理の実行結果の期待値とが、完全一致、部分一致、内包あるいは行の入れ替えで一致する場合、内部処理に不具合がないと判定し、いずれにも該当しない場合には、内部処理に不具合があると判定する。
【0024】
記憶部3は、プログラム格納部31、プログラム設定格納部32、入力データ格納部33、テストケース格納部34および入出力データ格納部35を備える。プログラム格納部31には、デバッグ対象の第1のアプリケーションプログラムが格納されている。プログラム設定格納部32には、第1のアプリケーションプログラムに組み込まれたデバッグプログラムの動作設定が記述された設定ファイルが格納されている。入力データ格納部33には、第1のアプリケーションプログラムの実行で使用される入力データが格納される。
【0025】
テストケース格納部34には、実行状態収集部10aによって収集された複数のテストケースデータが格納されている。内容が異なる複数のテストケースデータの中から、目的のテストケースデータの選択、および、目的のテストケースデータの繰り返し使用を実現するため、テストケースデータには、個々に固有なテストケース番号が付与されている。テストケース格納部34は、テストケース番号に対応付けて、テストケースデータが格納されている。入出力データ格納部35には、実行状態収集部10aによって収集されたテストケースデータのうち、テストケースの処理が実行されたときの入出力データが格納されている。
【0026】
図2は、実行状態収集部10aによって提供されるGUIの一例を示す画面図である。実行状態収集部10aは、プログラム実行部10による第1のアプリケーションプログラムの実行中にデバッグ処理が開始されると、
図2に示すGUIを表示部2に表示させる。
図2において、「入力ファイル1」および「入力ファイル2」と記載された欄は、テストケースデータの初期設定情報に入力ファイルの入力値を設定するための設定欄である。「出力ファイル1」および「出力ファイル2」と記載された欄は、テストケースデータの初期設定情報に出力ファイルの入力値を設定するための設定欄である。入力部4を用いた「選択」ボタンの操作に応じて、実行状態収集部10aは、設定欄に設定された入力値を初期設定情報に設定する。
【0027】
「実行処理」欄は、第1のアプリケーションプログラムにおける、不具合の有無の判定を行うメイン処理を指定するための欄である。入力部4を用いた「実行」ボタンの操作が行われると、プログラム実行部10は、「実行処理」欄に表示されたメイン処理のうち、チェックボックスが選択されたメイン処理の実行を開始する。さらに、プログラム実行部10は、入力部4を用いた「終了」ボタンの操作が行われると、チェックボックスが選択されたメイン処理の実行を終了する。
【0028】
図3は、テストケースデータを示す図であり、XMLで記述されたテストケースデータを示している。
図3において、テストケースデータにおける「GUI上の入力パラメータ(初期設定情報)」と記載された箇所には、
図2に示したGUI画面と入力部4とを用いて、入力ファイルおよび出力ファイルの各値が設定される。テストケースデータにおける「個々の内部処理実行情報」と記載された箇所には、第2のアプリケーションプログラムが実行されたときの入出力データ、引数パラメータ、終了コード、その実行に要した時間および個々の内部処理の実行結果の期待値が設定される。
【0029】
複数のテストケースを扱うために、個々のテストケースは、テストケース番号が紐付けされている。テストケースデータに含まれる個々の内部処理の実行結果に対する期待値の設定には、例えば、テキストエディタなどの設定用のアプリケーションプログラムが使用されてもよい。また、XMLで記述されたテストケースデータを示したが、同様のデータを構成できれば、そのフォーマットは問わない。
【0030】
図4は、入出力データ格納部35におけるフォルダ構成を示す図であり、テストケースデータにおける入出力データが格納されるフォルダを示している。
図4に示すように、入出力データ格納部35には、テストケース番号に紐付けて、テストケースデータにおける、GUI上の入力パラメータに対応するデータと実行処理項目番号に対応するデータとが記憶されている。GUI上の入力パラメータフォルダには、入力ファイル1、入力ファイル2、出力ファイル1および出力ファイル2の各フォルダが従属しており、入出力データ格納部35には、これらのフォルダに対応付けて、
図2に示したGUI画面と入力部4とを用いて設定された入出力データが格納される。
【0031】
第1のアプリケーションプログラムのメイン処理を構成する各内部処理のうち、
図2に示したGUI画面の「実行処理」欄でチェックボックスが選択されたメイン処理の個々の内部処理には、実行処理項目番号が付与される。実行処理項目番号フォルダには、入力ファイル1、入力ファイル2、出力ファイル1、出力ファイル2、期待値ファイル1、および期待値ファイル2の各フォルダが従属しており、入出力データ格納部35には、これらのフォルダに対応付けて、内部処理が実行されたときの入出力データおよび実行結果に対する期待値が格納される。
【0032】
図5は、デバッグプログラムの動作設定の設定ファイルを示す図であり、XMLで記述された設定ファイルを示している。
図5に示す設定ファイルは、デバッグプログラムを実行したデバッグ支援装置1が、テストケースデータの収集、テストケースに対応する処理の実行状態の再現および期待値判定を行うように動作設定するものである。
【0033】
デバッグ支援装置1には、ユーザの指示に応じて、
図5に示す設定ファイルにおける「デバッグ無効化」が設定される。これにより、第1のアプリケーションプログラムの実行中にデバッグが頻繁に開始されることを防止でき、不要に多くのテストケースデータが収集されなくなるので、デバッグ支援装置1を実現するコンピュータの処理負荷を低減できる。
【0034】
なお、デバッグプログラムの動作設定は、第1のアプリケーションプログラムの起動時の引数パラメータ文字列として、デバッグプログラムに指定可能である。この場合、プログラム設定格納部32に格納された設定ファイルが不要となるので、記憶部3から、プログラム設定格納部32を省略することが可能である。
【0035】
実施の形態1に係るデバッグ支援方法は、以下の通りである。
図6は、
図2のGUIの起動に応じてデバッグ支援装置1により実行される処理を示すフローチャートである。プログラム実行部10によってデバッグ対象の第1のアプリケーションプログラムが実行されると(第1のアプリケーションプログラムの起動)、
図2のGUIが起動した時点と、メイン処理の実行が開始された時点とその実行が終了した時点および個々の内部処理の実行が開始された時点とその実行が終了した時点に、デバッグが実行される。
【0036】
プログラム実行部10によってデバッグ対象の第1のアプリケーションプログラムが実行されると、実行状態収集部10aは、
図2のGUI画面を表示部2に表示させ、さらにデバッグプログラムに設けられた、テストケース番号を保持する変数の値を初期化する(ステップST1)。この後、実行状態収集部10aは、イベント待ち状態に移行する。イベントとは、
図2のGUI画面と入力部4とを用いたデータ設定のイベントである。
【0037】
図7は、実行状態収集処理を示すフローチャートである。
図2のGUI画面と入力部4とを用いたデータ設定が実行されると、実行状態収集部10aは、GUI画面における「入力ファイル1」欄から「出力ファイル2」欄までに設定された入力値と「実行処理」欄におけるチェックボックスのチェックの有無を示す情報を複製して取得し、取得データを、
図3に示したテストケースデータの「GUI上の入力パラメータ」における、<parameter>から</parameter>までに設定する(ステップST1a)。これにより、テストケースデータにおける初期設定情報が生成される。
【0038】
次に、実行状態収集部10aは、
図2のGUI画面における「実行処理」欄内の上から順に実行対象の処理(チェックボックスがチェックされている処理)を検索し、その行番号を、デバッグプログラムに設けられた、実行処理項目番号を保持する変数に代入して初期化する(ステップST2a)。
【0039】
プログラム実行部10は、今回の実行処理項目番号に対応する処理が内部処理である場合(ステップST3a;YES)、第1のアプリケーションプログラムにおける、今回の実行処理項目番号に対応する内部処理を実行する(ステップST4a)。プログラム実行部10は、内部処理の実行に用いる入力ファイルおよび内部処理の直前までに作成された出力ファイルといった入力情報を用いて、内部処理を実行する。内部処理には、直前の実行処理項目番号に対応する処理で第2のアプリケーションプログラムが実行されて作成されたファイルを、今回の実行処理項目番号に対応する処理で独自のファイルフォーマットに変換した出力ファイルを作成する処理も含まれる。
【0040】
一方、プログラム実行部10は、今回の実行処理項目番号に対応する処理が内部処理ではない場合(ステップST3a;NO)、第2のアプリケーションプログラムを実行するために必要なパラメータファイルを作成する、いわゆる前処理を実行する(ステップST5a)。
【0041】
前処理が完了すると、プログラム実行部10は、第2のアプリケーションプログラムにおける、今回の実行処理項目番号に対応する処理を実行する(ステップST6a)。実施の形態1においては、デバッグ支援装置1が、ターゲットシステムとして機能するので、第2のアプリケーションプログラムは、デバッグ支援装置1によって実行される。なお、ターゲットシステムがデバッグ支援装置1と別に設けられた装置である場合、ターゲットシステムが、第2のアプリケーションプログラムを実行してもよい。
【0042】
第2のアプリケーションプログラムを実行すると、プログラム実行部10は、第2のアプリケーションプログラムの実行で使用されたパラメータファイルを削除する、いわゆる後処理を実行する(ステップST7a)。後処理で削除されるパラメータファイルは、テストケースデータとして設定される出力ファイル以外の作業ファイルである。
【0043】
実行状態収集部10aは、今回の実行処理項目番号に対応する処理の実行で取得された入出力データおよび処理の実行結果を、
図3に示したテストケースデータの「個々の内部処理実行情報」における<item*>から</item*>までに設定する(ステップST8a)。これにより、実行状態収集部10aは、第2のアプリケーションプログラムにおける、第1のアプリケーションプログラムと連携した処理の実行状態に関する情報が設定されたテストケースデータを収集することができる。実行状態収集部10aは、今回の実行処理項目番号に対応する処理に関するテストケースデータを、テストケース格納部34に格納し、このテストケースデータに設定された入出力データを、入出力データ格納部35に格納する。
【0044】
実行状態収集部10aは、第1のアプリケーションプログラムに実行されていない処理が存在する場合(ステップST9a;NO)、実行処理項目番号を進める(ステップST10a)。例えば、実行状態収集部10aは、
図2のGUI画面における「実行処理」欄で、チェックボックスがチェックされている処理を検索し、チェックボックスがチェックされた処理に対応する行番号を、実行処理項目番号を保持する変数に代入する。
【0045】
第1のアプリケーションプログラムにおける全ての処理が実行された場合(ステップST9a;YES)、実行状態収集部10aは、テストケース番号に1を加算する(ステップST11a)。例えば、実行状態収集部10aは、デバッグプログラムに設けられた「テストケース番号を保持する変数」に1を加算する。この後、実行状態収集部10aは、イベント待ち状態に移行する。
図2のGUI画面と入力部4を用いたデータ設定が実行されると、実行状態収集部10aは、次のテストケース番号に対応するテストケースデータを収集する。
【0046】
図8は、第1のアプリケーションプログラムの起動に応じてデバッグ支援装置1により実行される処理を示すフローチャートである。実行状態収集部10aによるテストケースデータの収集が完了すると、実行状態再現部10bは、複数のテストケースデータから、処理対象のテストケースデータを選択するためのGUI画面を、表示部2に表示させる。このGUI画面と入力部4とを用いてテストケースデータが選択されると、実行状態再現部10bは、選択されたテストケースデータのテストケース番号を、デバッグプログラムに設けられた、テストケース番号を保持する変数に代入する(ステップST1b)。
【0047】
実行状態再現部10bは、
図2のGUI画面における「入力ファイル1」欄から「出力ファイル2」欄までに設定された入力情報と「実行処理」欄におけるチェックボックスのチェックの有無を、ステップST1bにおいて選択されたテストケースデータの入力パラメータを用いて再現する(ステップST2b)。なお、テストケースデータの入力パラメータは、
図3の「GUI上の入力パラメータ」における<parameter>から</parameter>までに設定されたデータである。
【0048】
複数のテストケースを連続して用いてデバッグを実行する場合、実行状態再現部10bは、ステップST1bにおいて複数のテストケースにそれぞれ付与されたテストケース番号を連続して選択することにより、異なる複数のテストケースデータを用いたデバッグの繰り返し実行が処理可能となる。この場合、ステップST2bの処理が後述する
図9に示す一連の処理の先頭に挿入され、テストケース番号をインクリメントしながらテストケース番号ごとのテストケースデータを用いてデバッグが実行される。
【0049】
図9は、実行状態再現処理および期待値判定処理を示すフローチャートである。
実行状態再現部10bは、テストケース格納部34から読み出したテストケースデータの初期設定情報と、入出力データ格納部35から読み出した実行処理項目番号ごとの入出力データとに基づいて、第1のアプリケーションプログラムの実行状態を再現することができる。
【0050】
実行状態収集部10aは、
図2のGUI画面における「実行処理」欄内の上から順に実行対象の処理(チェックボックスがチェックされている項目)を検索し、その行番号を、デバッグプログラムに設けられた、実行処理項目番号を保持する変数に代入して初期化する(ステップST1c)。
【0051】
今回の実行処理項目番号に対応する処理が内部処理ではなく(ステップST2c;NO)、かつ、第2のアプリケーションプログラムにおける今回の実行処理項目番号に対応する処理の実行状態のシミュレート(再現)が可能である場合(ステップST3c;YES)、実行状態再現部10bは、今回の実行処理項目番号に対応する処理を実行したときの出力ファイルを再現する(ステップST4c)。
【0052】
例えば、実行状態再現部10bは、
図3に示したテストケースデータの「個々の内部処理実行情報」における、<item*>から</item*>までに設定されたデータを用いて、今回の実行処理項目番号に対応する処理を実行したときの出力ファイルを再現する。
図3において、*=1、2である。実行状態再現部10bは、テストケースデータに基づいて、第2のアプリケーションプログラムにおける、第1のアプリケーションプログラムと連携した処理の実行状態を再現することができる。
【0053】
テストケースデータには、第2のアプリケーションプログラムの実行時間も含まれるので、実行状態再現部10bは、第2のアプリケーションプログラムの実行時間を待ち時間として表示部2に表示する。ユーザは、表示部2に表示された待ち時間によってデバッグ処理のレスポンスを確認することができる。
【0054】
第2のアプリケーションプログラムにおける今回の実行処理項目番号に対応する処理の実行状態のシミュレートができない場合(ステップST3c;NO)、プログラム実行部10は、第2のアプリケーションプログラムを実行するために必要なパラメータファイルを作成する前処理を実行する(ステップST5c)。前処理が完了すると、プログラム実行部10は、第2のアプリケーションプログラムにおける、今回の実行処理項目番号に対応する処理を実行する(ステップST6c)。第2のアプリケーションプログラムが実行されると、プログラム実行部10は、第2のアプリケーションプログラムの実行で使用されたパラメータファイルを削除する後処理を実行する(ステップST7c)。
【0055】
一方、今回の実行処理項目番号に対応する処理が内部処理である場合(ステップST2c;YES)、実行状態再現部10bは、個々の内部処理を単独でデバッグするために、テストケースデータに基づいて内部処理の実行で使用された入力ファイルを再現し、この内部処理の実行で使用された入力パラメータの変数値を設定する、いわゆる前処理を実行する(ステップST8c)。
【0056】
前処理が完了すると、実行状態再現部10bは、今回の実行処理項目番号に対応する内部処理で使用する入力ファイルと、この内部処理の直前の処理で作成された出力ファイルとに基づいて、この内部処理が実行されたときの出力ファイルなど実行状態を示す情報を再現する(ステップST9c)。例えば、実行状態再現部10bは、第2のアプリケーションプログラムの実行によって作成されたファイルを、次の実行処理項目番号に対応する内部処理において独自のファイルフォーマットに変換したファイルを作成する。
【0057】
期待値判定部10cは、テストケースデータにおける期待値と処理の実行結果とを比較した結果に基づいて、処理の不具合の有無を判定する(ステップST10c)。例えば、期待値判定部10cは、
図3の「期待値」における<expectedValue>から</expectedValue>までに設定された情報と、これに対応する処理の実行結果とを比較して両者が一致条件を満たす場合、判定対象の処理には不具合がないと判定する。また、両者が一致条件を満たさなければ、期待値判定部10cは、判定対象の処理に不具合があると判定する。期待値判定部10cによって処理実行結果の不具合の有無が自動的に判定されるので、デバッグ支援装置1は、複数のテストケースを用いたデバッグのバッチ処理が可能である。
【0058】
実行状態再現部10bは、第1のアプリケーションプログラムに実行されていない処理が存在する場合(ステップST11c;NO)、実行処理項目番号を進める(ステップST12c)。例えば、実行状態再現部10bは、
図2のGUI画面における「実行処理」欄で、チェックボックスがチェックされた処理を検索し、チェックボックスがチェックされた処理に対応する行番号を、実行処理項目番号を保持する変数に代入する。第1のアプリケーションプログラムにおける全ての処理が実行されると(ステップST11c;YES)、実行状態再現部10bは、
図9に示す処理を終了する。
【0059】
プログラム実行部10は、
図2のGUI画面における実行ボタンが操作されると、第1のアプリケーションプログラムのメイン処理の実行を開始する。メイン処理における個々の内部処理の実行前後において、
図6から
図9に示したデバッグ処理が実行される。実行状態再現部10bは、テストケースデータの内部処理実行情報から、内部処理へ渡す入力パラメータおよび入力ファイルを再現することにより、内部処理の実行状態を再現する。
【0060】
テストケースデータの入力パラメータとしてファイルパスの指定がある場合、実行状態再現部10bは、デバッグ環境で再現したファイルパスに読み替える。また、実行状態再現部10bは、期待値判定部10cによって不具合があると判定された内部処理の直前の実行状態を再現することで、不具合箇所の繰り返し実行も容易に行うことが可能となり、ステップST8cに示した前処理にかかる待ち時間を短縮できる。
【0061】
内部処理実行終了後、期待値判定処理が有効である場合、期待値判定処理を行う。演算結果が正常であったか異常であったかを自動判定させることで、複数テストケースのバッチ処理に対応させることが可能となる。
【0062】
プログラム開発部11は、第1のアプリケーションプログラムのプログラムコードのうち、実行状態再現部10bによって実行状態が再現されている箇所と変数値を、表示部2に表示する。実行状態再現部10bは、期待値判定部10cによって不具合があると判定された内部処理の直前の実行状態を再現するので、ユーザは、表示部2に表示されたプログラムコードおよび変数値を視認することで、第1のアプリケーションプログラムのバグを容易に特定することが可能である。
【0063】
デバッグ支援装置1の機能を実現するハードウェア構成は、以下の通りである。
図10Aは、デバッグ支援装置1の機能を実現するハードウェア構成を示すブロック図である。
図10Bは、デバッグ支援装置1の機能を実現するソフトウェアを実行するハードウェア構成を示すブロック図である。
図10Aおよび
図10Bにおいて、入力インタフェース100は、デバッグ支援装置1が記憶部3から入力するデータを中継するインタフェースである。出力インタフェース101は、デバッグ支援装置1から表示部2へ出力されるデータを中継するインタフェースである。
【0064】
デバッグ支援装置1における実行状態収集部10a、実行状態再現部10bおよび期待値判定部10cの機能は、処理回路によって実現される。すなわち、デバッグ支援装置1は、
図6から
図9に示した各処理を実行するための処理回路を備えている。処理回路は、専用のハードウェアであってもよいが、メモリに記憶されたプログラムを実行するCPU(Central Processing Unit)であってもよい。
【0065】
処理回路が
図10Aに示す専用のハードウェアの処理回路102である場合、処理回路102は、例えば、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ASIC(Application Specific Integrated Circuit)、FPGA(Field-Programmable Gate Array)、または、これらを組み合わせたものが該当する。デバッグ支援装置1における実行状態収集部10a、実行状態再現部10bおよび期待値判定部10cの機能は、別々の処理回路で実現されてもよく、これらの機能がまとめて1つの処理回路で実現されてもよい。
【0066】
処理回路が
図10Bに示すプロセッサ103である場合、デバッグ支援装置1における実行状態収集部10a、実行状態再現部10bおよび期待値判定部10cの機能は、ソフトウェア、ファームウェアまたはソフトウェアとファームウェアとの組み合わせにより実現される。なお、ソフトウェアまたはファームウェアは、プログラムとして記述されてメモリ104に記憶される。
【0067】
プロセッサ103は、メモリ104に記憶されたプログラムを読み出して実行することによって、デバッグ支援装置1における、実行状態収集部10a、実行状態再現部10bおよび期待値判定部10cの機能を実現する。例えば、デバッグ支援装置1は、プロセッサ103によって実行されるときに、
図6から
図9に示した各処理が結果的に実行されるプログラムを記憶するメモリ104を備える。これらのプログラムは、実行状態収集部10a、実行状態再現部10bおよび期待値判定部10cの手順または方法をコンピュータに実行させる。メモリ104は、コンピュータを、実行状態収集部10a、実行状態再現部10bおよび期待値判定部10cとして機能させるためのプログラムが記憶されたコンピュータ可読記憶媒体であってもよい。
【0068】
メモリ104は、例えば、RAM(Random Access Memory)、ROM(Read Only Memory)、フラッシュメモリ、EPROM(Erasable Programmable Read Only Memory)、EEPROM(Electrically-EPROM)などの不揮発性または揮発性の半導体メモリ、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、DVDなどが該当する。
【0069】
デバッグ支援装置1における実行状態収集部10a、実行状態再現部10bおよび期待値判定部10cの機能の一部が、専用のハードウェアで実現され、一部がソフトウェアまたはファームウェアで実現されてもよい。例えば、実行状態収集部10aは、専用のハードウェアである処理回路102によって機能が実現され、実行状態再現部10bおよび期待値判定部10cは、プロセッサ103がメモリ104に記憶されたプログラムを読み出して実行することによって機能が実現される。このように、処理回路は、ハードウェア、ソフトウェア、ファームウェアまたはこれらの組み合わせによって、上記機能を実現することができる。
【0070】
以上のように、実施の形態1に係るデバッグ支援装置1において、デバック対象の第1のアプリケーションプログラムの実行状態に関する情報および各処理の実行結果の期待値が設定されたテストケースデータを収集し、テストケースデータに基づいて第1のアプリケーションプログラムの各処理の実行状態を再現し、第1のアプリケーションプログラムの処理の実行結果を期待値と比較した結果に基づいて第1のアプリケーションプログラムの各処理の不具合の有無が判定される。テストケースデータに設定された期待値に基づいて不具合箇所を絞り込むことできるので、デバッグ支援装置1はデバッグの効率的な実行を支援することができる。
【0071】
実施の形態1に係るデバッグ支援装置1において、実行状態再現部10bが、第1のアプリケーションプログラムにおいて不具合(バグ)があると判定された処理の直前に実行される処理の実行状態を再現する。これにより、同じ入力条件で第1のアプリケーションプログラムのバグがなくなるまで繰り返しデバッグする作業を容易に行うことができる。
【0072】
実施の形態1に係るデバッグ支援装置1において、実行状態収集部10aが、第2のアプリケーションプログラムにおける、第1のアプリケーションプログラムと連携した処理の実行状態に関する情報がさらに設定されたテストケースデータを収集する。実行状態再現部10bが、テストケースデータに基づいて、第2のアプリケーションプログラムにおける、第1のアプリケーションプログラムと連携した処理の実行状態を再現する。これにより、既存の第2のアプリケーションプログラムの実行で使用されたデータを、開発対象である第1のアプリケーションプログラムで使用可能なデータに変換してデバッグを行うことができる。
【0073】
実施の形態2.
図11は、実施の形態2に係るデバッグ支援装置1Aおよびターゲットシステム5の構成を示すブロック図である。
図11において、デバッグ支援装置1Aは、第1のアプリケーションプログラムのバグを特定してデバッグを支援する装置であり、記憶部3Aを備えたコンピュータによって実現される。なお、表示部2および入力部4の記載を省略したが、デバッグ支援装置1Aは、デバッグ支援装置1と同様に、表示部2および入力部4を備えている。
【0074】
デバッグ支援装置1Aは、
図11に示すように、プログラム実行部10Aおよびプログラム開発部11Aを備える。プログラム実行部10Aは、記憶部3Aからデバッグ支援装置1Aの作業用記憶場所に読み出された第1のアプリケーションプログラムを実行する。プログラム実行部10Aは、実行状態再現部10bおよび期待値判定部10cを備える。
【0075】
プログラム開発部11Aは、プログラムコードの編集、デバッグ、およびプログラムコードのコンパイルを実行するためのプログラム開発環境を提供する。例えば、プログラム開発部11Aは、第1のアプリケーションプログラムのプログラムコードの編集を行う。プログラム開発部11Aは、プログラム実行部10Aによって実行中の第1のアプリケーションプログラムのプログラムコードの場所と変数値を確認しながら、第1のアプリケーションプログラムのデバッグを実行する。
【0076】
記憶部3Aは、プログラム格納部31、プログラム設定格納部32、テストケース格納部34および入出力データ格納部35を備える。プログラム格納部31には、ターゲットシステム5に搭載されたものと共通の第1のアプリケーションプログラムが格納される。プログラム設定格納部32には、デバッグプログラムの動作設定が記述された設定ファイルが格納される。設定ファイルには、実行状態再現部10bおよび期待値判定部10cに関する動作設定が記述されている。
【0077】
テストケース格納部34には、ターゲットシステム5が備える実行状態収集部10aによって収集された複数のテストケースデータが格納されている。入出力データ格納部35には、ターゲットシステム5が備える実行状態収集部10aによって収集されたテストケースデータのうち、テストケースの処理が実行されたときの入出力データが格納される。
【0078】
ターゲットシステム5は、記憶部6を備えたコンピュータによって実現される。また、ターゲットシステム5は、
図11に示すように、プログラム実行部51を備える。プログラム実行部51は、記憶部6からターゲットシステム5の作業用記憶場所に読み出された第1のアプリケーションプログラムを実行する。プログラム実行部51は、実行状態収集部10aを備えている。
【0079】
記憶部6は、プログラム格納部61、プログラム設定格納部62、入力データ格納部63、テストケース格納部64および入出力データ格納部65を備える。プログラム格納部61には、デバッグ支援装置1Aに搭載されたものと共通の第1のアプリケーションプログラムが格納される。プログラム設定格納部62には、第1のアプリケーションプログラムに組み込まれたデバッグプログラムの動作設定が記述された設定ファイルが格納されている。設定ファイルには、実行状態収集部10aに関する動作設定が記述されている。
【0080】
入力データ格納部63には、第1のアプリケーションプログラムの実行で使用される入力データが格納される。テストケース格納部64には、実行状態収集部10aによって収集された複数のテストケースデータが格納される。入出力データ格納部65には、実行状態収集部10aによって収集されたテストケースデータのうち、テストケースの処理が実行されたときの入出力データが格納される。
【0081】
実行状態収集部10aは、プログラム実行部51によって第1のアプリケーションプログラムが実行されると、実施の形態1と同様の手順で、テストケースデータを収集する。実行状態収集部10aによって収集されたテストケースデータは、記憶部6に格納され、さらに、通信ネットワークまたは外部記憶媒体を経由してデバッグ支援装置1Aに送られる。デバッグ支援装置1Aは、ターゲットシステム5から受け取ったテストケースデータを記憶部3Aに格納する。
【0082】
プログラム実行部10Aが備える実行状態再現部10bは、記憶部3Aから読み出したテストケースデータに基づいて、実施の形態1と同様の手順で、第1のアプリケーションプログラムの実行状態を再現する。また、プログラム実行部10Aが備える期待値判定部10cは、記憶部3Aから読み出したテストケースデータに基づいて、実施の形態1と同様の手順で、第1のアプリケーションプログラムの処理の実行結果と期待値とを比較した結果に基づいて、第1のアプリケーションプログラムにおける不具合の有無を判定する。
【0083】
プログラム開発部11Aは、プログラム実行部10Aによって特定された第1のアプリケーションプログラムの不具合箇所のデバッグを実行する。プログラム開発部11Aは、プログラムコードをコンパイルすることにより、ターゲットシステム5が実行可能な第1のアプリケーションプログラムを生成する。
【0084】
第2のアプリケーションプログラムがターゲットシステム5のみに搭載されている場合であっても、実行状態再現部10bが、テストケースデータにおける入力ファイルおよび出力ファイルを用いて、第2のアプリケーションプログラムの実行状態を再現することができる。
【0085】
例えば、CAD装置から出力されるCADデータのデータ形式は、汎用的なものに限定される。固有なデータ形式のデータを扱う設計支援装置がCADデータを利用する場合、CADデータのデータ形式を、当該設計支援装置で利用可能なデータ形式に加工する必要がある。デバッグ支援装置1Aは、設計支援装置に搭載された設計支援アプリケーションプログラムを第1のアプリケーションプログラムとし、CAD装置に搭載されたCADデータを出力するプログラムを第2のアプリケーションプログラムとした場合、第2のアプリケーションプログラムを実行して得られたCADデータを、第1のアプリケーションプログラムにおける内部処理の入力データに加工して利用する。
【0086】
実行状態再現部10bが、第2のアプリケーションプログラムの実行時間を待ち時間として再現することで、ユーザは、第2のアプリケーションプログラムが実行されたときの待ち時間を体感することができる。また、COM(Component Object Model)によるアプリケーション間通信を用いることで、第2のアプリケーションプログラムが搭載されていないデバッグ支援装置1Aにおいても、第2のアプリケーションプログラムの実行状態を再現可能である。
【0087】
以上のように、実施の形態2に係るデバッグ支援装置1Aにおいて、実行状態収集部10aが、ターゲットシステム5によって第1のアプリケーションプログラムおよび第2のアプリケーションプログラムが実行されて得られたテストケースデータを収集する。実行状態再現部10bが、テストケースデータに基づいて第1のアプリケーションプログラムおよび第2のアプリケーションプログラムの実行状態を再現する。遠隔地にあるターゲットシステム5におけるデバッグ作業においても、デバッグ支援装置1Aは、ターゲットシステム5から収集されたテストケースデータに基づいて、第1のアプリケーションプログラムおよび第2のアプリケーションプログラムの実行状態を再現できる。これにより、デバッグ支援装置1Aは、デバッグの効率的な実行を支援することができる。
【0088】
なお、各実施の形態の組み合わせまたは実施の形態のそれぞれの任意の構成要素の変形もしくは実施の形態のそれぞれにおいて任意の構成要素の省略が可能である。
【符号の説明】
【0089】
1,1A デバッグ支援装置、2 表示部、3,3A,6 記憶部、4 入力部、5 ターゲットシステム、10,10A,51 プログラム実行部、10a 実行状態収集部、10b 実行状態再現部、10c 期待値判定部、11,11A プログラム開発部、31,61 プログラム格納部、32,62 プログラム設定格納部、33,63 入力データ格納部、34,64 テストケース格納部、35,65 入出力データ格納部、100 入力インタフェース、101 出力インタフェース、102 処理回路、103 プロセッサ、104 メモリ。