社団法人 電子情報通信学会
THE INSTITUTE OF ELECTRONICS,INFORMATION AND COMMUNICATION ENGINEERS

信学技報
TECHNICAL REPORT OF IEICE.

ソースコード特徴量を用いた機械学習によるソースコード品質の評価手法
槇原啓介†

松下誠†

井上克郎†

† 大阪大学あらまし

本研究は，機械学習を用いてソースコードの品質を定量的かつ自動で評価する手法を提案する．本手法では，プログラミングコンテストサイトから収集したレーティング上位と下位のソースコードを上級者と初級者とし、両者で差異が見られたソースコード特徴量を用いて学習モデルを作成する．本手法の実装を行い，評価実験として上級者，初級者のソースコードを分類した結果，およそ 90% の精度で適切な評価を行うことができた．
キーワード プログラミングコンテスト，レーティング，機械学習

Source Code Evaluation Method by Machine Learning
using Source Code Feature Metrics
Keisuke MAKIHARA† , Makoto MATSUSHITA† , and Katsuro INOUE†† Osaka University.
Abstract We propose a method to evaluate source codes quantitively and automatically using machine learning.
In this method, we collected source codes from the site of programming contest. We define the higher rank rating
as seniors, and the lower rank rating as beginners. We created a learning model using source code features thatshowed diﬀerences between the two. As a result of implementing this method and classifying source codes as seniors
or beginners, it was possible to judge source code of senior or beginner with 90% accuracy.
Key words Programming Contest, Rating, Machine Learning

1. ま え が き

定されたソースコードを修正し，その結果良と判定されるようになれば，修正した編集は適切であったと言える．また，結果ソースコードを編集することは，ソフトウェアを開発する上が良好になることによって、プログラミングを行った作業者はで必要不可欠な作業であり，ソフトウェア工学の研究分野とし自分の成長を実感できる．さらに良否の判定に用いた基準を利て開発者がソースコードに対して行う編集作業の内容に関する用し，より良い判定を得られるような修正内容を支援すること研究は数多く行われている [1]〜[3]．開発の過程においては，ができれば，初級者はそれらを参考にプログラミング学習を進

ソースコードの実装，テスト，修正を繰り返し行うため，これめることができるようになり，効率的な技術力の向上を期待でらの作業にかかる労力は大きい．特に，初級者は時間的コストきる．

が多くかかるため，行われた編集が適切であるかどうか，判断良いソースコードとはどのようなものかを考えた場合，構造できることが望ましい．2020 年度から小学校においてもプロ

や読みやすさ，実行時間など様々な基準が考えられる．しかしグラミング教育が必修化される（注 1）など，プログラミングを学ながら人によって良いソースコードの基準が異なるため，広く習し始める人の数は今後ますます増加していくことが予想され合意できる判断を行うことは難しい．広く受け入れられる基準

る．プログラミングにおける基本的な作業の 1 つである編集作を得るためには，多くのソースコードを用いて定量的にその良業を適切に支援することは今後重要となると考えられる．

否を判定し、その判断に基づく基準が重要である．ソースコー

ソースコードが与えられた時，仮にその内容の良否を判定でドの編集作業に関して，上級者と初級者間にどのような差異がきるならば，プログラミングの学習に役立つと考える．否と判存在するのかという研究は既に行われている [4], [5]．その研究によると，両者の間には，予約語利用頻度やメトリクスといっ（注 1）：http://www.mext.go.jp/a_menu/shotou/zyouhou/detail/1375607.htm

た定量的なソースコード特徴量の差異が確認されている．この特徴の差異を利用すれば，書かれたソースコードが上級者に近—1—いか，それとも初級者に近いかということを定量的に判断し，修正の指針を与えることができるのではないかと考えた．
本研究では，ソースコード特徴量を用いたソースコードの品質を評価する手法として，ソースコードの良否の判定を行う．

される．
コンテスト時間終了後に提出ソースコードに対して最終テス
トが実施され，参加者の最終的な得点が決定する．得点に応じて各参加者の順位が決定し，レーティングが変動する．

