JP2012164211A - ソフトウェアの類似性評価方法 - Google Patents

ソフトウェアの類似性評価方法 Download PDF

Info

Publication number
JP2012164211A
JP2012164211A JP2011025293A JP2011025293A JP2012164211A JP 2012164211 A JP2012164211 A JP 2012164211A JP 2011025293 A JP2011025293 A JP 2011025293A JP 2011025293 A JP2011025293 A JP 2011025293A JP 2012164211 A JP2012164211 A JP 2012164211A
Authority
JP
Japan
Prior art keywords
similarity
analysis
information
code
source
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.)
Granted
Application number
JP2011025293A
Other languages
English (en)
Other versions
JP5564448B2 (ja
Inventor
Hisami Abe
久美 阿部
Akira Ioku
章 井奥
Masasuki Hino
雅透 日野
Masaaki Chikahisa
真章 近久
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 JP2011025293A priority Critical patent/JP5564448B2/ja
Publication of JP2012164211A publication Critical patent/JP2012164211A/ja
Application granted granted Critical
Publication of JP5564448B2 publication Critical patent/JP5564448B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

【課題】ソフトウェアの類似性の検出において分析者に分析の目的に応じた精度の検出情報を、効率よく提示する。
【解決手段】上記課題を解決するため、類似領域(クローン片)を含むソースプログラムの部分領域の静的解析情報(複雑度等)を算出する。類似度とそれ以外の静的解析情報とを関連付けて評価し、分析の目的に応じて類似度情報を選別し分析者に情報提供する。また、特定の複数プログラム(関数あるいはファイル等)に対して、複数の条件で類似領域(クローン片)の位置情報を、検出する。検出条件の相違を反映した複数の異なる検出結果を比較参照することで、分析の目的に応じた類似度情報の選別に活用する。
【選択図】図2

Description

本発明は、ソフトウェアの類似性評価方法に係り、特に、複数のソースプログラムの間の類似性情報を評価基準に利用するソフトウェアの評価方法に関する。
複数のファイルで構成された2つのテキストすなわちソースコードあるいはソースプログラム間の類似を計測する類似度計測の手法が、特許文献1、特許文献2に開示されている。また、非特許文献1にも、同様なツールが開示されている。
重複したコード、すなわち、ソースコード中の「全く同一のコード片」あるいは、「類似したコード片」のことを「コードクローン」と呼ぶことがある(非特許文献2、非特許文献3)。
非特許文献2では、コードクローンをタイプ1(Exactクローン)、タイプ2(Parameterizedクローン)、タイプ3(Gappedクローン)の3つのタイプに分類している。タイプ1は、完全に一致したコード片であり、ただし空白、改行、コメントなどの違いは考慮しない。タイプ2は、変数名、クラス名などのユーザ定義名の違いを除き一致しているコード片のことである。タイプ3は、構文的に一致しない不一致コード(ギャップ(Gap))を部分的に含むコード片のことである。タイプ3はコピー・アンド・ペーストによって既存のコード片を再利用する場合、挿入や削除、変更でコード片の修正が加えられることにより生じる。
類似のソースコードのペア(コードクローン)は、主にソースコードを再利用する際に生じるが、元のソースコードがそのまま使用される(コピー・アンド・ペーストされる)結果、完全に一致した(重複した)コード片のペアが生じる場合に加え、変数名・関数名の変更や構造の変更などの改変が行われた結果、相互に微小な差分を含む類似したコード片のペア(完全なる一致(重複)ではないが相互に類似性を有するコード片のペア)が数多く発生することもある。このような構造の微小な変更も含む類似コードのペアの検出にも対応させるために、文字列の比較(行単位の比較)だけでなく、コードクローン検出技術には多様なアルゴリズムが提案されている。
非特許文献3では、これまでに提案されているコードクローン検出技術を5つ((1)行単位の検出、(2)字句単位の検出、(3)抽象構文木を用いた検出、(4)プログラム依存グラフを用いた検出、(5)メトリクスやフィンガープリントなど、その他技術を用いた検出)に分類している。
いずれのアルゴリズムにおいても、どの程度の相違までを互いに「類似」として認定するか、という閾値が調整可能である場合が多い。この調整は、出力され分析者に提示される情報量の多寡に影響する。
また、ソフトウェアシステム間の相違の度合いを調べることによって、システムの保守の様子や進化の度合いを知ることができる。非特許文献4には、重複したコードの有無が、リファクタリング(ソースコードの内部構造の改善)等の判断基準として重要であることが記載されている。非特許文献5には、ソフトウェアシステム間の違いがどれくらいあるか、客観的に分析する手法が開示されている。
特開2003-216425号公報 特開2008-46695号公報
CCFinderホームページ<URL:http://www.ccfinder.net/ccfinderx-j.html> Stefan Bellon, Rainer Koschke, Giuliano Antoniol, Jens Krinke, and Ettore Melro, "Comparision and Evaluation of Clone Detection Tools", IEEE TRANSACTIONS ON SOFTWARE ENGINERING,VOL.33, NO.9, SEPTEMBER 2007, 577-591 肥後 芳樹、楠本 信二、井上 克郎、「コードクローン検出とその関連技術」、電子情報通信学会論文誌、D Vol. J91-D、No.6、2008年、pp.1465-1481 マーチン・ファウラー(児玉公信 他訳)、「リファクタリング プログラミングの体質改善テクニック」、ピアソン・エデュケーション、2000年、pp.76 吉村健太郎,ダルマリンガムガネサン,ディルクムーティック: プロダクトライン導入に向けたレガシーソフトウェアの共通性・可変性分析法,情報処理学会論文誌,Vol.48, No.8, pp.2482-2491 (Aug. 2007)
重複したコード(コードクローンと呼称する場合もあるがそれに限定されない)の検出と解析は、ソフトウェア開発・保守の信頼性、使用性、あるいは保守性といった品質特性の向上に対して有用な情報を与える分析方法として認知されてきており、利用事例が増えている。
近年、ハードウェア価格低下とハードウェアの機能の向上にともない、ソフトウェアシステムは年々大規模化、複雑化している。ソフトウェアシステムの大規模化により、ソフトウェアの構築や保守にかかるコストが増大し、多くの労力が必要となる。
システムが小規模の場合、そのシステムの個々の構成要素を人間が調べ値を出すことも可能だが、構造が複雑で大規模なシステムでは、何らかの機械的な処理により、自動的に求めることが望ましい。たとえば、不具合の原因を持つコード片に対しては、他の箇所に存在する同等のコード片も改修することが必要であるが、同等のコード片(クローン)を手作業で探すことは、ソフトウェアが大規模であればある程困難となってくる。従って、他の箇所に存在する同等の不具合を漏れなく発見し改修することが難しく,品質面および作業コストの面で問題となりやすい。
重複したコードの検出の際の閾値の調整の結果、類似度の高い(完全一致のコード片)のみを抽出対象とすると短いクローン片が検出される傾向にある。ある程度の類似性を有する領域であっても、完全に一致する複数の部分領域に分割されて検出されるためである。たとえば、「Gappedクローン」の形状に類するコードの類似領域は、短いクローン片に分割されて、複数の別のクローンのペアとして検出される。
このように従来の技術では、類似性の検出条件の設定において、多少の差分を無視して広い類似領域(長いクローン片)を検出する設定では、類似度の精度の面で不十分な場合がある。一方で、短いクローン片を多く検出させる設定では、それにより数多く生成する傾向にあるクローンの中から目的とするコードクローンを探し出すのに分析者の労力や分析に要する時間を多く費やしてしまう。分析者に分析の目的に応じた精度の検出情報を、効率よく提示することが課題になる。
本発明の課題は、ソフトウェアの類似性の検出における上記従来技術の問題点を解決し、分析者(ユーザ)に分析の目的に応じた精度の検出情報を、効率よく提示することができる、ソフトウェアの類似性評価方法を提供することにある。
上記課題を解決するための、本発明の代表的なものの一例を示すと、次の通りである。すなわち、ソースコード分析手段により、複数のソースプログラムの間の類似性を検出するソフトウェアの類似性評価方法であって、ソースコード分析手段により、複数のソースプログラムの間の類似性を検出し評価するソフトウェアの類似性評価方法であって、前記ソースコード分析手段は、前記複数のソースプログラムが格納される記憶装置部と、表示部を含む入出力装置とを備えており、
前記類似性評価方法は、分析の条件として、前記複数のソースプログラムの間の類似性の解析条件、及び、該類似性以外の解析条件を取得する解析条件取得工程と、前記類似性の解析条件に基づき、前記複数のソースプログラムから、前記類似性に関わる情報を取得する類似性検出工程と、前記類似性以外の解析条件に基づき、前記複数のソースプログラムから、前記類似性以外の解析情報を取得する解析情報取得工程と、前記各ソースプログラムにおける前記類似性を有するコード領域と前記類似性以外の解析情報とを対応づける領域照合工程と、前記類似性を有するコード領域における、前記類似性以外の解析情報を評価する評価工程と、前記評価結果に基づき、前記類似性に関わる情報と前記類似性以外の解析情報とを関連付けて、前記表示部へ表示する表示工程とを有することを特徴とする。
本発明によれば、ソフトウェアの類似性に関して必要な情報を探しやすくし、分析者(ユーザ)の労力を軽減し、分析に要する時間を短縮できる。また、複雑度、類似度、関数位置情報など複数の解析情報をマージしたコードクローン情報をユーザに図や表として可視化し提供することは、ユーザによる精査ポイントの効率的な把握、フォーカスを容易にする。これにより、各ユーザは、ソフトウェアの開発に関して、効率的に正確な改善指針を共有できるようになる。
本発明の実施形態に係わるソフトウェアの類似性評価システムのハードウェアの構成例を示す図である。 図1Aの類似性評価システムにおける、ソースコード分析手段の機能ブロックを示す図である。 本発明の実施形態に係わるソースコード分析手段の作用、効果を示す図である。 本発明の実施例1によるソフトウェアの類似性評価方法の処理の流れを示すフローチャートである。 実施例1の選択画面のサンプル図である。 静的解析出力結果表のデータ構造を概念的に示した例である。 コードクローンの検出処理の詳細を示す図である。 コードクローン出力結果表のデータ構造を概念的に示した例である。 コードクロー出力結果統合表のデータ構造を概念的に示した例である。 func1のソースコードを示した例である。 関数位置情報の追加の処理を具体的に示した図である。 条件1による出力結果表のデータ構造を概念的に示した図である。 クローン解析対象の関数情報表のデータ構造を概念的に示した図である。 実施例1において、関数とコードクローン統合情報の出力結果をユーザに提供するための可視化図である。 本発明の実施例2による、ソフトウェアの類似性評価方法の処理の流れを示したフローチャートである。 実施例2における選択画面のサンプル図である。 実施例2のコードクローン出力結果表のデータ構造を概念的に示した例である。 実施例2の複雑度出力結果表のデータ構造を概念的に示した例である。 検出したコードクローン出力結果とコードクローン複雑度結果をマージする処理のフローチャートを示す図である。 静的解析出力結果とファイル間の類似度結果を統合した表のデータ構造を概念的に示した図である。 静的解析出力結果とファイル間の類似度結果を統合した表を評価する処理のフローチャートを示す図である。 実施例2において、静的解析出力結果とファイル間の類似度結果を統合した表の評価結果を、可視化した図である。 本発明の実施例3に係わる類似性評価システムにおける、ソースコード分析手段の機能ブロックを示す図である。 実施例3による、ソフトウェアの類似性評価方法の処理の流れを示すフローチャートである。 実施例3における、各ファイルパス名に対しての特定のハードウェアに依存性があるか無いかの情報を示した表である。 実施例3により、静的解析情報に、ハードウェアの依存性を統合した表である。 図24の表の評価結果を、可視化的に示した図である。
本発明では、分析の目的に応じて、類似領域(クローン片)を含むソースプログラムの部分領域の静的解析情報(複雑度等)を算出する。静的解析とは、プログラムを動作させずに、そのプログラムの品質を改善、評価するために行うものである。類似度とそれ以外の静的解析情報とを関連付けて評価し、分析の目的に応じて類似度情報を選別し分析者に情報提供する。
また、特定の複数プログラム(関数あるいはファイル等)に対して、複数の条件で類似領域(クローン片)の位置情報を、検出する。検出条件の相違を反映した複数の異なる検出結果を比較参照することで、分析の目的に応じた類似度情報の選別に活用する。
以下、本発明の最良の実施の形態を、図面を参照して説明する。
[システム構成]
本発明のソフトウェアの類似性評価方法を実施するのに適したソースコード分析手段のシステムの例を、図1A、図1Bを参照しながら説明する。
本発明におけるフトウェアの類似性評価方法は、図1Aに示すような一般的なコンピュータ上で実行される。すなわち、ソースコード分析手段は、CPU100と主記憶部101と、HDD等の外部記憶装置102と、CD-ROMやDVD-ROM等の可搬性を有する可搬型記憶媒体103から情報を読み出す読取装置104と、ディスプレイ(表示装置)やキーボードやマウス等の入出力装置105と、通信ネットワークに接続するためのNIC(Network Interface Card)等の通信装置106と、バス107とを備えた一般的なコンピュータ上で、所定のコンピュータプログラムを実行することで実現される。ソースコード分析手段(コンピュータプログラム)は、単体のコンピュータで構成しても良く、あるいは、また、サーバとこのサーバにネットワークを介して接続された少なくとも1つのコンピュータとで構成しても良い。また、入出力装置は、ユーザインターフェース機能を有するディスプレイ(表示装置)のように、入出力機能の一部が、一体的に構成されたものであっても良く、あるいはまた、入力装置と出力装置が独立して構成されたものであっても良い。
次に、本実施形態に係るソースコード分析手段の構成について説明する。図1Bは、本実施形態に係るソースコード類似性検出を行うソースコード分析手段の機能ブロック図である。ソースコード分析手段は、外部記憶装置部102と主記憶装置部101を備える。
外部記憶装置部102は、ソースコード格納部3Aと、分析関連情報及び出力ファイル格納部3Bを備える。ソースコード格納部3Aには、類似性検出を行うソースコードなど、分析に必要なソースコードが格納される。
分析関連情報及び出力ファイル格納部3Bには、類似度合の検出方法(例えばコードクローンを行単位で検出する等)に関する情報、類似度合以外の検出方法(関数の開始位置等)、ソースコード静的解析を行う場合に利用可能な外部ツールの情報など、本実施形態の実施に必要な分析関連情報が格納されている。また、以下で説明する完全一致コードクローン出力結果表、一部一致コードクローン出力結果表、複雑度出力結果表、出力結果統合表、出力結果表等も格納される。
主記憶装置部101は、コンピュータプログラムを保有しており、このプログラムに基づく所定の処理手順をCPUで実行することにより得られる機能(ユニット)として、条件設定部4、類似性検出部5、静的解析部6、照合・統合部7、評価部8、評価結果表示部9を備える。
条件設定部4は、ソースコードの類似性検出を類似性検出部5で実行する際、あるいは静的解析部6でソースコードの複雑度や関数の位置情報などの静的解析を実行する際に、必要となる条件設定を行う。すなわち、条件設定部4では、類似性検出部5における解析で必要な、複数のソースプログラムの間の類似性に関する第1の設定条件を選定し、静的解析部6における解析で必要な、複数のソースプログラムの前記類似性以外の記述の解析に関する第2の設定条件を選定する。
照合・統合部7は、類似性検出部5、および静的解析部6で得られた結果を照合・統合を行う。
評価部8は、照合・統合部7で処理した結果をユーザの目的に応じ結果を評価する。
評価結果表示部9は、評価部8で評価した結果を、ユーザにわかりやすく可視化し表示する。
図2は、本発明に係わるソースコード分析手段の基本的な作用、効果を示す図である。本発明のソースコード分析手段では、格納部に格納されているソースコードファイルを入力として、(1)ソースコードの類似性検出、(2)ソースコードの関数の位置情報や複雑度などの意味分けに基づく静的解析を行う。この2つの解析(1),(2)を行う際、ユーザが目的に応じて、ソースコードの類似性検出、およびソースコードに関して類似性以外の条件の、少なくとも2つの解析条件の設定を行うことができる。
この条件設定に際してユーザは、分析関連情報及び出力ファイル格納部3Bなどの情報を利用可能である。ソースコード分析手段は設定された条件に従って、複数のソースコードの解析処理(3)を行う。そして、この解析処理で得られたソースコードの類似性とソースコードに関する類似性以外の条件の解析の結果とを照合・統合(4)し、ユーザの目的に応じて照合・統合した結果のタイプ分け(5)などを行い、評価する。さらに、評価した結果(6)を可視化し、出力表示する。これにより、ユーザ(分析者)は、ソースコード分析手段を用いて、ソースコードの分析に関して、その目的に応じた類似度合情報及び類似性以外の条件で解析を行い、解析された結果の情報を得ることができる。
以下、より具体的な本発明の実施例について説明する。
本発明のソフトウェアの類似性評価方法の第一の実施例を、図3乃至図12を参照しながら説明する。この例は、ソースコードの類似性に関する情報と対応づける(照合させる)静的解析情報が関数の位置情報であり、かつ、これらを直列に処理する場合の一実施の形態である。
図3は、本発明の実施例1の全体の流れを示すフローチャートである。まず、最初に、ユーザにより、ソースコード分析手段に対して、ソフトウェアの類似性評価のために必要な分析条件の設定がなされる(ステップStep 1)。
ソースコード分析手段は、ユーザが選択した少なくとも2つのプログラム(関数及びファイルなど)について文字コード変換など前処理(ステップStep 2)し、前処理したものをユーザにより指定された条件で、静的解析によって関数の位置情報を解析する(ステップStep 3)。この工程は、静的解析情報の取得工程に相当する。
次に、一つあるいは複数条件でコードクローン検出条件を設定し(ステップStep 4)、関数の位置情報の範囲で一つあるいは複数条件でコードクローン検出を行う(ステップStep 5)。これは類似性検出工程である。
コードクローンの検出条件の設定は、完全一致のコードクローンを検出したいか、あるいは一部が異なるコードクローンを検出したいかなど、ユーザがどのような類似性のコードクローンを検出したいかによって条件を設定し(ステップStep 4)、コードクローンを検出することができる。
すなわち、ソースコードの類似度条件は、ユーザにより指定される。「コードクローン検出類似度条件設定」欄の「100%一致」、「一部一致」には、「90%以上」、「80%以上」、・・・「50%以上」、・・・の検出したい類似度条件を押下し、チェック印を入れる。例えば「50%以上」の類似度のコードクローンを検出したい場合は、「50%以上」を選択することで、50%以上から100%の類似度のコードクローンを検出できる。また完全一致のコードクローンを検出したい場合は、「100%一致」を選択する。
ソースコード分析手段は、コードクローン検出結果と関数の位置情報の出力結果を対応づけ統合する(ステップStep 6)。この工程は、領域照合工程に相当する。統合した結果からユーザの目的に応じて、コードクローン情報と関数の位置情報の統合結果の評価を行う(ステップStep 7)。この工程は、評価工程に相当する。
ここで得られたコードクローン情報を、例えばコードクローンと関数の内のクローンが一致しているかいないかなどで評価し、タイプ別に分類し、可視化した結果を出力する(ステップStep 8)。この工程は、評価結果表示工程に相当する。この可視化した分類は、ユーザに精査ポイントを提供できる。
以下、ソースコードの分析が終了するまで、同様な処理が繰り返される。(ステップStep 9)
図4は、実施例1のソースコード分析手段における設定画面1050の一例を示す図である。設定画面1050は、入力項目として、「ソースプログラムの選定」400、「モード選択・設定」410、「処理方式」420、「出力方式」430を含んでいる。なお、この設定画面1050は、複数の画面で構成してもよい。また、表示項目やその形式も任意に構成することができる。
ユーザは、設定画面1050の「ソースプログラムの選定」400の欄で、解析の対象となる少なくとも2つのプログラム(関数及びファイルなど)を選定する。より具体的には、ユーザが、例えば、対象のソースコードを含むフォルダのパス名を指定する。パス名を指定する際には、設定画面1050の「選択ファイルの格納パス」401の「参照」ボタンをユーザが押下し、プルダウンメニューで表示される複数のフォルダ名から希望するフォルダ名を選択し、さらに、プルダウンメニューで表示されるパス名を選択することで、フォルダのパス名の指定が可能である。パス名は、例えば、その作成日、作成者名、ファイル数などと共にリスト形式で一覧表示される。指定したフォルダ以下のディレクトリも解析対象にしたい場合は、「サブディレクトリも対象にする」にもチェック印を入れる。
ユーザは、次に、「モード選択・設定」410において、ソースプログラム間の類似性に関わる情報を取得するために、「類似性検出法」411を入力する。ユーザが「参照」を押下すると、プルダウンメニューで複数の類似性検出法が表示される。類似性を検出する手法としては、背景技術の欄で述べたような、例えば「コードクローン」の検出や、「重複したコード」の検出等がある。
さらに、コードクローンの検出に関しては、例えば、コードクローンの代表的なアルゴリズムを非特許文献3の分類に沿って「行単位の検出」、「字句単位の検出」、「抽象構文木を用いた検出」、「プログラム依存グラフを用いた検出」、「その他の検出技術を用いた検出」に分類し、さらに、応じて、必要にプルダウンメニューでより具体的なアルゴリズムを指定できるようにする。
行単位で検出する手法では、ソースコードを行単位で比較し、閾値以上の行数を連続して一致している部分を重複コードとして検出する。字句単位での検出する手法でも、ソースコードを字句の列に変換し、閾値以上連続して一致する部分列を類似したコード片(コードクローン)として検出する。
同様に、抽象構文木を用いた検出手法では、閾値以上の大きさを持つ同形の部分木を類似したコード片(コードクローン)として検出する。メトリクスやフィンガープリントを用いる手法でも、ソースコード内のモジュール単位でメトリクスを計算し、メトリクス値がある閾値以上に類似しているモジュールをコードクローンとして検出する。
ここでは、「類似性検出法」411として、ユーザが「コードクローンの行単位の検出」を指定したものとする。
また、「類似度合」412に関して、100%一致と部分一致を選択でき、部分一致の場合には、さらに、プルダウンメニューで表示される複数の一致率の中から1つを選定できる。ここでは、「類似性検出法」411として、ユーザが、類似度50%以上の部分一致を設定したものとする。
ユーザは、さらに、「解析条件」413に関して、例えば、「参照」を押下し、「ソースプログラムの選定」で選択した複数のソースコードに関して、「類似性検出法」411で選択した類似性検出法における類似性以外の記述の解析情報を取得する。類似性以外の記述の解析情報としては、「関数の開始位置」、「技術分野や製品もしくはシステムを特定する字句」、「作成者」、「作成日」そのソースコード内の記述、及びそのソースコードの属性として得られる情報が挙げられる。ユーザは、プルダウンメニューで表示される上記複数の解析条件から1つもしくは複数の解析条件を選択する。ここでは、「解析条件」413として、ユーザが「関数の開始位置」を選定したものとする。
また、「処理方式」420の項目421によって分析処理を直列で行うか、並列で行うかを指定する。なお、「処理方式」に関しては、分析の他の条件に応じてソースコード分析手段が自動的に判定し、ユーザの入力は求めないようにしても良い。「出力方式」430では、ユーザが分析の目的に応じて項目431を選択し、表示形式を設定できる。
また、図5の静的解析出力表300は、図3のフローチャートのステップStep 3の静的解析の関数位置情報解析を行った後の出力表である。表の表記項目は、関数名欄301、ファイルパス名欄302、関数Start行欄303、関数End行欄304と、を備える。各行に一つのファイル情報が格納される。
関数名欄301は、静的解析によって同じ行のファイルパス名欄302対応したファイルパス名に対しファイル内に含まれる関数名が縦列に格納される。
ファイルパス名欄302は、縦列にファイルの格納先とファイル名を示したパス名で格納される。
関数Start行欄303と関数End行欄304には、静的解析によって関数名欄301に示された関数名に対しての関数のStart行とEnd行がそれぞれ格納される。なお、図中に入力されている値やファイルパス名は一例であり、検出された各コードクローンのファイル名と位置情報の値やファイル名がそれぞれ格納されるので、この例以外の数値であっても本発明の趣旨を逸脱しないことは言うまでもない。以下の図面の値やファイル名に関しても同様である。
図6Aは、図3のコードクローン検出(ステップStep 5)の詳細を示したフローチャートである。コードクローン検出においては、予め少なくとも2つのプログラム(関数及びファイルなど)を文字コード変換など前処理し、前処理したものを一つあるいは複数条件のコードクローンの検出条件でコードクローン検出を行う。
図6Aに示すように、まず、条件判定を行う(ステップS1031)。コードクローンの検出条件には、完全一致のコードクローンを検出したいか、あるいは一部が異なるコードクローンを検出したいか等、どのような類似性のコードクローンを検出したいか、一つあるいは複数、検出条件が設定されている。図6Aでは2つの検出条件を例に説明している。すなわち、一つは前処理したものから設定条件に完全に一致したコード片のコードクローンの検出を行い(ステップS1032)、もう一つは、一部が異なるコードクローン検出を行うものである(ステップS1033)。
図6Bのコードクローン出力結果表200は、図5の表300に示した関数位置情報範囲内で、コードクローン検出の条件として、「一部一致」、すなわち「50%以上」の類似度のコードクローンの検出を行った場合(図3のステップStep 5)の、検出結果を例として示す。
なお、静的解析情報取得工程と類似性検出工程の直列処理は、いずれを先に処理しても差し支えない(後の実施例でも同じ)。
図7のコードクローン出力結果統合表400は、コードクローン検出結果と、関数の位置情報の結果を対応付けた(図3のステップStep 6)、結果として得られた表を示したものである。
表400の表記項目には、図5の表300の表記項目に、図6Bの出力結果表200の表記項目、すなわち、クローン番号欄401、コードクローンStart行欄404、コードクローンEnd行欄405、類似度(%)欄406が追加される。
クローン番号欄401には、縦列にコードクローン検出で出力したクローン番号が格納され、同じ番号のものが同じコードクローンであることを示している。
各コードクローンがソースコードのどの位置に存在しているかの情報を、開始行(図中では、「コードクローンStart行」と示す)と終了行(図中では、「コードクローンEnd行」と示す)とで示し、下記のコードクローンStart行とコードクローンEnd行が格納される。コードクローンStart行欄404とコードクローンEnd行欄405は、検出されたコードクローンのStart行とEnd行がそれぞれ格納される。
類似度(%)欄406は、検出されたコードクローンのクローン番号のクローンに対する類似度が格納される。図中に入力されている値やファイル名は一例である。
次に、図7のコードクローン出力結果統合表400で得られた結果を、評価する評価処理(図3のStep 7)の一例について説明する。
まず、関数の位置情報の範囲内で複数の条件で類似領域(クローン片)の位置情報を、検出する。検出条件の相違を反映した複数の異なる検出結果を比較参照することで、分析の目的に応じた類似度情報の効率的な選別に活用する。
具体的には、タイプ1〜タイプ4までの4つに分類する形態を示し、4つの分類を効率的に行う実施の形態を示す。この分類は、ソースコードの再利用の指針として想定されるものである。
このような評価を行う理由としては、例えば、複数製品間のソースコードの類似性を比較することで製品の再利用可能なソースコードの共通性と可変性の候補を効率的に抽出するためである。
製品の再利用可能な共通性と可変性のソースコードは、開発資産となり、この開発資産のソースコードを再利用することによって、生産性を向上させることが狙いである。また、検証済みの開発資産であるソースコードを再利用することで、品質の向上にもつながる。
タイプ1:関数のインターフェースが同一で、ソースコードの中身が一致する。
タイプ2:関数のインターフェースが同一で、ソースコードの一部が異なる。
タイプ3:関数のインターフェースは異なるが、ソースコードの中身が一致する。
タイプ4:関数のインターフェースは異なるが、ソースコードに重複がある(一部が異なる)。
関数のインターフェースとは、変数名、引数、戻り値のことであるとここでは定義する。タイプ1は開発資産の共通部分であると評価される。タイプ2と3は開発資産の可変部分であると評価される。タイプ2と3は共通部分と可変部分が混在した関数であると評価される。タイプ4は個別に判断が必要な関数であると評価される。
ここでソースコードの「ソースコードの中身が一致する」と「異なる」との区別は、本実施の形態では、ソースコードを行単位で比較し、分析対象の関数のサイズの60%以上の長さが一致する場合に「一致する」と判定するものとし、以下説明する。そして、分析対象の関数(func1とする)を検出条件1と検出条件2という2通りの検出条件で類似性を検出するものとする。
func1のソースコードの例を図8に示す。図8には、ファイル名「AAA」と「BBB」の2つのファイルがあり、各々のファイル内でファイル「AAA」はStart行が10行目から開始し、ファイル「BBB」はStart行が22行目から開始する。両方のファイルを比較すると1行目から5行目まで同じであり、その同じ箇所を四角で囲ってある。
検出条件1の典型的な実施の形態としては、ソースコードを行単位で比較し、最低3行が連続して一致している部分のみを重複コードとして検出する。条件1による検出結果を以下、結果1と呼ぶ。検出条件2の典型的な実施の形態としては、ソースコードを行単位で比較し、前記「一致」に該当する場合のみ、すなわち、func1のサイズの60%以上の長さの行数(6行)が連続して一致している部分のみを、重複コードとして検出する。条件2による検出結果を以下、結果2と呼ぶ。
図9を使って、関数位置情報追加の処理フローを詳細に説明する。まず、処理1001で、結果1(表700)と関数の情報(表800)を比較する。具体的にはクローン片のStart行と関数のStart行との比較を行なう。次に、条件判定処理1002で、不一致かを調べ、この条件が成立するときは、処理1003以下の一連の処理を行なう。まず、処理1003で、タイプ3かタイプ4に分類される。図8のソースコードで説明すると、図8の二つのファイルはStart行から3行目までに関数定義の情報が書かれている。処理1002で不一致であるということは、関数のStart行から3行目までに記載されている関数定義の情報(関数のインターフェース)が同一でないことを意味するためである。
次に、処理1005で、結果2と関数の情報(表800)を比較する。具体的にはクローン片のStart行と関数のStart行の比較を行なう。最後に、条件判定処理1006で、一致かを調べ、この条件が成立するときは、処理1007で、タイプ1であるとして分類を特定できる。判定処理1006で条件が成立しないときには、処理1008で、タイプ2であるとして分類を特定できる(本実施の形態のようにクローン片自体が存在しない場合も条件判定処理1006で「不一致」と判断し処理1008を行う)。図8の二つのソースコードは、処理1001により、関数定義の情報が一致しているので処理1005に進む。重複コードとして検出する条件は、func1のサイズの60%以上の長さの行数(6行)が連続して一致している部分のみを、重複コードとして検出するので、設定した6行を満たさないため、クローン片は検出されない。よって処理1006では、関数とクローン片が不一致となり、処理1008以下の一連の処理を行なう。図8の二つのソースコードはタイプ2に分類される。
図10は、func1の類似性情報を検出条件1で検出した結果(結果1)700を示す表である。
一方、func1の類似性情報を検出条件2で検出されるクローン片は存在しない。クローン片の行数が最大5行であり、閾値として設定した最短6行を満たさないためである。
図11は、クローン解析対象の関数情報表800のデータ構造を概念的に示した図である。
図12は、関数とコードクローン統合情報の出力結果を診断出力結果ユーザに対して簡便に判断できる情報を提供するための可視化図である。図12では、コードクローンと関数のStart行が同一であり、関数内のコードクローンが関数のソースコードと同一であるという結果を四角の枠で表示した、可視化図1051の一例を示している。
図12の縦軸は、コードクローンと関数のStart行が同一であるかで判断し、上側をコードクローンと関数のStart行が同一である場合(図9の処理1002でYES)を示し、下側をコードクローンと関数のStart行が同一でない場合を示す(図9の処理1002でNO)。
また、横軸は関数内のコードクローンが関数のソースコードと同一であるかを判断し、右側を関数内のコードクローンが関数のソースコードと同一であることを示し(図9の処理1006でYES)、左側は関数内のコードクローンが関数のソースコードと同一でないことを示す(図9の処理1006でNO)。
図12の可視化図1051によれば、ユーザは、選択した二つのソースコードの類似関係にある各コードクローンが、タイプ1〜4のいずれに属するかを、一目で把握することができる。
このように、本実施例によれば、ソフトウェアの類似性に関して必要な情報を探しやすくし、分析者の労力を軽減し、分析に要する時間を短縮できる。また、類似度、関数位置情報など複数の解析情報をマージしたコードクローン情報をユーザに図や表として可視化し提供することは、ユーザが精査ポイントを、効率的かつ実証的に把握し、あるいは容易にフォーカスできるようになる。これにより、各ユーザは、ソフトウェアの開発に関して、効率的に正確な改善指針を共有できるようになる。
次に,本発明における第二の実施の形態を、図13乃至図20を参照しながら説明する。この実施例では、ソースコードの類似性に関する情報と対応づける(照合させる)静的解析情報が複雑度の情報であり、かつ、これらを並列に処理する場合の一実施の形態について、説明する。
ここで、「複雑度」とは、ソースコードのモジュール内の分岐の数やループの数など、ソースコードが実現する処理の複雑さに関係する要素が含まれる度合いを示す指標である。
この実施例では、特に,類似性を有するコード片(類似コード片)のペアの所在(分散の仕方等)と各ペアの複雑度とを対応づけて、以下に述べるタイプA〜タイプDに分類する形の評価を行い、その結果をソースコードの解析情報として出力する形態で示す。
タイプAとは、複雑度が大きく、類似性を有するペアの所在の分散が大きいものであり、タイプAで講ずると想定される施策はソースコードのリファクタリングなどの対策が優先度1として必須なものである。
タイプBとは、複雑度が小さく、類似性を有するペアの所在の分散が小さいものであり、タイプBで講ずると想定される施策はソースコードのリファクタリングなどの対策が優先度3として分類され、緊急度は高くない。
タイプC、タイプDはソースコードのリファクタリングなどの対策が優先度2としてどちらも分類される。タイプCは、複雑度が小さく、類似性を有するペアの所在の分散が大きいものである。
タイプDは、複雑度が大きく、類似性を有するペアの所在の分散が小さいものである。
このような評価を行う理由としては、タイプごとに分析者が講じる施策やその優先度が異なることが想定されるからである。たとえば,複雑度が大きくかつ類似コード片の所在の分散が大きい場合、もっとも注意を喚起する必要があると考えられる。一般に複雑度が大きいと品質確保等の面でリスクが高く望ましくないとされている。複雑度は10以下であれば良い構造とされ、30を超えるとモジュール構造に問題があると考えられ、複雑度が小さくなるようにソースコードを修正する必要がある。
一方、類似性コード片のペアの所在の分散が大きい事例として類似性コード片ペアがアーキテクチャの階層定義をまたがって存在する場合を想定するならば,このような状況は一般に望ましくない。よって双方の性質を兼ね備える類似コード片ペアの存在(次に示す「タイプA」に相当する)は優先的に注意を喚起するための施策を講じるべきと想定される。
図13は、第二の実施の形態の全体の処理の流れ、すなわち、類似性検出にコードクローン検出を選択し、これと静的解析の処理を並列に実施する場合、を示したフローチャートである。
まず、最初に、ユーザにより、ソースコード分析手段に対するソフトウェアの類似性評価のために必要な、類似性と類似性以外の2種類の分析条件の設定がなされる(ステップStep 1)。
ソースコード分析手段では、ユーザにより選定された少なくとも2つのプログラム(関数及びファイルなど)を文字コード変換など前処理(ステップStep2)し、図14の選択画面1050のモード選択欄410でモード選択することで(ステップStep102)、コードクローン検出(ステップStep103、Step104)と静的解析(ステップStep105、Step106)とを並列に実施することが可能である。
すなわち、コードクローン検出と静的解析を並列で行う場合には、例えば、図14のモード選択欄410の「類似性検出法」411で「コードクローン」の行単位検出を設定する。さらに、「類似度」412に関して、必要な条件を入力または選択押下し、チェック印を入れる。さらに、「静的解析条件」413の欄の「静的解析として外部ツールを利用」の前のボックスを必要に応じて押下しチェック印を入れ、ツールのパス名を選択する。また、処理方式420の欄で並列処理を選択する。これは、静的解析の一実施の形態を説明したものである。
次に、この並列の処理フローで得られたコードクローン結果と静的解析の結果である複雑度の情報とが、対応付けられる(図13のステップStep107)。図13では、静的解析に複雑度の解析を行った場合を示している。ステップStep107で対応付け統合した結果を、ユーザの目的に応じて複雑度の情報とコードクローンの類似性の評価をする(ステップStep108)。評価した結果を可視化した結果とし出力する(ステップStep109)。
なお、コードクローン検出の処理(ステップStep103、Step104)では、ユーザが選択した少なくとも2つのプログラム(関数及びファイルなど)について文字コード変換など前処理(ステップStep 2)したソースコードについて、ユーザにより指定された条件で、コードクローン検出を行う。
図15は、コードクローン検出の処理により得られた、コードクローンの類似度の解析結果表250のデータ構造を、概念的に示した例である。解析結果表250は、ファイルパス名欄251と類似度欄250とで構成されている。
また、図16に示す複雑度出力結果表500は、図17の処理フローを用いて実現される。以下、図16、図17を説明する。図16は、静的解析情報取得工程に相当するものである。図16の複雑度出力結果表500は、図13のStep105、106の複雑度の解析出力結果の一例を示したものである。
複雑度出力結果表500は、ファイルパス名欄501と、複雑度欄502とを備える。各行に一つのファイル情報が格納される。ファイルパス名欄501は、縦列にファイルの格納先とファイル名を示したパス名で格納される。複雑度欄502は、図13のStep2で前処理されたファイルあるいは個々のコードクローンを含む関数、あるいはコードクローン領域ごとの複雑度の測定結果(複雑度のスコア)が格納されるものである。なお、図中に入力されている値やファイルパス名は一例である。
図17は、コードクローン出力結果にコードクローン複雑度出力結果を統合する流れ(図13のStep107)を、詳細に示したフローチャートである。図17は、領域照合工程に相当するものである。まず、検出したコードクローン出力結果と複雑度出力結果の情報がソースコード分析手段に入力される(ステップS201)。次に、ソースコード分析手段において、コードクローン検出出力結果の1行目のクローンの位置情報と複雑度出力結果の1行目の複雑度測定対象の位置情報を比較する。複雑度測定対象の位置情報としては、複雑度をファイル単位で測定した場合にはファイルパス名、関数単位で測定した場合には、関数名やファイルのなかでの位置情報(行番号情報等)が適当であると考えられる。以下、これがファイルパス名であるものとして説明する。すなわち、コードクローン出力結果の1行目のファイルパス名と複雑度出力結果の1行目のファイルパス名を比較する(ステップS204)。比較したファイルパス名が同じかどうか確認し(ステップS205)、ファイルパス名が同じである場合、コードクローン出力結果の右端の列に同じファイルパス名の複雑度を追加する(ステップS206)。
コードクローンの複雑度出力結果の1行目に同じファイルパス名が無い場合は、複雑度出力結果のファイルパス名を一つ下の行へ移動し(ステップS210)、同じファイルパス名があるか確認し(ステップS211)、同じファイルパス名があるところの複雑度をコードクローン出力結果の右端に追加する(ステップS212)。
次に、コードクローン出力結果のファイルパス名を一つ下の行に移動する(ステップS207)。同様にステップS205、ステップS206、ステップS210ステップS211、ステップS212繰り返し行い、コードクローン出力結果のファイルパス名を全部確認する(ステップS208)。最後にコードクローン出力結果に複雑度を追加した結果を出力する(ステップS209)。
この出力が,図18の静的解析出力結果とファイル間の類似度結果を統合した表600に相当する。
次に、図18の静的解析出力結果とファイル間の類似度結果を統合した表600をもとに、図13のStep108をタイプ別に評価する方法を説明する。
図19は、図18の出力した結果をユーザに可視化し簡便に判断できる情報として提供するためのフローチャートである。図19は、評価結果表示工程に相当するものである。
図19において、まず、図18で出力した表600を入力し(ステップS701)、入力ファイルの複雑度情報を確認する(ステップS702)。クローンの複雑度情報が大きい場合(ステップS703)、図20の可視化図の右半分全部を囲み(ステップS704)、さらにクローンの広がり度の値が大きい場合には(ステップS705)、図20の可視化図の右上の部分を囲み直し、優先度1として分類する(ステップS706)。図20のソースコードをリファクタリングや共通化するなどの優先度として優先度1(共通化候補)の囲まれた部分を結果として出力する(ステップS707)。これをタイプAと分類する。
またクローンの複雑度情報が小さい場合は、図20の可視化図の左半分全部を囲み(ステップS709)、 クローンの広がり度の値が大きければ(ステップS710)、図20の可視化図の左上の部分を囲み直し、優先度2とする(ステップS711)。これをタイプCと分類する。図20の優先度2の可視化図の囲まれた部分を結果として出力する(ステップS707)。コードクローンの複雑度が小さい場合は、図20の可視化図の左半分を囲み(ステップS709)、コードクローンの広がり度が小さい時、図20の可視化図の左下部分を囲み直し、優先度3とする(ステップS712)。これをタイプBと分類する。図20の優先度3の可視化図の囲まれた部分を結果として出力する(ステップS707)。
図20は、図19のフローチャートから得られた出力結果を、ユーザに対して簡便に判断できる情報として提供するための可視化図1052である。
ここでは例として、横軸をコードクローンの複雑度の大きさで示し、縦軸をコードクローンの広がりの大きさで示している。コードクローンの広がりとは、コードクローンがサブシステム階層を超えて存在する場合、コードクローンの広がりが大きい。またサブシステム階層内にコードクローンが存在する場合は、コードクローンの広がりは小さい。
例えばコードクローンの広がりが大きく、コードクローンの複雑度が大きい場合は、図20の右上の場所になり、ソースコード改善箇所として優先度が1番目であり、「ソースコードの共通化の候補になるコードクローンである」という情報をユーザに提供できる。
図18の出力表600は、ファイル間の類似性を示しており、この場合を図20の可視化図に対応させた場合、縦軸のコードクローンの広がりは、類似度が同じファイル同士の広がりとして評価できる。例えば、同じ類似度のファイル間で、リファクタリングの優先順位づけをつけることができる。
図18の出力表600の中で類似度が70%のファイル群は3つ存在し、このファイル群のファイルパス名を見ると同階層以外に存在するファイルパス名「c:¥data¥test¥test5」がある。このファイルは、類似度が70%のファイル同士中で位置関係に広がりが見られ、しかも複雑度も高い。よって、図18のファイルパス名「c:¥data¥test¥test5」は、タイプAに分類され、ソースコードのリファクタリングやソースコードの共通化などの、対策処理の優先度が同じ類似度のファイル間で最も高いもの(優先度1)であると評価できる。
なお、ソースコードの類似性に関する情報と対応づける「類似性以外の解析情報」を複数にすることもできる。例えば、ソースコードの静的解析情報に加えて、さらに、ソースコードの属性情報、例えば、ソースコードの作成者や、作成日等のソースコードに関係した解析情報を含めても良い。この場合、設定画面1050の「選択ファイルの格納パス」401の「参照」ボタンをユーザが押下し、プルダウンメニューからソースコードの記述内容以外の属性情報、例えばソースコードの作成者を選択することで、ソースコードの類似性に関する情報と対応づける解析情報として、「複雑度」+「ソースコードの作成者」の2つの解析条件を設定することもできる。これによって、例えば、図20の可視化図1052を、さらに、「ソースコードの作成者」単位で作成したものを、表示することもできる。
このように、本実施例によれば、ソフトウェアの類似性とこの類似性に関する情報と対応づける「類似性以外の解析情報」とに関して必要な情報を探しやすくし、分析者の労力を軽減し、分析に要する時間を短縮できる。また、類似度、複雑度など複数の解析情報をマージしたコードクローン情報をユーザに図や表として可視化し提供することは、ユーザが精査ポイントを、効率的かつ実証的に把握し、あるいは容易にフォーカスできるようになる。これにより、各ユーザは、ソフトウェアの開発に関して、効率的に正確な改善指針を共有できるようになる。
次に、本発明の第三の実施の形態を、図21から図25を参照しながら説明する。
本発明において、ソースコードの類似性に関する情報と対応づける「類似性以外の解析情報」を、複数にできることは、既に述べたとおりである。この場合、「類似性以外の解析情報」には、ソースコードの静的解析情報に加えて、さらに、ソースコードの記述以外のソースコードに関する属性情報、例えば、ソースコードの「ハードウェアへの依存性」、「OS(オペーレーティングシステム)への依存性」等の、ソースコードに関係した解析情報を含めても良い。ここでは、「類似性以外の解析情報」として、「ハードウェアへの依存性」の解析条件を加えた実施例について述べる。
実施例3のソフトウェアの類似性評価方法は、実施例1や実施例2と同様に処理して出力されたコードクローンの位置情報や、類似度、静的解析で得られた複雑度、関数位置情報などの結果を利用し、さらに、それらの結果に、ソースコードに関係する属性情報として、特定のハードウェアに依存性があるかどうかの情報を追加し、総合的に評価した出力結果を提供するものである。
本実施の形態において、ソースコードに関する「ハードウェアへの依存性」とは、あるハードウェアAとハードウェアBに依存性がない場合(ハードウェアに非依存)、ハードウェアAとBの両方に同じソフトウェアが利用できる性質を意味する。あるいは、あるハードウェアAとハードウェアBに依存性が有る場合(ハードウェアに依存有り)、同じソフトウェアが利用できない性質を意味する。ハードウェア依存性を有する場合には、ハードウェアAあるいはBのどちらかだけであるソフトウェアが利用できる。
ここで、ソフトウェアが複数のソースコードで構成される状況を想定すると、ソフトウェアの移植の際に、特定のハードウェアに非依存なソースコードは、改造不要なソースコードに相当する(本実施の形態では、ある特定のハードウェア環境で動作するソフトウェアを別のハードウェア環境で動作するように改造する作業をソフトウェアの「移植」と称する)。
個々のソースコードが特定のハードウェアに依存か非依存かは、ソースコード作成完了段階で作成者等は一般に識別しており、移植性を高め保守容易にする目的で、双方を分離してソースコードをファイル化し、さらには格納フォルダを分けて配置する施策がしばしば講ぜられる。移植の際に、改造不要なソースコードと改造が必要なソースコードが、識別容易になり、移植作業を正確かつ速く行いやすくなるためである。
しかし、ハードウェア依存性があると作業者等が識別したソースコードにも、作業ミス等の理由で、部分的にハードウェアに非依存のコード断片が誤混入した状態が起こりえる。その可能性を有するのは、たとえば、「ハードウェア非依存」と称するファイルと「ハードウェア依存有り」と称するファイルとの間でクローンが存在する場合である。「ハードウェア依存」と称するファイルに含まれるクローンに、ハードウェア依存性が実は存在しない、すなわち、クローンに該当するコード断片が正しくはハードウェア非依存であった可能性がある。このような場合には、クローンに相当するコード断片を「ハードウェア依存(有り)」と称するファイルから分離して、「ハード非依存」のファイル等に移動して、正しく配置しなおす修正が望まれる。
本実施の形態は、上述のようなコード断片の誤混入の検出を支援する用途を想定するものである。
図21は、実施例3に係わる類似性評価システムにおける、ソースコード分析手段の機能ブロックを示す図である。基本的な構成は、図1Bのソースコード分析手段と同じである。外部記憶装置部102のソースコード格納部3Aには、類似性検出を行うソースコードなど、分析に必要なソースコードが、「ハードウェア依存」のファイル、「ハード非依存」のファイルとして個別に格納されている。
主記憶装置部101の分析条件設定部40では、ソースコードの類似性検出を第一の条件(類似性)検出部50で実行する際の解析で必要な、複数のソースプログラムの間の類似性に関する「第1の設定条件」を選定し、第二の条件(類似性以外)解析部60でソースプログラムの前記類似性以外の記述の解析に関する「第2の設定条件」を選定する。
図22は、第三の実施形態の全体の処理の流れを示したフローチャートである。全体としては、図3に示した実施例1のフローチャートと同じである。最初に、ユーザにより、ソースコード分析手段に対するソフトウェアの類似性評価のために必要な分析条件の設定がなされる。ここでは、「ハードウェアへの依存性」の解析条件も設定される。(ステップStep 10)。
図23は、ソースコード格納部3A等に保持された各ファイルパス名に対して、特定のハードウェアに依存性があるか無いかの情報の一例を示した、ハードウェア依存の情報を示す表1000である。
以下、実施例1と同様に、ステップStep 2〜6の処理がなされる。その後、ステップStep6で得られた出力結果から必要な解析結果を利用し、さらにハードウェアの依存情報をStep6で検出されたコードクローンに対応付ける(ステップStep 11)。
さらに、検出コードクローン情報と関数の位置情報、及びハードウェアの依存情報の統合結果の評価を行い(ステップStep 12)、その結果を可視化した図を出力表示する(ステップStep 8)。
図24は、コードクローン位置情報および複雑度などの静的解析情報に、ハードウェアの依存性を統合したハードウェア依存性統合表1100を示す。ここでは、各ファイルパス名が、クローン番号(1,2,3,−)の順にリストアップされている。また、同じクローン番号を有する複数のファイルパス名は、枝番号で区別されている。
図25は、ハードウェア依存性統合表1100を評価した結果を、可視化的に示した結果である。本評価は、図24の類似度50%以上のコードクローンを対象とし、縦軸に複雑度の大小を示し、横軸はハードウェアの依存性の有無を示し、クローン番号がどこの座標に分布されるか示している。図24のハードウェア依存性統合表1100で示されている各クローン番号に対する全クローンについても表示されている。
図25で、「特定のハードウェアに依存あり」とは、同一のクローン番号のコード断片が、特定のハードウェアに依存すると称するファイルに1つでも存在する状態をさし示すものとする。このような状態は、一例として、ハードウェア依存性があると判定したソースコードに、作業ミス等の理由で、部分的にハードウェアに非依存のコードが混入したこと想定しうる状態である。この状況を検出した作業者等は、優先的にこのクローンの内容を確認し、その結果、実際にハード非依存であることが認定されれば、然るべきファイルやフォルダに当該コード断片を移動する。
図24を参照することによって、クローン番号3の2つのクローン(3−1,3−2)は、これに(「特定のハードウェアに依存あり」)該当することが確認できるので、図25において「特定のハードウェアに依存あり」に相当する左上の象限にマッピングされている。
本評価では、図24より、クローン番号1(1−1〜1−3)は複雑度が高く、ある特定のハードウェアAに非依存である。そのため、クローン番号1の3つのクローンは図25の右上に分布される。
クローン番号2の1つのクローン(2−1)は、複雑度が高いクローンに分布され、特定のハードウェアAに非依存であるので、図25の右上に分布される。
クローン番号2の残りの1つのクローン(2−2)は、複雑度が低いクローンに分布され、特定のハードウェアAに非依存であるので、図25の右下に分布される。
クローン番号3の2つのクローン(3−1,3−2)は、いずれも複雑度が高く、特定のハードウェアAに依存があるので図25の左上に分布される。
なお、ここでは、コードクローンが50%以上の類似度情報の結果を例として出力しているが、類似度が70%以上、あるいは類似度が80%以上などのように図25の出力情報を、類似度毎に複数の選択可能な画面で出力することが可能である。あるいはまた、依存性及び複雑度に、類似度も含めた情報を、X,Y,Zの3軸に展開し、1つの画面で表示するようにしても良い。
分析者は、これらの画面から、正確な改善指針をえることができる。例えば、クローン番号3のクローン群のように特定のハードウェアに依存性が有るコード断片を含む場合には、コードクローン部分を抽出して、移植の際に改造不要なソースコードとして特定のフォルダ等に集中的に格納しておくよう修正する。これにより移植性を高めることができる。さらに、同程度の複雑度を有するクローン番号2のクローン群よりも修正を優先的に行うといった作業の優先順位づけの指針を得ることができる。このことは、複雑度と類似度だけを優先順位づけの指針に用いる第二の実施の形態の様態に加えて、新たに第三の尺度を加えた情報提示を行うことで新たな作業指針を導く効果の発現を意味するものである。
なお、静的解析情報取得工程と類似性検出工程の直列処理に代えて、これらを実施例2のように並列処理し、それらの処理で得られた出力結果から必要な解析結果を利用し、さらにハードウェアの依存情報を対応付け、出力した結果を評価し、可視化した図を出力表示するようにしても良い。
このように、本実施例によれば、ソフトウェアの類似性と、この類似性に関する情報と対応づける複数の「類似性以外の情報」とに関して必要な情報を探しやすくし、分析者の労力を軽減し、分析に要する時間を短縮できる。また、類似度、複雑度、ハードウェアの依存情報など複数の解析情報をマージしたコードクローン情報をユーザに図や表として可視化し提供することは、ユーザが精査ポイントを、効率的かつ実証的に把握し、あるいは容易にフォーカスできるようになる。これにより、各ユーザは、ソフトウェアの開発に関して、効率的に正確な改善指針を共有できるようになる。
3A…ソースコード格納部、3B…分析関連情報及び出力ファイル格納部、4…条件設定部、5…類似性検出部、6…静的解析部、7…照合・統合部、8…評価部、9…評価結果表示部、100…CPU、101…主記憶装置、102…外部記憶装置、103…可搬型記憶媒体、104…読取装置、105…入出力装置、106…通信装置、200…完全一致コードクローン出力結果表、300…一部一致コードクローン出力結果表、400…複雑度出力結果表、500…出力結果統合表、600…コードクローン位置情報の重なりをまとめた出力結果表、700…条件1による出力結果表、800…クローン解析対象の関数情報表、1050…設定画面、1051…可視化図。

Claims (20)

  1. ソースコード分析手段により、複数のソースプログラムの間の類似性を検出し評価するソフトウェアの類似性評価方法であって、
    前記ソースコード分析手段は、前記複数のソースプログラムが格納される記憶装置部と、表示部を含む入出力装置とを備えており、
    前記類似性評価方法は、
    分析の条件として、前記複数のソースプログラムの間の類似性の解析条件、及び、該類似性以外の解析条件を取得する解析条件取得工程と、
    前記類似性の解析条件に基づき、前記複数のソースプログラムから、前記類似性に関わる情報を取得する類似性検出工程と、
    前記類似性以外の解析条件に基づき、前記複数のソースプログラムから、前記類似性以外の解析情報を取得する解析情報取得工程と、
    前記各ソースプログラムにおける前記類似性を有するコード領域と前記類似性以外の解析情報とを対応づける領域照合工程と、
    前記類似性を有するコード領域における、前記類似性以外の解析情報を評価する評価工程と、
    前記評価結果に基づき、前記類似性に関わる情報と前記類似性以外の解析情報とを関連付けて、前記表示部へ表示する表示工程とを有する
    ことを特徴とするソフトウェアの類似性評価方法。
  2. 請求項1において、
    前記類似性の解析条件が、前記類似性の検出法と、類似度合とである
    ことを特徴とするソフトウェアの類似性評価方法。
  3. 請求項1において、
    前記類似性検出工程において、複数の前記解析条件で前記類似性の検出を実施し、該解析条件の相違を反映して内容が相違する第一の類似性情報と第二の類似性情報とを生成し、
    前記領域照合工程において、前記類似性以外の解析情報との対応づけを前記第一の類似性情報と前記第二の類似性情報の双方に対して実施する
    ことを特徴とするソフトウェアの類似性評価方法。
  4. 請求項1において、
    前記類似性以外の解析条件が、前記ソースプログラム内の関数の開始位置である
    ことを特徴とするソフトウェアの類似性評価方法。
  5. 請求項1において、
    前記類似性以外の解析条件が、前記ソースプログラムの複雑度である
    ことを特徴とするソフトウェアの類似性評価方法。
  6. 請求項4において、
    前記評価結果の表示工程における前記表示部への表示形態が、前記関数のインターフェースが同一か否か、及びソースコードの中身が一致するか否かで分類されたものである
    ことを特徴とするソフトウェアの類似性評価方法。
  7. 請求項5において、
    前記評価結果の表示工程における前記表示部への表示形態が、
    前記複雑度の大小と、前記類似性を有するペアの所在の分散の大小で分類されたものである
    ことを特徴とするソフトウェアの類似性評価方法。
  8. 請求項1において、
    前記類似性の検出工程と前記静的解析情報の取得工程とが直列に処理され、これらの処理結果に基づき前記領域照合工程が処理される
    ことを特徴とするソフトウェアの類似性評価方法。
  9. 請求項1において、
    前記類似性の検出工程と前記静的解析情報の取得工程とが並列に処理され、これらの処理結果を統合して前記領域照合工程が処理される
    ことを特徴とするソフトウェアの類似性評価方法。
  10. ソースコード分析手段により、複数のソースプログラムの間のコードクローンの類似性を検出し評価するソフトウェアの類似性評価方法であって、
    前記ソースコード分析手段は、前記複数のソースプログラムが格納される記憶装置部と、表示部を含む入出力装置とを備えており、
    前記類似性評価方法は、
    分析の条件として、前記複数のソースプログラムの間の前記コードクローンの類似性の解析条件、及び、前記ソースプログラムの間の該類似性以外の解析条件を取得する解析条件取得工程と、
    前記類似性の解析条件に基づき、前記複数のソースプログラムから、前記コードクローンの類似性に関わる情報を取得する類似性検出工程と、
    前記類似性以外の解析条件に基づき、前記複数のソースプログラムから、前記コードクローンの類似性以外の解析情報を取得する解析情報取得工程と、
    前記各ソースプログラムにおける前記コードクローンの類似性を有するコード領域と前記類似性以外の解析情報とを対応づける領域照合工程と、
    前記コードクローンの類似性を有するコード領域における、前記類似性以外の解析情報を評価する評価工程と、
    前記評価結果に基づき、前記コードクローンの類似性に関わる情報と前記類似性以外の解析情報とを関連付けて、前記表示部へ表示する表示工程とを有する
    ことを特徴とするソフトウェアの類似性評価方法。
  11. 請求項10において、
    前記類似性に関わる情報が、前記コードクローンの検出方法と、該コードクローンの類似度合に関する情報である
    ことを特徴とするソフトウェアの類似性評価方法。
  12. 請求項10において、
    前記類似性以外の解析条件が、前記ソースプログラム内の関数の開始位置であり、
    前記評価結果の表示工程における前記表示部への前記類似性情報の表示形態が、前記関数の位置情報の範囲内で前記コードクローン検出を行った結果を対応付けたものである
    ことを特徴とするソフトウェアの類似性評価方法。
  13. 請求項10において、
    前記評価結果の表示工程において、前記ソースプログラムの類似度と、前記類似性以外の解析情報をマージした前記コードクローン情報とを生成し、可視化して前記表示部へ表示する
    ことを特徴とするソフトウェアの類似性評価方法。
  14. 請求項13において、
    前記評価結果の表示工程における前記表示部への表示形態が、
    前記複雑度の大小と、前記類似性を有する前記コードクローンの広がりの大小とに基づく、処理の優先度で分類されたものである
    ことを特徴とするソフトウェアの類似性評価方法。
  15. ソースコード分析手段により、複数のソースプログラムの間の類似性を検出し評価するソフトウェアの類似性評価方法であって、
    前記ソースコード分析手段は、前記複数のソースプログラムが格納される記憶装置部と、入力装置、及び出力装置とを備えており、
    前記類似性評価方法は、
    分析の条件として前記入力装置から入力される、前記複数のソースプログラムの間の類似性に関する少なくとも1つの解析条件を第一の解析条件、及び、前記複数のソースプログラムに関する前記類似性以外の少なくとも1つの解析条件を第二の解析条件とを取得する解析条件取得工程と、
    前記第一の解析条件に基づき、前記複数のソースプログラムから、前記類似性に関わる情報を取得する類似性検出工程と、
    前記第二の解析条件に基づき、前記複数のソースプログラムに関して、前記第二の解析条件を満たす解析情報を取得する解析情報取得工程と、
    前記各ソースプログラムにおける前記類似性を有するコード領域と、前記第二の解析条件を満たす解析情報とを対応づける領域照合工程と、
    前記類似性を有するコード領域における、前記第二の解析条件を満たす解析情報を評価する評価工程と、
    前記評価結果に基づき、前記類似性に関わる情報と前記第二の解析条件を満たす解析情報とを関連付けて、前記出力装置に出力する工程とを有する
    ことを特徴とするソフトウェアの類似性評価方法。
  16. 請求項15において、
    前記第一の解析条件が、前記ソースプログラム間の前記類似性の検出法と、類似度合である
    ことを特徴とするソフトウェアの類似性評価方法。
  17. 請求項16において、
    前記類似性検出工程において、複数の前記解析条件で前記類似性の検出を実施し、該解析条件の相違を反映して内容が相違する第一の類似性情報と第二の類似性情報とを生成し、
    前記領域照合工程において、前記第二の解析条件を満たす解析情報との対応づけを前記第一の類似性情報と前記第二の類似性情報の双方に対して実施する
    ことを特徴とするソフトウェアの類似性評価方法。
  18. 請求項15において、
    前記第二の解析条件が、前記ソースプログラムのソースコードの記述に関する解析条件と、該ソースコードの記述内容以外のソースコードの属性情報とを含む
    ことを特徴とするソフトウェアの類似性評価方法。
  19. 請求項18において、
    前記第二の解析条件が、ハードウェアへの依存性に関する解析条件を含む
    ことを特徴とするソフトウェアの類似性評価方法。
  20. 請求項18において、
    前記第二の解析条件が、OSへの依存性に関する解析条件を含む
    ことを特徴とするソフトウェアの類似性評価方法。
JP2011025293A 2011-02-08 2011-02-08 ソフトウェアの類似性評価方法 Expired - Fee Related JP5564448B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2011025293A JP5564448B2 (ja) 2011-02-08 2011-02-08 ソフトウェアの類似性評価方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2011025293A JP5564448B2 (ja) 2011-02-08 2011-02-08 ソフトウェアの類似性評価方法

Publications (2)

Publication Number Publication Date
JP2012164211A true JP2012164211A (ja) 2012-08-30
JP5564448B2 JP5564448B2 (ja) 2014-07-30

Family

ID=46843530

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011025293A Expired - Fee Related JP5564448B2 (ja) 2011-02-08 2011-02-08 ソフトウェアの類似性評価方法

Country Status (1)

Country Link
JP (1) JP5564448B2 (ja)

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014153777A (ja) * 2013-02-05 2014-08-25 Tokyo Kogei Univ ソースコード検査装置
JP2015064808A (ja) * 2013-09-26 2015-04-09 株式会社日立ソリューションズ メソッドレベルのクローン分析方法
KR20150111610A (ko) * 2014-03-26 2015-10-06 단국대학교 산학협력단 스택 기반 소프트웨어 유사도 평가 방법 및 장치
JP2016071774A (ja) * 2014-10-01 2016-05-09 日本電気株式会社 検証支援装置、検証支援方法およびコンピュータプログラム
US9495150B2 (en) 2014-03-18 2016-11-15 Kabushiki Kaisha Toshiba Information processing apparatus and method, and computer program product
US9880834B2 (en) 2013-03-29 2018-01-30 Nec Solution Innovators, Ltd. Source program analysis system, source program analysis method, and recording medium on which program is recorded
JP2018503170A (ja) * 2014-11-24 2018-02-01 バイエル、アクチエンゲゼルシャフトBayer Aktiengesellschaft 少なくとも1つの化学反応を行うように設計された生産プラントを構成する方法
CN111400724A (zh) * 2020-05-08 2020-07-10 中国人民解放军国防科技大学 基于代码相似性分析的操作系统脆弱性检测方法、系统及介质
JP2021002158A (ja) * 2019-06-20 2021-01-07 富士通株式会社 分析対象特定プログラム、分析対象特定方法、情報処理装置
US11068381B2 (en) 2016-12-29 2021-07-20 Mitsubishi Electric Corporation Program analysis device, program analysis system, program analysis method and computer readable medium
US11099842B2 (en) 2019-01-08 2021-08-24 Saudi Arabian Oil Company Source code similarity detection using digital fingerprints

Citations (3)

* Cited by examiner, † Cited by third party
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 類似ソースコード抽出プログラム、類似ソースコード抽出装置および類似ソースコード抽出方法
JP2008046695A (ja) * 2006-08-11 2008-02-28 Kobe Univ 類似度評価プログラム、類似度評価装置及び類似度評価方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
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 類似ソースコード抽出プログラム、類似ソースコード抽出装置および類似ソースコード抽出方法
JP2008046695A (ja) * 2006-08-11 2008-02-28 Kobe Univ 類似度評価プログラム、類似度評価装置及び類似度評価方法

Non-Patent Citations (9)

* Cited by examiner, † Cited by third party
Title
CSNG200700798001; 吉村 健太郎,ダルマリンガム ガネサン,ディルク ムーティック: 'プロダクトライン導入に向けたレガシーソフトウェアの共通性・可変性分析法' 情報処理学会論文誌 Vol.48, No.8, 20070815, pp.2482-2491, 社団法人情報処理学会 *
CSNG200800559001; 肥後 芳樹,楠本 真二,井上 克郎: 'コードクローン検出とその関連技術' 電子情報通信学会論文誌 Vol.J91-D,No.6, 20080601, pp.1465-1481, 社団法人電子情報通信学会 *
CSNG200800887008; 左藤 裕紀,亀井 靖高,上野 秀剛,門田 暁人,川口 真司,名倉 正剛,松本 健一,飯田 元: 'コードクローンの長さとソフトウェア信頼性の関係の分析' 電子情報通信学会技術研究報告 Vol.108,No.242, 20081009, pp.43-48, 社団法人電子情報通信学会 *
JPN6013064690; 吉村 健太郎 外2名: 'プロダクトライン導入に向けたレガシーソフトウェアの共通性・可変性分析法' 情報処理学会論文誌 Vol.48, No.8, 20070815, pp.2482-2491, 社団法人情報処理学会 *
JPN6013064690; 吉村 健太郎,ダルマリンガム ガネサン,ディルク ムーティック: 'プロダクトライン導入に向けたレガシーソフトウェアの共通性・可変性分析法' 情報処理学会論文誌 Vol.48, No.8, 20070815, pp.2482-2491, 社団法人情報処理学会 *
JPN6013064691; 肥後 芳樹 外2名: 'コードクローン検出とその関連技術' 電子情報通信学会論文誌 Vol.J91-D,No.6, 20080601, pp.1465-1481, 社団法人電子情報通信学会 *
JPN6013064691; 肥後 芳樹,楠本 真二,井上 克郎: 'コードクローン検出とその関連技術' 電子情報通信学会論文誌 Vol.J91-D,No.6, 20080601, pp.1465-1481, 社団法人電子情報通信学会 *
JPN6013064692; 左藤 裕紀 外7名: 'コードクローンの長さとソフトウェア信頼性の関係の分析' 電子情報通信学会技術研究報告 Vol.108,No.242, 20081009, pp.43-48, 社団法人電子情報通信学会 *
JPN6013064692; 左藤 裕紀,亀井 靖高,上野 秀剛,門田 暁人,川口 真司,名倉 正剛,松本 健一,飯田 元: 'コードクローンの長さとソフトウェア信頼性の関係の分析' 電子情報通信学会技術研究報告 Vol.108,No.242, 20081009, pp.43-48, 社団法人電子情報通信学会 *

Cited By (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014153777A (ja) * 2013-02-05 2014-08-25 Tokyo Kogei Univ ソースコード検査装置
US9880834B2 (en) 2013-03-29 2018-01-30 Nec Solution Innovators, Ltd. Source program analysis system, source program analysis method, and recording medium on which program is recorded
JP2015064808A (ja) * 2013-09-26 2015-04-09 株式会社日立ソリューションズ メソッドレベルのクローン分析方法
US9495150B2 (en) 2014-03-18 2016-11-15 Kabushiki Kaisha Toshiba Information processing apparatus and method, and computer program product
KR101583133B1 (ko) * 2014-03-26 2016-01-07 단국대학교 산학협력단 스택 기반 소프트웨어 유사도 평가 방법 및 장치
KR20150111610A (ko) * 2014-03-26 2015-10-06 단국대학교 산학협력단 스택 기반 소프트웨어 유사도 평가 방법 및 장치
JP2016071774A (ja) * 2014-10-01 2016-05-09 日本電気株式会社 検証支援装置、検証支援方法およびコンピュータプログラム
JP2018503170A (ja) * 2014-11-24 2018-02-01 バイエル、アクチエンゲゼルシャフトBayer Aktiengesellschaft 少なくとも1つの化学反応を行うように設計された生産プラントを構成する方法
JP2021140797A (ja) * 2014-11-24 2021-09-16 バイエル、アクチエンゲゼルシャフトBayer Aktiengesellschaft 少なくとも1つの化学反応を行うように設計された生産プラントを構成する方法
US11068381B2 (en) 2016-12-29 2021-07-20 Mitsubishi Electric Corporation Program analysis device, program analysis system, program analysis method and computer readable medium
US11099842B2 (en) 2019-01-08 2021-08-24 Saudi Arabian Oil Company Source code similarity detection using digital fingerprints
JP2021002158A (ja) * 2019-06-20 2021-01-07 富士通株式会社 分析対象特定プログラム、分析対象特定方法、情報処理装置
CN111400724A (zh) * 2020-05-08 2020-07-10 中国人民解放军国防科技大学 基于代码相似性分析的操作系统脆弱性检测方法、系统及介质
CN111400724B (zh) * 2020-05-08 2023-09-12 中国人民解放军国防科技大学 基于代码相似性分析的操作系统脆弱性检测方法、系统及介质

Also Published As

Publication number Publication date
JP5564448B2 (ja) 2014-07-30

Similar Documents

Publication Publication Date Title
JP5564448B2 (ja) ソフトウェアの類似性評価方法
JP5775829B2 (ja) ソフトウェアの構造可視化プログラムおよびシステム
JP5496853B2 (ja) 構造化文書を分類するためのルールを生成するための方法、並びにそのコンピュータ・プログラム及びコンピュータ
US9384177B2 (en) File history recording system, file history management system and file history recording method
US8386504B1 (en) System and method for file differencing with importance ranking
US8533140B2 (en) Method and system for design check knowledge construction
Limsettho et al. Automatic unsupervised bug report categorization
US9268842B2 (en) Information processing apparatus, control method for the same, and computer-readable recording medium
US20080052299A1 (en) Reverse engineering support system
JP2017041171A (ja) テストシナリオ生成支援装置およびテストシナリオ生成支援方法
JP3828379B2 (ja) テスト仕様生成支援装置、方法、プログラム及び記録媒体
US7624124B2 (en) System and method for assisting generation of business specification
JP5827206B2 (ja) 文書管理システムおよび文書管理方法並びに文書管理プログラム
US7992126B2 (en) Apparatus and method for quantitatively measuring the balance within a balanced scorecard
US20140136155A1 (en) Analyzing hardware designs based on component re-use
JPWO2014064777A1 (ja) 文書評価支援システム、及び文書評価支援方法
US20200334399A1 (en) Design support system, design verification method, and design verification program
US20130080837A1 (en) Fault localization for data-centric programs
JP5790820B2 (ja) 不整合検出装置、プログラム及び方法、修正支援装置、プログラム及び方法
Al-Zubidy et al. Review of systematic literature review tools
US20170131973A1 (en) Software specification dependence relation verification apparatus and software specification dependence relation verification method
JP2019101829A (ja) ソフトウェア部品管理システム、計算機および方法
US10891332B2 (en) Instrumentation diagram data generation device, instrumentation diagram search system, and computer readable medium
WO2016013099A1 (ja) 素性データ管理システム、および素性データ管理方法
JP7464351B2 (ja) メディア生成システムおよびそのシステムを実行する方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20130418

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20131219

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140107

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140306

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140401

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140519

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: 20140603

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140616

R150 Certificate of patent or registration of utility model

Ref document number: 5564448

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees