(57)【特許請求の範囲】
【請求項１】
ソースコードに入力されたデータである実データを取得する実データ取得部と、
前記ソースコードの部分について、当該部分が実行されるための条件を抽出する条件抽出部と、
前記実データ取得部が取得した実データのうち、前記条件抽出部が抽出した条件を満たすデータの数に基づいて、前記ソースコードの部分の使用状況を判定する使用状況判定部と、
を具備することを特徴とするソースコード分析装置。
【請求項２】
前記条件抽出部が抽出した条件に適用されるデータのうちマスタデータを抽出するマスタデータ抽出部を具備し、
前記使用状況判定部は、前記条件抽出部が抽出した条件を満たす値のデータがマスタデータに含まれるか否かに基づいて、前記ソースコードの部分の使用状況を判定する
ことを特徴とする請求項１に記載のソースコード分析装置。
【請求項３】
前記使用状況判定部は、所定の期間内の実データに基づいて、前記ソースコードの部分の使用状況を判定することを特徴とする請求項１または２に記載のソースコード分析装置。
【請求項４】
前記使用状況判定部は、前記判定を行う時点における直近の所定の期間内の実データに基づいて、前記ソースコードの部分の使用状況を判定することを特徴とする請求項３に記載のソースコード分析装置。
【請求項５】
前記使用状況判定部は、前記ソースコードの部分が不使用か否かを判定することを特徴とする請求項１から４のいずれか一項に記載のソースコード分析装置。
【請求項６】
前記使用状況判定部は、前記実データ取得部が取得する実データのうち、前記条件抽出部が抽出した条件を満たすデータの数の、時間軸方向における減少率に基づいて、前記ソースコードの部分が不使用か否かを判定することを特徴とする請求項５に記載のソースコード分析装置。
【請求項７】
前記使用状況判定部は、前記ソースコードの部分のうち、前記条件抽出部が抽出した条件を満たすデータの数が所定数以上の部分を抽出することを特徴とする請求項１から６のいずれか一項に記載のソースコード分析装置。
【請求項８】
ソースコード分析装置のソースコード分析方法であって、
ソースコードに入力されたデータである実データを取得する実データ取得ステップと、
前記ソースコードの部分について、当該部分が実行されるための条件を抽出する条件抽出ステップと、
前記実データ取得ステップにて取得した実データのうち、前記条件抽出ステップにて抽出した条件を満たすデータの数に基づいて、前記ソースコードの部分の使用状況を判定する使用状況判定ステップと、
を具備することを特徴とするソースコード分析方法。
【請求項９】
ソースコード分析装置としてのプログラムに、
ソースコードに入力されたデータである実データを取得する実データ取得ステップと、
前記ソースコードの部分について、当該部分が実行されるための条件を抽出する条件抽出ステップと、
前記実データ取得ステップにて取得した実データのうち、前記条件抽出ステップにて抽出した条件を満たすデータの数に基づいて、前記ソースコードの部分の使用状況を判定する使用状況判定ステップと、
を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソースコードの各部分の使用状況を分析するソースコード分析装置、当該ソースコード分析装置のソースコード分析方法およびプログラムに関する。
【背景技術】
【０００２】
ソースコード（ソースプログラム）をメンテナンスする際、ソースコードの各部分の使用状況を把握することで、メンテナンスをより的確に行い得る。例えば、過去のメンテナンスによって、あるいは、システムの運用変更によって使われなくなった部分がある場合、当該部分を把握できれば、当該使われなくなった部分を削除して、必要な記憶容量を削減し、さらにはプログラム実行速度の向上を図ることができる。
【０００３】
かかるソースコードの各部分の使用状況の把握に関連して、特許文献１に記載の技術では、プログラム群から実行経路と変数とを検出し、検出された実行経路と変数の追跡を行って、変数の取り得る値を求め、以後追跡する実行経路においては、変数値を限定する。そして、実行経路の追跡中に、実行経路が変数値の満たす条件によって分岐する箇所がある場合、追跡される実行経路を、限定された変数値が該条件を満たす実行経路だけに限定し、また、実行経路の追跡中に、データの入出力が行われる箇所がある場合、該入出力情報を取得する。
これにより、プログラムの分析とプログラムの入出力情報の取得を効率良く行えるとされている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００７−１２２２０７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１に記載の技術では、プログラムの構造上は使用され得るが、事実上使用されなくなった部分を検出することはできない。例えば、システムの運用変更によってプログラムの構造上は実行され得るが実際には使用されない部分が生じ得るが、特許文献１に記載の技術では、当該部分を検出することはできない。
【０００６】
本発明は、このような事情を考慮してなされたものであり、その目的は、ソースコードの各部分の使用状況をより的確に把握可能なソースコード分析装置、ソースコード分析方法およびプログラムを提供することにある。
【課題を解決するための手段】
【０００７】
この発明は上述した課題を解決するためになされたもので、本発明の一態様によるソースコード分析装置は、ソースコードに入力されたデータである実データを取得する実データ取得部と、前記ソースコードの部分について、当該部分が実行されるための条件を抽出する条件抽出部と、前記実データ取得部が取得した実データのうち、前記条件抽出部が抽出した条件を満たすデータの数に基づいて、前記ソースコードの部分の使用状況を判定する使用状況判定部と、を具備することを特徴とする。
【０００８】
また、本発明の一態様によるソースコード分析装置は、上述のソースコード分析装置であって、前記条件抽出部が抽出した条件に適用されるデータのうちマスタデータを抽出するマスタデータ抽出部を具備し、前記使用状況判定部は、前記条件抽出部が抽出した条件を満たす値のデータがマスタデータに含まれるか否かに基づいて、前記ソースコードの部分の使用状況を判定することを特徴とする。
【０００９】
また、本発明の一態様によるソースコード分析装置は、上述のソースコード分析装置であって、前記使用状況判定部は、所定の期間内の実データに基づいて、前記ソースコードの部分の使用状況を判定することを特徴とする。
【００１０】
また、本発明の一態様によるソースコード分析装置は、上述のソースコード分析装置であって、前記使用状況判定部は、前記判定を行う時点における直近の所定の期間内の実データに基づいて、前記ソースコードの部分の使用状況を判定することを特徴とする。
【００１１】
また、本発明の一態様によるソースコード分析装置は、上述のソースコード分析装置であって、前記使用状況判定部は、前記ソースコードの部分が不使用か否かを判定することを特徴とする。
【００１２】
また、本発明の一態様によるソースコード分析装置は、上述のソースコード分析装置であって、前記使用状況判定部は、前記実データ取得部が取得する実データのうち、前記条件抽出部が抽出した条件を満たすデータの数の、時間軸方向における減少率に基づいて、前記ソースコードの部分が不使用か否かを判定することを特徴とする
【００１３】
また、本発明の一態様によるソースコード分析装置は、上述のソースコード分析装置であって、前記使用状況判定部は、前記ソースコードの部分のうち、前記条件抽出部が抽出した条件を満たすデータの数が所定数以上の部分を抽出することを特徴とする。
【００１４】
また、本発明の一態様によるソースコード分析方法は、ソースコード分析装置のソースコード分析方法であって、ソースコードに入力されたデータである実データを取得する実データ取得ステップと、前記ソースコードの部分について、当該部分が実行されるための条件を抽出する条件抽出ステップと、前記実データ取得ステップにて取得した実データのうち、前記条件抽出ステップにて抽出した条件を満たすデータの数に基づいて、前記ソースコードの部分の使用状況を判定する使用状況判定ステップと、を具備することを特徴とする。
【００１５】
また、本発明の一態様によるプログラムは、ソースコード分析装置としてのプログラムに、ソースコードに入力されたデータである実データを取得する実データ取得ステップと、前記ソースコードの部分について、当該部分が実行されるための条件を抽出する条件抽出ステップと、前記実データ取得ステップにて取得した実データのうち、前記条件抽出ステップにて抽出した条件を満たすデータの数に基づいて、前記ソースコードの部分の使用状況を判定する使用状況判定ステップと、を実行させるためのプログラムである。
【発明の効果】
【００１６】
この発明によれば、ソースコードの各部分の使用状況をより的確に把握することができる。
【図面の簡単な説明】
【００１７】
【図１】本発明の一実施形態におけるソースコード分析装置の概略構成を示す構成図である。
【図２】同実施形態において、ソースコード分析装置が対象ソースコードを分析する処理手順を示すフローチャートである。
【図３】同実施形態において、ソースコード取得部が取得する対象ソースコードの例を示す説明図である。
【図４】同実施形態において、ソースコード取得部が取得する対象ソースコードの構造の例を示す説明図である。
【図５】同実施形態における前処理部による、対象ソースコードの構造上実行されることのない部分の抽出結果の例を示す説明図である。
【図６】同実施形態において、判定単位決定部が取得するユニットの例を示す説明図である。
【図７】同実施形態において、判定単位決定部が対象ソースコードを分割した結果の表示例を示す説明図である。
【図８】同実施形態において、判定単位決定部が、実行経路の分岐が実データの値に基づく分岐か否かを判定する例を示す説明図である。
【図９】同実施形態において、判定単位決定部が、取得する変数とデータとの対応付けの例を示す説明図である。
【図１０】同実施形態において、ＳＱＬ生成部が生成するＳＱＬの例を示す説明図である。
【図１１】同実施形態において、統計処理部が計数を行った結果の例を示す説明図である。
【図１２】同実施形態において、使用状況判定部が各ユニットの使用状況を判定する際の判定基準の例を示す説明図である。
【図１３】同実施形態における対象ソースファイルの構造の例を示す説明図である。
【図１４】同実施形態において、ソースコード分析装置が参照するデータの例を示す説明図である。
【図１５】同実施形態において、判定単位決定部が取得するユニットの例を示す説明図である。
【図１６】同実施形態において、ＳＱＬ生成部が生成する、各ユニットが実行されるための条件を満たすデータの数を計数するＳＱＬの例を示す説明図である。
【図１７】同実施形態において、マスタ登録有無判定部が、マスタ登録の有無を判定するためのＳＱＬの例を示す説明図である。
【図１８】同実施形態において、統計処理部が計数の対象とする期間の設定例を示す説明図である。
【図１９】同実施形態に係るソースコードにおける各ユニットの位置情報の例を示す説明図である。
【図２０】同実施形態において、使用状況判定部が各ユニットの使用状況を判定する際の判定基準の例を示す説明図である。
【図２１】同実施形態における、使用状況判定部による各ユニットの使用状況の判定結果の例を示す説明図である。
【発明を実施するための形態】
【００１８】
以下、図面を参照して、本発明の一実施形態について説明する。
図１は、本発明の一実施形態におけるソースコード分析装置１の概略構成を示す構成図である。同図において、ソースコード分析装置１は、テーブル取得部（実データ取得部）１０１と、ソースコード取得部１０２と、ソースコード解析部１１１と、前処理部１１２と、判定単位決定部１１３と、ＳＱＬ生成部（条件抽出部）１１４と、マスタ登録有無判定部１１５と、統計処理部１１６と、使用状況判定部１１７と、結果出力部１２１とを具備する。
【００１９】
ソースコード分析装置１は、データを読み込んで動作するシステム（以下、「対象システム」と称する）のソースコード（以下、「対象ソースコード」と称する）を分析する装置であり、実データに基づいて、対象ソースコードの各部の使用状況を判定する。
ここでいう「実データ」は、ソースコードに入力されたデータ（より具体的には、ソースコードがコンパイルされた実行形式により、生成、参照、変更または削除されたデータ）である。この実データは、ソースコードをコンパイルして作成された実行ファイルをシステム運用時に動作させた結果、データベースに順次蓄積されるデータ（以下、「実績データ」と称する）、およびデータベースに予め登録しておき、システム運用時には専ら参照することを目的として作成された静的なデータ（以下、「マスタデータ」と称する）からなる。
ソースコード分析装置１は、例えば所定のプログラムを実行するコンピュータによって構成される。
【００２０】
テーブル取得部１０１は、実データを取得する。例えば、テーブル取得部１０１は、データベースサーバ装置から、表形式のデータにて実データを取得する。なお、テーブル取得部１０１の取得する実データは、表形式のものに限らず、例えばプレーンテキスト形式など、他の形式のデータであってもよい。
ソースコード取得部１０２は、対象ソースコードを取得する。例えば、ソースコード取得部１０２は、対象システムが具備する記憶部から、テキストデータのソースコードを取得する。
【００２１】
テーブル取得部１０１とソースコード取得部１０２とは、例えば、ソースコード分析装置１の具備する通信部によって構成される。例えば、当該通信部は、ＬＡＮ（Local Area Network）等の通信ネットワークを介してデータベースサーバ装置やメンテナンス対象のシステムに接続されており、これらデータベースサーバ装置やメンテナンス対象のシステムと通信を行って、実データや対象ソースコードを取得する。
【００２２】
ソースコード解析部１１１は、ソースコード取得部１０２が取得するソースコードを解析して、当該ソースコードにおける構成要素としてのモジュール（サブルーチン）を抽出する。
以下では、対象ソースコードの各部が完全にモジュール化されており、対象ソースコードの始点モジュールが、条件分岐とモジュール呼び出しとで構成される場合について説明する。ここでいう対象ソースコードの始点モジュールとは、対象システムがユーザの要求に応じた処理を実行する際に最初に実行されるモジュールである。例えば、対象システムがオンライン系のシステムである場合、メニュー画面からの処理要求に応じて最初に起動されるモジュールが、対象ソースコードの始点モジュールに該当する。また、対象システムがバッチ系システムである場合、当該対象システムにおけるジョブフローから直接呼び出されるモジュールが、対象ソースコードの始点モジュールに該当する。
この場合、各モジュールが構成要素に該当する。なお、始点モジュールに条件分岐やモジュール呼び出し以外の命令文が含まれる場合は、この命令文の各々が構成要素に該当する。
【００２３】
また、ソースコード解析部１１１は、各モジュールの呼び出し関係の解析や、条件分岐で用いられるデータが実績データかマスタデータかの判定を行う。詳細については後述する。
【００２４】
前処理部１１２は、ソースコード分析装置１が行うソースコード分析の前処理として、対象ソースコードの構造上実行され得ない部分を抽出する。詳細については後述する。
判定単位決定部１１３は、条件文などによる対象ソースコード上の実行経路の分岐や結合に従って、対象ソースコードをユニットに分割する。ここでいう「ユニット」は、対象ソースコード中において、同一の条件の下で実行される部分の集合である。ユニットは、対象ソースコードを実行経路の分岐や結合毎に分割して得られる。ただし、後述するように、ここでの実行経路の分岐は、実データの値に応じた分岐に限られる。
【００２５】
ＳＱＬ生成部１１４は、判定単位決定部１１３の処理によって得られるユニット毎に、当該ユニットが実行されるための条件を抽出し、テーブル取得部１０１が取得するデータのうち、抽出した条件を満たすデータの数を計数するためのプログラム（以下、「ＳＱＬ」と称する）を生成する。
マスタ登録有無判定部１１５は、テーブル取得部１０１が取得するデータがマスタデータか否かを判定する。
【００２６】
統計処理部１１６は、ＳＱＬ生成部１１４の生成したＳＱＬを実行して、各ユニットについて、テーブル取得部１０１の取得した実データのうち当該ユニットが実行されるための条件を満たすデータの数（出現数）を計数する。その際、統計処理部１１６は、マスタ登録有無判定部１１５の判定結果に基づいて、実績データとマスタデータとの各々について出現数を計数する。
使用状況判定部１１７は、統計処理部１１６の計数結果に基づいて、各ユニットの使用状況を判定する。
【００２７】
ソースコード解析部１１１と、前処理部１１２と、判定単位決定部１１３と、ＳＱＬ生成部１１４と、マスタ登録有無判定部１１５と、統計処理部１１６と、使用状況判定部１１７とは、例えばソースコード分析装置１の具備するＣＰＵ（Central Processing Unit、中央処理装置）が、ソースコード分析装置１の具備するプログラムを読み込んで実行することによって構成される。
【００２８】
結果出力部１２１は、使用状況判定部１１７の判定結果を出力する。例えば、結果出力部１２１は、液晶ディスプレイ等の表示装置を具備し、判定結果を画面表示する。あるいは、結果出力部１２１が、所定のファイルに判定結果を書き込むなど、画面表示以外の手段を用いて判定結果を出力するようにしてもよい。
【００２９】
次に、ソースコード分析装置１の動作について説明する。
図２は、ソースコード分析装置１が対象ソースコードを分析する処理手順を示すフローチャートである。例えば、ソースコード分析装置１は、その具備する入力装置が、対象ソースコードの分析を要求する操作入力を受け付けると同図の処理を開始する。
【００３０】
同図の処理において、まず、ソースコード取得部１０２は、対象ソースコードを取得する。そして、ソースコード解析部１１１は、この対象ソースコードの構造を解析する（ステップＳ１０１）。
具体的には、ソースコード解析部１１１は、まず、対象ソースコードから各構成要素（ここでは各モジュール）を抽出する。そして、ソースコード解析部１１１は、抽出した各モジュールに識別情報（ＩＤ；Identifier）を付与する。
【００３１】
次に、ソースコード解析部１１１は、各モジュールの呼び出し関係を解析する。そして、ソースコード解析部１１１は、解析によって得られた呼び出し関係を示す構文木を生成する。例えば、ソースコード解析部１１１は、各モジュールに付与した識別情報をノードとする構文木を生成する。
【００３２】
さらに、ソースコード解析部１１１は、各条件分岐で用いられるデータが、実績データかマスタデータかを判定する。例えば、ソースコード解析部１１１は、各条件分岐で用いられる変数の変数名に基づいて、実績データとマスタデータとを区別する。例えば、ソースコード解析部１１１は、変数名に文字列「ｍａｓｔｅｒ」が含まれる場合に、当該変数に代入されるデータはマスタデータであると判定し、それ以外の変数に代入されるデータは実績データであると判定する。
あるいは、ソースコード解析部１１１が、ソースコードを辿って各データの読出元を特定し、特定した読出元のファイル名やデータベース名に基づいて実績データとマスタデータとを区別するようにしてもよい。例えば、ソースコード解析部１１１は、データ読出元のファイル名またはデータベース名に文字列「ｍａｓｔｅｒ」が含まれる場合に、当該ファイルまたはデータベースから読み出されるデータはマスタデータであると判定し、それ以外のデータは実績データであると判定する。
【００３３】
ステップＳ１０１の処理が終了すると、次に、前処理部１１２は、ソースコード解析部１１１の解析結果に基づいて、対象ソースコードの構造上実行され得ない部分を抽出する（ステップＳ１０２）。
【００３４】
図３は、ソースコード取得部１０２が取得する対象ソースコードの例を示す説明図である。ソースコード取得部１０２は、例えば図３に示すようなＣＯＢＯＬで記述されたソースコードを取得する。ただし、本発明の適用範囲はＣＯＢＯＬに限定されず、様々な言語のソースコードに適用可能である。
【００３５】
図４は、ソースコード取得部１０２が取得する対象ソースコードの構造の例を示す説明図である。同図において、部分Ｐ１に含まれる構成単位「ＳＥ−０９」、「ＳＥ−１０」および「ＳＥ−１１」は、対象ソースコード中のモジュールを示している。また、これらのモジュールは、メインルーチン（「ＳＥ−０１」など、丸印に挟まれた経路の部分）から呼び出されない。従って、これら構成単位「ＳＥ−０９」、「ＳＥ−１０」および「ＳＥ−１１」は、対象ソースコードの構造上実行され得ない。
【００３６】
図５は、前処理部１１２による、対象ソースコードの構造上実行され得ない部分の抽出結果の例を示す説明図である。同図に示す抽出結果において、各行はソースコードの構成単位に対応している。
【００３７】
ここで、構成要素番号は、ソースコードの構成要素を識別する番号であり、例えば、前処理部１１２が、連番にて各構成要素に付加する。また、ソースコードファイル名は、構成要素が含まれるファイル名を示す。また、開始行と開始位置とは、ソースコードファイルにおける構成要素の開始位置を行（Ｌｏｗ）および列（Ｃｏｌｕｍｎ）にて示す。また、終了行と終了位置とは、ソースコードファイルにおける構成要素の終了位置を行および列にて示す。
【００３８】
また、参照有無の値「有」は、ソースコードの構造上、構成要素が実行され得ることを示す。ここで、ソースコードの構造上実行され得る構成要素とは、対象システムの運用において、入力データが任意の値を取り得る場合に実行され得る構成要素をいう。一方、参照有無の値「無」は、ソースコードの構造上、構成要素が実行され得ないことを示す。ここで、ソースコードの構造上実行され得ない構成要素とは、対象システムの運用において、入力データが任意の値を取り得る場合でも実行され得ない構成要素をいう。
【００３９】
例えば、前処理部１１２は、抽出結果を結果出力部１２１に出力し、結果出力部１２１は、ソースコード分析装置１の分析結果の一部として、図５に示すようなデータを出力する。
また、前処理部１１２によって、実行されることがないと判定された部分は、以後の処理の対象から除外される。
【００４０】
ここで、対象システムがオンライン系のシステムである場合、前処理部１１２は、まず、トップメニューから呼び出され得る全てのメニュー画面を特定する。次に、前処理部１１２は、特定したメニュー画面のいずれかから直接呼び出され得るモジュールを全て特定する。さらに、前処理部１１２は、特定したモジュールのいずれかから直接または間接に呼び出される全てのモジュールを特定する。そして、前処理部１１２は、残りのモジュール（すなわち、特定されたモジュール以外のモジュール）を、ソースコードの構造上実行され得ない構成要素として抽出する。
【００４１】
また、対象システムがバッチ系システムである場合、前処理部１１２は、まず、対象システムにおけるジョブフローのいずれかから直接呼び出され得るモジュールを全て特定する。次に、前処理部１１２は、特定したモジュールのいずれかから直接または間接に呼び出される全てのモジュールを特定する。そして、前処理部１１２は、残りのモジュール（すなわち、特定されたモジュール以外のモジュール）を、ソースコードの構造上実行され得ない構成要素として抽出する。
【００４２】
ステップＳ１０２の処理が終了すると、次に、判定単位決定部１１３が、対象ソースコードをユニットに分割する。
図６は、判定単位決定部１１３が取得するユニットの例を示す説明図である。同図において、判定単位決定部１１３は、対象ソースコードを実行経路の分岐ｎ１およびｎ２と、結合ｎ３とで分割して、ユニットＵＮ−０１〜ＵＮ−０６を取得している。
【００４３】
図７は、判定単位決定部１１３が対象ソースコードを分割した結果の表示例を示す説明図である。例えば、判定単位決定部１１３は対象ソースコードの分割結果を結果出力部１２１に出力し、結果出力部１２１は、使用状況判定部１１７が行う使用状況判定の判定単位として、図７に示すようなデータを出力する。これによって、ユーザは、ソースコード上における判定単位（ユニット）の位置を特定することができる。
【００４４】
なお、判定単位決定部１１３は、対象ソースコードにおける実行経路の分岐のうち、実データの値に基づく分岐のみで分割を行う。例えば、所定の処理を実行した戻り値として得られるエラーコードの値による分岐など、実データの値以外の条件による分岐ではソースコードを分割しない。
【００４５】
図８は、判定単位決定部１１３が、実行経路の分岐が実データの値に基づく分岐か否かを判定する例を示す説明図である。
同図において、行Ｌ１３およびＬ１４の条件文は、それぞれユニットＵＮ−０２およびユニットＵＮ−０３が実行されるための条件を示している。そして、行Ｌ１２において、この条件文で用いられる変数「ＡＡＡ」とデータ「ＤＡＴＡ１−ＣＯＬ０３」とが対応付けられている。さらに、行Ｌ１１において、データ「ＤＡＴＡ１−ＣＯＬ０３」の宣言が行われている。例えば、ＤＡＴＡ１−ＣＯＬ０３は、「ＤＡＴＡ１」という名称の表形式のデータのうち、第３列の各データを示す。
このように、判定単位決定部１１３は、ソースコードを辿って、分岐条件が実データの値に基づく分岐か否かを判定する。
【００４６】
図９は、判定単位決定部１１３が、取得する変数とデータとの対応付けの例を示す説明図である。
同図において、実行条件（変数名）欄には、各ユニットが実行されるための条件が変数名を用いて示されている。図９の例では、図８の行Ｌ１３およびＬ１４で得られる条件が示されている。また、実行条件（データ名）欄には、各ユニットが実行されるための条件がデータ名を用いて示されている。図９の例では、実行条件（変数名）に示される条件の変数名が、行Ｌ１２に示されるデータ名に置き換えられている。
次に説明するＳＱＬ生成処理において、ＳＱＬ生成部１１４は、このデータ名を用いて示される実行条件に従って、ＳＱＬにおいて計数すべきデータを特定することができる。
【００４７】
ステップＳ１０３の処理が終了すると、次に、ＳＱＬ生成部１１４が、ＳＱＬを生成する（ステップＳ１０４）。
図１０は、ＳＱＬ生成部１１４が生成するＳＱＬの例を示す説明図である。同図において、ＳＱＬの領域Ａ１１は、調査対象データの定義を示し、領域Ａ１２は、調査結果格納用データの定義を示している。
【００４８】
また、領域Ａ１３は、ＳＱＬを実行して行われる、実データ出現数のカウント処理およびカウント結果の格納処理が記述されている。この領域Ａ１３における処理の記述は、判定単位決定部１１３が取得した、データ名を用いて示される実行条件に従って、ＳＥＬＥＣＴ文を用いて記述される。ここでいう「ＳＥＬＥＣＴ文」は、指定されたデータベース（ここではテーブル取得部１０１が取得する実データ）から、特定の条件を満たすデータを抽出するコマンドである。
【００４９】
ステップＳ１０４の処理が終了すると、次に、マスタ登録有無判定部１１５が、テーブル取得部１０１の取得した実データが、マスタデータとして登録されているデータか否かを判定する（ステップＳ１１１）。また、統計処理部１１６は、ＳＱＬ生成部１１４の生成したＳＱＬを実行して、各ユニットについて、テーブル取得部１０１の取得した実データのうち当該ユニットが実行されるための条件を満たすデータの数を計数する（ステップＳ１１２）。
【００５０】
図１１は、統計処理部１１６が計数を行った結果の例を示す説明図である。同図に示す表形式のデータの各行は１つのユニットに対応しており、出現数欄には、テーブル取得部１０１の取得した実データのうち当該ユニットが実行されるための条件を満たすデータの数が格納されている。例えば、ＤＡＴＡ１−ＣＯＬ０３、すなわち表形式のデータであるＤＡＴＡ１の第３列に格納されている各データのうち、ユニットＵＮ−０２が実行されるための条件を満たすデータは、値が「０１」のデータであり、そのデータの数は「２００００」であることが示されている。
【００５１】
さらに、統計処理部１１６は、計数結果を全データ数で除算して出現比率を算出し、出現比率欄に格納している。例えば、統計処理部１１６は、ユニット−０２について計数したデータ数「２００００」を、ＤＡＴＡ１の第３列に格納されているデータの数で除算した商「４０．０％」を、ユニットＵＮ−０２の行の出現比率欄に格納している。
【００５２】
ステップＳ１１１およびＳ１１２の処理が終了すると、使用状況判定部１１７は、各ユニットの使用状況を判定する（ステップＳ１２１）。
図１２は、使用状況判定部１１７が各ユニットの使用状況を判定する際の判定基準の例を示す説明図である。例えば、図１１におけるユニットＵＮ−０２の計数結果に図１２の判定基準を適用すると、ユニットＵＮ−０２における出現比率「４０％」は、図１２（ａ）に示す出現比率閾値「０．５％」以上に該当する。したがって、使用状況判定部１１７は、ＤＡＴＡ１−ＣＯＬ０３のデータがマスタデータに該当するか否かにかかわらず、ユニットＵＮ−０２は使用中であると判定する。
【００５３】
そして、結果出力部１２１は、使用状況判定部１１７の判定結果を出力する（ステップＳ１２２）。その後、図２の処理を終了する。例えば、ソースコード分析装置１のユーザ（例えば対象システムのメンテナンス作業者）は、ユニットＵＮ−０２が使用中であるとの判定結果を参照して、対象ソースコードから、ユニットＵＮ−０２の部分を削除するべきでないことを把握できる。さらには、ユーザは、図１１に示される出現比率を参照して、ユニットＵＮ−０２およびＵＮ−０３は、それぞれ出現比率「４０．０％」および「６０．０％」と、比較的高い値を示していることから、対象システムにおけるこれらのユニットの影響が比較的大きいと判断することができる。すなわち、これらのユニットを最適化（チューニング）すれば、対象システムの運用時にこれらのユニットが実行される可能性が高いので、最適化の結果を得やすいことを把握し得る。
【００５４】
次に、ソースコード分析装置１の動作について、更に具体的な例を用いて説明する。
図１３は、対象ソースファイルの構造の例を示す説明図である。ここでは、企業における社宅業務や家賃補助支払い業務を行うシステムのソースコードを例とする。
【００５５】
まず、この対象システムは、以下の決まりに基づいて処理を行うよう設計されている。
１．この企業には、管理職の社員と一般社員とが存在する。
２．管理職の社員は、社宅と家賃補助とのいずれかを選択できる。一般社員は家賃補助のみ受けられる。
３．管理職が社宅または家賃補助を受ける場合、ポイント申請が必要である。
４．既婚／未婚、出向の有無で、家賃補助の支給額が異なる。
５．未婚では３万円、既婚では６万円の補助金が支払われる。
６．勤務地区分が「海外」の企業に出向している場合、家賃補助の増額がある。
【００５６】
また、対象システムの使用を開始した後、以下のような運用変更があったとする。
Ａ．ある日を境に、勤務地区分が「海外」の企業に出向している場合の家賃補助の増額は無くなり、別の手当てで支給される規則になった。
Ｂ．システムの更新は行われず、入力データの勤務地区分欄を空欄とすることで、家賃補助の増額を行わない運用がなされている。
【００５７】
図１４は、ソースコード分析装置１が参照するデータ、すなわち、テーブル取得部１０１が取得する実データの例を示す説明図である。ソースコード分析装置１は、「住宅支援申請」ファイルから、支援区分、社員区分、既婚・未婚区分、出向ステータスおよび勤務地区分の各データを読み出す。この「住宅支援申請」ファイルには、対象システムが、「結果通知処理」においてデータを書き込んでいる。
【００５８】
これらのデータのうち、社員区分、既婚・未婚区分および出向ステータスの各データ「社員マスタ」ファイルにマスタ登録されている。また、勤務地区分のデータは、「出向先企業マスタ」ファイルにマスタ登録されている。これらマスタファイルに登録されているマスタデータは、対象システムにおける処理対象の状況を常に反映しているようにメンテナンスされる対象に設定されている。従って、マスタ登録されている項目は、現在の運用において使用されている可能性が高い。そこで、使用状況判定部１１７は、各ユニットの使用状況を判定する際に、当該ユニットが実行されるための条件に出現するデータがマスタ登録されているか否かを判定条件の１つとしている。
【００５９】
図１５は、判定単位決定部１１３が取得するユニットの例を示す説明図である。ステップＳ１０３（図２）で説明したように、判定単位決定部１１３は、実行経路の分岐や結合において対象ソースコードを分割してユニットを取得する。
【００６０】
図１６は、ＳＱＬ生成部１１４が生成する、各ユニットが実行されるための条件を満たすデータの数を計数するＳＱＬの例を示す説明図である。
例えば、図１５において、ユニットＵＮ−０１は、社員区分データの値が「管理職」である場合に実行される。そこで、ＳＱＬ生成部１１４は、図１６において、「住宅支援申請」ファイルから「社員区分＝管理職」となっているデータの数を計数するＳＱＬを生成している。
【００６１】
また、「(申請日 >= 2009/4/1 AND 申請日 <= 2011/3/31)」の条件は、後述するように、対象システムの現状を把握するために、比較的新しいデータのみを用いるように期間設定を行う条件である。
なお、ここで設定される期間は直近の期間に限らず、ソースコード分析装置１が、様々な期間設定を受け付けるようにしてもよい。これにより、例えばソースコード分析装置１が、過去の一時期における、各ユニットが実行されるための条件を満たすデータの数を出力するようにできる。これにより、ユーザは、直近の期間における各ユニットの実行状況と、過去の一時期における各ユニットの実行状況とを比較するなど、様々な解析を行うことができる。
なお、ユニットＵＮ−００（図１５）は、必ず実行されるユニットであり、実行されるための条件が設定されていないため、図１６のＳＱＬにおいてデータ計数の対象となっていない。
【００６２】
図１７は、マスタ登録有無判定部１１５が、マスタ登録の有無を判定するためのＳＱＬの例を示す説明図である。
マスタ登録有無判定部１１５は、例えば対象システムが参照（ＳＥＬＥＣＴ）のみを行って書込を行わないファイルをマスタファイルと判定し、マスタファイルに含まれるデータをマスタデータと判定する。
【００６３】
図１８は、統計処理部１１６が計数の対象とする期間の設定例を示す説明図である。同図では、統計処理部１１６が、２０１１年４月から過去２年間（７３０日）のデータを計数の対象とするように設定されている。
対象システムの運用変更等によって、以前使用されていたデータが、ある時点から使用されなくなる場合がある。例えば、ここで説明しているシステムでは、上述したように、勤務地区分欄のデータが使用されなくなっている。
【００６４】
そこで、統計処理部１１６が比較的新しいデータのみを計数の対象をすることで、各ユニットの使用状況を把握する際に、最近のシステム運用における各データの使用状況を反映させることができる。
かかる計数を実現するために、図１６に示すように、ＳＱＬ生成部１１４は、データの期間設定を含むＳＱＬを生成している。
【００６５】
なお、調査基準日の設定を省略することも可能である。この場合、ＳＱＬ生成部１１４は、例えばＳＱＬを生成する時点を調査基準日として、実データ調査対象期間の範囲内のデータを計数するためのＳＱＬを生成する。このように、ＳＱＬ生成時点を調査基準日とすることで、調査基準日の誤設定を防止でき、比較的新しいデータを用いて計数を行うことができる。
【００６６】
図１９は、図７で説明したのと同様、ソースコードにおける各ユニットの位置情報の例を示す説明図である。ソースコード分析装置１が当該情報を出力することで、ユーザは、各ユニットの位置を把握することができる。
【００６７】
図２０は、使用状況判定部１１７が各ユニットの使用状況を判定する際の判定基準の例を示す説明図である。同図では、出現比率閾値が「５．１％」に設定されている。その他は、図１２に示した判定基準と同様である。
【００６８】
図２１は、使用状況判定部１１７による各ユニットの使用状況の判定結果の例を示す説明図である。同図において、出現数欄には、統計処理部１１６が計数した、各ユニットが実行されるための条件を満たすデータの数が格納されている。また、出現比率欄には、各ユニットが実行されるための条件を満たすデータの数を、全データ数で除算した商が格納されている。また、マスタ登録の欄には、マスタ登録有無判定部１１５によるマスタ登録の有無の判定結果が格納されている。
使用状況判定部１１７は、この出現比率のデータとマスタ登録のデータとに判定基準（図２０）を適用して、各ユニットの使用状況の判定結果を生成し判定欄に書き込んでいる。
【００６９】
ユーザは、この判定結果や出現比率を参照して、不使用と思われるユニットを検出することができる。図２１に示される例では、ユニットＵＮ−０５およびＵＮ−０６が使用されていない可能性がある。そこで、ユーザは、これらのユニットが必要か否かを、対象システムの運用状況に基づいて判断する。不要と判断した場合には、当該ユニットをソースコードから削除することで、ソースコードが、よりコンパクトになってメンテナンスし易くなり、また、プログラムをキャッシュする際のヒット率が向上するなど、プログラム実行速度の向上も期待できる。
【００７０】
あるいは、ユーザは、ソースコードをチューニングする際に、各ユニットの使用状況（例えば出現比率）を参照して、ソースコードのどの部分の使用頻度が高いかを把握し、使用頻度の高い部分を重点的にチューニングすることで、効率よくチューニングを行い得る。例えば、使用状況判定部１１７が、各ユニットのうち、実行されるための条件を満たすデータの数が所定数以上のユニットを抽出し、ユーザは、当該ユニットを重点的にチューニングする。
【００７１】
なお、使用状況判定部１１７が行う判定は、各ユニットが実行されるための条件を満たすデータの数（出現数）ないし出現比率やマスタ登録の有無に基づくものに限らない。例えば、使用状況判定部１１７が、各ユニットが実行されるための条件を満たすデータの数の、時間軸方向における減少率に基づいて、当該ユニットの要否を判定するようにしてもよい。例えば、使用状況判定部１１７は、直近の１年間のデータによる出現数ないし出現比率が、その前１年間のデータによる出現数ないし出現比率に対して、所定の閾値以上の減少率を示している場合に、判定対象のユニットが不使用となっていると判定する。
このように、出現数、すなわちユニットの実行回数が大幅に減少している場合、最近では使われなくなっている可能性がある。ソースコード分析装置１は、かかる不使用の可能性をいち早く検出し得る。
【００７２】
あるいは、各ユニットが実行されるための条件を満たすデータの出現期間が過去の短期間のみである場合、使用状況判定部１１７が、当該ユニットが不使用となった可能性が高いと判定するようにしてもよい。
これにより、過去の一時期における特殊な事情によって一部のユニットが使用された場合にも、ソースコード分析装置１は、当該特殊な事情を排除して、現在ユニットが使用されているか否かを、より的確に判定し得る。
【００７３】
以上のように、ＳＱＬ生成部１１４は、各ユニットが実行されるための条件を抽出してＳＱＬを生成し、使用状況判定部１１７は、当該条件を満たす実データの数に基づいて、ユニットの使用状況を判定する。これにより、ソースコードの構造上は使用され得るが、システムの運用上使用されないユニットを検出し得る。この点で、各ユニットの使用状況をより的確に把握し得る。
【００７４】
また、使用状況判定部１１７は、各ユニットが実行されるための条件を満たすデータがマスタデータか否かに基づいて、ソースコードの使用状況を判定する。マスタデータは、対象システムにおける処理対象の状況を常に反映しているようにメンテナンスされる対象に設定されているデータである。従って、各ユニットが実行されるための条件を満たすデータがマスタデータである場合、現在の運用において当該ユニットが使用されている可能性が高いと考えられる。従って、使用状況判定部１１７は、より的確に各ユニットの使用状況を判定し得る。
【００７５】
また、使用状況判定部１１７は、最近の所定期間内の実データに基づいて、各ユニットの使用状況を判定する。これにより、各ユニットの使用状況を把握する際に、最近のシステム運用における各データの使用状況を反映させることができる。
【００７６】
また、使用状況判定部１１７は、ＳＱＬ生成部１１４がＳＱＬを生成する時点から所定の期間内のデータを用いて各ユニットの使用状況を判定する。これにより、調査基準日を誤設定してしまうことに起因して、誤った分析結果を得てしまうことを防止することができ、比較的新しいデータを用いて計数を行うことができる。
【００７７】
また、使用状況判定部１１７は、各ユニットが不使用か否かを判定する。これにより、ユーザは不使用のユニットを検出し、ソースコードから当該ユニットを削除するか否かを検討することができる。
【００７８】
また、使用状況判定部１１７は、各ユニットが実行されるための条件を満たすデータの数の、時間軸方向における減少率に基づいて、当該ユニットの要否を判定する。これにより、ソースコード分析装置１（使用状況判定部１１７）は、ユニットが不使用である可能性を、いち早く検出し得る。
【００７９】
また、使用状況判定部１１７は、各ユニットのうち、実行されるための条件を満たすデータの数が所定数以上のユニットを抽出する。これにより、ユーザは、ソースコードのどの部分の使用頻度が高いかを把握でき、使用頻度の高い部分を重点的にチューニングすることで、効率よくチューニングを行い得る。
【００８０】
なお、ソースコード分析装置１の全部または一部の機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することにより各部の処理を行ってもよい。なお、ここでいう「コンピュータシステム」とは、ＯＳや周辺機器等のハードウェアを含むものとする。
また、「コンピュータシステム」は、ＷＷＷシステムを利用している場合であれば、ホームページ提供環境（あるいは表示環境）も含むものとする。
また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、コンパクトディスク等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムを送信する場合の通信線のように、短時間の間、動的にプログラムを保持するもの、その場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリのように、一定時間プログラムを保持しているものも含むものとする。また上記プログラムは、前述した機能の一部を実現するためのものであっても良く、さらに前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるものであっても良い。
【００８１】
以上、この発明の実施形態を図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計変更等も含まれる。
【符号の説明】
【００８２】
１  ソースコード分析装置
１０１  テーブル取得部
１０２  ソースコード取得部
１１１  前処理部
１１２  判定単位決定部
１１３  ＳＱＬ生成部
１１４  マスタ登録有無判定部
１１５  統計処理部
１１６  使用状況判定部
１２１  結果出力部
【図１】
0005548648.tif 000002
【図２】
0005548648.tif 000003
【図３】
0005548648.tif 000004
【図４】
0005548648.tif 000005
【図５】
0005548648.tif 000006
【図６】
0005548648.tif 000007
【図７】
0005548648.tif 000008
【図８】
0005548648.tif 000009
【図９】
0005548648.tif 000010
【図１０】
0005548648.tif 000011
【図１１】
0005548648.tif 000012
【図１２】
0005548648.tif 000013
【図１３】
0005548648.tif 000014
【図１４】
0005548648.tif 000015
【図１５】
0005548648.tif 000016
【図１６】
0005548648.tif 000017
【図１７】
0005548648.tif 000018
【図１８】
0005548648.tif 000019
【図１９】
0005548648.tif 000020
【図２０】
0005548648.tif 000021
【図２１】
0005548648.tif 000022