(57)【要約】      （修正有）【課題】ソフトウェア開発時のソースコード解析作業において、開発者の作業負荷軽減を図るとともに、精度の高いソースコード解析を行うことができるソースコード解析方法、およびこれを実施するソースコード解析支援システムを提供する。【解決手段】入力部を介してソースコードを受信する処理と、該受信したソースコードから、関数および変数の参照関係を示すソースコード関連情報を抽出して、記憶部に格納する処理と、前記受信したソースコードとあらかじめ規定されたソースコードのコーディングルールに基づいて、前記ソースコードが前記コーディングルールに準拠しているかどうかを解析する処理と、該解析の結果、前記ソースコードが前記コーディングルールに準拠していない場合、該解析結果、前記ソースコードに記述されたファイル名および該当コーディングルール情報を前記記憶部に格納する処理と、前記解析結果を出力部に出力する処理とを備える。【選択図】図１
2010198522.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータにより実施されるソースコード解析方法であって、
入力部を介してソースコードを受信する処理と、
該受信したソースコードから、関数および変数の参照関係を示すソースコード関連情報を抽出して、記憶部に格納する処理と、
前記受信したソースコードとあらかじめ規定されたソースコードのコーディングルールに基づいて、前記ソースコードが前記コーディングルールに準拠しているかどうかを解析する処理と、
該解析の結果、前記ソースコードが前記コーディングルールに準拠していない場合、該解析結果、前記ソースコードに記述されたファイル名および該当コーディングルール情報を前記記憶部に格納する処理と、
前記記憶部からソースコード関連情報および前記解析結果に基づき、該解析結果の変更要否を判定する処理と、
前記解析結果の変更が必要な場合に、前記判定処理の結果に基づき、前記記憶部に記憶されている前記解析結果を変更する処理と、
前記記憶部に記憶されている出力制御情報に基づき前記解析結果を出力部に出力する処理と、
を実施することを特徴とするソースコード解析方法。
【請求項２】
前記解析結果を前記出力部に出力する処理を実施した後、前記入力部を介して解析結果の変更要求を受信する処理と、該変更要求に基づき、前記記憶部に記憶されている前記出力制御情報を更新する処理と、をさらに実施することを特徴とする請求項１に記載のソースコード解析方法。
【請求項３】
入力部、出力部、制御部および記憶部を有するコンピュータであって、
前記制御部は、
前記入力部を介してソースコードを受信する手段と、
該受信したソースコードから、関数および変数の参照関係を示すソースコード関連情報を抽出して、前記記憶部に格納する手段と、
前記受信したソースコードとあらかじめ規定されたソースコードのコーディングルールに基づいて、前記ソースコードが前記コーディングルールに準拠しているかどうかを解析する手段と、
該解析の結果、前記ソースコードが前記コーディングルールに準拠していない場合、該解析結果、前記ソースコードに記述されたファイル名および該当コーディングルール情報を前記記憶部に格納する手段と、
前記記憶部からソースコード関連情報および前記解析結果に基づき、該解析結果の変更要否を判定する手段と、
前記解析結果の変更が必要な場合に、前記判定処理の結果に基づき、前記記憶部に記憶されている前記解析結果を変更する手段と、
前記記憶部に記憶されている出力制御情報に基づき前記解析結果を前記出力部に出力する手段と、
を有することを特徴とするコンピュータ。
【請求項４】
前記制御部は、前記解析結果を前記出力部に出力した後、前記入力部を介して解析結果の変更要求を受信する手段と、該変更要求に基づき、前記記憶部に記憶されている前記出力制御情報を更新する手段と、をさらに実施することを特徴とする請求項３に記載のコンピュータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソースコード解析方法、およびこれを実施するソースコード解析支援システムに関する。
【背景技術】
【０００２】
従来、複数のソースコードに跨る静的解析において、静的解析時に必要な全てのソースコードの解析を行うのではなく、サーバで管理されているコミット済みのソースコードに対して、サーバ上で事前処理として静的解析を実施し、実際の解析時には、サーバにおいてこの事前処理の結果に基づいて静的解析を実施するソースコード解析システムが知られている（例えば、特許文献１参照）。
【０００３】
また、従来のソースコード解析システムでは、ソースコードの静的解析の結果、エラーが検出されれば、警告が出力される。開発者は、この警告により、エラーが発生したソースコードを修正する。しかし、エラーの中には、必ずしも修正しなくても良い場合がある。これは、あるコーディングが好ましくない書式で記述されていたとしても、プロジェクトの特性からそう記述しなければならないなどの状況が発生するためである。しかし、従来では、検出されたエラーに対して、各開発者のスキルや裁量で修正要否を判断していた。このため、ソースコードの品質が開発者に依存し、開発者によって品質にバラツキが生じていた。この問題を解決する技術として、ソースコード解析システムによって出力された警告に対して、どの警告に関するエラーを修正すべきかという優先度を自動的に付与することにより、判断基準が統一できるとともに開発者による修正要否の判断が容易になり、開発者の作業負荷軽減を図る技術が知られている（例えば、特許文献２参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００８−２２５５１９号公報
【特許文献２】特開２００８−２１２４４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記の従来技術には、以下に示すような問題点がある。
【０００６】
まず、特許文献１に記載の技術では、サーバに登録済みのソースコードに対して、テスト工程にて不良が発生したなどの理由によりソースコードの修正が発生した場合、サーバに蓄積されているソースコードおよび事前処理結果が、修正中のソースコードと整合性が取れない場合がある。この場合、修正中のソースコードをサーバに一度登録した上で、他のソースコードの解析処理を実施する必要があるため、開発者に作業負荷がかかる。また、ソースコードの解析結果が、サーバで実施されている事前処理結果に対して変更（ソースコード単体で解析した場合は指摘対象となる箇所が、関連するプログラムを通して会席した場合、指摘対象外となる場合など）が発生した場合、ソースコード解析の再実行が必要になる。
【０００７】
また、特許文献２に記載の技術では、出力される警告の件数自体は変わらないため、膨大に出力される警告に対する修正要否を判断する開発者の作業負荷は変わらない。また、上述のように警告が出力されても、プロジェクトの特性によっては、コーディングルール上問題が無いため、修正不要なエラーがある。したがって、開発者の負荷軽減の観点から、このようなエラーは解析結果として出力させないよう制御することが望ましいが、特許文献２にはこの点について言及されていない。
【０００８】
本発明は、上記に鑑みてなされたものであり、ソフトウェア開発時のソースコード解析作業において、開発者の作業負荷軽減を図るとともに、精度の高いソースコード解析を行えるソースコード解析方法、およびこれを実施するソースコード解析支援システムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
上述した課題を解決するために、本発明は、例えば、コンピュータにより実施されるソースコード解析方法であって、入力部を介してソースコードを受信する処理と、該受信したソースコードから、関数および変数の参照関係を示すソースコード関連情報を抽出して、記憶部に格納する処理と、前記受信したソースコードとあらかじめ規定されたソースコードのコーディングルールに基づいて、前記ソースコードが前記コーディングルールに準拠しているかどうかを解析する処理と、該解析の結果、前記ソースコードが前記コーディングルールに準拠していない場合、該解析結果、前記ソースコードに記述されたファイル名および該当コーディングルール情報を前記記憶部に格納する処理と、前記記憶部からソースコード関連情報および前記解析結果に基づき、該解析結果の変更要否を判定する処理と、前記解析結果の変更が必要な場合に、前記判定処理の結果に基づき、前記記憶部に記憶されている前記解析結果を変更する処理と、前記記憶部に記憶されている出力制御情報に基づき前記解析結果を出力部に出力する処理と、を実施することを特徴とする。
【００１０】
また、本発明は、前記解析結果を前記出力部に出力する処理を実施した後、前記入力部を介して解析結果の変更要求を受信する処理と、該変更要求に基づき、前記記憶部に記憶されている前記出力制御情報を更新する処理と、をさらに実施することを特徴とする。
【発明の効果】
【００１１】
本発明によれば、ソフトウェア開発時のソースコード解析作業において、開発者の作業
負荷軽減を図るとともに、精度の高いソースコードの解析を行うことができるソースコー
ド解析方法およびこれを実施するソースコード解析支援システムを提供することができ
る。
【図面の簡単な説明】
【００１２】
【図１】ソースコード解析支援システムの全体構成図。
【図２】ソースコード解析支援システムの処理手順の一例を示すフローチャート。
【図３】図２のステップＳ２０２で実施される、ソースコード解析処理の処理手順の一例を示すフローチャート。
【図４】図２のステップＳ２０３で実施される、解析結果連結処理の処理手順の一例を示すフローチャート。
【図５】図２のステップＳ２０４で実施される、解析結果出力処理の処理手順の一例を示すフローチャート。
【図６】ソースコード解析支援システムの入力となるソースコードの一例を示す図。
【図７】同じく、ソースコード解析支援システムの入力となるソースコードの一例を示す図。
【図８】同じく、ソースコード解析支援システムの入力となるソースコードの一例を示す図。
【図９】ソースコード解析に参照するコーディングルールの一例を示す図。
【図１０】入力されたソースコードにおける関数間の呼び出し関係および関数内で使用される変数の参照関係を含む情報の一例を示す図。
【図１１】解析結果情報１０７の一例を示す図。
【図１２】更新後の解析結果情報１０７の一例を示す図。
【図１３】出力制御情報１０９の一例を示す図。
【図１４】結果出力手段１０４により出力された結果の一例を示す図。
【発明を実施するための形態】
【００１３】
本発明の実施形態について、図面を参照して詳細に説明する。
【００１４】
図１は、ソースコード解析支援システムの全体構成図である。
【００１５】
ソースコード解析支援システム１００は、例えば、一般的な計算機で実現され、ＣＰＵ、ＣＰＵが実行するプログラムや各種データを記憶する記憶装置、キーボード・マウス等の入力装置、ディスプレイ等の出力装置を有する。ソースコード解析支援システム１００の記憶装置には、ソースコード解析手段１０１、ソースコード情報抽出手段１０２、解析情報連結手段１０３、結果出力手段１０４からなるプログラムが記憶されている。また、上記記憶装置には、解析対象となるソースコード１０５について関数や変数の命名規則や使用禁止命令などが規定されたコーディングルール１０６、前記ソースコード解析手段１０１により生成される解析結果情報１０７、前記ソースコード情報抽出手段により生成されるソースコード関連情報１０８、前記結果出力手段１０４により生成される出力制御情報１０９が記憶されている。
【００１６】
ソースコード解析手段１０１は、ソースコード１０５の解析処理を実施するに当たり、ソースコード情報抽出手段１０２を呼び出して実行し、ソースコード１０５における関数間の呼出関係および関数内で使用される変数の参照関係を示すソースコード関連情報１０８を生成する。また、ソースコード解析手段１０１は、前記ソースコード関連情報１０８を生成後、ソースコードに対する関数や変数の命名規則や使用禁止命令などを記憶するコーディングルール１０６と、前記ソースコード関連情報１０８に基づいて、入力装置を介して入力されたソースコード１０５がコーディングルール１０６に準拠しているかを解析する。ここで、ソースコード関連情報１０８とソースコード１０５とを関連づけるため、ソースコード関連情報１０８には、ソースコードにおける関数間の呼出関係および関数内で使用される変数の参照関係を示す情報が含まれる。
【００１７】
例えば、入力装置を介して入力されたソースコード１０５に、前記コーディングルール１０６で規定されている使用禁止命令が存在した場合、この部分がコーディングルール１０６に違反している箇所として検出される。また、ソースコード解析手段１０１は、ソースコード１０５で初期化されていない変数を発見した場合、記憶装置に記憶されている前記ソースコード関連情報１０８を参照し、初期化されていない変数に関する参照情報が存在しないかを確認する。確認した結果、同じ変数に対する更新情報が存在した場合、ソースコード解析手段１０１は、ソースコード１０５で発見した初期化されていない変数は、初期化済みであると判断し、違反箇所として検出しない。なお、上記確認の結果、同じ変数に対する更新情報が存在しない場合には、ソースコード解析手段１０１は、ソースコード１０５で発見した初期化されていない変数を、初期化漏れ変数として検出する。ソースコード解析手段１０１は、ソースコード１０５の解析処理終了後、ソースコード解析結果を示す解析結果情報１０７を生成し、記憶装置に記憶する。また、ソースコード解析手段１０１は、前記解析結果情報１０７から、入力装置を介して入力されたソースコード１０５について、過去に解析したことがあるかどうかを判定し、その判定の結果、過去に解析したことがあった場合には、入力されたソースコード１０５の解析処理を実施するかどうかを開発者１１０に確認させるための画面を出力装置へ出力する手段を有する。
【００１８】
ソースコード情報抽出手段１０２は、ソースコード１０５の解析時に、ソースコード解析手段１０１によって呼び出され実行されるプログラムであり、ソースコード１０５における関数間の呼出関係および関数内で使用される変数の参照関係を示すソースコード関連情報１０８を生成し、これを記憶装置に記憶する。
【００１９】
例えば、ソースコード情報抽出手段１０２は、ソースコード１０５を参照し、関数呼び出し箇所を検索する。関数呼び出し箇所を発見した場合、ソースコード情報抽出手段１０２は、呼び出される関数名、関数に引数として使用さている変数、戻り値として使用されている変数に関する情報を抽出する。また、ソースコード情報抽出手段１０２は、ソースコード１０５で使用されている変数についても検索を行い、変数名、参照箇所、参照種別（参照／更新など）に関する情報も抽出する。ソースコード情報抽出手段１０２は、上記抽出した情報をソースコード関連情報１０８として記憶する。
【００２０】
解析情報連結手段１０３は、入力装置を介して入力されたソースコード１０５に対して生成されたソースコード関連情報１０８から、記憶装置に記憶している解析結果情報１０７を更新すべきかを判断すると共に、更新する必要がある場合は、記憶装置に記憶している解析結果情報１０７を更新する。ここで、ソースコード関連情報１０８と解析結果情報１０７を関連づけるため、解析結果情報１０７には、コーディングルール１０６に準拠していない関数、変数の参照関係、使用箇所を示す情報が含まれる。
【００２１】
例えば、解析情報連結手段１０３は、記憶装置に記憶されている解析結果情報１０７に、初期化漏れの変数として記憶されている情報に対して、新たに解析したソースコード１０５について生成されたソースコード関連情報１０８を参照し、同じ変数に対する更新情報（初期化されている箇所）が存在するかを検索する。ここで、更新情報を発見した場合、解析情報連結手段１０３は、解析結果情報１０７に記憶されている変数の初期化漏れの情報を削除する必要があると判断し、変数の初期化漏れの情報を、記憶装置に記憶している解析結果情報１０７から削除する。
【００２２】
結果出力手段１０４は、記憶装置に記憶している解析結果情報１０７を、出力制御情報に基づき出力装置に出力するかどうかを判断し、出力する場合には、該当解析結果情報１０７を出力装置に出力する。また、開発者１１０から、解析結果の出力内容に対する変更要求を入力装置を介して受け付けると、結果出力手段１０４は、この変更要求に応じて出力制御情報１０９を更新する。ここで、出力制御情報１０９と解析結果情報１０７を関連づけるため、出力制御情報１０９には、コーディングルール１０６に準拠していないソースコードの箇所と、該当するコーディングルール１０６の内容（ルールNOなど）の情報が含まれる。
【００２３】
例えば、記憶装置に記憶している解析結果情報１０７に、１件以上の情報が記憶されている場合、結果出力手段１０４は、出力装置に出力する前に出力制御情報１０９を参照し、例えば、１件のみ出力するよう指定されている場合には、その指定されている解析結果情報１０７の１件のみを出力装置に出力する。また、１件以上出力するよう変更したい場合には、開発者１１０は、入力装置を用いて出力内容の変更を行うことができる。この場合、結果出力手段１０４は、入力装置を介して受け取った変更内容に応じて出力制御情報１０９を更新する。
【００２４】
次に、本実施形態に係るソースコード解析支援システムの処理の流れを、図２に示す処理手順に沿って説明する。
【００２５】
まず、ソースコード解析手段１０１は、記憶装置に記憶されている解析結果情報１０７に基づいて、入力装置を介して入力されたソースコード１０５について既に解析したことがあるかどうかを判定する（ステップＳ２００）。ソースコード解析手段１０１は、判定する際、ソースコード１０５に対する解析処理を実行した日時と、解析結果情報１０７に含まれる解析日時とを比較し、解析結果情報１０７に含まれる解析日時が解析処理実行日時より古い場合には、上記入力されたソースコード１０５は既に解析済みのソースコードと判断し、ステップ２０１に移る。また、ソースコード１０５に対する解析処理を実行した日時と、解析結果情報１０７に含まれる解析日時とを比較し、解析結果情報１０７に含まれる解析日時と解析処理実行日時が同じ場合には、ソースコード解析手段１０１は、上記入力されたソースコード１０５が過去に解析されたことがないソースコードと判断し、ステップＳ２０２に移る。
【００２６】
ステップ２００の判定の結果、解析結果情報１０７に含まれる解析日時が解析処理実行日時より古い場合には次に、ソースコード解析手段１０１は、入力されたソースコード１０５の解析処理を実行するかどうかを開発者１１０に確認させるための画面を出力装置に出力する（ステップ２０１）。開発者１１０により入力装置を介して解析処理の実行が選択された場合、ソースコード解析手段１０１は、ステップ２０２に移り、解析処理の実行が選択されなかった場合、入力されたソースコード１０５に対する解析処理を終了する。
【００２７】
ステップ２０２に示すソースコード解析処理では、ソースコード解析手段１０１およびソースコード情報抽出手段１０２による、入力されたソースコード１０５を解析する処理を実施する。処理である。このステップ２０２に示すソースコード解析処理の詳細な処理内容を、図３を用いて説明する。
【００２８】
まず、ソースコード解析手段１０１は、ソースコード情報抽出手段１０２を呼び出す。ソースコード情報抽出手段１０２は、入力装置を介して入力されたソースコード１０５から、関数間の呼び出し関係および関数内で使用される変数の参照関係を示すソースコード関連情報１０８を抽出し、記憶装置に格納する（ステップ３００）。
【００２９】
次に、ソースコード解析手段１０１は、コーディングルール１０６およびステップ２００で記憶装置に格納したソースコード関連情報１０８に基づいて、上記入力されたソースコード１０５がコーディングルール１０６に準拠しているかを確認し、その結果を記憶装置に格納する（ステップ３０１）。ソースコード解析手段１０１は、入力されたソースコード１０５について、コーディングルール１０６に準拠していない箇所を発見した場合、違反しているコーディングルールの内容およびソースコード内のコーディングルールに違反している行、コーディング内容を検出し、これを解析結果情報１０７として記憶装置に格納した後、ステップ２０３（図２）に移る。一方、ソースコード解析手段１０１は、上記入力されたソースコード１０５について、コーディングルール１０６に準拠していない箇所が存在しない場合、ステップ２０３に移る。
【００３０】
以下に、ソースコード解析手段１０１が実行するソースコード解析処理の具体例を説明する。ここで、例えば、図９に示すコーディングルールに則って、図６に示すソースコードを解析した場合、ソースコードの６８００行目で禁止命令（例では、GO TO命令を指す）が記述されているため、ソースコード解析手段１０１は、図９に示すコーディングルールで規定されているルールID＝Ａ１００１に違反していると判断し、ソースコードの６８００行目をコーディングルールID＝Ａ１００１違反箇所として検出し、該当ファイル名、該当コーディングルールIDおよび解析結果を含む解析結果情報１０７を記憶装置に格納する。また、ソースコードの４８００行目と１００００行目で変数＝OUT-DATAが記述されているが、初期化が実施されておらず、コーディングルールで規定されているルールID＝Ｂ２０１１に違反しているため、ソースコード解析手段１０１は、上記変数＝OUT-DATAをコーディングルールID＝Ｂ２０１１違反箇所として検出し、該当ファイル名、該当コーディングルールIDおよび解析結果を含む解析結果情報１０７を記憶装置に格納する。さらに、ソースコードの４８００行目のIF命令について、END-IF命令が省略されており、図９のコーディングルールで規定されているルールID＝Ａ１１０１に違反しているため、ソースコード解析手段１０１は、ソースコードの４８００行目のIF命令をコーディングルールID＝Ａ１１０１違反箇所として検出し、該当ファイル名、該当コーディングルールIDおよび解析結果を含む解析結果情報１０７を記憶装置に格納する。
【００３１】
また、例えば、図７に示すソースコードを解析した場合、図９に示すコーディングルールで規定するルールに違反する箇所は存在しないため、ソースコード解析手段１０１は、コーディングルールに違反する箇所は存在しない判断し、図７に示すソースコードの解析処理を終了する。
【００３２】
また、図８に示すソースコードを解析した場合、ソースコードの９２００行目のEVALUATE命令について、WHEN OTHER句が省略されており、図９に示すコーディングルールで規定されているルールID＝Ａ１１０２に違反しているため、ソースコード解析手段１０１は、ソースコードの９２００行目のEVALUATE命令をコーディングルールID＝Ａ１１０２違反箇所として検出し、該当ファイル名、該当コーディングルールIDおよび解析結果を含む解析結果情報１０７を記憶装置に格納する。また、ソースコードの９２００行目で変数＝OUT-DATAが記述されているが、初期化が実施されておらず、図９に示すコーディングルールで規定されているルールID＝Ｂ２０１１に違反しているため、ソースコード解析手段１０１は、上記変数＝OUT-DATAをコーディングルールID＝Ｂ２０１１違反箇所として検出し、該当ファイル名、該当コーディングルールIDおよび解析結果を含む解析結果情報１０７を記憶装置に格納する。記憶装置に格納される解析結果情報１０７の例を図１１に示す。
【００３３】
図２に戻り説明を続ける。ステップ２０３に示す解析情報連結処理では、解析情報連結手段１０３にて、入力装置を介して新たに入力されたソースコードから、ソースコード情報抽出手段１０２によって抽出されたソースコード関連情報１０８に基づいて、記憶装置に記憶されている解析結果情報１０７の更新処理を実施する。以下、ステップ２０３に示す解析情報連結処理の詳細な処理内容を、図４を用いて説明する。
【００３４】
まず、解析情報連結手段１０３は、記憶装置に記憶されているソースコード関連情報１０８および解析結果情報１０７に基づき、解析結果情報１０７を変更する必要があるかを判定する（ステップ４００）。すなわち、解析情報連結手段１０３は、入力装置を介して新たに入力されたソースコード１０５から、ソースコード情報抽出手段１０２によって抽出されたソースコード関連情報１０８を元に、ソースコード解析手段１０１により記憶装置に格納された解析結果情報１０７の内容を精査する。解析情報連結手段１０３は、解析結果情報１０７の変更が必要と判断した場合、この解析結果情報１０７を変更する（ステップ４０１）。な、ステップ４００において、解析結果情報１０７の変更が不要の場合には、解析情報連結手段１０３はと、ステップ２０４（図２）に移る。
【００３５】
以下に、解析情報連結手段１０３が実行するソースコード解析処理の具体例を説明する。なお、ここでは、図１０に示すソース関連情報１０８と図１１に示す解析結果情報１０７を用いて説明する。
【００３６】
まず、解析結果情報連結手段１０３は、図１１に示す解析結果情報１０７を参照し、例えば、ルールID＝Ｂ２０１１（図１３）に違反している変数OUT-DATAの初期化漏れに関するファイル名（TESTPG01、TESTPG03）を抽出する。次に、解析結果情報連結手段１０３は、ソースコード関連情報１０８（図１０）を参照し、変数＝OUT-DATAに関連づいている区分（変数の参照種別）および使用行番号（使用箇所に関する情報）を検索する。図１０に示す例では、解析結果情報連結手段１０３は、変数＝OUT-DATAについて、プログラム名＝TESTPG02の８３００行目が更新されていることを確認できる。これにより、解析結果情報連結手段１０３は、プログラム単体（TESTPG01、TESTPG03）で解析した場合、変数＝OUT-DATAは初期化漏れとして検出されているが、関連するプログラム全体を通して解析した場合、変数＝OUT-DATAは初期化処理が実施されていると確認できる。すなわち、解析結果情報連結手段１０３は、変数＝OUT-DATAに対する初期化漏れという解析結果情報１０７は削除してよいと判断してこれを記憶装置から削除し、ステップ２０４（図２）に移る。削除後の解析結果情報１０７を図１２に示す。
【００３７】
図２に戻り説明を続ける。
【００３８】
ステップ２０４に示す結果出力処理では、結果出力手段１０４にて、結果出力手段１０４にて生成される出力制御情報１０９に基づいて、ソースコード解析手段１０１により格納された解析結果情報１０７を出力装置に出力する処理を実施する。また、開発者１１０から、出力される解析結果情報１０７に対して出力内容の変更要求を入力装置を介して受信した場合、結果出力手段１０４は、その要求内容に応じて記憶装置に記憶されている出力制御情報１０９を更新する処理を実施する。以下、ステップ２０４に示す結果出力処理の詳細な処理内容を、図５を用いて説明する。
【００３９】
まず、結果出力手段１０４は、記憶装置から解析結果情報１０７を読み出し、記憶装置に記憶されている出力制御情報１０９に基づいて出力要否を判定し、出力要の場合にその解析結果情報を出力装置に出力する（ステップ５００）。具体例を挙げて説明する。図１３に出力制御情報１０９の例を、図１２に解析結果情報１０７の例を、それぞれ示す。
【００４０】
結果出力手段１０４は、図１３に示す出力制御情報１０９の解析結果の出力要否を示す情報を確認する。図１３に示す例では、結果出力手段１０４は、TRUEが設定されている情報（ルールID＝Ａ１１０１、Ａ１１０２、Ｂ２０１１が該当）とFALSEが設定されている情報（ルールID＝Ａ１００１が該当）を確認する。次に、結果出力手段１０４は、図１２に示す解析結果情報１０７を参照して、上記確認結果のうち、出力要否にTRUEが設定されていたルールID（Ａ１１０１、Ａ１１０２、Ｂ２０１１）を検索し、一致する情報を出力装置に出力する。図１２に示す解析結果情報１０７の場合、ルールID＝Ａ１１０１、Ａ１１０２に該当する情報が出力装置に出力される。その出力画面の例を図１４に示す。  図５に戻り説明を続ける。
【００４１】
ステップ５００の処理後、開発者１１０が、プロジェクトの特性を考慮し、例えば、図１４に示す該当ファイルについて、「出力する」または「出力しない」の何れかのボタンを入力装置を用いて押下する操作を行うと、結果出力手段１０は、入力装置を介して解析結果情報の変更要求を受信し（ステップ５０１）、ステップ５０２に移る。なお、変更要求が無い場合には、結果出力手段１０は、解析結果の出力処理を終了すると共に、ソースコードの解析処理を終了する。
【００４２】
次に、結果出力手段１０４は、ステップ５０１で受信した変更要求に従い、記憶装置に記憶されている該当出力制御情報１０９を更新する（ステップ５０２）。
【００４３】
出力制御情報１０９の更新処理の具体例を説明する。例えば、結果出力手段１０４は、入力装置を介して、出力要（TRUE）に設定されていた、ルールID＝Ａ１１０１に対する解析結果情報を出力否（FALSE）へ変更する要求を受信した場合、記憶装置に記憶されている出力制御情報１０９から、ルールID＝Ａ１１０１に該当する情報を検索し、一致した情報の出力有無列の内容について、FALSEを設定する。  以上説明したように、上記実施例によれば、ソースコード解析にかかる処理時間の短縮を図ることが可能となる。これは、複数のプログラムに関連するソースコードを実施する場合など、ソースコード解析手段が記憶する解析結果情報およびソースコード情報抽出手段が記憶するソースコード関連情報に基づいて実施することにより、従来のように関連する全てのソースコードを取得および再度解析する作業が軽減されるためである。
【００４４】
また、上記実施例によれば、精度の高いソースコード解析を実施することが可能となる。すなわち、ソースコード解析による警告が膨大に出力されることを抑えることが可能となる。これは、ソースコード情報抽出手段が記憶するソースコード関連情報および前記ソースコード解析手段が記憶する解析結果情報の内容を更新する解析情報連結手段により、ソースコード解析時に参照している情報が常に更新・精査されているためである。
【００４５】
また、上記実施例によれば、開発者に出力するソースコード解析の結果情報について、プロジェクトの特性に合わせた結果情報のみを出力することが可能となる。すなわち、出力されたソースコード解析の結果に対する開発者の修正要否作業の負荷軽減を図ることが可能となる。これは、開発者に対して前記解析結果情報を出力装置に出力するか出力しないかを入力させるための画面を出力装置に出力するようにしたためである。
【符号の説明】
【００４６】
１００  ソースコード解析支援システム
１０１  ソースコード解析手段
１０２  ソースコード情報抽出手段
１０３  解析情報連結手段
１０４  解析結果出力手段
１０５  ソースコード
１０６  コーディングルール
１０７  解析結果情報
１０８  ソースコード関連情報
１０９  出力制御情報
１１０  開発者
【図１】
2010198522.tif 000003
【図２】
2010198522.tif 000004
【図３】
2010198522.tif 000005
【図４】
2010198522.tif 000006
【図５】
2010198522.tif 000007
【図６】
2010198522.tif 000008
【図７】
2010198522.tif 000009
【図８】
2010198522.tif 000010
【図９】
2010198522.tif 000011
【図１０】
2010198522.tif 000012
【図１１】
2010198522.tif 000013
【図１２】
2010198522.tif 000014
【図１３】
2010198522.tif 000015
【図１４】
2010198522.tif 000016