(57)【特許請求の範囲】
【請求項１】
プログラムソースファイルからの抽出の対象となる関数に、正規表現の文字列を付加して、検索文字列を作成する、正規表現付加部と、
前記プログラムソースファイルに対して、前記正規表現付加部によって作成された前記検索文字列を用いて検索を行い、前記検索文字列を抽出する、ソースファイル検索部と、
前記正規表現とは別の排除用の正規表現のリストから、前記排除用の正規表現の文字列を抽出し、そして、抽出した前記排除用の正規表現の文字列毎に、抽出の対象となる前記関数に、当該排除用の正規表現の文字列を付加して、排除文字列を作成し、前記ソースファイル検索部による抽出の結果から、前記排除文字列に該当する箇所を排除する、文字列排除部と、
を備えている、ことを特徴とするプログラム分析装置。
【請求項２】
前記プログラムソースファイルの行毎に、当該行に含まれる関数の前後に位置する文字列を抽出し、抽出した前記文字列を用いて、前記抽出の対象となる関数に付加する正規表現を作成する、正規表現生成処理部を更に備えている、
請求項１に記載のプログラム分析装置。
【請求項３】
前記ソースファイル検索部が、前記抽出の結果として、前記検索文字列、前記検索文字列を含むプログラムソースファイルの識別子、及び前記検索文字列が記述された行の番号を特定する情報を出力する、
請求項１または２に記載のプログラム分析装置。
【請求項４】
前記文字列排除部が、前記排除文字列と前記抽出の結果とを対比して、前記排除文字列に一致している前記検索文字列を特定し、前記抽出の結果から、前記一致している前記検索文字列、前記一致している前記検索文字列を含むプログラムソースファイルの識別子、及び前記一致している前記検索文字列が記述された行の番号を排除する、
請求項３に記載のプログラム分析装置。
【請求項５】
前記文字列排除部によって前記排除文字列に該当する箇所が排除された前記抽出の結果に基づいて、前記プログラムソースファイル毎に、当該プログラムソースファイルに存在している関数及びその数を特定するデータを作成し、作成した前記データを出力する、出力部を更に備えている、
請求項４に記載のプログラム分析装置。
【請求項６】
特定の関数と前記抽出の結果とを対比して、前記特定の関数を含む前記検索文字列を特定し、特定した前記検索文字列を含むプログラムソースファイルの識別子、及び特定した前記検索文字列が記述された行の番号に基づいて、特定した前記検索文字列を含むプログラムソースファイル中の前記特定の関数を、他の関数に置き換える、関数置換部を更に備えている、
請求項３〜５のいずれかに記載のプログラム分析装置。
【請求項７】
（ａ）プログラムソースファイルからの抽出の対象となる関数に、正規表現の文字列を付加して、検索文字列を作成する、ステップと、
（ｂ）前記プログラムソースファイルに対して、前記（ａ）のステップによって作成された前記検索文字列を用いて検索を行い、前記検索文字列を抽出する、ステップと、
（ｃ）前記正規表現とは別の排除用の正規表現のリストから、前記排除用の正規表現の文字列を抽出し、そして、抽出した前記排除用の正規表現の文字列毎に、抽出の対象となる前記関数に、当該排除用の正規表現の文字列を付加して、排除文字列を作成し、前記（ｂ）のステップによる抽出の結果から、前記排除文字列に該当する箇所を排除する、ステップと、
を有する、ことを特徴とするプログラム分析方法。
【請求項８】
コンピュータに、
（ａ）プログラムソースファイルからの抽出の対象となる関数に、正規表現の文字列を付加して、検索文字列を作成する、ステップと、
（ｂ）前記プログラムソースファイルに対して、前記（ａ）のステップによって作成された前記検索文字列を用いて検索を行い、前記検索文字列を抽出する、ステップと、
（ｃ）前記正規表現とは別の排除用の正規表現のリストから、前記排除用の正規表現の文字列を抽出し、そして、抽出した前記排除用の正規表現の文字列毎に、抽出の対象となる前記関数に、当該排除用の正規表現の文字列を付加して、排除文字列を作成し、前記（ｂ）のステップによる抽出の結果から、前記排除文字列に該当する箇所を排除する、ステップと、
を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムソースファイルの分析を行なうための、プログラム分析装置、プログラム分析方法、及びこれらを実現するためのプログラムに関する。
【背景技術】
【０００２】
一般に、ソフトウェア開発においては、プログラムの欠陥（バグ）の検出、及び新規のプログラムの作成等のため、プログラムソースファイルの分析を行うことが必要となる場合がある。プログラムソースの分析は、例えば、プログラム言語に用意されている文字列検索コマンドに、対象となる関数名を順番に読み込ませ、プログラムソースファイルから、使用されている関数を抽出することによって行なわれている。
【０００３】
具体的には、特許文献１は、入力された検索クエリに基づいて、知識データベースを参照しながら、データベースに登録されているプログラムソースファイルを検索するシステムを開示している。知識データベースには、抽出の対象となるソースコードに直接的又は間接的に関連する情報、例えば、プログラムに含まれていたバグに関する情報、変数の依存関係に関する情報等が格納されている。特許文献１に開示されたシステムでは、知識データベースを参照して検索が実行されるので、抽出精度の向上が図られると考えられる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００８−１１７２８０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、プログラムソースファイルから、直接、文字列検索コマンドによって関数名文字列の検索を行なった場合は、目的の関数の抽出精度が低くなる場合がある。例えば、「コメント部分の関数名が抽出された場合」、「文字列の中に抽出したい関数名と同じ文字の並びがあり、この文字列が誤って抽出された場合（"111"を抽出したいが、"abc111efg"が抽出されてしまった場合）」等である。
【０００６】
これに対して、特許文献１に開示されたシステムでは、上述したように、知識データベースを参照して検索が実行されるので、文字列検索コマンドのみを用いて検索を行なう場合に比べて、抽出精度の向上は図られると考えられる。
【０００７】
しかしながら、特許文献１に開示されたシステムでは、抽出精度は、知識データベースに登録されている情報の内容に大きく影響されるので、知識データベースの完成度が低い場合は、誤った関数名が抽出されることがある。更に、誤った関数名が抽出された場合は、誤った関数名もそのまま出力されてしまう。このため、特許文献１に開示されたシステムであっても、依然、抽出精度が低くなる可能性が残っている。
【０００８】
本発明の目的の一例は、上記問題を解消し、プログラムソースファイルから関数を抽出する際の抽出精度の向上を図り得る、プログラム分析装置、プログラム分析方法、及びプログラムを提供することにある。
【課題を解決するための手段】
【０００９】
上記目的を達成するため、本発明の一側面におけるプログラム分析装置は、
プログラムソースファイルからの抽出の対象となる関数に、正規表現の文字列を付加して、検索文字列を作成する、正規表現付加部と、
前記プログラムソースファイルに対して、前記正規表現付加部によって作成された前記検索文字列を用いて検索を行い、前記検索文字列を抽出する、ソースファイル検索部と、
抽出の対象となる前記関数又は前記関数とは別の関数に、前記正規表現とは別の排除用の正規表現の文字列を付加して、排除文字列を作成し、前記ソースファイル検索部による抽出の結果から、前記排除文字列に該当する箇所を排除する、文字列排除部と、
を備えている、ことを特徴とする。
【００１０】
また、上記目的を達成するため、本発明の一側面におけるプログラム分析方法は、
（ａ）プログラムソースファイルからの抽出の対象となる関数に、正規表現の文字列を付加して、検索文字列を作成する、ステップと、
（ｂ）前記プログラムソースファイルに対して、前記（ａ）のステップによって作成された前記検索文字列を用いて検索を行い、前記検索文字列を抽出する、ステップと、
（ｃ）抽出の対象となる前記関数又は前記関数とは別の関数に、前記正規表現とは別の排除用の正規表現の文字列を付加して、排除文字列を作成し、前記（ｂ）のステップによる抽出の結果から、前記排除文字列に該当する箇所を排除する、ステップと、
を有する、ことを特徴とする。
【００１１】
更に、上記目的を達成するため、本発明の一側面におけるプログラムは、
コンピュータに、
（ａ）プログラムソースファイルからの抽出の対象となる関数に、正規表現の文字列を付加して、検索文字列を作成する、ステップと、
（ｂ）前記プログラムソースファイルに対して、前記（ａ）のステップによって作成された前記検索文字列を用いて検索を行い、前記検索文字列を抽出する、ステップと、
（ｃ）抽出の対象となる前記関数又は前記関数とは別の関数に、前記正規表現とは別の排除用の正規表現の文字列を付加して、排除文字列を作成し、前記（ｂ）のステップによる抽出の結果から、前記排除文字列に該当する箇所を排除する、ステップと、
を実行させることを特徴とする。
【発明の効果】
【００１２】
以上のように本発明によれば、プログラムソースファイルから関数を抽出する際の抽出精度の向上を図ることができる。
【図面の簡単な説明】
【００１３】
【図１】図１は、本発明の実施の形態１におけるプログラム分析装置の構成を示すブロック図である。
【図２】図２は、本発明の実施の形態１におけるプログラム分析装置の検索処理時の動作を示すフロー図である。
【図３】図３は、本発明の実施の形態１におけるプログラム分析装置の排除処理時の動作を示すフロー図である。
【図４】図４は、本実施の形態１におけるプログラム分析装置の検索処理時の具体的動作を説明するための図である。
【図５】図５は、本実施の形態１におけるプログラム分析装置の排除処理時の具体的動作を説明するための図である。
【図６】図６は、本発明の実施の形態２におけるプログラム分析装置の構成を示すブロック図である。
【図７】図７は、図６に示した正規表現生成処理部の構成を具体的に示すブロック図である。
【図８】図８は、本発明の実施の形態２におけるプログラム分析装置の正規表現生成処理時の動作を示すフロー図である。
【図９】図９は、本発明の実施の形態３におけるプログラム分析装置の構成を示すブロック図である。
【図１０】図１０は、図９に示した関数置換部の構成を具体的に示すブロック図である。
【図１１】図１１は、本発明の実施の形態３におけるプログラム分析装置の関数置換処理時の動作を示すフロー図である。
【図１２】図１２は、本発明の実施の形態１〜３におけるプログラム分析装置を実現するコンピュータの一例を示すブロック図である。
【発明を実施するための形態】
【００１４】
（実施の形態１）
以下、本発明の実施の形態１における、プログラム分析装置、プログラム分析方法、及びプログラムについて、図１〜図５を参照しながら説明する。
【００１５】
［装置構成］
最初に、本実施の形態１におけるプログラム分析装置１の構成について図１を用いて説明する。図１は、本発明の実施の形態１におけるプログラム分析装置の構成を示すブロック図である。
【００１６】
図１に示す本実施の形態１におけるプログラム分析装置１は、プログラムソースファイルから、そこで使用されている関数を抽出して、プログラムソースファイルの分析を行なう装置である。図１に示すように、プログラム分析装置１は、主に、正規表現付加部１０と、ソースファイル検索部２０と、文字列排除部４０とを備えている。
【００１７】
このうち、正規表現付加部１０は、プログラムソースファイルからの抽出の対象となる関数に、正規表現の文字列を付加して、検索文字列を作成する。また、ソースファイル検索部２０は、プログラムソースファイルに対して、正規表現付加部１０によって作成された検索文字列を用いて、検索を行い、プログラムソースファイルから検索文字列を抽出する。
【００１８】
また、文字列排除部４０は、まず、抽出の対象となる関数、又はこの関数とは別の関数に、上述の正規表現とは別の排除用の正規表現の文字列を付加して、排除文字列を作成する。次に、文字列排除部４０は、ソースファイル検索部２０による抽出の結果から、排除文字列に該当する箇所を排除する。
【００１９】
このように、プログラム分析装置１は、正規表現を用いて作成した検索文字列を用いることで、確実に抽出対象となった関数を抽出する。そして、抽出された関数の中に、誤って抽出された関数が含まれていても、プログラム分析装置１は、これらを、排除文字列を用いて排除する。このため、プログラム分析装置１によれば、プログラムソースファイルから関数を抽出する際の抽出精度の向上が図られる。
【００２０】
ここで、本実施の形態１におけるプログラム分析装置１の構成を更に具体的に説明する。図１に示すように、本実施の形態１では、プログラム分析装置１は、上述の正規表現付加部１０、ソースファイル検索部２０、及び文字列排除部４０に加え、抽出結果ファイル出力部３０と、最終抽出結果ファイル出力部５０とを備えている。
【００２１】
更に、プログラム分析装置１は、各部による処理によって得られた情報を格納するために、関数格納部６１と、正規表現格納部６２と、ソースファイル格納部６３と、検索文字列格納部６４と、抽出結果格納部６５と、抽出結果ファイル格納部６６と、排除用正規表現格納部７１と、排除文字列格納部７２と、最終抽出結果格納部７３と、最終抽出結果ファイル格納部７４とを備えている。
【００２２】
また、本実施の形態１では、正規表現付加部１０は、関数読込部１１と、正規表現読込部１２とを備えている。関数読込部１１は、検索に用いられる関数のリストを格納している関数格納部６１から、検索の対象となる任意の関数（以下「検索関数」と表記する。）を選択し、選択した関数の名称を正規表現読込部１２に引き渡す。
【００２３】
正規表現読込部１２は、正規表現のリストを格納している正規表現格納部６２から、正規表現を読み込み、これを検索関数の名称の前後に付与して、検索文字列を作成する。また、正規表現読込部１２は、作成した検索文字列を、検索文字列格納部６４に格納する。このとき、正規表現読込部１２は、複数パターンの検査文字列を作成することができる。また、本実施の形態１では、後述する実施の形態２とは異なり、使用される正規表現は、予め、開発者によって作成され、正規表現格納部６２に格納されている。
【００２４】
ソースファイル検索部２０は、本実施の形態１では、まず、検索文字列格納部６４から、検索に用いる検索文字列を読み込み、更に、ソースファイル格納部６３が格納しているプログラムソースファイルを読み込む。なお、本実施の形態１において、プログラムソースファイルは、Ｃ言語で記述されている。また、ソースファイル格納部６３は、予め、複数個のプログラムソースファイルを格納している。
【００２５】
そして、ソースファイル検索部２０は、１のプログラムソースファイル毎に、読み込んだ検索文字列を用いて、当該プログラムソースファイルに対して検索を実行する。その後、ソースファイル検索部２０は、検索によってヒットした行を抽出し、抽出結果を、抽出結果格納部６５に格納する。具体的には、ソースファイル検索部２０は、抽出結果として、検索文字列、検索文字列を含むプログラムソースファイルの識別子、及び検索文字列が記述された行の番号を特定する情報を、抽出結果格納部６５に出力する。
【００２６】
また、ソースファイル検索部２０は、複数の検索文字列が作成されている場合は、検索文字列毎に、ソースファイル格納部６３に格納されている全プログラムソースファイルを検索する。そして、ソースファイル検索部２０は、検索文字列毎に、全プログラムソースファイルからの抽出結果を、抽出結果格納部６５に格納する。
【００２７】
抽出結果ファイル出力部３０は、抽出結果格納部６５に格納されている抽出結果を読み込み、読み込んだ抽出結果を、予め設定されたファイル形式に変換して、抽出結果ファイルとする。また、抽出結果ファイル出力部３０は、抽出結果ファイルを、抽出結果ファイル格納部６６に出力する。
【００２８】
また、文字列排除部４０は、排除関数読込部４１と、排除用正規表現読込部４２と、排除処理部４３とを備えている。排除関数読込部４１は、誤抽出された関数を排除するため、関数格納部６１に格納されている関数のリストから、任意の関数（以下「排除関数」と表記する。）を選択し、選択した排除関数の名称を排除用正規表現読込部４２に引き渡す。
【００２９】
このとき、抽出結果から誤抽出の関数を排除する点からは、本実施の形態１では、検索関数として選択された関数が、全て、排除関数としても選択される。また、排除関数は、関数格納部６１に格納されている関数のリスト以外のリストに予め用意されていても良く、この場合は、このリストから選択される。
【００３０】
排除用正規表現読込部４２は、排除用の正規表現のリストを格納している排除用正規表現格納部７１から、排除用正規表現を読み込み、これを排除関数の名称の前後に付与して、排除文字列を作成する。このとき、排除用正規表現読込部４２は、選択された排除関数毎に、全排除用正規表現を用いて、排除文字列を作成する。
【００３１】
また、排除用正規表現読込部４２は、作成した排除文字列を、排除文字列格納部７２に格納する。本実施の形態１では、排除用の正規表現も、予め、開発者によって作成され、排除用正規表現格納部７１に格納されている。
【００３２】
排除処理部４３は、まず、抽出結果ファイル格納部６６から、抽出結果ファイルを読み込み、更に、排除文字列格納部７２から排除文字列を読み込む。そして、排除処理部４３は、抽出結果ファイルに対して、排除文字列を用いて検索を実行し、ヒットした行を抽出結果ファイルから取り除く。
【００３３】
具体的には、排除処理部４３は、排除文字列と抽出結果ファイルとを対比して、排除文字列に一致している検索文字列を特定する。そして、排除処理部４３は、抽出結果ファイルから、一致している検索文字列、一致している検索文字列を含むプログラムソースファイルの識別子、及び一致している検索文字列が記述された行の番号を排除する。
【００３４】
また、排除処理部４３は、排除文字列格納部７２に格納されている全ての排除文字列を用いて、抽出結果ファイル格納部６６に格納されている全抽出結果ファイルを対象として、上記の検索及び排除を実行する。そして、排除処理部４３は、排除文字列の排除された抽出結果ファイルを、最終抽出結果として、最終抽出結果格納部７３に格納する。
【００３５】
最終抽出結果ファイル出力部５０は、最終抽出結果格納部７３から最終抽出結果を読み込み、読み込んだ最終抽出結果を、設定されたファイル形式に変換して、最終抽出結果ファイルとする。また、最終抽出結果ファイル出力部５０は、最終抽出結果ファイルを、最終抽出結果ファイル格納部７４に出力する。
【００３６】
具体的には、最終抽出結果ファイル出力部５０は、最終抽出結果に基づいて、プログラムソースファイル毎に、各プログラムソースファイルに存在している関数及びその数を特定するデータを作成し、作成したデータを、最終抽出結果ファイルとして出力する。
【００３７】
［装置動作］
次に、本発明の実施の形態１におけるプログラム分析装置１の動作について図２及び図３を用いて説明する。また、本実施の形態１では、プログラム分析装置１を動作させることによって、プログラム分析方法が実施される。よって、本実施の形態１におけるプログラム分析方法の説明は、以下のプログラム分析装置１の動作説明に代える。
【００３８】
最初に、図２を用いて、プログラム分析装置における検索処理について説明する。図２は、本発明の実施の形態１におけるプログラム分析装置の検索処理時の動作を示すフロー図である。
【００３９】
図２に示すように、まず、関数読込部１１が、関数格納部６１から検索の対象となる検索関数を選択し、選択した関数の名称を正規表現読込部１２に引き渡す（ステップＡ１）。
【００４０】
次に、正規表現読込部１２は、正規表現格納部６２から正規表現を読み込み、これを検索関数の名称の前後に付与して、検索文字列を作成する（ステップＡ２）。ステップＡ２では、正規表現読込部１２は、作成した検索文字列を、検索文字列格納部６４に格納する。
【００４１】
次に、ソースファイル検索部２０は、ソースファイル格納部６３から読み込んだプログラムソースファイル毎に、検索文字列格納部６４から読み込んだ検索文字列を用いて、当該プログラムソースファイルに対して検索を実行する（ステップＡ３）。ステップＡ３では、ソースファイル検索部２０は、更に、検索によってヒットした行を抽出し、抽出結果を、抽出結果格納部６５に格納する。
【００４２】
次に、抽出結果ファイル出力部３０は、ステップＡ３で抽出結果格納部６５に格納された抽出結果を読み込み、読み込んだ抽出結果から抽出結果ファイルを作成し、これを抽出結果ファイル格納部６６に出力する（ステップＡ４）。
【００４３】
以上のステップＡ１〜Ａ４の実行により、検索処理が終了する。また、本実施の形態１では、ステップＡ１〜Ａ４は、関数格納部６１に格納されている全ての関数について繰り返し実行される。
【００４４】
続いて、図３を用いて、プログラム分析装置における排除処理について説明する。図３は、本発明の実施の形態１におけるプログラム分析装置の排除処理時の動作を示すフロー図である。
【００４５】
図３に示すように、まず、排除関数読込部４１は、関数格納部６１に格納されている関数のリストから、任意の排除関数を選択し、選択した排除関数の名称を排除用正規表現読込部４２に引き渡す（ステップＢ１）。
【００４６】
次に、排除用正規表現読込部４２は、排除用正規表現格納部７１から排除用正規表現を読み込み、これを排除関数の名称の前後に付与して、排除文字列を作成する（ステップＢ２）。また、ステップＢ２は、選択された排除関数毎に、全排除用正規表現を用いて、実行される。
【００４７】
次に、排除処理部４３は、抽出結果ファイル格納部６６から読み込んだ抽出結果ファイルに対して、排除文字列格納部７２から読み込んだ排除文字列を用いて、検索を実行し、ヒットした行を抽出結果ファイルから取り除く（ステップＢ３）。
【００４８】
ステップＢ３は、排除文字列格納部７２に格納されている全ての排除文字列を用いて、抽出結果ファイル格納部６６に格納されている全ファイルを対象として、実行される。また、排除処理部４３は、排除文字列の排除された抽出結果ファイルを、最終抽出結果として、最終抽出結果格納部７３に格納する。
【００４９】
次に、最終抽出結果ファイル出力部５０は、最終抽出結果格納部７３から最終抽出結果を読み込み、読み込んだ最終抽出結果を用いて、最終抽出結果ファイルを作成し、これを、最終抽出結果ファイル格納部７４に出力する（ステップＢ４）。
【００５０】
［装置動作：具体例］
ここで、本実施の形態１におけるプログラム分析装置１の動作の具体例を、図４及び図５を用いて説明する。最初に、図４を用いて、正規表現付加部１０、ソースファイル検索部２０、及び抽出結果ファイル出力部３０による検索処理について具体的に説明する。図４は、本実施の形態１におけるプログラム分析装置の検索処理時の具体的動作を説明するための図である。
【００５１】
［ステップＡ１、Ａ２］
図４に示すように、まず、関数読込部１１が、関数リスト６１ａから関数を読み込む。次に、正規表現読込部１２が、正規表現リスト６２ａから正規表現を読み込み、検索関数の名称と正規表現とを組み合わせて、正規表現が付加された検索文字列のリスト６４ａを作成する。
【００５２】
具体的には、図４に示すステップＡ１及びＡ２では、各正規表現の”＠”マークの部分が、関数リスト６１ａから取得された関数名に置き換えられている。この置き換えにより、検索文字列が作成されている。
【００５３】
［ステップＡ３］
次に、ソースファイル検索部２０は、プログラムソースファイル群６３ａを構成する全てのソースファイルに対して、プログラムソースファイル・リスト６３ｂと検索文字列リスト６４ａとを用いて検索を実行する。
【００５４】
具体的には、図４に示すステップＡ３では、ソースファイル検索部２０は、プログラムソースファイル毎に、全ての検索文字列について検索を実行する。そして、ソースファイル検索部２０は、検索毎に、ソースファイル名、行番号、及びソース本文を抽出し、これらを抽出結果６５ａとして抽出結果格納部６５（図１参照）に格納する。
【００５５】
［ステップＡ４］
次に、抽出結果ファイル出力部３０は、抽出結果６５ａから、重複しているエントリを排除する。その後、抽出結果ファイル出力部３０は、抽出結果６５ａを、予め設定されたファイル形式に変換して、抽出結果ファイル６８ａを生成し、これを抽出結果ファイル格納部６６に出力する。
【００５６】
具体的には、検索文字列が複数ある場合（検索文字列リスト６４ａ）、抽出結果６５ａにおいて、重複しているエントリが存在している場合が考えられる。この場合、抽出結果ファイル出力部３０は、抽出結果ファイル格納部６６への抽出結果ファイルの出力の前に、重複しているエントリを排除する。図４に示すステップＡ４では、重複しているエントリには、取り消し線が付されている。
【００５７】
そして、まだ、処理が行なわれていない検索関数を用いて、再度、ステップＡ１〜Ａ４が実行される。ステップＡ１〜Ａ４は、関数格納部６１に格納されている全ての関数について繰り返し実行される。
【００５８】
続いて、図５を用いて、文字列排除部４０及び最終抽出結果ファイル出力部５０による排除処理について具体的に説明する。図５は、本実施の形態１におけるプログラム分析装置の排除処理時の具体的動作を説明するための図である。
【００５９】
［ステップＢ１、Ｂ２］
図５に示すように、まず、排除関数読込部４１が、関数リスト６１ａから、排除関数となる関数を読み込む。次に、排除用正規表現読込部４２が、排除用正規表現リスト７１ａから排除用正規表現を読み込み、抽出結果ファイル６８ａから誤抽出を排除し得る排除文字列を作成する。７２ａは、排除文字列のリストを示している。
【００６０】
具体的には、図５に示すステップＢ１及びＢ２では、排除用正規表現の”＠”マークの部分が、関数リスト６１ａから取得された関数名に置き換えられている。この置き換えにより、排除用文字列が作成されている。
【００６１】
［ステップＢ３］
次に、排除処理部４３は、抽出結果ファイル群７３ａを構成する全ての抽出結果ファイルを対象として、誤抽出された行の排除処理を実行する。具体的には、排除処理部４３は、排除文字列の種類の数だけ、抽出結果ファイルを対象とする検索を実施して、抽出結果ファイル群６８ａから誤抽出の行を排除して、最終抽出結果７３ａを作成する。図５に示すステップＢ３では、誤抽出の行には、取り消し線が付されている。その後、排除処理部４３は、最終抽出結果７３ａを、最終抽出結果格納部７３に格納する。
【００６２】
［ステップＢ４］
次に、最終抽出結果ファイル出力部５０は、最終抽出結果７３ａに対してレイアウト編集を行ない、レイアウト編集後の最終抽出結果を、最終抽出結果ファイル７４ａとして出力する。図５の例では、最終抽出結果ファイル出力部５０は、縦軸が検索関数名、横軸がプログラムソースファイル名とされたテーブルを作成する。また、最終抽出結果ファイル出力部５０は、テーブルの各欄には、検索関数毎の各プログラムソースファイルについての使用回数を配置する。
【００６３】
そして、まだ、処理が行なわれていない排除関数を用いて、再度、ステップＢ１〜Ｂ４が実行される。ステップＢ１〜Ｂ４は、関数格納部６１に格納されている全ての関数について繰り返し実行される。また、ステップＢ１〜Ｂ４が実行される度に、最終抽出結果ファイル７４ａに、「行」が追加される。
【００６４】
また、本実施の形態１におけるプログラムは、コンピュータに、図２に示すステップＡ１〜Ａ４、図３に示すステップＢ１〜Ｂ４を実行させるプログラムであれば良い。このプログラムをコンピュータにインストールし、実行することによって、本実施の形態１におけるプログラム分析装置１とプログラム分析方法とを実現することができる。
【００６５】
この場合、コンピュータのＣＰＵ（Central Processing Unit）は、正規表現付加部１０、ソースファイル検索部２０、抽出結果ファイル出力部３０、文字列排除部４０、及び最終抽出結果ファイル出力部５０として機能し、処理を行なう。
【００６６】
更に、本実施の形態１では、コンピュータに備えられたハードディスク等の記憶装置が、関数格納部６１、正規表現格納部６２、ソースファイル格納部６３、検索文字列格納部６４、抽出結果格納部６５、抽出結果ファイル格納部６６、排除用正規表現格納部７１、排除文字列格納部７２、最終抽出結果格納部７３、及び最終抽出結果ファイル格納部７４として機能する。
【００６７】
以上のように本実施の形態１によれば、アプリケーションプログラムで使用されている関数を高精度で抽出して集計可能となる。よって、ＯＳ（Operation System）の移行（例えば、ＵＮＩＸ（登録商標）からＬｉｎｕｘへの移行等）、バージョンアップ等において、アプリケーションプログラムの影響範囲（件数、規模）の算出が容易となる。
【００６８】
また、本実施の形態１によれば、各関数がどのアプリケーションプログラムで使用されているかを管理することが容易にできるようになるため、ソフトウェア開発、テストでの進捗指標として利用可能となる。更に、本実施の形態１は、検索対象となる関数の条件、及び正規表現の条件を変更することにより、様々なプログラム言語にも適用することができる。
【００６９】
（実施の形態２）
次に、本発明の実施の形態２におけるプログラム分析装置、プログラム分析方法、及びプログラムについて、図６〜図８を参照しながら説明する。
【００７０】
［装置構成］
最初に、本実施の形態２におけるプログラム分析装置２の構成について図６及び図７を用いて説明する。図６は、本発明の実施の形態２におけるプログラム分析装置の構成を示すブロック図である。図７は、図６に示した正規表現生成処理部の構成を具体的に示すブロック図である。
【００７１】
図６に示すように、本実施の形態２におけるプログラム分析装置２は、図１に示した実施の形態１におけるプログラム分析装置１と異なり、正規表現生成処理部８０を備えている。それ以外の点では、本実施の形態２におけるプログラム分析装置２は、実施の形態１におけるプログラム分析装置１と同様に構成されている。
【００７２】
正規表現生成処理部８０は、プログラムソースファイルの行毎に、当該行に含まれる関数の前後に位置する文字列を抽出し、抽出した文字列を用いて、正規表現付加部１０で関数に付加する正規表現を作成する。
【００７３】
具体的には、図７に示すように、正規表現生成処理部８０は、代表ソースファイル読込部８１と、文字列パターン分析部８２と、正規表現生成部８３と、代表ソースファイル展開部８４と、文字列パターン格納部８５とを備えている。
【００７４】
代表ソースファイル読込部８１は、検索対象となるプログラムソースファイルを格納しているソースファイル格納部６３から、代表となる１又は２以上のプログラムソースファイルを読み込み、読み込んだプログラムソースファイルを代表ソースファイル展開部８４に展開する。
【００７５】
文字列パターン分析部８２は、展開されたプログラムソースファイルを１行ずつ分析して、関数の前後にある文字列パターン、例えば、空白の個数、「（」等の記号の有無、などを特定し、特定した文字列パターンを、文字列パターン格納部８５に格納する。このとき、文字列パターン分析部８２は、同じ文字列パターンが重複して格納されないようにする。
【００７６】
正規表現生成部８３は、文字列パターン格納部８５に格納されている文字列パターンを用いて、正規表現を作成し、これをリストの形式（図４参照）で、正規表現格納部６２に出力する。
【００７７】
［装置動作］
次に、本発明の実施の形態２におけるプログラム分析装置２の動作について図８を用いて説明する。図８は、本発明の実施の形態２におけるプログラム分析装置の正規表現生成処理時の動作を示すフロー図である。なお、本実施の形態２においては、検索処理及び排除処理は、実施の形態１と同様に実行されるので、説明を省略する。
【００７８】
また、本実施の形態２においても、プログラム分析装置２を動作させることによって、プログラム分析方法が実施される。よって、本実施の形態２におけるプログラム分析方法の説明も、以下のプログラム分析装置２の動作説明に代える。
【００７９】
図８に示すように、まず、代表ソースファイル読込部８１が、ソースファイル格納部６３から、代表となる１又は２以上のプログラムソースファイルを読み込み、これを代表ソースファイル展開部８４に展開する（ステップＣ１）。
【００８０】
次に、文字列パターン分析部８２が、展開されたプログラムソースファイルを１行ずつ分析して、関数の前後にある文字列パターンを特定し、これを文字列パターン格納部８５に格納する（ステップＣ２）。
【００８１】
次に、正規表現生成部８３が、ステップＣ２で生成された文字列パターンを用いて、正規表現を作成する（ステップＣ３）。その後、正規表現生成部８３は、作成した正規表現を用いて正規表現のリストを作成し、作成したリストを正規表現格納部６２に出力する（ステップＣ３）。
【００８２】
また、本実施の形態２におけるプログラムは、コンピュータに、図２に示すステップＡ１〜Ａ４、図３に示すステップＢ１〜Ｂ４、更に、図８に示すステップＣ１〜Ｃ４を実行させるプログラムであれば良い。このプログラムをコンピュータにインストールし、実行することによって、本実施の形態２におけるプログラム分析装置２とプログラム分析方法とを実現することができる。
【００８３】
この場合、コンピュータのＣＰＵ（Central Processing Unit）は、正規表現付加部１０、ソースファイル検索部２０、抽出結果ファイル出力部３０、文字列排除部４０、及び最終抽出結果ファイル出力部５０、代表ソースファイル読込部８１、文字列パターン分析部８２、及び正規表現生成部８３として機能し、処理を行なう。
【００８４】
更に、本実施の形態２では、コンピュータに備えられたハードディスク等の記憶装置が、関数格納部６１、正規表現格納部６２、ソースファイル格納部６３、検索文字列格納部６４、抽出結果格納部６５、抽出結果ファイル格納部６６、排除用正規表現格納部７１、排除文字列格納部７２、最終抽出結果格納部７３、最終抽出結果ファイル格納部７４、代表ソースファイル展開部８４、及び文字列パターン格納部８５として機能する。
【００８５】
以上のように本実施の形態２によれば、用意されているプログラムソースファイルを用いて、正規表現を作成することができるので、関数の抽出精度をより高める事が可能となる。また、本実施の形態２を用いた場合も、実施の形態１と同様の効果を得ることができる。
【００８６】
（実施の形態３）
次に、本発明の実施の形態３におけるプログラム分析装置、プログラム分析方法、及びプログラムについて、図９〜図１１を参照しながら説明する。
【００８７】
［装置構成］
最初に、本実施の形態３におけるプログラム分析装置３の構成について図９及び図１０を用いて説明する。図９は、本発明の実施の形態３におけるプログラム分析装置の構成を示すブロック図である。図１０は、図９に示した関数置換部の構成を具体的に示すブロック図である。
【００８８】
図９に示すように、本実施の形態３におけるプログラム分析装置２は、図１に示した実施の形態１におけるプログラム分析装置１と異なり、関数置換部９０を備えている。それ以外の点では、本実施の形態３におけるプログラム分析装置３は、実施の形態１におけるプログラム分析装置１と同様に構成されている。
【００８９】
関数置換部９０は、まず、特定の関数と抽出結果ファイル（図４参照）とを対比して、特定の関数を含む検索文字列を特定する。そして、関数置換部９０は、特定した検索文字列を含むプログラムソースファイルの識別子、及び特定した検索文字列が記述された行の番号に基づいて、特定した検索文字列を含むプログラムソースファイル中の特定の関数を、他の関数に置き換える。
【００９０】
具体的には、図１０に示すように、関数置換部９０は、置換対象関数読込部９１と、抽出結果ファイル読込部９２と、ソースファイル置換部９３と、置換済みソースファイル出力部９４と、置換対象関数格納部９５と、抽出結果ファイル展開部９６と、置換済みソースファイル格納部９７とを備えている。
【００９１】
置換対象関数格納部９５は、置き換え元の関数と置き換え先の関数とが一対一となった関数セットを格納している。置換対象関数読込部９１は、置換対象関数格納部９５から、関数セットを１セット読み込み、これを抽出結果ファイル読込部９２に引き渡す。
【００９２】
抽出結果ファイル読込部９２は、関数セットを参照して、抽出結果ファイル格納部６６から、置き換え元の関数を検索文字列として得られた抽出結果ファイルを読み込み、これを、抽出結果ファイル展開部９６に展開する。このとき、読み込まれる抽出結果ファイルは、１つに限定されず、２以上であっても良い。
【００９３】
ソースファイル置換部９３は、抽出結果展開部９６に展開されている抽出結果ファイルから、検索対象となったプログラムソースファイルを特定し、その名称を読み取る。また、名称が読み取られたプログラムソースファイルが関数置換の対象となるので、ソースファイル置換部９３は、このプログラムソースファイルを、ソースファイル格納部６３から読み取る。
【００９４】
ソースファイル置換部９３は、抽出結果ファイルに基づいて、読み取ったプログラムソースファイル内の置き換え元の関数を特定し、これを、置き換え先の関数に置換して、置換済みプログラムソースファイルを生成する。また、ソースファイル置換部９３は、生成した置換済みプログラムソースファイルを、置換済みソースファイル格納部９７に格納する。
【００９５】
置換済みソースファイル出力部９４は、置換済みソースファイル格納部９７に格納されている置換済みプログラムソースファイルを、ソースファイル格納部６３に出力する。これにより、ソースファイル格納部６３は、特定の関数が別の関数に置換されたプログラムソースファイルを格納することになる。
【００９６】
［装置動作］
次に、本発明の実施の形態３におけるプログラム分析装置３の動作について図１１を用いて説明する。図１１は、本発明の実施の形態３におけるプログラム分析装置の関数置換処理時の動作を示すフロー図である。なお、本実施の形態３においては、検索処理及び排除処理は、実施の形態１と同様に実行されるので、説明を省略する。
【００９７】
また、本実施の形態３においても、プログラム分析装置３を動作させることによって、プログラム分析方法が実施される。よって、本実施の形態３におけるプログラム分析方法の説明も、以下のプログラム分析装置３の動作説明に代える。
【００９８】
図１１に示すように、まず、置換対象関数読込部９１が、置換対象関数格納部９５から、関数セットを１セット読み込む（ステップＤ１）。
【００９９】
次に、抽出結果ファイル読込部９２が、関数セットを参照して、抽出結果ファイル格納部６６から、置き換え元の関数を検索文字列として得られた抽出結果ファイルを読み込む（ステップＤ２）。ステップＤ２において、読み込まれた抽出結果ファイルは、抽出結果ファイル展開部９６に展開される。
【０１００】
次に、ソースファイル置換部９３が、展開されている抽出結果ファイルに基づいて、ソースファイル格納部６３から、関数置換の対象となるプログラムソースファイルを読み取る（ステップＤ３）。
【０１０１】
次に、ソースファイル置換部９３が、抽出結果ファイルに基づいて、読み取ったプログラムソースファイル内の置き換え元の関数を、置き換え先の関数に置換して、置換済みプログラムソースファイルを生成する（ステップＤ４）。
【０１０２】
その後、置換済みソースファイル出力部９４が、ステップＤ４で作成された置換済みプログラムソースファイルを、ソースファイル格納部６３に出力する（ステップＤ５）。これにより、関数置換処理は終了する。但し、ステップＤ３〜Ｄ５は、抽出結果ファイル展開部９６に展開されているプログラムソースファイルの数だけ、繰り返し実行される。
【０１０３】
また、本実施の形態３におけるプログラムは、コンピュータに、図２に示すステップＡ１〜Ａ４、図３に示すステップＢ１〜Ｂ４、更に、図１１に示すステップＤ１〜Ｄ５を実行させるプログラムであれば良い。このプログラムをコンピュータにインストールし、実行することによって、本実施の形態３におけるプログラム分析装置３とプログラム分析方法とを実現することができる。
【０１０４】
この場合、コンピュータのＣＰＵ（Central Processing Unit）は、正規表現付加部１０、ソースファイル検索部２０、抽出結果ファイル出力部３０、文字列排除部４０、及び最終抽出結果ファイル出力部５０、置換対象関数読込部９１、抽出結果ファイル読込部９２、ソースファイル置換部９３、及び置換済みソースファイル出力部９４として機能し、処理を行なう。
【０１０５】
更に、本実施の形態３では、コンピュータに備えられたハードディスク等の記憶装置が、関数格納部６１、正規表現格納部６２、ソースファイル格納部６３、検索文字列格納部６４、抽出結果格納部６５、抽出結果ファイル格納部６６、排除用正規表現格納部７１、排除文字列格納部７２、最終抽出結果格納部７３、最終抽出結果ファイル格納部７４、置換対象関数格納部９５、抽出結果ファイル展開部９６、及び置換済みソースファイル格納部９７として機能する。
【０１０６】
以上のように、本実施の形態３では、抽出結果ファイルから、プログラムソースファイルで使用されている関数の行と位置とを特定できることを利用して、対象となる関数文字列を書き換えることができる。本実施の形態３によれば、関数の自動置換、対象となる関数の引数の自動置換が可能となる。また、本実施の形態３を用いた場合も、実施の形態１と同様の効果を得ることができる。
【０１０７】
ここで、実施の形態１〜３におけるプログラムを実行することによって、プログラム分析装置を実現するコンピュータについて図１２を用いて説明する。図１２は、本発明の実施の形態１〜３におけるプログラム分析装置を実現するコンピュータの一例を示すブロック図である。
【０１０８】
図１２に示すように、コンピュータ１１０は、ＣＰＵ１１１と、メインメモリ１１２と、記憶装置１１３と、入力インターフェイス１１４と、表示コントローラ１１５と、データリーダ／ライタ１１６と、通信インターフェイス１１７とを備える。これらの各部は、バス１２１を介して、互いにデータ通信可能に接続される。
【０１０９】
ＣＰＵ１１１は、記憶装置１１３に格納された、本実施の形態におけるプログラム（コード）をメインメモリ１１２に展開し、これらを所定順序で実行することにより、各種の演算を実施する。メインメモリ１１２は、典型的には、ＤＲＡＭ（Dynamic Random Access Memory）等の揮発性の記憶装置である。また、本実施の形態におけるプログラムは、コンピュータ読み取り可能な記録媒体１２０に格納された状態で提供される。なお、本実施の形態におけるプログラムは、通信インターフェイス１１７を介して接続されたインターネット上で流通するものであっても良い。
【０１１０】
また、記憶装置１１３の具体例としては、ハードディスクの他、フラッシュメモリ等の半導体記憶装置が挙げられる。入力インターフェイス１１４は、ＣＰＵ１１１と、キーボード及びマウスといった入力機器１１８との間のデータ伝送を仲介する。表示コントローラ１１５は、ディスプレイ装置１１９と接続され、ディスプレイ装置１１９での表示を制御する。データリーダ／ライタ１１６は、ＣＰＵ１１１と記録媒体１２０との間のデータ伝送を仲介し、記録媒体１２０からのプログラムの読み出し、及びコンピュータ１１０における処理結果の記録媒体１２０への書き込みを実行する。通信インターフェイス１１７は、ＣＰＵ１１１と、他のコンピュータとの間のデータ伝送を仲介する。
【０１１１】
また、記録媒体１２０の具体例としては、ＣＦ（Compact Flash）及びＳＤ（Secure Digital）等の汎用的な半導体記憶デバイス、フレキシブルディスク（Flexible Disk）等の磁気記憶媒体、又はＣＤ−ＲＯＭ（Compact Disk Read Only Memory）などの光学記憶媒体が挙げられる。
【０１１２】
上述した実施の形態の一部又は全部は、以下に記載する（付記１）〜（付記１８）によって表現することができるが、以下の記載に限定されるものではない。
【０１１３】
（付記１）
プログラムソースファイルからの抽出の対象となる関数に、正規表現の文字列を付加して、検索文字列を作成する、正規表現付加部と、
前記プログラムソースファイルに対して、前記正規表現付加部によって作成された前記検索文字列を用いて検索を行い、前記検索文字列を抽出する、ソースファイル検索部と、
抽出の対象となる前記関数又は前記関数とは別の関数に、前記正規表現とは別の排除用の正規表現の文字列を付加して、排除文字列を作成し、前記ソースファイル検索部による抽出の結果から、前記排除文字列に該当する箇所を排除する、文字列排除部と、
を備えている、ことを特徴とするプログラム分析装置。
【０１１４】
（付記２）
前記プログラムソースファイルの行毎に、当該行に含まれる関数の前後に位置する文字列を抽出し、抽出した前記文字列を用いて、前記抽出の対象となる関数に付加する正規表現を作成する、正規表現生成処理部を更に備えている、
付記１に記載のプログラム分析装置。
【０１１５】
（付記３）
前記ソースファイル検索部が、前記抽出の結果として、前記検索文字列、前記検索文字列を含むプログラムソースファイルの識別子、及び前記検索文字列が記述された行の番号を特定する情報を出力する、
付記１または２に記載のプログラム分析装置。
【０１１６】
（付記４）
前記文字列排除部が、前記排除文字列と前記抽出の結果とを対比して、前記排除文字列に一致している前記検索文字列を特定し、前記抽出の結果から、前記一致している前記検索文字列、前記一致している前記検索文字列を含むプログラムソースファイルの識別子、及び前記一致している前記検索文字列が記述された行の番号を排除する、
付記３に記載のプログラム分析装置。
【０１１７】
（付記５）
前記文字列排除部によって前記排除文字列に該当する箇所が排除された前記抽出の結果に基づいて、前記プログラムソースファイル毎に、当該プログラムソースファイルに存在している関数及びその数を特定するデータを作成し、作成した前記データを出力する、出力部を更に備えている、
付記４に記載のプログラム分析装置。
【０１１８】
（付記６）
特定の関数と前記抽出の結果とを対比して、前記特定の関数を含む前記検索文字列を特定し、特定した前記検索文字列を含むプログラムソースファイルの識別子、及び特定した前記検索文字列が記述された行の番号に基づいて、特定した前記検索文字列を含むプログラムソースファイル中の前記特定の関数を、他の関数に置き換える、関数置換部を更に備えている、
付記３〜５のいずれかに記載のプログラム分析装置。
【０１１９】
（付記７）
（ａ）プログラムソースファイルからの抽出の対象となる関数に、正規表現の文字列を付加して、検索文字列を作成する、ステップと、
（ｂ）前記プログラムソースファイルに対して、前記（ａ）のステップによって作成された前記検索文字列を用いて検索を行い、前記検索文字列を抽出する、ステップと、
（ｃ）抽出の対象となる前記関数又は前記関数とは別の関数に、前記正規表現とは別の排除用の正規表現の文字列を付加して、排除文字列を作成し、前記（ｂ）のステップによる抽出の結果から、前記排除文字列に該当する箇所を排除する、ステップと、
を有する、ことを特徴とするプログラム分析方法。
【０１２０】
（付記８）
（ｄ）前記プログラムソースファイルの行毎に、当該行に含まれる関数の前後に位置する文字列を抽出し、抽出した前記文字列を用いて、前記抽出の対象となる関数に付加する正規表現を作成する、ステップを更に有する、
付記７に記載のプログラム分析方法。
【０１２１】
（付記９）
前記（ｂ）のステップで、前記抽出の結果として、前記検索文字列、前記検索文字列を含むプログラムソースファイルの識別子、及び前記検索文字列が記述された行の番号を特定する情報を出力する、
付記７または８に記載のプログラム分析方法。
【０１２２】
（付記１０）
前記（ｃ）のステップで、前記排除文字列と前記抽出の結果とを対比して、前記排除文字列に一致している前記検索文字列を特定し、前記抽出の結果から、前記一致している前記検索文字列、前記一致している前記検索文字列を含むプログラムソースファイルの識別子、及び前記一致している前記検索文字列が記述された行の番号を排除する、
付記９に記載のプログラム分析方法。
【０１２３】
（付記１１）
（ｅ）前記（ｃ）のステップによって前記排除文字列に該当する箇所が排除された前記抽出の結果に基づいて、前記プログラムソースファイル毎に、当該プログラムソースファイルに存在している関数及びその数を特定するデータを作成し、作成した前記データを出力する、ステップを更に有する、
付記１０に記載のプログラム分析方法。
【０１２４】
（付記１２）
（ｆ）特定の関数と前記抽出の結果とを対比して、前記特定の関数を含む前記検索文字列を特定し、特定した前記検索文字列を含むプログラムソースファイルの識別子、及び特定した前記検索文字列が記述された行の番号に基づいて、特定した前記検索文字列を含むプログラムソースファイル中の前記特定の関数を、他の関数に置き換える、ステップを更に有する、
付記９〜１１のいずれかに記載のプログラム分析方法。
【０１２５】
（付記１３）
コンピュータに、
（ａ）プログラムソースファイルからの抽出の対象となる関数に、正規表現の文字列を付加して、検索文字列を作成する、ステップと、
（ｂ）前記プログラムソースファイルに対して、前記（ａ）のステップによって作成された前記検索文字列を用いて検索を行い、前記検索文字列を抽出する、ステップと、
（ｃ）抽出の対象となる前記関数又は前記関数とは別の関数に、前記正規表現とは別の排除用の正規表現の文字列を付加して、排除文字列を作成し、前記（ｂ）のステップによる抽出の結果から、前記排除文字列に該当する箇所を排除する、ステップと、
を実行させるプログラム。
【０１２６】
（付記１４）
（ｄ）前記プログラムソースファイルの行毎に、当該行に含まれる関数の前後に位置する文字列を抽出し、抽出した前記文字列を用いて、前記抽出の対象となる関数に付加する正規表現を作成する、ステップを更に前記コンピュータに実行させる、
付記１３に記載のプログラム。
【０１２７】
（付記１５）
前記（ｂ）のステップで、前記抽出の結果として、前記検索文字列、前記検索文字列を含むプログラムソースファイルの識別子、及び前記検索文字列が記述された行の番号を特定する情報を出力する、
付記１３または１４に記載のプログラム。
【０１２８】
（付記１６）
前記（ｃ）のステップで、前記排除文字列と前記抽出の結果とを対比して、前記排除文字列に一致している前記検索文字列を特定し、前記抽出の結果から、前記一致している前記検索文字列、前記一致している前記検索文字列を含むプログラムソースファイルの識別子、及び前記一致している前記検索文字列が記述された行の番号を排除する、
付記１５に記載のプログラム。
【０１２９】
（付記１７）
（ｅ）前記（ｃ）のステップによって前記排除文字列に該当する箇所が排除された前記抽出の結果に基づいて、前記プログラムソースファイル毎に、当該プログラムソースファイルに存在している関数及びその数を特定するデータを作成し、作成した前記データを出力する、ステップを更に前記コンピュータに実行させる、
付記１６に記載のプログラム。
【０１３０】
（付記１８）
（ｆ）特定の関数と前記抽出の結果とを対比して、前記特定の関数を含む前記検索文字列を特定し、特定した前記検索文字列を含むプログラムソースファイルの識別子、及び特定した前記検索文字列が記述された行の番号に基づいて、特定した前記検索文字列を含むプログラムソースファイル中の前記特定の関数を、他の関数に置き換える、ステップを更に前記コンピュータに実行させる、
付記１５〜１７のいずれかに記載のプログラム。
【産業上の利用可能性】
【０１３１】
以上のように本発明によれば、プログラムソースファイルから関数を抽出する際の抽出精度を向上できる。本発明は、ソフトウェアの開発において、プログラムソースファイルの分析が必要となる場合に有用である。
【符号の説明】
【０１３２】
１  プログラム分析装置（実施の形態１）
２  プログラム分析装置（実施の形態２）
３  プログラム分析装置（実施の形態３）
１０  正規表現付加部
２０  ソースファイル検索部
３０  抽出結果ファイル出力部
４０  文字列排除部
５０  最終抽出結果ファイル出力部
６１  関数格納部
６２  正規表現格納部
６３  ソースファイル格納部
６４  検索文字列格納部
６５  抽出結果格納部
６６  抽出結果ファイル格納部
７１  排除用正規表現格納部
７２  排除文字列格納部
７３  最終抽出結果格納部
７４  最終抽出結果ファイル格納部
８０  正規表現生成処理部
８１  代表ソースファイル読込部
８２  文字列パターン分析部
８３  正規表現生成部
８４  代表ソースファイル展開部
８５  文字列パターン格納部
９０  関数置換部
９１  置換対象関数読込部
９２  抽出結果ファイル読込部
９３  ソースファイル置換部
９４  置換済みソースファイル出力部
９５  置換対象関数格納部
９６  抽出結果ファイル展開部
９７  置換済みソースファイル格納部
１１０  コンピュータ
１１１  ＣＰＵ
１１２  メインメモリ
１１３  記憶装置
１１４  入力インターフェイス
１１５  表示コントローラ
１１６  データリーダ／ライタ
１１７  通信インターフェイス
１１８  入力機器
１１９  ディスプレイ装置
１２０  記録媒体
１２１  バス
【図１】
0005578625.tif 000002
【図２】
0005578625.tif 000003
【図３】
0005578625.tif 000004
【図４】
0005578625.tif 000005
【図５】
0005578625.tif 000006
【図６】
0005578625.tif 000007
【図７】
0005578625.tif 000008
【図８】
0005578625.tif 000009
【図９】
0005578625.tif 000010
【図１０】
0005578625.tif 000011
【図１１】
0005578625.tif 000012
【図１２】
0005578625.tif 000013