ソースコードの良否を定量的かつ自動で判断する手法として機2. 2. 2 レーティングシステム

械学習を用いる．プログラミングコンテスト内で提出された

Codeforces は参加者の熟練度を示す指標としてレーティンソースコードに対し，上級者・初級者間で差異が見られたソー

グシステム [6] を用いている． 主にチェスやサッカーで用いらスコード特徴量の値と，ソースコードの「良」「否」を機械学習

れるイロレーティング [7] に似た計算方式を採用しており，コプログラムに与えることによって学習モデルを作成する．良否

ンテスト毎に参加者の順位に応じてレーティングを計算する．

に関しては，上級者が書いたソースコードを「良」，初級者が書レーティングが高い参加者ほどコンテストで高い成績を取っていたソースコードを「否」と定義した．作成した学習モデルにいるということができる． 本研究においても，このレーティン

対し，学習に用いられていないソースコード特徴量の値を入力

グが高い参加者を熟練度が高い参加者とし，アルゴリズムの問すると，ソースコードの良否を自動で出力する．出力結果が否題に対して適切にコーディングを行う能力が高いと考える．の場合は，ソースコード特徴量を用いて修正の指針を提示する．
以降，2. 節でプログラミングコンテストについて説明する．

3. 節で先行研究での調査内容について説明する．4. 節で提案手法について説明し，5. 節で提案手法の実装を用いた実験について説明する．最後に， 6. 節でまとめを述べる．

2. プログラミングコンテスト
本節では，プログラミングコンテストについて述べる．以下

3. ソースコード編集における上級者・初級者間の比較調査
先行研究として，上級者と初級者が行う編集作業に見られる差異について調査が行われている [4], [5]．本節では，先行研究の調査内容と調査結果のうち，本研究に関連する部分について述べる.

3. 1 調 査 内 容ではまず，プログラミングコンテストに用いられるオンライン先行研究では，世界最大規模のプログラミングコンテストでジャッジシステムと，プログラミングコンテストの概要についある Codeforces の参加者を対象に，参加者がコンテストの問て説明する．

題へ回答として提出したソースコードの編集作業について調査

2. 1 オンラインジャッジシステム

を行った．

プログラミングコンテストにおいて，その採点に利用されソースコード編集作業の特徴調査を行うために，2016/5/19〜るオンラインジャッジシステムについて説明する． オンライ

2016/11/15 の 6 ヶ月間に Codeforces に対して提出されたンジャッジシステムは，利用者に問題を提示し，問題に対す1,644,636 のソースコードと，それに付随した提出履歴情報をる利用者の回答を受け取る． そして，受け取った回答を採点収集しており， このうち，収集ソースコードの 9 割を占めるし，結果を利用者に通知する． オンラインジャッジシステムのC++ でのソースコードが調査対象となった．収集したソース

一例として，国内の AIZU ONLINE JUDGE（注 2），アメリカのコードデータと提出履歴情報はデータベースに保管しており，（注 3）Topcoderなどが挙げられる．

2. 2 プログラミングコンテストの概要
プログラミングコンテストとは，プログラミングの能力や技オンラインで公開してある（注 5）．以下，この研究に用いられたデータセットの説明と調査結果の説明を行う．

3. 2 データセット

術を競い合うコンテストのことである．オンラインジャッジシ

データセットは，参加者が問題への回答として提出したソーステムを用いて複数の参加者が同じ問題セットを同じ時間に解スコードと，言語やタイムスタンプ等の提出履歴情報データベーく方式で行われる．参加者の正解問題数や回答時間に応じて参スの 2 種類からなる．参加者数は，2016/5/19〜2016/11/15 の加者の順位が決定し，コンテスト終了後に順位に応じて参加者期間に 1 度以上 Codeforces のコンテストに参加したユーザーのレーティング [6], [7] が変動する．の総数である．

2. 2. 1 ルールと流れ収集されたソースコードは，Codeforces のプログラミングコ

