論文

オブジェクト指向プログラムの変更作業を支援する
影響波及解析システム
横森 励士†

近藤和弘††

大畑 文明†††

井上 克郎††††

Impact Analysis System for Changes on Object-Oriented Programs
Reishi YOKOMORI†, Kazuhiro KONDOU†† , Fumiaki OHATA††† , and Katsuro INOUE††††

あらまし 影響波及解析とは，プログラム変更の影響を受ける部分を識別する手法で，回帰テストでのテスト
ケース選択に利用されてきた．我々はプログラム理解，保守といったより広い範囲でも影響波及解析が利用できると考えているが，既存の手法は被影響部分の探索ルールがテストケース選択用に特化されているため，利用目
的に応じて探索ルールを定義できる仕組みが必要となっている．また近年のソフトウェア開発環境では，オブジェクト指向言語が多く利用されており，それらに対応した解析手法およびその実装が求められている．本論文
では，ユーザの利用目的に応じて様々な影響波及ルールが定義できる影響波及解析手法を提案する．提案手法では，オブジェクト指向言語 JAVA を対象に，クラスメンバ間の関係を表す 2 つのグラフに基づき解析を行う．また，提案手法を JAVA 影響波及解析システムとして実装し，その有効性を検証する．
キーワード

影響波及解析，プログラム理解，オブジェクト指向プログラム，JAVA

変更の影響が変更箇所以外に及ぶ場合が数多く存在す

1. ま え が きるため，オブジェクト指向言語の概念を考慮した解析

ソフトウェアに加えられた変更による影響を受ける

手法およびその実装が求められている．

部分を識別し，回帰テストでのテストケースを選択す

本論文では，JAVA [6] を対象言語として影響波及解るための手法として，影響波及解析が提案されている．

析手法の提案を行う．提案手法では，被影響部分の探

我々はプログラム理解，保守といったより広い範囲で

索ルールをユーザの目的に応じて選択可能にするこも影響波及解析が利用できると考えているが，従来のとで，回帰テストだけではなく，プログラム理解，保影響波及解析手法は，被影響部分の探索ルールなどが守といった，より広い範囲での影響波及解析の利用を

回帰テストにおけるテストケース選択用に特化した形実現している．さらに，クラスのメンバ（メソッド，で実現されている．そのため，適用時に探索ルールを

フィールド）間の関係を表現する 2 種類のグラフを利利用目的に応じて定義できる仕組みが必要となる．

用することで，メソッドのオーバーライド，フィール

また，現在のソフトウェア開発環境ではオブジェク

ドの隠蔽を考慮した影響波及解析を実現する．また，

ト指向言語が多く利用されている．オブジェクト指向

提案手法を JAVA 影響波及解析システムとして実装し，プログラムでは，従来の手続き型プログラムに比べ，手法の有効性を検証する．
以降，2. では影響波及解析について紹介し，3. では提案する影響波及解析手法について説明する．4. で† 大阪大学大学院基礎工学研究科，豊中市

Graduate School of Engineering Science, Osaka University, Toyonaka-shi, 5608531, Japan†† ソニー・エリクソン・モバイルコミュニケーションズ株式会社

Sony Ericsson Mobile Communications Japan, Inc. Konan, Minato-ku, Tokyo,

JAVA 影響波及解析システムについて述べ，5. で手法の有効性を検証する．最後に，6. でまとめと今後の課題について述べる．

108-0075 Japan†††

株式会社東芝TOSHIBA CORPORATION, 1-1-1,shibaura,minato-ku,Tokyo,105-8001,Japan†††† 大阪大学大学院情報科学研究科，豊中市

2. オブジェクト指向プログラムに対する影響波及解析

Graduate School of Information Science and Technology, Osaka University,

本節では，既存の影響波及解析手法と，本論文の対Toyonaka-shi, 560-8531, Japan

電子情報通信学会論文誌

D–I

Vol. Jxx–D–I No. xx

pp. 1–8xxxx 年 xx 月

1

電子情報通信学会論文誌 ’xx/xx Vol. Jxx–D–I No. xx

象となるオブジェクト指向言語に対する影響波及解析

ラムスライス（Program Slice）[9] に基づいており，あについて説明する．さらに，既存手法の問題点についる文に影響を及ぼす文の集合および，ある文が影響をて考察する．

及ぼす文の集合を抽出することで被影響部分を特定す

2. 1 影響波及解析

る．クラス単位およびメンバ単位の解析に比べて正確

ソフトウェア保守工程において，プログラム開発者

