情報処理学会論文誌

Vol.61 No.4 830–841 (Apr. 2020)

高処理効率性と高可搬性を備えた自動プログラム修正システムの開発と評価
本 真佑1,a)

肥後 芳樹1,b) 有馬 諒1
松本 淳之介1 富田 裕也1

谷門 照斗1
華山 魁生1

内藤 圭吾1
楠本 真二1

松尾 裕幸1

受付日 2019年8月1日, 採録日 2020年1月16日

概要：ソフトウェア開発において，効率的なデバッグ作業の実現を目的とした自動プログラム修正に関する研究が数多く行われている．自動プログラム修正ではバグを含むソースコードとテストスイートを入力とし，自動的にバグ修正の施されたソースコードを出力する．本論文では，著者らが開発している自動プ
ログラム修正のための研究用プラットフォーム kGenProg について紹介する．kGenProg はプログラム修
正の過程に対して遺伝的アルゴリズムを採用しており，生物の進化や淘汰を模倣したプログラム修正を実現する．kGenProg は既存のプログラム修正システムと比較して，高処理効率性と高可搬性の 2 つの特徴を持つ．評価実験として，実際のバグを対象とした適用実験を行い，既存のプログラム修正ツールと比べて処理速度の向上を確認した．
キーワード：自動プログラム修正，自動バグ限局，遺伝的アルゴリズム，kGenProg，Defects4J

Development and Evaluation of an Automated Program Repair Systemwith High-performance and High-portability
Shinsuke Matsumoto1,a) Yoshiki Higo1,b) Ryo Arima1 Akito Tanikado1 Keigo Naito1
Hiroyuki Matsuo1 Junnosuke Matsumoto1 Yuya Tomida1 Kaisei Hanayama1
Shinji Kusumoto1
Received: August 1, 2019, Accepted: January 16, 2020

Abstract: Numerous studies have been conducted in the ﬁeld of automated program repair (APR) whichenables eﬃcient debugging on software development. Automated program repair can generate repaired code
automatically by giving test cases and source code including one ore more bugs. In this paper, we introduce our developing APR framework named kGenProg. kGenProgtries to repair the given code as biologicalevolution and selection by employing genetic algorithm approach for its repairing process. kGenProgaims
to achieve high-performance and high-portability compared to existing APR tools. As an evaluation, we
conducted an experimental performance comparison with an existing APR tool. The result shows kGenProgimproves repairing performance in most cases.
Keywords: Automated program repair, fault localization, genetic algorithm, kGenProg, Defects4J

1. はじめにデバッグはソフトウェアの信頼性の向上のために避けることのできない作業である．ソフトウェア開発においてデ
1
a)
b)

大阪大学
Osaka University, Suita, Osaka 565–0871, Japanshinsuke@ist.osaka-u.ac.jp
higo@ist.osaka-u.ac.jp

c 2020 Information Processing Society of Japan

バッグは多大な労力を必要とする作業であり，開発工数の半数以上を占めるとの報告もある [4], [11]．そのため，デバッグの支援はソフトウェア開発の効率化やソフトウェアの信頼性の向上に有益である．
デバッグ支援に関する研究がこれまでに数多く行われてきており，自動プログラム修正と呼ばれる技術が近年注目を集めている．自動プログラム修正とは，バグのある

830

情報処理学会論文誌

Vol.61 No.4 830–841 (Apr. 2020)

プログラムから完全に自動でバグを取り除く技術である．

ダウンロードした後に種々のパラメータの設定や特定のGenProg [33] はこの自動プログラム修正分野にブレイクス

ディレクトリ構成を構築する必要があり，すぐに利用開始

ルーをもたらしたツールである．GenProg の基本的なア

することは難しい．一方，kGenProg は Java で開発されてイデアは，遺伝的アルゴリズムに基づき，バグのあるプロ

おり，kGenProg の実行に必要なものは実行用 Jar ファイ

グラムをバグのない状態に徐々に近づけていく，という点

ルのみである．kGenProg の種々のパラメータには著者らにある．GenProg は 8 つのオープンソースソフトウェア

がこれまでの経験から有効と判断したデフォルト値が設定（OSS）に対して適用され，105 個中 55 個の欠陥の修正にされているため，利用者は対象プロジェクトのルートディ

成功した，との報告もある [22]．

レクトリを kGenProg に与えるだけで実行できる．

しかし GenProg には，実行時間が長いという課題があ

本論文では，kGenProg の上記 2 つの特徴についてそれる．文献 [22] の実験では，修正に要する時間は，修正成功

ぞれ紹介する*3 ．さらに，特徴の 1 つである高処理効率性の場合は平均 1 時間 36 分，修正失敗の場合は平均 11 時間について評価実験を行う．評価実験では，複数の OSS で

12 分であった．GenProg では，そのアルゴリズムにおい発生したバグをまとめた Defects4J データセット [16] を用て乱択を行う箇所が多く，アルゴリズムの改良の余地が多い，jGenProg とのバグ修正能力，およびその修正時間の分にある．アルゴリズムを改良することで，より多くのバ比較を行う．

グの修正，あるいはより短時間でのバグ修正が期待される．
現在，著者らは遺伝的アルゴリズムを用いた自動プログ
ラム修正のための研究用プラットフォーム kGenProg *1 を

2. 自動プログラム修正技術
2.1 概要

開発している．kGenProg では高い処理効率，および高い可搬性の両立を目指している．

自動プログラム修正技術は，バグを含むプログラムと失敗テストを含むテストスイートを入力として受け取り，すkGenProg は，自動プログラム修正の研究を行う研究者

べてのテストが成功するプログラムを出力する技術であと自動プログラム修正技術を利用したい開発者を利用者とる．この技術においてキーとなる要素は，自動バグ限局*4 ，して想定している．1 つ目の特徴である高処理効率性は，および自動プログラム改変の 2 つである．自動バグ限局で研究者と開発者のどちらにも重要な要素である．たとえはソースコードのどの箇所にバグが含まれていそうか，とば，Java を対象とした自動プログラム修正ツールでは，以いうバグ箇所の推定を自動で行う．その情報に基づき，実下の処理内容が必須である．

際にプログラムの特定の箇所に対して改変を行う．一般的• 対象プログラムのソースコードの変更に，自動プログラム修正ツールは，その内部に自動バグ限• 変更したソースコードのコンパイル

局の機能も内包する．以降，本節では自動バグ限局技術，• バイトコードへのカバレッジ計測命令の埋め込みおよび自動プログラム修正技術について，既存技術を紹介• テストの実行

する．

上記すべての処理は通常はファイルシステムへの I/O をともなう処理である．遺伝的アルゴリズムを利用した自動

