JP2018018197A - ソースコード評価プログラム - Google Patents
ソースコード評価プログラム Download PDFInfo
- Publication number
- JP2018018197A JP2018018197A JP2016146192A JP2016146192A JP2018018197A JP 2018018197 A JP2018018197 A JP 2018018197A JP 2016146192 A JP2016146192 A JP 2016146192A JP 2016146192 A JP2016146192 A JP 2016146192A JP 2018018197 A JP2018018197 A JP 2018018197A
- Authority
- JP
- Japan
- Prior art keywords
- difference
- source code
- vector
- description
- learning
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
【課題】ソースコードにおいてバグを含んでいる可能性の高い箇所を自動的に推定可能とする評価プログラムを提供する。
【解決手段】ソースコード評価装置10において、第1のソースコードと第1のソースコードの変更後の第2のソースコードとの差分となる記述を検出し、検出された差分の内容に基づいて、前記差分がバグの修正によるものであるか否かを判定する差分検出部11と、差分となる記述を字句に分割し、各字句の種別に応じて定義された数値を記述における各字句の順番で配列したベクトルを生成する生成部12と、前記ベクトルと差分検出部による判定結果との関係を学習する学習部13と、第3のソースコードのいずれかの記述について前記ベクトルを生成し、当該ベクトルと学習部による学習結果とに基づいて、記述にバグが含まれている可能性を評価する認識部15と、をコンピュータに実行させる。
【選択図】図2
【解決手段】ソースコード評価装置10において、第1のソースコードと第1のソースコードの変更後の第2のソースコードとの差分となる記述を検出し、検出された差分の内容に基づいて、前記差分がバグの修正によるものであるか否かを判定する差分検出部11と、差分となる記述を字句に分割し、各字句の種別に応じて定義された数値を記述における各字句の順番で配列したベクトルを生成する生成部12と、前記ベクトルと差分検出部による判定結果との関係を学習する学習部13と、第3のソースコードのいずれかの記述について前記ベクトルを生成し、当該ベクトルと学習部による学習結果とに基づいて、記述にバグが含まれている可能性を評価する認識部15と、をコンピュータに実行させる。
【選択図】図2
Description
本発明は、ソースコード評価プログラムに関する。
ソフトウェア開発において、バグの検出作業は、ソフトウェアの品質を確保するために重要な作業である。
一般的に、バグの検出は、開発者等によって作成されたテスト仕様書に基づくテストの実施により行われている。このような作業は、作業者に対する作業負担が大きく、効率性に難が有る。
そこで、従来、バグの検出を支援するための技術が検討されている(例えば、非特許文献1、非特許文献2)。
Y. Higo, K. Murao, S. Kusumoto, K. Inoue, "Predicting Fault-Prone Modules Based on Metrics Transitions", DEFECTS '08.
S. Kim, T. Zimmermann, E.J. Whitehead, and A. Zeller, "Predicting faults from cached history," ICSE '07.
しかしながら、上記の従来技術では、バグを含んでいそうな箇所を、行単位又は文単位等の詳細な単位で自動的に推定するのが困難であった。
本発明は、上記の点に鑑みてなされたものであって、ソースコードにおいてバグを含んでいる可能性の高い箇所を自動的に推定可能とすることを目的とする。
そこで上記課題を解決するため、ソースコード評価プログラムは、第1のソースコードと前記第1のソースコードの変更後の第2のソースコードとの差分となる記述を検出し、検出された差分の内容に基づいて、前記差分がバグの修正によるものであるか否かを判定する差分検出部と、前記差分となる記述を字句に分割し、前記各字句の種別に応じて定義された数値を前記記述における前記各字句の順番で配列したベクトルを生成する生成部と、前記ベクトルと前記差分検出部による判定結果との関係を学習する学習部と、第3のソースコードのいずれかの記述について前記ベクトルを生成し、当該ベクトルと前記学習部による学習結果とに基づいて、当該記述にバグが含まれている可能性を評価する評価部と、としてコンピュータを機能させる。
ソースコードにおいてバグを含んでいる可能性の高い箇所を自動的に推定可能とすることができる。
以下、図面に基づいて本発明の実施の形態を説明する。図1は、本発明の実施の形態におけるソースコード評価装置のハードウェア構成例を示す図である。図1のソースコード評価装置10は、それぞれバスBで相互に接続されているドライブ装置100、補助記憶装置102、メモリ装置103、CPU104、インタフェース装置105、表示装置106、及び入力装置107等を有する。
ソースコード評価装置10での処理を実現するプログラムは、CD−ROM等の記録媒体101によって提供される。プログラムを記憶した記録媒体101がドライブ装置100にセットされると、プログラムが記録媒体101からドライブ装置100を介して補助記憶装置102にインストールされる。但し、プログラムのインストールは必ずしも記録媒体101より行う必要はなく、ネットワークを介して他のコンピュータよりダウンロードするようにしてもよい。補助記憶装置102は、インストールされたプログラムを格納すると共に、必要なファイルやデータ等を格納する。
メモリ装置103は、プログラムの起動指示があった場合に、補助記憶装置102からプログラムを読み出して格納する。CPU104は、メモリ装置103に格納されたプログラムに従ってソースコード評価装置10に係る機能を実現する。インタフェース装置105は、ネットワークに接続するためのインタフェースとして用いられる。表示装置106はプログラムによるGUI(Graphical User Interface)等を表示する。入力装置107はキーボード及びマウス等で構成され、様々な操作指示を入力させるために用いられる。
図2は、本発明の実施の形態におけるソースコード評価装置の機能構成例を示す図である。図2において、ソースコード評価装置10は、差分検出部11、字句ベクトル生成部12、学習部13、評価対象解析部14、及び認識部15等を有する。これら各部は、ソースコード評価装置10にインストールされた1以上のプログラムが、CPU104に実行させる処理により実現される。ソースコード評価装置10は、また、VCSリポジトリ121、差分記憶部122、ラベル記憶部123、字句DB124、字句ベクトル記憶部125、及び学習情報記憶部126を利用する。これら各種記憶部は、例えば、メモリ装置103、補助記憶装置102、又はソースコード評価装置10にネットワークを介して接続可能な記憶装置等を用いて実現可能である。
VCSリポジトリ121は、非図示のバージョン管理システム(VCS(Version Control System))のリポジトリである。例えば、VCSリポジトリ121には、ソースコードのファイルとその変更履歴やリビジョン番号等が記憶されている。
差分検出部11は、VCSリポジトリ121に記憶されている情報に基づいて、ソースコードの変更前後(改版前後)の差分を検出する。検出された差分に関する情報は、差分記憶部122に記憶される。差分検出部11は、また、差分ごとに、当該差分の内容に基づいて、当該差分がバグの修正によるものであるか否かを判定し、判定結果を示すラベル(以下、「バグ修正有無ラベル」という。)を各差分に関連付けてラベル記憶部123に記憶する。
字句ベクトル生成部12は、差分記憶部122に記憶された各差分について、当該差分となる記述(ソースコード上の記述)を字句(トークン)に分割する。字句ベクトル生成部12は、各字句の種別に応じて定義された数値を、差分となる記述における各字句の順番で配列したベクトルを生成する。以下、当該ベクトルを「字句ベクトル」という。生成された字句ベクトルは、字句ベクトル記憶部125に記憶される。なお、字句の種別に応じて定義された数値は、字句DB124に記憶されている。
学習部13は、各字句ベクトルと、当該字句ベクトルの生成元の差分に関連付けられているバグ修正有無ラベルとの関係を学習し、学習結果を学習情報記憶部126に記憶する。
評価対象解析部14は、バグの有無の評価対象とされたソースコードの或る箇所(或る行、或る文、又は或る式等)について、字句ベクトルを生成する。
認識部15は、評価対象解析部14によって生成された字句ベクトルを、学習情報記憶部126に記憶されている学習結果に適用して、当該字句ベクトルに対応する箇所にバグが含まれている可能性を評価する。
以下、ソースコード評価装置10が実行する処理手順について説明する。図3は、学習処理の処理手順の一例を説明するためのフローチャートである。図3の処理手順は、例えば、ユーザによって学習実施の指示が入力されると開始される。
ステップS101において、差分検出部11は、或るプログラムの全てのソースコードについて、VCSリポジトリ121に記憶されている、改版前後の2つのリビジョンごとに差分を検出(抽出)し、検出された差分を差分記憶部122に記憶する。なお、差分は、例えば、diffの出力形式で生成されてもよい。
続いて、差分検出部11は、検出された差分ごとに、当該差分の内容に基づいて、当該差分がバグ修正によるものであるか否かを判定し、判定結果を示すバグ修正有無ラベルを当該差分に付与する(S102)。付与されたバグ修正有無ラベルは、各差分に関連付けられてラベル記憶部123に記憶される。差分とバグ修正有無ラベルとの関連付けは、例えば、差分記憶部122に記憶された各差分の識別情報(以下、「差分ID」という。)と、修正有無ラベルとの関連付けによって実現されてもよい。
図4は、差分の検出とバグ修正有無ラベルの付与とを説明するための図である。図4には、リビジョン1〜リビジョン6の変更履歴を有する或るソースコードについて、前後の2つのリビジョンごと(すなわち、変更前のリビジョンN及び変更後のリビジョンN+1ごと)に差分が検出される例が示されている。具体的には、リビジョン1とリビジョン2との差分として、差分d1が検出され、リビジョン2とリビジョン3との差分として、差分d2が検出され、リビジョン3とリビジョン4との差分として、差分d3が検出されている。
差分の内容は、追加された記述、削除された記述である。図4では、追加された記述に対しては「+」が付与され、削除された記述に対しては「−」が付与されている。なお、差分は、必ずしも行単位でなくてもよい。1文又は1つの式が複数行に跨る場合が有るからである。例えば、改行コードが検出されるまでの範囲を1つの単位として、当該単位ごとに差分が検出されてもよい。
また、図4では、各差分に対するバグ修正有無ラベルL1〜L3が示されている。バグ修正有無ラベルの値は、「バグ修正である」又は「バグ修正でない」のいずれかである。本実施の形態では、相互に対応する箇所について、減った記述と増えた記述の双方が存在する差分(すなわち、或る記述が他の記述に置き換わった箇所)について、「バグ修正である」と判定され、そうでない差分について、「バグ修正でない」と判定される。他の記述に置き換えられた箇所は、経験的にバグの修正である可能性が高いからである。
続いて、字句ベクトル生成部12は、差分記憶部122に記憶された差分ごとに、当該差分の内容(ソースコードの記述)について字句解析を行って、当該記述を字句(トークン)に分割する(S103)。なお、「バグ修正である」のバグ修正有無ラベルが付与された差分については、削除された記述と追加された記述とが含まれている。この場合、削除された記述が各字句に分割される。
続いて、字句ベクトル生成部12は、各字句について、当該字句の種別(識別子、変数の基本型、制御構造を表すキーワード、括弧など)に対応付けられて字句DB124に記憶されている数値を取得する(S104)。続いて、字句ベクトル生成部12は、取得された数値を、各字句の並び順に配列することで、字句ベクトルを生成し、当該字句ベクトルを字句ベクトル記憶部125に記憶する(S105)。各字句ベクトルは、生成元の差分の差分IDに関連付けられて字句ベクトル記憶部125に記憶される。
図5は、字句ベクトルの生成を説明するための図である。図5では、差分d2のうちの削除された記述が字句に分割され、各字句の種別(条件文、識別子)に対応した数値の配列が、字句ベクトルv2として生成される例が示されている。すなわち、字句ベクトルは、削除された記述について生成される。或る記述が他の記述に置き換えられた場合、当該或る記述(すなわち、削除された記述)にバグが含まれていた可能性が高いからである。
N個の字句から成る差分については、N次元の字句ベクトルが生成される。また、型や識別子等と、制御構造を表すキーワードや括弧等とで、数値には大きな差がつけられる。すなわち、ソースコードにおける関連性が相対的に高い各種別に対応する数値の違いが相対的に小さくなり、ソースコードにおける関連性が相対的に低い各種別に対応する数値の違いが相対的に大きくなるように種別に応じた数値が字句DB124に定義されている。そうすることで、記述ごとのパターンの違いを顕著なものとすることができ、ソースコードの意味合いを定義付けることができる。
具体的には、図5では、制御構造を表す「if」の数値は、200であり、他の字句の数値と大きく異なっている。また、「(」と「)」とは、対応関係を有するため、それぞれに対応する数値は100、101であり、その差分は小さい。
続いて、学習部13は、差分ごとに、字句ベクトル及びバグ修正有無ラベルの組を、学習アルゴリズムに入力し、字句ベクトルとバグ修正有無ラベルとの関係を学習する(S106)。すなわち、ソースコードの記述のパターンと、バグの有無との関係が学習される。学習部13は、学習結果を学習情報記憶部126に記憶する。なお、学習は、例えば、教師あり二値分類器を利用して行われる。
図6は、字句ベクトルとバグ修正有無ラベルとの関係の学習を説明するための図である。図6では、差分d2について生成された字句ベクトルv2と、差分d2に対して付与されたバグ修正有無ラベルL2との関係が学習されて、学習結果が学習情報記憶部126に記憶される例が示されている。
例えば、教師あり二値分類器においてニューラルネットワークが用いられる場合、図7に示されるようなニューラルネットワークを規定するパラメータ(係数)が、学習情報記憶部126に記憶される。なお、ニューラルネットワークについては、例えば、「Rumelhart, David E.; Hinton, Geoffrey E.; Williams, Ronald J. (8 October 1986). "Learning representations by back-propagating errors". Nature 323 (6088): 533-536.」に詳しい。
なお、学習部13は、字句ベクトルの次元数が、二値分類器の入力次元数(図7では64字句)に足りないときは、字句ベクトルを中央に寄せて左右をゼロで埋めることで、字句ベクトルの次元数を拡張する。また、学習部13は、字句ベクトルの次元数が、二値分類器の入力次元数よりも多いときは、字句ベクトルの中央に配置されている数値から前後方向に入力次元数分の字句を抽出することで、字句ベクトルの次元数を縮小する。すなわち、ソースコードの各行の長さにばらつきがあるところ、ソースコードとしての特徴は一部であっても捉えることができる。また、中央寄せにより、重要度の高い情報を中央に寄せることができるため、主要な特徴を反映させることで、精度の高い学習を行うことができる。
次に、学習情報記憶部126に記憶された学習結果に基づいて、或るソースコードについて、バグの有無の可能性を評価する処理について説明する。
図8は、ソースコードの評価処理の処理手順の一例を説明するためのフローチャートである。例えば、ユーザによって評価対象のソースコードが指定されて、評価の開始指示が入力されると、図8の処理が開始される。
ステップS201において、評価対象解析部14は、評価対象のソースコードから所定の単位の記述(以下、「対象記述」という。)を入力する。所定の単位は、例えば、改行コードによって区分される単位である。
続いて、評価対象解析部14は、対象記述について字句ベクトルを生成する(S202)。字句ベクトルの生成方法は、上記した通りである。
続いて、認識部15は、生成された字句ベクトルに対して、学習情報記憶部126の学習結果を適用して、対象記述がバグを含んでいる可能性(バグの潜在可能性)を評価する(S203)。例えば、図7に示されるようなニューラルネットワークに対して、対象記述が入力されてもよい。この場合、認識部15は、字句ベクトルの次元数が、二値分類器の入力次元数(図7では64字句)に足りないときは、字句ベクトルを中央に寄せて左右をゼロで埋めることで、字句ベクトルの次元数を拡張する。また、認識部15は、字句ベクトルの次元数が、二値分類器の入力次元数よりも多いときは、字句ベクトルの中央を取り出すことで、字句ベクトルの次元数を縮小する。
なお、評価対象のソースコードが新規のソースコードである場合、図8の処理手順は、当該ソースコードの各記述に対して最初から順番に実行されてもよい。一方、既存のソースコードに対して修正が行われた場合、修正された一部の記述に対して図8の処理が実行されてもよい。修正された記述は、ユーザによって指定されればよい。
上述したように、本実施の形態によれば、プログラムの製造開始以降に、ソースコードにおいてバグを含んでいる可能性の高い箇所を自動的に推定可能とすることができる。その結果、例えば、大規模ソフトウェアの開発においては、開発期間短縮等を可能とし、生産性の向上を期待することができる。
なお、本実施の形態において、字句ベクトル生成部12は、生成部の一例である。認識部15は、評価部の一例である。
以上、本発明の実施例について詳述したが、本発明は斯かる特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
10 ソースコード評価装置
11 差分検出部
12 字句ベクトル生成部
13 学習部
14 評価対象解析部
15 認識部
100 ドライブ装置
101 記録媒体
102 補助記憶装置
103 メモリ装置
104 CPU
105 インタフェース装置
121 VCSリポジトリ
122 差分記憶部
123 ラベル記憶部
124 字句DB
125 字句ベクトル記憶部
126 学習情報記憶部
B バス
11 差分検出部
12 字句ベクトル生成部
13 学習部
14 評価対象解析部
15 認識部
100 ドライブ装置
101 記録媒体
102 補助記憶装置
103 メモリ装置
104 CPU
105 インタフェース装置
121 VCSリポジトリ
122 差分記憶部
123 ラベル記憶部
124 字句DB
125 字句ベクトル記憶部
126 学習情報記憶部
B バス
Claims (3)
- 第1のソースコードと前記第1のソースコードの変更後の第2のソースコードとの差分となる記述を検出し、検出された差分の内容に基づいて、前記差分がバグの修正によるものであるか否かを判定する差分検出部と、
前記差分となる記述を字句に分割し、前記各字句の種別に応じて定義された数値を前記記述における前記各字句の順番で配列したベクトルを生成する生成部と、
前記ベクトルと前記差分検出部による判定結果との関係を学習する学習部と、
第3のソースコードのいずれかの記述について前記ベクトルを生成し、当該ベクトルと前記学習部による学習結果とに基づいて、当該記述にバグが含まれている可能性を評価する評価部と、
としてコンピュータを機能させることを特徴とするソースコード評価プログラム。 - ソースコードにおける関連性が相対的に高い前記各種別に対応する数値の違いが相対的に小さくなり、ソースコードにおける関連性が相対的に低い前記各種別に対応する数値の違いが相対的に大きくなるように前記種別に応じた数値が定義されている、
ことを特徴とする請求項1記載のソースコード評価プログラム。 - 前記学習部は、前記ベクトルの中央に配置されている数値から前後方向に所定数の数値を抽出し、抽出された数値のベクトルと前記差分検出部による判定結果との関係を学習する、
ことを特徴とする請求項1又は2記載のソースコード評価プログラム。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2016146192A JP2018018197A (ja) | 2016-07-26 | 2016-07-26 | ソースコード評価プログラム |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2016146192A JP2018018197A (ja) | 2016-07-26 | 2016-07-26 | ソースコード評価プログラム |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JP2018018197A true JP2018018197A (ja) | 2018-02-01 |
Family
ID=61076219
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP2016146192A Pending JP2018018197A (ja) | 2016-07-26 | 2016-07-26 | ソースコード評価プログラム |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JP2018018197A (ja) |
Cited By (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2020129371A (ja) * | 2019-02-07 | 2020-08-27 | 富士通株式会社 | 自動化されたソフトウェアプログラム修復 |
| KR102156931B1 (ko) * | 2020-01-16 | 2020-09-16 | 주식회사 소프트센 | 블록 코딩된 프로그램 코드의 평가 장치, 시스템, 방법 및 기록 매체에 저장된 프로그램 |
| CN114816963A (zh) * | 2022-06-28 | 2022-07-29 | 南昌航空大学 | 嵌入式软件质量评估方法、系统、计算机及可读存储介质 |
| JP2023159595A (ja) * | 2022-04-20 | 2023-11-01 | 株式会社日立製作所 | ソースコード判定モデル作成装置、ソースコード判定装置、ソースコード判定モデル作成方法、ソースコード判定方法、及びソースコード判定システム |
-
2016
- 2016-07-26 JP JP2016146192A patent/JP2018018197A/ja active Pending
Cited By (6)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2020129371A (ja) * | 2019-02-07 | 2020-08-27 | 富士通株式会社 | 自動化されたソフトウェアプログラム修復 |
| KR102156931B1 (ko) * | 2020-01-16 | 2020-09-16 | 주식회사 소프트센 | 블록 코딩된 프로그램 코드의 평가 장치, 시스템, 방법 및 기록 매체에 저장된 프로그램 |
| JP2023159595A (ja) * | 2022-04-20 | 2023-11-01 | 株式会社日立製作所 | ソースコード判定モデル作成装置、ソースコード判定装置、ソースコード判定モデル作成方法、ソースコード判定方法、及びソースコード判定システム |
| JP7765342B2 (ja) | 2022-04-20 | 2025-11-06 | 株式会社日立製作所 | ソースコード判定モデル作成装置、ソースコード判定装置、ソースコード判定モデル作成方法、ソースコード判定方法、及びソースコード判定システム |
| CN114816963A (zh) * | 2022-06-28 | 2022-07-29 | 南昌航空大学 | 嵌入式软件质量评估方法、系统、计算机及可读存储介质 |
| CN114816963B (zh) * | 2022-06-28 | 2022-09-20 | 南昌航空大学 | 嵌入式软件质量评估方法、系统、计算机及可读存储介质 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US12020134B2 (en) | Debugging correctness issues in training machine learning models | |
| US10782966B2 (en) | Artificially intelligent self-learning software operating program | |
| CN112148275A (zh) | 用于改进的软件开发效率的上下文和复杂度感知推荐系统的方法、系统、制品和装置 | |
| US11263113B2 (en) | Cloud application to automatically detect and solve issues in a set of code base changes using reinforcement learning and rule-based learning | |
| US20150220331A1 (en) | Resolving merge conflicts that prevent blocks of program code from properly being merged | |
| US8032232B2 (en) | Natively retaining project documentation in a controller | |
| US20240311549A1 (en) | Systems and methods for language model-based text editing | |
| US10379992B2 (en) | Adaptive dynamic code analysis | |
| US20220198269A1 (en) | Big automation code | |
| JP2017041171A (ja) | テストシナリオ生成支援装置およびテストシナリオ生成支援方法 | |
| JP2018018197A (ja) | ソースコード評価プログラム | |
| CN114116441A (zh) | 一种ui界面测试方法、装置、电子设备及存储介质 | |
| EP4579504A1 (en) | Large language model-based software reverse engineering assistant | |
| JP2019021037A (ja) | ソースコード評価装置、ソースコード評価方法及びソースコード評価プログラム | |
| EP4352608A1 (en) | Collaborative industrial integrated development and execution environment | |
| EP4200749A2 (en) | Method and system for evaluating consistency of an engineered system | |
| EP4396743A1 (en) | Maintenance data sanitization | |
| CN119168012A (zh) | 基于大语言模型的强化学习奖励函数生成方法及装置 | |
| US20250004910A1 (en) | Automated software testing using natural language-based form completion | |
| CN115858556A (zh) | 一种数据处理方法、装置、存储介质及电子设备 | |
| US11531694B1 (en) | Machine learning based improvements in estimation techniques | |
| JP2023031614A (ja) | 変更度計測装置、方法及びプログラム | |
| US12360754B2 (en) | Refining software package installation processes using configuration management files | |
| CN114489774B (zh) | 网页应用打包方法、装置、设备及存储介质 | |
| JP7261101B2 (ja) | 欠陥検出装置、欠陥検出方法、及び欠陥検出プログラム |