JP2023159595A - ソースコード判定モデル作成装置、ソースコード判定装置、ソースコード判定モデル作成方法、ソースコード判定方法、及びソースコード判定システム - Google Patents

ソースコード判定モデル作成装置、ソースコード判定装置、ソースコード判定モデル作成方法、ソースコード判定方法、及びソースコード判定システム Download PDF

Info

Publication number
JP2023159595A
JP2023159595A JP2022069374A JP2022069374A JP2023159595A JP 2023159595 A JP2023159595 A JP 2023159595A JP 2022069374 A JP2022069374 A JP 2022069374A JP 2022069374 A JP2022069374 A JP 2022069374A JP 2023159595 A JP2023159595 A JP 2023159595A
Authority
JP
Japan
Prior art keywords
source code
edited
editing
determination
vector
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
Application number
JP2022069374A
Other languages
English (en)
Inventor
敦介 新原
Atsusuke Niihara
恭平 小山
Kyohei Koyama
直人 佐藤
Naoto Sato
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2022069374A priority Critical patent/JP2023159595A/ja
Publication of JP2023159595A publication Critical patent/JP2023159595A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

Figure 2023159595000001
【課題】複雑な編集操作によりソースコードに生じた不具合を検出する技術を提供する。
【解決手段】ソースコード判定モデル作成装置10は、編集される前のソースコード及び編集された後のソースコードと、編集により編集された後のソースコードに不具合が生じたか否かを示す教師情報とを記憶するデータ蓄積部、編集される前のソースコードから編集された後のソースコードへの編集過程を特定する学習用グラフ編集操作列生成部、特定した編集過程をベクトル化した情報である編集操作列ベクトルを作成し、編集される前のソースコードをベクトル化した情報である編集前ソースコードベクトルを作成する学習用グラフ編集操作列ベクトル化部及び編集操作列ベクトルと、編集前ソースコードベクトルと、教師情報との間の関係を記憶した学習済みモデルを作成する学習部108を備える。
【選択図】図2

Description

