(57)【要約】【課題】修正後のプログラムに対して業務ルールを適切に作成可能にすること。【解決手段】記憶部１１は、第１のプログラムＰ１の修正後の第２のプログラムＰ２であって、第１のプログラムＰ１に対応する第１の業務ルール表Ｔ１との齟齬が発生している第２のプログラムＰ２と、業務用語の定義ルールＲ１を示す情報を記憶する。処理部１２は、第２のプログラムＰ２における条件文に関する分岐条件と分岐条件に応じた出力とを示す入出力表Ｔ２を作成するとともに、定義ルールＲ１を示す情報に基づいて、入出力表Ｔ２に含まれる条件文の組み合わせに対する業務用語を定義する。処理部１２は、定義された業務用語と入出力表Ｔ２とを用いて、第２のプログラムＰ２に対応する第２の業務ルール表Ｔ４を作成する。【選択図】図１
2019139268.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータが、
第１のプログラムの修正後の第２のプログラムであって、前記第１のプログラムに対応する第１の業務ルール表との齟齬が発生している前記第２のプログラムを取得し、
前記第２のプログラムにおける条件文に関する分岐条件と前記分岐条件に応じた出力とを示す入出力表を作成するとともに、業務用語の定義ルールを示す情報に基づいて、前記入出力表に含まれる前記条件文の組み合わせに対する前記業務用語を定義し、
定義された前記業務用語と前記入出力表とを用いて、前記第２のプログラムに対応する第２の業務ルール表を作成する、
プログラム解析方法。
【請求項２】
前記入出力表の作成では、前記第２のプログラムのシンボリック実行の結果に基づいて、前記入出力表を作成する、請求項１記載のプログラム解析方法。
【請求項３】
前記シンボリック実行の結果は、前記第２のプログラムによる複数の出力それぞれについて、入力変数に関する複数の条件を含み、
前記入出力表の生成では、１つの出力に対する前記複数の条件を１つの前記分岐条件に変換する処理を、出力毎に実行する、
請求項２記載のプログラム解析方法。
【請求項４】
前記分岐条件は、乗法標準形であり、
前記業務用語の定義では、前記分岐条件に含まれる複数の選言節それぞれを組み合わせることで、前記条件文の組み合わせの複数の候補を生成し、前記複数の候補の中から前記業務用語の定義対象を選択する、
請求項１乃至３の何れか１項に記載のプログラム解析方法。
【請求項５】
前記業務用語の定義では、前記複数の候補のうちの第１の候補に対する否定の条件が前記複数の候補に含まれるか否かの判定に応じて、前記第１の候補に対応する前記条件文の組み合わせを前記業務用語の定義対象とするか否かを決定する、請求項４記載のプログラム解析方法。
【請求項６】
前記業務用語の定義では、前記第１の候補に対する否定を示す第２の候補が前記複数の候補に含まれる場合に、前記第１の候補が正条件であるか否かの判定に応じて、前記第１の候補に対応する前記条件文の組み合わせを前記業務用語の定義対象とするか否かを決定する、請求項５記載のプログラム解析方法。
【請求項７】
前記第２の業務ルール表の作成では、前記入出力表における前記分岐条件の中での前記条件文の組み合わせの出現場所を検索し、前記入出力表の前記出現場所の記述を前記条件文の組み合わせに対応する前記業務用語に置換する、請求項１乃至６の何れか１項に記載のプログラム解析方法。
【請求項８】
第１のプログラムの修正後の第２のプログラムであって、前記第１のプログラムに対応する第１の業務ルール表との齟齬が発生している前記第２のプログラムと、業務用語の定義ルールを示す情報を記憶する記憶部と、
前記第２のプログラムにおける条件文に関する分岐条件と前記分岐条件に応じた出力とを示す入出力表を作成するとともに、前記定義ルールを示す情報に基づいて、前記入出力表に含まれる前記条件文の組み合わせに対する前記業務用語を定義し、定義された前記業務用語と前記入出力表とを用いて、前記第２のプログラムに対応する第２の業務ルール表を作成する処理部と、
を有するプログラム解析装置。
【請求項９】
第１のプログラムの修正後の第２のプログラムであって、前記第１のプログラムに対応する第１の業務ルール表との齟齬が発生している前記第２のプログラムを取得し、
前記第２のプログラムにおける条件文に関する分岐条件と前記分岐条件に応じた出力とを示す入出力表を作成するとともに、業務用語の定義ルールを示す情報に基づいて、前記入出力表に含まれる前記条件文の組み合わせに対する前記業務用語を定義し、
定義された前記業務用語と前記入出力表とを用いて、前記第２のプログラムに対応する第２の業務ルール表を作成する、
処理をコンピュータに実行させるプログラム解析プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はプログラム解析方法、プログラム解析装置およびプログラム解析プログラムに関する。
【背景技術】
【０００２】
情報処理システムでは、種々の機能を実現するソフトウェアが利用されている。ソフトウェアのプログラムは、機能追加や修正などに伴って更新されることがある。そこで、プログラムの更新を支援する技術が考えられている。
【０００３】
例えば、ソースプログラムから日常の保守作業において修正対象となり易い部分と、システム更新時に主な修正対象となるＯＳ（Operating System）に依存する部分とを自動的に分離・抽出し、システム再構築作業の負荷を軽減する業務仕様解析装置の提案がある。
【０００４】
なお、利用者により作成された単一条件式および単一条件式が結合した条件式を表示画面中の条件一覧表示域でそれぞれ一つの項として取扱い、利用者による二つの項の論理結合関係の設定の繰返しのみでデータベースの検索条件を作成する作成装置の提案がある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平７−１０４９９４号公報
【特許文献２】特開平１１−２１９３７１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
長期に亘って運用保守された情報処理システムでは、プログラムが部分的に修正されていることが少なくない。ここで、プログラムに対して、開発時に作成された設計文書が存在し得る。ところが、プログラムの修正時に、当該プログラムの設計文書が十分に修正されないことがある。この場合、プログラムの改修内容が設計文書に反映されず、プログラムと設計文書との間に齟齬が生じ得る。例えば、あるデータ項目と当該データ項目を用いたロジックがプログラムに追加されているにも拘わらず、追加されたデータ項目やロジックに関する内容が業務用語や業務ルールなどを記述した文書から漏れるおそれがある。このため、ユーザが現行の情報処理システムの保守や再構築などを行う場合に、既存の設計文書からプログラムの現状を正しく把握できないことがある。
【０００７】
１つの側面では、本発明は、修正後のプログラムに対して業務ルールを適切に作成可能にすることを目的とする。
【課題を解決するための手段】
【０００８】
１つの態様では、プログラム解析方法が提供される。このプログラム解析方法では、コンピュータが、第１のプログラムの修正後の第２のプログラムであって、第１のプログラムに対応する第１の業務ルール表との齟齬が発生している第２のプログラムを取得し、第２のプログラムにおける条件文に関する分岐条件と分岐条件に応じた出力とを示す入出力表を作成するとともに、業務用語の定義ルールを示す情報に基づいて、入出力表に含まれる条件文の組み合わせに対する業務用語を定義し、定義された業務用語と入出力表とを用いて、第２のプログラムに対応する第２の業務ルール表を作成する。
【発明の効果】
【０００９】
１つの側面では、修正後のプログラムに対して業務ルールを適切に作成できる。
【図面の簡単な説明】
【００１０】
【図１】第１の実施の形態のプログラム解析装置を示す図である。
【図２】第２の実施の形態の解析サーバのハードウェア例を示す図である。
【図３】Ｖ字モデルの例を示す図である。
【図４】文書化された情報範囲と理解の難度の例を示す図である。
【図５】Ｖ字モデルにおける文書の例（その１）を示す図である。
【図６】Ｖ字モデルにおける文書の例（その２）を示す図である。
【図７】解析サーバの機能例を示す図である。
【図８】シンボリック実行の例を示す図である。
【図９】解析対象のプログラムの例を示す図である。
【図１０】シンボリック実行結果の例を示す図である。
【図１１】入出力表の例を示す図である。
【図１２】業務条件候補抽出用の中間データの例を示す図である。
【図１３】業務条件候補表の例を示す図である。
【図１４】業務条件選定用の中間データの例を示す図である。
【図１５】業務条件選定結果の例を示す図である。
【図１６】命名ルール表の例を示す図である。
【図１７】業務用語表の例を示す図である。
【図１８】業務ルール表の例を示す図である。
【図１９】解析サーバの処理例を示すフローチャートである。
【図２０】シンボリック実行の処理例を示すフローチャートである。
【図２１】入出力表生成の処理例を示すフローチャートである。
【図２２】業務条件候補生成の処理例を示すフローチャートである。
【図２３】業務条件選定の処理例を示すフローチャートである。
【図２４】業務用語表出力の処理例を示すフローチャートである。
【図２５】業務ルール表出力の処理例を示すフローチャートである。
【図２６】解析サーバの入出力の例を示す図である。
【図２７】解析対象のプログラムの他の例を示す図である。
【図２８】解析サーバの入出力の他の例を示す図である。
【発明を実施するための形態】
【００１１】
以下、本実施の形態について図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態のプログラム解析装置を示す図である。プログラム解析装置１０は、プログラムの修正に応じた設計文書の改版を支援する。ここで、プログラム解析装置１０は、設計文書を電子データとして管理する。設計文書として、システム開発のＶ字モデルにおける要件定義書や基本設計書が挙げられる。例えば、要件定義書は、業務ルール表を含む。業務ルール表は、業務における特定のデータ項目に対する処理のルール（業務ルール）を示す情報である。また、要件定義書や基本設計書は、業務用語表を含む。業務用語表は、業務ルールで用いられる用語の定義を示す情報である。
【００１２】
プログラム解析装置１０は、記憶部１１および処理部１２を有する。記憶部１１は、ＲＡＭ（Random Access Memory）などの揮発性の半導体メモリでもよいし、ＨＤＤ（Hard Disk Drive）やフラッシュメモリなどの不揮発性のストレージでもよい。処理部１２は、例えば、ＣＰＵ（Central Processing Unit）やＤＳＰ（Digital Signal Processor）などのプロセッサである。ただし、処理部１２は、ＡＳＩＣ（Application Specific Integrated Circuit）やＦＰＧＡ（Field Programmable Gate Array）などの特定用途の電子回路を含んでもよい。プロセッサは、ＲＡＭなどのメモリ（記憶部１１でもよい）に記憶されたプログラムを実行する。複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うこともある。
【００１３】
記憶部１１は、第１のプログラムＰ１の修正後の第２のプログラムＰ２を記憶する。記憶部１１は、第１のプログラムＰ１に対応する第１の業務ルール表Ｔ１を記憶する。また、記憶部１１は、業務用語の定義ルールＲ１を示す情報を記憶する。
【００１４】
ここで、第１のプログラムＰ１が修正されたにも拘わらず、第１の業務ルール表Ｔ１は、修正されていない。第２のプログラムＰ２は、例えば、第１のプログラムＰ１に対してデータ項目や当該データ項目に対するロジックが追加されたものである。このため、第２のプログラムＰ２は、第１の業務ルール表Ｔ１と齟齬がある（すなわち、両者の内容が整合していない）。ここで、図１の例における第１のプログラムＰ１および第２のプログラムＰ２の左側の番号は、便宜的に付した行番号である。
【００１５】
図１の例では、第２のプログラムＰ２において、その４行目に定数Ｃ２の定義が追加され、その６行目に変数“コード”に関する定数Ｃ２を用いた条件判定が追加されている点が第１のプログラムＰ１と異なる。なお、図１では、第２のプログラムＰ２の第１のプログラムＰ１に対する追加部分には強調のために下線を付している。このため、例えば、第１の業務ルール表Ｔ１の変数“コード”に関する業務ルールにおいて、第２のプログラムＰ２に追加された定数Ｃ２の内容が反映されていない点で、第１の業務ルール表Ｔ１と第２のプログラムＰ２との対応関係に齟齬が発生しているといえる。
【００１６】
処理部１２は、記憶部１１に記憶された第２のプログラムＰ２における条件文に関する分岐条件（分岐毎の入力変数に対する入力値の組）と分岐条件に応じた出力とを示す入出力表Ｔ２を作成する。例えば、入出力表Ｔ２は、項番、出力および条件（分岐条件）の項目を含む。処理部１２は、第２のプログラムＰ２のシンボリック実行の結果に基づいて、入出力表Ｔ２を作成してもよい。シンボリック実行とは、入力変数に記号値を設定してプログラムを模擬的に実行することによりプログラムのロジックを分析する技術である。シンボリック実行の結果は、プログラムに含まれる条件分岐によるパス毎の変数の条件と、出力とを含む。処理部１２は、この結果を整理することで、入出力表Ｔ２を得る。入出力表Ｔ２は、第２のプログラムＰ２に対応する入出力表である。処理部１２は、作成した入出力表Ｔ２を示す情報を記憶部１１に格納する。
【００１７】
処理部１２は、定義ルールＲ１を示す情報に基づいて、入出力表Ｔ２に含まれる条件文の組み合わせ（複合条件）に対する業務用語を定義する。例えば、定義ルールＲ１には、条件文の組み合わせの書式に対応する業務用語が予め設定されている。例えば、入出力表Ｔ２の項番“１”の分岐条件には第２のプログラムＰ２の３〜４行目および６〜７行目のＩＦ文に対応する条件文“コード  ＝  １”、“コード  ＝  ２”、“０  ＜  範囲”および“範囲  ＜  １０”が含まれる。
【００１８】
第１の例では、定義ルールＲ１は、「条件“（下限値  ＜  変数）ＡＮＤ（変数  ＜  上限値）”にマッチしたら、“変数内”と命名する」というルールを含む。当該ルールにおける“変数”、“下限値”および“上限値”の文字列は、入出力表Ｔ２の条件に含まれる具体的な文字列に置換される。本例では、入出力表Ｔ２の項番“１”のレコードに含まれる“範囲”を“変数”に、“０”を“下限値”に、“１０”を“上限値”にそれぞれ当てはめることができる。したがって、処理部１２は、入出力表Ｔ２の項番“１”に含まれる複合条件“（０  ＜  範囲）ＡＮＤ（範囲  ＜  １０）”を業務用語“範囲内”と命名する。なお、処理部１２は、入出力表Ｔ２に含まれる複合条件のうち、入出力表Ｔ２中に、当該複合条件の否定条件が含まれるものに対して業務用語を定義する。否定条件が含まれない条件は、プログラムのパスに影響せず、業務ルールに関与しないと考えられるためである。例えば、入出力表Ｔ２の項番“１”の条件“（０  ＜  範囲）ＡＮＤ（範囲  ＜  １０）”に対しては、同項番“２”の条件“（０  ＮＯＴ  ＜  範囲）ＯＲ（範囲  ＮＯＴ  ＜  １０）”が否定条件となっている。
【００１９】
第２の例では、定義ルールＲ１は、「条件“（変数  ＝定数１）［ＯＲ（変数  ＝  定数２）］＋”にマッチしたら、“有効変数”と命名する」というルールを含む。当該ルールの“［ＯＲ（変数  ＝  定数２）］＋”の部分は、２つ目以降の定数に関する条件がＯＲで結合され得ることを示す。また、当該ルールにおける“変数”、“定数１”および“定数２”の文字列は、入出力表Ｔ２の条件に含まれる具体的な文字列に置換される。本例では、入出力表Ｔ２の項番“１”、“２”のレコードに含まれる“コード”を“変数”に、“１”を“定数１”に、“２”を“定数２”にそれぞれ当てはめることができる。したがって、処理部１２は、入出力表Ｔ２の項番“１”、“２”に含まれる複合条件“（コード  ＝  １）ＯＲ（コード  ＝  ２）”を業務用語“有効コード”と命名する。なお、入出力表Ｔ２の項番“３”の条件“（コード  ＮＯＴ  ＝  １）ＡＮＤ（コード  ＮＯＴ  ＝  ２）”は、条件“（コード  ＝  １）ＯＲ（コード  ＝  ２）”の否定条件となっている。
【００２０】
処理部１２は、定義された業務用語を含む業務用語表Ｔ３を示す情報を記憶部１１に格納する。なお、業務用語表Ｔ３では、業務用語に対して正条件が対応付けられる。正条件とは、互いに否定の関係にある２つの条件のうち、否定演算子の少ない方の条件である。
【００２１】
処理部１２は、定義された業務用語と入出力表Ｔ２とを用いて、第２のプログラムＰ２に対応する第２の業務ルール表Ｔ４を作成する。例えば、処理部１２は、業務用語表Ｔ３に基づいて、入出力表Ｔ２の項番“１”の条件における“（コード  ＝  １）ＯＲ（コード  ＝  ２）”の部分を、“有効コード＝Ｔｒｕｅ”に置換する。ここで、“Ｔｒｕｅ”は、業務用語表Ｔ３に定義された業務用語の条件に対する正条件であることを示す。同様に、処理部１２は、業務用語表Ｔ３に基づいて、入出力表Ｔ２の項番“１”の条件における“（０  ＜  範囲）ＡＮＤ（範囲  ＜  １０）”の部分を、“範囲内  ＝  Ｔｒｕｅ”に置換する。すると、入出力表Ｔ２の項番“１”の条件は、“（有効コード  ＝  Ｔｒｕｅ）ＡＮＤ（範囲内  ＝  Ｔｒｕｅ）”と表される。
【００２２】
また、処理部１２は、業務用語表Ｔ３に基づいて、入出力表Ｔ２の項番“２”の条件を、“（有効コード  ＝  Ｔｒｕｅ）ＡＮＤ（範囲内  ＝  Ｆａｌｓｅ）”と表す。“範囲内  ＝  Ｆａｌｓｅ”となる理由は、入出力表Ｔ２の項番“２”の条件の“（０  ＮＯＴ  ＜  範囲）ＯＲ（範囲  ＮＯＴ  ＜  １０）”の部分は、業務用語“範囲内”の条件に対する否定条件だからである。
【００２３】
更に、処理部１２は、業務用語表Ｔ３に基づいて、入出力表Ｔ２の項番“３”の条件を“（有効コード  ＝  Ｆａｌｓｅ）”と表す。“有効コード  ＝  Ｆａｌｓｅ”となる理由は、入出力表Ｔ２の項番“３”の条件の“（コード  ＮＯＴ  ＝  １）ＡＮＤ（コード  ＮＯＴ  ＝  ２）”は、業務用語“有効コード”の条件に対する否定条件だからである。
【００２４】
処理部１２は、作成した第２の業務ルール表Ｔ４を記憶部１１に格納する。また、処理部１２は、業務用語表Ｔ３および第２の業務ルール表Ｔ４を、第２のプログラムＰ２に対応付ける。
【００２５】
こうして新たに作成された業務用語表Ｔ３および第２の業務ルール表Ｔ４は、第２のプログラムＰ２に対する修正を反映した内容となる。例えば、第２の業務ルール表Ｔ４における“有効コード”に関する条件の記述は、業務用語表Ｔ３によれば、新たに追加された定数Ｃ２に関する条件が適切に反映されている。このようにして、プログラム解析装置１０によれば、修正後のプログラムに対して、業務ルールを適切に作成することができる。
【００２６】
以下では、プログラム解析装置１０として用いられるサーバコンピュータ（解析サーバ）を例示して、プログラム解析の機能を更に詳細に説明する。
［第２の実施の形態］
図２は、第２の実施の形態の解析サーバのハードウェア例を示す図である。解析サーバ１００は、ＣＰＵ１０１、ＲＡＭ１０２、ＨＤＤ１０３、画像信号処理部１０４、入力信号処理部１０５、媒体リーダ１０６およびＮＩＣ（Network Interface Card）１０７を有する。各ハードウェアは解析サーバ１００のバスに接続されている。
【００２７】
ここで、解析サーバ１００は、第１の実施の形態のプログラム解析装置１０の一例である。また、ＣＰＵ１０１は、第１の実施の形態の処理部１２の一例である。ＲＡＭ１０２またはＨＤＤ１０３は、第１の実施の形態の記憶部１１の一例である。
【００２８】
ＣＰＵ１０１は、解析サーバ１００の情報処理を制御するハードウェアである。ＣＰＵ１０１は、マルチプロセッサであってもよい。ＣＰＵ１０１は、例えばＣＰＵ、ＤＳＰ、ＡＳＩＣまたはＦＰＧＡなどである。ＣＰＵ１０１は、ＣＰＵ、ＤＳＰ、ＡＳＩＣ、ＦＰＧＡなどのうちの２以上の要素の組み合わせであってもよい。
【００２９】
ＲＡＭ１０２は、解析サーバ１００の主記憶装置である。ＲＡＭ１０２は、ＣＰＵ１０１に実行させるＯＳのプログラムやアプリケーションプログラムの少なくとも一部を一時的に記憶する。また、ＲＡＭ１０２は、ＣＰＵ１０１による処理に用いる各種データを記憶する。
【００３０】
ＨＤＤ１０３は、解析サーバ１００の補助記憶装置である。ＨＤＤ１０３は、内蔵した磁気ディスクに対して、磁気的にデータの書き込みおよび読み出しを行う。ＨＤＤ１０３は、ＯＳのプログラム、アプリケーションプログラム、および各種データを記憶する。解析サーバ１００は、フラッシュメモリやＳＳＤ（Solid State Drive）などの他の種類の補助記憶装置を備えてもよく、複数の補助記憶装置を備えてもよい。
【００３１】
画像信号処理部１０４は、ＣＰＵ１０１からの命令に従って、解析サーバ１００に接続されたディスプレイ２１に画像を出力する。ディスプレイ２１として、ＣＲＴ（Cathode Ray Tube）ディスプレイや液晶ディスプレイなどを用いることができる。
【００３２】
入力信号処理部１０５は、解析サーバ１００に接続された入力デバイス２２から入力信号を取得し、ＣＰＵ１０１に出力する。入力デバイス２２として、例えば、マウスやタッチパネルなどのポインティングデバイス、キーボードなどを用いることができる。
【００３３】
媒体リーダ１０６は、記録媒体２３に記録されたプログラムやデータを読み取る装置である。記録媒体２３として、例えば、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤなどの磁気ディスク、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）などの光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）を使用できる。また、記録媒体２３として、例えば、フラッシュメモリカードなどの不揮発性の半導体メモリを使用することもできる。媒体リーダ１０６は、例えば、ＣＰＵ１０１からの命令に従って、記録媒体２３から読み取ったプログラムやデータをＲＡＭ１０２またはＨＤＤ１０３に格納する。
【００３４】
ＮＩＣ１０７は、ネットワーク２４を介して他の装置と通信を行う。ＮＩＣ１０７は、有線通信インタフェースでもよいし、無線通信インタフェースでもよい。
図３は、Ｖ字モデルの例を示す図である。システム開発の現場では、Ｖ字モデルに従って開発工程の計画や、開発作業が行われる。Ｖ字モデルは、最初に要件定義を行う。要件定義では、ユーザの要求する要件を明確化する。次いで、要件定義で明確化された要件を実現するための設計を、基本設計および詳細設計の工程により段階的に詳細化し、その後、プログラムの製造の工程を行う。ここまでがＶ字の左上から下へ向かう開発作業の流れである。プログラムの製造が行われると、Ｖ字の下から右上に向かって、各工程の設計とテスト（単体テスト、結合テストおよびシステムテスト）とを対応付けて品質の確認が行われる。
【００３５】
ここで、Ｖ字モデルの各段階において成果物が作成される。成果物には次の文書がある。
要件定義の成果物は、要件定義書Ｄ１である。要件定義書Ｄ１は、開発対象のシステムで実現すべき要件や機能を、システムの発注者とシステムの開発者との間で明確化する目的で作成される。要件定義書Ｄ１は、システムの開発に詳しくない発注者でも容易に理解できるように、システム開発の用語よりも業務用語などを用いて記述されることがある。
【００３６】
基本設計の成果物は、基本設計書Ｄ２である。基本設計書Ｄ２は、要件定義書の要件を実現するための基本的な設計事項を記述する。基本設計書Ｄ２は、基本的で概要的な設計書であり、コンピュータで実行可能なレベルまでは記述せずに、業務用語や基本設計用の用語を用いて記述される。
【００３７】
詳細設計の成果物は、詳細設計書Ｄ３である。詳細設計書Ｄ３は、基本設計書Ｄ２の設計内容をプログラムに実装可能なレベルに詳細化した設計を記述する。プログラム変数に該当するレベルの用語を用いて記述される。
【００３８】
製造の成果物は、プログラムＤ４である。プログラムＤ４は、詳細設計書Ｄ３の設計内容をコンピュータで実行するためのソースプログラムであり、プログラム言語を用いて記述される。
【００３９】
上記の各成果物は、開発工程の進展に伴い、要件定義書Ｄ１からプログラムＤ４へ向かう順に、記述内容の一貫性を維持して詳細化される。
図４は、文書化された情報範囲と理解の難度の例を示す図である。文書は、要件定義書Ｄ１からプログラムＤ４へと詳細化されるに従って、文書化された情報の範囲が増加し、文書化されていない情報が減少する。文書化されていない情報とは、発注者や開発者の間で常識的あるいは暗黙的に共有される業務知識などである。開発初期に作成される要件定義書Ｄ１では、発注者や開発者などの関係者が常識的に業務知識を共有する。このため、要件定義書Ｄ１が厳密に定義されない業務用語などの業務知識を用いて記述されていても発注者や開発者などは内容を理解可能である。一方、業務用語を用いた記述の方が簡易な記述となり、発注者と開発者との間で共通理解を形成しやすいという一面もある。
【００４０】
コンピュータを用いて実行可能なシステムを構築するためには、業務知識の意味を厳密に定義することが求められる。このため、コンピュータで実行可能なプログラムを開発するためには、当該システムに関する情報のプログラムＤ４への記述を要する。その結果、詳細設計書Ｄ３やプログラムＤ４のように、開発後半の文章の記述は詳細となり、また、記述内容の量が多くなる。以上の結果、詳細設計書Ｄ３やプログラムＤ４は、一般に、理解の困難性が高くなる。
【００４１】
図５は、Ｖ字モデルにおける文書の例（その１）を示す図である。業務ルールＤ１１は、要件定義書Ｄ１に記述される。業務ルールＤ１１は、システムの機能に関連する業務上の特定の判断基準を示す。要件定義書Ｄ１は、発注者と開発者との間で開発要件を明確化することが目的であるため、例えば、「有効コード」や「期間内」といった業務用語を用いて記述される。図５の業務ルールＤ１１の例では、可読性や一覧性などを高めるために、決定表（表形式）で記述する場合を示したが、例えば、「有効コードで、かつ、期間内ならば、結果は１とする」のように自然言語で記述されてもよい。
【００４２】
業務用語Ｄ１２は、要件定義書Ｄ１や基本設計書Ｄ２において、業務ルールＤ１１の「有効コード」や「期間内」の意味を定義する。例えば、「期間内」は、「２０１７年８月１日から２０１７年８月３１日の間」を意味する。このように自然言語で記述することもあるし、業務用語Ｄ１２のように条件式を用いて「（２０１７０８０１  ＜  期間）ＡＮＤ（期間  ＜  ２０１７０８３１）」のように記述することもある。なお、業務ルールＤ１１と業務用語Ｄ１２とが一体となって、業務ルールに関する知識を形成しているともいえる。当初の設計文書では、業務用語Ｄ１２の内容が業務ルールＤ１１に組み込まれていることもある。
【００４３】
詳細化された業務ルールＤ１３は、基本設計書Ｄ２に記述される。業務ルールＤ１３は、業務ルールＤ１１をプログラム言語で記述することを可能にするため、業務用語Ｄ１２を条件式に展開して記述したものである。
【００４４】
図６は、Ｖ字モデルにおける文書の例（その２）を示す図である。プログラムＤ１４は、プログラムＤ４の一部であり、詳細化された業務ルールＤ１３をコンピュータにより実行できるようにプログラム言語で記述したものである。プログラムＤ１４では、プログラム言語の一例として、ＣＯＢＯＬを用いた記述を示している。
【００４５】
ここで、長期間に亘り運用保守されるシステムでは、不具合の修理や業務内容の変化などに対応するために、機能の変更や追加などの部分的な改修が断続的に行われる。この部分改修を行う際に、開発者により全ての文書とプログラムの一貫性が維持されることが望ましい。しかし、改修のコストや開発期間などの制限のために、開発者が全ての文書とプログラムとを一貫性を維持しながら適切に更新することは容易ではない。
【００４６】
このような状況のため、システムの機能に直接関係するプログラムが改修されても、機能には直接関係しない文書は十分に改修されない事態となり、文書の内容に不備が生じる。すなわち、プログラムの改修内容が設計文書に反映されず、プログラムと設計文書との間に齟齬が生じる。このように、プログラムと設計文書との間に齟齬があると、その後のプログラムの改修の際などに、設計文書に記載の情報を利用することができない。
【００４７】
そこで、解析サーバ１００は、プログラムの修正に応じて、業務ルールなどの設計文書を適切に再作成する機能を提供する。
図７は、解析サーバの機能例を示す図である。解析サーバ１００は、プログラム記憶部１１０、解析情報記憶部１２０、命名ルール記憶部１３０、解析結果記憶部１４０および解析部１５０を有する。
【００４８】
プログラム記憶部１１０、解析情報記憶部１２０、命名ルール記憶部１３０および解析結果記憶部１４０は、ＲＡＭ１０２やＨＤＤ１０３の記憶領域を用いて実現される。解析部１５０は、ＣＰＵ１０１がＲＡＭ１０２に記憶されたプログラムを実行することで実現される。
【００４９】
プログラム記憶部１１０は、解析対象のプログラム１１１を記憶する。プログラム１１１は、あるプログラムの修正後のプログラムである。このため、修正前のプログラムに対して作成された既存の設計文書の業務用語の定義内容や業務ルールの内容は、プログラム１１１に整合していない。
【００５０】
解析情報記憶部１２０は、解析部１５０の処理に用いられる各種の情報を記憶する。例えば、解析情報記憶部１２０は、シンボリック実行結果１２１、入出力表１２２、業務条件候補表１２３および業務条件選定結果１２４を記憶する。これらの情報は、テーブル形式のデータでもよい。
【００５１】
シンボリック実行結果１２１は、解析部１５０によるプログラム１１１のシンボリック実行の結果を示す情報である。シンボリック実行結果１２１は、シンボリック実行により抽出されたプログラムの処理パスの情報を含む。
【００５２】
入出力表１２２は、解析部１５０によりシンボリック実行結果１２１から抽出されたプログラム１１１における入力と出力との関係を示す情報である。
業務条件候補表１２３は、解析部１５０により入出力表１２２から抽出された業務条件候補を示す情報である。
【００５３】
業務条件選定結果１２４は、解析部１５０により業務条件候補表１２３から選定された業務条件を示す情報である。
命名ルール記憶部１３０は、命名ルール表１３１を記憶する。命名ルール表１３１は、業務条件に対する条件名の命名ルールを示す情報である。
【００５４】
解析結果記憶部１４０は、解析部１５０により作成された業務用語表１４１および業務ルール表１４２を記憶する。業務用語表１４１は、業務用語の定義を示す情報である。業務ルール表１４２は、業務ルールの内容を示す情報である。
【００５５】
解析部１５０は、解析対象のプログラム１１１が入力されると、プログラム１１１を解析し、業務用語表１４１および業務ルール表１４２を出力する。解析部１５０は、シンボリック実行部１５１、入出力表生成部１５２、業務条件候補生成部１５３、業務条件選定部１５４、業務条件命名部１５５および入出力表書換部１５６を有する。
【００５６】
シンボリック実行部１５１は、解析対象のプログラム１１１をシンボリック実行することにより、プログラム１１１の処理パスを抽出し、シンボリック実行結果１２１を生成する。シンボリック実行部１５１は、シンボリック実行結果１２１を解析情報記憶部１２０に格納する。
【００５７】
入出力表生成部１５２は、シンボリック実行結果１２１を集計し、整理することで、プログラム１１１の入力と出力との関係を示す入出力表１２２を生成し、解析情報記憶部１２０に入出力表１２２を格納する。
【００５８】
業務条件候補生成部１５３は、入出力表１２２に含まれる条件から業務条件の候補を生成し、業務条件候補表１２３に登録する。業務条件候補生成部１５３は、業務条件候補表１２３を解析情報記憶部１２０に格納する。ここで、業務条件とは、プログラム１１１のうち、ユーザの業務との関連性が比較的強い（例えば、頻繁に更新されるなど）と推定される条件群である。業務条件候補は、複数の条件の組み合わせである複合条件である。したがって、業務条件も複合条件である。複合条件を業務条件の候補とすることで、ユーザにより更新された条件の変更（例えば、変数に対する条件の追加など）を適切に検出可能にする。例えば、新規機能の追加などに応じて、プログラマなどによって、複合的な条件にコードが変更されるケースが多いため、複合条件を検出することで、コードの更新内容を適切に検出できる可能性が高まる。
【００５９】
業務条件選定部１５４は、業務条件候補表１２３に登録された業務条件の複数の候補のうち、着目する候補について、当該候補の否定条件が当該複数の候補の中に存在するものを業務条件として選定し、業務条件選定結果１２４を生成する。業務条件選定部１５４は、業務条件選定結果１２４を解析情報記憶部１２０に格納する。
【００６０】
業務条件命名部１５５は、業務条件選定結果１２４に含まれる業務条件に対して、命名ルール表１３１における命名ルールに基づいて条件名を命名し、命名結果を示す業務用語表１４１を生成する。業務条件命名部１５５は、解析結果記憶部１４０に業務用語表１４１を格納する。
【００６１】
入出力表書換部１５６は、業務条件命名部１５５により命名された業務条件により、入出力表１２２に含まれる条件の記述を置き換えることで、業務ルール表１４２を生成する。入出力表書換部１５６は、解析結果記憶部１４０に業務ルール表１４２を格納する。
【００６２】
図８は、シンボリック実行の例を示す図である。プログラムの分析方法の１つに、シンボリック実行（記号実行）がある。シンボリック実行では、プログラムへの入力値を格納する変数に、具体的な数値や具体的な文字に代えて定数を示すシンボル（記号値）を設定して、プログラムの実行可能なパスを抽出することによって、プログラムを分析する技術である。シンボリック実行に関して、例えば、次の文献を参考にすることができる。
【００６３】
（文献）玉井哲雄、福永光一著、「シンボリック実行システム」、情報処理、ｐｐ．１８−２８、１９８２年１月１５日
次に、シンボリック実行によるプログラムの分析例を説明する。
【００６４】
プログラムＥ１は、分析対象のプログラムの一例である。ただし、図８では、ロジックがわかり易いように、プログラム言語による記述ではなく、フローチャートの形式でプログラムＥ１を図示している。
【００６５】
プログラムＥ１は、変数「性別」の値として２文字の文字列を受け取り、変数「結果」の値として１文字を出力する。プログラムＥ１は、２つの条件分岐を含む。１つ目の条件分岐では、変数「性別」の値が「男性」であるか判定される。変数「性別」の値が「男性」である場合には変数「結果」の値が「Ｍ」に更新され、そうでない場合には変数「結果」の値が「  」（空白）に更新される。また、２つ目の条件分岐では、変数「性別」の値が「女性」であるか判定される。変数「性別」の値が「女性」である場合には変数「結果」の値が「Ｆ」に更新され、そうでない場合には変数「結果」の値は変化しない。そして、プログラムＥ１が終了する。
【００６６】
プログラムＥ１には３つのパスＡ，Ｂ，Ｃが存在する。変数「性別」の値に応じて、これら３つのパスのうちの何れか１つが実行される。パスＡでは、変数「性別」の値が「男性」の場合である。この場合、１つ目の分岐条件はＹＥＳと判定され、２つ目の分岐条件はＮＯと判定される。パスＡでは、変数「結果」の値は「Ｍ」になる。
【００６７】
パスＢは、変数「性別」の値が「女性」の場合である。パスＢでは、１つ目の分岐条件はＮＯと判定され、２つ目の分岐条件はＹＥＳと判定される。パスＢでは、変数「結果」の値は「Ｆ」になる。
【００６８】
パスＣは、変数「性別」の値が「男性」でも「女性」でもない場合である。パスＣでは、１つ目の分岐条件と２つ目の分岐条件の両方がＮＯと判定される。この実行パスでは、変数「結果」の値は「  」（空白）になる。
【００６９】
プログラムＥ１は直列の２つの条件分岐文を含むため、分岐条件の内容を無視すれば、実行パスの候補は４つ存在する。しかし、変数「性別」の値が「男性」であることと変数「性別」の値が「女性」であることは矛盾するため、２つの分岐条件の両方がＹＥＳと判定されることはない。よって、４つの実行パスの候補のうち、実行される可能性のある有効な実行パスは３つである。
【００７０】
条件分岐文において、ある分岐方向（ＹＥＳ方向またはＮＯ方向）に進むための条件を満たす変数の値が少なくとも１つ存在するとき、その分岐方向は「充足可能である」と言うことがある。一方、ある分岐方向に進むための条件を満たす変数の値が存在しないとき、その分岐方向は「充足可能でない」と言うことがある。
【００７１】
プログラムＥ１において、１つ目の条件分岐では変数「性別」の値は制約されていないため、２つの分岐方向は共に充足可能である。一方、２つ目の条件分岐における充足可能性は、１つ目の条件分岐で選択した分岐方向に依存する。１つ目の条件分岐でＹＥＳ方向を選択した場合、２つ目の条件分岐のＹＥＳ方向は充足可能でなくなりＮＯ方向のみ充足可能となる。１つ目の条件分岐でＮＯ方向を選択した場合、２つ目の条件分岐の分岐方向は共に充足可能である。よって、有効な実行パスは３つであると判断できる。
【００７２】
ここで、プログラムＥ１をシンボリック実行する例を説明する。シンボリック実行部１５１は、プログラムＥ１に対する入力を示す変数「性別」に、具体的な文字ではなく任意の定数を示す抽象的なシンボル（記号値）を割り当てる。ここでは、変数名と同じ「性別」をシンボルとして用いる。シンボリック実行部１５１は、シンボルを用いてプログラムＥ１の命令を擬似的に実行していく。
【００７３】
プログラムＥ１の始点から１つ目の条件分岐の前までは、パスの分岐は存在しない。１つ目の条件分岐について、この時点ではそのパスが選択される条件（パス条件）は存在せず、２つの分岐方向は共に充足可能である。よって、シンボリック実行部１５１は、１つ目の条件分岐においてパスを分割し、一方のパスを選択する。ここでは、シンボリック実行部１５１は、ＹＥＳ方向のパスを選択したとする。
【００７４】
次に、２つ目の条件分岐について、この時点におけるパス条件はシンボル「性別」が「男性」であることであるため、ＹＥＳ方向は充足可能でなくＮＯ方向は充足可能である。よって、シンボリック実行部１５１はＮＯ方向を選択する。その後、この１番目のパス（パスＡ）は終了する。シンボリック実行部１５１は、１番目のパスのパス条件を、シンボル「性別」が「男性」でありかつシンボル「性別」が「女性」でないと判定する。また、シンボリック実行部１５１は、１番目のパスの処理結果（パス出力）を、変数「結果」の値が「Ｍ」であると判定する。シンボリック実行部１５１は、これらの判定結果を、シンボリック実行結果Ｅ２に登録する（項番“１”のレコードに相当）。
【００７５】
１番目のパスが終了すると、シンボリック実行部１５１は、当該パスの直近の分割点まで戻り、未選択のパスを選択する。ここでは、シンボリック実行部１５１は、１つ目の条件分岐まで戻ってＮＯ方向のパスを選択する。
【００７６】
２つ目の条件分岐について、この時点におけるパス条件はシンボル「性別」が「男性」でないことであるため、ＹＥＳ方向とＮＯ方向の何れも充足可能である。よって、シンボリック実行部１５１は、２つ目の条件分岐においてパスを更に分割し、一方のパスを選択する。ここでは、シンボリック実行部１５１は、ＹＥＳ方向の実行パスを選択したとする。その後、この２番目のパス（パスＢ）は終了する。シンボリック実行部１５１は、２番目のパスのパス条件を、シンボル「性別」が「男性」でなくかつシンボル「性別」が「女性」であると判定する。また、シンボリック実行部１５１は、２番目のパスのパス出力を、変数「結果」の値が「Ｆ」であると判定する。シンボリック実行部１５１は、これらの判定結果を、シンボリック実行結果Ｅ２に登録する（項番“２”のレコードに相当）。
【００７７】
２番目のパスが終了すると、シンボリック実行部１５１は、２つ目の条件分岐まで戻ってＮＯ方向の実行パスを選択する。その後、この３番目のパス（パスＣ）は終了する。シンボリック実行部１５１は、３番目のパスのパス条件を、シンボル「性別」が「男性」でなくかつシンボル「性別」が「女性」でないと判定する。また、シンボリック実行部１５１は、３番目のパスのパス出力を、変数「結果」の値が「  」（空白）であると判定する。シンボリック実行部１５１は、これらの判定結果を、シンボリック実行結果Ｅ２に登録する（項番“３”のレコードに相当）。そして、未選択の実行パスが存在しないためシンボリック実行が終了する。
【００７８】
なお、シンボリック実行部１５１は、パスの分割点において、その時点のパス条件と各変数の値とを保存しておく。シンボリック実行部１５１は、１つのパスが終了して分割点までバックトラックしたとき、保存しておいたパス条件と各変数の値とを引き継いで、未選択の分岐方向に対応する他のパスの探索を続ける。
【００７９】
ここで、１番目のパスのパス条件は、「性別が男性である」かつ「性別が女性でない」ことである。これは、「性別が男性である」という条件に簡約化できる。２番目の実行パスのパス条件は、「性別が男性でない」かつ「性別が女性である」ことである。これは、「性別が女性である」という条件に簡約化できる。３番目のパスのパス条件は、「性別が男性でない」かつ「性別が女性でない」ことである。このように、入出力表生成部１５２は、シンボリック実行結果Ｅ２に対する簡約化などを行って整理することで、プログラムＥ１に関する入出力表Ｅ３を生成する。入出力表Ｅ３は、プログラムＥ１に関する入力に応じた条件と出力との対応関係を示す情報である。
【００８０】
なお、条件分岐文における充足可能性の判断やパス条件の簡約化には、既存の数式処理技術を利用することができる。例えば、シンボリック実行部１５１は、充足可能性の判断に、ＳＭＴ（Satisfiability Modulo Theories）ソルバやＳＡＴ（Satisfiability）ソルバなどを用いることができる。また、入出力表生成部１５２は、パス条件の簡約化に、クワイン・マクラスキー（ＱＭ：Quine-McCluskey）法などを用いることができる。ＱＭ法によれば、例えば、論理式Ａ，Ｂ，Ｃに対して、（Ａ∧Ｂ∧Ｃ）∨（Ａ∧Ｂ∧¬Ｃ）＝Ａ∧Ｂのように、論理式を簡約化することができる。あるいは、入出力表生成部１５２は、次のような手順によりパス条件を簡約化することもできる。
【００８１】
（手順１）パス条件の条件式を選言標準形（ＤＮＦ：Disjunctive Normal Form）に展開する（元々ＤＮＦであれば展開不要）。展開後の条件式は、連言節（ＤＮＦ項と称する）の選言である。すなわち、「条件式＝ＤＮＦ項（１）∨ＤＮＦ項（２）∨・・・」の形式である。具体的な例として、条件式を「（（Ｘ＞１）∧（Ｙ＜０））∨（（Ｘ＞１）∧（Ｙ＞１０））∨（（Ｘ＞１）∧（Ｙ  ＮＯＴ＜０）∧（Ｙ  ＮＯＴ＞１０））」とする。この場合、ＤＮＦ項は、（（Ｘ＞１）∧（Ｙ＜０））、（（Ｘ＞１）∧（Ｙ＞１０））、（（Ｘ＞１）∧（Ｙ  ＮＯＴ＜０）∧（Ｙ  ＮＯＴ＞１０））である。
【００８２】
（手順２）条件式から、ＮＯＴ（否定演算子）をもたない比較演算子だけの比較条件式を、原子比較条件式として抽出する。上記の条件式に対して抽出される原子比較条件式は、（Ｘ＞１）、（Ｙ＜０）、（Ｙ＞１０）である。
【００８３】
（手順３）ＤＮＦ項の選言の組み合わせで、原子比較条件式とその否定の連言を因数条件の候補として因数分解する。（Ｘ＞１）を因数条件として、上記の条件式を因数分解すると、条件式「（Ｘ＞１）∧（（Ｙ＜０）∨（Ｙ＞１０）∨（（Ｙ  ＮＯＴ＜０）∧（Ｙ  ＮＯＴ＞１０）））」となる。
【００８４】
（手順４）上記因数条件と連言される他の因数条件が恒真か判定し、恒真であれば、他の因数条件が恒真である旨を代入することで、当該ＤＮＦ項の選言を簡約化する。（手順３）の例に対して、因数条件（Ｘ＞１）と連言される他の因数条件は「（Ｙ＜０）∨（Ｙ＞１０）∨（（Ｙ  ＮＯＴ＜０）∧（Ｙ  ＮＯＴ＞１０））＝ＴＲＵＥ」であり、当該他の因数条件は恒真（Ｙの値に依らずに常に真）である。よって、（手順３）で得た条件式に、（手順４）の結果を代入することで、（手順１）で示した条件式は、（Ｘ＞１）のように簡約化される。
【００８５】
図９は、解析対象のプログラムの例を示す図である。プログラム１１１は、前述のプログラムＤ１４に対する修正後のプログラムの一例である。ここで、プログラム１１１に含まれる各行を、プログラム１１１の左側に便宜的に付した行番号により指し示す。また、図９では、図６のプログラムＤ１４に対する修正箇所を強調のために矩形で囲っている。
【００８６】
例えば、プログラム１１１の１２行目には、定数Ｃ２の定義が追加されている。また、プログラム１１１の２６行目〜３４行目には、定数Ｃ２を用いた変数“コード”に関する条件判定および条件判定に応じた処理が追加されている。
【００８７】
図１０は、シンボリック実行結果の例を示す図である。シンボリック実行結果１２１は、プログラム１１１のシンボリック実行の結果である。シンボリック実行結果１２１は、項番、パス出力およびパス条件の項目を含む。
【００８８】
項番の項目には、レコードの識別番号が登録される。パス出力の項目には、該当のパスでの出力が登録される。パス条件の項目には、該当のパスが実行されるときの条件が登録される。
【００８９】
例えば、シンボリック実行結果１２１には、項番が“１”、パス出力が“結果  ＝  １”、パス条件が“（（コード  ＝  １１）  ＡＮＤ  （２０１７０８０１  ＜  期間）  ＡＮＤ  （期間  ＜  ２０１７０８３１））”というレコードが登録される。このレコードは、“コード＝１１”、かつ、“２０１７０８０１＜期間”、かつ、“期間＜２０１７０８３１”の条件を満たす場合に、プログラム１１１の出力が“結果＝１”であることを示す。
【００９０】
シンボリック実行結果１２１には、プログラム１１１に含まれる条件分岐の分岐先の組み合わせに応じたパス毎に、パス出力とパス条件とが登録される。
図１１は、入出力表の例を示す図である。入出力表１２２は、項番、出力および条件の項目を含む。項番の項目には、レコードの識別番号が登録される。出力の項目には、シンボリック実行結果１２１におけるパス出力の値が登録される。ただし、入出力表１２２では、シンボリック実行結果１２１においてパス出力の値が同じであるレコードが複数の場合、当該複数のレコードに含まれる複数の条件が１つに集約される。条件の項目には、シンボリック実行結果１２１におけるパス出力毎のパス条件を乗法標準形（ＣＮＦ：Conjunctive Normal Form）に変形した結果が登録される。ＣＮＦでは、条件式を選言節の連言の形式で表す。入出力表生成部１５２は、シンボリック実行結果１２１のパス条件を同じ値であるパス出力毎にまとめて簡約化し、簡約化した結果をＣＮＦに変形することで、入出力表１２２における条件の内容を求める。ＣＮＦへの変形には、既存の方法（例えば、ドモルガンの法則、分配法則、および、Ｔｓｅｉｔｉｎ変換など）を用いることができる。
【００９１】
例えば、入出力表１２２には、項番が“１”、出力が“結果  ＝  １”、条件が“（（コード  ＝  １１）  ＯＲ  （コード  ＝  ２２））  ＡＮＤ  （（２０１７０８０１  ＜  期間）  ＡＮＤ  （期間  ＜  ２０１７０８３１））”というレコードが登録される。このレコードは、“コード”が“１１”または“２２”であり、かつ、“２０１７０８０１＜期間”、かつ、“期間＜２０１７０８３１”の条件を満たす場合に、プログラム１１１の出力が“結果＝１”であることを示す。
【００９２】
入出力表１２２には、シンボリック実行結果１２１における出力“結果  ＝  ２”および“結果  ＝  ３”に対応する各レコードも登録される。入出力表１２２の当該条件に含まれる“コード  ＝  １１”、“コード  ＝  ２２”、“２０１７０８０１  ＜  期間”および“期間  ＜  ２０１７０８３１”などを、条件文と言うことができる。
【００９３】
図１２は、業務条件候補抽出用の中間データの例を示す図である。中間データ１２２ａは、業務条件候補の抽出を行うための中間的なデータである。中間データ１２２ａは、入出力表１２２に基づいて、業務条件候補生成部１５３により生成され、解析情報記憶部１２０に格納される。中間データ１２２ａは、条件番号、候補条件、否定関係および正条件の項目を含む。
【００９４】
条件番号の項目には、業務条件候補の抽出元となる条件（候補条件と言う）の識別番号が登録される。候補条件の項目には、候補条件の内容が登録される。候補条件の内容は、入出力表１２２に基づいて、業務条件候補生成部１５３により所定の演算を用いて生成される。否定関係の項目には、該当のレコードの候補条件と否定関係にある他の候補条件の条件番号が登録される。否定関係にある他の候補条件が存在しない場合、否定関係の項目は設定なしとなる。ここで、設定なしをハイフン記号“−”で示す。正条件の項目には、否定関係にある他の候補条件がある場合に、正条件に該当するか否かを示す識別情報が登録される。該当する場合、正条件の項目には“該当”が登録される。該当しない場合（否定関係をもたない場合や正条件でない場合）、正条件の項目は設定なし（“−”）となる。ここで、正条件は、互いに否定関係をもつ２つの候補条件のうち、否定演算子の数が少ない方の候補条件である。否定関係にある他の候補条件がない場合、正条件の項目は常に設定なしとなる。
【００９５】
例えば、中間データ１２２ａには、条件番号が“条件１”、候補条件が“（（コード  ＝  １１）  ＯＲ  （コード  ＝  ２２））  ＡＮＤ  （２０１７０８０１  ＜  期間）  ＡＮＤ  （期間  ＜  ２０１７０８３１）”、否定関係が“−”、正条件が“−”というレコードが登録される。このレコードは、条件番号“条件１”の候補条件の内容を示しており、当該候補条件には否定関係にある他の候補条件がないことを示す。
【００９６】
中間データ１２２ａの例では、条件番号“条件２”、“条件３”、“条件６”の候補条件も同様に否定関係にある他の候補条件をもたない。
また、中間データ１２２ａには、条件番号が“条件４”、候補条件が“（（２０１７０８０１  ＜  期間）  ＡＮＤ  （期間＜  ２０１７０８３１））”、否定関係が“条件７”、正条件が“該当”というレコードが登録される。このレコードは、条件番号“条件４”の候補条件の内容を示す。また、このレコードは、条件番号“条件４”の候補条件には、否定関係にある条件番号“条件７”の他の候補条件があること、条件番号“条件４”および“条件７”の候補条件のうち、条件番号“条件４”の候補条件が正条件に該当することを示す。
【００９７】
中間データ１２２ａの例では、条件番号“条件５”および“条件８”の２つの候補条件も互いに否定関係にあり、このうち、条件番号“条件５”の候補条件が正条件である。
図１３は、業務条件候補表の例を示す図である。業務条件候補表１２３は、中間データ１２２ａに基づいて、業務条件候補生成部１５３により生成される。業務条件候補生成部１５３は、中間データ１２２ａの候補条件における条件の長い順（節の多い順）、かつ、否定演算子の少ない順に各レコードをソートする。このソートの結果が、業務条件候補表１２３である（業務条件候補表１２３における候補条件を、業務条件候補と称する）。業務条件候補表１２３は、項番、条件番号、業務条件候補、否定関係および正条件の項目を含む。
【００９８】
項番の項目には、レコードの識別番号が登録される。条件番号の項目には、候補条件の識別番号が登録される。業務条件候補の項目には、業務条件候補の内容が登録される。否定関係の項目には、該当のレコードの業務条件候補と否定関係にある他の業務条件候補の条件番号が登録される。否定関係の項目の設定ルールは、中間データ１２２ａと同様である。正条件の項目には、否定関係にある他の業務条件候補がある場合に、正条件に該当するか否かを示す識別情報が登録される。正条件の項目の設定ルールは、中間データ１２２ａと同様である。
【００９９】
業務条件候補生成部１５３は、前述のように、中間データ１２２ａのソート結果である。このため、各項目の具体的な設定内容は、中間データ１２２ａと同様である。ただし、項番の項目には、ソート後に、各レコードの上位から下位へ向かって昇順に番号が設定される。
【０１００】
図１４は、業務条件選定用の中間データの例を示す図である。中間データ１２３ａは、業務条件の選定を行うための中間的なデータである。中間データ１２３ａは、業務条件候補表１２３に基づいて、業務条件選定部１５４により生成され、解析情報記憶部１２０に格納される。中間データ１２３ａは、項番、正条件の入出力表項番、否定の入出力表項番および業務条件判定の項目を含む。
【０１０１】
項番の項目には、レコードの識別番号が登録される。正条件の入出力表項番の項目には、業務条件候補表１２３の該当の項番に対応する業務条件候補の、入出力表１２２における存在場所（入出力表１２２におけるレコードの項番、または、当該項番と条件における位置との組）を示す情報が登録される。正条件は、業務条件候補と同じ条件を示す。該当の業務条件候補が入出力表１２２のあるレコードの条件の一部に一致する場合、入出力表１２２の項番と、当該項番に対応する条件のうち該当の業務条件候補と一致する位置を示す情報とが、正条件の入出力表項番の項目に登録される。
【０１０２】
否定の入出力表項番の項目には、業務条件候補表１２３の該当の項番に対応する業務条件候補の否定（すなわち、業務条件候補の否定を示す否定条件）の入出力表１２２における存在場所を示す情報が登録される。該当の業務条件候補の否定が入出力表１２２のあるレコードの条件の一部に一致する場合、入出力表１２２の項番と、当該項番に対応する条件のうち該当の業務条件候補の否定と一致する位置を示す情報とが、否定の入出力表項番の項目に登録される。
【０１０３】
業務条件判定の項目には、業務条件として選定されたか否かを示す識別情報が登録される。業務条件として選定された場合、業務条件判定の項目には“ｔｒｕｅ”が設定される。業務条件として選定されなかった場合、業務条件判定の項目には“ｆａｌｓｅ”が設定される。ここで、互いに否定関係となっている２つの業務条件候補のうち、正条件である方が業務条件として選定される。このため、中間データ１２３ａの項番“６”や項番“８”に対応する業務条件候補は、業務条件の選定の対象外となる。したがって、項番“６”および項番“８”に対応する業務条件候補のレコードには、項番以外の情報が設定されていない（項番以外は設定なし“−”である）。
【０１０４】
なお、正条件の入出力表項番および否定の入出力項番の項目は、業務条件判定が“ｔｒｕｅ”の場合に設定値の登録が行われ、業務条件判定が“ｆａｌｓｅ”の場合に設定なしとなる。
【０１０５】
例えば、中間データ１２３ａには、項番が“１”、正条件の入出力表項番および否定の入出力表項番が設定なし“−”、業務条件判定が“ｆａｌｓｅ”というレコードが登録される。このレコードは、業務条件候補表１２３の項番“１”の業務条件候補が、業務条件として選定されなかったことを示す（項番“２”〜“４”のレコードも同様）。
【０１０６】
また、中間データ１２３ａには、項番が“５”、正条件の入出力表項番が“１の右端”、否定の入出力表項番が“２の右端”、業務条件判定が“ｔｒｕｅ”というレコードが登録される。このレコードは、業務条件候補表１２３の項番“５”の業務条件候補と同じ条件が、入出力表１２２の項番“１”の条件の右端の節にあることを示す。また、当該項番“５”の業務条件候補の否定を示す条件が入出力表１２２の項番“２”の条件の右端の節であることを示す。更に、当該項番“５”の業務条件候補は、業務条件として選定されたことを示す。
【０１０７】
更に、中間データ１２３ａには、項番が“７”、正条件の入出力表項番が“１の左端、２の左端”、否定の入出力表項番が“３”、業務条件判定が“ｔｒｕｅ”というレコードが登録される。このレコードは、業務条件候補表１２３の項番“７”の業務条件候補と同じ条件が、入出力表１２２の項番“１”の左端の節、および、入出力表１２２の項番“２”の左端の節にあることを示す。また、当該項番“７”の業務条件候補の否定を示す条件が入出力表１２２の項番“３”の条件であることを示す。更に、当該項番“７”の業務条件候補は、業務条件として選定されたことを示す。
【０１０８】
図１５は、業務条件選定結果の例を示す図である。業務条件選定結果１２４は、業務条件選定部１５４により中間データ１２３ａに基づいて生成される。業務条件選定結果１２４は、項番、業務条件、正条件の出現場所および否定条件の出現場所の項目を含む。
【０１０９】
項番の項目には、レコードの識別番号が登録される。業務条件の項目には、業務条件の内容が登録される。正条件の出現場所の項目には、業務条件が出現する入出力表１２２の位置（レコードの項番と、当該レコードの条件内の位置を示す情報）が登録される。否定条件の出現場所の項目には、業務条件の否定が出現する入出力表１２２の位置（レコードの項番と、当該レコードの条件内の位置を示す情報）が登録される。
【０１１０】
例えば、業務条件選定結果１２４には、項番が“１”、業務条件が“（（２０１７０８０１  ＜  期間）  ＡＮＤ  （期間  ＜  ２０１７０８３１））”、正条件の出現場所が“１）入出力表条件１の右端”、否定条件の出現場所が“１）入出力表条件２の右端”というレコードが登録される。このレコードは、項番“１”の業務条件を示しており、当該業務条件が入出力表１２２の項番“１”の条件の右端の節に相当することを示す。また、当該業務条件の否定を示す条件が入出力表１２２の項番“２”の条件の右端の節に相当することを示す。
【０１１１】
また、業務条件選定結果１２４には、項番が“２”、業務条件が“（（コード  ＝  １１）  ＯＲ  （コード  ＝  ２２）”、正条件の出現場所が“１）入出力表条件１の左端、２）入出力表条件２の左端”、否定条件の出現場所が“１）入出力表条件３”というレコードが登録される。このレコードは、項番“２”の業務条件を示しており、当該業務条件が入出力表１２２の項番“１”の条件の左端の節に出現することを示す。また、当該業務条件が入出力表１２２の項番“２”の条件の左端の節に出現することを示す。また、当該業務条件の否定を示す条件が入出力表１２２の項番“３”の条件に相当することを示す。
【０１１２】
図１６は、命名ルール表の例を示す図である。命名ルール表１３１は、項番および命名ルールの項目を含む。項番の項目には、レコードの識別番号が登録される。命名ルールの項目には、業務条件に対する業務用語の命名ルールが登録される。
【０１１３】
例えば、命名ルール表１３１には、項番が“１”、命名ルールが“業務条件が「（下限  ＜  変数）  ＡＮＤ  （変数  ＜  上限）」にマッチしたら、「変数内」と命名する。”というレコードが登録される。このレコードは、“変数”に関する業務条件の書式が項番“１”の命名ルールの書式に一致する場合に、当該業務条件を、「変数内」と定義することを示す。ここで、「変数内」の文字列のうち、“変数”の箇所は、実際の変数名が挿入される。
【０１１４】
また、命名ルール表１３１には、項番が“２”、命名ルールが“業務条件が「（変数  ＝  定数１）［ＯＲ  （変数  ＝  定数２）］＋」にマッチしたら、「有効変数」と命名する。”というレコードが登録される。このレコードは、“変数”に関する業務条件の書式が項番“２”の命名ルールの書式に一致する場合に、当該業務条件を、「有効変数」と定義することを示す。当該命名ルールの“［ＯＲ（変数  ＝  定数２）］＋”の部分は、２つ目以降の定数に関する条件がＯＲで結合され得ることを示す。ここで、「有効変数」の文字列のうち、“変数”の箇所は、実際の変数名が挿入される。
【０１１５】
図１７は、業務用語表の例を示す図である。業務用語表１４１は、業務条件選定結果１２４および命名ルール表１３１に基づいて、業務条件命名部１５５により生成される。業務用語表１４１は、項番、業務用語および条件の項目を含む。
【０１１６】
項番の項目には、レコードの識別番号が登録される。業務用語の項目には、命名された業務用語が登録される。条件の項目には、業務用語に対応する条件（業務条件）が登録される。
【０１１７】
例えば、業務用語表１４１には、項番が“１”、業務用語が“期間内”、条件が“（２０１７０８０１  ＜  期間）  ＡＮＤ  （期間  ＜  ２０１７０８３１）”というレコードが登録される。このレコードは、項番“１”の条件に対して、業務用語“期間内”が命名されたことを示す。業務用語“期間内”は、項番“１”の条件に対して、命名ルール表１３１の項番“１”の命名ルールが適用された結果である。
【０１１８】
また、業務用語表１４１には、項番が“２”、業務用語が“有効コード”、条件が“（コード  ＝  １１）  ＯＲ  （コード  ＝２２）”というレコードが登録される。このレコードは、項番“２”の条件に対して、業務用語“有効コード”が命名されたことを示す。業務用語“有効コード”は、項番“２”の条件に対して、命名ルール表１３１の項番“２”の命名ルールが適用された結果である。
【０１１９】
図１８は、業務ルール表の例を示す図である。図１８（Ａ）は、第１の形式の業務ルール表１４２を示す。図１８（Ｂ）は、第２の形式の業務ルール表１４３を示す。
業務ルール表１４２は、入出力表１２２の条件の内容を、業務用語表１４１で定義されている業務用語に置換したものである。具体的には、入出力表１２２の条件に含まれる各節を業務条件の正形式および否定形式で置換する。正形式の場合、“業務用語  ＝  Ｔｒｕｅ”という書式であり、否定形式の場合、“業務用語  ＝  Ｆａｌｓｅ”という書式である。
【０１２０】
業務ルール表１４３は、業務ルール表１４２の条件の内容を、決定表と呼ばれる形式に変換したものである。業務ルール表１４３では、業務ルール表１４２における条件のカラムが業務用語毎のカラムに分割され、業務ルール表１４２における“業務用語  ＝  Ｔｒｕｅ”の箇所が“Ｔ”に、“業務用語  ＝  Ｆａｌｓｅ”の箇所が“Ｆ”に、それぞれ置き換えられている。
【０１２１】
入出力表書換部１５６は、入出力表１２２に基づいて、業務ルール表１４２および業務ルール表１４３を生成し、解析結果記憶部１４０に格納する。
次に、解析サーバ１００による処理手順を説明する。
【０１２２】
図１９は、解析サーバの処理例を示すフローチャートである。解析部１５０は、ユーザによるプログラム１１１の解析開始の入力を受け付けると、下記の手順を実行する。
（Ｓ１）シンボリック実行部１５１は、プログラム記憶部１１０に記憶された解析対象のプログラム１１１をシンボリック実行することで、プログラム１１１の処理パスを抽出し、シンボリック実行結果１２１を生成する。シンボリック実行部１５１は、シンボリック実行結果１２１を解析情報記憶部１２０に格納する。
【０１２３】
（Ｓ２）入出力表生成部１５２は、解析情報記憶部１２０に記憶されたシンボリック実行結果１２１に基づいて、入出力表１２２を生成する。入出力表生成部１５２は、入出力表１２２を解析情報記憶部１２０に格納する。
【０１２４】
（Ｓ３）業務条件候補生成部１５３は、解析情報記憶部１２０に記憶された入出力表１２２に基づいて、中間データ１２２ａを生成する。業務条件候補生成部１５３は、中間データ１２２ａを解析情報記憶部１２０に格納する。業務条件候補生成部１５３は、解析情報記憶部１２０に記憶された中間データ１２２ａに基づいて業務条件候補表１２３を生成する。業務条件候補生成部１５３は、業務条件候補表１２３を解析情報記憶部１２０に格納する。
【０１２５】
（Ｓ４）業務条件選定部１５４は、解析情報記憶部１２０に記憶された業務条件候補表１２３に基づいて、中間データ１２３ａを生成する。業務条件選定部１５４は、中間データ１２３ａを解析情報記憶部１２０に格納する。業務条件選定部１５４は、解析情報記憶部１２０に記憶された入出力表１２２と中間データ１２３ａとに基づいて、業務条件選定結果１２４を生成する。業務条件選定部１５４は、業務条件選定結果１２４を解析情報記憶部１２０に格納する。
【０１２６】
（Ｓ５）業務条件命名部１５５は、解析情報記憶部１２０に記憶された業務条件選定結果１２４と、命名ルール記憶部１３０に記憶された命名ルール表１３１とに基づいて、業務用語表１４１を生成する。業務条件命名部１５５は、業務用語表１４１を解析結果記憶部１４０に格納する。
【０１２７】
（Ｓ６）入出力表書換部１５６は、解析情報記憶部１２０に記憶された入出力表１２２と解析結果記憶部１４０に記憶された業務用語表１４１とに基づいて、業務ルール表１４２，１４３を生成する。入出力表書換部１５６は、業務ルール表１４２，１４３を解析結果記憶部１４０に格納する。そして、解析サーバ１００の処理が終了する。
【０１２８】
次に、ステップＳ１〜Ｓ６それぞれの手順を説明する。
図２０は、シンボリック実行の処理例を示すフローチャートである。シンボリック実行の処理は、図１９のステップＳ１で実行される。
【０１２９】
（Ｓ１０）シンボリック実行部１５１は、プログラム記憶部１１０に記憶された解析対象のプログラム１１１を取得する。
（Ｓ１１）シンボリック実行部１５１は、プログラム１１１のシンボリック実行を行う。シンボリック実行部１５１は、図８で例示したように、プログラム１１１の入力変数にシンボル値を設定して、プログラム１１１の実行可能な処理パスを抽出することで、プログラム１１１におけるパス出力とパス条件との関係を取得する。
【０１３０】
（Ｓ１２）シンボリック実行部１５１は、各処理パスの終点において、該当の処理パスのパス条件とパス出力とを、シンボリック実行結果１２１に記録する。シンボリック実行部１５１は、シンボリック実行結果１２１を解析情報記憶部１２０に格納する。そして、シンボリック実行が終了する。
【０１３１】
図２１は、入出力表生成の処理例を示すフローチャートである。入出力表生成の処理は、図１９のステップＳ２で実行される。
（Ｓ２０）入出力表生成部１５２は、シンボリック実行結果１２１からＮ（Ｎはシンボリック実行結果１２１の全レコード数）個の処理パスのパス出力とパス条件との組（Ｏｕｔｎ，Ｃｎｄｎ）（ｎ＝１，・・・，Ｎ）を取得する。
【０１３２】
（Ｓ２１）入出力表生成部１５２は、ｎに１を代入する（ｎ＝１）。
（Ｓ２２）入出力表生成部１５２は、ｎがＮ以下であるか否か（ｎ≦Ｎであるか否か）を判定する。ｎがＮ以下である場合、ステップＳ２３に処理が進む。ｎがＮよりも大きい場合、ステップＳ２５に処理が進む。
【０１３３】
（Ｓ２３）入出力表生成部１５２は、（Ｏｕｔｎ，Ｃｎｄｎ）を取り出し、Ｏｕｔｎの値毎にＣｎｄｎをＯＲ（論理和）で結合する。
（Ｓ２４）入出力表生成部１５２は、ｎに１を加算する（ｎ＝ｎ＋１）。そして、ステップＳ２２に処理が進む。
【０１３４】
（Ｓ２５）入出力表生成部１５２は、出力値毎の条件を簡約化する。図８で例示したように、入出力表生成部１５２は、既存の技術を用いて、条件の簡約化を行える。
（Ｓ２６）入出力表生成部１５２は、ステップＳ２５による簡約化後の出力値毎の条件をＣＮＦに変形することで、入出力表１２２を生成する。ＣＮＦへの変形には既存の技術を利用することができる。例えば、ＣＮＦへの変形には、ドモルガンの法則、分配法則、および、Ｔｓｅｉｔｉｎ変換などを利用する方法が知られている。
【０１３５】
（Ｓ２７）入出力表生成部１５２は、生成した入出力表１２２を出力する。入出力表生成部１５２は、入出力表１２２を解析情報記憶部１２０に格納する。そして、入出力表生成が終了する。
【０１３６】
ここで、図１０で例示したシンボリック実行結果１２１に対するステップＳ２３の結果を具体的に説明する。シンボリック実行結果１２１に対してステップＳ２３が繰り返し実行されることで、パス出力“結果＝１”に対応する２つのパス条件がＯＲで結合される。より具体的には、入出力表生成部１５２は、“結果＝１”に対して“（（２０１７０８０１  ＜  期間）  ＡＮＤ  （コード  ＝  １１）  ＡＮＤ  （期間  ＜  ２０１７０８３１））  ＯＲ  （（２０１７０８０１  ＜  期間）  ＡＮＤ  （コード  ＝  ２２）  ＡＮＤ  （期間  ＜  ２０１７０８３１））”を得る。
【０１３７】
同様に、パス出力“結果＝２”に対応する４つのパス条件がＯＲで結合される。より具体的には、入出力表生成部１５２は、“結果＝２”に対して“（（２０１７０８０１  ＮＯＴ  ＜  期間）  ＡＮＤ  （コード  ＝  １１））  ＯＲ  （（２０１７０８０１  ＮＯＴ  ＜  期間）  ＡＮＤ  （コード  ＝  ２２））  ＯＲ  （（コード  ＝  １１）  ＡＮＤ  （期間  ＮＯＴ  ＜  ２０１７０８３１））  ＯＲ  （（コード  ＝  ２２）  ＡＮＤ  （期間  ＮＯＴ  ＜  ２０１７０８３１））”を得る。
【０１３８】
同様に、パス出力“結果＝３”に対応する１つのパス条件がＯＲで結合される。より具体的には、入出力表生成部１５２は、“結果＝３”に対して“（コード  ＮＯＴ  ＝  １１）  ＡＮＤ  （コード  ＮＯＴ  ＝  ２２）”を得る。
【０１３９】
この例の場合、出力値毎のパス条件のＯＲ結合結果は、何れも既に簡単であるため、ステップＳ２５において簡約化を施しても元の条件と変わらない。
上記のように、入出力表生成部１５２は、プログラム１１１のシンボリック実行の結果に基づいて、入出力表１２２を作成する。シンボリック実行の結果は、プログラム１１１による複数の出力（パス出力）それぞれについて、入力変数に関する複数の条件（パス条件）を含む。シンボリック実行結果１２１の例では、パス出力“結果  ＝  １”に対して、２つのパス条件が存在し、パス出力“結果  ＝  ２”に対して、４つのパス条件が存在する。入出力表生成部１５２は、１つの出力に対する複数の条件を１つの分岐条件（入出力表１２２における条件）に変換する処理を、出力毎に実行することで、入出力表１２２を作成する。入出力表１２２の例では、“結果  ＝  １”に対する２つのパス条件が１つの条件（分岐条件）に変換されている。同様に、“結果  ＝  ２”に対する４つのパス条件が１つの条件（分岐条件）に変換されている。“結果  ＝  ３”については、１つのパス条件しかなかったので、そのまま入出力表１２２に登録されている。
【０１４０】
図２２は、業務条件候補生成の処理例を示すフローチャートである。業務条件候補生成の処理は、図１９のステップＳ３で実行される。
（Ｓ３０）業務条件候補生成部１５３は、入出力表１２２から出力と条件との組（Ｏｕｔｎ，Ｃｎｄｎ）（ｎ＝１，・・・，Ｎ）を取得する（Ｎは入出力表１２２の全レコード数）。
【０１４１】
（Ｓ３１）業務条件候補生成部１５３は、ｎに１を代入する（ｎ＝１）。
（Ｓ３２）業務条件候補生成部１５３は、ｎがＮ以下であるか否か（ｎ≦Ｎであるか否か）を判定する。ｎがＮ以下である場合、ステップＳ３３に処理が進む。ｎがＮよりも大きい場合、ステップＳ４１に処理が進む。
【０１４２】
（Ｓ３３）業務条件候補生成部１５３は、入出力表１２２におけるＣＮＦで表された条件の選言節の組み合わせを連言した条件（候補条件）を生成する。入出力表１２２に対する具体例を後述する。
【０１４３】
（Ｓ３４）業務条件候補生成部１５３は、ｎに対して生成した未処理の候補条件を１つ選択する。
（Ｓ３５）業務条件候補生成部１５３は、業務条件候補リスト（すなわち、中間データ１２２ａ）に、ステップＳ３４で選択した候補条件が存在しないか否かを判定する。存在しない場合、ステップＳ３６に処理が進む。存在する場合、ステップＳ３９に処理が進む。
【０１４４】
（Ｓ３６）業務条件候補生成部１５３は、業務条件候補リスト（中間データ１２２ａ）に、ステップＳ３４で選択した候補条件を追加する。
（Ｓ３７）業務条件候補生成部１５３は、ステップＳ３６で追加した候補条件が、既存の候補条件の否定であるか否かを判定する。追加した候補条件が、既存の候補条件の否定である場合、ステップＳ３８に処理が進む。追加した候補条件が、既存の候補条件の否定でない場合、ステップＳ３９に処理が進む。
【０１４５】
（Ｓ３８）業務条件候補生成部１５３は、ステップＳ３６で追加した候補条件と当該候補条件と否定関係にある他の候補条件に関して、否定関係を記録する。すなわち、業務条件候補生成部１５３は、業務条件候補リスト（中間データ１２２ａ）において、今回追加した候補条件に対して他の候補条件の識別情報を設定し、また、他の候補条件に対して今回追加した候補条件の識別情報を設定する。
【０１４６】
（Ｓ３９）業務条件候補生成部１５３は、ｎに対してステップＳ３３で生成した候補条件を全て処理済であるか否かを判定する。全て処理済である場合、ステップＳ４０に処理が進む。全て処理済でない場合、ステップＳ３４に処理が進む。
【０１４７】
（Ｓ４０）業務条件候補生成部１５３は、ｎに１を加算する（ｎ＝ｎ＋１）。そして、ステップＳ３２に処理が進む。
（Ｓ４１）業務条件候補生成部１５３は、業務条件候補リスト（中間データ１２２ａ）を参照して、否定関係のある２つの候補条件のうち、否定演算子の少ない方に正条件を示す識別子を設定する。
【０１４８】
（Ｓ４２）業務条件候補生成部１５３は、業務条件候補リスト（中間データ１２２ａ）における候補条件をソートして業務条件候補表１２３とし、業務条件候補表１２３を出力する。業務条件候補生成部１５３は、業務条件候補表１２３を解析情報記憶部１２０に格納する。業務条件候補生成部１５３は、候補条件のソートを所定の規則によって行う。例えば、業務条件候補生成部１５３は、候補条件に含まれる条件の長い順、および、否定条件の少ない順にソートする。そして、業務条件候補生成が終了する。
【０１４９】
ここで、図１１で例示した入出力表１２２に対するステップＳ３３〜Ｓ３９の結果を具体的に説明する。入出力表１２２に対してステップＳ３３が実行されることで、出力“結果＝１”に対して次の候補条件が生成される。出力“結果＝１”に関するＣＮＦの選言節の集合は、｛（（コード  ＝  １１）  ＯＲ  （コード  ＝  ２２）），（２０１７０８０１  ＜  期間），（期間  ＜  ２０１７０８３１）｝である。これらＣＮＦの選言節の組み合わせ（連言による組み合わせ）で生成される候補条件は、次の５つである。
【０１５０】
（条件１）（（コード  ＝  １１）  ＯＲ  （コード  ＝  ２２））  ＡＮＤ  （２０１７０８０１  ＜  期間）  ＡＮＤ  （期間  ＜  ２０１７０８３１）
（条件２）（（コード  ＝  １１）  ＯＲ  （コード  ＝  ２２））  ＡＮＤ  （２０１７０８０１  ＜  期間）
（条件３）（（コード  ＝  １１）  ＯＲ  （コード  ＝  ２２））  ＡＮＤ  （期間  ＜  ２０１７０８３１）
（条件４）（（２０１７０８０１  ＜  期間）  ＡＮＤ  （期間  ＜  ２０１７０８３１））
（条件５）（（コード  ＝  １１）  ＯＲ  （コード  ＝  ２２））
ステップＳ３６で上記の条件１〜５は、既存の条件ではないので、中間データ１２２ａに追加される。また、ステップＳ３８で条件１〜５は、既存の否定ではないので、出力“結果＝１”の条件の処理は終了する。
【０１５１】
また、入出力表１２２によれば、出力“結果＝２”に関するＣＮＦの選言節の集合は、｛（（コード  ＝  １１）  ＯＲ  （コード  ＝  ２２））、（（２０１７０８０１  ＮＯＴ  ＜  期間）  ＯＲ  （期間  ＮＯＴ  ＜  ２０１７０８３１））｝である。これらＣＮＦの選言節の組み合わせで生成される候補条件は、次の３つである。
【０１５２】
（条件６）（（コード  ＝  １１）  ＯＲ  （コード  ＝  ２２））  ＡＮＤ  （２０１７０８０１  ＮＯＴ  ＜  期間）  ＯＲ  （期間  ＮＯＴ  ＜  ２０１７０８３１）
（条件７）（（２０１７０８０１  ＮＯＴ  ＜  期間）  ＯＲ  （期間  ＮＯＴ  ＜  ２０１７０８３１））
（条件Ｘ）（（コード  ＝  １１）  ＯＲ  （コード  ＝  ２２））
ステップＳ３６で条件６，７は既存の条件ではないので、中間データ１２２ａに追加される。しかし、条件Ｘは、既存（条件５に一致）なので、中間データ１２２ａに追加されない。また、ステップＳ３８で、条件７は条件４の否定なので、互いに否定関係にあることを示す識別情報（相手の条件の識別情報）を、中間データ１２２ａに設定する。そして、出力“結果＝２”の条件の処理は終了する。
【０１５３】
更に、入出力表１２２によれば、出力“結果＝３”に関する条件は、｛（（コード  ＮＯＴ  ＝  １１）  ＡＮＤ  （コード  ＮＯＴ  ＝  ２２））｝の１つのみである。したがって、ステップＳ３３で生成される候補条件は、次の１つである。
【０１５４】
（条件８）（（コード  ＮＯＴ  ＝  １１）  ＡＮＤ  （コード  ＮＯＴ  ＝  ２２））
ステップＳ３６で条件８は既存の条件ではないので、中間データ１２２ａに追加される。また、ステップＳ３８で、条件８は条件５の否定なので、互いに否定関係にあることを示す識別情報（相手の条件の識別情報）を、中間データ１２２ａに設定する。そして、出力“結果＝３”の条件の処理は終了する。
【０１５５】
なお、以上により入出力表１２２における全ての出力の条件を処理したので、業務条件候補生成部１５３は、ステップＳ４１を実行する。そして、業務条件候補生成部１５３は、条件４と条件７とを比較して条件４に正条件を示す識別子を設定し、条件５と条件８とを比較して条件５に正条件を示す識別子を設定する。そして、業務条件候補生成部１５３は、ステップＳ４２により中間データ１２２ａをソートすることで、業務条件候補表１２３を得る。
【０１５６】
図２３は、業務条件選定の処理例を示すフローチャートである。業務条件選定の処理は、図１９のステップＳ４で実行される。
（Ｓ５０）業務条件選定部１５４は、入出力表１２２の出力と条件との組（Ｏｕｔｍ，Ｃｎｄｍ）（ｍ＝１，・・・，Ｍ）を取得する（Ｍは入出力表１２２の全レコード数）。ｍは、入出力表１２２の項番に相当する。
【０１５７】
（Ｓ５１）業務条件選定部１５４は、業務条件候補表１２３の条件ＢｚＣｎｄｎ、ｎ＝１，・・・，Ｎ（Ｎは業務条件候補表１２３の全レコード数）を取得する。ｎは、業務条件候補表１２３の項番に相当する。業務条件選定部１５４は、業務条件候補表１２３に基づいて、中間データ１２３ａを生成する（この段階では、業務条件候補表１２３の各項番のレコードに対応する項番の値のみが設定されたレコードが中間データ１２３ａに登録される）。
【０１５８】
（Ｓ５２）業務条件選定部１５４は、ｎに１を代入する（ｎ＝１）。
（Ｓ５３）業務条件選定部１５４は、ｎがＮ以下であるか否か（ｎ≦Ｎであるか否か）を判定する。ｎがＮ以下である場合、ステップＳ５４に処理が進む。ｎがＮよりも大きい場合、ステップＳ６５に処理が進む。
【０１５９】
（Ｓ５４）業務条件選定部１５４は、ＢｚＣｎｄｎが処理済でないか否かを判定する。処理済でない場合、ステップＳ５５に処理が進む。処理済の場合、ステップＳ５８に処理が進む。
【０１６０】
（Ｓ５５）業務条件選定部１５４は、業務条件候補表１２３に基づいて、ＢｚＣｎｄｎに否定関係があるか否かを判定する。否定関係がある場合、ステップＳ５６に処理が進む。否定関係がない場合、ステップＳ５８に処理が進む。否定関係がない場合、業務条件選定部１５４は、中間データ１２３ａの項番ｎのレコードの業務条件判定の項目に“ｆａｌｓｅ”を設定する（当該レコードは処理済となる）。
【０１６１】
（Ｓ５６）業務条件選定部１５４は、業務条件候補表１２３に基づいて、ＢｚＣｎｄｎが正条件であるか否かを判定する。正条件である場合、ステップＳ５９に処理が進む。正条件でない場合、ステップＳ５７に処理が進む。
【０１６２】
（Ｓ５７）業務条件選定部１５４は、ＢｚＣｎｄｎを処理済に設定する。そして、ステップＳ５８に処理が進む。
（Ｓ５８）業務条件選定部１５４は、ｎに１を加算する（ｎ＝ｎ＋１）。そして、ステップＳ５３に処理が進む。
【０１６３】
（Ｓ５９）業務条件選定部１５４は、ＢｚＣｎｄｎを業務条件に選定する。業務条件選定部１５４は、中間データ１２３ａの項番ｎのレコードの業務条件判定の項目に“ｔｒｕｅ”を設定する（当該レコードは処理済となる）。
【０１６４】
（Ｓ６０）業務条件選定部１５４は、ｍに１を代入する（ｍ＝１）。
（Ｓ６１）業務条件選定部１５４は、ｍがＭ以下であるか否か（ｍ≦Ｍであるか否か）を判定する。ｍがＭ以下である場合、ステップＳ６２に処理が進む。ｍがＭよりも大きい場合、ステップＳ５８に処理が進む。
【０１６５】
（Ｓ６２）業務条件選定部１５４は、ＢｚＣｎｄｎまたはＢｚＣｎｄｎの否定がＣｎｄｍに存在するか否かを判定する。ＢｚＣｎｄｎまたはＢｚＣｎｄｎの否定がＣｎｄｍに存在する場合、ステップＳ６３に処理が進む。ＢｚＣｎｄｎまたはＢｚＣｎｄｎの否定がＣｎｄｍに存在しない場合、ステップＳ６４に処理が進む。
【０１６６】
（Ｓ６３）業務条件選定部１５４は、ＢｚＣｎｄｎまたはＢｚＣｎｄｎの否定のＣｎｄｍにおける出現場所を記録する。具体的には、業務条件選定部１５４は、ＢｚＣｎｄｎのＣｎｄｍにおける出現場所（入出力表１２２におけるレコードの項番ｍやＣｎｄｍのうちＢｚＣｎｄｎに一致する箇所を示す情報）を中間データ１２３ａの項番ｎのレコードに登録する。あるいは、業務条件選定部１５４は、ＢｚＣｎｄｎの否定のＣｎｄｍにおける出現場所（入出力表１２２におけるレコードの項番ｍやＣｎｄｍのうちＢｚＣｎｄｎに一致する箇所を示す情報）を中間データ１２３ａの項番ｎのレコードに登録する。
【０１６７】
（Ｓ６４）業務条件選定部１５４は、ｍに１を加算する（ｍ＝ｍ＋１）。そして、ステップＳ６１に処理が進む。
（Ｓ６５）業務条件選定部１５４は、中間データ１２３ａに基づいて、業務条件選定結果１２４を生成し、出力する。業務条件選定部１５４は、業務条件選定結果１２４を解析情報記憶部１２０に格納する。そして、業務条件選定が終了する。
【０１６８】
ここで、ステップＳ６２の判定およびステップＳ６３における「出現場所の記録」では、業務条件選定部１５４は、それぞれの条件を木構造で表現し、業務条件ＢｚＣｎｄｎの木構造がＣｎｄｍの木構造の一部にあるかを調査する。また、否定条件の存在の確認では、業務条件選定部１５４は、ＢｚＣｎｄｎの否定条件をドモルガンの法則に基づいて生成し、当該否定条件を木構造で表現することで、上記と同様に出現場所を判定する。
【０１６９】
図２４は、業務用語表出力の処理例を示すフローチャートである。業務用語表出力の処理は、図１９のステップＳ５で実行される。
（Ｓ７０）業務条件命名部１５５は、業務条件ＢｚＣｎｄｎ、ｎ＝１，・・・，Ｎを業務条件選定結果１２４から取得する。ここで、Ｎは業務条件選定結果１２４の全レコード数である。
【０１７０】
（Ｓ７１）業務条件命名部１５５は、命名ルール記憶部１３０から命名ルール表１３１を取得する。
（Ｓ７２）業務条件命名部１５５は、ｎに１を代入する（ｎ＝１）。
【０１７１】
（Ｓ７３）業務条件命名部１５５は、ｎがＮ以下であるか否か（ｎ≦Ｎであるか否か）を判定する。ｎがＮ以下である場合、ステップＳ７４に処理が進む。ｎがＮよりも大きい場合、ステップＳ７７に処理が進む。
【０１７２】
（Ｓ７４）業務条件命名部１５５は、ＢｚＣｎｄｎの書式が、命名ルール表１３１における何れかの命名ルールで示される書式に合致するか否かを判定する。ＢｚＣｎｄｎの書式が命名ルールで示される何れかの書式に合致する場合、ステップＳ７５に処理が進む。ＢｚＣｎｄｎの書式が命名ルールで示される何れの書式にも合致しない場合、ステップＳ７６に処理が進む。
【０１７３】
（Ｓ７５）業務条件命名部１５５は、命名ルールに従って、業務条件を命名する。業務条件と当該業務条件に対して命名した業務用語とを業務用語表１４１に登録する。
（Ｓ７６）業務条件命名部１５５は、ｎに１を加算する（ｎ＝ｎ＋１）。そして、ステップＳ７３に処理が進む。
【０１７４】
（Ｓ７７）業務条件命名部１５５は、ディスプレイ２１に業務用語表１４１の内容を表示させる。
（Ｓ７８）業務条件命名部１５５は、業務用語を編集するか否かを判定する。業務用語を編集する場合、ステップＳ７９に処理が進む。業務用語を編集しない場合、ステップＳ８０に処理が進む。例えば、ユーザは、ディスプレイ２１に表示された業務用語表１４１の業務用語と業務条件とを参照して、業務条件命名部１５５により命名された業務用語を編集するか否かを決定することができる。業務条件命名部１５５は、ユーザによる業務用語の編集指示の入力を受け付けると、業務用語を編集すると判定する。一方、業務条件命名部１５５は、ユーザによる業務用語の編集を行わない旨の入力を受け付けると、業務用語を編集しないと判定する。
【０１７５】
（Ｓ７９）業務条件命名部１５５は、ユーザによる業務用語の編集を受け付け、編集内容に応じて、業務用語表１４１に登録された業務用語を更新する。
（Ｓ８０）業務条件命名部１５５は、業務用語表１４１を出力する。業務条件命名部１５５は、業務用語表１４１を解析結果記憶部１４０に格納する。そして、業務用語表出力が終了する。
【０１７６】
ここで、図２１で示されるように、入出力表１２２における条件（分岐条件）は、ＣＮＦ（乗法標準形）で表される。入出力表１２２における各条件は、図２２の説明で述べたように、プログラム１１１の条件文または当該条件文の否定に対応する複数の選言節を含む。業務用語の定義では、まず、業務条件候補生成部１５３により、業務条件候補表１２３が生成される。すなわち、業務条件候補生成部１５３は、入出力表１２２の条件（分岐条件）に含まれる複数の選言節それぞれを組み合わせることで、条件文の組み合わせの複数の候補（業務条件候補）を生成する。そして、業務条件選定部１５４は、図２３の手順により、当該複数の業務条件候補の中から業務用語の定義対象（すなわち、業務条件）を選択する。
【０１７７】
具体的には、業務条件選定部１５４は、複数の業務条件候補のうちの第１の候補に対する否定の条件が当該複数の業務条件候補に含まれるか否かの判定に応じて、第１の候補に対応する条件文の組み合わせを業務用語の定義対象とするか否かを決定する。
【０１７８】
更に、業務条件選定部１５４は、第１の候補に対する否定を示す第２の候補が複数の候補に含まれる場合に、第１の候補が正条件であるか否かの判定に応じて、第１の候補に対応する条件文の組み合わせを業務用語の定義対象とするか否かを決定する。
【０１７９】
第１の候補に対する否定条件が業務条件候補表１２３に存在するか否かを判定する理由は、プログラム１１１のパスに影響を与える複合条件を適切に抽出するためである。
業務条件命名部１５５は、こうして決定された業務用語の定義対象（すなわち、業務条件）に対して、図２４の手順により、業務用語の命名を行う。これにより、業務条件を適切に選択して、業務条件に対する業務用語の命名を行える。
【０１８０】
図２５は、業務ルール表出力の処理例を示すフローチャートである。業務ルール表出力の処理は、図１９のステップＳ６で実行される。
（Ｓ９０）入出力表書換部１５６は、業務条件ＢｚＣｎｄｎ、ｎ＝１，・・・，Ｎを業務条件選定結果１２４から取得する。ここで、Ｎは業務条件選定結果１２４の全レコード数である。
【０１８１】
（Ｓ９１）入出力表書換部１５６は、ｎに１を代入する（ｎ＝１）。
（Ｓ９２）入出力表書換部１５６は、ｎがＮ以下であるか否か（ｎ≦Ｎであるか否か）を判定する。ｎがＮ以下である場合、ステップＳ９３に処理が進む。ｎがＮよりも大きい場合、ステップＳ９６に処理が進む。
【０１８２】
（Ｓ９３）入出力表書換部１５６は、入出力表１２２におけるＢｚＣｎｄｎの正条件の出現場所を業務用語表１４１に基づいて、業務用語を用いた記述に置換する。
（Ｓ９４）入出力表書換部１５６は、入出力表１２２におけるＢｚＣｎｄｎの否定条件の出現場所を業務用語表１４１に基づいて、業務用語を用いた記述に置換する。
【０１８３】
（Ｓ９５）入出力表書換部１５６は、ｎに１を加算する（ｎ＝ｎ＋１）。そして、ステップＳ９２に処理が進む。
（Ｓ９６）入出力表書換部１５６は、書換後（置換後）の入出力表の形式を変更するか否かを判定する。形式を変更する場合、ステップＳ９７に処理が進む。形式を変更しない場合、ステップＳ９８に処理が進む。
【０１８４】
（Ｓ９７）入出力表書換部１５６は、書換後の入出力表の形式を決定表の形式に変更する。
（Ｓ９８）入出力表書換部１５６は、書換後の入出力表を業務ルール表１４２（ステップＳ９７で決定表に変更した場合は業務ルール表１４３）として出力する。入出力表書換部１５６は、業務ルール表１４２（または、業務ルール表１４３）を解析結果記憶部１４０に格納する。そして、業務ルール表出力が終了する。
【０１８５】
このように、入出力表書換部１５６は、入出力表１２２における条件（分岐条件）の中での条件文の組み合わせ（業務条件に相当）の出現場所を検索する。そして、入出力表書換部１５６は、入出力表１２２の当該出現場所の記述を当該条件文の組み合わせ（業務条件）に対応する業務用語に置換することで、業務ルール表１４２，１４３を生成する。
【０１８６】
図２６は、解析サーバの入出力の例を示す図である。第２の実施の形態で説明したように、解析サーバ１００は、プログラム１１１の入力に対して、プログラム１１１の解析を行い、業務用語表１４１および業務ルール表１４３（または、業務ルール表１４２）を出力する。
【０１８７】
ここで、プログラム１１１は、図９で例示したように、図６のプログラムＤ１４に対して、定数Ｃ２の定義や、定数Ｃ２を用いた処理の記述が含まれている。こうしたプログラムＤ１４の部分改修が行われると、プログラムＤ１４に対応する業務ルールＤ１１および業務用語Ｄ１２の内容と、改修後のプログラム１１１の内容とが整合しなくなる。例えば、業務用語Ｄ１２には、定数Ｃ２（＝２２）に関連する有効コードの定義がないし、そのため、業務ルールＤ１１の有効コードの条件も、定数Ｃ２（＝２２）が考慮されていない。すなわち、既存の業務ルールＤ１１および業務用語Ｄ１２と、改修後のプログラム１１１との間に齟齬がある。
【０１８８】
そこで、解析サーバ１００は、プログラム１１１を入力として、プログラム１１１に対応する業務用語表１４１および業務ルール表１４３（または、業務ルール表１４２）を出力する。業務用語表１４１の例では、部分改修により追加された定数Ｃ２（＝２２）に関連づけて有効コードが定義されており、そのため、業務ルール表１４３の有効コードに対する条件も、定数Ｃ２（＝２２）が考慮された内容となる。したがって、業務用語表１４１および業務ルール表１４３と、プログラム１１１の内容とは整合しており、齟齬がない。このように、解析サーバ１００は、修正後のプログラム１１１に対し、業務用語表１４１および業務ルール表１４３（または、業務ルール表１４２）を適切に作成できる。
【０１８９】
図２７は、解析対象のプログラムの他の例を示す図である。プログラム１１２は、図６のプログラムＤ１４が部分改修されて得られた部分改修後のプログラムである。図２７では、次の２回の機能追加があった場合を例示する。
【０１９０】
（追加１）有効コードに“２２”を追加して、有効コードを“１１”または“２２”とする。
（追加２）有効コードに“３３”を追加して、有効コードを“１１”または“２２”または“３３”とする。
【０１９１】
これらの機能追加に対応するため、主に、次の２回の部分改修がプログラムＤ１４に対して行われたとする。
（改修１）改修後のプログラム１１２の１８行目のＩＦ文条件において、元々は“コード＝Ｃ１”であった条件に、“コード＝Ｃ２”を追加して、“（コード＝Ｃ１）ＯＲ（コード＝Ｃ２）”とする。ここで、Ｃ２は、定数であり、プログラム１１２の１２行目に定義が追加される。
【０１９２】
（改修２）改修後のプログラム１１２の２４行目〜２９行目において、ＥＬＳＥ  ＩＦブロックを追加する。ここで、Ｃ３は、定数であり、プログラム１１２の１３行目に定義が追加される。
【０１９３】
また、プログラム１１２の例では、図６のプログラムＤ１４の１７，１８行目の記述が、プログラム１１２の１９行目の記述にまとめられる改修も行われている。
図２７で例示されるように、プログラムＤ１４に対して複数回の改修が行われることもあり、改修の方法も唯一ではない。例えば、改修２は、ＥＬＳＥ  ＩＦブロックを追加する代わりに、改修１のようにＩＦ文の条件を改修する方法でも対応可能である。しかしながら、長年の保守の間に、当該プログラムＤ１４の担当プログラマが交代している場合などもあり、様々な記述方法で改修が行われ得る。
【０１９４】
図２８は、解析サーバの入出力の他の例を示す図である。解析サーバ１００は、プログラム１１２の入力に対して、プログラム１１２の解析を行い、業務用語表１４１ａおよび業務ルール表１４３ａを出力する。ただし、解析サーバ１００は、業務ルール表１４３ａを決定表形式に変更した業務ルール表を出力することもできる。
【０１９５】
業務用語表１４１ａによれば、部分改修により追加された定数Ｃ２（＝２２）および定数Ｃ３（＝３３）に関連づけて有効コードが定義されている。そのため、業務ルール表１４３ａの有効コードに対する条件も、定数Ｃ２（＝２２）および定数Ｃ３（＝３３）が考慮された内容となる。したがって、業務用語表１４１ａおよび業務ルール表１４３ａと、プログラム１１２の内容とは整合しており、齟齬がない。このように、解析サーバ１００は、修正後のプログラム１１２に対しても、業務用語表１４１ａおよび業務ルール表１４３ａ（または、業務ルール表１４３ａを決定表形式に変更した業務ルール表）を適切に作成できる。
【０１９６】
ところで、情報処理システムの保守や再構築の活動では、情報処理システムの現状を把握し、理解するために、当該情報処理システムが扱う業務の知識と当該情報処理システムの実装方法に関する情報（業務用語表や業務ルール表など）が利用される。このような情報は、本来、文書に記述されているものであるが、上記のように当初作成された文書が適切に更新されていないという不備があると、システム開発者は文書を信頼して参照することができない。また、当該情報処理システムの当初の開発担当者などの有識者は、長年の運用期間の間に散逸して不在となる事態も発生するため、有識者に問い合わせることも難しいことが少なくない。
【０１９７】
このような文書の不備や有識者の不在などにより、保守や再構築の作業のための情報が不足する場合に、不足する情報を補うために、情報処理システムの実装実態である現状のプログラムの解析によって、当該情報の復元を試みることがある。
【０１９８】
しかし、上記のように、長年に亘る部分的な改修を経たプログラムでは業務情報が整然と記述されておらず、プログラム（例えば、プログラム１１１やプログラム１１２のように）の所々に分散した形式で記述されることがある。この場合、プログラムの記述をそのまま用いて業務情報を獲得することが難しい。また、設計文書と現状のプログラムとの間に齟齬があり、設計文書に記述された情報を利用できないことがある。
【０１９９】
このように、現状のプログラムから業務情報を得ることが難しかった場合でも、解析サーバ１００によれば、現状のプログラムから適切に業務知識（業務用語表や業務ルール表）を作成できる。例えば、解析サーバ１００は、作成した業務用語表や業務ルール表をディスプレイ２１を用いて表示し、システム開発者に提示する。システム開発者は、解析サーバ１００により表示された業務用語表や業務ルール表により、情報処理システムの現状を適切に把握し、理解でき、当該情報処理システムの保守や再構築の活動を効率的に進められるようになる。こうして、解析サーバ１００は、ユーザによる既存のソフトウェア資産の適切な把握を支援できる。
【０２００】
なお、第１の実施の形態の情報処理は、処理部１２にプログラムを実行させることで実現できる。また、第２の実施の形態の情報処理は、ＣＰＵ１０１にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体２３に記録できる。
【０２０１】
例えば、プログラムを記録した記録媒体２３を配布することで、プログラムを流通させることができる。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体２３に記録されたプログラムまたは他のコンピュータから受信したプログラムを、ＲＡＭ１０２やＨＤＤ１０３などの記憶装置に格納し（インストールし）、当該記憶装置からプログラムを読み込んで実行してもよい。
【符号の説明】
【０２０２】
１０  プログラム解析装置
１１  記憶部
１２  処理部
Ｐ１  第１のプログラム
Ｐ２  第２のプログラム
Ｒ１  定義ルール
Ｔ１  第１の業務ルール表
Ｔ２  入出力表
Ｔ３  業務用語表
Ｔ４  第２の業務ルール表
【図１】
2019139268.tif 000003
【図２】
2019139268.tif 000004
【図３】
2019139268.tif 000005
【図４】
2019139268.tif 000006
【図５】
2019139268.tif 000007
【図６】
2019139268.tif 000008
【図７】
2019139268.tif 000009
【図８】
2019139268.tif 000010
【図９】
2019139268.tif 000011
【図１０】
2019139268.tif 000012
【図１１】
2019139268.tif 000013
【図１２】
2019139268.tif 000014
【図１３】
2019139268.tif 000015
【図１４】
2019139268.tif 000016
【図１５】
2019139268.tif 000017
【図１６】
2019139268.tif 000018
【図１７】
2019139268.tif 000019
【図１８】
2019139268.tif 000020
【図１９】
2019139268.tif 000021
【図２０】
2019139268.tif 000022
【図２１】
2019139268.tif 000023
【図２２】
2019139268.tif 000024
【図２３】
2019139268.tif 000025
【図２４】
2019139268.tif 000026
【図２５】
2019139268.tif 000027
【図２６】
2019139268.tif 000028
【図２７】
2019139268.tif 000029
【図２８】
2019139268.tif 000030