(58)【調査した分野】(Int.Cl.,DB名)
前記等価変換手段は、前記等価変換処理として、定数伝播処理、入力変数伝播処理および枝刈り処理のループ処理を実行することによって前記ソースコードを縮約し、該ソースコードの縮約が収束した時点で前記ループ処理を終了する請求項1に記載の仕様抽出装置。
前記等価変換手段は、導出した前記方程式が3項演算子を用いて表されている場合、前記方程式を、論理演算子を用いて表された式に変換する請求項1〜4のいずれか一項に記載の仕様抽出装置。
前記作成手段は、前記ノードを前記入力条件の論理演算を示す論理記号により結合させることによって前記原因結果グラフを作成する請求項1〜5のいずれか一項に記載の仕様抽出装置。
【発明を実施するための形態】
【0009】
以下に、図面を参照しながら、本発明の実施形態に係る仕様抽出装置、仕様抽出方法およびプログラムを詳細に説明する。
【0010】
また、以下の図面において、同一の部分には同一の符号が付してある。ただし、図面は模式的なものであり、厚みと平面寸法との関係、各層の厚みの比率等は現実のものとは異なる場合がある。したがって、具体的な厚みおよび寸法は以下の説明を参酌して判断すべきものである。
【0011】
図1は、実施形態に係るPCの構成図である。
図1を参照しながら、仕様抽出装置の一例であるPC1の構成について説明する。
【0012】
図1に示すように、仕様抽出装置の一例であるPC1は、通信部11と、操作部12と、表示部13と、記憶部14と、外部記憶装置15と、制御部16と、を備えている。上述の各部は、シリアルバス17によって接続され、互いにデータの送受信が可能となっている。
【0013】
通信部11は、外部機器と通信する装置である。通信部11は、例えば、NIC(Network Interface Card)等の通信装置によって実現される。通信部11の通信プロトコルとして、例えば、TCP(Transmission Control Protocol)/IP(Internet Protocol)またはUDP(User Datagram Protocol)/IP等を適用できる。
【0014】
操作部12は、ユーザによって制御部16に対して所定の処理を実行させるための操作入力を行う装置である。操作部12は、例えば、マウス、キーボード、テンキー、タッチパッド、またはタッチパネルにおける操作入力機能によって実現される。
【0015】
表示部13は、制御部16により実行されているアプリケーション画像等を表示する装置である。表示部13は、例えば、CRT(Cathode Ray Tube)ディスプレイ、液晶ディスプレイ、プラズマディスプレイまたは有機EL(Electroluminescence)ディスプレイ等によって実現される。
【0016】
記憶部14は、PC1で実行される各種プログラムおよびPC1で行われる各種処理に使用されるデータ等を記憶する装置である。記憶部14は、例えば、ROM(Read Only Memory)およびRAM(Random Access Memory)等の記憶装置によって実現される。
【0017】
外部記憶装置15は、プログラム、ソースコード、および各種データ等を蓄積して記憶する記憶装置である。外部記憶装置15は、例えば、HDD(Hard Disk Drive)、SSD(Solid State Drive)、光ディスク、または光磁気ディスク(MO:Magneto−Optical Disk)等の記憶装置によって実現される。
【0018】
制御部16は、PC1の各部の動作を制御する装置である。制御部16は、例えば、CPU(Central Processing Unit)およびASIC(Application Specific Integrated Circuit)等で実現される。
【0019】
図2は、制御部の機能ブロック図である。
図2を参照しながら、制御部16の機能ブロック構成について説明する。
【0020】
図2に示すように、制御部16は、各機能を実現する手段として、変数特定手段161(特定手段)と、等価変換手段162と、グラフ作成手段163(作成手段)と、テーブル変換手段164(変換手段)と、を備えている。上述の変数特定手段161、等価変換手段162、グラフ作成手段163およびテーブル変換手段164は、制御部16が外部記憶装置15等に記憶されたプログラムを記憶部14に読み出して実行することにより実現される。なお、変数特定手段161、等価変換手段162、グラフ作成手段163、テーブル変換手段164は、すべてがプログラムの実行により実現されることに限定されるものではなく、少なくともいずれかが、ハードウェア回路によって実現されるものとしてもよい。
【0021】
変数特定手段161は、仕様抽出動作の対象となるソフトウェアのモジュール(対象モジュール)のソースコードから出力変数(例えば、グローバル変数)を抽出し特定する機能を有する。ここで、グローバル変数とは、ソフトウェアの各モジュールの外で宣言された変数であり、いずれのモジュールにおいても参照および更新が可能な変数である。
【0022】
等価変換手段162は、モジュールのソースコードに対して等価変換処理を実行して、ソースコードを縮約し、出力変数についての方程式を導出する機能を有する。等価変換処理として、定数伝播処理、入力変数伝播処理、枝刈り処理および条件式情報伝播処理等があるが、各処理の詳細については後述する。
【0023】
グラフ作成手段163は、等価変換手段162により導出された出力変数についての方程式から、原因結果グラフを作成する機能を有する。ここで、原因結果グラフとは、1または複数の入力条件をノードとして、各ノードを論理記号により結合し、入力条件の組み合わせから出力値を導出するためのグラフである。原因結果グラフを作成する動作の詳細については後述する。
【0024】
テーブル変換手段164は、グラフ作成手段163により作成された原因結果グラフをデシジョンテーブル(仕様情報)に変換する機能を有する。ここで、仕様情報であるデシジョンテーブルとは、入力条件の組み合わせから出力変数の値(出力値)がどのような値をとるかを表す表であり、モジュールの振る舞いを表現する、すなわち、モジュールの仕様を決定付けるものである。本実施形態において、仕様の抽出とは、モジュールからデシジョンテーブルを求めることをいうものとする。なお、仕様情報としてデシジョンテーブルを挙げたが、これに限定されるものではなく、デシジョンテーブルの同様の情報を表形式以外の形式で表した情報を仕様情報としてもよい。
【0025】
図3は、モジュールが入力変数から出力変数の値を生成する動作を説明する図である。
図3を参照しながら、対象モジュール20について、モジュールとしての動作の概要を説明する。
【0026】
図3に示すように、対象モジュール20は、入力変数に格納された値(入力値)に基づいて、所定の処理を実行し、出力変数に出力値を格納して出力する機能を有する。対象モジュール20の入力変数の値は、対象モジュール20の外部から入力されるデータ(例えば、引数およびグローバル変数)である。対象モジュール20の出力変数の値は、対象モジュール20の外部に伝達されるデータ(例えば、更新されるグローバル変数)である。このような、対象モジュール20の入出力関係に基づいた動作の仕様を抽出することが、上述のデシジョンテーブルを求めることに相当する。
【0027】
図4は、実施形態に係るPCにおける仕様抽出動作を示すフローチャートである。
図5は、定数伝播処理を説明する図である。
図6は、入力変数伝播処理を説明する図である。
図7は、枝刈り処理を説明する図である。
図8は、条件式情報伝播処理を説明する図である。
図9は、等価変換処理のうち定数伝播処理、入力変数伝播処理および枝刈り処理のループ処理を示すフローチャートである。
図4〜9を参照しながら、仕様抽出装置であるPC1の仕様抽出動作の流れについて説明する。
【0028】
(ステップS10)
制御部16の変数特定手段161は、対象モジュールのソースコードにおける出力変数を特定する。具体的には、変数特定手段161は、出力変数として、ソースコードにおいて更新されているグローバル変数を特定する。そして、ステップS11へ進む。
【0029】
なお、変数特定手段161は、出力変数として、ソースコードにおける更新されるグローバル変数を特定するものとしているが、これに限定されるものではない。例えば、変数特定手段161は、対象モジュールのグローバル変数以外の戻り値を、出力変数として特定してもよい。
【0030】
(ステップS11)
制御部16の等価変換手段162は、対象モジュールのソースコードにおいて等価変換処理を実行し、出力変数についての方程式を導出する。具体的には、等価変換手段162は、等価変換処理として、定数伝播処理、入力変数伝播処理、枝刈り処理および条件式情報伝播処理を実行する。
【0031】
ここで、
図5を参照しながら、定数伝播処理の内容について説明する。定数伝播処理は、ソースコードにおいて、変数への定数の代入箇所を開始点として、その変数を読み取る(参照する)時点で有効かどうかを判定し、有効である場合、定数に置き換える処理である。
図5に示すサンプルコード30に対して、定数伝播処理を実行した結果のコードを定数伝播処理後コード31とする。
【0032】
まず、サンプルコード30のコード部300において、定数「1」が変数「A」に代入されているので、この代入している箇所を開始点とする。
【0033】
次に、サンプルコード30のコード部301において、変数「A」が参照されている。変数「A」には、コード部300において定数「1」が代入されており、コード部301において、変数「A」を参照すると定数「1」を得ることができるので、この変数「A」を定数「1」に置き換える。その結果、コード部301(「B=A+1;」)は、定数伝播処理後コード31の定数伝播処理後コード部310(「B=2;」)に置き換えることができる。
【0034】
次に、同様に、コード部301が、定数伝播処理後コード部310に置き換えられた結果、サンプルコード30のコード部302(「C=B;」)は、定数伝播処理後コード31の定数伝播処理後コード部311(「C=2;」)に置き換えることができる。
【0035】
そして、コード部300における変数「A」への定数「1」の代入から、サンプルコード30のコード部303(「Func(A);」)は、定数伝播処理後コード31の定数伝播処理後コード部312(「Func(1);」)に置き換えることができる。これは、関数「Func」の引数としての変数「A」が定数「1」に置き換えられたことを意味する。
【0036】
以上の動作にように、定数伝播処理は、ソースコード中の変数を定数に置き換えることによって、ソースコードを簡略化し縮約することができる。
【0037】
次に、
図6を参照しながら、入力変数伝播処理の内容について説明する。入力変数伝播処理は、グローバル変数である入力変数を使って計算される変数の箇所を起点として、その下流でその変数を用いる式において、その変数を入力変数に置き換える処理をいうものとする。
図6に示すサンプルコード30aに対して、入力変数伝播処理を実行した結果のコードを入力変数伝播処理後コード31aとする。
【0038】
まず、サンプルコード30aにおけるコード部300aにおいて、入力変数「g1」が変数「a1」に代入されているので、この代入計算されている箇所を起点とする。
【0039】
次に、サンプルコード30aのコード部301a(「a2=a1+1;」)において、コード部300aにおける変数「a1」が計算に用いられているので、定数伝播処理後コード31aの入力変数伝播処理後コード部310a(「a2=g1+1;」)に置き換えることができる。
【0040】
以上の動作のように、入力変数伝播処理は、ソースコード中の変数を入力変数に置き換えることによって、ソースコードを簡略化し縮約することができる。
【0041】
次に、
図7を参照しながら、枝刈り処理の内容について説明する。枝刈り処理は、定数伝播処理および入力変数伝播処理を実行した結果、分岐条件式を定数(if文であれば条件式、switch文であればcase値)に置き換えること等によって、複数の分岐の選択肢のうち、実行されることのない選択肢を削除する処理である。
図7に示すサンプルコード30bに対して、枝刈り処理を実行した結果のコードを枝刈り処理後コード31bとする。
【0042】
サンプルコード30bのコード部300bにおいて、変数「A」に定数「1」が入力されている。したがって、条件分岐式であるサンプルコード30bのコード部301bにおける条件(「A==0」)を満たすことはないので、分岐の選択肢の一つである「分岐1;」が実行されることはない。よって、この実行されることのない「分岐1;」を削除することによって、条件分岐式であるコード部301bは、枝刈り処理後コード31bの枝刈り処理後コード部310b(「分岐2;」)に置き換えることができる。
【0043】
以上のように、枝刈り処理は、数行に渡って記述された条件分岐式の記述量を減らす(
図7の例では1行)ことができるので、ソースコードを縮約することができる。
【0044】
次に、
図8を参照しながら、条件式情報伝播処理の内容について説明する。条件式情報伝播処理は、条件分岐式(if文およびswitch文等)を3項式に置き換える処理をいうものとする。
図8に示すサンプルコード30cに対して、条件式情報伝播処理を実行した結果のコードを条件式情報伝播処理後コード31cとする。
【0045】
サンプルコード30cのコード部300cはif文で表された条件分岐式である。このコード部300cを、3項演算子を用いた3項式に置き換えたのが条件式情報伝播処理後コード31cの条件式情報伝播処理後コード部310c(「b=(A?0:1);」)である。
【0046】
以上のように、条件式情報伝播処理は、数行に渡って記述された条件分岐式を1行の3項式に置き換えることができるので、ソースコードを簡略化し縮約することができる。
【0047】
次に、
図9を参照しながら、定数伝播処理、入力変数伝播処理および枝刈り処理をループ処理する動作を説明する。枝刈り処理は、上述のように、定数伝播処理および入力変数伝播処理を実行した後等に、分岐条件式を定数に置き換えることが可能となった場合に置き換えることによって、複数の分岐の選択肢のうち、実行されることのない選択肢を削除する処理である。なお、定数伝播処理、入力変数伝播処理および枝刈り処理の実行順序は任意でよい。
【0048】
また、枝刈り処理を実行することによって、条件分岐式が簡略化され、分岐の選択肢のうち特定の選択肢が条件分岐式外に出る、すなわち、特定の選択肢が常時実行されることになる。この枝刈り処理により常時実行されることになった選択肢は、新たに、定数伝播処理または入力変数伝播処理により縮約することができる可能性がある。
【0049】
以上のことから、
図9に示す手順で定数伝播処理、入力変数伝播処理および枝刈り処理を実行する。まず、等価変換手段162は、ソースコードに対して、定数伝播処理(ステップS110)および入力変数伝播処理(ステップS111)を実行する。次に、等価変換手段162は、定数伝播処理および入力変数伝播処理によって縮約されたソースコードに対して、枝刈り処理を実行する(ステップS112)。そして、等価変換手段162は、定数伝播処理、入力変数伝播処理および枝刈り処理を実行した結果、ソースコードの縮約が収束したか否か、すなわち、ソースコードがこれ以上縮約できないか否かを判定する。縮約が収束した場合(ステップS113:Yes)、処理を終了し、縮約が収束していない場合(ステップS113:No)、ステップS110へ戻る。
【0050】
以上のように、
図9に示す定数伝播処理、入力変数伝播処理および枝刈り処理のループ処理を実行することによって、ソースコードをより確実に縮約することができる。そして、等価変換手段162は、定数伝播処理、入力変数伝播処理および枝刈り処理のループ処理を実行した後、条件式情報伝播処理を実行することによって、3項式で表された、出力変数についての方程式を導出することができる。そして、ステップS12へ進む。
【0051】
(ステップS12)
制御部16のグラフ作成手段163は、等価変換手段162により導出された出力変数についての方程式から、原因結果グラフを作成する。具体的には、グラフ作成手段163は、出力変数についての方程式の各入力条件をノードとして、後述するように、OR記号部、AND記号部およびNOT記号部で結合することにより、出力変数の値(出力値)の振る舞いが把握できる原因結果グラフを作成する。ただし、グラフ作成手段163は、上述のように出力変数についての方程式から、入力条件式のノードがOR記号部、AND記号部およびNOT記号部によって結合された原因結果グラフを作成する。したがって、等価変換手段162は、3項演算子を用いて表された方程式を、論理演算子を用いて表された方程式に変換することが望ましい。そして、ステップS13へ進む。
【0052】
(ステップS13)
制御部16のテーブル変換手段164は、グラフ作成手段163により作成された原因結果グラフをデシジョンテーブルに変換する。具体的には、テーブル変換手段164は、上述の出力変数についての方程式の入力条件(原因結果グラフにおける入力条件のノード)の値の組み合わせごとに、出力変数の値(出力値)がどのように値をとるかについて表にしたデシジョンテーブルを作成する。そして、仕様抽出動作を終了する。
【0053】
図10は、モジュールのソースコードのサンプルを示す図である。
図11は、モジュールに対して出力変数を特定する処理を説明する図である。
図12は、モジュールに対して定数伝播処理および入力伝播処理を実行する動作を説明する図である。
図13は、モジュールに対して枝刈り処理を実行する動作を説明する図である。
図14は、モジュールに対して条件式情報伝播処理を実行する動作を説明する図である。
図15は、モジュールに対して条件式情報伝播処理を実行して方程式を得る動作を説明する図である。
図16は、3項演算子により表された方程式を論理演算子により表された方程式に変換する動作を説明する図である。
図10〜16を参照しながら、具体的なモジュールに対する等価変換手段162による等価変換処理について説明する。
【0054】
図10に示す対象モジュール20は、以下の等価変換処理を実行する前の具体的なサンプルコードである。なお、
図10においては、対象モジュール20のソースコードがC言語で記載されているが、これに限定されるものではなく、上述の等価変換処理が実行できるプログラム言語であればよい。
【0055】
まず、
図11に示すように、制御部16の変数特定手段161は、対象モジュール20において、更新されているグローバル変数、すなわち出力変数を特定する。
図11に示すように、対象モジュール20においては、グローバル変数としては、グローバル変数200(「Output_data」)およびグローバル変数201(「Global_status」)が宣言されている。変数特定手段161は、グローバル変数のうち、グローバル変数201は参照されているのみ(「sample_status1=Global_status;」)なので、出力変数ではなく入力変数であると判断する。また、変数特定手段161は、グローバル変数のうち、グローバル変数200は書き換えられている(更新されている)(例えば「Output_data=status2;」)ので出力変数であると特定する。
【0056】
対象モジュール20における入力条件部202〜204は、後述するように、等価変換手段162によって導出された出力変数についての方程式における入力条件となるコード部である。
【0057】
次に、
図12に示すように、コード部205において変数「status1」に定数「0」が代入されていることから、「status2=status1+1;」は「status2=1;」と置き換えることができる。したがって、等価変換手段162は、定数伝播処理によって、対象モジュール20のコード部205を、定数伝播処理後コード部210に置き換えることができる。
【0058】
また、変数「statsu2」には定数「1」が代入されていることから、コード部207a〜207c(「Output_data=status2;」)は、「Output_data=1;」に置き換えることができる。したがって、等価変換手段162は、定数伝播処理によって、対象モジュール20のコード部207a〜207cを、それぞれ定数伝播処理後コード部212a〜212cに置き換えることができる。
【0059】
また、変数「status2」には定数「1」が代入されていることから、If文の条件式を示すコード部208(「if((status2==0))」)は、「if((1==0))」に置き換えることができる。したがって、等価変換手段162は、定数伝播処理によって、対象モジュール20のコード部208を、定数伝播処理後コード部213に置き換えることができる。
【0060】
そして、コード部206において入力変数「Global_status」が変数「sample_status1」に入力されていることから、「sample_status2=sample_status1+1;」は「sample_status2=Global_status+1;」に置き換えることができる。したがって、等価変換手段162は、入力変数伝播処理によって、対象モジュール20のコード部206を、入力変数伝播処理後コード部211に置き換えることができる。
【0061】
以上のようにして、等価変換手段162は、定数伝播処理および入力変数伝播処理によって、対象モジュール20を処理後モジュール21に変換する。
【0062】
次に、
図13に示すように、分岐条件式であるコード部214において、
図12に示す定数伝播処理後コード部213に相当する条件の部分が「1==0」であるので、「Output_data=1;」は実行されることがない。したがって、等価変換手段162は、枝刈り処理によって、処理後モジュール21のコード部214を、枝刈り処理後コード部220(コードなし)に置き換えることができる。
【0063】
以上のようにして、等価変換手段162は、枝刈り処理によって、処理後モジュール21を処理後モジュール22に変換する。
【0064】
次に、
図14に示すように、条件分岐式であるコード部221は、3項演算子を用いた3項式に置き換えることができる。すなわち、等価変換手段162は、条件式情報伝播処理によって、処理後モジュール22のコード部221を、3項式である条件式情報伝播処理後コード部230(「Output_data=(!(sample_varialbe2==1)&&sample_flags==1)?1:0;」)に置き換えることができる。
【0065】
以上のようにして、等価変換手段162は、条件式情報伝播処理によって、処理後モジュール22を処理後モジュール23に変換する。
【0066】
次に、
図15に示すように、条件分岐式であるコード部231は、3項演算子を用いた3項式に置き換えることができる。すなわち、等価変換手段162は、条件式情報伝播処理によって、処理後モジュール23のコード部231を、3項式である条件式情報伝播処理後コード部240(「Output_data=sample_variable1>61?1:((!(sample_variable2==1)&&sample_flags==1)?1:0);」)に置き換えることができる。
【0067】
以上のようにして、等価変換手段162は、条件式情報伝播処理によって、処理後モジュール23を処理後モジュール24に変換する。この変換された処理後モジュール24の条件式情報伝播処理後コード部240の方程式が、等価変換手段162によって導出される出力変数ついての方程式となる。ただし、上述したように、後工程の原因結果グラフは、グラフ作成手段163により、入力条件式のノードがOR記号部、AND記号部およびNOT記号部によって結合されて作成される。したがって、
図16に示すように、等価変換手段162は、導出した条件式情報伝播処理後コード部240に示す3項演算子を用いて表された方程式を、論理演算子を用いて表された方程式241(「Output_data=(sample_variable1>61)||!(sample_variable1>61)&&!(sample_variable2==1)&&sample_flags==1」)に変換する。すなわち、方程式241が、等価変換手段162が最終的に導出する出力変数についての方程式である。
【0068】
以上のように、等価変換手段162による等価変換処理(定数伝播処理、入力変数伝播処理、枝刈り処理および条件式情報伝播処理)によって、モジュールのソースコードを縮約することができ、それによって縮約された出力変数について方程式を導出することができる。
【0069】
図17は、方程式の入力条件の論理式からOR記号部およびAND記号部によって中間的な原因結果グラフを導出する動作を説明する図である。
図18は、中間的な原因結果グラフからNOT記号部および同一式のノードの統合によって最終的な原因結果グラフを導出する動作を説明する図である。
図17および18を参照しながら、グラフ作成手段163による原因結果グラフの作成について説明する。
【0070】
まず、
図17に示すように、グラフ作成手段163は、等価変換手段162によって導出された
図16に示す方程式241の右辺(入力条件が論理演算子で結合された式)を抽出する。OR演算子(「||」)、AND演算子(「&&」)、NOT演算子(「!」)の順に演算の優先順位が高くなるので、グラフ作成手段163は、OR演算子によって結合された入力条件をそれぞれ抽出し、それぞれの入力条件をノードとして、各ノードを
図17に示すOR記号部60によって結合させる。具体的には、グラフ作成手段163は、方程式241の右辺のうちOR演算子で結合された入力条件「sample_variable1>61」および「!(sample_variable1>61)&&!(sample_variable2==1)&&sample_flags==1」を、それぞれノード40、41としてOR記号部60で結合させる。ノード40とノード41とのOR演算の結果が出力値となり、グラフ作成手段163は、OR記号部60の出力側と、出力値を示す出力値ノード70とを結合させる。
【0071】
次に、グラフ作成手段163は、生成した各ノードの入力条件において、AND演算子によって結合された入力条件をそれぞれ抽出し、それぞれの入力条件を新たなノードとして、各ノードを
図17に示すAND記号部61によって結合させる。具体的には、グラフ作成手段163は、ノード41の入力条件のうちAND演算子で結合された入力条件「!(sample_variable1>61)」、「!(sample_variable2==1)」および「sample_flags==1」を、それぞれ、ノード42〜44としてAND記号部61で結合させる。そして、グラフ作成手段163は、AND記号部61の出力側と、OR記号部60とを結合させる。
【0072】
次に、
図18に示すように、グラフ作成手段163は、生成した各ノードの入力条件において、NOT演算子を含む入力条件を抽出し、NOT演算子を外した入力条件を新たなノードとして、そのノードを
図18に示すNOT演算子と結合させる。具体的には、グラフ作成手段163は、ノード42の入力条件「!(sample_variable1>61)」にNOT演算子が含まれるので、NOT演算子を外した入力条件「sample_variable1>61」を新たなノードであるノード42aとする。そして、グラフ作成手段163は、ノード42aを、NOT記号部62aを介してAND記号部61に結合させる。また、グラフ作成手段163は、ノード43の入力条件「!(sample_variable2==1)」にNOT演算子が含まれるので、NOT演算子を外した入力条件「sample_variable2==1」を新たなノードであるノード43aとする。そして、グラフ作成手段163は、ノード43aを、NOT記号部62bを介してAND記号部61に結合させる。
【0073】
次に、グラフ作成手段163は、ここまでで生成したノードのうち、入力条件が同一式であるノードを1つのノードに統一する。具体的には、グラフ作成手段163は、ノード40およびノード42aの入力条件が「sample_variable1>61」で同一式なので、ノード40とノード42aとを1つのノード45に統一する。
【0074】
以上のように、グラフ作成手段163は、等価変換手段162より導出された方程式241から、右辺に含まれる入力条件をノードとしてOR記号部、AND記号部およびNOT記号部で結合させ、同一式の入力条件を1つノードに統一させることによって、原因結果グラフを作成する。
【0075】
以上のように、グラフ作成手段163は、出力変数の方程式における入力条件を抽出して、抽出した入力条件をノードとして、論理記号(OR記号部、AND記号部およびNOT記号部)によって結合し、共通のノードを統合している。これによって、等価変換手段162により導出された出力変数についての方程式から、縮約された原因結果グラフを作成することができる。
【0076】
図19は、原因結果グラフからデシジョンテーブルを作成する動作を説明する図である。
図19を参照しながら、テーブル変換手段164による原因結果グラフからデシジョンテーブルへの変換について説明する。
【0077】
図19に示すように、テーブル変換手段164は、グラフ作成手段163により作成された原因結果グラフをデシジョンテーブル50に変換する。デシジョンテーブルの形式は、様々な形式が存在するが、本実施形態においては、
図19に示すデシジョンテーブル50のように、「出力変数」、「入力条件」および「出力値」の各欄を設けたテーブルを作成するものとする。ただし、デシジョンテーブルの形式として、上述のものに限定するものではない。
【0078】
具体的には、まず、テーブル変換手段164は、テーブルの「出力変数」の欄に、等価変換手段162によって導出された方程式の出力変数「Output_data」を記載する。次に、テーブル変換手段164は、テーブルの「入力条件」の欄に、グラフ作成手段163により作成された原因結果グラフにおけるすべてのノードの入力条件を記載する。
図19においては、入力条件として、「sample_variable1>61」、「sample_variable2==1」および「sample_flags==1」が記載されている。そして、テーブル変換手段164は、テーブルの「出力値」の欄に、取り得る値である「1」および「0」を記載する。
【0079】
次に、テーブル変換手段164は、原因結果グラフに基づいて、各入力条件が真値「Y」であるか、偽値「N」であるかの組み合わせによって、出力値が「1」および「0」のいずれをとるかについての対応関係を記載する。
【0080】
原因結果グラフから、入力条件「sample_variable1>61」が真値「Y」であれば、入力条件「sample_variable2==1」および「sample_flags==1」の真偽に関わりなく、出力値は「1」となる。したがって、テーブル変換手段164は、テーブルに、入力条件「sample_variable1>61」が真値「Y」の場合、出力値は「1」となる対応関係を記載する。このとき、テーブルにおける入力条件「sample_variable2==1」および「sample_flags==1」の欄は空欄としている。
【0081】
また、原因結果グラフから、入力条件「sample_variable1>61」が偽値「N」、かつ入力条件「sample_flags==1」が真値「Y」の場合、入力条件「sample_variable2==1」の真偽によって、出力値は異なる。すなわち、入力条件「sample_variable2==1」が偽値「N」の場合、出力値は「1」となり、真値「Y」の場合、出力値は「0」となる。したがって、テーブル変換手段164は、テーブルに、入力条件「sample_variable1>61」が偽値「N」、「sample_variable2==1」が偽値「N」、かつ「sample_flags==1」が真値「Y」の場合、出力値は「1」となる対応関係を記載する。また、テーブル変換手段164は、テーブルに、入力条件「sample_variable1>61」が偽値「N」、「sample_variable2==1」が真値「Y」、かつ「sample_flags==1」が真値「Y」の場合、出力値は「0」となる対応関係を記載する。
【0082】
また、原因結果グラフから、入力条件「sample_variable1>61」および「sample_flags==1」が偽値「N」であれば、入力条件「sample_variable2==1」の真偽に関わりなく、出力値は「0」となる。したがって、テーブル変換手段164は、テーブルに、入力条件「sample_variable1>61」および「sample_flags==1」が偽値「N」の場合、出力値は「0」となる対応関係を記載する。このとき、テーブルにおける入力条件「sample_variable2==1」の欄は空欄としている。
【0083】
以上の動作によって、テーブル変換手段164は、グラフ作成手段163により作成された原因結果グラフを、
図19に示すデシジョンテーブル50に変換する。このように、テーブル変換手段164は、等価変換手段162により導出された、縮約された出力変数についての方程式から、グラフ作成手段163により縮約された原因結果グラフが作成され、この縮約された原因結果グラフに基づいてデシジョンテーブル50に変換している。これによって、グラフ作成手段163により作成された原因結果グラフから、最適化された入力条件の組み合わせから構成されたコンパクトなデシジョンテーブルを求めることができる。
【0084】
以上のように、本実施形態に係る仕様抽出装置(PC1)において、モジュールのソースコードに対して等価変換手段162による等価変換処理を実行することによって、ソースコードを縮約するものとしている。これによって、モジュールの振る舞いを表す出力変数についての方程式を縮約させることができる。
【0085】
また、等価変換手段162は、ソースコードの縮約が収束するまで定数伝播処理、入力変数伝播処理および枝刈り処理のループ処理を実行している。これによって、モジュールのソースコードをより確実に縮約することができる。
【0086】
また、グラフ作成手段163は、出力変数の方程式における入力条件を抽出して、抽出した入力条件をノードとして、論理記号(OR記号部、AND記号部およびNOT記号部)によって結合し、共通のノードを統合している。これによって、等価変換手段162により導出された出力変数についての方程式から、縮約された原因結果グラフを作成することができる。
【0087】
また、テーブル変換手段164は、等価変換手段162により導出された、縮約された出力変数についての方程式から、グラフ作成手段163により縮約された原因結果グラフが作成され、この縮約された原因結果グラフに基づいてデシジョンテーブル50に変換している。これによって、グラフ作成手段163により作成された原因結果グラフから、最適化された入力条件の組み合わせから構成されたコンパクトなデシジョンテーブルを求めることができる。すなわち、モジュールのソースコードが長大であっても、出力変数ごとに最適化された入力条件を求めてコンパクトなデシジョンテーブルを求めることができるので、モジュールについて有効な仕様の抽出を行うことができる。
【0088】
なお、モジュールのソースコードにおいて出力変数を使って計算する式がない場合、出力変数が等価変換手段162による等価変換処理のうちの枝刈り処理によって、出力変数についての方程式が削除されてしまう場合がある。この場合、
図20の対象モジュール25の仮変数設定コード部250に示すように、変数特定手段161により特定された出力変数(
図20では「V1」、「V2」および「V3」)を、仮変数(
図20では「tmp_V1」、「tmp_V2」および「tmp_V3」)に代入処理を実行すればよい。これによって、等価変換手段162によって対象モジュール25から等価変換後モジュール26に変換された場合、仮変数設定コード部250は、仮変数(実質は出力変数)についての方程式である方程式コード部260に変換され、方程式が削除されてしまうことを防止できる。
【0089】
本発明の実施形態を説明したが、この実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。この新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換えおよび変更を行うことができる。この実施形態およびその変形は、発明の範囲および要旨に含まれるとともに、特許請求の範囲に記載された発明およびその均等の範囲に含まれる。