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