(57)【特許請求の範囲】
【請求項１】
静的アナライザーと連動する警報類型分類装置で実行され、静的アナライザーから発生した誤り検出警報を類型別に分類するための方法であって、
１）発生した誤り検出警報に関する警報経路（ａｌａｒｍ  ｐａｔｈ）情報および警報の対象となったソースコード情報の入力を受ける段階−前記警報経路情報は、ソースコードの実行経路のうち、前記発生した誤り検出警報に関連している実行経路に関する情報である−；
２）前記ソースコードを抽象構文ツリー（ａｂｓｔｒａｃｔ  ｓｙｎｔａｘ  ｔｒｅｅ、ＡＳＴ）に変換する段階；
３）前記抽象構文ツリーから、前記誤り検出警報に関連していない不要サブツリー（ｕｎｎｅｃｅｓｓａｒｙ  ｓｕｂｔｒｅｅ）を除去する段階；
４）予め設定されたフィーチャーパターンセットに基づいて、不要サブツリー（ｕｎｎｅｃｅｓｓａｒｙ  ｓｕｂｔｒｅｅ）が除去された前記抽象構文ツリーに対するフィーチャーベクターを得る段階；および
５）得られた前記フィーチャーベクターを予め設定された方式でクラスタリングして、前記フィーチャーベクターに対応する誤り検出警報を類型別に分類する段階；を含んでなる、ソースコードの誤り検出における警報類型分類方法。
【請求項２】
前記１）段階で、
発生した誤り検出警報に関する警報類型（ａｌａｒｍ  ｔｙｐｅｓ）情報の入力をさらに受け−前記警報類型情報は、発生した誤り検出警報が予め設定された警報類型のうちどの類型に該当するかに関する情報である−、
前記４）段階で、
前記フィーチャーパターンセットは、前記誤り検出警報の警報類型に対して予め設定されたものであることを特徴とする、請求項１に記載のソースコードの誤り検出における警報類型分類方法。
【請求項３】
前記３）段階で、前記不要サブツリー（ｕｎｎｅｃｅｓｓａｒｙ  ｓｕｂｔｒｅｅ）の除去は、
誤り検出警報に関連している実行経路上で実行される構文を除いた他の一般構文を除去する第１ポリシーと、
誤り検出警報に関連している実行経路上で実行される分岐文ではない他の分岐文を除去する第２ポリシー−但し、誤り検出警報に関連している実行経路は分岐文の条件判別結果を含む−と、
誤り検出警報に関連している実行経路上で実行される繰り返し文ではない他の繰り返し文を除去する第３ポリシーと、
誤り検出警報に関連している実行経路上で呼び出された関数および前記関数の実行経路を、前記関数を呼び出すノードのサブツリーとして含む第４ポリシーと、
誤り検出警報に関連している実行経路と関係のない宣言文を除去する第５ポリシーとのうち、少なくとも１つのポリシーに基づいて行われることを特徴とする、請求項１に記載のソースコードの誤り検出における警報類型分類方法。
【請求項４】
前記４）段階で、前記フィーチャーパターンセットは、
予め設定されたｎ個のフィーチャーパターンのセット形態で構成され、
前記フィーチャーパターンは、繰り返し文の発生、ループ文の発生、リターン文の発生、ブレーク（ｂｒｅａｋ）またはコンティニュー（ｃｏｎｔｉｎｕｅ）文の発生、エグジット（ｅｘｉｔ）またはアサート（ａｓｓｅｒｔ）メソッド呼び出し（ｍｅｔｈｏｄ  ｉｎｖｏｃａｔｉｏｎ）の発生、ヌル表現（ｎｕｌｌ  ｅｘｐｒｅｓｓｉｏｎ）の発生、ヌル値との比較（ｃｏｍｐａｒｉｓｏｎｓ  ｗｉｔｈ  ａ  ｎｕｌｌ  ｖａｌｕｅ）の発生、ヌル割り当て（ｎｕｌｌ  ａｓｓｉｇｎｍｅｎｔｓ）の発生、およびヌル値をリターンする文（ｓｔａｔｅｍｅｎｔｓ）の発生のうちのいずれか一つであることを特徴とする、請求項１に記載のソースコードの誤り検出における警報類型分類方法。
【請求項５】
前記４）段階で、前記不要サブツリー（ｕｎｎｅｃｅｓｓａｒｙ  ｓｕｂｔｒｅｅ）が除去された前記抽象構文ツリーに対するフィーチャーベクター（Ｖ（Ｒ））の収得過程は、
４０１）下記数式（１）のように、ｎ個のフィーチャーパターン（ｐ）のセット形態で構成されたフィーチャーパターンセット（Ｐ）を定義する段階；
［数式１］
Ｐ＝｛ｐ１，ｐ２，．．．，ｐｎ｝
４０２）下記数式２のように、抽象構文ツリー上の任意のノードｄに対するｎ次元のパターン満足ベクター（ｖ（Ｐ，ｄ））を定義する段階；
【数１】
0006369736.tif 000011
（但し、Ｓ（ｄ，ｐｉ）は、任意のノードｄまたはノードｄをルートとするサブツリーがｉ番目のフィーチャーパターン（ｐｉ）にマッチングするか否かを示す因子であって、下記数式３のように定義され、ｉ番目のフィーチャーパターン（ｐｉ）は単一ノードまたはサブツリーであり得る。
【数２】
0006369736.tif 000012
４０３）下記数式（４）のように、抽象構文ツリー上の任意のノードＤに対するフィーチャーベクター（Ｖ（Ｐ，Ｄ））を定義する段階；および
【数３】
0006369736.tif 000013
（但し、ｄ１，．．．，ｄｍは任意のノードＤの子ノードであり、
Ｖ（Ｐ，ｄ１）．．．Ｖ（Ｐ，ｄｍ）は、子ノードｄ１，．．．，ｄｍに対して前記数式４によって求めたフィーチャーベクターであり、
ｖ（Ｐ，Ｄ）は、任意のノードＤに対するｎ次元のパターン満足ベクターである。）
４０４）下記数式５を用いて、前記不要サブツリー（ｕｎｎｅｃｅｓｓａｒｙ  ｓｕｂｔｒｅｅ）が除去された前記抽象構文ツリーに対するフィーチャーベクター（Ｖ（Ｒ））を得る段階；を含んでなることを特徴とする、請求項１に記載のソースコードの誤り検出における警報類型分類方法。
【数４】
0006369736.tif 000014
（但し、Ｒは、前記不要サブツリー（ｕｎｎｅｃｅｓｓａｒｙ  ｓｕｂｔｒｅｅ）が除去された前記抽象構文ツリーのルートノードであって、前記数式４のノードＤに対応する。）
【請求項６】
前記５）段階で、前記クラスタリングはＫ−ｍｅａｎｓアルゴリズムによって実行されることを特徴とする、請求項１に記載のソースコードの誤り検出における警報類型分類方法。
【請求項７】
ハードウェアと結合して請求項１〜６のいずれか一項に記載のソースコードの誤り検出における警報類型分類方法を実行させるために媒体に格納されたコンピュータプログラム。
【請求項８】
請求項１〜６のいずれか一項に記載のソースコードの誤り検出における警報類型分類方法をコンピュータ上で実行するためのコンピュータプログラムが記録された、コンピュータで読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソースコードの誤り検出における警報類型分類方法、そのためのコンピュータプログラム、およびその記録媒体に係り、さらに詳しくは、静的アナライザーから発生するソースコードに関する様々な警報の発生類型を自動的に分類して分析し、警報類型の分類に費やされるリソースの浪費を防止することができるようにする、ソースコードの誤り検出における警報類型分類方法、そのためのコンピュータプログラム、およびその記録媒体に関する。
【背景技術】
【０００２】
ソースコードに存在する潜在的な誤り（バグ（ｂｕｇ））や脆弱点を発見するために静的アナライザーが広く使用される。静的アナライザーは、各機能別チェッカーの実行により、各チェッカー別に予め定義された誤りを検出し、誤りが検出されたと判断すると、これに対する警報（ａｌａｒｍ）メッセージを発生する。
【０００３】
静的アナライザーの警報が発生した場合、発生した警報の精度分析などの目的のために警報の類型を分類する過程が行われ得る。
【０００４】
たとえば、静的アナライザーの分析過程で誤り有無の判断が常に正確に行われないことがあり、これにより、分析対象ソースコードに誤りが存在しないにも拘らず、誤りが存在すると判断し間違って誤認警報（ｆａｌｓｅ  ａｌａｒｍ）を発生することがある。
【０００５】
このような場合、警報の発生類型を分類して分析し、誤認警報の可能性が高い警報類型に対して追加的な分析または対比を行うことができるが、このような類型分類作業が従来では開発者の手作業によって行われるのが一般的であったので、このような従来の警報類型分類作業はリソースの浪費要因となった。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明は、前述したような従来の問題点に鑑みてなされたもので、その目的は、静的アナライザーから発生するソースコードに関する様々な警報の発生類型を自動的に分類して分析し、警報類型の分類に費やされるリソースの浪費を防止することができるようにする、ソースコードの誤り検出における警報類型分類方法、そのためのコンピュータプログラム、およびその記録媒体を提供することにある。
【課題を解決するための手段】
【０００７】
上記の目的を達成するための本発明の一側面によれば、静的アナライザーと連動する警報類型分類装置で実行され、静的アナライザーから発生した誤り検出警報を類型別に分類するための方法であって、１）発生した誤り検出警報に関する警報経路（ａｌａｒｍ  ｐａｔｈ）情報および警報の対象となったソースコード情報の入力を受ける段階−前記警報経路情報は、ソースコードの実行経路のうち、前記発生した誤り検出警報に関連している実行経路に関する情報である−；２）前記ソースコードを抽象構文ツリー（ａｂｓｔｒａｃｔ  ｓｙｎｔａｘ  ｔｒｅｅ、ＡＳＴ）に変換する段階；３）前記抽象構文ツリーから、前記誤り検出警報に関連していない不要サブツリー（ｕｎｎｅｃｅｓｓａｒｙ  ｓｕｂｔｒｅｅ）を除去する段階；４）予め設定されたフィーチャーパターンセットに基づいて、不要サブツリー（ｕｎｎｅｃｅｓｓａｒｙ  ｓｕｂｔｒｅｅ）が除去された前記抽象構文ツリーに対するフィーチャーベクターを得る段階；および５）得られた前記フィーチャーベクターを予め設定された方式でクラスタリングして、前記フィーチャーベクターに対応する誤り検出警報を類型別に分類する段階；を含んでなる、ソースコードの誤り検出における警報類型分類方法が開示される。
【０００８】
好ましくは、本発明は、前記１）段階で、発生した誤り検出警報に関する警報類型（ａｌａｒｍ  ｔｙｐｅｓ）情報の入力をさらに受け−前記警報類型情報は、発生した誤り検出警報が予め設定された警報類型のうちどの類型に該当するかに関する情報である−、前記４）段階で、前記フィーチャーパターンセットは、前記誤り検出警報の警報類型に対して予め設定されたものであることを特徴とする。
【０００９】
好ましくは、前記３）段階で、前記不要サブツリー（ｕｎｎｅｃｅｓｓａｒｙ  ｓｕｂｔｒｅｅ）の除去は、誤り検出警報に関連している実行経路上で実行される構文を除いた他の一般構文を除去する第１ポリシーと、誤り検出警報に関連している実行経路上で実行される分岐文ではない他の分岐文を除去する第２ポリシー−但し、誤り検出警報に関連している実行経路は分岐文の条件判別結果を含む−と、誤り検出警報に関連している実行経路上で実行される繰り返し文ではない他の繰り返し文を除去する第３ポリシーと、誤り検出警報に関連している実行経路上で呼び出された関数および前記関数の実行経路を、前記関数を呼び出すノードのサブツリーとして含む第４ポリシーと、誤り検出警報に関連している実行経路と関係のない宣言文を除去する第５ポリシーとのうち、少なくとも１つのポリシーに基づいて行われることを特徴とする。
【００１０】
好ましくは、前記４）段階で、前記フィーチャーパターンセットは、予め設定されたｎ個のフィーチャーパターンのセット形態で構成され、前記フィーチャーパターンは、繰り返し文の発生、ループ文の発生、リターン文の発生、ブレーク（ｂｒｅａｋ）またはコンティニュー（ｃｏｎｔｉｎｕｅ）文の発生、エグジット（ｅｘｉｔ）またはアサート（ａｓｓｅｒｔ）メソッド呼び出し（ｍｅｔｈｏｄ  ｉｎｖｏｃａｔｉｏｎ）の発生、ヌル表現（ｎｕｌｌ  ｅｘｐｒｅｓｓｉｏｎ）の発生、ヌル値との比較（ｃｏｍｐａｒｉｓｏｎｓ  ｗｉｔｈ  ａ  ｎｕｌｌ  ｖａｌｕｅ）の発生、ヌル割り当て（ｎｕｌｌ  ａｓｓｉｇｎｍｅｎｔｓ）の発生、およびヌル値をリターンする文（ｓｔａｔｅｍｅｎｔｓ）の発生のうちのいずれか一つであることを特徴とする。
【００１１】
好ましくは、前記４）段階で、前記不要サブツリー（ｕｎｎｅｃｅｓｓａｒｙ  ｓｕｂｔｒｅｅ）が除去された前記抽象構文ツリーに対するフィーチャーベクター（Ｖ（Ｒ））の収得過程は、４０１）下記数式（１）のように、ｎ個のフィーチャーパターン（ｐ）のセット形態で構成されたフィーチャーパターンセット（Ｐ）を定義する段階；
［数式１］
Ｐ＝｛ｐ１，ｐ２，．．．，ｐｎ｝
４０２）下記数式２のように、抽象構文ツリー上の任意のノードｄに対するｎ次元のパターン満足ベクター（ｖ（Ｐ，ｄ））を定義する段階；
【数１】
0006369736.tif 000002
（但し、Ｓ（ｄ，ｐｉ）は、任意のノードｄまたはノードｄをルートとするサブツリーがｉ番目のフィーチャーパターン（ｐｉ）にマッチングするか否かを示す因子であって、下記数式３のように定義され、ｉ番目のフィーチャーパターン（ｐｉ）は単一ノードまたはサブツリーであり得る。
【００１２】
【数２】
0006369736.tif 000003
４０３）下記数式（４）のように、抽象構文ツリー上の任意のノードＤに対するフィーチャーベクター（Ｖ（Ｐ，Ｄ））を定義する段階；および
【数３】
0006369736.tif 000004
（但し、ｄ１，．．．，ｄｍは任意のノードＤの子ノードであり、
Ｖ（Ｐ，ｄ１）．．．Ｖ（Ｐ，ｄｍ）は、子ノードｄ１，．．．，ｄｍに対して前記数式４によって求めたフィーチャーベクターであり、
ｖ（Ｐ，Ｄ）は、任意のノードＤに対するｎ次元のパターン満足ベクターである。）
４０４）下記数式５を用いて、前記不要サブツリー（ｕｎｎｅｃｅｓｓａｒｙ  ｓｕｂｔｒｅｅ）が除去された前記抽象構文ツリーに対するフィーチャーベクター（Ｖ（Ｒ））を得る段階；を含んでなることを特徴とする。
【００１３】
【数４】
0006369736.tif 000005
（但し、Ｒは前記不要サブツリー（ｕｎｎｅｃｅｓｓａｒｙ  ｓｕｂｔｒｅｅ）が除去された前記抽象構文ツリーのルートノードであって、前記数式４のノードＤに対応する。）
好ましくは、前記５）段階で、前記クラスタリングはＫ−ｍｅａｎｓアルゴリズムによって実行されることを特徴とする。
【００１４】
本発明の他の一側面によれば、ハードウェアと結合して前記ソースコードの誤り検出における警報類型分類方法を実行させるために媒体に格納されたコンピュータプログラムが開示される。
【００１５】
本発明の別の一側面によれば、前記ソースコードの誤り検出における警報類型分類方法をコンピュータ上で実行するためのコンピュータプログラムが記録された、コンピュータで読み取り可能な記録媒体が開示される。
【発明の効果】
【００１６】
このような本発明によれば、静的アナライザーを用いたソースコードの誤り検出において、警報の発生類型を分類して分析することで、誤認警報の可能性が高い警報類型に対して追加的な分析や対比を行えるようにするという長所がある。
【００１７】
特に、本発明によれば、警報の類型分類作業を開発者の手作業によって行わずに自動的なプロセスを介して実行することができるので、警報類型分類に費やされるリソースの浪費を防止することができるという長所がある。
【図面の簡単な説明】
【００１８】
【図１】本発明の一実施形態に係るソースコードの誤り検出における警報類型分類方法を説明するための概念図である。
【発明を実施するための形態】
【００１９】
本発明は、その技術的思想または主要な特徴から逸脱することなく、他の様々な形態で実施できる。よって、本発明の実施形態は、あらゆる点において単純な例示に過ぎず、限定的に解釈されてはならない。
【００２０】
「第１」、「第２」などの用語は様々な構成要素を説明するために使用できるが、前記構成要素はこれらの用語により限定されるものではない。これらの用語は、ある構成要素を他の構成要素と区別する目的のみで使用される。例えば、本発明の権利範囲を逸脱しない範疇内で、第１構成要素は第２構成要素と命名することができ、これと同様に、第２構成要素も第１構成要素と命名することができる。「および／または」という用語は、複数の関連した記載項目の組み合わせ、または複数の関連した記載項目のいずれかを含む。
【００２１】
ある構成要素が他の構成要素に「連結」または「接続」されていると言及されたときは、その他の構成要素に直接連結または接続されていることもあるが、それらの構成要素の間に別の構成要素が存在することもあると理解すべきである。これに対して、ある構成要素が他の構成要素に「直接連結」されているか、「直接接続」されていると言及されたときは、それらの構成要素の間に別の構成要素が存在しないと理解すべきである。
【００２２】
本出願において使用した用語は、単に特定の実施形態を説明するために使用されたものであり、本発明を限定するものではない。単数の表現は、文脈上明らかに異なる意味を表さない限り、複数の表現を含む。本出願において、「含む」や「備える」、「有する」などの用語は、明細書上に記載された特徴、数字、段階、動作、構成要素、部品またはこれらの組み合わせが存在することを示すものであり、１つまたはそれ以上の他の特徴、数字、段階、動作、構成要素、部品またはこれらの組み合わせの存在または付加の可能性を予め排除するものではないと理解すべきである。
【００２３】
別途定義されていない限り、技術的または科学的な用語を含めてここで使用される全ての用語は、本発明の属する技術分野における通常の知識を有する者に一般に理解されるものと同様の意味を有する。一般に使用される辞書に定義されている用語は、関連技術の文脈上持つ意味と同じ意味を持つと解釈されるべきであり、本出願において明らかに定義しない限り、理想的または過度に形式的な意味で解釈されない。
【００２４】
以下、添付図面を参照して、本発明に係る好適な実施形態を詳細に説明するが、図面符号に関係なく、同一または対応の構成要素は同一の参照番号を付し、これについての重複説明は省略する。本発明を説明するにあたり、関連した公知の技術についての具体的な説明が本発明の要旨を不明確にするおそれがあると判断された場合は、その詳細な説明を省略する。
【００２５】
図１は本発明の一実施形態に係るソースコードの誤り検出における警報類型分類方法を説明するための概念図である。
【００２６】
本実施形態の発明は、静的アナライザーと連動する警報類型分類装置で実行され、静的アナライザーから発生した誤り検出警報を類型別に分類するための方法である。
【００２７】
一例として、前記警報類型分類装置は、警報類型分類方法を実行するコンピューティング手段またはその機能モジュールとして理解でき、静的アナライザーに連動モジュール形態または内部モジュール形態で実現できる。
【００２８】
本実施形態の警報類型分類装置は、公知の様々な静的アナライザーと連動する。一例として、静的アナライザーは、文法ベース（Ｓｙｎｔａｃｔｉｃ）分析または意味ベース（Ｓｅｍａｎｔｉｃ）分析方式の様々な商用製品が公知になったことがあり、その詳細な説明は省略する。
【００２９】
Ｓ１段階で、警報類型分類装置は、発生した誤り検出警報に関する警報経路（ａｌａｒｍ  ｐａｔｈ）情報および警報の対象となったソースコード情報の入力を受ける。一例として、前記入力は、警報類型分類装置の入力要求または静的アナライザーの設定に基づいて、警報類型分類装置と連動する静的アナライザーが警報類型分類装置に前記各情報を入力して提供するか、他の例として、前記各情報が記録されたファイルを、ユーザーが警報類型分類装置で読み出すことができるように入力する方式で行われ得る。
【００３０】
前記警報経路情報は、ソースコードの実行経路のうち、前記発生した誤り検出警報に関連している実行経路に関する情報である。
【００３１】
静的アナライザーは、各機能別チェッカーの実行により、各チェッカー別に予め定義された基準に基づいて分析対象ソースコードの誤り有無を検出し、誤りが検出されたと判断すると、これに対する特定の警報（ａｌａｒｍ）を発生する。
【００３２】
この際、前記警報は検出された誤りに対してチェッカーに予め設定された特定の警報メッセージを出力する方式で行われる。各警報メッセージは、基本的に特定のチェッカーに従属しており、一般にソースコードの特徴や形態、或いは実行経路上の特徴を反映してはいない。
【００３３】
好ましくは、Ｓ１段階で、警報類型分類装置は、発生した誤り検出警報に関する警報類型（ａｌａｒｍ  ｔｙｐｅｓ）情報の入力をさらに受ける。
【００３４】
一つの「警報類型」は同じ警報メッセージを持つ。一例として、１つのチェッカーは、一つの警報メッセージを発生させ、一つの「警報類型」を定義するものと理解できる。
【００３５】
たとえば、前記「警報類型」は、「ｇｅｎｅｒａｌ  ｎｕｌｌ  ｄｅｒｅｆｅｒｅｎｃｅ」、「ｄｅｒｅｆｅｒｅｎｃｉｎｇ  ｏｆ  ａｎ  ｕｎｃｈｅｃｋｅｄ  ｎｕｌｌ  ｖａｌｕｅ」および「ｄｅｒｅｆｅｒｅｎｃｉｎｇ  ｏｆ  ａ  ｒｅｔｕｒｎｅｄ  ｎｕｌｌ  ｖａｌｕｅ」などをその例として挙げることができ、この他にも様々な警報類型が設定できる。
【００３６】
一例として、前記警報類型（ａｌａｒｍ  ｔｙｐｅｓ）別に、後述するフィーチャーパターンセットが定義される。
【００３７】
Ｓ２段階で、警報類型分類装置は、前記ソースコードを抽象構文ツリー（ａｂｓｔｒａｃｔ  ｓｙｎｔａｘ  ｔｒｅｅ、ＡＳＴ）に変換する。
【００３８】
抽象構文ツリー（ａｂｓｔｒａｃｔ  ｓｙｎｔａｘ  ｔｒｅｅ、ＡＳＴ）は、プログラミング言語で作成されたソースコードの抽象構文構造のツリーであって、このツリーの各ノードは、ソースコードから発生する構造体を示す。抽象構文ツリーの詳細な概念は、多数の公知の資料から理解できるので、詳細は省略する。
【００３９】
Ｓ３段階で、警報類型分類装置は、前記抽象構文ツリーから前記誤り検出警報に関連していない不要サブツリー（ｕｎｎｅｃｅｓｓａｒｙ  ｓｕｂｔｒｅｅ）を除去する。
【００４０】
不要サブツリー（ｕｎｎｅｃｅｓｓａｒｙ  ｓｕｂｔｒｅｅ）の除去は、通常のルールベース技法によって行われ得る。
【００４１】
一例として、前記不要サブツリー（ｕｎｎｅｃｅｓｓａｒｙ  ｓｕｂｔｒｅｅ）の除去は、誤り検出警報に関連している実行経路上で実行される構文を除いた他の一般構文を除去する第１ポリシーと、誤り検出警報に関連している実行経路上で実行される分岐文ではない他の分岐文を除去する第２ポリシー−但し、誤り検出警報に関連している実行経路は分岐文の条件判別結果を含む−と、誤り検出警報に関連している実行経路上で実行される繰り返し文ではない他の繰り返し文を除去する第３ポリシーと、誤り検出警報に関連している実行経路上で呼び出された関数および前記関数の実行経路を、前記関数を呼び出すノードのサブツリーとして含む第４ポリシーと、誤り検出警報に関連している実行経路と関係のない宣言文を除去する第５ポリシーとのうち、少なくとも１つのポリシーに基づいて行われる。
【００４２】
Ｓ４段階で、警報類型分類装置は、予め設定されたフィーチャーパターンセットに基づいて、不要サブツリー（ｕｎｎｅｃｅｓｓａｒｙ  ｓｕｂｔｒｅｅ）が除去された前記抽象構文ツリーに対するフィーチャーベクターを得る。
【００４３】
ソースコードから求められた抽象構文ツリー（ａｂｓｔｒａｃｔ  ｓｙｎｔａｘ  ｔｒｅｅ、ＡＳＴ）は、クラスタリングを用いた警報類型分類のために、そのまま入力データとして活用するにはあまりにも大きくて複雑な構造を有する。本実施形態のように、ソースコードから求められた抽象構文ツリーに対してフィーチャーベクターを得て、これを用いてクラスタリングを行うと、クラスタリング処理時間を減らし、これに必要なリソースの所要を減らすという利点を得る。
【００４４】
好ましくは、前記フィーチャーパターンセットは、予め設定されたｎ個のフィーチャーパターンのセット形態で構成され、前記フィーチャーパターンは、条件文の発生、ループ文の発生、リターン文の発生、ブレーク（ｂｒｅａｋ）またはコンティニュー（ｃｏｎｔｉｎｕｅ）文の発生、エグジット（ｅｘｉｔ）またはアサート（ａｓｓｅｒｔ）メソッド呼び出し（ｍｅｔｈｏｄ  ｉｎｖｏｃａｔｉｏｎ）の発生、ヌル表現（ｎｕｌｌ  ｅｘｐｒｅｓｓｉｏｎ）の発生、ヌル値との比較（ｃｏｍｐａｒｉｓｏｎｓ  ｗｉｔｈ  ａ  ｎｕｌｌ  ｖａｌｕｅ）の発生、ヌル割り当て（ｎｕｌｌ  ａｓｓｉｇｎｍｅｎｔｓ）の発生、ヌル値をリターンする文（ｓｔａｔｅｍｅｎｔｓ）の発生のうちのいずれか一つであり得る。これを表にまとめると、次のとおりである。
【表１】
0006369736.tif 000006
【００４５】
好ましい一例として、前記フィーチャーパターンセット、すなわち、ｎ個のフィーチャーパターンのセットは、前記誤り検出警報のそれぞれの警報類型に対して予め設定される。このような設定関係を持つ場合、警報類型分類は、一つの特定の警報類型の範囲内で行われる。
【００４６】
好ましくは、前記Ｓ４段階で、前記不要サブツリー（ｕｎｎｅｃｅｓｓａｒｙ  ｓｕｂｔｒｅｅ）が除去された前記抽象構文ツリーに対するフィーチャーベクター（Ｖ（Ｒ））の収得過程は、次のとおり実行される。
【００４７】
Ｓ４０１段階で、警報類型分類装置は、下記数式１のように、ｎ個のフィーチャーパターン（ｐ）のセット形態で構成されたフィーチャーパターンセット（Ｐ）を定義する。
【００４８】
［数式１］
Ｐ＝｛ｐ１，ｐ２，．．．，ｐｎ｝
Ｓ４０２段階で、警報類型分類装置は、下記数式２のように、抽象構文ツリー上の任意のノードｄに対するｎ次元のパターン満足ベクター（ｖ（Ｐ，ｄ））を定義する。
【００４９】
【数５】
0006369736.tif 000007
（但し、Ｓ（ｄ，ｐｉ）は、任意のノードｄまたはノードｄをルートとするサブツリーがｉ番目のフィーチャーパターン（ｐｉ）にマッチングするか否かを示す因子であって、下記数式３のように定義され、ｉ番目のフィーチャーパターン（ｐｉ）は単一ノードまたはサブツリーであり得る。
【００５０】
【数６】
0006369736.tif 000008
Ｓ４０３段階で、警報類型分類装置は、下記数式４のように、抽象構文ツリー上の任意のノードＤに対するフィーチャーベクター（Ｖ（Ｐ，Ｄ））を定義する。
【００５１】
【数７】
0006369736.tif 000009
（但し、ｄ１，．．．，ｄｍは任意のノードＤの子ノードであり、
Ｖ（Ｐ，ｄ１）．．．Ｖ（Ｐ，ｄｍ）は、子ノードｄ１，．．．，ｄｍに対して前記数式４によって求めたフィーチャーベクターであり、
ｖ（Ｐ，Ｄ）は、任意のノードＤに対するｎ次元のパターン満足ベクターである。）
Ｓ４０４段階で、警報類型分類装置は、下記数式５を用いて、前記不要サブツリー（ｕｎｎｅｃｅｓｓａｒｙ  ｓｕｂｔｒｅｅ）が除去された前記抽象構文ツリーに対するフィーチャーベクター（Ｖ（Ｒ））を得る。
【００５２】
【数８】
0006369736.tif 000010
（但し、Ｒは前記不要サブツリー（ｕｎｎｅｃｅｓｓａｒｙ  ｓｕｂｔｒｅｅ）が除去された前記抽象構文ツリーのルートノードであって、前記数式４のノードＤに対応する。）
前記数式５は、前記数式４の任意のノードＤとして、不要サブツリー（ｕｎｎｅｃｅｓｓａｒｙ  ｓｕｂｔｒｅｅ）が除去された前記抽象構文ツリーのルートノードＲを入力して求められる式と理解されることもできる。
【００５３】
Ｓ５段階で、警報類型分類装置は、得られた前記フィーチャーベクター（Ｖ（Ｒ））を予め設定された方式でクラスタリングして前記フィーチャーベクターに対応する誤り検出警報を類型別に分類する。
【００５４】
クラスタリングは、公知のベクターまたはデータクラスタリング技法が使用でき、例えば、公知の階層的クラスタリング（Ｈｉｅｒａｒｃｈｉｃａｌ  Ｃｌｕｓｔｅｒｉｎｇ）技法または非階層的クラスタリング（Ｎｏｎ−ｈｉｅｒａｒｃｈｉｃａｌ  Ｃｌｕｓｔｅｒｉｎｇ）技法が使用できる。
【００５５】
本実施形態の場合、好適な一例として、非階層的クラスタリング方法のうち、Ｋ−ｍｅａｎｓアルゴリズムが使用できる。Ｋ−ｍｅａｎｓは、データ（またはベクター）と該データ（またはベクター）の属するクラスタの中心（ｃｅｎｔｅｒ）とのユークリッド距離（Ｅｕｃｌｉｄｅａｎ  ｄｉｓｔａｎｃｅ）を最小化することにより、クラスタの中心点（ｃｅｎｔｒｏｉｄ）を探していく方法である。
【００５６】
Ｋ−ｍｅａｎｓアルゴリズムは、単純な構造を有しており、一般に迅速に収斂する特性を持つため、本実施形態で好ましい一例として適用できる。さらに正確なクラスタリング結果を得るために、互いに異なる初期値で複数回試みて最も良い結果を使用することもでき、求めようとするクラスタの数を予め適切な個数に設定してクラスタリングを実行することもできる。
【００５７】
クラスタリングによって、類似度の高いフィーチャーベクターが同一類型に分類でき、その結果、同一類型に分類されたフィーチャーベクターに対応するそれぞれの誤り検出警報も同一類型の警報として分類できる。一例として、同一類型として分類できる類似度の詳細条件は警報類型分類装置に予め設定できる。
【００５８】
このような警報類型分類により、開発者は誤り検出警報の分析において様々な長所を得ることができる。
【００５９】
たとえば、新しい誤り検出警報が発生した場合、当該誤り検出警報が従来の正常警報として分類された誤り検出警報との低い類似度のため同一類型ではないと分類されると、当該誤り検出警報を優先的に分析して、開発者は誤認警報か否かを優先的に判断することができる。
【００６０】
本発明の実施形態は、様々なコンピュータで実現される動作を行うためのプログラムと、これを記録したコンピュータ可読媒体を含む。前記コンピュータ可読媒体は、プログラム命令、データファイル、データ構造などを単独で或いは組み合わせて含むことができる。前記媒体は、本発明のために特別に設計されて構成されたものであってもよく、コンピュータソフトウェアの当業者に公知されて使用可能なものであってもよい。コンピュータ可読記録媒体の例には、ハードディスク、フロッピーディスクおよび磁気テープなどの磁気媒体、ＣＤ−ＲＯＭ、ＤＶＤ、ＵＳＢドライブなどの光記録媒体、フロプティカルディスクなどの磁気−光媒体、および、プログラム命令を格納して実行するように特別に構成された、ＲＯＭ、ＲＡＭ、フラッシュメモリなどのハードウェア装置が含まれる。前記媒体は、プログラム命令、データ構造などを指定する信号を伝送する搬送波を含む光または金属線、導波管などの伝送媒体であってもよい。プログラム命令の例としては、コンパイラによって作られるもののような機械語コードだけでなく、インタープリターなどを用いてコンピュータによって実行できる高級言語コードを含む。
【図１】
0006369736.tif 000015