JP2634011B2 - プログラムの修正による影響分析装置 - Google Patents

プログラムの修正による影響分析装置

Info

Publication number
JP2634011B2
JP2634011B2 JP4294610A JP29461092A JP2634011B2 JP 2634011 B2 JP2634011 B2 JP 2634011B2 JP 4294610 A JP4294610 A JP 4294610A JP 29461092 A JP29461092 A JP 29461092A JP 2634011 B2 JP2634011 B2 JP 2634011B2
Authority
JP
Japan
Prior art keywords
calculation
variable
calculation path
executed
variables
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
Application number
JP4294610A
Other languages
English (en)
Other versions
JPH06214764A (ja
Inventor
邦彰 直井
直久 高橋
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.)
Nippon Telegraph and Telephone Corp
Original Assignee
Nippon Telegraph and Telephone Corp
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 Nippon Telegraph and Telephone Corp filed Critical Nippon Telegraph and Telephone Corp
Priority to JP4294610A priority Critical patent/JP2634011B2/ja
Publication of JPH06214764A publication Critical patent/JPH06214764A/ja
Application granted granted Critical
Publication of JP2634011B2 publication Critical patent/JP2634011B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Landscapes

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

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明はプログラムに施した修正
の影響を分析する影響分析装置に関する。
【0002】
【従来の技術】あるコンピュータプログラムに修正を施
した場合、修正後のプログラムにおける各ステートメン
ト(文)に出現する変数の中には、修正を施したことに
よる影響が及ぶものがある。例えばあるステートメント
で「a:=1」となっていたところを「a:=5」と修正すれば、こ
のステートメントよりあとで実行されるステートメント
中に「d:=a」とあったとき、変数dにはプログラム修正の
影響が及ぶ。ここで、修正前とは異なるステートメント
の系列により値が定められるものを、修正による影響が
及ぶものと定義する。
【0003】従来より、プログラムに施した修正による
このような影響を分析する技術として、計算経路検出手
段と影響分析手段とを用いたものがある。図1は、従来
より使用されている、プログラムの修正による影響を分
析する装置(影響分析装置)の構成を示すブロック図で
ある。この影響分析装置50は、分析対象のプログラム
を格納する分析対象プログラム保持装置51に接続され
るものであって、プログラムの実行順序を検出する計算
経路検出手段52と、修正による影響を分析する影響分
析手段53と、全体の動作を制御する制御手段54とで
構成されている。
【0004】まず、用語の定義を以下に示す。 ・プログラムの計算経路 手続き型言語のプログラムにおいて、構文情報に従い実
行順序をたどることにより得られる文の系列を、プログ
ラムの計算経路と定義する。図2は、条件文を含むプロ
グラムの一例を示すものであって、このプログラム中の
手続きcalc_1には、ST11→ST12→ST13→ST14→ST15で表
わされる計算経路が含まれている。また、Console_inお
よびConsole_outの手続きは、それぞれ入力装置からの
データ入力、出力装置へのデータの出力を行なう手続
きである。
【0005】なお、本明細書の記述において、"ST"+数
字で表わされるものは、ステートメントを指示するもの
である。また、例示されるプログラムは、アルゴル系の
言語であってパスカル言語に類似している。call文で手
続き(procedure)が呼ばれ、":="で代入関係が示され
ている。また、if節の終端は、"endif"ではなく"fi"で
示されている。 ・変数間の依存関係 あるステートメント中のある変数に値を定義(代入)す
るために、同一ステートメント中の別の変数または定数
の値を参照する時、定義される変数は参照される変数ま
たは定数に依存すると呼ぶ。これを、参照される変数ま
たは定数から定義される変数への参照定義依存関係があ
ると定義する。例えば、図2の手続きcal_1中のステー
トメントST13において、参照される変数qから定義され
る変数sに、参照定義依存関係がある。
【0006】また、あるステートメント中のある変数の
値を参照する際、ある計算経路上でそのステートメント
に先立つ別のステートメント中で、参照する値をその変
数に定義している時、参照される変数は定義された変数
に依存すると呼ぶ。これを、定義された変数から参照さ
れる変数への定義参照依存関係があると定義する。例え
ば、図2の手続きcalc_1において、ステートメントST13
において定義される変数sから、ST15において参照され
る変数sへの定義参照依存関係がある。
【0007】さらに、参照定義依存関係と、定義参照依
存関係と、これらを組み合わせることによって得られる
変数間の関係とを、変数間の依存関係と定義する。例え
ば、図2の手続きcalc_1において、ステートメントST
13において参照される変数qからST13において定義され
る変数sへの参照定義依存関係と、ST13において定義
される変数sからST15において参照される変数sへの定
義参照依存関係と、ST15において参照される変数sか
らST15において定義される変数uへの参照定義依存関係
と、を組み合わせることによって、ST13において参照さ
れる変数qからST15において定義される変数uへの変数
間の依存関係が得られる。 ・影響が及ぶ そして、プログラムに修正を施した場合、修正後のプロ
グラムにおける各ステートメントに出現する変数のう
ち、修正前とは異なるステートメントの系列により値が
定められる変数について、修正による影響が及ぶと定義
する。
【0008】次に、図1に示した従来の影響分析装置5
0における計算経路検出手段52および影響分析手段5
3が果たすべき機能について、説明する。 ・計算経路検出手段52 計算経路検出手段52では、実際に実行される可能性の
ある計算経路を求める。すなわち、計算経路に条件文
(if文)が現われるたびに各分岐に対応した文の系列を
それぞれたどることにより、計算経路を求める。例えば
図2の手続きcalc_1に対してこの計算経路検出手段52
を適用すると、計算経路がステートメントST11からST12
とST13とを経由してST14に到達した際、ST15とST16とへ
の計算経路をそれぞれたどる。 ・影響分析手段53 影響分析手段53では、ある修正による影響が及ぶ変数
の集合を求める。すなわち、まず、与えられた計算経路
のうち施した修正部分を経由するものを検出し、次に、
検出した各計算経路について、それぞれを実行する時に
発生する参照定義依存関係と定義参照依存関係とを求
め、最後に、求めたすべての参照定義依存関係と定義参
照依存関係とより得られる変数間の依存関係から、修正
による影響を受ける可能性のある変数の集合を求める。
例えば、図2の手続きcalc_1に対して、ステートメント
ST13の変数sに定義する値を修正した場合を考える。こ
の影響分析手段53を用いると、次に示す通り影響が及
ぶ変数の集合を求めることができる。
【0009】まず、ST13を経由する計算経路として、
「ST11→ST12→ST13→ST14→ST15」(計算経路1)と、
「ST11→ST12→ST13→ST14→ST16」(計算経路2)とを
得る。次に、参照定義依存関係と定義参照依存関係とを
得る。得られた関係の一部を以下に示すと、計算経路
1を実行する時に発生する関係としては、ST13の変数q
からST13の変数sへと、ST15の変数sからST15の変数u
へとの参照定義依存関係と、ST13の変数sからST15の変
数sへの定義参照依存関係があり、計算経路2を実行
する時に発生する関係としては、ST13の変数qからST13
の変数sへと、ST16の変数sからST16の変数vへとの参
照定義依存関係と、ST13の変数sからST16の変数sへの
定義参照依存関係がある。
【0010】そして、修正による影響を受ける可能性の
ある変数の集合を得る。変数間の依存関係は、両計算経
路に対する参照定義依存関係と定義参照依存関係とから
得ることができる。得られた変数間の依存関係より、ST
13で値が定義される変数sに依存する変数の集合を得
る。図2の手続きcalc_1の場合、この変数の集合は、ST
15で参照される変数sと、ST15で定義される変数uと、
ST16で参照される変数sと、ST16で定義される変数vと
からなり、これらの変数には、ST13に対する修正の影響
が及ぶ可能性がある。
【0011】次に、このような機能を果たす計算経路検
出手段52と影響分析手段53とを実現する従来の方法
について説明する。
【0012】(1)計算経路検出手段52の実現例 計算経路検出手段52において、新しくたどるべき計算
経路がなくなるまで、次のルールR101とR102とを繰り返
し適用することによって、実行される可能性のある計算
経路を求める。なお、startという仮想ステートメント
から最初のステートメントへの計算経路と、計算経路の
最後のステートメントからendという仮想ステートメン
トへの計算経路とを導入する。 ・直進ルール(R101) 計算経路が到達するステートメントが分岐をもたらす
文でなければ、引き続き次のステートメントまでの計
算経路をたどる。 ・分岐ルール(R102) 計算経路が到達するステートメントが分岐をもたらす
文であれば、引続き分岐に対応する両方の計算経路を
たどる。
【0013】このような計算経路検出手段52の構成例
が図3に示されている。すなわちこの計算経路検出手段
52は、入力したプログラムを保持する入力プログラム
保持手段52a、直進ルールを適用するための直進ルー
ル適用手段52b、分岐ルールを適用するための分岐ル
ール適用手段52c、すでに検出した計算経路を保持す
る検出済計算経路保持手段52d、全体の制御を行なう
計算経路分析制御手段52eとによって構成されてい
る。
【0014】ここで、図2の手続きcalc_1に対して、上
記各ルール適用した例を示す。また、求められた計算
経路P1011とP1012を図4に示す。なお、計算経路が経由
するステートメントの番号を、ST11の例に従って表記す
る。すると計算経路P1011は、「start→ST11→(R101)→
ST12→(R101)→ST13→(R101)→ST14→(R102)→ST15→en
d」となり、計算経路P1012は、「start→ST11→(R101)
→ST12→(R101)ST13→(R101)→ST14→(R102)→ST16→
end」となる。ここで(R101),(R102)は、どちらのルール
を適用したかを示すものである。これら計算経路P1011,
P1012を検討すると、startから始まりST11に到達した
計算経路は、R101を適用することによってST12に到達す
ることがいえ、同様に、ST13とST14とへ到達すること
がR101を適用することによっていえ、さらに、start
から始まり、ST11、ST12、ST13を経由してST14に到達し
た計算経路は、R102を適用することによってST15とST16
の両方に到達することがいえる。
【0015】同様に、図5に示される手続きcalc_2に対
して上記各ルール適用した例を以下に示す。手続きca
lc_2は条件文を2つ含むものである。求めた計算経路P1
021〜P1024を図6に示す。図示されるように、計算経
路P1021は「start→ST21→(R102)→ST22→(R101)→ST24
→(R101)→ST25→(R102)→ST26→(R101)→ST27→end」
で表わされ、計算経路P1022は「start→ST21→(R102)
→ST22→(R101)→ST24→(R101)→ST25→(R102)→ST28→
(R101)→ST29→end」で表わされ、計算経路P1023は
「start→ST21→(R102)→ST23→(R101)→ST24→(R101)
→ST25→(R102)→ST26→(R101)→ST27→end」で表わさ
れ、計算経路P1024は「start→ST21→(R102)→ST23→
(R101)→ST24→(R101)→ST25→(R102)→ST28→(R101)→
ST29→end」で表わされる。
【0016】(2)影響分析手段53における実現例 影響分析手段53は、図7に示されるように、以下の各
ステップS201〜S204を実行するものとして構成される。
そして影響分析手段53は、これら各ステップS201〜S2
04を順次適用することによって、ある修正部分に出現す
る変数から影響を受ける変数の集合を求める。
【0017】ステップS201は、修正部分を経由する経路
の検出ステップであって、計算経路検出手段52を用い
て検出した計算経路の中から、着目している修正部分を
経由するものを求めるステップである。
【0018】ステップS202は、ある経路に対する参照定
義依存関係および定義参照依存関係の検出ステップであ
って、S201で求めたある計算経路に対して、以下のS202
-1からS202-4までの各サブステップを順次適用すること
により、その計算経路に対する参照定義依存関係および
定義参照依存関係を求める。
【0019】サブステップS202-1は、変数定義の行番号
検出サブステップであって、まず実行されるものであ
る。このサブステップS202-1は、着目した計算経路に対
して、その計算経路を実行する際に値が定義される変数
の名前と、その変数が出現するステートメントの番号と
を検出した後、これらを記録するものである。すなわ
ち、手続きが呼ばれたときに引数として渡される変数
や、代入文において左辺に記述されている変数が出現す
るたびに、その変数名とステートメントの番号を検出す
る。
【0020】サブステップS202-2は、変数参照の行番号
検出サブステップであって、サブステップS202-1の実
行後、着目した計算経路に対して、その計算経路を実行
する際に値が参照される変数または定数の名前と、その
変数または定数が出現するステートメントの番号とを検
出した後、これらを記録するものである。すなわち、手
続きから抜け出るときに引数として戻される変数や、代
入文の右辺に記述されている変数(や定数)を検出す
る。
【0021】サブステップS203-3は、参照定義依存関係
検出サブステップであって、上記の変数定義の行番号検
出ステップS202-1や変数参照の行番号検出サブステップ
S202-2の結果を用いることによって参照定義依存関係を
検出するものである。また、サブステップS202-4は、定
義参照依存関係検出サブステップであって、上記の変数
定義の行番号検出ステップS202-1や変数参照の行番号検
出サブステップS202-2の結果を用いることによって定義
参照依存関係を検出するものである。
【0022】ステップS203は、すべての経路に対する参
照定義依存関係および定義参照依存関係の検出ステップ
であり、ステップS201で求めたすべての計算経路に対し
てそれぞれステップS202を適用し、すべての計算経路に
対する参照定義依存関係および定義参照依存関係を検出
するものである。
【0023】ステップS204は、影響波及領域検出ステッ
プであって、ステップS202,S203で求めた参照定義依存
関係および定義参照依存関係より得られる変数間の依存
関係を用いることによって、修正部分に出現する変数に
依存する変数を求めるものである。ここで求めた変数の
集合が、着目している修正部分に出現する変数から影響
を受ける変数の集合となる。
【0024】(従来の手法による実行例−その1)次
に、図2に示した手続きcalc_1に対して影響分析手段5
3を作用させた例を説明する。ここでは、手続きcalc_1
のステートメントST13「s:=q+2」を「s:=q+3」に修正し
た時、この修正により影響が及ぶ変数の集合を求める例
を以下に示す。そして、求められた変数の集合を図8に
示す。
【0025】まず、修正部分を経由する経路の検出ステ
ップS201が適用される。そして、計算経路検出手段52
が検出した計算経路P1011とP1012と(図4参照)の中
で、ステートメントST13を経由するものが、図9に示す
通りP1011とP1012として求められる。続いて、ある経路
に対する参照定義依存関係および定義参照依存関係の検
出ステップS202が適用され、計算経路P1011についての
参照定義依存関係および定義参照依存関係が求められ
る。
【0026】このステップS202の実行では、まず、変数
定義の行番号検出サブステップS202-1が適用され、計算
経路P1011を経由した時に各変数に対して値が定義され
るステートメントの番号と、その変数名とが求められ
る。求めた結果を表1に示す。
【0027】
【表1】 この表は、例えば、start時には変数p,q,u,vの値の
定義が行なわれ、ステートメントST11では変数uの値の
定義が行なわれると読む。なお、各変数p,q,u,v
は、手続きcalc_1を呼ぶときの引数であるで、手続きca
lc_1としては、start時に定義されたものとする。
【0028】続いて、変数参照の行番号検出サブステッ
プS202-2が適用され、計算経路P1011を実行した時に各
変数および各定数の値が参照されるステートメントの番
号と、その変数名とが求められる。求めた結果を表2に
示す。
【0029】
【表2】 本表は例えば、ステートメントST13では変数qの値の参
照が行なわれ、ST12ではある定数の値の参照が行なわれ
ると読む。
【0030】続いて参照定義依存関係検出サブステップ
S202-3が適用される。このサブステップでは、上記サブ
ステップS202-1およびS202-2で求めた結果から、計算経
路P1011を実行した時に発生する参照定義依存関係を求
める。ここでは、表1と表2の同一行を参照すれば、参
照定義依存関係が求められる。求めた関係を表3に示
す。
【0031】
【表3】 本表は、例えば、値が参照されるある定数(ここでは、
ST11が「u:=0」における"0"が定数である)からステート
メントST11で値が定義される変数uへの参照定義依存関
係があると読み、また、ST13で値が参照される変数qか
らST13で値が定義される変数sへの参照定義依存関係が
あると読む。ここで前者の場合、ST11で定義される変数
uが、値を参照するある定数に依存しており、また、後
者の場合、ST13で定義される変数sが、ST13で参照され
る変数qに依存していることが示されている。
【0032】次に、定義参照依存関係検出サブステップ
S202-4が適用され、計算経路P1011を実行したときに発
生する定義参照依存関係が求められる。表1と表2との
同一変数に着目することにより、定義参照依存関係を求
めることができる。求めた関係を表4に示す。
【0033】
【表4】 この表は例えば、start時に値が定義される変数pから
ステートメントST14で値が参照される変数pへの定義参
照依存関係があると読み、また、ST13で値が定義される
変数sからST15で値が参照される変数sへの定義参照依
存関係があると読む。ここで前者の場合、ST14で参照さ
れる変数pが、start時に定義される変数pに依存して
おり、また、後者の場合、ST15で参照される変数sが、
ST13で定義される変数sに依存していることが示されて
いる。以上のようにして求めた計算経路P1011に対する
変数間の依存関係が、図10に示されている。
【0034】上記各サブステップS202-1〜S202-4を含む
ステップS202が全ての経路について順次実行されるよう
に、すべての経路に対する参照定義依存関係および定義
参照依存関係の検出ステップS203が適用される。ここで
は、ステップS201で求めた全ての計算経路P1011とP1012
とについて、参照定義依存関係および定義参照依存関係
を求めるために、上記で説明した計算経路P1011に対す
る処理に引き続いて、計算経路P1012についてステップS
202を適用する。計算経路P1012に対する参照定義依存関
係を表5に、定義参照依存関係を表6にそれぞれ示し、
また計算経路P1012に対する変数間の依存関係を図11
に示す。
【0035】
【表5】
【0036】
【表6】 次に、ステップS203では、ステップS201で求めた計算経
路P1011とP1012との両方に対する参照定義依存関係およ
び定義参照依存関係が求められる。計算経路P1011とP10
12とに対する参照定義依存関係を得るためには、表3と
表5との和集合を得ればよい。その結果を表7に示す。
この表の読み方は表3と同じである。
【0037】
【表7】 同様に、計算経路P1011とP1012との両方に対する定義参
照依存関係を得るためには、表4と表6との和集合を得
ればよい。その結果を表8に示す。この表の読み方は表
4と同じある。また、以上の処理によって求められた、
計算経路P1011とP1012とを実行したときに変数間の依存
関係が、図12に示されている。
【0038】
【表8】 ステップS203の実行が終了したら、影響波及領域検出ス
テップS204が適用される。ここでは、ステップS203で求
めた参照定義依存関係および定義参照依存関係(表7お
よび表8参照)をもとに、ステートメントST13で定義さ
れる変数から影響を受ける変数の集合を求める。
【0039】まず、ST13で定義される変数に依存するす
べての変数を求める。次に、求めた変数に依存するすべ
ての変数を求める。順次このように、求めた変数に依存
する変数を求め、新たに依存する変数がなくなるまで依
存する変数を求め続ける。この求める過程で用いた参照
定義依存関係と定義参照依存関係とを表9に示す。
【0040】
【表9】 これら参照定義依存関係および定義参照依存関係を用い
ることによって、ST13で定義される変数から影響を受け
る変数の集合を求め、結果を表10に示す。また上述し
たように、その結果が図8に示されている。
【0041】
【表10】 以上に示した通り、手続きcalc_1におけるステートメン
トST13を修正した際、修正による影響を受ける変数の集
合を求めることができる。
【0042】(従来の手法による実行例−その2)続い
て、計算経路に複数の条件文を含むプログラムに対し
て、従来技術を適用することによって影響波及領域を求
める実現例を示す。ここでは、図13に示すプログラム
における手続きcalc_3について考える。ST32「s:=u*2」
を「s:=u*4」に修正した場合、従来の技術を用いると、
この修正が影響を及ぼす変数を次のように求めることが
できる。
【0043】まず、計算経路検出手段52を用いて、図
14に示す4本の計算経路P1031〜P1034とを求める。そ
して、影響分析手段53のステップS201に従い、ST32を
経由する計算経路としてP1031とP1032とを求め、影響分
析手段53のステップS202およびS203に従い、P1031とP
1032とに対する参照定義依存関係および定義参照依存関
係を求める。求めた参照定義依存関係を表11に、求め
た定義参照関係を表12にそれぞれ示す。また、計算経
路P1031を実行する際の変数間の依存関係、計算経路P10
32を実行する際の変数間の依存関係が図15に示されて
いる。
【0044】
【表11】
【0045】
【表12】 続いて、影響分析手段のステップS204に従い、求めた参
照定義依存関係および定義参照依存関係により得られる
変数間の依存関係を用いることによって、ST32で定義さ
れる変数に依存する変数の集合を検出する。ここで求め
た集合が、ST32で定義される変数から影響が及ぶ変数の
集合となる。検出した変数の集合を表13に示す。ま
た、ST32で定義される変数に依存する変数の依存関係が
図16に示されている(P1032が実行されるとしてあ
る)。
【0046】
【表13】 以上示した通り、手続きcalc_3におけるステートメント
ST32を修正した際、修正による影響を受ける変数の集合
を求めることができる。この従来の手法によって影響が
及ぶ変数の分析を行なうと、表13に示す通り、例えば
ST39で定義される変数iが、ST32に定義される変数から
影響を受けると判定されていた。
【0047】ここで、計算経路P1032が実際に実行され
る可能性があるかどうかを調べてみる。
【0048】計算経路P1032では、ST31から、ST33へで
はなくST32へと制御が移行する。そのため、ST31におい
て条件(p>0)は真となる。そして計算経路P1032で
は、引続きST32とST34とを経由した後、ST35に到達す
る。ここで、計算経路P1032において、ST31からST32とS
T34とを経由する間、変数pへの代入文が存在しないた
め、ST35でのpの値はST31でのpの値と同一である。ま
た、ST31において条件(p>0)が真であるので、ST35
での条件(p>0)は必ず真となる。そのため、ST31→
ST32→ST34→ST35と実行してきた計算経路は、引き続い
てST38方向へ実行されることは決してないことになる。
以上より、P1032は実際には実行されない計算経路であ
ることがわかる。
【0049】上述した従来の技術を用いると、上に示し
た通り実際には実行されない計算経路(例えばP1032)
であっても、計算経路検出手段52がその計算経路が実
行される可能性があると判定してしまうことがあった。
【0050】ここで、計算経路P1032が実際には実行さ
れないことを考慮に入れてもう一度、ST32に対する修正
が影響を及ぼす変数の集合を求める。計算経路P1032が
決して実行されないとすると、影響分析手段53のステ
ップS201では、ST32を経由する計算経路がP1031だけで
あることが求められる。そして、影響分析手段53のS2
02およびS203によって、計算経路P1031に対する参照定
義依存関係および定義参照依存関係が、それぞれ表14
および表15に示すように検出される。また、P1031を
実行する際に生じる変数間の依存関係が図17に示され
ている。
【0051】
【表14】
【0052】
【表15】 そして、影響分析手段53のS204によって、求めた参照
定義依存関係および定義参照依存関係より、ST32で定義
される変数に依存する変数の集合を求める。本変数の集
合に、着目する変数からの影響が及ぶ。求められた変数
の集合が表16に示されている。また、計算経路P1032
が実行されないとしたときのST32で定義される変数に依
存する変数の依存関係が、図18に示されている。
【0053】
【表16】 従来の技術を用いると、計算経路P1032を通るものとし
て扱うので、例えばST39で定義される変数iはST32
義される変数から影響を受けると判定されていた。しか
し実際には、計算経路P1032は実行されることが決して
ないので、ST32定義される変数は、ST39で定義される
変数iには影響を及ぼすことはない。このように従来の
技術では、実際には影響を及ぼさないにもかかわらず、
影響が及ぶと判定してしまうという問題が発生する。
【0054】
【発明が解決しようとする課題】以上示した通り、従来
の技術を適用すると、実際にはプログラムの修正による
影響が及ばないにもかかわらず、影響が及ぶと判定して
しまうことがあるという問題が発生する。この問題の原
因は、根本的には、実際には実行されない計算経路を検
出することにある。例えばあるプログラムにおいて、
その計算経路は、計算経路の分岐をもたらす2つの条件
文を経由し、最初の分岐はthen方向、2番目の分岐はel
se方向をたどる、2つの条件文に対する判定部の式の
形は同じである、条件文での判定部の式内に出現する
すべての変数の値が、2つの条件文で常に同じであり、
かつ、式内に含まれるすべての関数は、入力の値が同じ
であれば必ず同じ値を出力する、の3条件を同時に満た
す場合、その計算経路は実際には実行されないが、従来
の方法によれば、実行される計算経路として検出されて
しまう。その結果、実際には実行されない計算経路をた
どったときのみ存在する変数間の依存関係、すなわち実
際のプログラム実行では存在しないはずの変数間の依存
関係が検出されてしまう。これにより、実際には存在し
ない依存関係をもとに影響を受けるとされる変数が発生
することになり、実際には修正による影響が及ばないに
もかかわらず、影響が及ぶと判定してしまうことにな
る。
【0055】本発明の目的は、上述の問題点を解決し、
実際には影響を及ぼさないにも関わらず影響を及ぼすと
判定することがないような、プログラムの修正による影
響分析装置を提供することにある。
【0056】
【課題を解決するための手段】本発明のプログラムの修
正による影響分析装置は、逐次実行される文の集まりか
らなるプログラムに関し、前記プログラムの修正による
影響を受ける変数を分析する、プログラムの修正による
影響分析装置において、前記プログラムの構文情報にし
たがって前記プログラムの実行順序をたどり、前記実行
順序をたどることにより得られる前記文の系列を計算経
路として求める計算経路検出手段と、分岐をもたらす条
件文を経由するときの当該条件文中の論理式の真偽を決
定する変数に対する拘束条件を保存し、前記計算経路に
おいて後に出現する条件文に至るまでの区間で当該変数
の値の変更の有無を監視して当該後に出現する条件文の
拘束条件を検証し、当該拘束条件が一意に決定可能であ
れば当該後に出現する条件文の分岐のうちいずれかは実
行されないと判断することを順次計算経路に沿って行な
い、実行されない計算経路を見出す計算経路限定手段
と、前記計算経路のうち前記計算経路限定手段で実行さ
れないものとして見出されなかった計算経路の中から前
記修正を施した部分を経由するものを検出し、前記検出
された各計算経路について変数の定義と参照との関係か
ら変数間の依存関係を求め、前記修正による影響を受け
る可能性のある変数の集合を求める影響分析手段とを有
する。
【0057】
【作用】本発明のプログラムの修正による影響分析装置
では、実行されない計算経路を見出す計算経路限定手段
を設けてあるので、影響分析手段で変数間の依存関係を
求める際に、実際には実行されない計算経路を予め除外
できるので、本当ならば影響が及ばないものに対してま
で影響が及ぶと判断することを防ぐことができる。
【0058】ここで、本発明の装置を用いた影響分析の
実行について説明する。
【0059】まず、計算経路検出手段において、実行さ
れる可能性のある計算経路を検出する。そして、計算経
路限定手段において、計算経路検出手段が検出した各計
算経路に対して、実際には実行されることのないものを
判定する。次に、影響分析手段において、計算経路検出
手段が検出した計算経路から、実際には実行されないと
計算経路限定手段が判定した計算経路を取り除く。そし
て、取り除かれずに残った計算経路をもとに影響が及ぶ
かどうかを判定する。このように影響分析を行なうこと
により、従来は影響が及ぶと判定していた領域の中で実
際には影響が及ばない部分について、(影響が及ばない
と)正しく判定することができる。
【0060】次に、計算経路限定手段による、実行され
ない計算経路の検出手順について、図13の手続きcalc
_3のST31→ST32→ST34→ST35→ST38→ST39の計算経路P1
032(図14参照)が実際に実行されるかどうかを例に
挙げて説明する。
【0061】一般に、ある計算経路が分岐をもたらす条
件文を経由する際、実際には分岐に対応する片方の計算
経路のみを実行するため、その条件文中の論理式の真偽
が定まる。計算経路P1032の場合、計算経路がST31からt
hen方向のST32に向かうため、ST31の判定(p>0)
は真となる。このように論理式の真偽が定まることによ
って、経由する条件文における変数の拘束条件が求ま
る。この拘束条件は、計算経路P1032の場合、(p>
0)が真であることからST31における変数の拘束条件
(p>0)となる。
【0062】その計算経路を引き続き実行させるにした
がい、求まった変数の拘束条件の表現形式を順次更新さ
せる。計算経路P1032の場合、ST31からST32,ST34を経
由する間、変数pへの代入がないため変数の拘束条件
(p>0)は不変である。このとき、その計算経路が1
つ以上の条件文を経由した後、別の条件文まで実行され
た場合、経由してきた計算経路で求まった変数の拘束関
係を順次更新することによって、到達した条件文におい
て満たされるべき変数の拘束条件を得ることが可能とな
る。計算経路P1032の場合、1つの条件文ST31と、ST32
とST34とを経由し、別の条件文ST35まで実行されたとす
る。到達した条件文ST35において変数が満たすべき拘束
条件は(p>0)である。
【0063】このようにして得られた変数の拘束条件を
到達した条件文に適用することによって、その条件文中
の論理式が真であるのか偽であるのかどちらかであるこ
とがいえることがある。計算経路P1032の場合、ST35で
変数が満たすべき拘束条件は(p>0)なので、ST35の
条件文の判定は必ず真となるといえる。ここで、論理
式が真であるか偽であるかのどちらかであることがいえ
れば、分岐に対応する両方の計算経路のうちどちらかは
実行されないことを意味する。計算経路P1032の場合、S
T31→ST32→ST34→ST35と実行してきた計算経路はST35
のelse方向に実行されることはないため、ST35より引続
きST38の方向へ計算経路は実際には実行されることがな
いと判定できる。
【0064】このようにして、実際には実行されること
のない計算経路を検出できる。
【0065】
【実施例】次に、本発明の実施例について図面を参照し
て説明する。図19は、本発明の一実施例の影響分析装
置の構成を示すブロック図である。この影響分析装置1
0は、分析対象のプログラムを格納する分析対象プログ
ラム保持装置11に接続されるものであって、プログラ
ムの実行順序を検出する計算経路検出手段12と、実際
には実行されない計算経路を見出す計算経路限定手段1
5と、修正による影響を分析する影響分析手段13と、
全体の動作を制御する制御手段14とで構成されてい
る。以下、各構成要素について説明する。
【0066】計算経路検出手段12は、計算経路に条件
文が現われるたびに各分岐に対応した文の系列をそれぞ
れたどることにより、計算経路を求めるものである。
【0067】また、影響分析手段13は、まず、与えら
れた計算経路のうち施した修正部分を経由するものを検
出し、次に、検出した各計算経路について、それぞれを
実行する時に発生する参照定義依存関係と定義参照依存
関係とを求め、最後に、求めたすべての参照定義依存関
係と定義参照依存関係とより得られる変数間の依存関係
から、修正による影響を受ける可能性のある変数の集合
を求めるものである。この影響分析手段13は、後述す
る計算経路限定手段15によって、実際には実行されな
い計算経路であると判定された計算経路に関しては、上
記の処理を行なわないようになっている。
【0068】ここで計算経路限定手段15は、計算経路
検出手段12が検出した計算経路と計算経路を検出する
対象のプログラムと入力して、入力した各計算経路に
ついて、実際には実行されないか、実行される可能性が
あるかを判定して出力するものである。図20は、計算
経路限定手段15の構成例を示すブロック図である。こ
の図に示されるように、分析対象のプログラムを保持す
るプログラム保持手段21と、計算経路検出手段12で
検出された計算経路のデータを格納する計算経路情報保
持手段22と、計算経路の文(ステートメント)の中か
らif文などの条件文を検出してその判定部を読み出す条
件判定文検出手段23、読み出した変数についての拘束
条件を検出する拘束条件検出手段24、検出した条件文
の判定部と検出した拘束条件とを記録する条件判定文・
拘束条件記録手段25、読み出した変数の拘束条件が変
化するたびに拘束条件の表現形式を順次更新する拘束条
件更新手段26、読み出された変数の拘束条件を検出し
た条件文に適用しこの条件文の論理式が真であるか偽で
あるかのどちらであるかを判定する論理式真偽判定手段
27、論理式真偽判定手段27の判定結果に基づいてそ
の計算経路が実際に実行される可能性があるかどうかを
判定する計算経路限定判定手段28、これら各手段21
〜28の動作およびこれら各手段21〜28間でのデー
タのやりとりを制御する計算経路限定制御手段29とに
よって構成されている。
【0069】次に、この計算経路限定手段15の動作を
図21のフローチャートを用いて説明する。まず、プロ
グラム保持手段21に予め保持されたプログラムに関
し、計算経路情報保持手段22に入力した各計算経路に
ついて調べるものとし(ステップS301)、まだ判定して
いない計算経路のうちの1つについて着目する(ステッ
プS302)。ここで、着目する計算経路があるか調べ(ス
テップS303)、もしなかった場合にはステップS318に移
行し、着目すべき計算経路があった場合には、条件判定
文検出手段23によって着目した計算経路を先頭からた
どり、分岐をもたらす条件文を順次検出する(ステップ
S304)。そして、1個の条件文を検出できたかどうか調
(ステップS305)、もし見つからなければステップS3
15に移行する。条件が検出されたら、条件文における
判定部の式を記録する(ステップS306)。
【0070】次に、検出した条件文に対して、着目した
計算経路を先頭よりその条件文までたどる際に通過した
すべての条件文に対して、記録されている判定部の式を
読み出す(ステップS307)。続いて、検出された条件文
に対し、着目した計算経路を先頭よりその条件文までた
どった際、読み出した変数の拘束条件がどう変るかを調
べ、拘束条件の変化があるごとに、拘束条件更新手段2
6によって、拘束条件の表現形式を順次更新する。そし
て、検出した条件文における変数の拘束条件を求める
(ステップS308)。求めた変数の拘束条件を検出した条
件文に適用して、論理式が真であるか偽であるかのどち
らかであることがいえるか判定する(ステップS309)。
【0071】判定の結果(ステップS310)もし、真偽の
どちらであるかを確定的にいえない場合には、引続き、
次の条件文を探すために、ステップS317に移行する。確
定的にいえる場合には、計算経路限定判定手段28によ
って、その論理式が真なのか偽なのかの情報と着目した
計算経路がその条件式においてどちらに分岐するのかと
いうことから、着目した計算経路を引続きたどることが
可能か判定する(ステップS311)。この判定によって
(ステップS312)、たどることが可能であれば、ステッ
プS317に移行し、たどることができない場合には、着目
した計算経路は実行されないと判定し(ステップS31
3)、次の計算経路に着目して(ステップS314)、ステ
ップS303に移行する。
【0072】ステップS305で条件式が見つからない場合
には、その着目した計算経路は実行される可能性がある
と判定し(ステップS315)、次の計算経路に着目して
(ステップS316)、ステップS303に移行する。
【0073】また、ステップS310で真偽が確定的に定ま
らないと判断された場合、あるいは、ステップS312で計
算経路を引続きたどれると判断された場合には、この計
算経路について引続き上記の処理を繰り返すために、着
目する計算経路を引続きたどり、次の条件文を検出し
(ステップS317)、その後、ステップS305に移行する。
【0074】ステップS303で着目すべき計算経路がなく
なったら、各計算経路に対する判定結果を出力して(ス
テップS318)、計算経路限定手段15での処理を終了さ
せる。このようにして、計算経路限定手段15は、実際
には実行されることのない計算経路を検出する。
【0075】次に、具体的なプログラムを対象として本
実施例を実施した結果を説明する。以下の実施例1〜5
はプログラム修正の影響が及ぶ領域が絞り込める例であ
り、実施例6は3つの条件文を持つプログラムにおいて
2つの条件文を経由することにより3つめの条件文の判
の真偽が限定される例であり、実施例7はあるプロ
グラムに対する独立な複数の修正が互いに影響を及ぼし
あうかどうかを判定する例である。
【0076】(実施例1) 2つの条件文を持つプログラムにおいて判定が同一で
かつ、判定に出現する変数が2つの条件文で同じ場合
の例である。ここでは、図13に示すプログラムの手続
きcalc_3を例に挙げる。
【0077】計算経路検出手段12を用いると、上述の
図14に示す通り、4本の計算経路P1031〜P1034とを検
出する。ここで計算経路限定手段15は、計算経路検出
手段12が検出した各計算経路P1031〜P1034について、
実際に実行される可能性があるかどうかを判定する。
【0078】例えば計算経路P1031については、次に示
す通り判定する。
【0079】ST31からST32に進むため、ST31において
(p>0)が真であることがいえる。これによって、ST
31での変数が満たすべき条件すなわち変数の拘束条件は
(p>0)となる。ST31からST32とST34とを経由してST
35に到達する間変数pに対する代入は行なわれないた
め、P1031がST35まで到達した際、変数の拘束条件は
(p>0)である。ST35の条件文の判定(p>0)に
対して本拘束条件(p>0)を適用すると、ST35の判定
(p>0)は必ず真となる。これによって、ST31から
ST32とST34とを経由してST35に到達する計算経路は引続
き、ST35に対するthen方向すなわちST36へたどることが
いえる。以上示した通り、P1031が実行される可能性が
あることが判定できる。
【0080】また、計算経路P1032については、次に示
す通り判定する。
【0081】上に示したP1031の例より、ST31からST32
とST34とを経由してST35に到達した時、ST35での条件文
の判定(p>0)は必ず真となることがいえる。これ
によって、ST31からST32とST34とを経由してST35に到達
する計算経路は、ST35に対するelse方向すなわちST38へ
は引続きたどることがないことがいえる。以上示した通
り、P1032は実行されないことが判定できる。
【0082】同様にして、P1033が実行されないこと
と、P1034が実行される可能性があることが判定でき
る。以上示した通り、従来は、P1031〜P1034の各計算経
路全てが実行される可能性があると判定していたが、本
実施例では、計算経路P1032とP1033とは実行されないこ
とが判定できる。
【0083】この計算経路限定手段15の判定結果を用
いることによって、従来、影響が及ぶと判定していた変
数のうち、実際には影響が及ばない変数の検出が可能と
なる(図18参照)。ここで、手続きcalc_3のST32「s:
=u*2」を「s:=u*4」に修正したとき、修正によって影響
を受ける変数を検出することを例にとって考える。
【0084】従来のものでは、ST32を経由する計算経路
はP1031とP1032であると判定するため、影響分析手段を
適用すると、表11に示す参照定義依存関係と、表12
に示す定義参照依存関係とが得られる。そのため、ST
32で定義される変数sからST34で参照される変数sへの
定義参照依存関係と、ST34で参照される変数sからST
34で定義される変数tへの参照定義依存関係と、ST34
で定義される変数tからST39で参照される変数tへの定
義参照依存関係と、ST39で参照される変数tからST39
で定義される変数iへの参照定義依存関係と、を組み合
わせることによって、ST32で定義される変数sは、ST39
で定義される変数iへ影響を及ぼすと判定していた。
【0085】一方、本実施例では、計算経路P1032は発
生しないと判定されるため、ST32を経由する計算経路は
P1031しかないことがいえる。したがって、ST32を経由
する計算経路としてP1031しか存在しないという条件の
もとで影響分析手段13を適用すると、表14に示す参
照定義依存関係と、表15に示す定義参照依存関係とが
得られる。さらにST32で定義される変数から影響を受け
る変数を求めると、表16に示す通り、ST39で定義され
る変数iへは影響が及ばないことがいえる。
【0086】以上より、従来影響が及ぶと判定していた
変数のうち、実際には影響が及ばないと判定できる場合
があることが示され、プログラム修正の影響が及ぶ領域
が絞り込めた。
【0087】(実施例2) 2つの条件文を持つプログラムにおいて、判定の形が
変数名を除いて同じであり、2つの条件文間で対応する
変数の値が同じである場合の例である。ここでは、図2
2に示されるプログラムの手続きcalc_4を例に挙げる。
【0088】計算経路検出手段12を用いると、図23
に示す通り、4本の計算経路P1041〜P1044が検出され
る。ここで計算経路限定手段15は、計算経路検出手段
12が検出した各計算経路P1041〜P1044について、実際
に実行される可能性があるかどうかを判定する。
【0089】詳細は上述の実施例1と同様であるが、2
つめの条件文において、変数が満たすべき拘束条件を適
用する際の手法が異なる。
【0090】実施例1と同様に、例えばST41からST42と
ST44とを経由してST45に到達した場合(計算経路P104
2)を考える。ST41で満たすべき拘束条件(p>0)はS
T45でも満たされるが、本拘束条件(p>0)だけでは
ST45における条件文の判定(q>0)の真偽が定
まるかどうかの判定は不可能である。しかし、calc_4
プログラムMain4から呼び出されている場合、calc_4のS
T41に計算経路が到達したときに変数pと変数qとの間
での拘束条件(p=q)を満たすことがいえるため、ST
41で満たすべき拘束条件は(p>0)だけでなく(q>
0)でもあることがいえる。また、ST41からST42とST44
とを経由してST45に到達する間qへの代入はないため、
ST45で満たすべき拘束条件は(p>0)だけでなく(q
>0)でもあることがいえる。そのためST45の条件文の
判定(q>0)において本条件(q>0)を適用する
と、ST45の判定は必ず真となる。これによって、ST41
からST42とST44とを経由してST45に到達する計算経路
は、ST45に対するelse方向すなわちST48へは引続き実行
されることがないといえる。以上示した通り、計算経路
P1042は実行されないことが判定できる。
【0091】同様にして、計算経路P1043も実行されな
いと判定されるから、結局、P1041とP1044とが実行され
る可能性のあることと、P1042とP1043とが実行されない
こととが判定できる。
【0092】この判定結果を用いることによって、従
来、影響が及ぶと判定していた変数のうち、実際には影
響が及ばない変数の検出が可能となる。
【0093】ここで、手続きcalc_4のST42の「s:=u*2」
を「s:=u*4」に修正したとき、修正によって影響を受け
る変数を検出することを例にとって考える。判定方法は
実施例1と同様であり、結論をいうと、従来は、ST42を
経由する計算経路がP1041とP1042とであると判定してい
たため、ST42への修正による影響がST49で定義される変
数iに及ぶと判定していた。しかし、本実施例ではP104
2が実行されないと判定されるために、ST42の修正によ
る影響はST49で定義されるiには及ばないと判定でき
る。以上より、従来影響が及ぶと判定していた変数のう
ち、実際には影響が及ばないと判定できる場合があるこ
とが示され、プログラム修正の影響が及ぶ領域が絞り込
めた。
【0094】(実施例3) 2つの条件文を持つプログラムにおいて、判定の形が
異なるが、それぞれの判定に出現する変数間で関連が
ある場合の例である。ここでは、図24のプログラムに
おける手続きcalc_5を例に挙げる。
【0095】計算経路検出手段12によって、図25に
示す通り、4本の計算経路P1051〜P1054が検出される。
ここで計算経路限定手段15は、計算経路検出手段12
が検出した各計算経路P1051〜P1054について、実際に実
行される可能性があるかどうかを判定する。
【0096】詳細は実施例1や実施例2と同様である
が、2つめの条件文において、変数が満たすべき拘束条
件を適用する際の手法が異なる。実施例1と同様に、例
えばST51からST52とST54とST55とを経由してST56に到達
した場合(計算経路P1051)を考える。ST51で満たすべ
き拘束条件(p>0)はST56でも満たされるが、この拘
束条件(p>0)だけではST56における条件文の判定
(q>=0)の真偽が定まるかどうかの判定は不可能で
ある。しかし、上記の計算経路が経由するST54におい
て、変数pの値をもとに変数qの値を定めている。ST54
まで計算経路が到達した拘束条件(p>0)を満たして
いるが、ST54においてqへの代入が完了した状態では、
拘束条件(q<0)が新たに発生する。ST54において新
たに発生した拘束条件(q<0)は、ST56に到達する経
路上においてqに対する代入が存在しないため、ST56に
おいても引続き成立する。そのためST56の条件文の判定
(q>=0)においてこの拘束条件(q<0)を適用
すると、ST56の判定部は必ず偽となる。これによってST
51からST52とST54とST55とを経由してST56に到達する計
算経路は、ST56に対するthen方向すなわちST57へは引続
き実行されることがないといえる。以上示した通り、P1
051は実行されないことが判定できる。
【0097】同様の手順で計算経路P1054が実行されな
いことがわかり、結局、P1052とP1053とが実行される可
能性のあることと、P1051とP1054とが実行されないこと
とが判定できる。
【0098】この判定結果を用いることによって、従
来、影響が及ぶと判定していた変数のうち、実際には影
響が及ばない変数の検出が可能となる。ここで、手続き
calc_5のST52の「s:=u*2」を「s:=u*4」に修正したと
き、修正によって影響を受ける変数を検出することを例
にとって考える。判定方法は実施例1と同様である。
【0099】すなわち従来は、ST52を経由する計算経路
がP1051とP1052とであると判定していたため、ST52への
修正による影響がST57で定義される変数hに及ぶと判定
していた。しかし、本実施例ではP1051が実行されない
と判定するために、ST52への修正による影響はST57で定
義されるhには及ばないと判定できる。以上より、従来
影響が及ぶと判定していた変数のうち、実際には影響が
及ばないと判定できる場合があることが示され、プログ
ラム修正の影響が及ぶ領域が絞り込めた。
【0100】(実施例4)2つの条件文を持つプログラ
ムにおいて、後に出現する条件文の判定部において、先
に出現する条件文の判定部に新たな条件が加わる場合の
例である。ここでは図26に示されたのプログラムにお
ける手続きcalc_6を例に挙げる。
【0101】計算経路検出手段12を用いると、図27
に示す通り、4本の計算経路P1061〜P1064とが検出され
る。計算経路限定手段15は、計算経路検出手段12が
検出した各計算経路P1061〜P1064について、実際に実行
される可能性があるかどうかを判定する。詳細は実施例
1などと同様であるが、2つめの条件文において、変数
が満たすべき拘束条件を適用する際の手法が異なる。
【0102】実施例1と同様に、例えばST61からST63と
ST64とを経由してST65に到達した場合(計算経路P106
3)を考える。ST61で満たすべき拘束条件(p<=0)
はST65でも満たされる。そのためST65の条件文の判定部
[(p>0)and(q>0)]は必ず偽となる。これに
よってST61からST63とST64とを経由してST65に到達する
計算経路は、ST65に対するthen方向すなわちST66へは引
続き実行されることがないといえる。以上示した通り、
P1063は実行されないことが判定できる。
【0103】結局、P1061とP1062とP1064とが実行され
る可能性のあることと、P1063が実行されないこととが
判定できる。
【0104】この判定結果を用いることによって、従
来、影響が及ぶと判定していた変数のうち、実際には影
響が及ばない変数の検出が可能となる。ここで、calc_6
のST63の「s:=u*3」を「s:=u*5」に修正したとき、修正によ
って影響を受ける変数を検出することを例にとって考え
る。判定方法は実施例1と同様である。
【0105】すなわち従来は、ST63を経由する計算経路
がP1063とP1064とであると判定していたため、ST63への
修正による影響がST66で定義される変数hに及ぶと判定
していた。しかし本実施例では、P1063が実行されない
と判定するために、ST63の修正による影響はST66で定義
されるhには及ばないと判定できる。
【0106】以上より、従来影響が及ぶと判定していた
変数のうち、実際には影響が及ばないと判定できる場合
があることが示され、プログラム修正の影響が及ぶ領域
が絞り込めた。
【0107】(実施例5)2つの条件文を持つプログラ
ムにおいて、各判定文において出現する変数間に関連が
ある場合の例である。ここでは、図28に示すプログラ
ムにおける手続きcalc_7を例に挙げる。
【0108】計算経路検出手段12を用いると、図29
に示す通り、4本の計算経路P1071〜P1074が検出され
る。計算経路限定手段15は、計算経路検出手段12が
検出した各計算経路P1071〜P1074について、実際に実行
される可能性があるかどうかを判定する。詳細は実施例
1などと同様であるが、2つめの条件文において、変数
が満たすべき拘束条件を適用する際の手法が異なる。
【0109】実施例1と同様に、例えばST71からST72と
ST74とST75とを経由してST76に到達した場合(計算経路
P1072)を考える。ST71で満たすべき拘束条件(p>
0)はST76でも満たされるが、この拘束条件(p>0)
だけではST76における条件文の判定(q>0)の真偽
が定まるかどうかの判定は不可能である。しかし、上記
の計算経路P1072が経由するST74において、変数pの値
をもとに変数qの値を定めている。ST74まで計算経路が
到達した時、拘束条件(p>0)を満たしているが、ST
74においてqへの代入が完了した状態では、拘束条件
(q>10)が新たに発生する。ST74において新たに発
生した拘束条件(q>10)は、ST76に到達する経路上
においてqに対する代入が存在しないため、ST76におい
ても引続き成立する。そのためST76の条件文の判定
(q>0)に対して本拘束条件(q>10)を適用する
と、ST76の判定は必ず真となる。これによってST71か
らST72とST74とST75とを経由してST76に到達する計算経
路は、ST76に対するelse方向すなわちST79へは引続き実
行されることがないといえる。以上示した通り、P1072
は実行されないことが判定できる。
【0110】結局、P1071とP1073とP1074とが実行され
る可能性のあることと、P1072が実行されないこととが
判定できる。
【0111】この判定結果を用いることによって、従
来、影響が及ぶと判定していた変数のうち、実際には影
響が及ばない変数の検出が可能となる。ここで、手続き
calc_7のST72の「s:=u*2」を「s:=u*4」に修正したと
き、修正によって影響を受ける変数を検出することを例
にとって考える。判定方法は実施例1と同様である。
【0112】すなわち従来は、ST72を経由する計算経路
がP1071とP1072とであると判定していたため、ST72への
修正による影響がST80で定義される変数iに及ぶと判定
していた。しかし、本実施例ではP1072が実行されない
と判定するために、本修正による影響ST80で定義され
るiには及ばないと判定できる。以上より、従来影響が
及ぶと判定していた変数のうち、実際には影響が及ばな
いと判定できる場合があることが示され、プログラム修
正の影響が及ぶ領域が絞り込めた。
【0113】(実施例6)3つの条件文を持つプログラ
ムにおいて、2つの条件文を経由することによって3つ
めの条件文に対する判定部の真偽が限定できる例であ
る。ここでは、図30のプログラムにおける手続きcalc
_8を例に挙げる。
【0114】計算経路検出手段12を用いると、図31
に示す通り、8本の計算経路P1081〜P1088とが検出され
る。計算経路限定手段15は、計算経路検出手段12が
検出した各計算経路P1081〜P1088について、実際に実行
される可能性があるかどうかを判定する。例えば計算経
路P1082については、次に示す通り判定する。
【0115】ST81からST82に進むために、ST81において
(p>0)が真であることがいえる。これによってST81
での変数が満たすべき拘束条件は(p>0)となる。ST
81からST82を経由してST84に到達する間pに対する代入
は行なわれないため、P1082がST84に到達した際、変数
が満たすべき拘束条件は(p>0)である。ST84の条件
文の判定(q>0)においてこの拘束条件(p>0)
を適用しても、ST84の判定(q>0)の真偽は判定で
きない。しかし、計算経路がST81からST82を経由してST
84まで到達した後、計算経路P1082はST84からST85に進
むため、ST84において、ST81で定まった拘束条件(p>
0)の他に、新たな拘束条件(q>0)を得ることがで
きる。ST81からST82とST84とST85とを経由してST87に到
達する計算経路に対して、ST84からST85を経由する間、
変数pと変数qとのどちらへの代入も行なわれないた
め、ST84で満たすべき拘束条件[(p>0)and(q>
0)]は、ST87においても成立する。そのため、ST87の
条件文の判定[(p>0)and(q>0)]に対して
この拘束条件[(p>0)and(q>0)]を適用する
と、ST87の判定は必ず真となる。これによって、ST81
からST82とST84とST85とを経由してST87に到達する計算
経路は引続き、ST87に対するelse方向すなわちST89へは
引続き実行されることがないといえる。以上示した通
り、P1082は実行されないことが判定できる。
【0116】同様にして、P1081とP1084とP1086とP1088
とが実行される可能性があることと、P1083とP1085とP1
087とが実行されないこととが判定できる。結局、従来
の方法によればP1081とP1082とP1083とP1084とP1085とP
1086とP1087とP1088とが実行される可能性があると判定
していたが、本実施例によって、P1082とP1083とP1085
とP1087とが実行されないことが判定できた。
【0117】(実施例7)独立に施した複数の修正に対
して、それぞれが影響を及ぼす領域が異なることが示せ
る例である。ここでは、図32のプログラムにおける手
続きdevice_driverと手続きdevice_ioとを例に挙げる。
これら手続きdevice_driverとdevice_ioは、それぞれコ
ンソールから外部入出力ポートを直接操作してデータの
入出力を行なうためのものであり、手続きdevice_io中
で呼ばれる手続きPort_inとPort_outは、それぞれ入出
力を直接実行する手続きである。
【0118】ここで、例えば手続きdevice_ioにおい
て、ST111を「d:=data」から「d:=data*4」とだけ変更
する修正1と、手続きdevice_ioにおいて、ST114を「da
ta:=d」から「data:=d*2」とだけ変更する修正2とを独
立して行なった後、両方の修正部分を同じプログラムに
反映させる場合を考える。
【0119】計算経路検出手段12を用いると、図33
に示されるように、実行可能な計算経路として、8本の
計算経路P1101〜P1108を検出していた。これをもとに従
来の方法のまま影響分析手段を用いることによって、修
正2による影響は、ST106において参照されるtempdat
と、ST107において定義されるio_data1と、ST108におい
て定義されるtempdatと、ST111において参照されるdata
と、ST111において定義されるdなどへ及ぶと判定され
ていた。そのため、修正2によって影響が及ぶ変数の集
合のうち、例えばST111で定義される変数を、修正2と
は独立に行なう修正1が変更してしまうと判定すること
になる。
【0120】しかし、本実施例における計算経路限定手
段15を用いると、計算経路P1102とP1103とP1104とP11
05とP1106とP1107とが実行されないことが判定できる。
この判定から、修正2による影響はST111で定義される
変数には及ばず、修正2が及ぼす変数の集合と修正1が
及ぼす変数の集合とは交わらないことが判定でき、両修
正が互いに影響を及ぼしあわないことが判定できる。
【0121】
【発明の効果】以上説明したように本発明は、変数に対
する拘束条件を保存し次の条件文での拘束条件を検証す
ることによって実行されない計算経路を見出す計算経路
限定手段を設けることにより、変数間の依存関係を求め
る際に、実際には実行されない計算経路を予め除外でき
るので、プログラム修正の影響がどう及ぶかを判断する
際に、本当ならば影響が及ばないものに対してまで影響
が及ぶと判断することを防ぐことができるという効果が
ある。
【図面の簡単な説明】
【図1】従来のプログラムの修正による影響分析装置の
構成を示すブロック図である。
【図2】条件文を1つ経由する計算経路を含むプログラ
ムの例を示す図である。
【図3】計算経路検出手段の構成を示すブロック図であ
る。
【図4】図2に示したプログラム中の手続きcalc_1に対
して計算経路検出手段が求めた計算経路を示す図であ
る。
【図5】2つの条件文を経由する計算経路を含むプログ
ラムの例を示す図である。
【図6】図5に示したプログラム中の手続きcalc_2に対
して計算経路検出手段が求めた計算経路を示す図であ
る。
【図7】影響分析手段の構成を示すブロック図である。
【図8】手続きcalc_1中のST13で定義される変数に依存
する変数を示す図である。
【図9】手続きcalc_1においてST13を経由する計算経路
を示す図である。
【図10】計算経路P1011を実行したときに発生する変
数間の依存関係を示す図である。
【図11】計算経路P1012を実行したときに発生する変
数間の依存関係を示す図である。
【図12】計算経路P1011とP1012とを実行したときに発
生する変数間の依存関係を示す図である。
【図13】2つの条件文を経由する計算経路を含むプロ
グラムの例を示す図である。
【図14】図13に示したプログラム中の手続きcalc_3
に対して計算経路検出手段が求めた計算経路を示す図で
ある。
【図15】計算経路P1031を実行する際と計算経路P1032
を実行する際とに発生する変数間の依存関係を示す図で
ある。
【図16】計算経路P1032が実行されるとして、ST32で
定義される変数に依存する変数を示す図である。
【図17】計算経路P1031を実行した際に発生する変数
間の依存関係を示す図である。
【図18】計算経路P1032が実行されないとして、ST32
で定義される変数に依存する変数を示す図である。
【図19】本発明の一実施例の影響分析装置の構成を示
すブロック図である。
【図20】計算経路限定手段の構成を示すブロック図で
ある。
【図21】計算経路限定手段の動作を示すフローチャー
トである。
【図22】2つの条件文を経由する計算経路を含むプロ
グラムの例を示す図である。
【図23】図2に示したプログラム中の手続きcalc_4
に対して計算経路検出手段が求めた計算経路を示す図で
ある。
【図24】2つの条件文を経由する計算経路を含むプロ
グラムの例を示す図である。
【図25】図24に示したプログラム中の手続きcalc_5
に対して計算経路検出手段が求めた計算経路を示す図で
ある。
【図26】2つの条件文を経由する計算経路を含むプロ
グラムの例を示す図である。
【図27】図26に示したプログラム中の手続きcalc_6
に対して計算経路検出手段が求めた計算経路を示す図で
ある。
【図28】2つの条件文を経由する計算経路を含むプロ
グラムの例を示す図である。
【図29】図28に示したプログラム中の手続きcalc_7
に対して計算経路検出手段が求めた計算経路を示す図で
ある。
【図30】3つの条件文を経由する計算経路を含むプロ
グラムの例を示す図である。
【図31】図30に示したプログラム中の手続きcalc_8
に対して計算経路検出手段が求めた計算経路を示す図で
ある。
【図32】コンソールから入出力ポートを直接操作する
プログラムの例を示す図である。
【図33】図32に示したプログラム中の手続きdevice
_driverに対して計算経路検出手段が求めた計算経路を
示す図である。
【符号の説明】
10,50 影響分析装置 11,51 分析対象プログラム保持装置 12,52 計算経路検出手段 13,53 影響分析手段 14,54 制御手段 15 計算経路限定手段 21 プログラム保持手段 22 計算経路情報保持手段 23 条件判定文検出手段 24 拘束条件検出手段 25 条件判定文・拘束条件記録手段 26 拘束条件更新手段 27 論理式真偽判定手段 28 計算経路限定判定手段 29 計算経路限定制御手段

