JP3305949B2 - プログラム解析装置 - Google Patents
プログラム解析装置Info
- Publication number
- JP3305949B2 JP3305949B2 JP09974596A JP9974596A JP3305949B2 JP 3305949 B2 JP3305949 B2 JP 3305949B2 JP 09974596 A JP09974596 A JP 09974596A JP 9974596 A JP9974596 A JP 9974596A JP 3305949 B2 JP3305949 B2 JP 3305949B2
- Authority
- JP
- Japan
- Prior art keywords
- program
- domain
- variable
- variables
- information
- 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.)
- Expired - Fee Related
Links
- 238000012545 processing Methods 0.000 claims description 126
- 238000000034 method Methods 0.000 claims description 75
- 230000014509 gene expression Effects 0.000 claims description 67
- 238000004458 analytical method Methods 0.000 claims description 45
- 238000006467 substitution reaction Methods 0.000 claims description 43
- 238000000605 extraction Methods 0.000 claims description 15
- 238000006243 chemical reaction Methods 0.000 claims description 12
- 238000010586 diagram Methods 0.000 description 45
- 229910004444 SUB1 Inorganic materials 0.000 description 6
- FFBHFFJDDLITSX-UHFFFAOYSA-N benzyl N-[2-hydroxy-4-(3-oxomorpholin-4-yl)phenyl]carbamate Chemical compound OC1=C(NC(=O)OCC2=CC=CC=C2)C=CC(=C1)N1CCOCC1=O FFBHFFJDDLITSX-UHFFFAOYSA-N 0.000 description 5
- HEFNNWSXXWATRW-UHFFFAOYSA-N Ibuprofen Chemical compound CC(C)CC1=CC=C(C(C)C(O)=O)C=C1 HEFNNWSXXWATRW-UHFFFAOYSA-N 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 102100031584 Cell division cycle-associated 7-like protein Human genes 0.000 description 1
- 101000777638 Homo sapiens Cell division cycle-associated 7-like protein Proteins 0.000 description 1
- 229910017435 S2 In Inorganic materials 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 239000002131 composite material Substances 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Description
としてのデータ型定義を,プログラムを解析して抽出す
るプログラム解析装置に関するものである。特に,デー
タ宣言部の記述から得られる型情報だけではなく,デー
タ間の関連に着目してデータを分類し,特定の制約条件
を持ったドメイン定義を抽出することを可能にしたもの
である。
るものであって,例えば変数「受注日付」と「納品日
付」とが,どちらも年,月,日で表現される場合,「受
注日付」と「納品日付」とは「年月日」を表現する変数
であり,このような変数の「表現される対象」をドメイ
ンという。
メインの「表現される対象」を,制約条件(値域)で定
義付けたものをいう。例えば,ドメイン「年月日」は,
さらに細かく分けるとドメイン「年」,「月」,「日」
で構成されており,「日」は「1以上31以下の整数」
というドメイン定義で表現される。
的に抽出することができれば,プログラムの理解に極め
て有用であり,デバッグ,保守,改良等に役立つ。ま
た,複数のプログラムにわたるドメイン間の関係情報お
よび変数の代入関係の情報を視覚的にわかりやすく表示
することにより,プログラムの理解をさらに容易にする
支援が可能になる。
には,変数の宣言時の情報や変数が保持する値を,具体
的に追うことが必要不可欠となる。従来のプログラム解
析では,変数名や型,大きさ等,変数宣言時の静的な情
報のみが,変数毎にプログラム単位で解析されるだけで
あり,プログラムの保守や改良を行うための貢献は少な
かった。
ある。従来のプログラム解析では,データ個々の宣言文
からデータ型およびデータの大きさを分析するにとどま
っており,具体的には,例えば,図44(A)に示すC
OBOLプログラムのデータ宣言部のデータ個々の宣言
文から,データ型解析結果として,図44(B)に示す
ような各データの型と大きさについての情報を得るだけ
であった。
うな従来のデータ型解析結果から,例えば「受注月」,
「受注日」,「納品月」,「納品日」は,データ型と大
きさが同じであることがわかる。しかし,これらが各々
どのような制約条件(値域)を持つかというようなこと
はわからない。
タのとる値の範囲が「1以上31以下」という共通の制
約条件を持つ。これらのデータは,「日:範囲(1以上
31以下)」という同一ドメインのデータである。一
方,「受注日」と「受注月」とは,データ型と大きさは
同じであるが,制約条件は,それぞれ「1以上31以下
の整数」,「1以上12以下の整数」と異なるため,ド
メインが異なる。
から変数をグループ分けできなかった。また,変数個々
の制約条件を抽出できず,さらには,ドメインを特徴づ
ける制約条件の抽出を行うことができなかった。
ラム中の変数に対して与えられた制約条件を自動抽出す
ること,ドメインの観点から変数をグループ分けするこ
と,制約条件の抽出結果と変数の分類結果とからドメイ
ン定義情報を得ることにより,プログラムの解読に有用
な情報を得る手段を提供することを目的とする。
たドメインの分類情報から,複数のプログラムにわたる
ドメイン間の関係情報を解析し,それをわかりやすく表
示する手段を提供することにより,プログラムの理解を
一層容易にする手段を提供することを目的とする。
め,本発明は,図1および図2に示すような手段を用い
る。
の構成例を示す図であり,1はプログラム解析装置,1
1はプログラムの構文情報・制御フロー情報を含む解析
対象プログラム情報,12はエラー処理判定支援情報,
13は制約条件抽出手段,131はエラー判定条件抽出
手段,132は条件式/制約条件変換手段,14は抽出
された制約条件を記憶する制約条件表(テーブル),1
5は変数分類手段,16は変数の分類情報を記憶する変
数分類表(テーブル),17はドメイン定義抽出手段,
18はドメイン定義情報,2はプログラム解析表示装置
を表す。
析するための情報として,解析対象プログラム情報11
とエラー処理判定支援情報12とを入力する。解析対象
プログラム情報11としては,プログラムの構文を解析
して得られる構文情報と,プログラムの実行順序に従っ
た文のつながりを示す制御フロー情報を利用する。これ
らは変数がどの文で利用されているか,それがどのよう
な条件下で実行されるかがわかるものである。これらの
情報は既存技術で得られるものであるので,詳細な説明
は省略する。エラー処理判定支援情報12は,エラー処
理手続き名やエラー処理の行番号などの情報であり,プ
ログラム作成者または解読者等がプログラム設計情報や
ソースプログラムをもとに作成する。
抽出手段131および条件式/制約条件変換手段132
を持つ。エラー判定条件抽出手段131は,解析対象プ
ログラム情報11およびエラー処理判定支援情報12を
もとにプログラムのエラー処理部分を認識し,エラー処
理を行う条件を抽出する手段である。条件式/制約条件
変換手段132は,エラー判定条件抽出手段131の出
力を分析して条件式を制約条件に変換することにより,
特定の変数の制約条件を得る手段である。抽出した制約
条件は,制約条件表14として出力し,必要であれば外
部記憶装置,プリンタまたはディスプレイ等にも出力す
る。
情報11をもとに,プログラムのある実行文中で複数の
変数が用いられている場合に,それらの変数の関係をそ
の実行文の種類またはオペランドの種類によって分析
し,変数の値が同じドメインを表現するかどうかによっ
てグループに分け,プログラム中の変数を同じドメイン
を表現するかどうかによって分類した情報を出力する手
段である。変数の分類結果は,変数分類表16として出
力し,必要であれば外部記憶装置,プリンタまたはディ
スプレイ等にも出力する。
出手段13から得た変数の制約条件を記憶する制約条件
表14と,変数分類手段15から得た複数の変数が共通
に表現するドメインに関する分類情報を記憶する変数分
類表16とから,同じ対象を表現するドメインに関する
定義情報を抽出し,ドメイン定義情報18として出力す
る手段である。
段13により,プログラムのエラー処理部分を認識し,
エラー処理を行う条件を抽出し,エラー判定条件式を分
析して特定の変数の制約条件を得て,条件式から制約条
件への変換を行い,また,変数分類手段15により,プ
ログラムのある実行文中で複数の変数が用いられている
場合に,それらの変数の関係をその実行文の種類または
オペランドの種類によって分析し,変数の値が同じドメ
インを表現するかどうかによってグループに分け,変数
分類手段15から得た複数の変数が共通に表現するドメ
インに関する分類情報と制約条件抽出手段13から得た
変数の制約条件とから,同じ対象を表現するドメインに
関する定義情報を抽出してプログラムの解析結果として
ドメイン定義情報18を出力する。
ドメイン定義情報18を自動抽出することにより,同様
な対象を表す変数群を容易に把握できるようになる。図
2は,本発明に係るプログラム解析表示装置の構成例を
示す図であり,図1と同符号のものは図1に示すものに
対応し,21はドメイン解析手段,22は解析結果を表
示する表示処理手段,23はドメイン要素の関係出力手
段,24はジョブ制御言語(JCL),25はプログラ
ム間の呼び出し関係を示すCALL情報,26はユーザ
が入力し指定したユーザ入力情報,27は複数のプログ
ラムから得たドメインを分類した結果のドメイン間の関
係を示すドメイン関係情報,28はディスプレイを表
す。
プログラム解析装置1が解析対象プログラム情報11か
ら各プログラム毎に得たドメインについて,ドメイン解
析手段21,表示処理手段22,ドメイン要素の関係出
力手段23によって,ドメイン間の関係を解析して表示
する装置である。
ログラムや予め用意されたユーティリティプログラム等
を,どのような手順で実行するかを記述したものであ
る。ドメイン解析手段21は,各プログラム毎のドメイ
ンに分類された変数情報18’(またはドメイン定義情
報18)と,ジョブ制御言語24とを入力し,複数のプ
ログラムから得られたプログラム毎のドメイン間の関係
を解析する。解析した結果をドメイン関係情報27とし
て出力する。
ログラムから得られたプログラム毎のドメイン間の関係
を解析するために,各プログラム中に書かれているCA
LL文による呼び出し関係の情報(CALL情報25)
を用いることもできる。
を行う場合,例えばCOBOLプログラム等ではUSI
NG指定を明記することにより,呼ぶ側のプログラム中
の変数の値を,呼ばれる側のプログラム中の変数に引き
渡すことができる。呼ぶ側のUSING指定中に書かれ
た変数と,呼ばれる側のUSING指定中に書かれた変
数とは,USING指定中に書かれた順に対応付けられ
て実行される。このことは即ち,対応付けられた変数同
士は実は同等なものであることを意味する。これから,
双方の変数を持つドメイン同士も実は同等であることが
わかる。
ALL情報25から各プログラムの呼び出し関係を得
て,ドメイン間の関係を解析することができる。同様
に,ドメイン解析手段21は,複数のプログラムから得
られたプログラム毎のドメイン間の関係を解析するため
に,ユーザが入力したユーザ入力情報26を用いること
もできる。
時的に用いるためだけの変数もあるが,目的とするある
処理のために意味を持たせられて,所定の規約に従って
命名された変数もある。そこで,その規約に基づいた条
件をユーザが入力指定することにより,その指定に見合
った変数を持つドメイン同士に関係を見いだすことがで
きる。
1によって解析したドメイン関係情報27および各ドメ
インに属する変数の代入関係の情報をディスプレイ28
に表示する。このとき,視覚的にグラフ表示することに
より,複数プログラム間に跨がるドメイン間の関係や,
各ドメインに属する変数の代入の関係が把握しやすくな
るように表示する。
各プログラム中に出現する全変数について,プログラ
ム名,変数名,プログラム内出現位置(出現行番
号),代入の式(代入元の変数),ドメインID
(ドメイン名)等の情報を対応付けて保持する。これら
の情報のうち,〜は,プログラムの構文解析時に既
知の技術によって得ることができる。のドメインID
は,プログラム解析装置1によって変数をドメインに分
類した際に,各ドメインに対して識別子(ID)を付与
することによって得られる。
れた〜の情報をもとに,(a) ドメインを中心にした
グラフ表示,(b) 変数の代入関係を中心にしたグラフ表
示等を行う。
ログラム内出現位置(出現行番号),代入の式(代入
元の変数)の情報を保持することにより,グラフ表示上
のある要素が指定されたときに,その要素が表す変数が
出現するソースプログラム内行番号をリストアップした
り,エディタ画面(ソースリスト表示画面)上に表示さ
れたソースプログラムの対応行を表示したりする処理を
行う。
ログラム表示上のある行が指定された場合に,その行に
含まれる変数を表す図形をグラフ表示上で強調表示す
る。すなわち,グラフ表示上で該当する変数の色,明度
または輝度等を変化させて目立つように表示する。
インの要素または要素の一部としての変数または変数群
がユーザによって指定された場合に,ドメイン解析手段
21が解析したドメイン関係情報27に基づいて,同一
関係にあるドメインに含まれる指定された変数または変
数群に対応するすべての変数または変数群を,ディスプ
レイ28に表示する処理を行う。このとき,表示処理手
段22との連携により,ドメイン関係情報27に関する
グラフ表示上で,該当する変数または変数群の強調表示
を行うようにすることもできる。
に,1つのプログラムだけでなく,複数のプログラムが
連携して動作するアプリケーションのようなものでは,
1つのプログラム内でのドメイン分類だけでは十分では
ないことがある。具体的に,複数のプログラム間の変数
の関係を追ってみると,あるドメインと他のドメインと
が実は同一のドメインと見なせるような場合があるから
である。
置2を用いることにより,ドメイン間の関係を解析し解
析結果を表示すれば,複数のプログラムに跨がるドメイ
ン間の関係を把握し,変数の解析をより効率的に行うこ
とができるようになる。
数の代入関係をグラフ表示によって図示することによ
り,変数の持つ情報を視覚的に容易に得ることができ,
より高度なプログラム理解の支援を実現することが可能
になる。
用いて説明する。図3は,図1に示す制約条件抽出手段
13の構成例を示す図である。
判定条件式がその変数の制約条件を表している場合が多
いことを利用するものである。すなわち,業務用の応用
プログラム等では,通常,例えば入力データの変数の値
が正しいかどうかをプログラム中で判定し,もし正しい
値でなければ入力エラーのメッセージの出力と再入力処
理等を行う。このエラー処理への分岐のためのエラー判
定条件式を解析すれば,変数の制約条件を自動抽出する
ことができる。
は,エラー処理手続き名やエラー処理の行番号などを記
録したエラー処理判定支援情報ファイル121を読み,
解析対象プログラム情報11の制御フロー情報をトラバ
ース(全実行文へアクセス)しながらエラー処理を行う
実行文を検索する。続いて,制御フロー情報を逆トラバ
ースして,実行文の直前の条件式を得る。なお,この制
御フロー情報を用いた検索処理は,周知の技術によって
容易に実現できる。
は,例えば事前にプログラム作成者または解析者等がエ
ディタ等を用いて作成しておけばよい。または会話処理
等により解析時にエラー処理判定支援情報を入力する実
施も可能である。
ー判定条件抽出手段131から得たエラー判定条件式
を,()や論理記号ORで分割して部分条件式を作成
し,各部分条件式について,中に変数が1つのみ存在す
るものだけ,「データ名:値域」のように表した制約条
件の形式に変換し,制約条件表14へ保存する。制約条
件は,その変数の値域を表していることが多い。
す図であり,図4(A)は,エラー処理判定支援情報フ
ァイル121の例を示している。エラー処理判定支援情
報ファイル121には,エラー処理手続き名(LABE
L)やエラー処理の行番号(LINE−NUM)等が定
義されている。
1に記録されている制御フローの例を示している。エラ
ー判定条件抽出手段131は,例えばプログラムの「G
OTO 日付−エラー処理.」がエラー処理実行文であ
ることを判定すると,制御フローを逆トラバースして直
前のIF文の条件式「受注日<1 OR 31<受注
日」を得て,条件式/制約条件変換手段132へ渡す。
図4(C)に,エラー処理の実行文A「GO TO 日
付−エラー処理.」と,その直前のIF文の条件式B
「受注日<1 OR 31<受注日」の例を示す。
示す図であり,図5(A)は,エラー判定条件式から制
約条件への変換例を示している。条件式/制約条件変換
手段132は,エラー判定条件抽出手段131から得た
条件式Bを()や論理記号ORで分割して,部分条件式
C1{受注日<1},C2{31<受注日}を作成す
る。さらに部分条件式C1,C2の補集合条件式を求め
て,制約条件D1{受注日,1≦@≦31}(@はこの
箇所に変数名が入ることを意味する)を得る。
む場合のエラー判定条件式から制約条件への変換処理例
を示している。条件式Bが「(データ<データ)O
R(データ<1)」であるとき,(データ<データ
)の複数の変数を含む部分は変換の対象としないで,
(データ<1)の部分のみを変換の対象とする。条件
式Bから,部分条件式C1{データ<1}を作成し,
制約条件D1{データ,1≦@}を得る。これらの制
約条件は,図5(C)に示すように制約条件表14に記
録される。
チャートである。図6のフローチャート中で,ステップ
S1〜ステップS4は,エラー判定条件抽出手段131
の処理,ステップS5〜ステップS7は,条件式/制約
条件変換手段132の処理である。
報ファイル121を読み,エラー処理判定支援情報を入
力する。ステップS2では,解析対象プログラム情報1
1の制御フロー情報をトラバース(全実行文へアクセ
ス)しながらエラー処理を行う実行文を検索する。
ー処理かどうかを判定する。実行文Aがエラー処理であ
ればステップS4以降の処理を行い,実行文Aがエラー
処理でなければ次の実行文について処理に移る。
報11の制御フロー情報を逆にトラバースし,実行文A
が実行される直前の条件式Bを得る。ステップS5で
は,条件式Bから,ある1つの変数に関する条件式を表
している全ての部分条件式C1,C2,…,を抽出す
る。
2,…,を制約条件形式D1,D2,…,に変換する。
ステップS7では,制約条件形式D1,D2,…,を制
約条件表14へ登録する。以上のステップS2〜S7を
全実行文について繰り返したならば処理を終了する。
る。図7は,変数分類手段15の処理フローチャートお
よびデータ構造の例を示す図である。
中で複数の変数が用いられている場合に,それらの変数
の関係がその実行文の種類やオペランドの種類から推定
できることがあることを利用するものである。
入力日 TO 納品日」における左辺(代入先)の変
数「入力日」と右辺(代入元)の変数「納品日」とは,
通常,同一ドメイン内の変数である。また,比較{単価
A<金額B}では,不等号の左右の変数「単価A」,
「金額B」が同一ドメイン内の変数である。実行文中に
このような代入関係,比較が表れた時点で,変数を同一
ドメイン内変数としてグループ化する。ここで,どのよ
うな関係を持った変数をグループ化するかはユーザが決
定することができる。
「(A+B)<(C+D)」のように,左辺,右辺の変
数が単一でない場合には,左辺,右辺の全ての変数が同
一ドメインであると言えないこともある。このような場
合には,例えば,右辺の変数が全て同一ドメインである
場合だけ,左辺,右辺の変数を全て同一ドメインとする
ような方式を採る。この場合,実行文「COMPUTE
A=B+C」は,「B∈δ ∧ C∈δ ならば,
A,B,C∈δ(δ:あるドメイン)」となる。すなわ
ち,BとCとが同一ドメインδならば,A,B,Cは全
て同一ドメインδであるとみなす。
{}は同ドメイン内のメンバ変数の候補を表し,例え
ば,ドメイン[A,{B,C}]は,B,Cが同ドメイ
ンの変数ならば,A,B,Cは全て同ドメイン内の変数
であることを示す。
の処理をプログラム内の全実行文に対して繰り返し,全
実行文について処理したならば終了する。ステップS2
2では,プログラムから実行文Aを取る。
後述する『処理1』を行い,使われている変数のうち同
一ドメインの変数の集合であるドメインD1,D2,
…,Dnを得る。
上存在するかどうかを判定し,存在するならばステップ
S25の処理を行い,存在しないならばステップS22
へ戻って次の実行文の処理を行う。
の処理を全ドメインD1,D2,…,Dnについて繰り
返す。ステップS26では,既存の変数分類表T内で,
ドメインDi中の変数を持つドメインD″が存在するか
どうかを判定する。ドメインD″が存在する場合にはス
テップS27の処理を行い,ドメインD″が存在しない
場合にはステップS28の処理を行う。
のうちドメインD″にない変数をドメインD″に追加
し,ドメインDiを消去する。ステップS28では,ド
メインDiを変数分類表Tへ追加する。
はS28で更新した新しい変数分類表T′を得る。ステ
ップS30では,変数分類表T′内の全既存ドメインD
について,後述する『処理2』を行い,ドメイン内の変
数候補が同一ドメインかどうかを変数分類表T′全体を
見て調査する。
T″を得る。例えば,ステップS22で取った実行文A
が,「COMPUTE A=B+C」であるとすると,
後述する『処理1』を行い,ドメインD1[A,{B,
C}]を得る。ここで,既存の変数分類表T中には,ド
メインD1内変数である「A」を持つドメインD″
[A,X]が存在するので,ドメインD1の変数候補
{B,C}をドメインD″へ追加し,ドメインD″
[A,X,{B,C}]とし,ドメインD1を消去し
て,新しい変数分類表T′を得る。
インD″[A,X,{B,C}]の変数候補{B,C}
を全て含むドメイン[B,C,D]があることから,
「B,C」は同一ドメインと判定して,ドメインD″
[A,X,{B,C}]とドメイン[B,C,D]とを
マージして,ドメイン[A,X,B,C,D]とする。
一方,ドメイン[K,L,{M,N}]の変数候補
{M,N}は同一ドメインかどうか不明なのでそのまま
にして,新しい変数分類表T″とする。
る『処理1』について,図8および図9に示す処理フロ
ーチャートを用いて説明する。図8のステップS101
では,実行文Aを入力する。
演算式があるかどうかを判定する。実行文Aに演算式が
ある場合にはステップS103の処理を行い,実行文A
に演算式がない場合にはステップS109(図9)の処
理を行う。
てステップS104〜ステップS108の処理を繰り返
す。ステップS104では,式の左辺(代入先)と右辺
(代入元)の変数を得て,左辺の変数の集合をSL と
し,右辺の変数の集合をSR とする。ただし,右辺の式
で,乗算,除算オペランドを含む項に含まれている変数
は,オペランドの片側が定数である場合を除いて抽出し
ない。
ン「日」が文字列でも整数でも表現できるように,デー
タ型は変数によって異なる場合が多い。しかし,データ
型が違う変数は違うドメインとしてみなしたい場合に
は,オプションとしてステップS105を行う。このス
テップS105を行うか否かはユーザが指定する。ステ
ップS105を行わない場合には,ステップS106へ
続く。
中の変数が全て同じデータ型であるかどうかをプログラ
ムの変数宣言部をみて判定する。集合SL ,SR の中の
変数が全て同じデータ型である場合には,ステップS1
06の処理を行い,データ型が同じでない場合には次の
演算式の処理へ移る。
る変数が1つかどうかを判定する。変数が1つであれば
ステップS107の処理を行い,変数が1つでない場合
にはステップS108を行う。
R とを合わせてドメインとし,保存する。ステップS1
08では,集合SL と集合SR とを結び付けてドメイン
とする。ここで,マージは行わない。
したならば,図9のステップS109へ進む。上記ステ
ップS101〜S108の処理において,例えば,実行
文Aとして「IF文」を入力し,この実行文Aに,(1)
「MOVE A TO B」,(2) 「COMPUTE
C=D+E」の代入系演算式があるとすると,まず,演
算式(1) 「MOVE A TO B」について,左辺
(代入先)の変数の集合SL :[A],右辺(代入元)
の変数の集合SR :[B]とする。
持つとユーザが指定した場合に限り,オプションとし
て,プログラムの変数宣言部を見て,集合SL :[A]
と集合SR :[B]のメンバ変数が全て同一のデータ型
であるかどうかを調べ,同一のデータ型であることを確
認する。集合SL と集合SR とを合わせてドメイン
Dj:[A,B]とする。
E」の場合,同様の処理を行い,集合SL :[C]と集
合SR :[{D,E}]とを抽出する。この場合,集合
SR のメンバ変数は1つではないので,集合SL と集合
SR とを単に結び付けて(マージしないで),ドメイン
Dj :[C,{D,E}]とする。
比較条件式があるかどうかを判定する。実行文Aに比較
条件式がある場合には,ステップS110の処理を行
い,比較条件式がない場合にはステップS117の処理
を行う。
や論理記号で分割する。ステップS111では,ステッ
プS110で分割した式を単位として比較条件式の全て
についてステップS112〜ステップS116の処理を
繰り返す。
右辺の変数を得る。左辺の変数の集合をSL ,右辺の変
数の集合をSR とする。ただし,両辺の式で,乗算,除
算オペランドを含む項に含まれる変数は,オペランドの
片側が定数である場合を除いて抽出しない。これは複数
の変数同士の乗算または除算の場合,それらの変数が同
一ドメインであるとは限らないからである。
つとユーザが指定した場合に限り,オプションとして,
ステップS113をステップS114の前に行う。ステ
ップS113では,集合SL ,SR の中の変数が全て同
じデータ型であるかどうかをプログラムの変数宣言部を
見て判定する。集合SL ,SR の中の変数が全て同じデ
ータ型である場合には,ステップS114の処理を行
い,データ型が同じでない場合にはステップS117の
処理を行う。
R に含まれる変数が1つかどうかを判定する。それぞれ
の変数が1つでなければステップS115の処理を行
い,変数がともに1つであればステップS116の処理
を行う。
R とをマージしてドメインDj とし,保存する。ステッ
プS116では,集合SL と集合SR とを結び付けてド
メインDj とする。ここで,マージは行わない。
ば,ステップS117では,得られたドメインを全て返
す。例えば,実行文Aとして「IF文」を入力し,この
実行文Aに,「(H+I)>(J+K)‖(X<Y)」
の比較条件式があるとすると,比較条件式を()や論理
記号で分割し,(4) 「(H+I)>(J+K)」と(5)
「(X<Y)」とする。分割した単位毎に,左辺の変数
の集合SL ,右辺の変数の集合SR を抽出する。
ついて,集合SL :[H,I]および集合SR :[J,
K]を抽出する。同一ドメイン内の変数は同一のデータ
型を持つとユーザが指定した場合に限り,オプションと
して,プログラムの変数宣言部より,集合SL と集合S
R のメンバ変数が全て同一のデータ型であることを確認
する。集合SL と集合SR のメンバ変数が1つ以上なの
で,集合SL と集合S R を結び付けて,ドメインDj :
[{H,I},{J,K}]とする。
SL :[X],集合SR :[Y]を抽出する。同一ドメ
イン内の変数は同一のデータ型を持つとユーザが指定し
た場合に限り,オプションとして,プログラムの変数宣
言部より,集合SL と集合S R のメンバ変数が全て同一
のデータ型であることを確認する。集合SL ,集合S R
のメンバ変数が1つなので,集合SL と集合SR を合わ
せてドメインDj :[X,Y]とする。
類手段15の『処理1』から得られるドメインの例を示
す図である。図10(A)は,単一オペランドを持つ実
行文の例,図10(B)は,複合オペランドを持つ実行
文の例を示している。
OMPUTE A=B*C」のように,乗算オペランド
を含む項の変数は,オペランドの片側が定数でない限
り,ドメインを生成するための変数の集合を抽出しない
ので,得られるドメインはない。一方,「MULTIP
LY I BY 定数 GIVING K」(K=I*
定数)を意味する)のように,乗算オペランドを含む項
の変数であっても,オペランドの片側が定数の場合に
は,ドメインが得られる。
いて行われる『処理2』の処理フローチャートである。
ステップS201により,入力した変数分類表T′の全
ドメインD1,D2,…,Dnについて以下の処理を繰
り返す。
変数候補の集合Sがあるかどうかを判定する。変数候補
の集合とは,{ }で囲まれた変数群である。変数候補
の集合Sがある場合にはステップS203の処理を行
い,変数候補の集合Sがない場合には,次のドメインの
処理へ移る。
の変数分類表T′中のドメインを参照し,変数候補の集
合Sのメンバ変数を全て含むドメインD′を探す。ステ
ップS204では,変数候補の集合Sのメンバ変数を全
て含むドメインD′が存在するかどうかを判定する。ド
メインD′が存在する場合には,ステップS205の処
理を行い,ドメインD′が存在しない場合には,次のド
メインの処理に移る。
ンバ変数のうち,ドメインD′にないものを,ドメイン
D′へ追加し,ドメインDiを消去する。ステップS2
06では,新しいドメインD′のメンバ変数のみで構成
されている変数候補の集合を持つドメインが変数分類表
T′にあるかどうかを判定する。そのようなドメインが
変数分類表T′にある場合にはステップS207の処理
を行う。ない場合には,次のドメインの処理へ移る。
メインをドメインD′にマージする。全ドメインについ
て以上の処理を実行したならば,ステップS208によ
り,新しい変数分類表T″を出力する。例えば,ドメイ
ン[A,{B,C}],[B,C,D],[K,L,
{A,B}],…を含む変数分類表T′が入力された場
合,以下のように処理される。ドメインDi:[A,
{B,C}]が処理対象のとき,ドメインDiの変数候
補の集合S:{B,C}を全て含むドメインD′:
[B,C,D]が存在するので,ドメインD′:[B,
C,D]にドメインDiのメンバ変数「A」を追加して
新たなドメインD′:[A,B,C,D]とし,ドメイ
ンDi:[A,{B,C}]を消去する。
のみで構成されている変数候補の集合を持つドメイン
[K,L,{A,B}]があるので,これをドメイン
D′にマージして,ドメインD′[A,B,C,D,
K,L]とする。ここで,ドメイン[A,B,C,D,
K,L],…を含む変数分類表T′を新たな変数分類表
T″として出力する。
理フローチャートおよびデータ構造の例を示す図であ
る。ステップS41では,制約条件抽出手段13から得
た制約条件表14と,変数分類手段15から得た変数分
類表16とを入力する。
変数グループに制約条件を付加してドメイン表9を作
る。各ドメインの制約条件は,該当変数の制約条件の和
(OR)とする。ここで,必要であれば,ドメイン名等
をキーボード等の入力手段によりユーザが登録する。
宣言部を読み,従属する変数がそれぞれ共通のドメイン
に属しているような変数があれば,1ドメインとして,
ドメイン表9に追加する。例えば,図44(A)に示す
COBOLプログラムの場合,「受注日付」,「納品日
付」は,ともにドメイン「日」,「月」,「年」内の変
数で構成されているので,ドメイン「年月日」をドメイ
ン表9に追加する。
具体例を説明する。図13〜図15は,プログラム解析
装置1が処理対象として入力するCOBOLプログラム
の例,図16は,本実施例において用いるエラー処理判
定支援情報ファイル121の例,図17は,プログラム
解析装置1により出力されたドメイン定義抽出結果の例
を示す。
情報ファイル121には,「LABEL:エラー処理」
と定義されているので,これによりプログラム中のエラ
ー処理を判定する。図13〜図15のCOBOLプログ
ラムについて作成された制御フローをトラバースするこ
とにより,「GO TO エラー処理」の実行文から直
前の条件式を得る。これによって,次のような条件式が
得られる。
NUMERIC」 (3) 「(受注数量E>未引当在庫数量SM) AND
(商品区分SM=“0”)」 (4) 「(納入予定年月日<受注年月日+14) AND
(商品区分SM=“1”)」 これらの条件式から,「オーダ番号GET>0」,「品
目番号>0」,「品目番号 IS NUMERIC」の
制約条件が得られる。
ープ化によって,図17の左側の欄に変数名リストとし
て示すような変数分類結果が得られ,この変数分類結果
と上記制約条件とから図17に示すようなドメイン定義
情報が得られる。
ムの解読等に非常に有用であるが,上記制約条件の出力
または変数分類結果の出力だけでも,プログラムの解読
等に十分に有用であることは言うまでもない。
2の詳細について説明する。最初に,図18〜図23に
従って,ドメイン解析手段21によりジョブ制御言語2
4を用いてドメイン間の関係を得る処理について説明す
る。
BOLプログラムの例,図20は各プログラム中に出現
する変数をドメインに分類した例,図21はジョブ制御
言語(JCL)の例,図22はCOBOLプログラムが
扱うファイルレコードの相対番地の例,図23はジョブ
制御言語を用いた場合のドメイン間の関係を解析する処
理の流れを示している。
イルFILE_1は,プログラムPROG_A, プログ
ラムPROG_Bを持ち,図19に示すCOBOLプロ
グラムのファイルFILE_2は,プログラムPROG
_Cを持つ。
21に示すように,各プログラムPROG_A, PRO
G_B毎の変数がドメインに分類されているとする。こ
のドメイン分類では,図18に示すプログラム中の行番
号が41の文に出現する代入関係により,変数VAR_
A1と変数VAR_A2が,また行番号が42の文によ
り変数VAR_A1と変数VAR_A3が同一ドメイン
に分類されることが示されている。同様に,プログラム
中の行番号が86の文に出現する代入関係により,変数
VAR_B1と変数VAR_B2が同一ドメインに分類
されることが示されている。
プログラムという単位毎のドメインの分類は把握できて
も,「プログラムPROG_A, PROG_Bに対する
ドメインに,どのような関係があるか」までは,このま
までは把握できない。
1に示すようなジョブ制御言語(JCL)を用いて,ド
メイン間の関係を解析する。図21に示すJCLは,
「プログラムPROG_A, プログラムPROG_Bを
この順で実行する」ことを記述したものであり,この記
述から,プログラムPROG_AとプログラムPROG
_Bの入力ファイル(論理ファイル名=IN_FIL
E) が共に「FILE_2」であることがわかる。
入力ファイルINFILE_A(図18の行番号12参
照)と,プログラムPROG_Bの入力ファイルINF
ILE_B(図18の行番号52参照)とが等しいこと
がわかり,従って,入力ファイルINFILE_A,I
NFILE_Bの各々の定義(図18の行番号22〜2
8,行番号62〜69)により,変数VAR_A1と変
数VAR_B1とが,実は同一の相対番地を占める変数
であることが得られる。図22は,入力ファイルINF
ILE_AとINFILE_Bの同じ相対番地に割り当
てられている変数の関係を示している。
同じドメインに属することがわかることにより,さら
に,図20に示すドメイン分類によって,ドメインDO
MAIN_A1とDOMAIN_B1とが,実は同じド
メインであることがわかる。
析手段21によるドメイン間の関係解析処理の流れを,
図23に従って説明する。ステップS51では,プログ
ラム解析装置1を用いて,各プログラム毎に変数をドメ
インに分類する。この結果をリストX1として保持す
る。リストX1は,例えばプログラム名,ドメイン名,
各ドメインに属する変数名等の対応情報を持つ。
み込み,実行する各プログラムの各論理ファイル名(I
N_FILE, OUT−FILE等)に対して,物理フ
ァイル名(FILE_2,FILE_N等)を取り出
し,リストX2にその対応情報を保持する。
ル名に対して,同一の物理ファイル名を持つプログラム
を探し出し,ファイル名をリストX3に保持する。この
例では,物理ファイル名=FILE_2が等しいプログ
ラムPROG_A, プログラムPROG_Bのそれぞれ
の論理ファイルIN_FILEに対応するINFILE
_AとINFILE_Bのリストが得られる。
し,同一物理ファイル名を持つプログラムが存在するか
どうかを判定する。存在する場合には,ステップS55
を実行し,存在しない場合またはすべての物理ファイル
に対する処理を終了したならば,ステップS56へ進
む。
TA DIVISIONの定義を参照して,共通の相対
番地を持つ変数のグループを拾い出し,リストX4に保
持する。この例では,変数VAR_A1と変数VAR_
B1とが同じ相対番地を持つ変数として抽出され,リス
トX4に格納される。その後,ステップS54へ戻り,
次の同一物理ファイル名を持つプログラムに対して同様
に処理を繰り返す。
た各変数グループに対して,その変数が含まれるリスト
X1内のドメイン同士を同一ドメインとする。この例で
は,リストX1とリストX4とから,ドメインDOMA
IN_A1とドメインDOMAIN_B1とが同一ドメ
インであることが得られる。
った複数プログラム間のドメインの関係が,ジョブ制御
言語を用いることにより,プログラムという枠を越えて
容易に得られるようになる。
るのではなく,プログラムの呼び出し関係の情報,すな
わち図2に示すCALL情報25を用いることにより解
析することもできる。
析手段21によりCALL情報25を用いてドメイン間
の関係を得る処理について説明する。図24および図2
5は解析対象となるCOBOLプログラムの例,図26
はプログラムの呼び出し関係の例,図27は各プログラ
ム中に出現する変数をドメインに分類した例,図28は
CALL情報(プログラムの呼び出し関係の情報)を用
いた場合のドメイン間の関係を解析する処理の流れを示
している。
OG_AとプログラムPROG_Bとから,図25に示
すプログラムSUB_PROGが呼び出されている。す
なわち,各プログラム間に図26に示すようなプログラ
ムの呼び出し関係がある。
NG指定がなされていることにより,プログラムPRO
G_Aの変数VAR_X1, VAR_X2, VAR_X
3の値が,それぞれプログラムSUB_PROGの変数
VAR_A,VAR_B,VAR_Cに引き渡され,プ
ログラムSUB_PROG内で具体的な計算が行われ
る。同様に,プログラムPROG_Bの変数VAR_Y
1, VAR_Y2, VAR_Y3の値が,それぞれプロ
グラムSUB_PROGの変数VAR_A,VAR_
B,VAR_Cに引き渡され,プログラムSUB_PR
OG内で処理される。
は,プログラム解析装置1によって,例えば図27に示
すように求めることができる。このドメイン分類によれ
ば,プログラムPROG_Aにおいては変数VAR_X
3と変数VAR_X4とが,同一ドメインに含まれ,プ
ログラムSUB_PROGにおいては変数VAR_A,
VAR_B,VAR_Cが同一ドメインに含まれること
がわかるので,呼び出し元のプログラムPROG_Aに
おいても,実は変数VAR_X1, VAR_X2, VA
R_X3が同一ドメインであることがわかる。すなわ
ち, DOMAIN-A1 =[VAR-X3, VAR-X4] =[VAR-X1, VAR-X2, VAR-X3, VAR-X4] であり,ドメインDOMAIN_A1とドメインDOM
AIN_SUB1とが同等であることがわかる。
Y1, VAR_Y2,VAR_Y3が同一ドメインに含
まれているので,USING指定により,プログラムP
ROG_Aの場合と同様にして, DOMAIN-B1 = DOMAIN-SUB1 であることがわかり,これから,ドメインDOMAIN
_SUB1を仲立ちとして, DOMAIN-A1 = DOMAIN-B1 という関係も得られる。
L情報)を用いた場合のドメイン解析手段21によるド
メイン間の関係解析処理の流れを,図28に従って説明
する。
置1を用いて,各プログラム毎に変数をドメインに分類
する。この結果をリストY1として保持する。リストY
1は,例えばプログラム名,ドメイン名,各ドメインに
属する変数名等の対応情報を持つ。
し関係をもとに,値の引き渡しが行われる変数の組のリ
ストを,リストY2に保持する。この例では,VAR_
X1, VAR_X2, VAR_X3とVAR_A,VA
R_B,VAR_Cのそれぞれの組,またVAR_Y
1, VAR_Y2, VAR_Y3とVAR_A,VAR
_B,VAR_Cのそれぞれの組のリストが得られる。
に保持した各変数グループに対して,その変数が含まれ
るリストY1内のドメイン同士を同一ドメインとする。
この例では, DOMAIN-A1 = DOMAIN-SUB1 DOMAIN-B1 = DOMAIN-SUB1 が得られ,さらに,これらから, DOMAIN-A1 = DOMAIN-B1 が得られる。
なかった変数のドメインへの分類が,CALLの呼び出
し関係を用いることによって,新たにわかるようにな
り,新たな統合された分類が可能になる。
力情報26)を用いて,ドメイン間の関係を得ることも
できる。図29〜図32に従って,ドメイン解析手段2
1によりユーザ入力情報を用いてドメイン間の関係を得
る処理について説明する。
BOLプログラムの例,図31は各プログラム中に出現
する変数をドメインに分類した例,図32はユーザ入力
情報を用いた場合のドメイン間の関係を解析する処理の
流れを示している。
FILE_1とFILE_2に格納されたプログラムP
ROGRAM1とPROGRAM2とについて,ユーザ
入力情報からドメイン間の関係情報を得るものとする。
図31に示すように,各プログラム毎のドメイン分類
は,図1に示すプログラム解析装置1によって求められ
る。
RAM1とプログラムPROGRAM2で行われている
処理は共に明らかであるので,ユーザにとってはプログ
ラム毎のドメイン分類を得るだけでなく,全体をまとめ
ての「日付」,「各科目の得点」,「平均点」という観
点からの分類を得ることが望まれる。この点に鑑みて,
本例では,ユーザによる関係付け条件の指定を可能と
し,ユーザが入力した関係付けの条件によって全体のド
メイン間の関係情報を得る。
観点から,キーワード「KAMOKU」を与えたとす
る。ドメイン解析手段21は,キーワード「KAMOK
U」を変数名(または変数名の一部)に持つ変数群と,
その変数群を含むドメインを全プログラムから探し出
し,各プログラムに対して得られたドメイン群を同等な
ものとみなす処理を行う。
メイン解析手段21によるドメイン間の関係解析処理の
流れを,図32に従って説明する。ステップS511で
は,プログラム解析装置1を用いて,各プログラム毎に
変数をドメインに分類する。この結果をリストZ1とし
て保持する。リストZ1は,例えばプログラム名,ドメ
イン名,各ドメインに属する変数名等の対応情報を持
つ。
り,ドメインの関係付け情報Z2を得る。この例では,
ユーザは関係付け情報Z2としてキーワードを入力する
ものとし,そのキーワードを変数名の先頭に含む変数を
同一ドメインに属するものとして扱うようにしている。
他にユーザの関係付け情報として,ある特定範囲の数字
を含む変数名,ある特定の文字を含む変数名というよう
に,プログラム作成時に変数名の命名規則として規定さ
れた種々の条件を,関係付け情報として用いることも可
能である。
け情報Z2に当てはまる変数をリストZ1内から探し出
し,該当するリストZ1内のドメイン同士を同一のドメ
インとする。これによって,プログラムPROGRAM
1のドメインDOMAIN1_2とプログラムPROG
RAM2のドメインDOMAIN2_2とが同一のドメ
インであることがわかる。
を得ることも可能である。
グラフ表示処理について説明する。図33は,ドメイン
間の関係および変数の代入関係の表示をグラフ表示した
例を示す図である。
から,(a) ドメインを中心にしたグラフ表示,(b) 変数
の代入関係を中心にしたグラフ表示を行うことができ
る。いずれも次のような表示を行う。
(A)に示すように,代入元変数を表す図形から代入先
変数を表す図形への矢印で表す。あるいは,図33
(B)に示すように,代入元変数の図形を左側に,代入
先変数の図形を必ずその右側に描くという規約を設けた
上で,代入元変数の図形と代入される変数の図形とを線
で繋ぐ。
メインに含まれる変数/変数とその代入関係を描き,そ
れらの変数(図形)全てを取り囲むようにして,ドメイ
ンを表す図形を描く。
イン同士を線で結ぶ。特に,ドメインを中心にしたグラ
フ表示では,例えば図33(E)に示すように,同一の
ドメインに分類されたドメイン同士を線で結ぶ。その際
に,変数の代入関係は別段意識して描くことはせず,そ
のドメインに含まれる変数を,変数名や簡単な図形等で
書き表す。各変数については,必要に応じてその詳細な
情報を得て表示することも可能である。この場合,変数
について必要と思われる情報を,変数情報の追加項目と
して保持しておけばよい。
表示では,例えば図33(F)に示すように,代入元の
変数を表す図形から代入先の変数を表す図形への流れを
きちんと描くことを重視し,複数プログラムに跨がって
同一の変数とみなせる変数を同一であることがわかるよ
うな形で表す。変数が同一とみなせることを表すには,
ドメインを描いて線で結ぶというような表現,またはそ
の変数同士を直接,線で結ぶなどの表現が可能である。
の例,図35はドメイン関係情報の例,図36はドメイ
ン間の関係と変数代入関係のグラフ表示例を示す。図3
4に示す対応表は,図18および図19に示すCOBO
Lプログラム中に出現する全変数とドメインについての
情報を保持しており,プログラム解析装置1によって得
られたものである。これらの情報からドメイン解析手段
21によって,前述したドメイン間の関係を解析する処
理により図35に示すようなドメイン関係情報が得られ
る。
て,図18および図19に示すCOBOLプログラムに
対するドメイン間の関係と変数の代入関係をグラフ表示
したものが,図36である。このグラフ表示において,
楕円は変数を表し,楕円を結ぶ矢印が代入元と代入先を
表す。変数の代入の関係を囲む矩形(枠)は,その変数
を含むドメインであり,矩形間を結ぶ線は同等なものと
分類されたドメイン同士であることを表している。
ログラムPROG_AのドメインDA1は,変数VAR
_A1, VAR_A2, VAR_A3を持ち,VAR_
A2およびVAR_A3には,VAR_A1の値が代入
されることを表している。また,プログラムPROG_
BのドメインDB1は,変数VAR_B1, VAR_B
2を持ち,VAR_B2からVAR_B1へ値が代入さ
れることを表している。
インDA1とドメインDB1とを同一とみなし,またド
メインDA2とドメインDB3とを同一とみなすことが
できるので,ドメインDA1とドメインDB1の矩形同
士, およびドメインDA2とドメインDB3の矩形同士
をそれぞれ線で結んで表す。
ンを中心にしたグラフ表示の処理フローチャートであ
る。まず,ステップS61では,図34に示すような対
応表において,処理対象のプログラムがあるかどうかを
判定する。プログラムがある場合,ステップS62以下
の処理を行い,プログラムがない場合,ステップS64
へ進む。
ラムに対して未処理のドメインがあるかどうかを判定す
る。未処理のドメインがない場合,ステップS61へ戻
って次のプログラムについての処理へ移る。
63によって,そのドメインを矩形の枠で描画し,その
内側に変数名または変数を表すものを描く。その後,ス
テップS63へ戻り,他のドメインについて同様に処理
を繰り返す。
関係を見て,関係のあるドメイン同士を線で結ぶことに
より,ドメイン間の関係を表示する。図38は,表示処
理手段22による変数の代入関係を中心にしたグラフ表
示の処理フローチャートである。
な対応表において,処理対象のプログラムがあるかどう
かを判定する。プログラムがある場合,ステップS60
2以下の処理を行い,プログラムがない場合,ステップ
S605へ進む。
グラムに対して未処理のドメインがあるかどうかを判定
する。未処理のドメインがない場合,ステップS601
へ戻って次のプログラムについての処理へ移る。
603によって,さらにそのドメインについて代入関係
にある変数があるかどうかを判定する。代入関係にある
変数がない場合,ステップS602へ戻り,次のドメイ
ンについて同様に処理を繰り返す。
S604により,それらの変数の代入関係を描く。次
に,ステップS603へ戻り,同様に処理を繰り返す。
すべてのプログラムについての以上の処理が終了したな
らば,次に,ステップS605により,ドメインを描く
かどうかを判定し,ドメインを描く場合,ステップS6
06を実行し,ドメインを描かない場合には,ステップ
S607を実行する。ドメインを描くか描かないかは,
ユーザの指定情報によって判断する。
よりドメインを描き,同一ドメインを線で結ぶ。一方,
ドメインを描かない場合には,ステップS607により
同等な変数を線で結ぶ処理を行う。
対応ソースコードの表示処理について説明する。図39
は,ソースコードと出現行番号の表示例を示す。前述し
た図36のドメイン・グラフ表示画面において,ユーザ
が変数VAR_A1の図形(楕円)を,マウス等のポイ
ンティング・デバイスにより選択すると,図39に示す
ソースリスト表示画面のように,その変数VAR_A1
が出現するソースの行をハイライト表示する。または,
図39に示す出現行番号表示画面のように,変数VAR
_A1が出現するソースの行番号をリストアップしたも
のを表示する。必要に応じてその双方を表示するように
してもよい。これによって,変数VAR_A1が行番号
41と42の文に出現することがわかる。
コード表示処理のフローチャートである。まず,ステッ
プS71では,ユーザからの入力または事前の環境設定
情報により,強調表示の表示方法として,枠囲み,アン
ダーライン,反転,色別等を設定する。また,出現行番
号表示画面による行番号表示を行うか,ソースリスト表
示画面によるソースコードそのものの表示を行うかを設
定する。
いて選択されたドメインまたは変数の指定を入力する。
ステップS73では,図34に示すような対応表を参照
し,指定されたドメイン/変数に対応する行番号のリス
トを表示する。またはソースコードの行をステップS7
1で設定された表示方法に従って表示する。
とは逆に,ソースリスト表示画面で指定された文に含ま
れる変数やドメインを,ドメイン・グラフ表示画面にお
いて,強調表示することも可能である。
よるグラフの強調表示例を示す。例えば,図41に示す
ようなソースリスト表示画面において,行番号86のソ
ースコードがマウス等によりクリックされると,その行
に含まれる変数の関係とその変数が含まれるドメインと
が,図41に示すドメイン・グラフ表示画面のように,
強調して表示される。すなわち,行番号86に含まれる
変数が,図34の対応表からVAR_B1とVAR_B
2であることがわかるため,これらを表す楕円およびこ
れらを含むドメインDB1の矩形がハイライト表示され
る。
ン/変数強調表示処理のフローチャートである。まず,
ステップS81では,ユーザからの入力または事前の環
境設定情報により,強調表示の表示方法として,枠囲
み,反転,色別等を設定する。また,強調表示の表示対
象として,ドメイン,変数またはこれらの双方のいずれ
かを設定する。
ースリスト表示画面において指定された行の行番号を入
力する。ステップS83では,図34に示すような対応
表を参照し,指定された行番号に対応するドメイン/変
数を,ステップS81で設定された表示方法に従って表
示する。
手段23によるドメイン要素の関係情報出力処理の例を
説明する。例えば,図18および図19に示すCOBO
Lプログラムにおいて,変数VAR_A13に対応する
他の変数を,全てのプログラムの中から探し出す場合
に,本処理が有効となる。本処理では,具体的には,変
数「年」「月」「日」がまとめて変数「年月日」として
構造化されているような場合に,変数「年月日」が属す
るドメインの関係情報を利用して,変数「年」等に対応
する他のすべての変数の情報を自動抽出するような処理
を行う。
力処理のフローチャートである。ステップS91では,
指定された変数(ドメイン要素)が属するドメインを求
める。例えば図18に示すCOBOLプログラムにおい
て変数VAR_A13が指定された場合,変数VAR_
A13が変数VAR_A1に含まれることから,図34
に示す対応表をもとにドメインDA1を得る。
一関係にあるドメインがあるかどうかを調べる。同一関
係にあるドメインがある場合には,ステップS93の処
理を行い,他にない場合にはステップS94へ進む。こ
の例では,図35に示すドメイン関係情報から,ドメイ
ンDA1と同一関係にあるドメインDB1があることが
わかるので,これについてステップS93が実行され
る。
ドメイン中の対応する変数(ドメイン要素)をすべて抽
出する。この例では,ドメインDB1に属する変数VA
R_B1が求められ,さらに変数VAR_A1と変数V
AR_B1の関係から,図22に示すような相対番地が
考慮され,変数VAR_A13に対応する変数VAR_
B12が求められる。
繰り返し,すべての同一関係にあるドメインについての
処理が終了したならば,ステップS94によって,ステ
ップS93により抽出した変数(ドメイン要素)の対応
関係情報を表示する。この例では,変数VAR_A13
が変数VAR_B12に対応することが表示され,これ
らは擬似的なドメインを構成することが示される。
はなく,例えば図18に示す変数VAR_A11または
変数VAR_A12と,変数VAR_B11の関係のよ
うに,包含関係を自動抽出して表示することも可能であ
る。ドメイン分類情報を利用することにより,これらの
処理を容易に行うことができる。
図1に示すプログラム解析装置1が抽出したプログラム
毎のドメイン定義情報もしくはドメインに分類した変数
情報に基づいて処理を行うが,例えば1つのプログラム
においてドメインを構成しない単独の変数であっても,
他のプログラムとの関係ではドメインを構成することも
ある。
て,予め単独の変数についても1つのドメインを構成す
るとして,それにドメインIDを与えて処理してもよ
く,また,プログラム解析表示装置2において,必要に
なったときに,各プログラム中に単独で現れる変数に対
してドメインIDを与えて処理してもよい。例えば,複
数のプログラムにおいて,同じ名前の外部変数名は,同
一関係にあるドメインとして扱うことができる。同じ名
前のデータベース・スキーマ名を持つ変数なども同様で
ある。
ンを定義付けることを,そのドメイン内の変数のエラー
処理条件,変数が表現する対象や,利用制約などを明確
にするために,プログラムの開発・作成時に,プログラ
ム設計者が行っている。しかし,既存のプログラムに
は,このようなドメイン定義情報がないことがあり,ま
たドメイン定義情報がある場合でも,人間が作成したも
のであるので,正確に反映されていない可能性もある。
メイン定義が明確に行われていなかった既存プログラム
を解析し,ドメイン定義情報を自動抽出することによ
り,プログラムの理解を助けるという効果を奏する。例
えば,「年」を表現する変数を一律に2桁から4桁に修
正したい場合,プログラムからこのような「年」を表現
する変数を容易に検索することができるようになる。す
なわち,既存のプログラムのデバッグ,保守,改良等の
際に,種々の名前を持つ変数を制約条件に基づいたカテ
ゴリーに分けた情報を利用することができるようになる
ので,プログラミングあるいはプログラムの理解を速く
かつ容易に行えるようになる。
処理内容に応じて複数のプログラムから構成される。し
かも,大抵の場合において,それらの個々のプログラム
は異なる人によって書かれるため,作成規約を設けては
いても,全体的な処理の中でどのような変数を用いて情
報が流れていくかを把握するのは難しい。
ば,複数プログラムの各々において異なる文字列で表さ
れていた変数の関係を解析し,すなわち,複数のプログ
ラムにわたって同等な関係にある変数群を自動抽出し,
その解析結果をグラフ表示によって視覚的にわかりやす
く表示することができるため,特に多数のプログラムか
らなる一連の処理流れを容易に理解することが可能にな
る。
ード)上のどこで使われているのか,逆に,ソースリス
ト上のある変数と関係のある変数がどれであるかなど
を,容易に把握することができるようになるという点で
も,プログラムの理解を支援する技術として大きく貢献
する。
す図である。
を示す図である。
る。
る。
タ構造を示す図である。
る。
る。
す図である。
およびデータ構造を示す図である。
ある。
ある。
ある。
図である。
示す図である。
示す図である。
分類した例を示す図である。
る。
ドの相対番地の例を示す図である。
関係を解析する処理の流れを示す図である。
示す図である。
示す図である。
る。
分類した例を示す図である。
合のドメイン間の関係を解析する処理の流れを示す図で
ある。
示す図である。
示す図である。
分類した例を示す図である。
関係を解析する処理の流れを示す図である。
示をグラフ表示した例を示す図である。
図である。
示例を示す図である。
ラフ表示の処理フローチャートである。
したグラフ表示の処理フローチャートである。
である。
フローチャートである。
す図である。
処理のフローチャートである。
要素の関係情報出力処理のフローチャートである。
Claims (9)
- 【請求項1】 プログラムを解析し,プログラム中の変
数に関する解析情報を出力するプログラム解析装置であ
って, プログラムのエラー処理部分を認識し,エラー処理を行
う条件を抽出するエラー判定条件抽出手段と, このエラー判定条件抽出手段の出力を分析して特定の変
数の制約条件を得る条件式/制約条件変換手段とを備
え, プログラム中の変数に対して与えられた制約条件を抽出
して出力することを特徴とするプログラム解析装置。 - 【請求項2】 プログラムを解析し,プログラム中の変
数に関する解析情報を出力するプログラム解析装置であ
って, プログラムのエラー処理部分を認識し,エラー処理を行
う条件を抽出するエラー判定条件抽出手段とこのエラー
判定条件抽出手段の出力を分析して特定の変数の制約条
件を得る条件式/制約条件変換手段とからなる制約条件
抽出手段と, プログラムのある実行文中で複数の変数が用いられてい
る場合に,それらの変数の関係をその実行文の種類また
はオペランドの種類によって分析し,それらの変数の値
が同じドメインを表現するかどうかによってグループに
分ける変数分類手段と, 前記変数分類手段から得た複数の変数が共通に表現する
ドメインに関する分類情報と前記制約条件抽出手段から
得た変数の制約条件とから,同じ対象を表現するドメイ
ンに関する定義情報を抽出するドメイン定義抽出手段と
を備え, プログラムの解析結果としてドメイン定義情報を出力す
ることを特徴とするプログラム解析装置。 - 【請求項3】 請求項2記載のプログラム解析装置にお
いて,前記変数分類手段により 各プログラム毎にドメインに分
類された変数情報とそれらの各プログラムを実行させる
制御情報を記述したジョブ制御言語の情報とをもとに,
複数のプログラムにおけるドメイン間の関係を解析する
ドメイン解析手段と, 解析したドメイン間の関係を表示する表示処理手段とを
備えたことを特徴とするプログラム解析装置。 - 【請求項4】 請求項2記載のプログラム解析装置にお
いて,前記変数分類手段により 各プログラム毎にドメインに分
類された変数情報とそれらの各プログラムの呼び出し関
係の情報とをもとに,複数のプログラムにおけるドメイ
ン間の関係を解析するドメイン解析手段と, 解析したドメイン間の関係を表示する表示処理手段とを
備えたことを特徴とするプログラム解析装置。 - 【請求項5】 請求項2記載のプログラム解析装置にお
いて,前記変数分類手段により 各プログラム毎にドメインに分
類された変数情報とユーザの入力による情報とをもと
に,複数のプログラムにおけるドメイン間の関係を解析
するドメイン解析手段と, 解析したドメイン間の関係を表示する表示処理手段とを
備えたことを特徴とするプログラム解析装置。 - 【請求項6】 請求項3,請求項4または請求項5記載
のプログラム解析装置において, 各プログラムにおける変数間の代入の関係を保持する手
段を有し, 前記表示処理手段は,複数のプログラムに跨がるドメイ
ン間の関係と,それらの各ドメインに含まれる変数間の
代入の関係とを,グラフの形態で視覚的に表示する手段
を持つことを特徴とするプログラム解析装置。 - 【請求項7】 請求項6記載のプログラム解析装置にお
いて, 各プログラムにおけるドメインを構成する変数の代入文
または代入式の出現位置を保持する手段を有し, 前記表示処理手段は,前記グラフの表示におけるドメイ
ンまたは変数の指示に対し,指示されたドメインまたは
変数を含むプログラム中の対応するソースコードまたは
その出現位置情報を表示する手段を持つことを特徴とす
るプログラム解析装置。 - 【請求項8】 請求項6記載のプログラム解析装置にお
いて, 各プログラムにおけるドメインを構成する変数の代入文
または代入式の出現位置を保持する手段を有し, 前記表示処理手段は, 指定されたプログラムのソースコードを表示する手段
と, 表示したプログラムのソースコード中で文または変数が
指定された場合に,その文に出現する変数または指定さ
れた変数を表す図形を,前記グラフの表示上で強調表示
する手段を持つことを特徴とするプログラム解析装置。 - 【請求項9】 請求項3,請求項4または請求項5記載
のプログラム解析装置において, ドメインの要素に含まれる変数または変数群の指定によ
り,前記ドメイン解析手段が解析したドメイン間の関係
情報に基づいて,同一関係にあるドメインの要素に含ま
れる指定された変数または変数群に対応するすべての変
数または変数群を表示するドメイン要素の関係出力手段
を備えたことを特徴とするプログラム解析装置。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP09974596A JP3305949B2 (ja) | 1996-02-08 | 1996-04-22 | プログラム解析装置 |
US08/794,368 US6110224A (en) | 1996-02-08 | 1997-02-04 | Program analyzing apparatus which categorizes variables into domains and method thereof |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP8-22295 | 1996-02-08 | ||
JP2229596 | 1996-02-08 | ||
JP09974596A JP3305949B2 (ja) | 1996-02-08 | 1996-04-22 | プログラム解析装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH09274562A JPH09274562A (ja) | 1997-10-21 |
JP3305949B2 true JP3305949B2 (ja) | 2002-07-24 |
Family
ID=26359484
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP09974596A Expired - Fee Related JP3305949B2 (ja) | 1996-02-08 | 1996-04-22 | プログラム解析装置 |
Country Status (2)
Country | Link |
---|---|
US (1) | US6110224A (ja) |
JP (1) | JP3305949B2 (ja) |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3881103B2 (ja) * | 1998-01-14 | 2007-02-14 | 富士通株式会社 | 変数分類装置およびそのプログラムを格納した記憶媒体 |
US7774377B2 (en) * | 2003-12-03 | 2010-08-10 | The Trizetto Group, Inc. | Range definition method and system |
US7430551B2 (en) | 2005-01-20 | 2008-09-30 | International Business Machines Corporation | Method to enforce domain strong typing |
JP4681923B2 (ja) * | 2005-04-01 | 2011-05-11 | キヤノン株式会社 | 情報処理装置及びその制御方法、コンピュータプログラム、記憶媒体 |
JP4712512B2 (ja) * | 2005-10-14 | 2011-06-29 | 富士通株式会社 | プログラム変換プログラム、プログラム変換装置、プログラム変換方法 |
JPWO2009011057A1 (ja) * | 2007-07-19 | 2010-09-09 | 富士通株式会社 | アプリケーション解析プログラム、アプリケーション解析方法およびアプリケーション解析装置 |
JP2012510661A (ja) * | 2008-12-01 | 2012-05-10 | ケーピーアイティ クミンズ インフォシステムズ リミテッド | 逐次コンピュータプログラムコードを並列処理する方法及びシステム |
JP5204300B2 (ja) * | 2009-04-28 | 2013-06-05 | インターナショナル・ビジネス・マシーンズ・コーポレーション | マルチスレッド上で動作するプログラムのプログラム・コードをロック衝突が少ないプログラム・コードに変換するための方法、並びにそのコンピュータ・プログラム及びコンピュータ・システム |
EP2597566B1 (en) | 2010-07-20 | 2019-04-03 | Hitachi, Ltd. | Software maintenance supporting device and electronic control device verified by the same |
EP2557499A1 (en) * | 2011-08-12 | 2013-02-13 | Tata Consultancy Services Limited | A system and method for automatic impact variable analysis and field expansion in mainframe systems |
JP5775829B2 (ja) * | 2012-01-30 | 2015-09-09 | 日立オートモティブシステムズ株式会社 | ソフトウェアの構造可視化プログラムおよびシステム |
JP6081144B2 (ja) * | 2012-10-30 | 2017-02-15 | 株式会社東芝 | ソースコード解析装置 |
US9542182B2 (en) * | 2013-06-18 | 2017-01-10 | International Business Machines Corporation | Standardization of variable names in an integrated development environment |
WO2015008575A1 (ja) * | 2013-07-19 | 2015-01-22 | 日産自動車株式会社 | ソフトウェア検査装置、ソフトウェア検査方法、ソフトウェア検査プログラム |
US10055332B2 (en) * | 2016-02-12 | 2018-08-21 | International Business Machines Corporation | Variable detection in source code to reduce errors |
CN111737040B (zh) * | 2020-06-22 | 2024-05-28 | 北京字节跳动网络技术有限公司 | 程序代码修复方法及装置 |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4931928A (en) * | 1988-11-09 | 1990-06-05 | Greenfeld Norton R | Apparatus for analyzing source code |
US5485621A (en) * | 1991-05-10 | 1996-01-16 | Siemens Corporate Research, Inc. | Interactive method of using a group similarity measure for providing a decision on which groups to combine |
JP3181994B2 (ja) * | 1992-09-03 | 2001-07-03 | 株式会社日立製作所 | ジョブフロー仕様書自動作成方法 |
US5742827A (en) * | 1992-11-02 | 1998-04-21 | Fujitsu Limited | Method of automatically forming program specifications and apparatus therefor |
US5339433A (en) * | 1992-11-19 | 1994-08-16 | Borland International, Inc. | Symbol browsing in an object-oriented development system |
US5432942A (en) * | 1993-06-10 | 1995-07-11 | The United States Of America As Represented By The Secretary Of The Navy | Data structure extraction, conversion and display tool |
JP2755154B2 (ja) * | 1994-02-23 | 1998-05-20 | 日本電気株式会社 | プログラム変換処理装置およびプログラム変換処理方法 |
JPH0869381A (ja) * | 1994-08-30 | 1996-03-12 | Nec Ic Microcomput Syst Ltd | コンパイル方式 |
US5822587A (en) * | 1995-10-20 | 1998-10-13 | Design Intelligence, Inc. | Method and system for implementing software objects |
US5838979A (en) * | 1995-10-31 | 1998-11-17 | Peritus Software Services, Inc. | Process and tool for scalable automated data field replacement |
US5794048A (en) * | 1996-08-29 | 1998-08-11 | Matridigm Corporation | Method for classification of year-related data fields in a program |
US5987253A (en) * | 1996-08-29 | 1999-11-16 | Matridigm Corporation | Method for classification of year-related data fields in a program |
-
1996
- 1996-04-22 JP JP09974596A patent/JP3305949B2/ja not_active Expired - Fee Related
-
1997
- 1997-02-04 US US08/794,368 patent/US6110224A/en not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
JPH09274562A (ja) | 1997-10-21 |
US6110224A (en) | 2000-08-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3305949B2 (ja) | プログラム解析装置 | |
KR100969447B1 (ko) | 자연 언어 커맨드에 따른 표 렌더링 | |
US7496832B2 (en) | Web page rendering based on object matching | |
US8392013B2 (en) | Business process automation | |
CN112597182B (zh) | 数据查询语句的优化方法、装置、终端及存储介质 | |
CN115061721A (zh) | 一种报表生成方法、装置、计算机设备及存储介质 | |
US10699112B1 (en) | Identification of key segments in document images | |
US9182947B2 (en) | Program source code navigation | |
US20080059437A1 (en) | Data mining system | |
CN112966482A (zh) | 一种报表生成方法、装置及设备 | |
CN113687827B (zh) | 基于微件的数据列表生成方法、装置、设备及存储介质 | |
JP2013182410A (ja) | 業務分析設計支援装置、業務分析設計支援方法、および業務分析設計支援プログラム | |
US10241899B2 (en) | Test input information search device and method | |
CN117216092A (zh) | 一种优化tdsql脚本的方法、装置、设备及可读存储介质 | |
Kazato et al. | Incremental feature location and identification in source code | |
US7085759B2 (en) | System and method for communicating data to a process | |
Homann et al. | Towards user interface patterns for ERP applications on smartphones | |
CN113946324A (zh) | 一种展示高通量测序数据结果的交互式可视化报告系统 | |
CN114115872A (zh) | 一种业务表达式生成和解析工具的实现方法及装置 | |
CN112949274A (zh) | 一种文档数据录入的方法及系统 | |
Mou et al. | Visual orchestration and autonomous execution of distributed and heterogeneous computational biology pipelines | |
US20130265326A1 (en) | Discovering a reporting model from an existing reporting environment | |
KR100656559B1 (ko) | Bibd 방법론을 이용하는 프로그램 자동 개발 장치 | |
CN112256573B (zh) | 一种面向simscript语言的仿真程序可视化方法 | |
Mou et al. | Implementing computational biology pipelines using VisFlow |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20020423 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080510 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090510 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090510 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100510 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100510 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110510 Year of fee payment: 9 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120510 Year of fee payment: 10 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130510 Year of fee payment: 11 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140510 Year of fee payment: 12 |
|
LAPS | Cancellation because of no payment of annual fees |