本発明は、ソースコード判定モデル作成装置、ソースコード判定装置、ソースコード判定モデル作成方法、ソースコード判定方法、及びソースコード判定システムに関する。
ソフトウェアの不具合は、そのソースコードの編集における操作ミスに起因することが多い。ソースコードの編集(本明細書では、編集とは、リポジトリへの1コミットの記録といった、ある作業単位の編集を指す)は通常、複数の意図をもってなされることが多いため(Tangled Changes)、ソースコードの編集は複数の操作を含むこととなる。そして
、ソフトウェアの予期せぬ不具合は、このような複数の操作を含んだ編集が原因となっていることが多い。
ここで、ソースコードの解析に関連した技術として、特許文献1には、関数をファイル間で移動したりファイルをフォルダ間で移動することによってコンピュータプログラムにおける依存関係を改善するべく、情報処理装置が、関数やファイルの依存関係の改善案を作成し(GA部)、改善された依存関係の評価(AI部)、及び改善された依存グラフの出力を自動的に行うことが開示されている。
また、特許文献2には、ソースコードのバグを判定すべく、ソースコード評価装置が、ソースコードの変更前後の差分における各字句の種別に応じて定義された数値を、差分の記述における各字句の順で配列したベクトルを生成することで機械学習を行い、評価対象のソースコードに対して、所定の個数の字句が含まれるウインドウを設定し、ウインドウに含まれる各字句についてベクトルを生成し、生成したベクトルと学習結果とに基づいて、ウインドウ内の記述にバグが含まれている可能性を評価することが記載されている。
特開2021-81913号公報 特開2019-21037号公報
特許文献1では、ソースコードをグラフ化することでソースコードの評価を行っているが、ソースコードの変更に対する評価を行うものではない。一方で、特許文献2では、ソースコードの差分の字句をベースに機械学習を行ってバグの判定を行っているが、複数の意図(操作)がソースコードの差分に含まれている場合は、これを評価することができない。このように、ソースコードに対する種々の編集を適切に評価する技術は充分に蓄積されていない。
本発明は、このような事情に鑑みてなされたものであり、その目的は、複雑な編集操作によりソースコードに生じた不具合を検出することが可能なソースコード判定モデル作成装置、ソースコード判定装置、ソースコード判定モデル作成方法、ソースコード判定方法、及びソースコード判定システムを提供することを目的とする。
上記課題を解決するための本発明の一つは、編集される前のソースコード及び編集され
た後のソースコードと、編集により前記編集された後のソースコードに不具合が生じたか否かを示す教師情報とを記憶する記憶装置、及び前記編集される前のソースコードから前記編集された後のソースコードへの編集過程を特定し、特定した編集過程をベクトル化した情報である編集操作列ベクトルを作成し、前記編集される前のソースコードをベクトル化した情報である編集前ソースコードベクトルを作成し、前記編集操作列ベクトルと、前記編集前ソースコードベクトルと、前記教師情報との間の関係を記憶した学習済みモデルを作成する処理装置を備える、ソースコード判定モデル作成装置、である。
また、上記課題を解決するための本発明の他の一つは、編集される前のソースコードから編集された後のソースコードへの編集過程をベクトル化した情報である編集操作列ベクトルと、前記編集される前のソースコードをベクトル化した情報である編集前ソースコードベクトルと、編集により前記編集された後のソースコードに不具合が生じたか否かを示す教師情報との間の関係を記憶した学習済みモデルを記憶する記憶装置、及び、ユーザから、編集される前のソースコードである判定用編集前ソースコードと、編集された後のソースコードである判定用編集後ソースコードとの入力を受け付け、前記判定用編集前ソースコードから前記判定用編集後ソースコードへの編集過程を特定し、特定した編集過程をベクトル化した情報である判定用編集操作列ベクトルを作成し、前記判定用編集前ソースコードをベクトル化した情報である判定用編集前ソースコードベクトルを作成し、前記学習済みモデルに、前記判定用編集操作列ベクトル及び前記判定用編集前ソースコードベクトルを入力することにより、前記判定用編集後ソースコードに不具合が生じたか否かを示す情報を出力させる処理装置を備える、ソースコード判定装置である。
本発明によれば、複雑な編集操作によりソースコードに生じた不具合を検出することができる。
上記した以外の構成及び効果等は、以下の実施形態の説明により明らかにされる。
本実施形態に係るソースコード判定システムの構成の一例を示す図である。 ソースコード判定モデル作成装置が備える機能部の一例を説明する図である。 ソースコード判定装置が備える機能部の一例を説明する図である。 ソースコード判定モデル作成装置が備えるハードウェアの一例を示す図である。 ソースコード判定システムで行われる処理の概要を説明する図である。 学習処理を説明するフロー図である。 学習用編集前ソースコードの一例を示す図である。 学習用編集後ソースコードの一例を示す図である。 学習用編集前ソースコードから作成されたAST(編集前AST)の一例を示す図である。 図8に示した学習用編集後ソースコードから作成されたAST(編集後AST)の一例を示す図である。 図9、10に示した編集前AST及び編集後ASTから作成された学習用グラフ編集操作列の一例を示す図である。 バグが存在する学習用編集後ソースコードの他の一例を示す図である。 図12に示した学習用編集後ソースコードから作成された学習用編集後ASTの一例を示す図である。 図9、13に示した学習用編集前AST及び学習用編集後ASTから作成された学習用グラフ編集操作列の一例を示す図である。 バグが存在しない学習用編集後ソースコードの一例を示す図である。 図15に示した学習用編集後ソースコードから作成された学習用編集後ASTの一例を示す図である。 図9、16に示した学習用編集前AST及び学習用編集後ASTから作成された学習用グラフ編集操作列の一例(一部)を示す図である。 バグが存在しない学習用編集後ソースコードの他の一例を示す図である。 図18に示した学習用編集後ソースコードから作成された編集後ASTの一例を示す図である。 図9、19に示した学習用編集前AST及び学習用編集後ASTから作成された学習用グラフ編集操作列の一例(一部)を示す図である。 図20で示したグラフ編集操作列Dを編集操作列ベクトルに変換した例を示す。 ソースコード判定モデルの学習方法の一例を説明する図である。 判定処理を説明するフロー図である。
本発明の実施の形態を、図面を参照しつつ説明する。
図1は、本実施形態に係るソースコード判定システム1の構成の一例を示す図である。ソースコード判定システム1は、ソースコードに存在する不具合の有無を判定するための学習済みモデルであるソースコード判定モデルを作成するソースコード判定モデル作成装置10、ソースコードを開発するユーザが使用するユーザ端末20、及び、ソースコード判定モデルを用いてユーザが指定したソースコードの不具合の有無を判定するソースコード判定装置30の各情報処理装置を含んで構成されている。
ソースコード判定モデル作成装置10、ユーザ端末20、及びソースコード判定装置30の間は、例えば、インターネット、LAN(Local Area Network)、WAN(Wide Area Network)、又は専用線等の有線又は無線の通信ネットワーク5により通信可能となっ
ている。
図2は、ソースコード判定モデル作成装置10が備える機能部の一例を説明する図である。
ソースコード判定モデル作成装置10は、学習用編集前ソースコード入力部101、学習用編集後ソースコード入力部102、学習用ソースコードグラフ化部103、学習用グラフ編集操作列生成部104、学習用グラフ編集操作列ベクトル化部105、教師情報入力部106、データ蓄積部107、及び学習部108の各機能部を備える。
学習用編集前ソースコード入力部101は、ユーザが過去に作成したソースコードのうち、編集を行う前のソースコード(以下、学習用編集前ソースコードという)の入力を受け付ける。なお、本実施形態で編集とは、レポジトリへのコミット単位でのソースコードの変更(すなわち、複数の編集操作(追加、削除、変更、移動等)を含んでいる)を意味するものとする。
なお、ソースコードは、1又は複数の処理群の記述(以下、処理ブロックという)からなる。各処理ブロックは、1又は複数の処理の記述から構成される。また、処理ブロック間には、一定の論理的関係(例えば、一方の処理ブロックが他方の処理ブロックに依存する(親要素及び子要素の関係)、又は、一方の処理ブロックが他方の処理ブロックを包含する)が存在する。
学習用編集後ソースコード入力部102は、ユーザが過去に作成したソースコードのうち、編集を行った後のソースコード(以下、学習用編集後ソースコードという)の入力を受け付ける。
学習用ソースコードグラフ化部103は、学習用編集前ソースコード及び学習用編集後ソースコードのそれぞれをグラフ化したデータ(以下、それぞれ学習用編集前ソースコードグラフデータ及び学習用編集後ソースコードグラフデータという)を生成する。これらのグラフ化したデータは、ノード及びエッジの集合で構成されるデータである。ノードは処理(又は処理ブロック)に対応し、エッジは処理間(又は処理ブロック間)の論理的関係に対応する。
学習用グラフ編集操作列生成部104は、学習用編集前ソースコードグラフデータ及び学習用編集後ソースコードグラフデータに基づき、学習用編集前ソースコードから学習用編集後ソースコードへの編集過程を示す情報(以下、学習用グラフ編集操作列という)を生成する。学習用グラフ編集操作列は、本実施形態では、編集の種類及びその編集対象の組み合わせを含んだ離散データである。
学習用グラフ編集操作列ベクトル化部105は、学習用グラフ編集操作列をベクトル化したデータ(以下、学習用編集操作列ベクトルという)を作成する。
また、学習用グラフ編集操作列ベクトル化部105は、学習用編集前ソースコードグラフデータをベクトル化したデータ(以下、学習用編集前ソースコードベクトルという)を作成する。
教師情報入力部106は、編集前ソースコードから編集後ソースコードへの編集により、ソースコードに不具合(バグ)が生じたか否かを示す情報(以下、教師情報という)の入力を受け付ける。
データ蓄積部107は、学習用編集操作列ベクトル、学習用編集前ソースコードベクトル、及び教師情報を記憶する。
学習部108は、所定の機械学習を行うことで、学習用編集操作列ベクトルと、学習用編集前ソースコードベクトルと、学習用教師情報との間の関係を記憶した学習済みモデルを作成する。
次に、図3は、ソースコード判定装置30が備える機能部の一例を説明する図である。
ソースコード判定装置30は、判定用編集前ソースコード入力部301、判定用編集後ソースコード入力部302、判定用ソースコードグラフ化部303、判定用グラフ編集操作列生成部304、判定用グラフ編集操作列ベクトル化部305、判定部306、及び結果出力部307の各機能部を備える。
判定用編集前ソースコード入力部301は、ユーザが行ったソースコードの編集に関して、その編集を行う前のソースコード(以下、判定用編集前ソースコードという)の入力を受け付ける。
判定用編集後ソースコード入力部302は、ユーザが行ったソースコードの編集に関して、その編集を行った後のソースコード(以下、判定用編集後ソースコードという)の入力を受け付ける。
判定用ソースコードグラフ化部303は、編集前ソースコード及び編集後ソースコードのそれぞれをグラフ化したデータ(以下、それぞれ、判定用編集前ソースコードグラフデータ及び判定用編集後ソースコードグラフデータという)を生成する。このグラフ化したデータは、ノード及びエッジの集合で構成されるデータである。ノードは処理(又は処理
ブロック)に対応し、エッジは処理(又は処理ブロック)間の論理的関係に対応づけられる。
判定用グラフ編集操作列生成部304は、判定用編集前ソースコードグラフデータ及び判定用編集後ソースコードグラフデータに基づき、判定用編集前ソースコードから判定用編集後ソースコードへの編集過程を示す情報(以下、判定用グラフ編集操作列という)を生成する。判定用グラフ編集操作列は、本実施形態では、編集の種類及びその編集対象の組み合わせを含んだ離散データである。
判定用グラフ編集操作列ベクトル化部305は、判定用グラフ編集操作列をベクトル化したデータ(以下、判定用編集操作列ベクトルという)を作成する。
また、学習用グラフ編集操作列ベクトル化部105は、判定用編集前ソースコードグラフデータをベクトル化したデータ(以下、判定用編集前ソースコードベクトルという)を作成する。
判定部306は、ソースコード判定モデル作成装置10の学習部108が作成したソースコード判定モデルに、判定用編集前ソースコードベクトル及び判定用編集操作列ベクトルを入力することで、判定用編集前ソースコードの編集によって判定用編集後ソースコードに不具合(バグ)が生じたか否かを示す情報を出力する。
結果出力部307は、判定部306により出力された情報を画面に表示する。
ここで、図4は、ソースコード判定モデル作成装置10が備えるハードウェアの一例を示す図である。ソースコード判定モデル作成装置10は、CPU(Central Processing Unit)、DSP(Digital Signal Processor)、GPU(Graphics Processing Unit)、FPGA(Field-Programmable Gate Array)等の処理装置41(プロセッサ)と、ROM(Read Only Memory)、RAM(Random Access Memory)等の主記憶装置42(メモリ)と、HDD(Hard Disk Drive)、SSD(Solid State Drive)などの補助記憶装置43と、NIC(Network Interface Card)、無
線通信モジュール、USB(Universal Serial Interface)モジュール、又はシリアル通信モジュール等で構成される通信装置44と、マウスやキーボード等で構成される入力装置45と、液晶ディスプレイまたは有機EL(Electro-Luminescence)ディスプレイ等で構成される出力装置46とを備えていてもよい。なお、ユーザ端末20及びソースコード判定装置30も、ソースコード判定モデル作成装置10と同様のハードウェアを備える。
以上に説明したソースコード判定モデル作成装置10、ユーザ端末20、及びソースコード判定装置30の各情報処理装置の各機能部の機能は、処理装置が、主記憶装置又は補助記憶装置に格納されているプログラムを読み出して実行することにより実現される。また上記のプログラムは、例えば、記録媒体に記録して配布することができる。なお、各情報処理装置は、その全部または一部が、例えば、クラウドシステムによって提供される仮想サーバのように、仮想化技術やプロセス空間分離技術等を用いて提供される仮想的な情報処理資源を用いて実現されるものであってもよい。また、各情報処理装置によって提供される機能の全部または一部は、例えば、クラウドシステムがAPI(Application Programming Interface)等を介して提供するサービスによって実現してもよい。
次に、ソースコード判定システム1で行われる処理について説明する。
図5は、ソースコード判定システム1で行われる処理の概要を説明する図である。まず、ソースコード判定モデル作成装置10は、学習用編集前ソースコード及び学習用編集後ソースコードに基づきソースコード判定モデルを作成する、学習処理s10を実行する。
その後、ソースコード判定装置30は、判定用編集前ソースコード及び判定用編集後ソースコードの指定をユーザから受け付け、判定用編集前ソースコード及び判定用編集後ソースコードと、学習処理s10で作成したソースコード判定モデルとに基づき、判定用ソースコードの編集によって不具合(バグ)が生じているか否かを判定する判定処理s20を実行する。
なお、学習処理s10及び判定処理s20はそれぞれ、複数回繰り返し実行されもよい。
次に、学習処理s10の詳細を説明する。
<学習処理>
図6は、学習処理s10を説明するフロー図である。
まず、学習用編集前ソースコード入力部101は、ユーザから、学習用編集前ソースコードの入力を受け付ける(s101)。また、学習用編集後ソースコード入力部102は、ユーザから、学習用編集後ソースコードの入力を受け付ける(s102)。
例えば、ソースコード判定装置30は、ユーザ端末20に所定の入力画面を表示させ、ユーザから、学習用編集前ソースコード及び学習用編集後ソースコードの各ファイルの指定を受け付ける。
(学習用編集前ソースコード)
ここで、図7は、学習用編集前ソースコードの一例を示す図である。この学習用編集前ソースコード500には、変数の宣言、条件分岐、変数への値の代入、及び演算等の各処理が記述されている。なお、この学習用編集前ソースコード500では、変数を用いた条件分岐「if ( a > 1 )」に係る処理ブロック501の範囲内に、その変数に係る除算502「g = g / a ;」が記述されているため、この学習用編集前ソースコード500には、
変数aに関するバグは存在しない。
(学習用編集後ソースコード)
図8は、学習用編集後ソースコードの一例を示す図である。この学習用編集後ソースコード510では、図7の学習用編集前ソースコード500と比べると、除算512「g = g / a ;」が条件分岐「if ( a > 1 )」に係る処理ブロック511の外部に移動している
ため、この学習用編集後ソースコード510には変数aに関するバグが存在する。
次に、図6に示すように、学習用ソースコードグラフ化部103は、学習用編集前ソースコード及び学習用編集後ソースコードのそれぞれをグラフ化することで、学習用編集前ソースコードグラフデータ及び学習用編集後ソースコードグラフデータをそれぞれ作成する(s103、s104)。本実施形態では、学習用ソースコードグラフ化部103は、抽象構文木(AST:Abstract Syntax Tree)のグラフデータを作成するものとする。
(編集前AST)
図9は、学習用編集前ソースコードから作成されたAST(編集前AST)の一例を示す図である。この編集前AST520は、学習用編集前ソースコードから、処理内容を特定するために必要の無い記述(例えば、括弧、空白、コメント)を除去することで、処理間(又は処理ブロック間)の依存関係(例えば、ある処理の実行の有無が他の処理に依存する、ある処理で使用されている変数が他の処理で使用される)を抽出したデータである。
具体的には、この編集前AST520は、学習用編集前ソースコードの各処理に対応するノードの行521を含む。各ノードの行521には、その行521の処理が属する処理
ブロックに対応した量の字下げ522(タブ)がなされている。字下げ522の量が、他の処理ブロックとの論理的関係(例えば、親要素及び子要素の関係)を表す。
例えば、この編集前AST520では、図7に示した編集前ソースコードの除算502「g = g / a ;」の行に対応する行523(子要素)の字下げの量は、編集前ソースコー
ドの条件分岐「if ( a > 1 )」の行に対応する行524(親要素)の字下げの量よりも大きくなっている。また、除算502におけるセミコロンの情報は除去されている。
(編集後AST)
次に、図10は、図8に示した学習用編集後ソースコード510から作成されたAST(編集後AST)の一例を示す図である。この編集後AST530は、図9に示した編集前AST520と比べると、除算「g = g / a ;」の記述位置が後方に移動している(符
号531)。
以上のような編集前AST及び編集後ASTは、例えば、pythonのpycparserライブラ
リを使用して作成することができる。
また、ここで説明したASTによるグラフデータの作成方法は一例であり、例えば、プログラム依存グラフ(PDG:Program Dependence Graph)が用いられてもよい。
次に、図6に示すように、学習用グラフ編集操作列ベクトル化部105は、s103、s104で作成した学習用編集前ソースコードグラフデータ及び学習用編集後ソースコードグラフデータに基づき、学習用編集前ソースコードグラフデータから学習用編集後ソースコードグラフデータへの変更を示すグラフ編集操作列を作成する(s105)。
本実施形態では、学習用グラフ編集操作列は、編集操作の種類を示す第1情報と、その編集の対象となっている処理部分を示す第2情報とからなるものとする。そして、第1情報には、移動を示す"Move"、追加を示す"Add"、削除を示す"Remove"、及び、変数又は関
数等の名称の変更を示す"Rename"があるものとする。また、第2情報は、学習用編集前ソースコードグラフデータ又は学習用編集後ソースコードグラフデータの各処理の記述と同じであるものとする。
(学習用グラフ編集操作列)
ここで、図11は、図9、10に示した編集前AST520及び編集後AST530から作成された学習用グラフ編集操作列の一例を示す図である。この学習用グラフ編集操作列540(以下、グラフ編集操作列Aともいう)は、第1情報としての"Move"の記述部分541と、第2情報としての、記述位置が移動された除算「g = g / a ;」の処理ブロッ
クの記述部分542とを含む。
ここで、学習用編集後ソースコード、学習用編集後AST、及び学習用グラフ編集操作列の他の例を説明する。
(バグが存在する他のソースコード)
図12は、バグが存在する学習用編集後ソースコードの他の一例を示す図である。この学習用編集後ソースコード550では、学習用編集前ソースコード500の除算502「g = g / a ;」が複写された新たな除算551「g = g / a ;」が追加されている。しかし、この新たな除算551は条件分岐「if ( a > 1 )」に係る処理ブロック552の外側に複写されているため、この学習用編集後ソースコード550には、aに関するバグが存在
する。
図13は、図12に示した学習用編集後ソースコード550から作成された学習用編集後ASTの一例を示す図である。この学習用編集後AST560は、学習用編集前AST520にも存在していた除算「g = g / a ;」の処理の記述561と同じ記述562が、
後方の位置(具体的には、条件分岐「if ( a > 1 )」の外部)に追加されている。
図14は、図9、13に示した学習用編集前AST及び学習用編集後ASTから作成された学習用グラフ編集操作列の一例を示す図である。この学習用グラフ編集操作列570(以下、グラフ編集操作列Bともいう)は、処理の追加を示す"Add"(第1情報571)
と、追加の対象である処理部分(「g = g / a ;」)を示す第2情報572とを含む。
次に、バグが存在しない学習用編集後ソースコードについて説明する。
(バグが存在しないソースコード-1)
図15は、バグが存在しない学習用編集後ソースコードの一例を示す図である。この学習用編集後ソースコード580では、学習用編集前ソースコード500と比べると、新たな条件分岐「if ( a > 1 )」の処理ブロック581と、その処理ブロック581における新たな除算582「g = g / a ;」とが追加されている。そのため、この学習用編集後ソ
ースコード580にはバグが存在しない。
図16は、図15に示した学習用編集後ソースコードから作成された学習用編集後ASTの一例を示す図である。この学習用編集後AST590は、学習用編集前AST520と比べると、条件分岐「if ( a > 1 )」の処理ブロックの記述部分591が追加されると共に、その記述部分591には、字下げを加えた、除算「g = g / a ;」に対応する記述
部分592が存在する。
図17は、図9、16に示した学習用編集前AST及び学習用編集後ASTから作成された学習用グラフ編集操作列の一例(一部)を示す図である。この学習用グラフ編集操作列600(以下、グラフ編集操作列Cともという)は、追加を示す"Add"(第1情報60
1)と、追加の対象である各処理部分を示す第2情報602とを含む。
(バグが存在しないソースコード-2)
図18は、バグが存在しない学習用編集後ソースコードの他の一例を示す図である。この学習用編集後ソースコード610では、学習用編集前ソースコード500に存在していた処理ブロック611全体を対象とする条件分岐「if ( a != 0)」の処理ブロック612と、この処理ブロック612内の新たな除算「g = g / a ;」の処理613とが追加され
ている。この処理613は、条件分岐「if ( a != 0)」の処理ブロック612内に存在するため、この学習用編集後ソースコード610にはバグが存在しない。
図19は、図18に示した学習用編集後ソースコードから作成された編集後ASTの一例を示す図である。この編集後AST620は、先の編集前AST520と比べると、新たな条件分岐「if ( a != 0)」の処理ブロック621及び新たな除算「g = g / a ;」の
記述部分622が追加されている。
図20は、図9、19に示した学習用編集前AST及び学習用編集後ASTから作成された学習用グラフ編集操作列の一例(一部)を示す図である。この学習用グラフ編集操作列630(以下、グラフ編集操作列Dともいう)は、条件分岐に係る各処理の追加("Add")及びその追加の対象を記述した部分(「if ( a != 0)」)からなる操作列部分631
と、その操作列部分631が示す記述を所定位置に移動("Move")する操作列部分632と、除算の追加("Add")及びその追加の対象を記述した部分(「g = g / a ;」)からなる操作列部分633とを含む。
なお、グラフ編集操作列の記述方法は、以上に説明したものに限られない。グラフ編集操作列は少なくとも、編集の種類、及び編集の対象を特定可能な記述方法であればよい。
続いて、図6に示すように、学習用グラフ編集操作列ベクトル化部105は、学習用編集前ソースコードグラフデータをベクトルに変換した学習用編集前ソースコードベクトルを作成する(s106)。
例えば、学習用グラフ編集操作列ベクトル化部105は、学習用編集前ソースコードグラフデータにおける各ノード間の関係性の強さを特定することにより、ベクトルデータを作成する。なお、本実施形態では、学習用グラフ編集操作列ベクトル化部105は、node2vecを用いてベクトルデータを作成するものとするが、他の手法によってもよい。例えば、学習用グラフ編集操作列ベクトル化部105は、グラフデータ内の各ノード(及びエッジ)をベクトル空間内の特定の位置に割り当てることで、グラフデータを連続するベクトル空間に変換すればよい。
さらに、s106において学習用グラフ編集操作列ベクトル化部105は、s105で作成した学習用グラフ編集操作列をベクトルに変換した学習用編集操作列ベクトルを作成する。
例えば、学習用グラフ編集操作列ベクトル化部105は、学習用グラフ編集操作列における編集操作の種類(第1の情報)を符号化する(例えば、Addを0、Moveを1、Remove
を2、Renameを3とする)。また、学習用グラフ編集操作列ベクトル化部105は、操作の対象(第2の情報)のそれぞれについて数値を設定する(異なる種類の処理対象には異なる数値を付与する)。
図21に、図20で示したグラフ編集操作列Dを編集操作列ベクトルに変換した例を示す。同図に示すように、この編集操作列ベクトル640は、学習用グラフ編集操作列641に対応するデータであり、学習用グラフ編集操作列641の第1の情報642に対応した数値643、及び、第2の情報644に対応した数値645の組646を、1又は複数含んで構成されている。なお、同図に示した編集操作列ベクトルの記述方法は一例であり、他の形式のベクトルデータであってもよい(例えば、ベクトルの行列を入れ替える)。
さらに、図6に示すように教師情報入力部106は、学習用編集前ソースコード及び学習用編集後ソースコードに対応付けられる教師情報の入力を受け付ける(s107)。例えば、教師情報入力部106は、ユーザ端末20に、学習用編集前ソースコード及び学習用編集後ソースコードを表示した所定の入力画面を表示させ、ユーザから、教師情報の入力(不具合あり、又は不具合なし)を受け付ける。
そして、データ蓄積部107は、s106で作成した学習用編集操作列ベクトル及び学習用編集前ソースコードベクトルと、s107で入力された教師情報とを対応付けて所定のデータベースに記憶する(s108)。
ソースコード判定モデル作成装置10は、以上のs101~s108の処理を、複数回繰り返す。
その後、学習部108は、s108により蓄積された編集操作列ベクトル、学習用編集前ソースコードベクトル、及び教師情報の間の関係を機械学習することで、ソースコード判定モデルを作成する。
この機械学習は、本実施形態では、BERT (Bidirectional Encoder Representations from Transformers)モデルを作成することで行うものとする。BERTは、ベクトルの入力層及
び出力層を有し、隠れ層としてTransformerを備えるニューラルネットワークである。学
習部108は、作成したソースコード判定モデルを記憶する。以上で学習処理s10は終了する。
なお、本実施形態では、上記のように、機械学習モデルとしてBERTを用いるものとするが、記述位置の離れた単語(トークン)間の関係すなわち文脈を考慮可能な自然言語処理を実現するモデルであれば、他の機械学習モデルを採用してもよい。
ここで、図22は、判定モデルの学習方法の一例を説明する図である。学習部108は、学習用編集前ソースコードベクトル701、及び学習用編集操作列ベクトル702(グラフ編集操作列Aに係る学習用編集操作列ベクトル702A、グラフ編集操作列Bに係る学習用編集操作列ベクトル702B、グラフ編集操作列Cに係る学習用編集操作列ベクトル702C、及びグラフ編集操作列Dに係る学習用編集操作列ベクトル702D等)からなる特徴ベクトルを生成し記憶する。そして、学習部108は、生成した特徴ベクトルと、対応する教師情報703(不具合あり、又は不具合なし)とに基づき、各特徴ベクトルを分類し記憶する。
次に、判定処理s20について説明する。
<判定処理>
次に、図23は、判定処理s20を説明するフロー図である。
まず、判定用編集前ソースコード入力部301は、ユーザから、判定用編集前ソースコードの入力を受け付ける(s201)。また、判定用編集後ソースコード入力部302は、ユーザから、判定用編集後ソースコードの入力を受け付ける(s202)。
例えば、ソースコード判定装置30は、ユーザ端末20に所定の入力画面を表示させ、ユーザから、判定用編集前ソースコード及び判定用編集後ソースコードの各ファイルの指定を受け付ける。
そして、判定用ソースコードグラフ化部303は、s103、s104と同様に、判定用編集前ソースコード及び判定用編集後ソースコードのそれぞれをグラフ化することで、判定用編集前ソースコードグラフデータ及び判定用編集後ソースコードグラフデータをそれぞれ作成する(s203、s204)。
判定用グラフ編集操作列ベクトル化部305は、s203、s204で作成した判定用編集前ソースコードグラフデータ及び判定用編集後ソースコードグラフデータに基づき、s105と同様に、判定用編集前ソースコードグラフデータから判定用編集後ソースコードグラフデータへの変更を示す判定用グラフ編集操作列を作成する(s205)。
判定用グラフ編集操作列ベクトル化部305は、s106と同様に、判定用編集前ソースコードグラフデータをベクトルに変換した判定用編集前ソースコードベクトルを作成する(s206)。
さらに、s206において判定用グラフ編集操作列ベクトル化部305は、s106と同様に、s205で作成した判定用グラフ編集操作列をベクトルに変換した判定用編集操作列ベクトルを作成する。
判定部306は、学習部108にて作成したソースコード判定モデルに、s206で作成した判定用編集前ソースコードベクトル及び判定用編集操作列ベクトルを入力することで、出力データを得る(s207)。出力データは、本実施形態では、「不具合あり」又は「不具合なし」である。
結果出力部307は、s207で取得した出力データを含む情報をソースコード判定装置30又はユーザ端末20の出力装置に出力する(s208)。例えば、結果出力部307は、判定用編集前ソースコード、判定用編集前ソースコード、及び出力データ(「不具合あり」又は「不具合なし」)を並べた画面を表示する。
以上のように、本実施形態のソースコード判定モデル作成装置10は、学習用編集前ソースコードから学習用編集後ソースコードへの編集過程を特定し(学習用グラフ編集操作列)、特定した編集過程をベクトル化した学習用編集操作列ベクトルを作成し、さらに、学習用編集前ソースコードをベクトル化した学習用編集前ソースコードベクトルを作成する。そして、ソースコード判定モデル作成装置10は、学習用編集操作列ベクトル、編集前ソースコードベクトル、及び、編集により学習用編集後ソースコードに不具合が生じたか否かを示す教師情報の間の関係を記憶したソースコード判定モデルを作成する。
このように、ソースコード判定モデル作成装置10は、ソースコード及びソースコードの編集過程をそれぞれベクトル化し、ベクトル化したこれらのデータ及び対応する教師データ(不具合の有無)を学習データとして用いた学習済みモデルを作成することで、編集過程に複雑な操作(複数の操作)がありこれによりソースコードに不具合が生じたようなケースも想定した学習済みモデルを作成することができる。
このように、本実施形態のソースコード判定モデル作成装置10によれば、複雑な編集操作によりソースコードに生じた不具合を検出することができる。
そして、本実施形態のソースコード判定装置30は、ユーザから、判定用編集前ソースコード及び判定用編集後ソースコードの入力を受け付け、判定用編集前ソースコードから判定用編集後ソースコードへの編集過程をベクトル化した判定用編集操作列ベクトルを作成し、また、判定用編集前ソースコードをベクトル化した判定用編集前ソースコードベクトルを作成し、ソースコード判定モデルに、判定用編集操作列ベクトル及び判定用編集前ソースコードベクトルを入力することにより、判定用編集後ソースコードに不具合が生じたか否かを示す情報を出力させる。
これにより、ユーザは、編集中のソースコードに関して、そのソースコードの編集により不具合が生じた否かを容易に知ることができる。
また、本実施形態のソースコード判定モデル作成装置10は、学習用編集前ソースコード及び学習用編集後ソースコードのそれぞれについて、各処理の内容及び処理間の関係を特定したグラフデータである編集前ソースコードグラフデータ及び編集後ソースコードグラフデータを作成し、これらのデータに基づき、編集過程を特定する(学習用グラフ編集操作列)。
このように、ソースコードを、処理の内容及び処理間の関係により特定したグラフデータにすることで、ソースコードの編集過程を論理的かつ効率よく表現することができる。例えば、ソースコードに対して自然言語処理を行う場合に比べて、ソースコードの編集過程を論理的かつ効率よく表現することができる。
また、本実施形態のソースコード判定モデル作成装置10は、編集前ソースコードグラフデータ及び編集後ソースコードグラフデータを用いて、編集の種類及び編集の対象部分の組み合わせを含んだ学習用グラフ編集操作列を作成する。
これにより、ソースコードの編集過程を簡潔かつ的確にデータ化することができる。
また、本実施形態のソースコード判定モデル作成装置10は、学習用グラフ編集操作列における編集の種類を符号化し、学習用グラフ編集操作列における編集の対象部分に対して所定のインデックスを設定することにより、学習用編集操作列ベクトルを作成する。
具体的には、本実施形態のソースコード判定モデル作成装置10は、学習用グラフ編集操作列における編集の種類として、処理の追加(Add)、処理の位置の変更(Move)、処
理の削除(Remove)、又は、変数若しくは処理の名称の変更(Rename)の少なくともいずれかが設定された学習用グラフ編集操作列を作成する。
これにより、ソースコードの編集過程を簡潔かつ的確にベクトル化することができる。
以上、本発明の実施の形態について説明したが、本発明は、上記実施形態に限定されるものではなく、その要旨を逸脱しない範囲内で、任意の構成要素を用いて実施可能である。以上説明した実施形態や変形例はあくまで一例であり、発明の特徴が損なわれない限り、本発明はこれらの内容に限定されるものではない。また、上記では種々の実施形態や変形例を説明したが、本発明はこれらの内容に限定されるものではない。本発明の技術的思想の範囲内で考えられるその他の態様も本発明の範囲内に含まれる。
例えば、本実施形態の各装置が備える各機能部の一部は他の装置に設けてもよいし、別装置が備える機能部を同一の装置に設けてもよい。
また、本実施形態では、グラフ編集操作列の第1情報(編集の種類)として、移動、追加、削除、又は変数又は関数等の名称の変更があるものとしたが、他の種類の編集(例えば、挿入)を加えてもよい。
また、本実施形態では、ソースコード判定モデルは「不具合あり」又は「不具合なし」の結果を出力するものとしてが、不具合のある確率を出力するようにしてもよい。
1 ソースコード判定システム、10 ソースコード判定モデル作成装置、30 ソースコード判定装置

