JP6971835B2 - 要素類似判定装置、要素類似判定方法及び要素類似判定プログラム - Google Patents

要素類似判定装置、要素類似判定方法及び要素類似判定プログラム Download PDF

Info

Publication number
JP6971835B2
JP6971835B2 JP2017248674A JP2017248674A JP6971835B2 JP 6971835 B2 JP6971835 B2 JP 6971835B2 JP 2017248674 A JP2017248674 A JP 2017248674A JP 2017248674 A JP2017248674 A JP 2017248674A JP 6971835 B2 JP6971835 B2 JP 6971835B2
Authority
JP
Japan
Prior art keywords
evaluation value
function
name
target
word
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.)
Active
Application number
JP2017248674A
Other languages
English (en)
Other versions
JP2019114154A (ja
Inventor
貴博 秋元
聡 岩渕
泰夫 細谷
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.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric Corp
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 Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Priority to JP2017248674A priority Critical patent/JP6971835B2/ja
Publication of JP2019114154A publication Critical patent/JP2019114154A/ja
Application granted granted Critical
Publication of JP6971835B2 publication Critical patent/JP6971835B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Description

この発明は、ソースコードに存在する複数の要素間の類似性を評価する技術に関する。
ソフトウェア開発においてソースコードを作成していく際、ソースコード修正工数及びメモリ使用量を削減するために、ソースコードの分量は可能な限り削減されることが望ましい。そのために、ソースコードの複数箇所における同じような記述、すなわちコードクローンが検出され、冗長性のある複数の処理を共通の処理に置き換えるといった処置が施される。
ソースコードの分量が膨大になると、コードクローンを目視で発見することが困難になる。そのため、コードクローンは自動的に検出されることが望まれる。このとき、複数の比較対象の記述内容が文字列として厳密に一致していない場合であっても、構造的に共通化されるべき類似性がある場合、コードクローンとして検出されることが望ましい。
特許文献1には、関数の記述文字列と、関数内に存在する要素の名称と、関数の構文と、関数メトリクスといった情報を比較して、類似性がある関数をコードクローンとして検出することが記載されている。
特開2017−10476号公報
特許文献1に記載された技術では、類似する関数を特定することはできる。しかし、ソースコードにおいて冗長性につながる類似性を持つものは関数だけではなく、構造体と構造体のメンバといった要素も考えられる。
この発明は、ソースコードにおける要素の類似性を適切に評価可能にすることを目的とする。
この発明に係る要素類似判定装置は、
ソースコードに含まれる各関数で、対象とする複数の要素それぞれが使用されるか否かに応じて、前記各関数について要素毎の要素評価値を計算する要素評価値計算部と、
前記各関数で、対象とする複数の要素それぞれの名称の一部を含む名称の要素が使用されるか否かに応じて、前記各関数について要素毎の名称評価値を計算する名称評価値計算部と、
前記要素評価値計算部によって計算された前記要素評価値と、前記名称評価値計算部によって計算された前記名称評価値とに基づき、前記複数の要素間の類似度を計算する結果統合部と
を備える。
この発明では、ソースコードに含まれる各関数における要素の使用と、各関数における要素の名称の使用とに基づき、要素間の類似度を計算する。これにより、ソースコードにおける要素の類似性を適切に評価することが可能である。
実施の形態1に係る要素類似判定装置10の構成図。 実施の形態1に係る要素評価値計算部21の構成図。 実施の形態1に係る名称評価値計算部22の構成図。 実施の形態1に係る結果統合部23の構成図。 実施の形態1に係るソースコード構造分析情報31の説明図。 実施の形態1に係る評価対象要素群32の説明図。 実施の形態1に係る要素関連度一覧表33の説明図。 実施の形態1に係る名称関連度一覧表34の説明図。 実施の形態1に係る評価一覧表35の説明図。 実施の形態1に係る要素評価値計算部21の処理のフローチャート。 実施の形態1に係る直接/間接カウント計算部211の処理のフローチャート。 実施の形態1に係る要素カウント計算部212の処理のフローチャート。 実施の形態1に係る要素カウント計算部212の処理の説明図。 実施の形態1に係る要素カウントの説明図。 実施の形態1に係る間接使用カウントを特定する処理の説明図。 実施の形態1に係る直接使用カウント及び間接使用カウントの説明図。 実施の形態1に係る要素評価値の説明図。 実施の形態1に係る名称評価値計算部22の処理のフローチャート。 実施の形態1に係るワード群抽出部221の処理のフローチャート。 実施の形態1に係る単独ワード群抽出部222の処理のフローチャート。 実施の形態1に係るワード重み群抽出部223の処理のフローチャート。 実施の形態1に係るワードカウント計算部224の処理のフローチャート。 実施の形態1に係る関数内ワード群抽出部225の処理のフローチャート。 実施の形態1に係る単独ワード群の説明図。 実施の形態1に係るワード群の説明図。 実施の形態1に係る関数内ワード群抽出部225の処理の説明図。 実施の形態1に係る関数内ワード群の説明図。 実施の形態1に係るワードカウント計算部224の処理の説明図。 実施の形態1に係るワードカウントの説明図。 実施の形態1に係るワード使用率の説明図。 実施の形態1に係るワード重みの説明図。 実施の形態1に係る結果統合部23の処理のフローチャート。 実施の形態1に係る要素関連性評価値群計算部231の処理のフローチャート。 実施の形態1の評価対象となるソースコードを示す図。 実施の形態1に係る要素類似判定装置10による評価結果を示す図。 変形例1に係る要素類似判定装置10の構成図。
実施の形態1.
***構成の説明***
図1を参照して、実施の形態1に係る要素類似判定装置10の構成を説明する。
要素類似判定装置10は、コンピュータである。
要素類似判定装置10は、プロセッサ11と、メモリ12と、ストレージ13と、通信インタフェース14とのハードウェアを備える。プロセッサ11は、信号線を介して他のハードウェアと接続され、これら他のハードウェアを制御する。
プロセッサ11は、プロセッシングを行うIC(Integrated Circuit)である。プロセッサ11は、具体例としては、CPU(Central Processing Unit)、DSP(Digital Signal Processor)、GPU(Graphics Processing Unit)である。
メモリ12は、データを一時的に記憶する記憶装置である。メモリ12は、具体例としては、SRAM(Static Random Access Memory)、DRAM(Dynamic Random Access Memory)である。
ストレージ13は、データを保管する記憶装置である。ストレージ13は、具体例としては、HDD(Hard Disk Drive)である。また、ストレージ13は、SD(登録商標,Secure Digital)メモリカード、CF(CompactFlash,登録商標)、NANDフラッシュ、フレキシブルディスク、光ディスク、コンパクトディスク、ブルーレイ(登録商標)ディスク、DVD(Digital Versatile Disk)といった可搬記録媒体であってもよい。
通信インタフェース14は、外部の装置と通信するためのインタフェースである。通信インタフェース14は、具体例としては、Ethernet(登録商標)、USB(Universal Serial Bus)、HDMI(登録商標,High−Definition Multimedia Interface)のポートである。
要素類似判定装置10は、機能構成要素として、要素評価値計算部21と、名称評価値計算部22と、結果統合部23とを備える。要素類似判定装置10の各機能構成要素の機能はソフトウェアにより実現される。
ストレージ13には、要素類似判定装置10の各機能構成要素の機能を実現するプログラムが格納されている。このプログラムは、プロセッサ11によりメモリ12に読み込まれ、プロセッサ11によって実行される。これにより、要素類似判定装置10の各機能構成要素の機能が実現される。
図1では、プロセッサ11は、1つだけ示されていた。しかし、プロセッサ11は、複数であってもよく、複数のプロセッサ11が、各機能を実現するプログラムを連携して実行してもよい。
図1及び図2を参照して、実施の形態1に係る要素評価値計算部21の構成を説明する。
要素評価値計算部21は、ソースコード構造分析情報31と、評価対象要素群32とを入力として、要素関連度一覧表33を生成する。
要素評価値計算部21は、機能構成要素として、直接/間接カウント計算部211と、要素カウント計算部212と、要素統合評価計算部213とを備える。
図1及び図3を参照して、実施の形態1に係る名称評価値計算部22の構成を説明する。
名称評価値計算部22は、ソースコード構造分析情報31と、評価対象要素群32とを入力として、名称関連度一覧表34を生成する。
名称評価値計算部22は、機能構成要素として、ワード群抽出部221と、単独ワード群抽出部222と、ワード重み群抽出部223と、ワードカウント計算部224と、関数内ワード群抽出部225と、ワード重み計算部226と、名称統合評価値計算部227とを備える。
図1及び図4を参照して、実施の形態1に係る結果統合部23の構成を説明する。
結果統合部23は、要素関連度一覧表33と、名称関連度一覧表34とを入力として、評価一覧表35を生成する。
結果統合部23は、要素関連性評価値群計算部231と、関連性評価値計算部232と、ベクトル類似度計算部233とを備える。
図5を参照して、実施の形態1に係るソースコード構造分析情報31を説明する。
ソースコード構造分析情報31は、ソースコードの解析ツール等により取得される情報である。ソースコード構造分析情報31は、ソースコードに含まれる各要素311と各関数314とについての情報である。
各要素311は、構造名称312と、名称313とを含む。構造名称312は、要素311を一意に特定する文字列であり、要素311を持つオブジェクト等の名称である。名称313は、要素311そのものを表す文字列であり、異なる要素311又は関数314が同一の名称を持つことがありえる。
各関数314は、構造名称315と、名称316と、使用要素317と、呼出し関数318とを含む。構造名称315は、関数314を一意に特定する文字列であり、関数314を持つオブジェクト等の名称である。名称316は、関数314そのものを表す文字列であり、異なる関数314又は要素311が同一の名称を持つことがありえる。使用要素317は、関数314で使用される要素311の情報を0個以上並べたものである。使用要素317において、同一の要素311の重複はありえるものとする。つまり、1つの関数314において同一の要素311を複数回使用している場合、使用要素317においても同一の要素311が複数個存在する。呼出し関数318は、関数314で呼び出される他の関数314の情報を0個以上並べたものである。使用要素317において、同一の要素311の重複がありえることと同様に、呼出し関数318において、同一の関数314の重複はありえるものとする。
図6を参照して、実施の形態1に係る評価対象要素群32を説明する。
評価対象要素群32は、複数の評価対象要素を含む。評価対象要素は、類似性を評価する対象の要素である。評価対象要素群32は、各評価対象要素について、構造名称312を含む。
図7を参照して、実施の形態1に係る要素関連度一覧表33を説明する。
要素関連度一覧表33は、評価対象要素群32が示す各評価対象要素を対象の要素として、対象の要素について関数毎に、直接使用カウントと、間接使用カウントと、要素評価値とを含む。
直接使用カウントは、対象の関数で対象の要素が直接使用される回数である。間接使用カウントは、対象の関数から呼び出された他の関数で対象の要素が間接的に使用される回数である。要素評価値は、直接使用カウントと間接使用カウントとに基づき計算された評価値である。
図8を参照して、実施の形態1に係る名称関連度一覧表34を説明する。
名称関連度一覧表34は、評価対象要素群32が示す各評価対象要素を対象の要素として、対象の要素の名称を分解したワードについて、関数毎に、ワード使用カウントと、名称評価値とを含む。
ワード使用カウントは、対象の関数で対象のワードが使用される回数である。名称評価値は、対象の要素の名称が分解されたワードについてのワード使用カウントに基づき計算された評価値である。
図9を参照して、実施の形態1に係る評価一覧表35を説明する。
評価対象要素群32が示す各評価対象要素間の類似度を示す。各評価対象要素間の類似度は、要素関連度一覧表33が示す要素評価値と、名称関連度一覧表34が示す名称評価値とから計算される。
***動作の説明***
図10から図33を参照して、実施の形態1に係る要素類似判定装置10の動作を説明する。
実施の形態1に係る要素類似判定装置10の動作は、実施の形態1に係る要素類似判定方法に相当する。また、実施の形態1に係る要素類似判定装置10の動作は、実施の形態1に係る要素類似判定プログラムの処理に相当する。
以下の説明において、変数i,j,kは、各機能構成要素の処理の内部変数とする。つまり、ある機能構成要素の処理で他の機能構成要素が呼び出された場合には、呼出し元の機能構成要素の処理で使用された変数i,j,kの値は、呼出し先の機能構成要素には引き継がれない。
図10を参照して、実施の形態1に係る要素評価値計算部21の処理を説明する。
図10に示す処理を実行することにより、要素評価値計算部21は、ソースコードに含まれる各関数で、対象とする複数の要素それぞれが使用されるか否かに応じて、各関数について要素毎の要素評価値を計算する。具体的には、要素評価値計算部21は、評価対象要素群32が示す各評価対象要素を対象の要素として、各関数で対象の要素が使用される要素使用回数に応じて、各関数についての対象の要素の要素評価値を計算する。
変数i,jには初期値として1が設定される。
(ステップS11:要素使用カウント処理)
要素評価値計算部21は、ソースコード構造分析情報31におけるj番目の関数を対象の関数とし、評価対象要素群32におけるi番目の要素を対象の要素として、直接/間接カウント計算部211を呼び出し、直接使用カウント(xi,j,0)と、間接使用カウント(xi,j,1)とを特定する。
(ステップS12:要素統合処理)
要素評価値計算部21は、要素カウント計算部212を呼び出し、ステップS11で特定された直接使用カウント(xi,j,0)及び間接使用カウント(xi,j,1)から、要素評価値(yi,j)を計算する。
ここでは、要素評価値計算部21は、要素統合評価計算部213により、数11に示すように、要素評価値(yi,j)を計算する。
Figure 0006971835
数11において、yi,jは、要素評価値である。Aは、直接使用カウント用の定数である。Aは、間接使用カウント用の定数である。xi,j,0は、直接使用カウントである。xi,j,1は、間接使用カウントである。
(ステップS13:関数終了判定処理)
要素評価値計算部21は、全ての関数についてステップS11及びステップS12の処理が実行されたか否かを判定する。関数とは、ソースコード構造分析情報31が示す関数314のことである。
要素評価値計算部21は、全ての関数について処理が実行された場合には、処理をステップS14に進める。一方、要素評価値計算部21は、処理が実行されていない関数が残っている場合には、変数jに1を加算した上で、処理をステップS11に戻す。
(ステップS14:要素終了判定処理)
要素評価値計算部21は、全ての対象の要素についてステップS11及びステップS12の処理が実行されたか否かを判定する。対象の要素とは、評価対象要素群32が示す評価対象要素である。
要素評価値計算部21は、全ての対象の要素について処理が実行された場合には、処理をステップS15に進める。一方、要素評価値計算部21は、処理が実行されていない対象の要素が残っている場合には、変数iに1を加算し、変数jに1を設定した上で、処理をステップS11に戻す。
(ステップS15:結果記憶処理)
要素評価値計算部21は、各関数及び対象の各要素について、ステップS11で特定された直接使用カウント及び間接使用カウントと、ステップS12で計算された要素評価値とを要素関連度一覧表33としてメモリ12又はストレージ13に書き込む。
図11を参照して、実施の形態1に係る直接/間接カウント計算部211の処理を説明する。
直接/間接カウント計算部211は、図10のステップS11で呼び出される。
(ステップS21:直接使用カウント処理)
直接/間接カウント計算部211は、要素カウント計算部212を呼び出し、対象の関数及び対象の要素について、要素使用カウントを特定する。直接/間接カウント計算部211は、特定された要素使用カウントを、対象の関数及び対象の要素についての直接使用カウントとしてメモリ12に書き込む。対象の関数及び対象の要素とは、図10のステップS11で指定されている変数jが示す関数及び変数iが示す要素である。
変数iには初期値として1が設定される。
(ステップS22:間接使用カウント処理)
直接/間接カウント計算部211は、要素カウント計算部212を呼び出し、対象の関数においてi番目に呼び出される関数と、対象の要素とについて、要素使用カウントを特定する。
(ステップS23:カウント加算処理)
直接/間接カウント計算部211は、ステップS22で特定された要素使用カウントを、対象の関数及び対象の要素についての間接使用カウントに加算する。なお、図11に示す処理における間接使用カウントは、初期値として0が設定されメモリ12に記憶されている。
(ステップS24:呼出し関数終了判定処理)
直接/間接カウント計算部211は、対象の関数において呼び出される全ての呼出し関数についてステップS22及びステップS23の処理が実行されたか否かを判定する。
直接/間接カウント計算部211は、全ての呼出し関数について処理が実行された場合には、処理を終了する。一方、直接/間接カウント計算部211は、処理が実行されていない呼出し関数が残っている場合には、変数iに1を加算した上で、処理をステップS22に戻す。
図12を参照して、実施の形態1に係る要素カウント計算部212の処理を説明する。
要素カウント計算部212は、図11のステップS21及びステップS22で呼び出される。
変数iには初期値として1が設定される。
(ステップS31:要素一致判定処理)
要素カウント計算部212は、対象の関数におけるi番目の要素が、対象の要素と一致するか否かを判定する。対象の関数及び対象の要素は、要素カウント計算部212の呼出し元である図11のステップS21で直接使用カウントの特定対象となっている関数及び要素、又は、ステップS22で間接使用カウントの特定対象となっている関数及び要素である。
要素カウント計算部212は、一致する場合には、処理をステップS32に進める。一方、要素カウント計算部212は、一致しない場合には、処理をステップS33に進める。
(ステップS32:カウント処理)
要素カウント計算部212は、要素使用カウントに1を加算する。なお、図12に示す処理における要素使用カウントは、初期値として0が設定されメモリ12に記憶されている。
(ステップS33:要素終了判定処理)
要素カウント計算部212は、対象の関数で使用される全ての要素について、ステップS31で処理が実行されたか否かを判定する。
要素カウント計算部212は、全ての要素について処理が実行された場合には、処理を終了する。一方、要素カウント計算部212は、処理が実行されていない要素が残っている場合には、変数iに1を加算した上で、処理をステップS31に戻す。
図11から図17を参照して、要素評価値計算部21の処理の具体的な例を説明する。
図10のステップS11が対象の関数をRefreshProductとし、対象の要素をptrProduct−>ProductNameとして処理が実行されたとする。
すると、図13に示すように、図11のステップS21で実行される図12のステップ31からステップS33で、対象の関数をRefreshProductにおいて使用される各要素について順に、対象の要素であるptrProduct−>ProductNameと一致するか否かが判定される。図13では、対象の関数をRefreshProductにおいて1箇所でptrProduct−>ProductNameが使用されている。そのため、図14に示すように、対象の関数がRefreshProductであり、対象の要素がptrProduct−>ProductNameである場合の要素使用カウントは1になる。つまり、直接使用カウントは1になる。
また、図15に示すように、図11のステップS22からステップS24で、対象の関数をRefreshProductで呼び出される呼出し関数について順に要素使用カウントがカウントされる。すると、呼出し関数であるFindProductにおいて、ptrProduct−>ProductNameが1度使用されており、要素使用カウントは1になる。つまり間接使用カウントは1になる。
つまり、図16に示すように、対象の関数がRefreshProductであり、対象の要素がptrProduct−>ProductNameである場合には、直接使用カウントは1であり、間接使用カウントは1である。そして、図10のステップS12で直接使用カウント(xi,j,0)に1、間接使用カウント(xi,j,1)に1が代入されて、要素評価値が計算される。ここでは、要素評価値は1.155と計算されたとする。すると、図17に示すように、図10のステップS15で、要素関連度一覧表33における対象の関数がRefreshProductであり、対象の要素がptrProduct−>ProductNameである場合の欄に値が書き込まれる。
図18を参照して、実施の形態1に係る名称評価値計算部22の処理を説明する。
名称評価値計算部22は、ソースコードに含まれる各関数で、対象とする複数の要素それぞれの名称の一部であるワードを含む名称の要素が使用されるか否かに応じて、各関数について要素毎の名称評価値を計算する。具体的には、名称評価値計算部22は、評価対象要素群32が示す各評価対象要素を対象として、各関数で前記対象の要素の名称の一部を含む名称の要素が使用される名称使用回数に応じて、各関数についての対象の要素の名称評価値を計算する。
変数iには初期値として1が設定される。
(ステップS41:ワード群取得処理)
名称評価値計算部22は、評価対象要素群32におけるi番目の要素を対象の要素として、ワード群抽出部221を呼び出し、対象の要素の名称の一部を含むワード群を取得する。
(ステップS42:ワード重み取得処理)
名称評価値計算部22は、ステップS41で取得されたワード群を入力として、ワード重み群抽出部223を呼び出し、ワード群に含まれる各ワードについての重みを示すワード重み群を取得する。
変数j,kには初期値として1が設定される。
(ステップS43:ワード使用カウント処理)
名称評価値計算部22は、ソースコード構造分析情報31におけるj番目の関数を対象の関数とし、ワード群におけるk番目のワードを対象のワードとして、ワードカウント計算部224を呼び出し、ワード使用カウント(xi,j,k)を特定する。
(ステップS44:ワード終了判定処理)
名称評価値計算部22は、ワード群に含まれる全てのワードについてステップS43の処理が実行されたか否かを判定する。
名称評価値計算部22は、全てのワードについて処理が実行された場合には、処理をステップS45に進める。一方、名称評価値計算部22は、処理が実行されていないワードが残っている場合には、変数kに1を加算した上で、処理をステップS43に戻す。
(ステップS45:名称統合処理)
名称評価値計算部22は、ステップS42で取得されたワード重み群と、ステップS43で特定されたワード使用カウント(xi,j,k)とから、ワード評価値(ci,j,k)と、名称評価値(ui,j)とを計算する。
ここでは、名称評価値計算部22は、名称統合評価値計算部227により、数12に示すように、ワード評価値(ci,j,k)と、名称評価値(ui,j)とを計算する。
Figure 0006971835
数12において、ui,jは、名称評価値である。ci,j,kは、ワード評価値である。wi,j,kは、ワード重みである。xi,j,kは、ワード使用カウントである。
(ステップS46:関数終了判定処理)
名称評価値計算部22は、全ての関数についてステップS43からステップS45の処理が実行されたか否かを判定する。関数とは、ソースコード構造分析情報31が示す関数314のことである。
名称評価値計算部22は、全ての関数について処理が実行された場合には、処理をステップS47に進める。一方、名称評価値計算部22は、処理が実行されていない関数が残っている場合には、変数jに1を加算し、変数kに1を設定した上で、処理をステップS43に戻す。
(ステップS47:要素終了判定処理)
名称評価値計算部22は、全ての対象の要素についてステップS43からステップS45の処理が実行されたか否かを判定する。対象の要素とは、評価対象要素群32が示す評価対象要素である。
名称評価値計算部22は、全ての対象の要素について処理が実行された場合には、処理をステップS48に進める。一方、名称評価値計算部22は、処理が実行されていない対象の要素が残っている場合には、変数iに1を加算した上で、処理をステップS41に戻す。
(ステップS48:結果記憶処理)
名称評価値計算部22は、各関数及び対象の各要素について、ステップS45で特定されたワード評価値及び名称評価値を要素関連度一覧表33としてメモリ12又はストレージ13に書き込む。
図19を参照して、実施の形態1に係るワード群抽出部221の処理を説明する。
ワード群抽出部221は、図18のステップS41で呼び出される。また、ワード群抽出部221は、後述する図23のステップS91で呼び出される。
(ステップS51:単独ワード群取得処理)
ワード群抽出部221は、対象の要素の名称の文字列に対して、単独ワード群抽出部222を呼び出し、対象の要素の名称に含まれる文字列である単独ワード群を取得する。対象の要素とは、図18のステップS41又は図23のステップS91で指定されている変数iが示す要素である。
変数iには初期値として1が設定される。
ワード群抽出部221は、ステップS51で取得された単独ワード群において、連続するi個の単独ワードの全ての組合せに対してステップS52の処理を実行する。
(ステップS52:単独ワード群追加処理)
ワード群抽出部221は、選択されたi個の単独ワードの組合せを連結してワードを生成する。ワード群抽出部221は、生成したワードをメモリ12に記憶されたワード群に追加する。
(ステップS53:ワード終了判定処理)
ワード群抽出部221は、変数iがステップS51で取得された単独ワード群に含まれる単独ワードの数未満であるか否かを判定する。
ワード群抽出部221は、変数iが単独ワードの数未満である場合には、変数iに1を加算した上で、処理をステップS52に戻す。一方、ワード群抽出部221は、変数iが単独ワードの数以上である場合には、処理を終了する。
図20を参照して、実施の形態1に係る単独ワード群抽出部222の処理を説明する。
単独ワード群抽出部222は、図19のステップS51で呼び出される。
変数iには初期値として1が設定される。
(ステップS61:第1文字判定処理)
単独ワード群抽出部222は、対象の文字列のi番目の文字が大文字か否かを判定する。対象の文字列とは、対象の要素の名称の文字列である。
単独ワード群抽出部222は、i番目の文字が大文字である場合には、処理をステップS62に進める。一方、単独ワード群抽出部222は、i番目の文字が大文字でない場合には、処理をステップS63に進める。
(ステップS62:第2文字判定処理)
単独ワード群抽出部222は、対象の文字列のi+1番目の文字が大文字か、又は、存在しない否かを判定する。
単独ワード群抽出部222は、i+1番目の文字が大文字である場合には、処理をステップS64に進める。一方、単独ワード群抽出部222は、i+1番目の文字が大文字でない場合には、処理をステップS66に進める。
(ステップS63:第3文字判定処理)
単独ワード群抽出部222は、対象の文字列のi+1番目の文字が大文字か否かを判定する。
単独ワード群抽出部222は、i+1番目の文字が大文字である場合には、処理をステップS65に進める。一方、単独ワード群抽出部222は、i+1番目の文字が大文字でない場合には、処理をステップS66に進める。
(ステップS64:第4文字判定処理)
単独ワード群抽出部222は、対象の文字列のi+2番目の文字が大文字又は存在しないか否かを判定する。
単独ワード群抽出部222は、i+2番目の文字が大文字である又は存在しない場合には、処理をステップS66に進める。一方、単独ワード群抽出部222は、i+2番目の文字が大文字でなく、かつ、存在する場合には、処理をステップS65に進める。
(ステップS65:文字列分割処理)
単独ワード群抽出部222は、i番目の文字とi+1番目の文字との間で、対象の文字列を分割する。
(ステップS66:文字列終了判定処理)
単独ワード群抽出部222は、対象の文字列のi+1番目の文字が対象の文字列の最後の文字であるか否かを判定する。
単独ワード群抽出部222は、i+1番目の文字が最後の文字である場合には、処理をステップS67に進める。一方、単独ワード群抽出部222は、i+1番目の文字が最後の文字でない場合には、変数iに1を加算した上で、処理をステップS61に戻す。
(ステップS67:ワード群出力処理)
単独ワード群抽出部222は、ステップS65で分割されて生成された文字列の集合を単独ワード群としてメモリ12に書き込む。
つまり、単独ワード群抽出部222は、小文字の次に大文字がある場合には、小文字と大文字との間で文字列を分割する。また、単独ワード群抽出部222は、大文字が2つ以上連続した後に小文字がある場合には、大文字と小文字との間で文字列を分割する。なお、ここでは、大文字と小文字との並びによって文字列を分割した。しかし、例えば、“_”といった記号等によって文字列を分割するといった他の分割方法も考えられる。
図21を参照して、実施の形態1に係るワード重み群抽出部223の処理を説明する。
ワード重み群抽出部223は、図18のステップS42で呼び出される。
変数j,kには初期値として1が設定される。
(ステップS71:ワード使用率取得処理)
ワード重み群抽出部223は、ソースコード構造分析情報31におけるj番目の関数を対象の関数とし、ステップS41で取得されたワード群のうちk番目のワードを対象のワードとして、ワードカウント計算部224を呼び出し、ワード使用カウント及びワード使用率(rj,k)を取得する。
(ステップS72:ワード使用カウント判定処理)
ワード重み群抽出部223は、ステップS71で取得されたワード使用カウントが1以上であるか否かを判定する。
ワード重み群抽出部223は、ワード使用カウントが1以上である場合には、処理をステップS73に進める。一方、ワード重み群抽出部223は、ワード使用カウントが0である場合には、処理をステップS74に進める。
(ステップS73:ワード使用関数追加処理)
ワード重み群抽出部223は、ワード使用関数数(d)に1を加算する。なお、ワード使用関数数(d)は、初期値として0が設定されメモリ12に記憶されている。
(ステップS74:関数終了判定処理)
ワード重み群抽出部223は、全ての関数についてステップS71からステップS73の処理が実行されたか否かを判定する。関数とは、ソースコード構造分析情報31が示す関数314のことである。
ワード重み群抽出部223は、全ての関数について処理が実行された場合には、処理をステップS75に進める。一方、ワード重み群抽出部223は、処理が実行されていない関数が残っている場合には、変数jに1を加算した上で、処理をステップS71に戻す。
(ステップS75:ワード重み計算処理)
ワード重み群抽出部223は、ステップS71で取得されたワード使用率(rj,k)と、ステップS73で特定されたワード使用関数数(d)とに基づき、ワード重み(wj,k)を計算する。
ここでは、ワード重み群抽出部223は、ワード重み計算部226により、数13に示すように、ワード重み(wj,k)を計算する。
Figure 0006971835
数13において、wj,kは、ワード重みである。Wは、事前に決定された定数である。rj,kは、ワード使用率である。dは、ワード使用関数数である。Dは、全ての関数の数である。
(ステップS76:ワード終了判定処理)
ワード重み群抽出部223は、変数kがステップS41で取得されたワード群に含まれるワードの数未満であるか否かを判定する。
ワード重み群抽出部223は、変数kがワードの数未満である場合には、変数kに1を加算し、変数jに1を設定した上で、処理をステップS71に戻す。一方、ワード重み群抽出部223は、変数kがワードの数以上である場合には、処理を終了する。
図22を参照して、実施の形態1に係るワードカウント計算部224の処理を説明する。
ワードカウント計算部224は、図18のステップS43及び図21のステップS71で呼び出される。
(ステップS81:ワード群取得処理)
ワードカウント計算部224は、対象の関数について、関数内ワード群抽出部225を呼び出し、関数内に存在するワードの集合である関数内ワード群を取得する。対象の関数とは、図18のステップS43又は図21のステップS71で指定されている変数jが示す関数である。
変数iには初期値として1が設定される。
(ステップS82:ワード一致判定処理)
ワードカウント計算部224は、ステップS81で取得された関数内ワード群のうちi番目のワードが、対象のワードと一致するか否かを判定する。対象のワードとは、図18のステップS43又は図21のステップS71で指定されている変数kが示すワードである。
ワードカウント計算部224は、i番目のワードが対象のワードと一致する場合には、処理をステップS83に進める。一方、ワードカウント計算部224は、i番目のワードが対象のワードと一致しない場合には、処理をステップS84に進める。
(ステップS83:ワード使用カウント追加処理)
ワードカウント計算部224は、ワード使用カウントに1を加算する。ワード使用カウントは、初期値として0が設定されメモリ12に記憶されている。
(ステップS84:ワード終了判定処理)
ワードカウント計算部224は、ステップS81で取得された関数内ワード群の全てのワードについてステップS82の処理が実行されたか否かを判定する。
ワードカウント計算部224は、全てのワードについて処理が実行された場合には、処理をステップS85に進める。一方、ワードカウント計算部224は、処理が実行されていないワードが残っている場合には、変数iに1を加算した上で、処理をステップS82に戻す。
(ステップS85:ワード使用率計算処理)
ワードカウント計算部224は、ステップS83で特定されたワード使用カウントを、ステップS81で取得された関数内ワード群に含まれるワード数で除して、ワード使用率(rj,k)を計算する。ワードカウント計算部224は、計算されたワード使用率(rj,k)をメモリ12に書き込む。
図23を参照して、実施の形態1に係る関数内ワード群抽出部225の処理を説明する。
関数内ワード群抽出部225は、図22のステップS81で呼び出される。
変数iには初期値として1が設定される。
(ステップS91:ワード群取得処理)
関数内ワード群抽出部225は、対象の関数におけるi番目の要素を対象の要素として、ワード群抽出部221を呼び出し、対象の要素の名称の一部を含むワード群を取得する。対象の関数とは、図21のステップS71で指定されている変数jが示す関数である。
(ステップS92:ワード群追加処理)
関数内ワード群抽出部225は、ステップS91で取得されたワード群を、メモリ12に記憶された関数内ワード群に追加する。
(ステップS93:要素終了判定処理)
関数内ワード群抽出部225は、対象の関数における全ての要素についてステップS91及びステップS92の処理が実行されたか否かを判定する。
関数内ワード群抽出部225は、全ての要素について処理が実行された場合には、処理を終了する。一方、関数内ワード群抽出部225は、処理が実行されていない要素が残っている場合には、変数iに1を加算した上で、処理をステップS91に戻す。
図24から図31を参照して、名称評価値計算部22の処理の具体的な例を説明する。
図18のステップS41が対象の要素をProductNameとして実行されたとする。
すると、図19のステップS51で実行される図20のステップS61からステップS67で、ProductNameが分割され、図24に示すようにProductとNameとを単独ワードとして含む単独ワード群が特定される。そして、図19のステップS52で単独ワード群の組合せとして、図25に示すように、ProductとNameとProductNameとをワードとして含むワード群が特定される。
図23のステップS91からステップS93で関数内ワード群を特定する場合には、対象の関数における各要素を対象の要素として、ワード群が特定される。図26に示すように、対象の関数がRefreshProductである場合には、関数RefreshProductに含まれる各要素の名称から、ワード群が特定される。例えば、inProductIDという要素からは、inと、Productと、IDと、inProductと、ProductIDと、inProductIDというワードが特定される。各要素の名称についてワード群が特定された結果、図27に示すように、関数RefreshProductについての関数内ワード群が特定される。
図21のステップS71が対象のワードがProductであるとして実行されたとする。そして、図21のステップS71で実行される図22のステップS81で、図27に示すように関数内ワード群が特定されたとする。
すると、図22のステップS82からステップS84で、図28に示すように関数内ワード群における対象ワードProductが特定され、図29に示すように対象ワードProductの数がカウントされる。そして、図22のステップS85で、図30に示すように関数RefreshProductにおける対象ワードProductのワード使用率が特定される。
各関数及び各ワードを対象として、ワード使用率が特定され、合わせてワード使用関数数が特定される。そして、特定されたワード使用率及びワード使用関数数に基づき、図31に示すように各関数及び各ワードについてのワード重みが特定される。
図18のステップS45で、ワード重み及びワード使用カウントから、ワード評価値及び名称評価値が計算され、名称関連度一覧表34が生成される。
図32を参照して、実施の形態1に係る結果統合部23の処理を説明する。
結果統合部23は、要素評価値計算部21によって計算された要素評価値と、名称評価値計算部22によって計算された名称評価値とに基づき、複数の要素間の類似度を計算する。具体的には、結果統合部23は、複数の要素の間の各関数についての要素評価値の類似度合い及び名称評価値の類似度合いに応じて、複数の要素間の類似度を計算する。
(ステップS101:評価値取得処理)
結果統合部23は、対象の要素群と、対象の関数群と、対象の要素評価値群と、対象の名称評価値群とについて、要素関連性評価値群計算部231を呼び出し、各要素について関数毎の要素関連性評価値を取得する。
対象の要素群とは、評価対象要素群32が示す全ての評価対象要素である。対象の関数群とは、ソースコード構造分析情報31が示す全ての関数314である。対象の要素評価値群とは、要素関連度一覧表33が示す全ての要素評価値である。対象の名称評価値群とは、名称関連度一覧表34が示す全ての名称評価値である。
結果統合部23は、対象の要素群から選択可能な2つの要素の全ての組合せに対してステップS102の処理を実行する。ここで、並び順の異なる2つの要素は同じ組合せとする。
(ステップS102:類似度計算処理)
結果統合部23は、対象とする2つの要素それぞれについての関数毎の要素関連性評価値に基づき、対象とする2つの要素の類似度を計算する。
ここでは、結果統合部23は、ベクトル類似度計算部233により、数14に示すように、対象とする2つの要素の類似度を計算する。
Figure 0006971835
数14において、rは、類似度である。a=(a,a,...)は、一方の要素についての要素関連性評価値ベクトルである。要素関連性評価値ベクトルの各要素a,a,...は、一方の要素の各関数についての要素関連性評価値である。b=(b,b,...)は、他方の要素についての要素関連性評価値ベクトルである。要素関連性評価値ベクトルの各要素b,b,...は、他方の要素の各関数についての要素関連性評価値である。
(ステップS103:結果記憶処理)
結果統合部23は、各組合せについて計算された類似度を、評価一覧表35としてメモリ12又はストレージ13に書き込む。
図33を参照して、実施の形態1に係る要素関連性評価値群計算部231の処理を説明する。
要素関連性評価値群計算部231は、図32のステップS101で呼び出される。
変数i,jには初期値として1が設定される。
(ステップS111:要素関連性評価値計算処理)
要素関連性評価値群計算部231は、評価対象要素群32におけるi番目の要素を対象の要素とし、ソースコード構造分析情報31におけるj番目の関数を対象の関数として、要素評価値と名称評価値とに基づき、要素関連性評価値を計算する。
ここでは、要素関連性評価値群計算部231は、関連性評価値計算部232により、数15に示すように、要素関連性評価値を計算する。
Figure 0006971835
数15において、ti,jは、i番目の要素のj番目の関数についての要素関連性評価値である。yi,jは、i番目の要素のj番目の関数についての要素評価値である。ui,jは、i番目の要素のj番目の関数についての名称評価値である。
(ステップS112:関数終了判定処理)
要素関連性評価値群計算部231は、全ての関数について処理が実行されたか否かを判定する。関数とは、ソースコード構造分析情報31が示す関数314のことである。
要素関連性評価値群計算部231は、全ての関数について処理が実行された場合には、処理をステップS113に進める。一方、要素関連性評価値群計算部231は、処理が実行されていない関数が残っている場合には、変数jに1を加算した上で、処理をステップS111に戻す。
(ステップS113:要素終了判定処理)
要素関連性評価値群計算部231は、全ての対象の要素についてステップS111の処理が実行されたか否かを判定する。対象の要素とは、評価対象要素群32が示す評価対象要素である。
要素関連性評価値群計算部231は、全ての対象の要素について処理が実行された場合には、処理を終了する。一方、要素関連性評価値群計算部231は、処理が実行されていない対象の要素が残っている場合には、変数iに1を加算し、変数jに1を設定した上で、処理をステップS111に戻す。
***実施の形態1の効果***
以上のように、実施の形態1に係る要素類似判定装置10は、ソースコードに含まれる各関数における要素の使用と、各関数における要素の名称の使用とに基づき、要素間の類似度を計算する。
これにより、ソースコードにおける要素の類似性を適切に評価することが可能である。その結果、類似する要素を適切に特定することが可能になり、ソースコードの冗長性を減らすことができる。そして、ソースコードの修正工数の削減、及び、メモリ使用量の削減に繋がる。
図34に示すソースコードにおいて、要素recA.ElemFooと、要素recB.ElemBarとは、同じ関数で使用される傾向があり、類似性がある。そのため、要素recA.ElemFooと、要素recB.ElemBarとを1つの要素にまとめることにより、冗長性の削減に繋がる可能性が高い。
しかし、要素recA.ElemFooと、要素recB.ElemBarとは、各関数でそのまま使用されず、媒介要素を介して使用される場合がある。例えば、要素recA.ElemFooは、媒介要素FooOfElemを介して使用される場合がある。そのため、単純に要素recA.ElemFooと、要素recB.ElemBarとが各関数で使用される回数に基づき要素の類似性を評価しようとしても、類似性を適切に評価できない可能性がある。
ここで、媒介要素は、元の要素と類似する名称を用いる可能性が高い。そのため、要素recA.ElemFooの名称の一部の文字列を含む名称の要素と、要素recB.ElemBarの名称の一部の文字列を含む名称の要素とが各関数で使用される回数に基づき要素の類似性を評価することが考えられる。この方法では、同じような名称を多く使用するソースコードでは適切に要素の類似性を評価できない可能性がある。
そこで、実施の形態1に係る要素類似判定装置10は、この2つの評価方法を組み合わせて要素の類似性を評価している。つまり、対象とする要素が各関数で使用される回数に基づく類似性の評価と、対象とする要素の名称の一部の文字列を含む名称の要素が各関数で使用される回数に基づく類似性の評価とを組み合わせて、対象とする要素の類似性を評価している。
これにより、対象とする要素が関数において媒介変数を介して使用される場合にも、一定の類似性を見出すことが可能となる。また、同じような名称を多く使用するソースコードであっても、媒介変数を介して使用されていない限り一定の類似性を見出すことが可能となる。
図34に示すソースコードにおいて、要素recA.ElemFooと、要素recB.ElemBarとの類似性を評価した場合には、図35に示すようになる。
対象とする要素が各関数で使用される回数に基づき類似性を評価した場合には、関数f4と関数f5との間では、使用回数が一致しており、類似していると判断できる。しかし、関数f6と関数f7との間では、使用回数が一致せず、類似していると判断できない。
一方、対象とする要素の名称の一部の文字列を含む名称の要素が各関数で使用される回数に基づく類似性を評価した場合には、関数f4と関数f5との間と、関数f6と関数f7との間との両方で回数が概ね一致しており、類似していると判断できる。但し、他の関数でも同様の名称が使用されている可能性があり、評価精度は高くない可能性がある。
これらの判断結果が統合され、要素recA.ElemFooと、要素recB.ElemBarとの類似性が評価される。
***他の構成***
<変形例1>
実施の形態1では、各機能構成要素がソフトウェアで実現された。しかし、変形例1として、各機能構成要素はハードウェアで実現されてもよい。この変形例1について、実施の形態1と異なる点を説明する。
図36を参照して、変形例1に係る要素類似判定装置10の構成を説明する。
各機能構成要素がハードウェアで実現される場合には、要素類似判定装置10は、プロセッサ11とメモリ12とストレージ13とに代えて、電子回路15を備える。電子回路15は、各機能構成要素と、メモリ12と、ストレージ13との機能とを実現する専用の回路である。
電子回路15としては、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ロジックIC、GA(Gate Array)、ASIC(Application Specific Integrated Circuit)、FPGA(Field−Programmable Gate Array)が想定される。
各機能構成要素を1つの電子回路15で実現してもよいし、各機能構成要素を複数の電子回路15に分散させて実現してもよい。
<変形例2>
変形例2として、一部の各機能構成要素がハードウェアで実現され、他の各機能構成要素がソフトウェアで実現されてもよい。
プロセッサ11とメモリ12とストレージ13と電子回路15とを処理回路という。つまり、各機能構成要素の機能は、処理回路により実現される。
10 要素類似判定装置、11 プロセッサ、12 メモリ、13 ストレージ、14 通信インタフェース、15 電子回路、21 要素評価値計算部、211 直接/間接カウント計算部、212 要素カウント計算部、213 要素統合評価計算部、22 名称評価値計算部、221 ワード群抽出部、222 単独ワード群抽出部、223 ワード重み群抽出部、224 ワードカウント計算部、225 関数内ワード群抽出部、226 ワード重み計算部、227 名称統合評価値計算部、23 結果統合部、231 要素関連性評価値群計算部、232 関連性評価値計算部、233 ベクトル類似度計算部、31 ソースコード構造分析情報、311 要素、312 構造名称、313 名称、314 関数、315 構造名称、316 名称、317 使用要素、318 呼出し関数、32 評価対象要素群、33 要素関連度一覧表、34 名称関連度一覧表、35 評価一覧表。

Claims (8)

  1. ソースコードに含まれる各関数で、対象とする複数の要素それぞれが使用されるか否かに応じて、前記各関数について要素毎の要素評価値を計算する要素評価値計算部と、
    前記各関数で、対象とする複数の要素それぞれの名称の一部を含む名称の要素が使用されるか否かに応じて、前記各関数について要素毎の名称評価値を計算する名称評価値計算部と、
    前記要素評価値計算部によって計算された前記要素評価値と、前記名称評価値計算部によって計算された前記名称評価値とに基づき、前記複数の要素間の類似度を計算する結果統合部と
    を備える要素類似判定装置。
  2. 前記要素評価値計算部は、各要素を対象の要素として、前記各関数で前記対象の要素が使用される要素使用回数に応じて、前記各関数についての前記対象の要素の前記要素評価値を計算する
    請求項1に記載の要素類似判定装置。
  3. 前記要素評価値計算部は、前記各関数を対象の関数とし、前記各要素を対象の要素として、前記対象の関数で前記対象の要素が使用される直接使用回数と、前記対象の関数から呼び出された関数で前記対象の要素が使用される間接使用回数とを統合して前記要素評価値を計算する
    請求項2に記載の要素類似判定装置。
  4. 前記名称評価値計算部は、各要素を対象として、前記各関数で前記対象の要素の名称の一部を含む名称の要素が使用される名称使用回数に応じて、前記各関数についての前記対象の要素の前記名称評価値を計算する
    請求項1から3までのいずれか1項に記載の要素類似判定装置。
  5. 前記名称評価値計算部は、前記各関数を対象の関数とし、前記各要素を対象の要素として、前記対象の関数に含まれる名称の数で、前記名称使用回数を除して得られる重みによって、前記名称使用回数を重み付けして前記名称評価値を計算する
    請求項4に記載の要素類似判定装置。
  6. 前記結果統合部は、前記複数の要素の間の前記各関数についての前記要素評価値の類似度合い及び前記名称評価値の類似度合いに応じて、前記複数の要素間の類似度を計算する請求項1から5までのいずれか1項に記載の要素類似判定装置。
  7. コンピュータによって実現される要素評価値計算部が、ソースコードに含まれる各関数で、対象とする複数の要素それぞれが使用されるか否かに応じて、前記各関数について要素毎の要素評価値を計算し、
    コンピュータによって実現される名称評価値計算部が、前記各関数で、対象とする複数の要素それぞれの名称の一部を含む名称の要素が使用されるか否かに応じて、前記各関数について要素毎の名称評価値を計算し、
    コンピュータによって実現される結果統合部が、前記要素評価値と前記名称評価値とに基づき、前記複数の要素間の類似度を計算する要素類似判定方法。
  8. ソースコードに含まれる各関数で、対象とする複数の要素それぞれが使用されるか否かに応じて、前記各関数について要素毎の要素評価値を計算する要素評価値計算処理と、
    前記各関数で、対象とする複数の要素それぞれの名称の一部を含む名称の要素が使用されるか否かに応じて、前記各関数について要素毎の名称評価値を計算する名称評価値計算処理と、
    前記要素評価値計算処理によって計算された前記要素評価値と、前記名称評価値計算処理によって計算された前記名称評価値とに基づき、前記複数の要素間の類似度を計算する結果統合処理と
    をコンピュータに実行させる要素類似判定プログラム。
JP2017248674A 2017-12-26 2017-12-26 要素類似判定装置、要素類似判定方法及び要素類似判定プログラム Active JP6971835B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2017248674A JP6971835B2 (ja) 2017-12-26 2017-12-26 要素類似判定装置、要素類似判定方法及び要素類似判定プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2017248674A JP6971835B2 (ja) 2017-12-26 2017-12-26 要素類似判定装置、要素類似判定方法及び要素類似判定プログラム

Publications (2)

Publication Number Publication Date
JP2019114154A JP2019114154A (ja) 2019-07-11
JP6971835B2 true JP6971835B2 (ja) 2021-11-24

Family

ID=67223262

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017248674A Active JP6971835B2 (ja) 2017-12-26 2017-12-26 要素類似判定装置、要素類似判定方法及び要素類似判定プログラム

Country Status (1)

Country Link
JP (1) JP6971835B2 (ja)

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5826099B2 (ja) * 2012-04-04 2015-12-02 三菱電機株式会社 ソフトウェア評価支援装置及びプログラム
JP2016040707A (ja) * 2014-08-13 2016-03-24 富士通株式会社 ソフトウェア検証プログラム、ソフトウェア検証方法及びソフトウェア検証装置
JP6369269B2 (ja) * 2014-10-01 2018-08-08 日本電気株式会社 検証支援装置、検証支援方法およびコンピュータプログラム
JP2018124901A (ja) * 2017-02-03 2018-08-09 富士通株式会社 プログラム分析装置、プログラム分析方法及びプログラム分析プログラム

Also Published As

Publication number Publication date
JP2019114154A (ja) 2019-07-11

Similar Documents

Publication Publication Date Title
CN109063055B (zh) 同源二进制文件检索方法和装置
KR102376117B1 (ko) 병렬 결정 트리 프로세서 아키텍처
KR101840905B1 (ko) 상태 기계 격자에서의 카운터 동작
TW201737115A (zh) 一種機器學習系統的訓練方法和訓練系統
US9176732B2 (en) Method and apparatus for minimum cost cycle removal from a directed graph
WO2020063524A1 (zh) 一种法律文书的确定方法及系统
CN111045670B (zh) 一种二进制代码与源代码间复用关系的识别方法与装置
CN111062034A (zh) 一种Webshell文件检测方法、装置、电子设备及存储介质
WO2019102786A1 (ja) ソースコード分割装置、ソースコード解析装置、ソースコード分割方法及びソースコード分割プログラム
US20200012250A1 (en) Program editing device, program editing method, and computer readable medium
CN113886237A (zh) 分析报告的生成方法、装置、电子设备及存储介质
CN107832271B (zh) 函数图像绘制方法、装置、设备及计算机存储介质
JP6971835B2 (ja) 要素類似判定装置、要素類似判定方法及び要素類似判定プログラム
CN115862653A (zh) 音频去噪方法、装置、计算机设备和存储介质
US8626688B2 (en) Pattern matching device and method using non-deterministic finite automaton
CN114462381A (zh) 数据处理方法、装置、设备及存储介质
CN106971117B (zh) 调查设备和调查方法
CN114792007A (zh) 代码检测方法、装置、设备、存储介质和计算机程序产品
CN115293076A (zh) 生成电路的方法、电子设备及存储介质
US20170132278A1 (en) Systems and Methods for Inferring Landmark Delimiters for Log Analysis
US11790984B1 (en) Clustering for read thresholds history table compression in NAND storage systems
JP2018181196A (ja) 情報処理装置、プログラム、情報処理方法及びデータ構造
KR102382017B1 (ko) 악성코드 진화관계를 분석하는 장치 및 방법
US8176407B2 (en) Comparing values of a bounded domain
US20150371033A1 (en) String and Password Generation from Regular Expressions

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200914

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210831

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210907

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210927

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20211005

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20211102

R150 Certificate of patent or registration of utility model

Ref document number: 6971835

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150