JPH11272503A - プログラムのテストデータ自動生成装置 - Google Patents

プログラムのテストデータ自動生成装置

Info

Publication number
JPH11272503A
JPH11272503A JP10075553A JP7555398A JPH11272503A JP H11272503 A JPH11272503 A JP H11272503A JP 10075553 A JP10075553 A JP 10075553A JP 7555398 A JP7555398 A JP 7555398A JP H11272503 A JPH11272503 A JP H11272503A
Authority
JP
Japan
Prior art keywords
program
variable
path
program path
expression
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
JP10075553A
Other languages
English (en)
Other versions
JP3418544B2 (ja
Inventor
Hiroki Watanabe
浩樹 渡邊
Tsutomu Shomura
勉 正村
Kenji Arai
健司 新居
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 Software Engineering Co Ltd
Original Assignee
Hitachi Software Engineering Co 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 Software Engineering Co Ltd filed Critical Hitachi Software Engineering Co Ltd
Priority to JP07555398A priority Critical patent/JP3418544B2/ja
Publication of JPH11272503A publication Critical patent/JPH11272503A/ja
Application granted granted Critical
Publication of JP3418544B2 publication Critical patent/JP3418544B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Landscapes

  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Abstract

(57)【要約】 【課題】 ユーザが指定した変数について、変数が満た
すべき条件とその処理の流れを自動的に算出し、テスト
データを自動生成することによってテストにかかる工数
を削減すること。 【解決手段】 テストデータ生成対象のソースプログラ
ムを解析し、構文木を作り、変数の階層構造と大きさと
別名、再定義、サブルーチンの情報を収集する構文解析
処理を行う構文解析手段と、ユーザによって指定された
変数の値の影響がソースプログラム内で波及する範囲を
特定し、その部分を取り出すための波及効果解析処理を
行う波及効果解析手段と、前記波及効果解析処理によっ
て得られた解析結果を用い、ユーザによって指定された
変数について、その変数が満たすべき条件を算出する条
件算出手段と、算出された条件に当てはまる変数のテス
トデータを自動生成する手段とを有する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、プログラムの開発
支援に使用するテストデータ自動生成装置に関し、特
に、ソースプログラムのテスト、デバッグ、流用開発に
適用して有効な技術に関するものである。
【0002】
【従来の技術】プログラムのテストデータ自動生成技術
については、本出願人が先に提案した特願平8−216
328号(発明の名称;プログラム開発支援装置および
プログラム開発支援方法およびプログラム開発支援用記
憶媒体)がある。これは、再テストの効率化とプログラ
ム中の有効命令・無効命令の判定と無効命令の破棄を目
的としたものであり、再テストの効率化という点でテス
トデータの自動生成機能を有している。
【0003】
【発明が解決しようとする課題】しかしながら、特願平
8−216328号に記載の技術は、テストデータ取得
を自動化し、テストに要するプログラマの負担を大幅に
軽減するものではあるが、対象となるプログラムの規模
が大きくなると生成されるプログラムパスの数が急激に
増加するという問題がある。
【0004】この問題に対しては、C言語の関数のよう
な独立性の高い意味のまとまりを持つ言語であれば、そ
のまとまり毎にテストデータ生成を行うことにより、同
時に生成されるプログラムパス数を軽減できるが、対象
となるプログラム言語が、COBOL言語の外PERF
ORMで呼ばれる手続きなどのように独立性の低いサブ
ルーチンを記述できる言語である場合には、サブルーチ
ン毎に分割したとしても有意なテストデータ生成が行え
るかはなはだ疑問であり、そのような手段は使えない。
【0005】また、デバッグや流用開発でプログラマが
関心をもつのは、問題を起こしていると考えられる特定
の変数や処理の流れである場合が非常に多く、従来の技
術をデバッグや流用開発に応用しようとした場合、プロ
グラム全体の膨大な数のプログラムパスやそのドメイン
の中から自分の関心のあるパスを探すという作業を行わ
なければならない。
【0006】また、COBOL言語のように、変数が別
名を持っていたり、変数が構造を持ち、下位の変数への
更新が上位の変数の値に影響するような場合には、変数
名の置き換えによるプログラムドメインの取得方法で
は、対応できないという問題がある。
【0007】本発明の目的は、上記の問題を解決し、プ
ログラムのデバッグや流用開発を行う場合に、ユーザが
指定した変数について、変数が満たすべき条件とその処
理の流れを自動的に算出し、また、それに基づいてテス
トデータを自動生成することによってテストにかかる工
数を削減する技術を提供することにある。
【0008】
【課題を解決するための手段】上記目的を達成するため
に、本発明は、テストデータ生成対象のソースプログラ
ムを解析し、構文木を作り、変数の階層構造と大きさと
別名、再定義、サブルーチンの情報を収集する構文解析
処理を行う構文解析手段と、ユーザによって指定された
変数の値の影響がソースプログラム内で波及する範囲を
特定し、その部分を取り出すための波及効果解析処理を
行う波及効果解析手段と、前記波及効果解析処理によっ
て得られた解析結果を用い、ユーザによって指定された
変数について、その変数が満たすべき条件を算出する条
件算出手段と、算出された条件に当てはまる変数のテス
トデータを自動生成する手段と、を有することを特徴と
する。
【0009】また、前記波及効果解析処理によって得ら
れた解析結果を用い、ルーチン毎にプログラムネットワ
ークを作成するプログラムネットワーク作成処理を行う
プログラムネットワーク作成手段と、前記プログラムネ
ットワークからプログラムパス式を生成するプログラム
パス式生成処理を実行するプログラムパス式生成手段
と、サブルーチンコールが検出された場合、それをコー
ル先のサブルーチンのプログラムパス式で置き換えるサ
ブルーチン置換処理を実行するサブルーチン置換手段
と、生成されたプログラムパス式を展開するプログラム
パス式展開処理を実行するプログラムパス式展開手段
と、分割して求められたプログラムパスをプログラムの
処理の流れにしたがって連結するプログラムパス連結処
理を実行するプログラムパス連結手段とを備え、前記条
件算出手段は、連結されたプログラムパスからそのプロ
グラムパスが実行されるための変数の条件を算出するこ
とを特徴とする。
【0010】さらに、プログラムパスの条件算出時に、
変数名を、データ領域の先頭からのオフセットと、その
変数が占有する領域の大きさの2つの数値を使ったシン
ボル名に変換することで、複数の変数が任意の記憶領域
を共有している場合でも変数が満たすべき条件を算出す
る手段を有することを特徴とする。
【0011】
【発明の実施の形態】以下、本発明によるプログラムの
テストデータ自動生成装置の一実施の形態について図面
を参照しながら具体的に説明する。
【0012】図1は、本発明の一実施形態を示す機能構
成図である。本実施形態のテストデータ自動生成装置
は、処理要求の受け付けや結果の表示を行う端末101
と、処理対象となるソースファイル102と、ソースフ
ァイル102の構文解析を行う構文解析部103と、前
記構文解析部103の処理結果を用い、ユーザによって
指定された変数の値の影響がソースプログラム内で波及
する範囲を特定する波及効果解析を行う波及効果解析部
104と、前記波及効果解析部104の処理結果を用い
てプログラムネットワークを生成するプログラムネット
ワーク作成部105と、前記プログラムネットワーク作
成部105の処理結果を用いてプログラムパス式を作成
するプログラムパス式作成部106と、前記プログラム
パス式作成部106の処理結果に含まれるサブルーチン
呼び出しをサブルーチンの内容に置き換えるサブルーチ
ン置換部107と、前記サブルーチン置換部107の処
理結果を用いてプログラムパス式をプログラムパスに展
開するプログラムパス式展開部108と、ルーチンごと
に求まったプログラムパス式を処理順序を考慮して連結
し、プログラムとしてのプログラムパスを生成するプロ
グラムパス連結部109と、前記プログラムパス連結部
109によって求められたプログラムパスからプログラ
ムのドメインを求めるプログラムパスドメイン取得部1
10と、前記プログラムパスドメイン取得部110によ
って求められたドメインからテストデータを生成するテ
ストデータ取得部111から構成されている。
【0013】この実施形態のテストデータ自動生成装置
は、具体的にはコンピュータで構成することができ、構
文解析部部103等の各部は対応する機能を実現するプ
ログラムによって構成することができるものである。ま
た、各部は、1つのコンピュータの内部に設ける構成だ
けでなく、複数台のコンピュータで作業を分担してテス
トデータを生成するように構成することもできる。
【0014】図2は、図1の実施形態の処理を説明する
ためのフローチャートである。本発明は、図2に示され
るように以下の処理から構成される。
【0015】ステップ201;構文解析処理112 構文解析部103が実行する処理である。端末101か
ら処理要求が出されると、構文解析部103によって、
ソースファイル102(例えばCOBOLソースファイ
ル)が読み込まれ、図3に示すように、構文木121が
生成され、同時にプログラム中に含まれる各変数ごとの
情報を持つ変数情報124とそれを表にした変数情報テ
ーブル122と、プログラム中に現れる各ルーチンごと
の情報を持つルーチン情報125とそれを表にしたルー
チン情報テーブル123が生成される。このとき、必要
により、インクルードファイルが展開される。
【0016】ステップ202;波及効果解析処理113 構文木121と変数情報テーブル122を使ってユーザ
によって指定された変数についての波及効果解析が行な
われる。この処理を行なうことにより、最終的に得られ
るプログラムパスの数を軽減することができる。
【0017】ステップ203;プログラムネットワーク
作成処理114 上記波及効果解析処理113までに生成された構文木1
21を先行順で辿り、すべてのルーチン(メインルーチ
ンおよびサブルーチン)の単位でプログラムネットワー
クを生成する。ネットワーク生成の処理自体は、特願平
8−216328号に記載の技術を用いて行う。プログ
ラムネットワークにはルーチン識別番号が付けられ、こ
のルーチン識別番号とルーチン名との対応を記憶するル
ーチン識別テーブルが生成される。
【0018】ステップ204;プログラムパス式作成処
理115 プログラムネットワークからプログラム連結行列を取得
し、プログラム連結行列からプログラムパス式作成処理
を用いてルーチン毎のプログラムパス式を生成する。生
成の処理は、特願平8−216328号に記載の技術を
用いて行う。
【0019】ステップ205;サブルーチン置換処理1
16 プログラムパス式中にサブルーチン呼び出しがあるか調
べ、存在すれば、対応するサブルーチンのサブルーチン
名からルーチン識別番号を検索し、対応するプログラム
パス式で置き換える。
【0020】ステップ206;プログラムパス式展開処
理117 サブルーチン置換手段で処理されたプログラムパス式を
展開し、ルーチンごとのプログラムパスのリストに変換
する。
【0021】ステップ207;プログラムパスリスト連
結処理118 上記の処理で生成されたルーチンごとのプログラムパス
を処理の順序を考慮して連結し、プログラムに含まれる
プログラムパスをすべて算出する。
【0022】ステップ208;プログラムパスドメイン
取得処理119 プログラムパスリストからプログラムパスを1つ取り出
し、そのプログラムパスについてのプログラムドメイン
を取得する。
【0023】ステップ209;テストデータ取得処理1
20 プログラムドメインからそのドメインに含まれるテスト
データを生成する。
【0024】すべてのプログラムパスを処理するまで、
プログラムドメイン取得処理、テストデータ取得処理を
繰り返す。テストデータ生成の処理は、特願平8−21
6328号に記載の技術を用いて行う。
【0025】次に、本発明の特徴となる技術について図
面を用いて説明する。なお、ここで詳述しない処理につ
いては、特願平8−216328号に記載の技術を用い
て行う。
【0026】図4は、波及効果解析手段104の構成と
データの流れを示したものである。図5および図6に波
及効果解析手段104の実行手順のフローチャートを示
す。
【0027】まず、端末101より指定された波及効果
解析対象とする変数を変数エリア230に設定する(ス
テップ501)。構文木生成手段103において構文木
解析処理を実行し、自分が利用する構文木121と変数
情報テーブル122を取得する(ステップ502)。構
文木121には、プログラム中に現れる変数に対応する
ノードに、その変数が参照されているのか、更新されて
いるのかを示すフラグが設定されている。また、構文木
121の葉のノードには、ノードが持つトークンのソー
スファイル上での位置が設定されている。
【0028】変数情報テーブル122は、各変数につい
ての変数情報124の表で、図3に示したように変数
名、変数の大きさ、レベル番号、上位の変数情報、下位
の変数情報、再定義情報、別名情報、出現位置情報等の
情報を含んでいる。
【0029】変数の大きさとは、その変数が値を記憶す
るのに使用する記憶領域の大きさのことであり、レベル
番号とは、変数間の上位下位の関係を判断するための番
号で、レベル番号の大きな変数は、より小さなレベル番
号の変数に従属する下位の変数となる。上位の変数情報
とは、ある変数が直接に従属している上位の変数の変数
情報124を指すポインタのことであり、下位の変数情
報とは、ある変数が直接に包含している下位の変数の変
数情報124を指すポインタのことである。再定義情報
とは、ある変数が占有している領域を別の変数が別の階
層構造をもって再定義しているとき、その再定義してい
る変数の変数情報124を指すポインタのことである。
【0030】別名情報とは、占有している記憶領域が隣
接している複数の変数をひとまとめにして別名が定義さ
れているときに、別名として定義された変数が直接に包
含している下位の変数の変数情報124を指すポインタ
のことである。
【0031】次に、波及効果解析手段が、生成された構
文木121を処理順に辿って、図7に示すような制御構
造の木231を生成する(ステップ503)。この木2
31の各ノードには探索順に文識別番号232が付けら
れ、分岐命令によって入れ子になっている文には、その
文が属する分岐を識別する分岐識別番号233も付けら
れる。
【0032】次に、変数情報テーブル122を使って、
変数エリア230に登録されている変数と、記憶領域の
すべてまたは一部を共有している変数をすべて取得し、
得られた変数を変数エリア230に登録されている変数
とあわせて変数リスト234に登録する(ステップ50
4)。
【0033】また、次に、リストの要素が空である、文
リスト235を用意する(ステップ505)。次に、リ
ストの要素が空である、文リスト236を用意する(ス
テップ506)。次に、変数リスト234より、変数を
1つ取り出し、変数エリア237に設定する(ステップ
507)。
【0034】変数エリア237に登録されている変数が
使用されているすべての文を、変数情報122の出現位
置情報を参照して取得し、文リスト236へ登録する
(ステップ508)。
【0035】変数リスト234に含まれるすべての変数
に対してステップ507,508の処理を行い、文リス
ト236に、変数エリア230に登録されている変数に
関連する変数が使用されている文を取得する。
【0036】次に、変数エリア230に登録されている
変数の記憶領域全体を共有しているすべての変数を取得
し、変数リスト238に登録する(ステップ509)。
【0037】次に、文リスト236に含まれる文を、文
識別番号の昇順にソートする(ステップ510)。次
に、空の文リスト239を用意する(ステップ51
1)。次に、変数リスト238中に登録されている変数
が新規に代入される文を文リスト236の先頭から検索
する(ステップ512,513)。
【0038】検索の結果、そのような文が見つかれば、
見つかった文のうちで、最も若い識別番号の文の識別番
号を取得する。分岐が存在していれば、分岐識別番号も
参照して、各分岐毎に最も若い識別番号の文の識別番号
を取得し、それより若い文識別番号を持つ文を抜き出
す。抜き出した文は文リスト236の中から破棄し、文
リスト239に登録する(ステップ514)。
【0039】もし、検索の結果、変数リスト238中の
変数が新規に代入される文が文リスト236の中に見つ
からなければ、リストの終わりまでの文をすべて抜き出
す。抜き出した文はリスト236の中から破棄し、文リ
スト239に登録する(ステップ515)。
【0040】次に、リストの要素が空である、変数リス
ト240を用意する(ステップ516)。
【0041】次に、文リスト239から文を1つ読む
(図6のステップ517)。変数リスト234に登録さ
れている変数を1つずつ取り出して、変数エリア237
に設定する。そして、ステップ516で取り出した文の
中に、変数エリア237に格納されている変数が影響を
与える変数がないか調べる。変数リスト234に登録さ
れている変数が影響を与える変数としては、変数237
に登録されている変数によって直接更新される変数だけ
でなく、その変数と記憶領域の一部分でも共有している
変数も含まれる(ステップ518,519)。
【0042】そのような変数が、抜き出した文の中に含
まれていれば、該当する変数を変数リスト240に登録
する(ステップ520)。
【0043】上記のステップ517,518,519,
520の処理を文リスト239中の文すべてについて行
う。
【0044】次に、文リスト239の内容を文リスト2
35に追加登録して、文リスト239を破棄する(ステ
ップ521)。
【0045】次に、変数リスト240が空でないかを調
べる。空であれば、ソースファイル102中の波及効果
のある変数をすべて検索したとして次のステップ52
3,524の処理を行う。
【0046】まず、文リスト235中の文のダブりを取
り除く(ステップ523)。次に、文リスト235中に
存在していない文に相当する構文木121の部分木を削
除し、文リスト235を破棄し(ステップ524)、波
及効果解析処理を終了する。
【0047】もし、変数スト240が空でなければ、文
リスト236が空かどうか調べる(ステップ525)。
【0048】空でなければ、ステップ511に戻って、
文リスト236中の残りの文についても、波及範囲の検
索を続ける。
【0049】空であれば、1次の波及効果解析が終了し
たとして、さらに高次の波及効果解析処理の準備をす
る。すなわち、変数リスト240の内容を変数リスト2
34に複写し、変数リスト240を破棄して、処理20
7,208のループの先頭に戻る(ステップ526)。
【0050】このようにしてプログラムネットワーク作
成処理で使用する、波及効果解析済みの構文木を生成す
る。
【0051】次に、サブルーチン置換部107の処理を
説明する。
【0052】本実施形態で対象としているCOBOL言
語の場合、段落という手続きのまとまりが存在するが、
データ項目がグローバルであるなど、C言語の関数など
に比べて独立性が高くなく、それだけで意味のあるまと
まりとしてしまうのは無理があり、C言語の関数のよう
にそこだけを取り出してテストの対象とすることは出来
ない。
【0053】そこで、そのような言語にも対応できるよ
うに、サブルーチン毎にプログラムパス式を取得してお
いて、必要に応じて連結してプログラムとしてのプログ
ラムパス式を生成するようにする。このため、サブルー
チン毎に生成されるプログラムパス式は、特願平8−2
16328号のように文字列形式にした後に、Lisp
言語で処理するのではなく、置き換えに便利なように図
8(a)のようなプログラムパス式の木302として取
得する。
【0054】この式の木302は2分木であり、各ノー
ドは、そのノードが何を表すかを示す値(ラベル)と、
左右の子どものノードへのリンクを持つ。図8(a)中
で、プログラムパス式の木302の葉のノードは、ソー
スファイル中の処理を示しており、そのノードの値は、
それぞれ対象ソースファイル中の対応している処理に付
けられたラベルである。中間節で、ノードのラベルとし
て「*」(アスタリスク)を持つノードは、連接の制御構
造があることを表し、左の子のノードのラベルに対応す
る処理の後に続いて、右の子のノードのラベルに対応す
る処理が実行されることを表す。また、ノードのラベル
として、「+」(プラス記号)を持つノードは、選択の制
御構造があることを示し、左の子のノードのラベルが示
す処理か、右の子のノードのラベルが示す処理のどちら
かが実行されることを示す。なお、ループの制御構造に
ついては、繰り返し回数が直接数値としてソースファイ
ル上に与えられている場合は、その回数分、ループの中
身を展開する。そうでない場合は、ユーザによって指定
された回数をループの繰り返しの上限としてループの内
容を展開する。例えば、ユーザによって、最大繰り返し
回数が2回と指定された場合、ループの内容が1回も実
行されない処理と、1回実行される処理と、2回実行さ
れる処理の選択の制御構造として展開する。
【0055】サブルーチン置換処理は、再帰呼び出しを
無限に展開するのを防ぐための再帰呼び出し管理スタッ
クを持つ。
【0056】図8および図9に、サブルーチンの置き換
えの様子を示す。図8(a)はサブルーチン呼び出しを
含むプログラムパス式の木302で、図中のプログラム
パス式301に対応するプログラムパス式の木である。
ノード303はサブルーチンコールに対応するノードで
ある。図8(b)は、ノード303で呼ばれるサブルー
チンのプログラムパス式の木304である。図9のプロ
グラムパス式の木305は、サブルーチンが置き換えら
れた後のプログラムパス式の木302である。
【0057】図10は、サブルーチン置換処理のフロー
チャートである。
【0058】まず、サブルーチンごとに求められたプロ
グラムパス式の木302をポストオーダーに検索し、サ
ブルーチン呼び出しのノードを検索する。次に、探索中
のノード303のラベル306を取得し、ラベルの表す
内容がサブルーチンコールか調べる(ステップ801,
802)。
【0059】ラベルの表す内容がサブルーチンコールで
あった場合、まず、再帰呼び出し管理スタックの中身を
調べて、ラベル306の登録されている回数を調べる
(ステップ803)。ここで、登録回数がユーザの指定
した回数以下であれば、再帰呼び出し管理スタックにラ
ベル306をプッシュする(ステップ804,80
5)。
【0060】次に、ルーチン情報テーブル123とルー
チン識別テーブルから、置き換え先のサブルーチンのプ
ログラムパス式の木304(図8(b))を特定し、そ
れを複製したプログラムパス式の木A(図示しない)を
用意して、ノード303と置き換える(ステップ80
6)。
【0061】ルーチン情報テーブル123は、各ルーチ
ンのルーチン情報125の表であり、ルーチン情報12
5は、図3に示したようにルーチン名、ルーチンの種
別、定義位置情報、所属ルーチン情報、包含ルーチン情
報、呼び出し先ルーチン情報、呼び出し元ルーチン情報
等の情報を含んでいる。
【0062】ルーチンの種別は、COBOL言語のよう
にルーチンが節、段落という階層構造を持つ場合、ルー
チンが節であるのか、段落であるのかというルーチンの
種別を表す。定義位置情報は、ルーチンが定義されてい
る位置の情報である。所属ルーチン情報は、自ルーチン
が属している、上の階層のルーチンのルーチン情報への
ポインタであり、包含ルーチン情報は、自ルーチンの下
位の階層のルーチンのルーチン情報へのポインタであ
る。呼び出し先ルーチン情報は、自ルーチンが呼び出す
ルーチンのルーチン情報へのポインタであり、呼び出し
元ルーチン情報は、自ルーチンを呼び出すルーチンのル
ーチン情報へのポインタである。
【0063】ルーチン識別テーブルは、各ルーチン毎
に、そのルーチンのプログラムネットワークの番号と、
ルーチン名を要素に持つテーブルで、サブルーチン呼び
出し命令に記述されているサブルーチン名から対応する
ルーチン単位のプログラムネットワークの識別番号を検
索して、対応するルーチンのプログラムネットワークを
識別する。
【0064】次に、ノード303の代わりに置き換えら
れたプログラムパス式の木A(図示しない)の内部を検
索し、展開を続ける(ステップ807)。プログラムパ
ス式の木A(図示しない)のノードをすべて検索、展開
し終えたら、ノード303に関する展開は終了したとし
て、処理315で、再帰呼び出し管理スタックから要素
を1つポップして、ノード303の展開を終了する(ス
テップ808)。
【0065】もし、ノード303のラベル306の登録
されている回数が、ユーザの指定した回数を超えていれ
ば、ノード303に無効なノードであることを示すマー
クを付け、ノード303についての処理の終わりとする
(ステップ809)。
【0066】このようにして、図8(a),図8
(b),図9のように呼び出し先のサブルーチンに該当
するプログラムパス式の木を、サブルーチン呼び出しを
示すプログラムパス式の木のノードと置き換える。プロ
グラムパス式を文字列の式で得るのではなく、式の木に
することで、置き換えは、単純な2分木のつなぎ替えと
することができる。
【0067】次に、プログラムパス式展開部108の処
理について説明する。
【0068】サブルーチン置換部107によって取得さ
れたプログラムパス式は、式の木の形をしているので、
プログラムパス式展開部108では、これを展開し、ル
ーチン内のすべてのプログラムパスを取得してリストに
する。展開は、2分木の探索を基本にして再帰的に行
う。
【0069】プログラムパス式展開部108は、分岐位
置を記憶する分岐スタックと、展開中のプログラムパス
を保持する展開バッファを持つ。分岐スタックには、処
理の分岐のノードの位置を表す分岐位置情報と、進んだ
方向を現す分岐選択情報が保存される。
【0070】プログラムパス式展開処理のフローチャー
トを図11〜図13に示す。展開の方法を図8(b)の
プログラムパス式の木を例にとって説明する。
【0071】展開は、式の木を左の子のノードを先にし
て先行順で探索することで行う。探索しながら、ノード
のラベルを読み(ステップ901)、無効マークのない
葉のノードのラベルを展開バッファに書き込む(ステッ
プ905)。もし、探索中のノードのラベルが「*」
(アスタリスク)である場合には(ステップ903)、
処理の連接をあらわすので、そのノードの左の部分木の
後に、右の部分木の展開処理を行う(ステップ906,
907)。また、探索中のノードに無効マークが設定さ
れていれば、そのノードは無視する(ステップ90
4)。図8(b)中のノード331まで探索したところ
で、選択の制御構造を表すノードに出会う(ステップ9
02)。ここで、分岐スタックに、ノード331の情報
が登録されていないか調べる(ステップ908)。しか
し、まだ分岐スタックは空なので、ノード331の情報
は未登録である。そこで、次に探索すべきノードを、左
右の子のノードの中から選択し、このノードのラベル
と、選択された向きを分岐スタックに格納する(図13
のステップ913)。分岐のノードでは、最初の探索で
は、左の子のノードの方へ探索を進め、2度目の探索で
は右の子のノードの方へ進むようする。ここでは、ノー
ド331からは左のノード、すなわち、ノード332の
方に進んで、ノード332を根とする部分木の展開処理
を続ける(ステップ914)。同様にして、1回目のプ
ログラムパス式の木の探索を終えると、探索経路は、3
21→322→323→324→325→326→32
7→328→329→330→331→332→334
→335→336となり、分岐スタックには(331,
‘L’)−(335,‘L’)と格納される。展開バッ
ファには、[s/][t/][u/][v/][w/]
[y/][z/]というプログラムパスが生成されてい
る。こうして、1つめの展開されたプログラムパスを得
る(図12のステップ915)。
【0072】さらに、次のプログラムパスを求めるた
め、分岐スタックのトップの要素の分岐選択情報を読み
(ステップ916)、まだ進むべき方向が残っているか
調べる(ステップ917)。このとき、分岐バッファの
最後に登録された要素は、(335,‘L’)であるの
で、まだ右へ進むことが出来る。そこで、最初のプログ
ラムパスの展開と同様にして、式の木をルートから先行
順で探索する。
【0073】ノード331まで探索したところで、選択
の制御構造を表すノードに出会う(ステップ902)。
ここで、分岐スタックに、ノード331の情報が登録さ
れていないか調べると、登録されているが、最後に登録
された要素ではないので、前回進んだ向き、すなわち、
左の子の部分木の展開を行う(図13のステップ90
8,909,910)。
【0074】さらに、探索を続け、ノード335まで探
索したところで、選択の制御構造を表すノードに出会う
(ステップ902)。ここで、分岐スタックに、ノード
335の情報が登録されていないか調べると、ノード3
35の情報は分岐スタックに登録されていて、最後に登
録された要素であるので、その分岐選択情報を‘R’に
書き換えて、ノード335からは右のノード、すなわち
ノード337へ進む(ステップ908,909,91
1,912)。同様にして、2回目のプログラムパス式
の木の探索を終えると、探索経路は、321→322→
323→324→325→326→327→328→3
29→330→331→332→334→335→33
7となり、分岐スタックには、(331,‘L’)−
(335,‘R’)と格納されている。展開バッファに
は、プログラムパス[s/][t/][u/][v/]
[w/][y/][0.]を得る(図12のステップ9
15)。
【0075】さらに、次のプログラムパスを求めるた
め、分岐スタックの最後に登録された要素の分岐選択情
報を読み(ステップ916)、まだ進むべき方向が残っ
ているか調べる(ステップ917)。このとき、分岐バ
ッファの最後に登録された要素は、(335,‘R’)
であるが、ノード335については、すでに両方とも進
んでしまっている。そこで、この要素をポップ(ステッ
プ918)して、分岐スタックから取り除く。次に、分
岐スタックが空か調べる(ステップ919)と、まだ空
でないので、最初のプログラムパスの展開と同様にし
て、式の木をルートから先行順で探索する。
【0076】ノード331まで探索したところで、選択
の制御構造を表すノードに出会う(ステップ902)。
【0077】そこで、分岐スタックに、ノード331の
情報が登録されていないか調べると、分岐スタックの最
後の登録された要素であるので、その分岐選択情報を
‘R’に書き換えて、ノード331からは右のノード、
すなわちノード333へ進む(ステップ908,90
9,911,912)。同様にして、3回目のプログラ
ムパス式の木の探索を終えると、探索経路は、321→
322→323→324→325→326→327→3
28→329→330→331→333→334→33
5→336となり、分岐スタックには、(331,
‘R’)−(335,‘L’)と格納される。展開バッ
ファには、プログラムパス[s/][t/][u/]
[v/][x/][y/][z/]を得る(ステップ9
15)。
【0078】さらに、次のプログラムパスを求めるた
め、分岐スタックのトップの要素の分岐選択情報を読み
(ステップ916)、まだ進むべき方向が残っているか
調べる(ステップ917)。このとき、分岐バッファの
トップの要素は、(335,‘L’)であるので、まだ
右へ進むことが出来る。そこで、最初のプログラムパス
の展開と同様にして、式の木をルートから先行順で探索
する。
【0079】ノード331まで探索したところで、選択
の制御構造を表すノードに出会う(ステップ902)。
ここで、分岐スタックに、ノード331の位置が登録さ
れていないか調べると、ノード331は分岐スタックに
登録されているが、最後に登録された要素でないので、
前回進んだ向き、すなわち、左へに進む(図13のステ
ップ908,909,910)。
【0080】さらに、探索を続け、ノード335まで探
索したところで、選択の制御構造を表すノードに出会
う。ここで、分岐スタックに、ノード335の位置が登
録されていないか調べる。このとき、ノード335は分
岐スタックのスタックトップに登録されているので、そ
の分岐選択情報を‘R’に書き換えて、ノード335か
らは右のノード、すなわちノード337へ進む(ステッ
プ908,909,911,912)。同様にして、4
回目のプログラムパス式の木の探索を終えると、探索経
路は、321→322→323→324→325→32
6→327→328→329→330→331→333
→334→335→337となり、分岐スタックには、
(331,‘R’)−(335,‘R’)と格納され
る。展開バッファには、プログラムパス[s/][t
/][u/][v/][x/][y/][0.]を得る
(ステップ915)。
【0081】次に、分岐スタックのトップの分岐選択情
報を読み(ステップ916)、まだ進むべき方向が残っ
ているか調べる(ステップ917)と、ノード335の
子のノードは両方とも探索されたので、進むべきノード
がないとして、分岐スタックから要素を1つポップして
捨てる(ステップ918)。さらに、分岐スタックのト
ップの分岐選択情報をよみ、まだ進むべき方向が残って
いるか調べる。ノード331についても、すでに両方の
子のノードをたどっているので、進むべき方向はないと
して、分岐スタック401から要素を1つポップして捨
てる(ステップ918)。その結果、分岐スタックは空
になっているので、すべての分岐を探索し終えたと判断
して(ステップ919)、展開作業を終了する。
【0082】次に、プログラムパス連結部109の処理
について説明する。
【0083】前記プログラムパス式展開部108によっ
て、ルーチンごとのプログラムパス式は展開されて、ル
ーチンごとのプログラムパスリストとして取得されてい
る。
【0084】プログラムパス式連結処理では、それらの
ルーチンごとのプログラムパスリストを、ジャンプ命令
を考慮しながら連結する。プログラムパス連結処理は、
連結中のプログラムパスを記憶するための連結バッファ
を持つ。連結の手順を以下に示す。
【0085】図14に示すように、ルーチンA501に
はl個のプログラムパス514があり、ルーチンB50
2にはm個のプログラムパス514があり、ルーチンC
504にはn個のプログラムパス514があるとする。
【0086】このとき、これらのルーチン間にジャンプ
命令が存在しなければ、ルーチンA501のパス504
→ルーチンB502のパス507→ルーチンC503の
パス509、ルーチンA501のパス504→ルーチン
B502のパス507→ルーチンC503のパス51
0、という具合にすべての組み合わせを求めて連結され
たプログラムパスを求める。連結途中で、プログラムパ
ス514の最後のラベルがプログラムを終了させる命令
であった場合、そのパスの連結作業をそこで終わる。
【0087】ルーチンA501のプログラムパスのうち
で、パス505のようにプログラムパスの最後のラベル
がジャンプ命令である場合には、まず、その飛び先のル
ーチンのルーチン識別番号をルーチン情報テーブル12
3、ルーチン識別テーブルを用いて特定する。
【0088】そのルーチン識別番号513が、ルーチン
A501の識別番号511より大きいならば、前方ジャ
ンプであるので、ルーチンA501のパス505→ルー
チンC503のパス509、ルーチンA501のパス5
05→ルーチンC503のパス510という具合に連結
する。
【0089】もし、図14の下の図のように、特定され
たルーチン識別番号525がルーチンA517の識別番
号527より小さいなら、後方ジャンプと判定し、無限
に連結するのを防ぐために、以下のチェックを入れる。
すなわち、連結バッファの中に含まれる、いま検出した
ジャンプ命令のラベルが幾つあるか数え上げ、ユーザに
よって指定された繰り返しの上限値に達しているか調べ
る。
【0090】上限値に達していれば、現在連結している
プログラムパスを破棄し、次のプログラムパスの展開に
移る。達していなければ、連結先のルーチンに戻って連
結を続ける。
【0091】このようにして、すべてのルーチンのプロ
グラムパスを連結し、プログラムとしてのプログラムパ
スリストを得る。
【0092】次に、プログラムパスドメイン取得部11
0の説明をする。
【0093】プログラムドメイン取得処理では、プログ
ラムパス式連結処理で求められたプログラムパスリスト
の1つ1つのプログラムパス620それぞれについて、
図15および図16のフローチャートにしたがって、以
下の手順によってプログラムドメインを取得する。図1
7に簡単な実行例を示す。
【0094】まず、式の木のキュー621を用意する
(ステップ1101)。そして、プログラムパスのラベ
ルをすべて読むまで、以下の処理を繰り返す。
【0095】まず、プログラムパスのラベルに対応する
処理を構文木121(図3)を参照して調べ、処理がデ
ータ転記、演算命令、条件判定式を処理内容かどうかを
判定する(ステップ1102,1103)。そうであれ
ば、図17に示すような処理に対応する代入式、条件式
の式の木622を作成する(ステップ1104)。この
とき、COBOL言語の命令のように、直接、代入式の
形で記述されていないものは、言語の文法にしたがって
解析し、単独の、あるいは複数の代入式に変換して式の
木を作成する。また、条件名を使って条件判定式が書か
れている場合も、実際に判定される条件式に変換してか
ら式の木を作成する。否定演算子が条件式中に含まれる
場合は、論理演算子や比較演算子を適当に変換して、否
定演算子を含まない条件式に変換する。また、列挙定数
名が使われていれば、それが示す定数値に変換する。
【0096】さらに、生成された式の木622の中に変
数を使っている個所があるか検索し、変数を検出した場
合、その変数名をデータ項目情報テーブル122中の情
報を使って、変数が配置されるデータ領域の先頭からの
オフセットと、その変数が占有する記憶領域の大きさの
2つの数値を用いたシンボル名623に変換する(ステ
ップ1105)。
【0097】その後、ステップ1104,1105で生
成された式の木を式の木のキュー621に格納する(ス
テップ1106)。
【0098】なお、データ転記、演算命令、条件判定式
を処理内容として表すラベルでないものは無視する。
【0099】次に、得られた式の木のキュー621か
ら、プログラムパスのドメインを取得する。
【0100】まず、式の木のキュー621から式の木6
22を一つ取り出す(ステップ1107)。取り出した
式の木が代入文であった時に行う処理の手順を以下に示
す。
【0101】まず、取り出した代入文の左辺にあるシン
ボル名623(図17)を取得する(ステップ110
9)。
【0102】次に、式の木のキュー621をデキューせ
ずに先読みして、シンボル名623が表す変数の占有し
ている記憶領域の全部または一部を最初に更新している
式の木624(図17)を特定する(ステップ111
0,1111)。この際、式の木624の更新されてい
る変数が、シンボル名623が表す変数と記憶領域の全
部、あるいは、一部を共有しているかどうかの判定は、
更新されている変数のシンボル名中のオフセット値が、
シンボル名623の表す変数の占有する記憶領域に含ま
れるかどうかで判定する。
【0103】次に、キューの先頭から式の木624まで
の式の木を1つずつ読み、その式の木が表す代入式の右
辺、または条件判定式の中に、シンボル名623、また
はシンボル名623が表す変数の占有している記憶領域
全体を共有している変数のシンボル名がないか調べ、あ
れば、それを代入文の式の木624の右辺で置き換える
(ステップ1112)。
【0104】もし、式の木624が見つからなければ、
処理611で、式の木のキュー621全体の式の木に対
して、先頭から順に上記の調査、置き換えを行う(ステ
ップ1113)。
【0105】置き換えを行った後、代入文の式の木62
2を破棄する(ステップ1114)。
【0106】次に、取り出した式の木が条件判定式であ
った場合は、ドメインの制約条件として、制約条件リス
ト625に加え、式の木のキュー621から破棄する
(ステップ1115)。
【0107】以上のステップ1107〜1115を式の
木のキュー621が空になるまで繰り返したとき、制約
条件リスト625中に格納されている制約条件の組が、
注目しているプログラムのドメインの1つを与える。
【0108】さらに、制約条件リスト625から制約条
件式を1つ読み(図16のステップ1116)、取り出
した制約条件式を評価する(ステップ1117,111
8)。
【0109】すべての制約条件について、評価結果が真
または評価不能であれば、有効なパスとして登録する
(ステップ1120)。評価した結果が1つでも、偽で
あった場合は、矛盾した制約条件を持つパスであるとし
て、パスを破棄する(ステップ1121)。
【0110】以上の処理をプログラムパスリストのプロ
グラムパス1つ1つについて行い、プログラムパスリス
トの1つ1つのプログラムパスそれぞれについてそのパ
スが実行されるための制約条件を求め、プログラムのド
メインを求める。
【0111】図18および図19は、解析前のソースプ
ログラムの例を示す図であり、図20は波及効果解析処
理後のソースプログラムの内容を示す図である。また、
図21〜図23は、波及効果解析処理後のソースプログ
ラムをある表計算ソフトに読み込ませて表形式にまとめ
た図であり、図21に矢印で示すようなプログラムパス
が存在することが表されている。
【0112】
【発明の効果】以上説明したように、本発明によれば、
ユーザが指定した変数に関する波及効果解析を行うこと
により、ユーザの関心のあるデータに関連する範囲を特
定することができ、そのデータの関連するプログラムパ
スについて、データと処理の面から解析し、ユーザが指
定した変数の条件に当てはまるテストデータを自動生成
することができる。これにより、デバッグや流用開発時
のプログラム理解の支援およびテストデータの決定を容
易にし、テストにかかる工数を削減できるといった優れ
た効果が得られる。
【図面の簡単な説明】
【図1】本発明のテストデータ自動生成装置の一実施形
態を示す機能構成図である。
【図2】本発明の処理の実行手順のフローチャートであ
る。
【図3】構文解析手段が生成するデータの概略を示す図
である。
【図4】波及効果解析部104の構成図である。
【図5】波及効果解析処理のフローチャートである。
【図6】図5の続きを示すフローチャートである。
【図7】波及効果解析手段で生成される制御構造の木の
例である。
【図8】プログラムパス式の木の例である。
【図9】プログラムパス式の木の例である。
【図10】サブルーチン置換処理のフローチャートであ
る。
【図11】プログラムパス式展開処理のフローチャート
である。
【図12】図11の続きを示すフローチャートである。
【図13】図12の続きを示すフローチャートである。
【図14】プログラムパス連結処理の説明の図である。
【図15】プログラムパスドメイン取得処理のフローチ
ャートである。
【図16】図15の続きを示すフローチャートである。
【図17】プログラムドメイン取得処理の簡単な例を示
す図である。
【図18】解析前ソースプログラムの例を示す図であ
る。
【図19】図18の続きを示す図である。
【図20】波及効果解析後のソースプログラムの例を示
す図である。
【図21】本発明を実施して得られる結果を、ある表計
算ソフトに読み込ませたものの一部を示す図である。
【図22】図21の続きを示す図である。
【図23】図22の続きを示す図である。
【符号の説明】
101…端末、102…ソースファイル、103…構文
解析部、104…波及効果解析部、105…プログラム
ネットワーク作成部、106…プログラムパス式作成
部、107…サブルーチン置換部、108…プログラム
パス式展開部、109…プログラムパス連結部、110
…プログラムドメイン取得部、111…テストデータ取
得部、121…構文木、122…変数情報テーブル、1
23…ルーチン情報テーブル、124…変数情報、12
5…ルーチン情報、230…ユーザによって指定された
波及効果解析の起点となる変数を記憶しておくためのエ
リア、231…制御構造の木、232…文識別番号、2
33…分岐識別番号、234…変数エリア230内の変
数と記憶領域を共有している変数のリスト、235…波
及範囲に含まれる文のリスト、240…変数リスト23
4中の変数から影響を受ける変数のリスト、301…プ
ログラムパス式、302…プログラムパス式の木306
…ラベル、621…プログラムパスから演算、代入、条
件判定式を取り出して式の木にしたキュー、622…式
の木のキュー621に含まれる式の木、623…データ
名をデータ領域の先頭からのオフセットとサイズで表し
たシンボル名、625…あるプログラムパスが実行され
るための入力データが満たすべき条件のリスト。
フロントページの続き (72)発明者 新居 健司 神奈川県横浜市中区尾上町6丁目81番地 日立ソフトウェアエンジニアリング株式会 社内

Claims (3)

    【特許請求の範囲】
  1. 【請求項1】 ソースプログラムを解析し、テストデー
    タを自動生成する装置において、 テストデータ生成対象のソースプログラムを解析し、構
    文木を作り、変数の階層構造と大きさと別名、再定義、
    サブルーチンの情報を収集する構文解析処理を行う構文
    解析手段と、 ユーザによって指定された変数の値の影響がソースプロ
    グラム内で波及する範囲を特定し、その部分を取り出す
    ための波及効果解析処理を行う波及効果解析手段と、 前記波及効果解析処理によって得られた解析結果を用
    い、ユーザによって指定された変数について、その変数
    が満たすべき条件を算出する条件算出手段と、 算出された条件に当てはまる変数のテストデータを自動
    生成する手段と、を有することを特徴とするソースプロ
    グラムのテストデータ自動生成装置。
  2. 【請求項2】 前記波及効果解析処理によって得られた
    解析結果を用い、ルーチン毎にプログラムネットワーク
    を作成するプログラムネットワーク作成処理を行うプロ
    グラムネットワーク作成手段と、 前記プログラムネットワークからプログラムパス式を生
    成するプログラムパス式生成処理を実行するプログラム
    パス式生成手段と、 サブルーチンコールが検出された場合、それをコール先
    のサブルーチンのプログラムパス式で置き換えるサブル
    ーチン置換処理を実行するサブルーチン置換手段と、 生成されたプログラムパス式を展開するプログラムパス
    式展開処理を実行するプログラムパス式展開手段と、 分割して求められたプログラムパスをプログラムの処理
    の流れにしたがって連結するプログラムパス連結処理を
    実行するプログラムパス連結手段とを備え、 前記条件算出手段は、連結されたプログラムパスからそ
    のプログラムパスが実行されるための変数の条件を算出
    することを特徴とする請求項1記載のプログラムのテス
    トデータ自動生成装置。
  3. 【請求項3】 プログラムパスの条件算出時に、変数名
    を、データ領域の先頭からのオフセットと、その変数が
    占有する領域の大きさの2つの数値を使ったシンボル名
    に変換することで、複数の変数が任意の記憶領域を共有
    している場合でも変数が満たすべき条件を算出する手段
    を有することを特徴とする請求項2記載のプログラムの
    テストデータ自動生成装置。
JP07555398A 1998-03-24 1998-03-24 プログラムのテストデータ自動生成装置 Expired - Fee Related JP3418544B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP07555398A JP3418544B2 (ja) 1998-03-24 1998-03-24 プログラムのテストデータ自動生成装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP07555398A JP3418544B2 (ja) 1998-03-24 1998-03-24 プログラムのテストデータ自動生成装置

Publications (2)

Publication Number Publication Date
JPH11272503A true JPH11272503A (ja) 1999-10-08
JP3418544B2 JP3418544B2 (ja) 2003-06-23

Family

ID=13579499

Family Applications (1)

Application Number Title Priority Date Filing Date
JP07555398A Expired - Fee Related JP3418544B2 (ja) 1998-03-24 1998-03-24 プログラムのテストデータ自動生成装置

Country Status (1)

Country Link
JP (1) JP3418544B2 (ja)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPWO2007072652A1 (ja) * 2005-12-22 2009-05-28 俊一 新原 プログラム処理パターン自動解析処理装置
JP2011191985A (ja) * 2010-03-15 2011-09-29 Fujitsu Ltd シンボリック実行支援プログラム、方法及び装置
JP2011248887A (ja) * 2010-05-24 2011-12-08 Fujitsu Ltd ソフトウェアモジュールのテスト方法及びシステム
JP2012068869A (ja) * 2010-09-22 2012-04-05 Fujitsu Ltd 繰返しシンボリック実行方法、プログラム及び装置
JP2013025716A (ja) * 2011-07-25 2013-02-04 Shinichi Ishida モジュールの構造解析を支援する装置及びプログラム
US9069892B2 (en) 2013-05-10 2015-06-30 International Business Machines Corporation Reducing false-positive errors in a software change-impact analysis
JP2018028879A (ja) * 2016-08-19 2018-02-22 日本電信電話株式会社 プログラム解析装置、プログラム解析方法およびプログラム解析プログラム

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5936135B2 (ja) 2013-03-22 2016-06-15 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation 情報処理装置、情報処理方法、及び、プログラム

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPWO2007072652A1 (ja) * 2005-12-22 2009-05-28 俊一 新原 プログラム処理パターン自動解析処理装置
JP2011191985A (ja) * 2010-03-15 2011-09-29 Fujitsu Ltd シンボリック実行支援プログラム、方法及び装置
JP2011248887A (ja) * 2010-05-24 2011-12-08 Fujitsu Ltd ソフトウェアモジュールのテスト方法及びシステム
JP2012068869A (ja) * 2010-09-22 2012-04-05 Fujitsu Ltd 繰返しシンボリック実行方法、プログラム及び装置
JP2013025716A (ja) * 2011-07-25 2013-02-04 Shinichi Ishida モジュールの構造解析を支援する装置及びプログラム
US9128807B2 (en) 2011-07-25 2015-09-08 Shinichi Ishida Module structural analysis supporting device and program
US9069892B2 (en) 2013-05-10 2015-06-30 International Business Machines Corporation Reducing false-positive errors in a software change-impact analysis
US9250890B2 (en) 2013-05-10 2016-02-02 Globalfoundries Inc. Optimizing performance of a computer system in response to a software change
JP2018028879A (ja) * 2016-08-19 2018-02-22 日本電信電話株式会社 プログラム解析装置、プログラム解析方法およびプログラム解析プログラム

Also Published As

Publication number Publication date
JP3418544B2 (ja) 2003-06-23

Similar Documents

Publication Publication Date Title
US8006229B2 (en) Program maintenance support device and program for the same
US20010037492A1 (en) Method and apparatus for automatically extracting verification models
US20020194223A1 (en) Computer programming language, system and method for building text analyzers
JPS6375835A (ja) 目的コ−ド、プログラム・リスト及び設計文書を生成する装置
CN109344230A (zh) 代码库文件生成、代码搜索、联结、优化以及移植方法
JPH08314728A (ja) ソースプログラムをオブジェクトプログラムに変換する方法および装置
CN109614329B (zh) 一种基于接口控制文件的软件测试用例辅助设计方法
CN108897572B (zh) 一种基于变量关联树的复杂类型重构方法
US7043720B2 (en) Mechanism for reformatting a simple source code statement into a compound source code statement
CN114692600B (zh) 使用子例程图谱进行形式语言处理的方法和系统
US5822592A (en) Method and system for determining source code location
CN108563561A (zh) 一种程序隐性约束提取方法及系统
JPH11272503A (ja) プログラムのテストデータ自動生成装置
US7073122B1 (en) Method and apparatus for extracting structured data from HTML pages
US20040268323A1 (en) Program converting method, program and storage medium
Koskimies et al. The design of a language processor generator
JPH11249903A (ja) 抽象構文木処理方法、抽象構文木処理プログラムを記録したコンピュータ読み取り可能な記録媒体、抽象構文木データを記録したコンピュータ読み取り可能な記録媒体、及び、抽象構文木処理装置
JP2008059515A (ja) プログラム実行過程の表示方法及びシステム並びにプログラム
US6055529A (en) Method, apparatus and computer program product for extracting known patterns from a data structure in a single pass
JP2001014311A (ja) 地名表現方法、地名文字列認識方法及び装置
JP3887550B2 (ja) クロスリファレンス構築装置、クロスリファレンス構築方法及びクロスリファレンス構築用プログラム
JP3166699B2 (ja) オブジェクト指向プログラム設計支援装置、方法および記録媒体
KR20030018720A (ko) 소프트웨어 유지보수를 위한 소스 코드 브라우저 자동생성 방법 및 시스템
KR20050065015A (ko) 프로그램의 복제 여부를 검사하는 방법 및 시스템
JPH0793144A (ja) プログラム解析装置

Legal Events

Date Code Title Description
R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090411

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120411

Year of fee payment: 9

LAPS Cancellation because of no payment of annual fees