(57)【特許請求の範囲】
【請求項１】
ソースコードに含まれる関数を前記関数の規模が圧縮されたスタブに変換して変換後ソースコードを生成する変換処理部と、
前記ソースコードの関数を前記変換後ソースコードの前記スタブへ置き換えて合成後ソースコードを生成する合成処理部と、
前記合成後ソースコードに対して静的解析を実行する静的解析処理部と
を備え、
前記変換処理部は、前記関数をスタブに変換するときに、前記関数の仕様情報に基づいて前記関数の仕様違反を検出するための仕様違反検出コードを前記スタブへ挿入し、
前記静的解析処理部は、静的解析の実行時に、前記仕様違反検出コードに基づいて前記関数の仕様違反を検出する
静的解析処理システム。
【請求項２】
請求項１に記載の静的解析処理システムであって、
前記静的解析処理部は、前記静的解析において前記合成後ソースコードに含まれた前記スタブに前記仕様違反を検出すると、前記仕様違反が検出されたスタブに対応する関数を含む前記ソースコードを用いて前記静的解析を再度実行する
静的解析処理システム。
【請求項３】
請求項２に記載の静的解析処理システムであって、
前記静的解析処理部は、前記仕様違反が検出されたスタブに対応する関数を含む前記ソースコードを用いて前記仕様違反の検出されたスタブに対応する関数のみに前記静的解析を再度実行する
静的解析処理システム。
【請求項４】
請求項１から請求項３までのいずれかに記載の静的解析処理システムであって、
前記合成処理部は、前記ソースコードにおいて、所定の条件を満たす前記関数のみを前記スタブに置き換えて前記合成ソースコードを生成する
静的解析処理システム。
【請求項５】
請求項４に記載の静的解析処理システムであって、
前記合成処理部は、予め定められた行数以上で構成される前記関数を前記所定の条件を満たす前記関数とする
静的解析処理システム。
【請求項６】
請求項１から請求項５までのいずれかに記載の静的解析処理システムであって、
前記静的解析処理部は、
前記合成後ソースコードに含まれる前記関数及び前記スタブにおける処理の関連性を示す事前処理解析情報を生成する事前処理部と、
前記事前処理解析情報を用いて、前記合成ソースコードに対する前記静的解析を実行する静的解析実行部と
を備える静的解析処理システム。
【請求項７】
変換処理部が、ソースコードに含まれる関数を前記関数の規模が圧縮されたスタブに変換して変換後ソースコードを生成するステップと、
合成処理部が、前記ソースコードの関数を前記変換後ソースコードの前記スタブへ置き換えて合成後ソースコードを生成するステップと、
静的解析処理部が前記合成後ソースコードに対して静的解析を実行するステップと、
前記変換処理部が、前記関数をスタブに変換するときに、前記関数の仕様情報に基づいて前記関数の仕様違反を検出するための仕様違反検出コードを前記スタブへ挿入するステップと、
前記静的解析処理部が、静的解析の実行時に前記仕様違反検出コードに基づいて前記関数の仕様違反を検出するステップと
を備える静的解析処理方法。
【請求項８】
ソースコードに含まれる関数を前記関数の規模が圧縮されたスタブに変換して変換後ソースコードを生成するステップと、
前記ソースコードの関数を前記変換後ソースコードの前記スタブへ置き換えて合成後ソースコードを生成するステップと、
前記合成後ソースコードに対して静的解析を実行するステップと、
前記関数をスタブに変換するときに、前記関数の仕様情報に基づいて前記関数の仕様違反を検出するための仕様違反検出コードを前記スタブへ挿入するステップと、
静的解析の実行時に前記仕様違反検出コードに基づいて前記関数の仕様違反を検出するステップと
をコンピュータに実現させるための静的解析処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、モデル検査方式を用いてコンピュータプログラムの静的解析を行う静的解析処理システムに関する。
【背景技術】
【０００２】
静的解析は、コンピュータプログラムを実行することなく、コンピュータプログラムの記述ミスや動作時の不具合を発見することを可能とするコンピュータプログラムの解析方法である。また、モデル検査方式は、モデルを用いて、コンピュータプログラム（以下、プログラム）の実行時におけるすべてのデータパターン及び全ての処理パスを網羅して、コンピュータプログラムを検証する静的解析の一手法である。ここで、モデルとは、プログラムのソースコードをＣＦＧ（Ｃｏｎｔｒｏｌ  Ｆｌｏｗ  Ｇｒａｐｈ）に変換後に論理式化したものである。静的解析処理システムは、コンピュータプログラムのソースコードを実行することなく、コンピュータプログラムに潜むバグを検出することを可能にする。
【０００３】
モデル検査方式を用いた静的解析では、ソースコードの行数が増加するほど、解析処理に時間を要する。それは、プログラム実行時にプログラム実行時におけるデータパターン、処理パスが増加することによりモデルの規模が増大するためである。大規模なソースコードになると、モデルの規模が解析を行うことが不可能なまでに増大する。
【０００４】
特許文献１は、クライアントの負荷を抑制し、静的解析の結果を編集中のソースコードに反映することができ、解析ルールの管理が容易な静的解析処理システムを開示している。特許文献１の静的解析処理システムは、サーバ、クライアント間で複数のソースコードの静的解析を行う静的解析処理システムである。サーバは、複数のソースコードに対して静的解析のための所定の事前処理を予め実施する。そして、サーバは、事前処理の解析結果を利用してサーバとクライアント間によるソースコードの静的解析を実施する。
【０００５】
しかし、特許文献１では、ソースコードの行数が大きい場合に、静的解析に膨大な時間を要してしまうという課題がある。それは、ソースコードの行数に応じてモデルの規模が増大し、事前処理時間及び解析時間が著しく増加するためである。そのため、ソースコードの検証時間の短縮を図るために、モデルの規模を縮小することが求められる。
【０００６】
特許文献２及び特許文献３にソースコードをスタブ化することにより、モデルの規模を縮小する技術が開示されている。ここで、スタブとは、ソースコードを圧縮する手段であり、ソースコード中から呼び出される関数の中身を別ファイルに分離して、検証対象のソースコードが呼び出す関数は、インタフェース定義に基づく値を呼び出しに対して応答するだけのソースコードである。
【０００７】
しかし、特許文献２及び特許文献３のソースコードでは、ソースコードをスタブ化してモデルの規模を縮小したとしても、ソースコード内のバグの見落としが発生するといった解析制度の低下が発生するといった課題がある。
【０００８】
さらに、関連する技術として特許文献４は、ＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍ  Ｉｎｔｅｒｆａｃｅ）のソースコード実装へのアクセスが無くともＡＰＩコールを評価することができる方法が開示されている。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００８−２２５５１９号公報
【特許文献２】特開２０１０−０７９５２５号公報
【特許文献３】特開２００９−２１１６２２号公報
【特許文献４】特開２００６−２３６３３６号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
本発明の目的は、ソースコードの規模を縮小しつつ、ソースコードに潜むバグを検出することが可能な静的解析処理システムを提供することにある。
【課題を解決するための手段】
【００１１】
本発明の一つの観点として静的解析処理システムが提供される。静的解析処理システムは、ソースコードに含まれる関数を関数の規模が圧縮されたスタブに変換して変換後ソースコードを生成する変換処理部と、ソースコードの関数を変換後ソースコードのスタブへ置き換えて合成後ソースコードを生成する合成処理部と、合成後ソースコードに対して静的解析を実行する静的解析処理部とを備える。変換処理部は、関数をスタブに変換するときに、関数の仕様情報に基づいて関数の仕様違反を検出するための仕様違反検出コードをスタブへ挿入する。静的解析処理部は、静的解析の実行時に、仕様違反検出コードに基づいて関数の仕様違反を検出する。
【００１２】
本発明の他の観点として静的解析処理方法が提供される。静的解析処理方法は、ソースコードに含まれる関数を関数の規模が圧縮されたスタブに変換して変換後ソースコードを生成するステップと、ソースコードの関数を変換後ソースコードのスタブへ置き換えて合成後ソースコードを生成するステップと、合成後ソースコードに対して静的解析を実行するステップと、関数をスタブに変換するときに、関数の仕様情報に基づいて関数の仕様違反を検出するための仕様違反検出コードをスタブへ挿入するステップと、静的解析の実行時に仕様違反検出コードに基づいて関数の仕様違反を検出するステップとを備える。
【００１３】
本発明のさらに他の観点として静的解析処理プログラムが提供される。静的解析処理プログラムは、ソースコードに含まれる関数を関数の規模が圧縮されたスタブに変換して変換後ソースコードを生成するステップと、ソースコードの関数を変換後ソースコードのスタブへ置き換えて合成後ソースコードを生成するステップと、合成後ソースコードに対して静的解析を実行するステップと、関数をスタブに変換するときに、関数の仕様情報に基づいて関数の仕様違反を検出するための仕様違反検出コードをスタブへ挿入するステップと、静的解析の実行時に仕様違反検出コードに基づいて関数の仕様違反を検出するステップとを備える。
【発明の効果】
【００１４】
本発明によれば、ソースコードの規模を縮小しつつ、ソースコードに潜むバグを検出することが可能な静的解析処理システムを提供することができる。
【図面の簡単な説明】
【００１５】
【図１】図１は、本実施形態における静的解析処理システムの構成を示す機能ブロック図である。
【図２】図２は、本実施形態におけるクライアント１００及びサーバ２００のハードウェア構成を示す図である。
【図３】図３は、本実施形態における静的解析処理システムの動作を示すフローチャートである。
【図４】図４は、本実施形態におけるソースコード２２２の例を示す図である。
【図５Ａ】図５Ａは、本実施形態におけるスタブ化される前のソースコード２２２内の関数Ｂの例を示す図である。
【図５Ｂ】図５Ｂは、本実施形態におけるスタブ化された変換後ソースコード２２５内のスタブＢの例を示す図である。
【図６】図６は、本実施形態における変換後ソースコード２２５の例を示す図である。
【図７】図７は、本実施形態における合成後ソースコード２２７の例を示す図である。
【発明を実施するための形態】
【００１６】
添付図面を参照して、本発明の実施形態による静的解析処理システムを以下に説明する。
【００１７】
［構成の説明］
はじめに、本実施形態における静的解析処理システムの構成の説明を行う。図１は、本実施形態における静的解析処理システムの構成を示す機能ブロック図である。本実施形態の静的解析処理システムは、クライアント１００とサーバ２００とを備える。
【００１８】
まず、クライアント１００は、静的解析処理システムのユーザによって操作される。クライアント１００は、ソースコード編集装置１１０を備える。ソースコード編集装置１１０は、ソースコード２２２の表示、編集、保存、及び登録を行う。ソースコード編集装置１１０は、解析結果表示部１２０と、ソースコード登録部１３０とを備える。
【００１９】
解析結果表示部１２０は、ソースコード２２２の解析結果をユーザに確認可能な形で表示する。解析結果表示部１２０は、サーバ２００から解析結果を取得する。解析結果には、解析に用いられたルール及びその説明、ソースコード２２２の対応箇所といった情報が含まれる。解析結果表示部１２０は、これらの情報に基づいて、ソースコード２２２の解析結果をソースコード２２２の対応箇所に結び付けて表示する。
【００２０】
ソースコード登録部１３０は、編集されたソースコード２２２をサーバ２００へ登録する。また、ソースコード登録部１３０は、ソースコード２２２内に存在する関数の仕様である関数仕様情報２２３をサーバ２００へ登録する。
【００２１】
次に、サーバ２００は、静的解析処理装置２１０と、ソースコード管理装置２２０と、変換装置２３０と、合成装置２４０とを備える。
【００２２】
まず、変換装置２３０は、スタブ変換部２３１を備える。スタブ変換部２３１は、ソースコード管理装置２２０からソースコード２２２と関数仕様情報２２３とを入力して、ソースコード２２２内の全ての関数をスタブ化する。ここで、スタブとは、ソースコードを圧縮する手段であり、ソースコード中から呼び出される関数の中身を別ファイルに分離して、検証対象のソースコードが呼び出す関数は、インタフェース定義に基づく値を呼び出しに対して応答するだけのソースコードである。また、変換装置２３０は、ソースコード２２２内の関数をスタブ化するときに、関数仕様情報２２３に基づいて、当該関数について問題の有無を指摘させる関数仕様違反コードを、関数に埋め込む。関数仕様違反コードについては後述する。変換装置２３０は、スタブ化された変換後ソースコード２２５をソースコード管理装置２２０へ出力する。
【００２３】
次に、合成装置２４０は、ソースコード合成部２４１を備える。ソースコード合成部２４１は、ソースコード合成ルール２４２を記憶している。ソースコード合成部２４１は、ソースコード管理装置２２０からソースコード２２２と変換後ソースコード２２５を入力して、ソースコード合成ルール２４２に基づいてソースコード２２２と変換後ソースコード２２５を合成する。ソースコード合成部２４１は、合成された合成後ソースコード２２７をソースコード管理装置２２０へ出力する。
【００２４】
次に、静的解析処理装置２１０は、解析装置２１１と、事前処理装置２１２と、ルール管理装置２１５とを備える。
【００２５】
まず、ルール管理装置２１５は、ルール記憶部２１６を備える、ルール記憶部２１６は、解析ルール２１７と事前処理ルール２１８とを記憶する。解析ルール２１７は、解析装置２１１が行う静的解析処理に用いられる。事前処理ルール２１８は、事前処理装置が行う事前処理に用いられる。
【００２６】
次に、事前処理装置２１２は、事前処理解析部２１３を備える。事前処理解析部２１３は、合成後ソースコード記憶部２２６から合成後ソースコード２２７を取得して、合成後ソースコード２２７に対して事前処理を行う。具体的に、事前処理解析部２１３は、合成後ソースコード記憶部２２６から合成後ソースコード２２７を取得すると、ルール記憶部２１６から事前処理ルール２１８を取得して、事前処理ルール２１８に基づいて合成後ソースコード２２７をモデル化して事前処理解析情報２１４を生成する。事前処理装置２１２は、事前処理解析情報２１４を記憶する。
【００２７】
次に、解析装置２１１は、事前処理解析部２１８から合成後ソースコード２２７と事前処理解析情報２１４とを取得し、また、ルール記憶部２１６から解析ルール２１７を取得して、解析ルール２１７に基づき、事前処理解析情報２１４を用いて合成後ソースコード２２７に対して静的解析を行う。解析装置２１１は、合成後ソースコード２２７に対する静的解析において合成後ソースコード２２７内のスタブ内に関数仕様違反を検出した場合、関数仕様違反が検出されたスタブがスタブ化される前のソースコード２２２をソースコード管理装置２２０から取得する。そして、解析装置２１１は、関数仕様違反が検出されたスタブがスタブ化される前のソースコード２２２に対して、再度、静的解析を行う。解析装置２１１は、静的解析の結果である解析結果を、解析結果表示部１２０へ出力する。
【００２８】
次に、ソースコード管理装置２２０は、ソースコード記憶部２２１と、変換後ソースコード記憶部２２４と、合成後ソースコード記憶部２２６とを備える。
【００２９】
ソースコード記憶部２２１は、ソースコード登録部１３０から登録されるソースコード２２２と関数仕様情報２２３とを記憶する。ソースコード記憶部２２１は、ソースコード２２２と関数仕様情報２２３とをスタブ変換部２３１へ出力する。また、ソースコード記憶部２２１は、解析装置２１１からの要求に応じて、静的解析中に関数仕様違反が検出されたスタブに対応するスタブ化前のソースコードを解析装置２２１へ出力する。
【００３０】
変換後ソースコード記憶部２２４は、スタブ変換部２３１から入力される変換後ソースコード２２５を記憶する。変換後ソースコード記憶部２２４は、変換後ソースコード２２５をソースコード合成部２４１へ出力する。
【００３１】
合成後ソースコード記憶部２２６は、ソースコード合成部２４１から入力される合成後ソースコード２２７を記憶する。合成後ソースコード記憶部２２６は、合成後ソースコード２２７を事前処理装置２１２へ出力する。
【００３２】
次に、図２は、本実施形態におけるクライアント１００及びサーバ２００のハードウェア構成を示す図である。本実施形態のクライアント１００及びサーバ２００は、一般的なコンピュータと同様のハードウェア構成により実現が可能である。
【００３３】
クライアント１００及びサーバ２００は、処理部１０と、記憶部２０と、通信部３０と、表示部４０と、入力部５０と、インタフェース部６０とを備える。処理部１０と、記憶部２０と、通信部３０と、表示部４０と、入力部５０と、インタフェース部６０は、システムバス７０によりデータ送受信が可能に接続されている。
【００３４】
表示部４０は、ＬＣＤ（Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙ）に例示される。表示部４０は、静的解析の解析結果等の情報を表示する。入力部５０は、マウスやキーボードに例示される。ユーザは、入力部５０から各種の入力を行う。インタフェース部６０は、コンピュータの周辺機器とのインタフェースである。通信部３０は、ネットワーク８０と接続されており、ネットワーク８０を介して他のコンピュータとの通信が可能である。記憶部２０は、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）やＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）に例示される。記憶部２０は、本実施形態のクライアント１００やサーバ２００の機能を実現するためのコンピュータプログラムやデータを記憶している。処理部１０は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）に例示される。処理部１０は、記憶部２０に記憶されたコンピュータプログラムを実行することにより、クライアント１００やサーバ２００の機能を実現する。
【００３５】
このように、本実施形態におけるクライアント１００及びサーバ２００の機能は、ソフトウェアにより実現されても良いし、ハードウェアにより実現されても良いし、あるいは、これらの組み合わせによって実現されても良い。なお、上述のコンピュータプログラムは、移動可能な記憶媒体に記録することができる。記録媒体とは、ＣＤ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ）やＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）を搭載したフラッシュメモリや、ネットワーク８０を介してアクセス可能なアプリケーションダウンロードサーバのＨＤＤ（Ｈａｒｄ  Ｄｉｓｃ  Ｄｒｉｖｅ）等に例示される。このような場合、コンピュータプログラムは、記録媒体に格納されて移動や流通が可能である。コンピュータプログラムは、記録媒体からネットワーク８０やインタフェース部６０を介して、クライアント１００やサーバ２００の記憶部２０へ導入される。
【００３６】
以上が、本実施形態における静的解析処理システムの構成の説明である。
【００３７】
［動作の説明］
続いて、本実施形態における静的解析処理システムの動作の説明を行う。図３は、本実施形態における静的解析処理システムの動作を示すフローチャートである。
【００３８】
まず、クライアント１００のソースコード登録装置１３０は、サーバ２００のソースコード管理装置２２０へソースコード２２２と関数仕様情報２２３とを送付する（ステップＳ１０）。ソースコード管理装置２２０のソースコード記憶部２２１は、ソースコード登録装置１３０から受信されたソースコード２２２と関数仕様情報２２３とを記憶する（ステップＳ２０）。
【００３９】
図４は、本実施形態におけるソースコード２２２の例を示す図である。ソースコード２２２は、「ｆｉｌｅＡ」と「ｆｉｌｅＢ」とを備える。「ｆｉｌｅＡ」は、関数Ａ〜Ｃを含み、「ｆｉｌｅＢ」は、関数Ｄ、Ｅを含む。ｆｉｌｅ及び関数の横軸の長さは、それぞれの規模を示している。ここで、規模とは、ソースコードの行数を指す。
【００４０】
図３に戻り、変換装置２３０のスタブ変換部２３１は、ソースコード記憶部２２１にソースコード２２２と関数仕様情報２２３とが記憶されると、ソースコード記憶部２２１からソースコード２２２と関数仕様情報２２３とを取得する。スタブ変換部２３１は、ソースコード２２２と関数仕様情報２２３を取得すると、ソースコード２２２内の全ての関数をスタブ化して、変換後ソースコード２２５を生成する（ステップＳ３０）。このとき、スタブ変換部２３１は、関数仕様情報２２３に基づいて、スタブ内に関数仕様違反コードを埋め込む。関数仕様違反とは、想定されていない値が関数の引数として渡される場合を示す。
【００４１】
ここで、図５Ａ、図５Ｂを用いて、スタブ変換部２３１によるスタブ化処理の例を説明する。図５Ａは、本実施形態におけるスタブ化される前のソースコード２２２内の関数Ｂの例を示す図である。図５Ｂは、本実施形態におけるスタブ化された変換後ソースコード２２５内のスタブＢの例を示す図である。スタブ変換部２３１は、図５Ａに示すような関数Ｂをスタブ化する。図５Ｂを参照すると、スタブ化によって関数Ｂが圧縮されていることが確認できる。この時、スタブ変換部２３１は、図５Ｂに示すように、関数仕様情報に基づいて関数仕様違反コードをスタブへ挿入する。図５Ｂに示す「ａｌｅｒｔ」は、解析装置２１１が理解可能な関数仕様違反コードである。図５Ｂの例では、変数「ｐａｒｔ」が「ＮＵＬＬ」であった場合に関数仕様違反を検出する。このようにして、スタブ変換部２３１は、ソースコード２２２内の関数Ｂをスタブ化してスタブＢへと変換する。
【００４２】
再び、図３に戻り、スタブ変換部２３１は、変換後ソースコード２２５をソースコード管理装置２２０の変換後ソースコード記憶部２２４へ出力する。変換後ソースコード記憶部２２４は、スタブ変換部２３１から入力された変換後ソースコード２２５を記憶する（ステップＳ４０）。
【００４３】
図６は、本実施形態における変換後ソースコード２２５の例を示す図である。図６を参照すると、図４に示した関数Ａ〜Ｅがスタブ化されてスタブＡ〜Ｅへ変換されていることがわかる。
【００４４】
再び、図３に戻り、合成装置２４０のソースコード合成部２４１は、変換後ソースコード記憶部２２４に変換後ソースコード２２５が記憶されると、ソースコード記憶部２２１に記憶されたソースコード２２２と変換後ソースコード記憶部２２４に記憶された変換後ソースコード２２５とを取得する。ソースコード合成部２４１は、ソースコード２２２と変換後ソースコード２２５とを合成して合成後ソースコード２２７を生成する（ステップＳ５０）。具体的には、ソースコード合成部２４１は、予め記憶されたソースコード合成ルール２４２に基づいて、ソースコード２２２内の関数を変換後ソースコード２２５内のスタブに置き換えて合成後ソースコード２２７を生成する。
【００４５】
ソースコード合成ルール２４２は、ユーザによって予めサーバ２００に登録されているものとする。本実施形態におけるソースコード合成ルール２４２は、ソースコード２２２内の関数において一定の行数以上で構成される関数を、当該関数に対応するスタブへ置き換えるように規定されている。なお、一定の行数の値は、ユーザによって予め決定される。また、ソースコード合成ルール２４２は、関数をスタブへ変換する基準が関数を構成する行数に基づいて決定される例には限定せず、他の基準に基づいて変換が決定されてもよい。
【００４６】
ソースコード合成部２４１は、合成後ソースコード２２７をソースコード管理装置２２０へ出力する。ソースコード管理装置２２０の合成後ソースコード記憶部２２６は、ソースコード合成部２４１から入力された合成後ソースコード２２７を記憶する（ステップＳ６０）。
【００４７】
図７は、本実施形態における合成後ソースコード２２７の例を示す図である。図７を参照すると、図４に示したソースコード２２２内の関数Ａ〜Ｅのうち関数Ｂ、ＥがスタブＢ、Ｅへ置き換えられている。これは、関数Ｂ、Ｅが、ソースコード合成ルール２４２に定められた一定の行数以上で構成されていることによる。このように、規模が大きい関数Ｂ、ＥをスタブＢ、Ｅへ置き換えることにより、ソースコード２２２の規模を圧縮することができる。
【００４８】
再び、図３に戻り、事前処理装置２１２の事前処理解析部２１３は、合成後ソースコード記憶部２２６に合成後ソースコード２２７が記憶されると、合成後ソースコード記憶部２２６から合成後ソースコード２２７を取得する。また、事前処理解析部２１３は、ルール管理装置２１５のルール記憶部２１６から事前処理ルール２１８を取得する。事前処理解析部２１３は、合成後ソースコード２２７に対して事前処理ルール２１８に基づいて事前処理を行う（ステップＳ７０）。事前処理解析部２１３は、事前処理の結果として事前処理解析情報２１４を生成する。事前処理解析部２１３は、事前処理解析情報２１４を記憶する。
【００４９】
事前処理解析部２１３は、例えば、特許文献１に開示された事前処理と同様の処理を行うことが可能である。以下、特許文献１における事前処理を特許文献１における符号を用いて説明する。特許文献１では、ペアで行われなければ解析ルール２４１の違反となる処理がソースコード内の複数の関数に渡って格納されている例が開示されている（特許文献１の図４）。このような場合、事前処理によって、特定の関数が実行された場合にペアで実行されるべき処理を含んでおり、当該関数の実行のみではペアとなる両関数が実行されない（すなわち、解析ルール２４１違反となる）関数のリストである事前処理解析情報２２２を作成する。特許文献１ではこの事前処理解析情報２２２を用いて、後に静的解析を実行する。以上が特許文献１に開示された事前処理の説明である。本実施形態の事前処理解析部２１３は、上述のような事前処理を行って事前処理解析情報２１４を生成する。
【００５０】
再び、図３へ戻り、解析装置２１１は、事前処理解析部２１３による事前処理が完了すると、事前処理解析部２１３から事前処理解析情報２１４と合成後ソースコード２２７とを取得する。また、解析装置２１１は、ルール管理装置２１６のルール記憶部２１６から解析ルール２１７を取得する。解析装置２１１は、解析ルール２１７に基づいて事前処理解析情報２１４を用いて合成後ソースコード２２７に静的解析を実行する（ステップＳ８０）。解析装置２１１は、静的解析の結果として解析結果を生成する。
【００５１】
解析装置２１１は、解析結果においてスタブに関数仕様違反の発生が無いかを判定する（ステップＳ９０）。解析結果にスタブの関数仕様違反が無い場合（ステップＳ９０のＮｏ）、フローはステップＳ１３０へ進む。一方、解析結果にスタブの関数仕様違反がある場合（ステップＳ９０のＹｅｓ）、フローはステップＳ１００へ進む。例えば、前述の図５Ｂで説明を行ったように、合成後ソースコード２２７のスタブＢにおいて変数「ｐａｒｔ」が「ＮＵＬＬ」となる場合には関数仕様違反となり、解析装置２１１は、関数仕様違反を検出する。
【００５２】
解析装置２１１は、スタブに関数仕様違反の発生を検出すると、関数仕様違反のあったスタブのスタブ化前のソースコードをソースコード管理装置２２０に要求する（ステップＳ１００）。この要求は、事前処理装置２１２を介して行われても良いし、ソースコード管理装置２２０へ直接行われても良い。ソースコード管理装置２２０のソースコード記憶部２２３は、解析装置２１１から要求の合ったスタブに対応するソースコード２２２を事前処理装置２１２へ出力する。
【００５３】
事前処理装置２１２の事前処理解析部２１３は、ソースコード管理装置２２１から入力されたソースコード２２２に対して事前処理を行う（Ｓ１１０）。事前処理解析部２１３は、事前処理の結果として事前処理解析情報２１４を生成する。事前処理解析部２１３は、事前処理解析情報２１４を記憶する。
【００５４】
解析装置２１１は、関数仕様違反のあったスタブのスタブ化前のソースコード２２２に対する事前処理が完了すると、事前処理解析部２１３から事前処理解析情報２１４と関数仕様違反のあったスタブのスタブ化前のソースコード２２２とを取得する。解析装置２１１は、解析ルール２１７に基づいて、事前処理解析情報２１４を用いて、関数仕様違反のあったスタブのスタブ化前のソースコード２２２のうち関数仕様違反のあったスタブの部分にのみ静的解析を実行する（ステップＳ１２０）。つまり、事前処理解析部２１３及び解析装置２１１は、図７に示したスタブＢにおいて関数仕様違反が発生したとすると、図４に示した。スタブＢに対応する関数Ｂに対して、それぞれ、事前処理及び静的解析を行うことになる。
【００５５】
解析装置２１１は、静的解析が完了すると、解析結果をクライアントのソースコード編集装置１１０へ送信する（ステップＳ１３０）。これにより、本動作フローは終了となる。なお、この後、ソースコード編集装置１１０の解析結果表示装置１２０は、ユーザが確認可能な形で解析結果を表示する。以上が、本実施形態における静的解析処理システムの動作方法の説明である。
【００５６】
このように本発明によれば、ソースコード合成部２４１が、ソースコード２２２内の関数において所定の行数より多い行数で構成される関数をスタブ化する。これにより、合成後ソースコード２２７は、ソースコード２２２より規模（行数）が圧縮されているため、解析装置２２１により静的解析に要する時間を短縮することができる。
【００５７】
また、スタブ変換部２３１は、ソースコード２２２内の関数をスタブ化する際に、関数仕様情報２２３に基づいてスタブ内に関数仕様違反コードを埋め込む。そのため、解析装置２１１が、ソースコード２２２内の関数がスタブ化された合成後ソースコード２２７を用いて静的解析を行ったとしても、ソースコード内のバグの見逃しを回避することができ、解析精度の低下を防ぐことができる。
【００５８】
さらに、解析装置２１１は、静的解析の解析結果において、スタブに関数仕様違反の発生を検出すると、関数仕様違反のあったスタブのスタブ化前のソースコード２２２において、関数仕様違反のあったスタブに対応する部分のみに対して、再度、静的解析を行う。これにより関数仕様違反の発生時においても検証時間の短縮を図ることができる。
【００５９】
以上、実施形態を参照して本願発明を説明したが、本願発明は上記実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【符号の説明】
【００６０】
１０  処理部
２０  記憶部
３０  通信部
４０  表示部
５０  入力部
６０  インタフェース部
７０  システムバス
８０  ネットワーク
１００  クライアント
１１０  ソースコード編集装置
１２０  解析結果表示部
１３０  ソースコード登録部
２００  サーバ
２１０  静的解析処理装置
２１１  解析装置
２１２  事前処理装置
２１３  事前処理解析部
２１４  事前処理解析情報
２１５  ルール管理装置
２１６  ルール記憶部
２１７  解析ルール
２１８  事前処理ルール
２２０  ソースコード管理装置
２２１  ソースコード記憶部
２２２  ソースコード
２２３  関数仕様情報
２２４  変換後ソースコード記憶部
２２５  変換後ソースコード
２２６  合成後ソースコード記憶部
２２７  合成後ソースコード
２３０  変換装置
２３１  スタブ変換部
２４０  合成装置
２４１  ソースコード合成部
２４２  ソースコード合成ルール
【図１】
0005545133.tif 000002
【図２】
0005545133.tif 000003
【図３】
0005545133.tif 000004
【図４】
0005545133.tif 000005
【図５Ａ】
0005545133.tif 000006
【図５Ｂ】
0005545133.tif 000007
【図６】
0005545133.tif 000008
【図７】
0005545133.tif 000009