(57)【特許請求の範囲】
【請求項１】
コンピュータにより実行される複数の処理のそれぞれの処理手順を表す複数のソースコード行が配列されている検査済みのソースプログラムに付加されている検査結果情報に基づいて、前記検査済みのソースプログラムに従って実行可能な複数の前記処理のうち、不具合が発生する虞がある前記処理に関連する前記ソースコード行のグループを不具合候補コード群として前記検査済みのソースプログラムから抽出し、また、前記不具合候補コード群を構成する複数の前記ソースコード行を、不具合が発生する前記ソースコード行である発現行を含む発現グループと、その不具合の要因となる前記ソースコード行である要因行を含む要因グループとに分けるデータ作成部と、
前記データ作成部により抽出された前記不具合候補コード群が複数であった場合に、それら抽出された前記不具合候補コード群における前記発現グループ同士および前記要因グループ同士の類似度を算出する算出部と、
前記算出部により算出された前記類似度の情報を含む情報を提示する支援部と
を備える検証支援装置。
【請求項２】
前記支援部は、前記算出部により算出された前記類似度の情報を含む情報を提示するのに代えて、前記算出部により算出された前記類似度の情報と、前記不具合候補コード群に対して与えられた正当性判断情報とに基づいて、前記不具合候補コード群に対する前記検査結果情報の信頼度を算出し、当該算出結果を提示する請求項１に記載の検証支援装置。
【請求項３】
前記支援部は、前記正当性判断情報に基づいて、正当性の有無が判断されていないことを検知した前記不具合候補コード群について選択的に前記検査結果情報の信頼度を算出する請求項２に記載の検証支援装置。
【請求項４】
前記データ作成部は、前記不具合候補コード群における前記発現グループと前記要因グループにおいて前記ソースコード行を構文解析し、この構文解析に基づき、かつ、予め定められた条件に応じて選択されたソースプログラム部分を抽象化する機能をさらに備えている請求項１又は請求項２又は請求項３に記載の検証支援装置。
【請求項５】
コンピュータにより実行される複数の処理のそれぞれの処理手順を表す複数のソースコード行が配列されている検査済みのソースプログラムに付加されている検査結果情報に基づいて、前記検査済みのソースプログラムに従って実行可能な複数の前記処理のうち、不具合が発生する虞がある前記処理に関連する前記ソースコード行のグループを不具合候補コード群として前記検査済みのソースプログラムから抽出し、
また、前記不具合候補コード群を構成する複数の前記ソースコード行を、不具合が発生する前記ソースコード行である発現行を含む発現グループと、その不具合の要因となる前記ソースコード行である要因行を含む要因グループとに分け、
前記抽出された前記不具合候補コード群が複数であった場合に、それら抽出された前記不具合候補コード群における前記発現グループ同士および前記要因グループ同士の類似度を算出し、
その算出された前記類似度の情報を含む情報を提示する
検証支援方法。
【請求項６】
コンピュータにより実行される複数の処理のそれぞれの処理手順を表す複数のソースコード行が配列されている検査済みのソースプログラムに付加されている検査結果情報に基づいて、前記検査済みのソースプログラムに従って実行可能な複数の前記処理のうち、不具合が発生する虞がある前記処理に関連する前記ソースコード行のグループを不具合候補コード群として前記検査済みのソースプログラムから抽出する処理と、
また、前記不具合候補コード群を構成する複数の前記ソースコード行を、不具合が発生する前記ソースコード行である発現行を含む発現グループと、その不具合の要因となる前記ソースコード行である要因行を含む要因グループとに分ける処理と、
前記抽出された前記不具合候補コード群が複数であった場合に、それら抽出された前記不具合候補コード群における前記発現グループ同士および前記要因グループ同士の類似度を算出する処理と、
その算出された前記類似度の情報を含む情報を提示する処理と
をコンピュータに実行させる処理手順が表されているコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、開発中のコンピュータプログラム（ソフトウェア）を検査する技術に関する。
【背景技術】
【０００２】
近年のソフトウェア（コンピュータプログラム）開発において、開発規模の拡大により、ソフトウェア（ソースプログラム）におけるソースコードの論理的な誤り（不具合）を摘出する作業は多大な手間と時間を要するようになってきている。このため、その摘出作業を補助するために、ソフトウェアを実行せずにソースコードを解析することによって、ソースコードの不具合を指摘するツール（以下、静的解析ツールとも記載する）が開発されている。そのようなツールは、例えば、検査対象のソースプログラムのソースコードが入力すると、当該ツール（システム）内部で独自のプログラムフローを構築し、バグやセキュリティ脆弱性について検査し、検査結果を出力する。
【０００３】
このような静的解析ツールを利用することにより、ソフトウェアの開発時間の短縮化を図ることができる。しかしながら、汎用の静的解析ツールは、検査対象のソースプログラムにおいて、実際には不具合が発生しないのに不具合が発生する虞があるとの指摘（検査結果）を数多く出力してしまう。このため、プログラム開発者は、その指摘（検査結果）の検証（確認）に無用な時間を取られる場合がある。
【０００４】
このようなプログラム開発者の負担を軽減するために、例えば、特許文献１には、次のような技術が開示されている。その技術とは、不具合発生の虞があると静的解析ツールにより指摘（判断）されたプログラム部分の位置情報や種別情報に基づいて、不具合を指摘された複数のプログラム部分をグループ分けする技術である。また、特許文献２には、ソースコードの構文情報を基に、不具合を指摘された複数のプログラム部分間の類似度を算出し、類似度の高いプログラム部分の対（ペア）を提示する技術が開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１２−２４８０５０号公報
【特許文献２】特許第５１２５９３８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１に開示されている技術では、不具合を指摘されたプログラム部分がグループ分けされた状態で提示される。そのグループ分けの判断基準となる情報は、プログラム部分の位置情報や種別情報である。これら情報は不具合が発生するか否かの検証に役立つ情報ではないことから、不具合を指摘されたプログラム部分がグループ分けされた状態で提示されても、それらプログラム部分の検証作業の時間短縮化を図ることは難しい。
【０００７】
また、特許文献２の技術では、類似度の高いプログラム部分の対が提示されるが、それら対のうちの一方が、検証により不具合が発生しない正常なプログラム部分であると判断されても、他方も不具合が発生しないとは言い切れない。このため、対を成すプログラム部分の両方共に検証する必要があり、特許文献２に開示されている技術も、検証作業の時間短縮化を図ることは難しい。
【０００８】
本発明は上記課題を解決するために考え出された。すなわち、本発明の主な目的は、静的解析ツールによる検査結果を検証する作業に要する時間を短縮化する技術を提供することにある。
【課題を解決するための手段】
【０００９】
上記目的を達成するために、本発明の検証支援装置は、
コンピュータにより実行される複数の処理のそれぞれの処理手順を表す複数のソースコード行が配列されている検査済みのソースプログラムに付加されている検査結果情報に基づいて、前記検査済みのソースプログラムに従って実行可能な複数の前記処理のうち、不具合が発生する虞がある前記処理に関連する前記ソースコード行のグループを不具合候補コード群として前記検査済みのソースプログラムから抽出し、また、前記不具合候補コード群を構成する複数の前記ソースコード行を、不具合が発生する前記ソースコード行である発現行を含む発現グループと、その不具合の要因となる前記ソースコード行である要因行を含む要因グループとに分けるデータ作成部と、
前記データ作成部により抽出された前記不具合候補コード群が複数であった場合に、それら抽出された前記不具合候補コード群における前記発現グループ同士および前記要因グループ同士の類似度を算出する算出部と、
前記算出部により算出された前記類似度の情報を含む情報を提示する支援部と
を備える。
【００１０】
また、本発明の検証支援方法は、
コンピュータにより実行される複数の処理のそれぞれの処理手順を表す複数のソースコード行が配列されている検査済みのソースプログラムに付加されている検査結果情報に基づいて、前記検査済みのソースプログラムに従って実行可能な複数の前記処理のうち、不具合が発生する虞がある前記処理に関連する前記ソースコード行のグループを不具合候補コード群として前記検査済みのソースプログラムから抽出し、
また、前記不具合候補コード群を構成する複数の前記ソースコード行を、不具合が発生する前記ソースコード行である発現行を含む発現グループと、その不具合の要因となる前記ソースコード行である要因行を含む要因グループとに分け、
前記抽出された前記不具合候補コード群が複数であった場合に、それら抽出された前記不具合候補コード群における前記発現グループ同士および前記要因グループ同士の類似度を算出し、
その算出された前記類似度の情報を含む情報を提示する。
【００１１】
さらに、本発明のコンピュータプログラムは、
コンピュータにより実行される複数の処理のそれぞれの処理手順を表す複数のソースコード行が配列されている検査済みのソースプログラムに付加されている検査結果情報に基づいて、前記検査済みのソースプログラムに従って実行可能な複数の前記処理のうち、不具合が発生する虞がある前記処理に関連する前記ソースコード行のグループを不具合候補コード群として前記検査済みのソースプログラムから抽出する処理と、
また、前記不具合候補コード群を構成する複数の前記ソースコード行を、不具合が発生する前記ソースコード行である発現行を含む発現グループと、その不具合の要因となる前記ソースコード行である要因行を含む要因グループとに分ける処理と、
前記抽出された前記不具合候補コード群が複数であった場合に、それら抽出された前記不具合候補コード群における前記発現グループ同士および前記要因グループ同士の類似度を算出する処理と、
その算出された前記類似度の情報を含む情報を提示する処理と
をコンピュータに実行させる処理手順が表されている。
【００１２】
なお、本発明の前記主な目的は、本発明の検証支援装置に対応する本発明の検証支援方法によっても達成される。また、本発明の前記主な目的は、本発明の検証支援装置および検証支援方法に対応するコンピュータプログラムによっても達成される。
【発明の効果】
【００１３】
本発明によれば、コンピュータプログラムのソースコードに対する検査の結果を検証する作業に要する時間を短縮化できる。
【図面の簡単な説明】
【００１４】
【図１】本発明に係る第１実施形態の検証支援装置の構成を簡略化して表すブロック図である。
【図２】本発明に係る第２実施形態の検証支援装置の構成を簡略化して表すブロック図である。
【図３】検査対象のソースプログラムの具体例と、第２実施形態における不具合候補コード群（指摘情報一覧）の具体例を表す図である。
【図４】第２実施形態において不具合候補コード群が要因グループと発現グループに分けられた状態の具体例を表す図である。
【図５】第２実施形態における確率計算部が利用する正当性判断情報の具体例を表す図である。
【図６】第２実施形態における算出部が算出した結果である類似度の具体例を表す図である。
【図７】第２実施形態における確率計算部が算出した結果である検査結果の信頼度の具体例を表す図である。
【図８】第２実施形態の検証支援装置の一動作例を表すフローチャートである。
【発明を実施するための形態】
【００１５】
以下に、本発明に係る実施形態を図面を参照しつつ説明する。
【００１６】
＜第１実施形態＞
図１は、本発明に係る検証支援装置の構成を簡略化して表すブロック図である。この第１実施形態の検証支援装置１は、検査対象のソースプログラム（コンピュータプログラム）に対する検査結果が正しいか否かを検証する作業を支援する装置である。すなわち、ソースプログラムとは、コンピュータにより実行される複数の処理のそれぞれの処理手順（処理フロー）を表す複数のソースコード行が配列されているものである。第１実施形態の検証支援装置１は、例えば静的解析ツールによる検査結果の情報が付加された検査済みのソースプログラムが入力すると、当該ソースプログラムの検査結果に対する検証作業を支援する情報を作成し、当該情報を提示する。
【００１７】
この検証支援装置１は、例えばＣＰＵ（Central Processing Unit）を備えたコンピュータ装置であり、記憶装置６から読み出したコンピュータプログラム（以下、プログラムとも記載する）７を実行することにより、次のような機能を持つ。なお、記憶装置７は、検証支援装置１に内蔵されている場合もあるし、外付けである場合もある。
【００１８】
すなわち、第１実施形態では、検証支援装置１は、機能部として、データ作成部２と、算出部３と、支援部４とを有している。
【００１９】
データ作成部２は、検査済みのソースプログラムに付加されている検査結果情報に基づいて、不具合が発生する虞があると判断された処理（処理フロー）に関連するソースコード行のグループを検査済みのソースプログラムから抽出する機能を備えている。ここでは、その抽出されたソースコード行のグループを不具合候補コード群と呼ぶ。
【００２０】
また、データ作成部２は、不具合候補コード群を構成する複数のソースコード行を、不具合が発生するソースコード行である発現行を含む発現グループと、その要因となるソースコード行である要因行を含む要因グループとに分ける機能を備えている。
【００２１】
算出部３は、データ作成部２により複数の不具合候補コード群が抽出された場合に、それら抽出された不具合候補コード群における発現グループ同士および要因グループ同士の類似度を算出する機能を備えている。
【００２２】
支援部４は、算出部３により算出された類似度の情報を含む情報を提示する機能を備えている。例えば、支援部４は、算出部３により算出された類似度の情報を表示要求と共にディスプレイ装置（表示装置）に出力する。これにより、その類似度の情報がディスプレイ装置に表示されることにより、当該類似度の情報を例えばプログラム開発者に提示できる。また、支援部４は、その類似度の情報を印刷要求と共にプリンタに出力する。これにより、類似度の情報がプリンタにより印刷されることによって、当該類似度の情報を例えばプログラム開発者に提示できる。
【００２３】
この第１実施形態の検証支援装置１は上記のような構成を備えていることにより、ソースプログラムの検査結果に対する検証作業の効率化を図ることができる。すなわち、この第１実施形態の検証支援装置１は、不具合候補コード群をさらに発現グループと要因グループに分け、発現グループ同士および要因グループ同士の類似度を算出している。
【００２４】
不具合候補コード群による処理手順（処理フロー）が一部でも正当でない（換言すれば、静的解析ツールの性能の限界に起因する、有り得ないソースコードの実行過程（処理フロー）が不具合候補コード群に含まれる）場合には、その不具合候補コード群に対する検査結果は正当ではない。このことから、発現グループと要因グループの検査結果（不具合が発生する虞があるという結果）が両方共に正当である場合にのみ、その発現グループと要因グループを含む不具合候補コード群の検査結果（不具合が発生する虞があるという結果）は正当であると判断でき、その不具合候補コード群は、より重点的に検証すべき対象であると判断できる。換言すれば、発現グループと要因グループの少なくとも一方の検査結果が正当でない場合には、不具合候補コード群に対する検査結果は正当でない。つまり、不具合候補コード群に対する検査結果は誤りであって不具合が発生する確率が低いと想定されるから、当該不具合候補コード群は、プログラム開発者による検証作業の必要性が低い。
【００２５】
例えば、不具合候補コード群の発現グループと、検査結果が正当であることが分かっている発現グループとの類似度が高い（似ていている）場合には、その不具合候補コード群の発現グループの検査結果は正当である可能性（正当性）が高いと想定される。また同様に、不具合候補コード群の要因グループと、検査結果が正当であることが分かっている要因グループとの類似度が高い（似ていている）場合には、その不具合候補コード群の要因グループの検査結果は正当である可能性（正当性）が高いと想定される。このようなことから、検査結果が正当であることが分かっている発現グループと要因グループとの類似度の情報に基づいて、不具合候補コード群の発現グループと要因グループに対する検査結果の正当性を判断することが可能である。そして、このような類似度を利用した正当性判断により、不具合候補コード群の発現グループおよび要因グループの検査結果が共に正当であると判断した場合には、その不具合候補コード群のソースコードは検証すべき対象であると判断することができる。反対に、不具合候補コード群の発現グループと要因グループの少なくとも一方の検査結果が正当でない場合には、その不具合候補コード群は検証作業の対象から外すことができる。これにより、第１実施形態の検証支援装置１により提示される情報によって、検証作業は軽減されることから、第１実施形態の検証支援装置１は、検証作業に要する時間の短縮化を図ることができる。
【００２６】
＜第２実施形態＞
以下に、本発明に係る第２実施形態を説明する。
【００２７】
図２は、第２実施形態の検証支援装置の構成を簡略化して表すブロック図である。この検証支援装置１０は、第１実施形態の検証支援装置１と同様に、静的解析ツール２５によるソースプログラム（アプリケーションプログラム）の検査結果に対する検証作業を支援する情報を提示する装置である。また、検証支援装置１０は、第１実施形態の検証支援装置１と同様に、コンピュータ装置により構成されており、記憶装置１１から読み出したコンピュータプログラム１２を実行することにより、次のような機能を持つことができる。なお、記憶装置１１は、検証支援装置１０に内蔵されている場合もあるし、外付けである場合もある。
【００２８】
すなわち、検証支援装置１０は、機能部として、取得部１４と、抽出部１５と、算出部１６と、確率計算部１７と、出力部１８と、記憶部１９とを備えている。
【００２９】
記憶部１９は、各種の情報（データやプログラム）を格納する記憶媒体を有して構成されている。記憶部１９には、取得部１４と抽出部１５と算出部１６と確率計算部１７と出力部１８により、情報が書き込まれ、また、それら取得部１４と抽出部１５と算出部１６と確率計算部１７と出力部１８により、記憶部１９から情報が読み出される。
【００３０】
取得部１４は、静的解析ツール２５による検査の実行結果の情報（検査結果情報）が付加されている検査済みのソースプログラムを例えば静的解析ツール２５から取得する機能を備えている。さらに、取得部１４は、次のような指摘情報一覧を作成し、記憶部１９に書き込む機能を備えている。指摘情報一覧とは、不具合候補コード群（指摘フロー）と、当該不具合候補コード群を識別するために当該不具合候補コード群に付与された識別番号（指摘番号）とが関連付けられている情報である。なお、不具合候補コード群とは、第１実施形態でも述べた不具合候補コード群と同様に、静的解析ツール２５により不具合発生の虞があると指摘（判断）された処理（処理フロー）を表すソースコード行のグループである。
【００３１】
図３は、検査対象のソースプログラムの具体例と、そのソースプログラムが静的解析ツール２５により検査された結果に基づいて取得部１４が作成する指摘情報一覧の具体例とを表す図である。
【００３２】
図３に表されている例では、静的解析ツール２５により検査が実行されたソースプログラムには、“発現”と“要因”の情報が静的解析ツール２５による検査結果情報（付加情報）として付加されている。“発現”の情報は、付加されているソースコード行（図３の例では、行番号７，１０のソースコード行）が、不具合が発生する虞があるソースコード行（発現行）であることを表す情報である。“要因”の情報は、付加されているソースコード行（図３の例では、行番号２のソースコード行）が、その不具合発生の要因となるソースコード行（要因行）であることを表す情報である。
【００３３】
抽出部１５は、不具合候補コード群を構成する複数のソースコード行を要因グループと発現グループに分ける機能を備えている。発現グループとは、不具合を発生する処理手順（処理フロー）を表すソースコード行のグループであり、発現行を含んでいる。要因グループとは、その不具合の要因となる処理手順（処理フロー）を表すソースコード行のグループであり、要因行を含んでいる。
【００３４】
図４は、不具合候補コード群の具体例と、その不具合候補コード群を抽出部１５がグループ分けした具体例とを表す図である。この具体例に表されているように、例えば、抽出部１５は、不具合候補コード群が表す処理手順を開始するソースコード行から要因行（“要因”の情報が付加されているソースコード行）までの処理手順を表すソースコード行のグループを要因グループとして抽出する。また、抽出部１５は、要因行の次の処理手順を表すソースコード行から発現行（“発現”の情報が付加されているソースコード行）に至るまでのソースコード行のグループを発現グループとして抽出する。換言すれば、抽出部１５は、不具合候補コード群を要因行に基づいて２つのグループに分ける。
【００３５】
抽出部１５は、さらに、そのようにグループ分けした情報を含めた不具合候補コード群を表す情報を更新指摘情報一覧２２として記憶部１９に書き込む機能を備えている。
【００３６】
さらに、抽出部１５は、グループ分けの結果情報に基づいて、図５（ａ）に表されるような正当性判断情報一覧２３を作成する機能を備えている。正当性判断情報一覧２３とは、不具合候補コード群の要因グループおよび発現グループのそれぞれに対する検査結果の正当性についてプログラム開発者が検証し、当該検証の結果が書き込まれる例えばテーブルデータである。なお、抽出部１５が作成する正当性判断情報一覧２３は、プログラム開発者が正当性判断結果を入力する前に作成される。このため、抽出部１５が作成する正当性判断情報一覧２３において、図５（ａ）のように、全てのグループにそれぞれ関連付けられている正当性判断結果の情報は、“未判断”を表す情報（横棒（−））である。
【００３７】
この第２実施形態では、取得部１４および抽出部１５が、静的解析ツール２５による検査済みのソースプログラムから不具合候補コード群を抽出し、さらに、不具合候補コード群を要因グループと発現グループに分けるデータ作成部を構成する。
【００３８】
算出部１６は、全ての不具合候補コード群における要因グループ同士および発現グループ同士の類似度を算出する機能を備えている。図６（ａ）は、算出部１６により算出された要因グループ同士の類似度の具体例を表すテーブルデータである。図６（ｂ）は、算出部１６により算出された発現グループ同士の類似度の具体例を表すテーブルデータである。
【００３９】
算出部１６が類似度を算出する手法には様々な手法が有り、ここでは、何れの手法を採用してもよいが、その一例を挙げると、例えば、最長共通部分列を行単位で利用する算出手法が有る。この算出手法は、例えば、参考文献：Ｔ．コルメン、他８名著、「アルゴリズムの設計と解析手法 (アルゴリズムイントロダクション)」、株式会社近代科学社、２００７年３月に示されている。図６（ａ）、（ｂ）は、その最長共通部分列を利用して算出された類似度の算出例である。
【００４０】
あるいは、算出部１６は、編集距離（レーベンシュタイン距離）やｎ-グラム頻度に基づいて類似度を算出する手法により、グループ同士の類似度を算出してもよい。このように、算出部１６が類似度を算出する手法には様々な手法が有り、これら手法の中から、不具合候補コード群の特徴に応じた分析が可能な手法が適宜選択され算出部１６が類似度を算出する手法として採用してよい。なお、類似度を算出する手法を選択する際の参考文献として、竹田正幸、福田智子著、「古典和歌からの知識発見  モビルスーツを着た国文学者」、情報処理学会論文誌、Vol．４３、No.９、２００２年９月、ｐ．９４１−９４９がある。
【００４１】
算出部１６は、上記のように算出した類似度の情報を例えば記憶部１９に保持されている図６（ａ）および（ｂ）のようなテーブルデータに書き込む機能を有する。なお、記憶部１９が保持する類似度の情報の形態はテーブルデータの態様に限定されない。
【００４２】
出力部１８は、記憶部１９に格納されている情報や、当該検証支援装置１０の制御動作に必要な情報の入力をプログラム開発者に促す情報を、例えばディスプレイ装置（図示せず）に出力する機能を備えている。そのディスプレイ装置は、出力部１８から受けた情報を表示する機能を備えている。
【００４３】
例えば、出力部１８は、プログラム開発者に向けて、正当性判断情報を例えばキーボード等の入力装置を利用して入力することを促す情報をディスプレイ装置（表示装置）に出力する機能を備えている。この出力部１８の機能によってディスプレイ装置に表示された情報に基づいて、プログラム開発者が入力装置により入力した正当性判断情報は、書き込み部（図示せず）によって、記憶部１９における図５（ａ）のような正当性判断情報一覧２３に書き込まれる。
【００４４】
図５（ｂ）は、正当性判断情報一覧２３に正当性判断情報が入力された（書き込まれた）状態の一例を表す図である。この図５（ｂ）において、プログラム開発者が実際に問題が発生し得るソースコードの実行過程であると判断したグループ（例えば、識別番号“１”の要因グループを参照）には、静的解析ツール２５の検査結果が正しい、つまり、“正当性有り”を表す情報（丸印（○））が正当性判断情報として関連付けられている。また、プログラム開発者が、静的解析ツール２５の検査結果は有り得ないソースコードの実行過程である、つまり、検査結果が誤りで検証作業が不要であると判断したグループ（例えば、識別番号“１”の発現グループなどを参照）には、検査結果の“正当性無し”を表す情報（バツ印（×））が正当性判断情報として関連付けられている。さらに、前述したように、プログラム開発者が検証していないグループには、“未判断”を表す情報（横棒（−））が正当性判断情報として関連付けられている。
【００４５】
確率計算部１７は、要因グループおよび発現グループに対して、算出部１６により算出された類似度の情報と、プログラム開発者による正当性判断情報とに基づいて、静的解析ツール２５による検査結果の信頼性の度合い（信頼度）を算出する機能を備えている。ここでは、確率計算部１７は、プログラム開発者が検証していない要因グループあるいは発現グループ（つまり、正当性判断情報として“未判断”が関連付けられているグループ）について、検査結果の信頼度を算出する。例えば、図５（ｂ）に表されている例では、識別番号“２”を持つ不具合候補コード群の要因グループと発現グループおよび識別番号“３”を持つ不具合候補コード群の要因グループについて、確率計算部１７は、算出動作を実行する。例えば、確率計算部１７は、要因グループと発現グループのそれぞれにおいて、識別番号“ｉ”を持つ不具合候補コード群における信頼度Ｐ（ｉ）を次の数式（１）に従って算出する。
0006369269.tif 000002
【００４６】
なお、数式（１）におけるＮは、全ての不具合候補コード群の数を表す。Ｆ（ｉ，ｊ）は、識別番号“ｉ”の不具合候補コード群と識別番号“ｊ”の不具合候補コード群の要因グループ同士あるいは発現グループ同士の、算出部１６により算出された類似度を表す。Ｂ（ｊ）は、次に表される条件に従った数値を表す。
0006369269.tif 000003
【００４７】
さらに、確率計算部１７は、算出した結果（検査結果の信頼度）を記憶部１９に書き込む機能を備えている。図７は、記憶部１９が保持する、算出結果を表す信頼度一覧２４の一例を表す図である。出力部１８が、例えば、その信頼度一覧２４をディスプレイ装置に出力することにより、当該信頼度一覧２４がディスプレイ装置に表示され、プログラム開発者に提示される。なお、この第２実施形態では、確率計算部１７と出力部１８により、静的解析ツール２５による検査結果に対する検証作業を支援する情報を提示する支援部が構成される。
【００４８】
この第２実施形態の検証支援装置１０は、上記のように構成されている。次に、この検証支援装置１０における動作の一例を図８を利用して説明する。なお、図８は、検証支援装置１０における動作の一例を表すフローチャートであり、このフローチャートは、検証支援装置（コンピュータ装置）１０が実行するコンピュータプログラムの処理手順を表す。
【００４９】
例えば、検証支援装置１０の取得部１４は、静的解析ツール２５により検査された検査結果情報を含む検査済みのソースプログラムを取得すると（ステップＳ１０１）、当該ソースプログラムから不具合候補コード群を抽出する（ステップＳ１０２）。そして、取得部１４は、例えば図３に表されるような指摘情報一覧２１を作成し、当該指摘情報一覧２１の情報を記憶部１９に書き込む。
【００５０】
然る後に、抽出部１５が、静的解析ツール２５による検査結果情報（付加情報）に基づいて、各不具合候補コード群を、要因グループと発現グループにグループ分けする（ステップＳ１０３）。そして、抽出部１５は、図４に表されるような更新指摘情報一覧２２を作成し、この情報を記憶部１９に書き込む。
【００５１】
その後、算出部１６は、その更新指摘情報一覧２２によるグループ分け情報に基づいた要因グループ同士および発現グループ同士の類似度を算出する（ステップＳ１０４）。そして、算出部１６は、例えば図６（ａ）、（ｂ）のような算出結果の情報を記憶部１９に書き込む。
【００５２】
一方、抽出部１５は、図５（ａ）に表されるような正当性判断情報一覧２３を作成し、当該正当性判断情報一覧２３の情報を記憶部１９に書き込む。
【００５３】
その後、出力部１８が、不具合候補コード群の情報と、例えばキーボード等の入力装置を利用して正当性判断情報を入力することを促す情報とをディスプレイ装置（表示装置）に出力する。これにより、ディスプレイ装置が、不具合候補コード群の情報と、正当性判断情報の入力を促す情報とを表示する。これにより、プログラム開発者が正当性判断情報を入力したことにより、正当性判断情報を取得すると（ステップＳ１０５）、検証支援装置１０は、取得した正当性判断情報を記憶部１９の正当性判断情報一覧２３に図５（ｂ）のように書き込む。
【００５４】
その後、確率計算部１７は、予め定められたタイミングでもって、正当性判断情報一覧２３に、“未判断”の情報が関連付けられているグループが有るか否かを判断する（ステップＳ１０６）。その予め定められたタイミングとは、例えば、正当性判断情報一覧２３に情報が書き込まれ、かつ、計算実行の指令が例えばプログラム開発者により入力装置を利用して検証支援装置１０に入力されたときである。
【００５５】
そして、確率計算部１７は、“未判断”のグループが有ると判断した場合には、算出部１６による類似度の情報と、プログラム開発者による正当性判断結果の情報とに基づき、“未判断”のグループに対する検査結果の信頼度を算出する（ステップＳ１０７）。確率計算部１７は、その算出結果を記憶部１９に書き込む。
【００５６】
然る後に、出力部１８が、その算出結果および当該算出結果の表示要求を、ディスプレイ装置（表示装置）に出力する（ステップＳ１０８）。これにより、ディスプレイ装置が、算出結果を表示する。この際、例えば、“未判断”のグループに対する正当性判断情報の入力をプログラム開発者に促す情報もディスプレイ装置に表示されるようにする。これにより、例えば、正当性判断情報が記憶部１９に新たに書き込まれたことを検知すると、確率計算部１７は、ステップＳ１０６以降の動作を繰り返す。
【００５７】
また、確率計算部１７は、ステップＳ１０６の判断動作により、“未判断”のグループが無いと判断した場合には、動作を終了する。これにより、検証支援装置１０は、検証済みのソートプログラムの取得から信頼度の算出および出力に関連する一連の動作を終了する。
【００５８】
この第２実施形態の検証支援装置１０は、第１実施形態と同様に、静的解析ツール２５による検査結果の検証作業の効率化に寄与することができる。特に、この第２実施形態の検証支援装置１０は、確率計算部１７を備え、静的解析ツール２５による検査結果の信頼度を数値化して表示することを実現する構成を備えている。この構成は、不具合候補コード群の検証作業が実際に必要か否かの判断に有効な情報をプログラム開発者に提供できるので、より一層の検証作業の効率化に寄与するものである。
【００５９】
＜第３実施形態＞
以下に、本発明に係る実施形態を説明する。なお、この第３実施形態の説明において、第２実施形態の検証支援装置の構成部分と同一名称部分には同一符号を付し、その共通部分の重複説明は省略する。
【００６０】
前述した第２実施形態では、抽出部１５は、各不具合候補コード群のソースコード行をグループ分けした後に、図４に表されるように、それらグループ分けした情報の一部としてソースコード行がそのまま含まれている態様である。これに代えて、この第３実施形態では、抽出部１５は、不具合候補コード群における各グループのソースコードを構文解析し、この構文解析に基づき、各グループに含まれるソースコードの一部を抽象化する構成を備えている。つまり、ソースプログラムに分岐構造を表す構文（例えばＣ言語では、if文やfor文）が含まれていない場合、そのソースプログラムにおいて、分岐条件の違いによる類似した不具合（指摘の亜種）が発生することは無い。つまり、分岐構造を含まない範囲でソースコードを抽象化しても、第２実施形態で述べたようなグループ同士の類似度には悪影響が及ばない。このことから、この第３実施形態では、抽出部１５は、各グループにおいて、分岐構造を含まないソースプログラム部分の一部を、例えばハッシュ関数を用いた符号化により抽象化する。
【００６１】
この第３実施形態における上記以外の構成は、第２実施形態と同様である。
【００６２】
この第３実施形態の検証支援装置１０は、第２実施形態と同様に、静的解析ツール２５の検査に基づいた不具合候補コード群の中から、実際に検証する不具合候補コード群の絞り込みに有効な情報を例えばプログラム開発者に提供できる。これにより、第３実施形態の検証支援装置１０も、検証作業に要する時間の短縮化を図ることができる。
【００６３】
また、この第３実施形態の検証支援装置１０は、類似度の算出に悪影響が及ばないように、各グループにおけるソースプログラムの一部を抽象化している。このため、この第３実施形態の検証支援装置１０は、類似度の算出の効率化を図ることができる。
【００６４】
＜その他の実施形態＞
なお、本発明は第１〜第３の実施形態に限定されず、様々な実施の形態を採り得る。例えば、第２と第３の実施形態では、検証支援装置１０の出力部１８は、確率計算部１７による検査結果の信頼度を出力している。これに対し、出力部１８は、検査結果の信頼度ではなく、算出部１６により算出される各グループ同士の類似度を出力してもよい。この場合には、その出力された情報に基づいて、ディスプレイ装置は、各グループ同士の類似度を表示する。このような場合には、検証支援装置１０における確率計算部１７が省略されていてもよい。また、出力部１８は、例えば装置操作者（プログラム開発者）が入力装置を利用して入力した指示情報に応じて、確率計算部１７による検査結果の信頼度と、算出部１６による類似度との一方を出力する構成としてもよい。
【符号の説明】
【００６５】
１，１０  検証支援装置
２  データ作成部
３，１６  算出部
４  支援部
１５  抽出部
１７  確率計算部
【図１】
0006369269.tif 000004
【図２】
0006369269.tif 000005
【図３】
0006369269.tif 000006
【図４】
0006369269.tif 000007
【図５】
0006369269.tif 000008
【図６】
0006369269.tif 000009
【図７】
0006369269.tif 000010
【図８】
0006369269.tif 000011