Vol.2022-SE-211 No.27
2022/7/29

情報処理学会研究報告
IPSJ SIG Technical Report

Java プログラムを対象としたソースコードの変更量と実行トレースの変化量間の相関調査
藤原 勇真1

神田 哲也1

嶋利 一真2

井上 克郎3

概要：ソフトウェア開発においてソースコードへ大小さまざまな規模の編集が行われている．ソースコー
ドの大規模な編集はバグの埋込みと関連しているという報告がなされている．一方，ソースコードの変更
量は大きいが振舞いが変更しない事例や，些細な変更が挙動を大きく変化させる事例も考えられ，ソース
コードの変更量の大きさによってプログラムの挙動への影響の程度を予想できるかは不明である．本研究では，Java プロジェクトにおけるソースコードの変更量とプログラムの挙動の変化の関係について，プロ
グラムの挙動の変化を実行トレースから得られる 4 種類のメトリクスの変化量によって観測し，分析を行った．その結果，ソースコードの変更量と実行トレースの変化量の間に相関関係があるケースはみられたものの，相関の強いメトリクスはプロジェクトにより様々であることがわかった．
キーワード：実行トレース，動的解析，プログラムの挙動

Investigating the Correlation between the Amount of Change in Source
Code and the Amount of Change in Execution Trace for Java Programs
Yuma Fujiwara1

Tetsuya Kanda1

Kazumasa Shimari2

Katsuro Inoue3

Abstract: In software development, source code is edited on various scales, large and small. It is reported
that large-scale editing tends to be related to bug embedding. However, we can consider the cases where theamount of code changes is large but the program behavior does not change and minor editing signiﬁcantly
change the program behavior. Therefore, the eﬀect of the amount of change in the source code on the program behavior is uncertain. In this study, we investigated the relationship between the amount of change
in the source code and program behavior in Java programs. The change in program behavior is observed
from the changes in four metrics extracted from execution traces of the target programs. We found that theamount of change in the source code and the amount of change in the execution trace has a correlation insome cases, but metrics that have a strong correlation depend on the project.
Keywords: Execution trace, Dynamic analysis，Program behavior

1. はじめに模の編集が行われている．編集履歴を管理するため，バージョン管理システム (Version Control System: 以下，VCS)

ソフトウェア開発において，バグ修正や機能の追加，性が広く利用されている．VCS を用いたソフトウェア開発能の向上などの理由でソースコードへ大小さまざまな規

では，ソースコードの変更箇所が確認できる．また変更が加えられたプログラムが仕様通りに動くか確認するため，

1

2

3

大阪大学
Osaka University
奈良先端科学技術大学院大学
Nara Institute of Science and Technology
南山大学
Nanzan Universityⓒ 2022 Information Processing Society of Japan

ソフトウェアテストが広く実施されている．しかし，実行された命令列や変数の値など，プログラムの挙動の変化を確認することはできない．開発者の予期せぬ挙動の変化があった場合，障害が発生する可能性があり，ソフトウェア

1Vol.2022-SE-211 No.27
2022/7/29

情報処理学会研究報告
IPSJ SIG Technical Report

テストの結果のみで欠陥を発見することは困難である．また，大規模な編集は欠陥の埋込みと関連していると言われている [5] 一方で，ソースコードの変更量は大きいが振舞いが変更しない事例や，些細な変更が挙動を大きく変化させる事例もあり，ソースコードの変更量の大きさがプログラ
ムの挙動へ与える影響は定かではない．これらの理由で，開発者はソースコードの変更量の大小に関わらず，プログ
ラムの挙動の変化に注意する必要がある．しかし，開発者

図 1: コミット前後のソースコードの変更箇所*1がプログラムの挙動の変化を全て確認することは困難なことである．仮にソースコードの変更量とプログラムの挙動の変化量間に関連性があれば，ソースコードの変更量からプログラムの挙動の変化量を予測することができ，開発者の負担を軽減できる．
そこで本研究では，ソースコードの変更量とプログラムの挙動の変化量を 5 つの Java プロジェクトに対して調査する．プログラムの挙動の変化量は，プログラムの実行さ

