JP6090850B2 - ソースプログラム解析システム、ソースプログラム解析方法およびプログラム - Google Patents
ソースプログラム解析システム、ソースプログラム解析方法およびプログラム Download PDFInfo
- Publication number
- JP6090850B2 JP6090850B2 JP2013074623A JP2013074623A JP6090850B2 JP 6090850 B2 JP6090850 B2 JP 6090850B2 JP 2013074623 A JP2013074623 A JP 2013074623A JP 2013074623 A JP2013074623 A JP 2013074623A JP 6090850 B2 JP6090850 B2 JP 6090850B2
- Authority
- JP
- Japan
- Prior art keywords
- matching
- similar
- matching part
- source program
- detected
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/75—Structural analysis for program understanding
- G06F8/751—Code clone detection
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44505—Configuring for program initiating, e.g. using registry, configuration files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/74—Reverse engineering; Extracting design information from source code
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Computational Linguistics (AREA)
- Stored Programmes (AREA)
Description
非特許文献1によると、コードクローンは以下の3種類に分類される。タイプ1は、空白、括弧等を除いて完全に一致するコードクローンである。タイプ2は、変数名、ラベル名、手続き名等のユーザ定義名称、または変数の型など一部の予約語のみが異なるコードクローンである。タイプ3は、タイプ2のコードクローンに、さらに文の挿入や削除、変更が施されているコードクローンである。非特許文献1は、このうちタイプ1および2のコードクローンを検出する技術を開示している。
また、特許文献1が開示するシステムは、検出したコードクローンにおいて、ソースコードが互いに一致するか、関数インターフェースが同一かの2点から評価し、その結果からコードクローンを4カテゴリに分類する。操作者は、このカテゴリを参照することで、例えば関数インターフェースのみ異なるコードクローンが他にあるか、ソースコードが一致するコードクローンが他にあるかを知ることができ、コードクローンを再利用する際に参考にすることができる。
ソースプログラムから、内容が互いに一致する一致部分を検出する一致部分検出手段と、
前記一致部分検出手段が検出した一致部分に基づいて、ソースプログラムから内容が互いに一致する部分と一致しない部分とで構成され、かつ、基準に合致する類似部分を検出する類似部分検出手段と、
前記類似部分検出手段が検出した類似部分を分析し、他の類似部分とどれだけ類似しているかを示す指標を出力する非一致部分分析手段と、を備え、
前記非一致部分分析手段は、前記類似部分検出手段が検出した類似部分の一致しない部分の構文が、他の類似部分の一致しない部分の構文とどれだけ類似しているかを示す構文類似度を算出する、
ことを特徴とする。
上記の目的を達成するため、本発明の第2の観点にかかるソースプログラム解析システムは、
ソースプログラムから、内容が互いに一致する一致部分を検出する一致部分検出手段と、
前記一致部分検出手段が検出した一致部分に基づいて、ソースプログラムから内容が互いに一致する部分と一致しない部分とで構成され、かつ、基準に合致する類似部分を検出する類似部分検出手段と、
前記類似部分検出手段が検出した類似部分を分析し、他の類似部分とどれだけ類似しているかを示す指標を出力する非一致部分分析手段と、
ソースプログラムから、実行単位の開始あるいは終了を示す標識を検出する実行単位標識検出手段と、を備え、
前記類似部分検出手段は、前記一致部分検出手段が検出した一致部分の直前にある実行単位標識検出手段が検出した第1の標識および当該一致部分の直後にある実行単位標識検出手段が検出した第2の標識を検出し、
前記類似部分検出手段は、前記ソースプログラムにおける前記第1の標識の終了位置と、前記一致部分の直前にある他の一致部分の終了位置とのうち後にある方から前記一致部分の開始位置までの部分を前部分として抽出し、かつ、前記一致部分の終了位置から前記ソースプログラムにおける前記第2の標識の開始位置と、前記一致部分の直後にある他の一致部分の開始位置とのうち前にある方までの部分を後部分として抽出し、
前記類似部分検出手段は、前記前部分と、前記一致部分と、前記後部分とを有する類似部分を検出する、
ことを特徴とする。
ソースプログラムから、内容が互いに一致する一致部分を検出する一致部分検出ステップと、
前記一致部分検出ステップで検出した一致部分に基づいて、ソースプログラムから内容が互いに一致する部分と一致しない部分とで構成され、かつ、基準に合致する類似部分を検出する類似部分検出ステップと、
前記類似部分検出ステップで検出した類似部分を分析し、他の類似部分とどれだけ類似しているかを示す指標を出力する非一致部分分析ステップと、を含み、
前記非一致部分分析ステップは、前記類似部分検出ステップで検出した類似部分の一致しない部分の構文が、他の類似部分の一致しない部分の構文とどれだけ類似しているかを示す構文類似度を算出するステップを含む、
ことを特徴とする。
上記の目的を達成するため、本発明の第4の観点にかかるソースプログラム解析方法は、
ソースプログラムから、内容が互いに一致する一致部分を検出する一致部分検出ステップと、
前記一致部分検出ステップで検出した一致部分に基づいて、ソースプログラムから内容が互いに一致する部分と一致しない部分とで構成され、かつ、基準に合致する類似部分を検出する類似部分検出ステップと、
前記類似部分検出ステップで検出した類似部分を分析し、他の類似部分とどれだけ類似しているかを示す指標を出力する非一致部分分析ステップと、
ソースプログラムから、実行単位の開始あるいは終了を示す標識を検出する実行単位標識検出ステップと、を含み、
前記類似部分検出ステップは、
前記一致部分検出ステップで検出した一致部分の直前にある実行単位標識検出ステップで検出した第1の標識および当該一致部分の直後にある実行単位標識検出ステップで検出した第2の標識を検出するステップと、
前記ソースプログラムにおける前記第1の標識の終了位置と、前記一致部分の直前にある他の一致部分の終了位置とのうち後にある方から前記一致部分の開始位置までの部分を前部分として抽出し、かつ、前記一致部分の終了位置から前記ソースプログラムにおける前記第2の標識の開始位置と、前記一致部分の直後にある他の一致部分の開始位置とのうち前にある方までの部分を後部分として抽出するステップと、
前記前部分と、前記一致部分と、前記後部分とを有する類似部分を検出するステップと、
を含むことを特徴とする。
ソースプログラムから、内容が互いに一致する一致部分を検出する一致部分検出機能、
前記一致部分検出機能が検出した一致部分に基づいて、ソースプログラムから内容が互いに一致する部分と一致しない部分とで構成される所定の基準を満たす類似部分を検出する類似部分検出機能、
前記類似部分検出機能が検出した類似部分を分析し、他の類似部分とどれだけ類似しているかを示す指標を出力する非一致部分分析機能、を実現させ、
前記非一致部分分析機能は、前記類似部分検出機能が検出した類似部分の一致しない部分の構文が、他の類似部分の一致しない部分の構文とどれだけ類似しているかを示す構文類似度を算出する機能を含む、
ことを特徴とする。
上記の目的を達成するため、本発明の第6の観点にかかるプログラムは、コンピュータに、
ソースプログラムから、内容が互いに一致する一致部分を検出する一致部分検出機能、
前記一致部分検出機能が検出した一致部分に基づいて、ソースプログラムから内容が互いに一致する部分と一致しない部分とで構成される所定の基準を満たす類似部分を検出する類似部分検出機能、
前記類似部分検出機能が検出した類似部分を分析し、他の類似部分とどれだけ類似しているかを示す指標を出力する非一致部分分析機能、
ソースプログラムから、実行単位の開始あるいは終了を示す標識を検出する実行単位標識検出機能、を実現させ、
前記類似部分検出機能は、
前記一致部分検出機能が検出した一致部分の直前にある実行単位標識検出機能が検出した第1の標識および当該一致部分の直後にある実行単位標識検出機能が検出した第2の標識を検出する機能、
前記ソースプログラムにおける前記第1の標識の終了位置と、前記一致部分の直前にある他の一致部分の終了位置とのうち後にある方から前記一致部分の開始位置までの部分を前部分として抽出し、かつ、前記一致部分の終了位置から前記ソースプログラムにおける前記第2の標識の開始位置と、前記一致部分の直後にある他の一致部分の開始位置とのうち前にある方までの部分を後部分として抽出する機能、
前記前部分と、前記一致部分と、前記後部分とを有する類似部分を検出する機能、
を含むことを特徴とする。
本発明の実施形態にかかるソースプログラム解析システムは、ソースプログラムを解析し、文の挿入や削除、変更が施されている(すなわち非一致部分を有する)コードクローンを検出した上で、コードクローンにおける非一致部分のプログラム構造を解析し、類似性に関する指標を出力する。操作者は、この類似性に関する指標を参照し、そのプログラムの修正コストを算出することができる。
ソースプログラム解析システム100は、全体としては、ソースプログラム1を解析し、検出したコードクローンの類似性に関する指標を非一致構造情報DB25に記録する。
一致部分検出部11の機能を実現するには、例えば非特許文献2が開示する技術およびソフトウェアを用いることができる。本実施形態においては、非特許文献2が開示するソフトウェアのひとつであるCCfinderXを使用する。
一致部分検出部11は、一致部分を行ごとに検出し、検出した一致部分の位置をソースプログラム上の開始行番号および終了行番号で特定する。ここで行とは、ソースプログラム上において、改行を示すコードに挟まれた部分のコードの集合を指す。
類似部分検出部13は、以下に示す2パターンのいずれかに合致する部分を、基準に合致する類似部分として検出する。
第1のパターンの類似部分を検出するとき、類似部分検出部13は、一致部分情報DB21に記録された一致部分情報を参照し、複数の一致部分が、間に他の一致部分を挟まずに同じ出現順番でソースプログラムに配置されているものを検出する。そして、検出した複数の一致部分および当該一致部分の間にある部分を、ひとつの類似部分(第1のパターンの類似部分)として抽出する。
類似部分検出部13は、一致部分情報DB21に記録された一致部分情報、および実行単位標識情報DB23に記録された実行単位標識情報を参照し、各一致部分の前部分および後部分を検出する。ここで、前部分とは、所定の区切りからその一致部分の開始行までの部分を指し、後部分とは、その一致部分の終了行から所定の区切りまでの部分を指す。所定の区切りとは、実行単位標識または他の一致部分の開始行もしくは終了行の中で、その一致部分に最も近いものを指す。
第2のパターンの類似部分を検出するとき、類似部分検出部13は、前部分あるいは後部分が検出された一致部分について、前部分から一致部分を経て後部分までの範囲を、ひとつの類似部分として抽出する。
なお、類似部分検出部13は、前部分のみが検出された一致部分があると、前部分からその一致部分までを類似部分として抽出する。類似部分検出部13は、後部分のみが検出された一致部分があると、一致部分から後部分までを類似部分として抽出する。
構文解析の際、非一致部分分析部14は、LR法(Left-to-Right scanning)によって非一致部分のプログラム記述を解析し、構文木構造で表された構文構造を取得する。
コードクローンIDは、一致部分検出部11が、ソースプログラム1から検出した一致部分(タイプ1あるいはタイプ2のコードクローン)にユニークに付ける識別情報である。
グループIDは、その一致部分が属するグループを示す識別情報である。同一のグループに属する一致部分は、互いに内容が一致する。
ファイル名は、ソースプログラム1のファイル名を指す。
開始行番号は、ソースプログラム1上で当該一致部分が存在する部分の最初の行番号を示す。
終了行番号は、ソースプログラム1上で当該一致部分が存在する部分の最後の行番号を示す。
プログラム言語種は、後述する文法定義がどのプログラム言語に対応するものであるかを示す情報である。例えば「C(C言語)」「JAVA(登録商標)」などといった形で表現される。
文法定義は、プログラム言語種別で示されたプログラム言語の文法を定義する情報である。文法定義は、例えば、関数の開始を示すコード、関数の終了を示すコード、変数の範囲、数値の範囲、演算子の種類やコード、代入演算子を示すコード、式の形式、代入式の形式等が、対象のプログラム言語ではどのように規定されているかを示す。
実行単位標識IDは、実行単位標識検出部12が、ソースプログラム1から検出した実行単位の開始あるいは終了を示すコード(標識)に付ける識別情報である。
実行単位標識種別は、検出されたコードが、セクション(節)、ディビジョン(部)、段落、手続き(サブルーチン)、関数、ブロック等の実行単位のどれに対応するものであるかを示す情報である。
開始終了属性は、検出されたコードが実行単位の開始に対応するものであるか、終了に対応するものであるかを表す情報である。
ファイル名は、ソースプログラム1のファイル名を示す情報である。
開始行番号は、検出されたコードが開始する行を示す情報である。
終了行番号は、検出されたコードが終了する行を示す情報である。
類似部分ID(T2401)は、類似部分検出部13が、ソースプログラム1から検出した類似部分にユニークに付ける識別情報である。
類似部分グループID(T2402)は、類似部分が属する類似部分グループを示す情報である。同一の類似部分グループに属する類似部分は、同一のグループに属する一致部分を含む。
ファイル名(T2403)は、ソースプログラム1のファイル名を示す。
開始行番号(T2404)は、検出された類似部分が開始する行を示す。
終了行番号(T2405)は、検出された類似部分が終了する行を示す。
一致部分リスト(T2406)は、当該類似部分に含まれる一致部分のコードクローンIDを示す。一致部分リストは、一致部分に存在するコードクローンIDを出現する順にリスト化された形で保有する。
類似部分ID(T2501)は、類似部分を識別するための識別情報である。
類似部分グループID(T2502)は、類似部分のグループを識別するための識別情報である。
非一致部分構文構造(T2503)は、類似部分が保持する非一致部分の構文構造を示す。非一致部分構文構造は、XML(eXtensible Markup Language)、あるいはDOM(Document Object Model)等の方式によって階層構造で表現されたデータとして、あるいはバイナリデータとして記録される。
非一致部分共通構文構造(T2504)は、同一類似部分グループIDを有する類似部分の非一致部分が共通に保持する構文構造(非一致部分共通構文構造)を示す。非一致部分共通構文は、XML(eXtensible Markup Language)、あるいはDOM(Document Object Model)等の方式によって階層構造で表現されたデータとして、あるいはバイナリデータとして記録される。
非一致部分構文類似度(T2505)は、各類似部分の非一致部分が、非一致部分共通構文構造とどの程度類似しているかを示す数値指標である。具体的には、階層構造で表現された非一致部分構文構造において、全体のノード数のうちどれだけの割合のノードが非一致部分共通構文構造と共通しているかをパーセンテージで示す。
制御部110は、図11に示すように、ソースプログラム1に存在する一致部分を検出する(ステップS101)。
具体的には、制御部110は図9に示すソースプログラム1のプログラム記述を解析し、第05行から第06行のソースコードと、第11行から第12行のソースコードとが内容が一致することを検出する。これを受けて、制御部110は、第05行から第06行のソースコードと、第11行から第12行のソースコードを一致部分として検出する。同様に、制御部110は、第08行から第10行、および第14行から第16行の各ソースコードも一致部分として検出する。
コードクローンIDを付与する際、制御部110は、検出した一致部分間でコードクローンIDが重複しないように採番する。
グループIDを付与する際、制御部110は、内容が一致する一致部分間でグループIDが一致するように、また内容が一致しないコードクローン間ではグループIDが重複しないように採番する。
以上を踏まえ、制御部110は第05行から第06行のソースコードにコードクローンID「1」、グループID「1」を付与し、第08行から第10行のソースコードにコードクローンID「2」グループID「2」を付与する。
また、第11行から第12行のソースコードは第05行から第06行のソースコードと内容が一致する。そこで、制御部110は第11行から第12行のソースコードにはコードクローンID「3」を付与するとともに、グループIDは第05行から第06行のソースコードと一致する「1」を付与する。同様に、制御部110は第14行から第16行のソースコードにはコードクローンID「4」グループID「2」を付与する。
具体的には、第05行から第06行のソースコードは、コードクローンID「1」、グループID「1」であり、ファイル名はソースプログラム1のファイル名から「src.c」であり、開始行番号は「05」であり、終了行番号は「06」である。制御部110は、これらを連結し、一致部分情報DB21に記録する。また制御部110は、第08行から第10行、第11行から第12行、および第14行から第16行の各ソースコードについても同様の処理を行う。
ここから、制御部110が実行する実行単位標識検出処理について、図13を参照しながら説明する。
文法定義情報DB22は、図14に示すとおり、C言語に対応する文法定義情報を記録している。この文法定義情報には、関数の開始として「{」記号、関数の終了として「}」記号が定義されている。制御部110はこの文法定義情報に従い、ソースプログラム1の中で「{」を関数の開始を示す記号として、「}」を関数の終了を示す記号として扱う。
具体的には、ソースプログラム1の第01行にある「{」記号は、実行単位標識ID「1」を付与されており、「関数」の「開始」を示す属性を有しており、ファイル名はソースプログラム1のファイル名から「src.c」であり、開始行番号は「01」であり、終了行番号「01」である。制御部110は、これらの情報を連結し、実行単位標識情報DB23に記録する。また制御部110は、ソースプログラム1の第18行にある「}」記号についても同様の処理を行う。
ここから、制御部110が実行する類似部分検出処理について、図16を参照しながら説明する。
ここから、図17を参照し、一致部分の出現順による類似部分検出処理について説明する。
類似部分1は、コードクローンID1の一致部分の開始位置から開始するため、開始行番号は第05行となる。また類似部分1は、コードクローンID2のコードクローンの終了位置で終了するため、終了行番号は第10行となる。また、類似部分1は、その両端のコードクローンが、それぞれグループID「1」と「2」を有するため、一致部分リストとして「1、2」を有する。
類似部分2は、コードクローンID3の一致部分の開始位置から開始するため、開始行番号は第11行となる。また類似部分2は、コードクローンID4の一致部分の終了位置で終了するため、終了行番号は第16行となる。また、類似部分2は、その両端のコードクローンが、それぞれグループID「1」と「2」を有するため、一致部分リストとして「1、2」を有する。
ここから、図18を参照し、一致部分の前後部分を含む類似部分検出処理について説明する。
ここで、制御部110は、(1)に基づいて検出した所定の区切り部分が、コードクローンID3の一致部分の開始行(第11行)の前行であることを検出する。その結果、制御部110は、コードクローンID3の一致部分は前部分を持たないと検出する。
具体的には、制御部110は、コードクローンID1の一致部分に基づいて、前部分(第02行から第04行)、一致部分(第05行から第06行)、後部分(第07行から第07行)を連結し、類似部分3として検出する。類似部分3は、開始行番号は第02行であり、終了行番号は第07行である。また、類似部分3は、グループID「1」を有する一致部分に基づいて検出されており、一致部分リストとして「1」を有する。
同様にコードクローンID2〜4に基づき、類似部分4〜6を検出する。ただし、コードクローンID2の一致部分は後部分を有さず、またコードクローンID3の一致部分は前部分を有さないため、それぞれ一致部分自身の終了行、開始行が類似部分の終了行、開始行となる。この結果、制御部110は、類似部分4(第07行から第10行まで、一致部分リストは「2」)、類似部分5(第11行から第13行まで、一致部分リストは「1」)、類似部分6(第13行から第17行まで、一致部分リストは「2」)を検出する。
類似部分IDを付与する際、制御部110は、検出した類似部分間で類似部分IDが重複しないように採番する。本実施例においては、制御部110は、類似部分1に類似部分ID「1」を付与し、以降類似部分6まで順に類似部分IDを付与する。
また類似部分グループIDを付与する際、制御部110は、同一のグループIDを有するコードクローンに基づいて、同一のステップ(ステップS310またはステップS320)で検出された類似部分は同一の類似部分グループIDを有するように採番する。ステップS310で制御部110が検出した類似部分はすべて第1のパターンの類似部分であり、すべて同一のパターンで検出されたものである。同様に、ステップS320で制御部110が検出した類似部分はすべて第2のパターンの類似部分であり、同一のパターンで検出されたものである。
具体的には、上記ステップS310において、類似部分1と2が、同一のグループID(1および2)を有するコードクローンから検出されているため、制御部110は、類似部分1と2に同一の類似部分グループID「1」を付与する。また上記ステップS320において、類似部分3と5が、同一のグループID「1」を有するコードクローンから検出されているため、制御部110は、類似部分3と5に同一の類似部分グループID「2」を付与する。同様に制御部110は、類似部分4と6に同一の類似部分グループID「3」を付与する。
具体的には、制御部110は、ステップS310で検出した類似部分1に基づいて、類似部分情報(類似部分ID「1」、類似部分グループID「1」、ファイル名「src.c」、開始行番号「05」、終了行番号「10」、一致部分リストとして「1、2」を記録する。同様に制御部110は、類似部分2〜6についても類似部分情報DB24に記録する。
ここから、非一致構造分析処理について、図20を参照しながら説明する。
同様に制御部110は、ソースプログラム1の第13行を、類似部分2における非一致部分として特定し、抽出する。
また同様に、制御部110は、類似部分2の非一致部分(第13行)より、ソースプログラム1の第13行を構文解析する。ソースプログラム1の第13行には、変数(c)、代入演算子(=)、変数(a)、演算子(+)、変数(b)、演算子(+)、変数(c)を順に接続した式が記載されている。この式を構文木構造に基づいて解析することにより、制御部110は、図21(b)に示す構文構造を取得する。
制御部110は、両者の構文構造を構文木の上部から順にたどることにより比較する。制御部110は、両者において代入演算子(=)およびその左辺(変数(c))は共通するが、その右辺は違う構造を有することを識別し、かつ、その右辺は「式」として共通する性質を有すると識別する。その結果、制御部110は、図21(c)に示すとおり、変数(c)、代入演算子(=)、式を順に接続した構文構造を非一致部分共通構文構造として抽出する。
制御部110は、図21(a)に示す類似部分1の非一致部分の構文構造と図21(c)に示す非一致部分共通構文構造とを比較する。その結果、制御部110は、非一致部分の構文構造が有する3ノードのうち、代入演算子(=)のノードと、変数(c)のノードとは非一致部分共通構文構造と一致し、数値(30)のノードも非一致部分共通構文構造のノード(「式」)と一致することを検出する。非一致部分の構文構造が有する3ノードのうち、3ノードが一致することから、制御部110は、類似部分1の構文類似度を3/3=100%と算出する。
同様に制御部110は、類似部分2の非一致部分の構文構造と非一致部分共通構文構造とを比較する。その結果、制御部110は、非一致部分の構文構造が有する7ノードのうち、3ノードが一致することから、制御部110は、類似部分1の構文類似度を3/7=42.8%と算出する。
制御部110は、類似部分1について、類似部分ID「1」、類似部分グループID「1」、非一致部分の構文構造の情報(図21(a)に示す構文の階層構造を示すバイナリデータ)、非一致部分共通構文構造の情報(図21(c)に示す構文の階層構造を示すバイナリデータ)、構文類似度「100%」からなる非一致構造情報を生成し、非一致構造情報DB25に記録する。同様に、類似部分2についても、非一致構造情報を生成し、非一致構造情報DB25に記録する。この結果、非一致構造情報DB25には、図22に示す非一致構造情報が記録される。
また、制御部110は、各類似部分の構文類似度を非一致構造情報DB25に記録する。この構文類似度は、プログラムを保守する観点で重要となる構造的、構文的な類似性を数値化したものである。従って、操作者は、構文類似度を参照することにより、プログラムを修正する上での作業量や所要時間を見積もることができる。
上記の処理によって得られた構文類似度を参照することにより、例えばシステムの移行にあたって提案された移行方法の作業量や所要時間を見積もることが可能となり、移行方法を評価することができる。また、既存システムのソースコードのリファクタリングにおいて、必要な箇所を特定し作業量を見積もることができる。
同様のことは、他のDB(文法定義情報DB22、実行単位標識情報DB23、類似部分情報DB24、非一致構造情報DB25)にも当てはまる。すなわち、各DBが存在する場所は任意であり、また各情報が、当該情報を必要とする機能部あるいは操作者に伝わるのであればDBとして存在する必要はない。
また、各DBのフォーマットは任意であり、一般的なファイルでも、データベース構造を有するデータセット等でも実現することができる。
すなわち、本発明のソースプログラム解析システムにより、例えば提出された課題の論文等における類似部分とその類似度を取得することができる。これにより、提出者間でのテキストのコピーの有無を判断する材料とすることも可能である。
一致部分検出部11は、ソースプログラム1から内容が互いに一致する一致部分を検出する。
類似部分検出部13は、一致部分検出部11が検出した一致部分に基づいて、ソースプログラム1から内容が互いに一致する部分と一致しない部分とで構成される類似部分を検出する。
非一致部分分析部14は、類似部分検出部13が検出した類似部分の一致しない部分の構文を分析し、他の類似部分とどれだけ類似しているかを示す指標を分析結果2として出力する。
操作者は、非一致部分分析部14が生成した分析結果2により、ソースプログラム1にある文の挿入や削除、変更が施されているコードクローンの位置や数、構文類似度を知ることができる。すなわち、操作者は、ソースプログラム1の修正コストを算出するために有効な情報を得ることができる。
このように、上記の構成により、本発明の課題は達成され、また、本願発明の効果が奏される。
ソースプログラムから、内容が互いに一致する一致部分を検出する一致部分検出手段と、
前記一致部分検出手段が検出した一致部分に基づいて、ソースプログラムから内容が互いに一致する部分と一致しない部分とで構成され、かつ、基準に合致する類似部分を検出する類似部分検出手段と、
前記類似部分検出手段が検出した類似部分を分析し、他の類似部分とどれだけ類似しているかを示す指標を出力する非一致部分分析手段と、を備える、
ことを特徴とするソースプログラム解析システム。
前記類似部分検出手段は、前記一致部分検出手段が検出した一致部分から、間に他の一致部分を挟まずに同じ出現順番で配置されている複数の一致部分を検出し、当該複数の一致部分と、当該複数の一致部分にはさまれた一致しない部分とで構成される類似部分を検出する、
ことを特徴とする付記1に記載のソースプログラム解析システム。
前記非一致部分分析手段は、前記類似部分検出手段が検出した類似部分の一致しない部分の構文が、他の類似部分の一致しない部分の構文とどれだけ類似しているかを示す構文類似度を算出する、
ことを特徴とする付記1または2に記載のソースプログラム解析システム。
前記非一致部分分析手段は、前記類似部分検出手段が検出した類似部分の一致しない部分を構成要素に分割し、当該構成要素のうち他の類似部分の一致しない部分と共通する構成要素の割合から構文類似度を算出する、
ことを特徴とする付記3に記載のソースプログラム解析システム。
前記非一致部分分析手段は、前記類似部分検出手段が検出した類似部分の一致しない部分を構成要素に分割し、他の類似部分の一致しない部分と共通する構成要素の構文構造を出力する、
ことを特徴とする付記3または4に記載のソースプログラム解析システム。
前記非一致部分分析手段は、前記類似部分検出手段が検出した類似部分の一致しない部分を構文木構造に基づいて分析することにより、構成要素ごとに分割し、あるいは他の類似部分の一致しない部分と共通する構成要素の構文構造を出力する、
ことを特徴とする付記4または5に記載のソースプログラム解析システム。
ソースプログラムから、実行単位の開始あるいは終了を示す標識を検出する実行単位標識検出手段をさらに備え、
前記類似部分検出手段は、前記一致部分検出手段が検出した一致部分の直前にある実行単位標識検出手段が検出した第1の標識および当該一致部分の直後にある実行単位標識検出手段が検出した第2の標識を検出し、
前記類似部分検出手段は、前記ソースプログラムにおける前記第1の標識の終了位置と、前記一致部分の直前にある他の一致部分の終了位置とのうち後にある方から前記一致部分の開始位置までの部分を前部分として抽出し、かつ、前記一致部分の終了位置から前記ソースプログラムにおける前記第2の標識の開始位置と、前記一致部分の直後にある他の一致部分の開始位置とのうち前にある方までの部分を後部分として抽出し、
前記類似部分検出手段は、前記前部分と、前記一致部分と、前記後部分とを有する類似部分を検出する、
ことを特徴とする付記1から6のいずれか1つに記載のソースプログラム解析システム。
前記類似部分検出手段は、前記前部分と前記一致部分とを有する類似部分、および前記一致部分と前記後部分とを有する類似部分を検出する、
ことを特徴とする付記7に記載のソースプログラム解析システム。
ソースプログラムから、内容が互いに一致する一致部分を検出する一致部分検出ステップと、
前記一致部分検出ステップで検出した一致部分に基づいて、ソースプログラムから内容が互いに一致する部分と一致しない部分とで構成され、かつ、基準に合致する類似部分を検出する類似部分検出ステップと、
前記類似部分検出ステップで検出した類似部分を分析し、他の類似部分とどれだけ類似しているかを示す指標を出力する非一致部分分析ステップと、を備える、
ことを特徴とするソースプログラム解析方法。
コンピュータに、
ソースプログラムから、内容が互いに一致する一致部分を検出する一致部分検出機能、
前記一致部分検出機能が検出した一致部分に基づいて、ソースプログラムから内容が互いに一致する部分と一致しない部分とで構成される所定の基準を満たす類似部分を検出する類似部分検出機能、
前記類似部分検出機能が検出した類似部分を分析し、他の類似部分とどれだけ類似しているかを示す指標を出力する非一致部分分析機能、を実現させる、
ことを特徴とするプログラム。
2:分析結果
11:一致部分検出部
12:実行単位標識検出部
13:類似部分検出部
14:非一致部分分析部
21:一致部分情報DB
22:文法定義情報DB
23:実行単位標識情報DB
24:類似部分情報DB
25:非一致構造情報DB
100:ソースプログラム解析システム
Claims (12)
- ソースプログラムから、内容が互いに一致する一致部分を検出する一致部分検出手段と、
前記一致部分検出手段が検出した一致部分に基づいて、ソースプログラムから内容が互いに一致する部分と一致しない部分とで構成され、かつ、基準に合致する類似部分を検出する類似部分検出手段と、
前記類似部分検出手段が検出した類似部分を分析し、他の類似部分とどれだけ類似しているかを示す指標を出力する非一致部分分析手段と、を備え、
前記非一致部分分析手段は、前記類似部分検出手段が検出した類似部分の一致しない部分の構文が、他の類似部分の一致しない部分の構文とどれだけ類似しているかを示す構文類似度を算出する、
ことを特徴とするソースプログラム解析システム。 - 前記類似部分検出手段は、前記一致部分検出手段が検出した一致部分から、間に他の一致部分を挟まずに同じ出現順番で配置されている複数の一致部分を検出し、当該複数の一致部分と、当該複数の一致部分にはさまれた一致しない部分とで構成される類似部分を検出する、
ことを特徴とする請求項1に記載のソースプログラム解析システム。 - 前記非一致部分分析手段は、前記類似部分検出手段が検出した類似部分の一致しない部分を構成要素に分割し、当該構成要素のうち他の類似部分の一致しない部分と共通する構成要素の割合から構文類似度を算出する、
ことを特徴とする請求項1又は2に記載のソースプログラム解析システム。 - 前記非一致部分分析手段は、前記類似部分検出手段が検出した類似部分の一致しない部分を構成要素に分割し、他の類似部分の一致しない部分と共通する構成要素の構文構造を出力する、
ことを特徴とする請求項1から3の何れか一項に記載のソースプログラム解析システム。 - 前記非一致部分分析手段は、前記類似部分検出手段が検出した類似部分の一致しない部分を構文木構造に基づいて分析することにより、構成要素ごとに分割し、あるいは他の類似部分の一致しない部分と共通する構成要素の構文構造を出力する、
ことを特徴とする請求項3又は4に記載のソースプログラム解析システム。 - ソースプログラムから、実行単位の開始あるいは終了を示す標識を検出する実行単位標識検出手段をさらに備え、
前記類似部分検出手段は、前記一致部分検出手段が検出した一致部分の直前にある実行単位標識検出手段が検出した第1の標識および当該一致部分の直後にある実行単位標識検出手段が検出した第2の標識を検出し、
前記類似部分検出手段は、前記ソースプログラムにおける前記第1の標識の終了位置と、前記一致部分の直前にある他の一致部分の終了位置とのうち後にある方から前記一致部分の開始位置までの部分を前部分として抽出し、かつ、前記一致部分の終了位置から前記ソースプログラムにおける前記第2の標識の開始位置と、前記一致部分の直後にある他の一致部分の開始位置とのうち前にある方までの部分を後部分として抽出し、
前記類似部分検出手段は、前記前部分と、前記一致部分と、前記後部分とを有する類似部分を検出する、
ことを特徴とする請求項1から5の何れか一項に記載のソースプログラム解析システム。 - ソースプログラムから、内容が互いに一致する一致部分を検出する一致部分検出手段と、
前記一致部分検出手段が検出した一致部分に基づいて、ソースプログラムから内容が互いに一致する部分と一致しない部分とで構成され、かつ、基準に合致する類似部分を検出する類似部分検出手段と、
前記類似部分検出手段が検出した類似部分を分析し、他の類似部分とどれだけ類似しているかを示す指標を出力する非一致部分分析手段と、
ソースプログラムから、実行単位の開始あるいは終了を示す標識を検出する実行単位標識検出手段と、を備え、
前記類似部分検出手段は、前記一致部分検出手段が検出した一致部分の直前にある実行単位標識検出手段が検出した第1の標識および当該一致部分の直後にある実行単位標識検出手段が検出した第2の標識を検出し、
前記類似部分検出手段は、前記ソースプログラムにおける前記第1の標識の終了位置と、前記一致部分の直前にある他の一致部分の終了位置とのうち後にある方から前記一致部分の開始位置までの部分を前部分として抽出し、かつ、前記一致部分の終了位置から前記ソースプログラムにおける前記第2の標識の開始位置と、前記一致部分の直後にある他の一致部分の開始位置とのうち前にある方までの部分を後部分として抽出し、
前記類似部分検出手段は、前記前部分と、前記一致部分と、前記後部分とを有する類似部分を検出する、
ことを特徴とするソースプログラム解析システム。 - 前記類似部分検出手段は、前記前部分と前記一致部分とを有する類似部分、および前記一致部分と前記後部分とを有する類似部分を検出する、
ことを特徴とする請求項7に記載のソースプログラム解析システム。 - ソースプログラムから、内容が互いに一致する一致部分を検出する一致部分検出ステップと、
前記一致部分検出ステップで検出した一致部分に基づいて、ソースプログラムから内容が互いに一致する部分と一致しない部分とで構成され、かつ、基準に合致する類似部分を検出する類似部分検出ステップと、
前記類似部分検出ステップで検出した類似部分を分析し、他の類似部分とどれだけ類似しているかを示す指標を出力する非一致部分分析ステップと、を含み、
前記非一致部分分析ステップは、前記類似部分検出ステップで検出した類似部分の一致しない部分の構文が、他の類似部分の一致しない部分の構文とどれだけ類似しているかを示す構文類似度を算出するステップを含む、
ことを特徴とするソースプログラム解析方法。 - ソースプログラムから、内容が互いに一致する一致部分を検出する一致部分検出ステップと、
前記一致部分検出ステップで検出した一致部分に基づいて、ソースプログラムから内容が互いに一致する部分と一致しない部分とで構成され、かつ、基準に合致する類似部分を検出する類似部分検出ステップと、
前記類似部分検出ステップで検出した類似部分を分析し、他の類似部分とどれだけ類似しているかを示す指標を出力する非一致部分分析ステップと、
ソースプログラムから、実行単位の開始あるいは終了を示す標識を検出する実行単位標識検出ステップと、を含み、
前記類似部分検出ステップは、
前記一致部分検出ステップで検出した一致部分の直前にある実行単位標識検出ステップで検出した第1の標識および当該一致部分の直後にある実行単位標識検出ステップで検出した第2の標識を検出するステップと、
前記ソースプログラムにおける前記第1の標識の終了位置と、前記一致部分の直前にある他の一致部分の終了位置とのうち後にある方から前記一致部分の開始位置までの部分を前部分として抽出し、かつ、前記一致部分の終了位置から前記ソースプログラムにおける前記第2の標識の開始位置と、前記一致部分の直後にある他の一致部分の開始位置とのうち前にある方までの部分を後部分として抽出するステップと、
前記前部分と、前記一致部分と、前記後部分とを有する類似部分を検出するステップと、
を含むことを特徴とするソースプログラム解析方法。 - コンピュータに、
ソースプログラムから、内容が互いに一致する一致部分を検出する一致部分検出機能、
前記一致部分検出機能が検出した一致部分に基づいて、ソースプログラムから内容が互いに一致する部分と一致しない部分とで構成される所定の基準を満たす類似部分を検出する類似部分検出機能、
前記類似部分検出機能が検出した類似部分を分析し、他の類似部分とどれだけ類似しているかを示す指標を出力する非一致部分分析機能、を実現させ、
前記非一致部分分析機能は、前記類似部分検出機能が検出した類似部分の一致しない部分の構文が、他の類似部分の一致しない部分の構文とどれだけ類似しているかを示す構文類似度を算出する機能を含む、
プログラム。 - コンピュータに、
ソースプログラムから、内容が互いに一致する一致部分を検出する一致部分検出機能、
前記一致部分検出機能が検出した一致部分に基づいて、ソースプログラムから内容が互いに一致する部分と一致しない部分とで構成される所定の基準を満たす類似部分を検出する類似部分検出機能、
前記類似部分検出機能が検出した類似部分を分析し、他の類似部分とどれだけ類似しているかを示す指標を出力する非一致部分分析機能、
ソースプログラムから、実行単位の開始あるいは終了を示す標識を検出する実行単位標識検出機能、を実現させ、
前記類似部分検出機能は、
前記一致部分検出機能が検出した一致部分の直前にある実行単位標識検出機能が検出した第1の標識および当該一致部分の直後にある実行単位標識検出機能が検出した第2の標識を検出する機能、
前記ソースプログラムにおける前記第1の標識の終了位置と、前記一致部分の直前にある他の一致部分の終了位置とのうち後にある方から前記一致部分の開始位置までの部分を前部分として抽出し、かつ、前記一致部分の終了位置から前記ソースプログラムにおける前記第2の標識の開始位置と、前記一致部分の直後にある他の一致部分の開始位置とのうち前にある方までの部分を後部分として抽出する機能、
前記前部分と、前記一致部分と、前記後部分とを有する類似部分を検出する機能、
を含むプログラム。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013074623A JP6090850B2 (ja) | 2013-03-29 | 2013-03-29 | ソースプログラム解析システム、ソースプログラム解析方法およびプログラム |
US14/781,122 US9880834B2 (en) | 2013-03-29 | 2014-03-24 | Source program analysis system, source program analysis method, and recording medium on which program is recorded |
PCT/JP2014/058021 WO2014157056A1 (ja) | 2013-03-29 | 2014-03-24 | ソースプログラム解析システム、ソースプログラム解析方法およびプログラムを記録した記録媒体 |
CN201480019304.0A CN105122208A (zh) | 2013-03-29 | 2014-03-24 | 源程序分析系统、源程序分析方法和记录有程序的非瞬时记录介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013074623A JP6090850B2 (ja) | 2013-03-29 | 2013-03-29 | ソースプログラム解析システム、ソースプログラム解析方法およびプログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2014199569A JP2014199569A (ja) | 2014-10-23 |
JP6090850B2 true JP6090850B2 (ja) | 2017-03-08 |
Family
ID=51624030
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2013074623A Active JP6090850B2 (ja) | 2013-03-29 | 2013-03-29 | ソースプログラム解析システム、ソースプログラム解析方法およびプログラム |
Country Status (4)
Country | Link |
---|---|
US (1) | US9880834B2 (ja) |
JP (1) | JP6090850B2 (ja) |
CN (1) | CN105122208A (ja) |
WO (1) | WO2014157056A1 (ja) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2017010476A (ja) * | 2015-06-26 | 2017-01-12 | 三菱電機株式会社 | 類似判定装置、類似判定方法及び類似判定プログラム |
JP6439623B2 (ja) * | 2015-08-05 | 2018-12-19 | 富士通株式会社 | 計算機、動作周波数決定プログラム及び動作周波数決定方法 |
US10725763B1 (en) * | 2017-06-28 | 2020-07-28 | Amazon Technologies, Inc. | Update and rollback of configurations in a cloud-based architecture |
US10565470B2 (en) | 2017-12-15 | 2020-02-18 | International Business Machines Corporation | System, method and recording medium for user interface (UI)-level clone detection |
US11099842B2 (en) | 2019-01-08 | 2021-08-24 | Saudi Arabian Oil Company | Source code similarity detection using digital fingerprints |
US11237805B2 (en) * | 2019-07-09 | 2022-02-01 | Disney Enterprises, Inc. | Techniques for automatically detecting programming deficiencies |
JP7258158B2 (ja) * | 2019-08-28 | 2023-04-14 | 三菱電機株式会社 | 改善提案装置、および、改善提案方法 |
US11416245B2 (en) * | 2019-12-04 | 2022-08-16 | At&T Intellectual Property I, L.P. | System and method for syntax comparison and analysis of software code |
US20220222165A1 (en) * | 2021-01-12 | 2022-07-14 | Microsoft Technology Licensing, Llc. | Performance bug detection and code recommendation |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2003216425A (ja) * | 2002-01-24 | 2003-07-31 | Japan Science & Technology Corp | 類似度計測システム |
JP2006018693A (ja) | 2004-07-02 | 2006-01-19 | Fujitsu Ltd | 類似ソースコード抽出プログラム、類似ソースコード抽出装置および類似ソースコード抽出方法 |
US8627290B2 (en) * | 2009-02-03 | 2014-01-07 | International Business Machines Corporation | Test case pattern matching |
US9110769B2 (en) * | 2010-04-01 | 2015-08-18 | Microsoft Technology Licensing, Llc | Code-clone detection and analysis |
US8578348B2 (en) * | 2010-09-02 | 2013-11-05 | Code Value Ltd. | System and method of cost oriented software profiling |
US20120159434A1 (en) * | 2010-12-20 | 2012-06-21 | Microsoft Corporation | Code clone notification and architectural change visualization |
JP5564448B2 (ja) | 2011-02-08 | 2014-07-30 | 株式会社日立製作所 | ソフトウェアの類似性評価方法 |
US20120272207A1 (en) * | 2011-04-20 | 2012-10-25 | Sony Computer Entertainment America Llc | Social interactive code development |
US9201649B2 (en) * | 2012-10-26 | 2015-12-01 | Inforsys Limited | Systems and methods for estimating an impact of changing a source file in a software |
EP2801906B1 (en) * | 2013-05-08 | 2017-01-11 | Accenture Global Services Limited | Source code flow analysis using information retrieval |
-
2013
- 2013-03-29 JP JP2013074623A patent/JP6090850B2/ja active Active
-
2014
- 2014-03-24 CN CN201480019304.0A patent/CN105122208A/zh active Pending
- 2014-03-24 WO PCT/JP2014/058021 patent/WO2014157056A1/ja active Application Filing
- 2014-03-24 US US14/781,122 patent/US9880834B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2014199569A (ja) | 2014-10-23 |
US9880834B2 (en) | 2018-01-30 |
US20160054994A1 (en) | 2016-02-25 |
WO2014157056A1 (ja) | 2014-10-02 |
CN105122208A (zh) | 2015-12-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6090850B2 (ja) | ソースプログラム解析システム、ソースプログラム解析方法およびプログラム | |
KR101961970B1 (ko) | 실행 페이지의 동적 갱신 기법 | |
JP5756386B2 (ja) | 動的なウェブ・アプリケーションの問題を修正するメタデータの生成・管理の支援方法、装置、およびプログラム | |
US20070033520A1 (en) | System and method for web page localization | |
CN111796809A (zh) | 接口文档生成方法、装置、电子设备及介质 | |
EP3314409B1 (en) | Tracing dependencies between development artifacts in a software development project | |
CN111797351A (zh) | 页面数据管理方法、装置、电子设备及介质 | |
CN113421657B (zh) | 临床实践指南的知识表示模型的构建方法及装置 | |
CN109522013A (zh) | 一种业务功能的代码生成方法及装置 | |
CN114020256A (zh) | 前端页面生成方法、装置、设备及可读存储介质 | |
CN110989991A (zh) | 检测应用程序中源代码克隆开源软件的方法及系统 | |
Bender et al. | Signature required: Making Simulink data flow and interfaces explicit | |
CN115048111A (zh) | 基于元数据的代码生成方法、装置、设备及介质 | |
CN114385167A (zh) | 前端页面生成方法、装置、设备及介质 | |
US20080005662A1 (en) | Server Device and Name Space Issuing Method | |
JP4954674B2 (ja) | ソフトウェア開発支援方法、ソフトウェア開発支援装置、ソフトウェア開発支援プログラム、及び計算機システム | |
US8239362B1 (en) | Using metadata fragments as authoritative manufacturing work instructions | |
Yano et al. | Labeling feature-oriented software clusters for software visualization application | |
WO2022134820A1 (zh) | 网页的数据抽取方法、装置、电子设备及存储介质 | |
CN105843661B (zh) | 一种面向主机系统的代码重定位方法及其系统 | |
US11847444B2 (en) | Automatically updating documentation | |
CN111209075B (zh) | 多语言界面维护方法、系统、存储介质和智能设备 | |
CN113434748A (zh) | 基于模板标注的分布式爬虫方法、装置、计算机装置及计算机可读存储介质 | |
US20090217156A1 (en) | Method for Storing Localized XML Document Values | |
CN110309062A (zh) | 用例生成方法、装置、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20160204 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20160927 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20161121 |
|
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: 20170110 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20170202 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 6090850 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |