ソフトウェア・シンポジウム 2021 in 大分 (オンライン開催)

深層学習を用いたプログラム品質向上のためのソースコード画像分析手法の提案
小川 一彦
放送大学大学院文化科学研究科
kgg03771@nifty.com

中谷 多哉子
放送大学大学院文化科学研究科
tinakatani@ouj.ac.jp

要旨

テム開発の工程の一つであるプログラムの製造工程もコストダウンの対象となる．システム開発において，品

我々は，画像認識と物体検出のアルゴリズムを用いて，質を確保するため，プログラムの製造工程で行なわれる

ソースコードを画像化してプログラムの不具合の可能性

コードレビューは，重要である．コードレビューではプのある箇所を指摘可能であることを検証した．不具合をログラムが規約に沿って正しく記述されていること，仕起こすプログラムは見た目に共通点があり，教師あり学様書に書かれている機能を満たしているかという事など

習の深層学習を用いて学習を行うことで，同様の不具合をチェックし，指摘を行い，プログラムを改善することのある箇所を指摘すると考えたのである．教師あり学習でソフトウェアの品質を確保している．コードレビューの深層学習で，画像に変換したソースコードを学習させで品質を確保するには工数が掛かるためコストが必要とるため，動物や人工物などを学習する場合と同じ手法，なる．コストダウンは，品質を保ちつつ工数を削減するパラメータを用いて学習させても，精度は上がりにくい．

必要がある．コードレビューで，プログラムにある不具プログラムの不具合を推論させるために，画像に変換し合の可能性のある箇所を予め示すことができれば，示さたソースコードが教師ありの深層学習で正しく学習されれた箇所を重点的にレビューを行うことが可能になり，なければ，高い精度で推論を行うことはできない．作成工数を減らすことが期待できる．

した学習データが正しく学習されるため，学習データを我々は，これまでプログラムのソースコードを色付きどのように作成すればよいか，学習が行なわれるためのの要素を持つ画像に変換して学習と推論を行った [5] [9]．

深層学習のパラメータの選択はどうすればよいかというプログラムを作成するとき，プロトタイプからの作成，ことを明らかにする必要がある．本研究では，画像認識仕様が近い作成済みのプログラムを再利用し，効率化をと物体検出のアルゴリズムを用いて深層学習を行う際に，図る．共通性が高いことで，不具合の発生個所は，ソー学習のためのデータをどのように作成することで，教師スコードの見た目にも共通点があると考えた．

あり学習の深層学習で学習することができるか明らかに

本稿は，畳み込みニューラルネットワーク（CNN）をする．併せて，各アルゴリズムで作成した学習モデルを用いた画像認識と物体検出のアルゴリズムが，画像から使用して被験者のプログラムを推論した結果の比較と検動物や人工物を検出するように，ソースコードの不具合証を行なう．の箇所を検出することを検証する．どのような学習デー
タであれば，各アルゴリズムで教師あり学習が行われ，推論が可能な学習モデルが作成できるのか，学習のため

1. はじめにのパラメータ（ハイパーパラメータ）とともに示す．
研究の目的は、以下の問いに答えることである．

近年，システムの規模は増大している．しかしシステ• 画像分析手法に用いるアルゴリズムは，どのような学習データとパラメータであれば画像化したソースコードの学習が可能になるか？

ムを開発するための費用はシステムの規模に合わせて増大しておらず，寧ろコストダウンを要求されている．コ
ストダウンが行なわれることで，システム開発の各工程では効率化が行なわれ，コストダウンに対応する．シス• 不具合の推論で認識された「怪しい箇所」は，実際102SEA

ソフトウェア・シンポジウム 2021 in 大分 (オンライン開催)

メトリクスを計測することで，不具合の可能性を推測の不具合箇所を正しく認識できているのか？

することは可能である．複雑なプログラムに不具合があ

本稿は，以下の内容で構成されている．第 2 節は，関連る可能性は高い．しかし，複雑ではないプログラムにも研究を示す．第 3 節は，研究のアプローチについて説明

不具合は混入する．

