JP2014153777A - ソースコード検査装置 - Google Patents

ソースコード検査装置 Download PDF

Info

Publication number
JP2014153777A
JP2014153777A JP2013020836A JP2013020836A JP2014153777A JP 2014153777 A JP2014153777 A JP 2014153777A JP 2013020836 A JP2013020836 A JP 2013020836A JP 2013020836 A JP2013020836 A JP 2013020836A JP 2014153777 A JP2014153777 A JP 2014153777A
Authority
JP
Japan
Prior art keywords
source code
search condition
statements
match
inspection target
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
JP2013020836A
Other languages
English (en)
Other versions
JP6183636B2 (ja
Inventor
Yoshihisa Udagawa
佳久 宇田川
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.)
Tokyo Polytechnic University
Original Assignee
Tokyo Polytechnic University
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 Tokyo Polytechnic University filed Critical Tokyo Polytechnic University
Priority to JP2013020836A priority Critical patent/JP6183636B2/ja
Publication of JP2014153777A publication Critical patent/JP2014153777A/ja
Application granted granted Critical
Publication of JP6183636B2 publication Critical patent/JP6183636B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

【課題】類似のソースコードを、高速かつ高精度に検索することができるソースコード検査装置を提案する。
【解決手段】制御文、メソッド名であるステートメントのシーケンスを検索条件として受け付け、当該検索条件に完全に又は部分的に一致するソースコード中の記載を検索することにより、類似のソースコードを高速、高精度で検索することができるようになる。
【選択図】図1

Description