プログラミングコンテストの実際の流れについて，本研究ンテスト参加者が，コンテストの問題に対する回答として提出でデータセットとして用いる Codeforces（注 4）を例として説明すしたものである．ソースコードは，Codeforces がコンパイル環る．Codeforces における一般的なコンテストでは，指定の時間境を用意している任意の言語で記述することができる．本デーになるとコンテスト参加者に複数の問題が公開される． 参加

タセットのソースコードのうち，90% は C++ によって記述さ者は自由な順序・言語で問題を解くことができ，解いた問題のれており，それ以外は Java が約 4%，C が約 2%，Python が難易度と回答までにかかった時間に応じて参加者に得点が加算

約 2%，その他が約 2% となっている．
提出履歴情報としては，参加者，対象となったコンテストと（注 2）：http://judge.u-aizu.ac.jp/onlinejudge/

その問題，参加者が提出したソースコード，ソースコードの提（注 3）：https://www.topcoder.com/（注 4）：http://codeforces.com/（注 5）：https://sites.google.com/site/miningprogcodeforces/—2—出結果，連続した提出間の編集距離などが記録されている．編

表 2 上級者の利用頻度が高い予約語集距離としては，ソースコードのテキストとしてはレーベン

t

初級者分散

上級者分散

シュタイン距離 [9]，抽象構文木上の編集距離は GumtreeDiﬀ

typedef

0.896

1.082

[10] を用いている．

template

0.778

1.162

3. 3 上級者・初級者の定義

return

0.881

1.042

ソースコード編集作業について分析を行う上で，プログラミ

typename

0.602

1.225

while

0.863

1.088

operator

0.793

1.156

class

0.883

1.100

using

0.720

1.270

continue

0.914

1.043

struct

0.800

1.061

do0.564

0.925

public0.633

1.016

プを上級者，最もレーティングが低いグループを初級者とnamespace

0.885

1.106

する

enum

0.179

1.012

ングコンテスト参加者を上級者と初級者の 2 群に分割して比較調査を行った．具体的には次のように参加者を分割している．
（ 1 ） 参加者をレーティングでソート（ 2 ） ソートした参加者を人数が等しくなるように 4 分割
（ 3 ） 4 分割された参加者のうち，最もレーティングが高いグルー

asm

0.049

0.772

4 分割された参加者のうち，レーティングが中央値付近の 2private

0.390

0.814

群については考慮しない．このとき，上級者・初級者の分布はtypeid

0.010

0.489

friend

0.650

0.844

decltype

0.180

0.657

try0.011

0.410

catch

0.011

0.408

表 1 のようになった．人数が 2 群で異なるのは，同じレーティングを持つ参加者が境界に複数分布するためである．
表 1 上級者・初級者の 2 群におけるレーティングの統計情報
初級者

レーティング

上級者

平均1171.12 1824.824

分散

113.62

最小値
最大値-39

表 3 初級者の利用頻度が高い予約語

226.54
1573

1299

3367

3634

3622

t

初級者分散 上級者分散

else

1.061e+00

0.915

break

1.074e+00

0.942

if

9.862e-01

1.003

for

1.005e+00

1.023

goto

8.934e-01

0.657

3. 4 調 査 結 果

case

6.454e-01

0.436

プログラミングコンテスト上級者・初級者間におけるソース

switch

6.406e-01

0.463

コードの編集作業における特徴調査のうち，予約語利用頻度

extern8.354e-04

0.001

人数の調査とメトリクスの値に関する調査について以下で述べる．

Codeforces 内の同一の問題に対して提出されたソースコードのいずれのメトリクスについても上級者・初級者間で統計的に集合に対し，ソースコード特徴量を標準化するなどの処理を施有意差が見られた．上級者の計測値が大きかったメトリクスにし，調査を行った．

着目すると，上級者はソースコードの行数が増える傾向が伺え

3. 4. 1 予約語利用頻度の調査

る．初級者の計測値が大きかったメトリクスとして，ネストの上級者・初級者間で統計的に有意差が見られた予約語をそれ深さや複雑度の高さが確認された．

