(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0010】
以下、添付図面を参照して本発明の実施例について説明する。添付図面は本発明の原理に則った具体的な実施例を示しているが、これらは本発明の理解のためのものであり、決して本発明を限定的に解釈するために用いられるものではない。
【0011】
以下の実施例は、ソースコードの静的解析結果に対してソースコード以外の情報を多面的に分析し、ソースの修正が必要かを予測する技術に関する。静的解析により検出された指摘に対する優先度は、モジュールの変更履歴以外に、ソースコードメトリクス及びプログラム開発プロジェクトのメトリクスとも依存関係を持つ。以下の実施例は、ソースコードの静的解析結果と、ソースコードメトリクス及びプログラム開発プロジェクトのメトリクスとの間の関係を考慮して、静的解析結果の優先順位付けを行うシステムである。
【0012】
図1は、本発明の実施例に係るシステム構成の例である。修正確率計算システム10は、ソースコードDB11と、プロジェクト情報DB12と、静的解析装置13と、静的解析結果DB14と、ソースコードメトリクス抽出装置15と、ソースコードメトリクスDB16と、静的解析結果修正判断DB17と、条件導出装置18と、修正確率判定情報19と、修正確率計算装置20と、修正確率DB21と、タイマー22とを備える。
【0013】
修正確率計算システム10は、少なくとも1つのコンピュータを用いて実現される。修正確率計算システム10の各構成要素は、1つのコンピュータ上で実現されてもよいし、複数のコンピュータに分散して実現されてもよい。コンピュータは、CPU(Central Processing Unit)などのプロセッサと、メモリと、記憶装置(例えば、ハードディスク)とを少なくとも備える。各種装置13、15、18、20の処理は、それらの処理に対応するプログラムコードがメモリに格納され、プロセッサが各プログラムコードを実行することによって実現されてもよい。各種DB11、12、14、16、17、21及び情報19は、コンピュータのハードディスク又はネットワーク上の記憶装置に格納されてもよい。
【0014】
入力装置31は、ユーザの意思を修正確率計算システム10に伝える機能を持つ装置であり、例えば、キーボードやマウスなどである。出力装置32は、修正確率計算システム10が出力した結果をユーザが確認するための装置であり、例えば、ディスプレイなどである。
【0015】
ソースコードDB11は、ユーザから入力装置31を介して入力されたソースコードを記憶する。
【0016】
プロジェクト情報DB12は、ユーザから入力装置31を介して入力された、プログラム開発プロジェクトのメトリクス情報、及び、プログラム開発プロジェクト毎に割り振られたプロジェクトIDを記憶する。
【0017】
静的解析装置13は、ソースコードに対して、一般的な静的解析を行う装置である。静的解析とは、コンピュータのソフトウェアの解析手法の一種であり、ソースコードを実行することなく解析を行うことである。静的解析として、公知の静的解析ツール及び手法を用いることができる。静的解析装置13は、ソースコードをソースコードDB11から取得する。静的解析装置13は、静的解析の結果(指摘)を、ソースコード、及び、静的解析連番IDと関連付けて静的解析結果DB14に格納する。
【0018】
静的解析結果DB14は、静的解析装置13から受けたソースコードの静的解析の結果(指摘)をソースコード、静的解析連番ID、及びプロジェクトIDと関連付けて記憶する。
【0019】
ソースコードメトリクス抽出装置15は、ソースコードに関して、一般的なメトリクスを抽出する装置である。ソースコードメトリクス抽出装置15は、ソースコードをソースコードDB11から取得する。ソースコードメトリクス抽出装置15は、抽出されたソースコードメトリクス情報をソースコードID及び静的解析連番IDと関連付けてソースコードメトリクスDB16に格納する。
【0020】
ソースコードメトリクスDB16は、ソースコードメトリクス抽出装置15から受けたソースコードメトリクスを、ソースコードID及び静的解析連番IDと関連付けて記憶する。
【0021】
静的解析結果修正判断DB17は、ユーザが入力装置31を介して入力した、静的解析結果に対する「ソースコードを修正する/修正しない」を示す判断情報と、対象の静的解析結果の静的解析結果IDとを記憶する。
【0022】
条件導出装置18は、プロジェクト情報DB12、静的解析結果DB14、及びソースコードメトリクスDB16に蓄積された各種データと、静的解析結果修正判断DB17に蓄積された静的解析結果の判断情報との間の依存関係を分析する。条件導出装置18は、プロジェクト情報DB12、静的解析結果DB14、及びソースコードメトリクスDB16の各種データから、静的解析結果修正判断DB17に蓄積された静的解析結果の判断結果が所定の割合以上となる、又は、所定の割合以下となるような条件(以下、「修正確率判定条件」と呼ぶ)を導出する。修正確率判定条件は、静的解析結果DB14、ソースコードメトリクスDB16及びプロジェクト情報DB12の中から選択された少なくとも1つの項目に関する条件である。条件導出装置18は、導出された複数の修正確率判定条件を修正確率判定情報19として保存する。
【0023】
修正確率判定条件は、静的解析結果に対応するソースコードが修正される確率を判定するための情報である。例えば、修正確率判定条件は、条件導出装置18によって導出された条件と、その条件のときの過去の「修正した/修正しない」の割合(以下、「修正割合」と呼ぶ)との組み合わせである。
【0024】
修正確率計算装置20は、以下の処理を実行する。
(1)修正確率計算装置20は、静的解析結果DB14と静的解析結果修正判断DB17を参照し、静的解析結果DB14のうち、関連する判断情報を静的解析結果修正判断DB17に持たないものを抽出する。すなわち、ここで抽出された静的解析結果は、現時点で、ユーザによって「修正する/修正しない」の判断が入力されていないものである。
(2)修正確率計算装置20は、抽出した静的解析結果のそれぞれに関して、プロジェクト情報DB12及びソースコードメトリクスDB16から、関連するプロジェクト情報とソースコードメトリクスを取得する。
(3)修正確率計算装置20は、上記(2)で取得したプロジェクト情報とソースコードメトリクスに関して修正確率判定情報19を適用し、上記(1)で抽出した静的解析結果のそれぞれに関して、静的解析結果に対応するソースコードが修正される確率(以下、「修正確率」と呼ぶ)を算出する。
(4)修正確率計算装置20は、上記(3)で算出した修正確率を修正確率DB21に格納する。
【0025】
修正確率DB21は、修正確率計算装置20において算出された修正確率を記憶する。なお、修正確率は、修正確率判定条件の各条件に対応する修正割合である。なお、複数の修正確率判定条件に合致するデータがあった場合、例えば、修正割合が高い方を修正確率として採用してもよい。
【0026】
図6は、ソースコードDB11に登録されているテーブル(ソースコード情報)600の例である。以下は、テーブル600のデータ項目を説明する表である。
【0028】
ソースコードID601は、ソースコード毎に一意に振られるIDである。ソースコードIDは他のDBと共用して用いられる。プロジェクトID602は、ソースコードが属するプログラム開発プロジェクトのプロジェクトIDである。ファイル名603は、ソースコードのファイル名である。ファイル種別604は、ソースコードのファイルの種類に関する情報である。ファイルの内容605は、ソースファイルの内容であり、プログラムコードの情報である。
【0029】
図7は、プロジェクト情報DB12に登録されているテーブル(プロジェクト情報)700の例である。以下は、テーブル700のデータ項目を説明する表である。
【0031】
プロジェクトID701は、プログラム開発プロジェクト毎に一意に振られるIDである。プロジェクトIDは他のDBと共用して用いられる。プロジェクト名702は、プログラム開発プロジェクトの名前である。適用分野703は、プログラム開発プロジェクトにより作成されるプログラムが適用される分野である。言語704は、プログラム開発プロジェクトで使用される主要なプログラム言語である。開発ステップ数705は、プログラム開発プロジェクトで開発されるプログラムで予定されている開発ステップ数である。プラットフォーム706は、プログラム開発プロジェクトにより作成されるプログラムが動作するOSなどの情報である。
【0032】
図8は、静的解析結果DB14に登録されているテーブル(静的解析結果情報)800の例である。以下は、テーブル800のデータ項目を説明する表である。
【0034】
静的解析結果ID801は、静的解析結果の指摘毎に一意に振られるIDである。静的解析結果IDは他のDBと共用して用いられる。静的解析連番ID802は、静的解析の実行毎に割り振られるIDである。ルールID803は、静的解析結果の指摘を検出した静的解析の検出ルールのIDである。ソースコードID804は、静的解析結果の指摘を検出したソースコードのソースコードIDである。行番号805は、静的解析結果の指摘を検出したソースコード上の場所の行番号である。カラム806は、静的解析結果の指摘を検出したソースコード上の場所のカラムである。指摘メッセージ807は、静的解析結果の指摘の内容をユーザに示すメッセージである。なお、テーブル800は、これらの項目に加えて、プロジェクトIDなどのデータ項目を備えてもよい。この場合、静的解析結果DB14とプロジェクト情報DB12との関連付けが容易になる。
【0035】
図9は、ソースコードメトリクスDB16に登録されているテーブル(ソースコードメトリクス情報)900の例である。以下は、テーブル900のデータ項目を説明する表である。
【0037】
ソースコードメトリクスID901は、ソースコードメトリクス毎に一意に振られるIDである。ソースコードメトリクスIDは、他のDBと共用して用いられる。静的解析連番ID902は、静的解析の実行毎に割り振られるIDである。ソースコードID903は、ソースコードメトリクスを抽出したソースコードのソースコードIDである。関数名904は、ソースコードメトリクスの対象となる関数の名前である。開始行905は、ソースコードメトリクスを抽出したソースコード上の範囲の開始行番号である。終了行906は、ソースコードメトリクスを抽出したソースコード上の範囲の終了行番号である。実ステップ数907は、ソースコードメトリクスを抽出したソースコード上の範囲において空行及びコメント行を除いた行数である。コメント率908は、ソースコードメトリクスを抽出したソースコード上の範囲の実ステップ数に対するコメント行数の割合である。複雑度909は、ソースコードメトリクスの対象となる関数のサイクロマティック複雑度である。クローン率910は、ソースコードメトリクスを抽出したソースコード上の範囲における、他のソースからソースコードを流用した割合である。なお、テーブル900は、これらの項目に加えて、プロジェクトIDなどのデータ項目を備えてもよい。この場合、ソースコードメトリクスDB16とプロジェクト情報DB12との関連付けが容易になる。
【0038】
図10は、静的解析結果修正判断DB17に登録されているテーブル(静的解析結果修正判断情報)1000の例である。以下は、テーブル1000のデータ項目を説明する表である。
【0040】
静的解析結果ID1001は、対象の静的解析結果の指摘のIDである。判断1002は、静的解析結果の指摘に対してユーザが入力した、「ソースコードを修正する/修正しない」を示す情報である。コメント1003は、ユーザによる修正の判断に付随してユーザが自由記述したコメントである。
【0041】
図11は、修正確率DB21に登録されているテーブル1100の例である。以下は、テーブル1100のデータ項目を説明する表である。
【0043】
静的解析結果ID1101は、対象の静的解析結果の指摘のIDである。修正確率1102は、修正確率計算装置20が算出した、対象の静的解析結果に対応するソースコードが将来修正される確率である。
【0044】
図2は、実施例に係るソースコードの登録処理を示すフローチャートの例である。
【0045】
以下のフローは、
図3で示される静的解析の実行処理、
図4で示される修正確率判定条件の導出処理、及び、
図5で示される静的解析結果の指摘に対しユーザが修正するかどうかの判断を入力する処理とは関係なく、ユーザのタイミングで不定期に繰り返し実行される。
【0046】
(ステップ201)
修正確率計算システム10は、プロジェクト情報DB12に記憶されているテーブル700から、プロジェクト名702を一覧にして出力装置32に出力する。ユーザは、修正確率計算システム10に登録するソースコードが属するプロジェクトを出力装置32に出力されたプロジェクト名702の一覧から検索する。ソースコードが属するプロジェクトがプロジェクト名702の一覧に存在する場合は、ステップ202に進む。一方、ソースコードが属するプロジェクトがプロジェクト名702の一覧に存在しない場合は、ステップ203に進む。
【0047】
(ステップ202)
ユーザは、入力装置31を介して、ソースコードが属するプロジェクトを、プロジェクト名702の一覧から選択する。修正確率計算システム10は、ユーザが選択したプロジェクトのプロジェクトIDを記憶する。続いて、ステップ204に進む。
【0048】
(ステップ203)
ユーザは、入力装置31を介して新しくプロジェクト情報を登録することを修正確率計算システム10に伝える。修正確率計算システム10は、プロジェクト情報を入力させるUI(User Interface)を出力装置32に表示させる。ユーザは入力装置31を介して以下のプロジェクト情報を入力する。
・プロジェクト名:プログラム開発プロジェクトの名前
・適用分野:プログラム開発プロジェクトにより作成されるプログラムが適用される分野(Webアプリケーション、デスクトップアプリケーション、ミドルウェア、ドライバ、ファームウェアなど)
・言語:プログラム開発プロジェクトで使用される主要なプログラム言語
・開発ステップ数:プログラム開発プロジェクトで開発されるプログラムで予定されている開発ステップ数
・プラットフォーム:プログラム開発プロジェクトにより作成されるプログラムが動作するOSなど
【0049】
修正確率計算システム10は、プログラム開発プロジェクト毎に一意なプロジェクトIDを作成し、記憶する。修正確率計算システム10は、ユーザが入力した、プロジェクト名、適用分野、言語、開発ステップ数、及び、プラットフォーム、並びに、一意に作成されたプロジェクトIDを、プロジェクト情報DB12に格納する。続いて、ステップ204に進む。
【0050】
(ステップ204)
修正確率計算システム10は、登録するソースコードの情報を入力するUIを出力装置32に表示させる。ユーザは、入力装置31を介して以下のソースコードの情報を入力する。
・ソースコードが記録されているファイルのパス
・ソースコードのファイル種別:Javaソース、C言語ヘッダなど
【0051】
ユーザからの入力後、修正確率計算システム10は、以下の処理を行う。
・修正確率計算システム10は、ソースコード毎に一意なソースコードIDを作成する。
・修正確率計算システム10は、ユーザが入力したソースコードが記録されているファイルのパスで示されるファイルの内容を読み込み、記憶する。
・修正確率計算システム10は、ユーザが入力したソースコードが記録されているファイルのパスからファイル名を抽出する。
修正確率計算システム10は、ソースコードID、ステップ202又はステップ203で記憶したプロジェクトID、ファイル名、ファイル種別、及びファイルの内容をソースコードDB11に格納する。
【0052】
(ステップ205)
ユーザが、ソースコードの登録処理を終了する意思を持つ場合、入力装置31を介して修正確率計算システム10に終了メッセージを入力する。この場合、修正確率計算システム10は、ステップ201からの一連の手順を終了させる。一方、ユーザが、ソースコードの登録処理を続ける意思を持つ場合、ステップ204に戻り、ソースコード情報を入力する操作を繰り返す。
【0053】
図3は、実施例に係る静的解析実行処理を示すフローチャートの例である。
【0054】
このフローは、あらかじめ
図2で示されるソースコードの登録処理が一回以上実行済みであり、静的解析の実行日時がタイマー22に設定されている状態でスタートする。なお、このフローの実行には、
図4で示される修正確率判定条件の導出処理、及び、
図5で示される静的解析結果の指摘に対しユーザが修正するかどうかの判断を入力する処理の実行は関係ない。
【0055】
(ステップ301)
タイマー22は、現在時刻を監視し、設定されている静的解析の実行日時になっているか判定する。静的解析の実行日時になった場合、タイマー22は、静的解析装置13に処理の開始を通知し、ステップ302に進む。一方、静的解析の実行日時となっていない場合、タイマー22は、引き続き現在時刻の監視を続ける。
【0056】
(ステップ302)
静的解析装置13は、一意な静的解析連番IDを作成する。そして、静的解析装置13は、ソースコードDB11から最新のソースコードのセットを取得し、静的解析を行う。静的解析装置13は、静的解析の結果、ソースコードに対する指摘のリストを取得する。静的解析の指摘は、例えば以下のデータを含む。
・静的解析の指摘毎に一意な静的解析結果ID
・静的解析の検出ルールID
・指摘を検出したソースコードのソースコードID
・指摘を検出したソースコード上の行番号及びカラム
・指摘の内容をユーザに示すメッセージ
【0057】
静的解析装置13は、静的解析の指摘に関連する静的解析結果ID、検出ルールID、ソースコードID、行番号、カラム、指摘メッセージ、及び、作成した静的解析連番IDを関連付けて静的解析結果DB14に格納する。続いて、ステップ303に進む。
【0058】
(ステップ303)
ソースコードメトリクス抽出装置15は、ステップ302で静的解析を行ったソースコードのセットに対し、これらのソースコードのソースコードメトリクスを抽出する。ソースコードメトリクスは、例えば以下のデータを含む。
・ソースコードメトリクス毎に一意なソースコードメトリクスID
・ソースコードメトリクスを抽出したソースコードのソースコードID
・ソースコードメトリクスの対象となる関数の名前
・ソースコードメトリクスを抽出したソースコード上の範囲の開始行及び終了行
・ソースコードメトリクスを抽出したソースコード上の範囲において、空行及びコメント行を除いたステップ数である、実ステップ数
・ソースコードメトリクスを抽出したソースコード上の範囲において、実ステップ数に対するコメント行数の割合である、コメント率
・ソースコードメトリクスを抽出したソースコード上の範囲のサイクロマティック複雑度
・ソースコードメトリクスを抽出したソースコード上の範囲における、他のソースからソースコードを流用した割合である、クローン率
【0059】
ソースコードメトリクス抽出装置15は、ソースコードメトリクスに関連するソースコードメトリクスID、ソースコードID、関数の名前、開始行、終了行、実ステップ数、コメント率、複雑度、クローン率、及び、静的解析連番IDを関連付けてソースコードメトリクスDB16に格納する。続いて、ステップ304に進む。
【0060】
(ステップ304)
修正確率計算装置20は、修正確率判定情報19が存在するかを判定する。修正確率判定情報19が存在する場合、ステップ305に進む。一方、修正確率判定情報19が存在しない場合(すなわち、
図4で示される修正確率判定条件の導出処理がまだ実行されていない場合)、ステップ301に戻る。
【0061】
(ステップ305)
修正確率計算装置20は、静的解析結果DB14に記憶されている静的解析結果の指摘のうち、現時点で「ソースコードを修正する/修正しない」の判断が入力されていない指摘を抽出する。修正確率計算装置20は、抽出された静的解析結果の指摘に対して修正確率判定情報19の修正確率判定条件を適用し、修正確率を算出する。修正確率計算装置20は、算出した修正確率を修正確率DB21に格納する。修正確率計算装置20は、具体的には以下の処理を実行する。
【0062】
(1−1)修正確率計算装置20は、静的解析結果修正判断DB17に格納されているデータのうち、判断1002が「修正する」又は「修正しない」となっているデータを集め、それらデータの静的解析結果ID1001のリストを作成する。
(1−2)修正確率計算装置20は、静的解析結果DB14に格納されているデータのうち、静的解析結果ID801が(1−1)で作成した静的解析結果IDのリストに含まれないデータを集める。ここで集めたデータが、現時点で「ソースコードを修正する/修正しない」の判断が入力されていない指摘のリストとなる。
【0063】
修正確率計算装置20は、(1−2)で得たリストの個々のデータについて、以下の手順を実行する。
(2−1)修正確率計算装置20は、(1−2)で得たリストのソースコードID804を使用して、ソースコードDB11から、同じソースコードIDを持つソースコード情報を取得する。
(2−2)修正確率計算装置20は、(2−1)のソースコード情報のプロジェクトID602を使用して、プロジェクト情報DB12から同じプロジェクトIDを持つプロジェクト情報を取得する。
(2−3)修正確率計算装置20は、(1−2)で得たリストの静的解析連番ID802、ソースコードID804、行番号805を記憶する。修正確率計算装置20は、ソースコードメトリクスDB16から、静的解析連番ID802及びソースコードID804と一致し、かつ、行番号805がソースコードメトリクスの開始行905と終了行906の範囲に含まれるソースコードメトリクス情報を取得する。
(2−4)修正確率計算装置20は、(1−2)で得たリストの個々のデータについて、プロジェクト情報とソースコードメトリクス情報を参照し、修正確率判定情報19の修正確率判定条件に合致するデータを見つける。修正確率計算装置20は、合致した修正確率判定条件に対応する修正割合(すなわち、「修正する/修正しない」の割合)を、そのデータの修正確率として出力する。なお、「修正しない」の割合であった場合、修正確率計算装置20は、100%から「修正しない」の割合を引いた割合を、修正確率として出力する。また、複数の修正確率判定条件に合致するデータの場合、例えば、修正確率が高い方を採用してもよい。例えば、修正確率が80%の修正確率判定条件と、修正確率が90%の修正確率判定条件に合致するデータがあった場合、修正確率計算装置20は、そのデータの修正確率を90%としてもよい。データが全ての修正確率判定条件に合致しない場合、修正確率計算装置20は、そのデータの修正確率を「判断できない(−)」とする。
(2−5)修正確率計算装置20は、(2−4)で求めた修正確率を、修正確率DB21に格納する。
【0064】
修正確率計算装置20は、(1−2)で得たリストの全てのデータについて修正確率を修正確率DB21に格納し終えたら、ステップ301に戻り、以降、処理を繰り返す。
【0065】
図4は、実施例に係る修正確率判定条件の導出処理を示すフローチャートの例である。
【0066】
このフローは、あらかじめ
図2で示されるソースコードの登録処理が一回以上実行済みであり、解析結果による指摘の修正確率判定条件の導出を実行する日時がタイマー22に設定されている状態でスタートする。なお、このフローの実行には、
図3で示される静的解析の実行処理、及び、
図5で示される静的解析結果の指摘に対しユーザが修正するかどうかの判断を入力する処理とは関係ない。
【0067】
(ステップ401)
タイマー22は、現在時刻を監視し、設定されている修正確率判定条件の導出の実行日時になっているか判定する。修正確率判定条件の導出の実行日時になった場合、タイマー22は、条件導出装置18に処理の開始を通知し、ステップ402に進む。一方、修正確率判定条件の導出の実行日時となっていない場合、タイマー22は、引き続き現在時刻の監視を続ける。
【0068】
(ステップ402)
条件導出装置18は、静的解析結果DB14に静的解析結果の指摘が記憶されているかを確認する。静的解析結果の指摘が記憶されている場合は、ステップ403に進む。一方、静的解析結果の指摘が記憶されていない場合は、ステップ401に戻る。
【0069】
(ステップ403)
条件導出装置18は、プロジェクト情報DB12、静的解析結果DB14、及びソースコードメトリクスDB16に蓄積された各種データと、静的解析結果修正判断DB17に蓄積された静的解析結果の判断情報との間の依存関係を分析する。条件導出装置18は、プロジェクト情報DB12、静的解析結果DB14、及びソースコードメトリクスDB16の各種データから、静的解析結果修正判断DB17に蓄積された静的解析結果の判断結果が一定の確率以上となる/一定の確率以下となるような修正確率判定条件を導出する。条件導出装置18は、具体的には以下の処理を実行する。
【0070】
(1)条件導出装置18は、静的解析結果修正判断DB17に格納されているデータのうち、判断1002のデータ項目が「修正する」又は「修正しない」となっているデータを集める。
【0071】
(2)条件導出装置18は、(1)で得たそれぞれのデータに対して、以下の処理を実行する。
(2−1)条件導出装置18は、静的解析結果DB14から、(1)で取得したデータの静的解析結果ID1101と同じ静的解析結果IDを持つデータを取得し、(1)で取得したデータと連結する。
(2−2)条件導出装置18は、ソースコードDB11から、(2−1)で得たデータのソースコードID804と同じソースコードIDを持つデータを取得し、そのデータのプロジェクトID602を取得する。条件導出装置18は、プロジェクト情報DB12から、取得したプロジェクトID602と同じプロジェクトIDを持つデータを取得し、(2−1)で取得したデータと連結する。
(2−3)条件導出装置18は、(2−2)で得たデータから、静的解析連番ID802、ソースコードID804、及び行番号805を取得する。条件導出装置18は、ソースコードメトリクスDB16から、静的解析連番ID802及びソースコードID804と一致し、かつ、行番号805がソースコードメトリクスの開始行905と終了行906の範囲に含まれるデータを取得し、(2−2)で取得したデータと連結する。
【0072】
(3)条件導出装置18は、(2−3)までの処理で得たデータにおいて、判断1002の値が「修正する」、又は、「修正しない」となる割合が一定の基準(例えば、80%以上)を満たすデータの抽出条件を、条件を変更しながら試行することにより見つける。ここで抽出された条件が、静的解析結果の判断結果が一定の確率以上となる/一定の確率以下となるような修正確率判定条件となる。以下は、当該処理で抽出された条件の一例である。
【0073】
(a)適用分野703が「オンラインシステム」の場合、判断1002の「修正する」の割合が100%である。
(b)ルールID803が「ArrayIndexOutOfBounds」の場合、判断1002の「修正する」の割合が95%である。
(c)適用分野703が「組み込みシステム」であり、かつ、ルールID803が「DoNotUseGoto」である場合、判断1002の「修正しない」の割合が95%である。
(d)ルールID803が「UninitializedVariable」であり、かつ、実ステップ数907が500ステップ以上の場合、判断1002の「修正する」の割合が85%である。
(e)ルールID803が「ResourceLeak」であるデータと、ルールID803が「ManyReturnStatement」であるデータのうち、ソースコードID804及び行番号805が同じであるデータに関して、ルールID803が「ResourceLeak」であるデータでは、判断1002の「修正する」の割合が90%である。
【0074】
上記で示した条件は一例であり、これらに限定されない。例えば、プロジェクト情報(プロジェクト情報DB12)、静的解析結果情報(静的解析結果DB14)及びソースコードメトリクス情報(ソースコードメトリクスDB16)の中の1つのデータ項目、又は、これらのDB12、14、16の中の複数のデータ項目の組み合わせが修正確率判定条件として抽出されてよい。
【0075】
(4)条件導出装置18は、(3)で取得した条件と修正割合の組み合わせを、修正確率判定条件として保存する。条件導出装置18は、複数の修正確率判定条件を抽出し、これらの修正確率判定条件を修正確率判定情報19として保存する。例えば、(a)〜(c)の場合、修正確率判定情報19は、以下のようなリストの情報となる。続いてステップ404に進む。
【0077】
(ステップ404)
修正確率計算装置20は、静的解析結果DB14に記憶されている静的解析結果の指摘のうち、現時点で「ソースコードを修正する/修正しない」の判断が入力されていない指摘を抽出する。修正確率計算装置20は、抽出された静的解析結果の指摘に対して修正確率判定情報19の修正確率判定条件を適用し、修正確率を算出する。修正確率計算装置20は、算出した修正確率を修正確率DB21に格納する。修正確率計算装置20は、具体的には以下の処理を実行する。なお、以下の処理は、ステップ305と同じである。
【0078】
(1−1)修正確率計算装置20は、静的解析結果修正判断DB17に格納されているデータのうち、判断1002が「修正する」又は「修正しない」となっているデータを集め、それらデータの静的解析結果ID1001のリストを作成する。
(1−2)修正確率計算装置20は、静的解析結果DB14に格納されているデータのうち、静的解析結果ID801が(1−1)で作成した静的解析結果IDのリストに含まれないデータを集める。ここで集めたデータが、現時点で「ソースコードを修正する/修正しない」の判断が入力されていない指摘のリストとなる。
【0079】
修正確率計算装置20は、(1−2)で得たリストの個々のデータについて、以下の手順を実行する。
(2−1)修正確率計算装置20は、(1−2)で得たリストのソースコードID804を使用して、ソースコードDB11から、同じソースコードIDを持つソースコード情報を取得する。
(2−2)修正確率計算装置20は、(2−1)のソースコード情報のプロジェクトID602を使用して、プロジェクト情報DB12から同じプロジェクトIDを持つプロジェクト情報を取得する。
(2−3)修正確率計算装置20は、(1−2)で得たリストの静的解析連番ID802、ソースコードID804、行番号805を記憶する。修正確率計算装置20は、ソースコードメトリクスDB16から、静的解析連番ID802及びソースコードID804と一致し、かつ、行番号805がソースコードメトリクスの開始行905と終了行906の範囲に含まれるソースコードメトリクス情報を取得する。
(2−4)修正確率計算装置20は、(1−2)で得たリストの個々のデータについて、プロジェクト情報とソースコードメトリクス情報を参照し、修正確率判定情報19の修正確率判定条件に合致するデータを見つける。修正確率計算装置20は、合致した修正確率判定条件に対応する修正割合を、そのデータの修正確率として出力する。なお、「修正しない」の割合であった場合、修正確率計算装置20は、100%から「修正しない」の割合を引いた割合を、修正確率として出力する。また、複数の修正確率判定条件に合致するデータの場合、例えば、修正確率が高い方を採用してもよい。例えば、修正確率が80%の修正確率判定条件と、修正確率が90%の修正確率判定条件に合致するデータがあった場合、修正確率計算装置20は、そのデータの修正確率を90%としてもよい。データが全ての修正確率判定条件に合致しない場合、修正確率計算装置20は、そのデータの修正確率を「判断できない(−)」とする。
(2−5)修正確率計算装置20は、(2−4)で求めた修正確率を、修正確率DB21に格納する。
【0080】
修正確率計算装置20は、(1−2)で得たリストの全てのデータについて修正確率を修正確率DB21に格納し終えたら、ステップ401に戻り、以降、処理を繰り返す。
【0081】
図5は、実施例に係る静的解析結果の指摘に対しユーザが修正するかどうかの判断を入力する処理を示すフローチャートの例である。
【0082】
図12は、静的解析結果の指摘に対し、ユーザが修正するかどうかの判断を入力する画面の例である。画面1200は、リスト表示部1201と、ソースコード表示部1202と、判断入力部1203とを備える。リスト表示部1201に表示されるリストは、ルールID1211と、ファイル名1212と、行番号1213と、指摘メッセージ1214と、修正確率1215と、判断1216とを含む。ルールID1211は、静的解析結果DB14のルールID803に対応する。ファイル名1212は、ソースコードDB11のファイル名603に対応する。行番号1213は、静的解析結果DB14の行番号805に対応する。指摘メッセージ1214は、静的解析結果DB14の指摘メッセージ807に対応する。修正確率1215は、修正確率DB21の修正確率1102に対応する。判断1216は、静的解析結果修正判断DB17の判断1002に対応する。
【0083】
図5のフローは、あらかじめ、
図3で示される静的解析処理が一回以上実行済みである状態でスタートする。なお、このフローの実行には、
図3で示される静的解析の実行処理、及び、
図4で示される修正確率判定条件の導出処理の実行は関係なく、また、ユーザのタイミングで不定期に繰り返し実行される。
【0084】
(ステップ501)
ユーザは、入力装置31を介し、静的解析結果の一覧を表示するリクエストを、修正確率計算システム10に送る。修正確率計算システム10は、静的解析結果DB14、ソースコードDB11、修正確率DB21、及び、静的解析結果修正判断DB17からデータを取得し、取得したデータをリスト表示部1201に出力する。続いてステップ502に進む。
【0085】
この際、ユーザは、プロジェクトを特定する情報やソースコードを特定する情報を同時に入力することで、静的解析結果の一覧に表示するデータを指定することも可能である。例えば、プロジェクト名が指定されている場合、修正確率計算システム10は、プロジェクト情報DB12を参照して、プロジェクト名702に対応するプロジェクトID701を取得し、ソースコードDB11を参照して、プロジェクトID701に対応するソースコードID601を取得する。ここで取得したソースコードID601は、指定されたプロジェクト名に対応するソースコードIDである。修正確率計算システム10は、静的解析結果DB14、ソースコードDB11、修正確率DB21、及び、静的解析結果修正判断DB17から、取得したソースコードIDに対応するデータを選択し、新しいリストとしてもよい。同様に、修正確率計算システム10は、ソースコードを特定する情報が指定されている場合、静的解析結果DB14、ソースコードDB11、修正確率DB21、及び、静的解析結果修正判断DB17から、指定されたソースコードに対応するデータを選択し、新しいリストとしてもよい。修正確率計算システム10は、上記の処理で取得したリストを出力装置32に出力してもよい。
【0086】
また、別の例として、修正確率計算システム10は、現時点で「修正する/修正しない」の判断が入力されていないデータのリストを出力装置32に出力してもよい。
【0087】
(ステップ502)
ユーザは、リスト表示部1201に出力されたリストを確認し、対象データ(ある特定の行)を選択する。このとき、
図12に示すように、修正確率計算システム10は、対象のデータに対応するソースコードのファイルの内容605をソースコード表示部1202に表示する。この構成によれば、リスト表示部1201に修正確率が表示されているため、ユーザは、リスト表示部1201に出力されたリストの中で修正確率が高いデータ(すなわち、確認する優先度が高いソースコード)を選択し、ソースコードの内容を確認したり、判断結果を入力することができる。続いてステップ503に進む。
【0088】
(ステップ503)
修正確率計算システム10は、ステップ502で選択された対象データについて静的解析結果修正判断DB17を参照し、判断1002にユーザの判断結果がすでに入力されているかを判定する。判断1002にユーザの判断結果がすでに入力されている場合(YES)、ステップ504に進む。一方、そうでない場合(NO)、ステップ505に進む。
【0089】
(ステップ504)
修正確率計算システム10は、対象データの静的解析結果修正判断DB17の判断1002、及び、コメント1003の情報を判断入力部1203に表示する。続いてステップ505に進む。
【0090】
(ステップ505)
ユーザは、ステップ502で選択された対象データに対して、判断結果を入力する。ユーザは、入力装置31を介して判断入力部1203において、判断結果(修正する/修正しない/保留のいずれか)を入力する。その際、ユーザは、判断入力部1203においてコメントを入力してもよい。続いてステップ506に進む。なお、ユーザの判断結果がすでに入力されている場合、ステップ505及び次のステップ506を省略することができる。また、ユーザは、ステップ505において、すでに入力されている判断結果及びコメントを修正することも可能である。
【0091】
(ステップ506)
修正確率計算システム10は、ステップ505での判断結果及びコメントを、それぞれ、判断1002及びコメント1003として静的解析結果修正判断DB17に格納する。続けてステップ507に進む。
【0092】
(ステップ507)
ユーザが、静的解析結果に対して判断結果を入力する処理を終了する意思を持つ場合、入力装置31を介して修正確率計算システム10に終了メッセージを入力する。一方、ユーザが、静的解析結果に対して判断結果を入力する処理を続ける意思を持つ場合、ステップ502に戻り、処理を繰り返す。
【0093】
上記の実施例におけるシステムは、過去の静的解析結果の判断結果と、当該過去の時点でのソースコードメトリクスの情報及びプログラム開発プロジェクトの情報に基づいて、修正確率判定条件を導出する条件導出装置18と、分析対象の静的解析結果に対応するソースコードメトリクスの情報及びプログラム開発プロジェクトの情報に対して修正確率判定条件を適用し、分析対象の静的解析結果に対応するソースコードの修正確率を算出する修正確率計算装置20と、分析対象の静的解析結果と修正確率とを表示する出力装置32とを備える。
【0094】
より具体的には、上記の実施例におけるシステムは、以下の処理を実行する。
(1)条件導出装置18は、過去の静的解析結果の指摘及び当該指摘に対するユーザの判断結果と、過去のソースコードメトリクスの情報及びプログラム開発プロジェクトの情報とを分析し、修正確率判定条件を導出する。修正確率判定条件は、静的解析結果の判断結果が一定の確率以上となる/一定の確率以下となるような条件である。修正確率判定条件は、条件と判断結果の割合の組み合わせを含む。
(2)修正確率計算装置20は、新規の静的解析結果、ソースコードメトリクスの情報及びプログラム開発プロジェクトの情報に修正確率判定条件を適用し、該当する修正確率判定条件の判断結果の割合を修正確率として出力する。
(3)出力装置32は、新規の静的解析結果と、その静的解析結果の修正確率とを表示する。出力装置32は、新規の静的解析結果の判断結果を入力するためのインタフェースを表示する。
(4)ユーザは、優先順位が高い(例えば、修正確率が高い)静的解析結果から確認していき、「ソースコードを修正する/修正しない」の判断結果を入力する。修正確率計算システム10は、インタフェースを介して入力された判断結果を、静的解析結果の判断結果として静的解析結果修正判断DB17に登録する。
(5)(1)〜(4)の処理を繰り返し実行することで、静的解析結果の指摘と判断結果が蓄積され、条件導出装置18による修正確率判定条件の導出、及び、修正確率計算装置20による修正確率の計算の精度が向上する。
【0095】
従来では、モジュールの変更履歴のみに基づいて静的解析結果の指摘に優先順位付けを行っていたため、優先順位付けの精度が低いという課題があった。上記の実施例の構成によれば、過去の静的解析結果の判断結果と、当該過去の静的解析結果に対応するソースコードメトリクスの情報及びプログラム開発プロジェクトの情報との関係から修正確率判断条件を導出し、導出された修正確率判断条件を用いて、静的解析結果の指摘に対応するソースコードが修正される確率(修正確率)を求めることができる。ユーザは、修正確率が高い静的解析結果の指摘のソースコードから確認していくことができ、静的解析結果の指摘の確認を効率的に行うことが可能となる。
【0096】
なお、上記の実施例では、出力装置32上において、新規の静的解析結果と、その静的解析結果の修正確率とが表示されるが、この構成に限定されない。修正確率計算システム10は、どの静的解析結果の指摘から確認すればよいかの情報をユーザに対して提示できればよく、静的解析結果が順位付けされた形式で表示されればよい。例えば、出力装置32において、修正確率の具体的な数値が表示される必要はなく、(1)静的解析結果が、修正確率が高い順に並んで表示される、(2)修正確率の数値に応じて静的解析結果をいくつかのカテゴリに分け、当該カテゴリが分かるような形式で静的解析結果が表示される、などでもよい。したがって、修正確率計算装置20は、修正確率判定情報19を用いて、分析対象のソースコードに関する静的解析結果の優先順位付けを行うように構成されればよい。また、修正確率が低い静的解析結果の情報も有用になる場合があり、出力装置32には、修正確率が高いことを示す情報だけでなく、修正確率が低いということを示す情報が表示されてもよい。これは、ユーザが、修正確率が低い静的解析結果については確認を後回しにするなどして、静的解析結果の指摘を効率的に確認することが可能となるためである。
【0097】
また、修正確率判定情報19は、プロジェクト情報DB12、静的解析結果DB14、及びソースコードメトリクスDB16の各種データから静的解析結果の修正確率を計算する計算式でもよい。例えば、修正確率が以下のように計算されてもよい。
(1)条件導出装置18は、過去の静的解析結果の指摘及び当該指摘に対するユーザの判断結果と、過去のソースコードメトリクスの情報及びプログラム開発プロジェクトの情報とを多変量解析し、静的解析結果の指摘に対応するソースコードが修正されるときのソースコードメトリクス及びプログラム開発プロジェクトのメトリクスの重みづけパラメータを算出する。ここで、過去の「修正した/修正しなかった」という情報が多変量解析の正解情報(目的変数)である。また、過去の静的解析結果の指摘、過去のソースコードメトリクスの情報及びプログラム開発プロジェクトの情報が、多変量解析の原因情報(説明変数)である。条件導出装置18は、プロジェクト情報DB12、静的解析結果DB14、ソースコードメトリクスDB16の各種データから静的解析結果の修正確率を予測できる式を導出する。
(2)修正確率計算装置20は、上記の式を用いて、新規の静的解析結果、ソースコードメトリクスの情報及びプログラム開発プロジェクトの情報から、新規の静的解析結果の修正確率を算出する。
(3)(1)〜(2)の処理を繰り返し実行することで、重みづけパラメータの精度を継続的に向上させる。
【0098】
本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。上記実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることもできる。また、ある実施例の構成に他の実施例の構成を加えることもできる。また、各実施例の構成の一部について、他の構成を追加・削除・置換することもできる。
【0099】
上記の各構成、機能などは、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、ファイルなどの情報は、メモリや、ハードディスク、SSD(Solid State Drive)などの記録装置、または、ICカード、SDカード、DVDなどの記録媒体に置くことができる。また、上記の各構成などは、それらの一部又は全部を、例えば集積回路で設計するなどによりハードウェアで実現してもよい。
【0100】
上述の実施例において、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。全ての構成が相互に接続されていてもよい。