2.2 自動バグ限局プログラム修正では，これらの処理を非常に多くの回数行

自動バグ限局とは，バグのあるプログラムと失敗テスト

う．その場合に，ファイル I/O が処理速度のボトルネック

を含むテストスイートを入力として受け取り，バグ箇所のとなりやすい．kGenProg では高処理効率性のため，上記推測を行う技術である．自動プログラム修正技術を適用すのすべての処理を JavaVM のヒープ内で行う．

るための前処理としては，実行経路情報に基づくバグ限

2 つ目の特徴である高可搬性*2 も，研究者と開発者のど局*5 が利用される．この手法は，以下の 2 種類の情報を用ちらにも重要である．公開されている既存の自動プログラ

いてバグの原因箇所となっているプログラム文を推測する．

ム修正ツールの中には，特定の環境下でのみ利用可能なも• 各テストの成否のもある．1 つ目の特徴で述べたように，自動プログラム• 各テストで実行されたプログラム文のリスト

修正ツールは内部に様々な処理を持つため，多数のライブ

実行経路情報に基づくバグ限局手法はこれまでに数多く

ラリに依存している．そのため，対象プロジェクトの動作

提案されている．その一例を表 1 に示す．直感的には，失環境が，自動プログラム修正ツールを適用可能な環境と合敗テストが通過するプログラム文ほど疑惑値（バグを含む

致しない場合は，その利用が難しい．また，既存ツールは，

可能性）が高くなり，成功テストが通過するプログラム文*1

https://github.com/kusumotolab/kGenProg*2 本論文では可搬性という言葉を ISO/IEC 25010:2013 における製品品質モデルの特性の 1 つ，Portability（移植性とも呼ばれる）の意味で用いる．この Portability は 3 つのサブ特性，
Adaptability（適応性），Installability（設置性），Replaceability（置換性）から構成される．

c 2020 Information Processing Society of Japan

ほど疑惑値が低くなる．
*3

*4
*5

なお，本論文は著者らの国際会議 APSEC2018 でのポスター発
表 [12] の内容を再整理しフルペーパーとしてまとめたものである．
Fault localization
Spectrum-based fault localization

831

情報処理学会論文誌

Vol.61 No.4 830–841 (Apr. 2020)

図 1

遺伝的アルゴリズムを用いた自動プログラム修正

Fig. 1 Overview of automated program repair based on genetic algorithm.
表 1

法 [17], [33], [34] と，プログラムの意味論*7 に基づく手自動バグ限局手法の一例

Table 1 Examples of automated fault localization.

法 [20], [28], [37] に大別される．前者は元のプログラムを手法名

疑惑値 susp の計算式

ある戦略に基づいて改変し，その後にテストの成否を確認する手法である．一方，後者はプログラムとテストスイー

Ample





aef
aep

susp = −
aef + anf
aep + anp Jaccardaef
susp =
aef + anf + aep

トからプログラムが満たすべき条件を特定し，その条件を満たすようにプログラムを合成する手法である．生成と検証に基づく手法を利用した場合には，すべてのテストが成功するプログラムが生成されるまでに大量のプログラムがaef

Ochiaisusp = (aef + anf ) × (aef + aep )Zoltaraef
susp =aaef + anf + aep + 10000 × anf × aep

生成されることもあるが，意味論に基づく手法を利用した
場合には，プログラムが合成できた場合にはそのプログラ
ムはすべてのテストが成功する．

ef

aep : その行を実行した成功テストの数
aef : その行を実行した失敗テストの数

生成と検証に基づく手法は，どのようにプログラムを生成するかによって，遺伝的アルゴリズム*8 を利用した手法と [27], [33]，変更パターンを利用した手法 [18], [21] に分

anp : その行を実行しなかった成功テストの数けることができる．遺伝的アルゴリズムを用いた手法は，

anf : その行を実行しなかった失敗テストの数

単一のプログラム文のような比較的小さな単位の挿入や削（aep + aef + anp + anf = テスト総数）除を繰り返し行うことでプログラムを徐々にバグのない状
態に近づけていく手法である．変更パターンを利用した手

Abreu らは，7 つの実行経路情報に基づくバグ限局手法
を C 言語のデータセット [14] を利用して比較し，Ochiai [6]法は，何らかの方法で収集した過去の変更と同じ変更をバ
グのあるプログラムに加える手法である．

が優れた手法であると結論づけている [1]．

Java に対するバグ限局手法の比較調査も実施されてい2.4 遺伝的アルゴリズムを利用した自動プログラム修正る [29]．実験結果として，実行経路情報に基づく限局手法

著者らが開発している kGenProg は，遺伝的アルゴリズの中では，DStar [36] が最も精度が高いものの，Ochiai とムを利用した手法であるため，本節では以降，この手法にBarinel [2] との統計的な差はなかったと報告されている．

ついて説明を行う．図 1 にこの手法の概要を表す．図に示Yang らは，自動プログラム修正では，自動バグ限局ですように，遺伝的アルゴリズムを用いた手法は以下の 3 つ得られた疑惑値に基づくルーレット選択を用いて修正箇所の処理を含む．

を決定する方が，疑惑値のランキングに基づいて修正箇所• 変異個体の生成を決定するよりも，多くのバグを修正できたと報告してい• 変異個体の評価

る [38]．

• 変異個体の選択
ここでの変異個体とは，何かしらの変更が加えられたプロ

2.3 自動プログラム修正
自動プログラム修正技術は，生成と検証*6 に基づく手*6

Generate and validatec 2020 Information Processing Society of Japan

グラムのことを意味する．変異個体の生成は，既存の変異*7*8Correct by construction
Genetic algorithm

832情報処理学会論文誌

Vol.61 No.4 830–841 (Apr. 2020)

個体から新しい変異個体を生成する処理である．変異個体は我々の知る限り存在しない．現在のソフトウェア開発での生成は，変異と交叉の 2 種類の方法がある．変異はある

は，CI/CD 等の「自動化」という考えに基づいた開発支

単一の変異個体から新しい変異個体を生成することを表援が広く採用されている．自動プログラム修正は，この自し，交叉は 2 つ以上の変異個体から新しい変異個体を生成

動開発支援と親和性の高い一種のデバッグ支援技術であすることを表す．変異については，用いられる操作は以下ると見なせる．自動プログラム修正技術の実用化，およびの 3 つである．

CI/CD 環境での利用を実現するためには，高い可搬性を挿入：バグの原因と思われるプログラム文の前もしくは後に別のプログラム文を挿入する．
削除：バグの原因と思われるプログラム文を削除する．
置換：挿入と削除の両方を行う．

持つツールの提供が重要な課題であると考えられる．