ぞれ表 2，表 3 に示す．表 2 に示した上級者の上位予約語に着

3. 5 本研究への利用

目すると，プログラムの構造化を促進する予約語を多く用い調査結果から，上級者は構造に関する記述が，初級者は分岐ている傾向が確認された．上級者は初級者と比較して，ソースに関する記述が多いという差異が見られた．

コードの抽象度が高いのではないかと考えられる．また，表 3

本研究では，これらのソースコード特徴量をベクトル化したに示した初級者の上位予約語に着目すると，分岐に関する予約データを用いて，定量的にソースコードの良否の判定及び修語を多く用いる傾向にあることが確認された．初級者は分岐文正の指針の提示を行う．また機械学習を用いて，自動で判定をを多用し，ソースコードが複雑化する傾向があるのではないか行う．と考えられる．

3. 4. 2 メトリクスの値に関する調査

4. 提 案 手 法

調査対象となったメトリクスの一覧と説明を表 4 に示す．

本節では，ソースコード品質を評価する手法として，ソースSourceMonitor（注 6）で計測できる 11 種類のメトリクスである．

コード特徴量を用いた機械学習によるソースコードの良否の判定方法及び修正の指針を提示する手法について説明する．

（注 6）：http://www.campwoodsw.com/sourcemonitor.html—3—

トルを作成する．

表 4 調査対象メトリクス
メトリクス

次に，上級者が書いたソースコードを「良」，初級者が書いた

説明
各関数の循環的複雑度 [8] の平ソースコードを「否」と定義し，それぞれ値として 1，-1 を与均値える．この値を先ほどのベクトルに追加し，41 次元のベクトル

max_complexity

各関数の循環的複雑度の最大値を作成する．図 2 にベクトルの一部を掲載する．"skill"という

avg_depth

各関数のネスト深さの平均値変数名で目的変数を追加している．

max_depth

各関数のネスト深さの最大値

methods_per_class

クラス当たりのメソッド数

n_classes

クラス数

n_func関数の数n_lines

物理行数

n_statements

セミコロンで区切られた論理行

avg_complexity

avg_complexity

n_funcskill

0001000100001

全体の物理行数に占めるコメン

00001トの割合

0000-10200-10400-1

asm

break00の割合

percent_branch_statements 全体の論理行数に占める分岐文

4. 1 目ベクトル化を行い，ソースコード特徴量に対する良否判定の学習モデルを構築する．

数

percent_comments

学習の対象となる全てのソースコードに対して図 2 のような・・・・・・

的
図 2 目的変数"skill"を追加したベクトル

ソースコードの良否を判定できれば，プログラミングの学習に役立つ．否と判定されたソースコードを修正し，良と判定されるようになれば，書き手は自分の成長を実感できる．また，ソースコード特徴量を用いた修正のヒントが得ることができれば，効率的に編集を行うことができる．

良否の判定を行いたいソースコードに対し 40 次元のベクトルを作成する．学習モデルに対し，ベクトルを入力すると，「良」または「否」のいずれかが出力される．

4. 2 判 定 方 法
ソースコードの良否の判定を行う流れを，図 1 に示すように大きく 3 つの段階に分けた．それぞれの段階について，以下で詳細を述べる．

4. 3 修正の指針の提示
修正の指針を提示するにあたって，単一のソースコード内における構造の特徴に関する調査を行い，上級者・初級者の差が大きい特徴量を利用することを考えた．初級者と比較して上級㻿㼠㼑㼜㻟㻌㻦㻌ุᐃ㻿㼠㼑㼜㻞㻌㻦Ꮫ⩦㻿㼠㼑㼜㻝㻌㻦㻌཰㞟䞉ศ㢮ୖ⣭⪅䝥䝻䜾䝷䝭䞁䜾䝁䞁䝔䝇䝖

Step3: 判定᪂つ䝁䞊䝗䝧䜽䝖䝹໬䝧䜽䝖䝹໬኱㔞䛾䝋䞊䝇䝁䞊䝗ึ⣭⪅者の利用頻度が高い予約語がソースコード内で使用されていなければ，使用するよう促す．
本研究では，単一のソースコード内での予約語利用頻度を-1から 1 までの値に正規化し，上級者と初級者の値の差が 0.02 以Ꮫ⩦䝰䝕䝹

