論 文
フォールト位置特定におけるプログラムスライスの実験的評価
西松顯y

西江 圭介y楠本 真二y井上 克郎yAn Experimental Evaluation of Program Slicing on Fault Localization Process
y

y

y

y

Akira NISHIMATSU , Keisuke NISHIE , Shinji KUSUMOTO , and Katsuro INOUE

あらまし プログラムのデバッグや理解を支援するための手法としてプログラムスライス (スライス) が提案されてきている．しかし ，実際のデバッグを対象としたスライスの評価はほとんど 行われていない．本論文では，スライスがフォールト位置特定に有効であるかど うかを評価するために行った 2 つの実験 (それぞれ評価実験 1，
評価実験 2 と呼ぶ) についてまとめる．2 つの実験では，被験者を 2 つのグループに分け，一方のグループはスライスを用いてフォールト位置特定を行い，もう一方のグループはスライスを用いずに行う．評価実験 1 では 6 人の被験者が，数百行のプログラムに対して計算機上でフォールト位置特定を行う．評価実験 2 では被験者を 34 人に増やし，6 種類の数十行のプログラムに対してフォールト位置特定を行う．実験の結果，スライスを用いてフォー
ルト位置特定を行った方が，スライスを用いずにフォールト位置特定を行った場合より効率良くフォールト位置特定が行えることが確認できた．また，フォールトの種類によってスライスの効果が異なることが確認された．
キーワード

1.

プログラムスライス，デバッグ，フォールト位置特定，実験的評価)[1]．スライス技法はプログラム内のある文

以降，単にスライスと呼ぶ を利用した手法が提案され

まえが き

てきている

ソフトウェアシステムの大規模化，複雑化にともないソフトウェア開発における生産性，及び，品質向上の実行に影響を与える全ての文を抽出する技術であり，抽出された文の集合をスライスと呼ぶ[21], [22]．スラの実現はソフトウェア工学における研究の主要な目標

イス技法を利用するデバッグでは値の誤っている変数に位置付けられてきている．ソフトウェアの品質や生に対して，全プ ログ ラムにわたってスライスを求め，産性を向上させるためには，開発されたソフトウェア

そのスライスの中でフォールトとなっている文を捜しプロダ クトだけでなく，その開発プロセスを対象とし出す．文献て作業の改善を行うことが必要である．

プログラム

一方，現実のソフトウェアプロジェクトではソフト
ウェア開発コストの50 〜 80%をテスト工程に費やし[19] において Horwitz らは，9 種類の C の(732 行〜 28177 行) に対してスライスを計算し ，得られたスライスの平均サイズは元のプログラ
ムの約56%になったことを報告している．また文献 [2]Atkinson と Griswold は 100 万行のプログているという報告がある．従って，ソフトウェア開発

において，プロセスの改善を行うためには，テスト工程の改善をラムに対してスライスを計算し ，得られたスライスの(1%〜 8%になったこと行うのが効果的である．テスト工程は故障の検出 テ)

平均サイズは元のプログラムのスト と故障の原因であるフォールトの修正 デバッグを報告している．プログラム全体ではなくスライスとの つの作業から構成される．一般に，フォールト位

して抽出された文のみを対象とすることで参照範囲が

置の特定がデバッグにおいて最も時間がかかる作業で少なくなり，効率良くフォールト位置特定が行えるとあると言われており言われているが，実際のデバッグ作業を対象としたス

2

)

