(57)【特許請求の範囲】
【請求項１】
静的検証装置にてソースコードに対する検証が行われた結果であるツール指摘を選別する条件を示す選別ルールを取得する選別ルール取得手段と、
前記ツール指摘と、前記ソースコードに関する情報とを関連付け、前記ツール指摘に含まれる前記ソースコードにおける処理の種類を示す処理タイプに関する情報を解析情報として導出する解析手段と、
前記解析情報及び前記選別ルールに基づいて、前記選別ルールに関係する前記ツール指
摘を選別する選別手段とを備える指摘選別装置。
【請求項２】
前記選別ルール取得手段は、前記選別ルールとして、前記ツール指摘に含まれる処理の
順序関係を示す情報であって、前記ツール指摘として指摘される問題の原因となりうる処理が行われる問題作りこみ行、前記問題の原因となる処理から当該問題が実際に発生し得るまでの途中の処理に関係する中間、及び前記問題が実際に発生し得る問題発生行の３つから選択される処理位置に関する情報を取得する、請求項１に記載の指摘選別装置。
【請求項３】
前記選別ルール取得手段は、前記選別ルールとして、前記処理位置に関連して実行され
る処理の種類を示す、代入、評価、参照を含む前記処理タイプに関する情報を取得する、請求項２に記載の指摘選別装置。
【請求項４】
前記選別ルール取得手段は、前記選別ルールとして、前記処理位置及び前記処理タイプに関連して前記ソースコードにて行われる処理の内容を示す処理情報を取得する請求項３に記載の指摘選別装置。
【請求項５】
前記解析手段は、前記ツール指摘に含まれる前記ソースコードにおける処理を前記処理情報として導出する、請求項４に記載の指摘選別装置。
【請求項６】
前記選別手段は、前記解析情報及び前記選別ルールについて、各々に含まれる前記処理
位置、前記処理タイプ及び前記処理情報がそれぞれ所定の条件を満たす場合に前記解析情
報に含まれる前記ツール指摘を選別する、請求項４から５のいずれかに記載の指摘選別装置。
【請求項７】
請求項１から６のいずれか一項に記載の指摘選別装置と、
プログラムのソースコードを検証する静的検証装置とを備え、
前記指摘選別装置は、前記静的検証装置にて検証が行われた結果を前記ツール指摘とし
て指摘の選別を行う静的検証システム。
【請求項８】
静的検証装置にてソースコードに対する検証が行われた結果であるツール指摘を選別す
る条件を示す選別ルールを取得し、
前記ツール指摘と、前記ソースコードに関する情報とを関連付け、前記ツール指摘に含まれる前記ソースコードにおける処理の種類を示す処理タイプに関する情報を解析情報として導出し、
前記解析情報及び前記選別ルールに基づいて、前記選別ルールに関係する前記ツール指
摘を選別する指摘選別方法。
【請求項９】
コンピュータに、
静的検証装置にてソースコードに対する検証が行われた結果であるツール指摘を選別す
る条件を示す選別ルールを取得する処理と、
前記ツール指摘と、前記ソースコードに関する情報とを関連付け、前記ツール指摘に含まれる前記ソースコードにおける処理の種類を示す処理タイプに関する情報を解析情報として導出する処理と、
前記解析情報及び前記選別ルールに基づいて、前記選別ルールに関係する前記ツール指
摘を選別する処理とを実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、指摘選別装置、指摘選別方法及びプログラムに関する。
【背景技術】
【０００２】
ソフトウェアのバグやセキュリティ脆弱性等に関する問題を検出するために、静的検証ツール（静的検証装置）が用いられている。静的検証ツールは、検証対象となるソフトウェアのソースコードに関する何らかのモデルを内部に構築して検証することで、当該ソフトウェアの実行ファイルを実行することなく、当該ソフトウェアの問題を指摘する。
【０００３】
静的検証ツールの例として、例えば、ＴｅｃｈＭａｔｒｉｘ社の「Ｃ＋＋ｔｅｓｔ」（商標）や「Ｊｔｅｓｔ」（商標）等が知られている。
【０００４】
静的検証ツールは、一般にソースコードのみを用いて検証を行うことで、ソフトウェアの問題を指摘する。そのため、静的検証ツールからの指摘には、誤検知が含まれる場合がある。誤検知は、検証対象であるソフトウェアを実行した場合には発生することがなく、実際には確認や修正の必要がない指摘である。誤検知は、例えば静的検証ツールが検証を行う場合に仮定した情報等（システムの設定情報や設定ファイルの情報等）に起因して生じる。そのため、静的検証ツールからの指摘に関して、実際に確認すべき指摘数を抑制する手法が検討されている。
【０００５】
特許文献１には、判定作業支援システム等が記載されている。特許文献１に記載の判定作業支援システムは、ユーザが指摘を精査した時に、事前に統一した類似指摘が同じ精査結果となるように処理することで、類似指摘の重複作業の削減による精査作業の削減等を支援する。
【０００６】
特許文献２には、ソースコード解析装置等が記載されている。特許文献２に記載のソースコード解析装置は、第１ソースコード及び第１ソースコードを修正した第２ソースコードを夫々静的に解析した結果の警告の検出回数である第１警告数及び第２警告数に基づき、警告情報の優先順位を決定する。
【０００７】
特許文献３には、ソースプログラム解析装置等が記載されている。特許文献３に記載のソースプログラム解析装置は、自社のルール違反箇所を解析し、解析結果により、ソースコードを自動的に修正する。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２０１２−２５６２２０号公報
【特許文献２】特開２００８−０５２４２４号公報
【特許文献３】特開２００６−２３６０４２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
静的検証ツールからの指摘の数を抑制する場合には、検証の対象となるソフトウェアの種類や検証の回数に関わらず、当該指摘の数が適切に抑制されることが好ましい。しかしながら、特許文献１等に記載された技術では、例えばソフトウェアに対して初めて静的検証ツールが適用される場合等において、静的検証ツールからの指摘の数を十分に抑制できない可能性がある。
【００１０】
本発明は、上記課題を解決するためになされたものであって、静的検証装置の指摘を効率的に確認することを可能にする指摘選別装置等を提供することを主たる目的とする。
【課題を解決するための手段】
【００１１】
本発明の一態様における指摘選別装置は、静的検証装置にてソースコードに対する検証が行われた結果であるツール指摘を選別する条件を示す選別ルールを取得する選別ルール取得手段と、前記ツール指摘と、前記ソースコードに関する情報とを関連付け、前記ツール指摘に含まれる前記ソースコードにおける処理の種類を示す処理タイプに関する情報を解析情報として導出する解析手段と、前記解析情報及び前記選別ルールに基づいて、前記選別ルールに関係する前記ツール指摘を選別する選別手段とを備える。
【００１２】
本発明の一態様における指摘選別方法は、静的検証装置にてソースコードに対する検証が行われた結果であるツール指摘を選別する条件を示す選別ルールを取得し、前記ツール指摘と、前記ソースコードに関する情報とを関連付け、前記ツール指摘に含まれる前記ソースコードにおける処理の種類を示す処理タイプに関する情報を解析情報として導出し、前記解析情報及び前記選別ルールに基づいて、前記選別ルールに関係する前記ツール指摘を選別する。
【００１３】
本発明の一態様におけるプログラムは、静的検証装置にてソースコードに対する検証が行われた結果であるツール指摘を選別する条件を示す選別ルールを取得する処理と、  前記ツール指摘と、前記ソースコードに関する情報とを関連付け、前記ツール指摘に含まれる前記ソースコードにおける処理の種類を示す処理タイプに関する情報を解析情報として導出する処理と、前記解析情報及び前記選別ルールに基づいて、前記選別ルールに関係する前記ツール指摘を選別する処理とを実行させる。
【発明の効果】
【００１４】
本発明によると、静的検証装置の指摘を効率的に確認することを可能にする指摘選別装置等を提供することができる。
【図面の簡単な説明】
【００１５】
【図１】本発明の第１の実施形態における指摘選別装置の構成を示す図である。
【図２】本発明の第１の実施形態における指摘選別装置にて用いられる選別ルールの一例を示す図である。
【図３】本発明の第１の実施形態における指摘選別装置の解析部にて用いられるツール指摘に関する情報の例を示す図である。
【図４】本発明の第１の実施形態における指摘選別装置の解析部における解析結果である解析情報の例を示す図である。
【図５】本発明の第１の実施形態における指摘選別装置の選別部における選別の手順の例を示す図である。
【図６】本発明の第１の実施形態における指摘選別装置の動作の一例を示すフローチャートである。
【図７】本発明の第１の実施形態における指摘選別装置の動作の別の一例を示すフローチャートである。
【図８】本発明の実施形態における指摘選別装置を有する静的検証システムの構成例を示す図である。
【図９】本発明の実施形態等における指摘選別装置等を実現する情報処理装置の一例を示す図である。
【発明を実施するための形態】
【００１６】
本発明の実施形態について、添付の図面を参照して説明する。なお、本発明の実施形態において、各装置の各構成要素は、機能単位のブロックを示している。各装置の各構成要素は、例えば図９に示すような情報処理装置５００とソフトウェアとの任意の組み合わせにより実現することができる。情報処理装置５００は、一例として、以下のような構成を含む。
【００１７】
・ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）５０１
・ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）５０２
・ＲＡＭ（Ｒａｍｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）５０３
・ＲＡＭ５０３にロードされるプログラム５０４
・プログラム５０４を格納する記憶装置５０５
・記録媒体５０６の読み書きを行うドライブ装置５０７
・ネットワーク５０９と接続する通信インターフェース５０８
・データの入出力を行う入出力インターフェース５１０
・各構成要素を接続するバス５１１
各装置の実現方法には様々な変形例がある。例えば、各装置は、専用の装置として実現することができる。また、各装置は、複数の装置の組み合わせにより実現することができる。
【００１８】
（第１の実施形態）
まず、本発明の第１の実施形態について説明する。図１は、本発明の第１の実施形態における指摘選別装置を示す図である。図２は、本発明の第１の実施形態における指摘選別装置にて用いられる選別ルールの一例を示す図である。図３は、本発明の第１の実施形態における指摘選別装置の解析部にて用いられるツール指摘に関する情報の例を示す図である。図４は、本発明の第１の実施形態における指摘選別装置の解析部における解析結果である解析情報の例を示す図である。図５は、本発明の第１の実施形態における指摘選別装置の選別部における選別の手順の例を示す図である。図６は、本発明の第１の実施形態における指摘選別装置の動作の一例を示すフローチャートである。図７は、本発明の第１の実施形態における指摘選別装置の動作の別の一例を示すフローチャートである。
【００１９】
図１に示すとおり、本発明の第１の実施形態における指摘選別装置１００は、選別ルール取得部１１０と、解析部１２０と、選別部１３０とを備える。選別ルール取得部１１０は、静的検証装置にてソースコードに対する検証が行われた結果であるツール指摘を選別する条件を示す選別ルールを取得する。解析部１２０は、ツール指摘と、ソースコードに関する情報とを関連付ける解析情報を導出する。選別部１３０は、解析情報及び選別ルールに基づいて、選別ルールに関係するツール指摘を選別する。
【００２０】
続いて、本発明の実施形態における指摘選別装置１００の各構成要素について説明する。
【００２１】
選別ルール取得部１１０は、上述のように、選別ルールを取得する。選別ルールは、静的検証装置から示されるツール指摘を選別する条件を表す。ツール指摘は、静的検証装置にてプログラムのソースコードに対する検証が行われた結果として、静的検証装置からソースコードの問題として示される指摘である。
【００２２】
図２は、選別ルールの一例を示す。図２に示す例では、３つの選別ルールが与えられている。選別ルールは、一例として、選別ルール番号と、問題ルール名と、処理位置と、処理タイプと、ソースコードに関する情報である左辺及び右辺の情報を含む。
【００２３】
選別ルール番号は、選別ルールにおいて、ツール指摘を選別する条件ごとに一意に与えられる番号を表す。図２に示す例では、３つの選別ルールに対してそれぞれ通しの番号が付されている。
【００２４】
問題ルール名は、例えば静的検証装置にて予め用意されており、静的検証装置にてツール指摘として検出される問題に関するルール（以下、必要に応じて「問題ルール」と称する）の名称を表す情報である。すなわち、問題ルール名として、本実施形態における指摘選別装置１００にて選別される静的検証装置のルールが指定される。本実施形態にて用いられる選別ルールの例では、１つの選別ルールに対して１つの問題ルール名が指定される。
【００２５】
図２に示す例では、選別ルール番号が１の選別ルールにおいて、メモリリークの可能性を示す“ＭｅｍｏｒｙＬｅａｋ”とのルールが問題ルール名として指定されている。同様に、選別ルール番号が２の選別ルールにおいて、条件式の評価に関する問題の可能性を示す“ｎｏｎＥｖａｌ”とのルールが問題ルール名として指定されている。また、選別ルール番号が３の選別ルールにおいて、ヌルポインタを参照する可能性を示す“ＮｕｌｌＰｏｉｎｔｅｒ”とのルールが問題ルール名として指定されている。
【００２６】
処理位置は、本選別ルールを用いて選別されるツール指摘に関連するソースコード上の処理の順序関係を示す情報である。本実施形態においては、処理位置の項目は、図２に示すように「問題作りこみ行」、「中間」及び「問題発生行」の３つから選択される。
【００２７】
「問題作りこみ行」は、ソースコードにおいて、静的検証装置からツール指摘として指摘される問題の原因となりうる処理が行われる箇所である。「中間」は、ソースコードにおいて、静的検証装置からツール指摘として指摘される問題の原因となる処理から当該問題が実際に発生し得るまでの途中の処理に関係する箇所である。「問題発生行」は、ソースコードにおいて、静的検証装置からツール指摘として指摘される問題が実際に発生し得る箇所である。
【００２８】
なお、処理位置は、選別しようとするツール指摘の種類や、本実施形態における指摘選別装置の使用者の意図等に応じて、選別ルールごとに必要に応じて１つ以上の処理位置が指定される。また、選別ルール毎に、処理位置として、複数の同じ種類の処理位置が指定されてもよい。
【００２９】
本実施形態においては、図２に示すように、選別ルール番号が１の選別ルールにおいて、「問題発生行」となる処理位置が指定されている。選別ルール番号が２の選別ルールにおいても、選別ルール番号が１の選別ルールと同様に「問題発生行」となる処理位置が指定されている。また、選別ルール番号が３の選別ルールにおいては、「問題作りこみ行」、「中間」及び「問題発生行」となる処理位置が指定されている。
【００３０】
処理タイプは、上述した処理位置に関連するソースコードにて行われる処理の種類を示す。本実施形態においては、処理タイプの項目は、図２に示すように「Ｉｎｓｅｒｔ」「Ｅｖａｌ」「ｒｅｆｅｒｅｎｃｅ」の３つから選択される。処理タイプは、上述した処理位置の各々に対して指定される。
【００３１】
「Ｉｎｓｅｒｔ」は、ソースコードにおける関連する箇所において、代入等の処理が行われることを示す。「Ｅｖａｌ」は、ソースコードにおける関連する箇所において、条件式や値の評価等の処理が行われることを示す。
また、「ｒｅｆｅｒｅｎｃｅ」は、ソースコードにおける関連する箇所において、値等の参照が行われることを示す。
【００３２】
本実施形態においては、図２に示すように、選別ルール番号が１の選別ルールにおいて、「問題発生行」である処理位置に対して「Ｉｎｓｅｒｔ」の処理タイプが指定されている。また、選別ルール番号が１の選別ルールにおいて、「問題発生行」である処理位置に対して「Ｅｖａｌ」の処理タイプが指定されている。
選別ルール番号が３の選別ルールにおいては、「問題作りこみ行」の処理位置に対して「Ｉｎｓｅｒｔ」、「中間」の処理位置に対して「Ｅｖａｌ」、「問題発生行」の処理位置に対して「Ｅｖａｌ」の処理タイプが各々指定されている。
【００３３】
ソースコードに関する情報である左辺及び右辺は、上述した処理位置及び処理タイプに関連するソースコードにて実行される処理の内容を示す。この左辺及び右辺に関する情報は、まとめて処理情報とも呼ばれる。本実施形態においては、正規表現記述、及び“％”記号にて区切られる特定変数の情報を用いて、当該ソースコードにおける処理の内容が記載される。なお、特定変数の情報として、本実施形態においては、静的検証装置においてツール指摘として指摘される問題に関連する変数（以下、「問題変数」と称する）が％ＥＲＲＯＲ＿ＶＡＬ％との形式にて表される。
【００３４】
左辺及び右辺にて示される情報の形式は、先に説明した処理タイプに応じて定められる。処理タイプが「Ｉｎｓｅｒｔ」である場合には、左辺及び右辺は、処理位置及び処理タイプの各々に関連するソースコードにおける左辺及び右辺にて行われることが想定される処理を示す。
【００３５】
処理タイプが「Ｅｖａｌ」又は「ｒｅｆｅｒｅｎｃｅ」である場合には、左辺は、ソースコードにおける処理位置及び処理タイプの各々に対応する箇所を示す。そして、この場合には、右辺は、“−”との形式にてソースコードに対応する処理等がないことを示す。
【００３６】
本実施形態においては、図２に示すように、選別ルール番号が１の選別ルールにおいて、左辺は“＊”であり。また、右辺は“ｒｅａｌｌｏｃ．＊（％ＥＲＲＯＲ＿ＶＡＬ％”である。なお、左辺に与えられている“＊”は、正規表現にて一般に用いられる“＊”（アスタリスク）を示し、任意の文字列を表す。このように、正規表現を用いた表現を可能とすることで、処理情報として、特段の条件がない場合を含む任意の条件が容易に指定される。
【００３７】
上述の例では、左辺及び右辺は、上述した問題変数を引数としてメモリブロックを再割り当てする処理を行うｒｅａｌｌｏｃ関数等の戻り値を、任意の変数に代入する処理に関連することを示す。したがって、この選別ルールは、メモリブロックを再割り当てする処理を行うｒｅａｌｌｏｃ関数の実行に起因して生じるメモリリークに関連するツール指摘を選別することを示している。
【００３８】
本実施形態においては、選別ルール番号が２の選別ルールにおいて、左辺は“＾［］＝％ＥＲＲＯＲ＿ＶＡＬ％”である。また、右辺は“−”である。したがって、この選別ルールは、条件式等の評価において、問題変数の値を別の対象に代入することに起因して生じるツール指摘を選別することを示している。
【００３９】
また、選別ルール番号が３の選別ルールにおいて、「問題作りこみ行」の処理位置に関して、左辺に “＊”であり、右辺は“ｍａｌｌｏｃ”である。また、「中間」の処理に関して、左辺は、“ｉｆ（％ＥＲＲＯＲ＿ＶＡＬ％．＊  ！＝  ＮＵＬＬ）”であり、右辺は“−”である。そして、「問題発生行」の処理位置に関して、左辺には“＊”が、右辺には、“￥＊．＊％ＥＲＲＯＲ＿ＶＡＬ％”が与えられている。この選別ルールは、メモリブロックを割り当てるｍａｌｌｏｃ関数の実行後、問題変数がＮＵＬＬを示したまま当該変数が参照されることに起因して生じるＮＵＬＬポインタ参照に関するツール指摘を選別することを示している。
【００４０】
選別ルール取得部１１０は、上述した選別ルールを任意の方法にて取得する。例えば、選別ルール取得部１１０は、上述した選別ルールに含まれる各項目を編集する構成を備えてもよい。この場合には、選別ルール取得部１１０において、選別ルールの追加や削除、また、選別ルールに含まれる各項目の追加、更新、削除等が実行される。すなわち、選別ルール取得部１１０は、上述のようにして編集された選別ルールを取得する。
【００４１】
また、選別ルール取得部１１０は、他のツールやシステムにて作成された選別ルールを取得する構成であってもよい。この場合には、選別ルール取得部１１０は、通信ネットワークや、ファイルやメモリ等の任意の記憶手段を介して選別ルールを取得する。
【００４２】
なお、図２の例では、問題ルール名として３つのルールが指定されている例が示されている。しかしながら、問題ルール名として、静的検証装置にて検証が行われる任意のルールが指定可能である。また、図２に問題ルール名として示されているルールに対して、選別ルール取得部１１０は、図２と異なる内容の選別ルールを取得して用いてもよい。
【００４３】
解析部１２０は、解析情報を導出する。解析情報は、上述のように、ツール指摘とソースコードに関する情報とを関連付ける情報である。解析部１２０は、静的検証装置において検証の対象とされるソースコードと、当該ソースコードに関して静的検証装置から示されるツール指摘に関する情報とを取得して、解析情報を導出する。
【００４４】
図３は、解析部１２０にて用いられるツール指摘の一覧に関する情報の一例である。図３に示すツール指摘の一覧に関する情報は、静的検証装置から示されるツール指摘について、「問題ルール名」、「問題変数名」及びソース情報である「ファイル名」と「行番号」に関する情報をツール指摘ごとにまとめた情報の一覧である。
【００４５】
図３において、指摘番号が１であるツール指摘は、問題変数名として指摘される変数ｂｕｆｆｅｒに対して、問題ルールＭｅｍｏｒｙＬｅａｋ（すなわち、メモリリーク）に該当する可能性があるとの指摘がなされていることを示す。また、このツール指摘に関する問題は、少なくともファイルａ．ｃ及びｄ．ｃにおける各々の行番号に示された処理において生じていることが示されている。
同様に、指摘番号２又は３が付されたツール指摘は、それぞれソース情報として示されるファイルにおける行番号の位置にて、問題変数として示される変数に対して、問題ルールにて示される問題に該当する可能性があることを示している。
【００４６】
なお、問題ルール名及び問題変数名は、選別ルールの説明にて上述した問題ルール名及び問題変数名と同じ内容を示す。また、ファイル名及び行番号に関する情報は、検証対象であるソースコードにおいて上述した問題ルールに関連する処理が行われたファイル名と、該ファイル名における行番号とを示す。
【００４７】
解析部１２０は、静的検証装置から示されるツール指摘を例えば指摘ごとに取得して、図３に示す形式の情報を適宜生成してもよい。また、解析部１２０は、予め静的検証装置において図３等の形式にまとめられたツール指摘の一覧に関する情報を取得してもよい。
【００４８】
図４は、解析部１２０にて導出される解析情報の一例を示す図である。図４に示す例では、解析情報は、図３に示すツール指摘の一覧に関する情報に対して、ソース情報に含まれる処理タイプに関する情報、並びに左辺及び右辺に関する情報（すなわち、上述した処理情報）が付された情報である。なお処理タイプは、選別ルールの説明にて上述した処理タイプと同様の内容を示す。
【００４９】
解析部１２０は、図３に示すツール指摘の一覧に関する情報に関して、例えば当該ツール指摘に含まれるソース情報にて示されたソースコードの該当する行等を参照して、解析情報を導出する。
【００５０】
より具体的には、解析部１２０は、図３に示されるツール指摘の一覧に関する情報にて示されるソース情報に基づいて、ソースコードの該当する行等を参照する。そして、解析部１２０には、当該ソースコードの該当する行等の記載に基づいて、処理タイプ並びに左辺及び右辺に関する情報を判別して決定する。
【００５１】
すなわち、解析部１２０は、ソースコードの該当する行等に、ｉｆ、ｓｗｉｔｃｈ、ｆｏｒ、ｗｈｉｌｅ等の条件分岐に関する処理を示す記述がある場合には、処理タイプを「Ｅｖａｌ」と決定する。解析部１２０は、処理タイプが「Ｅｖａｌ」とされていない場合において、ソースコードの該当する行等に“＝”等の代入に関する記述がある場合には、処理タイプを「Ｉｎｓｅｒｔ」と決定する。そして、解析部１２０は、処理タイプが「Ｅｖａｌ」又は「Ｉｎｓｅｒｔ」のいずれにもされていない場合には、処理タイプを「ｒｅｆｅｒｅｎｃｅ」と決定する。
【００５２】
また、解析部１２０は、処理タイプが「Ｉｎｓｅｒｔ」である場合には、ソースコードの該当する行における“＝”等の代入に関する記述の左辺及び右辺を、それぞれ解析情報における左辺及び右辺とする。そして、解析部１２０は、処理タイプが「Ｅｖａｌ」又は「ｒｅｆｅｒｅｎｃｅ」である場合には、ソースコードの該当する行の記載を解析情報における左辺とする。この場合には、解析部は、解析情報における右辺を上述した“−”とする。
【００５３】
図４に示す例では、例えば指摘番号が１であるツール指摘に関して、解析部１２０は、少なくともソースコードとして少なくともａ．ｃ及びｄ．ｃを参照する。この例においては、ファイルａ．ｃ及びｄ．ｃはＣ＋＋言語にて記述されており、行番号１０（すなわち、ファイルａ．ｃの１０行目）には、“ｐｏｉｎｔｅｒ＝ｍａｌｌｏｃ（１０）；”との記述があることを想定する。なお、ｐｏｉｎｅｒは変数であり、ｍａｌｌｏｃメモリブロックを割り当てる関数であり、“＝”は代入を表す。この場合に、解析部１２０は、当該行番号に関する解析結果として、当該行番号における処理にて代入が行われることから、処理タイプを「Ｉｎｓｅｒｔ」と決定する。そして、解析部１２０は、決定した処理タイプに応じて、左辺を“ｐｏｉｎｔｅｒ”、右辺を“ｍａｌｌｏｃ（１０）”と決定する。
【００５４】
また、ファイルａ．ｃの行番号１２には、“ｐｒｉｎｔｆ（“％ｓ”，ｔｅｓｔ）”との記述がある場合を想定する。この場合に、解析部１２０は、当該行番号に関する解析結果として、当該行番号における処理が代入等や条件分岐等に関する処理ではないことから、処理タイプを「ｒｅｆｅｒｅｎｃｅ」と決定する。そして、解析部１２０は、決定した処理タイプに応じて、左辺を“ｐｒｉｎｔｆ（“％ｓ”，ｔｅｓｔ）”とし、右辺は対応する処理がないことを示すように“−”であると決定する。
【００５５】
同様に、ファイルｄ．ｃの行番号１５には、“ｉｆ（ｂｕｆｆｅｒ！＝ＮＵＬＬ）” との記述がある場合を想定する。この場合に、解析部１２０は、当該行番号に関する解析結果として、当該行番号における処理が条件分岐に関する記述であることから、処理タイプを「Ｅｖａｌ」と決定する。そして、解析部は、決定した処理タイプに応じて、左辺を“ｉｆ（ｂｕｆｆｅｒ！＝ＮＵＬＬ）”とし、右辺は“−”と決定する。
【００５６】
各々のツール指摘におけるソース情報に含まれる他の行に関しても、解析部１２０は、それぞれ同様の手順で解析を行い、解析結果を導出する。
【００５７】
選別部１３０は、上述のように、解析情報及び選別ルールに基づいて、選別ルールに関係するツール指摘を選別する。すなわち、選別部１３０は、選別ルールにて指定されている条件に基づいて、ツール指摘のうち、必要とされる指摘を抽出する。選別ルールとして、選別ルール取得部１１０において図２に示すようなルールが取得されている場合、選別部１３０は、例えば図５に示す例のように、選別ルールに関係するツール指摘を選別する。
【００５８】
最初に、図５の（１）に示すように、選別部１３０は、選別ルールの一つにて指定されている問題ルール名と、解析情報に含まれるツール指摘にて指摘されている問題ルール名とを確認する。
【００５９】
選別ルールの一つにて指定されている問題ルール名と同じ問題ルール名に関する指摘が解析情報に含まれるツール指摘に存在しない場合には、選別部１３０は、当該問題ルール名に関して選別すべき指摘はないとする。当該問題ルール名に関する指摘がツール指摘に存在する場合には、選別部１３０は、当該問題ルール名に関する指摘がツール指摘を、選別ルールに関係するツール指摘の候補として決定する。
【００６０】
図５の例では、選別部１３０は、例えば、ルール番号１の選別ルールに関して、問題ルール名が“ＭｅｍｏｒｙＬｅａｋ”であるツール指摘が解析情報に含まれているかを確認する。図５の例では、同じ問題ルール名に関するツール指摘として、指摘番号１のツール指摘が存在する。したがって、選別部１３０は、指摘番号１のツール指摘を、当該選別ルールに関係するツール指摘の候補として決定し、処理を継続する。
【００６１】
当該問題ルール名に関する指摘がツール指摘に存在する場合には、選別部１３０は、図５の（２）に示すように、選別ルールに含まれる処理位置の指定に基づいて、ツール指摘において確認の対象とする処理を特定する。すなわち、選別部１３０は、上述した選別ルールの一つにて指定されている処理位置の指定に応じて、上述したツール指摘において確認の対象とする処理を特定する。
【００６２】
具体的には、選別部１３０は、処理位置が「問題作りこみ行」である場合には、である場合には、選別部１３０は、先に指定されたツール指摘において最初の行における処理を確認の対象として決定する。また、選別部１３０は、処理位置が「中間」である場合には、先に指定されたツール指摘において最初及び最後の行における処理を除く処理を確認の対象として決定する。処理位置が「問題発生行」である場合には、選別部１３０は、先に指定されたツール指摘において最後の行における処理を確認の対象として決定する。
【００６３】
図５の例では、ルール番号１の選別ルールにおいては、処理位置として「問題発生行」が指定されている。そのため、選別部１３０は、先に決定された指摘番号１のツール指摘に含まれるソース情報のうち、最後の行における処理（すなわちファイルｄ．ｃの行番号２０における処理）を確認の対象として決定する。
【００６４】
なお、選別ルールにおいて複数の処理位置が指定されている場合には、選別部１３０は、当該処理位置の各々について、ツール指摘において確認の対象とする処理が行われる行を特定する。
【００６５】
ツール指摘において確認の対象とする処理が決定されると、選別部１３０は、図５の（３）に示すように、処理タイプの確認を行う。すなわち、選別部１３０は、上述した選別ルールの一つにて指定されている処理タイプと、先の処理にて決定された選別ルールにおける確認の対象とする処理における処理タイプが一致するかを確認する。
【００６６】
これらの２つの処理タイプが一致する場合には、選別部１３０は、決定されているツール指摘が選別ルールに関係するルールの候補であるとして処理を継続する。これらの２つの処理タイプが一致しない場合には、選別部１３０は、決定されているツール指摘は、選別すべき指摘はないと判断する。
【００６７】
図５に示す例では、ルール番号１の選別ルールにおいては、処理位置として指定されている処理は一つである。そして、当該処理位置に関する処理タイプは、「Ｉｎｓｅｒｔ」である。また、ツール指摘において先に特定された行における処理タイプは、同様に「Ｉｎｓｅｒｔ」である。したがって、選別部１３０は、当該ツール指摘はルール番号１の選別ルールに関係するルールの候補であるとして処理を継続する。
【００６８】
なお、選別ルールの処理位置として「中間」が指定されている場合には、ツール指摘には、処理タイプの確認が必要となる処理に関する行が複数存在する場合がある。この場合には、選別部１３０は、選別ルールにて「中間」との処理位置が指定された処理の全てに関して、ツール指摘に含まれる処理の処理タイプを確認する。選別部１３０は、選別ルールの処理位置にて「中間」が指定された処理に関する行の全てについて、ツール指摘に含まれる処理のいずれかと処理タイプが一致する場合に、当該ツール指摘を選別ルールに関係するルールの候補であるとする。
【００６９】
ツール指摘において処理タイプに関する確認が行われると、選別部１３０は、図５（４）に示すように、左辺及び右辺の確認を行う。すなわち、選別部１３０は、選別ルールにおける各々の処理位置に関する処理情報である左辺及び右辺と、解析情報におけるツール指摘において先に特定された行に関する左辺及び右辺とを比較する。そして、選別部１３０は、例えば上述する二つの左辺及び右辺がそれぞれ一致すると判断できるかを判断する。
【００７０】
なお、選別ルールにおいては、左辺及び右辺が正規表現等を用いて記載されている。この左辺及び右辺として記載された正規表現に、ツール指摘における先に特定された行に関する左辺及び右辺が該当する場合に、選別部１３０は、これらがそれぞれ一致すると判断する。
また、選別ルールにおいては、先に説明したように、左辺又は右辺に、問題変数が％ＥＲＲＯＲ＿ＶＡＬ％との形式にて表されている場合がある。選別部１３０は、この変数に関する情報を、ツール指摘における“問題変数名”の項目を参照して取得してもよい。
【００７１】
そして、選別部１３０は、上述する二つの左辺及び右辺がそれぞれ一致すると判断できる場合に、該当するツール指摘が選別ルールに関係するとして選別する。上述する二つの左辺及び右辺がそれぞれ一致すると判断できない場合に、選別部１３０は、確認の対象としたツール指摘は、選別すべき指摘はないと判断する。
【００７２】
図５に示す例では、ルール番号１の選別ルールにおいては、左辺は“＊”、右辺は“ｒｅａｌｌｏｃ．＊（％ＥＲＲＯＲ＿ＶＡＬ％”である。また、ツール指摘において先に特定された行における左辺は“ｂｕｆｆｅｒ”であり、右辺は“ｒｅａｌｌｏｃ（ｂｕｆｆｅｒ，２０）”である。
【００７３】
この場合に、選別ルールにおける左辺は“＊”であることから、任意の文字列がこの左辺に該当する。したがって、選別部１３０は、選別ルールの左辺と、ツール指摘の左辺とは一致していると判断する。
【００７４】
また、選別ルールにおける右辺に関して、“ｒｅａｌｌｏｃ”に関しては、対応する記載がツール指摘において特定された行にも記載されている。そして、ツール指摘において、問題変数は“ｂｕｆｆｅｒ”と指摘されていることから、選別ルールにおける右辺にある“％ＥＲＲＯＲ＿ＶＡＬ％”は“ｂｕｆｆｅｒ”とみなすことができる。すなわち、選別ルールにおける右辺にある“％ＥＲＲＯＲ＿ＶＡＬ％”に相当する記載が、ツール指摘に記載されている。したがって、図５に示す例において、選別部１３０は、選別ルールの右辺と、ツール指摘の右辺とは一致していると判断できる。
【００７５】
図５に示す例では、以上の処理によって、選別部１３０は、選別ルール番号が１の選別ルールに基づいて、指摘番号が１のツール指摘は選別すべき指摘であるとして選別する。
【００７６】
なお、選別部１３０は、選別ルール及びツール指摘において複数の処理が存在する場合には、処理タイプや処理位置等に応じて、必要となる全ての左辺及び右辺に関する確認を行う。
【００７７】
また、選別部１３０にて選別されたツール指摘は、適宜任意の出力手段を介して出力される。
【００７８】
続いて、図６を用いて、本発明の第１の実施形態における指摘選別装置１００の動作の一例について説明する。
【００７９】
最初に、選別ルール取得部１１０は、静的検証装置からの出力であるツール指摘を選別する条件である選別ルールを取得する（ステップＳ１０１）。
【００８０】
次に、解析部１２０は、解析情報を導出するため、ツール指摘及び静的検証装置にて検証の対象となったソースコードを取得する（ステップＳ１０２）。取得したツール指摘及びソースコードに基づいて、解析部１２０は、解析情報を導出する（ステップＳ１０３）。解析部１２０は、複数のツール指摘が静的検証装置から出力されている場合には、その全てに関して解析情報を導出してもよいし、予め定められた条件等に基づいて、一部のツール指摘に関して解析情報を導出してもよい。複数のツール指摘が静的検証装置から出力されている場合、解析部１２０は、必要とされるツール指摘に関して解析情報が導出されるまで、繰り返して各々のツール指摘に対して解析情報を導出するように動作する（ステップＳ１０４）。
【００８１】
次に、選別部１３０は、選別ルールとツール指摘とに基づいて、選別ルールに関係するツール指摘を選別する（ステップＳ１０５）。複数の選別ルールが指定されている場合には、選別部１３０は、全ての選別ルールに関してツール指摘を選別してもよい。また、選別部１３０は、例えば問題ルール名ごと等、予め定めた条件等に基づいて、一部の選別ルールに関して解析情報を導出してもよい。複数の選別ルールが指定されている場合には、選別部１３０は、必要な選別ルールに対してツール指摘が選別されるまで、ツール指摘の選別を繰り返すように動作してもよい（ステップＳ１０６）。
【００８２】
なお、選別部１３０にて選別されたツール指摘は、適宜図示しない出力手段から出力される。この出力手段には、表示手段、ファイルやメモリなどの記憶手段、通信ネットワーク等が含まれる。また、選別部１３０にて選別されたツール指摘は、静的検証ツールからの出力を分析する他のツールに対して出力されてもよい。
【００８３】
また、本発明の第１の実施形態における指摘選別装置１００は、図７に示すフローチャートのように動作してもよい。
【００８４】
図７に示すフローチャートにおいて、ステップＳ１０２からステップＳ１０６に関する処理は、図６に示すフローチャートにおいて同じ番号が付された処理と同じように行われる。
【００８５】
図７に示すフローチャートにおける動作では、指摘選別装置１００は、ステップＳ１０２にてツール指摘及びソースコードを取得し、ステップＳ１０３及びＳ１０４において解析情報を導出する。指摘選別装置１００は、その後、例えば静的検証装置の利用者等にて編集された選別ルールを取得する（ステップＳ１１１）。
【００８６】
ステップＳ１１１にて選別ルールを取得すると、指摘選別装置１００は、ステップＳ１０５及びＳ１０６においてツール指摘の選別を行う。このようにすることで、静的検証装置の利用者は、本実施形態における指摘選別装置１００を用いて静的検証ツールの指摘を選別する場合に、予め静的検証装置による指摘を参照することが可能となる。そのため、静的検証装置の利用者は、静的検証装置による指摘を参照しつつ、効率的に選別ルールを決定することが可能となる。
【００８７】
以上のとおり、本発明の第１の実施形態における指摘選別装置１００は、選別すべきツール指摘に関する選別ルールを取得し、当該ツール指摘及びソースコードに関する情報を解析して、選別すべきツール指摘を選択する。本実施形態における指摘選別装置１００は、静的検証装置の種類に依存せずに、選別ルールに基づいてツール指摘を自動的に選別することができる。
【００８８】
また、本実施形態における指摘選別装置１００にて選別されるツール指摘は、当該指摘に含まれるソースコードの処理位置、処理タイプ、ソースコードの記述等に基づいて設定される。すなわち、本実施形態における指摘選別装置１００の利用者は、選別すべきツール指摘の条件を詳細に設定することが可能となる。
そして、選別されるツール指摘のソースコードに関する指摘は、正規表現等が用いられる。すなわち、本実施形態における指摘選別装置１００の利用者は、選別ルールを容易に設定することが可能となる。
【００８９】
したがって、本実施形態における指摘選別装置１００は、静的検証装置の指摘を効率的に確認することを可能にする。
【００９０】
（本発明の実施形態における指摘選別装置の適用例）
本実施形態における指摘選別装置１００は、種々の形態にて実現される。一例として、本実施形態における指摘選別装置１００は、制定検証装置とは独立して単体で用いられてもよい。この場合には、指摘選別装置１００は、例えば静的検証装置の利用者が静的検証装置からのツール指摘を参照する場合に、必要に応じて適宜用いられる。
また、この場合には、指摘選別装置１００は、選別ルールやツール指摘の取得や結果の出力を可能とするよう、例えばコマンドラインインターフェース（Ｃｏｍｍａｎｄ  Ｌｉｎｅ  Ｉｎｔｅｒｆａｃｅ，  ＣＬＩ）を備えていてもよい。なお、指摘選別装置１００は、グラフィカルユーザーインターフェース（Ｇｒａｐｈｉｃａｌ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ，ＧＵＩ）等の他のインターフェースを備えていてもよい。
【００９１】
また、指摘選別装置１００は、図８に示すように、静的検証装置を有する静的検証システムに組み込まれてもよい。図８は、本発明の実施形態における指摘選別装置を有する静的検証システムの構成例を示す図である。図８においては、静的検証システム１０は、静的検証装置１１と、上述の指摘選別装置１００を有する。そして、指摘選別装置１００は、静的検証装置１１にて検証が行われた際に出力されるツール指摘に関する選別を行う。
【００９２】
その他に、静的検証装置１００は、例えば上述した静的検証システム等の形態にて、ソフトウェアの統合開発環境に組み込まれて用いられてもよい。
【００９３】
以上、実施形態を参照して本発明を説明したが、本発明は上記実施形態に限定されるものではない。本発明の構成や詳細には、本発明のスコープ内で当業者が理解し得る様々な変更をすることができる。また、実施形態における構成は、本発明のスコープを逸脱しない限りにおいて、互いに組み合わせることが可能である。
【符号の説明】
【００９４】
１０    静的検証システム
１１    静的検証装置
１００    指摘選別装置
１１０    選別ルール取得部
１２０    解析部
１３０    選別部
５００    情報処理装置
５０１    ＣＰＵ
５０２    ＲＯＭ
５０３    ＲＡＭ
５０４    プログラム
５０５    記憶装置
５０６    記録媒体
５０７    ドライブ装置
５０８    通信インターフェース
５０９    ネットワーク
５１０    入出力インターフェース
５１１    バス
【図１】
0006476994.tif 000002
【図２】
0006476994.tif 000003
【図３】
0006476994.tif 000004
【図４】
0006476994.tif 000005
【図５】
0006476994.tif 000006
【図６】
0006476994.tif 000007
【図７】
0006476994.tif 000008
【図８】
0006476994.tif 000009
【図９】
0006476994.tif 000010