上となる予約語を初級者と比較して上級者の利用頻度が高い予約語と定めた．その内容を表 5 に示す．

䛂Ⰻ䛃䛂ྰ䛃

図 1 ソースコードの良否の判定の流れ

表 5 単一ソースコード内において上級者の利用頻度が高い予約語t

上級者・初級者間の利用頻度の差

return0.1298554

while0.0758102

template

0.0560683

セットを MySQL 上に保存し，データベースを管理した．ソー

for0.0469827

スコードを上級者と初級者に分類した結果，上級者は 544,290

continue

0.0457610

typename

0.0390510

struct0.0313462

class0.0311679

operator

0.0274451

Step1: 収集・分類
本研究では，3. 2 節で述べたオンラインで公開しているデータ個，初級者は 332,863 個であった．

Step2: 学習
説明変数はソースコード特徴量，目的変数はソースコードの良否である．

3. 節では，ある予約語 t に対し，同一の問題に提出されたソースコードに対して字句解析を行うことで表 2，表 3 で示

ソースコードの集合における相対的な予約語利用頻度を調査しした 29 種類の予約語の利用頻度を，SourceMonitor を用いるていた．それに対し，表 5 に示した値は，単一のソースコードことで表 4 で示した 11 種類のメトリクスの値を取得する．こ内において，ある予約語 t の，利用された全ての予約語におけれらを組み合わせて，1 つのソースコードにつき 40 次元のベク—4—

る相対的な予約語利用頻度を調査した結果である．他のソース

ルゴリズム共に，評価指標の値はおおよそ 90% に近い値が多コードでの利用数は使用せず，単一のソースコード内のみで利かった．

用数の正規化を行った．これは，単一のソースコードを独立し5. 1. 3 考て見た場合の構造の特徴を調べるためである．例えば"for"のよ

ソースコードを上級者・初級者に分類する際に用いたのはうに，表 3 にある場合でも，表 5 における上級者と初級者の値レーティングのみであり，ソースコードの構造は無視している．の差が正になる場合がある．これは，同一の処理を行うソース

Codeforces においては，制限時間内に問題を解くことができれコードにおける"for"の利用回数は，上級者は初級者と比較してば得点がつき，終了時の得点が高いほどレーティングが高くな少ないが，単一のソースコード内で利用されているすべての予る．つまり，入力に対して正しい出力ができるソースコードを約語に対する"for"の利用回数は，上級者は初級者と比較して多記述することさえできれば，レーティングは上がっていくため，いということを意味している．この結果からも，表 2 においてレーティングが高い上級者が提出したソースコードでも，構造表の上部の予約語を使用し，下部の予約語は使用しないというを見ると初級者の特徴に近い場合がある．上級者が提出した全

単純な修正では良いソースコードにすることが難しいことが分てのソースコードの構造 3. 節で述べたような上級者の構造にかる．

近いわけではない．判定の能力が高いと，テストデータとして入力ソースコード内で該当する予約語が使用されていなければ，良否の判定結果と共に予約語の利用を促す．

察

構造が初級者に近いソースコードが入力された場合は，提出者が上級者であっても「否」という判定が出力される．初級者に関しても同様のことが言える．したがって，テストデータの判

5. 評 価 実 験定においてはある程度の誤りが許容できる．実際には，90% と4. 節で述べた手法を実装し，それを用いて実験を行った．本節では，その実験結果を説明する．具体的には，4. 2 節で述べいう値以上の分類性能を持っている可能性があり，判定の能力は十分にあると言える．

たソースコードの良否判定を行った学習モデルの精度と，4. 3

二値分類では，評価指標の値を正の場合のみ，つまり本研究節で示した特徴量を参考に編集を行った後の判定結果の変化ににおける上級者のみで算出を行う場合もあるが，本研究においついて述べる．ては上級者・初級者の両方で算出を行った．理由としては，学5. 1 学習モデルの精度習モデルの精度をより適切に判断するためである．比較対象と5. 1. 1 実 験 手 順