する．第 4 節で，結果を示す．第 5 節で，考察を示す．第6 節で，まとめで，研究の結果と，今後の課題を述べる．

ベテランのレビューワは，プログラムのレビューをする際に，ソースコードを見て記述の仕方が規約から外れているように見える箇所に不吉な匂いを感じて重点的

2. 関連研究にレビューをする．同様に，ソースコードの不具合があ

これまで，ソフトウェアの品質は，統計学的な手法にる箇所を学習し，学習モデルが不具合を認識すればベテより推論されてきた．McCabe [10] は、プログラムの複ランのレビューワのように，ソースコードの見た目から雑さは制御構造の複雑さで定まるとし，循環的複雑度不吉な臭いがする箇所を指摘すると考えた．本稿では，（Cyclomatic complexity）を提唱した．

ソースコードを画像に変換し，画像認識と物体検出のア

下村ら [7] は、ソフトウェアの品質評価に実製品デールゴリズムより推論を行なうため，それぞれのアルゴリタを用いて，単体テスト（Unit Test，以下 UT とする）ズムでどのように学習を行なえば推論が可能になるかをのメトリクスとソースコードのメトリクスを組み合わせ明らかにし，実際に推論を行なった結果を検証する．て行った．分析の結果，UT 見逃し欠陥数と他のメトリ

3. 研究のアプローチ

クスとの相関を見ると，規模，サイクロマチック数，分岐条件数との間に正の相関があるとしている．

3.1. 概要

また、近藤ら [3] は，ソフトウェアの不具合予測をするため，ソフトウェアの変更をしたソースコード片のみ

我々は，プログラムのソースコードを画像に変換し，に対して深層学習を適用することで不具合を予測する手

教師あり学習により画像認識と物体検出のアルゴリズム法（W-CNN）を提案している．研究で，テキスト分類問を用いる．本稿の学習及び推論を深層学習で行うため，題として捉え，ソースコード片による不具合予測を行っ

Windows10 HomeEdition 64bit に，Anaconda 仮想環境を使用して．学習および推論の環境を作成する．

た．W-CNN を用いて評価した結果，ソースコード片に対して不具合予測の学習は可能であるとしている．
ソースコードを画像化して深層学習で学習させる手法
として，森崎ら [4] は，ソースコードの見た目に着目し，深層学習によるレビューを行わせた．研究では，ソース

1. 画像認識のアルゴリズムで学習する環境．
Google の TensorFlow-gpu 1.12.0 に別途 KERAS
2.2.4 をインストールした仮想環境を作成する．

コードの美しさを深層学習で学習させ，美しいソースけして画像のサイズに分割し学習データを作成し畳み込

2. 物体検出のアルゴリズムで学習する環境．
YOLOv3 [6] をインストールした仮想環境を作成する．

みニューラルネットワーク（CNN）で学習させた．学習ハードウェアの構成は，CPU：Corei7-6700K，Memory：

結果に基づいてソースコードの美しさを判断した結果，24GB，GPU：GeforceRTX2070Super で実験を行う．また，本稿の画像認識アルゴリズムによる学習と推論は，これまでに作成したプログラムを使用して行なった． [9]

コードは読みやすいソースコードであり，品質の向上につながるとしている．ソースコードを 100 色程度で色分55.5 ％が良いと判断したプロジェクトの専門家の所見では可読性と保守性にムラがあるとされ，93.9 ％が良いと判断したプロジェクトでは可読性と保守性が均質であり，読みやすいという所見があったとしている．
また，Fowler [8] は，コードの不吉な臭いとは、プログラムのソースコードに深刻な問題が存在することを示す何らかの兆候のことであるとして，いつソースコードのファクタリングを行い、どのようなリファクタリング手法を用いるかを発見するための方法であるとした．

103

3.2. 研究方法
本研究では，プログラムのソースコードを画像に変換し，プログラム中にある不具合の箇所を，教師あり学習で学習させる．正しく学習が行なわれるため，どのようにして学習データを作成し，学習のパラメータを設定す

SEA

ソフトウェア・シンポジウム 2021 in 大分 (オンライン開催)

ればよいか，教師あり学習の経緯とともに示す．教師あ