Claims (1)

    (57)【特許請求の範囲】
  1. 【請求項1】 逐次実行される文の集まりからなるプロ
    グラムに関し、前記プログラムの修正による影響を受け
    る変数を分析する、プログラムの修正による影響分析装
    置において、 前記プログラムの構文情報にしたがって前記プログラム
    の実行順序をたどり、前記実行順序をたどることにより
    得られる前記文の系列を計算経路として求める計算経路
    検出手段と、 分岐をもたらす条件文を経由するときの当該条件文中の
    論理式の真偽を決定する変数に対する拘束条件を保存
    し、前記計算経路において後に出現する条件文に至るま
    での区間で当該変数の値の変更の有無を監視して当該後
    に出現する条件文の拘束条件を検証し、当該拘束条件が
    一意に決定可能であれば当該後に出現する条件文の分岐
    のうちいずれかは実行されないと判断することを順次計
    算経路に沿って行ない、実行されない計算経路を見出す
    計算経路限定手段と、 前記計算経路のうち前記計算経路限定手段で実行されな
    いものとして見出されなかった計算経路の中から前記修
    正を施した部分を経由するものを検出し、前記検出され
    た各計算経路について変数の定義と参照との関係から変
    数間の依存関係を求め、前記修正による影響を受ける可
    能性のある変数の集合を求める影響分析手段とを有する
    ことを特徴とするプログラムの修正による影響分析装
    置。