図 2: テストの結果れた命令列である実行トレースのをもとに，変数の参照・
代入回数，メソッドの実行回数，実行された観測命令の種類数を取得し，それらの差分を計算することで表現した．

に，全体での変更されたファイルの数，追加された行数，

調査の結果，ソースコードの変更量と実行トレースの変削除された行数及び，各ファイルの変更箇所が確認できる．

化量間には，必ずしも相関関係があるとは限らず，相関の図 1 では，1 つのファイルが編集されており，3 行が追加

強さも様々であった．また，プロダクトコードの変更量とされ，2 行が削除されていることが分かる．変更箇所はハ

実行トレースの変化量間，テストコードの変更量と実行トイライトされており，赤でハイライトされたソースコード

レースの変化量間にも，明確な関係性が見られなかった．

が削除され，緑でハイライトされたソースコードが追加さ

以上のことから，ソースコードの変更量が必ずしも実行トれたことが分かる．

レースの変化量に影響を及ぼす訳ではなく，影響の程度もプロジェクト毎で様々であるということを明らかにした．

2.2 ソフトウェアテスト

以降 2 章では，研究背景や関連研究について述べる．3

ソフトウェアテストとは，開発したソフトウェアが設計章では本研究の調査内容や調査手法について述べ，4 章で通りに動作するかを評価及び検証するプロセスである．プは得られた結果について述べる．5 章では，調査結果に対ログラムの仕様にない振る舞いまたは欠陥を検知することする考察，6 章では，妥当性の脅威について述べる．最後が目的である．Java で単体テストを実施するためのテスに 7 章では本研究のまとめと今後の課題を述べる.

ティングフレームワークの 1 つに JUnit がある．JUnit を

2. 背景
2.1 バージョン管理システム
ソフトウェア開発において，機能の追加や欠陥修正，パフォーマンスの向上などを目的とし，ソースコードへ大小

用いてテストを実行した場合，図 2 のようにテスト結果を確認することができる．今回の場合，56 個のテストケー
ス全てにクリアしていることが分かる．このように開発者
は単体テストを実行し，その結果を確認することでソフトウェアの動作を検証している．
しかし，ソフトウェアテストを用いて全ての欠陥を検知

様々な規模の編集が行われている．これらの編集履歴を管理するため，今日のソフトウェア開発では VCS が広く利用することは非常に難しい．

されている．VCS とは，ファイルの変更履歴の保存，管理

南らの研究によると，246 件の OSS プロジェクトのうを行うソフトウェアである．ファイルの内容を，いつ誰がち，自動テストにより 28 件のプロジェクトで 332 個の欠どのように編集したのか，時系列で記録に残すため，過去陥が発見されたが，そのうちの 7 件のプロジェクトで 17のあるバージョンを参照したり，過去のバージョンに戻し個の欠陥が見逃されていた [13]．

たり，過去のバージョンとの差分を取ることが可能である．
代表的な VCS の 1 つである Git の場合，ファイルが変2.3 プログラムの挙動の変化

更された際に，ソースコードの編集箇所を開発者が容易に

ソースコードへ変更が加えられた場合，プログラムの挙確認することができる．Git のリポジトリをホスティング

動が変化する．プログラムの挙動には，メソッド実行系列

できるサービスの 1 つである GitHub の場合，図 1 のよう*1ⓒ 2022 Information Processing Society of Japan

https://github.com/mthmulders/mcs2Vol.2022-SE-211 No.27
2022/7/29

情報処理学会研究報告
IPSJ SIG Technical Report

や，変数に対する値の読み書きなどが挙げられる．開発者
は，変更後のプログラムの挙動を確認するために，ソフト

表 1: 調査対象の Java プロジェクト
プロジェクト名

コミット数

ウェアを実行する [4]．開発者の予期せぬようにプログラム

commons-lang

6,787

8,072

の挙動が変化した場合，障害が発生する場合がある．障害

commons-collections

3,712

16,922が発生した場合，開発者は欠陥を特定し修正する，デバッ

commons-codec

2,234

1,336

グを行う必要がある．

commons-csv

1,789

437

commons-cli

1,161

438