3. kGenProg
3.1 概要挿入操作，および置換操作では，利用するプログラム文を

kGenProg は Java 言語を対象とした，遺伝的アルゴリ

取得する必要がある．遺伝的アルゴリズムを利用した自動ズムに基づく自動プログラム修正プラットフォームであプログラム修正の初期のツールである GenProg では，対象

る．kGenProg は MIT ライセンスに基づく OSS として開プログラム内からランダムに挿入に利用するプログラム文

発されており，自由に利用，改変が可能である．以降では，を取得している [22]．また，Monperrus らによる GenProg

kGenProg の持つ 2 つの特徴，高処理効率性と高可搬性にの再実装である jGenProg では，利用するプログラム文はついてそれぞれ説明する．

ランダムに取得するという点においては GenProg と同じであるが，利用候補を同一ファイル内，同一パッケージ内，

3.2 高処理効率性

同一プロジェクト内から選択できるようにオプションが用

遺伝的アルゴリズムに基づく自動プログラム修正は，一意されている [27]．バグの原因箇所と類似しているコード

種の最適化問題であるととらえることもできる．通過する

片から優先的にプログラム文を利用するという手法も提案

テスト数の最大化が目的関数であり，生成されるソース

されている [15], [39]．プログラム文ではなく，より粒度のコード群が解の集合，ソースコードの変異方法が探索空間

細かいプログラム式の単位で挿入操作や削除操作を行う手に該当する．ソースコードの変異方法は，どの場所（限局

法 [34] や，ブロック単位での挿入を行う手法 [17] も提案さ

文全体や限局文内の演算子等）に，どの操作を（挿入や削

れている．

除等）
，どのように（i++ 文の挿入や，単純な削除等）適用するかの組合せで決定される．よって探索空間は膨大であ

2.5 自動プログラム修正に対する改善の取り組み

る．加え，上記変異処理によって生成されたすべての解に

数多くの研究者が自動プログラム修正の改善に取り組んで

対して，目的関数を適用する必要がある．いい換えれば，いる [10]．この取り組みの多くは修正能力の向上が目的であすべての生成ソースコードに対するコンパイルとテスト実り，その目的の実現に対しては様々な手法が存在する．たと行が避けられない．効率的な自動プログラム修正の実現のえば，変異個体に対する生成方法の改善 [19], [21], [23], [25]

ためには，解空間の効率的な探索が必要であり，そのためや評価方法の改善 [7], [8]，さらには，特定種類のバグ修正にはコンパイルとテスト実行という多大な時間を要する処に特化した手法 [9], [32] や，プログラムだけでなくテスト理の高速化が必須である．

ケースも同時に進化させる手法 [35] 等も提案されている．

効率的な空間探索を実現するために，kGenProg では処

一方で，高処理効率化による修正能力の改善を狙った研理のボトルネックとなりやすいファイル I/O をともなう処究は少ない．Qi らの提案する手法では，テストの優先順

理を，JavaVM のヒープ内で行うという戦略をとっている．

位付けによる個体評価の速度改善方法が取り込まれていより具体的には，変異とコンパイルの対象となる抽象構文

る [30]．失敗しそうなテストを優先的に実行することで，木（AST），およびテスト実行の対象となるバイナリデー

生成した個体が修正に失敗しているかを迅速に判断可能とタを Java のオブジェクトとして表現し，それらをメモリなる．また，コンパイル時間を削減する工夫を取り入れた上の論理的なファイルシステム（FS）上に設置する．この手法も存在する [5]．この手法では，複数の変異個体を生メモリ FS の利用により，最初期に行われるソースコード

成するのではなく，単一の変異個体に多数の変異を埋め込

ファイルの読み込み，および終了時に行われる結果の書き

み，実行時のパラメタによって様々な変異の挙動を切り分出しを除き，全処理の Java ヒープ上での実行を実現する．

ける．これは複数のプログラムに対するコンパイル時間の

kGenProg の処理の流れを図 2 に示す．まず (1) kGen-

大幅な削減につながる．生成と検証に基づくプログラム修Prog は標準ファイルシステムからソースコードを読み込

正は一種の探索問題であり，処理効率の向上は探索効率とみ，そのデータを Java のオブジェクトとして保持する．次修正能力の向上につながる重要な課題である．
加え，プログラム修正ツールの可搬性向上を狙った研究

c 2020 Information Processing Society of Japan

に，(2) このソースコードオブジェクトに対し，AST を構
築し変異個体を生成する．(3) javac を用いてビルドを行

833

情報処理学会論文誌

Vol.61 No.4 830–841 (Apr. 2020)

図 2 kGenProg の処理フロー

Fig. 2 Processing flow of kGenProg.

う．この時，javac の出力となるバイナリデータは，標準
図 3 kGenProg の利用の流れ

FS ではなくメモリ上の論理 FS に書き出すように設定がFig. 3 Usage flow of kGenProg.

加えられている．(4) javac がビルドを行い，(5) バイナリ
データをメモリ FS に書き出す．kGenProg が (6) メモリ

FS からバイナリを取得し，(7) 各テストでどの文が実行さキャッシュを用いることにより，Y’ に対する再コンパイ

れたかを計測するための命令を当該バイナリに埋め込む．

ルを回避している．

(8)，(9) JUnit を用いてテストを実行し，各種テスト実行の結果を取得する．最後に (10) 自動バグ限局を行い，(11)3.3 高可搬性

個体の選別を行う．(2) から (11) までの手順を繰り返し，

自動プログラム修正技術の普及や発展，さらに提案ツー

遺伝的アルゴリズムに基づく自動プログラム修正を行う．

ルの実用性の確保のためには，研究者のみならず一般的な

さらに，高処理効率を実現するために再計算回避のため

Java 開発者が手軽に利用できることが重要である．そのたの工夫も取り入れている．生成と検証に基づくプログラム

めに，kGenProg では可搬性を確保するためのいくつかの修正手法では，偶然同じ個体（つまり同じ AST 構造を持つ

工夫が施されている．

ソースコード）を生成する可能性がある．このような個体

第 1 に，自動プログラム修正における各種パラメタを設定の生成は探索済み解空間の再探索につながるため，枝刈り

ファイルとして切り出すことができる．自動プログラム修による再探索回避が必要である．kGenProg では AST の正では，プロダクトソースコードへのパス（src/main/java

ハッシュ値を記憶しておくことで，同一個体の再探索を回等）や，テストソースコードへのパス（src/test/java 等）

避している．また，ある個体の中で，一部のソースコード