JP4294610A 1992-11-02 1992-11-02 プログラムの修正による影響分析装置 Expired - Fee Related JP2634011B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP4294610A JP2634011B2 (ja) 1992-11-02 1992-11-02 プログラムの修正による影響分析装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP4294610A JP2634011B2 (ja) 1992-11-02 1992-11-02 プログラムの修正による影響分析装置

Publications (2)

Publication Number Publication Date
JPH06214764A JPH06214764A (ja) 1994-08-05
JP2634011B2 true JP2634011B2 (ja) 1997-07-23

Family

ID=17809992

Family Applications (1)

Application Number Title Priority Date Filing Date
JP4294610A Expired - Fee Related JP2634011B2 (ja) 1992-11-02 1992-11-02 プログラムの修正による影響分析装置

Country Status (1)

Country Link
JP (1) JP2634011B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008204405A (ja) * 2007-02-22 2008-09-04 Fujitsu Ltd ソフトウェアのリグレッションテストシステム、リグレッションテストプログラムおよびリグレッションテスト方法

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9069892B2 (en) 2013-05-10 2015-06-30 International Business Machines Corporation Reducing false-positive errors in a software change-impact analysis

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
「情報処理」VOL.33,NO.9(1992−9)P.1078−1086

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008204405A (ja) * 2007-02-22 2008-09-04 Fujitsu Ltd ソフトウェアのリグレッションテストシステム、リグレッションテストプログラムおよびリグレッションテスト方法

