(57)【要約】【目的】ソースプログラムの構文上の誤りの解析及びソースプログラムを動作させなければ解析できない処理の流れの解析を行う静的解析装置。【構成】本発明は、ソースプログラム１０を入力する入力手段と、ソースプログラム１０から構造解析ツリー１１１を作成する構造解析ツリー作成部１１０と、ルールファイル蓄積部１１６のファイルに基づいて構造解析ツリー１１１を解析する構造解析部１１２と、構造解析部１１２の解析結果を保持するリソース使用管理テーブル１１８及び解析結果バッファ１１３と、解析結果を編集する解析結果編集部１１４と、解析結果編集部１１４が編集した解析結果を出力する解析結果出力部１１５とを有する。【選択図】　　　図１
2004145381.tif 000002
【特許請求の範囲】
【請求項１】
ソースプログラムを静的に解析しその解析結果を出力するソースプログラムの静的解析装置において、複数の前記ソースプログラムを入力可能な入力手段と、リソースの確保と解放との対応及び前記リソースの占有と占有解除との対応をチェックするルールを記述したルールファイルに基づいて前記入力手段により入力された前記ソースプログラムを解析する構造解析手段と、前記構造解析手段の解析結果を出力する出力手段とを備えることを特徴とするソースプログラムの静的解析装置。
【請求項２】
前記構造解析手段は、前記入力手段により入力された前記ソースプログラムの処理の流れを制御構造ツリーに展開する制御構造ツリー作成手段を含むことを特徴とする請求項１記載のソースプログラムの静的解析装置。
【請求項３】
前記ルールファイルは、予め定められた記法に従って記述されており、ルールファイル編集部によりチェックすべき関数の変更、追加が可能に構造されていることを特徴とする請求項１記載のソースプログラムの静的解析装置。
【請求項４】
前記構造解析手段は、前記ルールファイルを参照して前記制御構造ツリーから前記リソースの確保と解放との処理手順を前記リソースの使用を管理するリソース使用管理テーブルに書き込み、前記リソースの確保と解放との処理順序をチェックすることを特徴とする請求項１記載のソースプログラムの静的解析装置。
【請求項５】
前記構造解析手段は、前記ルールファイルを参照して前記制御構造ツリーから前記リソースの占有と占有解除との処理手順を前記リソースの使用を管理するリソース使用管理テーブルに書き込み、前記リソースの占有と占有解除との処理順序をチェックすることを特徴とする請求項１記載のソースプログラムの静的解析装置。
【請求項６】
前記構造解析手段は、前記ルールファイルを参照してリソースの確保が成功したか否かをチェックすることを特徴とする請求項１記載のソースプログラムの静的解析装置。
【請求項７】
前記構造解析手段は、前記ルールファイルを参照してリソースの占有が成功したか否かをチェックすることを特徴とする請求項１記載のソースプログラムの静的解析装置。
【請求項８】
前記構造解析手段は、前記リソースの実体を必要とすることなく、前記ソースプログラムをチェックし前記リソースの確保と解放との使用方法が適切か否かを検証することを特徴とする請求項１記載のソースプログラムの静的解析装置。
【請求項９】
前記構造解析手段は、前記リソースの実体を必要とすることなく、前記ソースプログラムをチェックし前記リソースの占有と占有解除との使用方法が適切か否かを検証することを特徴とする請求項１記載のソースプログラムの静的解析装置。
【請求項１０】
前記構造解析手段は、前記ソースプログラムの任意の範囲を解析し、前記ソースプログラムの任意の範囲における前記リソースの確保と解放との使用方法が適切か否かの検証を行うことが可能であることを特徴とする請求項１記載のソースプログラムの静的解析装置。
【請求項１１】
前記構造解析手段は、前記ソースプログラムの任意の範囲を解析し、前記ソースプログラムの任意の範囲における前記リソースの占有と占有解除との使用方法が適切か否かの検証を行うことが可能であることを特徴とする請求項１記載のソースプログラムの静的解析装置。
【請求項１２】
前記構造解析手段は、１つのソースプログラムを最後まで読み込み、引き続き次の指定されたソースプログラムを読み込み、この間前記リソースの使用を管理するリソース使用管理テーブルの情報を保持し、複数のファイルに亘るリソースの確保と解放、占有と占有解除のチェックを行うことが可能であることを特徴とする請求項１記載のソースプログラムの静的解析装置。
【請求項１３】
前記構造解析手段は、前記ルールファイルを参照して前記制御構造ツリーから条件分岐によって発生する全処理のルートに沿って、前記リソースの確保と解放の処理手順を前記リソースの使用を管理するリソース使用管理テーブルに書き込み、前記リソースの確保と解放の処理順序をチェックすることを特徴とする請求項１記載のソースプログラムの静的解析装置。
【請求項１４】
前記構造解析手段は、前記ルールファイルを参照して前記制御構造ツリーから条件分岐によって発生する全処理のルートに沿って、前記リソースの占有と占有解除の処理手順を前記リソースの使用を管理するリソース使用管理テーブルに書き込み、前記リソースの占有と占有解除の処理順序をチェックすることを特徴とする請求項１記載のソースプログラムの静的解析装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ソースプログラムの静的解析装置に係り、特に、ソースプログラムを静的に解析し、不良をソースプログラム製作段階で検出可能としたソースプログラムの静的解析装置に関する。
【０００２】
【従来の技術】
一般に、従来技術によるソースプログラムの静的解析装置は、静的解析装置が有する入力手段により入力されたソースプログラムを解析して構文上の誤りを検出し、静的解析装置が有する出力手段により解析結果を出力するというものである。
【０００３】
また、他の従来技術によるソースプログラムの静的解析装置に関する技術として、例えば、特許文献１等に記載された技術が知られている。この従来技術は、パターン化したチェック項目毎にソースプログラムの定義情報を格納しておき、チェック項目に基づいて分割したソースプログラムの処理を定義情報と比較し、定義情報の扱いが正しいか否か解析するというものである。
【０００４】
【特許文献１】
特開平８−６９３８０号公報
【０００５】
【発明が解決しようとする課題】
前述した従来技術は、ソースプログラムを事前に用意したチェック項目と比較し、ソースプログラムの構文上の誤りを指摘するに止まり、ソースプログラムの動作時に実行される処理の順序の誤りを指摘することができないという問題点を有している。また、前述の従来技術は、解析の対象が１つのファイルであり、複数ファイルに亘るソースプログラムのチェックを行うことができないという問題点を有している。
【０００６】
従来、ソースプログラムの動作時における処理の流れを解析するためには、動的解析装置が用いられている。しかし、動的解析装置を使用するためには、プログラムの実行環境と全条件分岐に対応するテストデータとを用意する時間と手間とが掛かってしまう。
【０００７】
本発明の目的は、前述した従来技術の問題点を解決し、プログラムの実行環境とテストデータとを用意することなく、ソースプログラムの動作時に変化する情報と処理とを解析し、解析結果を出力することを可能とした、また、複数ファイルに渡って解析を行うことを可能にしたソースプログラムの静的解析装置を提供することにある。
【０００８】
【課題を解決するための手段】
本発明によれば前記目的は、ソースプログラムを静的に解析しその解析結果を出力するソースプログラムの静的解析装置において、複数の前記ソースプログラムを入力可能な入力手段と、リソースの確保と解放との対応及び前記リソースの占有と占有解除との対応をチェックするルールを記述したルールファイルに基づいて前記入力手段により入力された前記ソースプログラムを解析する構造解析手段と、前記構造解析手段の解析結果を出力する出力手段とを備えることにより達成される。
【０００９】
また、前記目的は、前記構造解析手段が、前記入力手段により入力された前記ソースプログラムの処理の流れを制御構造ツリーに展開する制御構造ツリー作成手段を含むことにより達成される。
【００１０】
また、前記目的は、前記構造解析手段が、前記ルールファイルを参照して前記制御構造ツリーから前記リソースの確保と解放との処理手順を前記リソースの使用を管理するリソース使用管理テーブルに書き込み、前記リソースの確保と解放との処理順序をチェックすることにより達成される。
【００１１】
さらに、前記目的は、前記構造解析手段が、前記ルールファイルを参照して前記制御構造ツリーから前記リソースの占有と占有解除との処理手順を前記リソースの使用を管理するリソース使用管理テーブルに書き込み、前記リソースの占有と占有解除との処理順序をチェックすることにより達成される。
【００１２】
前述において、構造解析手段は、１つのソースプログラムを最後まで読み込むと、引き続き指定されたソースプログラムを読み込み、この間リソース使用管理テーブルの情報を保持し、複数のファイルに亘るリソースの確保と解放のチェックを行うことが可能である。
【００１３】
本発明は、前述したような手段を有することにより、ソースプログラムの動作中に変化する情報と処理とを、ソースプログラムを動作させることなく解析することができる。そのため、ソースプログラムの実行環境を用意する必要なく、従来の動的解析装置の機能の一部を実現することができる。
【００１４】
また、本発明は、ソースプログラムの開発段階で誤りを検出し、ソースプログラム製作者に通知することにより、ソースプログラム製作段階での不良を削減することができる。
【００１５】
【発明の実施の形態】
以下、本発明によるソースプログラムの静的解析装置の実施形態を図面により詳細に説明する。
【００１６】
図１は本発明の一実施形態によるソースプログラムの静的解析装置の構成を示すブロック図である。図１において、１０はソースプログラム、１１は静的解析装置、１２は解析結果、１１０は制御構造ツリー作成部、１１１は制御構造ツリー、１１２は構造解析部、１１３は解析結果バッファ、１１４は解析結果編集部、１１５は解析結果出力部、１１６はルールファイル蓄積部、１１７はルールファイル編集部、１１８はリソース使用管理テーブルである。
【００１７】
本発明の実施形態による静的解析装置１１は、制御構造ツリー作成部１１０、制御構造ツリー１１１、構造解析部１１２、解析結果バッファ１１３、解析結果編集部１１４、解析結果出力部１１５、ルールファイル蓄積部１１６、チェックすべき関数の変更、追加等のルールファイルの編集を行うルールファイル編集部１１７、メモリ、ファイル、通信用ソケット等のリソース使用管理テーブル１１８を備えて構成される。そして、静的解析装置１１は、ソースプログラム１０を読み込み、制御構造解析ツリー作成部１１０においてソースプログラム１０を制御構造ツリー１１１に展開する。構造解析部１１２は、ルールファイル蓄積部１１６に蓄積されたファイル内容に基づいて制御構造ツリー１１１を解析し、ルールファイル蓄積部１１６から作成されるリソース使用管理テーブル１１８と解析結果バッファ１１３とに対して、逐次解析結果を出力する。解析結果編集部１１４は、解析結果バッファ１１３の解析結果を編集し出力形式のエラーメッセージを作成する。解析結果出力部１１５は、解析結果編集部１１４から解析結果を受け取り、解析結果を解析結果１２として出力する。
【００１８】
図２は本発明の実施形態による静的解析装置１１での処理動作の概要を説明するフローチャートであり、次に、これについて説明する。
【００１９】
（１）まず、静的解析装置１１は、ソースプログラム１０を読み込む。このとき、ソースプログラム１０に複数のファイルが指定された場合、続けて次のファイルを読み込む。静的解析装置１１が解析可能なソースプログラム１０は、Ｃ言語やＶｉｓｕａｌ　Ｃ＋＋やＪａｖａ（登録商標）等であり、各言語に対応する静的解析装置１１を用意することにより、それぞれの言語の解析が可能となる（ステップＳ１）。
【００２０】
（２）次に、静的解析装置１１は、制御構造ツリー作成部１１０に、制御構造ツリー１１１を作成させる。この制御構造ツリー作成の詳細な処理については、図３、図４を参照して後述する（ステップＳ２）。
【００２１】
（３）制御構造ツリー１１１の作成後、静的解析装置１１は、ルールファイル蓄積部１１６内のルールファイルを読み込む。ルールファイル蓄積部１１６には、静的解析装置１１がチェックするリソースの確保／解放関数の組とリソース確保の成功／失敗時の確認手段と、リソースの占有／占有解除関数の組とリソース占有の成功／失敗時の確認手段とが定義されている。ルールファイル蓄積部１１６のルールファイルの記述形式については、図９を参照して後述する（ステップＳ３）。
【００２２】
（４）次に、静的解析装置１１は、ルールファイル蓄積部１１６内のルールファイルを元に、リソース使用管理テーブル１１８を作成する。リソース使用管理テーブル１１８は、ルールファイル蓄積部１１６に定義されたリソース確保／解放、占有／占有解除関数名を抜き出して作成される。リソース使用管理テーブル１１８の構造については、図１０を参照して後述する（ステップＳ４）。
【００２３】
（５）リソース使用管理テーブル１１８の作成後、静的解析装置１１内の構造解析部１１２は、ルールファイル蓄積部１１６内のルールファイルに基づいて制御構造ツリー１１１を解析する。この制御構造ツリー１１１の解析の詳細な処理については、図５、図６を参照して後述する（ステップＳ５）。
【００２４】
（６）静的解析装置１１は、構造解析部１１２による解析結果を一旦解析結果バッファに蓄積した後、編集処理を行って、エラーがあれば、エラーメッセージを作成する。解析結果編集部１１４は、リソース使用管理テーブル１１８の内容と解析結果バッファ１１３に蓄積された解析結果とを組み合わせ、解析結果出力部１１５に出力する（ステップＳ６）。
【００２５】
（７）その後、静的解析装置１１は、ソースプログラム１０の解析結果１２を出力する。解析結果１２の出力形式と出力例とについては、図１１を参照して後述する（ステップＳ７）。
【００２６】
図３は前述のステップＳ２での制御構造ツリー作成部１１０の制御構造ツリー作成処理を説明するフローチャートであり、次に、これについて説明する。
【００２７】
（１）制御構造ツリー作成の処理が開始されると、まず、ソースプログラム１０が終了するまで処理を繰り返すことを設定し、ソースプログラム１０から１命令を読み込む（ステップＳ２１、Ｓ２２）。
【００２８】
（２）ステップＳ２２で読み込んだ１命令が条件分岐命令であるか否かの判定を行い、条件分岐命令でない場合、その１命令の行を制御構造ツリーに書き込む（ステップＳ２３、Ｓ２５）。
【００２９】
（３）ステップＳ２３の判定で、読み込んだ１命令が条件分岐命令であった場合、ツリー分岐処理を行う（ステップＳ２４）。
【００３０】
図４は前述したステップＳ２４でのツリー分岐処理を説明するフローチャートであり、次に、これについて説明する。
【００３１】
（１）ツリー分岐処理が開始されると、初めに新たなツリーの枝を作成し、その枝に対し分岐が終了するまで処理を繰り返すことを設定する（ステップＳ２４１、Ｓ２４２）。
【００３２】
（２）ファイルから１命令を読み込み、その１命令が条件分岐命令であるか否かを判定する。この判定で、読み込んだ１命令が条件分岐命令でなかった場合、その命令を制御構造ツリーに書き込む（ステップＳ２４３、Ｓ２４４、Ｓ２４６）。（３）ステップＳ２４４の判定で、読み込んだ１命令が条件分岐命令であった場合、再び、ツリー分岐処理を呼び、その命令についてステップＳ２４１からの処理を続ける。そして、ツリー分岐処理が終了したら、図３のステップＳ２１に戻って処理を続ける（ステップＳ２４５）。
【００３３】
図５は図２のステップＳ５での構造解析部１１２による構造解析処理を説明するフローチャートであり、次に、これについて説明する。
【００３４】
（１）まず、リソース使用管理テーブル１１８に出力された関数の行数をクリアし、制御構造ツリー１１１を１つ読み込み、制御構造ツリー終了まで解析処理を繰り返すことを設定する（ステップＳ５１、Ｓ５２）。
【００３５】
（２）読み込んだ制御構造ツリーの解析処理を実行する。この解析処理の詳細については、図６を参照して後述する（ステップＳ５３）。
【００３６】
（３）未解析の制御構造ツリーが存在するか否かを判定し、存在する場合、ステップＳ５１からの処理に戻って処理を繰り返し、未解析の制御構造ツリーが存在しなかった場合、構造解析処理を終了する（ステップＳ５４）。
【００３７】
図６は前述したステップＳ５３での制御構造ツリーの解析処理を説明するフローチャートであり、次に、これについて説明する。
【００３８】
（１）読み込んだ制御構造ツリー１１１に関数が含まれていた場合、その関数がルールファイル蓄積部１１６に記載されたリソース確保／占有関数と一致するか否かの判定を行い、一致する場合、リソース使用管理テーブル１１８に検出したリソース確保／占有関数の行数を出力する（ステップＳ５３１、Ｓ５３２）。
【００３９】
（２）次に、リソース確保／占有関数の直後に、ルールファイル蓄積部１１６の定義通りにリソース確保／占有の確認をしているか否かの判定を行い、確認がなされている場合、ステップＳ５３１からの処理に戻って処理を繰り返す（ステップＳ５３３）。
【００４０】
（４）ステップＳ５３３の判定で、ルールファイル蓄積部１１６の定義通りにリソース確保／占有の確認がなされていなかった場合、解析結果バッファ１１３にリソース確保／占有の確認をしていないというエラーを出力し、ステップＳ５３１からの処理に戻って処理を繰り返す（ステップＳ５３４）。
【００４１】
（５）ステップＳ５３１の判定で、制御構造ツリー１１１に含まれていた関数がルールファイル蓄積部１１６に記載されたリソース確保／占有関数と一致しなかった場合、その関数がルールファイル蓄積部１１６に記載されたリソース解放／占有解除関数と一致するか否かを判定し、一致しない場合、制御構造ツリー解析処理を終了する（ステップＳ５３５）。
【００４２】
（６）ステップＳ５３５の判定で、関数がルールファイル蓄積部１１６に記載されたリソース解放／占有解除関数と一致した場合、リソース使用管理テーブル１１８に検出したリソース解放／占有解除関数の行数を出力し、リソース使用管理テーブル１１８を参照して、リソースの確保／解放、占有／占有解除関数の使用がルールファイル蓄積部１１６の定義と一致するか否か判定する（ステップＳ５３６、Ｓ５３７）。
【００４３】
（７）ステップＳ５３７の判定で、リソースの確保／解放、占有／占有解除関数の使用がルールファイル蓄積部１１６の定義と一致した場合、制御構造ツリー解析処理を終了し、一致しなかった場合、解析結果バッファ１１３にエラー情報を出力し、制御構造ツリー解析処理を終了する。処理終了後、図５の処理に戻る（ステップＳ５３８）。
【００４４】
図５、図６により説明した構造解析の処理は、リソースの実体を必要とすることなく、リソース使用管理テーブル１１８で管理されているメモリ、ファイル、通信用ソケット等のリソースの情報を使用して行うことができる。また、ソースプログラムの任意の範囲についての構造解析を行うことができる。
【００４５】
次に、前述までに説明した本発明の実施形態による解析装置での処理をソースプログラムの例を用いて具体的に説明する。
【００４６】
図７はＣ言語によるソースプログラム１０の記述例の一部とこれにより生成した制御構造ツリーの例を説明する図である。
【００４７】
図７（ａ）に示すＣ言語によるソースプログラム１０の記述例は、条件分岐命令“ｉｆ”と“ｅｌｓｅ”とが存在する。ここで、“ｅｌｓｅ”は“ｉｆ”の補集合を示し、図３のステップＳ２４におけるツリー分岐処理において“ｉｆ”を用いた条件式に置換され、図７（ｂ）に示すようなツリーへ展開される。制御構造ツリー１１１は、ツリーの最上部から最下部までのルートを網羅して生成され、図７（ｂ）に示すツリーは、図７（ｃ）及び図７（ｄ）に示す２つの制御構造ツリー１１１に生成される。
【００４８】
図８はＣ言語によるソースプログラム１０の他の記述例の一部とこれにより生成した制御構造ツリーの例を説明する図である。
【００４９】
図８（ａ）に示すＣ言語によるソースプログラムの例の３行目、４行目は、図７（ａ）に示した“処理Ａ”に、７行目、８行目は、図７（ａ）に示した“処理Ｂ”に相当する。制御構造ツリー作成部１１０において、図８（ａ）に示すプログラムは、図８（ｂ）に示されるツリーへ展開され、このツリーから図８（ｃ）、図８（ｄ）、図８（ｅ）に示すような制御構造ツリー１１１が生成される。
【００５０】
図９はルールファイル蓄積部１１６のルールファイルの記述形式を示す図である。ルールファイルにおいて、記号“｜”は、複数の値を定義するときの区切り文字として用いられる。リソース確保／占有関数の成功／失敗時の返り値が存在しない場合の返り値は“−”となり、成功時と失敗時の返り値が両方共“−”の場合、リソース確保／占有関数の成功／失敗の判定を行わない。また、リソース確保／占有関数に対するリソース解放／占有解除関数が存在しない場合、リソース解放／占有解除関数名は空欄となる。
【００５１】
図９（ａ）に示すように、ルールファイルは、“リソース確保関数”と“リソース開放関数”との間に、“リソース確保成功時の返り値”、“リソース確保失敗時の返り値”を有する行と、“リソース占有関数”と“リソース占有解除関数”との間に、“リソース占有成功時の返り値”、“リソース占有失敗時の返り値”を有する行とにより構成される。
【００５２】
図９（ａ）に対応するルールファイルの具体的な記述例を図９（ｂ）に示している。この図９（ｂ）において、リソース確保関数が“関数Ａ”であり、それに対するリソース解放関数が“関数Ｂ”であると定義している。また、リソース占有関数が“関数Ｃ”であり、それ対するリソース占有解除関数が“関数Ｄ”であると定義している。そして、関数Ａによるリソース確保の成功時には“１”、失敗時には“０”または“ＮＵＬＬ”が返り、関数Ｃによるリソース占有の成功時の返り値はなく、失敗時には“−１”または“０”が返ることを示している。
【００５３】
図１０は図９により説明したルールファイル蓄積部１１６のルールファイルから作成されたリソース使用管理テーブル１１８の例を示す図であり、次に、これについて説明する。
【００５４】
図１０（ａ）〜図１０（ｃ）に示すように、リソース使用管理テーブル１１８には、“関数Ａ”、“関数Ｂ”、“関数Ｃ”、“関数Ｄ”が出力されている。構造解析部１１２は、制御構造ツリー１１１からこれらの関数を検出したとき、その何行目かを示す行数がリソース使用管理テーブル１１８に出力されている。
【００５５】
次に、図８（ａ）に例示したソースプログラムから作成した制御構造ツリーの解析処理についてを具体的に説明する。まず、図８（ｃ）に示す制御構造ツリーの解析処理の手順を説明する。
【００５６】
図８（ｃ）に示す制御構造ツリーの１行目から“関数Ａ”を検出し、リソース使用管理テーブル１１８の“関数Ａ”の行に“１”を出力する。ここで“関数Ａ”の返り値を“ｘ”としている。
２行目から条件分岐命令“ｉｆ”を検出し、新たなツリーの枝を作成する。ここで、“ｘ＝＝０”は、関数Ａのリソース確保失敗時の判定を示す。
３行目からの出力命令“ｐｒｉｎｔｆ”は、ルールファイル蓄積部１１６に定義されていないため、次に進む。
４行目から関数終了命令“ｅｘｉｔ”により、関数を終了する。５行目は実行されない。
【００５７】
次に、図８（ｄ）に示す制御構造ツリーの解析処理の手順を説明する。
【００５８】
１行目から“関数Ａ”を検出し、リソース使用管理テーブル１１８の“関数Ａ”の行に“１”を出力する。
６行目から条件分岐命令“ｅｌｓｅ　ｉｆ”を検出し、新たなツリーの枝を作成する。ここで、“ｘ＝＝１”は、関数Ａのリソース確保成功時の判定を示す。
【００５９】
７行目からの出力命令“ｐｒｉｎｔｆ”は、ルールファイル蓄積部１１６に定義されていないため、次に進む。
８行目から“関数Ｂ”を検出し、リソース使用管理テーブル１１８の“関数Ｂ”の行に“８”を出力する。この“関数Ｂ”は、１行目の“関数Ａ”に対応し、ルールファイル蓄積部１１６の定義と一致する。
１０行目から“関数Ｂ”を検出し、リソース使用管理テーブル１１８の“関数Ｂ”の行に“１０”を出力する。すでに、８行目に“関数Ｂ”が存在するため、ルールファイル蓄積部１１６の定義と一致しない。解析結果バッファに、検出したエラー情報と関数Ｂの行数“１０”を出力する。
【００６０】
前述した図１０（ｂ）、図１０（ｃ）に示すリソース管理テーブルは、それぞれ、図８（ｃ）及び図８（ｄ）に示す制御構造ツリー１１１を構造解析部１１２において解析した後のリソース使用管理テーブル１１８を示し、“関数Ａ”及び“関数Ｂ”を呼び出した行数がそれぞれ出力されている。
【００６１】
図１１は図８に示すソースプログラムの解析結果１２の出力形式と出力例とを示す図である。
【００６２】
図１１に示すように、解析結果１２としては、解析対象となったプログラム名と関数名、エラー検出行数、解析結果（エラー）メッセージが出力される。図示例では、プログラム名として“ソースプログラムＡ”が出力され、解析結果（エラー）メッセージとして、「リソース開放関数に対応するリソース確保関数がありません」が出力されている。
【００６３】
図１２はソースプログラム１０のさらに他の例と作成された制御構造ツリーの例を示す図である。この図に示すプログラムは、関数をまたいでリソースの確保／解放関数が実行される場合の例である。また、このプログラムは、複数のファイルに亘るソースプログラムの場合もある。すなわち、本発明の静的解析装置は、複数関数間の解析も可能なものである。この場合、図１２（ａ）における関数Ｘ、Ｙ、Ｚのそれぞれに続く部分がそれぞれ異なるファイルに記述されている。図１２の示すソースプログラムのルールファイル蓄積部１１６のルールファイルは図９（ｂ）に示したものと同一であるとする。
【００６４】
図１２（ａ）に示すプログラムは、“関数Ｘ”によりリソース確保関数“関数Ａ”を実行した後、条件分岐命令“ｉｆ”によってリソースの確保が成功したときに“関数Ｙ”を、失敗した時に“関数Ｚ”を呼び出すというものである。
【００６５】
図１２（ｂ）及び図１２（ｃ）は、図１２（ａ）に示すプログラムの制御構造ツリー１１１を示している。“関数Ｙ”及び“関数Ｚ”は、制御構造ツリー１１１の作成時に“関数Ｘ”へ展開されている。図１２（ｂ）では、“関数Ｂ”が“関数Ａ”で確保されたリソースを解放しているか否か判断し、同じリソースを解放している場合、エラー無く解析を終了する。しかし、“関数Ｂ”の解放するリソースが“関数Ａ”が確保したリソースと異なり、リソースが解放されずに“関数Ｘ”が終了する場合、解析結果バッファ１１３に“関数Ａ”の確保したリソースが解放されないエラーと“関数Ｂ”の解放するリソースが存在しないエラーとを出力する。図１２（ｃ）は、“関数Ａ”でリソースの確保が失敗したとき、“関数Ｘ”を終了する。このとき、“関数Ｘ”はエラーを検出しない。
【００６６】
前述した本発明の実施形態によるソースプログラムの静的解析装置によれば、複数関数間のリソースの確保と解放との対応、及び、リソースの占有と占有解除との対応をチェックすることができ、同様にして、複数ファイル間の関数のリソース確保／解放の対応及びリソース占有／占有解除の対応をチェックすることもできる。
【００６７】
前述した本発明の実施形態による各処理は、処理プログラムとして構成することができ、この処理プログラムは、ＨＤ、ＤＡＴ、ＦＤ、ＭＯ、ＤＶＤ−ＲＯＭ、ＣＤ−ＲＯＭ等の記録媒体に格納して提供することができる。
【００６８】
【発明の効果】
以上説明したように本発明によれば、ソースプログラムを実行することなく、動作時に変化する情報と処理とを解析することができ、従来の動的解析装置に必要なプログラムを実行させる環境とそれを構築する時間とを不要とすることができる。
【００６９】
また、本発明は、ソースプログラムの解析に使用するパターンファイルが異なる静的解析装置においても使用可能であるため、解析の対象を容易に決定することができ、プログラムの改訂時に自由に対応できる。
【００７０】
さらに、本発明によれば、ソースプログラムのコーディング時にテストを行うことができるため、ソースプログラムの品質を向上させることができ、開発の初期段階で不良を検出し、後工程で発生する修正のコストと時間とを最小限に止めることができる。
【図面の簡単な説明】
【図１】本発明の一実施形態によるソースプログラムの静的解析装置の構成を示すブロック図である。
【図２】本発明の実施形態による静的解析装置での処理動作の概要を説明するフローチャートである。
【図３】制御構造ツリー作成部での制御構造ツリー作成処理を説明するフローチャートである。
【図４】図３のフローにおけるツリー分岐処理を説明するフローチャートである。
【図５】構造解析部１１２による構造解析処理を説明するフローチャートである。
【図６】図５のフローにおける制御構造ツリーの解析処理を説明するフローチャートである。
【図７】Ｃ言語によるソースプログラムの記述例の一部とこれにより生成した制御構造ツリーの例を説明する図である。
【図８】Ｃ言語によるソースプログラムの他の記述例の一部とこれにより生成した制御構造ツリーの例を説明する図である。
【図９】ルールファイル蓄積部のルールファイルの記述形式を示す図である。
【図１０】図９により説明したルールファイル蓄積部のルールファイルから作成されたリソース使用管理テーブルの例を示す図である。
【図１１】図８に示すソースプログラムの解析結果の出力形式と出力例を示す図である。
【図１２】関数をまたいでリソースの確保／解放関数が実行されるソースプログラムの例と作成された制御構造ツリーの例を示す図である。
【符号の説明】
１０　ソースプログラム
１１　静的解析装置
１２　解析結果
１１０　制御構造ツリー作成部
１１１　制御構造ツリー
１１２　構造解析部
１１３　解析結果バッファ
１１４　解析結果編集部
１１５　解析結果出力部
１１６　ルールファイル蓄積部
１１７　ルールファイル編集部
１１８　リソース使用管理テーブル
【図１】
2004145381.tif 000003
【図２】
2004145381.tif 000004
【図３】
2004145381.tif 000005
【図４】
2004145381.tif 000006
【図５】
2004145381.tif 000007
【図６】
2004145381.tif 000008
【図７】
2004145381.tif 000009
【図８】
2004145381.tif 000010
【図９】
2004145381.tif 000011
【図１０】
2004145381.tif 000012
【図１１】
2004145381.tif 000013
【図１２】
2004145381.tif 000014