な結果を得る事ができるが，文間の依存関係など，多はソフトウェアに対し多くの変更を行うが，その際，くの解析が前提となり，解析コストは膨大になる．

誤って欠陥を作り込んでしまう確率は 50%から 80%に

本論文では，メソッドの追加，削除，またシグニチャも及ぶことが Hetzel により示されている [12]．要因との変更といったメンバに関する変更に着目し，メンバ

しては，ソフトウェアに変更を加えたときに，変更しに関する変更による被影響部分の抽出を目的としたメていない部分に関しても何らかの影響が及ぶ可能性がンバ単位での解析を行う．

あることが挙げられる．

2. 2 既存手法の問題点

ソフトウェアに加えられた変更による影響を受ける

従来の影響波及解析手法は回帰テストにおけるテス部分（被影響部分と呼ぶ）を識別するための手法としトケース選択用に特化した形で実現されており，被影て，影響波及解析が提案されている．影響波及解析の響部分の探索ルールもテストケース選択用に特化して適用分野の代表例として，変更後のソフトウェアが仕定義されていた．しかし，プログラム理解，保守など

様通りに動作するかを確認するための，回帰テストのより広い範囲での影響波及解析の利用を考えた場（Regression Testing）[11] への利用が挙げられる．回帰合，影響の定義は利用目的に応じて異なる．例えば，

テストは，回帰テストにおけるテストケースの選択 [2] を目的とStep 1: 被影響部分の識別
Step 2: 修正コンポーネントの再テスト方法の決定した場合には，変更または削除されたメソッドをテス

Step 3: 再テストによる補償範囲の認識
Step 4: テストケースの選択，再利用，修正，新規作成という過程をたどるが，Step 1: 被影響部分の識別に化したメソッドへの呼び出し経路をテストするテスト

おいて影響波及解析を利用することで，適用すべきテ響を求める場合には，オーバーライド関係の変化した

ストケースを変更した部分に関係のあるものだけに限メソッドを直接呼び出してる部分を検出できれば十分定し，必要最小限に抑えることができる．

である．そのため，ユーザの目的に応じて被影響部分

こ れ ま で に オ ブ ジェク ト 指 向 プ ロ グ ラ ム に 対 すトするテストケース，およびオーバーライド関係の変ケースの検出が必要となる．一方で，修正個所の特定を目的としてメソッドオーバーライドの変化による影の探索ルールが選択可能な解析手法が必要である．

る影響波及解析手法がいくつか提案されている

また，現在のソフトウェア開発環境ではオブジェク[1], [5], [8], [13], [14]．ここ で は ，既 存 手法 を 解 析のト指向言語が多く利用されている．オブジェクト指

粒度で大きく 3 つに分類する．

向プログラムでは，従来の手続き型プログラムに比

クラス単位: クラスを被影響部分の単位とする [13]．

べ，変更箇所以外に影響を及ぼすような変更が数多く

メンバ単位・文単位の解析に比べて解析の粒度が大き存在する．文献 [4], [10] では，オブジェクト指向プロ

く，数百クラスにもおよぶような大規模ソフトウェア

グラムにおける変更は，メソッドの オーバーライド

に対して変更を行う際に有効な手法である．しかし，（Override ），フィールドの隠蔽（Hide）といったオブクラス内のどのメンバが影響を受けているかを特定でジェクト指向特有の概念により様々な影響が引き起こきないため，影響の予測としては効果が薄く，回帰テ

されることが述べられている．メンバを解析の単位とストにおいて再テストの必要がないメンバも解析結果した影響波及解析手法では，これらの独自概念は考に含み得ることが指摘されている [7]．

慮されているが満足な実装がなされていない [8], [14]．

メンバ単位: クラスのメンバ（メソッド，フィールド）そのため，オブジェクト指向言語の独自概念を考慮しを被影響部分の単位とする [8], [14]．オブジェクトのた解析手法およびその実装が求められている．

構成要素であるメンバが解析結果となり，直感的に理解しやすく，クラス単位での解析より正確な結果を得る事ができる．

文単位: 文を被影響部分の単位とする [1], [5]．プログ2

3. MOG，MAG による影響波及解析
本節では，クラスのメンバ間の関係を表現する二つのグラフを利用した影響波及解析手法の提案を行う．

論文／オブジェクト指向プログラムの変更作業を支援する影響波及解析システム

Base ｛m1(int x) {//do something

public classpublic void

}
}

new

}