といった対象プロジェクト固有の構成情報に加え，遺伝的が以前に生成/ビルド済みであったというケースも発生すアルゴリズムの生成個体数，最大世代数，乱数の値といっる．たとえば，2 つのソースコード X と Y を持つプログラた様々なパラメタを調整する必要がある．kGenProg では，ムを考える．ここで，ある変異個体の 1 つが，X’ は新規に

これらの情報を設定ファイルに記述し，対象プロジェクト

生まれたユニークなコードではあるが，Y’ は以前にコンパのルートパス直下に設置するだけで利用することが可能でイル済みであったとする．この場合，X’ の変異によりプある．

ログラムの振舞いが変わる可能性があるため，個体の評価

kGenProg のインストールと利用の流れを図 3 (a) に示（コンパイルとテスト実行）が必要である．図 2 で示した

す．図に示すとおり，(1) カレントパスの移動，(2) 設定

メモリ FS は，コンパイル結果のバイナリを蓄えるキャッファイルの作成，(3) jar バイナリのダウンロード，(4) 実

シュとして働くよう設計されている．kGenProg ではこの行の 4 手順のみで利用が可能である．このような対象プ

c 2020 Information Processing Society of Japan

834

情報処理学会論文誌

Vol.61 No.4 830–841 (Apr. 2020)

表 2

ロジェクト直下に設定ファイルを設置するという起動構

kGenProg で差し替え可能な戦略一覧

Table 2 Replaceable strategies in kGenProg.

成は，ビルドツール（Gradle や Maven 等）や，CI ツール（TravisCI や CircleCI 等）でも広く用いられている．この

戦略方法を採用することで，kGenProg を様々なビルドツール

自動バグ限局手法

や CI ツールに組み合わせることが容易となる．たとえば，

交叉の方法

一点交叉/多点交叉/一様交叉 [19]kGenProg と CI 環境を組み合わせた “Nightly repair” のよ変異個体の生成方法

挿入/削除/置換/交叉

変異個体の評価尺度

テスト通過率/通過率 + コードの良さ*1

変異個体の選択方法

上位のみ*2 /上位 + 少数の下位個体*3

うな利用方法について考える．まず，開発者は kGenProgの設定ファイル（kGenProg.conf）を自身のプロジェクトのリポジトリに登録する．さらに，CI 上でのテスト失敗時に図 3 (a) の (3) ダウンロードと (4) 実行のコマンドを起動

戦略の具体例

Ample/Jaccard/Ochiai/Zoltar*1

行数等を評価に加えることで複雑なコードの生成を回避．

*2

エリート主義 [3]．良い個体のみを次世代に残す．

*3遺伝子の多様性を確保する工夫．局所解の回避につながる．

するように，CI 環境の設定を加える．これにより，CI 環
境上で master ブランチのテストが失敗した際に，同 CI 環
境のうえで自動的にバグの修正を試みるといった利用が可

多数存在する．ほかにも，自動バグ限局手法は表 1 にも示能である．

したとおり複数存在しており，プログラム修正の効率に強

また可搬性確保のための工夫として，設定ファイルのく寄与することが知られている [38]．kGenProg では，こCUI からの上書きも可能である．パラメタ上書き時の実行

れら自動プログラム修正における個々のフェーズ（バグ限方法を図 3 (b) に示す．先述のとおり，自動プログラム修局やプログラム改変等）の具体的な処理を一種の戦略と見正は最適化問題の 1 つであり，対象プロジェクトに応じたなし，それらの容易な差し替えも可能である．表 2 に現在

適切なパラメタの調整作業が欠かせない．このパラメタ調

kGenProg で差し替え可能な戦略一覧を示す．自動バグ限

整のために，パス情報等のプロジェクト固有かつ変更され局手法や，変異個体の生成方法，適用する交叉の戦略，変にくい情報を設定ファイルに記述し，最大世代数等のプロ異個体の評価尺度（適応度の計算方法）等が自由に差し替

グラム修正の効率に関わる変更されやすい情報を CUI 上

え可能である．

から指定することができる．なお，各パラメタにはデフォルト値が設定されており，明示的にパラメタを指定しなくても利用は可能である．

4. 評価
4.1 実験概要

さらに，継続的デリバリ [13] のプラクティスを取り入れ

kGenProg の評価実験として，jGenProg [27] との修正時

ることにより高い可搬性と利用性を確保している．図 3 (a)間の比較を行う．本実験の目的は，kGenProg の特徴の 1の手順 (3) でのダウンロード対象となる jar バイナリは，全つである高処理効率性が，実際のプログラム修正に対して依存ライブラリが梱包されており，その実行はきわめて容どの程度効果があるかを確かめる点にある．比較対象とし易である．加え，このバイナリの生成と配布に対しては，

た jGenProg は自動プログラム修正分野のブレイクスルー

CI の援用によるリリース管理を行っている*9 ．安定版は著となった GenProg の Java 実装版であり，kGenProg と同者ら開発チームでの合意でリリースしており，2〜3 週間ご様，Java 言語が対象，かつ遺伝的アルゴリズムに基づいたとの更新を目標としている．またナイトリービルド版に関自動プログラム修正ツールである．

しても，毎晩 GitHub リポジトリの master ブランチを対象に生成されている．これらの工夫により，kGenProg の利用者は任意のタイミングで最新版を手軽に利用することが可能である．

4.2 実験題材
実験題材として Defects4J のデータセット [16] を用いる．Defects4J データセットには，複数の OSS プロジェク

可搬性向上の 1 つの工夫として，kGenProg では様々なトで実際に発生したバグの情報が含まれている．バグ情報

戦略の差し替えもサポートしている．生成と検証に基づくには，いつ，どのソースコードのどの箇所にバグが発生し自動プログラム修正は，「テストが成功するまでプログラ

たか，さらにはそのバグが，どのように，誰によって修正

ムの改変を続ける」手法であり，その手法の細部に様々なされたかといった様々な情報が含まれる．加え，そのバグ

選択肢が存在する．たとえば，プログラムの改変手法としによってどのテストが失敗したかという情報も含まれておては，バグ限局されたプログラム文の削除のような単純なり，自動プログラム修正に対する入力（バグを含むソース

方法 [31] だけでなく，遺伝的アルゴリズムに基づいた交叉

コードとテスト）が用意されている．よって，自動プログを適用する方法 [19]，過去の開発者による変更を参考にす

ラム修正分野で広く用いられており，ベンチマークとしてる方法 [18], [21]，条件分岐文の条件を変更する方法 [24] 等も活用されている [26]．
本 実 験 で は Defects4J に 含 ま れ る Apache Commons*9

https://github.com/kusumotolab/kGenProg/releasesc 2020 Information Processing Society of JapanMath プロジェクト（以降，Math）を実験題材として用い

835

情報処理学会論文誌

Vol.61 No.4 830–841 (Apr. 2020)