効率的なデバッグにおいて重要となるのが，プログラムの挙動の観測である [9]．プログラムの挙動の観測するにはいくつか方法がある．多くの開発者は，変数の値を出力する printf デバッグを有用な手段だと考え，利用している [2]．また，プログラムの挙動を観測するために，処理の状況を示すメッセージや変数の値等のデータをプログラムの外部に出力するロギング処理が広く用いられている [3]．
プログラムの実行を任意の箇所で一時停止するブレークポ
イントデバッグも頻繁に利用されており [8]，変数の値やメソッドの呼び出し状態など，プログラムの挙動が観察されている．
また，ソースコードに対する変更がプログラムにどのような影響を与えるかを解析する，影響波及解析という手法がある [1]．この手法では，変更によって影響の受ける可能性のあるソースコードを特定する [10]．
しかし，ソースコードの変更量とプログラムの挙動の変化の関係性に関しては調査が行われていない．大きな修正
はバグの埋め込みと関連があると言われている [5] 一方で，些細な変更がプログラムの挙動を大きく変化させる場合もあり，開発者はプログラムの挙動の変化に注意する必要がある．しかし，開発者がプログラムの挙動の変化を全て確認することは困難なことである．

2.4 Omniscient Debugging
Omniscient Debugging とは，プログラムの実行中のメ
モリ状態を時系列で完全に記録することで，網羅的に情報を収集してデバッグする手法の 1 つである [7]．この手法
では，プログラムの実行開始から実行終了までに実行された全ての命令と，それによる値の変化を実行トレースとして記録する．従って，任意の時点でのプログラムの内部状
態を計算機上で再現し，命令の実行順序や変数の値を観測することが可能である.

3. 調査
本研究では，Java プログラムを対象とし，ソースコードの変更量とテストケースに対する実行トレースの変化量との関連性について調査する．ソースコードの変更量と実行トレースの変化量間の関連性があるかどうかを調査することで，今後の実行トレースの変化に関するツール作成や議論の基盤になることが期待される．

テストケース数

3.1 調査対象
今回の調査では，JUnit のテストケースが用意されたApache の Java プロジェクト 5 つを調査対象とする．調査対象のプロジェクト名，コミット数，テストケースの数（2022 年 6 月 14 日 13 時時点）を表 1 に示す．

3.2 調査手法
調査手順を以下に示す．

STEP1． テストケースが用意されており，Java ファイ
ルの編集があるコミットを抽出する．

STEP2． プロジェクトの状態を STEP1 で抽出した各コ
ミットの状態に移す

STEP3． プログラム変更前後でのソースコードの変更量を求める．

STEP4． SELogger を有効にしてテストを実行し，プロ
グラム変更前後の実行トレースの取得を行う．

STEP5． プログラム変更前後の実行トレースから，各メトリクスを取得する．

STEP6． STEP1 から STEP5 を繰り返し行う．
STEP7． ソースコードの変更量と実行トレースの変化量間の分析を行う．

STEP1 では，Git のコミット履歴を確認し，該当するコ
ミットのコミット ID を記録する．設定ファイルの変更による影響は本研究での調査対象外のため，設定ファイルの変更を含むコミットは対象外とする．

STEP2 では，git checkout コマンドを使用し，手元にあるプロジェクトの状態を対象のコミットの状態に移す．

STEP3 では，git diﬀ コマンドを用いて，プログラム変更
前のコミット及びプログラム変更後のコミットから，ソースコードの変更量を取得する．ここでソースコードの変更
量を以下の２種類定義する．

( 1 ) 追加行数と削除行数の合計値( 2 ) git diﬀ コマンドで表示される，各ブロックの追加行数
または削除行数の最大値の和

1 つ目の定義について説明する．git diﬀ コマンドを用いⓒ 2022 Information Processing Society of Japan3

Vol.2022-SE-211 No.27
2022/7/29

情報処理学会研究報告
IPSJ SIG Technical Reportて得られた差分から、変更前のコミットで削除された行数

STEP4 では，テスト実行時に Omniscient Debugging のと，変更後のコミットで追加された行数を測定する．1 つ

実装の 1 つである SELogger[11] を利用し実行トレースの目の定義ではこれらの和をソースコードの変更量と定義す取得を行う．SELogger は，REMViewer の既存のトレース

る．１つ目の定義では，ソースコードの編集・追加・削除