m3() {
obj =Derived();obj.m1(”ten”);

public voidnew

DerivedBase ｛m1(int x) {//do something}

public classpublic void

extends

public void｝m2() {
obj =Derived();obj.m1(10);public voidm1(String x) {//do something

public void｝

Base
void m1(int)

Test ｛Derived obj;

class

}

｝

}

this.m2()

m4() {（a） program

void m1(String)
Derivedvoid m1(int)Testvoid m2()
void m3()
void m4()（b） MOGBase
void m1(int)void m1(String)
Derivedvoid m1(int)Testvoid m2()
void m3()
void m4()（c） MAG
図 1 メンバオーバーライドグラフ（MOG) とメンバアクセスグラフ（MAG）
Fig. 1 Member Override Graph（MOG) and Member Access Graph（MAG)

提案手法により，メソッドのオーバーライド，フィー側で考慮していた．それに対して MOG では，グラフ

ルドの隠蔽を考慮した影響波及解析の実現，および構築時にクラスの継承に関する情報からあらかじめメ

ユーザの様々な目的に対応可能な影響の定義を行うこンバ間の関係を求め，辺として表現している．

とができる．

MAG とは，メソッドの呼び出し，フィールドの参3. 1 方照などのメンバ間のアクセス関係をグラフで表現した

針

影響は，オーバーライドや呼び出し経路などに変化もので．クラスのメンバ間に存在する．

が生じたメンバから発生し，呼び出し経路を通じて波

3. 2 メンバオーバーライドグラフ（MOG）

及するものである．回帰テストに利用されてきた既存

ここでは，MOG の構成要素である MOG 節点およの影響波及解析は，呼び出し経路を逆にたどる，つまび MOG 辺の定義，MOG の構築方法について述べる．

り一部の呼び出し経路に限定した特殊な波及を考えて

図 1(b) は，図 1(a) のプログラムから構築される MOG

いたとみなすことができる [2]．

である．

には，メソッドのオーバーライドやフィールドの隠蔽

MOG 節点は，各クラスの各メソッドに対応した
MOG メソッド節点と，各フィールドに対応した MOGなどによって生じる様々な種類の影響の発生および波フィールド節点の二種類から成る．静的初期化子およ

及のパターンを組み合わせできる枠組を実現するため，びコンストラクタはメンバではないが，メンバと同様グラフを用いてオーバーライド関係および呼び出し関のアクセス関係を持つことから，これらも MOG 節点係を表現する．影響の発生はグラフの変化に，影響のとして扱う．MOG 節点は後述する MAG 節点と一対波及はグラフ探索にそれぞれ置き換えることができる．

一で対応する．

我々は，より一般的な影響波及解析の枠組，具体的

本論文では，これらを実現するために，メンバオー

MOG 辺は，2 つ の MOG 節点間 のオーバラ イド

バーライドグラフ（Member Override Graph ，MOG）

関係を有向辺で表現したものであり，メソッドオー

およびメンバアクセスグラフ（Member Access Graph ，

バーライドを表す MOG オーバーライド辺，抽象メMAG）を利用した手法を提案する．MOG とは，メソッ

ソッドの実装を表現する MOG 実装辺，フィールドのドオーバーライド，抽象メソッドの実装，フィールド

隠蔽を表現する MOG 隠蔽辺の三種類から成る．各の隠蔽などのメンバ間のオーバーライド関係をグラフ

辺は，オーバーライドするメンバからオーバーライで表現したもので，継承により親子関係となるクラス

ドされるメンバへ引かれる．図 1(b) では，MOG メのメンバ間に存在する．従来の手法 [8], [14] では，グソッド節点 void Derived.m1(int) から，void

ラフを構築する際に考慮されているのはクラスの継承

Base.m1(int) へ MOG オーバーライド辺が引かれている．MOG は，各クラスのメソッド，フィールド宣までで，メンバ間の関係においては抽出アルゴリズム

3電子情報通信学会論文誌 ’xx/xx Vol. Jxx–D–I No. xx

言の解析による MOG 節点の抽出，およびクラスの継メソッドの内容を変更した場合，表 1 の D-E1 から，承関係の解析による MOG 辺の抽出により構築される．

変更されたメソッドに対応する MAG および MOG 節

3. 3 メンバアクセスグラフ（MAG）
ここでは，MAG の構成要素である MAG 節点および MAG 辺の定義，MAG の構築方法について述べる．

点が直接影響節点に含まれる．また，変更前後の MAGにおける辺を比較してアクセス関係に変更（追加・削図 1(c) は，図 1(a) のプログラムから構築される MAG