表 3 実験設定

Table 3 Experimental settings.
項目

設定値

実験題材

Apache Commons Math

修正対象バグ数

106 個

乱数シード

0〜9（= 10 試行）

制限時間

1 試行あたり 30 分

バグ限局手法

Zoltar

変異生成の操作

挿入/削除/置換/交叉

再利用操作のスコープ

同一パッケージのみ

最大世代数

無制限

指定テスト

バグにより失敗するテストのみ

終了条件

正解個体の発見か時間切れ

実験環境

AWS EC2（2CPUs, 4 GB mem）

図 4

修正成功バグの割合

Fig. 4 Ratio of fixed bugs.

が回帰テストの有無である．kGenProg は回帰テストなし，

jGenProg は回帰テストありである．この違いはツールの戦略の違いに起因する．一般的に自動プログラム修正でる．Math には 106 個のバグ情報が含まれており，いずれは，修正の目標値としてどのテストを通過すればよいかをも実際の Math 開発の中で発生したバグである．Math を指定する．回帰テストありでは，この指定テストを通過す

題材として選定した理由は，jGenProg の提案論文 [27] やる個体の発見後に全テストを実施する．もし回帰テストに

jGenProg のベンチマーク論文 [26] において，Math に含ま失敗した場合は，再度修正を繰り返す．よって，ツールのれるバグが最も多く修正されていたためである．

最終的な出力個体は全テストに通過することが保証されており，指定テストのみを通過する個体のような誤検出の問

4.3 実験設定

題を回避できる．一方，回帰テストなしでは指定テストの実験設定の一覧を表 3 に示す．変異個体の生成や選択

みを修正の目標値とするため，ツールの出力結果が全テスにおいて，kGenProg，jGenProg ともに乱択に基づいた操

トに通過するとは限らない．回帰テストありと比較して，作が含まれる．よって単一のバグ修正試行ごとに，0 から誤検出の可能性は上がるものの，解となる個体は比較的短

9 までの 10 個の乱数シードを設定し修正を試みる．単一

い時間で多数発見できる．この発見した解は，どのような試行あたりの制限時間は 30 分とし，それを超えた場合は修正を加えれば（最低限）指定テストを通過できるのか，と修正失敗と見なす．この時間には，対象ソースコードの改いうデバッグのヒントであると見なせる．よって回帰テス

変，ビルドとテスト実行，バグ限局，個体の選択のプログ

トなしは，完全な解の発見よりも，開発者に対するデバッ

ラム修正の全フェーズの時間が含まれる．バグ限局手法はグヒントの提示を優先するという戦略となる．これら回帰

jGenProg の標準である Zoltar を用いる．変異個体の生成

テスト有無の違いを回避するために，jGenProg 側の実装方法としては，kGenProg，jGenProg ともに，乱択によるを改変し，回帰テストを適用しない設定で実験を行った．

プログラム文の挿入，バグ限局箇所の削除，それら 2 つをなお，実験環境としては Amazon Web Services が提供す同時に行う置換，および 2 つの個体からの交叉，の 4 つる EC2 サービスを用いており，2 個の論理 CPU と NVMeの操作をランダムに適用する．この挿入と置換操作においストレージを持つ c5d.large インスタンスを用いた．

ては，どの範囲からプログラム文を再利用するかというス
コープの設定が可能である．kGenProg におけるスコープ

4.4 実験結果

としては，改変対象のファイルを起点として，そのファイ

4.4.1 修正成功バグ数の比較

ルのみ，そのファイルの属するパッケージ，そのファイル

全バグ 106 個に対する修正成功バグ数の比較を図 4 にの属するプロジェクトの 3 つを指定できる．スコープが広示す．ここでは 10 個の乱数シードに対する 10 回の試行のいほど探索空間が広く，つまり解を発見できる可能性は上

うち，一度でも修正に成功したバグを修正成功と定義してがるが多くの時間を要するようになり，スコープが狭いといる．図より，修正成功バグの数は kGenProg では 31 個

その逆となる．実験では kGenProg，jGenProg ともに空間（約 29%），jGenProg では 33 個（約 31%）であり，わずかの広さが中程度である同一パッケージをスコープとする．

に jGenProg の方が多い．

世代数の上限は無限とし，時間切れ，あるいは正解（つまさらに kGenProg と jGenProg の修正成功バグの集合のりバグが修正された）個体を発見するまで修正を繰り返す．

関係を図 6 に示す．両方のツール共通で修正できたバグ

kGenProg と jGenProg はその本質的なアイデアは共通

は 25 個であり，kGenProg のみで修正できたバグは 6 個，であるものの，その実装や設計の細部には様々な違いが存

jGenProg では 8 個であった．両ツールは自動プログラム

在する．そのうち，最も実験に影響すると考えられる要因

修正の中でも遺伝的アルゴリズムを用いるという点で共通

c 2020 Information Processing Society of Japan

836

情報処理学会論文誌

図 5

Vol.61 No.4 830–841 (Apr. 2020)

修正成功試行数の比較

Fig. 5 Comparison of successful trials.
図 7

修正時間の比較

Fig. 7 Comparison of reparing time.

がタイムアウト（30 分）であり，その値が多数を占めることにより修正時間の比較が困難になるためである．この抜粋により，本図は「バグ修正に成功した場合にどの程度の時間で完了できるか」を表していると解釈できる．
図 6

修正成功バグ集合のベン図

Fig. 6 Venn diagram representing ratio of fixed bugs.

図 7 より，kGenProg が短い時間で修正に成功していることが確認できる．中央値は kGenProg では 130 秒（2 分強），jGenProg で 776 秒（12 分強）と 5 倍以上の差があっしており，修正可能なバグの傾向は強く似通っている．提た．修正可能なバグの種類そのものに差は生まれなかった

案ツールの性能向上効果により，効率的な空間探索が可能

が，処理能力自体の向上は確認できたといえる．

となり，結果として修正可能なバグ数が増えることを期待していたが，その傾向は確認できなかった．

さらに詳細な調査として，上記箱ひげ図の元データとなった，全バグそれぞれに対する修正時間の比較を図 8 に

上記の修正成功バグ数に対する詳細な分析として，全示す．縦軸は箱ひげ図と同様，修正成功時の平均修正時間

106 個のバグが，それぞれ何回の試行（すなわち何個の乱を，横軸は Defects4J で規定された Math プロジェクトの数）で修正に成功していたかを確認する．その結果を図 5

バグ ID を示す．バグ ID は 1 を開始として連番で割り振らに示す．縦軸がバグ数，横軸が全 10 回の修正試行のうちれており，106 まで存在する．図 7 の箱ひげ図と同様に，2何回成功したかを表す．グラフの色つき部分は図 4 の色つつのツールで修正できたバグ ID のみを抜粋している．縦き部分に対応しており，一度でも修正に成功したバグの集

