(58)【調査した分野】(Int.Cl.,DB名)
入力されたソースコードに対して静的解析を行うことにより、前記ソースコードにおける警告箇所の位置を表す警告位置情報と、警告の種別を識別する警告識別情報とを含む警告情報を生成する静的解析部と、
前記ソースコードにおいて互いに類似する部分(類似部分)を抽出することにより、各類似部分について、該互いに類似する類似部分を他の互いに類似する類似部分から識別する類似識別情報と、該類似部分の範囲を表す範囲情報とを含む類似部分情報を生成する類似部分抽出部と、
前記警告情報および前記類似部分情報を照合することにより、各警告情報に対して、該警告情報の示す警告箇所の位置を含む類似部分の類似識別情報を追加した連結警告情報を生成する情報連結部と、
前記連結警告情報に対して、前記警告識別情報および前記類似識別情報に基づく優先度決定基準を用いて優先度を決定し、決定した優先度にしたがって前記連結警告情報を出力する優先度決定部と、
を備えた静的解析装置。
前記優先度決定部は、前記優先度決定基準の設定変更を表す情報を取得すると、設定変更した前記優先度決定基準を用いて前記優先度を更新することを特徴とする請求項1または請求項2に記載の静的解析装置。
入力されたソースコードに対して静的解析を行うことにより、前記ソースコードにおける警告箇所の位置を表す警告位置情報と、警告の種別を識別する警告識別情報とを含む警告情報を生成し、
前記ソースコードにおいて互いに類似する部分(類似部分)を抽出することにより、各類似部分について、該互いに類似する類似部分を他の互いに類似する類似部分から識別する類似識別情報と、該類似部分の範囲を表す範囲情報とを含む類似部分情報を生成し、
前記警告情報および前記類似部分情報を照合することにより、各警告情報に対して、該警告情報の示す警告箇所の位置を含む類似部分の類似識別情報を追加した連結警告情報を生成し、
前記連結警告情報に対して、前記警告識別情報および前記類似識別情報に基づく優先度決定基準を用いて優先度を決定し、決定した優先度にしたがって前記連結警告情報を出力する、静的解析方法。
前記優先度決定基準の設定変更を表す情報を取得すると、設定変更した前記優先度決定基準を用いて前記優先度を更新することを特徴とする請求項4または請求項5に記載の静的解析方法。
入力されたソースコードに対して静的解析を行うことにより、前記ソースコードにおける警告箇所の位置を表す警告位置情報と、警告の種別を識別する警告識別情報とを含む警告情報を生成する静的解析ステップと、
前記ソースコードにおいて互いに類似する部分(類似部分)を抽出することにより、各類似部分について、該互いに類似する類似部分を他の互いに類似する類似部分から識別する類似識別情報と、該類似部分の範囲を表す範囲情報とを含む類似部分情報を生成する類似部分抽出ステップと、
前記警告情報および前記類似部分情報を照合することにより、各警告情報に対して、該警告情報の示す警告箇所の位置を含む類似部分の類似識別情報を追加した連結警告情報を生成する情報連結ステップと、
前記連結警告情報に対して、前記警告識別情報および前記類似識別情報に基づく優先度決定基準を用いて優先度を決定し、決定した優先度にしたがって前記連結警告情報を出力する優先度決定ステップと、
をコンピュータ装置に実行させるコンピュータ・プログラム。
前記ソースコードについて、以前のソースコードに対する差分を抽出し、抽出した差分の範囲を表す差分情報を生成する差分抽出ステップをさらに前記コンピュータ装置に実行させ、
前記情報連結ステップにおいて、前記警告情報および前記差分情報を照合することにより、各警告情報に対して、該警告情報の示す警告箇所の位置を含む差分の範囲があるか否かを表す差分有無情報を、前記類似識別情報に加えてさらに追加した前記連結警告情報を生成し、
前記優先度決定ステップにおいて、前記警告識別情報および前記類似識別情報に加えて、前記差分有無情報に基づく前記優先度決定基準を用いて前記優先度を決定することを特徴とする請求項7に記載のコンピュータ・プログラム。
前記優先度決定基準の設定変更を表す情報の取得に応じて、設定変更した前記優先度決定基準を用いて前記優先度決定ステップを前記コンピュータ装置に実行させることを特徴とする請求項7または請求項8に記載のコンピュータ・プログラム。
【発明を実施するための形態】
【0019】
以下、本発明の実施の形態について、図面を参照して詳細に説明する。
【0020】
(第1の実施の形態)
本発明の第1の実施の形態としての静的解析装置1の機能ブロック構成を
図1に示す。
【0021】
図1において、静的解析装置1は、静的解析部11と、類似部分抽出部12と、情報連結部13と、優先度決定部14とを備える。
【0022】
ここで、静的解析装置1は、
図2に示すように、CPU(Central Processing Unit)1001と、RAM(Random Access Memory)1002と、ROM(Read Only Memory)1003と、ハードディスク等の記憶装置1004と、入力装置1005と、出力装置1006とを備えたコンピュータ装置によって構成可能である。この場合、静的解析部11は、入力装置1005と、ROM1003および記憶装置1004に記憶されたコンピュータ・プログラムおよび各種データをRAM1002に読み込んで実行するCPU1001とによって構成される。また、類似部分抽出部12および情報連結部13は、ROM1003および記憶装置1004に記憶されたコンピュータ・プログラムおよび各種データをRAM1002に読み込んで実行するCPU1001によって構成される。また、優先度決定部14は、出力装置1006と、ROM1003および記憶装置1004に記憶されたコンピュータ・プログラムおよび各種データをRAM1002に読み込んで実行するCPU1001とによって構成される。なお、静的解析装置1およびその各機能ブロックのハードウェア構成は、上述の構成に限定されない。
【0023】
静的解析部11は、入力されたソースコードに対して静的解析を行い、解析結果として警告情報を生成する。例えば、静的解析部11は、ソースコード内における不具合に繋がりやすいパターンを検出する公知の各種技術を採用可能である。また、ソースコードは、1つ以上の一群のファイルに記述されたものであってもよい。例えば、静的解析部11は、記憶装置1004におけるソースコードの格納場所を特定する情報を入力装置1005を介して取得することにより、ソースコードを取得してもよい。警告情報には、警告位置情報と、警告識別情報とが少なくとも含まれる。ここで、警告位置情報とは、ソースコードにおける警告箇所の位置を表す情報である。例えば、警告位置情報は、警告箇所が含まれるファイル名と、警告箇所の行番号とを含む情報であってもよい。また、警告識別情報とは、警告の種別を識別する情報である。
【0024】
類似部分抽出部12は、ソースコードにおいて互いに類似する部分(類似部分)を抽出する。例えば、類似部分抽出部12は、ソースコードにおける任意の範囲の部分について、所定の類似条件を満たす他の部分を抽出する。任意の範囲とは、例えば、数行から数十行などの範囲であってもよい。所定の類似条件とは、例えば、識別子や引数など一部だけが異なり残る部分が同一であることや、コメントや空白文字などプログラムの動作に影響しない箇所だけが異なり残る部分が同一であることなどであってもよい。その他、類似部分抽出部12は、テキストデータにおいて互いに類似する部分を抽出する公知の各種技術を採用してもよい。
【0025】
また、類似部分抽出部12は、抽出した各類似部分について、類似識別情報と、範囲情報とを含む類似部分情報を生成する。ここで、類似識別情報は、互いに類似する類似部分を、他の互いに類似する類似部分から識別するための情報である。つまり、類似識別情報は、互いに類似する類似部分のグループごとに、異なる値が付与される。範囲情報は、ソースコードにおける該当部分の範囲を表す。例えば、範囲情報は、その類似部分が含まれるファイル名と、開始行番号と、終了行番号とを含む情報であってもよい。
【0026】
情報連結部13は、静的解析部11により出力された警告情報および類似部分抽出部12により生成された類似部分情報を照合することにより、各警告情報に対して類似識別情報を追加した連結警告情報を生成する。具体的には、情報連結部13は、各警告情報に対して、その警告情報の示す警告箇所の位置を含む類似部分があればその類似識別情報を追加すればよい。
【0027】
優先度決定部14は、情報連結部13により生成された連結警告情報に対して、警告識別情報および類似識別情報に基づく優先度決定基準にしたがって優先度を付ける。そして、優先度決定部14は、決定した優先度にしたがって、連結警告情報を出力装置1006に出力する。
【0028】
例えば、優先度決定部14は、警告識別情報および類似識別情報の組み合わせが同一の警告情報の数をカウントし、カウント数が多い順により高い優先度をつけてもよい。また、その場合、優先度決定部14は、同一の優先度となった警告情報については、同一の類似識別情報のカウント数がより多い順により高い優先度をつけてもよい。その場合、優先度決定部14は、さらに同一の優先度となった警告情報については、同一の警告識別情報のカウント数がより多い順により高い優先度をつけてもよい。その他、優先度決定部14は、警告識別情報および類似識別情報に基づく基準であれば、その他の優先度決定基準により優先度付けを行ってもよい。
【0029】
以上のように構成された静的解析装置1の動作について、
図3を参照して説明する。
【0030】
まず、静的解析部11は、入力されたソースコードに対して静的解析を行い、警告位置情報と警告識別情報とからなる警告情報を生成する(ステップS1)。
【0031】
次に、類似部分抽出部12は、ソースコードにおいて、互いに類似する類似部分を抽出し、抽出した各類似部分について、類似識別情報と範囲情報とからなる類似部分情報を生成する(ステップS2)。
【0032】
次に、情報連結部13は、ステップS1で生成された各警告情報に、ステップS2で生成された類似部分情報の類似識別情報を追加した連結警告情報を生成する(ステップS3)。具体的には、前述のように、情報連結部13は、各警告情報に、その警告情報の示す警告箇所の位置を含む類似部分の類似識別情報を追加すればよい。
【0033】
次に、優先度決定部14は、ステップS3で生成された連結警告情報について、警告識別情報および類似識別情報に基づく優先度決定基準にしたがって優先度を付ける。そして、優先度決定部14は、決定した優先度にしたがって、連結警告情報を出力する(ステップS4)。
【0034】
以上で、静的解析装置1は動作を終了する。
【0035】
次に、静的解析装置1の動作を具体例で示す。
【0036】
ここでは、静的解析部11は、不具合に繋がりやすい記述のパターンを記憶し、ソースコードにおいてパターンと合致する箇所を、ルール違反の可能性がある警告箇所として検出するものとする。
【0037】
まず、ステップS1において、静的解析部11は、入力されたソースコードのうち、記憶しているパターンに合致する警告箇所を検出し、警告情報を生成する。ここでは、
図4に示す警告情報が生成されたものとする。
図4において、各行が示す警告情報は、警告位置情報としてのファイル名および行番号と、警告識別情報としての警告IDとを含み、さらに、警告内容と、該当行ソースコード(該当行の記述内容)とを含んでいる。このように、静的解析部11によって生成される警告情報は、少なくとも警告位置情報および警告識別情報を含んでいれば、その他の情報を含んでいてもよい。以降、これらの警告情報を、警告テーブルとも記載する。
【0038】
次に、ステップS2において、類似部分抽出部12は、入力されたソースコードにおいて互いに類似する類似部分を抽出する。この具体例では、類似部分抽出部12は、数行から数十行程度の範囲の部分に対して、例えば、識別子、引数など一部だけが異なっている他の部分や、コメントや空白文字などプログラムの動作に影響しない箇所だけが異なっている他の部分を、類似部分として抽出する。
【0039】
そして、類似部分抽出部12は、抽出した各類似部分について、類似識別情報としての類似IDと、範囲情報とからなる類似部分情報を生成する。ここでは、
図5に示す類似部分情報が生成されたものとする。
図5において、各行が示す類似部分情報は、範囲情報としてのファイル名、開始行番号、および、終了行番号と、類似IDとを含む。また、互いに類似する類似部分のグループには、他の互いに類似する類似部分のグループから識別するための同一の類似IDが付与される。以降、これらの類似部分情報を、類似部分テーブルとも記載する。
【0040】
次に、ステップS3において、情報連結部13は、
図4に示した警告テーブルと、
図5に示した類似テーブルとを照合することにより、各警告情報に類似IDを追加して連結警告情報を生成する。
【0041】
具体的には、情報連結部13は、各警告情報について、その警告位置情報を含む範囲情報を持つ類似部分情報を検索する。そして、そのような類似部分情報が検索された場合、情報連結部13は、該当する警告テーブルの行に、検索した類似部分情報の類似IDを追加すればよい。
【0042】
例えば、
図4に示した警告テーブルの1行目の警告情報は、該当する警告箇所が「ファイル“A0001.c”の“111”行目」にあることを表している。また、この「“A0001.c”の“111”行目」は、
図5に示した類似テーブルの1行目の類似部分情報の範囲である「ファイル“A0001.c”の開始行“110”行目から終了行“119”行目まで」に含まれている。そこで、情報連結部13は、
図4の警告テーブルの1行目に、類似テーブルの1行目の類似IDである“001”を追加する。また、
図4に示した警告テーブルの3行目の警告情報は、該当する警告箇所が「ファイル“A0001.c”の“238”行目」にあることを表している。また、この「“A0001.c”の“238”行目」を含む範囲の類似部分情報は、
図5に示した類似テーブルに含まれていない。そこで、情報連結部13は、
図4の警告テーブルの3行目に、類似IDを追加しない。そして、情報連結部13は、
図4の警告テーブルの他の行についても、同様に処理を行っていく。このようにして、類似IDが追加された連結警告情報の一例を
図6に示す。以降、これらの連結警告情報を、連結警告テーブルとも記載する。
【0043】
次に、ステップS4において、優先度決定部14は、
図6の連結警告テーブルの各行に対して、警告IDおよび類似IDに基づく優先度決定基準を用いて、優先度を付与する。
【0044】
ここでは、優先度決定部14は、まず、警告IDおよび類似IDの組み合わせが同一の連結警告情報のカウント数が多い順に、より高い優先度を付与する。また、優先度決定部14は、警告IDおよび類似IDの組み合わせのカウント数が同一のものについては、同一の類似IDのカウント数の多い順に、より高い優先度を付与する。さらに、優先度決定部14は、類似IDのカウント数が同一のものについては、同一の警告IDのカウント数の多い順に、より高い優先度を付与する。
【0045】
例えば、
図6において、警告IDが“ID505”であり、かつ、類似IDが“001”である連結警告情報のカウント数は、1、4、7行目の3つである。また、警告IDが“ID607”であり、かつ、類似IDが“002”である連結警告情報のカウント数は、2、6行目の2つである。それ以外の各連結警告情報は、類似IDおよび警告IDの組み合わせが同一のものが他にないため、カウント数は1つとなる。そこで、まず、優先度決定部14は、1、4、7行目に優先度1を付与し、2、6行目に優先度2を付与する。なお、ここでは、優先度の値が小さいほど、優先度が高いことを表すものとする。
【0046】
また、残りの3、5、8行目は、類似IDおよび警告IDの組み合わせのカウント数が1で同一である。そのため、優先度決定部14は、3、5、8行目について、類似IDのカウント数に基づいて優先度付けを行う。ここで、3、5、8行目の類似IDのうち、5行目の類似ID“001”が、1〜8行目におけるカウント数が4つで最も多い。したがって、優先度決定部14は、5行目に優先度3を付与する。
【0047】
そして、残りの3、8行目は、類似IDが追加されていないため、類似IDのカウント数が0で同一となる。そのため、優先度決定部14は、3、8行目について、警告IDのカウント数に基づいて優先度付けを行う。ここで、3、8行目の警告IDのうち、8行目の警告ID“ID505”が、1〜8行目におけるカウント数が4つで最も多い。したがって、優先度決定部14は、8行目に優先度4を付与する。そして、優先度決定部14は、残る3行目の警告情報に、優先度5を付与する。このようにして優先度が決定された連結警告情報を
図7に示す。
図7において、連結警告情報は、優先度の高い順に上から並べ替えられている。そして、優先度決定部14は、付与した優先度にしたがって、
図7に示した順序で連結警告情報を出力してもよい。
【0048】
以上で、静的解析装置1の具体的な動作の説明を終了する。
【0049】
次に、本発明の第1の実施の形態の効果について述べる。
【0050】
本発明の第1の実施の形態としての静的解析装置は、ソースコードに対する静的解析の結果を精度よく優先度付けして提示することができる。
【0051】
その理由は、静的解析部が、ソースコードに対する静的解析を行った結果として警告位置情報および警告識別情報を含む警告情報を生成し、類似部分抽出部が、ソースコードにおいて互いに類似する類似部分を抽出し、各類似部分について類似識別情報および範囲情報を含む類似部分情報を生成し、情報連結部が、各警告情報に、その警告箇所の位置を含む類似部分の類似識別情報を追加し、優先度決定部が、警告識別情報および類似識別情報に基づく優先度決定基準を用いて、警告情報に優先度付けを行い、優先度にしたがって出力するからである。
【0052】
これにより、本実施の形態は、静的解析によって得られた各警告箇所を、他の警告箇所との関わりに応じた優先順序で、ユーザに提示することができる。例えば、ソースコードにおいて、誤った記述を含む部分が複数の箇所に複製されている場合を考える。この場合、複製先で変数名等の若干の記述変更があったとしても、本実施の形態は、それらの複数の誤った記述についての各警告情報に、同一の警告識別情報および同一の類似識別情報を付与することになる。したがって、本実施の形態は、そのような一群の警告箇所の優先度を高くして出力することになる。その結果、本実施の形態は、複製された誤った記述に対する一群の警告を、より優先して確認すべきものとして提示することができ、ソフトウェア開発者の修正作業における負荷を軽減することができる。このように、本実施の形態を用いることにより、ソフトウェア開発者は、他の警告箇所との関係性の強い警告を容易に絞り込んで修正することができ、非常に効率がよい。
【0053】
しかも、本実施の形態は、ソースコードにおいて抽出した任意の範囲の類似部分に基づいて優先度付けを行うため、ソースコードにおいて類似部分として抽出するための単位を事前に設定しておく必要がない。したがって、本実施の形態は、ソフトウェア開発者の事前設定作業を必要とせずに、静的解析の結果を精度よく優先度付けして提示することができる。
【0054】
(第2の実施の形態)
次に、本発明の第2の実施の形態について図面を参照して詳細に説明する。なお、本実施の形態の説明において参照する各図面において、本発明の第1の実施の形態と同一の構成および同様に動作するステップには同一の符号を付して本実施の形態における詳細な説明を省略する。
【0055】
まず、本発明の第2の実施の形態としての静的解析装置2の機能ブロック構成を
図8に示す。
図8において、静的解析装置2は、本発明の第1の実施の形態としての静的解析装置1に対して、情報連結部13に替えて情報連結部23と、優先度決定部14に替えて優先度決定部24とを備え、さらに、差分抽出部25を備える点が異なる。
【0056】
ここで、静的解析装置2は、
図2を参照して説明した本発明の第1の実施の形態としての静的解析装置1と同様のハードウェア要素を備えるコンピュータ装置によって構成可能である。この場合、差分抽出部25は、入力装置1005と、ROM1003および記憶装置1004に記憶されたコンピュータ・プログラムおよび各種データをRAM1002に読み込んで実行するCPU1001とによって構成される。なお、静的解析装置2およびその各機能ブロックのハードウェア構成は、上述の構成に限定されない。
【0057】
差分抽出部25は、対象のソースコードについて、以前のソースコードに対する差分を抽出し、抽出した差分の範囲を表す差分情報を生成する。例えば、差分情報は、ソースコードの差分該当部分を含むファイル名、開始行番号、および、終了行番号からなる情報であってもよい。また、例えば、差分抽出部25は、記憶装置1004における以前のソースコードの格納場所を特定する情報を、入力装置1005を介して取得することにより、以前のソースコードを取得してもよい。
【0058】
情報連結部23は、静的解析部11によって生成された警告情報に、類似識別情報および後述する差分有無情報を追加した連結警告情報を生成する。まず、情報連結部23は、本発明の第1の実施の形態における情報連結部13と同様に、各警告情報に類似識別情報を追加する。加えて、情報連結部23は、静的解析部11によって生成された警告情報および差分抽出部25によって生成された差分情報を照合することにより、各警告情報に対して、該警告情報の示す警告箇所の位置を含む差分の範囲があるか否かを判断する。そして、情報連結部23は、警告箇所の位置を含む差分の範囲がある警告情報に対して、「差分有り」を表す差分有無情報を追加すればよい。また、情報連結部23は、警告箇所の位置を含む差分の範囲がない警告情報に対して、「差分無し」を表す差分有無情報を追加すればよい。
【0059】
優先度決定部24は、本発明の第1の実施の形態における優先度決定部14に対して、警告識別情報および類似識別情報に加えて、さらに差分有無情報に基づく優先度決定基準を用いる点が異なる。例えば、優先度決定部24は、警告識別情報および類似識別情報の組み合わせが一致する連結警告情報のグループにおいて全てが差分有りの場合、それらの連結警告情報に対して、全てが差分有りではないグループより高い優先度を設定してもよい。これは、そのような一群の連結警告情報の全てが差分有りの場合、新規の警告であるみなすことができ、優先して確認したほうがよいためである。また、警告識別情報および類似識別情報の組み合わせが一致する連結警告情報のグループに、差分有りと差分無しとが混在する場合、そのような一群の連結警告情報は、過去に対応不要であることが確認された警告であるとみなすことができるからである。
【0060】
また、優先度決定部24は、優先度決定基準の設定変更を表す情報を取得すると、設定変更された優先度決定基準を用いて優先度を更新してもよい。例えば、優先度決定部24は、一旦決定した優先度を用いて連結警告情報を出力した後、入力装置1005を介して、優先度決定基準の設定変更を表す情報を取得してもよい。例えば、優先度決定基準の設定変更を表す情報とは、差分有無情報を考慮するか否かの設定を変更する内容であってもよい。また、例えば、優先度決定基準の設定変更を表す情報とは、警告識別情報および類似識別情報の組み合わせが一致するカウント数が同一の場合に、同一の類似識別情報のカウント数と、同一の警告識別情報のカウント数とのどちらを優先的に比較するかを変更する内容であってもよい。
【0061】
以上のように構成された静的解析装置2の動作について、
図9を参照して説明する。
【0062】
まず、静的解析装置2は、ステップS1〜S2まで、本発明の第1の実施の形態としての静的解析装置1と同様に動作することにより、静的解析の結果である警告情報と、類似部分情報とを生成する。
【0063】
次に、差分抽出部25は、以前のソースコードがあるか否かを判断する(ステップS13)。
【0064】
ここで、以前のソースコードがなければ、静的解析装置2は、
図3に示したステップS3〜S4を実行して処理を終了する。
【0065】
一方、以前のソースコードがあれば、差分抽出部25は、対象のソースコードについて、以前のソースコードからの差分を抽出し、その範囲を表す差分情報を生成する(ステップS14)。
【0066】
次に、情報連結部23は、ステップS1で生成された各警告情報に対して、類似識別情報と差分有無情報とを追加した連結警告情報を生成する(ステップS15)。具体的には、前述のように、情報連結部23は、各警告情報に、その警告箇所の位置を含む類似部分の類似識別情報を追加するとともに、その警告箇所の位置を含む差分の範囲があるか否かを表す差分有無情報を追加すればよい。
【0067】
次に、優先度決定部24は、ステップS15で生成された各連結警告情報に対して、警告識別情報、類似識別情報、および、差分有無情報に基づく優先度決定基準を用いて、優先度を決定する。そして、優先度決定部24は、決定した優先度にしたがって、連結警告情報を出力する(ステップS16)。
【0068】
次に、優先度決定部24は、優先度決定基準の設定変更を表す情報が入力されたか否かを判断する(ステップS17)。
【0069】
ここで、設定変更を表す情報が入力されなければ、静的解析装置2は動作を終了する。
【0070】
一方、設定変更を表す情報が入力された場合、優先度決定部24は、ステップS16からの動作を繰り返す。
【0071】
以上で、静的解析装置2の動作の説明を終了する。
【0072】
次に、静的解析装置2の動作を具体例で示す。
【0073】
ここでは、本発明の第1の実施の形態における具体例と同様に、ステップS1において、静的解析部11によって
図4に示した警告テーブルが生成され、ステップS2において、類似部分抽出部12によって
図5に示した類似テーブルが生成されたものとする。
【0074】
次に、ステップS13において、差分抽出部25は、以前のソースコードがあると判断したものとする。
【0075】
そこで、ステップS14において、差分抽出部25は、対象のソースコードの以前のソースコードに対する差分情報を生成する。ここでは、
図10に示す差分情報が生成されたとする。この具体例では、差分情報は、その差分の範囲を含むファイル名と、開始行番号と、終了行番号とからなるものとする。以降、これらの差分情報を、差分テーブルとも記載する。
【0076】
次に、ステップS15において、情報連結部23は、
図4の警告テーブルと、
図5の類似テーブルと、
図10の差分テーブルとを照合することにより、警告情報に類似IDおよび差分有無情報を追加した連結警告情報を生成する。
【0077】
例えば、情報連結部23は、
図4に示した警告テーブルの1行目の警告情報は、警告箇所が「ファイル“A0001.c”の“111”行目」にあることを表している。また、この「ファイル“A0001.c”の“111”行目」は、
図10に示した差分テーブルに示された差分情報に含まれていない。そこで、情報連結部23は、
図4の警告テーブルの1行目には、差分無しを表す差分有無情報を追加する。また、
図4に示した警告テーブルの4行目の警告情報は、警告箇所が「ファイル“A0001.c”の“311”行目」にあることを表している。また、この「ファイル“A0001.c”の“311”行目」は、
図10に示した差分テーブルの1行目の差分情報に含まれている。そこで、情報連結部23は、警告テーブルの4行目に、差分有りを表す差分有無情報を追加する。
【0078】
このようにして差分有無情報および類似IDが追加された連結警告情報の一例を
図11に示す。以降、これらの連結警告情報を、連結警告テーブルとも記載する。
【0079】
次に、ステップS16において、優先度決定部24は、
図11に示した連結警告テーブルの各行に対して、警告ID、類似IDおよび差分有無情報に基づく優先度決定基準を用いて、優先度を付与する。
【0080】
ここでは、優先度決定部24は、まず、警告IDおよび類似IDの組み合わせが同一の連結警告情報のグループで、全てが差分有りとなっているものを最も優先度の高いものとして設定する。
【0081】
具体的には、
図11の連結警告テーブルにおいて、警告IDおよび類似IDの組み合わせが同一の連結警告情報のグループとしては、1、4、7行目からなるグループ1と、2、6行目からなるグループ2と、3行目からなるグループ3と、5行目からなるグループ4と、8行目からなるグループ5とがある。このうち、全てが差分有りとなっているものは、5行目からなるグループ4である。そこで、優先度決定部24は、5行目に、優先度1を付与する。
【0082】
また、残りのグループでは、全てが差分有りとなっているものはない。そこで、優先度決定部24は、残りの連結警告情報について、本発明の第1の実施の形態の具体例における優先度決定部14と同様の基準で優先度を付与する。このようにして優先度が決定された連結警告情報を
図12に示す。
図12において、連結警告情報は、優先度の高い順に上から並べ替えられている。そして、優先度決定部24は、付与した優先度にしたがって、
図12に示した順序で連結警告情報を出力してもよい。
【0083】
このように、優先度決定部24は、(a)警告IDおよび類似IDが同一のグループにおける差分有無情報の構成、(b)警告IDおよび類似IDが同一のカウント数、(c)類似IDが同一のカウント数、(d)警告IDが同一のカウント数の順に優先度決定基準として用いている。
【0084】
さらに、ここで、ステップS17において、入力装置1005を介して、優先度決定基準を、差分有無情報を考慮せずに比較するよう設定変更する情報が入力されたとする。
【0085】
そこで、優先度決定部24は、上述の(b)、(c)、(d)の順に優先度決定基準として用いて、ステップS16を再度実行する。これにより、優先度決定部24は、本発明の第1の実施の形態の具体例で示した
図7のような優先度を決定し、出力する。
【0086】
以上で、静的解析装置2の具体的な動作の説明を終了する。
【0087】
次に、本発明の第2の実施の形態の効果について述べる。
【0088】
本発明の第2の実施の形態としての静的解析装置は、ソースコードに対する静的解析の結果をさらに精度よく優先度付けして提示することができる。
【0089】
その理由は、静的解析部が警告情報を生成し、類似部分抽出部が類似部分情報を生成することに加えて、差分抽出部が、対象のソースコードについて以前のソースコードからの差分の範囲を抽出して差分情報を生成し、情報連結部が、各警告情報に、類似識別情報を追加することに加えて、その警告位置情報を含む差分の範囲があるか否かを表す差分有無情報を追加し、優先度決定部が、警告識別情報、類似識別情報、および、差分有無情報に基づく優先度決定基準を用いて、警告情報に優先度付けを行い、優先度にしたがって出力するからである。
【0090】
これにより、本実施の形態は、静的解析によって得られた各警告箇所について、他の警告箇所との関わりに応じた優先度を付与する際に、差分有無情報を考慮する。例えば、警告識別情報および類似識別情報が一致する連結警告情報のグループが全て差分有りである場合、それらの警告は、新規の警告である可能性が高く、優先度が高いと考えられる。一方、そのようなグループにおいて差分有りと差分無しとが混在する場合、それらの警告は、以前に指摘され対応不要であることが確認された警告である可能性が高く、優先度が低いと考えられる。このように、本実施の形態は、差分有無情報を考慮することにより、他の警告箇所との関係性の強い警告を優先して提示しながらも、さらに、以前から指摘を受けている警告に関連する警告よりも、以前には指摘をされていない新規に発生した警告を優先してユーザに提示することができる。
【0091】
なお、上述した本発明の各実施の形態において、静的解析装置の各機能ブロックが、記憶装置またはROMに記憶されたコンピュータ・プログラムを実行するCPUによって実現される例を中心に説明したが、各機能ブロックの一部、全部、または、それらの組み合わせが専用のハードウェアにより実現されていてもよい。
【0092】
また、上述した本発明の各実施の形態において、静的解析装置の機能ブロックは、複数の装置に分散されて実現されてもよい。
【0093】
また、上述した本発明の各実施の形態において、各フローチャートを参照して説明した静的解析装置の動作を、本発明のコンピュータ・プログラムとしてコンピュータ装置の記憶装置(記憶媒体)に格納しておき、係るコンピュータ・プログラムを当該CPUが読み出して実行するようにしてもよい。そして、このような場合において、本発明は、係るコンピュータ・プログラムのコードあるいは記憶媒体によって構成される。
【0094】
また、上述した各実施の形態は、適宜組み合わせて実施されることが可能である。
【0095】
また、本発明は、上述した各実施の形態に限定されず、様々な態様で実施されることが可能である。