節点が直接影響節点に含まれる．図 2 は，変更が行わ除・更新）があった場合，D-E2〜E5 に対応する MAGである．

れた節点が M8 であるときの直接被影響節点の例を示MAG 節点は，MOG 節点と同様に，MAG メソッド
節点，MAG フィールド節点から成る．MAG 節点は
MOG 節点と一対一で対応する．
MAG 辺は，2 つの MAG 節点間のアクセス関係を

している．

MOG

有向辺で表現したものであり，メソッド呼び出しを表す MAG 呼び出し辺，フィールドの参照を表す MAG

M10

M8

M

F

: Method Node
: Changed Node
: Generated Edge

バからアクセスされるメンバへ引かれ，2 つの節点間に複数の辺が存在する場合もある．

M9

M7

M4

参照辺の二種類から成る．各辺は，アクセスするメン

F1

M6

M3

M1

MAG

M5

M2

M1
F2

M5

M2
M6

M3

M7

M4

: Field Node

F1
M9
M10

M8

F2

: MOG and MAG Edge

: Direct Affected Node
: Lost Edge

図 2 直接被影響節点の例（表 1 参照）
A Example of the Direct Affected Nodes（See Table 1）

Fig. 2MAG の構築時には，MAG 節点を抽出した上で，メソッド呼び出し式，フィールド参照式を解析し，各フィールドがどのクラスのオブジェクトを参照しうるかをあらかじめ解析した上で，各文において実際に参照しうるメンバの集合を求めることで MAG 辺の抽出を行う．このとき，参照変数が指すインスタンスの型が特定できないことにより，アクセスされるメンバが一意に決まらない場合がある．その際には，その参照
変数の型から派生したクラスに存在する，同一シグニ
チャのすべてのメンバに対して辺を引く．

3. 4 MOG，MAG による影響波及解析
変 更 によって 何 らか の 変化 が 生 じた MOG 節点 ，MAG 節点を検出し，その節点から MOG 辺，MAG 辺をたどることで，被影響部分の抽出を行う．さらに，探索ルールを変更可能とすることにより，ユーザの間接被影響節点は表 2 に挙げる 2 種類があり，直接的な変更によって変化した値を参照する節点などの直接被影響節点から推移的に影響を受けうる節点を指す．
そのため，変更によって直接影響を受けた節点に関係のあるメンバが全て含まれる事になり，多くのメンバ
が間接被影響節点として抽出される．間接被影響節点によって，変更箇所で利用されるメンバの限定および，従来手法のテストケースの限定時において想定されていた，変更により実行結果が変わりうる場所の限定を行うことができる．図 3 は，MOG の直接被影響節点が M7，M8，MAG の直接被影響節点が M6，M8 であるときの間接被影響節点の例をそれぞれ示している．

MOG

様々な目的に対応することができる．

3. 4. 1 被影響部分の分類

M3

M1

M4

提案する影響波及解析により抽出される被影響部分の単位は，プログラム上ではメンバ，MOG，MAG 上
では節点となる．本論文では，これらをそれぞれ被影

響メンバ（Affected Member ），被影響節点（Affected

Node ）と呼ぶ．

M

MAG

M5

M2
M6

M7
M8

: Method Node

F1
M9
M10

F

M1
F2

M5

M2
M6

M3

M7

M4

: Field Node

M8

F1
M9
M10

F2

: MOG and MAG Edge

: Direct Affected Node

: Indirect Affected Node

: Generated Edge

: Lost Edge

図 3 間接被影響節点の例（表 2 参照）
Fig. 3 A Example of the Indirect Affected Nodes（See Table 2）

ユーザの目的に応じた被影響メンバの抽出を行うため，被影響部分を表す節点を直接的な影響を表す直接

3. 4. 2 被影響部分の抽出

被影響節点(Direct Affected Node) と間接的な影響を表提案手法では，前節で定義した各被影響節点の抽出

す間接被影響節点(Indirect Affected Node) に分類する．

の有無を組み合わせることにより，ユーザの目的に応

直接被影響節点は変更が行われた節点に基づいて決じた被影響メンバの抽出が可能となる．組み合わせは定されるもので，表 1 に挙げる 5 種類がある．例えば，数多く存在するが，ここでは代表的な 3 つの探索ルー

4論文／オブジェクト指向プログラムの変更作業を支援する影響波及解析システム
表 1 直接被影響節点
Table 1 Direct Affected Node
直接被影響節点
D-E1: 影響の発生元の節点