して，決定木において上級者のデータ数を初級者に揃えた時の4. 2 節で構築した学習モデルの精度を求めるため，本研究に結果を表 7 に示す．表 6 よりも判定精度の偏りは小さい．このおいて対象となった合計 877,153 のソースコードに対し，以下ことより，一方の学習データ数が多いと，それに対応する出力のような手順で実験を行った．

を学習するデータ数が増え，判定範囲が広くなり，出力に偏り（ 1 ） 上級者・初級者全てのソースコードに対し，4. 2 節で述べた 41 次元のベクトルを作成するが生じると考えられる．このように，入力データ数のパターンは様々考えられるが，表 6 で示した評価指標の値が検証した中で高かったため，最終的にこの結果を採用した．

（ 2 ） 1 で作成したベクトルの中からランダムで 1 割抽出し，テストデータとする

表 7 上級者・初級者のデータ数を揃えた場合の評価指標
決定木（ 3 ） 残りの 9 割のベクトルを学習データとし，学習モデルを作成する

適合率

再現率

F値

上級者

0.781

0.818

0.799

初級者

0.809

0.770

0.789

（ 4 ） テストデータの説明変数を学習モデルに入力する（ 5 ） 入力ソースコードが上級者の場合は「良」，初級者の場合は「否」と出力されれば正解，そうでなければ不正解とする

5. 2 修正の指針の有効性
本研究においては，ソースコードに対する修正が適切かどうかについて表 8 のように定め，判定が「否」から「良」に変化

5. 1. 2 実 験 結 果

した場合についてのみ修正が適切であるとした．出力される良

機械学習の精度の評価指標として，上級者・初級者それぞれについて適合率，再現率，F 値を算出した．その結果を表 6 に示す．使用したアルゴリズムは，決定木と SVM である．両ア否は，入力されたソースコードのソースコード特徴量が上級者と初級者のどちらに近いか，という判定基準で定められる．しかし，どれだけ近いかということは出力結果から判断ができな
い．例えば，修正前後で判定が「否」のままの場合，修正によっ

表 6 機械学習の評価指標
決定木て上級者に近づきはしたが依然として初級者に近いのか，より上級者から遠ざかっているのかということは不明である．修正

SVM

適合率

再現率

F値

適合率

再現率

F値

前後で「良」である場合も同様である．
「良」から「否」に変化

上級者

0.918

0.906

0.912

0.940

0.9000.920

初級者

した場合は明らかに修正は不適切である．

0.850

0.869

0.860

0.846

0.906

0.875

そこで今回の実験では，「否」と判定されたソースコードに対—5—

約語を用いて判定が「良」に変化したということは，表 8 より，

表 8 良否の判定の変化における修正の適切さ
判定

修正前
修正後

修正の適切さ良良

その修正は適切であったと言える．つまり，上級者・初級者間

否否不明 不適切良否で差異が存在するソースコード特徴量を用いて修正の指針を示

適切

不明

すことは有用となり得ると言える．

6. ま と め
して表 5 に示した予約語を用いて修正を行い，「良」と判定されるようになれば，修正は適切であったと判断することとした．

5. 2. 1 実 験 手 順

本研究では，ソースコード品質を評価する手法として，ソースコード特徴量を用いた，機械学習による良否の判定を行う手法と，ソースコードの修正の指針を提示する手法を提案した．

4. 2 節の機械学習プログラムに入力されたソースコードに対評価実験として，否と判定されたソースコードを，提示されし，良否の判定結果とともに，表 5 に示した予約語が存在しなたソースコード特徴量を用いて修正し，改めて入力ソースコーい場合，4. 3 節に従って，該当する予約語の使用を促す出力をドとしたところ，良と判定される場合があった．したがって，する．実験対象は，学習モデルの構築に用いられていないソースコードである．例として，あるソースコードを入力すると，「否」の判定と共に，図 3 のように出力される．