Claims (9)

  1. 編集される前のソースコード及び編集された後のソースコードと、編集により前記編集された後のソースコードに不具合が生じたか否かを示す教師情報とを記憶する記憶装置、及び
    前記編集される前のソースコードから前記編集された後のソースコードへの編集過程を特定し、特定した編集過程をベクトル化した情報である編集操作列ベクトルを作成し、
    前記編集される前のソースコードをベクトル化した情報である編集前ソースコードベクトルを作成し、
    前記編集操作列ベクトルと、前記編集前ソースコードベクトルと、前記教師情報との間の関係を記憶した学習済みモデルを作成する処理装置
    を備える、ソースコード判定モデル作成装置。
  2. 前記処理装置は、前記編集される前のソースコードにおける各処理の内容及び処理間の関係を特定したグラフデータである編集前ソースコードグラフデータと、前記編集された後のソースコードにおける各処理の内容及び処理間の関係を特定したグラフデータである編集後ソースコードグラフデータとを作成し、作成した前記編集前ソースコードグラフデータ及び前記編集後ソースコードグラフデータに基づき、前記編集過程を特定する、
    請求項1に記載のソースコード判定モデル作成装置。
  3. 前記処理装置は、前記編集前ソースコードグラフデータ及び前記編集後ソースコードグラフデータに基づき、編集の種類及び当該編集の対象部分の組み合わせを含んだ情報であるグラフ編集操作列を作成することにより、前記編集過程を特定する、
    請求項2に記載のソースコード判定モデル作成装置。
  4. 前記処理装置は、前記作成したグラフ編集操作列における編集の種類を符号化し、前記作成したグラフ編集操作列における編集の対象部分に対して所定のインデックスを設定することにより、前記編集操作列ベクトルを作成する、
    請求項3に記載のソースコード判定モデル作成装置。
  5. 前記処理装置は、前記編集の種類として、処理の追加、処理の位置の変更、処理の削除、又は、変数若しくは処理の名称の変更の少なくともいずれかが設定された前記グラフ編集操作列を作成する、
    請求項3に記載のソースコード判定モデル作成装置。
  6. 編集される前のソースコードから編集された後のソースコードへの編集過程をベクトル化した情報である編集操作列ベクトルと、前記編集される前のソースコードをベクトル化した情報である編集前ソースコードベクトルと、編集により前記編集された後のソースコードに不具合が生じたか否かを示す教師情報との間の関係を記憶した学習済みモデルを記憶する記憶装置、及び、
    ユーザから、編集される前のソースコードである判定用編集前ソースコードと、編集された後のソースコードである判定用編集後ソースコードとの入力を受け付け、
    前記判定用編集前ソースコードから前記判定用編集後ソースコードへの編集過程を特定し、特定した編集過程をベクトル化した情報である判定用編集操作列ベクトルを作成し、
    前記判定用編集前ソースコードをベクトル化した情報である判定用編集前ソースコードベクトルを作成し、
    前記学習済みモデルに、前記判定用編集操作列ベクトル及び前記判定用編集前ソースコードベクトルを入力することにより、前記判定用編集後ソースコードに不具合が生じたか否かを示す情報を出力させる処理装置
    を備える、ソースコード判定装置。
  7. 情報処理装置が、
    編集される前のソースコード及び編集された後のソースコードと、編集により前記編集された後のソースコードに不具合が生じたか否かを示す教師情報とを記憶し、
    前記編集される前のソースコードから前記編集された後のソースコードへの編集過程を特定し、特定した編集過程をベクトル化した情報である編集操作列ベクトルを作成し、
    前記編集される前のソースコードをベクトル化した情報である編集前ソースコードベクトルを作成し、
    前記編集操作列ベクトルと、前記編集前ソースコードベクトルと、前記教師情報との間の関係を記憶した学習済みモデルを作成する、
    ソースコード判定モデル作成方法。
  8. 情報処理装置が、
    編集される前のソースコードから編集された後のソースコードへの編集過程をベクトル化した情報である編集操作列ベクトルと、前記編集される前のソースコードをベクトル化した情報である編集前ソースコードベクトルと、編集により前記編集された後のソースコードに不具合が生じたか否かを示す教師情報との間の関係を記憶した学習済みモデルを記憶し、
    ユーザから、編集される前のソースコードである判定用編集前ソースコードと、編集された後のソースコードである判定用編集後ソースコードとの入力を受け付け、
    前記判定用編集前ソースコードから前記判定用編集後ソースコードへの編集過程を特定し、特定した編集過程をベクトル化した情報である判定用編集操作列ベクトルを作成し、
    前記判定用編集前ソースコードをベクトル化した情報である判定用編集前ソースコードベクトルを作成し、
    前記学習済みモデルに、前記判定用編集操作列ベクトル及び前記判定用編集前ソースコードベクトルを入力することにより、前記判定用編集後ソースコードに不具合が生じたか否かを示す情報を出力させる、
    ソースコード判定方法。
  9. 編集される前のソースコード及び編集された後のソースコードと、編集により前記編集された後のソースコードに不具合が生じたか否かを示す教師情報とを記憶する記憶装置、及び
    前記編集される前のソースコードから前記編集された後のソースコードへの編集過程を特定し、特定した編集過程をベクトル化した情報である編集操作列ベクトルを作成し、
    前記編集される前のソースコードをベクトル化した情報である編集前ソースコードベクトルを作成し、
    前記編集操作列ベクトルと、前記編集前ソースコードベクトルと、前記教師情報との間の関係を記憶した学習済みモデルを作成する処理装置
    を備える、ソースコード判定モデル作成装置と、
    前記学習済みモデルを記憶する記憶装置、及び、
    ユーザから、編集される前のソースコードである判定用編集前ソースコードと、編集された後のソースコードである判定用編集後ソースコードとの入力を受け付け、
    前記判定用編集前ソースコードから前記判定用編集後ソースコードへの編集過程を特定し、特定した編集過程をベクトル化した情報である判定用編集操作列ベクトルを作成し、
    前記判定用編集前ソースコードをベクトル化した情報である判定用編集前ソースコードベクトルを作成し、
    前記学習済みモデルに、前記判定用編集操作列ベクトル及び前記判定用編集前ソースコードベクトルを入力することにより、前記判定用編集後ソースコードに不具合が生じたか否かを示す情報を出力させる処理装置
    を備える、ソースコード判定装置と
    を含んで構成されるソースコード判定システム。
