(57)【要約】【課題】静的解析結果を、効率良く確認できる静的解析システムを提供する。【解決手段】本発明の静的解析システムは、静的解析装置と、クライアント装置とを備え、前記静的解析装置は、変更有無によらずに、全てのソースコードファイルを静的解析する検証実行部と、前記ソースコードファイル及び前記検証実行部による検証結果を、リビジョン毎に保存するリポジトリと、前記検証結果において、各指摘項目を前記クライアント装置の画面に表示するかどうかを示す確認フラグを更新する確認フラグ更新部とを備え、前記クライアント装置は、前記静的解析装置から、前記検証結果を取得する検証結果アクセス部と、前記検証結果の指摘項目の一覧、及び、次の静的解析時では表示不要な前記指摘項目をユーザに選択させる画面を表示し、前記選択させた前記表示不要な指摘項目を含む前記検証結果を、前記確認フラグ更新部に送信する検証結果確認部とを備える。【選択図】図１
2013045307.tif 000002
【特許請求の範囲】
【請求項１】
静的解析装置と、
前記静的解析装置のユーザインタフェースとなるクライアント装置と
を備える静的解析システムであって、
前記静的解析装置は、
変更有無によらずに、全てのソースコードファイルを静的解析する検証実行部と、
前記ソースコードファイル及び前記検証実行部による検証結果を、リビジョン毎に保存するリポジトリと、
前記検証結果において、各指摘項目を前記クライアント装置の画面に表示するかどうかを示す確認フラグを更新する確認フラグ更新部と
を備え、
前記クライアント装置は、
前記静的解析装置から、前記検証結果を取得する検証結果アクセス部と、
前記検証結果の指摘項目の一覧、及び、次の静的解析時では表示不要な前記指摘項目をユーザに選択させる画面を表示し、前記選択させた前記表示不要な指摘項目を含む前記検証結果を、前記確認フラグ更新部に送信する検証結果確認部と
を備える静的解析システム。
【請求項２】
前記静的解析装置は、
行差分情報を作成する差分取得部と、ここで、前記行差分情報は、前記ソースコードファイル毎に、前回の静的解析実行時のリビジョンの前記ソースコードファイルの行番号と、今回の静的解析実行時のリビジョンの前記ソースコードファイルの行番号との対応関係を記録し、
前記行差分情報を参照して、前記表示不要な指摘項目に対応するソースコードの行番号が変更された場合であっても、対象の指摘項目が、前記表示不要な指摘項目であることを特定する検証結果更新部と
を更に備える請求項１に記載の静的解析システム。
【請求項３】
前記差分取得部は、
ファイル差分情報を更に作成し、ここで、前記ファイル差分情報は、前記ソースコードファイルのファイル名及び、「追加」、「変更」、「削除」のいずれかの状態を示すステータスを記録し、
前記差分取得部は、前記ファイル差分情報において、前記ファイル名に対応する前記ステータスが、「変更」である前記ソースコードファイルに対してのみ、前記行差分情報を作成する
請求項２に記載の静的解析システム。
【請求項４】
静的解析装置と、
前記静的解析装置のユーザインタフェースとなるクライアント装置と
を備える静的解析システムにおいて、
前記静的解析装置の検証実行部が、変更有無によらずに、全てのソースコードファイルを静的解析するステップと、
前記静的解析装置のリポジトリが、前記ソースコードファイル及び前記検証実行部による検証結果を、リビジョン毎に保存するステップと、
前記静的解析装置の確認フラグ更新部が、前記検証結果において、各指摘項目を前記クライアント装置の画面に表示するかどうかを示す確認フラグを更新するステップと
を備え、
前記クライアント装置の検証結果アクセス部が、前記静的解析装置から、前記検証結果を取得するステップと、
前記クライアント装置の検証結果確認部が、前記検証結果の指摘項目の一覧、及び、次の静的解析時では表示不要な前記指摘項目をユーザに選択させる画面を表示するステップと、
前記クライアント装置の検証結果確認部が、前記選択させた前記表示不要な指摘項目を含む前記検証結果を、前記確認フラグ更新部に送信するステップと
を含む静的解析結果表示方法。
【請求項５】
前記静的解析装置の差分取得部が、行差分情報を作成するステップと、ここで、前記行差分情報は、前記ソースコードファイル毎に、前回の静的解析実行時のリビジョンの前記ソースコードファイルの行番号と、今回の静的解析実行時のリビジョンの前記ソースコードファイルの行番号との対応関係を記録し、
前記静的解析装置の検証結果更新部が、前記行差分情報を参照するステップと、
前記静的解析装置の検証結果更新部が、前記表示不要な指摘項目に対応するソースコードの行番号が変更された場合であっても、対象の指摘項目が、前記表示不要な指摘項目であることを特定するステップと
を更に含む請求項４に記載の静的解析結果表示方法。
【請求項６】
前記差分取得部が、ファイル差分情報を作成するステップと、ここで、前記ファイル差分情報は、前記ソースコードファイルのファイル名及び、「追加」、「変更」、「削除」のいずれかの状態を示すステータスを記録し、
前記行差分情報を作成するステップは、
前記ファイル差分情報において、前記ファイル名に対応する前記ステータスが、「変更」である前記ソースコードファイルに対してのみ、前記行差分情報を作成する
請求項５に記載の静的解析結果表示方法。
【請求項７】
請求項４乃至６のいずれか１項に記載の静的解析結果表示方法をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソースコードの静的解析システムに関し、特に、静的解析結果を、効率良く確認できる静的解析システムに関する。
【背景技術】
【０００２】
ソフトウェア開発において、ソースコードの品質を高めるために、ソースコードの静的解析が行われている。一般に、ソースコードファイルは、バグの修正や、ソフトウェアの機能変更、機能追加等の理由で、変更が繰り返される。ソースコードの静的解析工程では、ソースコードの一部しか変更していない場合であっても、ソフトウェアの品質を高めるため、全てのソースコードファイルに対して静的解析が行なわれることが多い。このとき、前回の静的解析の実行後に、内容が変更されていないソースコードファイルにおいては、前回と同様の静的解析結果が表示される。また、ソースコードの規模が大きい場合等には、静的解析結果の指摘事項が大量に表示され、確認作業が煩雑となる。ソースコードの静的解析工程において、静的解析システムのユーザが、前回の静的解析結果で確認済みの指摘項目を、同じ指摘項目であると判別できないことにより、再度、確認しなければならないことは非効率である。
【０００３】
本発明の分野における文献公知発明としては、特開２００９−１４６２０７号公報（特許文献１）及び特開２００６−０９２４７５号公報（特許文献２）がある。
【０００４】
特開２００９−１４６２０７号公報（特許文献１）では、ソースコード解析部２２が、変更前のソースコード（古いソースコード）と、変更後のソースコードの差分を算出して自動解析を実施する範囲を特定し、特定した部分のみ自動解析を行う発明が開示されている。この発明では、この方法により、変更のないソースコード箇所に対する同一指摘項目を再表示しないようにしている。しかし、変更されたソースコードと、変更されていないソースコードとの相互依存関係によっては、変更されていないソースコードに対しても指摘項目が新たに追加されることがある。静的解析を実行する対象を、差分のあったソースコード箇所に限定してしまうと、このような指摘事項が表示されない。
【０００５】
また、特開２００６−０９２４７５号公報（特許文献２）では、ソースコードに含まれるエラー箇所について、開発者等によって、修正不要の判断がされた場合には、再度のインスペクション処理による当該エラー箇所を検出しないソースコードインスペクションシステムの発明が開示されている。この発明では、次の静的解析結果参照時に、表示不要と判断した指摘項目は、適用除外申請装置１０１に適用除外申請を行なうことができる。適用除外申請された指摘項目は、当該ソースコードの変更がなかった場合には、除外対象結果情報７０３に出力されるが、当該ソースコードに変更があり、指摘項目の行番号が変わっていた場合には、不正除外結果情報７０４に出力される。開発者等は、不正除外結果情報７０４に出力されたエラー内容を、再確認する必要がある。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００９−１４６２０７号公報
【特許文献２】特開２００６−０９２４７５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本発明の目的は、解析結果を効率良く確認できる静的解析システムを提供することにある。
【課題を解決するための手段】
【０００８】
本発明の静的解析システムは、静的解析装置と、前記静的解析装置のユーザインタフェースとなるクライアント装置とを備える。前記静的解析装置は、変更有無によらずに、全てのソースコードファイルを静的解析する検証実行部と、前記ソースコードファイル及び前記検証実行部による検証結果を、リビジョン毎に保存するリポジトリと、前記検証結果において、各指摘項目を前記クライアント装置の画面に表示するかどうかを示す確認フラグを更新する確認フラグ更新部とを備え、前記クライアント装置は、前記静的解析装置から、前記検証結果を取得する検証結果アクセス部と、前記検証結果の指摘項目の一覧、及び、次の静的解析時では表示不要な前記指摘項目をユーザに選択させる画面を表示し、前記選択させた前記表示不要な指摘項目を含む前記検証結果を、前記確認フラグ更新部に送信する検証結果確認部とを備える。
【０００９】
本発明の静的解析結果表示方法は、静的解析装置と、前記静的解析装置のユーザインタフェースとなるクライアント装置とを備える静的解析システムにより実施される。前記静的解析装置の検証実行部が、変更有無によらずに、全てのソースコードファイルを静的解析するステップと、前記静的解析装置のリポジトリが、前記ソースコードファイル及び前記検証実行部による検証結果を、リビジョン毎に保存するステップと、前記静的解析装置の確認フラグ更新部が、前記検証結果において、各指摘項目を前記クライアント装置の画面に表示するかどうかを示す確認フラグを更新するステップとを備え、前記クライアント装置の検証結果アクセス部が、前記静的解析装置から、前記検証結果を取得するステップと、前記クライアント装置の検証結果確認部が、前記検証結果の指摘項目の一覧、及び、次の静的解析時では表示不要な前記指摘項目をユーザに選択させる画面を表示するステップと、前記クライアント装置の検証結果確認部が、前記選択させた前記表示不要な指摘項目を含む前記検証結果を、前記確認フラグ更新部に送信するステップとを含む。
【発明の効果】
【００１０】
本発明によれば、解析結果を効率良く確認できる静的解析システムを提供することができる。
【図面の簡単な説明】
【００１１】
【図１】図１は、本発明の実施形態における静的解析システム１０のブロック図である。
【図２】図２は、本発明の実施形態における静的解析システム１０において、リポジトリ５１にソースコードファイル３１を格納する方法を説明するためのフローチャートである。
【図３】図３は、本発明の実施形態における静的解析システム１０の静的解析方法のフローチャートである。
【図４】図４は、本発明の実施形態における静的解析システム１０のファイル差分情報である。
【図５】図５は、本発明の実施形態における静的解析システム１０の行差分情報である。
【図６】図６は、本発明の実施形態における静的解析システム１０の行差分情報の例である。
【図７】図７は、本発明の実施形態における静的解析システム１０の検証結果３３である。
【図８】図８は、本発明の実施形態における静的解析システム１０の静的解析結果確認方法のフローチャートである。
【図９】図９は、本発明の実施形態における静的解析システム１０の検証結果確認画面の例である。
【図１０】図１０は、本発明の実施形態における検証結果更新部２５によって更新されたリポジトリ５１の検証結果３３の例である。
【図１１】図１１は、図１０の検証結果３３に基づいて作成された検証結果確認画面である。
【図１２】図１２は、本発明の実施形態における確認フラグ更新部２８によって更新されたリポジトリ５１の検証結果３３の例である。
【図１３】図１３は、本発明の実施形態における差分取得部２３によって作成されたファイル差分情報及び行差分情報の例である。
【図１４】図１４は、本発明の実施形態における検証実行部２４により作成されたリポジトリ５１保存前の検証結果である。
【図１５】図１５は、本発明の実施形態における検証結果更新部２５により更新された検証結果３３の例である。
【図１６】図１６は、図１５の検証結果３３に基づいて、本発明の実施形態における検証結果確認部１３が表示する検証結果確認画面の例である。
【発明を実施するための形態】
【００１２】
添付図面を参照して、本発明の実施形態による静的解析システム１０を以下に説明する。
【００１３】
［構成の説明］
はじめに、本実施形態における静的解析システム１０の構成の説明を行う。図１は、本発明の実施形態における静的解析システム１０のブロック図である。静的解析システム１０は、クライアント装置１及び静的解析装置２を備えたクライアントサーバシステムである。
【００１４】
クライアント装置１は、静的解析結果確認者が、静的解析装置２を利用するためのユーザインタフェースとなる装置である。クライアント装置１は、リポジトリアクセス部１１、検証結果アクセス部１２及び検証結果確認部１３を備える。クライアント装置１は、複数あってもよい。また、クライアント装置１と静的解析装置２は、同一の装置により実現されていてもよい。
【００１５】
静的解析装置２は、実行トリガ部２１、ソースコードファイル取得部２２、差分取得部２３、検証実行部２４、検証結果更新部２５、ソースコードファイル格納部２６、検証結果取得部２７、確認フラグ更新部２８及びリポジトリ５１を備える。
【００１６】
リポジトリアクセス部１１は、ソースコードファイルをリポジトリ５１に格納するためのソースコード格納要求をソースコードファイル格納部２６に送信する。
【００１７】
検証結果アクセス部１２は、検証結果取得要求を検証結果取得部２７に送信する。
【００１８】
検証結果確認部１３は、次の静的解析実行時からは、表示不要と判断した指摘項目を、表示させないようにするため、該当の指摘項目の確認フラグを「確認済み」に更新した検証結果確認用データ４１を、確認フラグ更新部２８に送信する。
【００１９】
実行トリガ部２１は、定期的（例えば、毎日定時）、又は、非定期的（例えば、該当モジュール内のいずれかのソースコードファイルの更新時）に、静的解析の処理の開始を、ソースコードファイル取得部２２に指示する。
【００２０】
ソースコードファイル取得部２２は、今回静的解析の対象となるリビジョンのソースコードファイル３１と、前回計測時リビジョン３２のソースコードファイル３１を、リポジトリ５１から取得する。
【００２１】
差分取得部２３は、ソースコード取得部２２によって取得した前回計測時リビジョン３２のソースコードファイル３１と、静的解析の対象となるリビジョンのソースコードファイル３１との比較を行ない、ファイル差分情報及び行差分情報を作成する。ファイル差分情報及び行差分情報の詳細については、後述する。差分取得部２３によるソースコードファイル３１の比較機能は、例えば、ＵＮＩＸ（登録商標）のｄｉｆｆプログラムと同様の機能を有する。静的解析の対象となるリビジョンは、最新のリビジョンとの他に、静的解析システム１０のユーザが、特定のリビジョンを指定してもよい。
【００２２】
検証実行部２４は、ソースコード取得部２２によって取得した全てのソースコードファイル３１に対して、静的解析を実行して検証結果３３を作成する。全てのソースコードファイルとは、あるソフトウェアを実現するために、必要となる複数の機能ブロック（複数のモジュール）のうち、１機能ブロック（１モジュール）を実現するためのソースコードファイル群であってもよい。検証実行部２４による静的解析機能は、例えば、Ｊａｖａ言語（登録商標）で記載されたソースコードであれば、オープンソースソフトウェアであるＰＭＤやＣｈｅｃｋｓｔｙｌｅ、Ｃ＋＋言語で記載されたソースコードであれば、同じくオープンソフトウェアであるＣｐｐＣｈｅｃｋと同様のチェック機能を有する。
【００２３】
検証結果更新部２５は、今回の静的解析実行時に、検証実行部２４により得られた未反映の検証結果に基づいて、前回静的解析時にリポジトリ５１に保存した検証結果３３を更新する。検証結果更新部２５の処理の詳細については、後述する。
【００２４】
ソースコード格納部２６は、クライアント装置１のリポジトリアクセス部１１からソースコード格納要求と、ソースコードファイルを受信すると、ソースコードファイル３１として、リポジトリ５１に格納する。
【００２５】
検証結果取得部２７は、クライアント装置１の検証結果アクセス部１２から、検証結果取得要求を受信すると、リポジトリ５１の検証結果３３を参照する。検証結果取得部２７は、検証結果３３において、確認フラグが「未確認」の指摘項目を抽出し、検証結果確認用データ４１を作成する。検証結果取得部２７は、クライアント装置１に検証結果確認用データ４１を送信する。
【００２６】
確認フラグ更新部２８は、クライアント装置１の検証結果確認部１３から、検証結果確認用データ４１を受信すると、リポジトリ５１に格納されている検証結果３３の各指摘項目の確認フラグの値を更新する。
【００２７】
リポジトリ５１は、ソースコードファイル３１、前回計測時リビジョン３２、検証結果３３を、リビジョン毎に管理して記憶している。リポジトリ５１は、外部装置に記憶されていてもよいし、静的解析装置２内の記憶装置に記憶されていてもよい。リポジトリ５１によるリビジョン管理は、例えば、オープンソースソフトウェアのＳｕｂｖｅｒｓｉｏｎ等のソフトウェアと同様の管理機能を有する。ソースコードファイル３１は、静的解析の対象となるソースコードが記載されているファイルである。前回計測時リビジョン３２は、前回静的解析を行なったソースコードファイル３１のリビジョンである。前回計測時リビジョン３２は、初期状態では何も格納されていないが、静的解析が実行される度に、静的解析時に指定されていたリビジョンで上書きされる。検証結果３３は、静的解析による指摘項目のリストである。
【００２８】
［動作方法の説明］
次に、本実施形態における静的解析システム１０において、静的解析結果表示方法の説明を行う。まず、本実施形態における静的解析システム１０において、リポジトリ５１にソースコードファイル３１を格納する方法について説明する。図２は、本発明の実施形態における静的解析システム１０において、リポジトリ５１にソースコードファイル３１を格納する方法を説明するためのフローチャートである。
【００２９】
（ステップＳ１０１）
クライアント装置１のリポジトリアクセス部１１は、ソースコード格納要求と更新したソースコードファイルを、静的解析装置２のソースコードファイル格納部２６に送信する。
【００３０】
（ステップＳ１０２）
静的解析装置２のソースコード格納部２６は、リポジトリ５１のソースコードファイル３１を、ソースコード格納要求と同時に送信したソースコードファイルで更新する。
【００３１】
次に、本実施形態における静的解析システム１０において、静的解析方法について説明する。図３は、本発明の実施形態における静的解析システム１０の静的解析方法のフローチャートである。
【００３２】
（ステップＳ２０１）
実行トリガ部２１は、ソースコードファイル３１の静的解析の実行を開始する。実行トリガ２１は、静的解析実行対象のソースコードファイル３１の指定リビジョンと、前回計測時リビジョン３２を比較する。実行トリガ部２１は、両リビジョンの値が異なっている場合には、指定リビジョンのソースコードファイル３１と、前回計測時のソースコードファイル３１の間に差分があると判定する。実行トリガ部２１は、両リビジョンの値が等しい場合には、指定リビジョンのソースコードファイル３１と前回計測時ソースコード３１の間に差分がないと判定する。実行トリガ部２１は、差分がなければ、静的解析を実行せず、差分がある場合には、ステップＳ２０２に進む。ただし、前回計測時リビジョン３２がリポジトリ５１に格納されていなかった場合は、初回の静的解析処理の実行と判断し、ステップＳ２０２に進む。
【００３３】
（ステップＳ２０２）
ソースコードファイル取得部２２は、リポジトリ５１から静的解析実行対象のリビジョンのソースコードファイル３１、及び前回計測時リビジョン３２のソースコードファイル３１を取得する。
【００３４】
（ステップＳ２０３）
差分取得部２３は、リポジトリ５１から静的解析実行対象のリビジョンのソースコードファイル３１と、前回計測時リビジョン３２のソースコードファイル３１を比較して、ファイル差分情報、及び行差分情報を作成する。
【００３５】
図４は、本発明の実施形態における静的解析システム１０のファイル差分情報である。ファイル差分情報は、ソースコードファイル３１のファイル毎に、ファイル名、及び、「追加」、「変更」、「削除」のいずれかの状態を示すステータスを記録する。「追加」は、前回の静的解析実行時には、存在しなかったソースコードファイルであることを示す。「変更」は、前回の静的解析実行時から、変更されたソースコードファイルであることを示す。「削除」は、前回の静的解析実行時には、存在していたが、現在実行中の静的解析では、存在していないソースコードファイルであることを示す。初回の静的解析である場合には、静的解析実行対象の全てのソースコードファイル３１に対して、ステータスを「追加」としたファイル差分情報を作成する。
【００３６】
図５は、本発明の実施形態における静的解析システム１０の行差分情報である。行差分情報は、ファイル名、ソースコード変更後の変更後行番号、及び、ソースコード変更前の変更前行番号を有するレコードを記録する。行差分情報により、ソースコードファイル３１のファイル毎に、ソースコード変更前の行番号とソースコード変更後の行番号の対応を把握できる。差分取得部２３は、ファイル差分情報において、ファイル名に対応する前記ステータスが、「変更」であるソースコードファイル３１に対してのみ、差分情報を作成してもよい。
【００３７】
図６は、本発明の実施形態における静的解析システム１０の行差分情報の例である。図６では、ソースコードファイル３１内で、前回静的解析実行時から変更のあったファイルの例としてＳａｍｐｌｅ．ｊａｖａが記載されている。変更後Ｓａｍｐｌｅ．ｊａｖａは、変更前のＳａｍｐｌｅ．ｊａｖａの９行目に対応するソースコードが削除されている。この変更に対応する行差分情報のレコードは、（ファイル名，変更後行番号，変更前行番号）＝（Ｓａｍｐｌｅ．ｊａｖａ，０，９）となる。また、変更後Ｓａｍｐｌｅ．ｊａｖａは、変更前のＳａｍｐｌｅ．ｊａｖａは、８行目と１０行目のソースコードが追加されている。この変更に対応する行差分情報のレコードは、（ファイル名，変更後行番号，変更前行番号）＝（Ｓａｍｐｌｅ．ｊａｖａ，８，０）と、（ファイル名，変更後行番号，変更前行番号）＝（Ｓａｍｐｌｅ．ｊａｖａ，１０，０）となる。（ファイル名，変更後行番号，変更前行番号）＝（Ｓａｍｐｌｅ．ｊａｖａ，９，８）のように、変更後行番号の値と、変更前行番号の値が異なる行差分情報のレコードは、同一のソースコードであるが、変更により行番号がずれていることが示されている。
【００３８】
（ステップＳ２０４）
検証実行部２４は、指定リビジョンの全ソースコードファイル３１に対して、静的解析を行ない、検証結果３３を作成する。
【００３９】
図７は、本発明の実施形態における静的解析システム１０の検証結果３３である。検証結果３３に含まれる各指摘項目は、検証ＩＤ、ファイル名、開始行、終了行、指摘ルール、指摘内容及び確認フラグを含む。検証ＩＤは、指摘項目毎に一意に割り振られる識別子である。ファイル名は、指摘項目が発生しているソースコードファイル３１のファイル名である。開始行は、ソースコードファイル３１の指摘対象となっている箇所の開始行の行番号である。終了行は、ソースコードファイル３１の指摘対象となっている箇所の終了行の行番号である。指摘ルールは、静的解析対象となるソースコード３１に適用するルールのルール名である。指摘内容は、指摘ルールに基づくソースコードの該当箇所に対するメッセージ内容である。確認フラグは、「未確認」、「確認済み」のどちらかの値が設定されるが、検証結果３３をリポジトリ５１に初めて登録する時には「未確認」が設定される。
【００４０】
（ステップＳ２０５）
検証結果更新部２５は、リポジトリ５１に格納された検証結果３３の確認フラグが、「未確認」の全ての指摘項目を削除する。検証結果更新部２５は、以降のステップの処理で、検証結果３３の「未確認」指摘項目を作成し直す。
【００４１】
（ステップＳ２０６）
検証結果更新部２５は、ファイル差分情報及び行差分情報を参照して、変更されたファイルについての削除行に係る指摘項目を削除する。また、検証結果更新部２５は、ファイル差分情報を参照して、削除されたファイルに係る指摘項目を削除する。
【００４２】
（ステップＳ２０７）
検証結果更新部２５は、行差分情報を参照し、検証結果３３の各指摘項目の開始行、終了行を更新、削除する。ステップＳ２０７の処理の詳細については、具体例を用いて後述する。
【００４３】
（ステップＳ２０８）
検証結果更新部２５は、検証結果３３の各指摘項目の確認フラグに「未確認」を設定し、リポジトリ５１に各指摘項目を追加する。ただし、ファイル名、開始行、終了行、指摘ルールが全て一致する指摘項目が、既にリポジトリ５１の検証結果３３に存在する場合には、当該指摘項目については追加しない。
【００４４】
（ステップＳ２０９）
検証結果更新部２５は、リポジトリ５１の前回計測時リビジョン３２の値を、今回計測時の指定リビジョンの値で更新する。
【００４５】
次に、本発明の実施形態における静的解析システム１０の静的解析結果確認方法について説明する。図８は、本発明の実施形態における静的解析システム１０の静的解析結果確認方法のフローチャートである。
【００４６】
（ステップＳ３０１）
クライアント装置１の検証結果アクセス部１２は、静的解析装置２の検証結果取得部２７に検証結果格納要求を送信する。
【００４７】
（ステップＳ３０２）
静的解析装置２の検証結果取得部２７は、リポジトリ５１に格納された検証結果３３から、確認フラグが「未確認」の指摘項目を全て抽出する。検証結果取得部２７は、一覧の形式でクライアント装置１の画面に表示するための検証結果確認用データ４１を作成して、クライアント装置１に返信する。
【００４８】
（ステップＳ３０３）
クライアント装置１の検証結果確認部１３は、検証結果確認用データ４１に基づいて、検証結果確認画面を表示する。図９は、本発明の実施形態における静的解析システム１０の検証結果確認画面の例である。図９の一覧表の各行は、検証実行部２４により作成された各指摘項目に対応している。図９の一覧表の各行は、確認フラグ、ファイル名、開始行、終了行、指摘ルール及び指摘内容から構成されている。確認フラグの列は、チェックボックスやプルダウンリストを備え、検証結果確認画面を閲覧するユーザが、各指摘項目に対するステータスを変更できる。
【００４９】
ユーザが、クライアント装置１の検証結果確認画面に表示された各指摘項目に対して、確認フラグをチェックすると、検証結果確認部１３は、確認フラグがチェックされた指摘項目については、次回の静的解析からは表示不要と判断する。検証結果確認部１３は、確認フラグがチェックされた指摘項目に対して、検証結果確認用データ４１の対応する指摘項目の確認フラグを「確認済み」に更新する。
【００５０】
（ステップＳ３０４）
クライアント装置１の検証結果確認部１３は、ステップＳ３０３で更新した検証結果確認用データ４１を静的解析装置２の確認フラグ更新部２８に送信する。
【００５１】
（ステップＳ３０５）
静的解析装置２の確認フラグ更新部２８は、ステップＳ３０４でクライアント装置１から送信された検証結果確認用データ４１に基づいて、リポジトリ５１の検証結果３３の各指摘項目の確認フラグの値を更新する。
【００５２】
次に、具体例を用いて、本発明の実施形態における静的解析システム１０の静的解析結果表示方法を説明する。
【００５３】
図１０は、検証結果更新部２５によって更新されたリポジトリ５１の検証結果３３の例である。図１１は、図１０の検証結果３３に基づいて作成された検証結果確認画面である。図１１では、静的解析システム１０のユーザが、１行目、２行目及び４行目の指摘項目の確認フラグを「確認済み」としてチェックしたことが示されている。クライアント装置１の検証結果確認部１３は、検証結果確認用データ４１を確認フラグ更新部２８に送信する。図１２は、本発明の実施形態における確認フラグ更新部２８によって更新されたリポジトリ５１の検証結果３３の例である。
【００５４】
リポジトリ５１の検証結果３３が図１２の状態のときに、ユーザがソースコードを変更したとする。リポジトリアクセス部１１により、変更されたソースコードファイルが、ソースコードファイル格納部２６に送信される。ソースコードファイル格納部２６は、ユーザにより変更されたソースコードファイルを、リポジトリ５１のソースコードファイル３１に上書きする。この上書きによる変更で、リポジトリ５１のソースコードファイル３１のリビジョンがインクリメントされる。
【００５５】
次に、実行トリガ部２１により、再度静的解析が実行される。図１３は、本発明の実施形態における差分取得部２３によって作成されたファイル差分情報及び行差分情報の例である。図１４は、本発明の実施形態における検証実行部２４により作成されたリポジトリ５１保存前の検証結果である。
【００５６】
次に、検証結果更新部２５は、図１２の検証結果３３から、確認フラグが「未確認」の指摘項目を削除する。図１２の例では、検証ＩＤが「０００３」及び「０００５」の指摘項目が削除される。
【００５７】
次に、検証結果更新部２５は、図１３のファイル差分情報を参照して、Ｓａｍｐｌｅ１．ｊａｖａが削除されていることを特定し、図１２の検証結果３３から、Ｓａｍｐｌｅ１．ｊａｖａに対する指摘項目である検証ＩＤが「０００１」の指摘項目を削除する。
【００５８】
次に、検証結果更新部２５は、図１３のファイル差分情報を参照して、Ｓａｍｐｌｅ２．ｊａｖａが変更されていることを特定し、行差分情報のＳａｍｐｌｅ２．ｊａｖａに関するレコードを参照する。検証結果更新部２５は、行差分情報を参照して、検証ＩＤ「０００２」の指摘項目の開始行「１００」及び終了行「１０１」に係る変更有無を確認する。図１３の例では、（ファイル名、変更後行番号、変更前行番号）＝（Ｓａｍｐｌｅ２．ｊａｖａ，０，１００）であるレコードが存在するため、図１２の検証結果３３から検証ＩＤが「０００２」の指摘項目を削除する。
【００５９】
次に、検証結果更新部２５は、行差分情報を参照して、検証ＩＤ「０００４」の指摘項目の開始行「３００」及び終了行「３０１」に係る変更有無を確認する。図１３の例では、（ファイル名、変更後行番号、変更前行番号）＝（Ｓａｍｐｌｅ２．ｊａｖａ，４００，３００）、（ファイル名、変更後行番号、変更前行番号）＝（Ｓａｍｐｌｅ２．ｊａｖａ，４０１，４００）であるレコードが存在するため、図１２の検証結果３３において、検証ＩＤが「０００４」の指摘項目の開始行を「４００」、終了行を「４０１」に更新する。
【００６０】
次に、検証結果更新部２５は、図１４のリポジトリ５１保存前の検証結果の各指摘項目を、リポジトリ５１の検証結果３３に追加する。検証結果更新部２５は、図１４の検証結果の１行目の指摘事項を、検証ＩＤ「０００６」として、リポジトリ５１の検証結果３３に保存する。検証結果更新部２５は、図１４の検証結果の２行目の指摘事項を、検証ＩＤ「０００７」として、リポジトリ５１の検証結果３３に保存する。検証結果更新部２５は、図１４の検証結果の３行目の指摘事項については、検証ＩＤ「０００４」と同一であるため、リポジトリ５１の検証結果３３に、新たに保存しない。図１４の検証結果の４行目の指摘事項を、検証ＩＤ「０００８」として、リポジトリ５１の検証結果３３に保存する。図１４の検証結果の５行目の指摘事項を、検証ＩＤ「０００９」として、リポジトリ５１の検証結果３３に保存する。
【００６１】
以上をまとめると、図１２で示されていたリポジトリ５１の検証結果３３は、図１５に示される検証結果３３に更新される。
【００６２】
図１６は、図１５の検証結果３３に基づいて、本発明の実施形態における検証結果確認部１３が表示する検証結果確認画面の例である。検証ＩＤ「０００４」の指摘項目は、ユーザにより、前回の静的検証時に、「確認済み」としてチェックされていた。そのため、検証ＩＤ「０００４」に対応する指摘項目は、検証結果確認画面に表示されていない。本実施形態では、検証ＩＤ「０００４」のように、指摘項目の開始行及び終了行が、変更された場合であっても、ユーザが「確認済み」としてチェックしていた指摘項目と、同一の指摘項目であると識別できる。
【００６３】
本実施形態の静的解析システム１０では、ユーザは、クライアント装置１の検証結果確認画面で「確認済み」とした指摘項目は、次回の静的解析で表示されない。そのため、ユーザによる検証結果３３の指摘項目の確認作業が、煩雑さを低減することができる。ユーザは、必要な指摘項目のみを確認することができるため、効率よく指摘項目を確認できる。
【００６４】
また、本実施形態の静的解析システム１０では、変更有無によらずに、全てのソースコードファイル３１を静的解析するため、ソースコードを変更した箇所が、ソースコードを変更していない箇所に影響を及ぼすことにより、新たに追加された指摘項目も、洩れなく表示することができる。
【００６５】
本実施形態の静的解析システム１０によれば、上述の２つの効果を同時に達成することができる。
【００６６】
本実施形態の静的解析システム１０は、ソフトウェア開発プロジェクトにおいて、製造工程以降のフェーズで、定期的（例えば日次）に、静的解析装置２の実行トリガ２１を設定して利用する方法が考えられる。このようにすることで、開発モジュールのソースコードファイル３１の静的解析処理を定期的に実行でき、ソフトウェア開発者が、逐次的確に指摘項目を確認することができる。
【００６７】
また、レビュー（コードインスペクション）のレビューアが、本実施形態の静的解析システム１０を利用すれば、検証結果画面を参照することにより、指摘項目の一覧から、効率的に、当該ソースコードのバグの傾向をつかむことができる。
【００６８】
以上、本発明の実施の形態が添付の図面を参照することにより説明された。但し、本発明は、上述の実施の形態に限定されず、要旨を逸脱しない範囲で当業者により適宜変更され得る。
【符号の説明】
【００６９】
１  クライアント装置
２  静的解析装置
１０  静的解析システム
１１  リポジトリアクセス部
１２  検証結果アクセス部
１３  検証結果確認部
２１  実行トリガ部
２２  ソースコードファイル取得部
２３  差分取得部
２４  検証実行部
２５  検証結果更新部
２６  ソースコードファイル格納部
２７  検証結果取得部
２８  確認フラグ更新部
３１  ソースコードファイル
３２  前回計測時リビジョン
３３  検証結果
４１  検証結果確認用データ
５１  リポジトリ
【図１】
2013045307.tif 000003
【図２】
2013045307.tif 000004
【図３】
2013045307.tif 000005
【図４】
2013045307.tif 000006
【図５】
2013045307.tif 000007
【図６】
2013045307.tif 000008
【図７】
2013045307.tif 000009
【図８】
2013045307.tif 000010
【図９】
2013045307.tif 000011
【図１０】
2013045307.tif 000012
【図１１】
2013045307.tif 000013
【図１２】
2013045307.tif 000014
【図１３】
2013045307.tif 000015
【図１４】
2013045307.tif 000016
【図１５】
2013045307.tif 000017
【図１６】
2013045307.tif 000018