(57)【要約】【課題】ソースコードに対する静的解析の結果を精度よく優先度付けして提示することにより、ソフトウェア開発者の負荷を軽減する技術を提供すること。【解決手段】ソースコードに対する静的解析結果として、警告位置情報と警告識別情報とを含む警告情報を生成する静的解析部１１と、ソースコードにおいて互いに類似する類似部分を抽出し、各類似部分について、類似識別情報と範囲情報とを含む類似部分情報を生成する類似部分抽出部１２と、警告情報および類似部分情報を照合することにより、各警告情報に対して、該警告情報の示す警告箇所の位置を含む類似部分の類似識別情報を追加した連結警告情報を生成する情報連結部１３と、連結警告情報に対して、警告識別情報および類似識別情報に基づく優先度決定基準を用いて優先度を決定する優先度決定部１４と、を備える。【選択図】図１
2015026276.tif 000002
【特許請求の範囲】
【請求項１】
入力されたソースコードに対して静的解析を行うことにより、前記ソースコードにおける警告箇所の位置を表す警告位置情報と、警告の種別を識別する警告識別情報とを含む警告情報を生成する静的解析部と、
前記ソースコードにおいて互いに類似する部分（類似部分）を抽出することにより、各類似部分について、該互いに類似する類似部分を他の互いに類似する類似部分から識別する類似識別情報と、該類似部分の範囲を表す範囲情報とを含む類似部分情報を生成する類似部分抽出部と、
前記警告情報および前記類似部分情報を照合することにより、各警告情報に対して、該警告情報の示す警告箇所の位置を含む類似部分の類似識別情報を追加した連結警告情報を生成する情報連結部と、
前記連結警告情報に対して、前記警告識別情報および前記類似識別情報に基づく優先度決定基準を用いて優先度を決定し、決定した優先度にしたがって前記連結警告情報を出力する優先度決定部と、
を備えた静的解析装置。
【請求項２】
前記ソースコードについて、以前のソースコードに対する差分を抽出し、抽出した差分の範囲を表す差分情報を生成する差分抽出部をさらに備え、
前記情報連結部は、前記警告情報および前記差分情報を照合することにより、各警告情報に対して、該警告情報の示す警告箇所の位置を含む差分の範囲があるか否かを表す差分有無情報を、前記類似識別情報に加えてさらに追加した前記連結警告情報を生成し、
前記優先度決定部は、前記警告識別情報および前記類似識別情報に加えて、前記差分有無情報に基づく前記優先度決定基準を用いて前記優先度を決定することを特徴とする請求項１に記載の静的解析装置。
【請求項３】
前記優先度決定部は、前記優先度決定基準の設定変更を表す情報を取得すると、設定変更した前記優先度決定基準を用いて前記優先度を更新することを特徴とする請求項１または請求項２に記載の静的解析装置。
【請求項４】
入力されたソースコードに対して静的解析を行うことにより、前記ソースコードにおける警告箇所の位置を表す警告位置情報と、警告の種別を識別する警告識別情報とを含む警告情報を生成し、
前記ソースコードにおいて互いに類似する部分（類似部分）を抽出することにより、各類似部分について、該互いに類似する類似部分を他の互いに類似する類似部分から識別する類似識別情報と、該類似部分の範囲を表す範囲情報とを含む類似部分情報を生成し、
前記警告情報および前記類似部分情報を照合することにより、各警告情報に対して、該警告情報の示す警告箇所の位置を含む類似部分の類似識別情報を追加した連結警告情報を生成し、
前記連結警告情報に対して、前記警告識別情報および前記類似識別情報に基づく優先度決定基準を用いて優先度を決定し、決定した優先度にしたがって前記連結警告情報を出力する、静的解析方法。
【請求項５】
前記ソースコードについて、以前のソースコードに対する差分を抽出し、抽出した差分の範囲を表す差分情報を生成し、
前記警告情報および前記差分情報を照合することにより、各警告情報に対して、該警告情報の示す警告箇所の位置を含む差分の範囲があるか否かを表す差分有無情報を、前記類似識別情報に加えてさらに追加した前記連結警告情報を生成し、
前記警告識別情報および前記類似識別情報に加えて、前記差分有無情報に基づく前記優先度決定基準を用いて前記優先度を決定することを特徴とする請求項４に記載の静的解析方法。
【請求項６】
前記優先度決定基準の設定変更を表す情報を取得すると、設定変更した前記優先度決定基準を用いて前記優先度を更新することを特徴とする請求項４または請求項５に記載の静的解析方法。
【請求項７】
入力されたソースコードに対して静的解析を行うことにより、前記ソースコードにおける警告箇所の位置を表す警告位置情報と、警告の種別を識別する警告識別情報とを含む警告情報を生成する静的解析ステップと、
前記ソースコードにおいて互いに類似する部分（類似部分）を抽出することにより、各類似部分について、該互いに類似する類似部分を他の互いに類似する類似部分から識別する類似識別情報と、該類似部分の範囲を表す範囲情報とを含む類似部分情報を生成する類似部分抽出ステップと、
前記警告情報および前記類似部分情報を照合することにより、各警告情報に対して、該警告情報の示す警告箇所の位置を含む類似部分の類似識別情報を追加した連結警告情報を生成する情報連結ステップと、
前記連結警告情報に対して、前記警告識別情報および前記類似識別情報に基づく優先度決定基準を用いて優先度を決定し、決定した優先度にしたがって前記連結警告情報を出力する優先度決定ステップと、
をコンピュータ装置に実行させるコンピュータ・プログラム。
【請求項８】
前記ソースコードについて、以前のソースコードに対する差分を抽出し、抽出した差分の範囲を表す差分情報を生成する差分抽出ステップをさらに前記コンピュータ装置に実行させ、
前記情報連結ステップにおいて、前記警告情報および前記差分情報を照合することにより、各警告情報に対して、該警告情報の示す警告箇所の位置を含む差分の範囲があるか否かを表す差分有無情報を、前記類似識別情報に加えてさらに追加した前記連結警告情報を生成し、
前記優先度決定ステップにおいて、前記警告識別情報および前記類似識別情報に加えて、前記差分有無情報に基づく前記優先度決定基準を用いて前記優先度を決定することを特徴とする請求項７に記載のコンピュータ・プログラム。
【請求項９】
前記優先度決定基準の設定変更を表す情報の取得に応じて、設定変更した前記優先度決定基準を用いて前記優先度決定ステップを前記コンピュータ装置に実行させることを特徴とする請求項７または請求項８に記載のコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソースコードに対する静的解析を行う静的解析装置、静的解析方法、およびコンピュータ・プログラムに関する。
【背景技術】
【０００２】
ソフトウェア開発において、ソースコードに対する静的解析を行う静的解析装置が知られている。静的解析は、動作不良などの不具合を起こす可能性を減らす目的で行われる。静的解析装置は、不具合に繋がりやすいパターンを予め定義しておき、ソースコードを実際に実行することなく、ソースコード内から定義に合致する記述誤りのある箇所、または、記述誤りの可能性が高い箇所を特定して警告を出力する。ソフトウェアの開発者は、それらの警告のうち修正が必要と判断した警告を修正することを繰り返し、ソースコードの品質改善を行う。
【０００３】
ここで、ソースコードでは、複数の箇所に類似する動作が記述されることが多い。そこで、ソフトウェア開発者は、関数単位、行単位などの様々な単位で、ソースコードの複製を行うことがある。もし、複製元の記述に誤りがあると、複製先にも同様の誤りが記述される。そのような場合、静的解析装置は、多数の同一の警告を出力してしまう。
【０００４】
さらに、静的解析装置により出力される警告は、ソースコードの規模が大きくなるにつれ増加していく傾向がある。また、これらの警告には、実際には、不具合に繋がる警告も不具合に繋がらない警告も含まれる。したがって、静的解析装置から出力されるすべての警告を確認することは、ソフトウェア開発者にとって困難になっている。このため、どの警告を修正すべきかを提示する技術が求められている。
【０００５】
このような要求に対応する関連技術が、特許文献１に記載されている。特許文献１の関連技術は、対象のソースコードが、あらかじめ規定されたソースコードのコーディングルールに準拠しているかどうかを解析し、準拠していない違反箇所に関連する情報を、解析結果として出力する。このとき、この関連技術は、コーディングルールのルールＩＤごとに出力要否を設定しておき、出力要と設定されたルールＩＤに対応する違反箇所を出力する。
【０００６】
また、他の関連技術が、特許文献２に記載されている。特許文献２に記載された関連技術は、初回記憶時のソースコードから前回記憶時までのソースコードについて、モジュール単位で変更の履歴を管理する。そして、この関連技術は、新たなソースコードに対して静的解析を行って検出した不具合箇所のうち、変更の累計回数がより多いモジュールで検出された不具合箇所から順に警告を出力する。
【０００７】
また、他の関連技術が、特許文献３に記載されている。特許文献３に記載された関連技術は、ソースコードの静的解析を行うことにより得られる警告箇所について、警告種別を表す警告ＩＤと、警告箇所を含むソースコード行とを含むレコードからなる警告テーブルを生成する。そして、この関連技術は、警告ＩＤおよびソースコード行の同一性に基づいて警告テーブルをソートし出力する。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２０１０−１９８５２２号公報
【特許文献２】特開２００８−２１２４４号公報
【特許文献３】特開２０１２−２４８０５０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
上述した各関連技術は、ソースコードの静的解析時に出力する膨大な警告について、ある程度優先順位をつけて出力することができるものの、依然として以下のような課題がある。
【００１０】
特許文献１に記載された関連技術は、ルールＩＤ毎に出力要否を選択できるが、実際には、同じルールＩＤの警告であっても、対応が必要な警告と対応が不要な警告とに区別できる場合が大いにある。このため、この関連技術は、対応が不要な警告のルールＩＤを出力否に設定すると、対応が必要な警告も出力できなくなってしまう。このように、この関連技術は、静的解析時に出力される警告に対する優先度付けの精度が十分でない。
【００１１】
また、特許文献２に記載された関連技術は、更新回数がより多いモジュールにおいて指摘された警告に対してより高い優先度付けを行う。しかし、この関連技術では、モジュールの単位の取り方によって更新回数が変わり、優先度も異なってくるため、モジュールの単位を適切に設定する必要がある。また、この関連技術は、モジュールを機能単位で設定した場合、機能単位ごとに優先度を付けることになる。ここで、ある機能において記述されたある関数が、別の機能において再利用のためコピーされ、コピー元およびコピー先で同一の警告が出力される場合について考える。このような場合、この関連技術は、これらの警告が複製された記述に起因する同一の警告であるにも関わらず、コピー元およびコピー先が異なるモジュールに含まれるため、異なる優先順位付けをする可能性が高い。このように、この関連技術は、出力される警告に対して精度よく優先度付けをすることができない。
【００１２】
また、特許文献３に記載された関連技術は、静的解析の結果を、警告種別およびソースコード行の同一性に基づいて並び替えて表示する。しかし、この関連技術は、実際には複製された記述に基づく同一の警告であっても、ソースコード行が若干異なるだけで、異なる警告として扱ってしまう場合がある。また、この関連技術は、ソースコードの行単位で同一性を判断し、モジュール単位などの他の単位で同一性を判断しないため、実際には同一とみなせる記述を同一であると判断できないことがある。その結果、この関連技術は、静的解析の結果を、精度よく優先度付けして提示することができない。
【００１３】
本発明は、上述の課題を解決するためになされたもので、ソースコードに対する静的解析の結果を精度よく優先度付けして提示する技術を提供することを目的とする。
【課題を解決するための手段】
【００１４】
本発明の静的解析装置は、入力されたソースコードに対して静的解析を行うことにより、前記ソースコードにおける警告箇所の位置を表す警告位置情報と、警告の種別を識別する警告識別情報とを含む警告情報を生成する静的解析部と、前記ソースコードにおいて互いに類似する部分（類似部分）を抽出することにより、各類似部分について、該互いに類似する類似部分を他の互いに類似する類似部分から識別する類似識別情報と、該類似部分の範囲を表す範囲情報とを含む類似部分情報を生成する類似部分抽出部と、前記警告情報および前記類似部分情報を照合することにより、各警告情報に対して、該警告情報の示す警告箇所の位置を含む類似部分の類似識別情報を追加した連結警告情報を生成する情報連結部と、前記連結警告情報に対して、前記警告識別情報および前記類似識別情報に基づく優先度決定基準を用いて優先度を決定し、決定した優先度にしたがって前記連結警告情報を出力する優先度決定部と、を備える。
【００１５】
また、本発明の静的解析方法は、入力されたソースコードに対して静的解析を行うことにより、前記ソースコードにおける警告箇所の位置を表す警告位置情報と、警告の種別を識別する警告識別情報とを含む警告情報を生成し、前記ソースコードにおいて互いに類似する部分（類似部分）を抽出することにより、各類似部分について、該互いに類似する類似部分を他の互いに類似する類似部分から識別する類似識別情報と、該類似部分の範囲を表す範囲情報とを含む類似部分情報を生成し、前記警告情報および前記類似部分情報を照合することにより、各警告情報に対して、該警告情報の示す警告箇所の位置を含む類似部分の類似識別情報を追加した連結警告情報を生成し、前記連結警告情報に対して、前記警告識別情報および前記類似識別情報に基づく優先度決定基準を用いて優先度を決定し、決定した優先度にしたがって前記連結警告情報を出力する。
【００１６】
また、本発明のコンピュータ・プログラムは、入力されたソースコードに対して静的解析を行うことにより、前記ソースコードにおける警告箇所の位置を表す警告位置情報と、警告の種別を識別する警告識別情報とを含む警告情報を生成する静的解析ステップと、前記ソースコードにおいて互いに類似する部分（類似部分）を抽出することにより、各類似部分について、該互いに類似する類似部分を他の互いに類似する類似部分から識別する類似識別情報と、該類似部分の範囲を表す範囲情報とを含む類似部分情報を生成する類似部分抽出ステップと、前記警告情報および前記類似部分情報を照合することにより、各警告情報に対して、該警告情報の示す警告箇所の位置を含む類似部分の類似識別情報を追加した連結警告情報を生成する情報連結ステップと、前記連結警告情報に対して、前記警告識別情報および前記類似識別情報に基づく優先度決定基準を用いて優先度を決定し、決定した優先度にしたがって前記連結警告情報を出力する優先度決定ステップと、をコンピュータ装置に実行させる。
【発明の効果】
【００１７】
本発明は、ソースコードに対する静的解析の結果を、精度よく優先度付けして提示する技術を提供することができる。
【図面の簡単な説明】
【００１８】
【図１】本発明の第１の実施の形態としての静的解析装置の機能ブロック図である。
【図２】本発明の第１の実施の形態としての静的解析装置のハードウェア構成の一例を示す図である。
【図３】本発明の第１の実施の形態としての静的解析装置の動作を説明するフローチャートである。
【図４】本発明の第１の実施の形態における警告情報の一例を示す図である。
【図５】本発明の第１の実施の形態における類似部分情報の一例を示す図である。
【図６】本発明の第１の実施の形態における連結警告情報の一例を示す図である。
【図７】本発明の第１の実施の形態において優先度付けされた連結警告情報の一例を示す図である。
【図８】本発明の第２の実施の形態としての静的解析装置の機能ブロック図である。
【図９】本発明の第２の実施の形態としての静的解析装置の動作を説明するフローチャートである。
【図１０】本発明の第２の実施の形態における差分情報の一例を示す図である。
【図１１】本発明の第２の実施の形態における連結警告情報の一例を示す図である。
【図１２】本発明の第２の実施の形態において優先度付けされた連結警告情報の一例を示す図である。
【発明を実施するための形態】
【００１９】
以下、本発明の実施の形態について、図面を参照して詳細に説明する。
【００２０】
（第１の実施の形態）
本発明の第１の実施の形態としての静的解析装置１の機能ブロック構成を図１に示す。
【００２１】
図１において、静的解析装置１は、静的解析部１１と、類似部分抽出部１２と、情報連結部１３と、優先度決定部１４とを備える。
【００２２】
ここで、静的解析装置１は、図２に示すように、ＣＰＵ（Central Processing Unit）１００１と、ＲＡＭ（Random Access Memory）１００２と、ＲＯＭ（Read Only Memory）１００３と、ハードディスク等の記憶装置１００４と、入力装置１００５と、出力装置１００６とを備えたコンピュータ装置によって構成可能である。この場合、静的解析部１１は、入力装置１００５と、ＲＯＭ１００３および記憶装置１００４に記憶されたコンピュータ・プログラムおよび各種データをＲＡＭ１００２に読み込んで実行するＣＰＵ１００１とによって構成される。また、類似部分抽出部１２および情報連結部１３は、ＲＯＭ１００３および記憶装置１００４に記憶されたコンピュータ・プログラムおよび各種データをＲＡＭ１００２に読み込んで実行するＣＰＵ１００１によって構成される。また、優先度決定部１４は、出力装置１００６と、ＲＯＭ１００３および記憶装置１００４に記憶されたコンピュータ・プログラムおよび各種データをＲＡＭ１００２に読み込んで実行するＣＰＵ１００１とによって構成される。なお、静的解析装置１およびその各機能ブロックのハードウェア構成は、上述の構成に限定されない。
【００２３】
静的解析部１１は、入力されたソースコードに対して静的解析を行い、解析結果として警告情報を生成する。例えば、静的解析部１１は、ソースコード内における不具合に繋がりやすいパターンを検出する公知の各種技術を採用可能である。また、ソースコードは、１つ以上の一群のファイルに記述されたものであってもよい。例えば、静的解析部１１は、記憶装置１００４におけるソースコードの格納場所を特定する情報を入力装置１００５を介して取得することにより、ソースコードを取得してもよい。警告情報には、警告位置情報と、警告識別情報とが少なくとも含まれる。ここで、警告位置情報とは、ソースコードにおける警告箇所の位置を表す情報である。例えば、警告位置情報は、警告箇所が含まれるファイル名と、警告箇所の行番号とを含む情報であってもよい。また、警告識別情報とは、警告の種別を識別する情報である。
【００２４】
類似部分抽出部１２は、ソースコードにおいて互いに類似する部分（類似部分）を抽出する。例えば、類似部分抽出部１２は、ソースコードにおける任意の範囲の部分について、所定の類似条件を満たす他の部分を抽出する。任意の範囲とは、例えば、数行から数十行などの範囲であってもよい。所定の類似条件とは、例えば、識別子や引数など一部だけが異なり残る部分が同一であることや、コメントや空白文字などプログラムの動作に影響しない箇所だけが異なり残る部分が同一であることなどであってもよい。その他、類似部分抽出部１２は、テキストデータにおいて互いに類似する部分を抽出する公知の各種技術を採用してもよい。
【００２５】
また、類似部分抽出部１２は、抽出した各類似部分について、類似識別情報と、範囲情報とを含む類似部分情報を生成する。ここで、類似識別情報は、互いに類似する類似部分を、他の互いに類似する類似部分から識別するための情報である。つまり、類似識別情報は、互いに類似する類似部分のグループごとに、異なる値が付与される。範囲情報は、ソースコードにおける該当部分の範囲を表す。例えば、範囲情報は、その類似部分が含まれるファイル名と、開始行番号と、終了行番号とを含む情報であってもよい。
【００２６】
情報連結部１３は、静的解析部１１により出力された警告情報および類似部分抽出部１２により生成された類似部分情報を照合することにより、各警告情報に対して類似識別情報を追加した連結警告情報を生成する。具体的には、情報連結部１３は、各警告情報に対して、その警告情報の示す警告箇所の位置を含む類似部分があればその類似識別情報を追加すればよい。
【００２７】
優先度決定部１４は、情報連結部１３により生成された連結警告情報に対して、警告識別情報および類似識別情報に基づく優先度決定基準にしたがって優先度を付ける。そして、優先度決定部１４は、決定した優先度にしたがって、連結警告情報を出力装置１００６に出力する。
【００２８】
例えば、優先度決定部１４は、警告識別情報および類似識別情報の組み合わせが同一の警告情報の数をカウントし、カウント数が多い順により高い優先度をつけてもよい。また、その場合、優先度決定部１４は、同一の優先度となった警告情報については、同一の類似識別情報のカウント数がより多い順により高い優先度をつけてもよい。その場合、優先度決定部１４は、さらに同一の優先度となった警告情報については、同一の警告識別情報のカウント数がより多い順により高い優先度をつけてもよい。その他、優先度決定部１４は、警告識別情報および類似識別情報に基づく基準であれば、その他の優先度決定基準により優先度付けを行ってもよい。
【００２９】
以上のように構成された静的解析装置１の動作について、図３を参照して説明する。
【００３０】
まず、静的解析部１１は、入力されたソースコードに対して静的解析を行い、警告位置情報と警告識別情報とからなる警告情報を生成する（ステップＳ１）。
【００３１】
次に、類似部分抽出部１２は、ソースコードにおいて、互いに類似する類似部分を抽出し、抽出した各類似部分について、類似識別情報と範囲情報とからなる類似部分情報を生成する（ステップＳ２）。
【００３２】
次に、情報連結部１３は、ステップＳ１で生成された各警告情報に、ステップＳ２で生成された類似部分情報の類似識別情報を追加した連結警告情報を生成する（ステップＳ３）。具体的には、前述のように、情報連結部１３は、各警告情報に、その警告情報の示す警告箇所の位置を含む類似部分の類似識別情報を追加すればよい。
【００３３】
次に、優先度決定部１４は、ステップＳ３で生成された連結警告情報について、警告識別情報および類似識別情報に基づく優先度決定基準にしたがって優先度を付ける。そして、優先度決定部１４は、決定した優先度にしたがって、連結警告情報を出力する（ステップＳ４）。
【００３４】
以上で、静的解析装置１は動作を終了する。
【００３５】
次に、静的解析装置１の動作を具体例で示す。
【００３６】
ここでは、静的解析部１１は、不具合に繋がりやすい記述のパターンを記憶し、ソースコードにおいてパターンと合致する箇所を、ルール違反の可能性がある警告箇所として検出するものとする。
【００３７】
まず、ステップＳ１において、静的解析部１１は、入力されたソースコードのうち、記憶しているパターンに合致する警告箇所を検出し、警告情報を生成する。ここでは、図４に示す警告情報が生成されたものとする。図４において、各行が示す警告情報は、警告位置情報としてのファイル名および行番号と、警告識別情報としての警告ＩＤとを含み、さらに、警告内容と、該当行ソースコード（該当行の記述内容）とを含んでいる。このように、静的解析部１１によって生成される警告情報は、少なくとも警告位置情報および警告識別情報を含んでいれば、その他の情報を含んでいてもよい。以降、これらの警告情報を、警告テーブルとも記載する。
【００３８】
次に、ステップＳ２において、類似部分抽出部１２は、入力されたソースコードにおいて互いに類似する類似部分を抽出する。この具体例では、類似部分抽出部１２は、数行から数十行程度の範囲の部分に対して、例えば、識別子、引数など一部だけが異なっている他の部分や、コメントや空白文字などプログラムの動作に影響しない箇所だけが異なっている他の部分を、類似部分として抽出する。
【００３９】
そして、類似部分抽出部１２は、抽出した各類似部分について、類似識別情報としての類似ＩＤと、範囲情報とからなる類似部分情報を生成する。ここでは、図５に示す類似部分情報が生成されたものとする。図５において、各行が示す類似部分情報は、範囲情報としてのファイル名、開始行番号、および、終了行番号と、類似ＩＤとを含む。また、互いに類似する類似部分のグループには、他の互いに類似する類似部分のグループから識別するための同一の類似ＩＤが付与される。以降、これらの類似部分情報を、類似部分テーブルとも記載する。
【００４０】
次に、ステップＳ３において、情報連結部１３は、図４に示した警告テーブルと、図５に示した類似テーブルとを照合することにより、各警告情報に類似ＩＤを追加して連結警告情報を生成する。
【００４１】
具体的には、情報連結部１３は、各警告情報について、その警告位置情報を含む範囲情報を持つ類似部分情報を検索する。そして、そのような類似部分情報が検索された場合、情報連結部１３は、該当する警告テーブルの行に、検索した類似部分情報の類似ＩＤを追加すればよい。
【００４２】
例えば、図４に示した警告テーブルの1行目の警告情報は、該当する警告箇所が「ファイル“Ａ０００１．ｃ”の“１１１”行目」にあることを表している。また、この「“Ａ０００１．ｃ”の“１１１”行目」は、図５に示した類似テーブルの１行目の類似部分情報の範囲である「ファイル“Ａ０００１．ｃ”の開始行“１１０”行目から終了行“１１９”行目まで」に含まれている。そこで、情報連結部１３は、図４の警告テーブルの１行目に、類似テーブルの１行目の類似ＩＤである“００１”を追加する。また、図４に示した警告テーブルの３行目の警告情報は、該当する警告箇所が「ファイル“Ａ０００１．ｃ”の“２３８”行目」にあることを表している。また、この「“Ａ０００１．ｃ”の“２３８”行目」を含む範囲の類似部分情報は、図５に示した類似テーブルに含まれていない。そこで、情報連結部１３は、図４の警告テーブルの３行目に、類似ＩＤを追加しない。そして、情報連結部１３は、図４の警告テーブルの他の行についても、同様に処理を行っていく。このようにして、類似ＩＤが追加された連結警告情報の一例を図６に示す。以降、これらの連結警告情報を、連結警告テーブルとも記載する。
【００４３】
次に、ステップＳ４において、優先度決定部１４は、図６の連結警告テーブルの各行に対して、警告ＩＤおよび類似ＩＤに基づく優先度決定基準を用いて、優先度を付与する。
【００４４】
ここでは、優先度決定部１４は、まず、警告ＩＤおよび類似ＩＤの組み合わせが同一の連結警告情報のカウント数が多い順に、より高い優先度を付与する。また、優先度決定部１４は、警告ＩＤおよび類似ＩＤの組み合わせのカウント数が同一のものについては、同一の類似ＩＤのカウント数の多い順に、より高い優先度を付与する。さらに、優先度決定部１４は、類似ＩＤのカウント数が同一のものについては、同一の警告ＩＤのカウント数の多い順に、より高い優先度を付与する。
【００４５】
例えば、図６において、警告ＩＤが“ＩＤ５０５”であり、かつ、類似ＩＤが“００１”である連結警告情報のカウント数は、１、４、７行目の３つである。また、警告ＩＤが“ＩＤ６０７”であり、かつ、類似ＩＤが“００２”である連結警告情報のカウント数は、２、６行目の２つである。それ以外の各連結警告情報は、類似ＩＤおよび警告ＩＤの組み合わせが同一のものが他にないため、カウント数は１つとなる。そこで、まず、優先度決定部１４は、１、４、７行目に優先度１を付与し、２、６行目に優先度２を付与する。なお、ここでは、優先度の値が小さいほど、優先度が高いことを表すものとする。
【００４６】
また、残りの３、５、８行目は、類似ＩＤおよび警告ＩＤの組み合わせのカウント数が１で同一である。そのため、優先度決定部１４は、３、５、８行目について、類似ＩＤのカウント数に基づいて優先度付けを行う。ここで、３、５、８行目の類似ＩＤのうち、５行目の類似ＩＤ“００１”が、１〜８行目におけるカウント数が４つで最も多い。したがって、優先度決定部１４は、５行目に優先度３を付与する。
【００４７】
そして、残りの３、８行目は、類似ＩＤが追加されていないため、類似ＩＤのカウント数が０で同一となる。そのため、優先度決定部１４は、３、８行目について、警告ＩＤのカウント数に基づいて優先度付けを行う。ここで、３、８行目の警告ＩＤのうち、８行目の警告ＩＤ“ＩＤ５０５”が、１〜８行目におけるカウント数が４つで最も多い。したがって、優先度決定部１４は、８行目に優先度４を付与する。そして、優先度決定部１４は、残る３行目の警告情報に、優先度５を付与する。このようにして優先度が決定された連結警告情報を図７に示す。図７において、連結警告情報は、優先度の高い順に上から並べ替えられている。そして、優先度決定部１４は、付与した優先度にしたがって、図７に示した順序で連結警告情報を出力してもよい。
【００４８】
以上で、静的解析装置１の具体的な動作の説明を終了する。
【００４９】
次に、本発明の第１の実施の形態の効果について述べる。
【００５０】
本発明の第１の実施の形態としての静的解析装置は、ソースコードに対する静的解析の結果を精度よく優先度付けして提示することができる。
【００５１】
その理由は、静的解析部が、ソースコードに対する静的解析を行った結果として警告位置情報および警告識別情報を含む警告情報を生成し、類似部分抽出部が、ソースコードにおいて互いに類似する類似部分を抽出し、各類似部分について類似識別情報および範囲情報を含む類似部分情報を生成し、情報連結部が、各警告情報に、その警告箇所の位置を含む類似部分の類似識別情報を追加し、優先度決定部が、警告識別情報および類似識別情報に基づく優先度決定基準を用いて、警告情報に優先度付けを行い、優先度にしたがって出力するからである。
【００５２】
これにより、本実施の形態は、静的解析によって得られた各警告箇所を、他の警告箇所との関わりに応じた優先順序で、ユーザに提示することができる。例えば、ソースコードにおいて、誤った記述を含む部分が複数の箇所に複製されている場合を考える。この場合、複製先で変数名等の若干の記述変更があったとしても、本実施の形態は、それらの複数の誤った記述についての各警告情報に、同一の警告識別情報および同一の類似識別情報を付与することになる。したがって、本実施の形態は、そのような一群の警告箇所の優先度を高くして出力することになる。その結果、本実施の形態は、複製された誤った記述に対する一群の警告を、より優先して確認すべきものとして提示することができ、ソフトウェア開発者の修正作業における負荷を軽減することができる。このように、本実施の形態を用いることにより、ソフトウェア開発者は、他の警告箇所との関係性の強い警告を容易に絞り込んで修正することができ、非常に効率がよい。
【００５３】
しかも、本実施の形態は、ソースコードにおいて抽出した任意の範囲の類似部分に基づいて優先度付けを行うため、ソースコードにおいて類似部分として抽出するための単位を事前に設定しておく必要がない。したがって、本実施の形態は、ソフトウェア開発者の事前設定作業を必要とせずに、静的解析の結果を精度よく優先度付けして提示することができる。
【００５４】
（第２の実施の形態）
次に、本発明の第２の実施の形態について図面を参照して詳細に説明する。なお、本実施の形態の説明において参照する各図面において、本発明の第１の実施の形態と同一の構成および同様に動作するステップには同一の符号を付して本実施の形態における詳細な説明を省略する。
【００５５】
まず、本発明の第２の実施の形態としての静的解析装置２の機能ブロック構成を図８に示す。図８において、静的解析装置２は、本発明の第１の実施の形態としての静的解析装置１に対して、情報連結部１３に替えて情報連結部２３と、優先度決定部１４に替えて優先度決定部２４とを備え、さらに、差分抽出部２５を備える点が異なる。
【００５６】
ここで、静的解析装置２は、図２を参照して説明した本発明の第１の実施の形態としての静的解析装置１と同様のハードウェア要素を備えるコンピュータ装置によって構成可能である。この場合、差分抽出部２５は、入力装置１００５と、ＲＯＭ１００３および記憶装置１００４に記憶されたコンピュータ・プログラムおよび各種データをＲＡＭ１００２に読み込んで実行するＣＰＵ１００１とによって構成される。なお、静的解析装置２およびその各機能ブロックのハードウェア構成は、上述の構成に限定されない。
【００５７】
差分抽出部２５は、対象のソースコードについて、以前のソースコードに対する差分を抽出し、抽出した差分の範囲を表す差分情報を生成する。例えば、差分情報は、ソースコードの差分該当部分を含むファイル名、開始行番号、および、終了行番号からなる情報であってもよい。また、例えば、差分抽出部２５は、記憶装置１００４における以前のソースコードの格納場所を特定する情報を、入力装置１００５を介して取得することにより、以前のソースコードを取得してもよい。
【００５８】
情報連結部２３は、静的解析部１１によって生成された警告情報に、類似識別情報および後述する差分有無情報を追加した連結警告情報を生成する。まず、情報連結部２３は、本発明の第１の実施の形態における情報連結部１３と同様に、各警告情報に類似識別情報を追加する。加えて、情報連結部２３は、静的解析部１１によって生成された警告情報および差分抽出部２５によって生成された差分情報を照合することにより、各警告情報に対して、該警告情報の示す警告箇所の位置を含む差分の範囲があるか否かを判断する。そして、情報連結部２３は、警告箇所の位置を含む差分の範囲がある警告情報に対して、「差分有り」を表す差分有無情報を追加すればよい。また、情報連結部２３は、警告箇所の位置を含む差分の範囲がない警告情報に対して、「差分無し」を表す差分有無情報を追加すればよい。
【００５９】
優先度決定部２４は、本発明の第１の実施の形態における優先度決定部１４に対して、警告識別情報および類似識別情報に加えて、さらに差分有無情報に基づく優先度決定基準を用いる点が異なる。例えば、優先度決定部２４は、警告識別情報および類似識別情報の組み合わせが一致する連結警告情報のグループにおいて全てが差分有りの場合、それらの連結警告情報に対して、全てが差分有りではないグループより高い優先度を設定してもよい。これは、そのような一群の連結警告情報の全てが差分有りの場合、新規の警告であるみなすことができ、優先して確認したほうがよいためである。また、警告識別情報および類似識別情報の組み合わせが一致する連結警告情報のグループに、差分有りと差分無しとが混在する場合、そのような一群の連結警告情報は、過去に対応不要であることが確認された警告であるとみなすことができるからである。
【００６０】
また、優先度決定部２４は、優先度決定基準の設定変更を表す情報を取得すると、設定変更された優先度決定基準を用いて優先度を更新してもよい。例えば、優先度決定部２４は、一旦決定した優先度を用いて連結警告情報を出力した後、入力装置１００５を介して、優先度決定基準の設定変更を表す情報を取得してもよい。例えば、優先度決定基準の設定変更を表す情報とは、差分有無情報を考慮するか否かの設定を変更する内容であってもよい。また、例えば、優先度決定基準の設定変更を表す情報とは、警告識別情報および類似識別情報の組み合わせが一致するカウント数が同一の場合に、同一の類似識別情報のカウント数と、同一の警告識別情報のカウント数とのどちらを優先的に比較するかを変更する内容であってもよい。
【００６１】
以上のように構成された静的解析装置２の動作について、図９を参照して説明する。
【００６２】
まず、静的解析装置２は、ステップＳ１〜Ｓ２まで、本発明の第１の実施の形態としての静的解析装置１と同様に動作することにより、静的解析の結果である警告情報と、類似部分情報とを生成する。
【００６３】
次に、差分抽出部２５は、以前のソースコードがあるか否かを判断する（ステップＳ１３）。
【００６４】
ここで、以前のソースコードがなければ、静的解析装置２は、図３に示したステップＳ３〜Ｓ４を実行して処理を終了する。
【００６５】
一方、以前のソースコードがあれば、差分抽出部２５は、対象のソースコードについて、以前のソースコードからの差分を抽出し、その範囲を表す差分情報を生成する（ステップＳ１４）。
【００６６】
次に、情報連結部２３は、ステップＳ１で生成された各警告情報に対して、類似識別情報と差分有無情報とを追加した連結警告情報を生成する（ステップＳ１５）。具体的には、前述のように、情報連結部２３は、各警告情報に、その警告箇所の位置を含む類似部分の類似識別情報を追加するとともに、その警告箇所の位置を含む差分の範囲があるか否かを表す差分有無情報を追加すればよい。
【００６７】
次に、優先度決定部２４は、ステップＳ１５で生成された各連結警告情報に対して、警告識別情報、類似識別情報、および、差分有無情報に基づく優先度決定基準を用いて、優先度を決定する。そして、優先度決定部２４は、決定した優先度にしたがって、連結警告情報を出力する（ステップＳ１６）。
【００６８】
次に、優先度決定部２４は、優先度決定基準の設定変更を表す情報が入力されたか否かを判断する（ステップＳ１７）。
【００６９】
ここで、設定変更を表す情報が入力されなければ、静的解析装置２は動作を終了する。
【００７０】
一方、設定変更を表す情報が入力された場合、優先度決定部２４は、ステップＳ１６からの動作を繰り返す。
【００７１】
以上で、静的解析装置２の動作の説明を終了する。
【００７２】
次に、静的解析装置２の動作を具体例で示す。
【００７３】
ここでは、本発明の第１の実施の形態における具体例と同様に、ステップＳ１において、静的解析部１１によって図４に示した警告テーブルが生成され、ステップＳ２において、類似部分抽出部１２によって図５に示した類似テーブルが生成されたものとする。
【００７４】
次に、ステップＳ１３において、差分抽出部２５は、以前のソースコードがあると判断したものとする。
【００７５】
そこで、ステップＳ１４において、差分抽出部２５は、対象のソースコードの以前のソースコードに対する差分情報を生成する。ここでは、図１０に示す差分情報が生成されたとする。この具体例では、差分情報は、その差分の範囲を含むファイル名と、開始行番号と、終了行番号とからなるものとする。以降、これらの差分情報を、差分テーブルとも記載する。
【００７６】
次に、ステップＳ１５において、情報連結部２３は、図４の警告テーブルと、図５の類似テーブルと、図１０の差分テーブルとを照合することにより、警告情報に類似ＩＤおよび差分有無情報を追加した連結警告情報を生成する。
【００７７】
例えば、情報連結部２３は、図４に示した警告テーブルの1行目の警告情報は、警告箇所が「ファイル“Ａ０００１．ｃ”の“１１１”行目」にあることを表している。また、この「ファイル“Ａ０００１．ｃ”の“１１１”行目」は、図１０に示した差分テーブルに示された差分情報に含まれていない。そこで、情報連結部２３は、図４の警告テーブルの１行目には、差分無しを表す差分有無情報を追加する。また、図４に示した警告テーブルの４行目の警告情報は、警告箇所が「ファイル“Ａ０００１．ｃ”の“３１１”行目」にあることを表している。また、この「ファイル“Ａ０００１．ｃ”の“３１１”行目」は、図１０に示した差分テーブルの１行目の差分情報に含まれている。そこで、情報連結部２３は、警告テーブルの４行目に、差分有りを表す差分有無情報を追加する。
【００７８】
このようにして差分有無情報および類似ＩＤが追加された連結警告情報の一例を図１１に示す。以降、これらの連結警告情報を、連結警告テーブルとも記載する。
【００７９】
次に、ステップＳ１６において、優先度決定部２４は、図１１に示した連結警告テーブルの各行に対して、警告ＩＤ、類似ＩＤおよび差分有無情報に基づく優先度決定基準を用いて、優先度を付与する。
【００８０】
ここでは、優先度決定部２４は、まず、警告ＩＤおよび類似ＩＤの組み合わせが同一の連結警告情報のグループで、全てが差分有りとなっているものを最も優先度の高いものとして設定する。
【００８１】
具体的には、図１１の連結警告テーブルにおいて、警告ＩＤおよび類似ＩＤの組み合わせが同一の連結警告情報のグループとしては、１、４、７行目からなるグループ１と、２、６行目からなるグループ２と、３行目からなるグループ３と、５行目からなるグループ４と、８行目からなるグループ５とがある。このうち、全てが差分有りとなっているものは、５行目からなるグループ４である。そこで、優先度決定部２４は、５行目に、優先度１を付与する。
【００８２】
また、残りのグループでは、全てが差分有りとなっているものはない。そこで、優先度決定部２４は、残りの連結警告情報について、本発明の第１の実施の形態の具体例における優先度決定部１４と同様の基準で優先度を付与する。このようにして優先度が決定された連結警告情報を図１２に示す。図１２において、連結警告情報は、優先度の高い順に上から並べ替えられている。そして、優先度決定部２４は、付与した優先度にしたがって、図１２に示した順序で連結警告情報を出力してもよい。
【００８３】
このように、優先度決定部２４は、（ａ）警告ＩＤおよび類似ＩＤが同一のグループにおける差分有無情報の構成、（ｂ）警告ＩＤおよび類似ＩＤが同一のカウント数、（ｃ）類似ＩＤが同一のカウント数、（ｄ）警告ＩＤが同一のカウント数の順に優先度決定基準として用いている。
【００８４】
さらに、ここで、ステップＳ１７において、入力装置１００５を介して、優先度決定基準を、差分有無情報を考慮せずに比較するよう設定変更する情報が入力されたとする。
【００８５】
そこで、優先度決定部２４は、上述の（ｂ）、（ｃ）、（ｄ）の順に優先度決定基準として用いて、ステップＳ１６を再度実行する。これにより、優先度決定部２４は、本発明の第１の実施の形態の具体例で示した図７のような優先度を決定し、出力する。
【００８６】
以上で、静的解析装置２の具体的な動作の説明を終了する。
【００８７】
次に、本発明の第２の実施の形態の効果について述べる。
【００８８】
本発明の第２の実施の形態としての静的解析装置は、ソースコードに対する静的解析の結果をさらに精度よく優先度付けして提示することができる。
【００８９】
その理由は、静的解析部が警告情報を生成し、類似部分抽出部が類似部分情報を生成することに加えて、差分抽出部が、対象のソースコードについて以前のソースコードからの差分の範囲を抽出して差分情報を生成し、情報連結部が、各警告情報に、類似識別情報を追加することに加えて、その警告位置情報を含む差分の範囲があるか否かを表す差分有無情報を追加し、優先度決定部が、警告識別情報、類似識別情報、および、差分有無情報に基づく優先度決定基準を用いて、警告情報に優先度付けを行い、優先度にしたがって出力するからである。
【００９０】
これにより、本実施の形態は、静的解析によって得られた各警告箇所について、他の警告箇所との関わりに応じた優先度を付与する際に、差分有無情報を考慮する。例えば、警告識別情報および類似識別情報が一致する連結警告情報のグループが全て差分有りである場合、それらの警告は、新規の警告である可能性が高く、優先度が高いと考えられる。一方、そのようなグループにおいて差分有りと差分無しとが混在する場合、それらの警告は、以前に指摘され対応不要であることが確認された警告である可能性が高く、優先度が低いと考えられる。このように、本実施の形態は、差分有無情報を考慮することにより、他の警告箇所との関係性の強い警告を優先して提示しながらも、さらに、以前から指摘を受けている警告に関連する警告よりも、以前には指摘をされていない新規に発生した警告を優先してユーザに提示することができる。
【００９１】
なお、上述した本発明の各実施の形態において、静的解析装置の各機能ブロックが、記憶装置またはＲＯＭに記憶されたコンピュータ・プログラムを実行するＣＰＵによって実現される例を中心に説明したが、各機能ブロックの一部、全部、または、それらの組み合わせが専用のハードウェアにより実現されていてもよい。
【００９２】
また、上述した本発明の各実施の形態において、静的解析装置の機能ブロックは、複数の装置に分散されて実現されてもよい。
【００９３】
また、上述した本発明の各実施の形態において、各フローチャートを参照して説明した静的解析装置の動作を、本発明のコンピュータ・プログラムとしてコンピュータ装置の記憶装置（記憶媒体）に格納しておき、係るコンピュータ・プログラムを当該ＣＰＵが読み出して実行するようにしてもよい。そして、このような場合において、本発明は、係るコンピュータ・プログラムのコードあるいは記憶媒体によって構成される。
【００９４】
また、上述した各実施の形態は、適宜組み合わせて実施されることが可能である。
【００９５】
また、本発明は、上述した各実施の形態に限定されず、様々な態様で実施されることが可能である。
【符号の説明】
【００９６】
１、２    静的解析装置
１１    静的解析部
１２    類似部分抽出部
１３、２３    情報連結部
１４、２４    優先度決定部
２５    差分抽出部
１００１    ＣＰＵ
１００２    ＲＡＭ
１００３    ＲＯＭ
１００４    記憶装置
１００５    入力装置
１００６    出力装置
【図１】
2015026276.tif 000003
【図２】
2015026276.tif 000004
【図３】
2015026276.tif 000005
【図４】
2015026276.tif 000006
【図５】
2015026276.tif 000007
【図６】
2015026276.tif 000008
【図７】
2015026276.tif 000009
【図８】
2015026276.tif 000010
【図９】
2015026276.tif 000011
【図１０】
2015026276.tif 000012
【図１１】
2015026276.tif 000013
【図１２】
2015026276.tif 000014