本発明はソースコード検査方法に関する。
高品質なソフトウェアを開発する基本は、ソースコードを正確に把握することであるが、実用的なシステムではソースコードが数万行から数十万行に及ぶことから、十分には行われていないのが実状である。特に近年では、ソースコードの長大化、複雑化が進み、同一のアルゴリズムを実行する類似のソースコードがいたるところに散在し、把握しきれなくなっている場合も多い。さらには、本来ならば一カ所に記載されるべき全く同じソースコードが、複数個所に重複記載されたまま放置されていることすら珍しくない。このような状況では、プログラムの機能追加や不具合修正を実施しようとしても、修正すべきソースコードの範囲を正確に特定することができずに修正漏れが多発し、品質向上・品質管理に要するコストが割高となっていた。
この様な問題に対応するために、散在する同一・類似のソースコードの修正を漏れなく行うための補助手段として、類似のソースコードを検索するソースコード検査方法が、従来から提案されている。
もっとも代表的な検査方法としては、テキスト比較による検査方法が挙げられる。この方法は、比較対象となるソースコードの構成要素を、単純にテキスト(文字列)として比較する。この方法には、変数名の書き換えなどの影響を受けやすい、と言う問題があったが、特開2003−30237号のように、文字列の概念的な類似性を考慮するなど、変数名の違いをある程度除去する方法が提案されている。
また、抽象構文木を利用する検査方法がある。この方法はまず、比較対象となるソースコードを構文解析することによって、プログラムの文法構造を示す「抽象構文木」を作成する。そして、この作成した「抽象構文木」どうしを比較することによって、比較対象が類似しているかを判断する。この方法には、プログラムの文法構造と言う観点から類似のソースコードを検索できるという特徴がある。
さらに、特徴ベクトルを利用する検査方法がある。この方法は、まずソースコードの特徴を幾つかのパターンに分類する。そして、各パターンを各次元、各パターンの計測回数を各次元のベクトル量とし、検査対象の特徴を多次元ベクトルの形式で表現して比較するのである。この方法には、多様な観点からなるパターンを多次元ベクトルと言う統一の形式で比較できるという特徴がある。
特開2003−30237号公報
しかし、従来のソースコード検査方法には、いずれも大きな問題があった。まず、テキスト比較による検査方法は、仮に変数名の違いなどをある程度除去したとしても、結局、文字列同士を単純に比較しているに過ぎない。プログラムの構造を解析して比較するものではなく、プログラムが実行する処理の類似性、すなわちプログラムの意味的な類似性を比較することができないために、その精度はまったく不十分であった。
また、抽象構文木を利用する検査方法については、プログラム構造の類似性を比較することはできるものの、一般に比較演算に大きな時間が掛かり、近年の複雑化、長大化したソースコードの解析には不向きであった。
さらに、情報ベクトルを利用する検査方法については、高速にプログラム構造の類似性を比較できるものの、その精度が低いという問題があった。ソースコードは、命令文の記載順序が大きな意味を持つが、この方法によれば、パターンの出現量は計測できるものの、パターンの出現順序は無視されてしまうからである。この情報ベクトルを利用する検査方法は、比較演算時間の短時間化を目的としたものだったが、検索条件を抽象化しすぎたために、検索精度が低下してしまったのである。
以上のような課題を解決するために本出願では、制御文、メソッド名であるステートメントのシーケンスを検索条件として受け付ける検索条件受付手段と、ソースコードを含む検査対象の指定を受け付ける検査対象指定受付手段と、指定された検査対象ごとに、指定された検索条件に完全に又は部分的に一致するソースコード中の記載が存在するかを判定するソースコード一致判定手段と、当該検査対象ごとに、当該ソースコード一致判定手段による判定結果を出力する判定結果出力手段とを有するソースコード検査方法などを提案する。
主に以上のような構成をとる本件発明によって、指定の条件に類似のソースコードを高速、高精度で検索することができるようになり、散在する類似のソースコードの修正を漏れなく正確に行うことができる。
本実施形態1の概要図 受け付けた検索条件の一例 完全一致及び部分一致の説明図 ソースコードの構造分析結果例 本実施形態2の概要図 本実施形態3の概要図 本実施形態4の概要図 本実施形態5の概要図 本実施形態5の出力例 ハードウェア・ソフトウェア構成例
以下、本発明の各実施形態について適宜図を用いて説明をする。なお、本発明はこれらの実施形態に何ら限定されるものではなく、その要旨を逸脱しない範囲において、様々な実施をすることが可能である。
<<実施形態1>>
<概要>
図1は、本実施形態のソースコード検査装置の概要を示す図である。この図にあるように、本実施形態は、検索条件受付手段、検査対象指定受付手段、ソースコード一致判定手段、及び判定結果出力手段によって構成される。
なお、以下各構成を説明するが、これらの構成が様々なハードウェア及びソフトウェアの組み合わせによって実現できることは当然である。例えば、ハードウェアは業務用サーバであってもよいし、通常のパソコンであってもよいし、スマートフォンであってもよいし、専用の携帯端末(PDA)であってもよい。ソフトウェアの構成については、単一のプログラムによって構成されてもよいし、複数のプログラムによって構成されてもよい。本実施形態は、その要旨を逸脱しない範囲において、あらゆるハードウェア及びソフトウェアの組み合わせによって実現してよいものである(以降に列記する他の実施形態についても同様)。
<機能的構成>
本実施形態は、検索条件受付手段によって、制御文、メソッド名であるステートメントのシーケンスを検索条件として受け付ける。ここで、受け付ける検索条件を「制御文、メソッド名であるステートメントのシーケンス」としたことが、本発明の重要な特徴の一つである。よって、始めに、この検索条件について詳細に説明する。
まず「制御文」とは、プログラムの実行を制御するための文である。代表的には、処理の分岐を制御するためのIF文や、SWITCH文、処理の繰り返しを制御するためのFOR文や、WHILE文などがある。
次に「メソッド」とは、ソースコード中から呼び出すことができる、特定の処理を行う命令群である。代表的にはオブジェクト指向におけるオブジェクトへのデータ操作命令を指すが、オブジェクト指向以外の要素を含むプログラミング言語においては、ここに関数等を含めてよいことは当然である。
次に「ステートメント」とは、「制御文」や「メソッド」などの命令文であり、ここでは特に「式」以外の部分を指すものである。すなわち、一般にプログラムの処理内容は「メソッド」の実行結果を変数に代入する「式」として記述されるが、例えば、このような記述から「式」を除外した記述を指す。なお、本発明は、「式」を検索条件に含める構成を完全に除外するものではないが、本実施形態では高速な実行のためには「式」は検索条件に含めない構成としたものである。
最後に「シーケンス」とは、順番に並んでいるデータや手順のことである。すなわち、「ステートメントのシーケンス」とは、「制御文やメソッドである(式以外の)命令文の並び」のことである。なお、この「シーケンス」の情報には、プログラム構造の階層情報を含んでもよい。例えばIF文の中にFOR文が出現する場合、IF文を順序1、FOR文を順序2とする順序情報に加え、IF文を階層1、FOR文を階層2とする、階層情報を含むものとしてもよい。
図2は検索条件の一例である。本例では、分かり易いように検索条件を表にして整理してある。この表では、第一列「No」が、記載順序(シーケンス)を示しており、第2列が当該記載順序に対応するステートメントを示している。また、2列目のステートメントにおいて、4行目、5行目が1段階字下げされ、6行目、7行目がさらに1段階字下げされているのは、ソースコードの階層構造を表したものである。すなわち、1行目から3行目までは、1行目のIF文によりネストされる階層1であり、4行目、5行目は、4行目のIF文によりネストされる階層2であり、6行目、7行目は6行目のFOR文によりネストされる階層3である。
注目すべき点は、上記検索条件に「式」を含まないことである。第2列に記載された検索条件の構成要素を見れば分かる通り、IF文やFOR文などの制御文においては、制御のための条件式が除外されており、「addParameter」などのメソッドにおいては、引数が除外されている。この方法によれば、ソースコードの骨格のみを検索条件とすることにより、検索精度を落とさずに、検索速度を向上させることができる。
さらに、「式」を検索条件から除外する代わりに、ステートメントの順序や階層などを検索条件に含めることによって、結果的にプログラムの構造を比較することが可能となっている。ソースコードは、プログラムのフローを表す記載順序が、通常の文章よりも大きな意味を持っている。また、通常の文章と異なり、プログラムのフローを制御する制御文と、制御文にネストされる階層構造自体が大きな意味を持っている。制御文の記載順序と階層構造がプログラムの処理フローの大枠を決定し、メソッドが処理内容の大枠を決定するとも言える。すなわち、上記のようなソースコードの特性に注目し、「制御文、メソッド名であるステートメントのシーケンス」を検索条件とした点が、本発明の大きな特徴の一つなのである。
具体的な検索条件の受付手段については、様々な方法によって実装できる。例えば、プログラムの引数として、検索条件や検索条件の記載されたファイルパスを渡すようにしてもよいし、本発明を統合開発環境ソフトウェアなどに組み込む場合であれば、当該ソフトウェアに、検索条件の指定画面を追加してもよい。また、後ほど他の実施形態を説明する際に詳述するが、ソースコードファイルのファイルパスを指定することにより、ソースコードファイルに記載されたソースコードの構造を自動解析できるようにし、この解析結果を検索条件として使用する構成としてもよい。
次に本実施形態は、検査対象指定受付手段によって、ソースコードを含む検査対象の指定を受け付ける。ここで、ソースコードを含む検査対象とは、ソースコードの記載されたファイルや、ソースコードの記載されたファイルの特定領域、ソースコードの記載されたファイルが格納されたフォルダ、又はこれらを記録しているUSBメモリやCD−ROMなど、OSなどの機能によって特定可能な記憶装置の全体または一部は、すべて含んでよいものとする。なお、このような検査対象指定受付手段が、様々な方法によって実装できるのは周知のとおりである。例えば、プログラムの引数としてファイルパスを渡してもよい。また、本発明を統合開発環境ソフトウェアなどに組み込む場合であれば、開発中ソースコードの特定領域をマウスで指定させるようにしてもよいし、開発中のプロジェクトに属するソースコードはすべて対象とするようにデフォルト設定しておいてもよい。もちろん、OSに組み込まれたコンポーネントを用いて、ファイルやフォルダ、ドライブなどのパスを指定するようにしてもよい。
次に本実施形態は、ソースコード一致判定手段を実行する。ソースコード一致判定手段においては、指定された検査対象ごとに、指定された検索条件に完全に又は部分的に一致するソースコード中の記載が存在するかを判定する。
以下、本実施例における完全一致及び部分一致について説明する。ただし、検索条件として指定されたステートメントの数をNとし、各ステートメントをS1からSNの符号で表わすものとする。また、S1の次にS2が現われる時、S1→S2と表すものとする。すなわち、受け付けた検索条件は、S1→S2→S3→…→SNで表すことができるものとする。
図3は、受け付けた検索条件を構成するステートメントが3個の場合の例である。図3に示される通り、本実施例における「完全一致」とは、「S1→S2→S3」で表される条件、すなわち、受け付けた検索条件そのものを指す。対して、「部分一致」とは「S1→S2→S3」の一部が「*」に置き換わった条件を指す。ここで、この記号「*」は、いかなるステートメントにも適合すると言うことを意味している。つまり、「S1→*→S3」であれば、一番目に発見されるステートメントはS1であり、最後に発見されるステートメントはS3である必要であるが、その間に発見されるステートメントはいかなるステートメントであってもよい、という条件を意味する。
本実施例では、受け付けた検索条件の一部を「*」で置き換えることにより派生するすべての条件を「部分一致」の条件とする。すなわち、S1→S2→S3から条件を一つ外したパターンとして、「*→S2→S3」、「S1→*→S3」、「S1→S2→*」の3パターンが想定可能である。また、条件を二つ外したパターンとして「*→*→S3」、「S1→*→*」、「*→S2→*」の3パターンが想定可能である。すべての条件を外したパターンはもはや検索条件とはならないので、想定されるパターンは合計6パターンとなる。
重要な点は、検索条件のステートメントの出現順序が逆になるようなパターンは、「部分一致」には含まない、と言う点である。あるいは、検索条件にその階層構造までを受け付ける場合であれば、検索条件のステートメントの階層関係が逆になるようなパターンは、「部分一致」には含まないと言う点である。前述の通り、ソースコードにおいては、プログラムのフローを表す記載順序や、制御文にネストされる階層構造が大きな意味を持っている。本実施例は、このソースコードの特性に注目し、受け付けた検索条件の出現順序や階層関係を崩さずに、「部分一致」の条件を作成する。これにより、各ステートメントのいずれかを含んでいればよい、と言うような単純なOR条件による部分一致検索とは全く異なる結果を導き出すことができるのである。
なお、「*→*→S3」、「S1→*→*」、「*→S2→*」のように、検索条件を構成するステートメントが単一である場合は、実質的にステートメントの出現順序や階層関係が、検索条件として考慮されないことになる。この様な条件にのみ一致する検査対象については、出力する検査結果から省略してもよいし、単一のステートメントにのみ一致した旨を注記して出力するようにしてもよい。本実施例において、一致の態様に応じて判定結果の出力内容を変更して良いことは当然である。
上記各検索条件パターンと検査対象のソースコードとの具体的な一致判定の方法については、様々なアルゴリズムを用いてよい。しかし、もっとも好ましいのは、検査対象のソースコードの構造解析を行うことにより、ソースコードを構成する制御文、メソッド名であるステートメントのシーケンスを抽出し、この抽出されたシーケンスと上記各検索条件パターンが一致するか否かを判定する方法である。この方法によれば、ステートメントのシーケンス同士を比較するため比較演算に係る時間を大幅に削減できるからである。
ソースコードの構造解析方法の一例を挙げると、まず、「制御文」については、IF文やFOR文の表記ルールをパターンマッチングすることにより、ソースコードから抽出することが可能である。
次に、「メソッド名」については、既存のメソッド名の一覧データを用いてパターンマッチングしてもよいし、プログラム言語ごとのメソッド名の表記ルール、例えば、Java(登録商標)であれば「Math.abs()」のように、クラスとメソッドの間にピリオドが、末尾に括弧が付く、などのルールに対してパターンマッチングしてもよい。なお、Java(登録商標)などのオブジェクト指向言語では、上記のように「クラス名.メソッド名」によってメソッドを呼び出す場合の他、「変数名.メソッド名」によってメソッドを呼び出す場合もある。この様な場合は、変数名に対応するクラス名を検索し、「クラス名.メソッド名」という形式に書き換える。これにより、変数名の違いを取り除くものとする。
また、記載順序(シーケンス)については、読み込んだ順序をそのまま記載順序として良いことは言うまでもない。
さらに、階層情報を含めて構造解析する場合は、IF文やWHILE文などの制御文は、その表記ルール上、{}等の記号で囲まれたソースコードが制御の対象であるのだから、{}等の内側にいくほど階層が深くなるものと考えて、階層情報を設定すればよい。
図4が実際に構造抽出を行った結果の一例である。なお、この図4においては、構造解析の際に、ソースコード全体の行数や、空白の行数などを参考情報として集計するようにしている。図4の2行目(#で始まる行)の左から「7」がコメント行数であり、「1」が空白行数であり、「22」が全体行数である。このような参考情報を判定結果と合わせて出力すればユーザにとって有益な情報となるだろう。後は、抽出した制御文、メソッド名であるステートメントのシーケンスが、上記各検索条件パターンと一致するかどうかを判定すればよいのである。
なお、その他の一致判定方法としては、例えば、検査対象のソースコードのステートメントを1行ずつ読み込んでいき、S1からSNまで順序、階層を含めて、検索条件のステートメントに一致するか否かを1行ずつパターンマッチングすることによりチェックする方法が挙げられる。また、正規表現などを利用して、抽出したシーケンス全体について、S1→S2→S3→…→SNのパターンに適合するか否かを一括してチェックする方法が挙げられる。このように本実施形態には、周知の様々なマッチングのアルゴリズムを使ってもよいものである。
最後に、本実施形態は、判定結果出力手段によって、上記ソースコード一致判定手段による判定結果を出力する。この判定結果出力手段には、ディスプレイへの表示や、プリンタへの印刷指示、記憶装置上へのファイル出力、ネットワーク上の他のコンピュータへの情報送信など、コンピュータによるデバイスへの情報出力手段すべてを含んでよいものとする。なお、このような出力手段が、組み込み関数の使用や、プリンタドライバへの指令などによって、容易に実現できることは言うまでもない。なお、一致の態様に応じて判定結果の出力内容を変更して良いことは前述の通りである。
本実施形態の機能的構成に関する説明は以上で終了とする。ただし、上記説明においては本発明の実施に必要な機能的構成を説明したものであり、本構成に当業者にとって当然の機能の追加、改良を行ってよいことは当然である。
<効果>
主に以上のような構成をとる本件発明によって、指定の条件に類似のソースコードを高速、高精度で検索することができるようになり、散在する類似のソースコードの修正を漏れなく正確に行うことができる。
<<実施形態2>>
<概要>
本実施形態は、実施形態1の構成に加え、ソースコード中の記載又はソースコード記載個所の指定を受け付けることにより、当該ソースコードを構成する制御文、メソッド名であるステートメントのシーケンスを自動的に解析し、検索条件とする検索条件解析手段を有するソースコード検査装置に係るものである。
<機能的構成>
本実施形態は、まず、ソースコード中の記載又はソースコード記載個所の指定を受け付ける。例えば、本発明を統合開発環境ソフトウェアなどに組み込む場合であれば、開発中ソースコードの特定領域をマウスで指定させるような機能を追加してもよいし、テキストデータをコピー&ペースト機能で張り付けさせるようにしてもよい。もちろん、プログラムの引数としてソースコードファイルのパスを渡してもよい。
ソースコードを受け付けた後は、検索条件解析手段により、受け付けたソースコードの構造解析を行う。なお、ここで構造解析とは、実施形態1で記載した通り、ソースコードを構成する制御文、メソッド名であるステートメントのシーケンスを抽出することを言う。前述したソースコード一致手段における、検査対象の構造抽出処理と同一のアルゴリズムにすることができるため、処理プログラムを共通化してもよいだろう。
後は、解析結果である「制御文、メソッド名であるステートメントのシーケンス」を検索条件として、実施形態1と同様の処理を行うものである。
<効果>
主に以上のような構成をとる本実施形態によって、ユーザはソースコード中の記載を指定するだけで、類似のソースコードを検索することができ極めて便利である。また、手動で検索条件を指定する場合よりも、指定すべき条件の誤り、見落としが少なく正確なソースコードの検査が可能となる。
<<実施形態3>>
<概要>
本実施形態は、実施形態1及び2の構成に加え、検査対象ごとに、検索条件に完全に一致するソースコード中の記載の数、及び/又は部分的に一致するソースコード中の記載の数を計測する一致数計測手段を有するソースコード検査装置に係るものである。
<機能的構成>
本実施形態においては、ソースコード一致判定手段と一致数計測手段が連携することによって、完全に又は部分的に一致するソースコード中の記載の数を計測する。すなわち、ソースコード一致判定手段は、検査対象ソースコードを構造解析し、受け付けた検索条件に完全一致又は部分一致するソースコードをチェックするが、この際に、完全一致又は部分一致する記載の存在を確認したら、一致数計測手段によって完全一致数又は部分一致数をカウントアップするのである。なお、一致数計測手段は、単純に完全一致と部分一致の数をカウントする構成としてもよいが、部分一致については、部分一致パターンごとにカウントする構成とし、部分一致パターンごとに判定結果を出力するような構成とした方が、よりユーザにとって有益であろう。
最後に、本実施形態は、一致数計測手段の計測結果を、判定結果出力手段によってディスプレイや記憶装置上のファイルなどに出力する。
<効果>
主に以上のような構成をとる本実施形態によって、ユーザは検索条件に完全に又は部分的に一致するソースコード中の記載の数を知ることができ、ソースコードの類似の度合いを推定することができる。これにより、検索条件に完全に又は部分的に一致するソースコードが大量に存在する場合でも、類似度の高いソースコードから優先してチェックすることができるようになる。
<<実施形態4>>
<概要>
本実施形態は、実施形態1乃至3の構成に加え、検索条件に部分的に一致するソースコード中の記載を発見した場合に、当該部分的に一致するソースコード中の記載を構成するシーケンスが、検索条件であるステートメントを構成するシーケンスに対して一致する割合を計測する、一致割合計測手段を有するソースコード検査装置に係る。
<機能的構成>
本実施形態においては、ソースコード一致判定手段と一致割合計測手段が連携することによって、検索条件に部分的に一致するソースコード中の記載が存在する場合において、その一致する割合を計測する。すなわち、ソースコード一致判定手段は、例えば「*→S2→S3」、「S1→*→S3」、「S1→S2→*」といった部分一致パターンに一致する記載の存在をチェックしていくが、これらのパターンに一致する場合であれば、この「*」以外の割合(すなわち上記パターンであれば、受け付けた検索条件のステートメントが3つで、*が1であるから、3分の2)を計算すればよいのである。
なお、一致割合計測手段は、単純に一致するステートメントの数によって、割合を計算する構成としてもよいし、一致するステートメントの出現頻度ごとに重みづけをする構成としてもよい。また、一致割合に合わせて一致の内訳、つまり、具体的にどの部分に一致したのかを参考情報として合わせて取得するようにしてもよい。
最後に、本実施形態は、一致割合計測手段の計測結果を、判定結果出力手段によってディスプレイや記憶装置上のファイルなどに出力する。
<効果>
主に以上のような構成をとる本実施形態によって、ユーザは検索条件に部分的に一致するソースコードが存在する場合に、その類似の度合いを推定することができる。これにより、部分的に一致するソースコード中の記載を有するソースコードが大量に存在する場合でも、類似度の高いソースコードから優先してチェックすることができるようになる。
<<実施形態5>>
<概要>
本実施形態は、実施形態1乃至4の構成に加え、検索条件に完全に一致するソースコード中の記載の数、検索条件に部分的に一致するソースコード中の記載の数、及び検索条件に部分的に一致する場合におけるその一致する割合、の少なくともいずれかを用いて、検索条件に対するソースコードの類似度を算出する類似度算出手段を有するソースコード検査装置に係る。
<機能的構成>
本実施形態においては、ソースコード一致判定後、類似度算出手段によって類似度を計算し出力する。図9は各検査対象の類似度を表として出力した結果の一例である。以下、当該表を用いて本実施形態について説明する。なお、補足すると、図9は、検索条件として、「IF文」の次に「addParameter」なる「メソッド」が続く、というステートメントであるシーケンスを指定している。また、検査対象として、あるフレームワークを構成する各メソッドのソースコードを指定している。
左から1列目「No」には、検査対象の通し番号が記載されている。また、2列目「検査対象ソースコード」には、検査対象となったソースコードの識別名が記載されている。これが検査対象の基本情報であることは言うまでもない。なお、注意点として、この2列目「検査対象ソースコード」には、「メソッド名」が記載されているが、これは検索条件として指定された「メソッド名」ではなく、検査対象とした上記フレームワークを構成する各メソッドのソースコードを示すものである。
そして、3列目に類似度算出手段によって算出された「類似度」が記載されている。本例ではこの類似度の計算式は、「類似度 = 完全一致数/(完全一致数+部分一致数)」となっている。なお、この計算式は、完全一致のソースコード中の記載のみからソースコードが構成される方が、余計な記載がなく、より純粋に類似している、との考えに基づいたものであるが、この計算式にさまざまに改変を加えてよいことは当然である。例えば部分一致割合を考慮するために、部分一致の割合(一致割合50%だったら0.5)を分子に加算するなどの式を追加しても良いし、検査対象のソースコード行数が長いほど類似度が下がるように、最後にソースコード行数によって割算するなどの式を追加してもよい。複数の計算式を用意しておいてユーザに最も好みに合う計算式を選択させるようにしてもよいし、ユーザ自身によって計算式をある程度自由にカスタマイズできるような機能を組み込んでもよいだろう。
さらに4列目には「完全一致数」が、5列目にはそれぞれ、IF文及び「addParameter」メソッド単体に対する部分一致数が記載されている。6列目には、検査対象のソースコード行数が記載されている。これらはいずれも類似度の参考情報として記載されているものである。
<効果>
主に以上のような構成をとる本実施形態によって、ソースコードの類似度を定量的に評価できるようになる。これにより正確に修正優先度の高いソースコードを把握することができる。
最後に、実施形態1乃至5のソースコード検査装置のハードウェア及びソフトウェア構成についてその一例を示す。なお、これは実施形態1乃至5のソースコード検査装置を、いかにプログラムによって動作させるかという観点から説明するものでもある。
図10がその一例の概要図である。すなわち、実施形態1乃至5のソースコード検査装置は主に、CPU、RAM(一時メモリ)、HDD及びUSBポートやCOMポート、LANポートなどの入出力インターフェースから構成される。ソフトウェアは、RAM上に展開された各プログラムによって構成される。なお、このプログラム構成は役割ごとにプログラムを分けているが、これが説明のための便宜的な構成であることは言うまでもない。実際には、一つのプログラムで実行してもよいし、複数のプログラムを連携させて実行してもよい。共通する処理は同一のプログラムによって行うようにしてもよいし、一部処理はOSのコンポーネント等を用いてもよい。具体的なプログラム構成は実施者が適宜定めればよい設計事項に過ぎない。
各プログラムの機能を簡単に説明すると、まず、「検索条件受付プログラム」は、入出力インターフェースを通して送信されてくる検索条件、または「検索条件解析プログラム」によって解析された検索条件を受け付ける。次に、「検査対象指定受付プログラム」は入出力インターフェースを通して送信されてくる検査対象の指定を受け付ける。
次に、「ソースコード一致判定プログラム」は、上記受け付けた検査対象ごとに、上記受け付けた「検索条件」に完全に又は部分的に一致するか否かを判定する。この際には「一致数計測プログラム」、「一致割合計測プログラム」又は「類似度算出プログラム」と連携し、検索条件に対するソースコード中の記載の完全一致数、部分一致数、部分一致における一致割合、類似度などを同時に計算する構成としてもよい。
最後に「判定結果出力プログラム」によって、判定結果を出力する。この判定結果には、検索条件に一致するソースコード中の記載があるか否かについての情報に加え、ソースコードの完全一致数及び部分一致数、部分一致における一致割合、計算された類似度、その他各種参考情報を含めてよいことは当然である。
以上のプログラム構成が本発明の一例にすぎないことは言うまでもない。実際には各プログラムを統合した一つのプログラムを用いてもよいし、より細分化されたプログラムを組み合わせて用いてもよいことは当然である。

Claims (7)

  1. 制御文、メソッド名であるステートメントのシーケンスを検索条件として受け付ける検索条件受付手段と、
    ソースコードを含む検査対象の指定を受け付ける検査対象指定受付手段と、
    指定された検査対象ごとに、指定された検索条件に完全に又は部分的に一致するソースコード中の記載が存在するかを判定するソースコード一致判定手段と、
    当該検査対象ごとに、当該ソースコード一致判定手段による判定結果を出力する判定結果出力手段と、
    を有するソースコード検査装置。
  2. ソースコード中の記載又はソースコード記載個所の指定を受け付けることにより、当該ソースコードを構成する制御文、メソッド名であるステートメントのシーケンスを自動的に解析し、検索条件とする検索条件解析手段を、検索条件受付手段の代わりに有する請求項1に記載のソースコード検査装置。
  3. 検査対象ごとに、検索条件に完全に一致するソースコード中の記載の数、及び/又は部分的に一致するソースコード中の記載の数を計測する一致数計測手段を有する請求項1乃至2に記載のソースコード検査装置。
  4. 検索条件に部分的に一致するソースコード中の記載を発見した場合に、当該部分的に一致するソースコード中の記載を構成するステートメントが、検索条件であるシーケンスを構成するステートメントに対して一致する割合を計測する、一致割合計測手段を有する請求項1乃至3に記載のソースコード検査装置。
  5. 検査対象ごとに、検索条件に完全に一致するソースコード中の記載の数、検索条件に部分的に一致するソースコード中の記載の数、及び検索条件に部分的に一致するソースコード中の記載が存在する場合における、当該部分的に一致するソースコード中の記載を構成するステートメントが、検索条件であるシーケンスを構成するステートメントに対して一致する割合、の少なくともいずれかを用いて、検索条件に対するソースコードの類似度を算出する類似度算出手段を有する請求項1乃至4に記載のソースコード検査装置。
  6. 制御文、メソッド名であるステートメントのシーケンスを検索条件として受け付ける検索条件受付ステップと、
    ソースコードを含む検査対象の指定を受け付ける検査対象指定受付ステップと、
    指定された検査対象ごとに、指定された検索条件に完全に又は部分的に一致するソースコード中の記載が存在するかを判定するソースコード一致判定ステップと、
    当該検査対象ごとに、当該ソースコード一致判定手段による判定結果を出力する判定結果出力ステップと、
    とからなるソースコード検査プログラム。
  7. 請求項6に記載のプログラムを記録した記録媒体。
JP2013020836A 2013-02-05 2013-02-05 ソースコード検査装置 Expired - Fee Related JP6183636B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2013020836A JP6183636B2 (ja) 2013-02-05 2013-02-05 ソースコード検査装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013020836A JP6183636B2 (ja) 2013-02-05 2013-02-05 ソースコード検査装置

Publications (2)

Publication Number Publication Date
JP2014153777A true JP2014153777A (ja) 2014-08-25
JP6183636B2 JP6183636B2 (ja) 2017-08-23

Family

ID=51575632

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013020836A Expired - Fee Related JP6183636B2 (ja) 2013-02-05 2013-02-05 ソースコード検査装置

Country Status (1)

Country Link
JP (1) JP6183636B2 (ja)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110018828A (zh) * 2019-03-11 2019-07-16 深圳市元征科技股份有限公司 源代码检查方法、装置及终端设备
JP2019125062A (ja) * 2018-01-12 2019-07-25 カシオ計算機株式会社 プログラミング支援装置、プログラミング支援方法、およびプログラム
JP2019197308A (ja) * 2018-05-08 2019-11-14 富士通株式会社 ソースコード変換プログラムおよびソースコード変換方法
CN112612516A (zh) * 2020-12-30 2021-04-06 瑞庭网络技术(上海)有限公司 一种代码处理方法及装置
CN116720196A (zh) * 2023-08-03 2023-09-08 北京比瓴科技有限公司 一种代码同源性检测方法及系统

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006018693A (ja) * 2004-07-02 2006-01-19 Fujitsu Ltd 類似ソースコード抽出プログラム、類似ソースコード抽出装置および類似ソースコード抽出方法
JP2009146280A (ja) * 2007-12-17 2009-07-02 Mitsubishi Electric Corp レガシーマイグレーション支援システム
JP2012164211A (ja) * 2011-02-08 2012-08-30 Hitachi Ltd ソフトウェアの類似性評価方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006018693A (ja) * 2004-07-02 2006-01-19 Fujitsu Ltd 類似ソースコード抽出プログラム、類似ソースコード抽出装置および類似ソースコード抽出方法
JP2009146280A (ja) * 2007-12-17 2009-07-02 Mitsubishi Electric Corp レガシーマイグレーション支援システム
JP2012164211A (ja) * 2011-02-08 2012-08-30 Hitachi Ltd ソフトウェアの類似性評価方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
三宅達也、石尾 隆、谷口考治、井上克郎: "メソッド呼び出しパターンとして現れる横断的関心事の検出", 電子情報通信学会技術研究報告, vol. 107, no. 99, JPN6016041378, 14 June 2007 (2007-06-14), JP, pages 1 - 6, ISSN: 0003428288 *
河合茂樹、山本晋一郎、阿草清滋: "既存プログラムからの規範パターン獲得とそれに基づくコーディングチェッカ", レクチャーノート/ソフトウェア学19:ソフトウェア工学の基礎IV, vol. 初版, JPN6016041380, 20 December 1997 (1997-12-20), JP, pages 99 - 106, ISSN: 0003578351 *
関本理佳、海尻賢二: "プログラムパターンを利用したプログラミングスタイルの診断システム", 電子情報通信学会技術研究報告, vol. 98, no. 636, JPN6016041379, 4 March 1999 (1999-03-04), JP, pages 37 - 44, ISSN: 0003578350 *

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2019125062A (ja) * 2018-01-12 2019-07-25 カシオ計算機株式会社 プログラミング支援装置、プログラミング支援方法、およびプログラム
JP7020127B2 (ja) 2018-01-12 2022-02-16 カシオ計算機株式会社 プログラミング支援装置、プログラミング支援方法、およびプログラム
JP2019197308A (ja) * 2018-05-08 2019-11-14 富士通株式会社 ソースコード変換プログラムおよびソースコード変換方法
JP7040272B2 (ja) 2018-05-08 2022-03-23 富士通株式会社 ソースコード変換プログラムおよびソースコード変換方法
CN110018828A (zh) * 2019-03-11 2019-07-16 深圳市元征科技股份有限公司 源代码检查方法、装置及终端设备
CN110018828B (zh) * 2019-03-11 2023-02-28 深圳市元征科技股份有限公司 源代码检查方法、装置及终端设备
CN112612516A (zh) * 2020-12-30 2021-04-06 瑞庭网络技术(上海)有限公司 一种代码处理方法及装置
CN112612516B (zh) * 2020-12-30 2024-05-03 瑞庭网络技术(上海)有限公司 一种代码处理方法及装置
CN116720196A (zh) * 2023-08-03 2023-09-08 北京比瓴科技有限公司 一种代码同源性检测方法及系统
CN116720196B (zh) * 2023-08-03 2023-11-07 北京比瓴科技有限公司 一种代码同源性检测方法及系统

Also Published As

Publication number Publication date
JP6183636B2 (ja) 2017-08-23

Similar Documents

Publication Publication Date Title
US10089296B2 (en) System and method for sentiment lexicon expansion
US10789429B2 (en) Visualizing comment sentiment
US9043759B1 (en) System and method for generating software unit tests simultaneously with API documentation
JP6183636B2 (ja) ソースコード検査装置
US9098626B2 (en) Method and system for log file processing and generating a graphical user interface based thereon
JP2015043198A (ja) 解析システム、解析方法および解析プログラム
CN111090641A (zh) 数据处理方法及装置、电子设备、存储介质
JP6440895B2 (ja) ソフトウェア分析装置及びソフトウェア分析方法
JP2003044275A (ja) 変更危険度測定システム、変更危険度測定方法及び変更危険度測定プログラム
US20190272158A1 (en) Program code generation apparatus
US8996357B2 (en) Method for generating diagrams, and information processing apparatus for same
JP2007140861A (ja) 情報処理システム、情報処理方法、およびプログラム
US20130185698A1 (en) Simplifying analysis of software code used in software systems
US20150081273A1 (en) Machine translation apparatus and method
CN103049504A (zh) 基于源代码查询的半自动插桩方法
US10755033B1 (en) Digital content editing and publication tools
CN110618926A (zh) 源代码分析方法和源代码分析装置
CN117010345A (zh) 一种函数文档的生成方法、装置、设备及存储介质
JP2009230420A (ja) ソースコード品質管理装置
Carvalho et al. DMOSS: Open source software documentation assessment
US20160292067A1 (en) System and method for keyword based testing of custom components
CN107153564B (zh) 一种词法解析工具
Milovanović Python data visualization cookbook
CN109933799A (zh) 语句拼接方法以及装置
JP2016085681A (ja) 特許書類品質検査装置、特許書類品質検査方法、およびプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20151214

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20160921

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20161026

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20161222

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170525

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170602

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170712

R150 Certificate of patent or registration of utility model

Ref document number: 6183636

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees