(57)【特許請求の範囲】
【請求項１】
コードファイルの形で入力されたソースコードから解析に必要な情報を抽出し、精製する構文解析部と、構文解析部で精製された解析に必要な情報に基づいて、ソースコードから問題となるべき欠陥情報を検出し、前記欠陥情報は欠陥が発生したラインの位置情報を含むようにする欠陥検出部と、欠陥検出部で検出された欠陥情報及び構文解析部で精製された解析に必要な情報に基づいて修正例示情報及び留意事項情報のうちの少なくとも一つを生成し、一つの欠陥情報に対して一つまたはそれ以上の修正例示情報または留意事項情報を生成する修正例示生成部と、生成された欠陥情報、修正例示情報及び留意事項情報のうちの少なくとも一つを、修正例示ファイルの形からなる総合解析結果情報として構成して解析結果出力モジュールへ伝達する解析結果伝達部とを含むソースコード解析モジュール、及び、
ソースコード解析モジュールから伝達された総合解析結果情報から欠陥情報を抽出して出力する欠陥出力部と、ソースコード解析モジュールから伝達された総合解析結果情報から修正例示情報及び留意事項情報のうちの少なくとも一つを抽出して出力する修正例出力部とを含む解析結果出力モジュールを含んでなり、
前記欠陥検出部の欠陥情報検出は、それぞれの欠陥有無をチェックするように備えられたそれぞれのチェッカーの機能実行によって行われ、
前記それぞれのチェッカーは、欠陥情報検出時に検出された欠陥情報に対して生成される修正例示情報及び留意事項情報のうちの少なくとも一つが含まれている総合解析結果情報を修正例示生成部へ伝達するように構成され、
前記修正例示情報は、欠陥情報が検出されたソースコードラインに対して他のコードラインの「追加」、他のコードラインへの「変更」、及び検出されたコードラインの「削除」のうちの少なくとも一つを含み、
前記修正例示情報に含まれる修正例示コードは、
欠陥情報を検出したチェッカーが、予め設定されたテンプレートに基づいてソースコードを解析及び推論した結果を入力値にして生成されることを特徴とする、ソースコード解析装置。
【請求項２】
ソースコード解析装置でソースコード解析機能及び解析結果出力機能を実行するためのコンピュータプログラムであって、
前記ソースコード解析機能は、
コードファイルの形で入力されたソースコードから解析に必要な情報を抽出し、精製する構文解析機能と、構文解析機能で精製された解析に必要な情報に基づいて、ソースコードから問題となるべき欠陥情報を検出し、前記欠陥情報は欠陥が発生したラインの位置情報を含むようにする欠陥検出機能と、欠陥検出機能で検出された欠陥情報及び構文解析機能で精製された解析に必要な情報に基づいて修正例示情報及び留意事項情報のうちの少なくとも一つを生成し、一つの欠陥情報に対して一つまたはそれ以上の修正例示情報または留意事項情報を生成する修正例示生成機能と、生成された欠陥情報、修正例示情報及び留意事項情報のうちの少なくとも一つを、修正例示ファイルの形からなる総合解析結果情報として構成して解析結果出力機能へ伝達する解析結果伝達機能とを含めて実行し；
前記解析結果出力機能は、
ソースコード解析機能から伝達された総合解析結果情報から欠陥情報を抽出して出力する欠陥出力機能と、ソースコード解析機能から伝達された総合解析結果情報から修正例示情報及び留意事項情報のうちの少なくとも一つを抽出して出力する修正例示出力機能とを含めて実行し、
前記欠陥検出機能の欠陥情報検出は、それぞれの欠陥有無をチェックするように備えられたそれぞれのチェッカーの機能実行によって行われ、
前記それぞれのチェッカーは、欠陥情報検出時に検出された欠陥情報に対して生成される修正例示情報及び留意事項情報のうちの少なくとも一つが含まれている総合解析結果情報を修正例示生成機能へ伝達するように構成され、
前記修正例示情報は、欠陥情報が検出されたソースコードラインに対して他のコードラインの「追加」、他のコードラインへの「変更」、及び検出されたコードラインの「削除」のうちの少なくとも一つを含むように前記機能を実行し、
前記修正例示情報に含まれる修正例示コードは、
欠陥情報を検出したチェッカーが、予め設定されたテンプレートに基づいてソースコードを解析及び推論した結果を入力値にして生成されるために；媒体に格納された、コンピュータプログラム。
【請求項３】
ソースコード解析装置でソースコード解析機能及び解析結果出力機能を実行するためのコンピュータプログラムが記録された記録媒体であって、
前記ソースコード解析機能は、
コードファイルの形で入力されたソースコードから解析に必要な情報を抽出し、精製する構文解析機能と、構文解析機能で精製された解析に必要な情報に基づいて、ソースコードから問題となるべき欠陥情報を検出し、前記欠陥情報は欠陥が発生したラインの位置情報を含むようにする欠陥検出機能と、欠陥検出機能で検出された欠陥情報及び構文解析機能で精製された解析に必要な情報に基づいて修正例示情報及び留意事項情報のうちの少なくとも一つを生成し、一つの欠陥情報に対して一つまたはそれ以上の修正例示情報または留意事項情報を生成する修正例示生成機能と、生成された欠陥情報、修正例示情報及び留意事項情報のうちの少なくとも一つを、修正例示ファイルの形からなる総合解析結果情報として構成して解析結果出力機能へ伝達する解析結果伝達機能とを含めて実行し；
前記解析結果出力機能は、
ソースコード解析機能から伝達された総合解析結果情報から欠陥情報を抽出して出力する欠陥出力機能と、ソースコード解析機能から伝達された総合解析結果情報から修正例示情報及び留意事項情報の少なくとも一つを抽出して出力する修正例示出力機能とを含めて実行し、
前記欠陥検出機能の欠陥情報検出は、それぞれの欠陥有無をチェックするように備えられたそれぞれのチェッカーの機能実行によって行われ、
前記それぞれのチェッカーは、欠陥情報検出時に検出された欠陥情報に対して生成される修正例示情報及び留意事項情報のうちの少なくとも一つが含まれている総合解析結果情報を修正例示生成機能へ伝達するように構成され、
前記修正例示情報は、欠陥情報が検出されたソースコードラインに対して他のコードラインの「追加」、他のコードラインへの「変更」、及び検出されたコードラインの「削除」のうちの少なくとも一つを含むように前記機能を実行し、
前記修正例示情報に含まれる修正例示コードは、
欠陥情報を検出したチェッカーが、予め設定されたテンプレートに基づいてソースコードを解析及び推論した結果を入力値にして生成されるための；コンピュータプログラムが記録された、コンピュータで読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソースコード解析装置、そのためのコンピュータプログラム、及びその記録媒体に関し、さらに詳しくは、予め定義された解析ルールに基づいて解析した解析対象ソースコードに欠陥が発見された場合に欠陥修正案を提案することができるように構成されたソースコード解析装置、そのためのコンピュータプログラム、及びその記録媒体に関する。
【背景技術】
【０００２】
静的プログラム解析（Ｓｔａｔｉｃ  Ｃｏｄｅ  Ａｎａｌｙｓｉｓ）は、コンピュータソフトウェアを解析する様々な方法の一つである。この方法の特徴は、ソフトウェアを直接実行せず、開発中のソフトウェアのソースコードを対象に解析を行うという点である。
【０００３】
静的解析ツール（Ｓｔａｔｉｃ  Ａｎａｌｙｓｉｓ  Ｔｏｏｌ）は、静的プログラム解析を人の手ではなく、ソフトウェアを用いて自動的に行うように開発されたプログラムである。一般に、ソースコードのサイズは非常に膨大であり、人の手で一つ一つ静的プログラム解析を行うことは殆ど不可能であるといえる。したがって、このような解析を自動化して実行し得るようにすることが静的解析ツールの役目であるといえる。静的解析ツールは、種類によって、ソースコードから様々な種類の欠陥や脆弱性を検出することができ、解析によって検出された欠陥をユーザーに知らせる。
【０００４】
前述したような静的解析ツール形態のソースコード解析装置が従来から様々に提案されている。
【０００５】
しかし、従来から提案または使用されてきたソースコード解析装置は、欠陥検出及びそれに対する検出メッセージ生成という限られた機能のみを提供し、検出された欠陥に対する修正作業はユーザー（プログラマ）の個人的な知識と経験に依存しなければならないという限界があった。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明は、かかる問題点に鑑みてなされたもので、その目的は、予め定義された解析ルールに基づいて解析した解析対象ソースコードに欠陥が発見された場合に欠陥修正案を提案することができるように構成されたソースコード解析装置、そのためのコンピュータプログラム、及びその記録媒体を提供することにある。
【課題を解決するための手段】
【０００７】
上記の目的を達成するための本発明の一側面によれば、ソースコードから解析に必要な情報を抽出し、精製する構文解析部と、構文解析部で精製された解析に必要な情報に基づいて、ソースコードから問題となるべき欠陥情報を検出する欠陥検出部と、欠陥検出部で検出された欠陥情報及び構文解析部で精製された解析に必要な情報に基づいて修正例示情報及び留意事項情報のうちの少なくとも一つを生成する修正例示生成部と、生成された欠陥情報、修正例示情報及び留意事項情報のうちの少なくとも一つを総合解析結果情報として構成して解析結果出力モジュールへ伝達する解析結果伝達部とを含むソースコード解析モジュール、及び、ソースコード解析モジュールから伝達された総合解析結果情報から欠陥情報を抽出して出力する欠陥出力部と、ソースコード解析モジュールから伝達された総合解析結果情報から修正例示情報及び留意事項情報のうちの少なくとも一つを抽出して出力する修正例出力部とを含む解析結果出力モジュールを含んでなる、ソースコード解析装置が開示される。
【０００８】
好ましくは、前記修正例示生成部は、一つの欠陥情報に対して一つまたはそれ以上の修正例示情報または留意事項情報を生成するように構成されたことを特徴とする。
【０００９】
好ましくは、前記欠陥検出部の欠陥情報検出は、それぞれの欠陥有無をチェックするように備えられたそれぞれのチェッカーの機能実行によって行われ、前記それぞれのチェッカーは、欠陥情報検出時に検出された欠陥情報に対して生成される修正例示情報及び留意事項情報のうちの少なくとも一つが含まれている総合解析結果情報を修正例示生成部へ伝達するように構成されたことを特徴とする。
【００１０】
好ましくは、前記修正例示情報は、欠陥情報が検出されたソースコードラインに対して他のコードラインの「追加」、他のコードラインへの「変更」、及び検出されたコードラインの「削除」のうちの少なくとも一つを含むことを特徴とする。
【００１１】
好ましくは、前記修正例示情報に含まれる修正例示コードは、欠陥情報を検出したチェッカーが、予め設定されたテンプレートに基づいてソースコードを解析及び推論した結果を入力値にして生成されることを特徴とする。
【００１２】
本発明の別の一側面によれば、ソースコード解析装置でソースコード解析機能及び解析結果出力機能を実行するためのコンピュータプログラムであって、前記ソースコード解析機能は、ソースコードから解析に必要な情報を抽出し、精製する構文解析機能と、構文解析機能で精製された解析に必要な情報に基づいて、ソースコードから問題となるべき欠陥情報を検出する欠陥検出機能と、欠陥検出機能で検出された欠陥情報及び構文解析機能で精製された解析に必要な情報に基づいて修正例示情報及び留意事項情報のうちの少なくとも一つを生成する修正例示生成機能と、生成された欠陥情報、修正例示情報及び留意事項情報のうちの少なくとも一つを総合解析結果情報として構成して解析結果出力機能へ伝達する解析結果伝達機能とを含めて実行し；前記解析結果出力機能は、ソースコード解析機能から伝達された総合解析結果情報から欠陥情報を抽出して出力する欠陥出力機能と、ソースコード解析機能から伝達された総合解析結果情報から修正例示情報及び留意事項情報のうちの少なくとも一つを抽出して出力する修正例示出力機能とを含めて実行するために；媒体に格納された、コンピュータプログラムが開示される。
【００１３】
本発明の別の一側面によれば、ソースコード解析装置でソースコード解析機能及び解析結果出力機能を実行するためのコンピュータプログラムが記録された記録媒体であって、前記ソースコード解析機能は、ソースコードから解析に必要な情報を抽出し、精製する構文解析機能と、構文解析機能で精製された解析に必要な情報に基づいて、ソースコードから問題となるべき欠陥情報を検出する欠陥検出機能と、欠陥検出機能で検出された欠陥情報及び構文解析機能で精製された解析に必要な情報に基づいて修正例示情報及び留意事項情報のうちの少なくとも一つを生成する修正例示生成機能と、生成された欠陥情報、修正例示情報及び留意事項情報のうちの少なくとも一つを総合解析結果情報として構成して解析結果出力機能へ伝達する解析結果伝達機能とを含めて実行し；前記解析結果出力機能は、ソースコード解析機能から伝達された総合解析結果情報から欠陥情報を抽出して出力する欠陥出力機能と、ソースコード解析機能から伝達された総合解析結果情報から修正例示情報及び留意事項情報のうちの少なくとも一つを抽出して出力する修正例示出力機能とを含めて実行するための；コンピュータプログラムが記録された、コンピュータで読み取り可能な記録媒体が開示される。
【発明の効果】
【００１４】
このような本発明は、予め定義された解析ルールに基づいて解析した解析対象ソースコードに欠陥が発見された場合に欠陥修正案を提案することができるように構成されるので、ソースコードに対する欠陥修正作業の際にユーザー（プログラマ）の個人的な知識及び経験に依存せず、より客観的かつ向上した欠陥修正作業が可能である。
【図面の簡単な説明】
【００１５】
【図１】本発明の一実施形態に係るソースコード解析装置の構成図である。
【図２】本発明の一実施形態に係るソースコード解析装置の解析結果情報の構成例である。
【図３】本発明の一実施形態に係るソースコード解析装置の欠陥検出部のチェッカーによって欠陥が発見されたソースコードページ画面例である。
【図４】本発明の一実施形態に係るソースコード解析装置の修正例示ボタンクリック後の総合解析結果出力画面例である。
【図５】本発明の一実施形態に係るソースコード解析装置の修正例示ボタンクリック後の総合解析結果出力画面中の例示メニュー表示例である。
【図６】本発明の一実施形態に係るソースコード解析装置の修正例示ボタンクリック後の総合解析結果出力画面中の欠陥情報表示例である。
【図７】本発明の一実施形態に係るソースコード解析装置の修正例示ボタンクリック後の総合解析結果出力画面中の修正例示情報表示例である。
【図８】本発明の一実施形態に係るソースコード解析装置の修正例示ボタンクリック後の総合解析結果出力画面中の留意事項情報表示例である。
【図９】本発明の一実施形態に係るソースコード解析装置のためのチェッカー実現クラスのうちのＸＭＬ出力クラスの例である。
【図１０】本発明の一実施形態に係るソースコード解析装置のためのチェッカー実現クラスのうちのコード生成クラスの例である。
【発明を実施するための形態】
【００１６】
本発明は、その技術的思想または主要な特徴から逸脱することなく、他の様々な形態で実施できる。よって、本発明の実施形態は、あらゆる点において単純な例示に過ぎず、限定的に解釈されてはならない。
【００１７】
「第１」、「第２」などの用語は様々な構成要素を説明するために使用できるが、前記構成要素はこれらの用語により限定されるものではない。これらの用語は、ある構成要素を他の構成要素と区別する目的のみで使用される。例えば、本発明の権利範囲を逸脱しない範疇内で、第１構成要素は第２構成要素と命名することができ、これと同様に、第２構成要素も第１構成要素と命名することができる。「及び／又は」という用語は、複数の関連した記載項目の組み合わせ、又は複数の関連した記載項目のいずれかを含む。
【００１８】
ある構成要素が他の構成要素に「連結」または「接続」されていると言及されたときは、その他の構成要素に直接連結又は接続されている可能性もあるが、それらの構成要素の間に別の構成要素が存在することもあると理解すべきである。これに対して、ある構成要素が他の構成要素に「直接連結」されているか、「直接接続」されていると言及されたときは、それらの構成要素の間に別の構成要素が存在しないと理解すべきである。
【００１９】
本出願において使用した用語は、単に特定の実施形態を説明するために使用されたものであり、本発明を限定するものではない。単数の表現は、文脈上明らかに異なる意味を表さない限り、複数の表現を含む。本出願において、「含む」又は「備える」、「有する」などの用語は、明細書に記載された特徴、数字、段階、動作、構成要素、部品又はこれらの組み合わせが存在することを示すものであり、１つ又はそれ以上の他の特徴、数字、段階、動作、構成要素、部品又はこれらの組み合わせの存在又は付加の可能性を予め排除するものではないと理解すべきである。
【００２０】
別途定義されていない限り、技術的又は科学的な用語を含めてここで使用される全ての用語は、本発明の属する技術分野における通常の知識を有する者に一般的に理解されるものと同様の意味を有する。一般に使用される辞書に定義されている用語は、関連技術の文脈上持つ意味と同じ意味を持つと解釈されるべきであり、本出願において明らかに定義しない限り、理想的または過度に形式的な意味で解釈されない。
【００２１】
以下、添付図面を参照して、本発明に係る好適な実施形態を詳細に説明するが、図面符号に関係なく、同一または対応の構成要素は同一の参照番号を付し、これについての重複説明は省略する。本発明を説明するにあたり、関連した公知の技術についての具体的な説明が本発明の要旨を不明確にするおそれがあると判断される場合は、その詳細な説明を省略する。
【００２２】
図１は本発明の一実施形態に係るソースコード解析(Ａｎａｌｙｓｉｓ)装置の構成図、図２は本発明の一実施形態に係るソースコード解析装置の解析結果情報の構成例である。
【００２３】
本実施形態のソースコード解析装置Ａは、ソースコード入力モジュール１００、ソースコード解析モジュール２００、解析結果出力モジュール３００及び制御モジュール４００を含み、一例として、ソースコード解析装置の実現のためのコンピュータプログラムが通常のコンピュータハードウェアで駆動される形態で実現できる。
【００２４】
ソースコード入力モジュール１００は、例えば、解析対象ソースコードの入力をコードファイルの形で受け、後述のソースコード解析モジュール２００が解析処理を行えるようにする。一例として、コードファイルの入力はユーザーのファイル入力またはオープン操作によって行われ得る。
【００２５】
ソースコード解析モジュール２００は、解析のために入力伝達されたソースコードから、欠陥情報２２０Ａ、修正例示情報２３０Ａ、及び修正時に発生しうる様々な種類の留意事項情報２３０Ｂを含む総合解析結果２４０Ａを生成する。
【００２６】
解析結果出力モジュール３００は、ソースコード解析モジュール２００から伝達された総合解析結果２４０Ａに基づいて、ユーザーに欠陥情報２２０Ａ、修正例示情報２３０Ａ、留意事項情報２３０Ｂを示す。実施形態によって、ソースコード解析モジュール２００及び解析結果出力モジュール３００は一つのモジュールに統合実現できる。
【００２７】
好ましい一例として、ソースコード解析モジュール２００は、構文解析部２１０、欠陥検出部２２０、修正例示生成部２３０、及び解析結果伝達部２４０を含む。
【００２８】
構文解析部２１０は、入力されたソースコードから解析に必要な各種情報を抽出し、精製する役目を果たす。解析に必要な情報としては、例えば、抽象構文ツリー（Ａｂｓｔｒａｃｔ  Ｓｙｎｔａｘ  Ｔｒｅｅ）やソースコードのライン数、位置情報などが挙げられる。
【００２９】
欠陥検出部２２０は、構文解析部２１０で精製された解析に必要な情報に基づいて、ソースコードから問題となるべき欠陥情報２２０Ａを検出する。前記欠陥検出部２２０の欠陥情報２２０Ａの検出は、一例として、欠陥有無をチェックするチェッカーの機能実行によって行われ得る。欠陥情報２２０Ａは、例えば、欠陥が実際に発生したソースコードのファイル名、ラインといった位置情報と、欠陥の種類、実際欠陥の原因となった部分、欠陥が発生したソースコードの流れといった実際欠陥情報などとから構成される。
【００３０】
前記構文解析部２１０の構文解析機能及び欠陥検出部２２０の欠陥情報検出機能は、公知の様々な静的解析ツール（Ｓｔａｔｉｃ  Ａｎａｌｙｓｉｓ  Ｔｏｏｌ）の構文解析機能及び欠陥情報検出機能と同じもしくは類似した構成によって実現できる。静的解析ツールは、文法ベース（Ｓｙｎｔａｃｔｉｃ）解析または意味ベース（Ｓｅｍａｎｔｉｃ）解析方式の様々な商用製品が公知になっているので、その詳細な説明は省略する。
【００３１】
前記欠陥検出部２２０の欠陥情報２２０Ａの検出は、それぞれの欠陥有無をチェックするように備えられたそれぞれのチェッカーの機能実行によって行われ、前記それぞれのチェッカーは、欠陥情報２２０Ａの検出時に検出された欠陥情報２２０Ａに対して生成されるべき修正例示情報２３０Ａと留意事項情報２３０Ｂが含まれている総合解析結果情報２４０Ａを修正例示生成部２３０へ伝達するように構成される。総合解析結果情報２４０Ａは、例えば、修正例示ＸＭＬファイルの形で構成でき、必ずしもこのような形態に限定されるものではない。
【００３２】
一方、同じ一つのチェッカーである場合にも、解析されたソースコードの構造によって異なる修正例示情報２３０Ａと留意事項情報２３０Ｂを伝達することができる。また、欠陥の特性上、チェッカーがチェックした欠陥に対して敢えて修正例示情報２３０Ａと留意事項情報２３０Ｂが提供される必要がない場合には、これらの情報を提供しない、或いは修正例示情報２３０Ａのみを提供する、或いは留意事項情報２３０Ｂのみを提供するように構成されることもできる。また、一つの欠陥情報２２０Ａに対して複数の修正例示情報２３０Ａと留意事項情報２３０Ｂが複数の代替として生成されることもある。これについては別途後述する。本実施形態の説明では、修正例示情報２３０Ａと留意事項情報２３０Ｂが一緒に提供される場合を例示説明する。
【００３３】
修正例生成部２３０は、欠陥検出部２２０で検出された欠陥情報２２０Ａ及び構文解析部２１０で精製された解析に必要な情報に基づいて修正例示情報２３０Ａと留意事項情報２３０Ｂを生成する。
【００３４】
修正例示情報２３０Ａは、欠陥情報２２０Ａ内で発生した欠陥を実際ソースコードでどのように修正すればよいかを提供する修正例示コードをいう。たとえば、修正例示情報２３０Ａから提供された情報に基づいてソースコードを修正すると、欠陥が発生しない。
【００３５】
前記修正例示情報２３０Ａは、欠陥情報２２０Ａが検出されたソースコードラインに対して他のコードラインの「追加」、他のコードラインへの「変更」、及び検出されたコードラインの「削除」のうちの少なくとも一つを含むことができる。
【００３６】
留意事項情報２３０Ｂは、ユーザーがソースコードを修正したときに発生しうる様々な留意事項情報をいう。たとえば、ユーザーにソースコード修正の際に役立つ情報や、修正例示情報２３０Ａから提供する修正例示コードの通りにコードを修正したときに発生しうる付随的な問題、またはソースコード解析装置Ａで自動的に生成することができないためユーザーが直接修正しなければならない事項が挙げられる。
【００３７】
解析結果伝達部２４０は、先に生成された欠陥情報２２０Ａや修正例示情報２３０Ａ、留意事項情報２３０Ｂなどを総合解析結果情報２４０Ａとして構成して解析結果出力モジュール３００へ伝達する。このような総合解析結果情報２４０Ａは、ファイル或いはメモリ内のデータであってもよく、他の情報を含んでもよい。また、欠陥の種類によっては、一つの欠陥情報２２０Ａの他に、修正例示情報２３０Ａ、留意事項情報２３０Ｂはないか或いはさらに多い。
【００３８】
好ましい一例として、解析結果出力モジュール３００は欠陥出力部３１０と修正例示出力部３２０を含む。
【００３９】
欠陥出力部３１０は、ソースコード解析モジュール２００から伝達された総合解析結果情報２４０Ａから欠陥情報２２０Ａを抽出してユーザーに見せる。このような情報としては、一般に、上述したように、ソースコードのファイル名、ラインなどの位置情報、欠陥の種類、実際欠陥の原因となった部分、欠陥が発生したソースコードの流れなどが挙げられる。
【００４０】
修正例示出力部３２０は、ソースコード解析モジュール２００から伝達された総合解析結果情報２４０Ａから修正例示情報２３０Ａ及び留意事項情報２３０Ｂを抽出してユーザーに見せる。このような情報としては、一般に、上述したように、実際ソースコードをどのように修正すべきかに対する修正例示コード、及びソースコードを修正したときに発生しうる様々な留意事項情報が挙げられる。実施形態によっては、欠陥出力部３１０と修正例示出力部３２０は同時に出力を行うことも、他の情報をさらに出力することもできる。
【００４１】
以下、各例示画面を用いて本実施形態のソースコード解析装置の具現例を例示説明する。
【００４２】
図３は本発明の一実施形態に係るソースコード解析装置の欠陥検出部のチェッカーによって欠陥が発見されたソースコードページ画面例である。
【００４３】
欠陥が発見されると、画面の右上端に修正例示ボタンが表示される。
【００４４】
図４は本発明の一実施形態に係るソースコード解析装置の修正例示ボタンクリック後の総合解析結果出力画面例である。
【００４５】
画面に欠陥情報、修正例示情報、留意事項情報がそれぞれ表示される。修正例示情報または留意事項情報は、一つの欠陥情報に対して一つまたはそれ以上が提供できる。
【００４６】
図５は本発明の一実施形態に係るソースコード解析装置の修正例示ボタンクリック後の総合解析結果出力画面中の例示メニュー表示例である。
【００４７】
例示メニューはチェッカーの種類及びソースコードによってその個数が異なる。それぞれの例示メニューは、左端の三角マークを押すことにより、折り畳まれたり展開されたりすることが可能である。
【００４８】
図６は本発明の一実施形態に係るソースコード解析装置の修正例示ボタンクリック後の総合解析結果出力画面中の欠陥情報表示例である。
【００４９】
欠陥情報メニューは、チェッカーが検出した欠陥をどのように修正すべきであるかを教えてくれる。
【００５０】
図７は本発明の一実施形態に係るソースコード解析装置の修正例示ボタンクリック後の総合解析結果出力画面中の修正例示情報表示例である。
【００５１】
修正例示メニューでは、ソースコードにおけるどの部分をどのように修正すべきかを教えてくれる。前記例示コードはできる限り実際のコードと等しく提供される。画面中に赤色でグラデーションされて「−」で始まるラインは削除されるべきコードを表示し、緑色でグラデーションされて「＋」で始まるラインは追加されるべきコードに該当する。修正が必要なコードのラインが大きく離れているか或いは異なるファイルである場合、ボックスが複数個表示できる。
【００５２】
図８は本発明の一実施形態に係るソースコード解析装置の修正例示ボタンクリック後の総合解析結果出力画面中の留意事項情報表示例である。
【００５３】
留意事項情報は、ソースコードを修正したときに発生しうる様々な状況や注意点を説明する。よって、チェッカーの種類及びソースコードによってその個数および内容が異なる。
【００５４】
下記のソースコードは本発明の一実施形態に係るソースコード解析装置の修正例示ＸＭＬファイルの例であり、表１は下記のソースコードの修正例示ＸＭＬファイルの主要タグまたは変数定義の例を示す表である。下記のソースコードおよび表１から、本実施形態の修正例示ＸＭＬファイルが例示的に理解できる。
<alarm>
<sca>
<alternativeid=“1”>
<desc id=“crulechk.CHECKER_NAME.sca.desc.default”>
<arg>func</arg>
</desc>
<code type=“add” src=“/src/somefile.cpp” startline=“1230”>
strncpy(dst,src, 10);
</code>
<code type=“remove” src=“/src/somefile.cpp” startline=“1250” endline=“1251”/>
<code type=“replace” src=“/src/somefile.cpp” startline=“1400”>voidfunc(int arg) </code>
<note type=“change_function_interface”>
<desc id=“crulechk.CHECKER_NAME.sca.note.desc.1”>
<arg>func</arg>
</desc>
<value type=“def_src”>/src/somefile.cpp</value>
<value type=“def_line”>1250</value>
<value type=“function_name”>func</value>
</note>
</alternative>
<alternativeid=“2”>
…
</alternative>
</sca>
</alarm>
【表１】
0006579340.tif 000002
「ｓｃａ」または「Ｓｃａ」は、「Ｓｍａｒｔ  Ｃｏｄｅ  Ａｌｔｅｒｎａｔｉｖｅ」の略字であって、本実施形態の修正例示ＸＭＬファイルに含まれている複数の代替（ａｌｔｅｒｎａｔｉｖｅ）を含む上位要素の例示的名称として便宜上命名する。
【００５５】
図９は本発明の一実施形態に係るソースコード解析装置のためのチェッカー実現クラスのうちのＸＭＬ出力クラスの例、図１０は本発明の一実施形態に係るソースコード解析装置のためのチェッカー実現クラスのうちのコード生成クラスの例である。
【００５６】
図９の場合、上位クラスから簡略に例示説明する。
【００５７】
最上部の「ＡｌａｒｍＸＭＬＭａｋｅｒ」クラスは、アラーム出力の際に、Ｓｃａインスタンスがあれば一緒に出力する。
【００５８】
中間の「Ｓｃａ」クラスは、ＳｃａＡｌｔｅｒｎａｔｉｖｅインスタンス生成を担当し、チェッカーで代替を生成するときにこの関数を使用する。
【００５９】
最下部の「ＳｃａＡｌｔｅｒｎａｔｉｖｅ」クラス（代替情報クラス）は、説明、コード、留意事項情報を含み、コードの追加／変更／削除情報は、「ＣｏｄｅＧｅｎｅｒａｔｏｒ」クラスが生成したコード情報を受け取るか、或いは元のソースコードから受け取る場合もある。
【００６０】
図１０の場合、「ＣｏｄｅＧｅｎｅｒａｔｏｒ」クラス（コード生成クラス）は、一定のテンプレートに基づいて元のソースコードを解析及び推論した結果を入力値として修正例示コードを生成する。「ＣｏｄｅＧｅｎｅｒａｔｏｒ」クラスには、ライン追加のための「ＳｉｍｐｌｅＣｏｄｅＧｅｎｅｒａｔｏｒ」、タイプ生成のための「ＴｙｐｅＣｏｄｅＧｅｎｅｒａｔｏｒ」、変数生成のための「ＶａｒｉａｂｌｅＣｏｄｅＧｅｎｅｒａｔｏｒ」、関数生成のための「ＦｕｎｃｔｉｏｎＣｏｄｅＧｅｎｅｒａｔｏｒ」などが含まれる。
【００６１】
表２は本発明の一実施形態に係るソースコード解析装置のためのチェッカー構成の一例、表３は本発明の一実施形態に係るソースコード解析装置のためのチェッカー構成の他の一例、表４は本発明の一実施形態に係るソースコード解析装置のためのチェッカー構成の別の一例を示す表である。
【表２】
0006579340.tif 000003
例題１の場合、ｄｏｔ（．）演算子を除く二項演算子と前後の被演算子はスペースで区切られるべきであることを検査するチェッカーである。提供されたソースコードのうち、二項演算子「−」が使用された部分の左右にスペースを入れることで代替コード（修正例示コード）を作成することができる。この例題の場合、特別な留意事項はない。
【００６２】
【表３】
0006579340.tif 000004
例題２の場合、配列タイプパラメータとして受け取った配列タイプの変数に対してｓｉｚｅｏｆを使用してはならないというチェッカーである。代替コードは１番ライン、３番ラインで発生する。この際、１番ラインの変更により関数インターフェース変更留意事項が生じる。もし関数インターフェースが変更される場合、この関数の宣言や使用した部分も修正されるべきである。３番ラインのｓｔｒｎｃｐｙは３番目のパラメータの開始節を代替コード１で追加した長さ値の変数を入れるようにする。これに関連しに特別な留意事項はない。
【００６３】
【表４】
0006579340.tif 000005
例題３の場合、効果のない関数呼び出しを検査するチェッカーである。例えば、ｍｅｍｓｅｔで３番目のパラメータの値が０である場合、実質的に意味のないコードになる。代替１は、初期化しようとするバッファのサイズを推論可能な場合にはそのサイズを表示し、推論不可能な場合には＜＜ｌｅｎｇｔｈ＞＞などの指定された識別子を用いて表示する。代替２の場合、条件付きで生成する代替である。もしｍｅｍｓｅｔの二番目のパラメータが単一定数ではない場合は、２、３番目のパラメータを入れ替えて使用した可能性がある。したがって、代替２はｍｅｍｓｅｔの２、３番目のパラメータの値を互いに交替することを提案するようにする。当該チェッカーも特別な留意事項はない。
【００６４】
一例として、表２〜表４に例示された各チェッカーの代替は、図９で例示された「Ｓｃａ」クラス及び「ＳｃａＡｌｔｅｒｎａｔｉｖｅ」クラス（代替情報クラス）によって提供できる。
【００６５】
他の例として、表２〜表４に例示された各チェッカーの代替コードは、図１０で例示された「ＣｏｄｅＧｅｎｅｒａｔｏｒ」クラス（コード生成クラス）によって提供できる。
【００６６】
「Ｓｃａ」クラス、「ＳｃａＡｌｔｅｒｎａｔｉｖｅ」クラス（代替情報クラス）及び「ＣｏｄｅＧｅｎｅｒａｔｏｒ」クラス（コード生成クラス）は、各チェッカーの欠陥内容に相応して予め設定できる。
【００６７】
本発明の実施形態は、様々なコンピュータで実現される動作を行うためのプログラムと、これを記録したコンピュータ可読媒体を含む。前記コンピュータ可読媒体は、プログラム命令、データファイル、データ構造などを単独で或いは組み合わせて含むことができる。前記媒体は、本発明のために特別に設計及び構成されたものであってもよく、コンピュータソフトウェアの当業者に公知されて使用可能なものであってもよい。コンピュータ可読記録媒体の例には、ハードディスク、フロッピーディスク及び磁気テープなどの磁気媒体、ＣＤ−ＲＯＭ、ＤＶＤ、ＵＳＢドライブなどの光記録媒体、フロプティカルディスクなどの磁気−光媒体、及びＲＯＭ、ＲＡＭ、フラッシュメモリなどのプログラム命令を保存及び実行するように特別に構成されたハードウェア装置が含まれる。プログラム命令の例には、コンパイラによって作られるような機械語コードだけでなく、インタープリターなどを用いてコンピュータによって実行できる高級言語コードを含む。
【００６８】
一例として、本発明のソースコード解析装置は、ソースコード解析機能及び解析結果出力機能を実行するためのコンピュータプログラムによってコンピュータの機能動作が実行される形態で実現できる。
【００６９】
ソースコード解析機能は上述したソースコード解析モジュールによって提供され、解析結果出力機能は上述した解析結果出力モジュールによって提供される。
【００７０】
ソースコード解析機能はソースコード解析モジュールの詳細機能をさらに実行し、解析結果出力機能は解析結果出力モジュールの詳細機能をさらに実行することにより、本発明のソースコード解析装置の全体機能が提供できる。
【図１】
0006579340.tif 000006
【図２】
0006579340.tif 000007
【図３】
0006579340.tif 000008
【図４】
0006579340.tif 000009
【図５】
0006579340.tif 000010
【図６】
0006579340.tif 000011
【図７】
0006579340.tif 000012
【図８】
0006579340.tif 000013
【図９】
0006579340.tif 000014
【図１０】
0006579340.tif 000015