レコーダーを拡張したものである [12]．SELogger は，Javaといった特徴が把握できない．そこで，ソースコードの編

仮想マシン内で Java エージェントとして動作する. プロ

集・追加・削除を考慮するため，2 つ目のソースコードの変グラムのロードされたクラスにロギング命令を挿入し，実更量を定義した．ただし，双方ともソースフォルダ内にあ行トレースを取得する. このようにして，プログラムの実

る Java ファイルのみを対象とする．また，空行やスペー

行開始から実行終了までに実行された全ての命令と，それスのみの編集も除く．

による値の変化を実行トレースとして記録する．プログラ

2 つ目の定義について説明する．git diﬀ コマンドを用い

ム変更前及び変更後でそれぞれテストを実行し，それぞれて得られた差分から，各ブロックの追加行数または削除行の実行トレースを取得する．ただし，ビルドが出来ないコ数の最大値を測定する．2 つ目の定義では，これらの和を

ミットは除く．

ソースコードの変更量と定義する．git diﬀ コマンドの出力

STEP5 では，STEP4 で得られたプログラム変更前後の例を以下に示し，具体的に説明を行う．git diﬀ コマンドを

2 つの実行トレースからプログラムの挙動の変化に関連す使用することで，編集されたソースコード箇所がブロックるメトリクスを測定する．メトリクスの詳細やその取得方単位で表示される．出力例では，“@@” を用いて各ブロッ法については，3.3 節で説明を行う．

クが区切られている．追加された行は “+”，削除された行STEP6 では，最新のコミットから過去のコミットに遡

は “-” を用いて各ブロック毎に表示される．出力例のうち，りながら，STEP1 から STEP5 を繰り返し行う．本研究で1 つ目のブロックでは，変数 a の型が int 型から double 型

は，メトリクスを計 50 回取得するまで繰り返し行った．

に変更されている．この変更を，“ソースコードが 2 行変

STEP7 では，ソースコードの変更量と実行トレースの更された” と解釈するのではなく，“ソースコードが 1 行編

変化量間の関連性について分析を行う．本研究では，関連集された” と解釈する．このブロックでは，追加行数が 1

性の評価に相関係数を用いる．まず，Java ファイル全体

行，削除行数が 1 行であるため，追加行数または削除行数のソースコードの変更量と実行トレースの変化量間の関連の最大値は 1 行となる．従ってこのブロックでは，ソース性について調査する．収集した全コミットに対し，ソース

コードの変更量が 1 行であると解釈する．2 つ目のブロッ

コードの変更量と実行トレースの変化量間の相関係数を各クでは，sum+=a というソースコードが 1 行追加されておプロジェクト毎に求める．また編集がプロダクトコードにり，削除されたソースコードはない．追加行数又は削除行対するものかテストコードに対するものかによって実行ト数の最大値は 1 となり，このブロックでのソースコードのレースの変化量に与える影響が異なる可能性を調査するた

変更量は 1 行であると解釈する．このように，各ブロック

め，収集したコミットを編集された Java ファイルの含までソースコードの変更量を求め，各ブロックのソースコー

れるフォルダによって，プロダクトコードのみ編集された

ドの変更量の和を求める．今回の例の場合，各ブロックのコミット，テストコードのみ編集されたコミット，双方編

ソースコードの変更量は 1 行であるため，全体でのソース集されたコミットに分類する．分類したそれぞれのコミッ

コードの変更量は 2 行となる．このように定義した 2 つ目

トに対し，ソースコードの変更量と実行トレースの変化量のソースコードの変更量の求め方では，ソースコードの追間の相関係数を各プロジェクト毎に求める．

加・削除・編集をある程度考慮し，ソースコードの変更量を求めることができる．

git diﬀ の出力例

3.3 メトリクスの取得方法



本節では，3.2 節の STEP5 で述べた実行トレースからの@@メトリクスの取得について，詳細な説明を行う．本調査で・・・の実行トレースは，観測命令とその命令とその実行回数の+double a = 0

組み合わせから成る．観測命令は，ソースコードにおける-int a = 0

位置と実行されたバイトコード命令の種類の組み合わせか・・・

