JP2016224579A - 情報処理装置及び情報処理方法 - Google Patents
情報処理装置及び情報処理方法 Download PDFInfo
- Publication number
- JP2016224579A JP2016224579A JP2015108095A JP2015108095A JP2016224579A JP 2016224579 A JP2016224579 A JP 2016224579A JP 2015108095 A JP2015108095 A JP 2015108095A JP 2015108095 A JP2015108095 A JP 2015108095A JP 2016224579 A JP2016224579 A JP 2016224579A
- Authority
- JP
- Japan
- Prior art keywords
- program
- file
- function
- information processing
- directed graph
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Stored Programmes (AREA)
Abstract
【課題】情報処理装置において、ソースプログラムの構造を解析して分かり易くグラフ化する。【解決手段】情報処理装置は、ソースプログラムの構造を解析しグラフ化する。そのためにまずプログラムのソースコードを読み込み、それに含まれる関数及び変数について、処理タイミング毎の関数間のコール関係に、関数とその関数で読み書きされる変数との読み書き関係を組み合わせた有向グラフ(例えば有向グラフ60)を示すファイルを生成する。【選択図】図6
Description
本発明は、情報処理装置及び情報処理方法に関し、より詳細には、プログラムの構造を解析する情報処理装置及び情報処理方法に関する。
従来から、PC(Personal Computer)や、IC(Integrated Circuit)チップ等で構成される電子制御装置(ECU:Electronic Control Unit)などには、プログラムが実行可能に組み込まれている。なお、上記プログラムは、その組み込み先などによりソフトウェア、ミドルウェア、ファームウェアなどとも呼ばれる。そして、上記プログラムは、新たな機能の追加や既存の機能の変更などのために、適時バージョンアップがなされる。
プログラムを作成するに際しては、設計書が事前に作成され、その中にはプログラムの構造を示す関数コールツリー(FCT:Function Call Tree)やデータフローダイアグラム(DFD:Data Flow Diagram)を掲載することがある。但し、実際には、FCTやDFDを事前に作成せずにプログラミングを行うこともある。
FCT、DFDについてそれぞれ図1、図2を参照しながら説明する。図1で例示するFCT100は、或るプログラムについての関数のコール関係を図式化したものであり、メインプログラムのグラフ101(main.c)と、そのメインプログラムに含まれる3つのタイミング関数からそれぞれコールされたサブプログラムのグラフ102,103,104とで構成される。また、FCT100では、グラフ102が示すサブプログラム(motor.c)が、1ms間隔で動作するタイミング関数(「1msメイン」と表記)でコールされた出力トルク算出関数と、その出力トルク算出関数でコールされた出力電圧算出関数と、その出力電圧算出関数でコールされた出力制御関数とで構成されることも示している。グラフ103,104についても同様である。
なお、図1や後述の図2では、関数、変数(読み書きされる変数)、データフローがそれぞれ楕円形、矩形、矢印で表現されている。また、「main.c」、「motor.c」などは実際にこのプログラム(ここではC言語のプログラムで例示)内で記述されるプログラム名やサブプログラム名である。また、「main_1ms()」、「calc_out_trq()」などは実際にプログラムやサブプログラム内で記述される関数であり、それらの名称は「1msメイン」、「出力トルク算出」などと、分かり易いように図式化されている。また、「torque_req」、「out_torque」などは実際にプログラムやサブプログラムに入力又は出力される変数や内部で定義される変数であり、それらの名称は「要求トルク」、「出力トルク」などと、分かり易いように図式化されている。
図2で例示するDFD110は、FCT100で対象となったプログラムについて、データの流れ(つまり関数とその関数における変数の読み書きの関係)を図式化したものである。DFD110は、グラフ102〜104にそれぞれ相当するサブプログラムのグラフ112〜114が表記され、各グラフ112〜114内に関数と変数との関係が示されている。例えばグラフ112が示すサブプログラム(motor.c)では、出力トルク算出関数がそのサブプログラムの外部から要求トルクを受け、出力トルクを出力し、それを出力電圧算出関数へ入力し、出力電圧算出関数が出力電圧を出力し、それを出力制御関数が受けて、他から受けた値も使用して最終出力値を外部に出力している。
ところで、例えば車両内電子装置(電子機器)として自動車に搭載されたECUの組み込みプログラムは、自動車の車種やグレード毎に、その基礎プログラムに様々な機能のためのサブプログラムが追加されており、特に最高級車種になるとプログラムは複雑化、大規模化することになる。このような開発過程に起因するプログラムの複雑化や大規模化に限らず、近年、要求される機能の多様化などにより、様々なプログラムにおいてその複雑化や大規模化が進んでいる。そして、プログラムの大規模化・複雑化に伴い、プログラムの開発現場では、プログラミングの分業化が進んでいる。
また、組み込みプログラムの開発現場では、本当に要求通りのプログラムが作成できているのか、プログラムとして本当に正しく作られているのかなどの懸念もあり、人手によるソース解析がなされ、品質の確保に努めている。具体的には、各プログラマが手作業でプログラムのソースコードを事前作成の設計書(例えばFCTやDFDを含む)と比較して設計書通りになっているかを確認している。
しかしながら、プログラムの大規模化・複雑化により作成作業に多大な時間とコストがかかるだけでなく、上述のような人手による確認作業でも多大な時間とコストがかかる。さらに、人手による確認作業は、定型化し難く、プログラマ毎に品質にばらつきが生じる可能性もある。
また、現状でも、対象のプログラムを解析してFCTやDFDを作成するグラフ化プログラムが存在する。このような従来のグラフ化プログラムでは、例えばFCT100及びDFD110のようなグラフを作成することはできる。但し、要求トルク[torque_req]等のグラフ112〜114外に図示した変数は、対象のプログラムに含まれるヘッダで正しく定義されているものとする。
しかしながら、従来のグラフ化プログラムによりFCTやDFDを自動的に作成したとしても、FCTではデータ(変数)の処理の流れが分からず、DFDでは処理のタイミング(プログラムがどのようなタイミングで動いているか)が分からない。例えば、或る変数の上書きのタイミングを間違えるような構造上のバグが存在すると、そのプログラムを稼働しても処理結果が望むものにはならないが、このようなバグはプログラムからFCTやDFDを自動的に作成したとしても、それらを見ただけでは容易に判別することができない。
よって、このようなグラフ化プログラムを使用しても、その後の確認作業が多く残るといった問題や、確認しきれずにバグや不具合が残ってしまう問題が生じる。このようなバグや不具合は、対象のプログラムがバージョンアップされたものである場合、デグレーションとして現れてしまうこともある。
さらに、従来のグラフ化プログラムは、対象のプログラムをコンパイルした状態で解析するため、或る変数が正しく定義されていないものなど、コンパイルできないような作成途中のプログラムについては、問題ないかを確認することはできない。
本発明は、上述のような実状に鑑みてなされたものであり、その目的は、情報処理装置において、プログラムの構造を解析して分かり易くグラフ化することにある。
上記の課題を解決するために、本発明の第1の技術手段は、プログラムの構造を解析しグラフ化する情報処理装置であって、前記プログラムのソースコードを読み込み、該ソースコードに含まれる関数及び変数について、処理タイミング毎の関数間のコール関係に、関数と該関数で読み書きされる変数との読み書き関係を組み合わせた有向グラフを示すファイルを生成することを特徴としたものである。
本発明の第2の技術手段は、第1の技術手段において、表示部と、前記ファイルを開いて前記有向グラフを描画して該表示部に表示させる処理を行う表示処理部と、を有することを特徴としたものである。
本発明の第3の技術手段は、第2の技術手段において、前記表示処理部は、前記ファイルを開いて前記有向グラフを描画するためのアプリケーションプログラムを有することを特徴としたものである。
本発明の第4の技術手段は、第1〜第3のいずれか1の技術手段において、前記ファイルは、前記処理タイミング毎に、前記コール関係を示す矢印の配色及び/又は線種を異ならせて記述されていることを特徴としたものである。
本発明の第5の技術手段は、第1〜第4のいずれか1の技術手段において、前記処理タイミングは、前記ソースコードからタイミング関数を抽出することで取得され、前記コール関係は、前記タイミング関数に直接又は間接的にコールされた関数群をコールされる順序に従って記述されていることを特徴としたものである。
本発明の第6の技術手段は、第1〜第5のいずれか1の技術手段において、第1のプログラム、及び該第1のプログラムと少なくとも一部が重複する第2のプログラムの双方に対し、前記ファイルとして、それぞれ第1のファイル、第2のファイルを生成し、前記第2のファイルを前記第1のファイルと比較して、前記第1のファイルからの変更箇所を抽出し、前記第2のファイルに対し、前記変更箇所に含まれる前記関数、前記変数、前記コール関係、及び前記読み書き関係についての表示形態を変更し、前記第2のファイルを上書きするか若しくは新たなファイルを生成することを特徴としたものである。
本発明の第7の技術手段は、情報処理装置がプログラムの構造を解析しグラフ化する情報処理方法であって、前記プログラムのソースコードを読み込むステップと、該ソースコードに含まれる関数及び変数について、処理タイミング毎の関数間のコール関係に、関数と該関数で読み書きされる変数との関係を組み合わせた有向グラフを示すファイルを生成するステップと、を有することを特徴としたものである。
本発明によれば、情報処理装置において、プログラムの構造を解析して分かり易くグラフ化することが可能になり、プログラムの品質確認を容易に且つ短時間で行うことができる。
以下、本発明に係る情報処理装置及び情報処理方法について、図面を参照しながら具体例を挙げて説明する。
図3は、本発明の一実施形態に係る情報処理装置の一構成例を示す図である。
図3は、本発明の一実施形態に係る情報処理装置の一構成例を示す図である。
図3で例示する情報処理装置1は、汎用PCに本発明に係る情報処理プログラム(グラフ化プログラム14a等を含む)が実行可能に組み込まれた装置である。情報処理装置1は、CPU(Central Processing Unit)11、作業領域としてのRAM(Random Access Memory)12、ROM(Read Only Memory)13、HDD(Hard Disk Drive)14、及び液晶ディスプレイ等の表示部15を備える。その他、図示しないが、情報処理装置1には、キーボードやポインティングデバイス等の操作部が設けられている。表示部15に設けたタッチセンサを操作部とすることもできる。
なお、例えばCPU11の代わりにMPU(Micro Processing Unit)を設けたり、HDD14の代わりにSSD(Solid State Drive)を設けたりするなど、汎用PCの構成は図示する例に限ったものではない。また、本発明に係る情報処理装置は、汎用PC等のコンピュータに限らず、例えば、プログラムの構造を後述するように解析しグラフ化することが可能であれば専用の装置であってもよい。
本実施形態に係る情報処理装置1は、対象となるプログラム(以下、対象プログラム)のソースコードを読み込み、後述する有向グラフを示すファイルを生成する。このようなファイルの生成機能は、そのような生成を行うプログラム(グラフ化プログラム14aと呼ぶ)を、CPU11等で構成される情報処理装置1の制御部によって実行可能なように組み込むことで実現できる。この例では、グラフ化プログラム14aがCPU11から実行可能な状態でHDD14に格納されている。
上記有向グラフは、上記ソースコードに含まれる関数及び変数について、処理タイミング毎の関数間のコール関係に、関数とその関数で読み書き(入出力)される変数との読み書き関係(入出力関係)を組み合わせたグラフである。換言すれば、上記有向グラフは、読み書き関係(入出力の流れ)を示すDFDとコール関係(関数の呼び出し順序)を示すFCTとを組み合わせて図式化したグラフであり、上記ファイルは、一般的にGraphML形式のファイルのように、関数や変数をノードで示し、処理の流れをエッジ(矢印)で表現したものである。
上記ファイルの形式としては、上述のGraphML形式等のXML(Extensible Markup Language)形式に基づくものであることが表現力や汎用性の高さから望ましいが、GML(Graph Modeling Language)形式や、Microsoft(登録商標)社のワード、パワーポイント、エクセルなどの他の形式であってもよい。
また、対象プログラムは、コンパイラ型言語に限らず、インタープリタ型言語で記述されていてもよい。また、読み込むソースコードは、コール関係及び読み書き関係を抽出できれば済むため、コンパイルできないようなものであってもよい。よって、対象プログラムは、開発途中のプログラムであってもよいし、その一部であってもよい。
また、情報処理装置1は、表示部15に加え、上記ファイルを開いて上記有向グラフを描画して表示部15に表示させる処理を行う表示処理部を有することが好ましい。図3では、この表示処理部がこのような描画を行うためのアプリケーションプログラム(以下、表示プログラム14b)を有する例を挙げるが、これに限らない。
表示プログラム14bは、上記ファイルの形式に対応した図形描画アプリケーションであり、CPU11等で構成される情報処理装置1の制御部によって実行可能なように組み込まれている。この例では、表示プログラム14bがCPU11から実行可能な状態でHDD14に格納されている。例えば生成するファイルがGraphML形式であれば、この表示プログラム14bとしてはGraphMLグラフエディタが例示できる。
次に、図4〜図8を参照しながら、グラフ化プログラム14aや表示プログラム14bの処理例について説明する。図4は、情報処理装置1において表示させる初期UI(User Interface)画像の一例を示す図、図5A,図5Bは、情報処理装置1における処理の一例を説明するためのフロー図、図6は、情報処理装置1において生成、表示される有向グラフの一例を示す図である。また、図7は、情報処理装置1において生成、表示される有向グラフの他の例を示す図で、図8は、情報処理装置1において図7の有向グラフに対する図6の有向グラフの差分抽出結果として生成、表示される有向グラフの一例を示す図である。
図4で示す初期UI画像2は、表示部15に表示させるグラフ化プログラム14aの初期UI画像の一例であり、ソース解析ボタン21、グラフ化ボタン22、グラフ差分抽出ボタン23、及びグラフ設定ボタン24をユーザ選択可能な状態で含む。各ボタン21〜24については後述する。
まず、ユーザが情報処理装置1の操作部を操作してグラフ化プログラム14aを起動させると(ステップS1)、グラフ化プログラム14a(CPU11に読み出されたグラフ化プログラム14a。以下同様。)が初期UI画像2を表示部15に表示させる(ステップS2)。初期UI画像2には、ソース解析ボタン21、グラフ化ボタン22、グラフ差分抽出ボタン23、及びグラフ設定ボタン24がユーザ選択可能な状態で含まれている。グラフ化プログラム14aはこれらのボタン21〜24のいずれかの選択操作を待ち(ステップS3,S8,S15,S21)、選択に対応した処理を実行することになる。
ソース解析ボタン21が選択された場合(ステップS3でYESの場合)、対象プログラムのソースコードをユーザに選択させるための選択UI画像を表示部15に表示させ(ステップS4)、ユーザによる選択操作を待つ(ステップS5)。ソースコードが選択された段階で(ステップS5でYESの場合)、それを読み込み、そこから関数間のコール関係、関数による変数の読み書き(Read/Write:R/W)を抽出して中間ファイルを生成し(ステップS7)、ステップS3に戻る。
この中間ファイルは、例えば、ソースコードを最初から順番に読んでいって命令の解析を行い、そこに含まれる関数や変数を抽出し、各関数について、コール関係にある関数と読み書きされる変数を列挙し、記述していけばよい。なお、変数についてはその関数内で定義されているものとそうでないものが区別できるように記述しておけばよい。
例えば、ソースコードを命令解析し、関数を列記した関数解析データ、変数を列記した変数解析データ、各関数について関数で読まれる変数を列記した変数Read解析データ、各関数について関数で書き込まれる変数を列記した変数Write解析データ、関数間のコール関係を列記したコール解析データ、タイミング関数を列記したタイミング解析データを生成し、それらを中間ファイルとすればよい。
グラフ化ボタン22が選択された場合(ステップS8でYESの場合)、対象プログラムの中間ファイルをユーザに選択させるための選択UI画像を表示部15に表示させ(ステップS9)、ユーザによる選択操作を待つ(ステップS10)。
中間ファイルが選択された段階で(ステップS10でYESの場合)、それを読み込み、その中間ファイルにおいて、コール関係のトップとなる関数を検索する(ステップS11)。このトップとなる関数は、当然、対象プログラムによっては複数存在することがあり、例えば、対象プログラムが機器制御系のプログラムであればタイミング関数がそれに該当することになる。ステップS11に続き、そのトップの関数から順にコール関係及び変数のR/Wを辿った有向グラフを示すファイルを生成する(ステップS12)。このように、上記処理タイミングは、上記ソースコードからタイミング関数を抽出することで取得することが好ましく、その場合、上記コール関係は、そのタイミング関数に直接又は間接的にコールされた関数(機能関数)群をコールされる順序に従って記述すればよい。
ファイルが生成された場合、表示プログラム14bを呼び出し、表示プログラム14b(CPU11に読み出された表示プログラム14b。以下同様。)がそのファイルを開いて有向グラフを描画し、表示部15に表示させる(ステップS13)。その後、表示終了の操作を受け付けた場合(ステップS14でYESの場合)に表示プログラム14bを終了し、グラフ化プログラム14aがステップS2に戻って初期UI画像2を表示させる。なお、表示プログラム14bとしてGraphMLグラフエディタのようなエディタを採用した場合には、ステップS13の処理後、ステップS14でYESとなるまでの間、文字列や書式の編集の操作を受け付け、その操作に応じた編集を実行することができる。
ここで、ステップS13で描画される有向グラフについて、図6の有向グラフ60を例に挙げて説明する。有向グラフ60は、対象プログラムを示すように生成されたファイルを開くことで描画されたグラフの一例であり、換言すれば上記ファイルにはこのような描画が可能な情報が記述されている。また、有向グラフ60は、対象プログラムとして、図1や図2でFCTやDFDを作成する対象となったプログラムを解析し、図式化した例である。
有向グラフ60では、図1,図2と同様に、関数、変数(読み書きされる変数)、データフローがそれぞれ楕円形、矩形、矢印で表現されている。このように、有向グラフ60では、変数及び関数が図形で表記されると共に、変数に対応する図形と関数に対応する図形とで形状(及び/又は配色)を異ならせてある。つまり、その元のファイルには、それらの表示形態を異ならせる情報が記述されている。
また、有向グラフ60において、「main.c」などは実際にこのプログラム(ここではC言語のプログラムで例示)内で記述されるプログラム名やサブプログラム名である。「main_1ms()」、「calc_out_trq()」などは実際にプログラムやサブプログラム内で記述される関数であり、分かり易いようにそれらの名称を「1msメイン」、「出力トルク算出」などと図式化した例を挙げている。「torque_req」、「out_torque」などは実際にプログラムやサブプログラムに入力又は出力される変数や内部で定義される変数であり、分かり易いようにそれらの名称を「要求トルク」、「出力トルク」などと図式化した例を挙げている。
有向グラフ60は、例えばソース解析結果データを基に、関数と変数のR/W関係及び関数と関数のコール関係、タイミングを分けて図示したグラフであり、タイミング、関数のコール関係(関数により関数がコールされる関係)、関数と変数のR/W関係が1様式で明確化に表現されている。
具体的には、有向グラフ60では、関数を示すノードを共通とし、変数の流れと関数コールの流れが別の経路(分岐経路)で表現されている。ここで、関数や変数は、対象プログラムで定義(又は入出力されるもの)ものをそのままノードのIDとして使用し、有向グラフで表現させればよい。その名称については、対象プログラム内で実際の関数や変数と関連付けて記述されていればそれをノードのIDに加えて使用すればよい。一方、名称が記述されていないのであれば自動生成される有向グラフでは表現できないが、名称も表現させたい場合にはエディタにより名称を追記するなどすればよい。また、データフローについては、変数から関数、関数から変数など、データの出力元から出力先へのリンクを定義したエッジ(矢印)で表現すればよい。
有向グラフ60は主に、メインプログラムを示すグラフ61(main.c)と、そのメインプログラムに含まれる3つのタイミング関数からそれぞれコールされたサブプログラムを示すグラフ62,63,64とで構成される。また、有向グラフ60では、グラフ62が示すサブプログラム(motor.c)が、1ms間隔で動作するタイミング関数(「1msメイン」と表記)でコールされた出力トルク算出関数と、その出力トルク算出関数でコールされた出力電圧算出関数と、その出力電圧算出関数でコールされた出力制御関数とで構成されることを示している。グラフ63,64についても同様である。このように有向グラフ60では、FCTのように関数のコール関係が図式化されている。
また、有向グラフ60では、DFDのようにデータの流れ(つまり関数とその関数における変数の読み書きの関係)が図式化されており、各グラフ62〜64内に関数と変数との関係が示されている。例えばグラフ62のサブプログラム(motor.c)では、出力トルク算出関数がそのサブプログラムの外部から要求トルクを受け、出力トルクを出力し、それを出力電圧算出関数へ入力し、出力電圧算出関数が出力電圧を出力し、それを出力制御関数が受けて、他から受けた値も使用して最終出力値を外部に出力している。なお、有向グラフ60において、メインプログラムやサブプログラム内で定義される変数(出力トルク[out_torque]等のローカル変数)は定義されるプログラムを示すグラフ内に記述される。一方で、メインプログラムやサブプログラムに定義されない変数(要求トルク[torque_req]等のグローバル変数)は、外部からの変数として各グラフ61〜64の外部に記述しておけばよい。
このように、有向グラフ60はFCTとDFDとを組み合わせたグラフと言える。このようなグラフは、対象プログラムにおける制御の構造を図式化したものと言えるため、以下では有向グラフ60のような有向グラフを「制御構造フロー(Control Structure Flow:CSF)」とも呼ぶ。
以上のように、情報処理装置1では、プログラムの構造を解析して抽象化し分かり易くグラフ化(CSF化)することが可能になり、人手によるソース確認に比べてプログラムの品質確認を容易に且つ極短時間で行うことができ、また定型化できるためプログラマ毎に品質にばらつきが生じる可能性もない。特に、図6では簡略化のために非常に短い対象プログラムを例に挙げたが、実際には数万行や数十万行に及ぶプログラムが対象プログラムになることもあり、本発明は非常に有益となる。
また、グローバル変数は、対象プログラムとは別のプログラムや後に付されるヘッダで定義されることになるが、情報処理装置1では、図6のようにグローバル変数を外部に記述すれば済むため、上記別のプログラムや上記ヘッダが無くとも解析できる。このように、情報処理装置1では、読み込むソースコードがコンパイルできないようなものであってもよい。
よって、例えば、作成すべきプログラムを複数のプログラマに分担し、各プログラマが自身の担当のサブプログラム群を作成後、CSF化し、その構造が問題ないかを確認しながら完成させることができる。そして、各プログラマにより問題がないことを確認されたサブプログラム群とメインプログラムとについてCSF化し、全体の構造が問題ないかを確認し、プログラムを完成させることができる。この例に限らず、CSFはプログラム開発における要件分析、設計、構築、テストなどの各開発フェーズで利用でき、各開発フェーズにおける品質と生産性を向上させることができる。例えば、他人が作ったプログラムに追記してプログラムを更新させる場合にも、最初のプログラム(及び更新後のプログラム)をCSF化して確認することで、安心して他人の作ったプログラムを使用することができる。
さらに、開発したプログラムをクライアントに納品するに際し、そのプログラムのCSFを添付することで、クライアントは、納品されたプログラムの構造が問題ないことを容易に確かめることができ、安心してそのプログラムを使用することができるようになる。
また、有向グラフ60(CSF60)では、1,5,10msメインのそれぞれのタイミング関数から始まるコール関係を示す矢印(エッジ)の太さを変えている。このように、生成されるファイルは、処理タイミング毎にコール関係を示す矢印の配色(表示色)及び/又は線種(などの表示形態)を異ならせて記述されることが好ましい。これにより、タイミングの区別が一目で識別できるようになる。
次に、グラフ化プログラム14aの一機能として含めることが好ましいグラフ差分抽出機能について説明する。グラフ差分抽出ボタン23が選択された場合(ステップS8でNOとなりステップS15でYESとなった場合)、対象プログラムの有向グラフを示すファイルをユーザに選択させるための選択UI画像を表示部15に表示させ(ステップS16)、ユーザによる変更前後の2つを選択する操作を待つ(ステップS17)。
変更前後の2つのファイルが選択された段階で(ステップS17でYESの場合)、それを読み込み、それら2つの有向グラフ(CSF)の差分を抽出する(ステップS18)。その後、変更後の有向グラフにおける差分部分の表示形態を変更する(ステップS19)。ここでは、変更後の有向グラフを示すファイルから新たな差分表示用のファイルを生成すればよいが、変更後の有向グラフを示すファイルを上書きしてもよい。また、表示形態の変更とは、配色、線種、図形(図形の形状)などの変更を指す。変更後は変更前より目立つ表示形態となるようにしておけばよい。
このように、情報処理装置1(この例ではグラフ化プログラム14a)には、第1のプログラム、及び上記第1のプログラムと少なくとも一部が重複する第2のプログラムの双方に対し、それぞれ第1のファイル(有向グラフ60のような有向グラフを示すファイル)、第2のファイル(同様)を生成する機能をもたせ、且つ次のような差分抽出機能をもたせることが望ましい。
上記差分抽出機能は、上記第2のファイルを上記第1のファイルと比較して、上記第1のファイルからの変更箇所(つまり相違点、差分)を抽出する機能である。そして、情報処理装置1(この例ではグラフ化プログラム14a)は、上記第2のファイルに対し、上記変更箇所に含まれる上記関数、上記変数、上記コール関係、及び上記読み書き関係についての表示形態を変更し、上記第2のファイルを上書きするか若しくは新たなファイルを生成する機能も備えることが望ましい。これにより、次に説明する描画時に上記変更箇所を明示(強調)することが可能になる。
ステップS19で差分表示用のファイルが生成された後、表示プログラム14bを呼び出し、表示プログラム14bがその差分表示用のファイルを開いて有向グラフを描画し、表示部15に表示させる(ステップS20)。その後、ステップS14に進む。ここでも表示プログラム14bとしてエディタを採用した場合には、ステップS20の処理後、ステップS14でYESとなるまでの間、文字列や書式の編集の操作を受け付け、その操作に応じた編集を実行することができる。
ここで、ステップS20で描画される有向グラフについて、図8の有向グラフ80を例に挙げて説明する。有向グラフ80は、図7の有向グラフ70を示すファイルと図6の有向グラフ60を示すファイルを、それぞれ変更前、変更後のファイルとして読み込んだ場合に描画される有向グラフ(CSF)の一例である。なお、有向グラフ70におけるグラフ71〜74はそれぞれ有向グラフ60におけるグラフ61〜64の変更前のものである。
有向グラフ70と有向グラフ60との相違点は、その元となったソースコードの違いによるものである。この例では、motor.cに出力電圧算出関数が追加され、それに伴い出力電圧を示す変数が追加され、前後の関数(出力トルク算出関数及び出力制御関数)が変更されている。さらにこの例では、ad.cにα相電圧値を示す変数が新たに定義され、A/D取得関数と制御角算出関数が変更されている。なお、ad.cの変更により制御角値の変数が変更されるため、出力制御関数はこの変更を起因とする変更も生じていることになる。
そして、これらの変更が有向グラフ80で反映されている。有向グラフ80におけるグラフ81〜84はそれぞれ有向グラフ60におけるグラフ61〜64に対応するものであり、有向グラフ70,60間の差分を抽出し、差分部分の表示形態を変えたものである。具体的には、有向グラフ80では、変更後のソースコードで関係が変わった関数、追加されたコール関係、追加されたWrite関係、関係が変わったR/W、関係が変わった関数、追加されたコール関係、追加された関数、追加されたRead関係について、表示形態が変わっており、それにより変更箇所が明確化されている。なお、例えば変更前後で新たなサブプログラムが追加された場合、そのサブプログラム全体が変更箇所となる。
このように変更箇所を明確化することで、対象プログラムの開発途中でのチェックが行い易くなる。さらに、クライアントにバージョンアップ版を納品するに際し、そのプログラムの変更箇所明示版のCSFを添付することで、クライアントはプログラムの構造が問題ないことと変更がきちんとなされていることを確かめ、安心してそのプログラムを使用することができるようになる。さらに、バージョンアップ後に何らかの不具合が発生した場合、その不具合が変更により生じたことが推定できるため、この変更箇所明示版のCSFを見ることで、その事象が対象プログラムのどの辺りに起因するものであるのかを容易に絞り、不具合解消のための作業時間を大幅に短縮させることができる。
次にステップS15でNOの場合について説明する。グラフ設定ボタン24が選択された場合(ステップS15でNOとなりステップS21でYESとなった場合)、グラフを記述(描画)するに際しての色や線種などの設定をユーザに行わせるための設定UI画像を表示部15に表示させ(ステップS22)、変更操作を受け付けた場合(ステップS23でYESの場合)、設定をその変更操作に従って変更し(ステップS24)、ステップS2に戻る。変更操作がなく設定UI画像が閉じられた場合(図示せず)、ステップS24を経ずにステップS2に戻る。
なお、初期UI画像2にボタン21〜24を含めた例を挙げたが、グラフ化プログラム14aの初期UI画像はこれに限ったものではない。例えばソース解析ボタン21を設けることなく、グラフ化ボタン22、グラフ差分抽出ボタン23を設け、それぞれを選択することで、解析も含めてグラフ化、グラフ差分抽出を実行するようにしてもよい。無論、グラフ化プログラム14aには、グラフ差分抽出ボタン23で実行できるようなグラフ差分抽出の機能を具備しなくてもよいし、グラフ設定ボタン24で実行できるような設定の機能を具備しなくてもよい。
以上、本発明に係る情報処理装置について説明したが、処理の流れをフロー図で例示したように、本発明は、情報処理装置が対象プログラムの構造を解析しグラフ化する情報処理方法や、その情報処理方法を情報処理装置(コンピュータ等)に実行させるためのプログラム(グラフ化プログラム)としての形態も採り得る。なお、上記対象プログラムは、汎用PC、マイクロコンピュータ、プログラム可能な汎用の集積回路/チップセットなど、どのようなコンピュータで動作させるためプログラムであってもよい。
この情報処理方法は、上記対象プログラムのソースコードを読み込むステップと、上記ソースコードに含まれる関数及び変数について、処理タイミング毎の関数間のコール関係に、関数とその関数で読み書きされる変数との関係を組み合わせた有向グラフを示すファイルを生成するステップと、を有する。その他の応用例については、情報処理装置について説明した通りであり、その説明を省略する。上記グラフ化プログラムは、換言すると、この情報処理方法を、上記情報処理装置に実行させるためのプログラムである。
また、上記グラフ化プログラムをコンピュータにより読み取り可能な記録媒体に記録したプログラム記録媒体としての形態についても容易に理解することができる。このグラフ化プログラムは、可搬の記録媒体を介して流通させるに限らず、インターネット等のネットワークを介して、また放送波を介して流通させることもできる。ネットワークを介して受信するとは、外部サーバの記憶装置などに記録されたグラフ化プログラムを受信することを指す。
1…情報処理装置、2…初期UI画像、11…CPU、12…RAM、13…ROM、14…HDD、14a…グラフ化プログラム、14b…表示プログラム、15…表示部、21…ソース解析ボタン、22…グラフ化ボタン、23…グラフ差分抽出ボタン、24…グラフ設定ボタン、60,70,80…有向グラフ(CSF)、61,71,81…メインプログラムを示すグラフ、62,63,64,72,73,74,82,83,84…サブプログラムを示すグラフ。
Claims (7)
- プログラムの構造を解析しグラフ化する情報処理装置であって、
前記プログラムのソースコードを読み込み、
該ソースコードに含まれる関数及び変数について、処理タイミング毎の関数間のコール関係に、関数と該関数で読み書きされる変数との読み書き関係を組み合わせた有向グラフを示すファイルを生成することを特徴とする情報処理装置。 - 表示部と、前記ファイルを開いて前記有向グラフを描画して該表示部に表示させる処理を行う表示処理部と、を有することを特徴とする請求項1に記載の情報処理装置。
- 前記表示処理部は、前記ファイルを開いて前記有向グラフを描画するためのアプリケーションプログラムを有することを特徴とする請求項2に記載の情報処理装置。
- 前記ファイルは、前記処理タイミング毎に、前記コール関係を示す矢印の配色及び/又は線種を異ならせて記述されていることを特徴とする請求項1〜3のいずれか1に記載の情報処理装置。
- 前記処理タイミングは、前記ソースコードからタイミング関数を抽出することで取得され、
前記コール関係は、前記タイミング関数に直接又は間接的にコールされた関数群をコールされる順序に従って記述されていることを特徴とする請求項1〜4のいずれか1に記載の情報処理装置。 - 第1のプログラム、及び該第1のプログラムと少なくとも一部が重複する第2のプログラムの双方に対し、前記ファイルとして、それぞれ第1のファイル、第2のファイルを生成し、
前記第2のファイルを前記第1のファイルと比較して、前記第1のファイルからの変更箇所を抽出し、
前記第2のファイルに対し、前記変更箇所に含まれる前記関数、前記変数、前記コール関係、及び前記読み書き関係についての表示形態を変更し、前記第2のファイルを上書きするか若しくは新たなファイルを生成することを特徴とする請求項1〜5のいずれか1に記載の情報処理装置。 - 情報処理装置がプログラムの構造を解析しグラフ化する情報処理方法であって、
前記プログラムのソースコードを読み込むステップと、
該ソースコードに含まれる関数及び変数について、処理タイミング毎の関数間のコール関係に、関数と該関数で読み書きされる変数との関係を組み合わせた有向グラフを示すファイルを生成するステップと、
を有することを特徴とする情報処理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2015108095A JP2016224579A (ja) | 2015-05-28 | 2015-05-28 | 情報処理装置及び情報処理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2015108095A JP2016224579A (ja) | 2015-05-28 | 2015-05-28 | 情報処理装置及び情報処理方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2016224579A true JP2016224579A (ja) | 2016-12-28 |
Family
ID=57745807
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2015108095A Pending JP2016224579A (ja) | 2015-05-28 | 2015-05-28 | 情報処理装置及び情報処理方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2016224579A (ja) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2018181005A (ja) * | 2017-04-14 | 2018-11-15 | 富士通株式会社 | プログラム分析装置、プログラム分析方法および分析プログラム |
KR20180129623A (ko) * | 2017-05-26 | 2018-12-05 | 충남대학교산학협력단 | 연관된 다중 파일 정적 분석 장치 |
JP2019114019A (ja) * | 2017-12-22 | 2019-07-11 | 株式会社ゼンリンデータコム | 情報処理装置、判定方法及びプログラム |
JP2020149297A (ja) * | 2019-03-13 | 2020-09-17 | オムロン株式会社 | 解析装置、解析方法、及び解析プログラム |
-
2015
- 2015-05-28 JP JP2015108095A patent/JP2016224579A/ja active Pending
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2018181005A (ja) * | 2017-04-14 | 2018-11-15 | 富士通株式会社 | プログラム分析装置、プログラム分析方法および分析プログラム |
KR20180129623A (ko) * | 2017-05-26 | 2018-12-05 | 충남대학교산학협력단 | 연관된 다중 파일 정적 분석 장치 |
KR102013657B1 (ko) | 2017-05-26 | 2019-08-23 | 충남대학교산학협력단 | 연관된 다중 파일 정적 분석 장치 |
JP2019114019A (ja) * | 2017-12-22 | 2019-07-11 | 株式会社ゼンリンデータコム | 情報処理装置、判定方法及びプログラム |
JP2020149297A (ja) * | 2019-03-13 | 2020-09-17 | オムロン株式会社 | 解析装置、解析方法、及び解析プログラム |
JP7063291B2 (ja) | 2019-03-13 | 2022-05-09 | オムロン株式会社 | 解析装置、解析方法、及び解析プログラム |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10255044B2 (en) | Method and system for modifying deployed applications | |
CN109254992B (zh) | 项目生成方法及系统、计算机系统和计算机可读存储介质 | |
CN112416339A (zh) | 页面开发方法、装置、计算机设备 | |
US7873939B2 (en) | Processing logic modeling and execution | |
US7856619B2 (en) | Method and system for automated testing of a graphic-based programming tool | |
EP3338179B1 (en) | Graphical representation of data in a program code editor | |
US20150294039A1 (en) | Graphical Design Verification Environment Generator | |
Ahmed et al. | Model-based user interface engineering with design patterns | |
Smyth | Android Studio 2.2 Development Essentials-Android 7 Edition | |
CN110968294B (zh) | 一种业务领域模型建立系统及方法 | |
Herrmannsdörfer et al. | Coupled evolution of software metamodels and models | |
JP2016224579A (ja) | 情報処理装置及び情報処理方法 | |
US10379821B1 (en) | Optimization tracing | |
US20080040677A1 (en) | HMI Development Support Apparatus, HMI Development Support Method and HMI Development Support Program | |
EP3113016A1 (en) | Tracing dependencies between development artifacts in a development project | |
US8874598B2 (en) | Method and system for an executable specification | |
WO2016122508A1 (en) | Test generation for browser-based user interface | |
CN111078217A (zh) | 脑图生成方法、装置和计算机可读存储介质 | |
CN107902507B (zh) | 控制软件现场调试系统以及调试方法 | |
US20230195825A1 (en) | Browser extension with automation testing support | |
CN116909553A (zh) | 一种页面在线开发及本地编译运行系统 | |
US10222944B1 (en) | Embedding user interface elements in documents containing code | |
JP2015162218A (ja) | ソフトウェア開発装置、ソフトウェア開発方法 | |
JP2007265011A (ja) | 画面プログラムレイアウト変更方法および情報処理装置およびプログラムおよび記録媒体 | |
Schröpfer et al. | A Generic Projectional Editor for EMF Models. |