軸上限の破線は各試行の制限時間 30 分を表しており，高合を意味する．

さがこれに一致するケースは制限時間切れ，つまり修正失図より，一番左の修正成功試行数 0（つまり失敗）のバ敗であることを意味する．さらに，上向きの緑矢印は 2 倍グが大半を占めており，次に割合が多いのが成功試行数 10以上の速度向上を，下向きの赤矢印は 2 倍以上の速度低下回，つまり全試行で修正に成功したバグであった．これはを意味する．

修正が難しいバグに対しては，複数の乱数で試行を行って全体として，kGenProg が jGenProg より修正時間が倍も修正できる見込みは低く，逆に修正が容易なバグは，ど以上短いケース（たとえば，左からバグ ID が 2，18，20，の乱数を用いても修正に成功する傾向があると考えられ

22 等）が多数確認できる一方で，jGenProg の方が短いケーる．なお，これらの傾向は kGenProg と jGenProg どちらス（左から 5，7，8，12 等）も存在する．その割合としてはも同様であり，どちらのツールも修正能力に大きな差がな

kGenProg が短いケースが 25 個，jGenProg が短いケース

いと見なすことができる．

が 14 個であった．また，修正時間に 2 倍以上の差があっ4.4.2 バグ修正時間の比較たケースに着目すると，kGenProg が短いケースが 22 個，

次に処理効率を比較するために，バグ修正時間の箱ひげ

jGenProg が短いケースが 6 個であった．生成と検証に基

図を図 7 に示す．縦軸が全試行に対するバグ修正時間を表づくプログラム修正手法では，その実験結果が乱択に強くしており，低いほど短い時間で修正に成功したことを意味影響する．しかしながら，10 個の乱数シード（すなわち 10

する．図では，各ツールにおける修正に成功した試行のみ

回の実験試行）で，大幅な速度改善ケースの増加が見られを抜粋している．この抜粋の理由は，実験試行のほとんどたことから，kGenProg の高い処理能力が確認できたといc 2020 Information Processing Society of Japan


837

情報処理学会論文誌

Vol.61 No.4 830–841 (Apr. 2020)

図 8 個々のバグに対する修正時間の比較

Fig. 8 Comparison of reparing time for individual bug.

JDK8 のみである．よって kGenProg は Windows 環境，あるいは JDK9 や JDK11 を想定した Java プログラムに対しても適用可能であり，高い適応性があると考えられる．
次に，Installability（設置性）について考察する．3.3 節で述べたとおり，kGenProg は CI 援用によるリリース管理を適用しており，インストールに必要な作業は GitHub に公開された jar ファイルのダウンロードのみである．一方，

jGenProg はリリース管理が行われていないため，インス
トールに当たっては jGenProg プロジェクトの Git クロー
図 9

バグ修正の一例（Math バグ ID：80）

Fig. 9 An example of bug fix (Math BugID: 80).

ン，および Maven によるビルドを自前で行う必要がある．
さらには，修正対象プロジェクトの初期ビルドが jGenProgの処理の 1 つとして取り込まれておらず，このビルド作業（.class ファイルの生成）も jGenProg 利用の前処理としえる．
具体的な修正例として，バグ ID80 に対する修正内容て，利用者自身が行う必要がある．

Replaceability（置換性）は「同目的の別ソフトウェアとを図 9 に示す．図の修正方法は一行の削除のみであり，置き換えることができる度合い」と定義されているが，こどちらのツールでも同様の修正が行われていた．このよの観点ではいずれのツールでも優位性はないと考えられる．

うな修正が容易なバグに対しても kGenProg はおよそ半

なお，本節の記述は著者らによる考察であり，開発者へ

分以下の時間で修正を完了しており（kGenProg：109 秒，のインタビューや実験を通じた客観的な評価は今後の重要

jGenProg：480 秒），処理効率の高さが確認できる．

な課題である．

5. 可搬性に対する考察

6. 妥当性の脅威

kGenProg の特性の 1 つである可搬性について考察を行

4 章で行った実験内容について，いくつかの妥当性の脅う．ここでは ISO/IEC 25010 における Portability（可搬威が存在する．まず内的妥当性として，比較対象とした性）の 3 つのサブ特性，Adaptability（適応性），Installability

kGenProg と jGenProg の比較の条件の公平性が考えられ（設置性），Replaceability（置換性）それぞれの視点から考る．4.3 節でも述べたとおり，実験では 2 つのツールの本質察する．考察における比較対象としては，前節の評価実験的な振舞いの差が極力少なくなるよう，対象のソースコーと同様に jGenProg を題材とする．

ドを書き換えるといった工夫を施している．しかし，すべ

まず，Adaptability（適応性）について考える．kGenProg
は Java で実装されており，特定のプラットフォームに依ての振舞いを同等にはできているとは限らず，その差が実験結果に影響している可能性がある．

存せず動作可能である．一方 jGenProg は Java で実装され外的妥当性への脅威としては，Math 以外のプロジェクトているものの，Windows 環境での動作をサポートしていなでの実験や jGenProg 以外のツールとの比較が必須である．

い．ソースコードの差分計算やバグ限局手法の呼び出しがDefects4J には Math プロジェクト以外にも JFreeChart，Java のネイティブな命令のみで構成されておらず，diff やClosure Compiler 等の 6 種類のプロジェクトのバグ情報がbash 等の Linux コマンドの利用を前提としていることが原含まれている．これらを題材とすることで，実験結果の外因である．JDK のバージョンという観点では，kGenProg

的妥当性を確保できる．

は JDK8 から JDK11 をサポートしているが，jGenProg はc 2020 Information Processing Society of Japan

838

情報処理学会論文誌

Vol.61 No.4 830–841 (Apr. 2020)

7. おわりに
本論文では，高処理効率性と高可搬性を備えた自動プ[7]ログラム修正ツール kGenProg を提案した．高処理効率性については，既存ツールである jGenProg との比較を行った．kGenProg と jGenProg はともに遺伝的アルゴリズムを用いた自動プログラム修正ツールであり，理論的には[8]

修正可能なバグに違いはない．そのため，比較対象として

jGenProg を用いることより，kGenProg の高処理効率性を評価できる．OSS で発生した 106 のバグを収集し，30 分[9]の制限時間で，両ツールを用いて修正を試みたところ，修正可能なバグの傾向に大きな差はなかったものの，そのバ
グ修正に要した時間に対しては大幅な削減が確認できた．

[10]