Also Published As

Publication number Publication date
JPH06214764A (ja) 1994-08-05

Similar Documents

Publication Publication Date Title
US5230050A (en) Method of recompiling a program by using result of previous compilation
US4476525A (en) Pipeline-controlled data processing system capable of performing a plurality of instructions simultaneously
US5522036A (en) Method and apparatus for the automatic analysis of computer software
US5511198A (en) Optimizing compiler for shortening execution time of object program
US7058935B2 (en) Program compilation and optimization
US5999739A (en) Method and apparatus for elimination of redundant branch instructions from a program
US4843545A (en) Compile method using copy propagation of a variable
JP2634011B2 (ja) プログラムの修正による影響分析装置
JPH11250112A (ja) ハードウェア合成方法およびハードウェア合成装置並びにハードウェア合成プログラムを記録した記録媒体
US4878189A (en) Microcomputer having Z-flag capable of detecting coincidence at high speed
US5548736A (en) Method and apparatus overcoming delay introduced by instruction interlocking in pipelined instruction execution
JPH04287125A (ja) 情報処理装置
JP2778610B2 (ja) パイプライン演算制御方法およびシステム
JPH09282160A (ja) 多分岐制御方式
EP0609903A2 (en) Program language compiling system
JPH07152578A (ja) 最大スタック使用量検出方式
JPH0522272B2 (ja)
CN112035342A (zh) 一种识别代码缺陷的方法及装置
JPS5856153A (ja) サブル−チンリタ−ン方式
JPS58127245A (ja) マイクロプログラム制御デ−タ処理装置
JPH08234995A (ja) プログラム変換装置
JPH1011320A (ja) 計算機等の処理装置におけるromプログラムモニタ装置
JPH05334391A (ja) 制御回路生成装置
JPH0488426A (ja) プログラム網羅率測定装置
JPH05289867A (ja) 多枝分岐制御方式

Legal Events

Date Code Title Description
LAPS Cancellation because of no payment of annual fees