(57)【特許請求の範囲】
【請求項１】
ソースコードの静的解析結果の分析装置であって、
前記静的解析結果に対応するソースコードを修正するかしないかのユーザによる判断結果と、ソースコードメトリクスの情報と、プログラム開発プロジェクトの情報とを記憶する記憶部と、
過去の前記静的解析結果に対応するソースコードを修正するかしないかの判断結果と、当該過去の静的解析結果に対応する前記ソースコードメトリクスの情報及び前記プログラム開発プロジェクトの情報とに基づいて、静的解析結果に対応するソースコードが修正される修正確率を判定するための修正確率判定情報を導出する第１の処理部と、
分析対象のソースコードに関する前記静的解析結果、前記ソースコードメトリクスの情報及び前記プログラム開発プロジェクトの情報のうち、前記修正確率判定情報と合致するデータを見つけ、合致した前記修正確率判定情報に対応する前記修正確率を出力して、前記修正確率に基づいて前記分析対象のソースコードに関する静的解析結果の優先順位付けを行う第２の処理部と、
前記分析対象のソースコードに関する静的解析結果を、前記優先順位を反映した形式で出力する出力装置と
を備える分析装置。
【請求項２】
請求項１に記載の分析装置において、
前記修正確率判定情報は、前記過去の静的解析結果に対応するソースコードを修正するかしないかの判断結果が所定の割合以上となる、又は、所定の割合以下となるような条件であり、
前記第２の処理部は、前記過去の静的解析結果の判断結果の前記所定の割合を、前記修正確率として出力する、分析装置。
【請求項３】
請求項２に記載の分析装置において、
前記条件は、前記静的解析結果、前記ソースコードメトリクスの情報及び前記プログラム開発プロジェクトの情報の中から選択された少なくとも１つの項目に関する条件である、分析装置。
【請求項４】
請求項１に記載の分析装置において、
前記出力装置は、前記分析対象のソースコードに関する静的解析結果に対応するソースコードを修正するかしないかの判断結果を前記ユーザが入力するためのインタフェースを表示し、
前記分析装置は、前記インタフェースを介して入力された判断結果を、前記静的解析結果の判断結果として前記記憶部に登録する、分析装置。
【請求項５】
プロセッサ及び記憶部を用いた、ソースコードの静的解析結果の分析方法であって、前記記憶部が、静的解析結果に対応するソースコードを修正するかしないかのユーザによる判断結果と、ソースコードメトリクスの情報と、プログラム開発プロジェクトの情報とを記憶しており、
前記プロセッサが、過去の前記静的解析結果に対応するソースコードを修正するかしないかの判断結果と、当該過去の静的解析結果に対応する前記ソースコードメトリクスの情報及び前記プログラム開発プロジェクトの情報とに基づいて、静的解析結果に対応するソースコードが修正される修正確率を判定するための修正確率判定情報を導出する第１のステップと、
前記プロセッサが、分析対象のソースコードに関する前記静的解析結果、前記ソースコードメトリクスの情報及び前記プログラム開発プロジェクトの情報のうち、前記修正確率判定情報と合致するデータを見つけ、合致した前記修正確率判定情報に対応する前記修正確率を出力して、前記修正確率に基づいて前記分析対象のソースコードに関する静的解析結果の優先順位付けを行う第２のステップと、
前記プロセッサが、前記分析対象のソースコードに関する静的解析結果を、前記優先順位を反映した形式で出力装置に出力する第３のステップと
を含む分析方法。
【請求項６】
請求項５に記載の分析方法において、
前記修正確率判定情報は、前記過去の静的解析結果に対応するソースコードを修正するかしないかの判断結果が所定の割合以上となる、又は、所定の割合以下となるような条件であり、
前記第２のステップは、前記過去の静的解析結果の判断結果の前記所定の割合を、前記修正確率として出力することを含む、分析方法。
【請求項７】
請求項６に記載の分析方法において、
前記条件は、前記静的解析結果、前記ソースコードメトリクスの情報及び前記プログラム開発プロジェクトの情報の中から選択された少なくとも１つの項目に関する条件である、分析方法。
【請求項８】
請求項５に記載の分析方法において、
前記第３のステップは、
前記分析対象のソースコードに関する静的解析結果の判断結果を前記ユーザが入力するためのインタフェースを表示することと、
前記インタフェースを介して入力された判断結果を、前記静的解析結果の判断結果として前記記憶部に登録することと
を含む、分析方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソースコードの静的解析結果を分析する装置及び方法に関する。
【背景技術】
【０００２】
従来より、ソースコードに対する静的解析により検出された指摘を優先度付けする技術が検討されている。例えば、特許文献１に係る分析方法では、ソースコードの静的解析により検出された警告に対し、変更履歴に基づき優先度付けが行われる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００８−０２１２４４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１の方法では、モジュールごとの変更回数及び変更時期に基づき、静的解析により検出された指摘に優先度付けを行っているが、モジュールの変更履歴のみに基づいた優先度付けは精度が低いという課題がある。
【０００５】
そこで、本発明は、上記課題を解決するためになされたものであり、ソースコードの静的解析結果のデータを多面的に分析し、修正が必要となるソースコードの優先順位をユーザに提示することを目的とする。
【課題を解決するための手段】
【０００６】
例えば、上記課題を解決するために、特許請求の範囲に記載の構成を採用する。本願は上記課題を解決する手段を複数含んでいるが、その一例をあげるならば、ソースコードの静的解析結果の分析装置が提供される。前記分析装置は、前記静的解析結果の判断結果と、ソースコードメトリクスの情報と、プログラム開発プロジェクトの情報とを記憶する記憶部と、過去の前記静的解析結果の判断結果と、当該過去の静的解析結果に対応する前記ソースコードメトリクスの情報及び前記プログラム開発プロジェクトの情報とに基づいて、静的解析結果に対応するソースコードが修正される修正確率を判定するための修正確率判定情報を導出する第１の処理部と、分析対象のソースコードに関する前記静的解析結果、前記ソースコードメトリクスの情報及び前記プログラム開発プロジェクトの情報に対して前記修正確率判定情報を適用し、前記分析対象のソースコードに関する静的解析結果の優先順位付けを行う第２の処理部と、前記分析対象のソースコードに関する静的解析結果を、前記優先順位を反映した形式で出力する出力装置とを備える。
【０００７】
また、他の例によれば、プロセッサ及び記憶部を用いた、ソースコードの静的解析結果の分析方法が提供される。前記記憶部が、静的解析結果の判断結果と、ソースコードメトリクスの情報と、プログラム開発プロジェクトの情報とを記憶している。前記分析方法は、前記プロセッサが、過去の前記静的解析結果の判断結果と、当該過去の静的解析結果に対応する前記ソースコードメトリクスの情報及び前記プログラム開発プロジェクトの情報とに基づいて、静的解析結果に対応するソースコードが修正される修正確率を判定するための修正確率判定情報を導出する第１のステップと、前記プロセッサが、分析対象のソースコードに関する前記静的解析結果、前記ソースコードメトリクスの情報及び前記プログラム開発プロジェクトの情報に対して前記修正確率判定情報を適用し、前記分析対象のソースコードに関する静的解析結果の優先順位付けを行う第２のステップと、前記プロセッサが、前記分析対象のソースコードに関する静的解析結果を、前記優先順位を反映した形式で出力装置に出力する第３のステップとを含む。
【発明の効果】
【０００８】
本発明によれば、ソースコードの静的解析結果のデータを多面的に分析し、修正が必要となるソースコードの優先順位をユーザに提示することができる。本発明に関連する更なる特徴は、本明細書の記述、添付図面から明らかになるものである。また、上記した以外の、課題、構成及び効果は、以下の実施例の説明により明らかにされる。
【図面の簡単な説明】
【０００９】
【図１】本発明の実施例に係るシステム構成の例である。
【図２】本発明の実施例に係るソースコードの登録処理を示すフローチャートの例である。
【図３】本発明の実施例に係る静的解析実行処理を示すフローチャートの例である。
【図４】本発明の実施例に係る修正確率判定条件の導出処理を示すフローチャートの例である。
【図５】本発明の実施例に係る静的解析結果のデータに対して、ユーザが判断結果を入力する処理を示すフローチャートの例である。
【図６】本発明の実施例に係るソースコードＤＢのデータの例である。
【図７】本発明の実施例に係るプロジェクト情報ＤＢのデータの例である。
【図８】本発明の実施例に係る静的解析結果ＤＢのデータの例である。
【図９】本発明の実施例に係るソースコードメトリクスＤＢのデータの例である。
【図１０】本発明の実施例に係る静的解析結果修正判断ＤＢのデータの例である。
【図１１】本発明の実施例に係る静的解析結果修正確率ＤＢのデータの例である。
【図１２】本発明の実施例に係る静的解析結果のデータに対して、ユーザが判断結果を入力する画面の例である。
【発明を実施するための形態】
【００１０】
以下、添付図面を参照して本発明の実施例について説明する。添付図面は本発明の原理に則った具体的な実施例を示しているが、これらは本発明の理解のためのものであり、決して本発明を限定的に解釈するために用いられるものではない。
【００１１】
以下の実施例は、ソースコードの静的解析結果に対してソースコード以外の情報を多面的に分析し、ソースの修正が必要かを予測する技術に関する。静的解析により検出された指摘に対する優先度は、モジュールの変更履歴以外に、ソースコードメトリクス及びプログラム開発プロジェクトのメトリクスとも依存関係を持つ。以下の実施例は、ソースコードの静的解析結果と、ソースコードメトリクス及びプログラム開発プロジェクトのメトリクスとの間の関係を考慮して、静的解析結果の優先順位付けを行うシステムである。
【００１２】
図１は、本発明の実施例に係るシステム構成の例である。修正確率計算システム１０は、ソースコードＤＢ１１と、プロジェクト情報ＤＢ１２と、静的解析装置１３と、静的解析結果ＤＢ１４と、ソースコードメトリクス抽出装置１５と、ソースコードメトリクスＤＢ１６と、静的解析結果修正判断ＤＢ１７と、条件導出装置１８と、修正確率判定情報１９と、修正確率計算装置２０と、修正確率ＤＢ２１と、タイマー２２とを備える。
【００１３】
修正確率計算システム１０は、少なくとも１つのコンピュータを用いて実現される。修正確率計算システム１０の各構成要素は、１つのコンピュータ上で実現されてもよいし、複数のコンピュータに分散して実現されてもよい。コンピュータは、ＣＰＵ（Central Processing Unit）などのプロセッサと、メモリと、記憶装置（例えば、ハードディスク）とを少なくとも備える。各種装置１３、１５、１８、２０の処理は、それらの処理に対応するプログラムコードがメモリに格納され、プロセッサが各プログラムコードを実行することによって実現されてもよい。各種ＤＢ１１、１２、１４、１６、１７、２１及び情報１９は、コンピュータのハードディスク又はネットワーク上の記憶装置に格納されてもよい。
【００１４】
入力装置３１は、ユーザの意思を修正確率計算システム１０に伝える機能を持つ装置であり、例えば、キーボードやマウスなどである。出力装置３２は、修正確率計算システム１０が出力した結果をユーザが確認するための装置であり、例えば、ディスプレイなどである。
【００１５】
ソースコードＤＢ１１は、ユーザから入力装置３１を介して入力されたソースコードを記憶する。
【００１６】
プロジェクト情報ＤＢ１２は、ユーザから入力装置３１を介して入力された、プログラム開発プロジェクトのメトリクス情報、及び、プログラム開発プロジェクト毎に割り振られたプロジェクトＩＤを記憶する。
【００１７】
静的解析装置１３は、ソースコードに対して、一般的な静的解析を行う装置である。静的解析とは、コンピュータのソフトウェアの解析手法の一種であり、ソースコードを実行することなく解析を行うことである。静的解析として、公知の静的解析ツール及び手法を用いることができる。静的解析装置１３は、ソースコードをソースコードＤＢ１１から取得する。静的解析装置１３は、静的解析の結果（指摘）を、ソースコード、及び、静的解析連番ＩＤと関連付けて静的解析結果ＤＢ１４に格納する。
【００１８】
静的解析結果ＤＢ１４は、静的解析装置１３から受けたソースコードの静的解析の結果（指摘）をソースコード、静的解析連番ＩＤ、及びプロジェクトＩＤと関連付けて記憶する。
【００１９】
ソースコードメトリクス抽出装置１５は、ソースコードに関して、一般的なメトリクスを抽出する装置である。ソースコードメトリクス抽出装置１５は、ソースコードをソースコードＤＢ１１から取得する。ソースコードメトリクス抽出装置１５は、抽出されたソースコードメトリクス情報をソースコードＩＤ及び静的解析連番ＩＤと関連付けてソースコードメトリクスＤＢ１６に格納する。
【００２０】
ソースコードメトリクスＤＢ１６は、ソースコードメトリクス抽出装置１５から受けたソースコードメトリクスを、ソースコードＩＤ及び静的解析連番ＩＤと関連付けて記憶する。
【００２１】
静的解析結果修正判断ＤＢ１７は、ユーザが入力装置３１を介して入力した、静的解析結果に対する「ソースコードを修正する／修正しない」を示す判断情報と、対象の静的解析結果の静的解析結果ＩＤとを記憶する。
【００２２】
条件導出装置１８は、プロジェクト情報ＤＢ１２、静的解析結果ＤＢ１４、及びソースコードメトリクスＤＢ１６に蓄積された各種データと、静的解析結果修正判断ＤＢ１７に蓄積された静的解析結果の判断情報との間の依存関係を分析する。条件導出装置１８は、プロジェクト情報ＤＢ１２、静的解析結果ＤＢ１４、及びソースコードメトリクスＤＢ１６の各種データから、静的解析結果修正判断ＤＢ１７に蓄積された静的解析結果の判断結果が所定の割合以上となる、又は、所定の割合以下となるような条件（以下、「修正確率判定条件」と呼ぶ）を導出する。修正確率判定条件は、静的解析結果ＤＢ１４、ソースコードメトリクスＤＢ１６及びプロジェクト情報ＤＢ１２の中から選択された少なくとも１つの項目に関する条件である。条件導出装置１８は、導出された複数の修正確率判定条件を修正確率判定情報１９として保存する。
【００２３】
修正確率判定条件は、静的解析結果に対応するソースコードが修正される確率を判定するための情報である。例えば、修正確率判定条件は、条件導出装置１８によって導出された条件と、その条件のときの過去の「修正した／修正しない」の割合（以下、「修正割合」と呼ぶ）との組み合わせである。
【００２４】
修正確率計算装置２０は、以下の処理を実行する。
（１）修正確率計算装置２０は、静的解析結果ＤＢ１４と静的解析結果修正判断ＤＢ１７を参照し、静的解析結果ＤＢ１４のうち、関連する判断情報を静的解析結果修正判断ＤＢ１７に持たないものを抽出する。すなわち、ここで抽出された静的解析結果は、現時点で、ユーザによって「修正する／修正しない」の判断が入力されていないものである。
（２）修正確率計算装置２０は、抽出した静的解析結果のそれぞれに関して、プロジェクト情報ＤＢ１２及びソースコードメトリクスＤＢ１６から、関連するプロジェクト情報とソースコードメトリクスを取得する。
（３）修正確率計算装置２０は、上記（２）で取得したプロジェクト情報とソースコードメトリクスに関して修正確率判定情報１９を適用し、上記（１）で抽出した静的解析結果のそれぞれに関して、静的解析結果に対応するソースコードが修正される確率（以下、「修正確率」と呼ぶ）を算出する。
（４）修正確率計算装置２０は、上記（３）で算出した修正確率を修正確率ＤＢ２１に格納する。
【００２５】
修正確率ＤＢ２１は、修正確率計算装置２０において算出された修正確率を記憶する。なお、修正確率は、修正確率判定条件の各条件に対応する修正割合である。なお、複数の修正確率判定条件に合致するデータがあった場合、例えば、修正割合が高い方を修正確率として採用してもよい。
【００２６】
図６は、ソースコードＤＢ１１に登録されているテーブル（ソースコード情報）６００の例である。以下は、テーブル６００のデータ項目を説明する表である。
【００２７】
【表１】
0006609216.tif 000002
【００２８】
ソースコードＩＤ６０１は、ソースコード毎に一意に振られるＩＤである。ソースコードＩＤは他のＤＢと共用して用いられる。プロジェクトＩＤ６０２は、ソースコードが属するプログラム開発プロジェクトのプロジェクトＩＤである。ファイル名６０３は、ソースコードのファイル名である。ファイル種別６０４は、ソースコードのファイルの種類に関する情報である。ファイルの内容６０５は、ソースファイルの内容であり、プログラムコードの情報である。
【００２９】
図７は、プロジェクト情報ＤＢ１２に登録されているテーブル（プロジェクト情報）７００の例である。以下は、テーブル７００のデータ項目を説明する表である。
【００３０】
【表２】
0006609216.tif 000003
【００３１】
プロジェクトＩＤ７０１は、プログラム開発プロジェクト毎に一意に振られるＩＤである。プロジェクトＩＤは他のＤＢと共用して用いられる。プロジェクト名７０２は、プログラム開発プロジェクトの名前である。適用分野７０３は、プログラム開発プロジェクトにより作成されるプログラムが適用される分野である。言語７０４は、プログラム開発プロジェクトで使用される主要なプログラム言語である。開発ステップ数７０５は、プログラム開発プロジェクトで開発されるプログラムで予定されている開発ステップ数である。プラットフォーム７０６は、プログラム開発プロジェクトにより作成されるプログラムが動作するＯＳなどの情報である。
【００３２】
図８は、静的解析結果ＤＢ１４に登録されているテーブル（静的解析結果情報）８００の例である。以下は、テーブル８００のデータ項目を説明する表である。
【００３３】
【表３】
0006609216.tif 000004
【００３４】
静的解析結果ＩＤ８０１は、静的解析結果の指摘毎に一意に振られるＩＤである。静的解析結果ＩＤは他のＤＢと共用して用いられる。静的解析連番ＩＤ８０２は、静的解析の実行毎に割り振られるＩＤである。ルールＩＤ８０３は、静的解析結果の指摘を検出した静的解析の検出ルールのＩＤである。ソースコードＩＤ８０４は、静的解析結果の指摘を検出したソースコードのソースコードＩＤである。行番号８０５は、静的解析結果の指摘を検出したソースコード上の場所の行番号である。カラム８０６は、静的解析結果の指摘を検出したソースコード上の場所のカラムである。指摘メッセージ８０７は、静的解析結果の指摘の内容をユーザに示すメッセージである。なお、テーブル８００は、これらの項目に加えて、プロジェクトＩＤなどのデータ項目を備えてもよい。この場合、静的解析結果ＤＢ１４とプロジェクト情報ＤＢ１２との関連付けが容易になる。
【００３５】
図９は、ソースコードメトリクスＤＢ１６に登録されているテーブル（ソースコードメトリクス情報）９００の例である。以下は、テーブル９００のデータ項目を説明する表である。
【００３６】
【表４】
0006609216.tif 000005
【００３７】
ソースコードメトリクスＩＤ９０１は、ソースコードメトリクス毎に一意に振られるＩＤである。ソースコードメトリクスＩＤは、他のＤＢと共用して用いられる。静的解析連番ＩＤ９０２は、静的解析の実行毎に割り振られるＩＤである。ソースコードＩＤ９０３は、ソースコードメトリクスを抽出したソースコードのソースコードＩＤである。関数名９０４は、ソースコードメトリクスの対象となる関数の名前である。開始行９０５は、ソースコードメトリクスを抽出したソースコード上の範囲の開始行番号である。終了行９０６は、ソースコードメトリクスを抽出したソースコード上の範囲の終了行番号である。実ステップ数９０７は、ソースコードメトリクスを抽出したソースコード上の範囲において空行及びコメント行を除いた行数である。コメント率９０８は、ソースコードメトリクスを抽出したソースコード上の範囲の実ステップ数に対するコメント行数の割合である。複雑度９０９は、ソースコードメトリクスの対象となる関数のサイクロマティック複雑度である。クローン率９１０は、ソースコードメトリクスを抽出したソースコード上の範囲における、他のソースからソースコードを流用した割合である。なお、テーブル９００は、これらの項目に加えて、プロジェクトＩＤなどのデータ項目を備えてもよい。この場合、ソースコードメトリクスＤＢ１６とプロジェクト情報ＤＢ１２との関連付けが容易になる。
【００３８】
図１０は、静的解析結果修正判断ＤＢ１７に登録されているテーブル（静的解析結果修正判断情報）１０００の例である。以下は、テーブル１０００のデータ項目を説明する表である。
【００３９】
【表５】
0006609216.tif 000006
【００４０】
静的解析結果ＩＤ１００１は、対象の静的解析結果の指摘のＩＤである。判断１００２は、静的解析結果の指摘に対してユーザが入力した、「ソースコードを修正する／修正しない」を示す情報である。コメント１００３は、ユーザによる修正の判断に付随してユーザが自由記述したコメントである。
【００４１】
図１１は、修正確率ＤＢ２１に登録されているテーブル１１００の例である。以下は、テーブル１１００のデータ項目を説明する表である。
【００４２】
【表６】
0006609216.tif 000007
【００４３】
静的解析結果ＩＤ１１０１は、対象の静的解析結果の指摘のＩＤである。修正確率１１０２は、修正確率計算装置２０が算出した、対象の静的解析結果に対応するソースコードが将来修正される確率である。
【００４４】
図２は、実施例に係るソースコードの登録処理を示すフローチャートの例である。
【００４５】
以下のフローは、図３で示される静的解析の実行処理、図４で示される修正確率判定条件の導出処理、及び、図５で示される静的解析結果の指摘に対しユーザが修正するかどうかの判断を入力する処理とは関係なく、ユーザのタイミングで不定期に繰り返し実行される。
【００４６】
（ステップ２０１）
修正確率計算システム１０は、プロジェクト情報ＤＢ１２に記憶されているテーブル７００から、プロジェクト名７０２を一覧にして出力装置３２に出力する。ユーザは、修正確率計算システム１０に登録するソースコードが属するプロジェクトを出力装置３２に出力されたプロジェクト名７０２の一覧から検索する。ソースコードが属するプロジェクトがプロジェクト名７０２の一覧に存在する場合は、ステップ２０２に進む。一方、ソースコードが属するプロジェクトがプロジェクト名７０２の一覧に存在しない場合は、ステップ２０３に進む。
【００４７】
（ステップ２０２）
ユーザは、入力装置３１を介して、ソースコードが属するプロジェクトを、プロジェクト名７０２の一覧から選択する。修正確率計算システム１０は、ユーザが選択したプロジェクトのプロジェクトＩＤを記憶する。続いて、ステップ２０４に進む。
【００４８】
（ステップ２０３）
ユーザは、入力装置３１を介して新しくプロジェクト情報を登録することを修正確率計算システム１０に伝える。修正確率計算システム１０は、プロジェクト情報を入力させるＵＩ（User Interface）を出力装置３２に表示させる。ユーザは入力装置３１を介して以下のプロジェクト情報を入力する。
・プロジェクト名：プログラム開発プロジェクトの名前
・適用分野：プログラム開発プロジェクトにより作成されるプログラムが適用される分野（Ｗｅｂアプリケーション、デスクトップアプリケーション、ミドルウェア、ドライバ、ファームウェアなど）
・言語：プログラム開発プロジェクトで使用される主要なプログラム言語
・開発ステップ数：プログラム開発プロジェクトで開発されるプログラムで予定されている開発ステップ数
・プラットフォーム：プログラム開発プロジェクトにより作成されるプログラムが動作するＯＳなど
【００４９】
修正確率計算システム１０は、プログラム開発プロジェクト毎に一意なプロジェクトＩＤを作成し、記憶する。修正確率計算システム１０は、ユーザが入力した、プロジェクト名、適用分野、言語、開発ステップ数、及び、プラットフォーム、並びに、一意に作成されたプロジェクトＩＤを、プロジェクト情報ＤＢ１２に格納する。続いて、ステップ２０４に進む。
【００５０】
（ステップ２０４）
修正確率計算システム１０は、登録するソースコードの情報を入力するＵＩを出力装置３２に表示させる。ユーザは、入力装置３１を介して以下のソースコードの情報を入力する。
・ソースコードが記録されているファイルのパス
・ソースコードのファイル種別：Ｊａｖａソース、Ｃ言語ヘッダなど
【００５１】
ユーザからの入力後、修正確率計算システム１０は、以下の処理を行う。
・修正確率計算システム１０は、ソースコード毎に一意なソースコードＩＤを作成する。
・修正確率計算システム１０は、ユーザが入力したソースコードが記録されているファイルのパスで示されるファイルの内容を読み込み、記憶する。
・修正確率計算システム１０は、ユーザが入力したソースコードが記録されているファイルのパスからファイル名を抽出する。
修正確率計算システム１０は、ソースコードＩＤ、ステップ２０２又はステップ２０３で記憶したプロジェクトＩＤ、ファイル名、ファイル種別、及びファイルの内容をソースコードＤＢ１１に格納する。
【００５２】
（ステップ２０５）
ユーザが、ソースコードの登録処理を終了する意思を持つ場合、入力装置３１を介して修正確率計算システム１０に終了メッセージを入力する。この場合、修正確率計算システム１０は、ステップ２０１からの一連の手順を終了させる。一方、ユーザが、ソースコードの登録処理を続ける意思を持つ場合、ステップ２０４に戻り、ソースコード情報を入力する操作を繰り返す。
【００５３】
図３は、実施例に係る静的解析実行処理を示すフローチャートの例である。
【００５４】
このフローは、あらかじめ図２で示されるソースコードの登録処理が一回以上実行済みであり、静的解析の実行日時がタイマー２２に設定されている状態でスタートする。なお、このフローの実行には、図４で示される修正確率判定条件の導出処理、及び、図５で示される静的解析結果の指摘に対しユーザが修正するかどうかの判断を入力する処理の実行は関係ない。
【００５５】
（ステップ３０１）
タイマー２２は、現在時刻を監視し、設定されている静的解析の実行日時になっているか判定する。静的解析の実行日時になった場合、タイマー２２は、静的解析装置１３に処理の開始を通知し、ステップ３０２に進む。一方、静的解析の実行日時となっていない場合、タイマー２２は、引き続き現在時刻の監視を続ける。
【００５６】
（ステップ３０２）
静的解析装置１３は、一意な静的解析連番ＩＤを作成する。そして、静的解析装置１３は、ソースコードＤＢ１１から最新のソースコードのセットを取得し、静的解析を行う。静的解析装置１３は、静的解析の結果、ソースコードに対する指摘のリストを取得する。静的解析の指摘は、例えば以下のデータを含む。
・静的解析の指摘毎に一意な静的解析結果ＩＤ
・静的解析の検出ルールＩＤ
・指摘を検出したソースコードのソースコードＩＤ
・指摘を検出したソースコード上の行番号及びカラム
・指摘の内容をユーザに示すメッセージ
【００５７】
静的解析装置１３は、静的解析の指摘に関連する静的解析結果ＩＤ、検出ルールＩＤ、ソースコードＩＤ、行番号、カラム、指摘メッセージ、及び、作成した静的解析連番ＩＤを関連付けて静的解析結果ＤＢ１４に格納する。続いて、ステップ３０３に進む。
【００５８】
（ステップ３０３）
ソースコードメトリクス抽出装置１５は、ステップ３０２で静的解析を行ったソースコードのセットに対し、これらのソースコードのソースコードメトリクスを抽出する。ソースコードメトリクスは、例えば以下のデータを含む。
・ソースコードメトリクス毎に一意なソースコードメトリクスＩＤ
・ソースコードメトリクスを抽出したソースコードのソースコードＩＤ
・ソースコードメトリクスの対象となる関数の名前
・ソースコードメトリクスを抽出したソースコード上の範囲の開始行及び終了行
・ソースコードメトリクスを抽出したソースコード上の範囲において、空行及びコメント行を除いたステップ数である、実ステップ数
・ソースコードメトリクスを抽出したソースコード上の範囲において、実ステップ数に対するコメント行数の割合である、コメント率
・ソースコードメトリクスを抽出したソースコード上の範囲のサイクロマティック複雑度
・ソースコードメトリクスを抽出したソースコード上の範囲における、他のソースからソースコードを流用した割合である、クローン率
【００５９】
ソースコードメトリクス抽出装置１５は、ソースコードメトリクスに関連するソースコードメトリクスＩＤ、ソースコードＩＤ、関数の名前、開始行、終了行、実ステップ数、コメント率、複雑度、クローン率、及び、静的解析連番ＩＤを関連付けてソースコードメトリクスＤＢ１６に格納する。続いて、ステップ３０４に進む。
【００６０】
（ステップ３０４）
修正確率計算装置２０は、修正確率判定情報１９が存在するかを判定する。修正確率判定情報１９が存在する場合、ステップ３０５に進む。一方、修正確率判定情報１９が存在しない場合（すなわち、図４で示される修正確率判定条件の導出処理がまだ実行されていない場合）、ステップ３０１に戻る。
【００６１】
（ステップ３０５）
修正確率計算装置２０は、静的解析結果ＤＢ１４に記憶されている静的解析結果の指摘のうち、現時点で「ソースコードを修正する／修正しない」の判断が入力されていない指摘を抽出する。修正確率計算装置２０は、抽出された静的解析結果の指摘に対して修正確率判定情報１９の修正確率判定条件を適用し、修正確率を算出する。修正確率計算装置２０は、算出した修正確率を修正確率ＤＢ２１に格納する。修正確率計算装置２０は、具体的には以下の処理を実行する。
【００６２】
（１−１）修正確率計算装置２０は、静的解析結果修正判断ＤＢ１７に格納されているデータのうち、判断１００２が「修正する」又は「修正しない」となっているデータを集め、それらデータの静的解析結果ＩＤ１００１のリストを作成する。
（１−２）修正確率計算装置２０は、静的解析結果ＤＢ１４に格納されているデータのうち、静的解析結果ＩＤ８０１が（１−１）で作成した静的解析結果ＩＤのリストに含まれないデータを集める。ここで集めたデータが、現時点で「ソースコードを修正する／修正しない」の判断が入力されていない指摘のリストとなる。
【００６３】
修正確率計算装置２０は、（１−２）で得たリストの個々のデータについて、以下の手順を実行する。
（２−１）修正確率計算装置２０は、（１−２）で得たリストのソースコードＩＤ８０４を使用して、ソースコードＤＢ１１から、同じソースコードＩＤを持つソースコード情報を取得する。
（２−２）修正確率計算装置２０は、（２−１）のソースコード情報のプロジェクトＩＤ６０２を使用して、プロジェクト情報ＤＢ１２から同じプロジェクトＩＤを持つプロジェクト情報を取得する。
（２−３）修正確率計算装置２０は、（１−２）で得たリストの静的解析連番ＩＤ８０２、ソースコードＩＤ８０４、行番号８０５を記憶する。修正確率計算装置２０は、ソースコードメトリクスＤＢ１６から、静的解析連番ＩＤ８０２及びソースコードＩＤ８０４と一致し、かつ、行番号８０５がソースコードメトリクスの開始行９０５と終了行９０６の範囲に含まれるソースコードメトリクス情報を取得する。
（２−４）修正確率計算装置２０は、（１−２）で得たリストの個々のデータについて、プロジェクト情報とソースコードメトリクス情報を参照し、修正確率判定情報１９の修正確率判定条件に合致するデータを見つける。修正確率計算装置２０は、合致した修正確率判定条件に対応する修正割合（すなわち、「修正する／修正しない」の割合）を、そのデータの修正確率として出力する。なお、「修正しない」の割合であった場合、修正確率計算装置２０は、１００％から「修正しない」の割合を引いた割合を、修正確率として出力する。また、複数の修正確率判定条件に合致するデータの場合、例えば、修正確率が高い方を採用してもよい。例えば、修正確率が８０％の修正確率判定条件と、修正確率が９０％の修正確率判定条件に合致するデータがあった場合、修正確率計算装置２０は、そのデータの修正確率を９０％としてもよい。データが全ての修正確率判定条件に合致しない場合、修正確率計算装置２０は、そのデータの修正確率を「判断できない（−）」とする。
（２−５）修正確率計算装置２０は、（２−４）で求めた修正確率を、修正確率ＤＢ２１に格納する。
【００６４】
修正確率計算装置２０は、（１−２）で得たリストの全てのデータについて修正確率を修正確率ＤＢ２１に格納し終えたら、ステップ３０１に戻り、以降、処理を繰り返す。
【００６５】
図４は、実施例に係る修正確率判定条件の導出処理を示すフローチャートの例である。
【００６６】
このフローは、あらかじめ図２で示されるソースコードの登録処理が一回以上実行済みであり、解析結果による指摘の修正確率判定条件の導出を実行する日時がタイマー２２に設定されている状態でスタートする。なお、このフローの実行には、図３で示される静的解析の実行処理、及び、図５で示される静的解析結果の指摘に対しユーザが修正するかどうかの判断を入力する処理とは関係ない。
【００６７】
（ステップ４０１）
タイマー２２は、現在時刻を監視し、設定されている修正確率判定条件の導出の実行日時になっているか判定する。修正確率判定条件の導出の実行日時になった場合、タイマー２２は、条件導出装置１８に処理の開始を通知し、ステップ４０２に進む。一方、修正確率判定条件の導出の実行日時となっていない場合、タイマー２２は、引き続き現在時刻の監視を続ける。
【００６８】
（ステップ４０２）
条件導出装置１８は、静的解析結果ＤＢ１４に静的解析結果の指摘が記憶されているかを確認する。静的解析結果の指摘が記憶されている場合は、ステップ４０３に進む。一方、静的解析結果の指摘が記憶されていない場合は、ステップ４０１に戻る。
【００６９】
（ステップ４０３）
条件導出装置１８は、プロジェクト情報ＤＢ１２、静的解析結果ＤＢ１４、及びソースコードメトリクスＤＢ１６に蓄積された各種データと、静的解析結果修正判断ＤＢ１７に蓄積された静的解析結果の判断情報との間の依存関係を分析する。条件導出装置１８は、プロジェクト情報ＤＢ１２、静的解析結果ＤＢ１４、及びソースコードメトリクスＤＢ１６の各種データから、静的解析結果修正判断ＤＢ１７に蓄積された静的解析結果の判断結果が一定の確率以上となる／一定の確率以下となるような修正確率判定条件を導出する。条件導出装置１８は、具体的には以下の処理を実行する。
【００７０】
（１）条件導出装置１８は、静的解析結果修正判断ＤＢ１７に格納されているデータのうち、判断１００２のデータ項目が「修正する」又は「修正しない」となっているデータを集める。
【００７１】
（２）条件導出装置１８は、（１）で得たそれぞれのデータに対して、以下の処理を実行する。
（２−１）条件導出装置１８は、静的解析結果ＤＢ１４から、（１）で取得したデータの静的解析結果ＩＤ１１０１と同じ静的解析結果ＩＤを持つデータを取得し、（１）で取得したデータと連結する。
（２−２）条件導出装置１８は、ソースコードＤＢ１１から、（２−１）で得たデータのソースコードＩＤ８０４と同じソースコードＩＤを持つデータを取得し、そのデータのプロジェクトＩＤ６０２を取得する。条件導出装置１８は、プロジェクト情報ＤＢ１２から、取得したプロジェクトＩＤ６０２と同じプロジェクトＩＤを持つデータを取得し、（２−１）で取得したデータと連結する。
（２−３）条件導出装置１８は、（２−２）で得たデータから、静的解析連番ＩＤ８０２、ソースコードＩＤ８０４、及び行番号８０５を取得する。条件導出装置１８は、ソースコードメトリクスＤＢ１６から、静的解析連番ＩＤ８０２及びソースコードＩＤ８０４と一致し、かつ、行番号８０５がソースコードメトリクスの開始行９０５と終了行９０６の範囲に含まれるデータを取得し、（２−２）で取得したデータと連結する。
【００７２】
（３）条件導出装置１８は、（２−３）までの処理で得たデータにおいて、判断１００２の値が「修正する」、又は、「修正しない」となる割合が一定の基準（例えば、８０％以上）を満たすデータの抽出条件を、条件を変更しながら試行することにより見つける。ここで抽出された条件が、静的解析結果の判断結果が一定の確率以上となる／一定の確率以下となるような修正確率判定条件となる。以下は、当該処理で抽出された条件の一例である。
【００７３】
（ａ）適用分野７０３が「オンラインシステム」の場合、判断１００２の「修正する」の割合が１００％である。
（ｂ）ルールＩＤ８０３が「ＡｒｒａｙＩｎｄｅｘＯｕｔＯｆＢｏｕｎｄｓ」の場合、判断１００２の「修正する」の割合が９５％である。
（ｃ）適用分野７０３が「組み込みシステム」であり、かつ、ルールＩＤ８０３が「ＤｏＮｏｔＵｓｅＧｏｔｏ」である場合、判断１００２の「修正しない」の割合が９５％である。
（ｄ）ルールＩＤ８０３が「ＵｎｉｎｉｔｉａｌｉｚｅｄＶａｒｉａｂｌｅ」であり、かつ、実ステップ数９０７が５００ステップ以上の場合、判断１００２の「修正する」の割合が８５％である。
（ｅ）ルールＩＤ８０３が「ＲｅｓｏｕｒｃｅＬｅａｋ」であるデータと、ルールＩＤ８０３が「ＭａｎｙＲｅｔｕｒｎＳｔａｔｅｍｅｎｔ」であるデータのうち、ソースコードＩＤ８０４及び行番号８０５が同じであるデータに関して、ルールＩＤ８０３が「ＲｅｓｏｕｒｃｅＬｅａｋ」であるデータでは、判断１００２の「修正する」の割合が９０％である。
【００７４】
上記で示した条件は一例であり、これらに限定されない。例えば、プロジェクト情報（プロジェクト情報ＤＢ１２）、静的解析結果情報（静的解析結果ＤＢ１４）及びソースコードメトリクス情報（ソースコードメトリクスＤＢ１６）の中の１つのデータ項目、又は、これらのＤＢ１２、１４、１６の中の複数のデータ項目の組み合わせが修正確率判定条件として抽出されてよい。
【００７５】
（４）条件導出装置１８は、（３）で取得した条件と修正割合の組み合わせを、修正確率判定条件として保存する。条件導出装置１８は、複数の修正確率判定条件を抽出し、これらの修正確率判定条件を修正確率判定情報１９として保存する。例えば、（ａ）〜（ｃ）の場合、修正確率判定情報１９は、以下のようなリストの情報となる。続いてステップ４０４に進む。
【００７６】
【表７】
0006609216.tif 000008
【００７７】
（ステップ４０４）
修正確率計算装置２０は、静的解析結果ＤＢ１４に記憶されている静的解析結果の指摘のうち、現時点で「ソースコードを修正する／修正しない」の判断が入力されていない指摘を抽出する。修正確率計算装置２０は、抽出された静的解析結果の指摘に対して修正確率判定情報１９の修正確率判定条件を適用し、修正確率を算出する。修正確率計算装置２０は、算出した修正確率を修正確率ＤＢ２１に格納する。修正確率計算装置２０は、具体的には以下の処理を実行する。なお、以下の処理は、ステップ３０５と同じである。
【００７８】
（１−１）修正確率計算装置２０は、静的解析結果修正判断ＤＢ１７に格納されているデータのうち、判断１００２が「修正する」又は「修正しない」となっているデータを集め、それらデータの静的解析結果ＩＤ１００１のリストを作成する。
（１−２）修正確率計算装置２０は、静的解析結果ＤＢ１４に格納されているデータのうち、静的解析結果ＩＤ８０１が（１−１）で作成した静的解析結果ＩＤのリストに含まれないデータを集める。ここで集めたデータが、現時点で「ソースコードを修正する／修正しない」の判断が入力されていない指摘のリストとなる。
【００７９】
修正確率計算装置２０は、（１−２）で得たリストの個々のデータについて、以下の手順を実行する。
（２−１）修正確率計算装置２０は、（１−２）で得たリストのソースコードＩＤ８０４を使用して、ソースコードＤＢ１１から、同じソースコードＩＤを持つソースコード情報を取得する。
（２−２）修正確率計算装置２０は、（２−１）のソースコード情報のプロジェクトＩＤ６０２を使用して、プロジェクト情報ＤＢ１２から同じプロジェクトＩＤを持つプロジェクト情報を取得する。
（２−３）修正確率計算装置２０は、（１−２）で得たリストの静的解析連番ＩＤ８０２、ソースコードＩＤ８０４、行番号８０５を記憶する。修正確率計算装置２０は、ソースコードメトリクスＤＢ１６から、静的解析連番ＩＤ８０２及びソースコードＩＤ８０４と一致し、かつ、行番号８０５がソースコードメトリクスの開始行９０５と終了行９０６の範囲に含まれるソースコードメトリクス情報を取得する。
（２−４）修正確率計算装置２０は、（１−２）で得たリストの個々のデータについて、プロジェクト情報とソースコードメトリクス情報を参照し、修正確率判定情報１９の修正確率判定条件に合致するデータを見つける。修正確率計算装置２０は、合致した修正確率判定条件に対応する修正割合を、そのデータの修正確率として出力する。なお、「修正しない」の割合であった場合、修正確率計算装置２０は、１００％から「修正しない」の割合を引いた割合を、修正確率として出力する。また、複数の修正確率判定条件に合致するデータの場合、例えば、修正確率が高い方を採用してもよい。例えば、修正確率が８０％の修正確率判定条件と、修正確率が９０％の修正確率判定条件に合致するデータがあった場合、修正確率計算装置２０は、そのデータの修正確率を９０％としてもよい。データが全ての修正確率判定条件に合致しない場合、修正確率計算装置２０は、そのデータの修正確率を「判断できない（−）」とする。
（２−５）修正確率計算装置２０は、（２−４）で求めた修正確率を、修正確率ＤＢ２１に格納する。
【００８０】
修正確率計算装置２０は、（１−２）で得たリストの全てのデータについて修正確率を修正確率ＤＢ２１に格納し終えたら、ステップ４０１に戻り、以降、処理を繰り返す。
【００８１】
図５は、実施例に係る静的解析結果の指摘に対しユーザが修正するかどうかの判断を入力する処理を示すフローチャートの例である。
【００８２】
図１２は、静的解析結果の指摘に対し、ユーザが修正するかどうかの判断を入力する画面の例である。画面１２００は、リスト表示部１２０１と、ソースコード表示部１２０２と、判断入力部１２０３とを備える。リスト表示部１２０１に表示されるリストは、ルールＩＤ１２１１と、ファイル名１２１２と、行番号１２１３と、指摘メッセージ１２１４と、修正確率１２１５と、判断１２１６とを含む。ルールＩＤ１２１１は、静的解析結果ＤＢ１４のルールＩＤ８０３に対応する。ファイル名１２１２は、ソースコードＤＢ１１のファイル名６０３に対応する。行番号１２１３は、静的解析結果ＤＢ１４の行番号８０５に対応する。指摘メッセージ１２１４は、静的解析結果ＤＢ１４の指摘メッセージ８０７に対応する。修正確率１２１５は、修正確率ＤＢ２１の修正確率１１０２に対応する。判断１２１６は、静的解析結果修正判断ＤＢ１７の判断１００２に対応する。
【００８３】
図５のフローは、あらかじめ、図３で示される静的解析処理が一回以上実行済みである状態でスタートする。なお、このフローの実行には、図３で示される静的解析の実行処理、及び、図４で示される修正確率判定条件の導出処理の実行は関係なく、また、ユーザのタイミングで不定期に繰り返し実行される。
【００８４】
（ステップ５０１）
ユーザは、入力装置３１を介し、静的解析結果の一覧を表示するリクエストを、修正確率計算システム１０に送る。修正確率計算システム１０は、静的解析結果ＤＢ１４、ソースコードＤＢ１１、修正確率ＤＢ２１、及び、静的解析結果修正判断ＤＢ１７からデータを取得し、取得したデータをリスト表示部１２０１に出力する。続いてステップ５０２に進む。
【００８５】
この際、ユーザは、プロジェクトを特定する情報やソースコードを特定する情報を同時に入力することで、静的解析結果の一覧に表示するデータを指定することも可能である。例えば、プロジェクト名が指定されている場合、修正確率計算システム１０は、プロジェクト情報ＤＢ１２を参照して、プロジェクト名７０２に対応するプロジェクトＩＤ７０１を取得し、ソースコードＤＢ１１を参照して、プロジェクトＩＤ７０１に対応するソースコードＩＤ６０１を取得する。ここで取得したソースコードＩＤ６０１は、指定されたプロジェクト名に対応するソースコードＩＤである。修正確率計算システム１０は、静的解析結果ＤＢ１４、ソースコードＤＢ１１、修正確率ＤＢ２１、及び、静的解析結果修正判断ＤＢ１７から、取得したソースコードＩＤに対応するデータを選択し、新しいリストとしてもよい。同様に、修正確率計算システム１０は、ソースコードを特定する情報が指定されている場合、静的解析結果ＤＢ１４、ソースコードＤＢ１１、修正確率ＤＢ２１、及び、静的解析結果修正判断ＤＢ１７から、指定されたソースコードに対応するデータを選択し、新しいリストとしてもよい。修正確率計算システム１０は、上記の処理で取得したリストを出力装置３２に出力してもよい。
【００８６】
また、別の例として、修正確率計算システム１０は、現時点で「修正する／修正しない」の判断が入力されていないデータのリストを出力装置３２に出力してもよい。
【００８７】
（ステップ５０２）
ユーザは、リスト表示部１２０１に出力されたリストを確認し、対象データ（ある特定の行）を選択する。このとき、図１２に示すように、修正確率計算システム１０は、対象のデータに対応するソースコードのファイルの内容６０５をソースコード表示部１２０２に表示する。この構成によれば、リスト表示部１２０１に修正確率が表示されているため、ユーザは、リスト表示部１２０１に出力されたリストの中で修正確率が高いデータ（すなわち、確認する優先度が高いソースコード）を選択し、ソースコードの内容を確認したり、判断結果を入力することができる。続いてステップ５０３に進む。
【００８８】
（ステップ５０３）
修正確率計算システム１０は、ステップ５０２で選択された対象データについて静的解析結果修正判断ＤＢ１７を参照し、判断１００２にユーザの判断結果がすでに入力されているかを判定する。判断１００２にユーザの判断結果がすでに入力されている場合（ＹＥＳ）、ステップ５０４に進む。一方、そうでない場合（ＮＯ）、ステップ５０５に進む。
【００８９】
（ステップ５０４）
修正確率計算システム１０は、対象データの静的解析結果修正判断ＤＢ１７の判断１００２、及び、コメント１００３の情報を判断入力部１２０３に表示する。続いてステップ５０５に進む。
【００９０】
（ステップ５０５）
ユーザは、ステップ５０２で選択された対象データに対して、判断結果を入力する。ユーザは、入力装置３１を介して判断入力部１２０３において、判断結果（修正する／修正しない／保留のいずれか）を入力する。その際、ユーザは、判断入力部１２０３においてコメントを入力してもよい。続いてステップ５０６に進む。なお、ユーザの判断結果がすでに入力されている場合、ステップ５０５及び次のステップ５０６を省略することができる。また、ユーザは、ステップ５０５において、すでに入力されている判断結果及びコメントを修正することも可能である。
【００９１】
（ステップ５０６）
修正確率計算システム１０は、ステップ５０５での判断結果及びコメントを、それぞれ、判断１００２及びコメント１００３として静的解析結果修正判断ＤＢ１７に格納する。続けてステップ５０７に進む。
【００９２】
（ステップ５０７）
ユーザが、静的解析結果に対して判断結果を入力する処理を終了する意思を持つ場合、入力装置３１を介して修正確率計算システム１０に終了メッセージを入力する。一方、ユーザが、静的解析結果に対して判断結果を入力する処理を続ける意思を持つ場合、ステップ５０２に戻り、処理を繰り返す。
【００９３】
上記の実施例におけるシステムは、過去の静的解析結果の判断結果と、当該過去の時点でのソースコードメトリクスの情報及びプログラム開発プロジェクトの情報に基づいて、修正確率判定条件を導出する条件導出装置１８と、分析対象の静的解析結果に対応するソースコードメトリクスの情報及びプログラム開発プロジェクトの情報に対して修正確率判定条件を適用し、分析対象の静的解析結果に対応するソースコードの修正確率を算出する修正確率計算装置２０と、分析対象の静的解析結果と修正確率とを表示する出力装置３２とを備える。
【００９４】
より具体的には、上記の実施例におけるシステムは、以下の処理を実行する。
（１）条件導出装置１８は、過去の静的解析結果の指摘及び当該指摘に対するユーザの判断結果と、過去のソースコードメトリクスの情報及びプログラム開発プロジェクトの情報とを分析し、修正確率判定条件を導出する。修正確率判定条件は、静的解析結果の判断結果が一定の確率以上となる／一定の確率以下となるような条件である。修正確率判定条件は、条件と判断結果の割合の組み合わせを含む。
（２）修正確率計算装置２０は、新規の静的解析結果、ソースコードメトリクスの情報及びプログラム開発プロジェクトの情報に修正確率判定条件を適用し、該当する修正確率判定条件の判断結果の割合を修正確率として出力する。
（３）出力装置３２は、新規の静的解析結果と、その静的解析結果の修正確率とを表示する。出力装置３２は、新規の静的解析結果の判断結果を入力するためのインタフェースを表示する。
（４）ユーザは、優先順位が高い（例えば、修正確率が高い）静的解析結果から確認していき、「ソースコードを修正する／修正しない」の判断結果を入力する。修正確率計算システム１０は、インタフェースを介して入力された判断結果を、静的解析結果の判断結果として静的解析結果修正判断ＤＢ１７に登録する。
（５）（１）〜（４）の処理を繰り返し実行することで、静的解析結果の指摘と判断結果が蓄積され、条件導出装置１８による修正確率判定条件の導出、及び、修正確率計算装置２０による修正確率の計算の精度が向上する。
【００９５】
従来では、モジュールの変更履歴のみに基づいて静的解析結果の指摘に優先順位付けを行っていたため、優先順位付けの精度が低いという課題があった。上記の実施例の構成によれば、過去の静的解析結果の判断結果と、当該過去の静的解析結果に対応するソースコードメトリクスの情報及びプログラム開発プロジェクトの情報との関係から修正確率判断条件を導出し、導出された修正確率判断条件を用いて、静的解析結果の指摘に対応するソースコードが修正される確率（修正確率）を求めることができる。ユーザは、修正確率が高い静的解析結果の指摘のソースコードから確認していくことができ、静的解析結果の指摘の確認を効率的に行うことが可能となる。
【００９６】
なお、上記の実施例では、出力装置３２上において、新規の静的解析結果と、その静的解析結果の修正確率とが表示されるが、この構成に限定されない。修正確率計算システム１０は、どの静的解析結果の指摘から確認すればよいかの情報をユーザに対して提示できればよく、静的解析結果が順位付けされた形式で表示されればよい。例えば、出力装置３２において、修正確率の具体的な数値が表示される必要はなく、（１）静的解析結果が、修正確率が高い順に並んで表示される、（２）修正確率の数値に応じて静的解析結果をいくつかのカテゴリに分け、当該カテゴリが分かるような形式で静的解析結果が表示される、などでもよい。したがって、修正確率計算装置２０は、修正確率判定情報１９を用いて、分析対象のソースコードに関する静的解析結果の優先順位付けを行うように構成されればよい。また、修正確率が低い静的解析結果の情報も有用になる場合があり、出力装置３２には、修正確率が高いことを示す情報だけでなく、修正確率が低いということを示す情報が表示されてもよい。これは、ユーザが、修正確率が低い静的解析結果については確認を後回しにするなどして、静的解析結果の指摘を効率的に確認することが可能となるためである。
【００９７】
また、修正確率判定情報１９は、プロジェクト情報ＤＢ１２、静的解析結果ＤＢ１４、及びソースコードメトリクスＤＢ１６の各種データから静的解析結果の修正確率を計算する計算式でもよい。例えば、修正確率が以下のように計算されてもよい。
（１）条件導出装置１８は、過去の静的解析結果の指摘及び当該指摘に対するユーザの判断結果と、過去のソースコードメトリクスの情報及びプログラム開発プロジェクトの情報とを多変量解析し、静的解析結果の指摘に対応するソースコードが修正されるときのソースコードメトリクス及びプログラム開発プロジェクトのメトリクスの重みづけパラメータを算出する。ここで、過去の「修正した／修正しなかった」という情報が多変量解析の正解情報（目的変数）である。また、過去の静的解析結果の指摘、過去のソースコードメトリクスの情報及びプログラム開発プロジェクトの情報が、多変量解析の原因情報（説明変数）である。条件導出装置１８は、プロジェクト情報ＤＢ１２、静的解析結果ＤＢ１４、ソースコードメトリクスＤＢ１６の各種データから静的解析結果の修正確率を予測できる式を導出する。
（２）修正確率計算装置２０は、上記の式を用いて、新規の静的解析結果、ソースコードメトリクスの情報及びプログラム開発プロジェクトの情報から、新規の静的解析結果の修正確率を算出する。
（３）（１）〜（２）の処理を繰り返し実行することで、重みづけパラメータの精度を継続的に向上させる。
【００９８】
本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。上記実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることもできる。また、ある実施例の構成に他の実施例の構成を加えることもできる。また、各実施例の構成の一部について、他の構成を追加・削除・置換することもできる。
【００９９】
上記の各構成、機能などは、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、ファイルなどの情報は、メモリや、ハードディスク、ＳＳＤ（Solid State Drive）などの記録装置、または、ＩＣカード、ＳＤカード、ＤＶＤなどの記録媒体に置くことができる。また、上記の各構成などは、それらの一部又は全部を、例えば集積回路で設計するなどによりハードウェアで実現してもよい。
【０１００】
上述の実施例において、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。全ての構成が相互に接続されていてもよい。
【符号の説明】
【０１０１】
１０      …修正確率計算システム
１１      …ソースコードＤＢ
１２      …プロジェクト情報ＤＢ
１３      …静的解析装置
１４      …静的解析結果ＤＢ
１５      …ソースコードメトリクス抽出装置
１６      …ソースコードメトリクスＤＢ
１７      …静的解析結果修正判断ＤＢ
１８      …条件導出装置
１９      …修正確率判定情報
２０      …修正確率計算装置
２１      …修正確率ＤＢ
２２      …タイマー
３１      …入力装置
３２      …出力装置
【図１】
0006609216.tif 000009
【図２】
0006609216.tif 000010
【図３】
0006609216.tif 000011
【図４】
0006609216.tif 000012
【図５】
0006609216.tif 000013
【図６】
0006609216.tif 000014
【図７】
0006609216.tif 000015
【図８】
0006609216.tif 000016
【図９】
0006609216.tif 000017
【図１０】
0006609216.tif 000018
【図１１】
0006609216.tif 000019
【図１２】
0006609216.tif 000020