本研究では，この実行トレースから以下の 4 つのメトリ

@@
・・・

+

ら成る．

sum += a・・・ⓒ 2022 Information Processing Society of Japan

クスを収集する．

1. 実行された観測命令の種類数の変化量

 2. 変数の参照回数の変化量4Vol.2022-SE-211 No.27
2022/7/29

情報処理学会研究報告
IPSJ SIG Technical Report

3. 変数の代入回数の変化量
4. メソッド実行回数の変化量
以降，各メトリクスの説明とその取得方法について述の変化量間の相関係数を表 2 及び表 3 に示す．相関係数が0.30 以上の場合に正の相関関係があると判断し，表中太字で示している．ソースコードの変更量と実行された観測命
令の種類数の変化量については，3 つのプロジェクトで正べる．

の相関関係が見られたが，他の 2 つのプロジェクトでは相3.3.1 実行された観測命令の種類数の変化量

関関係が見られなかった．同様に他のメトリクスについて

観測命令は，ソースコードにおける位置と実行されたバも，ソースコードの変更量と強い正の相関関係があるプロ

イトコード命令の組み合わせから成る．本メトリクスは観ジェクトや，全く相関関係がないプロジェクトがあるなど，

測命令のうち，実行されたものの種類数のみを数える．つ全てのプロジェクトに一貫として相関関係のあるメトリク

まり，ソースコードにおいて記述されていても，一度も実スは存在しなかった．このことからソースコードの変更量

行されなかった命令については数えない．本メトリクスをと実行トレースの変化量の間の相関の強さは様々であり，用いることで，単純なソースコードの変更だけではなくそ

一概な関係性がないことが分かる．プロジェクト毎に実行の変更による実行への影響の有無に着目することが可能とトレースの変化量を見ると，commons-lang を除いて，変なるため，実行トレース全体の変化を定量的に把握するこ

数の参照回数の変化量，代入回数の変化量，メソッドの実とが可能となる．

行回数の変化量の各相関係数は類似している．この 3 つの3.3.2 変数の参照回数の変化量および変数の代入回数のメトリクスは，ソースコードの変更量に対し類似した変化

変化量を示すことが分かる．

本節では，変数の参照回数の変化量と，変数の代入回数

次に，各コミットにおけるソースコードの変更量をプロの変化量の二つのメトリクスについて説明する．本メトリ

ダクトコードの変更量，テストコードの変更量，双方の変クスにおいて参照・代入関数の取得の対象とした変数は，更量として分類して行なった調査結果を示す．分類後の各

局所変数，クラス変数，インスタンス変数のすべての種類

コミット数を表 4 に示す．変更されたコードの種類ごとのの変数である．

ソースコードの変更量と実行トレースの変化量間の相関係取得の手順としては，プログラム内で宣言された変数に数を表 5 及び 6 に示す．変更されたコードの種類ごとの対して，全ての観測命令からその変数に対して参照が行わ

ソースコードの変更量と実行トレースの変化量の相関関係

れた観測命令を抽出し，その参照回数の取得を行う．参照についても様々であり，明確な関係性や傾向は見られない．

された回数の取得は，観測命令において変数の参照が発生

ソースコードの種類を分類後についても，プロジェクト毎していた場合の観測命令の実行回数から算出する．この処に実行トレースの変化量を見ると，commons-lang を除い理をプログラムにおいて実行されたすべての変数に対してて，変数の参照回数の変化量，代入回数の変化量，メソッ

実行し，各変数ごとに参照回数の差分を求める．そして，

ドの実行回数の変化量の各相関係数は類似している．

全変数から得られた参照回数の差分の絶対値を足し合わせることで，変数の参照回数の変化量を取得する．

以上のことから，ソースコードの変更量と実行トレースの変化量間には明確な関係性は見られず，ソースコードの変数の代入回数の変化量についても同様の変数を対象と変更量が必ずしも実行トレースの変化量に影響しないこと

して，参照の代わりに代入が行われた命令とその回数を数が分かる．また，参照回数の変化，代入回数の変化，メソッえることで計測可能である．

ド実行回数の変化は，ソースコードの変更量に対し類似し3.3.3 メソッドの実行回数の変化量た変化を示すことが分かる．