画像認識および物体検出アルゴリズムで作成した学り学習の結果，作成されるモデルを使用して被験者のプ習モデルを用いて，被験者のプログラムで推論したログラムを推論させ，不具合の可能性を予測する．

結果を検証する．

その理由を以下に示す．

3.4. 研究内容
1. プログラムの不具合は見た目も共通性がある．
不具合を起こすソースコードは，コードの記述に特徴があると考えられる．近年は特にプログラム作成でソースコードを再利用することが多く，見た目の共通性が高いと考えた．

1. 学習モデルの選択

2. 複雑ではない箇所のプログラムの不具合を推論する可能性がある．
メトリクスの計測は，プログラムの複雑な箇所を不具合の可能性が高い箇所として推測する．プログラ
ムの不具合を，見た目で学習することは複雑ではない箇所を，不具合と指摘する可能性があると考えた．

(1) 画像認識アルゴリズムで使用する学習モデル
学習モデルは，ImageNet の学習済みモデルである VGG16（VGG ILSVRC 16 layers）を使用する．転移学習を行なうことで，入手本数が限られる，画像に変換されたソースコードによる学習が可能になる．
(2) 物体検出アルゴリズムで使用する学習モデル
学習には，YOLO（You look only once）を用いる．学習は，本研究で作成する学習データのみで行なわれる．

3.3. 研究の手順
2. 学習データの作成．
画像認識アルゴリズムと物体検出アルゴリズムは，どちらも画像から推論のための特徴量を抽出する．
プログラムのソースコードを変換した画像からプログラムの品質を評価するため，ソースコードの構成要素を画像から区別しやすくする．区別しやすくするため，色分けを行なう．色分けは，複数パターンを用意して，どのパターンがより学習されやすいか検証する．

本研究の手順は以下の通りである．

1. 画像認識アルゴリズムで学習する．
プログラムのソースコードを画像化し，教師あり学
習で不具合の有無を学習させる．学習には画像認識のアルゴリズムを用いて行なう．
2. 画像認識アルゴリズムで学習した結果を評価する．
教師あり学習で学習するモデルが，プログラムのソースコードを変換した画像から特徴を捉えるためには，学習データとなる画像をどのように作成すればよいか検証する．また，学習するモデルはどのように学習を行なえば良いか，学習のパラメータと共に検証を行なう．

3. 学習パラメータの選択
学習を行なうため，学習のパラメータ（ハイパーパラメータ）をチューニングし，学習の精度が良いパラメータを検証する．
4. 学習結果のモデルを用いた推論結果の比較と評価
画像認識アルゴリズムと物体検出アルゴリズムで，同一の被験者のプログラムを使用して推論を行ない，結果を比較および評価する．推論結果の検証内
容を以下に示す

3. 物体検出アルゴリズムで学習する．
プログラムのソースコードを画像化し，教師あり学習で不具合の有無を学習させる．学習には物体検出のアルゴリズムを用いて行なう．
4. 物体検出アルゴリズムで学習した結果を評価する．
画像認識アルゴリズムを用いる場合と同じく，学習データとなる画像をどのように作成すればよいか検証する．

(1) プログラムの不具合を推論した数を計測する(2) プログラムで実際に不具合対応された数を計測する(3) プログラムの不具合を推論した数のうち，プログラムで実際に不具合対応された数を計測する

5. それぞれのアルゴリズムで作成した学習モデルで推論した結果を比較および評価する．

104

SEA

ソフトウェア・シンポジウム 2021 in 大分 (オンライン開催)(4) 計測結果を，適合率と再現率と F 値で評価する• 命令文：紫（800080）

それぞれのアルゴリズムで検証された結果を比較• 予約語：黒（000000）

し，推論の手法による違いを評価する．

• コメント：緑（008000）• モジュール名：明るい緑（太字）4. 結果• グローバル変数：ピンク

教師あり学習で，学習結果の評価と推論結果の評価を• ローカル変数：オレンジ（00A5FF）行うため，学習データと推論データを定性的、定量的に• コントロール名：ブラウン（2A2AA5）作成する．