kGenProg はすでに GitHub で公開されており，誰でも無料で利用することができる．

[11]

今後の課題として，より詳細な実験結果の分析が必要である．本論文での実験では，修正可能バグの種類，および[12]

その修正時間という 2 つの観点で比較を行い，修正時間の向上という結果を得た．一方で，kGenProg のどの要因が性能向上に寄与したかというより詳細な分析は実施できておらず，重要な課題となっている．さらに近年のプログラ[13]

ム修正研究では，開発者による修正内容との比較が広く行われるようになっている．自動プログラム修正技術では，テストには通過するものの真にバグを修正できていない，[14]というオーバフィットの問題が避けられない．この修正内
容の質という観点からの kGenProg の評価は 1 つの重要な課題である．

[15]

謝辞 本研究の一部は，日本学術振興会科学研究費補助
金基盤研究（B）（課題番号：18H03222）の助成を得て行
われた．

[16]

参考文献
[1]

[2]

[3]

[4]

[5]

[6]

Abreu, R., Zoeteweij, P., Golsteijn, R. and van Gemund,
A.J.C.: A Practical Evaluation of Spectrum-based Fault
Localization, Journal of Systems and Software, Vol.82,
No.11, pp.1780–1792 (2009).
Abreu, R., Zoeteweij, P. and van Gemund, A.J.C.:
Spectrum-Based Multiple Fault Localization, Proc. International Conference on Automated Software Engineering, pp.88–99 (2009).
Ahn, C.W. and Ramakrishna, R.S.: Elitism-based compact genetic algorithms, IEEE Trans. Evolutionary
Computation, Vol.7, No.4, pp.367–385 (2003).
Britton, T., Jeng, L., Carver, G., Cheak, P. andKatzenellenbogen, T.: Reversible Debugging Software –Quantify the time and cost saved using reversible debuggers (2013).
Chen, L., Pei, Y. and Furia, C.A.: Contract-based Program Repair Without the Contracts, Proc. International Conference on Automated Software Engineering,
pp.637–647 (2017).
da Silva, Meyer, A., Augusto, Franco Garcia, A., Pereira,de Souza, A. and de Souza, Jr., C.L.: Comparison of sim-c 2020 Information Processing Society of Japan


[17]

[18]

[19]

[20]

[21]

ilarity coeﬃcients used for cluster analysis with dominantmarkers in maize (Zea mays L), Genetics and Molecular
Biology, Vol.27, No.1, pp.83–91 (2004).
de Souza, E.F., Goues, C.L. and Camilo-Junior, C.G.:
A Novel Fitness Function for Automated Program Repair Based on Source Code Checkpoints, Proc. Genetic
and Evolutionary Computation Conference, pp.1443–
1450 (2018).
Fast, E., Le Goues, C., Forrest, S. and Weimer, W.: Designing Better Fitness Functions for Automated Program
Repair, Proc. Annual Conference on Genetic and Evolutionary Computation, pp.965–972 (2010).
Gao, Q., Xiong, Y., Mi, Y., Zhang, L., Yang, W., Zhou,
Z., Xie, B. and Mei, H.: Safe Memory-Leak Fixing for C
Programs, Proc. International Conference on Software
Engineering, pp.459–470 (2015).
Gazzola, L., Micucci, D. and Mariani, L.: Automatic
Software Repair: A Survey, IEEE Trans. Software Engineering, p.1 (2018).
Hailpern, B. and Santhanam, P.: Software debugging,testing, and veriﬁcation, IBM Systems Journal, Vol.41,
No.1, pp.4–12 (2002).
Higo, Y., Matsumoto, S., Arima, R., Tanikado, A.,
Naitou, K., Matsumoto, J., Tomida, Y. and Kusumoto,S.: kGenProg: A High-performance, High-extensibilityand High-portability APR System, Proc. Asia-Pacific
Software Engineering Conference, pp.697–698 (2018).
Humble, J. and Farley, D.: Continuous Delivery: Reliable Software Releases Through Build, Test, andDeployment Automation, Addison-Wesley Professional(2010).
Hutchins, M., Foster, H., Goradia, T. and Ostrand,
T.: Experiments of the Eﬀectiveness of Dataﬂow- andControlﬂow-based Test Adequacy Criteria, Proc. International Conference on Software Engineering, pp.191–
200 (1994).
Jiang, J., Xiong, Y., Zhang, H., Gao, Q. and Chen, X.:
Shaping Program Repair Space with Existing Patches
and Similar Code, Proc. International Symposium on
Software Testing and Analysis, pp.298–309 (2018).
Just, R., Jalali, D. and Ernst, M.D.: Defects4J: A
Database of Existing Faults to Enable Controlled Testing Studies for Java Programs, Proc. International Symposium on Software Testing and Analysis, pp.437–440(2014).
Ke, Y., Stolee, K.T., Goues, C.L. and Brun, Y.: Repairing Programs with Semantic Code Search, Proc. International Conference on Automated Software Engineering, pp.295–306 (2015).
Kim, D., Nam, J., Song, J. and Kim, S.: Automatic
Patch Generation Learned from Human-written Patches,
Proc. International Conference on Software Engineering, pp.802–811 (2013).
Kou, R., Higo, Y. and Kusumoto, S.: A Capable
Crossover Technique on Automatic Program Repair,
Proc. International Workshop on Empirical Software
Engineering in Practice, pp.45–50 (2016).
Le, X.B.D., Chu, D.H., Lo, D., Le Goues, C. and Visser,
W.: S3: Syntax- and Semantic-guided Repair Synthesis via Programming by Examples, Proc. Joint Meeting on Foundations of Software Engineering, pp.593–
604 (2017).
Le, X.B.D., Lo, D. and Le Goues, C.: History
Driven Program Repair, Proc. International Conference
on Software Analysis, Evolution, and Reengineering,839

情報処理学会論文誌

[22]

[23]

[24]

[25]

[26]

[27]

[28]

[29]

[30]

[31]

[32]

[33]

[34]

[35]

[36]

[37]

Vol.61 No.4 830–841 (Apr. 2020)

