説明

ソースコード分析装置、ソースコード分析方法およびプログラム

【課題】ソースコードの各部分の使用状況をより的確に把握できるようにする。
【解決手段】判定単位決定部113が、ソースコードの実行経路の分岐や結合に基づいて、当該ソースコードをユニットに分割する。そして、統計処理部116は、ソースコードに入力されたデータである実データを用いて、各ユニットの使用状況を判定する。このように、実データを用いて各ユニットの使用状況を判定することで、ソースコードの構造上は使用され得るが運用上使用されていない部分も検出することができる。この点で、ソースコードの各部分の使用状況をより的確に把握できる。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ソースコードの各部分の使用状況を分析するソースコード分析装置、当該ソースコード分析装置のソースコード分析方法およびプログラムに関する。
【背景技術】
【0002】
ソースコード(ソースプログラム)をメンテナンスする際、ソースコードの各部分の使用状況を把握することで、メンテナンスをより的確に行い得る。例えば、過去のメンテナンスによって、あるいは、システムの運用変更によって使われなくなった部分がある場合、当該部分を把握できれば、当該使われなくなった部分を削除して、必要な記憶容量を削減し、さらにはプログラム実行速度の向上を図ることができる。
【0003】
かかるソースコードの各部分の使用状況の把握に関連して、特許文献1に記載の技術では、プログラム群から実行経路と変数とを検出し、検出された実行経路と変数の追跡を行って、変数の取り得る値を求め、以後追跡する実行経路においては、変数値を限定する。そして、実行経路の追跡中に、実行経路が変数値の満たす条件によって分岐する箇所がある場合、追跡される実行経路を、限定された変数値が該条件を満たす実行経路だけに限定し、また、実行経路の追跡中に、データの入出力が行われる箇所がある場合、該入出力情報を取得する。
これにより、プログラムの分析とプログラムの入出力情報の取得を効率良く行えるとされている。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2007−122207号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、特許文献1に記載の技術では、プログラムの構造上は使用され得るが、事実上使用されなくなった部分を検出することはできない。例えば、システムの運用変更によってプログラムの構造上は実行され得るが実際には使用されない部分が生じ得るが、特許文献1に記載の技術では、当該部分を検出することはできない。
【0006】
本発明は、このような事情を考慮してなされたものであり、その目的は、ソースコードの各部分の使用状況をより的確に把握可能なソースコード分析装置、ソースコード分析方法およびプログラムを提供することにある。
【課題を解決するための手段】
【0007】
この発明は上述した課題を解決するためになされたもので、本発明の一態様によるソースコード分析装置は、ソースコードに入力されたデータである実データを取得する実データ取得部と、前記ソースコードの部分について、当該部分が実行されるための条件を抽出する条件抽出部と、前記実データ取得部が取得した実データのうち、前記条件抽出部が抽出した条件を満たすデータの数に基づいて、前記ソースコードの部分の使用状況を判定する使用状況判定部と、を具備することを特徴とする。
【0008】
また、本発明の一態様によるソースコード分析装置は、上述のソースコード分析装置であって、前記条件抽出部が抽出した条件に適用されるデータのうちマスタデータを抽出するマスタデータ抽出部を具備し、前記使用状況判定部は、前記条件抽出部が抽出した条件を満たす値のデータがマスタデータに含まれるか否かに基づいて、前記ソースコードの部分の使用状況を判定することを特徴とする。
【0009】
また、本発明の一態様によるソースコード分析装置は、上述のソースコード分析装置であって、前記使用状況判定部は、所定の期間内の実データに基づいて、前記ソースコードの部分の使用状況を判定することを特徴とする。
【0010】
また、本発明の一態様によるソースコード分析装置は、上述のソースコード分析装置であって、前記使用状況判定部は、前記判定を行う時点における直近の所定の期間内の実データに基づいて、前記ソースコードの部分の使用状況を判定することを特徴とする。
【0011】
また、本発明の一態様によるソースコード分析装置は、上述のソースコード分析装置であって、前記使用状況判定部は、前記ソースコードの部分が不使用か否かを判定することを特徴とする。
【0012】
また、本発明の一態様によるソースコード分析装置は、上述のソースコード分析装置であって、前記使用状況判定部は、前記実データ取得部が取得する実データのうち、前記条件抽出部が抽出した条件を満たすデータの数の、時間軸方向における減少率に基づいて、前記ソースコードの部分が不使用か否かを判定することを特徴とする
【0013】
また、本発明の一態様によるソースコード分析装置は、上述のソースコード分析装置であって、前記使用状況判定部は、前記ソースコードの部分のうち、前記条件抽出部が抽出した条件を満たすデータの数が所定数以上の部分を抽出することを特徴とする。
【0014】
また、本発明の一態様によるソースコード分析方法は、ソースコード分析装置のソースコード分析方法であって、ソースコードに入力されたデータである実データを取得する実データ取得ステップと、前記ソースコードの部分について、当該部分が実行されるための条件を抽出する条件抽出ステップと、前記実データ取得ステップにて取得した実データのうち、前記条件抽出部が抽出した条件を満たすデータの数に基づいて、前記ソースコードの部分の使用状況を判定する使用状況判定ステップと、を具備することを特徴とする。
【0015】
また、本発明の一態様によるプログラムは、ソースコード分析装置としてのプログラムに、ソースコードに入力されたデータである実データを取得する実データ取得ステップと、前記ソースコードの部分について、当該部分が実行されるための条件を抽出する条件抽出ステップと、前記実データ取得ステップにて取得した実データのうち、前記条件抽出部が抽出した条件を満たすデータの数に基づいて、前記ソースコードの部分の使用状況を判定する使用状況判定ステップと、を実行させるためのプログラムである。
【発明の効果】
【0016】
この発明によれば、ソースコードの各部分の使用状況をより的確に把握することができる。
【図面の簡単な説明】
【0017】
【図1】本発明の一実施形態におけるソースコード分析装置の概略構成を示す構成図である。
【図2】同実施形態において、ソースコード分析装置が対象ソースコードを分析する処理手順を示すフローチャートである。
【図3】同実施形態において、ソースコード取得部が取得する対象ソースコードの例を示す説明図である。
【図4】同実施形態において、ソースコード取得部が取得する対象ソースコードの構造の例を示す説明図である。
【図5】同実施形態における前処理部による、対象ソースコードの構造上実行されることのない部分の抽出結果の例を示す説明図である。
【図6】同実施形態において、判定単位決定部が取得するユニットの例を示す説明図である。
【図7】同実施形態において、判定単位決定部が対象ソースコードを分割した結果の表示例を示す説明図である。
【図8】同実施形態において、判定単位決定部が、実行経路の分岐が実データの値に基づく分岐か否かを判定する例を示す説明図である。
【図9】同実施形態において、判定単位決定部が、取得する変数とデータとの対応付けの例を示す説明図である。
【図10】同実施形態において、SQL生成部が生成するSQLの例を示す説明図である。
【図11】同実施形態において、統計処理部が計数を行った結果の例を示す説明図である。
【図12】同実施形態において、使用状況判定部が各ユニットの使用状況を判定する際の判定基準の例を示す説明図である。
【図13】同実施形態における対象ソースファイルの構造の例を示す説明図である。
【図14】同実施形態において、ソースコード分析装置が参照するデータの例を示す説明図である。
【図15】同実施形態において、判定単位決定部が取得するユニットの例を示す説明図である。
【図16】同実施形態において、SQL生成部が生成する、各ユニットが実行されるための条件を満たすデータの数を計数するSQLの例を示す説明図である。
【図17】同実施形態において、マスタ登録有無判定部が、マスタ登録の有無を判定するためのSQLの例を示す説明図である。
【図18】同実施形態において、統計処理部が計数の対象とする期間の設定例を示す説明図である。
【図19】同実施形態に係るソースコードにおける各ユニットの位置情報の例を示す説明図である。
【図20】同実施形態において、使用状況判定部が各ユニットの使用状況を判定する際の判定基準の例を示す説明図である。
【図21】同実施形態における、使用状況判定部による各ユニットの使用状況の判定結果の例を示す説明図である。
【発明を実施するための形態】
【0018】
以下、図面を参照して、本発明の一実施形態について説明する。
図1は、本発明の一実施形態におけるソースコード分析装置1の概略構成を示す構成図である。同図において、ソースコード分析装置1は、テーブル取得部(実データ取得部)101と、ソースコード取得部102と、ソースコード解析部111と、前処理部112と、判定単位決定部113と、SQL生成部(条件抽出部)114と、マスタ登録有無判定部115と、統計処理部116と、使用状況判定部117と、結果出力部121とを具備する。
【0019】
ソースコード分析装置1は、データを読み込んで動作するシステム(以下、「対象システム」と称する)のソースコード(以下、「対象ソースコード」と称する)を分析する装置であり、実データに基づいて、対象ソースコードの各部の使用状況を判定する。
ここでいう「実データ」は、ソースコードに入力されたデータ(より具体的には、ソースコードがコンパイルされた実行形式により、生成、参照、変更または削除されたデータ)である。この実データは、ソースコードをコンパイルして作成された実行ファイルをシステム運用時に動作させた結果、データベースに順次蓄積されるデータ(以下、「実績データ」と称する)、およびデータベースに予め登録しておき、システム運用時には専ら参照することを目的として作成された静的なデータ(以下、「マスタデータ」と称する)からなる。
ソースコード分析装置1は、例えば所定のプログラムを実行するコンピュータによって構成される。
【0020】
テーブル取得部101は、実データを取得する。例えば、テーブル取得部101は、データベースサーバ装置から、表形式のデータにて実データを取得する。なお、テーブル取得部101の取得する実データは、表形式のものに限らず、例えばプレーンテキスト形式など、他の形式のデータであってもよい。
ソースコード取得部102は、対象ソースコードを取得する。例えば、ソースコード取得部102は、対象システムが具備する記憶部から、テキストデータのソースコードを取得する。
【0021】
テーブル取得部101とソースコード取得部102とは、例えば、ソースコード分析装置1の具備する通信部によって構成される。例えば、当該通信部は、LAN(Local Area Network)等の通信ネットワークを介してデータベースサーバ装置やメンテナンス対象のシステムに接続されており、これらデータベースサーバ装置やメンテナンス対象のシステムと通信を行って、実データや対象ソースコードを取得する。
【0022】
ソースコード解析部111は、ソースコード取得部102が取得するソースコードを解析して、当該ソースコードにおける構成要素としてのモジュール(サブルーチン)を抽出する。
以下では、対象ソースコードの各部が完全にモジュール化されており、対象ソースコードの始点モジュールが、条件分岐とモジュール呼び出しとで構成される場合について説明する。ここでいう対象ソースコードの始点モジュールとは、対象システムがユーザの要求に応じた処理を実行する際に最初に実行されるモジュールである。例えば、対象システムがオンライン系のシステムである場合、メニュー画面からの処理要求に応じて最初に起動されるモジュールが、対象ソースコードの始点モジュールに該当する。また、対象システムがバッチ系システムである場合、当該対象システムにおけるジョブフローから直接呼び出されるモジュールが、対象ソースコードの始点モジュールに該当する。
この場合、各モジュールが構成要素に該当する。なお、始点モジュールに条件分岐やモジュール呼び出し以外の命令文が含まれる場合は、この命令文の各々が構成要素に該当する。
【0023】
また、ソースコード解析部111は、各モジュールの呼び出し関係の解析や、条件分岐で用いられるデータが実績データかマスタデータかの判定を行う。詳細については後述する。
【0024】
前処理部112は、ソースコード分析装置1が行うソースコード分析の前処理として、対象ソースコードの構造上実行され得ない部分を抽出する。詳細については後述する。
判定単位決定部113は、条件文などによる対象ソースコード上の実行経路の分岐や結合に従って、対象ソースコードをユニットに分割する。ここでいう「ユニット」は、対象ソースコード中において、同一の条件の下で実行される部分の集合である。ユニットは、対象ソースコードを実行経路の分岐や結合毎に分割して得られる。ただし、後述するように、ここでの実行経路の分岐は、実データの値に応じた分岐に限られる。
【0025】
SQL生成部114は、判定単位決定部113の処理によって得られるユニット毎に、当該ユニットが実行されるための条件を抽出し、テーブル取得部101が取得するデータのうち、抽出した条件を満たすデータの数を計数するためのプログラム(以下、「SQL」と称する)を生成する。
マスタ登録有無判定部115は、テーブル取得部101が取得するデータがマスタデータか否かを判定する。
【0026】
統計処理部116は、SQL生成部114の生成したSQLを実行して、各ユニットについて、テーブル取得部101の取得した実データのうち当該ユニットが実行されるための条件を満たすデータの数(出現数)を計数する。その際、統計処理部116は、マスタ登録有無判定部115の判定結果に基づいて、実績データとマスタデータとの各々について出現数を計数する。
使用状況判定部117は、統計処理部116の計数結果に基づいて、各ユニットの使用状況を判定する。
【0027】
ソースコード解析部111と、前処理部112と、判定単位決定部113と、SQL生成部114と、マスタ登録有無判定部115と、統計処理部116と、使用状況判定部117とは、例えばソースコード分析装置1の具備するCPU(Central Processing Unit、中央処理装置)が、ソースコード分析装置1の具備するプログラムを読み込んで実行することによって構成される。
【0028】
結果出力部121は、使用状況判定部117の判定結果を出力する。例えば、結果出力部121は、液晶ディスプレイ等の表示装置を具備し、判定結果を画面表示する。あるいは、結果出力部121が、所定のファイルに判定結果を書き込むなど、画面表示以外の手段を用いて判定結果を出力するようにしてもよい。
【0029】
次に、ソースコード分析装置1の動作について説明する。
図2は、ソースコード分析装置1が対象ソースコードを分析する処理手順を示すフローチャートである。例えば、ソースコード分析装置1は、その具備する入力装置が、対象ソースコードの分析を要求する操作入力を受け付けると同図の処理を開始する。
【0030】
同図の処理において、まず、ソースコード取得部102は、対象ソースコードを取得する。そして、ソースコード解析部111は、この対象ソースコードの構造を解析する(ステップS101)。
具体的には、ソースコード解析部111は、まず、対象ソースコードから各構成要素(ここでは各モジュール)を抽出する。そして、ソースコード解析部111は、抽出した各モジュールに識別情報(ID;Identifier)を付与する。
【0031】
次に、ソースコード解析部111は、各モジュールの呼び出し関係を解析する。そして、ソースコード解析部111は、解析によって得られた呼び出し関係を示す構文木を生成する。例えば、ソースコード解析部111は、各モジュールに付与した識別情報をノードとする構文木を生成する。
【0032】
さらに、ソースコード解析部111は、各条件分岐で用いられるデータが、実績データかマスタデータかを判定する。例えば、ソースコード解析部111は、各条件分岐で用いられる変数の変数名に基づいて、実績データとマスタデータとを区別する。例えば、ソースコード解析部111は、変数名に文字列「master」が含まれる場合に、当該変数に代入されるデータはマスタデータであると判定し、それ以外の変数に代入されるデータは実績データであると判定する。
あるいは、ソースコード解析部111が、ソースコードを辿って各データの読出元を特定し、特定した読出元のファイル名やデータベース名に基づいて実績データとマスタデータとを区別するようにしてもよい。例えば、ソースコード解析部111は、データ読出元のファイル名またはデータベース名に文字列「master」が含まれる場合に、当該ファイルまたはデータベースから読み出されるデータはマスタデータであると判定し、それ以外のデータは実績データであると判定する。
【0033】
ステップS101の処理が終了すると、次に、前処理部112は、ソースコード解析部111の解析結果に基づいて、対象ソースコードの構造上実行され得ない部分を抽出する(ステップS102)。
【0034】
図3は、ソースコード取得部102が取得する対象ソースコードの例を示す説明図である。ソースコード取得部102は、例えば図3に示すようなCOBOLで記述されたソースコードを取得する。ただし、本発明の適用範囲はCOBOLに限定されず、様々な言語のソースコードに適用可能である。
【0035】
図4は、ソースコード取得部102が取得する対象ソースコードの構造の例を示す説明図である。同図において、部分P1に含まれる構成単位「SE−09」、「SE−10」および「SE−11」は、対象ソースコード中のモジュールを示している。また、これらのモジュールは、メインルーチン(「SE−01」など、丸印に挟まれた経路の部分)から呼び出されない。従って、これら構成単位「SE−09」、「SE−10」および「SE−11」は、対象ソースコードの構造上実行され得ない。
【0036】
図5は、前処理部112による、対象ソースコードの構造上実行され得ない部分の抽出結果の例を示す説明図である。同図に示す抽出結果において、各行はソースコードの構成単位に対応している。
【0037】
ここで、構成要素番号は、ソースコードの構成要素を識別する番号であり、例えば、前処理部112が、連番にて各構成要素に付加する。また、ソースコードファイル名は、構成要素が含まれるファイル名を示す。また、開始行と開始位置とは、ソースコードファイルにおける構成要素の開始位置を行(Low)および列(Column)にて示す。また、終了行と終了位置とは、ソースコードファイルにおける構成要素の終了位置を行および列にて示す。
【0038】
また、参照有無の値「有」は、ソースコードの構造上、構成要素が実行され得ることを示す。ここで、ソースコードの構造上実行され得る構成要素とは、対象システムの運用において、入力データが任意の値を取り得る場合に実行され得る構成要素をいう。一方、参照有無の値「無」は、ソースコードの構造上、構成要素が実行され得ないことを示す。ここで、ソースコードの構造上実行され得ない構成要素とは、対象システムの運用において、入力データが任意の値を取り得る場合でも実行され得ない構成要素をいう。
【0039】
例えば、前処理部112は、抽出結果を結果出力部121に出力し、結果出力部121は、ソースコード分析装置1の分析結果の一部として、図5に示すようなデータを出力する。
また、前処理部112によって、実行されることがないと判定された部分は、以後の処理の対象から除外される。
【0040】
ここで、対象システムがオンライン系のシステムである場合、前処理部112は、まず、トップメニューから呼び出され得る全てのメニュー画面を特定する。次に、前処理部112は、特定したメニュー画面のいずれかから直接呼び出され得るモジュールを全て特定する。さらに、前処理部112は、特定したモジュールのいずれかから直接または間接に呼び出される全てのモジュールを特定する。そして、前処理部112は、残りのモジュール(すなわち、特定されたモジュール以外のモジュール)を、ソースコードの構造上実行され得ない構成要素として抽出する。
【0041】
また、対象システムがバッチ系システムである場合、前処理部112は、まず、対象システムにおけるジョブフローのいずれかから直接呼び出され得るモジュールを全て特定する。次に、前処理部112は、特定したモジュールのいずれかから直接または間接に呼び出される全てのモジュールを特定する。そして、前処理部112は、残りのモジュール(すなわち、特定されたモジュール以外のモジュール)を、ソースコードの構造上実行され得ない構成要素として抽出する。
【0042】
ステップS102の処理が終了すると、次に、判定単位決定部113が、対象ソースコードをユニットに分割する。
図6は、判定単位決定部113が取得するユニットの例を示す説明図である。同図において、判定単位決定部113は、対象ソースコードを実行経路の分岐n1およびn2と、結合n3とで分割して、ユニットUN−01〜UN−06を取得している。
【0043】
図7は、判定単位決定部113が対象ソースコードを分割した結果の表示例を示す説明図である。例えば、判定単位決定部113は対象ソースコードの分割結果を結果出力部121に出力し、結果出力部121は、使用状況判定部117が行う使用状況判定の判定単位として、図7に示すようなデータを出力する。これによって、ユーザは、ソースコード上における判定単位(ユニット)の位置を特定することができる。
【0044】
なお、判定単位決定部113は、対象ソースコードにおける実行経路の分岐のうち、実データの値に基づく分岐のみで分割を行う。例えば、所定の処理を実行した戻り値として得られるエラーコードの値による分岐など、実データの値以外の条件による分岐ではソースコードを分割しない。
【0045】
図8は、判定単位決定部113が、実行経路の分岐が実データの値に基づく分岐か否かを判定する例を示す説明図である。
同図において、行L13およびL14の条件文は、それぞれユニットUN−02およびユニットUN−03が実行されるための条件を示している。そして、行L12において、この条件文で用いられる変数「AAA」とデータ「DATA1−COL03」とが対応付けられている。さらに、行L11において、データ「DATA1−COL03」の宣言が行われている。例えば、DATA1−COL03は、「DATA1」という名称の表形式のデータのうち、第3列の各データを示す。
このように、判定単位決定部113は、ソースコードを辿って、分岐条件が実データの値に基づく分岐か否かを判定する。
【0046】
図9は、判定単位決定部113が、取得する変数とデータとの対応付けの例を示す説明図である。
同図において、実行条件(変数名)欄には、各ユニットが実行されるための条件が変数名を用いて示されている。図9の例では、図8の行L13およびL14で得られる条件が示されている。また、実行条件(データ名)欄には、各ユニットが実行されるための条件がデータ名を用いて示されている。図9の例では、実行条件(変数名)に示される条件の変数名が、行L12に示されるデータ名に置き換えられている。
次に説明するSQL生成処理において、SQL生成部114は、このデータ名を用いて示される実行条件に従って、SQLにおいて計数すべきデータを特定することができる。
【0047】
ステップS103の処理が終了すると、次に、SQL生成部114が、SQLを生成する(ステップS104)。
図10は、SQL生成部114が生成するSQLの例を示す説明図である。同図において、SQLの領域A11は、調査対象データの定義を示し、領域A12は、調査結果格納用データの定義を示している。
【0048】
また、領域A13は、SQLを実行して行われる、実データ出現数のカウント処理およびカウント結果の格納処理が記述されている。この領域A13における処理の記述は、判定単位決定部113が取得した、データ名を用いて示される実行条件に従って、SELECT文を用いて記述される。ここでいう「SELECT文」は、指定されたデータベース(ここではテーブル取得部101が取得する実データ)から、特定の条件を満たすデータを抽出するコマンドである。
【0049】
ステップS104の処理が終了すると、次に、マスタ登録有無判定部115が、テーブル取得部101の取得した実データが、マスタデータとして登録されているデータか否かを判定する(ステップS111)。また、統計処理部116は、SQL生成部114の生成したSQLを実行して、各ユニットについて、テーブル取得部101の取得した実データのうち当該ユニットが実行されるための条件を満たすデータの数を計数する(ステップS112)。
【0050】
図11は、統計処理部116が計数を行った結果の例を示す説明図である。同図に示す表形式のデータの各行は1つのユニットに対応しており、出現数欄には、テーブル取得部101の取得した実データのうち当該ユニットが実行されるための条件を満たすデータの数が格納されている。例えば、DATA1−COL03、すなわち表形式のデータであるDATA1の第3列に格納されている各データのうち、ユニットUN−02が実行されるための条件を満たすデータは、値が「01」のデータであり、そのデータの数は「20000」であることが示されている。
【0051】
さらに、統計処理部116は、計数結果を全データ数で除算して出現比率を算出し、出現比率欄に格納している。例えば、統計処理部116は、ユニット−02について計数したデータ数「20000」を、DATA1の第3列に格納されているデータの数で除算した商「40.0%」を、ユニットUN−02の行の出現比率欄に格納している。
【0052】
ステップS111およびS112の処理が終了すると、使用状況判定部117は、各ユニットの使用状況を判定する(ステップS121)。
図12は、使用状況判定部117が各ユニットの使用状況を判定する際の判定基準の例を示す説明図である。例えば、図11におけるユニットUN−02の計数結果に図12の判定基準を適用すると、ユニットUN−02における出現比率「40%」は、図12(a)に示す出現比率閾値「0.5%」以上に該当する。したがって、使用状況判定部117は、DATA1−COL03のデータがマスタデータに該当するか否かにかかわらず、ユニットUN−02は使用中であると判定する。
【0053】
そして、結果出力部121は、使用状況判定部117の判定結果を出力する(ステップS122)。その後、図2の処理を終了する。例えば、ソースコード分析装置1のユーザ(例えば対象システムのメンテナンス作業者)は、ユニットUN−02が使用中であるとの判定結果を参照して、対象ソースコードから、ユニットUN−02の部分を削除するべきでないことを把握できる。さらには、ユーザは、図11に示される出現比率を参照して、ユニットUN−02およびUN−03は、それぞれ出現比率「40.0%」および「60.0%」と、比較的高い値を示していることから、対象システムにおけるこれらのユニットの影響が比較的大きいと判断することができる。すなわち、これらのユニットを最適化(チューニング)すれば、対象システムの運用時にこれらのユニットが実行される可能性が高いので、最適化の結果を得やすいことを把握し得る。
【0054】
次に、ソースコード分析装置1の動作について、更に具体的な例を用いて説明する。
図13は、対象ソースファイルの構造の例を示す説明図である。ここでは、企業における社宅業務や家賃補助支払い業務を行うシステムのソースコードを例とする。
【0055】
まず、この対象システムは、以下の決まりに基づいて処理を行うよう設計されている。
1.この企業には、管理職の社員と一般社員とが存在する。
2.管理職の社員は、社宅と家賃補助とのいずれかを選択できる。一般社員は家賃補助のみ受けられる。
3.管理職が社宅または家賃補助を受ける場合、ポイント申請が必要である。
4.既婚/未婚、出向の有無で、家賃補助の支給額が異なる。
5.未婚では3万円、既婚では6万円の補助金が支払われる。
6.勤務地区分が「海外」の企業に出向している場合、家賃補助の増額がある。
【0056】
また、対象システムの使用を開始した後、以下のような運用変更があったとする。
A.ある日を境に、勤務地区分が「海外」の企業に出向している場合の家賃補助の増額は無くなり、別の手当てで支給される規則になった。
B.システムの更新は行われず、入力データの勤務地区分欄を空欄とすることで、家賃補助の増額を行わない運用がなされている。
【0057】
図14は、ソースコード分析装置1が参照するデータ、すなわち、テーブル取得部101が取得する実データの例を示す説明図である。ソースコード分析装置1は、「住宅支援申請」ファイルから、支援区分、社員区分、既婚・未婚区分、出向ステータスおよび勤務地区分の各データを読み出す。この「住宅支援申請」ファイルには、対象システムが、「結果通知処理」においてデータを書き込んでいる。
【0058】
これらのデータのうち、社員区分、既婚・未婚区分および出向ステータスの各データ「社員マスタ」ファイルにマスタ登録されている。また、勤務地区分のデータは、「出向先企業マスタ」ファイルにマスタ登録されている。これらマスタファイルに登録されているマスタデータは、対象システムにおける処理対象の状況を常に反映しているようにメンテナンスされる対象に設定されている。従って、マスタ登録されている項目は、現在の運用において使用されている可能性が高い。そこで、使用状況判定部117は、各ユニットの使用状況を判定する際に、当該ユニットが実行されるための条件に出現するデータがマスタ登録されているか否かを判定条件の1つとしている。
【0059】
図15は、判定単位決定部113が取得するユニットの例を示す説明図である。ステップS103(図2)で説明したように、判定単位決定部113は、実行経路の分岐や結合において対象ソースコードを分割してユニットを取得する。
【0060】
図16は、SQL生成部114が生成する、各ユニットが実行されるための条件を満たすデータの数を計数するSQLの例を示す説明図である。
例えば、図15において、ユニットUN−01は、社員区分データの値が「管理職」である場合に実行される。そこで、SQL生成部114は、図16において、「住宅支援申請」ファイルから「社員区分=管理職」となっているデータの数を計数するSQLを生成している。
【0061】
また、「(申請日 >= 2009/4/1 AND 申請日 <= 2011/3/31)」の条件は、後述するように、対象システムの現状を把握するために、比較的新しいデータのみを用いるように期間設定を行う条件である。
なお、ここで設定される期間は直近の期間に限らず、ソースコード分析装置1が、様々な期間設定を受け付けるようにしてもよい。これにより、例えばソースコード分析装置1が、過去の一時期における、各ユニットが実行されるための条件を満たすデータの数を出力するようにできる。これにより、ユーザは、直近の期間における各ユニットの実行状況と、過去の一時期における各ユニットの実行状況とを比較するなど、様々な解析を行うことができる。
なお、ユニットUN−00(図15)は、必ず実行されるユニットであり、実行されるための条件が設定されていないため、図16のSQLにおいてデータ計数の対象となっていない。
【0062】
図17は、マスタ登録有無判定部115が、マスタ登録の有無を判定するためのSQLの例を示す説明図である。
マスタ登録有無判定部115は、例えば対象システムが参照(SELECT)のみを行って書込を行わないファイルをマスタファイルと判定し、マスタファイルに含まれるデータをマスタデータと判定する。
【0063】
図18は、統計処理部116が計数の対象とする期間の設定例を示す説明図である。同図では、統計処理部116が、2011年4月から過去2年間(730日)のデータを計数の対象とするように設定されている。
対象システムの運用変更等によって、以前使用されていたデータが、ある時点から使用されなくなる場合がある。例えば、ここで説明しているシステムでは、上述したように、勤務地区分欄のデータが使用されなくなっている。
【0064】
そこで、統計処理部116が比較的新しいデータのみを計数の対象をすることで、各ユニットの使用状況を把握する際に、最近のシステム運用における各データの使用状況を反映させることができる。
かかる計数を実現するために、図16に示すように、SQL生成部114は、データの期間設定を含むSQLを生成している。
【0065】
なお、調査基準日の設定を省略することも可能である。この場合、SQL生成部114は、例えばSQLを生成する時点を調査基準日として、実データ調査対象期間の範囲内のデータを計数するためのSQLを生成する。このように、SQL生成時点を調査基準日とすることで、調査基準日の誤設定を防止でき、比較的新しいデータを用いて計数を行うことができる。
【0066】
図19は、図7で説明したのと同様、ソースコードにおける各ユニットの位置情報の例を示す説明図である。ソースコード分析装置1が当該情報を出力することで、ユーザは、各ユニットの位置を把握することができる。
【0067】
図20は、使用状況判定部117が各ユニットの使用状況を判定する際の判定基準の例を示す説明図である。同図では、出現比率閾値が「5.1%」に設定されている。その他は、図12に示した判定基準と同様である。
【0068】
図21は、使用状況判定部117による各ユニットの使用状況の判定結果の例を示す説明図である。同図において、出現数欄には、統計処理部116が計数した、各ユニットが実行されるための条件を満たすデータの数が格納されている。また、出現比率欄には、各ユニットが実行されるための条件を満たすデータの数を、全データ数で除算した商が格納されている。また、マスタ登録の欄には、マスタ登録有無判定部115によるマスタ登録の有無の判定結果が格納されている。
使用状況判定部117は、この出現比率のデータとマスタ登録のデータとに判定基準(図20)を適用して、各ユニットの使用状況の判定結果を生成し判定欄に書き込んでいる。
【0069】
ユーザは、この判定結果や出現比率を参照して、不使用と思われるユニットを検出することができる。図21に示される例では、ユニットUN−05およびUN−06が使用されていない可能性がある。そこで、ユーザは、これらのユニットが必要か否かを、対象システムの運用状況に基づいて判断する。不要と判断した場合には、当該ユニットをソースコードから削除することで、ソースコードが、よりコンパクトになってメンテナンスし易くなり、また、プログラムをキャッシュする際のヒット率が向上するなど、プログラム実行速度の向上も期待できる。
【0070】
あるいは、ユーザは、ソースコードをチューニングする際に、各ユニットの使用状況(例えば出現比率)を参照して、ソースコードのどの部分の使用頻度が高いかを把握し、使用頻度の高い部分を重点的にチューニングすることで、効率よくチューニングを行い得る。例えば、使用状況判定部117が、各ユニットのうち、実行されるための条件を満たすデータの数が所定数以上のユニットを抽出し、ユーザは、当該ユニットを重点的にチューニングする。
【0071】
なお、使用状況判定部117が行う判定は、各ユニットが実行されるための条件を満たすデータの数(出現数)ないし出現比率やマスタ登録の有無に基づくものに限らない。例えば、使用状況判定部117が、各ユニットが実行されるための条件を満たすデータの数の、時間軸方向における減少率に基づいて、当該ユニットの要否を判定するようにしてもよい。例えば、使用状況判定部117は、直近の1年間のデータによる出現数ないし出現比率が、その前1年間のデータによる出現数ないし出現比率に対して、所定の閾値以上の減少率を示している場合に、判定対象のユニットが不使用となっていると判定する。
このように、出現数、すなわちユニットの実行回数が大幅に減少している場合、最近では使われなくなっている可能性がある。ソースコード分析装置1は、かかる不使用の可能性をいち早く検出し得る。
【0072】
あるいは、各ユニットが実行されるための条件を満たすデータの出現期間が過去の短期間のみである場合、使用状況判定部117が、当該ユニットが不使用となった可能性が高いと判定するようにしてもよい。
これにより、過去の一時期における特殊な事情によって一部のユニットが使用された場合にも、ソースコード分析装置1は、当該特殊な事情を排除して、現在ユニットが使用されているか否かを、より的確に判定し得る。
【0073】
以上のように、SQL生成部114は、各ユニットが実行されるための条件を抽出してSQLを生成し、使用状況判定部117は、当該条件を満たす実データの数に基づいて、ユニットの使用状況を判定する。これにより、ソースコードの構造上は使用され得るが、システムの運用上使用されないユニットを検出し得る。この点で、各ユニットの使用状況をより的確に把握し得る。
【0074】
また、使用状況判定部117は、各ユニットが実行されるための条件を満たすデータがマスタデータか否かに基づいて、ソースコードの使用状況を判定する。マスタデータは、対象システムにおける処理対象の状況を常に反映しているようにメンテナンスされる対象に設定されているデータである。従って、各ユニットが実行されるための条件を満たすデータがマスタデータである場合、現在の運用において当該ユニットが使用されている可能性が高いと考えられる。従って、使用状況判定部117は、より的確に各ユニットの使用状況を判定し得る。
【0075】
また、使用状況判定部117は、最近の所定期間内の実データに基づいて、各ユニットの使用状況を判定する。これにより、各ユニットの使用状況を把握する際に、最近のシステム運用における各データの使用状況を反映させることができる。
【0076】
また、使用状況判定部117は、SQL生成部114がSQLを生成する時点から所定の期間内のデータを用いて各ユニットの使用状況を判定する。これにより、調査基準日を誤設定してしまうことに起因して、誤った分析結果を得てしまうことを防止することができ、比較的新しいデータを用いて計数を行うことができる。
【0077】
また、使用状況判定部117は、各ユニットが不使用か否かを判定する。これにより、ユーザは不使用のユニットを検出し、ソースコードから当該ユニットを削除するか否かを検討することができる。
【0078】
また、使用状況判定部117は、各ユニットが実行されるための条件を満たすデータの数の、時間軸方向における減少率に基づいて、当該ユニットの要否を判定する。これにより、ソースコード分析装置1(使用状況判定部117)は、ユニットが不使用である可能性を、いち早く検出し得る。
【0079】
また、使用状況判定部117は、各ユニットのうち、実行されるための条件を満たすデータの数が所定数以上のユニットを抽出する。これにより、ユーザは、ソースコードのどの部分の使用頻度が高いかを把握でき、使用頻度の高い部分を重点的にチューニングすることで、効率よくチューニングを行い得る。
【0080】
なお、ソースコード分析装置1の全部または一部の機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することにより各部の処理を行ってもよい。なお、ここでいう「コンピュータシステム」とは、OSや周辺機器等のハードウェアを含むものとする。
また、「コンピュータシステム」は、WWWシステムを利用している場合であれば、ホームページ提供環境(あるいは表示環境)も含むものとする。
また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、コンパクトディスク等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムを送信する場合の通信線のように、短時間の間、動的にプログラムを保持するもの、その場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリのように、一定時間プログラムを保持しているものも含むものとする。また上記プログラムは、前述した機能の一部を実現するためのものであっても良く、さらに前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるものであっても良い。
【0081】
以上、この発明の実施形態を図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計変更等も含まれる。
【符号の説明】
【0082】
1 ソースコード分析装置
101 テーブル取得部
102 ソースコード取得部
111 前処理部
112 判定単位決定部
113 SQL生成部
114 マスタ登録有無判定部
115 統計処理部
116 使用状況判定部
121 結果出力部


