(57)【要約】      （修正有）【課題】情報処理装置において、ソースプログラムの構造を解析して分かり易くグラフ化する。【解決手段】情報処理装置は、ソースプログラムの構造を解析しグラフ化する。そのためにまずプログラムのソースコードを読み込み、それに含まれる関数及び変数について、処理タイミング毎の関数間のコール関係に、関数とその関数で読み書きされる変数との読み書き関係を組み合わせた有向グラフ（例えば有向グラフ６０）を示すファイルを生成する。【選択図】図６
2016224579.tif 000002
【特許請求の範囲】
【請求項１】
プログラムの構造を解析しグラフ化する情報処理装置であって、
前記プログラムのソースコードを読み込み、
該ソースコードに含まれる関数及び変数について、処理タイミング毎の関数間のコール関係に、関数と該関数で読み書きされる変数との読み書き関係を組み合わせた有向グラフを示すファイルを生成することを特徴とする情報処理装置。
【請求項２】
表示部と、前記ファイルを開いて前記有向グラフを描画して該表示部に表示させる処理を行う表示処理部と、を有することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記表示処理部は、前記ファイルを開いて前記有向グラフを描画するためのアプリケーションプログラムを有することを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記ファイルは、前記処理タイミング毎に、前記コール関係を示す矢印の配色及び／又は線種を異ならせて記述されていることを特徴とする請求項１〜３のいずれか１に記載の情報処理装置。
【請求項５】
前記処理タイミングは、前記ソースコードからタイミング関数を抽出することで取得され、
前記コール関係は、前記タイミング関数に直接又は間接的にコールされた関数群をコールされる順序に従って記述されていることを特徴とする請求項１〜４のいずれか１に記載の情報処理装置。
【請求項６】
第１のプログラム、及び該第１のプログラムと少なくとも一部が重複する第２のプログラムの双方に対し、前記ファイルとして、それぞれ第１のファイル、第２のファイルを生成し、
前記第２のファイルを前記第１のファイルと比較して、前記第１のファイルからの変更箇所を抽出し、
前記第２のファイルに対し、前記変更箇所に含まれる前記関数、前記変数、前記コール関係、及び前記読み書き関係についての表示形態を変更し、前記第２のファイルを上書きするか若しくは新たなファイルを生成することを特徴とする請求項１〜５のいずれか１に記載の情報処理装置。
【請求項７】
情報処理装置がプログラムの構造を解析しグラフ化する情報処理方法であって、
前記プログラムのソースコードを読み込むステップと、
該ソースコードに含まれる関数及び変数について、処理タイミング毎の関数間のコール関係に、関数と該関数で読み書きされる変数との関係を組み合わせた有向グラフを示すファイルを生成するステップと、
を有することを特徴とする情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置及び情報処理方法に関し、より詳細には、プログラムの構造を解析する情報処理装置及び情報処理方法に関する。
【背景技術】
【０００２】
従来から、ＰＣ（Personal Computer）や、ＩＣ（Integrated Circuit）チップ等で構成される電子制御装置（ＥＣＵ：Electronic Control Unit）などには、プログラムが実行可能に組み込まれている。なお、上記プログラムは、その組み込み先などによりソフトウェア、ミドルウェア、ファームウェアなどとも呼ばれる。そして、上記プログラムは、新たな機能の追加や既存の機能の変更などのために、適時バージョンアップがなされる。
【０００３】
プログラムを作成するに際しては、設計書が事前に作成され、その中にはプログラムの構造を示す関数コールツリー（ＦＣＴ：Function Call Tree）やデータフローダイアグラム（ＤＦＤ：Data Flow Diagram）を掲載することがある。但し、実際には、ＦＣＴやＤＦＤを事前に作成せずにプログラミングを行うこともある。
【０００４】
ＦＣＴ、ＤＦＤについてそれぞれ図１、図２を参照しながら説明する。図１で例示するＦＣＴ１００は、或るプログラムについての関数のコール関係を図式化したものであり、メインプログラムのグラフ１０１（ｍａｉｎ．ｃ）と、そのメインプログラムに含まれる３つのタイミング関数からそれぞれコールされたサブプログラムのグラフ１０２，１０３，１０４とで構成される。また、ＦＣＴ１００では、グラフ１０２が示すサブプログラム（ｍｏｔｏｒ．ｃ）が、１ｍｓ間隔で動作するタイミング関数（「１ｍｓメイン」と表記）でコールされた出力トルク算出関数と、その出力トルク算出関数でコールされた出力電圧算出関数と、その出力電圧算出関数でコールされた出力制御関数とで構成されることも示している。グラフ１０３，１０４についても同様である。
【０００５】
なお、図１や後述の図２では、関数、変数（読み書きされる変数）、データフローがそれぞれ楕円形、矩形、矢印で表現されている。また、「ｍａｉｎ．ｃ」、「ｍｏｔｏｒ．ｃ」などは実際にこのプログラム（ここではＣ言語のプログラムで例示）内で記述されるプログラム名やサブプログラム名である。また、「ｍａｉｎ＿１ｍｓ（）」、「ｃａｌｃ＿ｏｕｔ＿ｔｒｑ（）」などは実際にプログラムやサブプログラム内で記述される関数であり、それらの名称は「１ｍｓメイン」、「出力トルク算出」などと、分かり易いように図式化されている。また、「ｔｏｒｑｕｅ＿ｒｅｑ」、「ｏｕｔ＿ｔｏｒｑｕｅ」などは実際にプログラムやサブプログラムに入力又は出力される変数や内部で定義される変数であり、それらの名称は「要求トルク」、「出力トルク」などと、分かり易いように図式化されている。
【０００６】
図２で例示するＤＦＤ１１０は、ＦＣＴ１００で対象となったプログラムについて、データの流れ（つまり関数とその関数における変数の読み書きの関係）を図式化したものである。ＤＦＤ１１０は、グラフ１０２〜１０４にそれぞれ相当するサブプログラムのグラフ１１２〜１１４が表記され、各グラフ１１２〜１１４内に関数と変数との関係が示されている。例えばグラフ１１２が示すサブプログラム（ｍｏｔｏｒ．ｃ）では、出力トルク算出関数がそのサブプログラムの外部から要求トルクを受け、出力トルクを出力し、それを出力電圧算出関数へ入力し、出力電圧算出関数が出力電圧を出力し、それを出力制御関数が受けて、他から受けた値も使用して最終出力値を外部に出力している。
【０００７】
ところで、例えば車両内電子装置（電子機器）として自動車に搭載されたＥＣＵの組み込みプログラムは、自動車の車種やグレード毎に、その基礎プログラムに様々な機能のためのサブプログラムが追加されており、特に最高級車種になるとプログラムは複雑化、大規模化することになる。このような開発過程に起因するプログラムの複雑化や大規模化に限らず、近年、要求される機能の多様化などにより、様々なプログラムにおいてその複雑化や大規模化が進んでいる。そして、プログラムの大規模化・複雑化に伴い、プログラムの開発現場では、プログラミングの分業化が進んでいる。
【０００８】
また、組み込みプログラムの開発現場では、本当に要求通りのプログラムが作成できているのか、プログラムとして本当に正しく作られているのかなどの懸念もあり、人手によるソース解析がなされ、品質の確保に努めている。具体的には、各プログラマが手作業でプログラムのソースコードを事前作成の設計書（例えばＦＣＴやＤＦＤを含む）と比較して設計書通りになっているかを確認している。
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、プログラムの大規模化・複雑化により作成作業に多大な時間とコストがかかるだけでなく、上述のような人手による確認作業でも多大な時間とコストがかかる。さらに、人手による確認作業は、定型化し難く、プログラマ毎に品質にばらつきが生じる可能性もある。
【００１０】
また、現状でも、対象のプログラムを解析してＦＣＴやＤＦＤを作成するグラフ化プログラムが存在する。このような従来のグラフ化プログラムでは、例えばＦＣＴ１００及びＤＦＤ１１０のようなグラフを作成することはできる。但し、要求トルク［ｔｏｒｑｕｅ＿ｒｅｑ］等のグラフ１１２〜１１４外に図示した変数は、対象のプログラムに含まれるヘッダで正しく定義されているものとする。
【００１１】
しかしながら、従来のグラフ化プログラムによりＦＣＴやＤＦＤを自動的に作成したとしても、ＦＣＴではデータ（変数）の処理の流れが分からず、ＤＦＤでは処理のタイミング（プログラムがどのようなタイミングで動いているか）が分からない。例えば、或る変数の上書きのタイミングを間違えるような構造上のバグが存在すると、そのプログラムを稼働しても処理結果が望むものにはならないが、このようなバグはプログラムからＦＣＴやＤＦＤを自動的に作成したとしても、それらを見ただけでは容易に判別することができない。
【００１２】
よって、このようなグラフ化プログラムを使用しても、その後の確認作業が多く残るといった問題や、確認しきれずにバグや不具合が残ってしまう問題が生じる。このようなバグや不具合は、対象のプログラムがバージョンアップされたものである場合、デグレーションとして現れてしまうこともある。
【００１３】
さらに、従来のグラフ化プログラムは、対象のプログラムをコンパイルした状態で解析するため、或る変数が正しく定義されていないものなど、コンパイルできないような作成途中のプログラムについては、問題ないかを確認することはできない。
【００１４】
本発明は、上述のような実状に鑑みてなされたものであり、その目的は、情報処理装置において、プログラムの構造を解析して分かり易くグラフ化することにある。
【課題を解決するための手段】
【００１５】
上記の課題を解決するために、本発明の第１の技術手段は、プログラムの構造を解析しグラフ化する情報処理装置であって、前記プログラムのソースコードを読み込み、該ソースコードに含まれる関数及び変数について、処理タイミング毎の関数間のコール関係に、関数と該関数で読み書きされる変数との読み書き関係を組み合わせた有向グラフを示すファイルを生成することを特徴としたものである。
【００１６】
本発明の第２の技術手段は、第１の技術手段において、表示部と、前記ファイルを開いて前記有向グラフを描画して該表示部に表示させる処理を行う表示処理部と、を有することを特徴としたものである。
【００１７】
本発明の第３の技術手段は、第２の技術手段において、前記表示処理部は、前記ファイルを開いて前記有向グラフを描画するためのアプリケーションプログラムを有することを特徴としたものである。
【００１８】
本発明の第４の技術手段は、第１〜第３のいずれか１の技術手段において、前記ファイルは、前記処理タイミング毎に、前記コール関係を示す矢印の配色及び／又は線種を異ならせて記述されていることを特徴としたものである。
【００１９】
本発明の第５の技術手段は、第１〜第４のいずれか１の技術手段において、前記処理タイミングは、前記ソースコードからタイミング関数を抽出することで取得され、前記コール関係は、前記タイミング関数に直接又は間接的にコールされた関数群をコールされる順序に従って記述されていることを特徴としたものである。
【００２０】
本発明の第６の技術手段は、第１〜第５のいずれか１の技術手段において、第１のプログラム、及び該第１のプログラムと少なくとも一部が重複する第２のプログラムの双方に対し、前記ファイルとして、それぞれ第１のファイル、第２のファイルを生成し、前記第２のファイルを前記第１のファイルと比較して、前記第１のファイルからの変更箇所を抽出し、前記第２のファイルに対し、前記変更箇所に含まれる前記関数、前記変数、前記コール関係、及び前記読み書き関係についての表示形態を変更し、前記第２のファイルを上書きするか若しくは新たなファイルを生成することを特徴としたものである。
【００２１】
本発明の第７の技術手段は、情報処理装置がプログラムの構造を解析しグラフ化する情報処理方法であって、前記プログラムのソースコードを読み込むステップと、該ソースコードに含まれる関数及び変数について、処理タイミング毎の関数間のコール関係に、関数と該関数で読み書きされる変数との関係を組み合わせた有向グラフを示すファイルを生成するステップと、を有することを特徴としたものである。
【発明の効果】
【００２２】
本発明によれば、情報処理装置において、プログラムの構造を解析して分かり易くグラフ化することが可能になり、プログラムの品質確認を容易に且つ短時間で行うことができる。
【図面の簡単な説明】
【００２３】
【図１】関数コールツリーの一例を示す図である。
【図２】データフローダイアグラムの一例を示す図である。
【図３】本発明の一実施形態に係る情報処理装置の一構成例を示す図である。
【図４】図３の情報処理装置において表示させる初期ＵＩ（User Interface）画像の一例を示す図である。
【図５Ａ】図３の情報処理装置における処理の一例を説明するためのフロー図である。
【図５Ｂ】図５Ａの処理に続く処理例を説明するためのフロー図である。
【図６】図３の情報処理装置において生成、表示される有向グラフの一例を示す図である。
【図７】図３の情報処理装置において生成、表示される有向グラフの他の例を示す図である。
【図８】図３の情報処理装置において図７の有向グラフに対する図６の有向グラフの差分抽出結果として生成、表示される有向グラフの一例を示す図である。
【発明を実施するための形態】
【００２４】
以下、本発明に係る情報処理装置及び情報処理方法について、図面を参照しながら具体例を挙げて説明する。
図３は、本発明の一実施形態に係る情報処理装置の一構成例を示す図である。
【００２５】
図３で例示する情報処理装置１は、汎用ＰＣに本発明に係る情報処理プログラム（グラフ化プログラム１４ａ等を含む）が実行可能に組み込まれた装置である。情報処理装置１は、ＣＰＵ（Central Processing Unit）１１、作業領域としてのＲＡＭ（Random Access Memory）１２、ＲＯＭ（Read Only Memory）１３、ＨＤＤ（Hard Disk Drive）１４、及び液晶ディスプレイ等の表示部１５を備える。その他、図示しないが、情報処理装置１には、キーボードやポインティングデバイス等の操作部が設けられている。表示部１５に設けたタッチセンサを操作部とすることもできる。
【００２６】
なお、例えばＣＰＵ１１の代わりにＭＰＵ（Micro Processing Unit）を設けたり、ＨＤＤ１４の代わりにＳＳＤ（Solid State Drive）を設けたりするなど、汎用ＰＣの構成は図示する例に限ったものではない。また、本発明に係る情報処理装置は、汎用ＰＣ等のコンピュータに限らず、例えば、プログラムの構造を後述するように解析しグラフ化することが可能であれば専用の装置であってもよい。
【００２７】
本実施形態に係る情報処理装置１は、対象となるプログラム（以下、対象プログラム）のソースコードを読み込み、後述する有向グラフを示すファイルを生成する。このようなファイルの生成機能は、そのような生成を行うプログラム（グラフ化プログラム１４ａと呼ぶ）を、ＣＰＵ１１等で構成される情報処理装置１の制御部によって実行可能なように組み込むことで実現できる。この例では、グラフ化プログラム１４ａがＣＰＵ１１から実行可能な状態でＨＤＤ１４に格納されている。
【００２８】
上記有向グラフは、上記ソースコードに含まれる関数及び変数について、処理タイミング毎の関数間のコール関係に、関数とその関数で読み書き（入出力）される変数との読み書き関係（入出力関係）を組み合わせたグラフである。換言すれば、上記有向グラフは、読み書き関係（入出力の流れ）を示すＤＦＤとコール関係（関数の呼び出し順序）を示すＦＣＴとを組み合わせて図式化したグラフであり、上記ファイルは、一般的にＧｒａｐｈＭＬ形式のファイルのように、関数や変数をノードで示し、処理の流れをエッジ（矢印）で表現したものである。
【００２９】
上記ファイルの形式としては、上述のＧｒａｐｈＭＬ形式等のＸＭＬ（Extensible Markup Language）形式に基づくものであることが表現力や汎用性の高さから望ましいが、ＧＭＬ（Graph Modeling Language）形式や、Ｍｉｃｒｏｓｏｆｔ（登録商標）社のワード、パワーポイント、エクセルなどの他の形式であってもよい。
【００３０】
また、対象プログラムは、コンパイラ型言語に限らず、インタープリタ型言語で記述されていてもよい。また、読み込むソースコードは、コール関係及び読み書き関係を抽出できれば済むため、コンパイルできないようなものであってもよい。よって、対象プログラムは、開発途中のプログラムであってもよいし、その一部であってもよい。
【００３１】
また、情報処理装置１は、表示部１５に加え、上記ファイルを開いて上記有向グラフを描画して表示部１５に表示させる処理を行う表示処理部を有することが好ましい。図３では、この表示処理部がこのような描画を行うためのアプリケーションプログラム（以下、表示プログラム１４ｂ）を有する例を挙げるが、これに限らない。
【００３２】
表示プログラム１４ｂは、上記ファイルの形式に対応した図形描画アプリケーションであり、ＣＰＵ１１等で構成される情報処理装置１の制御部によって実行可能なように組み込まれている。この例では、表示プログラム１４ｂがＣＰＵ１１から実行可能な状態でＨＤＤ１４に格納されている。例えば生成するファイルがＧｒａｐｈＭＬ形式であれば、この表示プログラム１４ｂとしてはＧｒａｐｈＭＬグラフエディタが例示できる。
【００３３】
次に、図４〜図８を参照しながら、グラフ化プログラム１４ａや表示プログラム１４ｂの処理例について説明する。図４は、情報処理装置１において表示させる初期ＵＩ（User Interface）画像の一例を示す図、図５Ａ，図５Ｂは、情報処理装置１における処理の一例を説明するためのフロー図、図６は、情報処理装置１において生成、表示される有向グラフの一例を示す図である。また、図７は、情報処理装置１において生成、表示される有向グラフの他の例を示す図で、図８は、情報処理装置１において図７の有向グラフに対する図６の有向グラフの差分抽出結果として生成、表示される有向グラフの一例を示す図である。
【００３４】
図４で示す初期ＵＩ画像２は、表示部１５に表示させるグラフ化プログラム１４ａの初期ＵＩ画像の一例であり、ソース解析ボタン２１、グラフ化ボタン２２、グラフ差分抽出ボタン２３、及びグラフ設定ボタン２４をユーザ選択可能な状態で含む。各ボタン２１〜２４については後述する。
【００３５】
まず、ユーザが情報処理装置１の操作部を操作してグラフ化プログラム１４ａを起動させると（ステップＳ１）、グラフ化プログラム１４ａ（ＣＰＵ１１に読み出されたグラフ化プログラム１４ａ。以下同様。）が初期ＵＩ画像２を表示部１５に表示させる（ステップＳ２）。初期ＵＩ画像２には、ソース解析ボタン２１、グラフ化ボタン２２、グラフ差分抽出ボタン２３、及びグラフ設定ボタン２４がユーザ選択可能な状態で含まれている。グラフ化プログラム１４ａはこれらのボタン２１〜２４のいずれかの選択操作を待ち（ステップＳ３，Ｓ８，Ｓ１５，Ｓ２１）、選択に対応した処理を実行することになる。
【００３６】
ソース解析ボタン２１が選択された場合（ステップＳ３でＹＥＳの場合）、対象プログラムのソースコードをユーザに選択させるための選択ＵＩ画像を表示部１５に表示させ（ステップＳ４）、ユーザによる選択操作を待つ（ステップＳ５）。ソースコードが選択された段階で（ステップＳ５でＹＥＳの場合）、それを読み込み、そこから関数間のコール関係、関数による変数の読み書き（Ｒｅａｄ／Ｗｒｉｔｅ：Ｒ／Ｗ）を抽出して中間ファイルを生成し（ステップＳ７）、ステップＳ３に戻る。
【００３７】
この中間ファイルは、例えば、ソースコードを最初から順番に読んでいって命令の解析を行い、そこに含まれる関数や変数を抽出し、各関数について、コール関係にある関数と読み書きされる変数を列挙し、記述していけばよい。なお、変数についてはその関数内で定義されているものとそうでないものが区別できるように記述しておけばよい。
【００３８】
例えば、ソースコードを命令解析し、関数を列記した関数解析データ、変数を列記した変数解析データ、各関数について関数で読まれる変数を列記した変数Ｒｅａｄ解析データ、各関数について関数で書き込まれる変数を列記した変数Ｗｒｉｔｅ解析データ、関数間のコール関係を列記したコール解析データ、タイミング関数を列記したタイミング解析データを生成し、それらを中間ファイルとすればよい。
【００３９】
グラフ化ボタン２２が選択された場合（ステップＳ８でＹＥＳの場合）、対象プログラムの中間ファイルをユーザに選択させるための選択ＵＩ画像を表示部１５に表示させ（ステップＳ９）、ユーザによる選択操作を待つ（ステップＳ１０）。
【００４０】
中間ファイルが選択された段階で（ステップＳ１０でＹＥＳの場合）、それを読み込み、その中間ファイルにおいて、コール関係のトップとなる関数を検索する（ステップＳ１１）。このトップとなる関数は、当然、対象プログラムによっては複数存在することがあり、例えば、対象プログラムが機器制御系のプログラムであればタイミング関数がそれに該当することになる。ステップＳ１１に続き、そのトップの関数から順にコール関係及び変数のＲ／Ｗを辿った有向グラフを示すファイルを生成する（ステップＳ１２）。このように、上記処理タイミングは、上記ソースコードからタイミング関数を抽出することで取得することが好ましく、その場合、上記コール関係は、そのタイミング関数に直接又は間接的にコールされた関数（機能関数）群をコールされる順序に従って記述すればよい。
【００４１】
ファイルが生成された場合、表示プログラム１４ｂを呼び出し、表示プログラム１４ｂ（ＣＰＵ１１に読み出された表示プログラム１４ｂ。以下同様。）がそのファイルを開いて有向グラフを描画し、表示部１５に表示させる（ステップＳ１３）。その後、表示終了の操作を受け付けた場合（ステップＳ１４でＹＥＳの場合）に表示プログラム１４ｂを終了し、グラフ化プログラム１４ａがステップＳ２に戻って初期ＵＩ画像２を表示させる。なお、表示プログラム１４ｂとしてＧｒａｐｈＭＬグラフエディタのようなエディタを採用した場合には、ステップＳ１３の処理後、ステップＳ１４でＹＥＳとなるまでの間、文字列や書式の編集の操作を受け付け、その操作に応じた編集を実行することができる。
【００４２】
ここで、ステップＳ１３で描画される有向グラフについて、図６の有向グラフ６０を例に挙げて説明する。有向グラフ６０は、対象プログラムを示すように生成されたファイルを開くことで描画されたグラフの一例であり、換言すれば上記ファイルにはこのような描画が可能な情報が記述されている。また、有向グラフ６０は、対象プログラムとして、図１や図２でＦＣＴやＤＦＤを作成する対象となったプログラムを解析し、図式化した例である。
【００４３】
有向グラフ６０では、図１，図２と同様に、関数、変数（読み書きされる変数）、データフローがそれぞれ楕円形、矩形、矢印で表現されている。このように、有向グラフ６０では、変数及び関数が図形で表記されると共に、変数に対応する図形と関数に対応する図形とで形状（及び／又は配色）を異ならせてある。つまり、その元のファイルには、それらの表示形態を異ならせる情報が記述されている。
【００４４】
また、有向グラフ６０において、「ｍａｉｎ．ｃ」などは実際にこのプログラム（ここではＣ言語のプログラムで例示）内で記述されるプログラム名やサブプログラム名である。「ｍａｉｎ＿１ｍｓ（）」、「ｃａｌｃ＿ｏｕｔ＿ｔｒｑ（）」などは実際にプログラムやサブプログラム内で記述される関数であり、分かり易いようにそれらの名称を「１ｍｓメイン」、「出力トルク算出」などと図式化した例を挙げている。「ｔｏｒｑｕｅ＿ｒｅｑ」、「ｏｕｔ＿ｔｏｒｑｕｅ」などは実際にプログラムやサブプログラムに入力又は出力される変数や内部で定義される変数であり、分かり易いようにそれらの名称を「要求トルク」、「出力トルク」などと図式化した例を挙げている。
【００４５】
有向グラフ６０は、例えばソース解析結果データを基に、関数と変数のＲ／Ｗ関係及び関数と関数のコール関係、タイミングを分けて図示したグラフであり、タイミング、関数のコール関係（関数により関数がコールされる関係）、関数と変数のＲ／Ｗ関係が１様式で明確化に表現されている。
【００４６】
具体的には、有向グラフ６０では、関数を示すノードを共通とし、変数の流れと関数コールの流れが別の経路（分岐経路）で表現されている。ここで、関数や変数は、対象プログラムで定義（又は入出力されるもの）ものをそのままノードのＩＤとして使用し、有向グラフで表現させればよい。その名称については、対象プログラム内で実際の関数や変数と関連付けて記述されていればそれをノードのＩＤに加えて使用すればよい。一方、名称が記述されていないのであれば自動生成される有向グラフでは表現できないが、名称も表現させたい場合にはエディタにより名称を追記するなどすればよい。また、データフローについては、変数から関数、関数から変数など、データの出力元から出力先へのリンクを定義したエッジ（矢印）で表現すればよい。
【００４７】
有向グラフ６０は主に、メインプログラムを示すグラフ６１（ｍａｉｎ．ｃ）と、そのメインプログラムに含まれる３つのタイミング関数からそれぞれコールされたサブプログラムを示すグラフ６２，６３，６４とで構成される。また、有向グラフ６０では、グラフ６２が示すサブプログラム（ｍｏｔｏｒ．ｃ）が、１ｍｓ間隔で動作するタイミング関数（「１ｍｓメイン」と表記）でコールされた出力トルク算出関数と、その出力トルク算出関数でコールされた出力電圧算出関数と、その出力電圧算出関数でコールされた出力制御関数とで構成されることを示している。グラフ６３，６４についても同様である。このように有向グラフ６０では、ＦＣＴのように関数のコール関係が図式化されている。
【００４８】
また、有向グラフ６０では、ＤＦＤのようにデータの流れ（つまり関数とその関数における変数の読み書きの関係）が図式化されており、各グラフ６２〜６４内に関数と変数との関係が示されている。例えばグラフ６２のサブプログラム（ｍｏｔｏｒ．ｃ）では、出力トルク算出関数がそのサブプログラムの外部から要求トルクを受け、出力トルクを出力し、それを出力電圧算出関数へ入力し、出力電圧算出関数が出力電圧を出力し、それを出力制御関数が受けて、他から受けた値も使用して最終出力値を外部に出力している。なお、有向グラフ６０において、メインプログラムやサブプログラム内で定義される変数（出力トルク［ｏｕｔ＿ｔｏｒｑｕｅ］等のローカル変数）は定義されるプログラムを示すグラフ内に記述される。一方で、メインプログラムやサブプログラムに定義されない変数（要求トルク［ｔｏｒｑｕｅ＿ｒｅｑ］等のグローバル変数）は、外部からの変数として各グラフ６１〜６４の外部に記述しておけばよい。
【００４９】
このように、有向グラフ６０はＦＣＴとＤＦＤとを組み合わせたグラフと言える。このようなグラフは、対象プログラムにおける制御の構造を図式化したものと言えるため、以下では有向グラフ６０のような有向グラフを「制御構造フロー（Control Structure Flow：ＣＳＦ）」とも呼ぶ。
【００５０】
以上のように、情報処理装置１では、プログラムの構造を解析して抽象化し分かり易くグラフ化（ＣＳＦ化）することが可能になり、人手によるソース確認に比べてプログラムの品質確認を容易に且つ極短時間で行うことができ、また定型化できるためプログラマ毎に品質にばらつきが生じる可能性もない。特に、図６では簡略化のために非常に短い対象プログラムを例に挙げたが、実際には数万行や数十万行に及ぶプログラムが対象プログラムになることもあり、本発明は非常に有益となる。
【００５１】
また、グローバル変数は、対象プログラムとは別のプログラムや後に付されるヘッダで定義されることになるが、情報処理装置１では、図６のようにグローバル変数を外部に記述すれば済むため、上記別のプログラムや上記ヘッダが無くとも解析できる。このように、情報処理装置１では、読み込むソースコードがコンパイルできないようなものであってもよい。
【００５２】
よって、例えば、作成すべきプログラムを複数のプログラマに分担し、各プログラマが自身の担当のサブプログラム群を作成後、ＣＳＦ化し、その構造が問題ないかを確認しながら完成させることができる。そして、各プログラマにより問題がないことを確認されたサブプログラム群とメインプログラムとについてＣＳＦ化し、全体の構造が問題ないかを確認し、プログラムを完成させることができる。この例に限らず、ＣＳＦはプログラム開発における要件分析、設計、構築、テストなどの各開発フェーズで利用でき、各開発フェーズにおける品質と生産性を向上させることができる。例えば、他人が作ったプログラムに追記してプログラムを更新させる場合にも、最初のプログラム（及び更新後のプログラム）をＣＳＦ化して確認することで、安心して他人の作ったプログラムを使用することができる。
【００５３】
さらに、開発したプログラムをクライアントに納品するに際し、そのプログラムのＣＳＦを添付することで、クライアントは、納品されたプログラムの構造が問題ないことを容易に確かめることができ、安心してそのプログラムを使用することができるようになる。
【００５４】
また、有向グラフ６０（ＣＳＦ６０）では、１，５，１０ｍｓメインのそれぞれのタイミング関数から始まるコール関係を示す矢印（エッジ）の太さを変えている。このように、生成されるファイルは、処理タイミング毎にコール関係を示す矢印の配色（表示色）及び／又は線種（などの表示形態）を異ならせて記述されることが好ましい。これにより、タイミングの区別が一目で識別できるようになる。
【００５５】
次に、グラフ化プログラム１４ａの一機能として含めることが好ましいグラフ差分抽出機能について説明する。グラフ差分抽出ボタン２３が選択された場合（ステップＳ８でＮＯとなりステップＳ１５でＹＥＳとなった場合）、対象プログラムの有向グラフを示すファイルをユーザに選択させるための選択ＵＩ画像を表示部１５に表示させ（ステップＳ１６）、ユーザによる変更前後の２つを選択する操作を待つ（ステップＳ１７）。
【００５６】
変更前後の２つのファイルが選択された段階で（ステップＳ１７でＹＥＳの場合）、それを読み込み、それら２つの有向グラフ（ＣＳＦ）の差分を抽出する（ステップＳ１８）。その後、変更後の有向グラフにおける差分部分の表示形態を変更する（ステップＳ１９）。ここでは、変更後の有向グラフを示すファイルから新たな差分表示用のファイルを生成すればよいが、変更後の有向グラフを示すファイルを上書きしてもよい。また、表示形態の変更とは、配色、線種、図形（図形の形状）などの変更を指す。変更後は変更前より目立つ表示形態となるようにしておけばよい。
【００５７】
このように、情報処理装置１（この例ではグラフ化プログラム１４ａ）には、第１のプログラム、及び上記第１のプログラムと少なくとも一部が重複する第２のプログラムの双方に対し、それぞれ第１のファイル（有向グラフ６０のような有向グラフを示すファイル）、第２のファイル（同様）を生成する機能をもたせ、且つ次のような差分抽出機能をもたせることが望ましい。
【００５８】
上記差分抽出機能は、上記第２のファイルを上記第１のファイルと比較して、上記第１のファイルからの変更箇所（つまり相違点、差分）を抽出する機能である。そして、情報処理装置１（この例ではグラフ化プログラム１４ａ）は、上記第２のファイルに対し、上記変更箇所に含まれる上記関数、上記変数、上記コール関係、及び上記読み書き関係についての表示形態を変更し、上記第２のファイルを上書きするか若しくは新たなファイルを生成する機能も備えることが望ましい。これにより、次に説明する描画時に上記変更箇所を明示（強調）することが可能になる。
【００５９】
ステップＳ１９で差分表示用のファイルが生成された後、表示プログラム１４ｂを呼び出し、表示プログラム１４ｂがその差分表示用のファイルを開いて有向グラフを描画し、表示部１５に表示させる（ステップＳ２０）。その後、ステップＳ１４に進む。ここでも表示プログラム１４ｂとしてエディタを採用した場合には、ステップＳ２０の処理後、ステップＳ１４でＹＥＳとなるまでの間、文字列や書式の編集の操作を受け付け、その操作に応じた編集を実行することができる。
【００６０】
ここで、ステップＳ２０で描画される有向グラフについて、図８の有向グラフ８０を例に挙げて説明する。有向グラフ８０は、図７の有向グラフ７０を示すファイルと図６の有向グラフ６０を示すファイルを、それぞれ変更前、変更後のファイルとして読み込んだ場合に描画される有向グラフ（ＣＳＦ）の一例である。なお、有向グラフ７０におけるグラフ７１〜７４はそれぞれ有向グラフ６０におけるグラフ６１〜６４の変更前のものである。
【００６１】
有向グラフ７０と有向グラフ６０との相違点は、その元となったソースコードの違いによるものである。この例では、ｍｏｔｏｒ．ｃに出力電圧算出関数が追加され、それに伴い出力電圧を示す変数が追加され、前後の関数（出力トルク算出関数及び出力制御関数）が変更されている。さらにこの例では、ａｄ．ｃにα相電圧値を示す変数が新たに定義され、Ａ／Ｄ取得関数と制御角算出関数が変更されている。なお、ａｄ．ｃの変更により制御角値の変数が変更されるため、出力制御関数はこの変更を起因とする変更も生じていることになる。
【００６２】
そして、これらの変更が有向グラフ８０で反映されている。有向グラフ８０におけるグラフ８１〜８４はそれぞれ有向グラフ６０におけるグラフ６１〜６４に対応するものであり、有向グラフ７０，６０間の差分を抽出し、差分部分の表示形態を変えたものである。具体的には、有向グラフ８０では、変更後のソースコードで関係が変わった関数、追加されたコール関係、追加されたＷｒｉｔｅ関係、関係が変わったＲ／Ｗ、関係が変わった関数、追加されたコール関係、追加された関数、追加されたＲｅａｄ関係について、表示形態が変わっており、それにより変更箇所が明確化されている。なお、例えば変更前後で新たなサブプログラムが追加された場合、そのサブプログラム全体が変更箇所となる。
【００６３】
このように変更箇所を明確化することで、対象プログラムの開発途中でのチェックが行い易くなる。さらに、クライアントにバージョンアップ版を納品するに際し、そのプログラムの変更箇所明示版のＣＳＦを添付することで、クライアントはプログラムの構造が問題ないことと変更がきちんとなされていることを確かめ、安心してそのプログラムを使用することができるようになる。さらに、バージョンアップ後に何らかの不具合が発生した場合、その不具合が変更により生じたことが推定できるため、この変更箇所明示版のＣＳＦを見ることで、その事象が対象プログラムのどの辺りに起因するものであるのかを容易に絞り、不具合解消のための作業時間を大幅に短縮させることができる。
【００６４】
次にステップＳ１５でＮＯの場合について説明する。グラフ設定ボタン２４が選択された場合（ステップＳ１５でＮＯとなりステップＳ２１でＹＥＳとなった場合）、グラフを記述（描画）するに際しての色や線種などの設定をユーザに行わせるための設定ＵＩ画像を表示部１５に表示させ（ステップＳ２２）、変更操作を受け付けた場合（ステップＳ２３でＹＥＳの場合）、設定をその変更操作に従って変更し（ステップＳ２４）、ステップＳ２に戻る。変更操作がなく設定ＵＩ画像が閉じられた場合（図示せず）、ステップＳ２４を経ずにステップＳ２に戻る。
【００６５】
なお、初期ＵＩ画像２にボタン２１〜２４を含めた例を挙げたが、グラフ化プログラム１４ａの初期ＵＩ画像はこれに限ったものではない。例えばソース解析ボタン２１を設けることなく、グラフ化ボタン２２、グラフ差分抽出ボタン２３を設け、それぞれを選択することで、解析も含めてグラフ化、グラフ差分抽出を実行するようにしてもよい。無論、グラフ化プログラム１４ａには、グラフ差分抽出ボタン２３で実行できるようなグラフ差分抽出の機能を具備しなくてもよいし、グラフ設定ボタン２４で実行できるような設定の機能を具備しなくてもよい。
【００６６】
以上、本発明に係る情報処理装置について説明したが、処理の流れをフロー図で例示したように、本発明は、情報処理装置が対象プログラムの構造を解析しグラフ化する情報処理方法や、その情報処理方法を情報処理装置（コンピュータ等）に実行させるためのプログラム（グラフ化プログラム）としての形態も採り得る。なお、上記対象プログラムは、汎用ＰＣ、マイクロコンピュータ、プログラム可能な汎用の集積回路／チップセットなど、どのようなコンピュータで動作させるためプログラムであってもよい。
【００６７】
この情報処理方法は、上記対象プログラムのソースコードを読み込むステップと、上記ソースコードに含まれる関数及び変数について、処理タイミング毎の関数間のコール関係に、関数とその関数で読み書きされる変数との関係を組み合わせた有向グラフを示すファイルを生成するステップと、を有する。その他の応用例については、情報処理装置について説明した通りであり、その説明を省略する。上記グラフ化プログラムは、換言すると、この情報処理方法を、上記情報処理装置に実行させるためのプログラムである。
【００６８】
また、上記グラフ化プログラムをコンピュータにより読み取り可能な記録媒体に記録したプログラム記録媒体としての形態についても容易に理解することができる。このグラフ化プログラムは、可搬の記録媒体を介して流通させるに限らず、インターネット等のネットワークを介して、また放送波を介して流通させることもできる。ネットワークを介して受信するとは、外部サーバの記憶装置などに記録されたグラフ化プログラムを受信することを指す。
【符号の説明】
【００６９】
１…情報処理装置、２…初期ＵＩ画像、１１…ＣＰＵ、１２…ＲＡＭ、１３…ＲＯＭ、１４…ＨＤＤ、１４ａ…グラフ化プログラム、１４ｂ…表示プログラム、１５…表示部、２１…ソース解析ボタン、２２…グラフ化ボタン、２３…グラフ差分抽出ボタン、２４…グラフ設定ボタン、６０，７０，８０…有向グラフ（ＣＳＦ）、６１，７１，８１…メインプログラムを示すグラフ、６２，６３，６４，７２，７３，７４，８２，８３，８４…サブプログラムを示すグラフ。
【図１】
2016224579.tif 000003
【図２】
2016224579.tif 000004
【図３】
2016224579.tif 000005
【図４】
2016224579.tif 000006
【図５Ａ】
2016224579.tif 000007
【図５Ｂ】
2016224579.tif 000008
【図６】
2016224579.tif 000009
【図７】
2016224579.tif 000010
【図８】
2016224579.tif 000011