JPH0916389A - プログラム部品自動生成方法及び装置 - Google Patents

プログラム部品自動生成方法及び装置

Info

Publication number
JPH0916389A
JPH0916389A JP7167737A JP16773795A JPH0916389A JP H0916389 A JPH0916389 A JP H0916389A JP 7167737 A JP7167737 A JP 7167737A JP 16773795 A JP16773795 A JP 16773795A JP H0916389 A JPH0916389 A JP H0916389A
Authority
JP
Japan
Prior art keywords
program
component
node
parts
source code
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP7167737A
Other languages
English (en)
Inventor
Katsuhisa Maruyama
勝久 丸山
Kenichi Shima
健一 島
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.)
NTT Inc
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 JP7167737A priority Critical patent/JPH0916389A/ja
Publication of JPH0916389A publication Critical patent/JPH0916389A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Stored Programmes (AREA)

Abstract

(57)【要約】 【課題】 従来は、部品変更は変更を受けた箇所を特定
する操作と、要求に応じて実際に変更を施す操作を人手
で行わなければならないため、ソフトウェア開発者に対
して大きな負担が発生する。 【解決手段】 本発明は、仕様に応じてプログラム部品
案を生成する部品案生成手段20と、生成されたプログ
ラム部品案を逐次整理保存し、かつ変更履歴を管理する
部品ライブラリ30と、部品ライブラリ30内に存在す
るプログラム部品がそれぞれもつ機能の一部を変換する
変換手段40とを有し、検索要求に適合する新たな機能
を持つプログラム部品を生成する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、プログラム部品自
動生成方法及び装置に係り、特に、ソフトウェア開発時
において部品化されたプログラムを自動的に構築するた
めのプログラム部品自動生成方法及び装置に関する。
【0002】
【従来の技術】従来は、手続き型プログラムのソースコ
ードを再利用の対象とする際には、組み立て技術という
再利用技術が適用される。最初に部品化再利用技術につ
いて説明する。
【0003】手続き型のプログラムソースコードを再利
用対象とする組み立て技術という再利用技術では、部品
作成者が予めプログラム部品を作成し、部品ライブラリ
に登録しておく。ソフトウェア開発者は、部品ライブラ
リ内に存在する再利用部品を検索・合成することにより
目的のプログラムを作成する。
【0004】組み立て技術による再利用工程を図25に
示す。同図において、矢印は、プログラム部品に対する
操作の流れを示す。同図に示す構成は、部品作成部1、
部品ライブラリ2、部品検索部3、部品変更部4、部品
合成部5、及び目的のプログラム6よりなる。
【0005】部品作成者が予めプログラム部品を作成
し、部品ライブラリ2に登録する。ソフトウェア開発者
は、部品ライブラリ2内に存在する再利用部品を検索、
変更、合成することで目的のプログラム6を作成する。
部品作成部1は、特定の機能を満たすのに必要なコード
を集め、実際に再利用されるソースコードをプログラム
部品として作成する。
【0006】部品ライブラリ2は、プログラム部品を蓄
積する。部品検索部3は、部品ライブラリ2からソフト
ウェア開発者の要求する機能を満たすプログラム部品を
探す。また、検索時に要求を完全に満たすプログラム部
品だけでなく、その部品に近い類似部品も見つける。
【0007】部品変更部4は、要求を完全に満たすプロ
グラム部品が見つからなかったとき、類似部品から要求
する部品を作成する。なお、プログラム部品を変更する
際には、変更箇所と変更方法を特定するために、その部
品がどのような機能をもつのかを理解する必要がある。
【0008】部品合成部5は、部品検索や変更によって
得られたプログラム部品を組み合わせて、目的のプログ
ラム6を作成する。プログラム部品は単純に結合するだ
けではプログラムとしては実行不可能であるので、組み
合わせた後のプログラムに対しても変更が必要となる。
【0009】このような再利用技術においては、プログ
ラム部品は理想的には、再利用時に変更されないという
性質を持つ。つまり、これらの部品は再利用前後で不変
であることが前提で利用される。しかし、ソフトウェア
開発者の要求は、多種多様であり、プログラム部品を単
独で再利用したり、単純に組み合わせるだけでは目的の
プログラムを作成することはできない。
【0010】図26、図27にソースコードを再利用対
象としたプログラム部品の例を示す。図26(a)に示
すプログラム部品Aは、『入力されたテキストに対し
て、英字と数字の出現頻度を求める』機能を持つ部品で
あり、図26(b)のプログラム部品Bは、『入力され
たテキストに対して、英字とその他の文字の出現頻度を
求める』機能を持つ部品である。また、図27に示すプ
ログラム部品Cは、『プログラム部品Aに対して英字の
大文字と小文字を区別して出現頻度を求める』よう変更
を加えた部品である。図27において、「*」が付与さ
れている部分がプログラム部品Aからプログラム部品C
に変更した際の変更コードである。
【0011】組み立て技術では、図26、図27に示す
プログラム部品は単独で利用するか、単純に組み合わせ
て利用する。よって、部品ライブラリにプログラムA,
B,Cだけが存在する場合、『英字の大文字と小文字を
区別し、英字とその他の文字の出現頻度を求める』機能
を持つ部品を要求すると、部品検索は失敗する。このよ
うに従来は、ソフトウェア開発者がソースコードを適時
変更することが必要であり、変更部分を明確にする手段
が要求されている。また、部品に対する変更を抑えると
いう目的で再利用領域の特性を分析する手段も要求され
ているが、従来の技術でこの要求を満足に満たすものは
存在しない。
【0012】
【発明が解決しようとする課題】上記のように従来の組
み立て技術による再利用では、プログラム部品の機能が
再利用前後で変化しないことが前提とされている。しか
し、プログラム部品を単純に結合するだけでは、実行可
能な目的のプログラムを得ることはできない。よって、
ソフトウェア開発者が組み合わせた後のプログラムを適
時変更する必要がある。部品変更は変更を受けた箇所を
特定する操作と、要求に応じて実際に変更を施す操作に
分けられる。従来は、これらの操作を人手で行わなけれ
ばならないため、ソフトウェア開発者に対して大きな負
担が発生する。
【0013】また、ソフトウェア開発者が再利用を行う
環境は動的に変化し、それに応じてプログラム部品に対
する要求も多種多様に及ぶ。よって、再利用に必要なプ
ログラム部品を予め全て作成し、用意しておくことは不
可能である。また、要求するプログラム部品が部品ライ
ブラリに存在しないことは、部品検索の失敗を引起し、
再利用の効果を低下させる。そこで、部品作成者は、今
後利用される可能性の高いプログラム部品を推測して部
品を作成することになる。部品作成者にとって、どのよ
うなプログラム部品を用意しておくべきか推測すること
に費やす負担は大きい。
【0014】さらに、用意するプログラム部品の数を無
意味に増加させることは、部品管理及び部品検索におい
て、保存領域や検索時間の増大を引き起こす。本発明
は、上記の点に鑑みなされたもので、ソフトウェア開発
者の再利用要求に対して、部品ライブラリ内に予め存在
するプログラム部品と異なる機能を持つ新規プログラム
部品を自動的に生成し、ソフトウェア開発者が部品を変
更する負担や部品作成者が必要な部品を推測する負担を
軽減することが可能なプログラム部品自動作成方法及び
装置を提供することを目的とする。
【0015】
【課題を解決するための手段】図1は、本発明の原理を
説明するための図である。本発明は、プログラム部品に
修正があった場合に、変更箇所及び内容を随時データベ
ース化し、新規プログラム部品を作成する場合には、デ
ータベースから同様な機能をもつ類似の変更事例を検索
し、同様な機能が得られた場合には、該当機能を既存の
プログラム部品の機能から補填することにより、既存の
プログラム部品ライブラリから新規のプログラム部品を
生成する。
【0016】また、本発明は、プログラムのソースコー
ドをグラフに変換するグラフ化ステップ(ステップ1)
と、プログラムのソースコードをソースコードの依存関
係を用いて分割するスライシングステップ(ステップ
2)と、希望する機能のソースコードに関して、過去に
類似のソースコード変更履歴があるかを検索する履歴検
索ステップ(ステップ3)と、変更履歴をもつ既存のプ
ログラムのソースコードを表すグラフと、希望する機能
のソースコードのもつグラフが同一か否かを判定する同
型写像比較ステップ(ステップ4)と、両グラフが同一
グラフ形状を有した場合は、既存のプログラムのソース
コードから同一の部品機能を自動補填する補填ステップ
(ステップ5)よりなる。
【0017】また、本発明では、ソースコードの依存関
係は、ソースコードにおける代入文及び条件式を割り当
てた節点の集合及び、各節点間の参照・非参照関係を表
す矢印からなるグラフを利用して表現する。また、本発
明では、同型写像比較ステップ(ステップ4)は、グラ
フにおける各節点に割当られた代入文及び条件式が内包
する変数を抽象化し、一方のグラフの節点と矢印を他方
のグラフに写像したとき、依存関係の種類及び属性を含
む節点の接続関係と抽象化したラベルが完全に等価であ
るか否かによりグラフ間の比較を行う。
【0018】図2は、本発明の原理構成図である。本発
明のプログラム部品自動生成装置は、仕様に応じてプロ
グラム部品案を生成する部品案生成手段20と、生成さ
れたプログラム部品案を逐次整理保存し、かつ変更履歴
を管理する部品ライブラリ30と、部品ライブラリ30
内に存在するプログラム部品がそれぞれもつ機能の一部
を変換する変換手段40とを有し、検索要求に適合する
新たな機能を持つプログラム部品を生成する。
【0019】また、上記の変換手段40は、部品ライブ
ラリから過去に同型の写像をもつ部品ならびに変更履歴
があるか否かを検索する部品検索手段41と、同型の写
像を持つ部品があった場合は該当部品を使って新たな部
品を合成する部品合成手段42と、部品に部分変更があ
った場合は、部品検索手段により検索された部品ならび
に変更履歴を利用して部品ライブライリの内容を更新す
る部品更新手段43とを有する。
【0020】また、上記の変換手段40は、部品検索手
段41により部品ライブラリ内のプログラム部品の変更
を検出すると、プログラムのソースコード依存関係によ
って分割するプログラムスライシング手段と、グラフの
同型写像比較により変更の影響箇所を含むソースコード
を特定し、部品変更事例として前記部品ライブラリ30
に蓄積するソースコード特定手段とを含む。
【0021】また、上記の部品更新手段43は、過去に
変更を受けたプログラム部品と機能の一部を共有するプ
ログラム部品をグラフの同型写像比較により特定し、部
品変更事例を適用して部品の一部の機能を交換する交換
手段を有する。
【0022】一般に、プログラム部品の受けた変更の事
例を別の部品に単純に適用することは不可能であり、従
来の方法だけで新たな機能を持つプログラム部品を生成
することは難しい。本発明では、ソースコードをプログ
ラム・スライシングによって細かく分割することが特徴
である。スライシングは、部品変更事例を蓄積する際の
変更前後のソースコードを比較する前、及び部品変更事
例を別のソースコードに適用することでコードを変換す
る前に実行される。これにより、各ソースコード断片毎
に機能交換の適用が可能となり、新規プログラム部品が
生成可能となる。
【0023】さらに、本発明では、細かく分割したソー
スレコード断片を1つのソースコードに合成及び再構成
する操作を行う。これにより、再利用の要求が生じた際
に動的にかつ自動的にプログラム部品を生成し、ソフト
ウェア開発者に提供可能となる。
【0024】また、本発明は、変更箇所を特定する手段
を用いることにより、過去の部品変更の変更差異が形式
的に部品変更を含む変更前後のソースコードの断片の対
(交換可能スライス対)で記録できる。また、交換可能
スライス対を用いることで直接変更を受けたことがない
プログラム部品が他のプログラム部品の変更を模倣する
ことができる。従って、これらの2つの手段を組み合わ
せて適用することにより、部品ライブラリに存在しない
プログラム部品を新たに自動生成することが可能であ
る。さらに、区間を限定して作成した区間限定スライス
を変更差異、交換及び合成対象の単位とすることで、区
間限定スライスを作成する際に着目する変数に関して依
存関係を壊さずに、新規のプログラム部品が生成でき
る。つまり、新たに生成されたプログラム部品は、元の
プログラム部品の一部の機能に関して実行結果を保証す
る。
【0025】
【発明の実施の形態】本発明は、過去の部品変更事例を
部品ライブラリに蓄積しておき、既存の部品ライブラリ
内に存在するプログラム部品がそれぞれ持つ機能の一部
を交換することにより、検索要求に適合する新たな機能
を持つプログラム部品を生成するものである。
【0026】以下の説明に先立って、前提となる事柄を
説明する。本発明で扱うプログラムは、一般手続き型プ
ログラムのコードであり、プログラム・スライシングが
適用可能であることが前提となる。 ・プログラム部品とは、再利用対象となる部品の機能を
実現するソースコードを指す。これらのプログラム部品
をデータとして集めてメモリに保存したデータベースが
部品ライブラリである。
【0027】・プログラム・スライシングとは、指定し
た変数に関してソースコードを依存関係に基づき細かく
分割することを指す。 ・機能とは、ソースコード内に表れる変数の値を決定す
る計算を指す。これは、変数の値を決定するのに必要な
コードをプログラム・スライシングによって集めたもの
である。
【0028】・グラフの同型写像比較とは、2つのグラ
フにおいて、一方のグラフの節点及び矢印を他方のグラ
フに写像することで、同型かどうか判断することを指
す。節点の接続関係が完全に一致するとき、2つのグラ
フは同型であるという。 ・部品変更事例とは、あるプログラム部品に対して部品
利用者が変更を与えたときの、変更前後のソースコード
の差異を指す。本発明では、ソースコードをグラフに変
換し、グラフの同型写像比較を行うことで、変更前後の
ソースコードの差異を求める。
【0029】・プログラム部品に対する機能の交換と
は、プログラム部品の機能を担うコードを別のコードに
置き換えることを指す。本発明は、以下の2つの処理に
より新規プログラム部品を自動生成する。 部品ライブラリ内のプログラム部品が変更を受けた
際、プログラム・スライシングにより変更前後のソース
レコードを分割し、グラフの同型写像比較により変更の
影響箇所を含むコードを特定し、部品変更事例として蓄
積する。
【0030】 過去に変更を受けたプログラム部品と
機能の一部を共有する部品をグラフの同型写像比較によ
り特定し、部品変更事例を適用して一部の機能を交換す
ることで新たな機能を持つプログラム部品を自動生成す
る。以下に、本発明で用いる手法を説明する。
【0031】(1) 制御フローグラフ 次に、プログラムの依存関係の解析用の制御フローグラ
フを用いる場合について説明する。本発明では、プログ
ラムの依存関係を解析するために、制御フローグラフ
(CFG)を導入する。制御フローグラフGCFG =(N
CFG ,FCFG ,start )は、基本ブロックと呼ぶ節点の
集合NCFG ,基本ブロック間の制御の流れを表す矢印の
集合ECFG からなる有向グラフである。ここでは、基本
ブロックにソースコードの代入文や条件式を割り当て
る。また、制御フローグラフは、プログラムを実行する
時に最初に制御が移される開始節点start と制御が移る
先を持たない停止節点stopが必ず1つずつ存在する。制
御フローグラフにおいて、節点pから節点qへの矢印の
存在は、節点pの命令を実行した後、プログラム制御が
直ちに節点qに移る可能性があることを指す。このと
き、節点pは節点qの直接先行(predecessor)、節点p
は節点qの直接後行(successor )と呼ぶ。
【0032】制御フローグラフは、プログラムの制御の
流れを静的に解析することで得られる。制御フローグラ
フを用いることで、ソースコードは逐次実行(連接構
造:sequence)、条件分岐(選択構造:selection )、
繰り返し(反復構造:iteration )の3つで表現され
る。
【0033】図26(a)のプログラム部品Aを制御フ
ローグラフで表したものを図3に示す。各節点には、節
点を識別するための順序関係を持つ節点番号(a1,a
2,…,a11)を割り当てる。また、節点の横に記述
されているラベル(例えば、a1: alphabet=0)は、
節点が表す基本ブロックにおける代入文及び条件文であ
る。
【0034】(2) 制約付き到達可能経路 制御フローグラフにおいて、2つの節点間の到達可能性
を判断するために、到達可能経路(Reachable Path)を
導入する。いま、節点nu から節点nh にプログラム制
御が流れる向きに経路をたどるとき、通過する節点の集
合を到達可能経路RP(nu ,nh )と表す。節点nu
から節点nh に到達する経路が存在しないとき、RP
(nu ,nh )=φ(空集合)である。
【0035】また、本発明では、ソースコード内部の任
意の断片をプログラム・スライシングの対象とするため
に、制御フローグラフを辿る際に、制約を付けた制約付
き到達可能経路(CRP:Constrainted Reachable Pat
h)を導入する。いま、制御フローグラフにおいて、上限
節点nu から下限節点uh に上限節点nu を中間節点と
して通らずプログラム制御の流れの向きに経路を辿ると
き通過する節点の集合をCRPf (nu ,nh )、下限
節点nh から上限節点nu に下限節点nh を中間節点と
して通らずプログラム制御の流れと反対の向きに経路を
辿るとき通過する節点の集合をCRPb (nu ,nh
とする。このとき、制約付き到達可能経路CRP
(nu ,nh )は、CRPf (nu ,nh )とCRPb
(nu ,nh )の和集合をとることで求める。
【0036】このように制約付き到達可能経路を導入す
ることで、上限節点や下限節点が条件文や繰り返し文の
内部にあるのか、外部にあるのかを意識せずにスライシ
ングの対象区間を指定することが可能である。 (3) プログラム依存グラフ プログラム・スライシングを実行するため、及びプログ
ラム・スライシングによって作成したソースコードの断
片を合成するために、プログラム依存グラフ(PDG)
を導入する。プログラム依存グラフGPDG =(NPDG
PDG ,entry)は、ソースコードにおける代入文や条
件式を割り当てた節点の集合NPDG (=NCFG )、各節
点間の依存を表す矢印の集合EPDG からなる有向グラフ
である。プログラム依存グラフには、どの節点からも依
存を受けない入口節点entry (=start )が存在する。
節点pから節点qへの矢印は、以下に示す依存関係のど
ちらか一方を表す。
【0037】・制御依存(control dependence) 節点pの文s1は、条件分岐文(if文)か繰り返し文
(while文)であり、文s2を実行するかどうかが
文s1の実行結果に直接依存する場合、節点pから節点
qに制御依存があるという。
【0038】・データ依存(data dependence/flow dep
endence) 節点pの文s1における、ある変数vの定義が、変数v
を参照する文s2を持つ節点qに到達する場合、節点p
から節点qにデータ依存があるという。即ち、 1)文s1において変数vの値を定義し、かつ、 2)文s2において変数vの値を参照している、かつ 3)変数vの値を再定義しない文s1から文s2への実
行可能な経路が存在するときにデータ依存を持つ。
【0039】プログラム依存グラフは、上記の2つの依
存関係をプログラムに対して静的に解析することで作成
可能である。プログラム部品Aの制御フローグラフ(図
3)をプログラム依存グラフで表したものを図4に示
す。図4において、一点鎖線矢印は制御依存を、実線矢
印はデータ依存を表す。プログラム依存グラフと制御フ
ローグラフにおいて、同じ識別番号を持つ節点は割り当
てられている代入文及び条件文が等しい。
【0040】また、プログラム依存グラフには直接明記
しないが、プログラム依存グラフから制御フローグラフ
を再構成する際に、以下に示す出力依存を利用する。 ・出力依存(output dependence) 節点pの文s1における、ある変数vの定義が同じ変数
vを定義する文s2を持つ節点qに到達する場合、節点
pから節点qに出力依存があるという、即ち、 1)文s1において変数vの値を定義し、かつ 2)文s2において変数vの値を定義している、かつ 3)変数vの値を再定義しない文s1から文s2への実
行可能な経路が存在するときに、出力依存を持つ。
【0041】(4) プログラム依存グラフの同型 ソースコードの一部を変換するために、2つのプログラ
ム依存グラフをラベル付き同型写像により比較する。ラ
ベルとは、各節点に割り当てられた代入文と条件式内の
変数を抽象化したものを指す。グラフの形、つまり、一
方のグラフの節点と矢印を他方のグラフに写像し(同型
写像)、依存の種類及び属性を含む節点の接続関係と抽
象化したラベルが完全に等価であるとき、2つのグラフ
は一致するという。図5に、ラベル付き同型写像比較に
よってプログラム依存グラフが一致する例を示す。図5
において、一点鎖線矢印(ci )は制御依存、(dj
は、データ依存を表す。
【0042】(5) プログラム・スライシング ソースコードを機能毎に分割するために、プログラム・
スライシングを導入する。ここで、機能とは、変数の値
を決定する計算を指す。プログラム・スライシングと
は、着目する変数に影響を与える一部のコードだけをも
とのソースコードから抜き出すことである。プログラム
・スライシングによって作成されたソースコードの断片
をスライスと呼ぶ。節点nにおける文sの変数vに関す
る静的スライスは、プログラム依存グラフにおける制御
依存関係及びデータ依存関係を辿り、文sの変数vに到
達するすべての節点の集合である。これは、文sの変数
vから制御及びデータ依存関係をプログラム制御の流れ
る向きと反対(プログラム依存グラフにおいて矢印を逆
向き)に辿ることで得られる。ここで、節点nにおける
文の変数vに関する静的逆方法スライスをS(n,v)
と表す。この静的逆方向スライスS(n,v)は、節点
nにおける文の変数vの実行結果を保存する完全なプロ
グラムを構成する。つまり、静的スライスにおいて節点
nの文の変数vの値は、もとのソースコードにおける節
点nの文の変数vの値と等価であることが保証される。
【0043】本発明では、制約付き到達可能経路を用い
ることで、静的逆方向スライスに対象区間の制限を与え
ることが可能な区間限定スライスを導入する。区間限定
スライスとは、もとのプログラムの指定した区間におい
て、依存関係を辿る際に通過する節点を集めたものであ
る。区間限定スライスを作成するためには、着目する区
間と変数を同時に指定する。これは、スライシング基準 Cc =<nu ,nh ,v> で表現され、作成される区間限定スライスは、 S# (nu ,nh ,v) となる。ここで、nu ,nh は区間を表す節点で、これ
らの節点で決定される制約付き到達可能経路がプログラ
ム・スライシングの対象区間である。
【0044】図6は、プログラム部品Aから作成される
区間限定スライスの例を示す。同図(a)は制約付き到
達可能経路、(b)はプログラム依存グラフ、(c)は
制御フローグラフ、(d)はソースコードを示す。同図
(a)においてa3を上限節点、a7を下限節点とい
う。同図に示す区間限定スライスは、 S# (a3,a7,{alphabet}) を示す。
【0045】さらに、本発明では、スライスの合成を行
うために補スライスを導入する。補スライスS* (n,
v)とは、もとのソースコードから静的逆方向スライス
S(n,v)を取り除いたものである。さらに、区間限
定スライスについても静的逆方向スライスと同様に、区
間限定補スライスを導入する。区間限定補スライスは指
定された区間に含まれる節点集合CRP(nu ,nh
の要素から区間限定スライスS# (nu ,nh ,v)の
要素を取り除くことで作成する。
【0046】図7は、区間限定補スライスの例を示す。
同図は、プログラム部品Aの区間限定補スライスを示し
ており、(a)はプログラム依存グラフ、(b)は制御
フローを示す。同図は、プログラム部品Aの区間限定ス
ライス(図6)に対する区間限定補スライス S#*(a3,a7,{alphabet}) を示す。
【0047】ここで、補スライスだけでは完全なプログ
ラム依存グラフ及び制御フローグラフが形成できないた
め、ヌル節点を導入する。ヌル節点とは、節点の実行前
後でプログラムの状態を変化させない節点である。図7
において、点線節点はヌル節点、実線節点は区間限定補
スライスS#*(a3,a7,{alphabet})を表す。
【0048】
【実施例】以下に、本発明の実施例を説明する。図8
は、本発明の一実施例の部品化再利用によるプログラム
作成装置の構成を示す。同図において、図25と同一部
分には、同一符号を付しその説明を省略する。
【0049】部品化再利用によるプログラム作成装置1
0は、部品生成部110、部品ライブラリ120、部品
検索部3、部品変更部130及び部品合成部5より構成
される。部品ライブラリ120は、部品作成部1より提
供された特定の機能を満たすのに必要なコードを集め、
実際に再利用されるソースコードをプログラム部品及び
過去に行われた変更事例をデータとし、それらを纏めて
保持するデータベースである。また、プログラム部品の
みならず、変更事例に対しても追加、削除の操作が可能
である。
【0050】部品生成部110は、変更事例を用いるこ
とにより新規再利用部品を生成する。内部の詳細につい
ては後述する。部品変更部130は、部品の変更操作に
ついては従来の動作と同様であるが、変更前後の再利用
部品を対応付けて記録する。この記録された内容は、部
品生成部110の入力となる。
【0051】図8において、一点鎖線で囲まれている部
品自動生成装置100は、部品生成部110と部品ライ
ブラリ120から構成される。以下に、部品自動生成装
置100について説明する。図9は、本発明の一実施例
の部品自動生成装置の概要を示す。部品生成装置100
の部品生成部110は、交換可能スライス対特定部11
1、スライス作成部112、スライス置換部113、ス
ライス合成部114、スライス再構成部115より構成
される。
【0052】なお、本発明の部品ライブラリ120や、
部品変更部130より入力されるプログラム部品とは、
ソースコードであり、逐次実行、条件分岐、繰り返しの
みの良構造であるとする。良構造とは、条件分岐や繰り
返しのネストに交差がないことを指す。
【0053】部品ライブラリ120に格納される変更事
例は、変更前後のプログラム部品で変更差異を含む区間
限定スライスの対、つまり、部品変更時に、交換可能な
スライス対を記録したものである。交換可能スライス対
特定部111は、変更前後の区間限定補スライスを同型
写像により比較することで、変更前後で影響を受けた範
囲を特定し、変更事例として部品ライブラリ120に記
録する。
【0054】スライス作成部112は、与えられたソー
スコードを分割し、区間限定スライス及び区間限定補ス
ライスを作成する。スライス置換部113は、過去に変
更を直接受けていないプログラム部品から作成した区間
限定スライスと変更事例に含まれる変更後の区間限定ス
ライスを交換する。この処理は、交換対象の区間限定ス
ライスの節点の対応関係に基づいて、プログラム部品の
節点の一部を入れ換えることで達成される。
【0055】スライス合成部114は、交換対象の区間
限定スライスに対する節点の対応関係により、接続元及
び接続先が決定していない矢印を接続する。この処理に
より、交換前の区間限定補スライスと交換後の区間限定
スライスが合成され、新規プログラム部品のプログラム
依存グラフが生成される。
【0056】スライス再構成部115は、新たに生成さ
れたプログラム依存グラフから、前述の制御フローグラ
フを作成し、新規プログラム部品のソースコードを再構
成する。以下に、過去にソフトウェア開発者によって行
われた部品変更箇所を交換可能スライス対特定部111
により特定し、変更事例を部品ライブラリ120に記録
する処理と、変更事例を用いて、スライス置換部11
3、スライス合成部114、スライス再構成部115に
より区間限定スライス同士の交換、合成、再構成を行う
ことでプログラム部品の機能の一部を交換する処理を説
明する。
【0057】[変更箇所の特定]まず、交換可能スライ
ス対特定部111の変更箇所の特定処理について説明す
る。部品ライブラリ120内のプログラム部品は部品合
成前及び合成時に数々の変更を受ける。そこで、過去に
おける部品変更は類似するプログラム部品に対しても将
来行われる可能性が高いと判断し、新規部品を自動生成
するために部品変更事例を記録する。プログラム部品が
変更された際の変更誤差の特定に、スライシングを適用
し、区間限定補スライス同士の同型写像比較を用いるの
が特徴である。本発明では、これにより特定された2つ
のスライスを交換可能スライスと呼ぶ。
【0058】プログラム部品Pをプログラム部品Qに変
更したときの、変更箇所を特定する処理手順を以下に示
す。部品化再利用によるプログラム作成装置10におけ
る処理は、プログラム部品P(図9)(部品ライブラリ
120)→部品検索部3→部品変更部130→プログラ
ム部品Q→交換可能スライス対特定部111→変更事例
(部品ライブラリ120)の順に実行される。
【0059】図10は、本発明の一実施例の変更箇所の
特定手順を示すフローチャートである。 ステップ110) 変更前後のソースコードP,Qに対
して、それぞれ入力節点集合NPi,NQi及び出力節点集
合NPo,NQoを求める。また、ソースコードP,Q内に
それぞれ含まれる変数のベキ集合(ρ:power set)
P ,VQ を求める。ここで、入力節点とはプログラム
依存グラフにおいてentry 節点に接続されている節点,
出力節点はどの矢印の接続元にもならない節点である。
【0060】ステップ120) すべての入出力節点及
び変数集合の各要素の組合せに対してステップ130か
らステップ190を繰り返す。 ステップ130) プログラム部品P,Qに対してそれ
ぞれスライシング基準〈nPi,nPo,vP 〉,〈nQi
Qo,vQ 〉でスライシングを適用し、区間限定スライ
スSP ,SQ と区間限定補スライスS * P ,S * Q を作
成する。
【0061】ここで、nPi∈NPi,nPo∈NPo,nQi
Qi,nQo∈NQoである。 ステップ140) 各区間限定スライス及び区間限定補
スライスをプログラム依存グラフに変換する(SP →G
P ,S * P →G * P ,SQ →GQ ,S * Q →G * Q )。
【0062】ステップ150) プログラム依存グラフ
において、区間限定補スライスは不必要な矢印を含むの
で、区間限定補スライスG * P ,G * Q を以下のように
変形する。 (G * P →G * P ′,G * Q →G * Q ′) ステップ160) 変形後の区間限定補スライス
* P ′,G * Q ′同士のラベル付き同型写像による比
較を行なう。
【0063】ステップ170) 変更箇所を含む変更前
後で影響を受けた範囲を特定する。同型写像比較により
2つの区間限定補スライスが一致、かつ、それらの節点
集合が空集合でない(G * P ′=G * Q ′≠φ)のと
き、それぞれの区間限定補スライスG * P ′,G * Q
に対する2つの区間限定スライスの対〈GP ,GQ 〉を
交換可能スライス対と定義する。
【0064】ステップ180) 変更前後のプログラム
部品P,Qから他の区間限定スライス (GPv,GQv) を作成し、交換可能スライス対に包含される区間限定ス
ライス同士 (GPv⊆GP ,GQv⊆GQ ) の同型写像比較により、交換可能スライス対の2つの区
間限定スライスにおける節点の対応を決定する。
【0065】ステップ190) 節点の対応関係を持つ
交換可能スライス対 〈GP ,GQ 〉 を部品ライブラリ120に記録する。区間限定補スライ
スの変形手順は以下のようになる。
【0066】図11は、本発明の一実施例の区間限定補
スライス変形処理の手順を示すフローチャートである。 ステップ151) すべての矢印に対して、ステップ1
51〜ステップ153の処理を繰り返す。すべての矢印
の処理が終了したら、ステップ154に移行する。
【0067】ステップ152) 矢印の接続元及び接続
先節点の節点についてラベルを持つかどうか検査する。
矢印を検査する際、entry 節点はラベルを持つ節点とみ
なす。ラベルを持つ場合には、ステップ151に移行
し、ラベルを持たない場合には、ステップ153に移行
する。
【0068】ステップ153) 接続元及び接続先節点
のどちらかがラベルを持たない節点のとき、その矢印を
削除する。ステップ151に移行する。 ステップ154) すべての節点に対して、ステップ1
54〜ステップ156の処理を繰り返す。
【0069】ステップ155) 節点が矢印を持つかど
うかを検査して、持たない場合にはステップ156に移
行し、持つ場合にはステップ154に移行する。 ステップ156) 節点が矢印を一つも持たないとき、
その節点を削除する。 [機能の一部交換処理]次に、機能の一部交換の処理に
ついて説明する。
【0070】上記の変更箇所の特定処理によって得た交
換可能スライス対を用いることで、区間限定スライス同
士を実際に交換し、交換後の区間限定スライスと交換前
の区間限定補スライスを合成する。従来のテキストにお
ける行単位での交換や関数単位での交換と異なり、再利
用部品の機能に着目し、区間限定スライスを単位として
交換を行なうことで交換差異を別の部品に適用する点が
特徴である。
【0071】プログラム部品P,Qから作成した交換可
能スライス対〈GP ,GQ 〉を用いて、部品ライブラリ
120内に存在するプログラム部品Rから新規プログラ
ム部品を生成するときの機能交換の処理手順を以下に示
す。図9に示す部品自動生成装置においてその動作は次
の順序で実行される。
【0072】変更事例とプログラム部品R(部品ライブ
ラリ120)→スライス置換部113→スライス合成部
114→スライス再構成部115→部品検索部3。図1
2は、本発明の機能交換処理の手順を示すフローチャー
トである。 ステップ200) 交換可能スライス対を用いて、ソー
スコードRにおけるスライスGR を交換可能スライス対
の変更後の区間限定スライスGQ に置換する。置換後の
プログラム依存グラフをPDGR ''' とする。
【0073】ステップ300) 置換後のプログラム依
存グラフPDGR ''' において接続先及び接続元を決定
し、区間限定スライスGQ と区間限定補スライスG * R
を合成する。合成によって生成されたプログラム依存グ
ラフをPDGnew とする。ここで、区間限定補スライス
* R は、区間限定スライスSR に対する区間限定補ス
ライスS * R をプログラム依存グラフに変換したもので
ある。
【0074】ステップ400)プログラム依存グラフP
DGnew から、制御フローグラフCFGnew を生成し、
新規プログラム部品R’を再構成する。区間限定スライ
スGR とGP の置換手順(ステップ200)は以下のよ
うになる。図13は、本発明の一実施例の置換処理の手
順を示すフローチャートである。
【0075】ステップ210) ソースコードRに対し
て、入力節点集合NRi及び出力節点集合NRoを求める。
また、ソースコードRに含まれる変数のベキ集合VR
求める。 ステップ220) すべての入出力節点及び変数集合の
各要素の組合せに対して、ステップ230〜ステップ2
90を繰り返す。
【0076】ステップ230) プログラム部品Rに対
してスライシング基準〈nRi,nRo,vR 〉でスライシ
ングを適用し、区間限定スライスSR を作成する。ここ
で、nRi∈NRi,nRo∈NRo,vR ∈VR である。 ステップ240) 区間限定スライスをプログラム依存
グラフに変換する(S R →GR )。
【0077】ステップ250) 前述の変更箇所の特定
処理により記録された交換可能スライス対〈GP
Q 〉の変更前の区間限定スライスGP と区間限定スラ
イスGR同士のラベル付き同型写像による比較を行な
う。不一致の場合にはステップ220に移行し、一致す
る場合にはステップ260に移行する。
【0078】ステップ260)同型写像比較により2つ
の区間限定スライスが一致する(G P =GR )とき、区
間限定スライスSR に対する区間限定補スライスS * R
を作成し、プログラム依存グラフに変換する(S * R
* R )。 ステップ270) GP とGR の同型写像比較の際の節
点の対応関係により、ソースコードRのプログラム依存
グラフPDGR におけるGR をGP に置き換える。置き
換え後のプログラム依存グラフPDGR ’はGP とGR
が混合された形となる。
【0079】ステップ280) 交換可能スライスGP
とGQ の節点の対応関係により、置き換え後のプログラ
ム依存グラフPDGR ’内部でGP の節点の一部を対応
するGQ の節点に置き換える。置き換え後のプログラム
依存グラフPDGR ”は、G Q とGR が混合された形と
なる。
【0080】ステップ290) 置き換えられた一部の
節点を錨節点(anchor vertex)とし、GQ をPDGR
に投射する。投射とは、錨節点から接続をたどり、PD
R”上にGQ を構築することを指す。投射により生成
されるプログラム依存グラフPDGR ''' は、GQ とG
* R が混合された形となる。
【0081】次に、区間限定スライスGQ と区間限定補
スライスG * R の合成手順を示す。図14は、本発明の
一実施例の合成処理の手順を示すフローチャートであ
る。 ステップ310) プログラム依存グラフPDGR にお
いて、接続元を持たない制御依存を表すすべての矢印に
対して、ステップ320〜370を繰り返す。
【0082】ステップ320) 条件分岐の領域を表す
領域節点(region vertex)を接続先に持つ矢印である場
合には、ステップ330に移行し、それ以外の矢印の場
合にはステップ340に移行する。 ステップ330) 条件分岐の領域を表す領域節点(re
gion vertex)を接続先に持つ矢印は、条件分岐文を持つ
節点に接続する。
【0083】ステップ340) 繰り返しの領域を表す
領域節点を接続先に持つ矢印の場合にはステップ350
に移行し、それ以外の矢印の場合にはステップ360に
移行する。 ステップ350) 繰り返しの領域を表す領域節点を接
続先に持つ矢印の場合は、繰り返し文及び条件分岐文を
持つ節点に接続する。
【0084】ステップ360) 領域節点を接続先に持
たない矢印の場合には、ステップ370に移行し、それ
以外であればステップ310に移行する。 ステップ370) 領域節点を接続先に持たない矢印の
場合には、entry 節点に接続する。
【0085】上記の合成手順を行なうことで、区間限定
スライスGQ と区間限定補スライスG * R からプログラ
ム依存グラフPDGnew が得られる。このプログラム依
存グラフPDGnew を制御フローグラフに変換するため
の、区間限定スライスの再構成手順を以下に示す。区間
限定スライスの再構成は、SQ にG * R に存在する節点
を挿入することで達成する。
【0086】図15は、本発明の一実施例の再構成処理
の手順を示すフローチャートである。 ステップ410) 区間限定補スライスG * R に存在す
るすべての節点Nに対して、挿入範囲集合 Insert(n), Insert(join(n)) (n∈N) が変化しなくなるまで、ステップ420〜ステップ44
0を繰り返す。挿入範囲集合Insert(n) とは、節点nを
途中に挿入可能な矢印の集合を表す。また、join(n) と
は条件分岐節点nの分岐の枝となる区間を限定するため
の合流節点を指す。
【0087】ステップ420) 挿入する節点nを接続
元及び接続先とする矢印に着目し、次に示す再構成操作
a〜fに対して、節点nの挿入範囲集合Insertk (n) を
決定する。再構成操作a〜fが適用可能な矢印が存在し
ない場合、また矢印の接続元及び接続先節点の挿入位置
が未決定な場合、挿入範囲集合 Insertk (n) =PR(start,stop) である。また、節点nが条件分岐節点のときは、再構成
操作a〜fによって Insertk (join(n)) も同時に決定する。
【0088】ステップ430) 各挿入範囲集合Insert
k (n) ,Insertk (join(n)) の積集合をとり、節点nの
挿入範囲集合Insert(n) ,Insert(join(n)) を以下の定
義より求める。
【0089】
【数1】
【0090】ステップ440) 節点nの挿入位置が一
意に決定した場合、節点nに決定済み印(* )を付け
る。以後、この節点の挿入位置Insert* (n) は変化させ
ない。 ステップ450) 挿入位置が一意に決定していない
(決定済み印のない)節点hの挿入位置Insert* (h)=
{i}を一意に決定する。ここで、iは挿入対象の制御
フローグラフの各矢印に順序関係を持つ識別番号を割り
当てた際、その番号が最大のものを指す。
【0091】ステップ460) 再構成によって得られ
た制御フローグラフCFGnew から、プログラム依存グ
ラフPDGnew ’作成する。 ステップ470) 再構成前のプログラム依存グラフP
DGnew と再構成後のプログラム依存グラフPD
new ’を同型写像により比較して、一致する場合には
ステップ480に移行し、不一致の場合には当該再構成
処理を終了する。
【0092】ステップ480) 一致するとき、再構成
後の制御フローグラフCFGnew をソースコードに変換
する。挿入する際の再構成操作を以下に示す。再構成操
作において、join(start) ≡stopである。また、DEF
(n) は節点nで定義される変数集合、od(n,v) は節点n
の変数vに関する出力依存(output dependence)先の節
点を表す。ただし、od(n,v) が存在しないとき、od(n,
v) ≡stopとする。さらにod-1(n,v) は節点nで変数v
が定義されていると仮定したときの出力依存元の節点を
表す。ただし、od -1(n,v) が存在しないとき、od-1(n,
v) ≡start とする。節点nが挿入可能な位置を表す集
合を求める再構成操作を以下に示す。
【0093】[再構成操作a] (制御依存m→nに関
して) mは分岐条件節点を、nは分岐条件節点か変数代入節点
を表す。いまM’はmの枝に含まれる条件分岐節点集合
とする。このとき、挿入範囲集合は以下の定義より求め
る。
【0094】
【数2】
【0095】[再構成操作b] (制御依存n→Mに関
して) nは制御依存の接続元より条件分岐節点を、Mは分岐条
件節点か変数代入節点を表す。いま、M’はmの枝に含
まれる条件分岐節点集合とする。このとき、挿入範囲集
合は以下の定義より求める。
【0096】
【数3】
【0097】[再構成操作c] (データ依存M→nに
関して) Mは変数代入節点を、nは条件分岐節点か変数代入節点
を表す。このとき、挿入範囲集合は以下の定義より求ま
る。
【0098】
【数4】
【0099】[再構成操作d] (データ依存n→Mに
関して) nは変数代入節点を、Mは条件分岐節点か変数代入節点
を表す。このとき、挿入範囲集合は以下の定義より求め
る。
【0100】
【数5】
【0101】[再構成操作e] (出力依存M→nに関
して) M,nは変数代数節点を表す。節点mはm∈Mとする。
このとき、挿入範囲集合は以下の定義より求まる。
【0102】
【数6】
【0103】[再構成操作f] (出力依存n→Mに関
して) n,Mは変数代入節点を表す。節点mはm∈Mとする。
このとき、挿入範囲集合は以下の定義より求まる。
【0104】
【数7】
【0105】次に、本発明の一実施例の具体例を用いて
説明する。部品ライブラリ120に、図26(a)
(b)に示すプログラム部品A,Bが存在すると仮定す
る。いま、部品利用者がプログラム部品Aを図27に示
すプログラム部品Cに変更する。このとき、新規プログ
ラム部品が生成される処理の流れの概要は、図16、図
17に示すようになる。図16の(1−A)は、プログ
ラム部品A、(1−B)は、部品Aの区間限定スライ
ス、(1−C)は部品Aの区間限定補スライス、(1−
D)は変形後の補スライス、(1−E)はプログラム部
品C、(1−F)は部品Cの区間限定スライス、(1−
G)は、部品Cの区間限定補スライス、(1−H)は変
形後の補スライスを示す。図17の(2−A)は、プロ
グラム部品B、(2−B)は部品Bの区間限定スライ
ス、(2−C)は部品Bの区間限定補スライス、(2−
D)は部品Aの区間限定スライス、(2−E)は部品C
の区間限定スライス、(2−F)は新規再利用部品のプ
ログラム依存グラフ、(2−G)は新規再利用部品の制
御フローグラフ、(2−H)はプログラム部品Bを示
す。
【0106】図16及び図17中、
【0107】
【数8】
【0108】は、区間限定スライスと区間限定補スライ
スの合成を表す。以下に部品変更箇所の特定の処理と機
能交換処理について説明する。 [部品変更箇所の特定処理]まず、部品変更箇所の特定
処理について説明する。
【0109】(1) プログラム部品A(図16(1−
A)=図26(a))とプログラム部品(C)(図16
(1−E)=図27)の入出力節点集合、 NAi={a1,a2,a3,a4,a10,a11}, NA0={a10,a11}, NCi={c1,c2,c3,c4,c5,c13,c1
4,c15,c16}, NCO={c14,c15,c16} を求める。また、変数集合 VA =ρ{ch, alphabet, digit }, VC =ρ {ch, alphabet, digit, capital_alphabe
t, small _alphabet} を求める。
【0110】(2) プログラム部品Aに対して、入力
節点をa1、出力節点a10、変数集合{alphabet}を
選び、区間限定スライス S# (a1,a10{alphabet})(図16(1−
B)) を生成する。また、プログラム部品Cに対して、入力節
点をc1、出力節点c14、変数集合{alphabet}を選
び、区間限定スライス S# (c1,c14{alphabet})(図16(1−
F)) を作成する。
【0111】(3) 上記の区間限定スライスに対する
区間限定補スライス S#*(a1,a10{alphabet}) と、 S#*(c1,c14{alphabet}) のプログラム依存グラフ(図16(1−C),(1−
G))をそれぞれ作成する。
【0112】(4) 上記の区間限定補スライスをそれ
ぞれ変形し、簡単化する(図16(1−D),(1−
H))。 (5) 変形後の2つの区間限定補スライス(図16
(1−D),(1−H))に対してラベル付き同型写像
による比較を行う。このとき、抽象化によって各変数名
は、 ch⇒#1、 alphabet⇒#2、 digit ⇒#3 と置き換えられる。また、同型写像比較結果から、節点
の対応関係は、 a2=c3, a7=c10, a8=c10, a10=c14 となる。
【0113】(6) 同型写像比較により区間限定補ス
ライスが一致する場合、交換可能スライス対を特定す
る。図16において、区間限定スライス(1−B)と
(1−F)が交換可能スライス対である。 (7) 交換可能スライス対の各区間限定スライスと同
じ区間で、2つのソースコードに同時に含まれる変数に
ついて、区間限定スライスを作成する。いま、図16
(1−B),(1−F)において、変数chと変数digit
について区間限定スライスを作成すると、 S# (a1,a10,{ch}) ={a3,a4,a9}⊆S# (a1,a10,{alphabet}) S# (c1,c14,{ch}) ={c4,c5,c12}⊆S# (c1,c14,{alphabet})
【0114】
【数9】
【0115】となるので、S# (a1,a10,{c
h})とS# (c1,c14,{ch})に対してラベル
付き同型写像比較を試みる。いま、S# (a1,a1
0,{ch})とS# (c1,c14,{ch})は同型と
なるので、節点の対応関係は、 a3=c4, a4=c5, a9=c12 となる。
【0116】(8) 区間限定補スライス同士、及び変
数chに関する区間限定スライス同士の同型写像比較によ
り、交換可能スライス対における節点の対応関係を求め
る。制御依存矢印entry →a1とentry →c13, デー
タ依存矢印a1→a10とc13→c14より、a1=
c13となる。
【0117】(9) 節点の対応関係を含む交換可能ス
ライス対 〈S# (a1,a10,{alphabet}), S# (c1,c14,{alphabet})〉 を変更事例として、部品ライブラリ120に記録する。
節点の対応関係は、 a1=c13,a3=c4,a4=c5,a9=c12 である。
【0118】次に、機能交換の処理について説明する。 [機能交換処理] (1) プログラム部品B(図17(2−A)=図26
(b))の入出力節点集合 NBi={b1,b2,b3,b4,b9,b10} NB0={b9,b10} を求める。また、変数集合 VB =ρ{c,alpha, others } を求める。
【0119】(2) プログラム部品Bに対して、入力
節点をb1,出力節点b9,変数集合{alpha }を選
び、区間限定スライス S# (b1,b9,{alph})(図17(2−B)) を作成する。ここで、プログラム部品Bは変更事例(A
→C)に無関係な部品である。
【0120】(3) 交換可能スライス対 〈S# (a1,a10,{alphabet}), S# (c1,c14,{alphabet})〉 の変更前区間限定スライスS# (a1,a10,{alph
abet})(図17(2−D)=図16(1−B)と上記
の区間限定スライスS# (b1,b9,{alph})(図
17(2−B))に対してラベル付き同型写像比較を行
う。このとき、 ch=c⇒#1, alphabet=alpha ⇒#2 という変数の置き換えによるラベルの抽象化を行ってい
る。図17において、2つの区間限定スライスは同型
で、節点の対応関係は、a1=b1,a3=b3,a4
=b4,a5=b5,a6=b6,a9=b8となる。
【0121】(4) 図17(2−C)は、プログラム
部品Bの区間限定補スライスである。このプログラム依
存グラフを図18(a)に示す。図18(a)におい
て、区間限定スライスS# (b1,b9,{alph})
(図18(a)中の点線節点)に対して機能の変換を行
う。交換を行う区間限定スライスは、S# (b1,b
9,{alph})とS# (c1,c14,{alphabet})
である。
【0122】(4−1) 図17(a)において、上記
の(2)で求めた節点の対応関係を用いて、区間限定ス
ライスS# (b1,b9,{alph})の各節点を、S#
(a1,a10,{alphabet})内の節点に置換する
(b1←a1 b3←a3,b4←a4,b5←a5,
b6←a6,b8←a9)。置換(B←A)後のプログ
ラム依存グラフは、図18(b)のようになる。
【0123】(4−2) 図17(2−D)、(2−
E)に示す交換可能スライス対 〈S# (a1,a10,{alphabet}), S# (c1,c14,{alphabet})〉 の節点の対応関係より、図18(b)の一部の節点をS
# (c1,c14,{alphabet})内の節点に置換する
(a1←c13,a3←c4,a4←c5,a9←c1
2)。また、図18(b)において、節点a6に対応す
る節点は、S# (c1,c14,{alphabet})中に存
在しないので、削除する。置換(A←C)後のプログラ
ム依存グラフは図18(c)のようになる。
【0124】(4−3)置換された節点c4,c5,c
12,c13を錨節点とし、S# (c1,c14,{al
phabet})をS#*(b1,b9,{alph})に投射す
る。投射によって生成されたプログラム依存グラフを図
19に示す。 (5) 図19に示すプログラム依存グラフにおいて、
接続元を持たない制御依存を表す矢印を合成操作に従っ
て、適切な節点に接続する。図19において、節点T1
を接続元に持つ矢印が、接続対象である。いま、節点T
1の接続先は、条件分岐の領域を表す領域節点なので、
合成操作aにより、節点T1は節点c6か節点c8に重
ねることが可能である。いま、節点T1を節点c8に重
ねたときのプログラム依存グラフを図20(=図17
(2−F))に示す。図20は、重ね合わされて生成さ
れる新規プログラム部品のプログラム依存グラフであ
る。
【0125】(6) 図20に対して、再構成操作を行
うために、データ依存に関わる変数名と出力依存を付加
したものが図21である。図21において、網かけの節
点は挿入対象である。また、2点鎖線は出力依存、デー
タ依存矢印(実線矢印)に割り付けられたラベルは、接
続元で定義されている変数名を表す。再構成操作に対し
て、節点が挿入されるプログラム部品の制御フローグラ
フを図22(a)に示す。ここで、図22(a)の制御
フローグラフにおいて、各矢印をcc1,cc2,…と
おく。
【0126】[ステップ1] 1a. 図21の節点b2に対して、entry →b2より
再構成操作aを適用すると、
【0127】
【数10】
【0128】となる。b2→b7,b2→b10に関し
ては、節点b7,b10の位置が未決定なので、再構成
操作は適用しない。よって、 Insert(b2)={cc1,cc2,cc3,cc4,
cc12,cc13} となる。
【0129】1b. 図21の節点b7に対して、c8
[F]→b7より再構成操作aを適用すると、 Inserta (b7)=RP(c8[F],c12)={cc11} となる。節点b7に接続を持つ他の節点b2,b10
は、位置が未決定なので、再構成操作は適用しない。ま
た、節点b7の挿入位置は、一意にきまるので、決定済
印“*”を付け、 Insert* (b7)={cc11} となる。
【0130】1c. 図21の節点b9に対して、entr
y →b9より再構成操作aを適用すると、
【0131】
【数11】
【0132】となる。また、c13→b9より再構成操
作cを適用すると、 Insertc (b9)=RP(c13,stop)={cc13} となる。よって、 Insert* (b9)=Inserta (b9)∩Insertc (b9)={cc13} となる。節点b9は、一意に決定するので、決定済印
“*”を付ける。
【0133】1d. 図21の節点b10に対して、en
try →b10より再構成操作aを適用すると、
【0134】
【数12】
【0135】となる。節点b10に接続を持つ他の節点
b2,b7,b9は位置が未決定なので、再構成操作は
適用しない。よって、 Insert(b10)={cc1,cc2,cc3,cc
4,cc12,cc13} となる。
【0136】[ステップ2] 2a. 図21の節点b2に対して、entry →b2より
再構成操作aを適用すると、 Inserta (b2)={cc1,cc2,cc3,cc
4,cc12,cc13} となる。b2→b7により、再構成操作dを適用する
と、 Insertd (b2)=RP(start,b7) ={cc1,cc2,cc3,cc4,cc5,cc6, cc7,cc8,cc9,cc10,cc11} となる。よって、 Insert(b2)=Inserta (b2)∩Insertd (b2) ={cc1,cc2,cc3,cc4} となる。
【0137】2b. 図21の節点b10に対して、en
try →b10より再構成操作aを適用すると、 Inserta (b10)={cc1,cc2,cc3,cc
4,cc12,cc13}となる。b7→b10によ
り、再構成操作cを適用すると、 Insertc (b10)=RP(b7,stop) ={cc5,cc6,cc7,cc8,cc9,cc10, cc11,cc12,cc13} となる。b9→b10より再構成操作eを適用すると、 Inserte (b10)=RP(b9,stop) ={cc13} となる。よって、 Insert* (b10) =Inserta (b10)∩Insertc (b10)∩Inserte (b10) ={cc13} となる。節点b10の挿入位置は、一意に決定したの
で、決定済印“*”を付ける。
【0138】[ステップ3] 3a. 節点b2に対してentry →b2より再構成操作
aを適用すると、 Inserta (b2)={cc1,cc2,cc3,cc
4,cc12,cc13} となる。b2→b7,b2→b10より、再構成操作d
を適用すると、 Insertd (b2)=RP(start,b7)∩RP(start ,b9) ={cc1,cc2,cc3,cc4,cc5,cc6, cc7,cc8,cc9,cc10,cc11} となる。よって、 Insert(b2)=Inserta (b2)∩Insertd (b2) ={cc1,cc2,cc3,cc4} となる。
【0139】(7) 挿入範囲集合Insert* (b7),
Insert* (b9),Insert* (b10)が一意に決定
し、Insert(b2)がステップ2とステップ3で変化し
ないことにより、再構成操作の適用を終了する。挿入対
象節点の挿入範囲を図22(a)に示す。
【0140】(8) Insert(b2)において、識別番
号が最大の矢印cc4を選ぶと、 Insert* (b2)={cc4} となる。節点を挿入した後の制御フローグラフを図22
(b)に示す。 (9) 節点b2,b7,b9,b10を挿入した後の
図22(b)に示す制御フローグラフからプログラム依
存グラフを作成すると、図21と等価となる。よって、
再構成操作は成功で、この制御フローグラフをソースコ
ードに変換する。変換後の新規プログラム部品B’のソ
ースコードを図23に示す。プログラム部品B’は、
「英字と大文字と小文字を区別し、英字とその他の文字
の出現頻度を求める」機能を持つ。
【0141】図24に前述の機能の一部変換の説明の
(5)で、T1=c6としたときに作成される新規プロ
グラム部品B”を示す。プログラム部品B”は、「英字
の大文字と小文字を区別し、英字と英字の大文字以外の
文字の出現頻度を求める」機能を持つ。この機能は、プ
ログラム部品B’と比較して変数othersに関して違いを
持つ。
【0142】また、プログラム部品B’とB”におい
て、区間限定スライス S# (c1,c14,{alphabet})(交換可能スライ
ス対) に関しては、その機能が保証される。つまり、プログラ
ム部品B’とB”の区間CRP(c1,c14)の変数
alphabetの実行結果は、プログラム部品C(ソースコー
ドC)の区間CRP(c1,c14)の変数alphabetの
実行結果と等価である。
【0143】なお、本発明は、上記の実施例に限定され
ることなく、特許請求の範囲内で種々、変更・応用が可
能である。
【0144】
【発明の効果】上述のように、プログラム部品の自動生
成方法及び装置によれば、部品の変更箇所を特定する手
段と、他の再利用部品の変更事例を蓄積及び適用できる
手段を提供することで、部品変更を自動的に行い、既存
の部品ライブラリに存在するプログラム部品と異なる機
能を持つ新規プログラム部品を生成することが可能であ
る。これにより、本発明は、以下のような効果を奏す
る。
【0145】(1) 既存の部品ライブラリに存在しな
い部品が要求された場合であっても、新たに生成された
プログラム部品により当該要求を満たすことができるた
め、従来、検索に失敗していた要求に対しても部品検索
に成功する可能性は高くなり、ソフトウェア開発者に対
する再利用時の部品変更の負担が軽減される。
【0146】(2) 部品変更が自動化されたことによ
り、多種多様にわたるすべてのプログラム部品を予め部
品ライブラリに用意する必要がなくなる。従って、管理
するプログラム部品の数が削減され、部品ライブラリの
管理及び部品検索の方法が容易になると共に、膨大な資
源を必要としない。
【0147】(3) 部品の自動生成の様子をソフトウ
ェア開発者に提示することにより、ソフトウェア開発者
に部品変更の指針を与える。また、新規プログラム部品
の機能を明確にすることは、新しい機能を持つ別のプロ
グラム部品を作成する際に役立つ。
【0148】(4) 部品の変更事例をプログラム部品
が存在する部品ライブラリから動的に取得するので、再
利用環境に適した部品が自動生成され、再利用率が向上
する。また、過去の変更事例が部品ライブライリに自動
的に蓄積されるので、部品ライブラリを自動的に洗練す
ることにつながる。
【図面の簡単な説明】
【図1】本発明の原理を説明するための図である。
【図2】本発明の原理構成図である。
【図3】プログラム部品を制御フローグラフで表した例
を示す図である。
【図4】プログラム依存グラフの例を示す図である。
【図5】ラベル付き同型写像比較によりプログラム依存
グラフが一致する例を示す図である。
【図6】区間限定スライスの例を示す図である。
【図7】区間限定補スライスの例を示す図である。
【図8】本発明の一実施例の部品化再利用によるプログ
ラム作成装置の構成図である。
【図9】本発明の一実施例の部品自動生成装置の概要を
示す図である。
【図10】本発明の一実施例の変更箇所の特定手順を示
すフローチャートである。
【図11】本発明の一実施例の区間限定補スライス変形
処理の手順を示すフローチャートである。
【図12】本発明の一実施例の機能交換処理の手順を示
すフローチャートである。
【図13】本発明の一実施例の置換処理の手順を示すフ
ローチャートである。
【図14】本発明の一実施例の合成処理の手順を示すフ
ローチャートである。
【図15】本発明の一実施例の再構成処理の手順を示す
フローチャートである。
【図16】本発明の一実施例の変更箇所特定時の流れを
示す図である。
【図17】本発明の一実施例の部品利用時の流れを示す
図である。
【図18】本発明の一実施例のスライスの置換操作を示
す図である。
【図19】本発明の一実施例の合成操作を説明するため
の図である。
【図20】本発明の一実施例の新規プログラム部品を示
す図である。
【図21】本発明の一実施例のスライスの再構成操作を
説明するための図である。
【図22】本発明の一実施例の新規プログラム部品を説
明するための図である。
【図23】本発明の一実施例の新規プログラム部品B’
を示す図である。
【図24】本発明の一実施例の新規プログラム部品B”
を示す図である。
【図25】従来の組み立て技術における再利用工程を示
す図である。
【図26】ソースコードの例(プログラム部品A,B)
を示す図である。
【図27】変更後のソースコードの例(プログラム部品
C)を示す図である。
【符号の説明】
1 部品作成部 3 部品検索部 5 部品合成部 6 目的のプログラム 10 部品化再利用によるプログラム作成装置 20 部品案生成手段 30 部品ライブラリ 40 変換手段 41 部品検索手段 42 部品合成手段 43 部品更新手段 100 部品自動生成装置 110 部品生成部 120 部品ライブラリ 130 部品変更部

Claims (8)

    【特許請求の範囲】
  1. 【請求項1】 プログラム部品に修正があった場合に、
    変更箇所及び内容を随時データベース化し、 新規プログラム部品を作成する場合には、前記データベ
    ースから同様な機能をもつ類似の変更事例を検索し、 同様な機能が得られた場合には、該当機能を既存のプロ
    グラム部品の機能から補填することにより、既存のプロ
    グラム部品ライブラリから新規のプログラム部品を生成
    することを特徴とするプログラム部品自動生成方法。
  2. 【請求項2】 プログラムのソースコードをグラフに変
    換するグラフ化ステップと、 前記プログラムのソースコードをソースコードの依存関
    係を用いて分割するスライシングステップと、 希望する機能のソースコードに関して、過去に類似のソ
    ースコード変更履歴があるかを検索する履歴検索ステッ
    プと、 変更履歴をもつ既存のプログラムのソースコードを表す
    グラフと、希望する機能のソースコードのもつグラフが
    同一か否かを判定する同型写像比較ステップと、 両グラフが同一グラフ形状を有した場合は、前記既存の
    プログラムのソースコードから同一の部品機能を自動補
    填する補填ステップよりなる請求項1記載のプログラム
    部品自動生成方法。
  3. 【請求項3】 前記ソースコードの依存関係は、 前記ソースコードにおける代入文及び条件式を割り当て
    た節点の集合及び、各節点間の参照・非参照関係を表す
    矢印からなるグラフを利用して表現する請求項2記載の
    プログラム部品自動生成方法。
  4. 【請求項4】 前記同型写像比較ステップは、 前記グラフにおける各節点に割り当てられた代入文及び
    条件式が内包する変数を抽象化し、 一方のグラフの節点と矢印を他方のグラフに写像したと
    き、依存関係の種類及び属性を含む節点の接続関係と抽
    象化したラベルが完全に等価であるか否かによりグラフ
    間の比較を行う請求項2記載のプログラム部品自動生成
    方法。
  5. 【請求項5】 仕様に応じてプログラム部品案を生成す
    る部品案生成手段と、 生成された部品案を逐次整理保存し、かつ変更履歴を管
    理する部品ライブラリと、 前記部品ライブラリ内に存在するプログラム部品がそれ
    ぞれもつ機能の一部を変換する変換手段とを有し、 検索要求に適合する新たな機能を持つプログラム部品を
    生成することを特徴とするプログラム部品自動生成装
    置。
  6. 【請求項6】 前記変換手段は、 前記部品ライブラリから過去に同型の写像をもつ部品な
    らびに変更履歴があるか否かを検索する部品検索手段
    と、 同型の写像を持つ部品があった場合に、該当部品を使っ
    て新たな部品を合成する部品合成手段と、 部品に部分変更があった場合は、前記部品検索手段によ
    り検索された部品ならびに変更履歴を利用して前記部品
    ライブライリの内容を更新する部品更新手段とを有する
    請求項5記載のプログラム部品自動生成装置。
  7. 【請求項7】 前記変換手段は、 前記部品検索手段により前記部品ライブラリ内のプログ
    ラム部品の変更を検出すると、プログラムのソースコー
    ド依存関係によって分割するプログラムスライシング手
    段と、 グラフの同型写像比較により変更の影響箇所を含むソー
    スコードを特定し、部品変更事例として蓄積するソース
    コード特定手段とを含む請求項5記載のプログラム部品
    自動生成装置。
  8. 【請求項8】 前記部品更新手段は、 過去に変更を受けたプログラム部品と機能の一部を共有
    するプログラム部品をグラフの同型写像比較により特定
    し、前記部品変更事例を適用して部品の一部の機能を交
    換する交換手段を有する請求項6記載のプログラム部品
    自動生成装置。
JP7167737A 1995-07-03 1995-07-03 プログラム部品自動生成方法及び装置 Pending JPH0916389A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP7167737A JPH0916389A (ja) 1995-07-03 1995-07-03 プログラム部品自動生成方法及び装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP7167737A JPH0916389A (ja) 1995-07-03 1995-07-03 プログラム部品自動生成方法及び装置

Publications (1)

Publication Number Publication Date
JPH0916389A true JPH0916389A (ja) 1997-01-17

Family

ID=15855201

Family Applications (1)

Application Number Title Priority Date Filing Date
JP7167737A Pending JPH0916389A (ja) 1995-07-03 1995-07-03 プログラム部品自動生成方法及び装置

Country Status (1)

Country Link
JP (1) JPH0916389A (ja)

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6675207B1 (en) 1999-02-15 2004-01-06 International Business Machines Corporation Possibility of execution evaluating apparatus and method therefor
US7263531B2 (en) 2000-11-14 2007-08-28 Microsoft Corporation Minimum delta generator for program binaries
US7363613B2 (en) 2003-06-23 2008-04-22 International Business Machines Corporation Program maintenance support device, program maintenance supporting method, and program for the same
JP2009134445A (ja) * 2007-11-29 2009-06-18 Mitsubishi Electric Corp ソフトウェア部品抽出支援装置
JP2009237691A (ja) * 2008-03-26 2009-10-15 Fuji Electric Systems Co Ltd ソフトウェア開発支援装置、プログラム及びブロック図検索方法
WO2010095289A1 (ja) * 2009-02-18 2010-08-26 三菱電機株式会社 プログラム解析支援装置
US8914391B2 (en) 2011-05-20 2014-12-16 International Business Machines Corporation Method, program, and system for converting part of graph data to data structure as an image of homomorphism
US9208590B2 (en) 2011-05-20 2015-12-08 International Business Machines Corporation Manipulation of an object as an image of a mapping of graph data
JP2016076080A (ja) * 2014-10-06 2016-05-12 三菱電機株式会社 ソースコード解析装置、ソースコード解析方法、及びプログラム
JP2018151713A (ja) * 2017-03-10 2018-09-27 株式会社日立製作所 ソフトウェア構造変更支援システム及びソフトウェア構造変更支援方法
JP2019215867A (ja) * 2018-06-11 2019-12-19 タタ・コンサルタンシー・サーヴィシズ・リミテッド ソースコードのプロパティを検証するための方法およびシステム
JP2020038521A (ja) * 2018-09-05 2020-03-12 株式会社日立製作所 ソースコード生成支援装置およびソースコード生成支援方法
JP2021128431A (ja) * 2020-02-12 2021-09-02 株式会社日立製作所 リスク評価システム及びリスク評価方法

Cited By (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8943084B2 (en) 1920-05-20 2015-01-27 International Business Machines Corporation Method, program, and system for converting part of graph data to data structure as an image of homomorphism
US6675207B1 (en) 1999-02-15 2004-01-06 International Business Machines Corporation Possibility of execution evaluating apparatus and method therefor
US7263531B2 (en) 2000-11-14 2007-08-28 Microsoft Corporation Minimum delta generator for program binaries
US7681190B2 (en) 2000-11-14 2010-03-16 Microsoft Corporation Minimum delta generator for program binaries
US7685590B2 (en) 2000-11-14 2010-03-23 Microsoft Corporation Minimum delta generator for program binaries
US7363613B2 (en) 2003-06-23 2008-04-22 International Business Machines Corporation Program maintenance support device, program maintenance supporting method, and program for the same
US8006229B2 (en) 2003-06-23 2011-08-23 International Business Machines Corporation Program maintenance support device and program for the same
US8185878B2 (en) 2003-06-23 2012-05-22 International Business Machines Corporation Program maintenance support device, program maintenance supporting method, and program for the same
JP2009134445A (ja) * 2007-11-29 2009-06-18 Mitsubishi Electric Corp ソフトウェア部品抽出支援装置
JP2009237691A (ja) * 2008-03-26 2009-10-15 Fuji Electric Systems Co Ltd ソフトウェア開発支援装置、プログラム及びブロック図検索方法
JP5138090B2 (ja) * 2009-02-18 2013-02-06 三菱電機株式会社 プログラム解析支援装置
WO2010095289A1 (ja) * 2009-02-18 2010-08-26 三菱電機株式会社 プログラム解析支援装置
US9087151B2 (en) 2009-02-18 2015-07-21 Mitsubishi Electric Corporation Program analysis support device
US8914391B2 (en) 2011-05-20 2014-12-16 International Business Machines Corporation Method, program, and system for converting part of graph data to data structure as an image of homomorphism
US9208590B2 (en) 2011-05-20 2015-12-08 International Business Machines Corporation Manipulation of an object as an image of a mapping of graph data
JP2016076080A (ja) * 2014-10-06 2016-05-12 三菱電機株式会社 ソースコード解析装置、ソースコード解析方法、及びプログラム
JP2018151713A (ja) * 2017-03-10 2018-09-27 株式会社日立製作所 ソフトウェア構造変更支援システム及びソフトウェア構造変更支援方法
JP2019215867A (ja) * 2018-06-11 2019-12-19 タタ・コンサルタンシー・サーヴィシズ・リミテッド ソースコードのプロパティを検証するための方法およびシステム
JP2020038521A (ja) * 2018-09-05 2020-03-12 株式会社日立製作所 ソースコード生成支援装置およびソースコード生成支援方法
JP2021128431A (ja) * 2020-02-12 2021-09-02 株式会社日立製作所 リスク評価システム及びリスク評価方法

Similar Documents

Publication Publication Date Title
US8826225B2 (en) Model transformation unit
Maydan et al. Array-data flow analysis and its use in array privatization
Engels et al. Building integrated software development environments. Part I: tool specification
US5361357A (en) Method and apparatus for optimizing computer file compilation
Bousse et al. Advanced and efficient execution trace management for executable domain-specific modeling languages
JPH0916389A (ja) プログラム部品自動生成方法及び装置
WO2008042400A2 (en) The title is vague
WO2008042401A2 (en) Process automation system and method employing property attachment techniques
Tao et al. Code graph model (cgm): A graph-integrated large language model for repository-level software engineering tasks
Nesterov et al. Discovering architecture-aware and sound process models of multi-agent systems: a compositional approach: R. Nesterov et al.
Chin et al. DECODE: A Co‐operative Program Understanding Environment
Reid et al. Ncq: Code reuse support for node. js developers
CN117992062A (zh) Ifc格式的三维模型数据转换方法、设备及存储介质
JP2016181228A (ja) ソースコード演算装置およびソースコード演算方法
Gyimesi et al. Characterization of source code defects by data mining conducted on GitHub
JP2008225898A (ja) 変換装置、変換プログラム及び変換方法
US8042089B2 (en) Process automation system and method employing multi-stage report generation
Amyot et al. Understanding existing software with use case map scenarios
Jukšs et al. Scope in model transformations
US12561229B2 (en) Stack frame generation for source code enclosed by macros
Gonçalves et al. ReFlO: An interactive tool for pipe-and-filter domain specification and program generation
DeBaud Lessons from a domain-based reengineering effort
Bransen On the Incremental Evaluation of Higher-Order Attribute Grammars
Farzan et al. Partial bounding for recursive function synthesis
Harmer et al. Transformations to Restructure and Re–engineer COBOL Programs