概要
プログラム変更に対応する節点（発生，消失した節点もこれに該当する）．
（図 2 の MOG 節点 {M8} および MAG 節点の {M8}）
プログラム変更により発生した辺の終節点．
（図 2 の MOG 節点 {M7} および MAG 節点 {M6，M8}）
プログラム変更により発生した辺の始節点．
（図 2 の MOG 節点 {M8} および MAG 節点 {M3，M4}）
プログラム変更により消失した辺の終節点．
（図 2 の MOG 節点 {M6} および MAG 節点 {M7，M8}）
プログラム変更により消失した辺の始節点．
（図 2 の MOG 節点 {M8} および MAG 節点 {M3，M4}）

D-E2: 辺の発生先の節点
D-E3: 辺の発生元の節点
D-E4: 辺の消失先の節点
D-E5: 辺の消失元の節点

表 2 間接被影響節点
Table 2 Indirect Affected Node
間接被影響節点
I-E1: 順方向の推移的な影響波及のある節点

概要
直接被影響節点から有向辺に従い到達可能な節点．
（図 3 の MAG 節点 {M9，M10 ，F1, F2}）
I-E2: 逆方向の推移的な影響波及のある節点 直接被影響節点から有向辺の逆向きに従い到達可能な節点．
（図 3 の MOG 節点 {M10} および MAG 節点 {M1，M3，M4}）
表 3 探索ルールの例
Table 3 The Example of Search Rule
探索対象となる被影響節点
MOG
MAG
φ
{D-E1, D-E3, D-E5, I-E2}{D-E1, D-E2, D-E3, D-E4, D-E5} {D-E1, D-E2, D-E3, D-E4, D-E5}
φ{D-E1, I-E1, I-E2}

探索ルール
R1: アクセス変化メンバ抽出
R2: 関係変化メンバ抽出
R3: 間接アクセスメンバ抽出ルについて述べる．なお，各ルールに対応する被影響

プログラム変更によるメンバ間の関係の変化を把握し，節点の組み合わせの一覧を表 3 に示す．

変更に対応するべき修正個所を識別するために有効でR1: アクセス発生メンバ抽出ある．図 5 に，M8 が変更メンバである場合の抽出例

変更により発生した新たな実行経路上に存在するを示す．

（すなわち新たにプログラムの実行結果に影響を及ぼ

MOG

す可能性が生じた）部分を抽出する．既存の影響波及
解析手法が対象としている，回帰テストでの利用を目M1

M4

的としたものである．テストケース選択に用いる場合
は，被影響節点の中でテストケースに対応するものだ
けを選択すればよい．図 4 に，M8 が変更メンバであM3

Fig. 5

MAG

M5

M2
M6

M7
M8

F1
M9
M10

M1
F2

M5

M2
M3
M4

M6
M7
M8

F1
M9
M10

F2

図 5 R2: 関係変化メンバ抽出（図 4 参照）
R2: The Extraction of the Nodes that changes Override
Relation

る場合の抽出例を示す．

MOG

M3

M1

M4

M

MAG

M5

M2

F1

M6

M9

M7
M8

M10

: Method Node
: Changed Node
: Generated Edge

F

M1
F2

: Field Node

R3: 間接アクセスメンバ抽出
M5

M2
M3
M4

M6
M7
M8

F1
M9
M10

変更メンバに直接的および間接的にアクセスする可能性のあるメンバ，変更メンバが直接的および間接的

F2: MOG and MAG Edge

: Affected Node
: Lost Edge

図 4 R1: アクセス発生メンバ抽出
Fig. 4 R1: The Extraction of the Nodes that changes Access Relation

R2: 関係変化メンバ抽出
オーバーライド関係の変化，およびそれに伴うアクセス関係の変化が発生するメンバをすべて抽出する．

にアクセスする可能性のあるメンバをすべて抽出する．
メソッド本体やフィールドの初期値などを変更する場
合，アクセス関係に変化は無いが，それらを使用する
メンバの実行結果などが変化する可能性があるため，
このルールによる被影響メンバの把握が有効となる．
図 6 に，M8 が変更メンバである場合の抽出例を示す．

4. JAVA 影響波及解析システム
本節では，提案手法の実装である JAVA 影響波及解5電子情報通信学会論文誌 ’xx/xx Vol. Jxx–D–I No. xx

MOG

M6

M3

M1

MAG

M5

M2

M9

M7

M4

F1

M10

M8

M1
F2

M6

M3

う解析部と，ユーザインタフェースとなる GUI 部で

M5

M2

M9

M7

M4

F1

M10

M8

F2