本調査でのメソッド実行回数とは，調査対象プロジェク
トのソースコード内のメソッドが呼び出された回数を記録

5. 考察

する．したがって，外部ライブラリのメソッド呼出しの情

ソースコードの変更量と実行された観測命令の種類数の報は記録していない．理由としては，プロジェクト内の実変化量間について，相関関係があると考えていたが，5 つ行の変化に着目するためで，頻繁に実行される外部ライブのプロジェクトのうち 2 つのプロジェクトではほとんど相

ラリなどによる影響を避けるためである．

関なしという結果が得られた．このことから，変数の型変本メトリクスは，プログラム変更前後でのそれぞれのメ
ソッド実行回数を記録しておき，メソッドごとに実行回数の変化量の絶対値を算出しその合計を数えることで計測
する．

4. 結果
定義した 2 種類のソースコードの変更量と実行トレースⓒ 2022 Information Processing Society of Japan

更やソースコードの移動など命令系列に影響のない変更も多々あることが考えられる．
ソースコードの変更量と実行トレースの変化量間について，一般的な関連性は見つからなかったが，特徴が見られるプロジェクトもあった．例えば，表 6 から commons-cliにおいてはプロダクトコードの変更量と実行トレースの変化量間に正の相関関係があることが分かる．この場合，プ5Vol.2022-SE-211 No.27
2022/7/29

情報処理学会研究報告
IPSJ SIG Technical Report

表 2: ソースコードの変更量 (1) と実行トレースの変化量の相関係数
実行された観測命令の変数の参照回数

変数の代入回数

メソッド実行回数

種類数の変化量

の変化量

の変化量

の変化量

commons-lang

0.577-0.011

0.536

0.042

commons-collections

0.025

0.306

0.318

0.303

commons-codec

0.834

0.658

0.605

0.806

commons-csv

0.637

0.214

0.094

0.087

commons-cli

0.110-0.015-0.0140.01

プロジェクト名

表 3: ソースコードの変更量 (2) と実行トレースの変化量の相関係数
プロジェクト名実行された観測命令の変数の参照回数

変数の代入回数

メソッド実行回数

種類数の変化量

の変化量

の変化量

の変化量

-0.195commons-lang

0.610

0.173

0.586

commons-collections

0.051

0.267

0.278

0.263

commons-codec

0.812

0.765

0.722

0.763

commons-csv

0.672

0.243

0.120

0.111

commons-cli

0.112

0.000

0.000

0.015

トについて調査を行なったため，完全な新規開発は含まれ

表 4: 編集ファイル分類後のコミット数ていないなど，ソースコードの変更内容や実行トレースのプロダクトコード

テストコード

のみの編集

のみの編集

commons-lang

23

15

12

commons-collections

13

21

16

また，ソースコードの変更量を git diﬀ コマンドを用い

commons-codec

24

16

10

て取得しているため，コメントの編集量もソースコードのcommons-csv

12

25

13

commons-cli

22

10

18

プロジェクト名

双方の編集変化に偏りがある可能性がある．

変更量として含まれている．コメントはプログラムの挙動には影響を与えないため，実行トレースの変化量との関係

ロダクトコードの変更量から実行トレースの変化量を予測を考える上では考慮すべきではないものといえる．今回収できる可能性がある．このように，ソースコードの変更量集した全 250 コミットのうち，78 コミットにコメントの編と実行トレース間の関連性はプロジェクト依存であるが，集が含まれていた．コメントの編集量を除くことで，ソー関連性が見つかったプロジェクトについては以降の開発にスコードの変更量と実行トレースの変化量間の関連性につ活用できる可能性がある．

いて変化が見られる可能性がある．

また表 5 及び表 6 から，プロダクトコードのみの変更量

さらに実行トレースの変化量の取得において，プログラと実行トレースの変化量の相関関係と，テストコードのみ

ム全体で比較し変化量を求めているため，厳密な比較を行の変更量と実行トレースの変化量の相関関係が大きく異なっていない．例えば，実行された観測命令の種類数の変なっていることが分かる．このことから，プロダクトコー

化量において，プログラム変更後にある観測命令の種類がドのみを編集した場合とテストコードのみを編集した場

2 つ増え，別の観測命令の種類数が 2 つ減った場合，変化量

合では，プログラムの挙動の変化が大きく異なることが分は 0 となる．ファイル単位やメソッド単位など細かい比較

かる．

を行うことで，実行トレースの変化がより観測され，ソーさらに，表 2 と表 3 を比較すると，表 3 における実行ト
レースの変化量との相関係数の値が，表 2 に比べて全体的

スコードの変更量と実行トレースの変化量の相関関係に変化が見られる可能性がある．

に 1 に近づいていることが分かる．このことから，ソース

本研究では，テストスイートに対するプログラムの挙動

コードの変更において，追加・削除・編集という情報が重の変化を観測している．テストカバレッジが不十分だった要であることが考えられる．

場合，プログラムの挙動の変化を正しく取得できていない

6. 妥当性への脅威可能性がある．Singh らはテストコードのカバレッジを調査しており，テストが実施されている OSS プロジェクト

調査したコミットの作業内容，具体的には完全な新規開327 件の平均テストカバレッジは 41.96%であったと報告し

発，機能追加，不具合修正などによって，実行トレースのている [6]．今回の調査対象に関してテストコードのカバ

変化量の傾向が変化する恐れがある．今回調査対象としたレッジ率は算出していないが，編集ファイルを分類した通プロジェクトはいずれも長期にわたって開発が続けられてりテストコードに対しても一定の編集が加えられていたこ

いる著名なプロジェクトであり，それらの各最新 50 コミッとから，テストスイート自体は適宜保守されている場合にⓒ 2022 Information Processing Society of Japan

6

Vol.2022-SE-211 No.27
2022/7/29

情報処理学会研究報告
IPSJ SIG Technical Report

表 5: 変更されたコードの種類ごとのソースコードの変更量 (1) と実行トレースの変化量の相関係数変更されたコードの種類

プロダクトコードのみ

テストコードのみ

プロダクトコードとテストコード実行された観測命令の変数の参照回数

変数の代入回数

メソッド実行回数

種類数の変化量

の変化量

の変化量

の変化量

commons-lang-0.124-0.084-0.0830.114

commons-collections

0.798-0.109-0.321-0.102

プロジェクト名

commons-codec

0.289

0.122

-0.1120.290

commons-csv

0.573-0.034-0.016-0.166

commons-cli

0.287

0.225

0.192

0.270

commons-lang

0.367

-0.24

0.671

-0.337commons-collections-0.011

0.318

0.331

0.318

commons-codec

0.812

0.973

0.953

0.976

commons-csv

0.069

0.043

0.033

0.043

commons-cli

0.984-0.102-0.1150.000

commons-lang

0.770-0.098

0.510

0.168

commons-collections-0.262

0.180

0.663

0.005

commons-codec

0.977

0.981

0.980

0.290

commons-csv

0.583

0.121

0.069

0.072

commons-cli

0.019-0.082-0.082-0.065

表 6: 変更されたコードの種類ごとのソースコードの変更量 (2) と実行トレースの変化量の相関係数変更されたコードの種類

プロダクトコードのみ

テストコードのみ

プロダクトコードとテストコード実行された観測命令の変数の参照回数

変数の代入回数

メソッド実行回数

種類数の変化量

の変化量

の変化量

の変化量

commons-lang-0.0370.078-0.076

0.108

commons-collections

0.724-0.220-0.348-0.246

commons-codec

0.435

0.237

-0.0770.435

commons-csv

0.727-0.069-0.200-0.200commons-cli

0.505

0.444

0.400

0.488

プロジェクト名

commons-lang

0.383-0.2040.706-0.302

commons-collections

0.041

0.339

0.350

0.388

commons-codec

0.783

0.950

0.936

0.949

commons-csv

0.094

0.077

0.063

0.078

commons-cli

0.918-0.042-0.0450.060

commons-lang

0.787

0.143

0.551

0.207

commons-collections-0.242

0.054

0.594

-0.124commons-codec

0.992

0.994

0.991

0.277

commons-csv

0.624

0.151

0.113

0.115

commons-cli

0.020-0.065-0.065-0.050

おける調査結果になっていると考えている．