【特許請求の範囲】
【請求項1】
ソースコードに入力されたデータである実データを取得する実データ取得部と、
前記ソースコードの部分について、当該部分が実行されるための条件を抽出する条件抽出部と、
前記実データ取得部が取得した実データのうち、前記条件抽出部が抽出した条件を満たすデータの数に基づいて、前記ソースコードの部分の使用状況を判定する使用状況判定部と、
を具備することを特徴とするソースコード分析装置。
【請求項2】
前記条件抽出部が抽出した条件に適用されるデータのうちマスタデータを抽出するマスタデータ抽出部を具備し、
前記使用状況判定部は、前記条件抽出部が抽出した条件を満たす値のデータがマスタデータに含まれるか否かに基づいて、前記ソースコードの部分の使用状況を判定する
ことを特徴とする請求項1に記載のソースコード分析装置。
【請求項3】
前記使用状況判定部は、所定の期間内の実データに基づいて、前記ソースコードの部分の使用状況を判定することを特徴とする請求項1または2に記載のソースコード分析装置。
【請求項4】
前記使用状況判定部は、前記判定を行う時点における直近の所定の期間内の実データに基づいて、前記ソースコードの部分の使用状況を判定することを特徴とする請求項3に記載のソースコード分析装置。
【請求項5】
前記使用状況判定部は、前記ソースコードの部分が不使用か否かを判定することを特徴とする請求項1から4のいずれか一項に記載のソースコード分析装置。
【請求項6】
前記使用状況判定部は、前記実データ取得部が取得する実データのうち、前記条件抽出部が抽出した条件を満たすデータの数の、時間軸方向における減少率に基づいて、前記ソースコードの部分が不使用か否かを判定することを特徴とする請求項5に記載のソースコード分析装置。
【請求項7】
前記使用状況判定部は、前記ソースコードの部分のうち、前記条件抽出部が抽出した条件を満たすデータの数が所定数以上の部分を抽出することを特徴とする請求項1から6のいずれか一項に記載のソースコード分析装置。
【請求項8】
ソースコード分析装置のソースコード分析方法であって、
ソースコードに入力されたデータである実データを取得する実データ取得ステップと、
前記ソースコードの部分について、当該部分が実行されるための条件を抽出する条件抽出ステップと、
前記実データ取得ステップにて取得した実データのうち、前記条件抽出部が抽出した条件を満たすデータの数に基づいて、前記ソースコードの部分の使用状況を判定する使用状況判定ステップと、
を具備することを特徴とするソースコード分析方法。
【請求項9】
ソースコード分析装置としてのプログラムに、
ソースコードに入力されたデータである実データを取得する実データ取得ステップと、
前記ソースコードの部分について、当該部分が実行されるための条件を抽出する条件抽出ステップと、
前記実データ取得ステップにて取得した実データのうち、前記条件抽出部が抽出した条件を満たすデータの数に基づいて、前記ソースコードの部分の使用状況を判定する使用状況判定ステップと、
を実行させるためのプログラム。






【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate


【公開番号】特開2012−243011(P2012−243011A)
【公開日】平成24年12月10日(2012.12.10)
【国際特許分類】
【出願番号】特願2011−111298(P2011−111298)
【出願日】平成23年5月18日(2011.5.18)
【出願人】(000102728)株式会社エヌ・ティ・ティ・データ (438)
【Fターム(参考)】