(57)【特許請求の範囲】
【請求項１】
部品化機能の組み合わせで構成されたプログラムを解析するプログラム解析装置であって、
前記プログラムは、外部から入力されるプログラム入力情報に基づく順序で前記部品化機能の処理を順次実行するものであって、
前記プログラム解析装置は、
前記部品化機能ごとに、前記部品化機能が使用する変数のリストを保持した部品化機能データベースと、
前記部品化機能データベースが保持する前記リストに基づいて前記プログラム全体で使用される全変数を抽出し、前記プログラム入力情報が入力されたときに、前記プログラム入力情報に従って前記プログラムを実行させ、当該プログラムの実行時に、前記部品化機能ごとに、前記部品化機能の処理の開始タイミングと終了タイミングとにおける前記全変数の変数値の差分の有無を各変数ごとに抽出するとともに、前記開始タイミングと前記終了タイミングとにおける前記部品化機能の処理全体における前記全変数のうちの少なくとも１つの変数の変数値の差分の有無を各部品化機能ごとに抽出する差分抽出部と、
前記差分抽出部の抽出結果に基づいて前記プログラムの解析結果を表示する解析結果表示部と
を備え、
前記解析結果表示部は、
前記差分抽出部により各変数ごとに抽出された前記変数値の差分の有無を表示することにより、前記プログラムの処理に影響する変数と影響しない変数とを提示し、
前記差分抽出部により各部品化機能ごとに抽出された前記変数値の差分の有無を表示することで、前記プログラムの処理に影響する部品化機能と影響しない部品化機能とを提示する、
プログラム解析装置。
【請求項２】
前記プログラム入力情報に従って前記プログラムを実行したときに、前記プログラム内で処理が実行されなかった部品化機能を抽出する未到達機能抽出部をさらに備え、
前記解析結果表示部は、前記未到達機能抽出部により抽出された前記部品化機能を表示することで、前記プログラムの処理で使用されない部品化機能を提示する、
請求項１に記載のプログラム解析装置。
【請求項３】
部品化機能の組み合わせで構成されたプログラムを解析するプログラム解析方法であって、
前記部品化機能が使用する変数のリストを保持した部品化機能データベースを生成するデータベース生成ステップと、
前記部品化機能データベースが保持する前記リストに基づいて前記プログラム全体で使用される全変数を抽出する全変数抽出ステップと、
前記プログラムの実行時に使用するプログラム入力情報が入力されたときに、前記プログラム入力情報に従って前記プログラムを実行するプログラム実行ステップと、
前記プログラムの実行において、前記部品化機能ごとに、前記部品化機能の処理の開始タイミングと終了タイミングとにおける前記全変数の変数値の差分の有無を各変数ごとに抽出する第１の差分抽出ステップと、
前記プログラムの実行において、前記部品化機能ごとに、前記開始タイミングと前記終了タイミングとにおける前記部品化機能の処理全体における前記全変数のうちの少なくとも１つの変数の変数値の差分の有無を各部品化機能ごとに抽出する第２の差分抽出ステップと、
前記第１及び第２の差分抽出ステップの抽出結果に基づいて前記プログラムの解析結果を表示する解析結果表示ステップと
を備え、
前記解析結果表示ステップは、
前記第１の差分抽出ステップにより各変数ごとに抽出された前記変数値の差分の有無を表示することにより、前記プログラムの処理に影響する変数と影響しない変数とを提示し、
前記第２の差分抽出ステップにより各部品化機能ごとに抽出された前記変数値の差分の有無を表示することで、前記プログラムの処理に影響する部品化機能と影響しない部品化機能とを提示する、
プログラム解析方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はプログラム解析装置及びプログラム解析方法に関し、特に、部品化した機能の組み合わせによって構成されたプログラムの構成を解析するためのプログラム解析装置及びプログラム解析方法に関する。
【背景技術】
【０００２】
近年、電子制御機器の増加に伴い、電子制御機器に搭載されるプログラムの開発にかかる負荷を低減する開発手法が用いられるようになっている。当該手法の例として、例えば、単位ごとに予め開発された機能（以下、部品化機能）を組み合わせることで、全体のプログラムを構成するという手法がある。部品化機能は多数の種別が開発されており、それらの部品化機能は、所望のプログラムを構成するための全ての機能を網羅する。部品化機能間の情報の入出力は、定められたルールに基づいている。従って、部品化機能単位で、別々に開発することが可能である。その結果、開発工数削減の効果をもたらす。さらに、各部品化機能の組み換えも容易である。例えば、ある特定の部品化機能として、処理速度を優先したタイプ、あるいは、計算精度を優先したタイプ等、複数のタイプを用意しておくことで、全体のプログラムの汎用性が向上する効果もある。
【０００３】
この種の部品化機能は、高い汎用性を有するよう開発されている。そのため、当該部品化機能は、多種の電子制御機器へ適用可能である。しかしながら、一般に、電子制御機器の制御処理には、不要な処理、および、不要なデータが含まれている。その結果、プログラムのデータサイズが増大してしまったり、あるいは、処理性能が実行されずに未達となってしまうという問題が発生する。そのため、プログラムのソースコードを解析することにより、不要な処理やデータを検出する技術が求められている。
【０００４】
例えば特許文献１は、プログラム中の特定の処理に対して、その処理に影響を与えている、または、その処理が影響を与えているプログラムの一部を抽出する方法が示されている。特許文献１の方法は、ユーザが入力した情報を元に、プログラム中の各命令文への影響の有無を判定し、その結果を表示する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００７−９４７５３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１の方法では、プログラムの各命令レベルで、影響の判定および判定結果の表示を行う。そのため、ユーザに提示される情報の情報量が大きくなるという問題がある。特に、数万規模の命令で構成される大規模プログラムの解析では、特に大きな問題となる懸念がある。また、判定結果が命令レベルで提示されるため、部品化機能の一部の命令に対する判定結果が提示される。従って、当該判定結果に基づいて、不要な機能やデータを削除して処理の変更を実施した場合に、各部品化機能が本来有する機能とは異なる機能に変更され、本来有していた当該機能を損なう可能性がある。その結果、本来の目的である、部品化機能の組み換えによる汎用化の効果を発揮できない可能性がある。
【０００７】
この発明は、かかる課題を解決するためになされたものであり、部品化機能の組み合わせにより構成されたプログラムにおいて、部品化機能が使用する変数値の変化を解析し、プログラムの処理に影響しない不要な変数または不要な部品化機能を抽出し表示することで、各部品化機能が本来持つ機能に影響を与えずにプログラム全体の効率化を実施するために必要な情報を提示することが可能な、プログラム解析装置及びプログラム解析方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明は、部品化機能の組み合わせで構成されたプログラムを解析するプログラム解析装置であって、前記プログラムは、外部から入力されるプログラム入力情報に基づく順序で前記部品化機能の処理を順次実行するものであって、前記プログラム解析装置は、前記部品化機能ごとに、前記部品化機能が使用する変数のリストを保持した部品化機能データベースと、前記部品化機能データベースが保持する前記リストに基づいて前記プログラム全体で使用される全変数を抽出し、前記プログラム入力情報が入力されたときに、前記プログラム入力情報に従って前記プログラムを実行させ、当該プログラムの実行時に、前記部品化機能ごとに、前記部品化機能の処理の開始タイミングと終了タイミングとにおける前記全変数の変数値の差分の有無を各変数ごとに抽出するとともに、前記開始タイミングと前記終了タイミングとにおける前記部品化機能の処理全体における前記全変数のうちの少なくとも１つの変数の変数値の差分の有無を各部品化機能ごとに抽出する差分抽出部と、前記差分抽出部の抽出結果に基づいて前記プログラムの解析結果を表示する解析結果表示部とを備え、前記解析結果表示部は、前記差分抽出部により各変数ごとに抽出された前記変数値の差分の有無を表示することにより、前記プログラムの処理に影響する変数と影響しない変数とを提示し、前記差分抽出部により各部品化機能ごとに抽出された前記変数値の差分の有無を表示することで、前記プログラムの処理に影響する部品化機能と影響しない部品化機能とを提示する、プログラム解析装置である。
【発明の効果】
【０００９】
本発明に係るプログラム解析装置によれば、部品化した機能の組み合わせにより構成されたプログラムにおいて、各部品化機能単位で変数値の変化を解析し、不要な部品化機能や変数を抽出して表示するようにしたので、不要な部品化機能や変数を削除した場合でも、各部品化機能が本来持つ機能を損なうことなく、かつ、プログラム全体の効率化を図るために必要な情報を提示することができる。
【図面の簡単な説明】
【００１０】
【図１】本発明の実施の形態１に係るプログラム解析装置の構成を示す図である。
【図２】本発明の実施の形態１に係るプログラム解析方法の処理の流れを示す図である。
【図３】本発明の実施の形態１に係るプログラム解析方法の差分抽出部の処理結果の例を示す図である。
【図４】本発明の実施の形態１に係るプログラム解析方法の差分抽出部の処理結果の例を示す図である。
【図５】本発明の実施の形態１に係るプログラム解析方法の差分抽出部の処理結果の例を示す図である。
【図６】本発明の実施の形態１に係るプログラム解析方法の差分抽出部の処理結果の例を示す図である。
【図７】本発明の実施の形態１に係るプログラム解析方法の差分抽出部の処理結果の例を示す図である。
【図８】本発明の実施の形態１に係るプログラム解析方法の差分抽出部の処理結果の例を示す図である。
【図９】本発明の実施の形態１に係るプログラム解析方法の差分抽出部の処理結果の例を示す図である。
【図１０】本発明の実施の形態２に係るプログラム解析装置の構成を示す図である。
【図１１】本発明の実施の形態２に係るプログラム解析方法の処理の流れを示す図である。
【図１２】本発明の実施の形態２に係るプログラム解析方法の未到達機能抽出部の処理結果の例を示す図である。
【図１３】本発明の実施の形態２に係るプログラム解析方法の未到達機能抽出部の処理結果の例を示す図である。
【発明を実施するための形態】
【００１１】
実施の形態１．
以下に、本発明の実施の形態１に係るプログラム解析装置及びプログラム解析方法について、図面に基づいて説明する。本実施の形態に係るプログラム解析装置及びプログラム解析方法は、部品化機能の組み合わせで構成されたプログラムを解析し、プログラムの処理に影響しない変数とプログラムの処理に影響しない部品化機能とを抽出し表示する。
【００１２】
図１は、本実施の形態１に係るプログラム解析装置の概略構成図である。プログラム解析装置は、解析対象である解析プログラム１０の解析を行う。解析プログラム１０は、１以上の部品化機能から構成されている。
【００１３】
図１に示すように、プログラム解析装置は、差分抽出部１１、部品化機能データベース１２、および、解析結果表示部１４から構成されている。
【００１４】
プログラム解析装置には、プログラム入力情報１３が入力される。プログラム入力情報１３は、解析プログラム１０の処理を実行する際に使用される情報である。解析プログラム１０は、プログラム入力情報１３が指定する順序で、解析プログラム１０に含まれる部品化機能の処理を順に実行していく。例えば、図３の右欄に示すように、解析プログラム１０が、部品化機能１０ａ〜１０ｆで構成されていると仮定する。このとき、プログラム入力情報１３により、部品化機能１０ａ、部品化機能１０ｃ、部品化機能１０ｄ、部品化機能１０ｆの順に実行すると指定されている場合には、その順序で、順次、指定された各部品化機能１０ａ，１０ｃ，１０ｄ，１０ｆの処理を行う。この場合、部品化機能１０ｂ，１０ｅについては、実行することがプログラム入力情報１３に指定されていないので、処理を実行しない。
このように、プログラム入力情報１３は解析プログラム１０の処理を実行する際に使用される情報を保持しており、解析プログラム１０はプログラム入力情報１３に従って処理を実行する。
【００１５】
差分抽出部１１は、解析プログラム１０を構成している各部品化機能ごとに、当該部品化機能の処理で使用される変数につき、当該変数の開始タイミングの変数値と終了タイミングの変数値との差分を抽出する。
さらに詳細に説明すると、差分抽出部１１は、まずはじめに、部品化機能データベース１２が保持する変数のリストに基づいて、解析プログラム１０全体で使用される全変数を抽出する。差分抽出部１１は、プログラム入力情報１３に従って解析プログラム１０を実行させ、解析プログラム１０の実行時に、部品化機能ごとに、部品化機能の処理の開始タイミングと終了タイミングとにおける全変数の変数値の差分の有無を各変数ごとに抽出する（第１の抽出ステップ）とともに、当該開始タイミングと終了タイミングとにおける部品化機能の処理全体における全変数のうちの少なくとも１つの変数の変数値の差分の有無があったか否かを各部品化機能ごとに抽出する（第２の抽出ステップ）。
差分抽出部１１は、メモリに記憶されたソフトウエアを実行するＣＰＵまたはシステムＬＳＩ等の処理回路により実現される。また、複数の処理回路が連携して差分抽出部１１の機能を実行するようにしてもよい。
【００１６】
部品化機能データベース１２は、解析プログラム１０を構成している各部品化機能ごとに、当該部品化機能が使用する変数のリストを格納している。図３の左欄に、部品化機能データベース１２の構成例を示す。
なお、部品化機能データベース１２は、メモリ等の記憶装置から構成される。
【００１７】
解析結果表示部１４は、差分抽出部１１による解析プログラム１０の解析結果を表示する。解析結果表示部１４は、ディスプレイ装置等の表示器から構成される。
【００１８】
次に、プログラム解析方法の全体処理の概要を、図２のフローチャートを用いて説明する。図２のフローチャートにおいて、ステップＳ１１０１〜ステップＳ１１０６の処理は差分抽出部１１が行い、ステップＳ１１０７の処理は解析結果表示部１４が行う。
【００１９】
図２において、まず、ステップＳ１１０１で、差分抽出部１１は、部品化機能データベース１２から、解析プログラム１０を構成する各部品化機能が使用する変数のリストを読み出す。差分抽出部１１は、読み出した各部品化機能で使用する変数のリストに基づいて、解析プログラム１０全体で使用する全変数の一覧を作成する。
【００２０】
次に、ステップＳ１１０２で、差分抽出部１１は、外部から入力されるプログラム入力情報１３の内容に従い、解析プログラム１０の処理を開始する。解析プログラム１０の処理において、どの部品化機能を、どのような順序で、処理するかについては、プログラム入力情報１３により指定される。
【００２１】
次に、ステップＳ１１０３で、差分抽出部１１は、１つの部品化機能の処理の開始タイミングにおける、解析プログラム１０が使用する全変数の変数値を記録する。
【００２２】
次に、ステップＳ１１０４で、差分抽出部１１は、当該１つの部品化機能の処理の終了タイミングにおける、解析プログラム１０が使用する全変数の変数値を記録する。
【００２３】
次に、ステップＳ１１０５で、差分抽出部１１は、ステップＳ１１０３およびステップＳ１１０４で記録した各変数の変数値の差分を求め、当該差分の有無を記録する（第１の抽出ステップ）。
【００２４】
次に、ステップＳ１１０６で、差分抽出部１１は、当該１つの部品化機能の処理全体における全変数の開始タイミングの変数値と終了タイミングの変数値との差分の有無を抽出して、当該全変数の変数値の差分の有無を記録する（第２の抽出ステップ）。
【００２５】
差分抽出部１１は、ステップＳ１１０３〜ステップＳ１１０６の処理を、プログラム入力情報１３の内容に従って処理される各部品化機能の順に実施する。すなわち、例えば、プログラム入力情報１３により、部品化機能１０ａ、部品化機能１０ｃ、部品化機能１０ｄ、部品化機能１０ｆの順に処理を実行すると指定されている場合には、その順序で、差分抽出部１１は、順次、各部品化機能ごとに、ステップＳ１１０３〜ステップＳ１１０６の処理を行う。すなわち、まず、部品化機能１０ａに対して、ステップＳ１１０３〜ステップＳ１１０６の処理を行い、次に、部品化機能１０ｃに対して、ステップＳ１１０３〜ステップＳ１１０６の処理を行い、次に、部品化機能１０ｄに対して、ステップＳ１１０３〜ステップＳ１１０６の処理を行い、最後に、部品化機能１０ｆに対して、ステップＳ１１０３〜ステップＳ１１０６の処理を行う。そうして、プログラム入力情報１３が指定するすべての部品化機能に対して、ステップＳ１１０３〜ステップＳ１１０６の処理が終了したら、ステップＳ１１０７に進む。
【００２６】
ステップＳ１１０７では、解析結果表示部１４が、ステップＳ１１０３〜ステップＳ１１０６で記録した各変数の変数値の差分の記録結果を表示する。
【００２７】
次に、図２のステップＳ１１０１〜Ｓ１１０６の差分抽出部１１の差分抽出処理の経過を、図３〜図９の実施例を用いて説明する。但し、図３〜図９に示す例は、単なる一例であり、本実施の形態１を限定するものではない。
【００２８】
図３は、部品化機能データベース１２と解析プログラム１０の構造の例を示す。部品化機能データベース１２と解析プログラム１０とは、プログラム入力情報１３と共に、差分抽出部１１の差分抽出処理の入力情報となる。
図３の例では、図３の右欄に示すように、解析プログラム１０が、部品化機能１０ａから部品化機能１０ｆまでの６つの部品化機能から構成されているものとする。また、部品化機能１０ａは変数Ａ、部品化機能１０ｂは変数Ｂ、部品化機能１０ｃは変数ＢとＣ、部品化機能１０ｄは変数Ｂ、部品化機能１０ｅは変数Ｄ、部品化機能１０ｆは変数ＡとＢを使用するものとする。
部品化機能データベース１２には、図３の左欄に示すように、各部品化機能１０ａ〜１０ｆごとに、各部品化機能１０ａ〜１０ｆが使用するこれらの変数のリストが登録されている。
【００２９】
次に、図４の右欄は、ステップＳ１１０１において、解析プログラム１０が使用する全変数の一覧を作成した結果を示す。なお、図４の左欄は、部品化機能データベース１２の構成を示す。
差分抽出部１１は、解析プログラム１０を構成する部品化機能１０ａ〜１０ｆの情報に基づき、部品化機能データベース１２から、解析プログラム１０を構成する各部品化機能１０ａ〜１０ｆが使用する変数のリストを読み出す。こうして、差分抽出部１１は、解析プログラム１０全体で使用する全変数の一覧を作成する。
図４に示すように、本実施例では、部品化機能１０ａが変数Ａ、部品化機能１０ｂが変数Ｂ、部品化機能１０ｃが変数ＢとＣ、部品化機能１０ｄが変数Ｂ、部品化機能１０ｅが変数Ｄ、部品化機能１０ｆが変数ＡとＢを使用するため、当該一覧には、図４に示すように、変数Ａ、Ｂ、Ｃ、Ｄが登録される。
次に、ステップＳ１１０２において、差分抽出部１１は、プログラム入力情報１３により指定される順序で、解析プログラム１０の各部品化機能が使用する変数の差分抽出を実施する。この実施例では、プログラム入力情報１３により指定された、部品化機能１０ａ、部品化機能１０ｃ、部品化機能１０ｄ、部品化機能１０ｆの順序で、変数の差分抽出が実施されることとする。
【００３０】
次に、図５の左欄は、ステップＳ１１０３において、１つの部品化機能１０ａの処理の開始のタイミングにおける、解析プログラム１０が使用する全変数の変数値を記録した記録結果を示す。なお、図５の右欄は、解析プログラム１０の構成を示す。
図５の左欄の記録結果に示されるように、差分抽出処理対象の部品化機能の直前に、別の部品化機能が有る場合は、直前の部品化機能終了のタイミングの変数値を、差分抽出処理対象の部品化機能開始のタイミングの変数値として記録する。差分抽出処理対象の部品化機能の直前に、別の部品化機能が無い場合は、差分抽出処理対象の部品化機能開始のタイミングの変数値は、「未初期化」を記録する。部品化機能１０ａには、直前に別の部品化機能が無いため、部品化機能１０ａ開始のタイミングにおける、全変数の変数値は、「未初期化」を記録する。
【００３１】
次に、図６の左欄は、ステップＳ１１０４において、当該１つの部品化機能１０ａの処理の終了のタイミングにおける、解析プログラム１０が使用する全変数の変数値を記録した記録結果を示す。なお、図６の右欄は、解析プログラム１０の構成を示す。
図６の左欄の記録結果に示されるように、部品化機能１０ａでは変数Ａを使用し、終了のタイミングにおいて変数Ａは「５」になっているため、変数Ａの終了タイミングにおける変数値として「５」を記録する。部品化機能１０ａでは、他の変数は使用しないため、変数Ｂ，Ｃ，Ｄの終了のタイミングの変数値は「未初期化」を記録する。
【００３２】
次に、図７の左欄は、ステップＳ１１０５（第１の抽出ステップ）において、部品化機能における、解析プログラム１０が使用する各変数の変数値の差分の有無を記録した記録結果を示す。なお、図７の右欄は、解析プログラム１０の構成を示す。
図７の左欄の記録結果に示されるように、部品化機能の処理の開始タイミングにおける変数値が「未初期化」の場合、または、部品化機能の処理の開始タイミングにおける変数値と終了タイミングにおける変数値とに差分が無い場合は、各変数値差分として、「無」を記録する。従って、各変数が初期化された場合は、「未初期化」から変数値から変化しているにもかかわらず、変数値差分として「無」が記録される。一方、部品化機能の処理の開始タイミングにおける変数値と終了タイミングにおける変数値とに差分が有る場合、または、直前の部品化機能の差分の記録結果が「有」の場合は、「有」を記録する。部品化機能１０ａでは、部品化機能１０ａの処理の開始タイミングにおける全変数値が「未初期化」であるため、各変数値差分は「無」を記録する。
【００３３】
次に、図８の左欄は、ステップＳ１１０６（第２の抽出ステップ）において、部品化機能おける、プログラムが使用する全変数の変数値の差分の有無を記録した結果を示す。なお、図８の右欄は、解析プログラム１０の構成を示す。
図８の左欄の記録結果に示されるように、部品化機能の処理の開始タイミングにおける全変数値と、終了タイミングにおける全変数値とにおいて、全て差分が無い場合、「無」を記録する。一方、部品化機能の処理の開始タイミングにおける全変数値と、終了タイミングにおける全変数値とにおいて、いずれかの変数に差分が有る場合、「有」を記録する。部品化機能１０ａでは、変数Ａが「未初期化」から「５」へ変化しているため、全変数の差分は「有」を記録する。すなわち、この場合には、いずれかの変数が初期化された場合も、変数値の差分が有ったとみなされ、「有」が記録される。
【００３４】
以上のように、ステップＳ１１０３からステップＳ１１０６までの処理を、プログラム入力情報１３の内容に従って処理する部品化機能の順に実施する。本実施例では、上述したように、部品化機能１０ａ、部品化機能１０ｃ、部品化機能１０ｄ、部品化機能１０ｆを経由し、プログラム終了に至るものとする。図９の左欄は、部品化機能１０ｆにおいて、ステップＳ１１０６が終了した時点の、全変数の変数値および差分の有無の記録結果を示す。図９の左欄の記録結果から、変数ＡとＢは、初期値が与えられた後、変数値の変化があったことが分かる。変数Ｃは、初期値が与えられた後、変数値の変化がなかったことが分かる。変数Ｄは、初期値が与えられることなく、解析プログラム１０において使用されなかった変数であることが分かる。また、部品化機能１０ｄでは、解析プログラム１０が使用する全変数の変数値に変化がなかったことが分かる。なお、図９の右欄は、解析プログラム１０の構成を示す。
図９の左欄の記録結果から、変数ＡとＢは、解析プログラム１０の処理に影響を与えている変数、または、解析プログラム１０の処理が影響を与えている変数であり、削除できない変数であることがわかる。また、変数Ｃは、初期値が与えられているが、その後、変数値の変化がなかったため、予め、変数Ｃに定数を入れておいても処理に影響を与えることはないため、変数Ｃは定数への置換が可能な変数であることがわかる。変数Ｄは、初期値が与えられることなく、解析プログラム１０において使用されなかった変数であるため、削除可能な変数であることが分かる。また、部品化機能１０ｄでは、解析プログラム１０が使用する全変数の変数値に変化がなかったため、解析プログラム１０で使用されなかった部品化機能であり、削除可能な部品化機能であることが分かる。
【００３５】
以上の方法によれば、解析対象のプログラムにおいて、不要な変数、定数へ置換可能な変数、削除可能な部品化機能の候補を抽出した情報を得ることができる。
【００３６】
以上のように、本実施の形態１は、１以上の部品化機能１０ａ〜１０ｆの組み合わせで構成された解析プログラム１０を解析するプログラム解析装置であって、部品化機能１０ａ〜１０ｆが使用する変数のリストを保持した部品化機能データベース１２と、解析プログラム１０の実行に使用するプログラム入力情報１３が入力されたときに、プログラム入力情報１３に従って解析プログラム１０の一部または全部の部品化機能を実行し、当該解析プログラム１０の部品化機能の実行時に、当該部品化機能ごとに、部品化機能の処理における各変数の開始タイミングの変数値と終了タイミングの変数値との差分の有無を抽出する差分抽出部１１と、差分抽出部１１の抽出結果に基づいて解析プログラム１０の解析結果を表示する解析結果表示部１４とを備えている。
差分抽出部１１は、まず、部品化機能データベースが保持するリストに基づいて解析プログラム１０全体で使用される全変数を抽出し、プログラム入力情報１３が入力されたときに、プログラム入力情報１３に従って解析プログラム１０を実行させる。
次に、差分抽出部１１は、解析プログラム１０の当該実行時に、部品化機能ごとに、部品化機能の処理の開始タイミングと終了タイミングとにおける解析プログラム１０の全変数の変数値の初期化を除く差分の有無を各変数ごとに抽出する（第１の抽出ステップ）。
また、差分抽出部１１は、部品化機能の処理の開始タイミングと終了タイミングとにおける部品化機能の処理全体における解析プログラム１０の全変数のうちの少なくとも１つの変数の変数値の初期化を含む差分の有無を各部品化機能ごとに抽出する（第２の抽出ステップ）。
解析結果表示部１４は、第１の抽出ステップにおいて、差分抽出部１１により各変数ごとに抽出された変数値の差分の有無を表示することにより、解析プログラム１０の処理に影響する変数と影響しない変数とを提示する。
また、解析結果表示部１４は、第２の抽出ステップにおいて、差分抽出部１１により各部品化機能ごとに抽出された変数値の差分の有無を表示することで、解析プログラムの処理に影響する部品化機能と影響しない部品化機能とを提示する。
このように、本実施の形態１によれば、部品化機能ごとに変数値の変化を解析し、解析プログラム１０に含まれる部品化機能とその変数のうち、処理に影響しない変数と処理に影響しない部品化機能を抽出し、解析結果表示部１４が表示するようにしたので、解析プログラム１０のデータ容量の削減や処理速度の改善を実施する際に、不要な部品化機能や変数を抽出し、それらを削除した場合でも、各部品化機能が本来有する機能を損なうことなく、解析プログラム１０のプログラム全体の効率化を図るために必要な情報を提示することができる。
また、本実施の形態１によれば、部品化機能ごとに変数値の変化を解析するようにしたので、解析結果表示部１４が表示する情報量も抑えることができ、特許文献１のように表示する情報量が膨大な量になることを防止することができる。
【００３７】
実施の形態２．
以下に、本実施の形態２に係るプログラム解析装置及びプログラム解析方法について、図面に基づいて説明する。図１０は、本実施の形態２に係るプログラム解析装置の概略構成図である。
【００３８】
図１０に示すように、本実施の形態２のプログラム解析装置は、図１に示した実施の形態１の構成に対して、差分抽出部１１と解析結果表示部１４との間に未到達機能抽出部１５を追加した構成を有している。
【００３９】
未到達機能抽出部１５は、プログラム入力情報１３に従って解析プログラム１０を実行したときに、解析プログラム１０内で処理が実行されなかった部品化機能を抽出する。
また、本実施の形態２においては、解析結果表示部１４が、未到達機能抽出部１５により抽出された処理が実行されなかった部品化機能を表示することで、解析プログラム１０の処理で使用されない部品化機能を提示する。
なお、他の構成及び処理については、実施の形態１と同様であるため、ここでは、その説明を省略する。
【００４０】
次に、本実施の形態２のプログラム解析方法の全体処理の概要を、図１１のフローチャートを用いて説明する。図２のフローチャートにおいて、ステップＳ１１０１〜ステップＳ１１０６の処理は差分抽出部１１が行い、ステップＳ１１１１〜ステップＳ１１１２の処理は未到達機能抽出部１５が行い、ステップＳ１１１３の処理は解析結果表示部１４が行う。
【００４１】
まず、図１１において、差分抽出部１１がステップＳ１１０１からステップＳ１１０６までの処理を行う。これらのステップＳ１１０１からステップＳ１１０６までの処理は、上記の実施の形態１のプログラム解析方法と同様の処理を実施するため、ここでは、説明を省略する。
【００４２】
本実施の形態２においては、次に、ステップＳ１１１１で、未到達機能抽出部１５は、解析プログラム１０を構成する全ての部品化機能の一覧を作成する。
【００４３】
次に、ステップＳ１１１２で、差分抽出部１１の記録結果に基づいて、解析プログラム１０を構成する全ての部品化機能の内、プログラム入力情報１３の内容に従って解析プログラム１０の処理を実施した結果、解析プログラム１０の処理が経由した部品化機能は「到達」、経由しなかった部品化機能は「未到達」を記録する。
【００４４】
最後に、ステップＳ１１１３で、差分抽出部１１が、ステップＳ１１０３からステップＳ１１０６で記録した、全変数の変数値と差分の記録結果と、未到達機能抽出部１５が、ステップＳ１１１１及びステップＳ１１１２で記録した、各部品化機能の「到達」及び「未到達」の記録結果を、解析結果表示部１４が表示する。これにより、解析プログラム１０の処理で使用される変数および部品化機能と使用されない変数および部品化機能とを提示することができる。使用されない変数及び部品化機能は、削除可能な変数及び部品化機能である。
【００４５】
次に、未到達機能抽出部１５の処理の経過を、図１２と図１３の実施例を用いて説明する。本実施例では、部品化機能データベース１２と解析プログラム１０の構造は、図３と同じとする。
【００４６】
図１２は、ステップＳ１１１１において、解析プログラム１０を構成する全ての部品化機能の一覧を作成した結果を示す。図１２の上段は、差分抽出部１１の記録結果を示し、図１２の下段は、未到達機能抽出部１５が作成する、解析プログラム１０を構成する全ての部品化機能の一覧を示す。解析プログラム１０が、図３に示すように、部品化機能１０ａ〜１０ｆで構成されている場合、図１２の下段に示すように、未到達機能抽出部１５が生成する全ての部品化機能の一覧には、部品化機能１０ａから１０ｆまでが登録される。
【００４７】
次に、図１３の下段は、ステップＳ１１１２において、差分抽出部１１の記録結果を入力情報として、解析プログラム１０を構成する部品化機能１０ａから１０ｆの内、プログラム入力情報１３の内容に従って解析プログラム１０の処理を実施した結果、経由した部品化機能に「到達」、経由しなかった部品化機能に「未到達」を記録した結果を示す。なお、図１３の上段は、差分抽出部１１の記録結果を示す。本実施例では、部品化機能１０ａ、部品化機能１０ｃ、部品化機能１０ｄ、部品化機能１０ｆを経由し、プログラム終了に至るものとしたので、解析プログラム１０を構成する部品化機能の内、部品化機能１０ｂと部品化機能１０ｅとは、プログラム入力情報１３の内容に従った処理では、使用しなかったことが分かる。
【００４８】
以上の方法によれば、解析対象のプログラムにおいて、不要な変数、定数へ置換可能な変数、削除可能な部品化機能の候補を抽出した情報を得ることができる。
【００４９】
以上のように、本実施の形態２においても、上記の実施の形態１と同様の効果を得ることができる。さらに、本実施の形態２においては、プログラム入力情報１３に従って解析プログラム１０を実行したときに、解析プログラム１０内で処理が実行されなかった部品化機能を抽出する未到達機能抽出部１５をさらに備えるようにしたので、解析結果表示部１４が、未到達機能抽出部１５により抽出された処理が実行されなかった部品化機能を表示することで、解析プログラム１０の処理で使用しない部品化機能を提示することができる。
【符号の説明】
【００５０】
１０  解析プログラム、１１  差分抽出部、１２  部品化機能データベース、１３  プログラム入力情報、１４  未到達機能抽出部、１５  未到達機能抽出部。
【要約】
【課題】プログラムを構成する部品化機能が使用する変数値の変化を解析し、プログラムの処理に影響しない変数と部品化機能とを抽出し表示する。
【解決手段】プログラム解析装置は、解析プログラム１０を構成する部品化機能が使用する変数のリストを保持した部品化機能データベース１２と、プログラム入力情報１３に従って解析プログラム１０を実行し、解析プログラム１０の実行時に、解析プログラム１０を構成する部品化機能の処理における各変数の開始タイミングの変数値と終了タイミングの変数値との差分の有無を抽出するとともに、部品化機能の処理全体における全変数の開始タイミングの変数値と終了タイミングの変数値との差分の有無を抽出する差分抽出部１１と、差分抽出部１１の抽出結果に基づいて解析プログラム１０の解析結果を表示する解析結果表示部１４とを備えている。
【選択図】図１【図１】
0006025955.tif 000002
【図２】
0006025955.tif 000003
【図３】
0006025955.tif 000004
【図４】
0006025955.tif 000005
【図５】
0006025955.tif 000006
【図６】
0006025955.tif 000007
【図７】
0006025955.tif 000008
【図８】
0006025955.tif 000009
【図９】
0006025955.tif 000010
【図１０】
0006025955.tif 000011
【図１１】
0006025955.tif 000012
【図１２】
0006025955.tif 000013
【図１３】
0006025955.tif 000014