JP2022069374A 2022-04-20 2022-04-20 ソースコード判定モデル作成装置、ソースコード判定装置、ソースコード判定モデル作成方法、ソースコード判定方法、及びソースコード判定システム Pending JP2023159595A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2022069374A JP2023159595A (ja) 2022-04-20 2022-04-20 ソースコード判定モデル作成装置、ソースコード判定装置、ソースコード判定モデル作成方法、ソースコード判定方法、及びソースコード判定システム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2022069374A JP2023159595A (ja) 2022-04-20 2022-04-20 ソースコード判定モデル作成装置、ソースコード判定装置、ソースコード判定モデル作成方法、ソースコード判定方法、及びソースコード判定システム

Publications (1)

Publication Number Publication Date
JP2023159595A true JP2023159595A (ja) 2023-11-01

Family

ID=88515021

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2022069374A Pending JP2023159595A (ja) 2022-04-20 2022-04-20 ソースコード判定モデル作成装置、ソースコード判定装置、ソースコード判定モデル作成方法、ソースコード判定方法、及びソースコード判定システム

Country Status (1)

Country Link
JP (1) JP2023159595A (ja)

Similar Documents

Publication Publication Date Title
KR101098718B1 (ko) 재사용 가능한 코드 세그먼트들을 생성 및 재사용하는 컴퓨터화된 방법 및 컴퓨터 구현 시스템, 및 컴퓨터 판독 가능 저장 매체
JP6563381B2 (ja) 再計算ユーザインタフェースにおける変換の編さん
KR101911793B1 (ko) 컴퓨터 프로그램을 나타내는 데이터플로우 그래프 내의 데이터세트 객체의 관리
US9152412B2 (en) Compositing deltas when merging artifacts in a version control system
US7617444B2 (en) File formats, methods, and computer program products for representing workbooks
JP4148527B2 (ja) 機能テスト・スクリプト生成装置
CN108139891B (zh) 用于生成建议以纠正未定义标记错误的方法和系统
US9524279B2 (en) Help document animated visualization
CN109491658A (zh) 计算机可执行代码数据的生成方法及装置
US20160132304A1 (en) Contraction aware parsing system for domain-specific languages
US8478953B2 (en) Buffer snapshots from unmodifiable data piece tables
CN104969188A (zh) 用于对具有缺少源位置的代码段的源代码建模的方法
US10146530B1 (en) Simulating and evaluating code branch merge
CN110737431B (zh) 软件开发方法、开发平台、终端设备及存储介质
US8359592B2 (en) Identifying groups and subgroups
US11500619B1 (en) Indexing and accessing source code snippets contained in documents
JP4738753B2 (ja) 文法オーサリングにおけるセグメント化あいまい性(segmentationambiguity)の自動的な解決
CN115904480B (zh) 代码重构方法、装置、电子设备及存储介质
JP2023159595A (ja) ソースコード判定モデル作成装置、ソースコード判定装置、ソースコード判定モデル作成方法、ソースコード判定方法、及びソースコード判定システム
CN118647968A (zh) 用于控制工业软件程序的执行的基于用户行为的帮助推荐
Tukaram Design and development of software tool for code clone search, detection, and analysis
JP2019133534A (ja) 併合方法、併合装置、および併合プログラム
US11605006B2 (en) Deep-learning model catalog creation
CN113971028B (zh) 数据处理方法、装置、设备、存储介质及计算机程序产品
CN113918664B (zh) 一种数据处理方法以及装置