pp.213–224 (2016).
Le Goues, C., Dewey Vogt, M., Forrest, S. and Weimer,
W.: A Systematic Study of Automated Program Repair: Fixing 55 out of 105 Bugs for $8 Each, Proc. International Conference on Software Engineering, pp.3–13(2012).
Liu, C., Yang, J., Tan, L. and Haﬁz, M.: R2Fix: Automatically Generating Bug Fixes from Bug Reports, Proc.
International Conference on Software Testing, Verification and Validation, pp.282–291 (2013).
Long, F. and Rinard, M.: Staged Program Repair with
Condition Synthesis, Proc. Joint Meeting on Foundations of Software Engineering, pp.166–178 (2015).
Long, F. and Rinard, M.: Automatic Patch Generation
by Learning Correct Code, Proc. Annual Symposiumon Principles of Programming Languages, pp.298–312(2016).
Martinez, M., Durieux, T., Sommerard, R., Xuan, J. andMonperrus, M.: Automatic Repair of Real Bugs in Java:A Large-Scale Experiment on the Defects4J Dataset,Springer Empirical Software Engineering, Vol.22, No.4,
pp.1936–1964 (2016).
Martinez, M. and Monperrus, M.: ASTOR: A Program
Repair Library for Java, Proc. International Symposium
on Software Testing and Analysis, pp.441–444 (2016).
Mechtaev, S., Nguyen, M.D., Noller, Y., Grunske, L.
and Roychoudhury, A.: Semantic Program Repair Usinga Reference Implementation, Proc. International Conference on Software Engineering, pp.129–139 (2018).
Pearson, S., Campos, J., Just, R., Fraser, G., Abreu, R.,
Ernst, M.D., Pang, D. and Keller, B.: Evaluating and
Improving Fault Localization, Proc. International Conference on Software Engineering, pp.609–620 (2017).
Qi, Y., Mao, X. and Lei, Y.: Eﬃcient Automated Program Repair through Fault-Recorded Testing Prioritization, Proc. International Conference on Software Maintenance, pp.180–189 (2013).
Qi, Z., Long, F., Achour, S. and Rinard, M.: An Analysis
of Patch Plausibility and Correctness for Generate-andvalidate Patch Generation Systems, Proc. International
Symposium on Software Testing and Analysis, pp.24–36(2015).
Smirnov, A. and Chiueh, T.: Automatic Patch Generation for Buﬀer Overﬂow Attacks, International Symposium on Information Assurance and Security, pp.165–
170 (2007).
Weimer, W., Nguyen, T., Le Goues, C. and Forrest, S.:
Automatically Finding Patches Using Genetic Programming, Proc. International Conference on Software Engineering, pp.364–374 (2009).
Wen, M., Chen, J., Wu, R., Hao, D. and Cheung,
S.C.: Context-aware Patch Generation for Better Automated Program Repair, Proc. International Conference
on Software Engineering, pp.1–11 (2018).
Wilkerson, J.L., Tauritz, D.R. and Bridges, J.M.: Multiobjective Coevolutionary Automated Software Correction, Proc. Annual Conference on Genetic and Evolutionary Computation, pp.1229–1236 (2012).
Wong, W.E., Debroy, V., Gao, R. and Li, Y.: The DStar
Method for Eﬀective Software Fault Localization, IEEE
Trans. Reliability, Vol.63, No.1, pp.290–308 (2014).
Xuan, J., Martinez, M., DeMarco, F., Clement, M.,
Marcote, S.L., Durieux, T., Le Berre, D. and Monperrus,
M.: Nopol: Automatic Repair of Conditional Statement
Bugs in Java Programs, IEEE Trans. Software Engi-c 2020 Information Processing Society of Japan


[38]

[39]

neering, Vol.43, No.1, pp.34–55 (2017).
Yang, D., Qi, Y. and Mao, X.: An Empirical Studyon the Usage of Fault Localization in Automated Program Repair, Proc. International Conference on Software Maintenance and Evolution, pp.504–508 (2017).
Yokoyama, H., Higo, Y., Hotta, K., Ohta, T., Okano, K.
and Kusumoto, S.: Toward Improving Ability to Repair
Bugs Automatically: A Patch Candidate Location Mechanism Using Code Similarity, Proc. Annual ACM Symposium on Applied Computing, pp.1364–1370 (2016).

本 真佑 （正会員）2010 年奈良先端科学技術大学院大学
博士後期課程修了．同年神戸大学大学院システム情報学研究科特命助教．

2016 年大阪大学大学院情報科学研究科助教．博士（工学）．エンピリカル
ソフトウェア工学の研究に従事．

肥後 芳樹 （正会員）
2002 年大阪大学基礎工学部情報科学科中退．2006 年同大学大学院博士後期課程修了．2007 年同大学大学院情報科学研究科コンピュータサイエン
ス専攻助教．2015 年同准教授．博士（情報科学）．ソースコード分析，特にコードクローン分析，リファクタリング支援，ソフトウェ
アリポジトリマイニングおよび自動プログラム修正に関する研究に従事．電子情報通信学会，日本ソフトウェア科学会，IEEE 各会員．

有馬 諒
2017 年大阪大学基礎工学部情報科学科卒業．2019 年同大学大学院情報科
学研究科コンピュータサイエンス専攻
博士前期課程修了．在学時リポジトリ
マイニングやソースコード分析に関する研究に従事．

谷門 照斗
2017 年大阪大学基礎工学部情報科学科卒業．2019 年同大学大学院情報科
学研究科コンピュータサイエンス専攻
博士前期課程修了．在学時自動プログ
ラム修正に関する研究に従事．

840

情報処理学会論文誌

Vol.61 No.4 830–841 (Apr. 2020)

内藤 圭吾

楠本 真二 （正会員）2019 年大阪大学大学院情報科学研究1988 年 大 阪 大 学 基 礎 工 学 部 卒 業 ．

科コンピュータサイエンス専攻博士前1991 年同大学大学院博士課程中退．

期課程修了．在学時自動バグ修正およ

同年同大学基礎工学部助手．1996 年

び自動バグ検出に関する研究に従事．

同講師．1999 年同助教授．2002 年同大学大学院情報科学研究科助教授．

2005 年同教授．博士（工学）．ソフト

松尾 裕幸

ウェアの生産性や品質の定量的評価に関する研究に従事．
電子情報通信学会，IEEE，IFPUG 各会員．

2017 年大阪大学基礎工学部情報科学科卒業．2019 年同大学大学院情報科
学研究科コンピュータサイエンス専攻
博士前期課程修了．在学時 Web ブラ
ウザ上で行う分散処理に関する研究に従事．

松本 淳之介2018 年大阪大学基礎工学部情報科学科卒業．現在，大阪大学大学院情報科
学研究科博士前期課程在学中．リポジ
トリマイニングに関する研究に従事．

富田 裕也
2019 年大阪大学基礎工学部情報科学科卒業．現在，大阪大学大学基礎工学
部情報科学科在学中．自動プログラム
修正に関する研究に従事．

華山 魁生
2019 年大阪大学基礎工学部情報科学科卒業．同年より同大学大学院情報科
学研究科コンピュータサイエンス専攻
博士前期課程在学中．プログラミング
教育およびプログラムの品質に関する研究に従事．

c 2020 Information Processing Society of Japan

841