(

[6], [9]，フォールトの位置を効率

ライスの有効性の評価はほとんど 行われていない．

よく特定する方法の開発が重要となっている．

本論文では，スライスが実際のプログラムのデバッ

フォールトの位置を効率良く特定するための方法の一つとして，プログラムスライス技法(Program Slicing．

)

(

2
1
2
)
には，評価実験 1 では 6 人の被験者を 2 つのグループ

を実験的に評価した 本論文では 回の評価実験を行

y 大阪大学 大学院基礎工学研究科，豊中市
Graduate School of Engineering Science, Osaka University,
Toyonaka-shi, 560-8531 Japan

電子情報通信学会論文誌(

グ作業 フォールトの位置特定 に有効であるかど うかAい，それぞれ評価実験 ，評価実験 と呼ぶ ．具体的Vol. J79{A

No. 9

pp. 1{91996 年 9 月

1

電子情報通信学会論文誌 '96/9 Vol. J79{A No. 9

GP1 と GP2 に分け，まず 9 個のフォールトを含んでいるプログラムに対して，GP1 に含まれる被験者はスライスを用いてデバッグを行い，GP2 に含まれる被験者はスライスを用いずにデバッグを行う．次に，GP1 に含まれる被験者はスライスを用いずにデバッグを行い，GP2 に含まれる被験者はスライスを用いてデバッグを行う．最後に，GP1 と GP2 の間でデバッグに要した
時間についての比較を行う．評価実験 2 では被験者の数を十分に多くし ，被験者 34 人をグループ G1 と G2に分け，G1 に含まれる被験者には，スライス情報を含
まないプ ログラムリストのフォールト 位置を，G2 に含まれる被験者には，スライス情報を含むプログラム
リストのフォールト位置を特定してもらい，それに要した時間についてG1，G2 間で比較を行った．実験の結果，スライスを用いてフォールト位置特定を行った

提案された静的スライス(static slice) である．以降，

単にスライスと記述する場合には静的スライスを意味するものとする．
2. 1

スライシング

これまでに我々は文献[18] においてスライス抽出ア

ルゴ リズムを提案している．このアルゴ リズムでは，プ ログ ラムの依存関係解析の結果得られ るプ ログ ラ

ム依存グラフ (Program Dependence Graph，略してPDG) からスライスを抽出する．PDG の節点はプ ロ
グラム中の各文および if 文や while 文の条件判定部分を表し ，辺は変数の影響を伝えるデ ータ依存（ Data
Dependence，略し て DD ）関係および 条件文や繰り返し 文の制御の影響を伝える制御依存（ Control Dependence，略して CD ）関係を表す．図 1に示すプ ロ
グラムの PDG を図 2に示す．

方が，スライスを用いずにフォールト位置特定を行った場合より効率良くフォールト位置特定が行えることが確認できた．
なお，文献[24] において，Zelkowitz と Wallace は

ソフト ウェア工学の分野で提案された手法やツール

3
法 (1)Observational methods (2)Historical methods(3)Controlled methods について述べており，本研究の評価手法について まとめている．彼らは つの 手のように大学環境で実験を実施する場合には，擬似的に大規模な環境を作り出す(3) をおこなうことが適していることを指摘している．本研究でも，この指摘にControlled methods を用いている．また，デー
GQM パラダ イム [3] を従い，タの収集・評価方法については用いている．

2

3 4

以降， ．ではスライスについて述べる． ． ．で

1

2

は，それぞれ評価実験 と評価実験 ，その結果につ5いてに述べる．最後に， ．でまとめと今後の課題について述べる．
2.

スライス

スライス技法はプ ログ ラム内のある文の実行に 影響を与える全ての文を抽出する技術であり，抽出された文の集合をスライスと呼ぶ[21], [22]．スライスはデバッグを目的とし提案されたが，現在ではプログラム理
解，再利用可能なコード の抽出などを目的としたさま( quasi-static slice [20]，conditionalslice [10]，interface slice [4]，transform slice [7]，dynamic slice [ ] [ ]，program dice [8] 等) が提案されている．本実験で対象とするスライスは Weiser らにより

ざ まなスライス?

2?

program euclid(input,output);var x,y,g,l:integer;function gcd(m,n:integer):integer;
forward;procedure swap(var a,b:integer);var temp:integer;
begin
temp:=a;a:=b;b:=temp;end;function lcm(a,b:integer):integer;
var c:integer;
begin
c:=gcd(a,b);
lcm:=(a div c)*(b div c)*cend;
function gcd;
var w:integer;
begin
if m＜n then begin
swap(m,n);
end;
while n＜＞0 do begin
w:=m mod n;
m:=n;
n:=w;
end;
gcd:=m;end;
begin
writeln('Input x and y');readln(x,y);writeln('x=',x,' y=',y);g:=gcd(x,y);l:=lcm(x,y);writeln('gcd=',g);writeln('lcm=',l);end.
図 1 PDG の元のプログラム

Fig. 1 Sample Program論文／フォールト位置特定におけるプログラムスライスの実験的評価
nm−para−in

n−para−inmnb−para−in

if m<n thenma−para−in

n

n
m

a

temp:=abswap(m,n)nwhile n<>0 do
m

y

n
a:=b

x

temp

w:=m mod n
n

a

m
n
m:=n

b:=temp

w

b

n

n
n:=w

b−para−outma−para−outmgcd:=mgcd

mgcd−exit
writeln(’Input x and y’)a−para−in

gcd

b−para−inreadln(x,y)
b

a

gcd

writeln(’x=’,x,’ y=’,y)xyc:=gcd(a,b)

a

y

x

y

x

b
g:=gcd(x,y)

cxylcm:=(a div c)*(b div c)*cg

変数名

l:=lcm(x,y)
lcm

lcm

l
writeln(’lcm=’,l)lcm−exit

writeln(’gcd=’,g)DDCD

図 2 PDG の例
Fig. 2 Example of PDG

PDG 上

文 s における変数 v に関するスライスとは，において，CD 関係の辺または DD 関係の辺を辿って

文 s の変数 v に到達できる節点集合に対応する文の集合[18]．特に，PDG を与えられた節点から辺の順方向に辿って得られた集合を forward スライスと呼び，逆方向に辿って得られた集合を backward スライスと呼ぶ．スライスの例を図 1 に示す．このプログラムの
37 行目で参照されている変数 g に関する backward ス

である（ 注 1）である．

また，スライシングツールは，スライス抽出機能だ
けでなく，以下の機能を持っている．

(機能 1) : プログラムの編集，コンパイル，実行．
(機能 2) : デバッガ
プ ログ ラムの連続実行，ステップ 実行，変数の参照，ブ
レークポイントの設定．

(機能 3) : スライス

ライスが，図中の下線部分に示されている．この場合，
変数 g に影響を及ぼさない部分，すなわち関数 lcm はbackward スライスに含まれていない．
2. 2

スライシングツール

これまでに我々は，文献[18] のスライス抽出アルゴ

リズムを利用し たスラ イシング ツールを作成し ている[14]．次節 3.節で述べる評価実験 1 では，このスライシング ツールを利用し て被験者はデバッグを行う．
スライシングツールの対象言語は

Pascal のサブセット

スライスを計算し抽出する機能．

3.

従って， 節で述べる評価実験を行う上では十分な機能を持っている．
3.

評価実験 1

3. 1

実験概要

実験の目的はスライスのフォールト位置特定に対す（ 注 1）：変数はスカラ型のみで，条件文 (if)，代入文，繰り返し文 (while)，
入力文 (read)，出力文 (write)，手続き呼出し 文，複合文 (begin-end)からなる．
3電子情報通信学会論文誌 '96/9 Vol. J79{A No. 91[23] に対するプログラムを
2 種類用意し (それぞれ P1，P2 とし，フォールトは含
まれない)，P1 に 8 個の，P2 に 9 個のフォールトを含めたプ ログラム (それぞれ P1.1 〜 P1.8，P2.1 〜 P2.9とする) を用意する．実験は大阪大学基礎工学部情報科学科の学生 6 人に対して行った．まず，6 人の被験者を 2 つのグループ GP1 と GP2 にそれぞれ 3 人ずつ分ける．GP1 に含まれる被験者を A1, A2, A3，GP2に 含まれ る被験者を B1, B2,B3 と 呼ぶ ．まず，GP1の被験者は 2. 2節で示したスライシングツールの機能
1 〜 3 を利用して，GP2 の被験者はスライシングツー
ルの機能 1，2 を利用して (つまり，スライス抽出機能を用いずに )P1.1 〜 P1.8 のフォールト位置特定を行う(これをとする)．次に，GP2 の被験者は 2. 2節で示したスライシングツールの機能 1 〜 3 を利用して，
GP1 の被験者はスライシングツールの機能 1，2 を利用して P2.1 〜 P2.9 のフォールト位置特定を行う (これをとする)．
なお，6 人の被験者は学部 3 年生の時の演習で，スライシングツールの対象言語である Pascal のサブセッ
る有効性を確認することである．実験の概要を表 に示す．具体的には，酒屋問題

Exp1

Exp2

(F1.5) 関数処理 (関数呼び出し文) の記述洩れ．
(F1.6) データ更新の誤り．
(F1.7) 手続きのパラメータ渡しの誤り．
(F1.8) 関数の実行位置の誤り．
ここで，これら (F1.1) 〜 (F1.8) のフォールトを用いて，
Exp1 で使用する 8 種類のプログラム P1.i(i=1，2， ...，
8) を作成した．P1.i には，(F1.i) 〜 (F1.8) のフォールトが含まれている (例えば，P1.1 には (F1.1) 〜 (F1.8)
が ，P1.5 には (F1.5) 〜 (F1.8) が ，それぞれ含まれている)．また，これらのフォールトはプログラムの基本的な機能に対して作り込まれており，番号の小さいも()

意した T estdata1 〜 T estdata8 ．なお，フォールト1

位置の特定時間を正確に計測するために， つのテス
トデータで発見されるフォールトは一意に決まっており，その他のフォールトは被験者に発見されないようにマスクされている．

Exp2 で使用する P2.1 〜 P2.9 も上述と同様に P2 に9 個のフォールト を 含め (それぞ れ F2.1 〜 F2.9 と する)，作成した．P1 に含めた 8 個のフォールトと P2 に含めた 9 個のフォールトとは関連性がない．
実験プロセストに対するコンパイラを開発しており，言語に対する3. 3

知識は十分に持っている．また，各グループに対して実験の手順は次の通りである．

Step0: = 1 とする．
Step1:
を用いて ，プ ログ ラム P1.i のフスライシングツールの中で使用する機能についての講i

習を事前に行った．
表 1 評価実験 1 概要
Table 1 Overview of the 1st Experiment8のから順に検出できるようなテストデータを 種類用

T estdatai

ォールト位置の特定を行う．

Step2: 特定したフォールトとその位置を実験監督
Step3 へ．間違った場合には，Step1 へ戻る．
Step3: == 8 の 場合実 験終了 ． 8 の 場合 ，
= + 1 として Step1 へ戻る．
プログラム 1 において，を用いて発見できるフォールトは 1 のみである．これを被験者が発見した後に与えられるプログラム 1 + 1 はフォー
ルト 1 が既に修正されており，プ ログ ラム 1 と者に申告する．正しい場合は

Exp1
Exp2

GP1(3 人)GP2(3 人)P1.1 〜 P1.9
(スライス利用不可)(スライス利用)P2.1 〜 P2.9
(スライス利用）(スライス利用不可)

i

i

i <

i

P

:i

T estdatai

F

3. 2

対象プログラム[23] に対する 2 種類のプ
ログラムを用いた．2 種類のプログラム (P1，P2) は，
実験ではいわゆる酒屋問題

:i

P

F

:i

:i

P

:i

異なっている部分はその修正部分のみである．上記はアルゴ リズム，データ構造が異なるため，別のプログ

Exp1 の手順を示したものであるが，Exp2 においてラムであると考えることができる．

も同様である．

P1 に対して 8 個，
P2 に対して 9 個のフォールトを作り込んだ．以下に，
P1 に含めたフォールトの例を示す．
(F1.1) 出力処理の不足．
(F1.2) 変数の代入誤り．
(F1.3) 条件文の誤り．
(F1.4) 配列の初期化洩れ．
4

3. 4

実験結果

,

Exp1 Exp2 における各フォールトの位置特定に要

(

: )

2

3

した時間 単位 分 に関するデータを表 ，表 に示す．
3. 4. 1Exp1

GP2 の被験者のフォールト 位置特定に 要し た平均時間は 165
Exp1 では ，スライスを利用し なかった

論文／フォールト位置特定におけるプログラムスライスの実験的評価

2

表 2 Exp1 データ (単位:分)Table 2 Data of Exp 1(min.)
スライス利用

A1
31
8
15
25
14
15
4
7
119

F1.1
F1.2
F1.3
F1.4
F1.5
F1.6
F1.7
F1.8
合計

A2
26
10
15
20
26
10
12
9
128

A3
17
20
13
22
18
10
8
12
120

が 個存在することが確認できた．

スライスなし

B1
17
10
26
27
35
17
7
15
154

B2
28
18
36
17
25
23
16
12
175

B3
23
12
28
32
41
17
7
6
120

スライスなし

F2.1
F2.2
F2.3
F2.4
F2.5
F2.6
F2.7
F2.8
F2.9
合計

A2
17
5
24
13
18
16
19
5
9
126

A3
36
24
12
41
8
15
5
4
10
155

B2
11
8
10
16
16
13
7
7
5
92

1 Exp1 ではスライスを用いた場合と用評価実験 のいなかった場合で有意な差が確認できなかった．その一つの原因は被験者が少なかったことにある．ここで

2は被験者を大幅に増やして行った評価実験 について
述べる．
4. 1

B3
14
14
19
36
10
5
17
1
2
118

(B1:154 分，B2:175 分，B3:120 分)，スライスを利用した GP1 は 122 分 (A1:119 分，A2:128 分，A3:120分) となっており，平均時間を見ると GP1 の方が GP2
よりも 43 分短くなっている．また平均値の差の検定(ウェルチの検定) [15] を，有意水準 5%で行うと有意な
分

 被験者

 対象プログラムリスト(

種類 それぞれ ，と，それぞれのフォールトに対して，もっとも一般的に選択されるスライシング基準でスライスを抽出した
際に，スライスに含まれる文に下線が引いてあるプロ( 3 ) (それぞれ ，P1'，P2'，P3'，
P4'，P5'，P6' とする) を用意する (P1 と P1' は，スラグ ラムリスト 図 参照

イス情報が含まれていること以外は，同じプログラム)

表 4 対象プログラムと含まれるフォールト

Table 4 Target programs and faults

P1
P2
P3
P4
P5
P6

5%の有意水Exp2

GP1 の被験者のフォールト位置特定に要した平均時間は 133 分(A1:118 分，A2:126 分，A3:155 分)，スライスを利用した GP2 は 114 分 (B1:131 分，B2:92 分，B3:118 分 )となっており，平均時間を見ると GP2 の方が GP1 よりも 19 分短くなっている．しかし，平均値の差の検定(ウェルチの検定) [15] を，有意水準 5%で行ったが有意Exp2 では ，スライスを利用し なかったな差が見られなかった．しかし ，各フォールトごとに見ると Exp1 と同様に，スライスが有効であるような，
すなわち5%の有意水準で有意な差があるフォールト

5

リストであり，残りの 個の対応するプログラムリス
トも同様である ．

準で有意な差があるフォールトが 個存在することが確認できた．

6
P1，P2，P3，P4，P5，P6 とする)

フォールトが一個だけ含まれるプログラムリストをることが確認できた．また各フォールトごとに見ると，

3. 4. 234 人である．

いる．

スを利用した方が効率良くフォールト位置特定が行え

3

2ているので，プログラミング及びデバッグには慣れて差が見れた．この結果から Exp1 においては，スライスライスが有効であるような，すなわち

実験概要

全ての被験者は，大学でプログラミング演習を受講しスライス利用

B1
18
6
27
18
20
20
8
2
12
131

評価実験 2

大阪大学基礎工学部情報科学科の 年生

表 3 Exp2 データ (単位:分)Table 3 Data of Exp 2(min.)

A1
17
6
12
30
6
11
5
5
26
118

4.

プログラム
素因数分解
素数
パスカルの三角形
数値計算
順列
ソート

フォールト
文の誤り [F1]
変数名の誤り [F2]
文の誤り [F3]
変数名の誤り [F4]
変数名の誤り [F5]
文の誤り [F6]P1 〜 P6(P1' 〜 P6') の 6 個のプログラムは，Pascal
P1 〜 P6，及び P1' 〜 P6' が 含
むフォールトとしては，(a) 変数名の誤り (wrong variable name)，(b) 文の誤り (wrong statement) の 2 種類を含めた [17]．また，P (P ') に含まれるフォールトを F とする．プログラム及びフォールト内容を表 4にで記述されている．各

i

i

i

示す．

5 P1 〜 P6 のプログラムサイズ (行)，P1' 〜 P6'( )(ライスのサイズ/プログラムのサイズ の割合) を示す．
表 にのスライスに含まれる文のサイズ 行 ，及び限定率 ス

5電子情報通信学会論文誌 '96/9 Vol. J79{A No. 9
パスカルの三角形
以下のプログラムは整数Nを入力として読み込み，(a＋b)N までの二項係数をパスカルの三角形として出力する．
参考N
パスカルの三角形とは，二項係数，つまり(a＋b)
を展開したときの各項の係数を見やすい形で，並べたもので，次のようなものである．
1
1
1
1
1

1
2

3
4

入力
3

1
3

6

1
4

1

N=0
N=1
N=2
N=3
N=4

正しい出力
1
1
1
1
2
1
1
3
3
1

誤った出力
1
1
1
1
2
1

プログラム
1
2
3
4

program pascalTriangle(input,output);var a: array[1..20] of integer;
i,j,s: integer;N: integer;

5

procedure outAline(var a:array[0..20]of integer;
k:integer;var s:integer)
var i : integer;
begin
s:=s-3;

6
7
8

9
10
11
12
13
14
15
16
17
18
19
20
21
22

i:=1;
while i<=s do
beginwrite(’ ’);
i:=i+1end;
i:=1;
while i<=k do
beginwriteln(’i:=i+1end;
writeln
end;

23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46

begin
writeln(’Please Input Number’);readln(N);i:=0;while i<=N+1 do
begin
a[i]:=0;
i:=i+1end;
a[1]:=1;
s:=3*N+3;
i:=1;
while i<=N do
begin
j:=i;
while j>=1 do
begin
a[j]:=a[j]+a[j-1];
j:=j-1end;
outAline(a,i,s);
i:=i+1end
end.

’,a[i]);

図 3 被験者に与えた問題
Fig. 3 Example of the program (P3')
表 5 用意したプログラムのサイズ
Table 5 The size of the target programs
プログラム
サイズ (行)
プログラム
スライス (行)
限定率 (%)

P1
25
P1'
5
25

P2
31
P2'
7
23

P3
46
P3'
7
15

P4
37
P4'
13
35

P5
49
P5'
18
37

P6
35
P6'
18
51

{

プログラムに与える入力，フォールトが含まれることによる誤った出力，プログラムが本来，出力すべき正しい出力．

1ト．(図 3の例では，35 行目のが誤り=であり，正しくは
+
1
である．
)
=
{

フォールトが 個だけ含まれるプログラムリス
while i < N dowhile i < Ndo 評価方法 被験者の行う作業間で統計的に比較・分析を行う．

34 人の被験者を学籍番号の下一桁が奇数であるグルー
G1(15 人) と偶数である G2(19 人) に分け，G1 に含
まれ る被験者は スラ イス情報が 含まれ る 6 種類のプ
ログラムリスト (P1' 〜 P6') を対象として，G2 に含まれる被験者は 6 種類の単なるプログラムリスト (P1 〜
P6) を対象としてフォールト位置特定を行う．3.で述
べた実験 1 では，スライス抽出機能を持ったデバッグ

ここでは，被験者にツール上でフォールト位置特定を行ったが，本実験でを十分理解してもらうことを目的とした．

プ

は，紙にプ リントされたプログラムリスト上で机上デバッグを行う．

3

3
P3' である．

実際に被験者に与えたプ リントを図 に示す．図は，スライス情報を含むプログラムリスト
このプ リントには，以下が含まれる．
{
6

プログラムが実現する機能．

G1，G2

各フォールト位置特定に要した時間を計測し，

4. 2

実験プロセス

4. 1節 で 示し た 6 個 のプ ロ グ ラ ム リ スト を P1 〜
P6(P1' 〜 P6') の 順番で ，被験者が フォールト 位置特定を行った．実験の流れは，以下のとおりである．

(1) 例題の説明．
(3) の Step1 〜 Step3 で行う作業(2) P1 〜 P6(P1' 〜 P6') を含むプリントの配布．
(3) 実験開始
P1 〜 P6(P1' 〜 P6') の各プログラムリストごとに以下の作業を行う．

(Step1) プログラムの実現する機能を理解する．
(Step2) 入力とその入力に対する正しい出力，誤っ論文／フォールト位置特定におけるプログラムスライスの実験的評価た出力からフォールトを認識する．

(Step3) プログラムリストを読み，フォールト位

このような場合には，プログラム全体を理解するよりもスライスにより範囲を限定し理解する場合が有効で

F3，F6 に関しては有意な差が検出された
F3 は，全てのフォールトの中で，あるため，置を特定する．

(4) 実験終了と考えられる．また全てのプログラムのフォールト位置特定を行った時点

スライスの利用によるデバッグ対象の限定率が最も高で実験終了とする．

い約

4. 3

実験結果

本 実 験で 計 測 す るデ ー タは 4. 2節で 述べた (3) のStep3 に 要し た 時間である ．被験者が ，各プ ログ ラ
ムのフォールト位置特定に要した平均時間 (単位：分)を表 6に示す．
表 6 評価実験 2 データ (単位：分)Table 6 Data of the 2nd experiment(min.)

15%となっているために (表 5，図 3 を参照)，有F4 に関して意な差が検出できたと考えられる．逆に，はフォールト内容が非常に簡単で，一意にフォールト6

位置を特定できるようなものであったために，表 に示すような結果となっている．

大規模なソフトウェアのデバッグにおいては，F3 やF6 のようにフォールト内容から，フォールト位置を推定するのが困難な場合が多い．このような場合に，スライスを用いることで，デバッグの対象となる範囲を

P1'
P2'
P3'
P4'
P5'
P6'
合計

G1(15 人)
3.27
6.47
7.13
5.73
15.07
3.07
40.73

P1
P2
P3
P4
P5
P6
合計

G2(19 人)
3.32
8.11
11.63
4.74
16.79
4.53
49.11

(

)

限定し ，効率の良いデバッグ フォールト位置特定 が行えると考えられる．
5.

む

す び

本研究では，スライスがフォールト位置特定に有効であるかど うかを実験的に評価した．実験の結果，スライスを用いた方が，スライスを用いない場合よりも

4. 4

分析・評価

全てのプ ログ ラムのフォールト 位置特定に 要し た
平均時間は ，スライス情報を含むプ ログ ラムリスト(P1' 〜 P6') を対象としたグループ G1 では約 41 分，単(P1 〜 P6) を対象としたグルー
プ G2 では約 49 分となっている．平均時間だけ見ると
G1 の方が G2 より約 8 分短くなっている．また，平均値の差の検定 (ウェルチの検定) を行うと，有意水準
5%で有意な差が見れた [15]．この結果から，スライスなるプログラムリスト

効率よくフォールト位置特定作業が行えることが確認できた．また，これまでに我々は文献[13] で保守プロ

セスのプログラム理解においてスライスが有効である/

ことも確認している．これらの結果から実際の開発

保守現場への適用においてもスライスは有効であると考えている．新しい技術を実際の開発現場で利用する
際には，利用者に対して新しい技術の教育や技術の獲得などに時間を要する場合が多く，さらに従来の開発手法を変更する必要が生じ る場合もある．しかし ，スを利用した方が効率良くフォールト位置特定を行える

ライスは非常に少ない労力で利用でき，従来の手法にことが確認できた．

簡単に導入できる技術であると考えられる．実際に，

4. 5

考

察

フォールト別に位置特定に要した時間について平均5%で行うと，P3(P3') に 含
めた F3 と P6(P6') に含めた F6 で有意な差が検出され本実験において被験者にはスライスの概念を説明するために非常に少ない時間しか要していない．

た．被験者はデバッグ時には，正しい出力と誤った出[14] は実験を目的としたものであるために対象言語が Pascal となっているが，現在，Sapid[5] 等を利用し大規模プログラ

力を見比べ，フォールト内容を認識し ，プログラムがムに対するスライシングツールの開発を行う予定であ

値の差の検定を有意水準

本実験で利用したスライシングツール

実現する機能からプログ ラムのアルゴ リズムを考え，る．さらに開発したシステムを利用し ，実際に運用さおおまかにフォールト 位置を推定し た後に ，実際にれているような実用的なプログラミング言語を対象とソースコード を読み，フォールト位置を特定する．上した実験を行いたいと考えている．

述のF3，F6 は，フォールト内容からフォールト位置

謝辞 実験に協力頂いた大阪大学基礎工学部情報科

2を推定する際に，その推定が難しいフォールトである

学科 回生に感謝します．本研究は，一部文部省科学ため，被験者はプ ログ ラムを理解する必要があった．

研究費特定領域研究(A)(2) (課題番号:10139223) の補
7電子情報通信学会論文誌 '96/9 Vol. J79{A No. 9助を受けている．
文

献[1] Agrawal, H., and Horgan, J.: \Dynamic Program Slicing", SIGPLAN Notices, Vol.25, No.6, pp. 246{
256 (1990).
[2] Atkison，D. C. and Griswold，W. G.，\The Designof Whole-Program Analysis Tools"，In Proceedingsof the 18th International Conference on Software
Engineering, pp．16{27, 1996.
[3] Basili，V. R., Caldiera, G., Rombach, H. D.，Goal
Question Metric Paradigm, in John J. Marciniak,
editor, Encyclopedia of Software Engineering, vol.1,
John Wiley & Sons, pp.528-532(1994).
[4] Beck，J. and Eichmann，D.，\Program and Interface Slicing for Reverse Engeneering"，Proceedingsof ICSE-15，pp．509{518，1993．
[5] 福安 直樹，山本 晋一郎，阿草 清滋，\細粒度ソフトウェ
ア・リポジトリに基づいた CASE ツール・プラットフォー
ム Sapid"，情処学論, Vol. 39，No. 6，pp. 1990{1998，
1998.
[6] Korel, B., and Laski, J.，\Dynamic Slicing of Computer Programs", Journal of Systems Software,Vol.13, pp. 187{195 (1990).
[7] Lanubile，F. and Visaggio，G.，\Extracting Reusable
Functions by Flow Graph-Based Program Slicing"，
IEEE Transactions on Software Engineering，Vol．23，
No．4，pp．751-761，April，1997．
[8] Lyle, R. and Weiser, M., \Automatic program bug
location by program slicing", Proceedings 2nd International Conference on Computers and Applications,pp. 877{883 ,1987.
[9] Myers, G. J.，\The Art of Software Testing", WileyInterscience(1979).
[10] Ning，J．
，Engerts，A．and Konzaczynski，W．
，\Automated support for legacy code understanding"，
Communications of the ACM，vol．37，no．5，pp．
50-57，1994．
[11] 西江，神谷，楠本，井上，\プ ログラムスライスに基づく
デバッグ支援ツールの実験的評価"，ソフトウェアシンポ
ジウム 97 予稿集, pp.142-147(1997).
[12] 西松，楠本，井上,\フォールト 位置特定に おけ るプ ログ
ラムスライスの実験的評価"，信学技報，SS98-3，May
1998.
[13] 西松, 楠本, 井上, \保守プロセスに対するプログラムスライスの実験的評価", 信学技報, SS97-87, Mar 1998.
[14] 佐藤, 飯田, 井上, \プログラムの依存関係解析に基づくデバッグ支援システムの試作", 情処学論, Vol. 37, No. 4,
pp. 536{545, 1996.
[15] 芝，渡部，石塚 編: 統計用語辞典, 新曜社 (1984).
[16] 下村 隆夫, \プログラムスライシング技術と応用", 共立出
版 ,1995.
[17] 下村，\変数値エラーにおける Critical Slice に基づくバグ究明戦略"，情処学論，Vol. 33，No. 4，pp. 501{511，1992.
[18] 植田, 練, 井上, 鳥居, \再帰を含むプログラムのスライス計

8算法", 信学論, Vol. J78-D-I, No. 1, pp. 11{22, 1995.
[19] University of Wisconsin．
，\The Wisconsin ProgramSlicing Tool 1.0, Reference Manual"，Computer
Sciences

Department,

UniversityofWisconsin-

Madison, August，1997.

[20] Venkatesh，G.，\The semantic approach to program
slicing"，In Proc. ACM SIGPLAN Conf. on Programming Language Design and Implementation，pp．8091，1991．
[21] Weiser, M.，\Programmers use slices when debugging", Communications of the ACM, Vol. 25, No.7,
pp. 446-452(1982).
[22] Weiser, M., \Program slicing", Proceedings of theFifth International Conference on Software Engineering , San Diego, CA, pp. 439{449 ,1981.
[23] 山崎利治，\共通問題によるプログラム設計技法解説"，情報処理学会誌，Vol. 25，No. 9, p.934，1984.
[24] Zelkowitz，M. and Wallace，D. R.: \Experimental
models for validating technology", IEEE Software,
Vol.31, No. 5, pp.23-31 (1998).
（ 平成年月日受付，月日再受付）

西松顯

平 8 阪大・基礎工・情報卒．現在同大学
院修士課程在学中．プログラムスライスの研究に従事．

西江 圭介
平 8 阪大・基礎工・情報卒．現在同大学
院修士課程在学中．
．

楠本 真二 （ 正員）
昭 63 阪大・基礎工・情報卒．平 3 同大学
院博士課程中退．同年同大・基礎工・情報・
助手．平 8 同大講師．工博．ソフトウェアの生産性や品質の定量的評価，プロジェク
ト管理に関する研究に従事．情報処理学会，
ＩＥＥＥ各会員．

井上 克郎 （ 正員）
昭 54 阪大・基礎工・情報卒．昭 59 同大
大学院博士課程了．同年同大・基礎工・情報・助手．昭 59 〜昭 61 ハワイ大マノア校・情報工学科・助教授．平 1 阪大・基礎工・情論文／フォールト位置特定におけるプログラムスライスの実験的評価
報・講師．平 3 同学科・助教授．平 7 同学科・教授．工博．ソフトウェア工学の研究に従事．

9