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