(57)【要約】【課題】  一部のソースコードを流用し、新規に開発したソースコードと組み合わせて静的解析を実行した場合、一律に警告メッセージが出力されていた。そのため、静的解析の利用者は、流用と新規開発に対する警告メッセージを区別して対処する必要があった。【解決手段】  静的解析の対象となるソースコードの流用部分の検索を行い、流用を検出した場合、ソースコードの流用部分の解析を実行しない。これにより、流用部分以外の新規に開発したソースコードの警告メッセージのみを出力することができ、不要な警告メッセージを抑止する。また、不要な解析自体を実行しないことで、静的解析に要する時間を短縮し、開発作業を効率化することができる。【選択図】  図１
2011113298.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアのソースコードを解析する解析システムにおいて、
ソースコード資産の管理を行うソースコード管理手段と、
内容が一致するソースコードを検索する流用ソースコード検索手段と、
ソースコード解析を実行するソースコード解析手段を備え、
解析対象ソースコードと内容の一致部分を持つソースコードを、前記ソースコード管理手段で管理されているソースコードから前記流用ソースコード検索手段が検索し、前記解析対象ソースコードの前記一致部分に対して、前記ソースコード解析手段によるソースコード解析を実行しないことを特徴とするソースコード解析システム。
【請求項２】
前記流用ソースコード検索手段で検索する前記一致部分は、ソースコードのファイル単位、もしくはソースコードの特定の処理を実行する命令単位で、前記解析対象ソースコードと一致することを特徴とする請求項１に記載のソースコード解析システム。
【請求項３】
前記流用ソースコード検索手段で検索する前記一致部分は、ソースコードの命令処理実行に関わる部分が全て一致することを特徴とする請求項１に記載のソースコード解析システム。
【請求項４】
前記流用ソースコード検索手段は、前記ソースコード管理手段の任意の属性情報が付加されたソースコードを対象に検索を行うことを特徴とする請求項１に記載のソースコード解析システム。
【請求項５】
前記属性情報とは、構成管理ツールに付加されるメタ情報であることを特徴とする請求項３に記載のソースコード解析システム。
【請求項６】
前記属性情報とは、ファイルシステムに付加されるメタ情報であることを特徴とする請求項３に記載のソースコード解析システム。
【請求項７】
前記ソースコード解析手段は、前記流用ソースコード検索手段で検索したソースコードに付加された前記属性情報により、前記解析対象ソースコードの前記一致部分に対して、前記ソースコード解析手段によるソースコード解析の実行を制御することを特徴とする請求項１に記載のソースコード解析システム。
【請求項８】
前記ソースコード解析手段は、前記流用ソースコード検索手段で検索したソースコードに付加された前記属性情報が、任意の属性情報に該当しない場合、前記解析対象ソースコードの前記一致部分に対して、前記ソースコード解析手段によるソースコード解析の実行を解析システム利用者が指定できることを特徴とする請求項７に記載のソースコード解析システム。
【請求項９】
ソフトウェアのソースコードを解析するためにコンピュータを、
ソースコード資産の管理を行うソースコード管理手段と、
内容が一致するソースコードを検索する流用ソースコード検索手段と、
ソースコード解析を実行するソースコード解析手段を備え、
解析対象ソースコードと内容の一致部分を持つソースコードを、前記ソースコード管理手段で管理されているソースコードから前記流用ソースコード検索手段が検索し、前記解析対象ソースコードの前記一致部分に対して、前記ソースコード解析手段によるソースコード解析を実行しないことを機能させるためのソースコード解析プログラム。
【請求項１０】
ソフトウェアのソースコードを解析するためにコンピュータを、
ソースコード資産の管理を行うソースコード管理手段と、
内容が一致するソースコードを検索する流用ソースコード検索手段と、
ソースコード解析を実行するソースコード解析手段を備え、
解析対象ソースコードと内容の一致部分を持つソースコードを、前記ソースコード管理手段で管理されているソースコードから前記流用ソースコード検索手段が検索し、前記解析対象ソースコードの前記一致部分に対して、前記ソースコード解析手段によるソースコード解析を実行しないことを機能させるためのソースコード解析プログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はソースコードの解析システムに関し、特にソースコードの流用を検出した場合に、ソースコードの流用部分の静的解析を実行しない解析システムに関する。
【背景技術】
【０００２】
ソフトウェアの開発規模は、増大の一途を辿っている。
【０００３】
ソフトウェアの規模増大に対処するために、以前に開発したソースコードの流用と、新規に開発したソースコードを組み合わせて、開発を進めることがある。また、ソースコード自体を、組織外や社外から調達して利用することもある。
【０００４】
一方、ソフトウェアの規模が大きくなるにつれて、その構成が複雑になり、不具合も発生しやすくなる。ソースコードの不具合を早期に発見する手段として、ソースコードを実行せずに構文的・意味的に解析し、不具合となる可能性のある記述の指摘を行う静的解析がある。
【０００５】
従来、ソースコードの静的解析を実行すると、ソースコード中の問題箇所や注意すべき箇所を指摘する大量の警告メッセージが出力されていた。そのため、静的解析の利用者は本当に必要な警告メッセージを判断するために、出力された結果の解析に多くの時間を割く必要があった。
【０００６】
また、一部のソースコードを流用し、新規に開発したソースコードと組み合わせた場合、流用と新規開発の区別無く、一律に警告メッセージが出力されていた。そのため、静的解析の利用者は、流用と新規開発に対する警告メッセージを区別して対処する必要があった。
【０００７】
上記問題を解決するため、静的解析で出力される警告メッセージを抑止する方法として、標準インクルードやコメントによりメッセージを抑止するものがある（例えば、特許文献１参照）。
【０００８】
また、ソースコードの変更前後の解析結果ファイルと差分情報に基づく警告文のみを抽出して、警告表示するものがある（例えば、特許文献２参照）。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開平１１−１３４１８７号公報
【特許文献２】特開２００４−１２６８６６号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら、上記従来技術の構成において、標準インクルードやコメントによる警告メッセージを抑止する方法は、ソースコード自体に変更を加える必要があり、細心の注意を要する。変更内容によっては、ソースコードの実行自体に影響を与える可能性があるためである。特に対象となる警告メッセージが大量にある場合は、個々のメッセージに対して判断するため手間がかかっていた。
【００１１】
また、ソースコードの変更前後の解析結果ファイルと差分情報に基づく警告文のみを抽出する方法は、同じファイルの異なるバージョン間や、流用元と流用先のファイルなど、比較対象をあらかじめ指定する必要がある。そのため、流用元のファイルを予め特定している必要があった。さらに、警告表示は指定した2つのファイルとその静的解析の結果、それぞれの差分から抽出している。そのため、比較対象のファイルそれぞれに対し、静的解析を実行する必要があった。
【００１２】
本発明では上記のような課題を解決するためになされたもので、静的解析の対象となるソースコードの流用部分の検索を行い、流用を検出した場合、ソースコードの流用部分の解析を実行しない。これにより、新規開発のソースコードによって生じた警告メッセージのみを出力する解析システム及びプログラム並びに記録媒体を提供する。
【００１３】
本発明により、ソースコード自体に変更を加えることなく、また比較対象となるファイルの指定を必要とせず、解析対象となるソースコードだけに静的解析を実行し、新規に開発したソースコードのみの結果を得ることができる。
【課題を解決するための手段】
【００１４】
本発明の解析システムは、ソフトウェアのソースコードを解析する解析システムにおいて、
ソースコード資産の管理を行うソースコード管理手段と、
内容が一致するソースコードを検索する流用ソースコード検索手段と、
ソースコード解析を実行するソースコード解析手段を備え、
解析対象ソースコードと内容の一致部分を持つソースコードを、前記ソースコード管理手段で管理されているソースコードから前記流用ソースコード検索手段が検索し、前記解析対象ソースコードの前記一致部分に対して、前記ソースコード解析手段によるソースコード解析を実行しないことを特徴とする。
【００１５】
前記流用ソースコード検索手段で検索する前記一致部分は、ソースコードのファイル単位、もしくはソースコードの特定の処理を実行する命令単位で、前記解析対象ソースコードと一致することを特徴とする。
【００１６】
前記流用ソースコード検索手段で検索する前記一致部分は、ソースコードの命令処理実行に関わる部分が全て一致することを特徴とする。
【００１７】
前記流用ソースコード検索手段は、前記ソースコード管理手段の任意の属性情報が付加されたソースコードを対象に検索を行うことを特徴とする。
【００１８】
前記属性情報とは、構成管理ツールに付加されるメタ情報であることを特徴とする。
【００１９】
前記属性情報とは、ファイルシステムに付加されるメタ情報であることを特徴とする。
【００２０】
前記ソースコード解析手段は、前記流用ソースコード検索手段で検索したソースコードに付加された前記属性情報により、前記解析対象ソースコードの前記一致部分に対して、前記ソースコード解析手段によるソースコード解析の実行を制御することを特徴とする。
【００２１】
前記ソースコード解析手段は、前記流用ソースコード検索手段で検索したソースコードに付加された前記属性情報が、任意の属性情報に該当しない場合、前記解析対象ソースコードの前記一致部分に対して、前記ソースコード解析手段によるソースコード解析の実行を解析システム利用者が指定できることを特徴とする。
【００２２】
ソフトウェアのソースコードを解析するためにコンピュータを、
ソースコード資産の管理を行うソースコード管理手段と、
内容が一致するソースコードを検索する流用ソースコード検索手段と、
ソースコード解析を実行するソースコード解析手段を備え、
解析対象ソースコードと内容の一致部分を持つソースコードを、前記ソースコード管理手段で管理されているソースコードから前記流用ソースコード検索手段が検索し、前記解析対象ソースコードの前記一致部分に対して、前記ソースコード解析手段によるソースコード解析を実行しないことを機能させるためのソースコード解析プログラムであることを特徴とする。
【００２３】
ソフトウェアのソースコードを解析するためにコンピュータを、
ソースコード資産の管理を行うソースコード管理手段と、
内容が一致するソースコードを検索する流用ソースコード検索手段と、
ソースコード解析を実行するソースコード解析手段を備え、
解析対象ソースコードと内容の一致部分を持つソースコードを、前記ソースコード管理手段で管理されているソースコードから前記流用ソースコード検索手段が検索し、前記解析対象ソースコードの前記一致部分に対して、前記ソースコード解析手段によるソースコード解析を実行しないことを機能させるためのソースコード解析プログラムを記録したコンピュータ読み取り可能な記録媒体であることを特徴とする。
【発明の効果】
【００２４】
本発明の解析システムによれば、静的解析の対象となるソースコードの流用部分の解析を実行しない。これにより、流用部分以外の新規に開発を行ったソースコードの警告メッセージのみを出力することができ、不要な警告メッセージを抑止することができる。
【００２５】
また、不要な解析自体を実行しないことで、静的解析に要する時間を短縮し、開発作業を効率化することができる。
【００２６】
さらに、流用元が特定されていないソースコードに対しても、静的解析の実行が可能である。システムが流用元となるソースコードを特定するため、ソースコード管理を容易にすることができ、過去に開発したファイルの流用率が上がる。
【図面の簡単な説明】
【００２７】
【図１】本発明における、解析システムの全体構成を示す図である。
【図２】本発明の実施例１における、静的解析実行フローを示す図である。
【図３】本発明の実施例１における、流用検出フローを示す図である。
【図４】本発明の実施例１における、流用候補ソースコード検索フローを示す図である。
【図５】本発明の実施例１における、解析処理実行フローを示す図である。
【図６】本発明の実施例２における、検索対象ソースコード入力フローを示す図である。
【図７】本発明の実施例３における、解析処理実行フローを示す図である。
【図８】本発明における、完全流用の関係にあるソースコードの組を説明するための図である。
【図９】本発明における、部分流用の関係にあるソースコードの組を説明するための図である。
【図１０】本発明における、解析システムのハードウェア構成を示す図である。
【発明を実施するための形態】
【００２８】
以下、図面を参照しながら本発明の好適な実施の形態を説明する。
【実施例１】
【００２９】
図１は、本発明の実施例１における解析システムの構成を示す図である。入出力部１０１は解析システム利用者からの入力を受け付ける、もしくは解析システム利用者に出力結果を表示する入出力部である。入出力部１０１を用いて、解析対象のソースコードや、属性情報、解析実行オプションが指定される。
【００３０】
制御部１０２は、入出力部１０１からの要求を受け付け、その要求に応じて流用ソースコード検索部１０３、静的解析部１０５を制御し、その結果を入出力部１０１に返すものである。
【００３１】
流用ソースコード検索部１０３は、制御部１０２から受け取ったソースコードの流用部分をソースコード管理部１０４で管理されているソースコードから検索し、その検索結果を制御部１０２に返すものである。ソースコードの流用部分とは、ソースコードのファイル単位、もしくはソースコード中の関数など特定の処理を実行する命令単位である。
【００３２】
ソースコード管理部１０４では、これまで開発したソースコードや、組織外や社外から調達したソースコードなど、各種ソフトウェア資産を管理する構成管理リポジトリである。また、ソースコードを識別するための属性情報を付加させる機能を有している。
【００３３】
静的解析部１０５では、ソースコードの静的解析を実行する。ソースコードの解析手法として、既存の任意の手法を用いることができる。ソースコードを実行せずに構文的・意味的に解析し、不具合となる可能性のある記述の指摘を行う。制御部１０２から指示されたソースコード部分の解析を行い、その結果を再度、制御部１０２に返すものである。
【００３４】
また、本発明の実施の形態として使用される情報処理装置のハードウェア構成の一例を、図１０を参照して説明する。
【００３５】
CPU１００１は、外部記憶装置１００４やデータベース１００６に格納されているソースコードを読み出し、解析対象ソースコードの流用検出処理、解析処理等を実行する。
【００３６】
RAM１００２は、演算に使用される各種データを一時的に記憶するための領域として使用される。
【００３７】
入出力装置１００３は、キーボード、マウス等からデータを入力する装置、及びモニタ等で出力結果を表示する装置である。
【００３８】
外部記憶装置１００４は、流用検出や解析処理とのプログラム及びソースコードの属性情報等のデータが格納される。
【００３９】
通信インタフェース１００５は、LAN、インターネット等のネットワークに接続するための装置である。ネットワークを介してデータベース１００６にアクセスし、ソースコードや属性情報等のデータを取得することが可能である。
【００４０】
データベース１００６は、構成管理リポジトリを備えておりソースコード資産を管理する。また、ソースコードを識別するための属性情報を付加させる機能を有している。
【００４１】
また、CPU１００１、RAM１００２、外部記憶装置１００４等は、バス１００７により接続されている。
【００４２】
ここで、本発明で使用する流用の定義を行う。流用とは、ソースコード中の空行やコメント部分などを除いた、命令処理実行に関わる部分が全て一致しているソースコードの関係と定義する。さらに、あるソースコードが他のソースコードと、ファイル単位で全て一致するものを完全流用と定義する。また、あるソースコードが他のソースコードと、関数など特定の処理を実行する命令単位で部分一致するものを部分流用と定義する。
【００４３】
図８と図９は、本発明における、完全流用の関係と部分流用の関係にあるソースコードの組を説明するための図である。
【００４４】
図８は、完全流用の関係にあるソースコードの組を示している。ソースコード８０１とソースコード８０２には、関数など特定の処理を実行する命令単位が複数存在する。ここで、複数の命令単位を含むファイル単位で、ソースコード中の空行やコメント部分などを除いた命令処理実行に関わる部分が全て一致しているとする。これらのソースコード組８０１と８０２は、完全流用関係にある。
【００４５】
また図９は、部分流用の関係にあるソースコードの組を示している。ソースコード９０１とソースコード９０２には、関数など特定の処理を実行する命令単位が複数存在する。ここで、ソースコードの命令単位で、ソースコード中の空行やコメント部分などを除いた命令処理実行に関わる部分が全て一致しているとする。命令単位の内容が一致しているならば、ソースコード上の位置は一致していなくてもよい。これらのソースコード組９０１と９０２は、部分流用関係にある。
【００４６】
次に、ソースコードの静的解析実行フローについて図２を用いて説明する。
【００４７】
まず、ステップ２０１で、解析システム利用者が指定した解析対象ソースコードを入力する。この際、解析対象ソースコードの入力は単数でも複数でも構わない。
【００４８】
次にステップ２０２で、流用の検索対象となるソースコードを入力する。本実施例では、ソースコード管理部１０４で管理されている全てのソースコードが対象になる。
【００４９】
そして、ステップ２０３で解析対象のソースコードに、検索対象のソースコードから流用の関係にあるソースコードがないか流用検索を行う。流用関係のソースコードが見つかった場合は、ソースコードの比較を行い、ソースコードが完全流用か、部分流用かを判定する。ステップ２０３内のフローの詳細については、図３の流用検出フローと、流用検出フローの内部処理である図４の流用候補検索フローで説明する。
【００５０】
その後、ステップ２０４で、解析対象ソースコードの解析処理を実行する。解析対象ソースコードに、先のステップ２０３で流用関係のソースコードが見つかった場合、その流用部分に対して解析を実行しない。流用関係のソースコードに対して、解析対象のソースコードが完全流用の場合は、そのファイルに対して解析を実行しない。一方、部分流用の場合は、流用部分の命令単位に対して解析を実行せず、流用部分以外にのみ解析を実行する。ステップ２０４内のフローの詳細については、図５の解析処理実行フローで説明する。
【００５１】
最後に、ステップ２０５で解析結果を、入出力部１０１に表示して終了する。解析結果には、警告メッセージの他に、ソースコードの流用部分と流用関係のソースコードの情報も表示する。流用部分の情報とは、流用検出フローで見つかった流用関係のソースコードのファイル名やソースコード管理部１０４での保管先アドレス、ファイルバージョン等の情報である。
【００５２】
次に、ソースコードの流用を検索する流用検出フローについて、図３を用いて説明する。本フローは、先に説明した図２の静的解析実行フローのステップ２０３にあたる。
【００５３】
流用検出フローでは、静的解析の対象となるソースコードに、関数など特定の処理を実行する命令単位で、他に一致する命令単位を持つソースコードがあるかを検索する。そして、その命令単位、もしくは複数の命令単位をまとめたファイル単位で流用関係のソースコードの検索を行う。
【００５４】
まず、ステップ３０１において、解析対象ソースコードから、プログラム命令処理実行に不要な文字を削除する。例えば、空行やコメント部分などである。
【００５５】
次にステップ３０２において、解析対象ソースコードに流用候補のソースコードの検索を行う。流用候補のソースコードは、解析対象ソースコードと類似したソースコード片を持つソースコードである。所定のソースコードから、類似のソースコード片を持つソースコードを検出するための手法は、従来いくつか提案されている。例えば、ソースコードをプログラミング言語の文法に基づいて字句解析を行い、トークン列に変換する。その後トークン列の変換を行い、パラメータ置換を行う。そして、パラメータ置換後のトークン列を比較し、トークン一致部分の検出を行う。最後に、検出したトークン一致部分に対する、ソースコード相当部分の抽出を行う。このソースコードが、解析対象ソースコードに対する、流用候補のソースコードになる。ステップ３０２内のフローの詳細については、図４の流用候補ソースコード検索フローで説明する。
【００５６】
次のステップ３０３で、解析対象ソースコードと、検索した流用候補ソースコードの差分比較を実行する。既存技術を用いて２つのソースコードファイルを比較し、ファイル間の行単位の差分を求める。例えば、既知の技術である発見アルゴリズムＬＣＳ（Ｌｏｎｇｅｓｔ  Ｃｏｍｍｏｎ  Ｓｕｂｓｅｑｕｅｎｃｅ）を利用して最長共通部分列を抽出し、一致している行と異なる行を抽出する方法を用いる。
【００５７】
ステップ３０４では、解析対象ソースコードと流用候補ソースコードが、ソースコードの命令単位で一致しているか判定を行う。一致している場合はステップ３０５、一致していない場合はステップ３０６へ進む。
【００５８】
ステップ３０５では、解析対象ソースコードと流用候補ソースコードが、ソースコードのファイル単位で一致しているか判定を行う。一致している場合はステップ３０７、一致していない場合はステップ３０８へ進む。
【００５９】
ステップ３０６では、解析対象ソースコードと流用候補ソースコードが、ソースコードの命令単位で一致していなかったため、流用関係のソースコードなしと判断する。
【００６０】
一方、ステップ３０７では、流用候補ソースコードの命令単位に加え、ソースコードのファイル単位でも一致しているため、完全流用関係のソースコードが検出できた。
【００６１】
また、ステップ３０８では、流用候補ソースコードの命令単位で一致したため、部分流用関係のソースコードが検出できた。
【００６２】
ステップ３０９では、全ての流用候補ソースコードと比較を実行したかを判定する。まだ実行していない場合はステップ３０３へ戻り、実行している場合は処理を完了する。
【００６３】
最後にステップ３１０では、全ての解析対象のソースコードに対して流用検出処理を実行したかを判定する。全ての解析対象ソースコードに対して実行した場合はフローを終了し、まだ全ての解析対象ソースコードに対して実行していない場合は、ステップ３０１へと戻り、繰り返し処理を行う。
【００６４】
このように、解析対象ソースコードと類似したソースコード片を持つ流用候補のソースコードを検索し、解析対象ソースコードと流用候補ソースコードの差分比較を実行する。これにより、完全流用関係ソースコード、及び部分流用関係ソースコードの検出を行う。
【００６５】
次に、図４を用いて流用候補ソースコード検索フローについて説明する。本フローは、先に説明した図３の流用検出フローのステップ３０２にあたる。
【００６６】
まず、ステップ４０１において、ソースコードをプログラミング言語の文法に基づき、関数など特定の処理を実行する命令単位で字句解析を実行する。これにより、ソースコードの命令単位でひとつのトークン列に変換する。
【００６７】
次にステップ４０２において、パラメータ置換を行う。この際、ソースコードの予約語や演算子等の固定字句や、固定字句以外の自由字句など字句の種類に応じて置換方法を変えてもよい。
【００６８】
ステップ４０３では、パラメータ置換後のトークン列を比較し、トークン一致部分の検出を行う。例えば、既知の技術であるサフィックス木を用いたアルゴリズムにより、一致するトークン列を検出する。
【００６９】
次のステップ４０４で、トークン一致部分を検出できたか判定を行う。検出できた場合はステップ４０５へ、検出できなかった場合はステップ４０６へ進む。
【００７０】
ステップ４０５では一致するトークン列が、元のソースコード上のどこに相当するのかをたどり、ソースコード上での位置を特定する。これにより、解析対象ソースコードと流用候補ソースコードの命令単位の抽出を行う。
【００７１】
ステップ４０６では、トークン一致部分が検出できなかったため処理は終了となる。
【００７２】
このように、ソースコードの字句解析を行ってトークン列に変換し、さらにパラメータ置換を行ったトークン列を比較して、トークン一致部分の検出を行う。トークン一致部分のソースコード上での位置を特定することで、類似したソースコード片を持つ流用候補のソースコードを検索する。
【００７３】
また、本フローの中で説明した、類似のソースコード片を持つソースコードを検出する手法は一例であり、類似のソースコード片を持つソースコードが検出できるならば、他の手法を採用しても良い。
【００７４】
次に、図５を用いて解析処理実行フローについて説明する。本フローは、図２で説明した静的解析実行フローのステップ２０４にあたる。
【００７５】
まず、ステップ５０１で流用関係のソースコードを検出したかを判定する。流用関係のソースコードが見つかった場合は、ステップ５０２、見つからなかった場合は、ステップ５０３へ進む。
【００７６】
ステップ５０２では、流用関係のソースコードに対して解析対象のソースコードが完全流用、すなわちファイル単位で流用関係のソースコードであるか判定を行う。ファイル単位で流用された場合は、ステップ５０４へ、ファイル単位ではなく関数など特定の処理を実行する命令単位で流用された場合は、ステップ５０５へ進む。
【００７７】
ステップ５０３では、解析対象のソースコードに流用関係のソースコードが見つからなかったため、ソースコードファイル全体に対して解析処理を実行する。
【００７８】
一方、ステップ５０４では、解析対象のソースコードがファイル単位で流用関係のソースコードを持つため、流用部分であるソースコードファイル全体に対して静的解析を実行しない。
【００７９】
また、ステップ５０５では、解析対象のソースコードが関数など特定の処理を実行する命令単位で流用関係のソースコードを持つため、流用部分である命令単位に対して静的解析を実行しない。つまり、流用部分以外の命令単位以外に対して静的解析を実行する。
【００８０】
ステップ５０３、５０４、５０５の処理が完了したら、それぞれステップ５０６へと進む。最後にステップ５０６では、全ての解析対象のソースコードに対して静的解析処理を実行したかを判定する。全ての解析対象ソースコードに対して実行した場合はフローを終了し、まだ全ての解析対象ソースコードに対して実行していない場合は、ステップ５０１へと戻り、繰り返し処理を行う。
【００８１】
このように、解析対象のソースコードに流用関係のソースコードを検出した場合、ソースコード流用部分であるファイル単位、もしくは命令単位で、静的解析を実行しない。これにより、流用部分以外の新規に開発を行ったソースコードの警告メッセージのみを出力する。
【実施例２】
【００８２】
実施例１では、解析対象のソースコードの流用を検出した部分に対して、無条件に静的解析を実行しなかった。これは、ソースコード開発時など、流用部分以外の新規に開発を行ったソースコードに対してのみ警告メッセージを出力するためである。
【００８３】
しかし、流用関係のソースコードを検索する対象である、ソースコード管理手段に管理されているソフトウェア資産には、管理者の承認を受けたリリース済みのソースコードもあれば、テスト実施中のソースコード、開発途中のソースコードなど様々である。例えば、まだ開発途中のソースコードを流用した場合、その後、流用関係のソースコードに変更を加えられる可能性もあり、流用部分のソースコード品質が安定せず、保証もされていない。
【００８４】
最終的に解析対象のソースコードの品質を確認するためには、ソースコードの流用部分の品質にも一定レベルの品質を満たしていることが求められる。
【００８５】
そこで、実施例２では、流用関係の検索を行うソースコードの対象を、解析システム利用者の指定した属性情報に基づいて検索を行う。ここで言う属性情報とは、ファイルシステムや構成管理ツール等を通して付加されるプロパティやコメント、ラベルなどの任意の情報である。属性情報の指定により、流用関係ソースコードの検索対象を限定し、検出される流用部分に一定レベルの品質を満たすようにする。
【００８６】
実施例２における検索対象ソースコードの決定フローを、図６を用いて説明する。本フローは、図２の静的解析実行フローにおけるステップ２０２に当たる。
【００８７】
まず、ステップ６０１において、解析システム利用者から指定された属性情報を読み取る。属性情報は、例えばプロパティやチェックインコメント、ラベル名やラベルコメなど、ソースコードファイルに付加される情報である。構成管理ツールを利用して付加される属性でも、ファイルシステムで付加される属性でも良い。例えば属性情報には、任意のフォーマットで記されたリリースバージョンの情報や、命名規約を利用して“ＲＥＬＥＡＳＥＤ”や“ＴＥＳＴＥＤ”等、任意のキーワードで指定される。
【００８８】
次に、ステップ６０２において、ステップ６０１で読み取った属性情報を持つソースコードを、ソースコード管理部１０４から検索する。指定された属性情報に応じて、ファイルシステムや構成管理ツールの検索機能を利用して検索を行う。
【００８９】
ステップ６０３において、属性情報に該当するソースコードが見つかったか判断し、見つかった場合はステップ６０４へ、見つからなかった場合はステップ６０５へ進む。
【００９０】
ステップ６０４では、見つかったソースコードを検索対象ソースコードとして入力して処理を終了する。一方、ステップ６０５では、検索対象ソースコード入力無しとして、処理を終了する。検索対象ソースコードの入力が無い場合は、指定された属性情報に該当するソースコードが見つからなかったため、その後の流用検索フローは実行されない。
【００９１】
このように、実施例２で検出される流用部分は、指定された属性情報により一定レベルの品質を満たしているため、静的解析実行を実行しないで良い。また、検索対象を限定して流用検索を行うため、流用の検索にかかる時間を短縮することができる。これにより、最終的にソースコードの品質を確認する際にも、出力された流用部分以外の警告メッセージに対して対処すればよい。
【実施例３】
【００９２】
実施例２では、属性情報に基づいて一定レベルの品質を満たしたソースコードに限定して、流用の検索を行った。この場合、対象を限定して流用検索を行うため、属性情報に該当しない流用部分を見つけることができず、流用部分と新規開発部分の区別も出来なかった。
【００９３】
そこで、実施例３では、検出された流用関係のソースコードファイルの属性情報を判断し、一定レベルの品質を満たしたソースコードであれば、そのまま静的解析を実行しない。一方、一定レベルの品質を満たしていないソースコードであれば、解析システム利用者による解析実行オプション指定により、解析を実行するか、解析を実行しないかを決定する。
【００９４】
実施例３における解析処理実行フローを、図７を用いて説明する。本フローは、図２の静的解析実行フローのステップ２０４に当たる。
【００９５】
まずステップ７０１において、解析システム利用者から指定された属性情報を読み取る。実施例２と同様、属性情報は、例えばプロパティやチェックインコメント、ラベル名やラベルコメなど、ソースコードファイルに付加される情報である。構成管理ツールを利用して付加される属性でも、ファイルシステムで付加される属性でも良い。例えば属性情報には、任意のフォーマットで記されたリリースバージョンの情報や、命名規約を利用して“ＲＥＬＥＡＳＥＤ”や“ＴＥＳＴＥＤ”等、任意のキーワードで指定される。
【００９６】
次に、ステップ７０２において、解析システム利用者から指定された解析実行オプションを読み取る。解析実行オプションにより、指定された属性情報に該当しない流用ソースコードに対して、解析を実行するか、解析を実行しないかを決定する。
【００９７】
その後、ステップ７０３で流用関係ソースコードを検出したか判定を行う。流用関係ソースコードが見つかった場合はステップ７０４へ、見つからなかった場合はステップ７０５へ進む。
【００９８】
ステップ７０４では、流用関係ソースコードがステップ７０１で読み取った属性情報に該当しているか判定する。該当している場合はステップ７０６へ、該当していない場合はステップ７０７へ進む。
【００９９】
ステップ７０５では、解析対象のソースコードに流用関係のソースコードが見つからなかったため、ソースコードファイル全体に対して解析処理を実行する。
【０１００】
ステップ７０６では、属性情報に該当している流用関係のソースコードに対して解析対象のソースコードが完全流用、すなわちファイル単位で流用関係のソースコードであるか判定を行う。ファイル単位で流用された場合は、ステップ７０８へ、ファイル単位ではなく関数など特定の処理を実行する命令単位で流用された場合は、ステップ７０９へ進む。
【０１０１】
一方、ステップ７０７では、属性情報に該当していないため流用関係ソースコードに対して、ステップ７０２で読み取った解析実行オプションにより解析処理を実行するか判定する。解析処理を実行する場合は、ステップ７０５へ進み、流用関係ソースコードが見つからなかった場合と同様に、ソースコードファイル全体に対して解析処理を実行する。解析処理を実行しない場合は、ステップ７０６へ進み、流用関係ソースコードが属性情報に該当している場合と同様に、解析対象のソースコードが完全流用、すなわちファイル単位で流用関係のソースコードであるか判定を行う。
【０１０２】
ステップ７０８では、解析対象のソースコードがファイル単位で流用関係のソースコードを持つため、流用部分であるソースコードファイル全体に対して静的解析を実行しない。
【０１０３】
また、ステップ７０９では、解析対象のソースコードが関数など特定の処理を実行する命令単位で流用関係のソースコードを持つため、流用部分である命令単位に対して静的解析を実行しない。つまり、流用部分以外の命令単位以外に対して静的解析を実行する。
【０１０４】
ステップ７０５、７０８、７０９の処理が完了したら、それぞれステップ７１０へと進む。最後にステップ７１０では、全ての解析対象のソースコードに対して静的解析処理を実行したかを判定する。全ての解析対象ソースコードに対して実行した場合はフローを終了し、まだ全ての解析対象ソースコードに対して実行していない場合は、ステップ７０３へと戻り、繰り返し処理を行う。
【０１０５】
このように、実施例３では流用関係のソースコードと検出されたファイルの属性情報の確認を行う。流用関係のソースコードが、属性情報に該当する一定レベルの品質を満たしたソースコードであれば、そのまま解析処理実行を実行しない。一方、属性情報に該当しない、一定レベルの品質を満たしていないソースコードであれば、解析実行オプションにより解析を実行するか、解析を実行しないかを決定する。
【０１０６】
これにより、同じ流用と検出された部分でも、一定レベルの品質を満たした流用部分と、品質を満たしていない流用部分とを区別することができる。さらに、解析実行オプションにより、一定レベルの品質を満たしていない流用部分に対しても、解析を実行するか解析実行オプションにより指定させ、その品質を確認することができる。
【０１０７】
また、属性情報に該当しない一定レベルの品質を満たしていない流用部分には、入出力部１０１で解析システム利用者に注意メッセージを表示するようにしても良い。
【符号の説明】
【０１０８】
１０１  入出力部
１０２  制御部
１０３  流用ソースコード検索部
１０４  ソースコード管理部
１０５  静的解析部
１００１  CPU
１００２  RAM
１００３  入出力装置
１００４  外部記憶装置
１００５  通信インタフェース
１００６  データベース
１００７  バス
【図１】
2011113298.tif 000003
【図２】
2011113298.tif 000004
【図３】
2011113298.tif 000005
【図４】
2011113298.tif 000006
【図５】
2011113298.tif 000007
【図６】
2011113298.tif 000008
【図７】
2011113298.tif 000009
【図８】
2011113298.tif 000010
【図９】
2011113298.tif 000011
【図１０】
2011113298.tif 000012