行単位の依存関係を用いたテスト選択手法の提案
藤原 勇真1

神田 哲也1

嶋利 一真2

肥後 芳樹1

概要：テスト実行のコストを削減するための手法の１つとして，テストケース選択が活用されている．既存研究では，ファイルやメソッドレベルでプロダクトコードとテストの依存関係を取得し，テスト選択を行うことで，テスト実行のコストを大幅に削減している．しかし，メソッド単位で依存関係を取得した場
合でも，分岐等によって実際に実行されない命令が存在する場合があり，不要なテストケースが含まれている可能性がある．そこで本研究では，プロダクトコードの行とテストの依存関係を利用したテストケー
ス選択手法を提案する．

コード差分

1. はじめに回帰テストは，ソフトウェアの変更によって既存機能のSTEP1
テスト選択

STEP3
依存関係更新

コード変更

動作に影響がないかを確認するために重要である．変更

testA{classA:line2,line3,...}{classB:line6,line7,...}
testB{classB:line3,line4...}{classC:line6,line8,...}...のたびに全てのテストを再実行することはコストが大きいため，障害分析に影響が出ないように実行するテストケースの数を削減するテスト選択技術が活用されている．

Gligoric らは，ファイルレベルのテストケースとプロダク依存関係

トコードの依存関係を利用し，変更されたファイルに関連するテストを選択する動的テスト選択技術，Ekstazi [1] をSTEP2
テスト実行

図 1

提案手法全体図

提案し，エンドツーエンド時間を 32 ％短縮することを示している．テスト選択にファイルやメソッドレベルの依存関のある行 L に依存関係があるとは，あるテスト実行 T に係を用いた場合，分岐等によって実際に実行されない命令おいて，プロダクトコードのある行 L が実行されているこが存在する場合があり，不要なテストが含まれている可能とを意味する．提案手法の全体像を図 1 に示す．

性がある．細かい粒度での依存関係を用いることで解析時

STEP1 では，コードの差分と既存の依存関係から，テス間が増大するが，選択するテスト数の削減が期待できる．

トケースを選択する．メソッド内にコードの追加があった本研究では，テストケースとプロダクトコードの行単位

場合，追加されたコードの直前行と依存関係のあるテストでの依存関係と変更時のソースコード差分を用いること

ケースを選択する．メソッド内にコードの削除があった場

で，ソースコードの更新時に実行されるテストを選択する

合，削除されたコードと依存関係のあるテストケースを選手法を提案する．提案手法と既存手法を比較し，細かい粒択する．フィールドに変更があった場合，該当のフィール

度依存関係を用いたテスト選択手法の有用性を評価する．

ドと依存関係のあるテストケースを選択する．新たにファイル単位での追加があった場合，全テストを選択する．な2. 提案手法

お，既存の依存関係が存在しない場合は全てのテストを実本研究では，既存手法でテストケースに対する依存関係行し，依存関係を構築する．STEP2 では，選択したテストとして用いられているファイルやメソッドレベルより細かケースを実行し，実行時の情報を取得する．本研究では，いソースコードの行単位を用いたテスト選択手法を提案す

SELogger [2] を利用し，テスト単位で実行時の命令や行番る．本研究において，テストケース T とプロダクトコード号を取得する．STEP3 では，STEP2 で得た実行時情報及びコードの差分を用いて，依存関係を更新する．テスト12

大阪大学
Osaka University
奈良先端科学技術大学院大学
Nara Institute of Science and Technology

ケースとプロダクトコードの依存関係については，テスト単位で実行するクラス名及び行番号を管理する．フィール
ド変数の依存関係については，フィールド変数名単位で同一のフィールド変数を参照するクラス名及び行番号を管理

表 1

実験対象のプロジェクト一覧
テスト

テスト

クラス数

メソッド数

100

29

438

16,932

commons-jxpath

99

61

411

48,491

jacksonXML

33

140

348

26,639

NuProcess

51

1134

9,899

commons-net

80

63316

65,791する．また，コードの差分からテストケースとプロダクト

プロジェクト

リビジョン数

コードの依存関係内の行番号を更新する．これは，importcommons-cli

文の削除による行番号のずれのような，テストケースに無関係なコードの変更が行われた場合を考慮するためである．

3. 評価

表 2

コード行数結果

テスト数削減率 [%]実行時間削減率 [%]提案手法

Ekstazi

提案手法

提案手法の有用性を Ekstazi と比較し評価する．これ

プロジェクト

実行時間 [s]は，Shin らが既存のテスト選択技術を比較評価した結果，

