(57)【特許請求の範囲】
【請求項１】
複数種類のソースコードから、前記複数種類のソースコードに含まれる出力変数の変動を示す複数のデシジョンテーブルを生成する生成手段と、
前記複数のデシジョンテーブルから、特定のソースコードのみに含まれる関数に対応するデシジョンテーブルを抽出し、抽出した該デシジョンテーブルを該特定のソースコードの差分仕様情報として分類する第１分類手段と、
前記複数のデシジョンテーブルのうち、前記第１分類手段により抽出されたデシジョンテーブルを除いた第１デシジョンテーブルから、特定のソースコードの関数のみに含まれる前記出力変数のデシジョンテーブルを抽出し、抽出した該デシジョンテーブルを該特定のソースコードの差分仕様情報として分類する第２分類手段と、
前記第１デシジョンテーブルのうち、前記第２分類手段により抽出されたデシジョンテーブルを除いた第２デシジョンテーブルから、共通仕様情報としてのデシジョンテーブル、および、前記各ソースコードの差分仕様情報としてのデシジョンテーブルを再構築する再構築手段と、
を備えた仕様抽出装置。
【請求項２】
前記再構築手段は、
前記第２デシジョンテーブルのうち、同じ前記出力変数の複数のデシジョンテーブルについて、入力条件の真偽の値と、前記出力変数の値との組み合わせが同じである第１組み合わせを検出し、前記第１組み合わせから前記共通仕様情報としてのデシジョンテーブルを再構築し、
前記第２デシジョンテーブルのうち、同じ前記出力変数の複数のデシジョンテーブルについて、前記第１組み合わせ以外の組み合わせである第２組み合わせから、該デシジョンテーブル毎に差分仕様情報としてのデシジョンテーブルを再構築する請求項１に記載の仕様抽出装置。
【請求項３】
前記生成手段は、前記複数種類のソースコードに少なくとも含まれ、かつ、１のソースコードにおけるコンパイルスイッチにより区別される複数種類のソースコードから、前記複数のデシジョンテーブルを生成する請求項１に記載の仕様抽出装置。
【請求項４】
前記生成手段は、前記複数種類のソースコードに少なくとも含まれた別個独立の複数のソースコードから、前記複数のデシジョンテーブルを生成する請求項１に記載の仕様抽出装置。
【請求項５】
前記生成手段は、
前記ソースコードから前記出力変数を特定する特定手段と、
前記ソースコードに含まれる式を等価な式に置き換える等価変換処理を実行して、前記出力変数についての方程式を導出する等価変換手段と、
前記方程式から入力条件を抽出し、該入力条件をノードとする原因結果グラフを作成する作成手段と、
前記原因結果グラフを、前記入力条件の真偽の組み合わせと、前記出力変数の値との対応関係を示すデシジョンテーブルに変換する変換手段と、
を有する請求項１に記載の仕様抽出装置。
【請求項６】
前記等価変換手段は、前記等価変換処理として、定数伝播処理、入力変数伝播処理および枝刈り処理のループ処理を実行することによって前記ソースコードを縮約し、該ソースコードの縮約が収束した時点で前記ループ処理を終了する請求項５に記載の仕様抽出装置。
【請求項７】
前記等価変換手段は、縮約が収束した前記ソースコードに対して、条件式情報伝播処理を実行する請求項６に記載の仕様抽出装置。
【請求項８】
前記等価変換手段は、前記等価変換処理として、定数伝播処理、入力変数伝播処理、枝刈り処理および条件式情報伝播処理を実行する請求項５に記載の仕様抽出装置。
【請求項９】
複数種類のソースコードから、前記複数種類のソースコードに含まれる出力変数の変動を示す複数のデシジョンテーブルを生成する生成ステップと、
前記複数のデシジョンテーブルから、特定のソースコードのみに含まれる関数に対応するデシジョンテーブルを抽出し、抽出した該デシジョンテーブルを該特定のソースコードの差分仕様情報として分類する第１分類ステップと、
前記複数のデシジョンテーブルのうち、前記第１分類ステップで抽出したデシジョンテーブルを除いた第１デシジョンテーブルから、特定のソースコードの関数のみに含まれる前記出力変数のデシジョンテーブルを抽出し、抽出した該デシジョンテーブルを該特定のソースコードの差分仕様情報として分類する第２分類ステップと、
前記第１デシジョンテーブルのうち、前記第２分類ステップで抽出したデシジョンテーブルを除いた第２デシジョンテーブルから、共通仕様情報としてのデシジョンテーブル、および、前記各ソースコードの差分仕様情報としてのデシジョンテーブルを再構築する再構築ステップと、
を有する仕様抽出方法。
【請求項１０】
複数種類のソースコードから、前記複数種類のソースコードに含まれる出力変数の変動を示す複数のデシジョンテーブルを生成する生成手段と、
前記複数のデシジョンテーブルから、特定のソースコードのみに含まれる関数に対応するデシジョンテーブルを抽出し、抽出した該デシジョンテーブルを該特定のソースコードの差分仕様情報として分類する第１分類手段と、
前記複数のデシジョンテーブルのうち、前記第１分類手段により抽出されたデシジョンテーブルを除いた第１デシジョンテーブルから、特定のソースコードの関数のみに含まれる前記出力変数のデシジョンテーブルを抽出し、抽出した該デシジョンテーブルを該特定のソースコードの差分仕様情報として分類する第２分類手段と、
前記第１デシジョンテーブルのうち、前記第２分類手段により抽出されたデシジョンテーブルを除いた第２デシジョンテーブルから、共通仕様情報としてのデシジョンテーブル、および、前記各ソースコードの差分仕様情報としてのデシジョンテーブルを再構築する再構築手段と、
をコンピュータに実現させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、仕様抽出装置、仕様抽出方法およびプログラムに関する。
【背景技術】
【０００２】
ソフトウェア開発において、ソースコードは仕様書から作成される。この時、ソフトウェアの設計図となるドキュメントは、基本設計書および詳細設計書等が存在するが、通常、これらは機能（モジュール）毎に作成される。したがって、ソフトウェアの設計および製造を行う際には、機能毎の設計書からモジュールを製造し、それを組み合わせて一つのソフトウェアを製造する。ソフトウェアの仕様を抽出するには、ソフトウェアのソースコードからモジュールを区分けし、そのモジュールごとの振舞いを調査する必要がある。
【０００３】
このような、ソースコードから、各目的または機能等で共通に実行されるコード部分、および、目的別または機能別等に応じて独自に実行される部分を分類する方法が提案されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００１−１０９６２１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上述のように、ソースコードを各目的または機能等で共通に実行されるコード部分、および、目的別または機能別等に応じて独自に実行される部分を分類するのみでは、それぞれ分類されたコード部分（モジュール）の振る舞いを簡易に示す仕様を分類するものではないので、各モジュールの振る舞いを把握するには、それぞれのモジュールに対して、別途、仕様を抽出しなければならないという問題がある。
【０００６】
本発明は、上記に鑑みてなされたものであって、異なるモジュールのソースコードから各モジュールの共通仕様および差分仕様を把握することができる仕様抽出装置、仕様抽出方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
実施形態の仕様抽出装置は、生成手段と、第１分類手段と、第２分類手段と、再構築手段と、を備える。生成手段は、複数のソースコードから、複数のソースコードに含まれる出力変数の変動を示す複数のデシジョンテーブルを生成する。第１分類手段は、複数のデシジョンテーブルから、特定のソースコードのみに含まれる関数に対応するデシジョンテーブルを抽出し、抽出したデシジョンテーブルをその特定のソースコードの差分仕様情報として分類する。第２分類手段は、複数のデシジョンテーブルのうち、第１分類手段により抽出されたデシジョンテーブルを除いた第１デシジョンテーブルから、特定のソースコードの関数のみに含まれる出力変数のデシジョンテーブルを抽出し、抽出したデシジョンテーブルをその特定のソースコードの差分仕様情報として分類する。再構築手段は、第１デシジョンテーブルのうち、第２分類手段により抽出されたデシジョンテーブルを除いた第２デシジョンテーブルから、共通仕様情報としてのデシジョンテーブル、および、各ソースコードの差分仕様情報としてのデシジョンテーブルを再構築する。
【図面の簡単な説明】
【０００８】
【図１】図１は、実施形態に係るＰＣのハードウェア構成の一例を示す図である。
【図２】図２は、実施形態に係るＰＣの機能ブロックの構成の一例を示す図である。
【図３】図３は、入力変数から出力変数の値を生成する動作を説明する図である。
【図４】図４は、複数のデシジョンテーブル群が作成されることを説明する図である。
【図５】図５は、コンパイルスイッチを含むソースコードの一例を示す図である。
【図６】図６は、仕様抽出動作の一例を示すフローチャートである。
【図７】図７は、定数伝播処理を説明する図である。
【図８】図８は、入力変数伝播処理を説明する図である。
【図９】図９は、枝刈り処理を説明する図である。
【図１０】図１０は、条件式情報伝播処理を説明する図である。
【図１１】図１１は、等価変換処理の一部を示すフローチャートである。
【図１２】図１２は、モジュールのソースコードのサンプルを示す図である。
【図１３】図１３は、出力変数を特定する処理を説明する図である。
【図１４】図１４は、定数伝播処理および入力伝播処理を説明する図である。
【図１５】図１５は、枝刈り処理を説明する図である。
【図１６】図１６は、条件式情報伝播処理を説明する図である。
【図１７】図１７は、条件式情報伝播処理を実行して方程式を得る動作を説明する図である。
【図１８】図１８は、論理演算子で表された方程式に変換する動作を説明する図である。
【図１９】図１９は、出力変数を仮変数に格納する動作を説明する図である。
【図２０】図２０は、中間的な原因結果グラフを導出する動作を説明する図である。
【図２１】図２１は、最終的な原因結果グラフを導出する動作を説明する図である。
【図２２】図２２は、デシジョンテーブルを作成する動作を説明する図である。
【図２３】図２３は、デシジョンテーブルの分類動作の一例を示すフローチャートである。
【図２４】図２４は、デシジョンテーブルの分類動作を説明する図である。
【図２５】図２５は、入力条件に基づいて再構築される前のデシジョンテーブルを示す図である。
【図２６】図２６は、各デシジョンテーブルで入力条件を並び替えた状態を示す図である。
【図２７】図２７は、各デシジョンテーブルで共通する入力条件行を示す図である。
【図２８】図２８は、共通する入力条件行を削除した状態を示す図である。
【図２９】図２９は、再構築された共通仕様のデシジョンテーブルを示す図である。
【図３０】図３０は、再構築された差分仕様のデシジョンテーブルを示す図である。
【発明を実施するための形態】
【０００９】
以下の図面において、同一の部分には同一の符号が付してある。ただし、図面は模式的なものであり、厚みと平面寸法との関係、各層の厚みの比率等は現実のものとは異なる場合がある。したがって、具体的な厚みおよび寸法は以下の説明を参酌して判断すべきものである。
【００１０】
図１は、実施形態に係るＰＣのハードウェア構成の一例を示す図である。図１を参照しながら、仕様抽出装置の一例であるＰＣ１のハードウェア構成について説明する。
【００１１】
図１に示すように、仕様抽出装置の一例であるＰＣ１は、通信部１１と、操作部１２と、表示部１３と、記憶部１４と、外部記憶装置１５と、制御部１６と、ＣＤ−ＲＯＭドライブ１８と、を備えている。上述の各部は、バス１９によって接続され、互いにデータの送受信が可能となっている。
【００１２】
通信部１１は、外部機器と通信する装置である。通信部１１は、例えば、ＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）等の通信装置によって実現される。通信部１１の通信プロトコルとして、例えば、ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）／ＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）またはＵＤＰ（Ｕｓｅｒ  Ｄａｔａｇｒａｍ  Ｐｒｏｔｏｃｏｌ）／ＩＰ等を適用できる。
【００１３】
操作部１２は、ユーザによって制御部１６に対して所定の処理を実行させるための操作入力を行う装置である。操作部１２は、例えば、マウス、キーボード、テンキー、タッチパッド、またはタッチパネルにおける操作入力機能によって実現される。
【００１４】
表示部１３は、制御部１６により実行されているアプリケーション画像等を表示する装置である。表示部１３は、例えば、ＣＲＴ（Ｃａｔｈｏｄｅ  Ｒａｙ  Ｔｕｂｅ）ディスプレイ、液晶ディスプレイ、プラズマディスプレイまたは有機ＥＬ（Ｅｌｅｃｔｒｏｌｕｍｉｎｅｓｃｅｎｃｅ）ディスプレイ等によって実現される。
【００１５】
記憶部１４は、ＰＣ１で実行される各種プログラムおよびＰＣ１で行われる各種処理に使用されるデータ等を記憶する装置である。記憶部１４は、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）およびＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等の記憶装置によって実現される。
【００１６】
外部記憶装置１５は、プログラム、ソースコード、および各種データ等を蓄積して記憶する記憶装置である。外部記憶装置１５は、例えば、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、光ディスク、または光磁気ディスク（ＭＯ：Ｍａｇｎｅｔｏ−Ｏｐｔｉｃａｌ  Ｄｉｓｋ）等の記憶装置によって実現される。
【００１７】
制御部１６は、ＰＣ１の各部の動作を制御する装置である。制御部１６は、例えば、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）およびＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）等で実現される。
【００１８】
ＣＤ−ＲＯＭドライブ１８は、着脱自在な記憶媒体の一例としてのＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）１７に対するデータの読み出しおよび書き込みを制御する装置である。なお、上述の着脱可能な記録媒体の他の例として、ＣＤ−Ｒ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ  Ｒｅｃｏｒｄａｂｌｅ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ）またはブルーレイディスク等のコンピュータで読み取り可能な記録媒体に記録して提供するように構成してもよい。
【００１９】
図２は、実施形態に係るＰＣの機能ブロックの構成の一例を示す図である。図２を参照しながら、ＰＣ１の機能ブロックの構成について説明する。
【００２０】
図２に示すように、ＰＣ１は、各機能を実現する手段として、出力変数特定手段１０１（特定手段）と、等価変換手段１０２と、グラフ作成手段１０３（作成手段）と、テーブル変換手段１０４（変換手段）と、分類手段１０５と、を有する。上述の出力変数特定手段１０１、等価変換手段１０２、グラフ作成手段１０３、テーブル変換手段１０４および分類手段１０５は、ＰＣ１の制御部１６が外部記憶装置１５等に記憶されたプログラムを記憶部１４に読み出して実行することにより実現される。なお、出力変数特定手段１０１、等価変換手段１０２、グラフ作成手段１０３、テーブル変換手段１０４および分類手段１０５は、すべてがプログラムの実行により実現されることに限定されるものではなく、少なくともいずれかが、ハードウェア回路によって実現されるものとしてもよい。
【００２１】
出力変数特定手段１０１は、仕様抽出動作の対象となるソフトウェアのモジュール（対象モジュール）のソースコードに含まれる各関数における出力変数（例えば、グローバル変数）を抽出して特定する機能部である。ここで、グローバル変数とは、ソフトウェアの各モジュールの外で宣言された変数であり、いずれのモジュールにおいても参照および更新が可能な変数である。
【００２２】
等価変換手段１０２は、モジュールのソースコードに対して等価変換処理を実行して、ソースコードを縮約し、出力変数についての方程式を導出する機能部である。等価変換処理として、定数伝播処理、入力変数伝播処理、枝刈り処理および条件式情報伝播処理等があるが、各処理の詳細については後述する。
【００２３】
グラフ作成手段１０３は、等価変換手段１０２により導出された出力変数についての方程式から、原因結果グラフを作成する機能部である。ここで、原因結果グラフとは、１または複数の入力条件をノードとして、各ノードを論理記号により結合し、入力条件の組み合わせから出力値を導出するためのグラフである。原因結果グラフを作成する動作の詳細については後述する。
【００２４】
テーブル変換手段１０４は、グラフ作成手段１０３により作成された原因結果グラフをデシジョンテーブルに変換する機能部である。ここで、デシジョンテーブルとは、入力条件の組み合わせから出力変数の値（出力値）がどのような値をとるかを示す表であり、モジュールの振る舞いを表現する、すなわち、モジュールの仕様を決定付けるものである。
【００２５】
分類手段１０５は、テーブル変換手段１０４により生成された各モジュールのデシジョンテーブル群を、各モジュールの共通仕様のデシジョンテーブル（共通仕様情報）と、各モジュール固有の差分仕様のデシジョンテーブル（差分仕様情報）とに分類する機能部である。ここで、共通仕様のデシジョンテーブルとは、各モジュールにおける共通の出力変数についての共通の振る舞い（変動）を示す入力条件と出力値との対応表である。また、差分仕様のデシジョンテーブルとは、各モジュールに含まれる出力変数についてのそのモジュールでの固有の振る舞いを示す入力条件と出力値との対応表である。分類手段１０５は、第１分類手段１０５ａと、第２分類手段１０５ｂと、再構築手段１０５ｃと、を有する。本実施形態において、仕様の抽出とは、モジュールからデシジョンテーブルを求めることをいうものとする。なお、仕様情報としてデシジョンテーブルを挙げたが、これに限定されるものではなく、同様の情報を表形式以外の形式で表した情報を仕様情報としてもよい。
【００２６】
第１分類手段１０５ａは、テーブル変換手段１０４により生成された各モジュールのデシジョンテーブル群から、各モジュールのみに含まれる関数のデシジョンテーブルを抽出して分類し、各モジュール固有の差分仕様のデシジョンテーブルのグループ（以下、差分仕様グループという）に追加する機能部である。ここで、第１分類手段１０５ａにより分類された各モジュールのみに含まれる関数のデシジョンテーブルを差分仕様グループに追加するのは、当該関数における出力変数の振る舞いが、当該関数を含むモジュールにおいて固有の振る舞いを示すからである。
【００２７】
第２分類手段１０５ｂは、テーブル変換手段１０４により生成された各モジュールのデシジョンテーブル群のうち、第１分類手段１０５ａにより分類された差分仕様のデシジョンテーブル以外のデシジョンテーブルから、各モジュールの関数に含まれる出力変数のうち、特定のモジュールのみに含まれる出力変数のデシジョンテーブルを抽出して分類する機能部である。第２分類手段１０５ｂは、分類した特定のモジュールのみに含まれる出力変数のデシジョンテーブルを、当該モジュールの差分仕様グループに追加する。
【００２８】
再構築手段１０５ｃは、第２分類手段１０５ｂにより分類された差分仕様のデシジョンテーブル以外のデシジョンテーブルのうち、同じ出力変数のデシジョンテーブルにおいて、入力条件および出力値を比較して、共通仕様のデシジョンテーブルと、差分仕様のデシジョンテーブルとに再構築する機能部である。再構築手段１０５ｃは、再構築した共通仕様のデシジョンテーブルをグループ（以下、共通仕様グループ）にまとめる。また、再構築手段１０５ｃは、再構築した差分仕様のデシジョンテーブルを差分仕様グループに追加する。
【００２９】
なお、「生成手段」は、上述の出力変数特定手段１０１、等価変換手段１０２、グラフ作成手段１０３およびテーブル変換手段１０４に相当する。
【００３０】
また、本実施形態における「モジュール」とは、特定の機能を有するソフトウェア部品であり、その実体であるプログラムのコードを「ソースコード」と記載しているが、双方を明確に区別することを意図するものではない。
【００３１】
図３は、モジュールが入力変数から出力変数の値を生成する動作を説明する図である。図３を参照しながら、対象モジュール２０について、モジュールとしての動作の概要を説明する。
【００３２】
図３に示すように、対象モジュール２０は、入力変数に格納された値（入力値）に基づいて、所定の処理を実行し、出力変数に出力値を格納して出力する機能を有する。対象モジュール２０の入力変数の値は、対象モジュール２０の外部から入力されるデータであって、例えば、引数およびグローバル変数に格納される。対象モジュール２０の出力変数の値は、対象モジュール２０の外部に伝達されるデータであって、例えば、対象モジュール２０内で更新されるグローバル変数の値である。このような、対象モジュール２０の入出力関係に基づいた動作仕様を抽出することが、上述のデシジョンテーブルを求めることに相当する。
【００３３】
図４は、ソースコードから複数のデシジョンテーブル群が作成されることを説明する図である。図５は、コンパイルスイッチを含むソースコードの一例を示す図である。図４および５を参照しながら、大本のソースコード（以下、便宜的に、レガシーソースコードという）からコンパイルスイッチの動作により、機能別または目的別に動作する複数のモジュールに分けられる、すなわち、複数のモジュールそれぞれに対応した複数種類のソースコードに区別されることについて説明する。
【００３４】
ソースコードにおいては、コンパイルスイッチによって、機能別または目的別に、関数または関数内の一部のコードが選択されて実行される。このとき、図４では、コンパイルスイッチを実現するコードを含むソースコードを、レガシーソースコード８０と称するものとする。レガシーソースコード８０は、コンパイルスイッチによって、図４に示すように例えば、機能別または目的別に３種類のモジュールが実行されるものとする。この３種類のモジュールをそれぞれモジュールＡ〜Ｃとする。出力変数特定手段１０１、等価変換手段１０２、グラフ作成手段１０３およびテーブル変換手段１０４は、モジュールＡ〜Ｃそれぞれに対して処理を実行し、モジュールＡ〜Ｃそれぞれのデシジョンテーブルのまとまりであるデシジョンテーブル群８１ａ〜８１ｃを生成する。
【００３５】
次に、図５に示すレガシーソースコード８０ａを参照しながら、コンパイルスイッチの具体的な実現方法を説明する。図５に示すように、コンパイルスイッチは、例えば、レガシーソースコード８０ａが含むプリプロセッサにより実現される。ここで、プリプロセッサとは、ソースコードをコンパイルする前に、ソースコードに対して行われる前処理を実現するコード（プログラム）をいう。
【００３６】
レガシーソースコード８０ａは、プリプロセッサ８００を有する。図５に示すプリプロセッサ８００は、変数Ａ０１が真値である場合、レガシーソースコード８０ａに記載された関数ｆｕｎｃＡが実行されることを示し、関数ｆｕｎｃＡの戻り値が変数ｘに格納されることを示す。すなわち、変数Ａ０１が真値であるものとして、レガシーソースコード８０ａが実行された場合のモジュールの実体であるソースコードは、関数ｆｕｎｃＡを含むことになる。
【００３７】
一方、変数Ａ０１が偽値である場合、レガシーソースコード８０ａに記載された関数ｆｕｎｃＡおよびｆｕｎｃＢが実行されることを示し、関数ｆｕｎｃＡおよびｆｕｎｃＢの戻り値がそれぞれ変数ｘ、ｙに格納されることを示す。すなわち、変数Ａ０１が偽値であるものとして、レガシーソースコード８０ａが実行された場合のモジュールの実体であるソースコードは、関数ｆｕｎｃＡおよびｆｕｎｃＢを含むことになる。
【００３８】
図６は、実施形態に係るＰＣにおける仕様抽出動作の一例を示すフローチャートである。図７は、定数伝播処理を説明する図である。図８は、入力変数伝播処理を説明する図である。図９は、枝刈り処理を説明する図である。図１０は、条件式情報伝播処理を説明する図である。図１１は、等価変換処理のうち定数伝播処理、入力変数伝播処理および枝刈り処理のループ処理を示すフローチャートである。図６〜１１を参照しながら、仕様抽出装置であるＰＣ１の仕様抽出動作の流れについて説明する。なお、以下の説明では、対象モジュールのソースコード（図４の例ではレガシーソースコード８０）がコンパイルスイッチにより機能別または目的別に動作する複数のソースコードに分けられているものとする。
【００３９】
（ステップＳ１０）
出力変数特定手段１０１は、複数のソースコードにそれぞれ含まれる各関数における出力変数を特定する。具体的には、出力変数特定手段１０１は、出力変数として、複数のソースコードに含まれる各関数における、更新されているグローバル変数を特定する。そして、ステップＳ１１へ移行する。
【００４０】
（ステップＳ１１）
等価変換手段１０２は、複数のソースコードにおいて等価変換処理を実行し、それぞれ出力変数についての方程式を導出する。具体的には、等価変換手段１０２は、等価変換処理として、定数伝播処理、入力変数伝播処理、枝刈り処理および条件式情報伝播処理を実行する。
【００４１】
ここで、図７を参照しながら、定数伝播処理の内容について説明する。定数伝播処理は、ソースコードにおいて、変数への定数の代入箇所を開始点として、その変数を読み取る（参照する）時点で有効かどうかを判定し、有効である場合、定数に置き換える処理である。図７に示すサンプルコード３０に対して、定数伝播処理を実行した結果のコードを定数伝播処理後コード３１とする。
【００４２】
まず、サンプルコード３０のコード部３００において、定数「１」が変数「Ａ」に代入されているので、この代入している箇所を開始点とする。
【００４３】
次に、サンプルコード３０のコード部３０１において、変数「Ａ」が参照されている。変数「Ａ」には、コード部３００において定数「１」が代入されており、コード部３０１において、変数「Ａ」を参照すると定数「１」を得ることができるので、この変数「Ａ」を定数「１」に置き換える。その結果、コード部３０１（「Ｂ＝Ａ＋１；」）は、定数伝播処理後コード３１の定数伝播処理後コード部３１０（「Ｂ＝２；」）に置き換えることができる。
【００４４】
次に、同様に、コード部３０１が、定数伝播処理後コード部３１０に置き換えられた結果、サンプルコード３０のコード部３０２（「Ｃ＝Ｂ；」）は、定数伝播処理後コード３１の定数伝播処理後コード部３１１（「Ｃ＝２；」）に置き換えることができる。
【００４５】
そして、コード部３００における変数「Ａ」への定数「１」の代入から、サンプルコード３０のコード部３０３（「Ｆｕｎｃ（Ａ）；」）は、定数伝播処理後コード３１の定数伝播処理後コード部３１２（「Ｆｕｎｃ（１）；」）に置き換えることができる。これは、関数「Ｆｕｎｃ」の引数としての変数「Ａ」が定数「１」に置き換えられたことを意味する。
【００４６】
以上の動作のように、定数伝播処理は、ソースコード中の変数を定数に置き換えることによって、ソースコードを簡略化して縮約することができる。
【００４７】
次に、図８を参照しながら、入力変数伝播処理の内容について説明する。入力変数伝播処理は、グローバル変数である入力変数を使って計算される変数の箇所を起点として、その下流でその変数を用いる式において、その変数を入力変数に置き換える処理をいうものとする。図８に示すサンプルコード３０ａに対して、入力変数伝播処理を実行した結果のコードを入力変数伝播処理後コード３１ａとする。
【００４８】
まず、サンプルコード３０ａにおけるコード部３００ａにおいて、入力変数「ｇ１」が変数「ａ１」に代入されているので、この代入計算されている箇所を起点とする。
【００４９】
次に、サンプルコード３０ａのコード部３０１ａ（「ａ２＝ａ１＋１；」）において、コード部３００ａにおける変数「ａ１」が計算に用いられているので、入力変数伝播処理後コード３１ａの入力変数伝播処理後コード部３１０ａ（「ａ２＝ｇ１＋１；」）に置き換えることができる。
【００５０】
以上の動作のように、入力変数伝播処理は、ソースコード中の変数を入力変数に置き換えることによって、ソースコードを簡略化して縮約することができる。
【００５１】
次に、図９を参照しながら、枝刈り処理の内容について説明する。枝刈り処理は、定数伝播処理および入力変数伝播処理を実行した結果、分岐条件式を定数（例えば、ｉｆ文であれば条件式、ｓｗｉｔｃｈ文であればｃａｓｅ値）に置き換えること等によって、複数の分岐の選択肢のうち、実行されることのない選択肢を削除する処理である。図９に示すサンプルコード３０ｂに対して、枝刈り処理を実行した結果のコードを枝刈り処理後コード３１ｂとする。
【００５２】
サンプルコード３０ｂのコード部３００ｂにおいて、変数「Ａ」に定数「１」が入力されている。したがって、条件分岐式であるサンプルコード３０ｂのコード部３０１ｂにおける条件（「Ａ＝＝０」）を満たすことはないので、分岐の選択肢の一つである「分岐１；」が実行されることはない。よって、この実行されることのない「分岐１；」を削除することによって、条件分岐式であるコード部３０１ｂは、枝刈り処理後コード３１ｂの枝刈り処理後コード部３１０ｂ（「分岐２；」）に置き換えることができる。
【００５３】
以上のように、枝刈り処理は、数行に渡って記述された条件分岐式の記述量を減らす（図９の例では１行）ことができるので、ソースコードを簡略化して縮約することができる。
【００５４】
次に、図１０を参照しながら、条件式情報伝播処理の内容について説明する。条件式情報伝播処理は、条件分岐式（例えば、ｉｆ文およびｓｗｉｔｃｈ文等）を３項式に置き換える処理をいうものとする。図１０に示すサンプルコード３０ｃに対して、条件式情報伝播処理を実行した結果のコードを条件式情報伝播処理後コード３１ｃとする。
【００５５】
サンプルコード３０ｃのコード部３００ｃは、ｉｆ文で表された条件分岐式である。このコード部３００ｃを、３項演算子を用いた３項式に置き換えたのが条件式情報伝播処理後コード３１ｃの条件式情報伝播処理後コード部３１０ｃ（「ｂ＝（Ａ？０：１）；」）である。
【００５６】
以上のように、条件式情報伝播処理は、数行に渡って記述された条件分岐式を１行の３項式に置き換えることができるので、ソースコードを簡略化して縮約することができる。
【００５７】
次に、図１１を参照しながら、定数伝播処理、入力変数伝播処理および枝刈り処理をループ処理する動作を説明する。枝刈り処理は、上述のように、定数伝播処理および入力変数伝播処理を実行した後等に、分岐条件式を定数に置き換えることが可能となった場合に置き換えることによって、複数の分岐の選択肢のうち、実行されることのない選択肢を削除する処理である。なお、定数伝播処理、入力変数伝播処理および枝刈り処理の実行順序は任意でよい。
【００５８】
また、枝刈り処理を実行することによって、条件分岐式が簡略化され、分岐の選択肢のうち特定の選択肢が条件分岐式外に出る、すなわち、特定の選択肢が常時実行されることになる。この枝刈り処理により常時実行されることになった選択肢は、新たに、定数伝播処理または入力変数伝播処理により縮約することができる可能性がある。
【００５９】
以上のことから、図１１に示す手順で定数伝播処理、入力変数伝播処理および枝刈り処理を実行する。まず、等価変換手段１０２は、ソースコードに対して、定数伝播処理（ステップＳ１１０）および入力変数伝播処理（ステップＳ１１１）を実行する。次に、等価変換手段１０２は、定数伝播処理および入力変数伝播処理によって縮約されたソースコードに対して、枝刈り処理を実行する（ステップＳ１１２）。そして、等価変換手段１０２は、定数伝播処理、入力変数伝播処理および枝刈り処理を実行した結果、ソースコードの縮約が収束したか否か、すなわち、ソースコードがこれ以上縮約できないか否かを判定する。縮約が収束した場合（ステップＳ１１３：Ｙｅｓ）、処理を終了し、縮約が収束していない場合（ステップＳ１１３：Ｎｏ）、ステップＳ１１０へ戻る。
【００６０】
以上のように、図１１に示す定数伝播処理、入力変数伝播処理および枝刈り処理のループ処理を実行することによって、ソースコードをより確実に縮約することができる。そして、等価変換手段１０２は、定数伝播処理、入力変数伝播処理および枝刈り処理のループ処理を実行した後、条件式情報伝播処理を実行することによって、３項式で表された、出力変数についての方程式を導出することができる。そして、ステップＳ１２へ移行する。
【００６１】
（ステップＳ１２）
グラフ作成手段１０３は、等価変換手段１０２により導出された出力変数についての方程式から、原因結果グラフを作成する。具体的には、グラフ作成手段１０３は、出力変数についての方程式の各入力条件をノードとして、後述するように、ＯＲ記号部、ＡＮＤ記号部およびＮＯＴ記号部で結合することにより、出力変数の値（出力値）の振る舞いを把握するための原因結果グラフを作成する。ただし、グラフ作成手段１０３は、上述のように出力変数についての方程式から、入力条件式のノードがＯＲ記号部、ＡＮＤ記号部およびＮＯＴ記号部によって結合された原因結果グラフを作成する。したがって、等価変換手段１０２は、３項演算子を用いて表された方程式を、論理演算子を用いて表された方程式に変換することが望ましい。また、グラフ作成手段１０３による出力変数についての方程式から原因結果グラフへの作成手順の詳細は後述する。そして、ステップＳ１３へ移行する。
【００６２】
（ステップＳ１３）
テーブル変換手段１０４は、グラフ作成手段１０３により作成された原因結果グラフをデシジョンテーブルに変換する。具体的には、テーブル変換手段１０４は、上述の出力変数についての方程式の入力条件（原因結果グラフにおける入力条件のノード）の値の組み合わせごとに、出力変数の値（出力値）がどのように値をとるかについて表にしたデシジョンテーブルを作成する。また、テーブル変換手段１０４による原因結果グラフからデシジョンテーブルへの変換手順の詳細は後述する。
【００６３】
（ステップＳ１４）
分類手段１０５は、テーブル変換手段１０４により生成された各モジュールのデシジョンテーブル群を、各モジュールの共通仕様のデシジョンテーブルと、各モジュール固有の差分仕様のデシジョンテーブルとに分類する。この分類手段１０５による共通仕様のデシジョンテーブルおよび差分仕様のデシジョンテーブルの分類手順の詳細は後述する。そして、仕様抽出動作を終了する。
【００６４】
なお、上述の仕様抽出動作は、対象モジュールのソースコードがコンパイルスイッチで分けられた複数のソースコードを対象に実行されるものとしたが、これに限定されるものではなく、別個独立の複数のソースコードを対象に実行されるものとしてもよく、または、これら双方を含むものであってもよい。
【００６５】
図１２は、仕様抽出動作の対象となるモジュールのソースコードのサンプルを示す図である。図１３は、モジュールに対して出力変数を特定する処理を説明する図である。図１４は、モジュールに対して定数伝播処理および入力伝播処理を実行する動作を説明する図である。図１５は、モジュールに対して枝刈り処理を実行する動作を説明する図である。図１６は、モジュールに対して条件式情報伝播処理を実行する動作を説明する図である。図１７は、モジュールに対して条件式情報伝播処理を実行して方程式を得る動作を説明する図である。図１８は、３項演算子により表された方程式を論理演算子により表された方程式に変換する動作を説明する図である。図１９は、等価変換処理を実行する前に出力変数を仮変数に設定する動作を説明する図である。図１２〜１９を参照しながら、具体的なモジュールに対する等価変換手段１０２による等価変換処理について説明する。
【００６６】
図１２に示す対象モジュール２０は、以下の等価変換処理を実行する前の具体的なサンプルコードである。なお、図１２においては、対象モジュール２０のソースコードがＣ言語で記載されているが、これに限定されるものではなく、上述の等価変換処理が実行できるプログラム言語であればよい。
【００６７】
まず、図１３に示すように、出力変数特定手段１０１は、対象モジュール２０において、更新されているグローバル変数、すなわち出力変数を特定する。図１３に示すように、対象モジュール２０においては、グローバル変数としては、グローバル変数２００（「Ｏｕｔｐｕｔ＿ｄａｔａ」）およびグローバル変数２０１（「Ｇｌｏｂａｌ＿ｓｔａｔｕｓ」）が宣言されている。出力変数特定手段１０１は、グローバル変数のうち、グローバル変数２０１は参照されているのみ（「ｓａｍｐｌｅ＿ｓｔａｔｕｓ１＝Ｇｌｏｂａｌ＿ｓｔａｔｕｓ；」）なので、出力変数ではなく入力変数であると判断する。また、出力変数特定手段１０１は、グローバル変数のうち、グローバル変数２００は書き換えられている（更新されている）（例えば「Ｏｕｔｐｕｔ＿ｄａｔａ＝ｓｔａｔｕｓ２；」）ので出力変数であると特定する。
【００６８】
対象モジュール２０における入力条件部２０２〜２０４は、後述するように、等価変換手段１０２によって導出された出力変数についての方程式における入力条件となるコード部である。
【００６９】
次に、図１４に示すように、コード部２０５において変数「ｓｔａｔｕｓ１」に定数「０」が代入されていることから、「ｓｔａｔｕｓ２＝ｓｔａｔｕｓ１＋１；」は「ｓｔａｔｕｓ２＝１；」と置き換えることができる。したがって、等価変換手段１０２は、定数伝播処理によって、対象モジュール２０のコード部２０５を、定数伝播処理後コード部２１０に置き換えることができる。
【００７０】
また、変数「ｓｔａｔｕｓ２」には定数「１」が代入されていることから、コード部２０７ａ〜２０７ｃ（「Ｏｕｔｐｕｔ＿ｄａｔａ＝ｓｔａｔｕｓ２；」）は、「Ｏｕｔｐｕｔ＿ｄａｔａ＝１；」に置き換えることができる。したがって、等価変換手段１０２は、定数伝播処理によって、対象モジュール２０のコード部２０７ａ〜２０７ｃを、それぞれ定数伝播処理後コード部２１２ａ〜２１２ｃに置き換えることができる。
【００７１】
また、変数「ｓｔａｔｕｓ２」には定数「１」が代入されていることから、ｉｆ文の条件式を示すコード部２０８（「ｉｆ（（ｓｔａｔｕｓ２＝＝０））」）は、「ｉｆ（（１＝＝０））」に置き換えることができる。したがって、等価変換手段１０２は、定数伝播処理によって、対象モジュール２０のコード部２０８を、定数伝播処理後コード部２１３に置き換えることができる。
【００７２】
また、コード部２０６において入力変数「Ｇｌｏｂａｌ＿ｓｔａｔｕｓ」が変数「ｓａｍｐｌｅ＿ｓｔａｔｕｓ１」に入力されていることから、「ｓａｍｐｌｅ＿ｓｔａｔｕｓ２＝ｓａｍｐｌｅ＿ｓｔａｔｕｓ１＋１；」は「ｓａｍｐｌｅ＿ｓｔａｔｕｓ２＝Ｇｌｏｂａｌ＿ｓｔａｔｕｓ＋１；」に置き換えることができる。したがって、等価変換手段１０２は、入力変数伝播処理によって、対象モジュール２０のコード部２０６を、入力変数伝播処理後コード部２１１に置き換えることができる。
【００７３】
以上のようにして、等価変換手段１０２は、定数伝播処理および入力変数伝播処理によって、対象モジュール２０を処理後モジュール２１に変換する。
【００７４】
次に、図１５に示すように、分岐条件式であるコード部２１４において、図１４に示す定数伝播処理後コード部２１３に相当する条件の部分が「１＝＝０」であるので、「Ｏｕｔｐｕｔ＿ｄａｔａ＝１；」は実行されることがない。したがって、等価変換手段１０２は、枝刈り処理によって、処理後モジュール２１のコード部２１４を、枝刈り処理後コード部２２０（コードなし）に置き換えることができる。
【００７５】
以上のようにして、等価変換手段１０２は、枝刈り処理によって、処理後モジュール２１を処理後モジュール２２に変換する。
【００７６】
次に、図１６に示すように、条件分岐式であるコード部２２１は、３項演算子を用いた３項式に置き換えることができる。すなわち、等価変換手段１０２は、条件式情報伝播処理によって、処理後モジュール２２のコード部２２１を、３項式である条件式情報伝播処理後コード部２３０（「Ｏｕｔｐｕｔ＿ｄａｔａ＝（！（ｓａｍｐｌｅ＿ｖａｒｉａｂｌｅ２＝＝１）＆＆ｓａｍｐｌｅ＿ｆｌａｇｓ＝＝１）？１：０；」）に置き換えることができる。
【００７７】
以上のようにして、等価変換手段１０２は、条件式情報伝播処理によって、処理後モジュール２２を処理後モジュール２３に変換する。
【００７８】
次に、図１７に示すように、条件分岐式であるコード部２３１は、３項演算子を用いた３項式に置き換えることができる。すなわち、等価変換手段１０２は、条件式情報伝播処理によって、処理後モジュール２３のコード部２３１を、３項式である条件式情報伝播処理後コード部２４０（「Ｏｕｔｐｕｔ＿ｄａｔａ＝ｓａｍｐｌｅ＿ｖａｒｉａｂｌｅ１＞６１？１：（（！（ｓａｍｐｌｅ＿ｖａｒｉａｂｌｅ２＝＝１）＆＆ｓａｍｐｌｅ＿ｆｌａｇｓ＝＝１）？１：０）；」）に置き換えることができる。
【００７９】
以上のようにして、等価変換手段１０２は、条件式情報伝播処理によって、処理後モジュール２３を処理後モジュール２４に変換する。この変換された処理後モジュール２４の条件式情報伝播処理後コード部２４０の方程式が、等価変換手段１０２によって導出される出力変数についての方程式となる。ただし、上述したように、後工程の原因結果グラフは、グラフ作成手段１０３により、入力条件式のノードがＯＲ記号部、ＡＮＤ記号部およびＮＯＴ記号部によって結合されて作成される。したがって、図１８に示すように、等価変換手段１０２は、導出した条件式情報伝播処理後コード部２４０に示す３項演算子を用いて表された方程式を、論理演算子を用いて表された方程式２４１（「Ｏｕｔｐｕｔ＿ｄａｔａ＝（ｓａｍｐｌｅ＿ｖａｒｉａｂｌｅ１＞６１）｜｜！（ｓａｍｐｌｅ＿ｖａｒｉａｂｌｅ１＞６１）＆＆！（ｓａｍｐｌｅ＿ｖａｒｉａｂｌｅ２＝＝１）＆＆ｓａｍｐｌｅ＿ｆｌａｇｓ＝＝１」）に変換する。すなわち、方程式２４１が、等価変換手段１０２が最終的に導出する出力変数についての方程式である。
【００８０】
以上のように、等価変換手段１０２による等価変換処理（定数伝播処理、入力変数伝播処理、枝刈り処理および条件式情報伝播処理）によって、モジュールのソースコードを縮約することができ、それによって縮約された出力変数についての方程式を導出することができる。
【００８１】
なお、モジュールのソースコードにおいて出力変数を使って計算する式がない場合、出力変数が等価変換手段１０２による等価変換処理のうちの枝刈り処理によって、出力変数についての方程式が削除されてしまう場合がある。この場合、図１９の対象モジュール２５の仮変数設定コード部２５０に示すように、出力変数特定手段１０１により特定された出力変数（図１９では「Ｖ１」、「Ｖ２」および「Ｖ３」）を、仮変数（図１９では「ｔｍｐ＿Ｖ１」、「ｔｍｐ＿Ｖ２」および「ｔｍｐ＿Ｖ３」）に代入処理を実行すればよい。これによって、等価変換手段１０２によって対象モジュール２５から等価変換後モジュール２６に変換された場合、仮変数設定コード部２５０は、仮変数（実質は出力変数）についての方程式である方程式コード部２６０に変換され、方程式が削除されてしまうことを防止できる。
【００８２】
図２０は、方程式の入力条件の論理式からＯＲ記号部およびＡＮＤ記号部によって中間的な原因結果グラフを導出する動作を説明する図である。図２１は、中間的な原因結果グラフからＮＯＴ記号部および同一式のノードの統合によって最終的な原因結果グラフを導出する動作を説明する図である。図２０および２１を参照しながら、グラフ作成手段１０３による原因結果グラフの作成について説明する。
【００８３】
まず、図２０に示すように、グラフ作成手段１０３は、等価変換手段１０２によって導出された図１８に示す方程式２４１の右辺（入力条件が論理演算子で結合された式）を抽出する。ＯＲ演算子（「｜｜」）、ＡＮＤ演算子（「＆＆」）、ＮＯＴ演算子（「！」）の順に演算の優先順位が高くなるので、グラフ作成手段１０３は、ＯＲ演算子によって結合された入力条件をそれぞれ抽出し、それぞれの入力条件をノードとして、各ノードを図２０に示すＯＲ記号部６０によって結合させる。具体的には、グラフ作成手段１０３は、方程式２４１の右辺のうちＯＲ演算子で結合された入力条件「ｓａｍｐｌｅ＿ｖａｒｉａｂｌｅ１＞６１」および「！（ｓａｍｐｌｅ＿ｖａｒｉａｂｌｅ１＞６１）＆＆！（ｓａｍｐｌｅ＿ｖａｒｉａｂｌｅ２＝＝１）＆＆ｓａｍｐｌｅ＿ｆｌａｇｓ＝＝１」を、それぞれノード４０、４１としてＯＲ記号部６０で結合させる。ノード４０とノード４１とのＯＲ演算の結果が出力値となり、グラフ作成手段１０３は、ＯＲ記号部６０の出力側と、出力値を示す出力値ノード７０とを結合させる。
【００８４】
次に、グラフ作成手段１０３は、生成した各ノードの入力条件において、ＡＮＤ演算子によって結合された入力条件をそれぞれ抽出し、それぞれの入力条件を新たなノードとして、各ノードを図２０に示すＡＮＤ記号部６１によって結合させる。具体的には、グラフ作成手段１０３は、ノード４１の入力条件のうちＡＮＤ演算子で結合された入力条件「！（ｓａｍｐｌｅ＿ｖａｒｉａｂｌｅ１＞６１）」、「！（ｓａｍｐｌｅ＿ｖａｒｉａｂｌｅ２＝＝１）」および「ｓａｍｐｌｅ＿ｆｌａｇｓ＝＝１」を、それぞれ、ノード４２〜４４としてＡＮＤ記号部６１で結合させる。そして、グラフ作成手段１０３は、ＡＮＤ記号部６１の出力側と、ＯＲ記号部６０とを結合させる。
【００８５】
次に、図２１に示すように、グラフ作成手段１０３は、生成した各ノードの入力条件において、ＮＯＴ演算子を含む入力条件を抽出し、ＮＯＴ演算子を外した入力条件を新たなノードとして、そのノードを図２１に示すＮＯＴ演算子と結合させる。具体的には、グラフ作成手段１０３は、ノード４２の入力条件「！（ｓａｍｐｌｅ＿ｖａｒｉａｂｌｅ１＞６１）」にＮＯＴ演算子が含まれるので、ＮＯＴ演算子を外した入力条件「ｓａｍｐｌｅ＿ｖａｒｉａｂｌｅ１＞６１」を新たなノードであるノード４２ａとする。そして、グラフ作成手段１０３は、ノード４２ａを、ＮＯＴ記号部６２ａを介してＡＮＤ記号部６１に結合させる。また、グラフ作成手段１０３は、ノード４３の入力条件「！（ｓａｍｐｌｅ＿ｖａｒｉａｂｌｅ２＝＝１）」にＮＯＴ演算子が含まれるので、ＮＯＴ演算子を外した入力条件「ｓａｍｐｌｅ＿ｖａｒｉａｂｌｅ２＝＝１」を新たなノードであるノード４３ａとする。そして、グラフ作成手段１０３は、ノード４３ａを、ＮＯＴ記号部６２ｂを介してＡＮＤ記号部６１に結合させる。
【００８６】
次に、グラフ作成手段１０３は、ここまでで生成したノードのうち、入力条件が同一式であるノードを１つのノードに統一する。具体的には、グラフ作成手段１０３は、ノード４０およびノード４２ａの入力条件が「ｓａｍｐｌｅ＿ｖａｒｉａｂｌｅ１＞６１」で同一式なので、ノード４０とノード４２ａとを１つのノード４５に統一する。
【００８７】
このように、グラフ作成手段１０３は、等価変換手段１０２により導出された方程式２４１から、右辺に含まれる入力条件をノードとしてＯＲ記号部、ＡＮＤ記号部およびＮＯＴ記号部で結合させ、同一式の入力条件を１つのノードに統一させることによって、原因結果グラフを作成する。
【００８８】
以上のように、グラフ作成手段１０３は、出力変数の方程式における入力条件を抽出して、抽出した入力条件をノードとして、論理記号（ＯＲ記号部、ＡＮＤ記号部およびＮＯＴ記号部）によって結合し、共通のノードを統合している。これによって、等価変換手段１０２により導出された出力変数についての方程式から、縮約された原因結果グラフを作成することができる。
【００８９】
図２２は、原因結果グラフからデシジョンテーブルを作成する動作を説明する図である。図２２を参照しながら、テーブル変換手段１０４による原因結果グラフからデシジョンテーブルへの変換について説明する。
【００９０】
図２２に示すように、テーブル変換手段１０４は、グラフ作成手段１０３により作成された原因結果グラフをデシジョンテーブル５０に変換する。デシジョンテーブルの形式は、様々な形式が存在するが、本実施形態においては、図２２に示すデシジョンテーブル５０のように、入力条件を示す「入力」、および出力変数を示す「出力」の各列で構成されたテーブルを作成するものとする。ただし、デシジョンテーブルの形式は、上述に限定されるものではない。
【００９１】
具体的には、まず、テーブル変換手段１０４は、テーブルの「入力」（入力条件）の欄に、グラフ作成手段１０３により作成された原因結果グラフにおけるすべてのノードの入力条件をそれぞれ記載する。図２２においては、入力条件として、「ｓａｍｐｌｅ＿ｖａｒｉａｂｌｅ１＞６１」、「ｓａｍｐｌｅ＿ｖａｒｉａｂｌｅ２＝＝１」および「ｓａｍｐｌｅ＿ｆｌａｇｓ＝＝１」が記載されている。そして、テーブル変換手段１０４は、テーブルの「出力」（出力変数）の欄に、出力変数を記載する。図２２においては、出力変数として、「Ｏｕｔｐｕｔ＿ｄａｔａ」が記載されている。
【００９２】
次に、テーブル変換手段１０４は、原因結果グラフに基づいて、各入力条件が真値「Ｔ」（ｔｒｕｅ）であるか、偽値「Ｆ」（ｆａｌｓｅ）であるかの組み合わせによって、出力値が取り得る値である「１」および「０」のいずれとなるかについての対応関係を記載する。
【００９３】
原因結果グラフから、入力条件「ｓａｍｐｌｅ＿ｖａｒｉａｂｌｅ１＞６１」が真値「Ｔ」であれば、入力条件「ｓａｍｐｌｅ＿ｖａｒｉａｂｌｅ２＝＝１」および「ｓａｍｐｌｅ＿ｆｌａｇｓ＝＝１」の真偽に関わりなく、出力値は「１」となる。したがって、テーブル変換手段１０４は、テーブルに、入力条件「ｓａｍｐｌｅ＿ｖａｒｉａｂｌｅ１＞６１」が真値「Ｔ」の場合、出力値は「１」となる対応関係を記載する。このとき、テーブルにおける入力条件「ｓａｍｐｌｅ＿ｖａｒｉａｂｌｅ２＝＝１」および「ｓａｍｐｌｅ＿ｆｌａｇｓ＝＝１」の欄は空欄としている。
【００９４】
また、原因結果グラフから、入力条件「ｓａｍｐｌｅ＿ｖａｒｉａｂｌｅ１＞６１」が偽値「Ｆ」、かつ入力条件「ｓａｍｐｌｅ＿ｆｌａｇｓ＝＝１」が真値「Ｔ」の場合、入力条件「ｓａｍｐｌｅ＿ｖａｒｉａｂｌｅ２＝＝１」の真偽によって、出力値は異なる。すなわち、入力条件「ｓａｍｐｌｅ＿ｖａｒｉａｂｌｅ２＝＝１」が偽値「Ｆ」の場合、出力値は「１」となり、真値「Ｔ」の場合、出力値は「０」となる。したがって、テーブル変換手段１０４は、テーブルに、入力条件「ｓａｍｐｌｅ＿ｖａｒｉａｂｌｅ１＞６１」が偽値「Ｆ」、「ｓａｍｐｌｅ＿ｖａｒｉａｂｌｅ２＝＝１」が偽値「Ｆ」、かつ「ｓａｍｐｌｅ＿ｆｌａｇｓ＝＝１」が真値「Ｔ」の場合、出力値は「１」となる対応関係を記載する。また、テーブル変換手段１０４は、テーブルに、入力条件「ｓａｍｐｌｅ＿ｖａｒｉａｂｌｅ１＞６１」が偽値「Ｆ」、「ｓａｍｐｌｅ＿ｖａｒｉａｂｌｅ２＝＝１」が真値「Ｔ」、かつ「ｓａｍｐｌｅ＿ｆｌａｇｓ＝＝１」が真値「Ｔ」の場合、出力値は「０」となる対応関係を記載する。
【００９５】
また、原因結果グラフから、入力条件「ｓａｍｐｌｅ＿ｖａｒｉａｂｌｅ１＞６１」および「ｓａｍｐｌｅ＿ｆｌａｇｓ＝＝１」が偽値「Ｆ」であれば、入力条件「ｓａｍｐｌｅ＿ｖａｒｉａｂｌｅ２＝＝１」の真偽に関わりなく、出力値は「０」となる。したがって、テーブル変換手段１０４は、テーブルに、入力条件「ｓａｍｐｌｅ＿ｖａｒｉａｂｌｅ１＞６１」および「ｓａｍｐｌｅ＿ｆｌａｇｓ＝＝１」が偽値「Ｆ」の場合、出力値は「０」となる対応関係を記載する。このとき、テーブルにおける入力条件「ｓａｍｐｌｅ＿ｖａｒｉａｂｌｅ２＝＝１」の欄は空欄としている。
【００９６】
以上の動作によって、テーブル変換手段１０４は、グラフ作成手段１０３により作成された原因結果グラフを、図２２に示すデシジョンテーブル５０に変換する。このように、テーブル変換手段１０４は、等価変換手段１０２により導出された、縮約された出力変数についての方程式から、グラフ作成手段１０３により縮約された原因結果グラフが作成され、この縮約された原因結果グラフに基づいてデシジョンテーブル５０に変換している。これによって、グラフ作成手段１０３により作成された原因結果グラフから、最適化された入力条件の組み合わせから構成されたコンパクトなデシジョンテーブルを求めることができる。
【００９７】
なお、上述したソースコードからデシジョンテーブルを生成する方法は一例であり、これに限定されるものではなく、その他の方法でデシジョンテーブルを生成するものとしてもよい。
【００９８】
図２３は、複数のモジュールのデシジョンテーブルを共通仕様および差分仕様に分類する動作の一例を示すフローチャートである。図２４は、複数のモジュールのデシジョンテーブルを共通仕様および差分仕様に分類する動作を説明する図である。図２５は、入力条件に基づいて共通仕様および差分仕様のデシジョンテーブルに再構築される前のデシジョンテーブルの例を示す図である。図２６は、各デシジョンテーブルに共通する入力条件と固有の入力条件とを並び替えた状態を示す図である。図２７は、各デシジョンテーブルで共通する入力条件行を示す図である。図２８は、各デシジョンテーブルで共通する入力条件行を削除した状態を示す図である。図２９は、再構築された共通仕様のデシジョンテーブルを示す図である。図３０は、再構築された差分仕様のデシジョンテーブルを示す図である。図２３〜３０を参照しながら、デシジョンテーブルを共通仕様および差分仕様に分類する動作について説明する。図２３は、上述の図６のステップＳ１４において、分類手段１０５が、各モジュールのデシジョンテーブル群を、各モジュールの共通仕様のデシジョンテーブルと、各モジュール固有の差分仕様のデシジョンテーブルとに分類する動作の手順の詳細を示したものである。なお、図２３においては、簡便に記載するため、デシジョンテーブルを「ＤＴ」と記載している。
【００９９】
（ステップＳ１４０）
分類手段１０５の第１分類手段１０５ａは、いずれかのモジュールのみに含まれる関数があるか否かを判定する。いずれかのモジュールのみに含まれる関数がある場合（ステップＳ１４０：Ｙｅｓ）、ステップＳ１４１へ移行し、いずれかのモジュールのみに含まれる関数がない場合（ステップＳ１４０：Ｎｏ）、ステップＳ１４２へ移行する。
【０１００】
例えば、図２４に示すように、テーブル変換手段１０４によって、モジュールＡに関するデシジョンテーブル群８２ａ、および、モジュールＢに関するデシジョンテーブル群８２ｂが生成されている場合を考える。第１分類手段１０５ａは、モジュールＡ、Ｂのうちいずれか一方のモジュールのみに含まれる関数があるか否かを判定する。図２４の例では、関数ｄがモジュールＡのみに存在し、関数ｅがモジュールＢのみに存在するので、ステップＳ１４１へ移行することになる。
【０１０１】
（ステップＳ１４１）
第１分類手段１０５ａは、いずれかのモジュールのみに含まれる関数のデシジョンテーブルのすべてを、差分仕様のデシジョンテーブルに分類し、差分仕様グループに追加する。そして、ステップＳ１４２へ移行する。
【０１０２】
図２４の例では、第１分類手段１０５ａは、モジュールＡのみに存在する関数ｄのすべてのデシジョンテーブル（デシジョンテーブル群８４ａ）を差分仕様のデシジョンテーブルに分類し、モジュールＡの差分仕様グループに追加する。また、第１分類手段１０５ａは、モジュールＢのみに存在する関数ｅのすべてのデシジョンテーブル（デシジョンテーブル群８４ｂ）を差分仕様のデシジョンテーブルに分類し、モジュールＢの差分仕様グループに追加する。
【０１０３】
（ステップＳ１４２）
第１分類手段１０５ａは、テーブル変換手段１０４により生成された各モジュールのデシジョンテーブル群から、各モジュールにおいて同じ名称の関数のデシジョンテーブルを抽出する。ステップＳ１４１を経由する場合、テーブル変換手段１０４により生成された各モジュールのデシジョンテーブル群から、いずれかのモジュールのみに含まれる関数のデシジョンテーブルを除いた残りのデシジョンテーブルが抽出される。そして、ステップＳ１４３へ移行する。
【０１０４】
図２４の例では、第１分類手段１０５ａは、テーブル変換手段１０４により生成されたモジュールＡのデシジョンテーブル群８２ａから、関数ｄのデシジョンテーブルを除いた残りのデシジョンテーブル群８３ａを抽出する。また、第１分類手段１０５ａは、テーブル変換手段１０４により生成されたモジュールＢのデシジョンテーブル群８２ｂから、関数ｅのデシジョンテーブルを除いた残りのデシジョンテーブル群８３ｂを抽出する。
【０１０５】
（ステップＳ１４３）
分類手段１０５の第２分類手段１０５ｂは、第１分類手段１０５ａにより抽出された、各モジュールにおいて同じ名称の関数のデシジョンテーブル（第１デシジョンテーブル）について、いずれかのモジュールの関数のみに含まれる出力変数があるか否かを判定する。いずれかのモジュールの関数のみに含まれる出力変数がある場合（ステップＳ１４３：Ｙｅｓ）、ステップＳ１４４へ移行し、いずれかのモジュールの関数のみに含まれる出力変数がない場合（ステップＳ１４３：Ｎｏ）、ステップＳ１４５へ移行する。
【０１０６】
図２４の例では、第２分類手段１０５ｂは、第１分類手段１０５ａにより抽出されたデシジョンテーブル群８３ａ、８３ｂについて、ソースコードＡ、Ｂのうちいずれか一方のモジュールの関数のみに含まれる出力変数があるか否かを判定する。図２４の例では、モジュールＡの関数ａのみに含まれる出力変数が存在し、モジュールＢの関数ｂのみに含まれる出力変数が存在するので、ステップＳ１４４へ移行することになる。
【０１０７】
（ステップＳ１４４）
第２分類手段１０５ｂは、いずれかのモジュールの関数のみに含まれる出力変数のデシジョンテーブルのすべてを、差分仕様のデシジョンテーブルに分類し、差分仕様グループに追加する。そして、ステップＳ１４５へ移行する。
【０１０８】
図２４の例では、第２分類手段１０５ｂは、モジュールＡの関数のみに含まれる出力変数のデシジョンテーブル（デシジョンテーブル群８６ａ）を差分仕様のデシジョンテーブルに分類し、モジュールＡの差分仕様グループに追加する。また、第２分類手段１０５ｂは、モジュールＢの関数のみに含まれる出力変数のデシジョンテーブル（デシジョンテーブル群８６ｂ）を差分仕様のデシジョンテーブルに分類し、モジュールＢの差分仕様グループに追加する。
【０１０９】
（ステップＳ１４５）
第２分類手段１０５ｂは、第１分類手段１０５ａにより抽出された各モジュールにおいて同じ名称の関数のデシジョンテーブル群から、各モジュールの同じ名称の関数において同じ出力変数のデシジョンテーブルを抽出する。ステップＳ１４４を経由する場合、第１分類手段１０５ａにより抽出された各モジュールにおいて同じ名称の関数のデシジョンテーブルから、いずれかのモジュールの関数のみに含まれる出力変数のデシジョンテーブルを除いた残りのデシジョンテーブルが抽出される。そして、ステップＳ１４６へ移行する。
【０１１０】
図２４の例では、第２分類手段１０５ｂは、第１分類手段１０５ａにより抽出されたモジュールＡのデシジョンテーブル群８３ａから、モジュールＡの関数ａのみに含まれる出力変数のデシジョンテーブル（デシジョンテーブル群８６ａ）を除いた残りのデシジョンテーブル群８５ａを抽出する。また、第２分類手段１０５ｂは、第１分類手段１０５ａにより抽出されたモジュールＢのデシジョンテーブル群８３ｂから、モジュールＢの関数ｂのみに含まれる出力変数のデシジョンテーブル（デシジョンテーブル群８６ｂ）を除いた残りのデシジョンテーブル群８５ｂを抽出する。
【０１１１】
（ステップＳ１４６）
分類手段１０５の再構築手段１０５ｃは、第２分類手段１０５ｂにより抽出された同じ出力変数のデシジョンテーブル（第２デシジョンテーブル）について、入力条件および出力値を比較して、共通仕様のデシジョンテーブルと、差分仕様のデシジョンテーブルとに再構築する。以下、図２５〜３０を参照しながら、再構築の動作を具体的に説明する。
【０１１２】
図２５（ａ）および２５（ｂ）は、第２分類手段１０５ｂにより抽出されたモジュールＡ、Ｂについてのそれぞれ同じ出力変数「Ｏｕｔｐｕｔ１」のデシジョンテーブルの例（それぞれ、デシジョンテーブル９０ａ、９０ｂ）を示す。まず、再構築手段１０５ｃは、デシジョンテーブル９０ａ、９０ｂにおいて、入力条件が同じであるものを検索する。具体的には、再構築手段１０５ｃは、デシジョンテーブル９０ａ、９０ｂにおいて、入力条件「ｓｅｌｍｏｄｅ＝＝２」および「ｓｅｌｍｏｄｅ＝＝１」が同じであるものとして検出する。
【０１１３】
次に、再構築手段１０５ｃは、デシジョンテーブル９０ａ、９０ｂそれぞれにおいて、検出した入力条件の列を左側、かつ、同じ並び順になるようにソートして、図２６（ａ）および２６（ｂ）に示すデシジョンテーブル９１ａ、９１ｂを作成する。図２６（ａ）に示すデシジョンテーブル９１ａでは、左側、かつ、同じ並び順にソートされた入力条件を入力条件部４００ａに示している。また、図２６（ｂ）に示すデシジョンテーブル９１ｂでは、左側、かつ、同じ並び順にソートされた入力条件を入力条件部４００ｂに示している。
【０１１４】
次に、再構築手段１０５ｃは、デシジョンテーブル９１ａ、９１ｂそれぞれにおいて、入力条件の真偽の値と、出力変数の値（出力値）との組み合わせを示す各行（以下、入力条件行という）のうち、同じ入力条件行（第１組み合わせ）を探索する。このとき、入力条件の真偽の値が空欄（真偽の値が出力値に影響しない）であるものは考慮しないものとする。具体的には、再構築手段１０５ｃは、図２７（ａ）に示すデシジョンテーブル９１ａの入力条件行４０１ａと、図２７（ｂ）に示すデシジョンテーブル９１ｂの入力条件行４０１ｂとが、同じであるものとして検出する。すなわち、入力条件行４０１ａ、４０１ｂは、入力条件「ｓｅｌｍｏｄｅ＝＝１」が真値、かつ、出力変数「Ｏｕｔｐｕｔ１」の値が「１」で、同じ入力条件行となっている。再構築手段１０５ｃは、その他に、デシジョンテーブル９１ａの入力条件行４０２ａ、４０３ａと、デシジョンテーブル９１ｂの入力条件行４０２ｂ、４０３ｂとが、それぞれ同じ入力条件行であるものとして検出する。
【０１１５】
次に、再構築手段１０５ｃは、デシジョンテーブル９１ａから、検出した入力条件行４０１ａ〜４０３ａを抜き出す。図２８（ａ）に示すテーブル９２ａは、デシジョンテーブル９１ａから入力条件行４０１ａ〜４０３ａを抜き出した状態を示す。また、再構築手段１０５ｃは、デシジョンテーブル９１ｂから、検出した入力条件行４０１ｂ〜４０３ｂを抜き出す。図２８（ｂ）に示すテーブル９２ｂは、デシジョンテーブル９１ｂから入力条件行４０１ｂ〜４０３ｂを抜き出した状態を示す。
【０１１６】
次に、再構築手段１０５ｃは、デシジョンテーブル９１ａから抜き出した入力条件行４０１ａ〜４０３ａ（デシジョンテーブル９１ｂから抜き出した入力条件行４０１ｂ〜４０３ｂでもよい）をまとめて、図２９に示すデシジョンテーブル９３を再構築する。デシジョンテーブル９３は、モジュールＡ、Ｂそれぞれにおける出力変数「Ｏｕｔｐｕｔ１」の共通の振る舞い（変動）を示すデシジョンテーブルとなる。したがって、再構築手段１０５ｃは、再構築したデシジョンテーブル９３を、共通仕様のデシジョンテーブルとして分類し、共通仕様グループに追加する。
【０１１７】
次に、再構築手段１０５ｃは、図２８（ａ）で示したテーブル９２ａのように、デシジョンテーブル９１ａから入力条件行４０１ａ〜４０３ａを抜き出し、残った入力条件行（第２組み合わせ）について、真偽の値をテーブル内に有さなくなった入力条件（具体的には、入力条件「ｓｅｌｍｏｄｅ＝＝１」）の列を削除することによって、図３０（ａ）に示すデシジョンテーブル９４ａを再構築する。デシジョンテーブル９４ａは、モジュールＡのみにおける出力変数「Ｏｕｔｐｕｔ１」の振る舞い（変動）を示すデシジョンテーブルとなり、入力条件として「ｓｅｌｍｏｄｅ＝＝２」、「ｓｅｌｍｏｄｅ＝＝６」、「ｓｅｌｍｏｄｅ＝＝４」および「Ｏｕｔｐｕｔ１＜１５」を含む。したがって、再構築手段１０５ｃは、再構築したデシジョンテーブル９４ａを、モジュールＡの差分仕様のデシジョンテーブルとして分類し、モジュールＡの差分仕様グループに追加する。
【０１１８】
次に、再構築手段１０５ｃは、図２８（ｂ）で示したテーブル９２ｂのように、デシジョンテーブル９１ｂから入力条件行４０１ｂ〜４０３ｂを抜き出し、残った入力条件行（第２組み合わせ）について、真偽の値をテーブル内に有さなくなった入力条件（具体的には、入力条件「ｓｅｌｍｏｄｅ＝＝２」）の列を削除することによって、図３０（ｂ）に示すデシジョンテーブル９４ｂを再構築する。デシジョンテーブル９４ｂは、モジュールＢのみにおける出力変数「Ｏｕｔｐｕｔ１」の振る舞い（変動）を示すデシジョンテーブルとなり、入力条件として「ｓｅｌｍｏｄｅ＝＝１」、「ｓｅｌｍｏｄｅ＝＝４０」および「ｓｅｌｍｏｄｅ＝＝８０」を含む。したがって、再構築手段１０５ｃは、再構築したデシジョンテーブル９４ｂを、モジュールＢの差分仕様のデシジョンテーブルとして分類し、モジュールＢの差分仕様グループに追加する。
【０１１９】
図２４の例では、再構築手段１０５ｃは、第２分類手段１０５ｂにより抽出されたデシジョンテーブル群８５ａ、８５ｂから、共通仕様のデシジョンテーブルとしてデシジョンテーブル群８７を再構築し、デシジョンテーブル群８７を共通仕様グループに追加する。また、再構築手段１０５ｃは、第２分類手段１０５ｂにより抽出されたデシジョンテーブル群８５ａ、８５ｂから、モジュールＡの差分仕様のデシジョンテーブルとしてデシジョンテーブル群８８ａを再構築し、デシジョンテーブル群８８ａをモジュールＡの差分仕様グループに追加する。さらに、再構築手段１０５ｃは、第２分類手段１０５ｂにより抽出されたデシジョンテーブル群８５ａ、８５ｂから、モジュールＢの差分仕様のデシジョンテーブルとしてデシジョンテーブル群８８ｂを再構築し、デシジョンテーブル群８８ｂをモジュールＢの差分仕様グループに追加する。
【０１２０】
以上のように、図２４の例では、分類手段１０５は、ステップＳ１４６で再構築したデシジョンテーブル群８７を、共通仕様グループ９５に追加する。また、分類手段１０５は、ステップＳ１４１で分類したデシジョンテーブル群８４ａ、ステップＳ１４４で分類したデシジョンテーブル群８６ａ、および、ステップＳ１４６で再構築したデシジョンテーブル群８８ａを、モジュールＡの差分仕様グループ９６ａに追加する。また、分類手段１０５は、ステップＳ１４１で分類したデシジョンテーブル群８４ｂ、ステップＳ１４４で分類したデシジョンテーブル群８６ｂ、および、ステップＳ１４６で再構築したデシジョンテーブル群８８ｂを、モジュールＢの差分仕様グループ９６ｂに追加する。
【０１２１】
以上で、分類手段１０５によってデシジョンテーブルを共通仕様および差分仕様に分類する動作が終了する。
【０１２２】
なお、図２４の例では、２つのモジュールＡ、Ｂについて、デシジョンテーブルを共通仕様および差分仕様に分類する動作を示したが、モジュールは２つであることに限定されるものではなく、３つ以上のモジュールであってもよい。
【０１２３】
また、上述においては、共通仕様および差分仕様に分類されるデシジョンテーブルは、ＰＣ１（出力変数特定手段１０１、等価変換手段１０２、グラフ作成手段１０３およびテーブル変換手段１０４）により生成されたデシジョンテーブルを対象としたが、これに限定されるものではない。すなわち、ＰＣ１により生成されたデシジョンテーブルではないデシジョンテーブルについて、分類手段１０５の機能により共通仕様および差分仕様に分類されるものとしてもよい。
【０１２４】
以上の動作のように、本実施形態に係る仕様抽出装置（ＰＣ１）は、機能別に異なる複数のモジュールからデシジョンテーブルを生成し、各モジュールの共通仕様のデシジョンテーブルと、各モジュール固有の差分仕様のデシジョンテーブルとに分類するものとしている。これによって、機能別に異なるモジュールから、各モジュールの共通仕様および差分仕様を把握することができる。
【０１２５】
また、分類手段１０５は、等価変換手段１０２により導出された、縮約された出力変数についての方程式から、グラフ作成手段１０３により縮約された原因結果グラフが作成され、この原因結果グラフから、テーブル変換手段１０４によりデシジョンテーブルに変換され、このデシジョンテーブルを、共通仕様のデシジョンテーブルと、差分仕様のデシジョンテーブルとに分類している。すなわち、縮約された出力変数についての方程式に基づいて、原因結果グラフおよびデシジョンテーブルがそれぞれ生成され、そのデシジョンテーブルが分類されるので、モジュールのソースコードが長大であっても、出力変数ごとに最適化された入力条件を求めてコンパクトな共通仕様および差分仕様のデシジョンテーブルを求めることができる。
【０１２６】
なお、上述の実施形態に係るＰＣ１で実行されるプログラムは、ＲＯＭ等に予め組み込まれて提供される。また、上述の実施形態に係るＰＣ１で実行されるプログラムは、インストール可能な形式または実行可能な形式のファイルでＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、フレキシブルディスク（ＦＤ）、ＣＤ−Ｒ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ  Ｒｅｃｏｒｄａｂｌｅ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ）等のコンピュータで読み取り可能な記録媒体に記録してコンピュータプログラムプロダクトとして提供されるように構成してもよい。
【０１２７】
さらに、上述の実施形態に係るＰＣ１で実行されるプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、上述の実施形態に係るＰＣ１で実行されるプログラムをインターネット等のネットワーク経由で提供または配布するように構成してもよい。
【０１２８】
本実施形態にＰＣ１で実行されるプログラムは、コンピュータを上述したＰＣ１の各機能部として機能させ得る。このコンピュータは、ＣＰＵ（制御部１６）がコンピュータ読取可能な記憶媒体からプログラムを主記憶装置上に読み出して実行することができる。
【０１２９】
本発明の実施形態を説明したが、この実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。この新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換えおよび変更を行うことができる。この実施形態およびその変形は、発明の範囲および要旨に含まれるとともに、特許請求の範囲に記載された発明およびその均等の範囲に含まれる。
【符号の説明】
【０１３０】
１  ＰＣ
１１  通信部
１２  操作部
１３  表示部
１４  記憶部
１５  外部記憶装置
１６  制御部
１７  ＣＤ−ＲＯＭ
１８  ＣＤ−ＲＯＭドライブ
１９  バス
２０  対象モジュール
２１〜２４  処理後モジュール
２５  対象モジュール
２６  等価変換後モジュール
３０、３０ａ〜３０ｃ  サンプルコード
３１  定数伝播処理後コード
３１ａ  入力変数伝播処理後コード
３１ｂ  枝刈り処理後コード
３１ｃ  条件式情報伝播処理後コード
４０〜４５  ノード
４２ａ、４３ａ  ノード
５０  デシジョンテーブル
６０  ＯＲ記号部
６１  ＡＮＤ記号部
６２ａ、６２ｂ  ＮＯＴ記号部
７０  出力値ノード
８０、８０ａ  レガシーソースコード
８１ａ〜８１ｃ  デシジョンテーブル群
８２ａ〜８６ａ、８２ｂ〜８６ｂ  デシジョンテーブル群
８７  デシジョンテーブル群
８８ａ、８８ｂ  デシジョンテーブル群
９０ａ、９０ｂ、９１ａ、９１ｂ  デシジョンテーブル
９２ａ、９２ｂ  テーブル
９３、９４ａ、９４ｂ  デシジョンテーブル
９５  共通仕様グループ
９６ａ、９６ｂ  差分仕様グループ
１０１  出力変数特定手段
１０２  等価変換手段
１０３  グラフ作成手段
１０４  テーブル変換手段
１０５  分類手段
１０５ａ  第１分類手段
１０５ｂ  第２分類手段
１０５ｃ  再構築手段
２００、２０１  グローバル変数
２０２〜２０４  入力条件部
２０５、２０６、２０７ａ〜２０７ｃ、２０８  コード部
２１０  定数伝播処理後コード部
２１１  入力変数伝播処理後コード部
２１２ａ〜２１２ｃ、２１３  定数伝播処理後コード部
２１４  コード部
２２０  枝刈り処理後コード部
２２１  コード部
２３０  条件式情報伝播処理後コード部
２３１  コード部
２４０  条件式情報伝播処理後コード部
２４１  方程式
２５０  仮変数設定コード部
２６０  方程式コード部
３００〜３０３  コード部
３００ａ、３０１ａ  コード部
３００ｂ、３０１ｂ  コード部
３００ｃ  コード部
３１０〜３１２  定数伝播処理後コード部
３１０ａ  入力変数伝播処理後コード部
３１０ｂ  枝刈り処理後コード部
３１０ｃ  条件式情報伝播処理後コード部
４００ａ、４００ｂ  入力条件部
４０１ａ〜４０３ａ、４０１ｂ〜４０３ｂ  入力条件行
８００  プリプロセッサ
Ａ〜Ｃ  モジュール
【図１】
0006305356.tif 000002
【図２】
0006305356.tif 000003
【図３】
0006305356.tif 000004
【図４】
0006305356.tif 000005
【図５】
0006305356.tif 000006
【図６】
0006305356.tif 000007
【図７】
0006305356.tif 000008
【図８】
0006305356.tif 000009
【図９】
0006305356.tif 000010
【図１０】
0006305356.tif 000011
【図１１】
0006305356.tif 000012
【図１２】
0006305356.tif 000013
【図１３】
0006305356.tif 000014
【図１４】
0006305356.tif 000015
【図１５】
0006305356.tif 000016
【図１６】
0006305356.tif 000017
【図１７】
0006305356.tif 000018
【図１８】
0006305356.tif 000019
【図１９】
0006305356.tif 000020
【図２０】
0006305356.tif 000021
【図２１】
0006305356.tif 000022
【図２２】
0006305356.tif 000023
【図２３】
0006305356.tif 000024
【図２４】
0006305356.tif 000025
【図２５】
0006305356.tif 000026
【図２６】
0006305356.tif 000027
【図２７】
0006305356.tif 000028
【図２８】
0006305356.tif 000029
【図２９】
0006305356.tif 000030
【図３０】
0006305356.tif 000031