• ユーザ関数，サブルーチン名：黒（000000）

4.1. 画像に変換されたソースコードを認識する学習モデル• ユーザ定義名：濃い青（太字、8B0000）

4.1.1• 文字列：濃い青（太字、8B0000）
色に続く括弧内はカラーコードである．

学習データの作成

画像認識アルゴリズムでは，色分けの種類に加えて，画像認識と物体検出の各アルゴリズムで行なう教師あ

背景色が白と黒の 2 種類，構文の色分けと併せて 4り学習で，学習モデルが認識する学習データを作成する．

種類の学習データを作成した．学習データの違いを，学習データは，以下の手順で作成する．

図 1 に示す．物体検出アルゴリズムでは，命令文な1. 学習データの収集．
同一プロジェクトの 575 本のプログラムより，5 人のプログラマが作成した 44 本を選択した．この 44本全てを教師あり学習に使用する．プログラムは，全て VisualBasic2008 で作成されている．
2. プログラムを画像に変換するため，構文の色分けを行う．
色分けのパターンで，教師あり学習の結果に変化があるか検証するため，2 種類のパターンを用意した．
色分けパターン 1• 命令文：青（FF0000）• 予約語：オレンジ（00A5FF）

どの色分けで 2 種類の学習データを作成している．

3. 変換したプログラム画像より学習データを作成．

(1) 画像認識アルゴリズムの教師あり学習で使用する学習データ
プログラムのソースコードを，B5 横のサイズに合わせて作成する．学習と推論は，255*255ピクセルに画像を縮小するため，これ以上のサイズでは判別が難しい．判別可能にするため，1 枚の画像に 30 行，フォントは MS ゴシッ
クで 6.8pt，1 行は 135 文字，1 行に収まらない場合は行を折り返す様にする．

• ユーザ関数，サブルーチン名：赤（0000FF）(2) 物体検出アルゴリズムの教師あり学習で使用する学習データ
プログラムのソースコードを，A4 横のサイズに合わせて作成する．学習と推論は，416*416ピクセルに画像を縮小するためである．判別可能にするため，1 枚の画像に 60 行，フォン
トは MS ゴシックで 9pt，1 行は 120 文字，1行に収まらない場合は行を折り返す様にする．

• ユーザ定義名：ブラウン（2A2AA5）

ソースコードの画像化にあたり，画像化のための• 文字列：紫（800080）ツールを作成した．不具合の修正前と修正後のソー• コメント：緑（008000）• モジュール名：明るい緑（太字、90EE90）• グローバル変数：濃い青（太字、8B0000）• ローカル変数：黒（000000）• コントロール名：ピンク（CBC0FF）

スコードを用意して，プログラムの内容を比較する．

色分けパターン 2

105

SEA

ソフトウェア・シンポジウム 2021 in 大分 (オンライン開催)

画像化されたソースコードは，画像 1 枚単位でフォルダに格納される．

図 2. アノテーション情報の違い

ルゴリズムではアノテーション情報は作成しない．
アノテーションデータは，学習するカテゴリと画像内の位置情報を記録している．データの作成には，フリーソフトである「labelImg」を使用する．アノテーションデータは以下の 2 通り作成する．

(1) 行全体を学習領域とするアノテーション情報(2) ソースコードの構文のみを学習領域とするアノテーション情報
アノテーション情報の設定方法の違いを図 2 に示す．
各アルゴリズムとも，教師あり学習の検証データはホールドアウト法で選択した．ホールドアウト法では，学習データの一部を検証のためのデータとして予め選択する．検証に使用されるデータが固定されるため，学習データ全体より，異なる見た目や行数の組み合わせが網羅されるよう検証に用いるデータを選択した．選択した検証データで，教師あり学習はクロスバリデーション（交差検証）を行う．

図 1. 画像認識アルゴリズムで学習に使用する学習データ

5. 学習データの件数．
教師あり学習では，学習データに正解のラベルを付与して学習を行なう．このラベルを学習のカテゴリとする．

