(57)【特許請求の範囲】
【請求項１】
既存システムにおけるシステム内部の処理パターンを類推する既存システム処理仕様抽
出装置であって、
前記既存システムに対して、ある入力項目に対して異なる入力を行う手段と、
前記異なる入力のそれぞれに対する出力データの変化を検知する手段と、
前記出力データの変化のそれぞれを比較して、出力データ変化パターンを特定する手段
と、
前記出力データ変化パターンの組に対する複数の第１の条件と、複数の第２の条件と、
所定の内部処理パターンとの対応付けを記憶する手段と、
前記出力データの変化が、特定された前記出力データ変化パターンと前記対応付けにお
いて対応付けられた前記複数の第１の条件のいずれかを満たし、さらに、当該第１の条件
と前記対応付けにおいて対応づく前記複数の第２の条件のいずれかを満たす場合、当該第
２の条件と前記対応付けにおいて対応付けられた前記所定の処理パターンを特定する手段
と、を備え、
特定された前記所定の処理パターンを前記システム内部の処理パターンと類推すること
を特徴とする既存システム処理仕様抽出装置。
【請求項２】
請求項１に記載の既存システム処理仕様抽出装置において、
前記出力データ変化パターンは、出力要素削除、出力要素変更、出力要素追加のいずれ
かを含むことを特徴とする既存システム処理仕様抽出装置。
【請求項３】
請求項１に記載の既存システム処理仕様抽出装置において、
前記所定の処理パターンは、分岐処理、出力要素選択処理、出力値決定処理、出力
無関係処理のいずれかを含むことを特徴とする既存システム処理仕様抽出装置。
【請求項４】
請求項１に記載の既存システム処理仕様抽出装置において、
前記複数の第１の条件は、同じ内容の出力データ変化パターン情報の組、少なくとも初
期出力要素以外は一致する出力データ変化パターン情報の組、少なくとも初期出力要素お
よびまたは変更する値以外は一致する出力データ変化パターン情報の組、少なくとも初期
出力要素およびまたは変更する出力要素以外は一致する出力データ変化パターン情報の組
、のいずれかを含むことを特徴とする既存システム処理仕様抽出装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、既存情報システムのシステムへの入力項目と出力項目に対するシステム内部処理の関連付けするための技術に関する。その中でも特に、既存情報システムのいわゆるリプレース開発において、その仕様を把握するための技術に関する。
【背景技術】
【０００２】
現在、既存情報システムをリプレースする開発がなされている。この場合、既存情報システムの仕様などを把握するする必要があり、そのシステムのプログラムの解析が行われている。このような技術を開示したものとして、特開平９−２６８９７号公報（特許文献１）がある。この公報には、「データに対する処理を表すコンピュータプログラムのソースコードを解析するプログラム解析装置において、前記ソースコードから、前記各データの構造を表す情報であるデータ情報を抽出するデータ情報抽出手段と、前記ソースコードと前記データ情報とに基づいて、ソースコードの所定の位置について、データ間の関連情報を抽出する関連情報抽出手段と、を有することを特徴とするプログラム解析装置」と記載されている（請求項１参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平９−２６８９７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１には、ソースコードの静的解析により、処理内容及び入出力仕様を含むソースコードの内容の理解を容易にする方法が記載されている。しかし、特許文献１では、ソースコードを分析しているため、ソースコードが無い場合に適用できない。リプレース開発においては、ソースコードを入手できないまま開発することもあるので、このような場合、特許文献１に記載された技術を用いることはできない。そこで、本発明の課題は、当該システムの入力項目と出力項目に対するシステムの内部処理の関係を抽出し、利用者に提示する事である。
【課題を解決するための手段】
【０００５】
上記課題を解決するために、本発明では、情報システムの入力項目に対して異なる入力を実行し、この入力の差と、それぞれの入力に対する出力データの変化の差を用いて、その（内部）処理と入力項目を対応付けるものである。ここで、出力データの変化としては、入力に伴うDBデータであり、処理はDB操作に対する処理が一例としてあげられる。この場合、「DBデータの変化」には「レコード追加」「レコード削除」「レコード更新」が含まれ、「DBデータの変化」の差には、「SQLクエリの有無の変化」「更新されるカラムの変化」「更新／削除されるレコードの変化」「追加／更新されるレコードの値の変化」が含まれる。この例では、「DBデータの変化」の差と「DB操作に関する処理」の関係に基づき入力項目と「DB操作に関する処理」を関連付けることになる。
【０００６】
より具体的には、以下の態様も本発明に含まれる。
既存システムに対する入力に伴う出力データの変化を、出力要素毎の変化の種類に基づき分類する出力データ変化情報取得部と既存システムに対して異なる入力を与えて得た前記分類を組み合わせ、入力項目値の利用パターンに基づく処理の種類を特定する。
【発明の効果】
【０００７】
本発明によれば、ソースコードが無い場合でも、既存情報システムの入力項目と出力項目に対するシステムの内部処理の関係を抽出できる。
上述した以外の課題、構成及び効果は、以下の実施形態の説明により明らかにされる。
【図面の簡単な説明】
【０００８】
【図１】本発明の一実施例におけるシステムの入力項目と出力項目に対するシステム内部処理の関連分析装置１００（以下「分析装置１００」と呼ぶ）のハードウェア構成図の例である。
【図２】本発明の一実施例における分析プログラム２００のソフトウェア構成及び構成要素の入出力情報の一例を表す図である。
【図３】本発明の一実施例における出力データ変化パターン分類部２２４の処理手順の一例を示すフローチャートである。
【図４】本発明の一実施例におけるシステム内部処理特定部２３０の処理手順の一例を示すフローチャートである。
【図５】本発明の一実施例における出力データ変化パターンとシステム内部処理の対応付け手順及び対応関係を示す表である。
【図６】本発明の一実施例で分析の対象とする分析対象システム２８０及び分析対象出力データ２９０と、分析装置１００の関係を示すハードウェア構成図である。
【図７】本発明の一実施例における分析対象システム２８０の入力画面８００及び入力の一例を示す図である。
【図８】本発明の一実施例における分析対象出力データ２９０の初期出力データ２５１及び当該システムへの入力後の実行後出力データ２７０の一例を示す図である。
【図９】本発明の一実施例における分析対象システム２８０の処理内容を示すフローチャートである。
【図１０】本発明の一実施例について出力データの変化パターンを分類した結果である、出力データ変化パターン情報２７１を示す図である。
【図１１】本発明の一実施例についてシステム内部処理を特定した結果である、システム内部処理情報２７２を示す図である。
【図１２】本発明の一実施例における分析対象システム２８０に対して分析を繰り返して得たシステム内部処理情報２７２を、まとめて出力した場合の出力結果の一例を示す図である。
【図１３】本発明の一実施例におけるシステムの入力項目と出力項目に対するシステム内部処理の関連把握を支援するための画面出力の一例を示す図である。
【図１４】本発明の一実施例における分類ケースの分類方法の一例を示す図である。
【発明を実施するための形態】
【０００９】
以下、図面を用いて実施例を説明する。
【実施例１】
【００１０】
本実施例では、分析装置１００の処理の一例を説明する。
図１は、本実施例における分析装置１００のハードウェア構成図の例である。
分析装置１００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１１０、表示装置１２０、メモリ１３０、入力装置１４０、外部記憶装置１５０、ネットワーク通信装置１６０を有し、バスを介して接続されている。
【００１１】
外部記憶装置１５０は、ＣＰＵ１１０において実行される処理プログラムとして、図２に示す分析プログラム２００を保持している。分析プログラム２００は、外部記憶装置１５０よりメモリ１３０に読み出されＣＰＵ１１０で実行される。
【００１２】
図２は、分析プログラム２００のソフトウェア構成及び構成要素の入出力情報の一例を表す図である。
【００１３】
分析装置１００は、分析プログラム２００をＣＰＵ１１０で実行する。分析プログラム２００は、変更分析ケース生成部２１０、出力データ変化情報取得部２２０、システム内部処理特定部２３０、分析結果表示部２４０からなる。出力データ変化情報取得部２２０は、例えばネットワーク通信装置１６０を介し、分析対象システム２８０や分析対象出力データ２９０を操作する。
【００１４】
本実施例を適用する為には、分析対象出力データ２９０が構造を持っており、一つひとつのデータ項目を識別できる必要がある。データ項目を識別可能な出力データの例として、表示装置１２０、メモリ１３０、外部記憶装置１５０のデータや、ネットワーク通信装置１６０を介してやり取りされるデータ、他のシステムが保持するデータ等がある。逆に、本発明の適用が難しい分析対象出力データ２９０として、アナログ信号データ等がある。本実施例では、分析対象出力データ２９０としてＤＢのデータを用いる場合について示す。
【００１５】
尚、本実施例では、分析対象出力データ２９０のデータ項目を、「単一データ項目」と「選択可能データ項目」に分類する。データ項目は、出力データの一単位である「出力要素」を１つ以上包含する。出力要素の例として、ＤＢのレコードや、ある整数型変数のメモリなどがある。「ある出力処理がある場合に、条件を指定する事で一意に出力要素を変更できる」と言う条件のもと、２つ以上の出力要素を包含しているデータ項目を、「選択可能データ項目」と呼ぶ。例えば、配列データは、添え字という条件を指定する事で、同じデータ項目内で出力要素を変更できる。また、ＤＢにおいては、対象のレコード（出力要素）を選択する条件を指定する事で、同一テーブル（データ項目）内であれば、出力要素を変更できる。
【００１６】
分析対象システム２８０は、入力装置１１０、ネットワーク通信装置１６０、他のプログラムなどから入力を受付け、分析対象出力データ２９０に対して参照・書き込みを行う。分析対象出力データ２９０のデータを参照できるか、参照・書き込みのログを取得できる必要がある。参照・書き込みのログの例として、分析対象出力データ２９０がＤＢであれば、ＤＢへの処理内容を記録したジャーナルログやＤＢへの処理の指示内容を記録したＳＱＬログなどがある。両ログとも、操作対象の出力要素や操作内容の情報を含んでいる。尚、分析対象システム２８０や分析対象出力データ２９０は、分析装置１００に格納されていても良い。
本実施例の特徴は、出力データ変化情報取得部２２０で出力データの変化を分類し、システム内部処理特定部２３０でシステム内部処理と関連付けることである。
【００１７】
分析プログラム２００は、分析ケース２５０を入力とし、変更分析ケース生成部２１０、出力データ変化情報取得部２２０、システム内部処理特定部２３０、分析結果表示部２４０で処理を行い、分析結果２６０を出力する。本実施例では、はじめに、（１）分析ケース２５０を入力として変更分析ケース生成部２１０で処理を行い、新たな分析ケース２５０を取得する。以降、分析プログラム２００の入力として用意した分析ケースを基準分析ケースと呼び、変更分析ケース生成部２１０で生成した新たな分析ケース２５０を変更分析ケースと呼ぶ。次に、（２）分析ケース２５０を入力として出力データ変化情報取得部２２０で処理を行い、出力データ変化パターン情報２７１を取得する。この際、基準分析ケースを入力として得た出力データ変化パターン情報２７１を基準出力データ変化情報と呼び、変更分析ケースを入力として得た出力データ変化パターン情報２７１を変更出力データ変化パターン情報と呼ぶ。また、（３）２つの出力データ変化パターン情報２７１（基準出力データ変化パターン情報及び変更出力データ変化パターン情報）を入力としてシステム内部処理特定部２３０で処理を行い、システム内部処理情報２７２を取得する。その後、（４）他の分析ケース２５０がある場合は、（１）〜（３）の手順を、用意した分析ケース２５０が無くなるまで、若しくは、任意の入力項目の分析が終わるまで繰り返す。最後に、（５）すべての分析ケース２５０、システム内部処理情報２７２を入力とし、分析結果表示部２４０で処理を行い、分析結果２６０を出力する。
【００１８】
変更分析ケース生成部２１０は、分析ケース２５０を入力とし、入力項目の値を任意の方法で変更し、新たな分析ケース２５０を変更分析ケースとして出力する。変更の方法として、例えば、数字をインクリメントやデクリメントする方法、文字列に任意の文字を追加する方法、文字列から任意の文字を削除する方法などがある。変更の方針を与えるため、入力項目毎に変更方法を明示する情報や、制約などを与えても良い。尚、本実施例では、変更分析ケースを変更分析ケース生成部２１０で生成しているが、分析プログラム２００に変更分析ケース生成部２１０を持たせず、変更分析ケースを手動で与えても良い。
出力データ変化情報取得部２２０は、分析ケース２５０を入力とし、出力データ変化パターン情報２７１を出力する。出力データ変化情報取得部２２０は、少なくとも、分析対象システム２８０に対して２種類の入力を行う機能と、その入力によって発生する出力データの変化を観測して出力データ変化パターンに分類する機能を有する。例えば、分析対象出力データ２９０としてＤＢのデータを用いる場合、出力データの変化を取得するため、ジャーナルログ、ＳＱＬトレースログ、ＤＢデータのダンプなどが利用できる。本実施例では、ＤＢデータをダンプして比較する方法を示す。
【００１９】
システム内部処理特定部２３０は、基準出力データ変化パターン情報と変更出力データ変化パターン情報を入力とし、システム内部処理情報２７２を出力する。
分析結果表示部２４０は、分析ケース２５０及びシステム内部処理情報２７２を入力とし、分析プログラム２００の出力として、分析結果２６０を出力する。
【００２０】
ここで、出力データ変化情報取得部２２０の構成要素について説明する。出力データ変化情報取得部２２０は、分析ケース２５０を入力とし、出力データ初期化部２２１、対象プログラム実行部２２２、出力データ取得部２２３、出力データ変化パターン分類部２２４の処理を行い、出力データ変化パターン情報を出力とする。
【００２１】
分析ケース２５０は、初期出力データ２５１と入力データ２５２からなる。初期出力データ２５１は、分析対象出力データ２９０と同じ構造を持つ出力のデータである。また、入力データ２５２は、分析対象システム２８０の入力項目に入力する入力値の組である。
また、出力データ変化パターン情報２７１は、分析対象システム２８０に入力データ２５２に基づく画面入力を行った場合の分析対象出力データ２９０の変化を、「出力データ変化パターン」に分類した情報である。出力データ変化パターンには、「出力要素追加」「出力要素削除」「出力要素更新」「変化なし」がある。出力データ変化パターン情報２７１は、少なくとも、変化が発生したデータ項目、初期出力データ２５１及び実行後出力データ２７０と、出力データ変化パターンを持つ。
出力データ初期化部２２１は初期出力データ２５１を入力とし、分析対象出力データ２９０のデータを初期出力データ２５１で置き換える。 
対象プログラム実行部２２２は、入力データ２５２を入力として受け取り、分析対象システム２８０に対して入力データ２５２を入力する。
【００２２】
出力データ取得部２２３は、例えば、分析対象出力データ２９０のデータをダンプして実行後出力データ２７０とする。ダンプの方法については、ＤＢのデータであれば、専用のダンプツールを用いてもよいし、ＳＱＬクエリを用いても良い。
出力データ変化パターン分類部２２４は、初期出力データ２５１と実行後出力データ２７０を入力とし、出力データ変化パターン情報２７１を出力する。
【００２３】
尚、出力データ初期化部２２１の代わりに出力データ取得部２２３の処理を行う方法でもシステム内部処理の分析が可能である。この場合、分析ケース２５０に出力初期データ２５１を持たせず、また、対象プログラム実行部２２２の処理前に取得した出力データを初期出力データ２５１として用いることで本実施例と同様の結果を得られる。但し、同じ入力を２回与えた場合に、異なる出力データ変化が得られる場合には正しい分析結果が得られないことがある。何故ならば、１回目の入力で変化した出力データを２回目の入力に関する処理で利用しているためである。
【００２４】
図３は、出力データ変化パターン分類部２２４の処理手順の一例を示すフローチャートである。
本手順は、初期出力データ２５１及び実行後出力データ２７０に含まれる出力要素に対し、出力データ変化パターンを割り当てることを目的とする。
【００２５】
まず、初期出力データ２５１と実行後出力データ２７０を読み込む（ステップＳ５００）。読み込んだ初期出力データのすべての出力要素について順にステップＳ５０１〜Ｓ５０６を繰り返す。
【００２６】
ステップＳ５０１では、実行後出力データに同じ出力要素が存在するか確認する。選択可能データ項目の場合は、同じ出力要素を特定する方法として、例えば、（Ａ） すべての値が同じ出力要素を同じ出力要素とする、（Ｂ） 少なくともキーになる項目の値が同じ出力要素を同じ出力要素とする、（Ｃ） （Ｂ）とキーになる項目以外の項目の値がすべて同じ出力要素を同じ出力要素とする、などの方法を用いる。尚、多くのログは操作対象の出力要素を特定できる情報を含んでいる為、出力データ変化情報取得部２２０でジャーナルログやＳＱＬトレースログ等を用いる場合、ログを解析することで同じ出力要素を特定できる。確認の結果、同じ出力要素が存在する場合は、ステップＳ５０３に進み、存在しない場合は、ステップＳ５０２に進む。ステップＳ５０２では、選択した初期出力データの出力要素の出力データ変化パターンを「出力要素削除」とする。
【００２７】
ステップＳ５０３では、選択した初期出力データの出力要素に対応する実行後出力データの出力要素を取得し、出力要素の組とする。
ステップＳ５０４では、ステップＳ５０３で組にした出力要素に値の差があるか確認する。差がある場合はステップＳ５０５に進み、無い場合はステップＳ５０６に進む。
【００２８】
ステップＳ５０５では、ステップＳ５０３で取得した出力要素の組の出力データ変化パターンを「出力要素変更」とする。
ステップＳ５０６では、ステップＳ５０３で取得した出力要素の組の出力データ変化パターンを「変更なし」とする。
【００２９】
ステップＳ５０７では、実行後出力データの出力要素のうち対応付けが完了していないものの出力データ変化パターンを「出力要素追加」とする。
ステップＳ５０８では、ステップＳ５００〜Ｓ５０７で対応付けた出力要素と出力データ変化パターンをまとめ、出力データ変化パターン情報２７１として出力する。
【００３０】
図４は、システム内部処理特定部２３０のフローチャートの一例である。本手順は、本手順は、基準出力データ変化パターン情報４００と変更出力データ変化パターン情報４１０を一定の基準で対応付け、システム内部処理と関連付ける事を目的とする。
システム内部処理特定部２３０で分類するシステム内部処理には、「分岐処理」、「出力要素選択処理」、「出力値決定処理」、「出力無関係処理」がある。
【００３１】
「分岐処理」は、変更分析ケース生成部２１０で入力値を変更した入力項目を分岐条件に使う分岐処理があることを表す。出力データ変化パターンが変化する場合と、出力データ変化パターンが共に「出力要素変更」で、尚且つ、更新される出力要素の出力項目が異なる場合に「分岐処理」が行われる。一般的に、このような変化は同一の出力処理では引起せないため、制御構文を用いて異なる出力処理が実行されるようにする必要がある。尚、異なる出力項目への出力処理が、同一の出力処理で行われている場合もあるが、出力項目同士が特殊な関係を持っている為に実現できる事である。特殊な関係の例として、出力項目同士がメモリ上で隣り合って配置されている場合などがある。
【００３２】
本実施例では、この様な特殊な関係があることを想定せず、出力項目と出力要素の関係性のみからシステム内部処理を特定する為、実際の実装とは異なった分析結果となる事がある。ただし、当該処理が異なる出力項目へ出力を切り変えている事に変わりは無い為、実装と異なる分析結果を出力してしても構わない。実装と分析結果が異なることは、分岐処理以外でも発生するが、出力処理と同様に受け入れ可能である。
【００３３】
「出力要素選択処理」は、変更分析ケース生成部２１０で入力値を変更した入力項目を、削除／変更する出力要素を同一出力項目内から選択する為に利用する処理があることを表す。出力データ変化パターンが共に「出力要素削除」の場合で、尚且つ、同一出力項目内の異なる出力要素が削除された場合と、出力データ変化パターンが共に「出力要素更新」の場合で、尚且つ、同一出力項目内の異なる出力要素が更新された異なる場合に「出力要素選択処理」が行われる。尚、「分岐処理」に該当する場合は、「出力要素選択処理」には対応付けない。
【００３４】
「出力値決定処理」は、変更分析ケース生成部２１０で入力値を変更した入力項目を出力に書き込む値の決定に利用する処理があることを表す。出力データ変化パターンが共に「出力要素追加」の場合で、尚且つ、更新された出力要素の値が異なる場合と、出力データ変化パターンが共に「出力要素変更」の場合で、尚且つ、更新された出力要素の値が異なる場合に「出力値決定処理」が行われる。尚、「分岐処理」や「出力要素選択処理」に該当する場合は、「出力値決定処理」には対応付けない。
【００３５】
「出力無関係処理」は、変更分析ケース生成部２１０で入力値を変更した入力項目が出力の出力に影響しない処理がある事を表す。「分岐処理」、「出力要素選択処理」、「出力値決定処理」に該当しない場合に、「出力無関係処理」が行われる。
【００３６】
まず、ステップＳ４５０で基準出力データ変化パターン情報４００と変更出力データ変化パターン情報４１０を読み込む。
次に、出力データ変化パターンが「変化なし」の出力データ変化パターン情報２７１を、読み込んだ出力データ変化パターン情報２７１から取り除く。すべての出力データ変化パターン情報２７１が取り除かれた場合は、「出力無関係処理」を割り当て、処理を終了する。
最後に、残りの出力データ変化パターン情報２７１について、図５「出力データ変化パターンとシステム内部処理の対応付け手順及び対応関係を示す表」を基に、出力データ変化パターン情報にシステム内部処理を関連付ける。
【００３７】
図５は、出力データ変化パターンとシステム内部処理の対応付け手順及び対応関係を示す表５００（以下、対応表５００）である。本手順は、基準出力データ変化パターン情報４００と変更出力データ変化パターン情報４１０の違いが、どの様なシステム内部処理に起因するかを特定する事が目的である。
【００３８】
対応表５００は、２つの部分から構成されている。１つ目は、ローマ数字の項番、対象、及び、対応付け方法のカラムである。この部分は、比較対象とする基準出力データ変化パターン情報４００と変更出力データ変化パターン情報４１０の組を探す条件を表している。２つ目は、アラビア数字の項番、システム内部処理、条件のカラムである。この部分は、１つ目の部分で選択した出力データ変化パターン情報２７１の組に対して割り当てるべきシステム内部処理を決めるルールを表している。１つ目の部分の項番Ｉ〜Ｖまでは、２つ目の部分の項番１〜４のルールを用いる。また、１つ目の部分の項番ＶＩは、２つ目の部分の項番５のルールを用いる。両部分とも、項番の小さいほうから順に条件判定を行う。
【００３９】
項番Ｉでは、基準出力データ変化パターン情報４００と変更出力データ変化パターン情報４１０のうち、出力データ変化パターン情報２７１が同じものを組み合わせる。
項番ＩＩでは、基準出力データ変化パターン情報４００と変更出力データ変化パターン情報４１０のうち、少なくとも初期出力要素以外は一致する出力データ変化パターン情報２７１を組み合わせる。
【００４０】
項番ＩＩＩでは、基準出力データ変化パターン情報４００と変更出力データ変化パターン情報４１０のうち、少なくとも初期出力要素・変更する値以外は一致する出力データ変化パターン情報２７１を組み合わせる。
項番ＩＶでは、基準出力データ変化パターン情報４００と変更出力データ変化パターン情報４１０のうち、少なくとも初期出力要素・変更する出力要素・値以外は一致する出力データ変化パターン情報２７１を組み合わせる。
【００４１】
項番Ｖでは、基準出力データ変化パターン情報４００と変更出力データ変化パターン情報４１０のうち、少なくとも初期出力要素・変更する出力項目・出力要素・値以外は一致する出力データ変化パターン情報２７１を組み合わせる。
【００４２】
この後、項番Ｉ〜Ｖで組み合わせた出力データ変化パターン情報２７１について、項番１〜４の条件を満たすか上から順に判断し、システム内部処理と関連付ける。
最後に、項番Ｉ〜Ｖで、組み合わせが見つからない出力データ変化パターン情報２７１を、分岐処理と関連付ける。
【００４３】
以降で、本実施例における分析装置１００の動作例を示す。分析対象出力データ２９０としてＤＢを用いる。また、出力項目はカラムで、出力要素はレコードである。
【００４４】
図６は、本実施例で分析の対象とする分析対象システム２８０及び分析対象出力データ２９０と、分析装置１００のハードウェア構成の一例を示す図である。
分析対象とするシステム２８０は、入力画面８００から入力を受け、システム内部処理を行いながら、ＳＱＬクエリを実行して分析対象出力データ２９０を変化させる。
分析装置１００は、対象プログラム実行部２２２の処理で入力画面８００へ入力を行い、出力データ初期化部２２１の処理で分析対象出力データ２９０を初期化し、出力データ取得部２２３の処理で分析対象出力データ２９０を取得する。
【００４５】
図７は、本実施例における分析対象システム２８０の入力画面８００及び入力の一例を示す図である。
本実施例では、商品情報の更新を行う商品情報更新画面９００の入力項目に対して分析を行う。本画面の入力項目は、商品を一意に特定するための「ＩＤ」、商品の名前を表す「品名」、商品の数を表す「数量」である。ＯＫボタン９０１を押下する事で、各入力項目に入力した入力値を用いて、分析対象システム２８０で処理が行われる。
基準入力データ９１０及び変更入力データ９２０は、入力データ２５２の例である。本例では、変更分析ケース生成部２１０で、基準入力データ９１０の品名「商品ＡＡ」を、「商品ＡＢ」に変更して変更入力データ９２０とした例を示している。 
図８は、本実施例における分析対象出力データ２９０の初期出力データ２５１及び当該システムへの入力後の実行後出力データ２７０の一例を示す図である。
本実施例では、商品の情報を格納する商品情報テーブル１０００を用いる。商品情報テーブル１０００は、ＩＤ、Ｎａｍｅ、Ｃｏｕｎｔカラムを持つ。キーは、ＩＤカラムである。商品情報テーブル１０００には、本実施例で用いる初期出力データ２５１を示した。
基準実行後出力データ１０１０は、基準入力データ９１０の入力を行った後の基準実行後出力データを表している。また、変更実行後出力データ１０２０は、変更入力データ９２０の入力を行った後の変更実行後出力データを表している。基準実行後出力データ１０１０と変更実行後出力データ１０２０では、ＩＤが１の出力要素（出力要素１０１１及び出力要素１０２１）のＮａｍｅカラムの値が、「品名ＡＡ」から「品名ＡＢ」に変化している。
【００４６】
図９は、本実施例における分析対象システム２８０の処理内容を示すフローチャートである。
商品情報更新画面９００でＯＫボタン９０１を押下すると、本図に示した処理が行われる。処理のルールを以下に示す。１つ目のルールは、商品情報更新画面９００の入力項目「ＩＤ」がＤＢデータに登録されていない場合は処理を中断することである。２つ目のルールは、商品情報更新画面９００の入力項目「数量」が負の値の場合は処理を中断することである。３つ目のルールは、商品情報更新画面９００の入力項目「品名」が登録済みの場合は処理を中断する事である。
【００４７】
まず、入力項目「ＩＤ」に入力された入力値をＩＤカラムに持つ商品情報テーブル１０００の出力要素数を取得するＳＱＬクエリを実行する（ステップＳ１１００）。例えば、「ＳＥＬＥＣＴ  ＣＯＵＮＴ（ＩＤ）  ＦＲＯＭ  商品情報テーブル  ＷＨＥＲＥ  ＩＤ＝‘１’」である。
次に、ステップＳ１１００で取得した出力要素の数が１以上か判断する（ステップＳ１１０１）。１以上であればステップＳ１１０２に進む。それ以外の場合は、処理を終了する。
ステップＳ１１０２では、商品情報更新画面９００から入力された入力項目「数量」の入力値が０未満か判断する。０未満の場合は、処理を終了する。それ以外の場合は、ステップＳ１１０３に進む。
【００４８】
ステップＳ１１０３では、商品情報更新画面９００から入力された入力項目「品名」の入力値をＮａｍｅカラムに持つ商品情報テーブル１０００の出力要素数を取得するＳＱＬクエリを実行する。例えば、「ＳＥＬＥＣＴ  ＣＯＵＮＴ（ＩＤ）  ＦＲＯＭ  商品情報テーブル  ＷＨＥＲＥ  Ｎａｍｅ＝‘品名ＡＡ’  ＡＮＤ  ＩＤ＜＞‘１’」である。
ステップＳ１１０４では、ステップＳ１１０３で取得した出力要素の数が０か判断する。０であれば、ステップＳ１１０５に進む。それ以外の場合は、処理を終了する。
【００４９】
ステップＳ１１０５では、商品情報更新画面９００から入力された入力項目「ＩＤ」の入力値を持つ商品情報テーブル１０００の出力要素を更新するＳＱＬクエリを実行する。出力要素の更新にあたっては、Ｎａｍｅカラムの値として入力項目「品名」の入力値、Ｃｏｕｎｔカラムの値として入力項目「数量」の入力値を用いる。ＳＱＬクエリの例として、「ＵＰＤＡＴＥ  商品情報テーブル  ＳＥＴ  Ｎａｍｅ＝‘品名ＡＡ’、  Ｃｏｕｎｔ＝‘１０’  ＷＨＥＲＥ  ＩＤ＝‘１’」がある。
【００５０】
図１０は、本実施例について出力データの変化パターンを分類した結果である、出力データ変化パターン情報２７１を示す図である。
基準出力データ変化パターン情報４００は、初期出力データ１０００と基準実行後出力データ１０１０を入力として、出力データ変化パターン分類部２２４の処理を行った場合の出力例である。また、変更出力データ変化パターン情報４１０は、初期出力データ１０００と変更実行後出力データ１０２０を入力として、出力データ変化パターン分類部２２４の処理を行った場合の出力例である。基出力データ変化パターン情報４００と変更出力データ変化パターン情報４１０は、同じ処理手順で抽出可能なため、基準出力データ変化パターン情報４００の処理手順のみについて、図３に基づいて具体例を示す。
【００５１】
ステップＳ５００で、初期出力データ１０００と基準実行後出力データ１０１０を読み込む。初期出力データ１０００の２つの出力要素について、順にステップＳ５０１〜Ｓ５０６を行う。
まず、１つ目の出力要素１００１について説明する。ステップＳ５０１において、キーが同じ出力要素を基準実行後出力データ１０１０から探すと、１つ目の出力要素１０１１が見つかるため、ステップＳ５０３に進む。ステップＳ５０３で、出力要素１０１１を選択し、ステップＳ５０４に進む。ステップＳ５０４では、出力要素１００１と出力要素１０１１に差異があるか調べる。本例では、Ｎａｍｅカラムの値が「品名ＡＡ」と「品名ＡＢ」で異なっているため、ステップＳ５０５に進む。ステップＳ５０５では、出力要素１００１と出力要素１０１１の出力データ変化パターンを「出力要素変更」として対応付ける。
【００５２】
同様に、２つ目の出力要素１００２について説明する。ステップＳ５０１において、キーが同じ出力要素を基準実行後出力データ１０１０から探すと、２つ目の出力要素１０１２が見つかるため、ステップＳ５０３に進む。ステップＳ５０３で、出力要素１０１２を選択し、ステップＳ５０４に進む。ステップＳ５０４では、出力要素１００２と出力要素１０１２に差異があるか調べる。本例では差異がないため、ステップＳ５０６に進む。ステップＳ５０６では、出力要素１００２と出力要素１０１２の出力データ変化パターンを「変化なし」として対応付ける。
【００５３】
初期出力データ１０００に含まれるすべての出力要素についてステップＳ５０１〜Ｓ５０６の処理を終えたため、ステップＳ５０７に進む。初期出力データ１０００にも基準実行後出力データ１０１０にも出力データ変化パターンとの対応付けが完了していない出力要素はないため、ステップＳ５０８に進む。
【００５４】
ステップＳ５０８では、ステップＳ５０１〜Ｓ５０７で行った出力要素と出力データ変化パターンの対応付け結果を、表示装置１２０やメモリ１３０や外部記憶装置１５０やネットワーク通信装置１６０に出力する。
【００５５】
図１１は、本実施例についてシステム内部処理を特定した結果である、システム内部処理情報２７２を示す図である。
図１０に示した基準出力データ変化パターン情報４００と変更出力データ変化パターン情報４１０を入力として、システム内部処理特定部２３０の処理を行った結果の例を表している。図４に基づいて、具体的な処理手順を示す。
【００５６】
まず、ステップＳ４５０で、基準出力データ変化パターン情報４００と変更出力データ変化パターン情報４１０を読み込む。
次に、ステップＳ４６０で、出力データ変化パターンが「変化なし」の出力データ変化パターン情報２７１を除く。本実施例では、初期出力要素が２出力要素目の出力データ変化パターン情報（出力データ変化パターン情報４０２と４２２）が取り除かれる。
次に、対応表５００に基づき、システム内部処理を特定する。残った出力データ変化パターン情報４０１と４２１が、項番Ｉ〜Ｖの条件を満たすか確認すると、項番ＩＩＩ「少なくとも初期出力要素・変更する値以外は一致する出力データ変化パターン情報の組」を満たす。そこで、項番１〜４の条件を確認し、システム内部処理との関連付けを行う。
項番１〜４の条件を確認すると、項番３「＃１、＃２に該当せず、出力データ変化パターンが共に「出力要素変更」の場合で、尚且つ、変更された出力要素の値が異なる場合」を満たす。
【００５７】
以上のことから、出力データ変化パターン情報４０１と４２１の変化をひき起こす、値を変化させた入力項目「品名」を利用する「出力値決定処理」が存在するといえる。
【００５８】
図１２は、分析対象システム２８０に対して分析を繰り返して得たシステム内部処理情報２７２を、まとめて出力した場合の出力結果の一例を示す図である。
分析結果２６０は、少なくとも入力項目、出力項目、システム内部処理を有する。入力項目「ＩＤ」、入力項目「数量」や、ＤＢの商品情報テーブルの値を変化させながら、出力データ変化情報取得部２２０、変更分析ケース生成部２１０、システム内部処理特定部２３０を繰り返し実行することで、分析結果２６０を得られる。表中のＢ、Ｓ、Ｏは、それぞれ、分岐処理（Ｂｒａｎｃｈ）、出力要素選択処理（Ｓｅｌｅｃｔ）、出力値決定処理（Ｏｕｔｐｕｔ）を表している。また、Ｃ、Ｒ、Ｕ、Ｄは、それぞれ、生成（Ｃｒｅａｔｅ）、読み取り（Ｒｅａｄ）、更新（Ｕｐｄａｔｅ）、削除（Ｄｅｌｅｔｅ）を表している。例えば、ＣＲＵＤ有無の行において、商品情報テーブルのＮａｍｅカラムにおけるＵ（更新）に○が記載されていることは、商品情報更新画面９００に伴う処理により、当該カラムの値が更新されることを示している。また、画面入力項目「ＩＤ」の行において、商品情報テーブルのＮａｍｅカラムにおけるＵ（更新）に記載されているＢＳは、商品情報更新画面９００の入力項目「ＩＤ」の入力値を用いた、分岐処理と出力要素選択処理が存在する事を示している。つまり、入力項目「ＩＤ」の値に基づきＮａｍｅカラムの値の更新有無を変化させる処理と、更新する出力要素の選択に入力項目「ＩＤ」の値を用いる処理が存在する事を示している。
【００５９】
ここで、画面入力項目の「ＩＤ」の行において、商品情報テーブルのＮａｍｅカラムにおけるＵ（更新）に記載されているＢＳを分析結果として特定するために必要な入力の例を示す。初期出力データ１０００の場合、基準入力データ９１０と、基準入力データ９１０の入力項目「ＩＤ」の値を３に変更した変更入力データを用いて分析を行う事で、Ｎａｍｅカラムの更新（Ｕ）を行うＳＱＬクエリの実行有無が変化するため、入力項目「ＩＤ」に関する分岐処理（Ｂ）が存在する事が分かる。同様に、基準入力データ９１０の入力項目「ＩＤ」の値を２に変更した変更入力データを用いて分析を行う事で、更新（Ｕ）対象の出力要素が１出力要素目から２出力要素目に変化するため、入力項目「ＩＤ」に関する出力要素選択処理（Ｓ）が存在する事が分かる。
【００６０】
尚、分析結果２６０を生成するにあたり、すべての分析ケース２５０を通して変更を行っていない入力項目がある場合は、その入力項目に関する分析が行われていない事を示す為、分析結果２６０の当該入力項目を強調表示しても良い。
【００６１】
ところで、本実施例では、分析できない処理がある。例えば、ステップＳ１１００によると、分析対象システム２８０は、商品情報テーブル１０００のＩＤを読み取る（Ｒ）処理を行っている。しかし、分析結果２６０のＣＲＵＤ有無の行における、商品情報テーブルのＩＤカラムのＲ（読み取り）には○がついていない。ここで、ステップＳ１１００とステップＳ１１０１が無い場合、初期出力データ１０００のときに、入力項目「ＩＤ」が３、入力項目「品名」が品名ＡＣ、入力項目「数量」が１０の入力を行うことを考える。この場合、ステップＳ１１０５が実行され、例えば「ＵＰＤＡＴＥ  商品情報テーブル  ＳＥＴ  Ｎａｍｅ＝‘品名ＡＣ’、  Ｃｏｕｎｔ＝‘１０’  ＷＨＥＲＥ  ＩＤ＝‘３’」のようなＳＱＬクエリが実行される。このＳＱＬクエリは、初期出力データ１０００において、出力データの変化を引起さない。つまり、ステップＳ１１００及びステップＳ１１０１の有無は、入力値の変化に伴う出力データの変化に影響を与えない。この様に、入力値の変化に伴う出力データの変化を伴わない処理を本発明で分析する事はできない。しかし、本発明の目的は、入力項目と出力項目の変化に影響を与えるシステム内部処理の関連付けであるため、分析結果としてＩＤカラムの参照（Ｒ）が出力されなくとも構わない。
【００６２】
図１３は、システムの入力項目と出力項目に対するシステム内部処理の関連把握を支援するための画面出力の一例を示す図である。本例では、分析結果概要１５１０の入力項目名「ＩＤ」について、商品情報テーブルのＮａｍｅカラムのＵにおけるＢの部分を押下した場合に、分岐処理の際に変化が発生した場合と発生しなかった場合で、分析ケース２５０を分類表示した例を表している。
【００６３】
出力画面１５００は、少なくとも入力項目、出力項目、システム内部処理、具体的な分析ケースに関する情報を有する。尚、分岐処理であれば変化の有無毎、出力要素選択処理であれば操作対象となった出力要素毎、出力値決定処理であれば出力値毎に分析ケース２５０をグルーピングして表示しても良い。また、分岐処理、出力要素選択処理、出力値決定処理に利用されている可能性のある他の入力項目を強調表示しても良い。さらに、分岐処理、出力要素選択処理、出力値決定処理に利用されている可能性のある他の入力項目のうち、より利用されている可能性が高いと推測できる入力項目を強調表示しても良い。合わせて、入力項目と出力項目に対するシステム内部処理の関係を抽出する上で必要となる分析ケースの種類が不足している入力項目を強調表示しても良い。
【００６４】
本実施例に示した出力画面１５００では、分岐処理に関する結果を示しており、分析詳細表示部１５２０では、分岐変化の有無毎にグルーピングし、分岐処理に使われている可能性のある他の入力項目に下線を引くと共に、利用されている可能性が高いと推測できる入力項目名にも下線を引いて表した。出力画面１５００を利用する事で、画面入力項目「ＩＤ」が、画面入力項目「品名」、画面入力項目「数量」、商品情報テーブルのＩＤカラム、商品情報テーブルのＮａｍｅカラムの少なくとも１つと比較され、その結果、Ｎａｍｅカラムの更新処理の有無が変化する実装があることが分かる。また、変化時入力一覧１５２１と非変化時入力一覧１５２２を比較すると、画面入力項目「ＩＤ」の値が、商品情報テーブルのＩＤカラムに含まれている場合のみ変化が発生している事が分かる。この事から、画面入力項目「ＩＤ」の値が商品情報テーブルのＩＤカラムに含まれているか判断する分岐処理が行われている可能性があると言えるため、商品情報テーブルのＩＤカラムの入力項目名に下線を引いた。
【００６５】
分岐処理に使われている可能性のある他の入力項目を特定できる理由は、次の通りである。商品情報テーブルのＮａｍｅカラムの更新（Ｕ）に関して、分岐処理（Ｂ）と関連がある入力項目は、商品情報テーブルのＣｏｕｎｔカラム以外のすべての入力項目である。このため、商品情報テーブルのＣｏｕｎｔカラム以外のすべての入力項目が画面入力項目「ＩＤ」との比較で利用されている可能性がある。
【００６６】
ここで、特に利用されている可能性が高い入力項目を推測する方法の一例を、図１４に基づいて示す。
図１４は、図１３の分析詳細１５２０に示した分析ケース２５０をグループ化して一覧にしたものである。グループ化にあたっては、ある入力項目以外の入力項目の値がすべて同じ分析ケース２５０をまとめる。例えば、１出力要素目のＩＤカラム以外の入力値が同じ分析ケース２５０をグループ化した例１６００は、初期出力データ２５１であるＤＢの１出力要素目（商品情報テーブルのＩＤカラムの１レコード目）以外の入力項目の値が同じ分析ケース２５０をグループ化した例である。この表から、分析ケース＃１−１と分析ケース＃２−１、分析ケース＃３−１‘と分析ケース＃３−１、分析ケース＃１−３と分析ケース＃２−３、分析ケース＃１−２と分析ケース＃２−２がグループ化されたことが分かる。この表において、同一グループ内での変化の有無が異なるグループは、着目した入力項目の値の変化により、変化の有無が変わることを表す。つまり、着目した入力項目の値を変化の有無を決定する分岐処理で利用している事がわかる。例えば、分析ケース＃３−１‘と分析ケース＃３−１について、分析ケース＃３−１’では変化が発生せず、分析ケース＃３−１では変化が発生したことから、入力項目ＩＤカラムの値の変化が、変化の発生の有無を決める分岐処理で使われている事が分かる。ＩＤカラムに着目した分析ケースのグループ化例１６００では、同一グループ内で変化の有無が変わった分析ケース２５０の列を太字で協調表示した。
【００６７】
この様な分析をすべての入力項目に対して順に行う事で、分岐処理・出力要素決定処理・出力値決定処理で利用する入力項目を特定する事ができる。
尚、Ｎａｍｅカラムに着目した分析ケースのグループ化例１６１０に、複数の分析ケース２５０を含むグループがひとつも出来ない場合の例を示した。この場合、各処理で利用する入力項目を特定する事ができない。この問題を解決するためには、グループ化できるような分析ケース２５０を新たに生成し、分析を繰り返せばよい。例えば、分析ケース＃１−１とグループ化できる分析ケースとして、分析ケース＃１−１の１出力要素目のＮａｍｅカラムを品名Ｘに変更した分析ケース２５０がある。Ｎａｍｅカラムに着目した分析ケースのグループ化例１６１０の様に、グループが１つも出来ない場合やグループの数が少ない場合は、処理に利用されている入力項目の検出漏れが発生する可能性がある。そこで、出力画面１５００等において、グループ数が少ない入力項目を強調表示しても良い。また、変更分析ケース生成部２１０の変更方針を決めるため、分析ケース２５０が不足している入力項目についての情報を利用しても良い。
【００６８】
以上のことから、本実施例により、ソースコードが無い場合でも、既存システムの入力項目と出力項目に対するシステム内部処理の関係を抽出できる。また、出力画面１５００を用いる事で、システム内部処理の内容を調査する上で必要になる、入力項目と出力項目を絞り込むことができるため、既存システムの仕様把握に貢献できる。
【実施例２】
【００６９】
実施例１では、変更分析ケース生成部２１０で、１入力項目の値のみ変更する例について説明した。一般に、２入力項目以上の値を変更すると、抽出した出力データ変化パターン情報が、どの入力項目と関連があるか分からなくなってしまう。しかし、１入力項目の値のみ変更する方法で得た分析結果２６０と、２入力項目以上の値を変更する方法で得た分析結果２６０を組み合わせる事で、１入力項目の値のみ変更する方法に比べてより正確な分析結果２６０を得ることが出来る。この方法を示すのが、実施例２である。
【００７０】
例えば、出力画面１５００において、実際には画面入力項目「ＩＤ」との比較に利用されていない、画面入力項目「品名」、画面入力項目「数量」、入力項目Ｎａｍｅカラムに対して、分岐処理があると判定してしまっている。ここで、２入力項目以上の値を変更して分析を行うと、実際に分岐条件として利用されている入力項目が分かる。具体的には、分岐処理に使われている可能性のある他の入力項目において、基準分析ケースと変更分析ケースで変更した入力項目について、変化が起こる場合と起こらない場合の変化を総当りで組み合わせた入力を作成して分析を行う。
【００７１】
これにより、一緒に変更すると変化の有無が変化する入力項目の組を得ることが出来る。例えば、２つの入力項目をばらばらに変更した際には共に変化が発生したが、一緒に変更した際には変化が発生しなくなる様な入力項目の組の事である（２入力項目の組に限定する意図は無い）。この組は、実際の分岐処理で比較に使われている入力項目である。以上のことから、２入力項目以上の値を変更する方法で得た分析結果２６０を組み合わせる事で、１入力項目の値のみ変更する方法に比べてより正確な分析結果２６０を得ることが出来る。
【符号の説明】
【００７２】
２００  分析プログラム
２１０  変更分析ケース生成部
２２０  出力データ変化情報取得部
２２１  出力データ初期化部
２２２  対象プログラム実行部
２２３  出力データ取得部
２２４  出力データ変化パターン分類部
２３０  システム内部処理特定部
２４０  分析結果表示部
２５０  分析ケース
２５１  初期出力データ
２５２  入力データ
２６０  分析結果
２７０  実行後出力データ
２７１  出力データ変化パターン情報
２７２  システム内部処理情報
２８０  分析対象システム
２９０  分析対象出力データ
【図１】
0006553461.tif 000002
【図２】
0006553461.tif 000003
【図３】
0006553461.tif 000004
【図４】
0006553461.tif 000005
【図５】
0006553461.tif 000006
【図６】
0006553461.tif 000007
【図７】
0006553461.tif 000008
【図８】
0006553461.tif 000009
【図９】
0006553461.tif 000010
【図１０】
0006553461.tif 000011
【図１１】
0006553461.tif 000012
【図１２】
0006553461.tif 000013
【図１３】
0006553461.tif 000014
【図１４】
0006553461.tif 000015