GUI part
Display the Result

Plug inJCIB
JCIB
Get Analysis Result

Analysis part

Source Code

Construct
the Graph

Syntax and
Semantic Analysis

Scan
the Graph

Graph (MOG,MAG)

Javac’
Javac’

Fig. 7図 7 システム構成
The Structure of the System

析システムの構成，およびその機能について述べる．

4. 1 概要本システムは，JAVA プログラムにおける，メンバ単位の変更で生じる影響を解析，表示するシステムである．本システムの利用の流れは次のようになる．

Step1: 変更前のプログラムに対するグラフの構築
Step2: ユーザによるソースファイルへの変更
Step3:
Step4:
Step5:
4. 2

指示を出すことにより，影響波及解析を行う．

グラフ管理部： 指定された JAVA プログラムのグラフの構築を行う．
フを比較し，節点, 辺の発生, 消失といったグラフの変The
ChangeThescanscan
Changemanagement
graph
management ofofgraphGet information
about Change

4. 3. 1 解析部の説明
解析部は，次の 5 つの部分から構成されている．
JCIA： グラフ管理部，変更管理部，グラフ走査部に

変更管理部： 変更前後のプログラムに対応するグラ

JCIA
JCIA
Graph
Graph
management
managementを示したものである．また，以下の説明では，MOG，

MAG を単にグラフと呼ぶ．

図 6 R3: 間接アクセスメンバ抽出（図 4 参照）
Fig. 6 R3: The Extraction of the Indirect Access Nodes

jEdit
jEdit

構成されている．図 7 はシステムの各構成要素の関連

変更後のプログラムに対するグラフの再構築
変更前後の差分からの被影響メンバ抽出化を検出する．

グラフ走査部： 与えられた被影響メンバ探索ルールに従ってグラフを走査し，被影響メンバの抽出を行う．

javac’： JAVA プログラムのソースコードに対し，字句解析，構文解析，意味解析を行うと共に，グラフ構
築に必要な情報を収集する．

4. 3. 2 GUI 部の説明
GUI 部は，JCIB と jEdit の 2 つから構成されている．
JCIB： jEdit のプラグインとして動作し，ユーザからの解析要求を解析部に伝え，解析結果を表示する．

jEdit： Java プログラムに変更を行う際のエディタとして動作し，JCIB と連携して解析結果を表示する．

5. システムの適用例と有効性
ここでは，実際にソフトウェアに対して実装システ
ムの適用を行い，提案手法の有効性を検証する．
具体的には，ソフトウェアのある基準バージョンの抽出された被影響メンバの表示

ソースコードと，何かしらの変更が行われた後のバー

利用ツール

ジョンのソースコードに関し，システムが検出した被本システムでは，Java プログラムの字句解析，構文影響メンバと実際のソースコード差分との比較を行う．

解析，意味解析に javac [15] のコードを流用し，GUI

そして，その結果を考察することで，システムがユーに jEdit [17] を採用した．

ザに対して適切な情報を提供できているか検証する．

javac は JDK [16] 付属の Java コンパイラであり，本適用対象ソフトウェア

システムで流用するにあたって行われたのコード変更

本システムの適用対象ソフトウェアとして，Javaは 100 行未満に抑えられており，将来の JDK のバー

ベースのビルドツールである Ant を選択した．Ant は

ジョンアップにも容易に対応できる．

Jakarta Project で開発されているオープンソースソフト

jEdit は Pestov らにより開発されているオープンソー

ウェアであり，Ant v1.1 は，96 個のクラス (約 20,000

スのテキストエディタで，プラグイン機能の提供によ行) から構成されている．

り高い拡張性を有している．本システムは，jEdit の 1

適用実験

プラグインとして動作する．

ここでは，Ant の開発過程において実際に行われた

4. 3 システム構成

変更に対してシステムの適用を試みる．Ant は v1.1

本システムは，実際に提案手法による影響波及を行から v1.2 において，様々な機能追加および修正が行6

論文／オブジェクト指向プログラムの変更作業を支援する影響波及解析システム

われているが，その中の一つであるメソッド Property::init() の削除に着目し，このメソッドの削おり，各バージョンにおけるソースコードは図 8 のよv1.1 から v1.2 においてメソッドに変更が加えられて除による被影響メンバをシステムを用いて特定する．

うになっていた．Property::init() の削除とは関Property::init() の削除によって生じた全ての直係のない，機能追加と考えられる部分を除くと，図 8