4. 学習データのアノテーション情報を作成．
物体検出アルゴリズムを適用した深層学習で学習を行うため，学習するカテゴリと不具合の箇所であるソースコード片を紐づける必要がある．画像認識ア(1) 画像認識アルゴリズムで使用する学習データ

106

SEA

ソフトウェア・シンポジウム 2021 in 大分 (オンライン開催)• 学習カテゴリ
2 カテゴリ（不具合なし，不具合あり）• 学習に使用する画像の枚数
不具合あり 945 枚
不具合なし 545 枚• 検証に使用する画像の枚数
不具合あり 213 枚
不具合なし 109 枚(2) 物体検出アルゴリズムで使用する学習データ• 学習カテゴリ
1 カテゴリ（不具合あり）

図 3. 学習経過の違い• 学習に使用する画像の枚数
863 枚を行なった結果，全結合層で，Flatten [1] で• 検証に使用する画像の枚数
98 枚使用することで，過学習のない学習結果を示はなく Global Average Pooling(GAP) [2] をすようになった．学習の経過の違いを，図 3 に示す．

4.1.2

図 3 のグラフは，縦軸が適合率，横軸が学習学習結果回数である．青い線は学習データのうち学習1. 各アルゴリズムによる教師あり学習を行う．に使用したデータの適合率，オレンジの線は(1) 画像認識アルゴリズムによる学習結果学習は，学習済みデータセットである VGG16 [1] の，最後の畳み込み層である BLOCK5 と全結合層を，研究で使用する学習データで学習した．
最終結合層を，softmax 関数で 2 カテゴリの出力として学習している．学習の結果，学習モデルが反応しないか過学習となった．学習が正しく行われるよう，学習のパラメータをチューニングした．学習で試行したパラメー
タの変更を以下に示す．
• Data Augmentation
height_shift_range，
channel_shift_range，brightness_range，mix_up，random_crop，random_eraser

検証に使用したデータの適合率である．青い線とオレンジの線が共に右上がりのグラフが良い学習結果であり，過学習ではオレンジの線である検証用データの適合率が向上しない．

Global Average Pooling を使用した学習モデ
ルが，Flatten を使用する方法より過学習を抑制していると判断した．プログラムを画像化して学習する場合に，学習データのうち検証に使用したデータ（validation）の適合率が向上していることが図 3 より確認できるためである．
試行した結果，教師ありに使用するモデルとパラメータを以下に示す．
i. 最終結合層のモデル
GlobalAveragePooling2D()(x)
Dense(256, activation=’relu’)(x)Dropout(0.5)(x)
出力は、softmax 関数を使用する．

• 学習のコンパイルパラメータ
Optimizer（SGD，Adam），L2 ノルム正則
化

ii. Data Augmentation
channel_shift_range，brightness_range，mix_up，random_eraser

学習のパラメータチューニングを行なった結果，過学習を解決することは出来なかった．
学習のパラメータで解決できなかったため，モデルのチューニングを行なった．チューニング

107

SEA

ソフトウェア・シンポジウム 2021 in 大分 (オンライン開催)

iii. 学習パラメータ
Optimizer SGD．lr=0.00002，
nesterov=True，decay=1e-6

表 2. 学習結果
色分けパターン

学習のカテゴリは，不具合ありと不具合なしの 2 カテゴリである．

4 種類の学習データで学習した結果，表 3 の通りであった．

アノテーション適合率（mAP）

平均 IoU

パターン 1

行全体0.950.66

パターン 1

構文00

パターン 2行全体

0.950.65

パターン 2構文00

表 1. 学習結果

は学習回数が 2,000 回の時点の成績が良い結果となった．学習カテゴリは，1 つであるため，色分けパターン

背景学習の適合率

検証の適合率パターン 1

白0.690.65

値の 2,000 回であるため問題ないと判断した．

パターン 1

黒0.690.64

学習は，行全体を学習領域とした場合に，学パターン 2

白0.670.65

習が行なわれている．構文のみを学習領域とパターン 2

黒0.700.60

した場合は，学習が進まなかった．推論には，学習回数の推奨値は 2,000 回 [6] である．推奨