commons-cli

8.75

98.00

94.02

6.40

3.94

commons-jxpath

20.36

97.07

96.85

1.92

23.37

jacksonXML

24.99

83.05

83.32

25.60

13.70

NuProcess

78.10

96.16

80.70

91.15

76.02

commons-net

109.99

93.42

93.47

69.8

80.70

Ekstazi が最も優れていると結論づけているためである [3]．
3.1 評価手法

Ekstazi

既存研究と同様に，OSS の各リビジョンに対してテスEkstazi を上回ったが，その他の 2 つに関しては，Ekstazi

ト選択技術を適用し，性能を評価する．初回のリビジョンを下回った．特に，commons-jxpath では，Ekstazi を大きに対しては，既存の依存関係が存在しないため，全テストく下回った．commons-jxpath は依存関係が非常に複雑でを実行し，依存関係を構築する．2 番目に古いリビジョンあり，テストケース単位で実行したクラス名及び行番号を以降から，テスト選択が行われる．実験対象の OSS を表記録した依存関係ファイルのサイズが，commons-net は1 に示す．本研究では，テスト削減率と実行時間削減率の852KB に対し，commons-jxpath は 92MB もあった．依存側面から評価を行う．テスト削減率は，テスト選択を利用関係が複雑である場合，依存関係の解析や更新に時間がかしない場合，つまり全てのテストケースを実行した場合にかってしまい，実行時間が大きくなってしまう．反対に，対して，テスト選択を適用した場合に，実行するテストを依存関係が単純で，テスト実行時間が長い NuProcess にどの程度削減できたかを示す指標である．実行時間の削減

関しては，細かい依存関係を利用することで，実行するテ率は，全てのテストケースを実行する場合に対して，テスストケース数が削減でき，実行時間の削減が達成できた．

ト選択を適用した場合にテスト実行及びテスト選択が費やjacksonXML に関しては，選択されたテストケースがないす時間の合計をどの程度削減できたかを示す指標である．

場合に，提案手法の方が Ekstazi よりもビルド時間が短く

Ekstazi の場合，ビルドコマンドを実行することで，テストなったため，実行時間削減率が高い値になっている．

選択からテスト実行，依存関係の更新まで行われるため，ビルドコマンドの実行時間をエンドツーエンド時間として4. まとめ計測する．提案手法の場合，コードの差分の取得，テストプロダクトコード行単位とテストケースの依存関係を利

選択，テスト実行，依存関係の更新，はそれぞれ手動で行用したテスト選択手法を提案し，依存関係が単純でテストう必要があるため，各フェーズの実行時間を計算し，合計実行時間が長いプロジェクトにおいて，提案手法の有用性することで，実行時間を計測する．選択されたテストケーを確認した．今後は，差分や依存関係の解析方法の洗練にスがない場合，Ekstazi と同様にテスト実行はスキップし，よる実行時間の削減や，プロジェクトの規模や変更内容にビルドのみ行う．人為的なミスを避け，再現性を確保する応じた適切な依存関係の粒度選択を検討していく．

ために，実験全体を自動化して行った．

謝辞

本研究は栢森情報科学振興財団，JSPS 科研費（JP19K20239, JP20H04166，JP21K18302，JP21K11829，

3.2 結果
結果を表 2 に示す．テスト数削減率に関しては，3 つのJP21H04877，JP22H03567，JP22K11985）の助成を受けたものです.

プロジェクトで Ekstazi を上回ったが，2 つのプロジェクト
では下回った．これは，提案手法ではインデントの修正やコメントの編集をファイルの変更有と判断している一方，Ekstazi で変更無と判断しており，この点で提案手法が多参考文献[1]

くのテストケースを選択しているからである．Ekstazi ではクラスファイルのチェックサムを用いてファイルの変更[2]

有無を判断しているため，インデントの変更やコメントの編集を無視できるが，提案手法ではコードの差分を利用しているため，無視できない．
実行時間削減率に関しては，3 つのプロジェクトでは，[3]Gligoric, M., Eloussi, L. and Marinov, D.: Practical regression test selection with dynamic ﬁle dependencies,Proc. ISSTA 2015, pp. 211–222 (2015).
Shimari, K., Ishio, T., Kanda, T. and Inoue, K.: Nearomniscient debugging for java using size-limited execution
trace, Proc. ICSME 2019, pp. 398–401 (2019).
Shin, M. K., Ghosh, S. and Vijayasarathy, L. R.: An empirical comparison of four Java-based regression test selection techniques, J. Syst. Softw., Vol. 186 (2022).