(57)【要約】【課題】類似のソースコードを、高速かつ高精度に検索することができるソースコード検査装置を提案する。【解決手段】制御文、メソッド名であるステートメントのシーケンスを検索条件として受け付け、当該検索条件に完全に又は部分的に一致するソースコード中の記載を検索することにより、類似のソースコードを高速、高精度で検索することができるようになる。【選択図】図１
2014153777.tif 000002
【特許請求の範囲】
【請求項１】
制御文、メソッド名であるステートメントのシーケンスを検索条件として受け付ける検索条件受付手段と、
ソースコードを含む検査対象の指定を受け付ける検査対象指定受付手段と、
指定された検査対象ごとに、指定された検索条件に完全に又は部分的に一致するソースコード中の記載が存在するかを判定するソースコード一致判定手段と、
当該検査対象ごとに、当該ソースコード一致判定手段による判定結果を出力する判定結果出力手段と、
を有するソースコード検査装置。
【請求項２】
ソースコード中の記載又はソースコード記載個所の指定を受け付けることにより、当該ソースコードを構成する制御文、メソッド名であるステートメントのシーケンスを自動的に解析し、検索条件とする検索条件解析手段を、検索条件受付手段の代わりに有する請求項１に記載のソースコード検査装置。
【請求項３】
検査対象ごとに、検索条件に完全に一致するソースコード中の記載の数、及び／又は部分的に一致するソースコード中の記載の数を計測する一致数計測手段を有する請求項１乃至２に記載のソースコード検査装置。
【請求項４】
検索条件に部分的に一致するソースコード中の記載を発見した場合に、当該部分的に一致するソースコード中の記載を構成するステートメントが、検索条件であるシーケンスを構成するステートメントに対して一致する割合を計測する、一致割合計測手段を有する請求項１乃至３に記載のソースコード検査装置。
【請求項５】
検査対象ごとに、検索条件に完全に一致するソースコード中の記載の数、検索条件に部分的に一致するソースコード中の記載の数、及び検索条件に部分的に一致するソースコード中の記載が存在する場合における、当該部分的に一致するソースコード中の記載を構成するステートメントが、検索条件であるシーケンスを構成するステートメントに対して一致する割合、の少なくともいずれかを用いて、検索条件に対するソースコードの類似度を算出する類似度算出手段を有する請求項１乃至４に記載のソースコード検査装置。
【請求項６】
制御文、メソッド名であるステートメントのシーケンスを検索条件として受け付ける検索条件受付ステップと、
ソースコードを含む検査対象の指定を受け付ける検査対象指定受付ステップと、
指定された検査対象ごとに、指定された検索条件に完全に又は部分的に一致するソースコード中の記載が存在するかを判定するソースコード一致判定ステップと、
当該検査対象ごとに、当該ソースコード一致判定手段による判定結果を出力する判定結果出力ステップと、
とからなるソースコード検査プログラム。
【請求項７】
請求項６に記載のプログラムを記録した記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はソースコード検査方法に関する。
【背景技術】
【０００２】
高品質なソフトウェアを開発する基本は、ソースコードを正確に把握することであるが、実用的なシステムではソースコードが数万行から数十万行に及ぶことから、十分には行われていないのが実状である。特に近年では、ソースコードの長大化、複雑化が進み、同一のアルゴリズムを実行する類似のソースコードがいたるところに散在し、把握しきれなくなっている場合も多い。さらには、本来ならば一カ所に記載されるべき全く同じソースコードが、複数個所に重複記載されたまま放置されていることすら珍しくない。このような状況では、プログラムの機能追加や不具合修正を実施しようとしても、修正すべきソースコードの範囲を正確に特定することができずに修正漏れが多発し、品質向上・品質管理に要するコストが割高となっていた。
【０００３】
この様な問題に対応するために、散在する同一・類似のソースコードの修正を漏れなく行うための補助手段として、類似のソースコードを検索するソースコード検査方法が、従来から提案されている。
【０００４】
もっとも代表的な検査方法としては、テキスト比較による検査方法が挙げられる。この方法は、比較対象となるソースコードの構成要素を、単純にテキスト（文字列）として比較する。この方法には、変数名の書き換えなどの影響を受けやすい、と言う問題があったが、特開２００３−３０２３７号のように、文字列の概念的な類似性を考慮するなど、変数名の違いをある程度除去する方法が提案されている。
【０００５】
また、抽象構文木を利用する検査方法がある。この方法はまず、比較対象となるソースコードを構文解析することによって、プログラムの文法構造を示す「抽象構文木」を作成する。そして、この作成した「抽象構文木」どうしを比較することによって、比較対象が類似しているかを判断する。この方法には、プログラムの文法構造と言う観点から類似のソースコードを検索できるという特徴がある。
【０００６】
さらに、特徴ベクトルを利用する検査方法がある。この方法は、まずソースコードの特徴を幾つかのパターンに分類する。そして、各パターンを各次元、各パターンの計測回数を各次元のベクトル量とし、検査対象の特徴を多次元ベクトルの形式で表現して比較するのである。この方法には、多様な観点からなるパターンを多次元ベクトルと言う統一の形式で比較できるという特徴がある。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００３−３０２３７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかし、従来のソースコード検査方法には、いずれも大きな問題があった。まず、テキスト比較による検査方法は、仮に変数名の違いなどをある程度除去したとしても、結局、文字列同士を単純に比較しているに過ぎない。プログラムの構造を解析して比較するものではなく、プログラムが実行する処理の類似性、すなわちプログラムの意味的な類似性を比較することができないために、その精度はまったく不十分であった。
【０００９】
また、抽象構文木を利用する検査方法については、プログラム構造の類似性を比較することはできるものの、一般に比較演算に大きな時間が掛かり、近年の複雑化、長大化したソースコードの解析には不向きであった。
【００１０】
さらに、情報ベクトルを利用する検査方法については、高速にプログラム構造の類似性を比較できるものの、その精度が低いという問題があった。ソースコードは、命令文の記載順序が大きな意味を持つが、この方法によれば、パターンの出現量は計測できるものの、パターンの出現順序は無視されてしまうからである。この情報ベクトルを利用する検査方法は、比較演算時間の短時間化を目的としたものだったが、検索条件を抽象化しすぎたために、検索精度が低下してしまったのである。
【課題を解決するための手段】
【００１１】
以上のような課題を解決するために本出願では、制御文、メソッド名であるステートメントのシーケンスを検索条件として受け付ける検索条件受付手段と、ソースコードを含む検査対象の指定を受け付ける検査対象指定受付手段と、指定された検査対象ごとに、指定された検索条件に完全に又は部分的に一致するソースコード中の記載が存在するかを判定するソースコード一致判定手段と、当該検査対象ごとに、当該ソースコード一致判定手段による判定結果を出力する判定結果出力手段とを有するソースコード検査方法などを提案する。
【発明の効果】
【００１２】
主に以上のような構成をとる本件発明によって、指定の条件に類似のソースコードを高速、高精度で検索することができるようになり、散在する類似のソースコードの修正を漏れなく正確に行うことができる。
【図面の簡単な説明】
【００１３】
【図１】本実施形態１の概要図
【図２】受け付けた検索条件の一例
【図３】完全一致及び部分一致の説明図
【図４】ソースコードの構造分析結果例
【図５】本実施形態２の概要図
【図６】本実施形態３の概要図
【図７】本実施形態４の概要図
【図８】本実施形態５の概要図
【図９】本実施形態５の出力例
【図１０】ハードウェア・ソフトウェア構成例
【発明を実施するための形態】
【００１４】
以下、本発明の各実施形態について適宜図を用いて説明をする。なお、本発明はこれらの実施形態に何ら限定されるものではなく、その要旨を逸脱しない範囲において、様々な実施をすることが可能である。
<<実施形態１>>
<概要>
【００１５】
図１は、本実施形態のソースコード検査装置の概要を示す図である。この図にあるように、本実施形態は、検索条件受付手段、検査対象指定受付手段、ソースコード一致判定手段、及び判定結果出力手段によって構成される。
【００１６】
なお、以下各構成を説明するが、これらの構成が様々なハードウェア及びソフトウェアの組み合わせによって実現できることは当然である。例えば、ハードウェアは業務用サーバであってもよいし、通常のパソコンであってもよいし、スマートフォンであってもよいし、専用の携帯端末（ＰＤＡ）であってもよい。ソフトウェアの構成については、単一のプログラムによって構成されてもよいし、複数のプログラムによって構成されてもよい。本実施形態は、その要旨を逸脱しない範囲において、あらゆるハードウェア及びソフトウェアの組み合わせによって実現してよいものである（以降に列記する他の実施形態についても同様）。
<機能的構成>
【００１７】
本実施形態は、検索条件受付手段によって、制御文、メソッド名であるステートメントのシーケンスを検索条件として受け付ける。ここで、受け付ける検索条件を「制御文、メソッド名であるステートメントのシーケンス」としたことが、本発明の重要な特徴の一つである。よって、始めに、この検索条件について詳細に説明する。
【００１８】
まず「制御文」とは、プログラムの実行を制御するための文である。代表的には、処理の分岐を制御するためのＩＦ文や、ＳＷＩＴＣＨ文、処理の繰り返しを制御するためのＦＯＲ文や、ＷＨＩＬＥ文などがある。
次に「メソッド」とは、ソースコード中から呼び出すことができる、特定の処理を行う命令群である。代表的にはオブジェクト指向におけるオブジェクトへのデータ操作命令を指すが、オブジェクト指向以外の要素を含むプログラミング言語においては、ここに関数等を含めてよいことは当然である。
【００１９】
次に「ステートメント」とは、「制御文」や「メソッド」などの命令文であり、ここでは特に「式」以外の部分を指すものである。すなわち、一般にプログラムの処理内容は「メソッド」の実行結果を変数に代入する「式」として記述されるが、例えば、このような記述から「式」を除外した記述を指す。なお、本発明は、「式」を検索条件に含める構成を完全に除外するものではないが、本実施形態では高速な実行のためには「式」は検索条件に含めない構成としたものである。
最後に「シーケンス」とは、順番に並んでいるデータや手順のことである。すなわち、「ステートメントのシーケンス」とは、「制御文やメソッドである（式以外の）命令文の並び」のことである。なお、この「シーケンス」の情報には、プログラム構造の階層情報を含んでもよい。例えばＩＦ文の中にＦＯＲ文が出現する場合、ＩＦ文を順序１、ＦＯＲ文を順序２とする順序情報に加え、ＩＦ文を階層１、ＦＯＲ文を階層２とする、階層情報を含むものとしてもよい。
【００２０】
図２は検索条件の一例である。本例では、分かり易いように検索条件を表にして整理してある。この表では、第一列「Ｎｏ」が、記載順序（シーケンス）を示しており、第２列が当該記載順序に対応するステートメントを示している。また、２列目のステートメントにおいて、４行目、５行目が１段階字下げされ、６行目、７行目がさらに１段階字下げされているのは、ソースコードの階層構造を表したものである。すなわち、１行目から３行目までは、１行目のＩＦ文によりネストされる階層１であり、４行目、５行目は、４行目のＩＦ文によりネストされる階層２であり、６行目、７行目は６行目のＦＯＲ文によりネストされる階層３である。
【００２１】
注目すべき点は、上記検索条件に「式」を含まないことである。第２列に記載された検索条件の構成要素を見れば分かる通り、ＩＦ文やＦＯＲ文などの制御文においては、制御のための条件式が除外されており、「ａｄｄＰａｒａｍｅｔｅｒ」などのメソッドにおいては、引数が除外されている。この方法によれば、ソースコードの骨格のみを検索条件とすることにより、検索精度を落とさずに、検索速度を向上させることができる。
【００２２】
さらに、「式」を検索条件から除外する代わりに、ステートメントの順序や階層などを検索条件に含めることによって、結果的にプログラムの構造を比較することが可能となっている。ソースコードは、プログラムのフローを表す記載順序が、通常の文章よりも大きな意味を持っている。また、通常の文章と異なり、プログラムのフローを制御する制御文と、制御文にネストされる階層構造自体が大きな意味を持っている。制御文の記載順序と階層構造がプログラムの処理フローの大枠を決定し、メソッドが処理内容の大枠を決定するとも言える。すなわち、上記のようなソースコードの特性に注目し、「制御文、メソッド名であるステートメントのシーケンス」を検索条件とした点が、本発明の大きな特徴の一つなのである。
【００２３】
具体的な検索条件の受付手段については、様々な方法によって実装できる。例えば、プログラムの引数として、検索条件や検索条件の記載されたファイルパスを渡すようにしてもよいし、本発明を統合開発環境ソフトウェアなどに組み込む場合であれば、当該ソフトウェアに、検索条件の指定画面を追加してもよい。また、後ほど他の実施形態を説明する際に詳述するが、ソースコードファイルのファイルパスを指定することにより、ソースコードファイルに記載されたソースコードの構造を自動解析できるようにし、この解析結果を検索条件として使用する構成としてもよい。
【００２４】
次に本実施形態は、検査対象指定受付手段によって、ソースコードを含む検査対象の指定を受け付ける。ここで、ソースコードを含む検査対象とは、ソースコードの記載されたファイルや、ソースコードの記載されたファイルの特定領域、ソースコードの記載されたファイルが格納されたフォルダ、又はこれらを記録しているＵＳＢメモリやＣＤ−ＲＯＭなど、ＯＳなどの機能によって特定可能な記憶装置の全体または一部は、すべて含んでよいものとする。なお、このような検査対象指定受付手段が、様々な方法によって実装できるのは周知のとおりである。例えば、プログラムの引数としてファイルパスを渡してもよい。また、本発明を統合開発環境ソフトウェアなどに組み込む場合であれば、開発中ソースコードの特定領域をマウスで指定させるようにしてもよいし、開発中のプロジェクトに属するソースコードはすべて対象とするようにデフォルト設定しておいてもよい。もちろん、ＯＳに組み込まれたコンポーネントを用いて、ファイルやフォルダ、ドライブなどのパスを指定するようにしてもよい。
【００２５】
次に本実施形態は、ソースコード一致判定手段を実行する。ソースコード一致判定手段においては、指定された検査対象ごとに、指定された検索条件に完全に又は部分的に一致するソースコード中の記載が存在するかを判定する。
【００２６】
以下、本実施例における完全一致及び部分一致について説明する。ただし、検索条件として指定されたステートメントの数をＮとし、各ステートメントをＳ1からＳＮの符号で表わすものとする。また、Ｓ１の次にＳ２が現われる時、Ｓ１→Ｓ２と表すものとする。すなわち、受け付けた検索条件は、Ｓ１→Ｓ２→Ｓ３→…→ＳＮで表すことができるものとする。
【００２７】
図３は、受け付けた検索条件を構成するステートメントが３個の場合の例である。図３に示される通り、本実施例における「完全一致」とは、「Ｓ１→Ｓ２→Ｓ３」で表される条件、すなわち、受け付けた検索条件そのものを指す。対して、「部分一致」とは「Ｓ１→Ｓ２→Ｓ３」の一部が「＊」に置き換わった条件を指す。ここで、この記号「＊」は、いかなるステートメントにも適合すると言うことを意味している。つまり、「Ｓ１→＊→Ｓ３」であれば、一番目に発見されるステートメントはＳ１であり、最後に発見されるステートメントはＳ３である必要であるが、その間に発見されるステートメントはいかなるステートメントであってもよい、という条件を意味する。
【００２８】
本実施例では、受け付けた検索条件の一部を「＊」で置き換えることにより派生するすべての条件を「部分一致」の条件とする。すなわち、Ｓ１→Ｓ２→Ｓ３から条件を一つ外したパターンとして、「＊→Ｓ２→Ｓ３」、「Ｓ１→＊→Ｓ３」、「Ｓ１→Ｓ２→＊」の３パターンが想定可能である。また、条件を二つ外したパターンとして「＊→＊→Ｓ３」、「Ｓ１→＊→＊」、「＊→Ｓ２→＊」の３パターンが想定可能である。すべての条件を外したパターンはもはや検索条件とはならないので、想定されるパターンは合計６パターンとなる。
【００２９】
重要な点は、検索条件のステートメントの出現順序が逆になるようなパターンは、「部分一致」には含まない、と言う点である。あるいは、検索条件にその階層構造までを受け付ける場合であれば、検索条件のステートメントの階層関係が逆になるようなパターンは、「部分一致」には含まないと言う点である。前述の通り、ソースコードにおいては、プログラムのフローを表す記載順序や、制御文にネストされる階層構造が大きな意味を持っている。本実施例は、このソースコードの特性に注目し、受け付けた検索条件の出現順序や階層関係を崩さずに、「部分一致」の条件を作成する。これにより、各ステートメントのいずれかを含んでいればよい、と言うような単純なＯＲ条件による部分一致検索とは全く異なる結果を導き出すことができるのである。
【００３０】
なお、「＊→＊→Ｓ３」、「Ｓ１→＊→＊」、「＊→Ｓ２→＊」のように、検索条件を構成するステートメントが単一である場合は、実質的にステートメントの出現順序や階層関係が、検索条件として考慮されないことになる。この様な条件にのみ一致する検査対象については、出力する検査結果から省略してもよいし、単一のステートメントにのみ一致した旨を注記して出力するようにしてもよい。本実施例において、一致の態様に応じて判定結果の出力内容を変更して良いことは当然である。
【００３１】
上記各検索条件パターンと検査対象のソースコードとの具体的な一致判定の方法については、様々なアルゴリズムを用いてよい。しかし、もっとも好ましいのは、検査対象のソースコードの構造解析を行うことにより、ソースコードを構成する制御文、メソッド名であるステートメントのシーケンスを抽出し、この抽出されたシーケンスと上記各検索条件パターンが一致するか否かを判定する方法である。この方法によれば、ステートメントのシーケンス同士を比較するため比較演算に係る時間を大幅に削減できるからである。
【００３２】
ソースコードの構造解析方法の一例を挙げると、まず、「制御文」については、ＩＦ文やＦＯＲ文の表記ルールをパターンマッチングすることにより、ソースコードから抽出することが可能である。
次に、「メソッド名」については、既存のメソッド名の一覧データを用いてパターンマッチングしてもよいし、プログラム言語ごとのメソッド名の表記ルール、例えば、Ｊａｖａ（登録商標）であれば「Ｍａｔｈ．ａｂｓ（）」のように、クラスとメソッドの間にピリオドが、末尾に括弧が付く、などのルールに対してパターンマッチングしてもよい。なお、Ｊａｖａ（登録商標）などのオブジェクト指向言語では、上記のように「クラス名.メソッド名」によってメソッドを呼び出す場合の他、「変数名.メソッド名」によってメソッドを呼び出す場合もある。この様な場合は、変数名に対応するクラス名を検索し、「クラス名.メソッド名」という形式に書き換える。これにより、変数名の違いを取り除くものとする。
【００３３】
また、記載順序（シーケンス）については、読み込んだ順序をそのまま記載順序として良いことは言うまでもない。
さらに、階層情報を含めて構造解析する場合は、ＩＦ文やＷＨＩＬＥ文などの制御文は、その表記ルール上、｛｝等の記号で囲まれたソースコードが制御の対象であるのだから、｛｝等の内側にいくほど階層が深くなるものと考えて、階層情報を設定すればよい。
【００３４】
図４が実際に構造抽出を行った結果の一例である。なお、この図４においては、構造解析の際に、ソースコード全体の行数や、空白の行数などを参考情報として集計するようにしている。図４の２行目（＃で始まる行）の左から「７」がコメント行数であり、「１」が空白行数であり、「２２」が全体行数である。このような参考情報を判定結果と合わせて出力すればユーザにとって有益な情報となるだろう。後は、抽出した制御文、メソッド名であるステートメントのシーケンスが、上記各検索条件パターンと一致するかどうかを判定すればよいのである。
【００３５】
なお、その他の一致判定方法としては、例えば、検査対象のソースコードのステートメントを１行ずつ読み込んでいき、Ｓ１からＳＮまで順序、階層を含めて、検索条件のステートメントに一致するか否かを１行ずつパターンマッチングすることによりチェックする方法が挙げられる。また、正規表現などを利用して、抽出したシーケンス全体について、Ｓ１→Ｓ２→Ｓ３→…→ＳＮのパターンに適合するか否かを一括してチェックする方法が挙げられる。このように本実施形態には、周知の様々なマッチングのアルゴリズムを使ってもよいものである。
【００３６】
最後に、本実施形態は、判定結果出力手段によって、上記ソースコード一致判定手段による判定結果を出力する。この判定結果出力手段には、ディスプレイへの表示や、プリンタへの印刷指示、記憶装置上へのファイル出力、ネットワーク上の他のコンピュータへの情報送信など、コンピュータによるデバイスへの情報出力手段すべてを含んでよいものとする。なお、このような出力手段が、組み込み関数の使用や、プリンタドライバへの指令などによって、容易に実現できることは言うまでもない。なお、一致の態様に応じて判定結果の出力内容を変更して良いことは前述の通りである。
【００３７】
本実施形態の機能的構成に関する説明は以上で終了とする。ただし、上記説明においては本発明の実施に必要な機能的構成を説明したものであり、本構成に当業者にとって当然の機能の追加、改良を行ってよいことは当然である。
<効果>
【００３８】
主に以上のような構成をとる本件発明によって、指定の条件に類似のソースコードを高速、高精度で検索することができるようになり、散在する類似のソースコードの修正を漏れなく正確に行うことができる。
<<実施形態２>>
<概要>
【００３９】
本実施形態は、実施形態１の構成に加え、ソースコード中の記載又はソースコード記載個所の指定を受け付けることにより、当該ソースコードを構成する制御文、メソッド名であるステートメントのシーケンスを自動的に解析し、検索条件とする検索条件解析手段を有するソースコード検査装置に係るものである。
<機能的構成>
【００４０】
本実施形態は、まず、ソースコード中の記載又はソースコード記載個所の指定を受け付ける。例えば、本発明を統合開発環境ソフトウェアなどに組み込む場合であれば、開発中ソースコードの特定領域をマウスで指定させるような機能を追加してもよいし、テキストデータをコピー&ペースト機能で張り付けさせるようにしてもよい。もちろん、プログラムの引数としてソースコードファイルのパスを渡してもよい。
【００４１】
ソースコードを受け付けた後は、検索条件解析手段により、受け付けたソースコードの構造解析を行う。なお、ここで構造解析とは、実施形態１で記載した通り、ソースコードを構成する制御文、メソッド名であるステートメントのシーケンスを抽出することを言う。前述したソースコード一致手段における、検査対象の構造抽出処理と同一のアルゴリズムにすることができるため、処理プログラムを共通化してもよいだろう。
【００４２】
後は、解析結果である「制御文、メソッド名であるステートメントのシーケンス」を検索条件として、実施形態１と同様の処理を行うものである。
<効果>
【００４３】
主に以上のような構成をとる本実施形態によって、ユーザはソースコード中の記載を指定するだけで、類似のソースコードを検索することができ極めて便利である。また、手動で検索条件を指定する場合よりも、指定すべき条件の誤り、見落としが少なく正確なソースコードの検査が可能となる。
<<実施形態３>>
<概要>
【００４４】
本実施形態は、実施形態１及び２の構成に加え、検査対象ごとに、検索条件に完全に一致するソースコード中の記載の数、及び／又は部分的に一致するソースコード中の記載の数を計測する一致数計測手段を有するソースコード検査装置に係るものである。
<機能的構成>
【００４５】
本実施形態においては、ソースコード一致判定手段と一致数計測手段が連携することによって、完全に又は部分的に一致するソースコード中の記載の数を計測する。すなわち、ソースコード一致判定手段は、検査対象ソースコードを構造解析し、受け付けた検索条件に完全一致又は部分一致するソースコードをチェックするが、この際に、完全一致又は部分一致する記載の存在を確認したら、一致数計測手段によって完全一致数又は部分一致数をカウントアップするのである。なお、一致数計測手段は、単純に完全一致と部分一致の数をカウントする構成としてもよいが、部分一致については、部分一致パターンごとにカウントする構成とし、部分一致パターンごとに判定結果を出力するような構成とした方が、よりユーザにとって有益であろう。
【００４６】
最後に、本実施形態は、一致数計測手段の計測結果を、判定結果出力手段によってディスプレイや記憶装置上のファイルなどに出力する。
<効果>
【００４７】
主に以上のような構成をとる本実施形態によって、ユーザは検索条件に完全に又は部分的に一致するソースコード中の記載の数を知ることができ、ソースコードの類似の度合いを推定することができる。これにより、検索条件に完全に又は部分的に一致するソースコードが大量に存在する場合でも、類似度の高いソースコードから優先してチェックすることができるようになる。
<<実施形態４>>
<概要>
【００４８】
本実施形態は、実施形態１乃至３の構成に加え、検索条件に部分的に一致するソースコード中の記載を発見した場合に、当該部分的に一致するソースコード中の記載を構成するシーケンスが、検索条件であるステートメントを構成するシーケンスに対して一致する割合を計測する、一致割合計測手段を有するソースコード検査装置に係る。
<機能的構成>
【００４９】
本実施形態においては、ソースコード一致判定手段と一致割合計測手段が連携することによって、検索条件に部分的に一致するソースコード中の記載が存在する場合において、その一致する割合を計測する。すなわち、ソースコード一致判定手段は、例えば「＊→Ｓ２→Ｓ３」、「Ｓ１→＊→Ｓ３」、「Ｓ１→Ｓ２→＊」といった部分一致パターンに一致する記載の存在をチェックしていくが、これらのパターンに一致する場合であれば、この「＊」以外の割合（すなわち上記パターンであれば、受け付けた検索条件のステートメントが３つで、＊が１であるから、３分の２）を計算すればよいのである。
【００５０】
なお、一致割合計測手段は、単純に一致するステートメントの数によって、割合を計算する構成としてもよいし、一致するステートメントの出現頻度ごとに重みづけをする構成としてもよい。また、一致割合に合わせて一致の内訳、つまり、具体的にどの部分に一致したのかを参考情報として合わせて取得するようにしてもよい。
【００５１】
最後に、本実施形態は、一致割合計測手段の計測結果を、判定結果出力手段によってディスプレイや記憶装置上のファイルなどに出力する。
<効果>
【００５２】
主に以上のような構成をとる本実施形態によって、ユーザは検索条件に部分的に一致するソースコードが存在する場合に、その類似の度合いを推定することができる。これにより、部分的に一致するソースコード中の記載を有するソースコードが大量に存在する場合でも、類似度の高いソースコードから優先してチェックすることができるようになる。
<<実施形態５>>
<概要>
【００５３】
本実施形態は、実施形態１乃至４の構成に加え、検索条件に完全に一致するソースコード中の記載の数、検索条件に部分的に一致するソースコード中の記載の数、及び検索条件に部分的に一致する場合におけるその一致する割合、の少なくともいずれかを用いて、検索条件に対するソースコードの類似度を算出する類似度算出手段を有するソースコード検査装置に係る。
<機能的構成>
【００５４】
本実施形態においては、ソースコード一致判定後、類似度算出手段によって類似度を計算し出力する。図９は各検査対象の類似度を表として出力した結果の一例である。以下、当該表を用いて本実施形態について説明する。なお、補足すると、図９は、検索条件として、「ＩＦ文」の次に「ａｄｄＰａｒａｍｅｔｅｒ」なる「メソッド」が続く、というステートメントであるシーケンスを指定している。また、検査対象として、あるフレームワークを構成する各メソッドのソースコードを指定している。
【００５５】
左から１列目「Ｎｏ」には、検査対象の通し番号が記載されている。また、２列目「検査対象ソースコード」には、検査対象となったソースコードの識別名が記載されている。これが検査対象の基本情報であることは言うまでもない。なお、注意点として、この２列目「検査対象ソースコード」には、「メソッド名」が記載されているが、これは検索条件として指定された「メソッド名」ではなく、検査対象とした上記フレームワークを構成する各メソッドのソースコードを示すものである。
【００５６】
そして、３列目に類似度算出手段によって算出された「類似度」が記載されている。本例ではこの類似度の計算式は、「類似度  ＝  完全一致数／（完全一致数＋部分一致数）」となっている。なお、この計算式は、完全一致のソースコード中の記載のみからソースコードが構成される方が、余計な記載がなく、より純粋に類似している、との考えに基づいたものであるが、この計算式にさまざまに改変を加えてよいことは当然である。例えば部分一致割合を考慮するために、部分一致の割合（一致割合５０％だったら０．５）を分子に加算するなどの式を追加しても良いし、検査対象のソースコード行数が長いほど類似度が下がるように、最後にソースコード行数によって割算するなどの式を追加してもよい。複数の計算式を用意しておいてユーザに最も好みに合う計算式を選択させるようにしてもよいし、ユーザ自身によって計算式をある程度自由にカスタマイズできるような機能を組み込んでもよいだろう。
【００５７】
さらに４列目には「完全一致数」が、５列目にはそれぞれ、ＩＦ文及び「ａｄｄＰａｒａｍｅｔｅｒ」メソッド単体に対する部分一致数が記載されている。６列目には、検査対象のソースコード行数が記載されている。これらはいずれも類似度の参考情報として記載されているものである。
<効果>
【００５８】
主に以上のような構成をとる本実施形態によって、ソースコードの類似度を定量的に評価できるようになる。これにより正確に修正優先度の高いソースコードを把握することができる。
【００５９】
最後に、実施形態１乃至５のソースコード検査装置のハードウェア及びソフトウェア構成についてその一例を示す。なお、これは実施形態１乃至５のソースコード検査装置を、いかにプログラムによって動作させるかという観点から説明するものでもある。
【００６０】
図１０がその一例の概要図である。すなわち、実施形態１乃至５のソースコード検査装置は主に、ＣＰＵ、ＲＡＭ（一時メモリ）、ＨＤＤ及びＵＳＢポートやＣＯＭポート、ＬＡＮポートなどの入出力インターフェースから構成される。ソフトウェアは、ＲＡＭ上に展開された各プログラムによって構成される。なお、このプログラム構成は役割ごとにプログラムを分けているが、これが説明のための便宜的な構成であることは言うまでもない。実際には、一つのプログラムで実行してもよいし、複数のプログラムを連携させて実行してもよい。共通する処理は同一のプログラムによって行うようにしてもよいし、一部処理はＯＳのコンポーネント等を用いてもよい。具体的なプログラム構成は実施者が適宜定めればよい設計事項に過ぎない。
【００６１】
各プログラムの機能を簡単に説明すると、まず、「検索条件受付プログラム」は、入出力インターフェースを通して送信されてくる検索条件、または「検索条件解析プログラム」によって解析された検索条件を受け付ける。次に、「検査対象指定受付プログラム」は入出力インターフェースを通して送信されてくる検査対象の指定を受け付ける。
【００６２】
次に、「ソースコード一致判定プログラム」は、上記受け付けた検査対象ごとに、上記受け付けた「検索条件」に完全に又は部分的に一致するか否かを判定する。この際には「一致数計測プログラム」、「一致割合計測プログラム」又は「類似度算出プログラム」と連携し、検索条件に対するソースコード中の記載の完全一致数、部分一致数、部分一致における一致割合、類似度などを同時に計算する構成としてもよい。
【００６３】
最後に「判定結果出力プログラム」によって、判定結果を出力する。この判定結果には、検索条件に一致するソースコード中の記載があるか否かについての情報に加え、ソースコードの完全一致数及び部分一致数、部分一致における一致割合、計算された類似度、その他各種参考情報を含めてよいことは当然である。
【００６４】
以上のプログラム構成が本発明の一例にすぎないことは言うまでもない。実際には各プログラムを統合した一つのプログラムを用いてもよいし、より細分化されたプログラムを組み合わせて用いてもよいことは当然である。
【図１】
2014153777.tif 000003
【図２】
2014153777.tif 000004
【図３】
2014153777.tif 000005
【図４】
2014153777.tif 000006
【図５】
2014153777.tif 000007
【図６】
2014153777.tif 000008
【図７】
2014153777.tif 000009
【図８】
2014153777.tif 000010
【図９】
2014153777.tif 000011
【図１０】
2014153777.tif 000012