色分けパターン 1 でアノテーションに行全体学習を行なった結果，色分けパターンと背景色を学習領域として教師あり学習を行なった結の組み合わせは，プログラムのソースコード

果の学習モデルを用いた．

を画像に変換して教師あり学習する場合，学4.2. 学習モデルを用いた推論処理

習結果に大きな違いはなかった．推論には，色分けパターン 1 で背景色が白である学習デー

各アルゴリズムで教師あり学習した結果のモデルを使タを用いて教師あり学習を行なった結果の学用して，被験者として選択した，5 人のプログラマが作習モデルを用いた．

(2) 物体検出アルゴリズムによる学習結果学習は，物体検出アルゴリズムである YOLOv3 を使用して行う．学習データは，色分けを行なった 2種類のデータに，アノテーション情報で行全体と構文のみの 2 種類，合わせて 4 種類の学習を行なった．学習データのカテゴリは，不具合ありの 1 カテゴリである．学習のパラメー
タのチューニングは 1 カテゴリとしたことによる変更を行なっている．
4 種類の学習データで学習した結果，表 5 の通りであった．適合率（mAP）は全カテゴリの平均適合率であり，平均 IoU は検出したバウンディングボックスが正確に対象を囲んでいる割合で 0.5 以上 [6] が目安である．学習回数は，1 学習カテゴリあたりで，2,000 回以上が推奨されている [6]．学習の経過を確認するため，推奨値を超える 5,000 回で学習を行なった．
適合率，平均 IoU は，平均 IoU が一番高い数値を出した時点の数値である．適合率，再現率108

成したプログラムを使用して，不具合の可能性を推論した．
被験者のプログラムの推論データの規模を以下に示す．

1. 画像認識アルゴリズムで使用する推論データ被験者のプログラムの規模を表 3 に示す．
表 3. 画像認識アルゴリズムの被験者のプログラムの規模
No プログラムの行数推論する画像の枚数

a89718b1,669

19c3,47161d7,143138

e12,538221

2. 物体検出アルゴリズムで使用する推論データ被験者のプログラムの規模を表 4 に示す．

SEA

ソフトウェア・シンポジウム 2021 in 大分 (オンライン開催)

No
不具合判定数実際の不具合数
正解数

表 4. 物体検出アルゴリズムの被験者のプログラムの規模
No プログラムの行数推論する画像の枚数

a89714b1,66927c3,47161d7,143116e12,538

209…ソースコードに付与した連番…推論で不具合と判断した画像の枚数…不具合対応した画像の枚数…推論と不具合が一致した画像の枚数

図 4. 画像認識の推論結果
図 5. 物体検出の推論結果（閾値なし）

4.2.1

推論処理の結果

画像認識アルゴリズムによる推論の出力結果を，図 4単位で変更と確認を行ない，閾値を 0.8 に定め，推論のに示す．推論の結果は，カテゴリ別に合計が 1 になるよ結果とした．閾値を指定した出力結果を図 6 に示す

う出力される．数値の大きい方を推論の結果とした．

物体検出アルゴリズムによる推論の検証結果を，以下

画像認識アルゴリズムによる推論の検証結果を，以下のの表 6 に示す．

表 5 に示す．
表 6. 適合率・再現率・Ｆ値
表 5. 適合率・再現率・Ｆ値
No

不具合判定数実際の不具合数

正解数

適合率

再現率

Ｆ値

No

不具合判定数実際の不具合数

正解数

適合率

再現率

a8420.25

0.5

Ｆ値

0.335110.2

10.33

a8960.75

0.670.71

bb14

320.140.670.24

c9320.220.660.33

c2815

70.25

0.47

0.33

d38

1330.07

0.23

0.11

d18

13

30.17

0.23

0.19

e54

48

190.35

0.39

0.37

e91

59

410.450.690.55

また，物体検出アルゴリズムによる推論結果を，循環的物体検出アルゴリズムによる推論の出力結果を，図 5複雑度（Cyclomatic Complexity Number，以下 CCN）に示す．推論の結果は，不具合の可能性がある個所をバで計測した結果と比較した．循環的複雑度の基準値は C4

ウンディングボックスで囲むことで指摘する．バウンディ

Software Technology Reference Guide [11] で High Riskとなる 21 とした．比較した結果を，表 7 に示す．物体検

ングボックスが重複しなくなるまで，閾値の設定を 0.05

109SEA

ソフトウェア・シンポジウム 2021 in 大分 (オンライン開催)

4.3. 各アルゴリズムの推論結果の評価
各アルゴリズムがプログラムの不具合の可能性を推論した結果を比較した．

1. 画像認識アルゴリズムの推論結果の評価• F 値は最小 0.19 で最大 0.71
• 適合率，再現率では適合率が良い結果• 画像 1 枚に不具合が含まれていることを推論するため推論対象の範囲が広い
2. 物体検出アルゴリズムの推論結果の評価• F 値は最小 0.11 で最大 0.37
• 適合率，再現率では再現率が良い結果• 画像 1 枚のどこに不具合があるかを推論する
ため推論対象の範囲が狭い
図 6. 物体検出の推論結果（閾値あり）

比較した結果，全体の精度は画像認識アルゴリズムの方が，プログラムの不具合の可能性を推論する．しかし，物体検出アルゴリズムの方が，詳細に不具合の可能性を

表 7. 循環的複雑度の計測値と物体検出の推論結果推論することが出来ている．の比較
No

CCN が 21 以上の数

物体検出で一致しない数

一致せず正解した数

a121b120c530d6231e171975. 考察
5.1. 画像分析手法に用いるアルゴリズムでソースコー
ドの不具合を学習することは可能か
プログラムの構文の色分けを行い学習データを作成し出で一致しない数は，物体検出の推論した箇所の CCNたが，背景色や構文の色を変更しても学習結果に差が無が 21 未満となる件数，一致せず正解した数は物体検出いため，画像認識と物体検出の各アルゴリズムで色分けで一致しない数で物体検出が正解した件数である．物体の違いは，影響がないと考えられる．画像認識アルゴリ

検出で推論した結果，検出した行数の平均は，33 行でズムでは，学習モデルの全結合層に GAP [2] を使用する

分散は 18.23 であり，CCN が 21 以上の時の行数の平均ことで過学習を起こさなくなった．ソースコードを変換

は 405 行で分散は 51499.5 であった．

した画像は，画像分析手法で分析する動物や自然物と比較すると，画像の模様は単純である．GAP を使用する

4.2.2

ことで，教師あり学習の収束が緩やかになったことが，推論結果の傾向過学習を抑制した原因だと考えられる．物体検出アルゴ

各アルゴリズムで推論を行なった結果，画像認識アルリズムでは，学習させるプログラムの不具合の箇所を，ゴリズムで推論した方が精度（F 値）が高かった．適合率

インデントを含めて教師あり学習させることで過学習をと再現率では，画像認識アルゴリズムでは適合率が高く，起こさなくなった．ソースコードの構文を変換した画像

物体検出アルゴリズムでは再現率が高い結果となった．

は，インデントを含めることで，画像ごとの模様の複雑さが増し，インデントを含めない場合と比較して特徴を捉えやすくなると考えられる．画像分析手法に用いるア110

SEAソフトウェア・シンポジウム 2021 in 大分 (オンライン開催)

ルゴリズムでソースコードの不具合を学習することは，物体検出アルゴリズムでは，不具合のあるソース学習の経過から過学習が進みすぎる事なく学習された．

コードの構文を，インデントを含めて教師あり学習させることで学習を進めることができた．

5.2. 不具合の推論で認識された「怪しい箇所」は，実際の不具合の箇所を指摘したか• プログラムの不具合を推論することで認識されたプ
ログラムの「怪しい箇所」は，実際の不具合を認識できた箇所もあったが，出来ない箇所もあった．

各アルゴリズムで被験者のプログラムより，プログラムの不具合の可能性がある「怪しい箇所」を推論した結果，プログラムにある不具合の箇所を指摘することは，推論しやすい不具合と推論しにくい不具合があった．画

今後，課題を解決し，実システム開発で，レビューおよびテストを行う際に，本研究で推論した結果と比較および検証を行ない，工数の削減が可能になることを検証

像認識アルゴリズムの精度は最大で 0.71，物体検出アルしたい．

ゴリズムの精度は最大で 0.37 であった．どちらのアルゴリズムでも埋め込み SQL 文の推論がよくできており，構文の不具合はインデントが大きく変わるような場合に推論出来ているものがあるが，変数名など部分的な修正

参考文献[1] K.Simonyan, A.Zisserman: Very Deep Convolutional
Networks for Large-Scale Image Recognition, CoRR,
pp. 1409-1556, Apr. 2015.

がされている場合は推論できなかった．
プログラムの「怪しい箇所」は，完全ではないが，推[2] M.Lin, Q.Chen, S.Yan: Network In Network, International Conference on Learning Representations 2014,
Mar. 2014.

論しやすい不具合で最大 7 割指摘している．また，物体検出アルゴリズムでは循環的複雑度と比較して複雑ではない箇所を 9 箇所指摘した．メトリクスと組み合わせて[3] 近藤将成, 森啓太, 水野修, 崔銀恵: 深層学習による不具合混入コミットの予測と評価, ソフトウェアエンジニアリン
グシンポジウム 2017，pp. 35-45, Aug. 2017.

推論の精度を向上させることが考えられるが，これは課題となる．
しかし，プログラムの不具合を推論した結果は，偶然精度が高かった可能性を否定することが出来ていない．
偶然精度が高かった可能性を否定するため，全結合層に[4] 森崎 雅稔: ディープラーニング活用事例と使いこなしの勘所：［最適化・推論分野］6．AI によるソースコードのレ
ビュー -ディープラーニングでコードの美しさを診断する-,
情報処理, Vol.59, number.11, pp. 985-988, Oct. 2018.
[5] K.Ogawa, T.Nakatani: Predicting Fault Proneness ofPrograms with CNN, 11th International Conference on
Agents and Artiﬁcial Intelligence, Vol.1, pp. 321-328,
Feb. 2019.

ランダムフォレストを適用し，Boruta パッケージで判別に寄与しない特徴量を意図的に与え特徴を選択させることが考えられるが，学習モデルに適用することと，実[6] J.Redmon, S.Divvala, R.Girshick, A.Farhadi: You Only
Look Once:Uniﬁed, Real-Time Object Detection, University of Washington, Allen Institute for AI, FacebookAI Research, May. 2016.

際にレビューワがソースコードから感じた不吉な匂いのする箇所と，各アルゴリズムで教師あり学習と推論をした結果が一致するか検証を行なうことは課題である．

[7] 下村哲司, 森岳志, 野中誠, 佐藤孝司: ソフトウェアメトリ
クスを用いた単体テストの品質リスク評価, ソフトウェア
品質シンポジウム (Web), A3-2, 2013.

6. まとめ[8] M.Fowler: Refactoring:Improving the Design of Existing Code Second Edition, Pearson Education, Inc, 2019.

我々は，プログラムの不具合は，ソースコードの構文の形に共通点があるとして，深層学習による画像分析手[9] 小川一彦，中谷多哉子: CNN-BI システムの複数モデルによる精度向上のための研究, ソフトウェア・シンポジウム
2020 論文集, pp.55-64, 2020.

法である画像認識と物体検出のアルゴリズムで分析することを提案した．画像認識アルゴリズムでは，不具合を含む箇所を，最大で 7 割，物体検出アルゴリズムでは，不具合を含む箇所を，最大で 4 割弱の精度で指摘できた．
本稿の問いに対する答えを以下に示す．

• 教師あり学習は，画像認識アルゴリズムではモデルの結合層に GAP を使用することが効果的であり，

111[10] T.J.McCabe: A Complexity Measure, IEEE Transactions on Software Engineering, Vol. SE-2, No. 4, pp.
308-320, Dec. 1976.
[11] J.T.Foreman, J.Gross, R.Rosenstein, D.Fisher,
K.Brune: C4 Software Technology Reference Guide: A
Prototype, Software Engineering Institute, pp.145-150,
Jan. 1997.

SEA