接的な影響を調べるために「関係変化メンバ抽出」をの網掛部が削除の影響により変更された部分である探索ルールとして指定し，解析を行った結果，多くのと思われる．v1.2 では，Task 型の参照変数 task が

被影響メンバが抽出された．そこで MOG および MAG

指し得るオブジェクト (Task クラスの子クラスであごとに分けることで，「関係変化メンバ抽出」ルールをる Property クラスのオブジェクトなど) に対して，「オーバーライド関係の変化」と「アクセス先の変化」に分解して再解析したところ，次のようなことを把握

v1.1 と同様に init() の呼び出しを行うだけでなく，場合によっては execute() の呼び出しも行うよう変できた．

更されていることがわかる．

• オーバーライド関係の変化
Property の親クラス Task のメソッド init() が• メソッドのアクセス先の変化
TaskHandler::init()，Ant::execute() 中の• Ant::execute()
v1.1 から v1.2 においてメソッドに変更が加えられて
おり，各バージョンにおけるソースコードは図 9 のよ
うになっていた．これにより，Property::init()の呼び出し式が，Property::execute() の呼び出

メソッド呼び出し式における呼び出し先が変更された．

し式に置換されていることがわかる．

オーバーライドされなくなった．

実際の更新作業との比較に基づく考察

execute() {…
Enumeration e = properties.elements();
while (e.hasMoreElements()){
Property p = (property) e.nextElement();
p.init();}public void

削除されたメソッド Property::init() の機能について考えると，その機能が不要な場合は削除され，必要な場合はプログラムの他の部分に移譲されるはずである．後者の場合，Property::init() の削除により影響を受けるメンバにおいて，何らかの対}…

execute() {…
Enumeration e = properties.elements();
while (e.hasMoreElements()){
Property p = (property) e.nextElement();
p.execute();}public void}…

(a) v1.1(b) v1.2

図 9 v1.1 と v1.2 における Ant::execute()
Fig. 9 Method Ant::execute() in v1.1 and v1.2

応を行う必要がある．そこで，上記の 3 つの被影響
メンバ Task::init()，TaskHandler::init()，

上記の変更点より，Property::init() の機能

Ant::execute() が，v1.1 から v1.2 においてどのは，Property::execute() に移譲されたと推測でように修正されたかを調査した．
private…

Task task;

public void}