7. まとめと今後の課題
本研究では，ソースコードの変更量と実行トレースの変化量の関連性について調べるため，複数の Java プログラ
ムに対して両者の関連について分析を行なった．相関係数を用いた評価では，ソースコードの変更量と実行トレースの変化量に明確な関係性がなく，ソースコードの変更量が進めていきたい．また，挙動の変化が大きい際に開発者へ挙動を確認するよう警告を行うツールや，プログラムの挙動の変化の可視化を行うツールの作成などが今後の課題として挙げられる．

謝辞
本研究は JSPS 科研費 JP18H04094，JP19K20239 の助成を受けたものです.

必ずしも実行トレースの変化量に影響しないことを明らかにした．また，ソースコードの変更をプロダクトコードの参考文献

みの変更，テストコードのみの変更，双方の変更に分類し，[1]

実行トレースの変化量との関連性について調査を行なった．結果としては，一概な関係性は見られなかったが，プ[2]

ロダクトコードのみ編集とテストコードのみの編集とでは，ソースコードの変更量と実行トレースの変化量間の関係性が全く異なることが分かった．

[3]

本研究では，ソースコードの変更量に着目をしたが，今後はソースコードの変更内容に着目し，どのような変更がプログラムの挙動に大きな影響を及ぼすのかなどの調査をⓒ 2022 Information Processing Society of Japan[4]

Arnold, R. S.: Software change impact analysis, IEEE
Computer Society Press (1996).
Beller, M., Spruit, N., Spinellis, D. and Zaidman, A.: On
the dichotomy of debugging behavior among programmers, Proceedings of the 40th International Conference
on Software Engineering, pp. 572–583 (2018).
Hassani, M., Shang, W., Shihab, E. and Tsantalis,N.: Studying and detecting log-related issues, Empirical Software Engineering, Vol. 23, No. 6, pp. 3248–3280(2018).
Jiang, S., McMillan, C. and Santelices, R. A.: Do Programmers do Change Impact Analysis in Debugging?,
Empirical Software Engineering, Vol. 22, pp. 631–669

7

情報処理学会研究報告
IPSJ SIG Technical Report

[5]

[6]

[7]
[8]

[9]
[10]

[11]

[12]

[13]

Vol.2022-SE-211 No.27
2022/7/29(2017).
Kamei, Y., Shihab, E., Adams, B., Hassan, A. E.,
Mockus, A., Sinha, A. and Ubayashi, N.: A large-scale
empirical study of just-in-time quality assurance, IEEE
Transactions on Software Engineering, Vol. 39, No. 6,
pp. 757–773 (2013).
Kochhar, P. S., Thung, F., Lo, D. and Lawall, J.: An
Empirical Study on the Adequacy of Testing in Open
Source Projects, Proceedings of the 21st Asia-Paciﬁc
Software Engineering Conference, APSEC 2014, pp.
215–222 (2014).
Lewis, B.: Debugging Backwards in Time, CoRR,
Vol. cs.SE/0310016 (2003).
Murphy, G. C., Kersten, M. and Findlater, L.: How areJava software developers using the Eclipse IDE?, IEEE
Software, Vol. 23, No. 4, pp. 76–83 (2006).
Pothier, G., Tanter, E. and Piquer, J.: Scalable Omniscient Debugging (2007).
Ren, X., Shah, F., Tip, F., Ryder, B. G. and Chesley,
O.: Chianti: A Tool for Change Impact Analysis of Java
Programs (2004).
Shimari, K., Ishio, T., Kanda, T. and Inoue, K.: Nearomniscient debugging for java using size-limited execution trace, Proceedings of the 35th IEEE International
Conference on Software Maintenance and Evolution,
ICSME 2019, pp. 398–401 (2019).
松村俊徳， 石尾隆， 鹿島悠，井上克郎： REMViewer:
複数回実行された Java メソッドの実行経路可視化ツー
ル，コンピュータ ソフトウェア， Vol. 32, No. 3, pp.
3 137–3 148 (2015).
南智孝： OSS 開発における欠陥数とカバレッジの関係に基づく継続的インテグレーションの有効性検証，修士
論文，奈良先端科学技術大学院大学 (2017).

ⓒ 2022 Information Processing Society of Japan

8