ソースコード特徴量はソースコードの適切な編集への指針となることが判明し，ソースコードの良否の判定を利用することは，プログラミングの学習を支援することにつながると言える．
今後の研究課題として，判定の精度を向上させるために，新たにメトリクスや，コードクローンの数やタイプを特徴ベクトルとして追加することなども考えられる．また，上級者が提出したソースコードのうち，初級者に近いと判定され得るソースコードによる判定ミスをなくすため，テストデータにおいて異なる判定がされたソースコードの目的変数を動的に変更して学習を行うことが考えられる．さらに，現状においては，修正の

図3

修正の指針の提示

提示は，対象となる予約語が利用されているかいないかという基準で行っている．全体の構造を加味し，利用されているもの

予約語を用いて行った修正が適切かどうかについて，以下の手順で実験を行い，修正前後における良否の判定の変化を調査に対しても頻度に言及する指針を提示することができれば，より適切な編集を行うことができるのではないかと考えられる．

した．構造的な修正による判定の変化を確認したいため，アルゴリズムはできるだけ変えず，入力に対する出力結果も変わらないように修正を行った．
（ 1 ） 4. 2 節で作成した機械学習プログラムにソースコードを入力した結果，「否」と判定されたソースコードを修正対象とする（ 2 ） 図 3 において出力された予約語を用いてソースコードの修正を行う（ 3 ） 再び 4. 2 節で作成した機械学習プログラムにソースコードを入力する（ 4 ） 判定が「良」であれば，2 で行った修正は適切であると判断する

5. 2. 2 実 験 結 果
今回は，実験を行ったソースコードのうち，図 3 の出力がされたソースコードを用いて説明を行う．
図 3 で示された予約語のうち，新たに"class"と"while"を用いることにしてソースコードの修正を行った．その結果，SVMを用いて作成した学習モデルにおいて判定が「否」から「良」に変化することが確認できた．

5. 2. 3 考察「否」と判定されたソースコードに対して，表 5 に示した予謝辞

本研究は JSPS 科研費 18H04094 の助成を受けた．
文

献[1] Claire Le Goues, Michael Dewey-Vogt, Stephanie Forrest,
and Westley Weimer, "A Systematic Study of AutomatedProgram Repair: Fixing 55 out of 105 Bugs for $8 Each,"Proc. of ICSE 2012, pp. 3-13, 2012.
[2] Quinn Hanam, Fernando S. de M. Brito, and Ali Mesbah,"Discovering Bug Patterns in JavaScript," ACM SIGCSE
Bulletin, pp. 144-156, 2016.
[3] Hao Zhong and Zhendong Su, "An Empirical Study on Real
Bug Fixes," Proc. of ICSE 2015, pp. 913-923, 2015.
[4] 堤祥吾，プログラミングコンテスト初級者・上級者間におけるソースコード特徴量の比較，大阪大学大学院情報科学研究科修士論文， 2018．
[5] 堤祥吾，吉田則裕，崔恩瀞，井上克郎， "プログラミングコンテスト参加者を対象とした編集作業の特徴調査，" 情報処理学会論文誌， Vol.197， No.6， pp.1-8， 2017．
[6] Arpad E Elo, "The Rating of Chess Players, Past andPresent," Arco Pub., 1978.
[7] Mikhail Mirzayanov, "Codeforces Rating System," Codeforces, http://code forces.com/blog/entry/102, 2010.
[8] Thomas J McCabe. "A complexity measure," IEEE Trans.
Softw. Eng., Vol. 2, No. 4, pp. 308-320, 1976.
[9] Vladimir I. Levenshtein, "Binary codes capable of correcting
deletions, insertions, and reversals," Soviet Physics Doklady
10, pp. 707-710, 1966.
[10] Jean-Rémy Falleri, Floréal Morandat, Xavier Blanc, Matias Martinez, and Martin Monperrus, "Fine-grained andaccurate source code diﬀerencing," Proc. of ASE 2014, pp.
313-324, 2014.

—6—