init (String tag, AttributeList attrs) {private…

きる．実際に，v1.1 における Property::init()

Task task;

init (String tag, AttributeList attrs) {…
task.setLocation(……);
configureld(task,attrs);
if (target != null) {task.setOwningTarget(target);target.addTask(task);task.init();wrapper = task.getRuntime.
configurableWrapper();
wrapper.setattributes(attrs);} else {task.init();configure(task,attrs,project);task.execute();}public void…
task.setLocation(…..);task.init();if (target != null) {task.setOwningTarget(target);target.addTask(task);}(a) v1.1}(b) v1.2

図 8 v1.1 と v1.2 における TaskHandler::init()
Fig. 8 Method TaskHandler::init() in v1.1 and v1.2

• Task::init()
v1.1 から v1.2 において全く変更が行われておらず，
Property::init() 中に存在していた機能は，オーバーライドの対象であった Task::init() に移譲さと v1.2 における Property::execute() の間には機能の一致が確認できた．
以上より，システムにより抽出された被影響メンバ
は，実際の変更作業において確かに修正が行われていたことがわかり，ソフトウェアに対して変更を行う際に本システムによって修正個所の特定を行うことは有効であると考えられる．今後は，本システムを用いる
ことで変更作業に要する時間が短縮できることを，実際のソフトウェア開発者を被験者とした評価実験を行うことによって検証することが必要である．

6. まとめと今後の課題
本論文では，オブジェクト指向言語である JAVA の特性を考慮した影響波及解析手法の提案を行った．本
手法では，クラスのメンバ間の関係を表現する 2 種れたわけではないことがわかった．

類のグラフを定義し，その上でグラフの変化の種類に• TaskHandler::init()

よって変更の影響を受けるメンバを分類し，それらの7電子情報通信学会論文誌 ’xx/xx Vol. Jxx–D–I No. xx

探索ルールを選択して適用できる枠組を実現した．こ[14] Y. K. Jang, H. S. Chae, Y. R. Kwon, and D. H. Bae, “Change Im-

れにより，ユーザの目的に応じた影響の定義，抽出を

pact Analysis for A Class Hierarchy,” in Proceedings of the Asia
Pacific Software Engineering Conference (APSEC’98), pp.304-

行うことが出来る．

311, Taipei, Taiwan, December 1998.

また，提案手法を JAVA 影響波及解析システムとして実装し，適用例を挙げることで有効性を検証した．
今後の課題としては，Rapid Type Analysis [3] の利用による参照変数の指すオブジェクトの型の限定や，システムを利用した評価実験などがある．

文[1][15] http://java.sun.com/j2se/1.3/docs/tooldocs/win32/javac.html, “javac- Java programming language compiler.”[16] http://java.sun.com/j2se/1.3/, “The JavaT M 2 Platform, Standard
Edition.”[17] http://www.jedit.org/, “jEdit - Open Source programmer’s text editor.”

献（平成年月日受付，月日再受付）

A. Krishnaswamy, “Program Slicing: An Application of ObjectOriented Program Dependency Graphs,” Technical Report TR94108, Department of Computer Science, Clemson University, 1994.

[2]

B. G. Ryder and F. Tip, “Change Impact Analysis for Objectoriented Programs,” in Proceedings of the Workshop on Program
Analysis for Software Tools and Engineering (PASTE 2001),
pp.46-53, Snowbird, USA, June, 2001.

[3]

D. F. Bacon, “Fast and Effective Optimization of Statically横森

励士 （学生員）

平 11 阪大・基礎工・情報卒．平 13 同大
大学院修士課程了．現在同大学院博士課程在学中．プログラム構造解析の研究に従事．

Typed Object-Oriented Languages,” Ph.D. Thesis, Computer Science Division, University of California, Berkeley, December,
UCB/CSD-98-1017, 1997.
[4]

D. Kung, J. Gao, P. Hsia, and F. Wen, “Change Impact Identification in Object Oriented Software Maintenance,” in Proceedings ofthe International Conference on Software Maintenance, pp.202211, Victoria, Canada, September 1994.

[5]

G. Rothermel and M. J. Harrold, “Selecting Regression Tests
for Object-Oriented Software,” in Proceedings of the International Conference on Software Maintenance, pp.14-25, Victoria,
Canada, September 1994.

[6]

J. Gosling, B. Joy, and G. Steele, 村上 雅章 [訳], “The Java 言語[7]

K. Rangarajan, P. Eswar, and T. Ashok, “Retesting C++ Classes,”近藤

和弘

平 12 阪大・基礎工・情報卒．平 14 同大
大学院修士課程了．同年 SONY(株) 入社．
現在ソニー・エリクソン・モバイルコミュ
ニケーションズ (株) に所属．在学中，プロ
グラム構造解析の研究に従事．

仕様”
in Proceedings of the Ninth International Software Quality Week,

文明

L. Li, and A. J. Offutt, “Algorithmic Analysis of the Impact of

平 14 年阪大大学院博士課程了．同年 (株)東芝入社．現在同社研究開発センター所属．

Changes on Object-Oriented Software,” International Conference

工博．プログラム構造解析の研究に従事．

San Francisco, USA, May 1996.
[8]

大畑

on Software Maintenance (ICSM ’96), pp.171-184, Monterey,
USA, November 1996.
[9]

M. Weiser, “Program slicing,” in Proceedings of the 5th International Conference on Software Engineering, pp.439-449, San
Diego, USA, March 1981.

[10]

ceedings of the International Conference on Software Maintenance (ICSM 2001), pp.479-487, Florence, Italy, November 2001.
[11]

T. L. Graves, M. J. Harrold, J.-M. Kim, A. Porter, and G. Rothermel, “An Empirical Study of Regression Test Selection Techniques,” in Proceedings of the 20th International Conference on
Software Engineering, pp.188-197, Kyoto, Japan, April 1998.

[12]

W. Hetzel, “The Complete Guide to Software Testing,” QED Information Sciences, Wellsley, Mass., 1984.

[13]

X. Chen, W. T. Tsai, and H. Huang, “Omega - an Integrated Environment for C++ Program Maintenance,” in Proceedings of theInternational Conference on Software Maintenance, pp.114-123,
Monterey, USA, November 1996.

8

井上克郎 （正員）S. Eisenbach and C. Sadler, “Changing Java Programs,” in Pro-昭 54 阪大・基礎工・情報卒．昭 59 同大
大学院博士課程了．同年同大・基礎工・情報・助手．昭 59 〜昭 61 ハワイ大マノア校・情報工学科・助教授．平 1 阪大・基礎工・情報・講師．平 3 同学科・助教授．平 7 同学科・教授．平 14 阪大大学院情報科学研
究科・教授．工博．ソフトウェア工学の研究に従事．