JP2013156786A - ソフトウェアの構造可視化プログラムおよびシステム - Google Patents

ソフトウェアの構造可視化プログラムおよびシステム Download PDF

Info

Publication number
JP2013156786A
JP2013156786A JP2012016046A JP2012016046A JP2013156786A JP 2013156786 A JP2013156786 A JP 2013156786A JP 2012016046 A JP2012016046 A JP 2012016046A JP 2012016046 A JP2012016046 A JP 2012016046A JP 2013156786 A JP2013156786 A JP 2013156786A
Authority
JP
Japan
Prior art keywords
variable
dependency
unit
source code
dependency relationship
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.)
Granted
Application number
JP2012016046A
Other languages
English (en)
Other versions
JP5775829B2 (ja
Inventor
Masahiro Matsubara
正裕 松原
Kohei Sakurai
康平 櫻井
Fumio Narisawa
文雄 成沢
Hisamitsu Yamanaka
久光 山中
Mamoru Nemoto
守 根本
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Astemo Ltd
Original Assignee
Hitachi Automotive Systems Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Hitachi Automotive Systems Ltd filed Critical Hitachi Automotive Systems Ltd
Priority to JP2012016046A priority Critical patent/JP5775829B2/ja
Publication of JP2013156786A publication Critical patent/JP2013156786A/ja
Application granted granted Critical
Publication of JP5775829B2 publication Critical patent/JP5775829B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Stored Programmes (AREA)

Abstract

【課題】ソフトウェアの構成や処理概要に関する情報を変数依存関係の観点からユーザに提供する。
【解決手段】構文解析手段は、ソースコードを解析して構文情報を出力する。変数依存関係解析手段は、制御フロー導出手段、代入依存関係導出手段、データ依存関係導出手段、制御依存関係導出手段、変数依存関係導出手段からなる。制御フロー導出手段は、前記構文情報から制御フローを出力する。代入依存関係導出手段、データ依存関係導出手段、制御依存関係導出手段は、前記制御フローから記述位置で区別される2変数間の代入依存関係、データ依存関係、制御依存関係を出力する。変数依存関係導出手段は、前記代入依存関係と前記データ依存関係と前記制御依存関係とから複数ステートメント間に渡る変数依存関係を出力する。変数依存関係表示手段は、前記変数依存関係をグラフとして表示する。
【選択図】 図1

Description

本発明はソフトウェアの構造を解析するソフトウェアツールに係り、特に解析結果を可視化する手法およびその手法に沿った処理を実行可能なソフトウェアツールに関する。
ソフトウェアの規模が巨大化し、構造や処理の複雑さが増しており、設計者や検証者がソフトウェアの全容を把握することが困難になっている。またソフトウェアの開発が過去資産への継ぎ足しで行われることもあり、簡潔でないコード記述を生むことや、ソフトウェアへの追加・修正による影響の把握が困難なことの原因となっている。
特に制御装置では、装置の電動化に伴う制御用ソフトウェアの規模増大により、ソフトウェアを含む電子制御装置に不具合が潜在し、システムの安全性を損う恐れが増していることを背景として、IEC61508やISO26262などの機能安全規格が制定されている。
システムの安全性を確保する上でも、設計者や検証者がソフトウェア、特に過去資産や他の設計者が記述したソースコードの構造や処理を理解することが好ましい。設計者や検証者による理解を容易にすることを目的として、プログラムに対し静的解析や動的解析を行い、その結果を関数コールグラフなどの図形として視覚化する手法とツールがある。視覚化対象のうち、ソフトウェアの構成上で重要な情報の1つとして、変数間の依存関係がある。ここで依存関係は、実行順序により実行結果が変化する可能性のある関係である。ソフトウェアの動作は、入力を始めとするデータを用いて演算し、出力に至る別のデータを変化させる処理の連続であるから、変数依存関係はソフトウェアの構成や処理概要を把握する上で重要である。
ソースコードから変数依存関係を解析しグラフとして表示することに近い先行技術として、特許文献1や特許文献2では、ソースコードからデータフローグラフを生成している。ここでデータフローグラフは、ある1ステートメントにおけるデータの流れ(変数依存関係)を示すものであり、複数ステートメント間に渡るデータの流れではない。
非特許文献1では、PDG(Program Dependence Graph)を紹介している。PDGでは、ソースコードからステートメント間に存在するデータ依存関係(変数を定義、つまり値決めしている命令から、参照している命令へ到達する依存関係)や制御依存関係(分岐またはループの条件式にて変数を参照している命令から、その分岐・ループに含まれる命令にて変数を定義している命令に到達する依存関係)を有向グラフで示しており、グラフのノードはステートメントである。
非特許文献2,3では、変数依存関係の解析や表示を行っている。しかし依存関係の解析・表示において、変数を記述位置で区別していない。同じ名称、実体(記憶領域)の変数でも、記載位置(ファイル、関数、行、列)が異なれば、依存関係上では区別して扱う必要がある。
特開平7−93144号公報 特開2003−50722号公報
『プログラムスライシング技術と応用』 共立出版(1995) 大崎,山本,阿草:『プログラム理解のための依存関係表示ツール』(FOSE’96) **井上研究室**
上記従来技術では、実行時の処理順序を考慮してユーザに変数依存関係の解析結果を提供することについて考慮されていない。
本発明は、複数ステートメント間や関数間など、ソースコードの広域に渡る変数間の依存関係を解析し、ソフトウェア実行時の処理順序により決定される変数同士の与える影響・依存関係を視覚的に理解できるようにすること、また、変数を単位(ノード)としてグラフに表示することにより、ソフトウェアの構成や処理概要に関する情報をユーザに提供することを目的とする。
上記課題を解決するため本発明は、コンピュータに、ソフトウェアのソースコードを入力させ、前記ソースコードを解析させ、解析結果を出力させるためのソフトウェアの構造可視化プログラムにおいて、前記プログラムは、前記コンピュータに前記ソースコードの構文解析を実行させるための構文解析部と、前記コンピュータに前記構文解析部による構文解析結果から、前記ソースコード中の記述位置毎に区別された複数の変数について、変数間の依存関係を導出させるための変数依存関係解析部と、前記変数依存関係解析部により導出した変数依存関係を、前記複数の変数の前記ソースコード中の記述位置情報と共に、前記コンピュータに表示装置への表示、または前記コンピュータ外部への出力を実行させるための変数依存関係出力部と、を有するよう構成する。
本発明によれば設計者や検証者がソフトウェアの構造や処理概要を、変数依存関係の観点から理解することを容易にできる。
本発明の基本機能構成図。 変数依存関係解析部の機能構成図。 変数依存関係解析の処理フロー。 実施例1で解析対象とするソースコード。 実施例1のソースコードの構文木。 実施例1のソースコードの制御フローに関するデータベース。 実施例1のソースコードの制御フローグラフ。 実施例1のソースコードの代入依存関係に関するデータベース。 実施例1のソースコードのデータ依存関係に関するデータベース。 実施例1のソースコードの制御依存関係に関するデータベース。 実施例1のソースコードの変数依存関係(ネットワーク)を示すグラフ。 変数依存関係(ネットワーク)から変数依存関係(ツリー)を抽出する拡張機能構成図。 変数依存関係(ツリー)を抽出する処理フロー。 実施例1のソースコードの変数依存関係(ツリー)を表すグラフ。 変数依存関係(ツリー)とソースコードとの連携表示例。 実施例1のソースコードの実行パス数カウント結果表示例。 異なる実行パスにて間接的に影響する変数依存関係(ツリー)を抽出する処理フロー。 実施例2で解析対象とするソースコード。 実施例2のソースコードから異なる実行パスにて間接的に影響する変数依存関係(ツリー)を抽出した例。 2つの変数依存関係を比較する拡張機能構成図。 2つの変数依存関係を比較する処理フロー。 変数依存関係の比較例、差分がある場合。 変数依存関係の比較例、差分がない場合。 関数コールグラフと変数依存関係(ツリー)との複合表示例。 本発明のシステム構成。 変数依存関係に基づくスライシング処理結果の表示例。
本発明における構文解析部は、ソースコードを解析して構文情報を出力する。変数依存関係解析部は、制御フロー導出部、代入依存関係導出部、データ依存関係導出部、制御依存関係導出部、変数依存関係導出部からなる。制御フロー導出部は、前記構文情報から制御フローを出力する。代入依存関係導出部は、前記制御フローから2変数間の代入依存関係を出力する。データ依存関係導出部は、前記制御フローから2変数間のデータ依存関係を出力する。制御依存関係導出部は、前記制御フローから2変数間の制御依存関係を出力する。変数依存関係導出部は、前記代入依存関係と前記データ依存関係と前記制御依存関係とから複数ステートメント間に渡る変数依存関係を出力する。変数依存関係出力部は、前記変数依存関係をグラフとして表示する。前記の各部における変数は、変数名や変数の実体(記憶領域)だけでなく、ソースコードにおける記述位置によっても区別して扱う。
[実施例1]
以下、図面を用いて本発明の実施形態について説明を行う。
図1は、本発明を実現する基本的な機能構成図であり、本明細書における全ての実施例で共通である。本発明はソフトウェアツールとして実現されている。各機能はソフトウェアとして実装されており、表示画面、主演算装置、主記憶装置(メインメモリ)、ハードディスク等の記憶媒体、キーボードやポインティングデバイス等の入力装置を備えるコンピュータ上で実行される。
ファイル入力部11は、解析対象となるソースコードファイルをユーザが1ないし複数選択できる機能を有しており、ユーザによるファイル指定に従い、ソースコードファイルをコンピュータの記憶媒体から読み込む。構文解析部12は、ユーザが解析実行を指示すると、ファイル入力部11が読み込んだソースコードファイルの構文を解析し、構文木(Abstract Syntax Tree)データを生成する。なお、本明細書の実施例では、C言語で記述されているソースコードを扱う。構文木において、記述位置で区別される各変数には、記述位置のほか、実体(記憶媒体における領域)がIDの形で割り当てられている。実体は、変数の名称や型、スコープ(グローバル、ローカルなど)から解析する。
関数抽出部13は、構文解析部12が生成した構文木から、ソースコード中に記述されている各関数について、名称や記述位置などの属性を抽出し、関数属性データとして出力する。実行開始点選択部14は、関数抽出部13が出力した関数属性データから関数名を表示する。ユーザは実行開始点選択部14の表示から、実行開始点とする関数を1ないし複数選択することができ、実行開始点選択部14は選択された関数を実行開始点データとして出力する。変数依存関係解析部15は、構文解析部12が生成した構文木と、実行開始点選択部14が出力した実行開始点データとから、変数依存関係を解析しデータとして出力する。変数依存関係出力部16は、変数依存関係解析部15が出力する変数依存関係データをグラフとして表示する。ソースコード出力部17は、ファイル入力部11が読み込んだソースコードファイルの内容を表示する。また、変数依存関係出力部16の変数依存関係との連携表示が可能である。連携表示の際には、構文解析部12が生成した構文木データも利用する。
図25は、本発明をシステムとして実現した場合のシステム構成である。
図1で説明したソフトウェアは、ソフトウェア構造可視化プログラム25131として、例えばコンピュータ251上のROM2513に格納されており、CPU2512によって読み出されて実行される。コンピュータ251はソフトウェア構造可視化プログラム25131によって規定された処理、すなわち図1で説明した各部の処理を実行する。解析対象となるソースコードファイルは、コンピュータ251上のハードディスク2514に格納されている。解析実行指示などのユーザ操作は、キーボードなどの入力装置252から行うことができる。
なお、ソースコード出力部17による出力は、例えばディスプレイなどの表示装置253に成されるが、図示しない外部コンピュータへのネットワークを介した出力、CD−ROMなどの外部記憶媒体へのデータファイル形式での書き込みによる出力であってもよい。
図2は、変数依存関係解析部15の詳細を示している。制御フロー導出部21は、実行開始点選択部14の出力する実行開始点データから、構文解析部12の出力する構文木を辿り、制御フローを解析し、データとして出力する。代入依存関係導出部22、データ依存関係導出部23、制御依存関係導出部24は、制御フロー導出部21の出力する制御フローデータから、それぞれ代入依存関係、データ依存関係、制御依存関係を導出し、データとして出力する。
なお、本発明における代入依存関係、データ依存関係、制御依存関係は変数を単位(ノード)としているが、各変数は変数名や実体だけでなく、ソースコードにおける記述位置で区別される。例えばグローバル変数a,b,cが宣言されており、ソースコードファイルsrc.cに記述された関数func内において、(src.cの)3行目にb=aという式、5行目にc=aという式がある場合、3行目のaと5行目のaとは異なるノードとして扱う。本明細書では、3行目のaを「a(L3@func)」のように表記する。変数の記述位置属性は、行だけでなく列も有するが、本明細書では一部の表記において列情報を省略する。また、記述位置属性には関数名の代わりにファイル名やファイルパスを用いても良い。「変数」には周辺回路との入出力を行うマイコンのレジスタにアクセスする変数を含む。変数依存関係には、変数と定数との依存関係も含む。
本明細書にて「代入依存関係」は、2変数間の代入処理による依存関係を意味する。例として、変数a,bに対しa=bというステートメントがあれば、a←b(aはbに依存する。bはaに影響を与える)という依存関係がある。代入依存関係は、構文木から代入文を検索すれば抽出できる。なおソフトウェアの解析では、定義(値決め)される変数はdef、参照される変数はuseと呼ばれる。上記例では、変数aがdef、変数bがuseである。
データ依存関係は、あるdefから、そのdefが含まれるステートメントから遷移可能な各実行パスにおいて処理順序的に最も近い同実体のuseへ到達する依存関係である。このため、構文木の各defについて、そのdefから構文木を制御フローに従って各実行パスを辿り、同実体のdefより前に出現する同実体useを探索することで、データ依存関係を導出することができる。具体的な処理方法の例としては、構文木においてdefの含まれる各ステートメントから、構文木を辿っていく。if文などの分岐文は、各分岐を辿る。上記defと同実体useを発見したら、そのuseまでのデータ依存関係を記憶し、現在辿っている分岐については探索を終了する。
制御依存関係は、if文などの分岐文や、while文などのループ文の条件式にて記述されるuseから、当該分岐文やループ文の内部に記述されるdefへ到達する依存関係である。このため、構文木における分岐文・ループ文の条件式に記述される各useについて、そのuseから構文木を制御フローに従って各実行パスを辿り、当該分岐文・ループ文の内部に記述されるdefを探索することで、制御依存関係を導出することができる。例えばif文には条件式が真のときの節と、偽のときの節とがあるが、それぞれの節に含まれるdefを探索する。このとき、useとdefとは実体が異なっても制御依存関係を生じる。
変数依存関係導出部25は、代入依存関係導出部22、データ依存関係導出部23、制御依存関係24が出力する依存関係をつなぎ合わせ、解析対象としたソースコードの広域に渡る変数依存関係を導出し、データとして出力する。より正確には、実行開始点選択部14にてユーザが選択した実行開始点の関数から始まる実行パス全体に渡る変数依存関係である。出力された変数依存関係データは、変数依存関係出力部16に渡される。
図3は、図1、図2に示した機能による変数依存関係を導出する処理のフローを示している。ステップ31にて、構文解析部12が構文木データを出力する。構文木データは、RAM2511のような記憶媒体に一時的に記憶されてもよいし、ハードディスク2514上にデータファイルとして作成されてもよい。ステップ32にて、ステップ31にて生成された構文木データから関数抽出部13が関数名を抽出し、実行開始点選択部14が関数名を表示してユーザによる実行開始点選択を受け付ける。ステップ33にて、制御フロー導出部21は構文木データとステップ32にて入力された実行開始点データとから、制御フローデータを出力する。制御フローデータに関しても同様に、RAM2511やハードディスク2514など、出力先はいずれであってもよい。ステップ34にて、代入依存関係導出部22はステップ33にて出力された制御フローデータから、代入依存関係を導出し出力する。ステップ35にて、データ依存関係導出部23はステップ33にて出力された制御フローデータから、データ依存関係を導出し出力する。ステップ36にて、制御依存関係導出部24はステップ33にて出力された制御フローデータから、制御依存関係を導出し出力する。ステップ37にて、変数依存関係導出部は、ステップ34にて出力された代入依存関係と、ステップ35にて出力されたデータ依存関係と、ステップ36にて出力された制御依存関係とを連結し、ソースコードの広域に渡る変数依存関係を導出し出力する。データ依存関係、制御依存関係、変数依存関係それぞれに関しても同様に、RAM2511やハードディスク2514など、出力先はいずれであってもよい。
以下では、サンプルソースコードに対する変数依存関係の解析と表示の例を説明する。図4は、解析対象とするソースコードファイルである。ファイル左端の数値は、行番号を示している。図5は、図4のサンプルソースコードを入力として構文解析部12が出力する構文木データをグラフとして示している(ただし変数と関数の宣言は省略している。また、代入文もツリーに分解できるが省略している)。構文木データ51〜54はそれぞれ関数f1,f2,f3,f4に対応しており、構文木の各ノードは1構文要素を意味する。各構文ノードは解析対象とされたソースコード全体で一意のID(構文ID)が割り振られている。図4の各構文ノードの右にカッコ内で記された数値が、構文IDである。構文木の構成を一部説明すると、関数f1(構文ID100)の下位にはif文(101)が配され、当該if文の下位には条件式「x>0」(103)、条件式が真のときの節(104)、条件式が偽のときの節(106)が配されている。なお図5には描画していないが、構文木の各ノードは属性として、記述されているファイル名、記述開始位置(行・列)と記述終了位置(行・列)とを有する。例えばif文(構文ID=101)のノードには、ファイル名「src01.c」、記述開始位置「5行2列目」、記述終了位置「9行2列目」が記録されている。
図6は、制御フロー導出部21が出力する制御フローデータの例を示している。これはユーザが実行開始点選択部14にて、関数f1とf4を選択した場合のデータである。制御フローデータ61にて、1つのデータセット(1行)は1構文要素を意味し、構文ID、ソースコードのファイルパス(図では記載省略)、関数名(または関数ID)と開始行・列で表される記述位置、ステートメント、ステートメントに含まれる変数の実体ID、「通過点」の各項目からなる。変数実体IDは構文解析部12により解析木データにて、変数の宣言を抽出した順番で一意に割り振られている。「通過点」は、当該構文に到達するまでに通過した、関数呼び出し文、関数入り口、分岐文などの構文IDが通過順に並ぶデータである。いくつかの構文要素について通過点データを説明すると、関数f1(構文ID100)と関数f4(400)は実行開始点であるため、通過点は空である。条件式x>0(103)、真文a=1(105)、偽文a=0(107)は関数f1(100)、if文(101)が通過点となっている。またそれぞれ条件文(102)、TRUE節(104)、FALSE節(106)が通過点となっている。条件式y>0(403)、代入文z+=y(405)、y−−(406)は関数f4(400)、while文(401)が通過点となっている。またそれぞれ条件文(402)、ループ内(404)が通過点となっている。このように通過点データは構文木における各ノードの親子関係から導出することができる。
また制御フローデータ61にて、各構文のデータは実行順序に基づく半順序で並べられている。つまり、基本的には実行順序通りであるが、例えばif文の真文と偽文とには順序関係がなく、データ上はどちらかが先に並べられている。2つの構文間における順序関係の有無は、通過点データとステートメント種類から判定することができる。例えば、真文(構文ID105)と偽文(107)は通過点データがif文(101)まで同一だが、その後のTRUE節(104)とFALSE節(106)とで異なるので、if文(101)から並列であることがわかる。代入文(108)と関数呼び出し文(109)は、通過点データが同一であるため、順序関係があるとわかる。
図7は、制御フローデータ61を有向グラフにしたものである。ノードの数値は構文IDである。変数依存関係導出部25は制御フローデータ61から、制御フローグラフ71,72に示された制御フローと同等の情報を得ることができる。例えば、制御フローデータ72にて、代入文(406)から条件文(403)に戻るフローの付与は、通過点データの「ループ内(404)」が付与されているのが代入文(406)までであることから判断することができる。
図8は、代入依存関係導出部22が出力する代入依存関係データを示している。代入依存関係データ81にて、1つのデータセット(1行)は1つの依存関係を意味し、依存先変数(def)と依存元変数(use)のデータとから構成され、各変数のデータは変数名または即値、変数(または即値)の実体ID、関数名と開始行・列とで表される記述位置の各項目からなる。なお、関数f4の5行目に記述されたステートメントz+=yの変数zは、defとuseの2つに分解されている。代入依存関係81は、制御フローデータ61(または構文木データ51〜54)から代入文を抽出して導出できる。
図9は、データ依存関係導出部23が出力するデータ依存関係データを示している。データ依存関係91にて、1つのデータセット(1行)は1つの依存関係を意味し、依存先変数(use)と依存元変数(def)のデータとからなり、各変数のデータ項目は代入依存関係データ81と同じである。
データ依存関係データ91の導出例として、「z(L8@f4)←z(L5@f4)」と「z(L5@f4)←z(L5@f4)」とを説明する。制御フローデータ61にて、構文ID405のdefであるz(L5@f4)を始点として、z(L5@f4)と実体(ID12)が同じuseを探索する。z(L5@f4)はwhile文(構文ID401)のループ内(404)にあるが、このループは構文ID406までとなっている。構文ID406までに該当するuseが発見されないので、2つの実行パス、構文ID403〜406と構文ID407〜とをそれぞれ探索する。それぞれの実行パスで最初に発見される該当useは、構文ID405のz(L5@f4)と構文ID407のz(L8@f4)であるため、z(L5@f4)defを依存元とするデータ依存関係があると判定する。
図10は、制御依存関係導出部24が出力する制御依存関係データを示している。制御依存関係データ101にて、1つのデータセット(1行)は1つの依存関係を意味し、依存先変数(use)と依存元変数(def)のデータとからなり、各変数のデータ項目は代入依存関係データ81と同じである。
制御依存関係データ101の導出例として、「a(L6@f1)←x(L5@f1)」と「a(L8@f1)←x(L5@f1)」とを説明する。制御フローデータ61にて、条件式x>0(構文ID103)で用いられるuseであるx(L5@f1)から、条件式(103)が属するif文(101)内で記述されるdefを探索すると、通過点データにif文(101)が含まれる構文(105,107)のa(L6@f1)とa(L8@f1)が該当するdefとして発見されるので、制御依存関係があると判定する。
図11は、代入依存関係データ81、データ依存関係データ91、制御依存関係データ101を統合したデータを、変数依存関係を有向グラフとして表したものである。データ統合の方法は、def/useは各変数の属性情報とした上で、def/useの区別に依らず依存元と依存先とで1つのテーブルに纏める。変数依存関係出力部16は図11と同等の表示を行う。図4のソースコードに対し、関数f1とf4とを実行開始点に指定した場合、2つの変数依存関係111と112が導出される。変数依存関係111のルートノードはf(L14@f1)、変数依存関係112のルートノードはe(L8@f4)である。変数依存関係112にてz(L5@f4)defとz(L5@f4)useとの間に見られるように、依存関係にはループが存在し得る。このため、変数依存関係を図11のようにグラフ化した場合、ネットワーク形式となる。
図12は、ネットワーク形式の変数依存関係から、あるノード(位置で区別する変数)をルートとしてツリー形式のデータを抽出しグラフ表示するための機能構成図のうち、図1からの差分を示している。
変数抽出部121は、構文解析部12の出力する構文木データのうち、変数宣言部を探索し、宣言されている変数の属性情報を抽出し、変数属性データとして出力する。変数属性データでは変数を実体で区別し記述位置では区別しない。変数選択部122は、変数抽出部121が出力した変数属性データを表示する。ユーザは変数選択部122の表示から、変数依存関係のルートにする変数を1ないし複数選択可能であり、変数選択部122は選択された変数に関する属性データを出力する。変数依存関係抽出部123は、変数依存関係解析部15の出力するネットワーク形式の変数依存関係データと、変数選択部122が出力する変数属性データとから、変数属性データに含まれる変数をルートとするツリー形式の変数依存関係を抽出し、データとして出力する。変数依存関係出力部16は、変数依存関係抽出部123の出力するツリー形式の変数依存関係データを表示する。
図13は、変数依存関係抽出部123によるツリー形式の変数依存関係を抽出する処理のフローを示している。処理フローは処理1から開始する。ステップ131にて、変数依存関係抽出部123は変数依存関係解析部15が出力するネットワーク形式の変数依存関係のルートノードを起点として、変数選択部122が出力する変数属性データに含まれる(記述位置で区別しない)変数と実体が同じ(記述位置で区別する)変数のノードを探索する。また、探索されたノードのコピーを、変数依存関係抽出部123が出力するツリー形式の変数依存関係のルートノードとする。ステップ132にて、変数依存関係抽出部123はステップ131にて設定したツリーのルートノードと、ネットワーク形式の依存関係から探索したノードを引数として、処理2を呼び出す。ここで処理2の仮引数となるノードを「追加点ノード」と「探索点ノード」とする。ステップ133〜135は、探索点ノードの全ての子ノード(探索点ノードが依存しているノード)についてそれぞれ実施し、子ノードが存在しなければ実施しない。ステップ133にて、変数依存関係抽出部123は当該子ノードのコピーを追加点ノードに依存先として接続する。ステップ134にて、当該子ノードのさらに子ノード、つまり対象ノードの孫ノードがツリーに追加済であるか否かを確認する。確認方法は、ツリーをルートノードから辿り、当該孫ノードと(実体だけでなく記述位置を含めて)一致するノードの有無を判定する。一致するノードが存在すれば追加済である。追加済であればステップ135をスキップし、追加済でなければステップ135に進む。ステップ135にて、変数依存関係抽出部123はステップ133にて追加したノードと当該子ノードを引数として、処理2を呼び出す。処理2は再帰構造となっており、全ての処理2が終了すると、処理2から処理1に戻り、処理1を終了する。
図14は、変数依存関係抽出部123が図13の処理フローにより抽出したツリー形式の変数依存関係データを、有向グラフとして表示した例であり、変数依存関係出力部16は図14と同等の表示を行う。ツリー形式の変数依存関係141,142は、図11に記載されたネットワーク形式の変数依存関係111,112から、変数eをルートノードとして抽出したデータであり、依存関係のループが消失している。
なお、ステップ134にてある孫ノードがツリーに追加済である場合に、ツリーにて当該孫ノードと同一のノードを、ステップ133にて追加したノードに依存先として接続すれば、ネットワーク形式での依存関係の抽出を行うことができる。
また、図13の処理フローでは依存関係の子ノードを辿り追加しているが、これは「選択した変数に影響を与える変数の依存関係」である。図13の処理フローとは逆に親ノードを辿ってツリーを抽出し、図14や図15と同様の表示を行うと、「選択した変数が影響を与える依存関係」を抽出し表示を行うことができる。
図14のようにツリー形式で変数依存関係を表示することにより、ユーザはルートノードとなる変数から依存関係を一方向に辿ることができるため、依存関係にループがあるときよりも表示が簡素になり、ユーザは依存関係を追い易く、ソフトウェアの構造を理解しやすくなる。
図24は、図11の変数依存関係111を異なる形式で描画したグラフであり、変数依存関係と関数コールの複合グラフである。変数依存関係出力部16は図24と同等の表示を行う。
関数ノード241〜243とその呼出順序を示す接続(矢印)は、関数コールグラフを示している。関数コールグラフのデータは、変数依存関係導出部25が、制御フロー導出部21による制御フローデータ61から、関数呼び出しの構文を抽出して連結することで作成する。具体的には、f1→f2(構文ID109)、f2→f3(201)を抽出し、連結している。
変数依存関係240の各変数ノードは、関数ノード241〜243のうち、変数ノードが記述されている関数に対応する関数ノード内に配置される。変数依存関係240における各ノードの表記は、変数依存関係111と異なり、記述位置情報から関数名が省略されている。
図24のようなグラフを表示することにより、ユーザは関数呼出順序と変数依存関係、および両者の関係を同時に見ることができるので、ソフトウェアの構造を、変数依存関係のみとはまた異なる視点から理解することができる。
図15は、変数依存関係とソースコードとを連携して表示した例である。変数依存関係表示領域151は、変数依存関係出力部16の一部であり、図14のツリー形式の変数依存関係141を表示している。c(L6@f2)から先は集約され、表示されていない。ユーザがカーソル152を用いて変数依存関係表示領域151のあるノード(記述位置で区別した変数)を選択すると、ソースコード出力部17の一部であるソースコード表示領域153に、選択された変数の記載を含むソースコードが表示される。図15では、選択されたd(L13@f1)が記載されたsrc01.cが表示され、さらに13行目に下線が引かれ、変数dは強調表示されており、選択された変数の記載された箇所がユーザに判別しやすくなっている。
図15の表示を実現する処理を以下に説明する。変数依存関係出力部16は、変数依存関係表示領域151でカーソル152によりある変数が選択されたことを検出すると、選択された変数の属性情報をソースコード出力部17に通知する。ソースコード出力部17は、通知された変数の属性情報に含まれるファイルパスから、ソースコード表示領域153に当該ファイルを表示する。また、通知された変数の属性情報に含まれる変数の記述位置から、下線表示や強調表示を行う。
また、ソースコード表示領域153にてカーソル152により選択された変数を、変数依存関係表示領域151の依存関係から検索し、表示することも可能である。ソースコード出力部17は、ソースコード表示領域153にてカーソル152によりある記述位置が選択された場合、構文解析部12の出力する構文木データから、選択された記述位置と同じ位置にある変数を探索する。該当する変数が存在する場合、当該変数の属性情報を変数依存関係出力部16に通知する。変数依存関係出力部16は、変数依存関係から通知された属性情報(実体ID、記載位置)をキーとして一致する変数のノードを探索する。当該ノードが存在する場合、当該ノードを変数依存関係表示領域151に強調表示する。
図15では、変数依存関係と関数コールグラフの連携表示も行っている。関数コールグラフ表示領域154では、変数依存関係表示領域151にて選択されたd(L13@f1)が記載されている関数f1のノードが下線表示されている。関数コールグラフ表示領域154は、変数依存関係出力部16から選択された変数の属性情報の通知を受け、属性情報に含まれる関数名(または関数ID)と一致する関数ノードを関数コールグラフから検索し、下線表示を行う。
以上のように、複数ステートメント間や関数間など、ソースコードの広域に渡る変数間の依存関係を導出し、変数を単位(ノード)としてソースコード中の記述位置で区別してグラフに表示することにより、ソフトウェアの構成や処理概要に関する情報を変数依存関係の観点からユーザに提供することができる。これにより、設計者や検証者がソフトウェアの構造や処理概要を理解することを容易にすることができる。
図16は、変数選択部122による変数属性情報の表示例である。変数表示領域161において、変数選択領域162に対しユーザがカーソル152により(記述位置で区別しない)変数を選択すれば、選択された変数をルートノードとするツリー形式の変数依存関係が変数依存関係抽出部123により抽出される。
変数表示領域161には、実行パス数表示欄163を設けることができる。実行パス数表示欄163には、変数a〜e、x〜zそれぞれの実行パス数が表示されている。実行パス数は、変数依存関係解析部15が出力するネットワーク形式の変数依存関係から求めることができる。各依存関係のルートノードから辿り、変数の実体ごとに出現有無を調べ、出現する場合は1、出現しない場合は0として、全依存関係にて合計した値がその変数の実行パス数である。ただし依存関係のループにより探索が終了しないことを防ぐため、1回辿ったノードを一時記憶し、当該ノードから先は辿らない。実体が同じ変数は、1つの変数依存関係ツリーに複数回出現しても、実行パス数は1となる。
変数依存関係111,112をルートノードから辿っていくと、変数eは両方の変数依存関係で出現するので実行パス数は2、変数a〜d,fは変数依存関係111のみで、変数x〜zは変数依存関係112のみで出現するので実行パス数はそれぞれ1となる。
図16のような表示により、ユーザは各変数の実行パス数を見て、ツリー形式の変数依存関係のルートノードとする変数を選択することができる。複数の実行パスからアクセスされる変数は、各実行パスの処理タイミングにより、データアクセスの競合、排他制御の失敗など、設計時に想定していない処理間の干渉による不具合をもたらす恐れがある。本実施例では、周期タスクにおいて関数f1( )を実行し、構文ID111にて変数eの値を参照する直前に、割込み処理により関数f4( )が実行され、変数eの値が書き換えられる現象が想定しうる。ユーザは、ソフトウェアの不具合原因となりうる変数を抽出し、不具合事象を発生させ得る処理の実行パスに対応する変数依存関係を表示させ、また変数依存関係から当該実行パスに関係するソースコードを表示させることにより、不具合発生箇所の候補を目視し、実際に不具合がしうるかを確認することができる。
[実施例2]
図17は、変数依存関係抽出部123が図13の処理に加えてその後に実施しうる処理のフローを示している。この処理フローにより、変数選択部122で選択された変数に対し「間接的に」影響を与え得る変数依存関係のツリーが抽出される。ここで「間接的に」とは、選択された変数とは実体が異なり、かつ異なる実行パスに存在する変数が、処理タイミングによっては選択された変数と依存関係が生じる、という意味である。
フローは処理1から開始する。ステップ171は、図13の処理で抽出されたツリー形式の変数依存関係の各ルートノードについて実施する。ステップ171にて、変数依存関係抽出部123はツリー形式の変数依存関係の1つのルートノードを引数として、処理2を呼び出す。ここで処理2の仮引数となるノードを「探索点ノード」とする。ステップ172〜175は、対象ノードの全ての子ノードについてそれぞれ実施し、子ノードが存在しなければ実施しない。ステップ172にて、変数依存関係抽出部123は当該子ノードがuseか否かを判定し、useであればステップ173に、useでなければステップ175に進む。ステップ173にて、変数依存関係抽出部123は当該子ノードと実体が同じでdefの(記述位置で区別する)変数ノードを、変数依存関係解析部15が出力したネットワーク形式の変数依存関係から探索する。ただし、ステップ171で対象としたルートノードと同一のノードが含まれる変数依存関係は探索対象から外す。当該defが存在すればステップ174に、存在しなければステップ175に進む。ステップ174にて、変数依存関係抽出部123はステップ173で探索したdefをルートとするツリー形式の変数依存関係を抽出する。抽出方法は図13の処理フローと同様である。また、抽出したツリー形式の変数依存関係と、既に抽出しているツリー形式の変数依存関係との重複の有無を判定し、重複しているツリーは破棄する。2つのツリー間での重複の判定方法は、1つのツリーのルートノードが、他のツリーのルートノードと同じか下位に含まれていれば前者のツリーが冗長で破棄してよいとする。この判定を、新たに抽出したツリーと、既に抽出した全てのツリー間で行う。ステップ175にて、変数依存関係抽出部123は当該子ノードを引数として処理2を呼び出す。処理2は再帰構造となっており、全ての処理2が終了すると、処理2から処理1に戻り、処理1を終了する。
以下では、サンプルソースコードに対し図17の処理により変数依存関係を抽出し表示する例を説明する。図18は、解析対象とするソースコードファイルである。図19のうち、変数依存関係191と192は、実行開始点を関数f5とf6とした場合に変数依存関係抽出部123が抽出するネットワーク形式の変数依存関係である。これらの変数依存関係に対し、ユーザにより変数選択部122にて変数dがルートノードとして選択されると、変数依存関係抽出部123は図13の処理フローにより、変数依存関係191からツリー形式の変数依存関係193を抽出する。さらに変数依存関係抽出部123は図17の処理フローにより、変数依存関係193に含まれるuseであるc(L6@f5)と実体が同じdefであるc(L4@f6)を変数依存関係192から探索し、c(L4@f6)をルートノードとしてツリー形式の変数依存関係194を抽出する。
関数f5とf6が、割込みやOS(Operating System)のタスクとして並行に実行される場合、各処理の実行タイミングによっては、c(L6@f5)useの値はc(L5@f5)defではなくc(L4@f6)defの値となる。つまりc(L4@f6)はc(L5@f5)に間接的に影響し、さらにd(L6@f5)に影響しうる。
以上のように間接的に影響のある変数依存関係を抽出し表示することにより、ユーザは処理の実行タイミングにより排他制御の失敗やデータ競合により不具合を起こし得る箇所をソースコードから容易に発見できる。また、図15のように変数依存関係とソースコードとを連携表示させることで、実際の不具合の可能性を確認することができる。
[実施例3]
図20は、2つのソースコードの変数依存関係を比較して差分を判定し表示するための機能構成図のうち、図1からの差分を示している。変数依存関係解析部15は、2つのソースコードについて変数依存関係を解析する。変数依存関係比較部201は、変数依存関係解析部15による2つのソースコードの変数依存関係を比較する。変数依存関係データの各ノードには差異有無の項目があり、値として差異あり/差異なし/未確定(初期値)のいずれかを取るとする。変数依存関係比較部201は比較結果から差異有無の項目に値を設定する。変数依存関係出力部16は、変数依存関係比較部201により比較された2つのソースコードの変数依存関係を差分部分に違いを付けて、つまり差異有無の項目が「差異あり」のノードに着色するなどして表示する。
変数依存関係比較部201が比較する変数依存関係のデータには、変数の記述位置が含まれる。しかし2つのソースコードの変数依存関係を比較する際には、変数の記述位置を無視する。一方で、変数依存関係を表示する際には、変数の記述位置を含めて表示する。
図21は、変数依存関係比較部201が実行する、2つのソースコードの変数依存関係について比較する処理フローを示している。ここでは簡単のため、各ソースコードにおける変数依存関係のルートノードは1つとする。フローは処理1から開始する。ステップ211にて、変数依存関係比較部201は2つのソースコードの変数依存関係それぞれのルートノードを抽出する。1つのルートノードを「ノード1」、もう1つのルートノードを「ノード2」とする。ステップ212にて、変数依存関係比較部201はノード1とノード2の実体を比較する。実体が同じであればステップ213に、異なればステップ215に進む。ステップ213では、ノード1とノード2を引数として処理2を呼び出す。ステップ214では、ノード2の下位ノードについて、差分有無の項目が「未確定」のノードを、「差分あり」とし、処理1を終了する。ステップ215では、2つの変数依存関係の全ノードに差異があると判定し、処理1を終了する。
次に処理2を説明する。処理2の仮引数もノード1、ノード2とする。ステップ216〜220は、ノード1の全ての子ノードについてそれぞれ実施し、子ノードが存在しなければ実施しない。ステップ216にて、変数依存関係比較部201はノード2の下位ノードから、ノード1の当該子ノードと、実体およびdef/useの種類が同じで、かつ差分有無の項目が「未確定」の変数ノードを探索する。ステップ217では、ステップ216で該当するノードが存在すればステップ218に、存在しなければステップ219に進む。ステップ218にて、変数依存関係比較部201は変数依存関係の差分を判定する。ノード1′に現在処理対象としているノード1の子ノードを、ノード2′にステップ215で探索したノードを指定し、ノード1′とノード2′については差異なしと判定する。ノード2とノード2′の間にノードがある場合には、それらのノードには差異があると判定する。判定後はステップ220に進む。ステップ219にて、変数依存関係比較部201は現在処理対象としているノード1の子ノードに差異があると判定する。また、ノード1′に当該子ノードを、ノード2′にノード2を指定し、ステップ220に進む。ステップ220では、ノード1′とノード2′を引数として処理2を呼び出す。処理2は再帰構造となっており、全ての処理2が終了すると、処理2から処理1に戻り、処理1を終了する。
図22は、2つのサンプルソースコードに対し、変数依存関係比較部201が図21の処理フローに沿って2つの変数依存関係の差分を解析し、変数依存関係出力部16が表示した例である。ソースコード221とソースコード222は関数f7を記述しており、それぞれ第1版、第2版である。変数依存関係223はソースコード221について、変数依存関係224はソースコード222について、実行開始点をf7として導出したデータの有向グラフである。ソースコード221からソースコード222へは、5行目がc=bからc+=bに変更されている。変数依存関係比較部201は、変数依存関係224のc(L5@f7)useについて差異ありと判定し、それ以外の変数依存関係224のノードと、変数依存関係223の全ノードについては、差異なしと判定する。変数依存関係出力部16は、変数依存関係224のc(L5@f7)useには他ノードとは異なる色を付けて表示し、ユーザに対し変数依存関係の差分を視覚的に区別しやすく表示する。
図23は、図22とは異なる2つのサンプルソースコードに対し、図22と同様に解析と表示を行った例である。ソースコード231とソースコード232は関数f8を記述しており、それぞれ第1版、第2版である。変数依存関係233はソースコード231について、変数依存関係234はソースコード232について、実行開始点をf8として導出したデータの有向グラフである。ソースコード232はソースコード231に対し、6行目に空行が挿入されている。この変更により、変数依存関係233のc(L6@f8)、d(L6@f8)が、変数依存関係234ではc(L7@f8)、d(L7@f8)と記載位置情報が変化している。しかし、変数依存関係比較部201は2つの変数依存関係233、234の全ノードについて差異なしと判定する。実際、ソースコード231とソースコード232では処理内容に差異が無く、このことは変数依存関係233、234にて変数の位置情報以外に差異がないことから、ユーザにとって視覚的に理解しやすくなっている。
以上のように、2つのソースコードから変数依存関係を抽出し、変数の位置情報を無視した上で差分を比較し表示することにより、ソフトウェアの構成や処理概要の差異を変数依存関係の観点からユーザに提供することができる。これにより、設計者や検証者がソフトウェアの構造や処理概要を理解することを容易にすることができる。
[実施例4]
本実施例では、本発明の変数依存関係解析結果を用いて、ソースコードのスライシングおよびモデル検査を行う。変数依存関係の解析方法については、実施例1から3と共通するため説明を省略する。スライシングとは、ある変数に影響を与えるソースコードの記載のみを抽出し、当該変数に影響を与えないソースコードの記載を削除する処理を意味する。モデル検査とは、検証の対象となるソフトウェアが実際に動作する際(ソフトウェアが機器を制御する制御ソフトウェアの場合は、ソフトウェアが動作するハードウェアや制御対象機器との複合動作を想定)の取り得る状態を網羅的に探索し、不具合を発見することを意味する。
スライシングでは、抽出の始点となるステートメントと、終点となるステートメントおよびそのステートメント内の変数を、「スライシング基準」として指定する必要がある。
本実施例ではスライシング基準として、変数選択部122にてユーザにより選択された変数とその変数が含まれるステートメントを終点、変数依存関係出力部16によって表示された変数依存関係のうち、末端またはユーザによって選択された変数の含まれるステートメントを始点に設定し、スライシングを行う。これにより、ユーザが検証したい変数(以下では「検証点」と呼ぶ)を変数選択部122にて指定することで、モデル検査の対象となるソースコードを検証点に関連する部分にのみ絞ることができ、モデル検査の際の状態爆発を回避できる。またユーザは、終点のステートメントに依存関係のあるステートメントを始点に選択することができるため、確実に検証点に関連するコードを抽出することができる。そのほか、変数依存関係出力部16の表示にて始点に選択した変数が、モデル検査の際、ソフトウェアと外部環境(ハードウェアや制御対象機器など)との境界になるため、ユーザは外部環境モデルとのインタフェースが用意に判別でき、外部環境についてモデルの作成や既存モデルからの選択が容易になる。
図26は、サンプルコードに対して本発明のスライシングを行った例である。ソースコード出力部17はソースコード261を表示しているが、この段階では変数選択部122にて変数は選択されておらず、スライシングも行われていない。
次に変数選択部122にてユーザにより変数cが選択されると、変数依存関係出力部16に変数依存関係264が表示され、ソースコード出力部17にはソースコード262が表示される。ソースコード262では、5行目のy=x、7行目のz=yにハッチングが掛けられている。これは変数x,y,zが変数依存関係264に含まれないため、スライシングにて除外されるコードであることを示している。この段階でユーザがソースコード出力部17にファイル出力を指示すると、5行目と7行目が削除されたソースコードがファイル出力される。
ソースコード262の表示や、スライシングされたソースコードのファイル出力においては、構文解析部12による構文木データが利用される。ソースコード出力部17は、構文木データの各構文ノードについて、その構文に含まれる変数が、変数依存関係264に含まれれば当該構文はスライシングで残り、含まれなければ除外されると判定する。
次に変数依存関係出力部16にて、ユーザがb(L4@f9)に対し、スライシングにて除外する指定を行う。すると変数依存関係出力部16の表示にて、変数依存関係265のように、b(L4@f9)とその下位のa(L4@f9)は除外された表示となる。また、ソースコード出力部17において、ソースコード263が表示される。ソースコード263では、さらに4行目のb=aが削除された表示となっている。これは、ユーザによるb(L4@f9)の除外指定の影響を示すものである。この場合、b(L9@f9)がスライシングの始点の変数として選択されたことになる。この段階でユーザがソースコード出力部17にファイル出力を指示すると、4,5,7行目が削除されたソースコードがファイル出力される。
以上のようにして抽出されたソースコードに対し、ソースコード出力部17は、必要であれば構文木データと規定の変換ルールを用いてモデル検査用の言語に変換して、モデル検査器に入力することで、検証点に関係するソースコードが動作するときに取り得る状態が網羅的に探索される。モデル検査器に対し、ユーザは検査対象のソースコードが取ってはいけない状態をプロパティやアサーションとして指定し、必要であれば外部環境モデルを付与することで、不具合を発見することができる。
11 ファイル入力部
12 構文解析部
13 関数抽出部
14 実行開始点選択部
15 変数依存関係解析部
16 変数依存関係出力部
17 ソースコード出力部
123 変数依存関係抽出部
201 変数依存関係比較部

Claims (12)

  1. コンピュータに、ソフトウェアのソースコードを入力させ、前記ソースコードを解析させ、解析結果を出力させるためのソフトウェアの構造可視化プログラムにおいて、
    前記プログラムは、前記コンピュータに前記ソースコードの構文解析を実行させるための構文解析部と、
    前記コンピュータに前記構文解析部による構文解析結果から、前記ソースコード中の記述位置毎に区別された複数の変数について、変数間の依存関係を導出させるための変数依存関係解析部と、
    前記変数依存関係解析部により導出した変数依存関係を、前記複数の変数の前記ソースコード中の記述位置情報と共に、前記コンピュータに表示装置への表示、または前記コンピュータ外部への出力を実行させるための変数依存関係出力部と、を有することを特徴とするソフトウェアの構造可視化プログラム。
  2. 前記コンピュータに入力された前記ソースコードを表示装置に表示させるためのソースコード出力部を有し、
    前記ソースコード出力部は、前記コンピュータに、前記変数依存関係出力部によって表示または出力された変数依存関係中のユーザが指定した変数に対応する、前記ソースコード中の記述を強調表示させることを特徴とする、請求項1記載のソフトウェアの構造可視化プログラム。
  3. 前記構文解析部による構文解析結果に基づいて、前記コンピュータに前記ソースコードに含まれる変数を抽出させる変数抽出部と、
    前記コンピュータに前記変数抽出部によって抽出された変数についての属性を表示させ、ユーザの変数選択を受け付けさせる変数表示部と、
    前記コンピュータに前記変数表示部にてユーザにより選択された変数をルートとする変数依存関係を、前記変数依存関係解析部によって導出された変数依存関係から抽出させる変数依存関係抽出部と、を有し、
    前記変数依存関係出力部は、前記変数依存関係抽出部によって抽出された変数依存関係を前記コンピュータに表示または出力させることを特徴とする、請求項1記載のソフトウェアの構造可視化プログラム。
  4. 前記変数依存関係抽出部は、前記変数表示部にてユーザにより選択された変数をルートとして抽出した変数依存関係に含まれ参照される変数と実体が同じで定義される変数をルートとする変数依存関係を、前記変数依存関係解析部によって導出された変数依存関係から前記コンピュータに抽出させることを特徴とする、
    請求項3記載のソフトウェアの構造可視化プログラム。
  5. 請求項3において、
    前記変数表示部は、前記コンピュータに各変数の実行パス数を表示または出力させることを特徴とする、請求項3記載のソフトウェアの構造可視化プログラム。
  6. 前記変数依存関係解析部は、ユーザにより入力された実行開始点から前記構文解析部による構文木を辿るように前記コンピュータに解析させることを特徴とする、請求項1記載のソフトウェアの構造可視化プログラム。
  7. 変数依存関係出力部は、変数依存関係をツリー形式で前記コンピュータに表示または出力させることを特徴とする、請求項3記載のソフトウェアの構造可視化プログラム。
  8. 前記変数依存関係抽出部は、ユーザに選択された変数と実体が異なり、かつ異なる実行パスに存在する変数が、特定の処理タイミングにおいてのみ前記ユーザに選択された変数へ影響を与える変数依存関係を前記コンピュータに抽出させることを特徴とする、請求項3記載の構造可視化プログラム。
  9. 前記変数依存関係解析部による複数のソースコードそれぞれの変数依存関係を解析させた結果を前記コンピュータに比較させ、差分を判定させる変数依存関係比較部を有することを特徴とする請求項1記載の構造可視化プログラム。
  10. 前記変数依存関係解析部による解析結果に基づき、前記ソースコード中の前記実行開始点に影響を与えない箇所を前記コンピュータにスライシングさせることを特徴とする請求項6記載の構造可視化プログラム。
  11. スライシングされた前記ソースコードのモデル検証を行うことを特徴とする請求項10記載の構造可視化プログラム。
  12. 請求項1から11いずれか一項に記載の構造可視化プログラムを格納する記憶媒体を備え、前記構造可視化プログラムを実行するコンピュータと、ユーザからの入力を受け付ける入力装置と、前記コンピュータからの出力を表示する表示装置と、を備えた構造可視化システム。
JP2012016046A 2012-01-30 2012-01-30 ソフトウェアの構造可視化プログラムおよびシステム Expired - Fee Related JP5775829B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2012016046A JP5775829B2 (ja) 2012-01-30 2012-01-30 ソフトウェアの構造可視化プログラムおよびシステム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012016046A JP5775829B2 (ja) 2012-01-30 2012-01-30 ソフトウェアの構造可視化プログラムおよびシステム

Publications (2)

Publication Number Publication Date
JP2013156786A true JP2013156786A (ja) 2013-08-15
JP5775829B2 JP5775829B2 (ja) 2015-09-09

Family

ID=49051914

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012016046A Expired - Fee Related JP5775829B2 (ja) 2012-01-30 2012-01-30 ソフトウェアの構造可視化プログラムおよびシステム

Country Status (1)

Country Link
JP (1) JP5775829B2 (ja)

Cited By (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101602658B1 (ko) * 2014-04-15 2016-03-21 주식회사 셈웨어 알고리즘 시뮬레이션 시스템을 위한 다이어그램 자동 정렬 모듈
JP2016076080A (ja) * 2014-10-06 2016-05-12 三菱電機株式会社 ソースコード解析装置、ソースコード解析方法、及びプログラム
JP2016091138A (ja) * 2014-10-31 2016-05-23 日立オートモティブシステムズ株式会社 ソースコード検証システム
JP2016177652A (ja) * 2015-03-20 2016-10-06 富士通株式会社 コンパイラプログラム、システム、方法、及び装置
JP2017004282A (ja) * 2015-06-11 2017-01-05 日本電気通信システム株式会社 プログラム表示装置、プログラム表示システム、プログラム表示方法、及びプログラム表示プログラム
KR101706098B1 (ko) * 2015-09-25 2017-02-23 (주)씽크포비엘 소프트웨어 분석 방법 및 장치
WO2017052318A1 (ko) * 2015-09-25 2017-03-30 (주)씽크포비엘 소프트웨어 분석 방법 및 장치
KR20180089096A (ko) * 2017-01-31 2018-08-08 계명대학교 산학협력단 지능형 컴퓨터 프로그래밍 언어 학습기 및 그것을 이용한 학습 방법
JP2018147106A (ja) * 2017-03-02 2018-09-20 富士通株式会社 プログラム分析装置、プログラム分析方法及びプログラム分析プログラム
KR20190004198A (ko) * 2017-07-03 2019-01-11 주식회사 우리은행 플로우 다이어그램 생성 방법 및 이를 실행하는 장치
JP2019061587A (ja) * 2017-09-27 2019-04-18 富士通株式会社 解析方法、解析装置及び解析プログラム
KR102037796B1 (ko) * 2019-03-28 2019-11-26 (주)위세아이텍 피처 엔지니어링에 의한 결과 데이터 대응 관계의 시각화 장치 및 방법
WO2020070817A1 (ja) 2018-10-03 2020-04-09 三菱電機株式会社 ソフトウェア解析装置、ソフトウェア解析方法およびソフトウェア解析プログラム
JP2020522790A (ja) * 2017-05-22 2020-07-30 アビニシオ テクノロジー エルエルシー 異種にプログラムされたデータ処理システムの自動依存性アナライザ
JP2020149302A (ja) * 2019-03-13 2020-09-17 オムロン株式会社 解析装置、解析方法、及び解析プログラム
WO2021020781A1 (ko) * 2019-07-26 2021-02-04 서울시립대학교 산학협력단 코딩 교육 방법 및 코딩 교육 로봇
CN112965838A (zh) * 2021-03-16 2021-06-15 支付宝(杭州)信息技术有限公司 并发程序的数据竞争检查方法及装置
US11119886B2 (en) 2016-02-17 2021-09-14 Mitsubishi Electric Corporation Software analysis apparatus, software analysis method, and computer readable medium
CN113448553A (zh) * 2021-06-23 2021-09-28 南京大学 一种c语言项目依赖信息管理和可视化的方法及系统

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0520380A (ja) * 1991-07-10 1993-01-29 Matsushita Electric Ind Co Ltd 機能レベルシミユレーシヨン装置
JPH09274562A (ja) * 1996-02-08 1997-10-21 Fujitsu Ltd プログラム解析装置およびプログラム解析表示装置
JPH10214180A (ja) * 1997-01-31 1998-08-11 Meidensha Corp ソフトウェアの開発支援方法
JP2002082802A (ja) * 2000-06-27 2002-03-22 Ns Solutions Corp 影響解析装置および方法、記録媒体、プログラム
JP2005018114A (ja) * 2003-06-23 2005-01-20 Internatl Business Mach Corp <Ibm> プログラム保守支援装置、プログラム保守支援方法、およびプログラム

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0520380A (ja) * 1991-07-10 1993-01-29 Matsushita Electric Ind Co Ltd 機能レベルシミユレーシヨン装置
JPH09274562A (ja) * 1996-02-08 1997-10-21 Fujitsu Ltd プログラム解析装置およびプログラム解析表示装置
JPH10214180A (ja) * 1997-01-31 1998-08-11 Meidensha Corp ソフトウェアの開発支援方法
JP2002082802A (ja) * 2000-06-27 2002-03-22 Ns Solutions Corp 影響解析装置および方法、記録媒体、プログラム
JP2005018114A (ja) * 2003-06-23 2005-01-20 Internatl Business Mach Corp <Ibm> プログラム保守支援装置、プログラム保守支援方法、およびプログラム

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
JPN6015022667; 四野見秀明、外3名: '構造化分析/設計の方法論に基づいたプログラム理解支援ツール' 電子情報通信学会技術研究報告 Vol.92 No.251, 19920929, pp.1-9, 社団法人電子情報通信学会 *

Cited By (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101602658B1 (ko) * 2014-04-15 2016-03-21 주식회사 셈웨어 알고리즘 시뮬레이션 시스템을 위한 다이어그램 자동 정렬 모듈
JP2016076080A (ja) * 2014-10-06 2016-05-12 三菱電機株式会社 ソースコード解析装置、ソースコード解析方法、及びプログラム
JP2016091138A (ja) * 2014-10-31 2016-05-23 日立オートモティブシステムズ株式会社 ソースコード検証システム
JP2016177652A (ja) * 2015-03-20 2016-10-06 富士通株式会社 コンパイラプログラム、システム、方法、及び装置
JP2017004282A (ja) * 2015-06-11 2017-01-05 日本電気通信システム株式会社 プログラム表示装置、プログラム表示システム、プログラム表示方法、及びプログラム表示プログラム
KR101706098B1 (ko) * 2015-09-25 2017-02-23 (주)씽크포비엘 소프트웨어 분석 방법 및 장치
WO2017052318A1 (ko) * 2015-09-25 2017-03-30 (주)씽크포비엘 소프트웨어 분석 방법 및 장치
US11119886B2 (en) 2016-02-17 2021-09-14 Mitsubishi Electric Corporation Software analysis apparatus, software analysis method, and computer readable medium
KR20180089096A (ko) * 2017-01-31 2018-08-08 계명대학교 산학협력단 지능형 컴퓨터 프로그래밍 언어 학습기 및 그것을 이용한 학습 방법
KR101963016B1 (ko) * 2017-01-31 2019-03-27 계명대학교 산학협력단 지능형 컴퓨터 프로그래밍 언어 학습기 및 그것을 이용한 학습 방법
JP2018147106A (ja) * 2017-03-02 2018-09-20 富士通株式会社 プログラム分析装置、プログラム分析方法及びプログラム分析プログラム
JP7360328B2 (ja) 2017-05-22 2023-10-12 アビニシオ テクノロジー エルエルシー 異種にプログラムされたデータ処理システムの自動依存性アナライザ
JP2020522790A (ja) * 2017-05-22 2020-07-30 アビニシオ テクノロジー エルエルシー 異種にプログラムされたデータ処理システムの自動依存性アナライザ
KR20190004198A (ko) * 2017-07-03 2019-01-11 주식회사 우리은행 플로우 다이어그램 생성 방법 및 이를 실행하는 장치
KR101974804B1 (ko) * 2017-07-03 2019-05-03 주식회사 우리은행 플로우 다이어그램 생성 방법 및 이를 실행하는 장치
JP2019061587A (ja) * 2017-09-27 2019-04-18 富士通株式会社 解析方法、解析装置及び解析プログラム
WO2020070817A1 (ja) 2018-10-03 2020-04-09 三菱電機株式会社 ソフトウェア解析装置、ソフトウェア解析方法およびソフトウェア解析プログラム
US11630662B2 (en) 2018-10-03 2023-04-18 Mitsubishi Electric Corporation Software analysis device, software analysis method, and software analysis program
CN112585547A (zh) * 2019-03-13 2021-03-30 欧姆龙株式会社 分析装置、分析方法以及分析程序
WO2020184129A1 (ja) * 2019-03-13 2020-09-17 オムロン株式会社 解析装置、解析方法、及び解析プログラム
US20210397148A1 (en) * 2019-03-13 2021-12-23 Omron Corporation Analysis device, analysis method, and recording medium
JP7031627B2 (ja) 2019-03-13 2022-03-08 オムロン株式会社 解析装置、解析方法、及び解析プログラム
JP2020149302A (ja) * 2019-03-13 2020-09-17 オムロン株式会社 解析装置、解析方法、及び解析プログラム
US11656592B2 (en) 2019-03-13 2023-05-23 Omron Corporation Analysis device, analysis method, and recording medium
CN112585547B (zh) * 2019-03-13 2024-02-06 欧姆龙株式会社 分析装置、分析方法以及记录介质
KR102037796B1 (ko) * 2019-03-28 2019-11-26 (주)위세아이텍 피처 엔지니어링에 의한 결과 데이터 대응 관계의 시각화 장치 및 방법
WO2021020781A1 (ko) * 2019-07-26 2021-02-04 서울시립대학교 산학협력단 코딩 교육 방법 및 코딩 교육 로봇
CN112965838A (zh) * 2021-03-16 2021-06-15 支付宝(杭州)信息技术有限公司 并发程序的数据竞争检查方法及装置
CN112965838B (zh) * 2021-03-16 2024-04-19 支付宝(杭州)信息技术有限公司 并发程序的数据竞争检查方法及装置
CN113448553A (zh) * 2021-06-23 2021-09-28 南京大学 一种c语言项目依赖信息管理和可视化的方法及系统
CN113448553B (zh) * 2021-06-23 2023-11-03 南京大学 一种c语言项目依赖信息管理和可视化的方法及系统

Also Published As

Publication number Publication date
JP5775829B2 (ja) 2015-09-09

Similar Documents

Publication Publication Date Title
JP5775829B2 (ja) ソフトウェアの構造可視化プログラムおよびシステム
CN107704265B (zh) 一种面向业务流可配置的规则生成方法
CN107608677B (zh) 一种编译处理方法、装置及电子设备
US7996819B2 (en) Generating functional test scripts
US9208057B2 (en) Efficient model checking technique for finding software defects
JP5297802B2 (ja) グラフ型計算のためのメタデータ管理
US9418230B2 (en) Automated tools for building secure software programs
US10423518B2 (en) Systems and methods for analyzing violations of coding rules
JP2020522790A (ja) 異種にプログラムされたデータ処理システムの自動依存性アナライザ
JP2018501538A (ja) 影響分析
US20120192151A1 (en) Software development tool
US8898649B2 (en) Application program analysis method, analysis system and recording medium for identifying a contributing factor for an invalid operation of an application program
Angerer et al. Configuration-aware change impact analysis (t)
CN111831272A (zh) 一种采用图形化的开发的方法、介质、设备和装置
Angerer et al. Change impact analysis for maintenance and evolution of variable software systems
CN103049504A (zh) 基于源代码查询的半自动插桩方法
Negrini et al. Twinning automata and regular expressions for string static analysis
JP6002507B2 (ja) ソフトウェア検証用プログラムおよびソフトウェア検証システム
Luckow et al. Symbolic pathfinder v7
Kaur et al. Clone detection in software source code using operational similarity of statements
Anderson et al. Supporting analysis of SQL queries in PHP AiR
JP2016057715A (ja) 図形式プログラム解析装置
JP2006277282A (ja) モデル評価解析システムおよびモデル評価解析プログラム
Grigorev et al. String-embedded language support in integrated development environment
JP2015133031A (ja) プログラム分析装置及びプログラム分析方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140820

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140820

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150521

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20150609

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150706

R150 Certificate of patent or registration of utility model

Ref document number: 5775829

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees