特許第6305356号(P6305356)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 東芝ソリューション株式会社の特許一覧 ▶ 株式会社東芝の特許一覧 ▶ トヨタ自動車株式会社の特許一覧

特許6305356仕様抽出装置、仕様抽出方法およびプログラム
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6305356
(24)【登録日】2018年3月16日
(45)【発行日】2018年4月4日
(54)【発明の名称】仕様抽出装置、仕様抽出方法およびプログラム
(51)【国際特許分類】
   G06F 8/74 20180101AFI20180326BHJP
【FI】
   G06F9/06 620L
【請求項の数】10
【全頁数】30
(21)【出願番号】特願2015-15886(P2015-15886)
(22)【出願日】2015年1月29日
(65)【公開番号】特開2016-143073(P2016-143073A)
(43)【公開日】2016年8月8日
【審査請求日】2017年3月28日
(73)【特許権者】
【識別番号】301063496
【氏名又は名称】東芝デジタルソリューションズ株式会社
(73)【特許権者】
【識別番号】000003078
【氏名又は名称】株式会社東芝
(73)【特許権者】
【識別番号】000003207
【氏名又は名称】トヨタ自動車株式会社
(74)【代理人】
【識別番号】110002147
【氏名又は名称】特許業務法人酒井国際特許事務所
(72)【発明者】
【氏名】柳 朋宏
(72)【発明者】
【氏名】荒木 大
(72)【発明者】
【氏名】梅田 謹公
(72)【発明者】
【氏名】シー ルークウィセントフロレンド
(72)【発明者】
【氏名】川勝 則孝
(72)【発明者】
【氏名】佐藤 美裕
(72)【発明者】
【氏名】大野 徹
(72)【発明者】
【氏名】井筒 健児
(72)【発明者】
【氏名】渡邉 航介
(72)【発明者】
【氏名】長谷部 吉則
【審査官】 多胡 滋
(56)【参考文献】
【文献】 特開2013−148965(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/74
(57)【特許請求の範囲】
【請求項1】
複数種類のソースコードから、前記複数種類のソースコードに含まれる出力変数の変動を示す複数のデシジョンテーブルを生成する生成手段と、
前記複数のデシジョンテーブルから、特定のソースコードのみに含まれる関数に対応するデシジョンテーブルを抽出し、抽出した該デシジョンテーブルを該特定のソースコードの差分仕様情報として分類する第1分類手段と、
前記複数のデシジョンテーブルのうち、前記第1分類手段により抽出されたデシジョンテーブルを除いた第1デシジョンテーブルから、特定のソースコードの関数のみに含まれる前記出力変数のデシジョンテーブルを抽出し、抽出した該デシジョンテーブルを該特定のソースコードの差分仕様情報として分類する第2分類手段と、
前記第1デシジョンテーブルのうち、前記第2分類手段により抽出されたデシジョンテーブルを除いた第2デシジョンテーブルから、共通仕様情報としてのデシジョンテーブル、および、前記各ソースコードの差分仕様情報としてのデシジョンテーブルを再構築する再構築手段と、
を備えた仕様抽出装置。
【請求項2】
前記再構築手段は、
前記第2デシジョンテーブルのうち、同じ前記出力変数の複数のデシジョンテーブルについて、入力条件の真偽の値と、前記出力変数の値との組み合わせが同じである第1組み合わせを検出し、前記第1組み合わせから前記共通仕様情報としてのデシジョンテーブルを再構築し、
前記第2デシジョンテーブルのうち、同じ前記出力変数の複数のデシジョンテーブルについて、前記第1組み合わせ以外の組み合わせである第2組み合わせから、該デシジョンテーブル毎に差分仕様情報としてのデシジョンテーブルを再構築する請求項1に記載の仕様抽出装置。
【請求項3】
前記生成手段は、前記複数種類のソースコードに少なくとも含まれ、かつ、1のソースコードにおけるコンパイルスイッチにより区別される複数種類のソースコードから、前記複数のデシジョンテーブルを生成する請求項1に記載の仕様抽出装置。
【請求項4】
前記生成手段は、前記複数種類のソースコードに少なくとも含まれた別個独立の複数のソースコードから、前記複数のデシジョンテーブルを生成する請求項1に記載の仕様抽出装置。
【請求項5】
前記生成手段は、
前記ソースコードから前記出力変数を特定する特定手段と、
前記ソースコードに含まれる式を等価な式に置き換える等価変換処理を実行して、前記出力変数についての方程式を導出する等価変換手段と、
前記方程式から入力条件を抽出し、該入力条件をノードとする原因結果グラフを作成する作成手段と、
前記原因結果グラフを、前記入力条件の真偽の組み合わせと、前記出力変数の値との対応関係を示すデシジョンテーブルに変換する変換手段と、
を有する請求項1に記載の仕様抽出装置。
【請求項6】
前記等価変換手段は、前記等価変換処理として、定数伝播処理、入力変数伝播処理および枝刈り処理のループ処理を実行することによって前記ソースコードを縮約し、該ソースコードの縮約が収束した時点で前記ループ処理を終了する請求項5に記載の仕様抽出装置。
【請求項7】
前記等価変換手段は、縮約が収束した前記ソースコードに対して、条件式情報伝播処理を実行する請求項6に記載の仕様抽出装置。
【請求項8】
前記等価変換手段は、前記等価変換処理として、定数伝播処理、入力変数伝播処理、枝刈り処理および条件式情報伝播処理を実行する請求項5に記載の仕様抽出装置。
【請求項9】
複数種類のソースコードから、前記複数種類のソースコードに含まれる出力変数の変動を示す複数のデシジョンテーブルを生成する生成ステップと、
前記複数のデシジョンテーブルから、特定のソースコードのみに含まれる関数に対応するデシジョンテーブルを抽出し、抽出した該デシジョンテーブルを該特定のソースコードの差分仕様情報として分類する第1分類ステップと、
前記複数のデシジョンテーブルのうち、前記第1分類ステップで抽出したデシジョンテーブルを除いた第1デシジョンテーブルから、特定のソースコードの関数のみに含まれる前記出力変数のデシジョンテーブルを抽出し、抽出した該デシジョンテーブルを該特定のソースコードの差分仕様情報として分類する第2分類ステップと、
前記第1デシジョンテーブルのうち、前記第2分類ステップで抽出したデシジョンテーブルを除いた第2デシジョンテーブルから、共通仕様情報としてのデシジョンテーブル、および、前記各ソースコードの差分仕様情報としてのデシジョンテーブルを再構築する再構築ステップと、
を有する仕様抽出方法。
【請求項10】
複数種類のソースコードから、前記複数種類のソースコードに含まれる出力変数の変動を示す複数のデシジョンテーブルを生成する生成手段と、
前記複数のデシジョンテーブルから、特定のソースコードのみに含まれる関数に対応するデシジョンテーブルを抽出し、抽出した該デシジョンテーブルを該特定のソースコードの差分仕様情報として分類する第1分類手段と、
前記複数のデシジョンテーブルのうち、前記第1分類手段により抽出されたデシジョンテーブルを除いた第1デシジョンテーブルから、特定のソースコードの関数のみに含まれる前記出力変数のデシジョンテーブルを抽出し、抽出した該デシジョンテーブルを該特定のソースコードの差分仕様情報として分類する第2分類手段と、
前記第1デシジョンテーブルのうち、前記第2分類手段により抽出されたデシジョンテーブルを除いた第2デシジョンテーブルから、共通仕様情報としてのデシジョンテーブル、および、前記各ソースコードの差分仕様情報としてのデシジョンテーブルを再構築する再構築手段と、
をコンピュータに実現させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、仕様抽出装置、仕様抽出方法およびプログラムに関する。
【背景技術】
【0002】
ソフトウェア開発において、ソースコードは仕様書から作成される。この時、ソフトウェアの設計図となるドキュメントは、基本設計書および詳細設計書等が存在するが、通常、これらは機能(モジュール)毎に作成される。したがって、ソフトウェアの設計および製造を行う際には、機能毎の設計書からモジュールを製造し、それを組み合わせて一つのソフトウェアを製造する。ソフトウェアの仕様を抽出するには、ソフトウェアのソースコードからモジュールを区分けし、そのモジュールごとの振舞いを調査する必要がある。
【0003】
このような、ソースコードから、各目的または機能等で共通に実行されるコード部分、および、目的別または機能別等に応じて独自に実行される部分を分類する方法が提案されている。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2001−109621号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、上述のように、ソースコードを各目的または機能等で共通に実行されるコード部分、および、目的別または機能別等に応じて独自に実行される部分を分類するのみでは、それぞれ分類されたコード部分(モジュール)の振る舞いを簡易に示す仕様を分類するものではないので、各モジュールの振る舞いを把握するには、それぞれのモジュールに対して、別途、仕様を抽出しなければならないという問題がある。
【0006】
本発明は、上記に鑑みてなされたものであって、異なるモジュールのソースコードから各モジュールの共通仕様および差分仕様を把握することができる仕様抽出装置、仕様抽出方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【0007】
実施形態の仕様抽出装置は、生成手段と、第1分類手段と、第2分類手段と、再構築手段と、を備える。生成手段は、複数のソースコードから、複数のソースコードに含まれる出力変数の変動を示す複数のデシジョンテーブルを生成する。第1分類手段は、複数のデシジョンテーブルから、特定のソースコードのみに含まれる関数に対応するデシジョンテーブルを抽出し、抽出したデシジョンテーブルをその特定のソースコードの差分仕様情報として分類する。第2分類手段は、複数のデシジョンテーブルのうち、第1分類手段により抽出されたデシジョンテーブルを除いた第1デシジョンテーブルから、特定のソースコードの関数のみに含まれる出力変数のデシジョンテーブルを抽出し、抽出したデシジョンテーブルをその特定のソースコードの差分仕様情報として分類する。再構築手段は、第1デシジョンテーブルのうち、第2分類手段により抽出されたデシジョンテーブルを除いた第2デシジョンテーブルから、共通仕様情報としてのデシジョンテーブル、および、各ソースコードの差分仕様情報としてのデシジョンテーブルを再構築する。
【図面の簡単な説明】
【0008】
図1図1は、実施形態に係るPCのハードウェア構成の一例を示す図である。
図2図2は、実施形態に係るPCの機能ブロックの構成の一例を示す図である。
図3図3は、入力変数から出力変数の値を生成する動作を説明する図である。
図4図4は、複数のデシジョンテーブル群が作成されることを説明する図である。
図5図5は、コンパイルスイッチを含むソースコードの一例を示す図である。
図6図6は、仕様抽出動作の一例を示すフローチャートである。
図7図7は、定数伝播処理を説明する図である。
図8図8は、入力変数伝播処理を説明する図である。
図9図9は、枝刈り処理を説明する図である。
図10図10は、条件式情報伝播処理を説明する図である。
図11図11は、等価変換処理の一部を示すフローチャートである。
図12図12は、モジュールのソースコードのサンプルを示す図である。
図13図13は、出力変数を特定する処理を説明する図である。
図14図14は、定数伝播処理および入力伝播処理を説明する図である。
図15図15は、枝刈り処理を説明する図である。
図16図16は、条件式情報伝播処理を説明する図である。
図17図17は、条件式情報伝播処理を実行して方程式を得る動作を説明する図である。
図18図18は、論理演算子で表された方程式に変換する動作を説明する図である。
図19図19は、出力変数を仮変数に格納する動作を説明する図である。
図20図20は、中間的な原因結果グラフを導出する動作を説明する図である。
図21図21は、最終的な原因結果グラフを導出する動作を説明する図である。
図22図22は、デシジョンテーブルを作成する動作を説明する図である。
図23図23は、デシジョンテーブルの分類動作の一例を示すフローチャートである。
図24図24は、デシジョンテーブルの分類動作を説明する図である。
図25図25は、入力条件に基づいて再構築される前のデシジョンテーブルを示す図である。
図26図26は、各デシジョンテーブルで入力条件を並び替えた状態を示す図である。
図27図27は、各デシジョンテーブルで共通する入力条件行を示す図である。
図28図28は、共通する入力条件行を削除した状態を示す図である。
図29図29は、再構築された共通仕様のデシジョンテーブルを示す図である。
図30図30は、再構築された差分仕様のデシジョンテーブルを示す図である。
【発明を実施するための形態】
【0009】
以下の図面において、同一の部分には同一の符号が付してある。ただし、図面は模式的なものであり、厚みと平面寸法との関係、各層の厚みの比率等は現実のものとは異なる場合がある。したがって、具体的な厚みおよび寸法は以下の説明を参酌して判断すべきものである。
【0010】
図1は、実施形態に係るPCのハードウェア構成の一例を示す図である。図1を参照しながら、仕様抽出装置の一例であるPC1のハードウェア構成について説明する。
【0011】
図1に示すように、仕様抽出装置の一例であるPC1は、通信部11と、操作部12と、表示部13と、記憶部14と、外部記憶装置15と、制御部16と、CD−ROMドライブ18と、を備えている。上述の各部は、バス19によって接続され、互いにデータの送受信が可能となっている。
【0012】
通信部11は、外部機器と通信する装置である。通信部11は、例えば、NIC(Network Interface Card)等の通信装置によって実現される。通信部11の通信プロトコルとして、例えば、TCP(Transmission Control Protocol)/IP(Internet Protocol)またはUDP(User Datagram Protocol)/IP等を適用できる。
【0013】
操作部12は、ユーザによって制御部16に対して所定の処理を実行させるための操作入力を行う装置である。操作部12は、例えば、マウス、キーボード、テンキー、タッチパッド、またはタッチパネルにおける操作入力機能によって実現される。
【0014】
表示部13は、制御部16により実行されているアプリケーション画像等を表示する装置である。表示部13は、例えば、CRT(Cathode Ray Tube)ディスプレイ、液晶ディスプレイ、プラズマディスプレイまたは有機EL(Electroluminescence)ディスプレイ等によって実現される。
【0015】
記憶部14は、PC1で実行される各種プログラムおよびPC1で行われる各種処理に使用されるデータ等を記憶する装置である。記憶部14は、例えば、ROM(Read Only Memory)およびRAM(Random Access Memory)等の記憶装置によって実現される。
【0016】
外部記憶装置15は、プログラム、ソースコード、および各種データ等を蓄積して記憶する記憶装置である。外部記憶装置15は、例えば、HDD(Hard Disk Drive)、SSD(Solid State Drive)、光ディスク、または光磁気ディスク(MO:Magneto−Optical Disk)等の記憶装置によって実現される。
【0017】
制御部16は、PC1の各部の動作を制御する装置である。制御部16は、例えば、CPU(Central Processing Unit)およびASIC(Application Specific Integrated Circuit)等で実現される。
【0018】
CD−ROMドライブ18は、着脱自在な記憶媒体の一例としてのCD−ROM(Compact Disc Read Only Memory)17に対するデータの読み出しおよび書き込みを制御する装置である。なお、上述の着脱可能な記録媒体の他の例として、CD−R(Compact Disc Recordable)、DVD(Digital Versatile Disc)またはブルーレイディスク等のコンピュータで読み取り可能な記録媒体に記録して提供するように構成してもよい。
【0019】
図2は、実施形態に係るPCの機能ブロックの構成の一例を示す図である。図2を参照しながら、PC1の機能ブロックの構成について説明する。
【0020】
図2に示すように、PC1は、各機能を実現する手段として、出力変数特定手段101(特定手段)と、等価変換手段102と、グラフ作成手段103(作成手段)と、テーブル変換手段104(変換手段)と、分類手段105と、を有する。上述の出力変数特定手段101、等価変換手段102、グラフ作成手段103、テーブル変換手段104および分類手段105は、PC1の制御部16が外部記憶装置15等に記憶されたプログラムを記憶部14に読み出して実行することにより実現される。なお、出力変数特定手段101、等価変換手段102、グラフ作成手段103、テーブル変換手段104および分類手段105は、すべてがプログラムの実行により実現されることに限定されるものではなく、少なくともいずれかが、ハードウェア回路によって実現されるものとしてもよい。
【0021】
出力変数特定手段101は、仕様抽出動作の対象となるソフトウェアのモジュール(対象モジュール)のソースコードに含まれる各関数における出力変数(例えば、グローバル変数)を抽出して特定する機能部である。ここで、グローバル変数とは、ソフトウェアの各モジュールの外で宣言された変数であり、いずれのモジュールにおいても参照および更新が可能な変数である。
【0022】
等価変換手段102は、モジュールのソースコードに対して等価変換処理を実行して、ソースコードを縮約し、出力変数についての方程式を導出する機能部である。等価変換処理として、定数伝播処理、入力変数伝播処理、枝刈り処理および条件式情報伝播処理等があるが、各処理の詳細については後述する。
【0023】
グラフ作成手段103は、等価変換手段102により導出された出力変数についての方程式から、原因結果グラフを作成する機能部である。ここで、原因結果グラフとは、1または複数の入力条件をノードとして、各ノードを論理記号により結合し、入力条件の組み合わせから出力値を導出するためのグラフである。原因結果グラフを作成する動作の詳細については後述する。
【0024】
テーブル変換手段104は、グラフ作成手段103により作成された原因結果グラフをデシジョンテーブルに変換する機能部である。ここで、デシジョンテーブルとは、入力条件の組み合わせから出力変数の値(出力値)がどのような値をとるかを示す表であり、モジュールの振る舞いを表現する、すなわち、モジュールの仕様を決定付けるものである。
【0025】
分類手段105は、テーブル変換手段104により生成された各モジュールのデシジョンテーブル群を、各モジュールの共通仕様のデシジョンテーブル(共通仕様情報)と、各モジュール固有の差分仕様のデシジョンテーブル(差分仕様情報)とに分類する機能部である。ここで、共通仕様のデシジョンテーブルとは、各モジュールにおける共通の出力変数についての共通の振る舞い(変動)を示す入力条件と出力値との対応表である。また、差分仕様のデシジョンテーブルとは、各モジュールに含まれる出力変数についてのそのモジュールでの固有の振る舞いを示す入力条件と出力値との対応表である。分類手段105は、第1分類手段105aと、第2分類手段105bと、再構築手段105cと、を有する。本実施形態において、仕様の抽出とは、モジュールからデシジョンテーブルを求めることをいうものとする。なお、仕様情報としてデシジョンテーブルを挙げたが、これに限定されるものではなく、同様の情報を表形式以外の形式で表した情報を仕様情報としてもよい。
【0026】
第1分類手段105aは、テーブル変換手段104により生成された各モジュールのデシジョンテーブル群から、各モジュールのみに含まれる関数のデシジョンテーブルを抽出して分類し、各モジュール固有の差分仕様のデシジョンテーブルのグループ(以下、差分仕様グループという)に追加する機能部である。ここで、第1分類手段105aにより分類された各モジュールのみに含まれる関数のデシジョンテーブルを差分仕様グループに追加するのは、当該関数における出力変数の振る舞いが、当該関数を含むモジュールにおいて固有の振る舞いを示すからである。
【0027】
第2分類手段105bは、テーブル変換手段104により生成された各モジュールのデシジョンテーブル群のうち、第1分類手段105aにより分類された差分仕様のデシジョンテーブル以外のデシジョンテーブルから、各モジュールの関数に含まれる出力変数のうち、特定のモジュールのみに含まれる出力変数のデシジョンテーブルを抽出して分類する機能部である。第2分類手段105bは、分類した特定のモジュールのみに含まれる出力変数のデシジョンテーブルを、当該モジュールの差分仕様グループに追加する。
【0028】
再構築手段105cは、第2分類手段105bにより分類された差分仕様のデシジョンテーブル以外のデシジョンテーブルのうち、同じ出力変数のデシジョンテーブルにおいて、入力条件および出力値を比較して、共通仕様のデシジョンテーブルと、差分仕様のデシジョンテーブルとに再構築する機能部である。再構築手段105cは、再構築した共通仕様のデシジョンテーブルをグループ(以下、共通仕様グループ)にまとめる。また、再構築手段105cは、再構築した差分仕様のデシジョンテーブルを差分仕様グループに追加する。
【0029】
なお、「生成手段」は、上述の出力変数特定手段101、等価変換手段102、グラフ作成手段103およびテーブル変換手段104に相当する。
【0030】
また、本実施形態における「モジュール」とは、特定の機能を有するソフトウェア部品であり、その実体であるプログラムのコードを「ソースコード」と記載しているが、双方を明確に区別することを意図するものではない。
【0031】
図3は、モジュールが入力変数から出力変数の値を生成する動作を説明する図である。図3を参照しながら、対象モジュール20について、モジュールとしての動作の概要を説明する。
【0032】
図3に示すように、対象モジュール20は、入力変数に格納された値(入力値)に基づいて、所定の処理を実行し、出力変数に出力値を格納して出力する機能を有する。対象モジュール20の入力変数の値は、対象モジュール20の外部から入力されるデータであって、例えば、引数およびグローバル変数に格納される。対象モジュール20の出力変数の値は、対象モジュール20の外部に伝達されるデータであって、例えば、対象モジュール20内で更新されるグローバル変数の値である。このような、対象モジュール20の入出力関係に基づいた動作仕様を抽出することが、上述のデシジョンテーブルを求めることに相当する。
【0033】
図4は、ソースコードから複数のデシジョンテーブル群が作成されることを説明する図である。図5は、コンパイルスイッチを含むソースコードの一例を示す図である。図4および5を参照しながら、大本のソースコード(以下、便宜的に、レガシーソースコードという)からコンパイルスイッチの動作により、機能別または目的別に動作する複数のモジュールに分けられる、すなわち、複数のモジュールそれぞれに対応した複数種類のソースコードに区別されることについて説明する。
【0034】
ソースコードにおいては、コンパイルスイッチによって、機能別または目的別に、関数または関数内の一部のコードが選択されて実行される。このとき、図4では、コンパイルスイッチを実現するコードを含むソースコードを、レガシーソースコード80と称するものとする。レガシーソースコード80は、コンパイルスイッチによって、図4に示すように例えば、機能別または目的別に3種類のモジュールが実行されるものとする。この3種類のモジュールをそれぞれモジュールA〜Cとする。出力変数特定手段101、等価変換手段102、グラフ作成手段103およびテーブル変換手段104は、モジュールA〜Cそれぞれに対して処理を実行し、モジュールA〜Cそれぞれのデシジョンテーブルのまとまりであるデシジョンテーブル群81a〜81cを生成する。
【0035】
次に、図5に示すレガシーソースコード80aを参照しながら、コンパイルスイッチの具体的な実現方法を説明する。図5に示すように、コンパイルスイッチは、例えば、レガシーソースコード80aが含むプリプロセッサにより実現される。ここで、プリプロセッサとは、ソースコードをコンパイルする前に、ソースコードに対して行われる前処理を実現するコード(プログラム)をいう。
【0036】
レガシーソースコード80aは、プリプロセッサ800を有する。図5に示すプリプロセッサ800は、変数A01が真値である場合、レガシーソースコード80aに記載された関数funcAが実行されることを示し、関数funcAの戻り値が変数xに格納されることを示す。すなわち、変数A01が真値であるものとして、レガシーソースコード80aが実行された場合のモジュールの実体であるソースコードは、関数funcAを含むことになる。
【0037】
一方、変数A01が偽値である場合、レガシーソースコード80aに記載された関数funcAおよびfuncBが実行されることを示し、関数funcAおよびfuncBの戻り値がそれぞれ変数x、yに格納されることを示す。すなわち、変数A01が偽値であるものとして、レガシーソースコード80aが実行された場合のモジュールの実体であるソースコードは、関数funcAおよびfuncBを含むことになる。
【0038】
図6は、実施形態に係るPCにおける仕様抽出動作の一例を示すフローチャートである。図7は、定数伝播処理を説明する図である。図8は、入力変数伝播処理を説明する図である。図9は、枝刈り処理を説明する図である。図10は、条件式情報伝播処理を説明する図である。図11は、等価変換処理のうち定数伝播処理、入力変数伝播処理および枝刈り処理のループ処理を示すフローチャートである。図6〜11を参照しながら、仕様抽出装置であるPC1の仕様抽出動作の流れについて説明する。なお、以下の説明では、対象モジュールのソースコード(図4の例ではレガシーソースコード80)がコンパイルスイッチにより機能別または目的別に動作する複数のソースコードに分けられているものとする。
【0039】
(ステップS10)
出力変数特定手段101は、複数のソースコードにそれぞれ含まれる各関数における出力変数を特定する。具体的には、出力変数特定手段101は、出力変数として、複数のソースコードに含まれる各関数における、更新されているグローバル変数を特定する。そして、ステップS11へ移行する。
【0040】
(ステップS11)
等価変換手段102は、複数のソースコードにおいて等価変換処理を実行し、それぞれ出力変数についての方程式を導出する。具体的には、等価変換手段102は、等価変換処理として、定数伝播処理、入力変数伝播処理、枝刈り処理および条件式情報伝播処理を実行する。
【0041】
ここで、図7を参照しながら、定数伝播処理の内容について説明する。定数伝播処理は、ソースコードにおいて、変数への定数の代入箇所を開始点として、その変数を読み取る(参照する)時点で有効かどうかを判定し、有効である場合、定数に置き換える処理である。図7に示すサンプルコード30に対して、定数伝播処理を実行した結果のコードを定数伝播処理後コード31とする。
【0042】
まず、サンプルコード30のコード部300において、定数「1」が変数「A」に代入されているので、この代入している箇所を開始点とする。
【0043】
次に、サンプルコード30のコード部301において、変数「A」が参照されている。変数「A」には、コード部300において定数「1」が代入されており、コード部301において、変数「A」を参照すると定数「1」を得ることができるので、この変数「A」を定数「1」に置き換える。その結果、コード部301(「B=A+1;」)は、定数伝播処理後コード31の定数伝播処理後コード部310(「B=2;」)に置き換えることができる。
【0044】
次に、同様に、コード部301が、定数伝播処理後コード部310に置き換えられた結果、サンプルコード30のコード部302(「C=B;」)は、定数伝播処理後コード31の定数伝播処理後コード部311(「C=2;」)に置き換えることができる。
【0045】
そして、コード部300における変数「A」への定数「1」の代入から、サンプルコード30のコード部303(「Func(A);」)は、定数伝播処理後コード31の定数伝播処理後コード部312(「Func(1);」)に置き換えることができる。これは、関数「Func」の引数としての変数「A」が定数「1」に置き換えられたことを意味する。
【0046】
以上の動作のように、定数伝播処理は、ソースコード中の変数を定数に置き換えることによって、ソースコードを簡略化して縮約することができる。
【0047】
次に、図8を参照しながら、入力変数伝播処理の内容について説明する。入力変数伝播処理は、グローバル変数である入力変数を使って計算される変数の箇所を起点として、その下流でその変数を用いる式において、その変数を入力変数に置き換える処理をいうものとする。図8に示すサンプルコード30aに対して、入力変数伝播処理を実行した結果のコードを入力変数伝播処理後コード31aとする。
【0048】
まず、サンプルコード30aにおけるコード部300aにおいて、入力変数「g1」が変数「a1」に代入されているので、この代入計算されている箇所を起点とする。
【0049】
次に、サンプルコード30aのコード部301a(「a2=a1+1;」)において、コード部300aにおける変数「a1」が計算に用いられているので、入力変数伝播処理後コード31aの入力変数伝播処理後コード部310a(「a2=g1+1;」)に置き換えることができる。
【0050】
以上の動作のように、入力変数伝播処理は、ソースコード中の変数を入力変数に置き換えることによって、ソースコードを簡略化して縮約することができる。
【0051】
次に、図9を参照しながら、枝刈り処理の内容について説明する。枝刈り処理は、定数伝播処理および入力変数伝播処理を実行した結果、分岐条件式を定数(例えば、if文であれば条件式、switch文であればcase値)に置き換えること等によって、複数の分岐の選択肢のうち、実行されることのない選択肢を削除する処理である。図9に示すサンプルコード30bに対して、枝刈り処理を実行した結果のコードを枝刈り処理後コード31bとする。
【0052】
サンプルコード30bのコード部300bにおいて、変数「A」に定数「1」が入力されている。したがって、条件分岐式であるサンプルコード30bのコード部301bにおける条件(「A==0」)を満たすことはないので、分岐の選択肢の一つである「分岐1;」が実行されることはない。よって、この実行されることのない「分岐1;」を削除することによって、条件分岐式であるコード部301bは、枝刈り処理後コード31bの枝刈り処理後コード部310b(「分岐2;」)に置き換えることができる。
【0053】
以上のように、枝刈り処理は、数行に渡って記述された条件分岐式の記述量を減らす(図9の例では1行)ことができるので、ソースコードを簡略化して縮約することができる。
【0054】
次に、図10を参照しながら、条件式情報伝播処理の内容について説明する。条件式情報伝播処理は、条件分岐式(例えば、if文およびswitch文等)を3項式に置き換える処理をいうものとする。図10に示すサンプルコード30cに対して、条件式情報伝播処理を実行した結果のコードを条件式情報伝播処理後コード31cとする。
【0055】
サンプルコード30cのコード部300cは、if文で表された条件分岐式である。このコード部300cを、3項演算子を用いた3項式に置き換えたのが条件式情報伝播処理後コード31cの条件式情報伝播処理後コード部310c(「b=(A?0:1);」)である。
【0056】
以上のように、条件式情報伝播処理は、数行に渡って記述された条件分岐式を1行の3項式に置き換えることができるので、ソースコードを簡略化して縮約することができる。
【0057】
次に、図11を参照しながら、定数伝播処理、入力変数伝播処理および枝刈り処理をループ処理する動作を説明する。枝刈り処理は、上述のように、定数伝播処理および入力変数伝播処理を実行した後等に、分岐条件式を定数に置き換えることが可能となった場合に置き換えることによって、複数の分岐の選択肢のうち、実行されることのない選択肢を削除する処理である。なお、定数伝播処理、入力変数伝播処理および枝刈り処理の実行順序は任意でよい。
【0058】
また、枝刈り処理を実行することによって、条件分岐式が簡略化され、分岐の選択肢のうち特定の選択肢が条件分岐式外に出る、すなわち、特定の選択肢が常時実行されることになる。この枝刈り処理により常時実行されることになった選択肢は、新たに、定数伝播処理または入力変数伝播処理により縮約することができる可能性がある。
【0059】
以上のことから、図11に示す手順で定数伝播処理、入力変数伝播処理および枝刈り処理を実行する。まず、等価変換手段102は、ソースコードに対して、定数伝播処理(ステップS110)および入力変数伝播処理(ステップS111)を実行する。次に、等価変換手段102は、定数伝播処理および入力変数伝播処理によって縮約されたソースコードに対して、枝刈り処理を実行する(ステップS112)。そして、等価変換手段102は、定数伝播処理、入力変数伝播処理および枝刈り処理を実行した結果、ソースコードの縮約が収束したか否か、すなわち、ソースコードがこれ以上縮約できないか否かを判定する。縮約が収束した場合(ステップS113:Yes)、処理を終了し、縮約が収束していない場合(ステップS113:No)、ステップS110へ戻る。
【0060】
以上のように、図11に示す定数伝播処理、入力変数伝播処理および枝刈り処理のループ処理を実行することによって、ソースコードをより確実に縮約することができる。そして、等価変換手段102は、定数伝播処理、入力変数伝播処理および枝刈り処理のループ処理を実行した後、条件式情報伝播処理を実行することによって、3項式で表された、出力変数についての方程式を導出することができる。そして、ステップS12へ移行する。
【0061】
(ステップS12)
グラフ作成手段103は、等価変換手段102により導出された出力変数についての方程式から、原因結果グラフを作成する。具体的には、グラフ作成手段103は、出力変数についての方程式の各入力条件をノードとして、後述するように、OR記号部、AND記号部およびNOT記号部で結合することにより、出力変数の値(出力値)の振る舞いを把握するための原因結果グラフを作成する。ただし、グラフ作成手段103は、上述のように出力変数についての方程式から、入力条件式のノードがOR記号部、AND記号部およびNOT記号部によって結合された原因結果グラフを作成する。したがって、等価変換手段102は、3項演算子を用いて表された方程式を、論理演算子を用いて表された方程式に変換することが望ましい。また、グラフ作成手段103による出力変数についての方程式から原因結果グラフへの作成手順の詳細は後述する。そして、ステップS13へ移行する。
【0062】
(ステップS13)
テーブル変換手段104は、グラフ作成手段103により作成された原因結果グラフをデシジョンテーブルに変換する。具体的には、テーブル変換手段104は、上述の出力変数についての方程式の入力条件(原因結果グラフにおける入力条件のノード)の値の組み合わせごとに、出力変数の値(出力値)がどのように値をとるかについて表にしたデシジョンテーブルを作成する。また、テーブル変換手段104による原因結果グラフからデシジョンテーブルへの変換手順の詳細は後述する。
【0063】
(ステップS14)
分類手段105は、テーブル変換手段104により生成された各モジュールのデシジョンテーブル群を、各モジュールの共通仕様のデシジョンテーブルと、各モジュール固有の差分仕様のデシジョンテーブルとに分類する。この分類手段105による共通仕様のデシジョンテーブルおよび差分仕様のデシジョンテーブルの分類手順の詳細は後述する。そして、仕様抽出動作を終了する。
【0064】
なお、上述の仕様抽出動作は、対象モジュールのソースコードがコンパイルスイッチで分けられた複数のソースコードを対象に実行されるものとしたが、これに限定されるものではなく、別個独立の複数のソースコードを対象に実行されるものとしてもよく、または、これら双方を含むものであってもよい。
【0065】
図12は、仕様抽出動作の対象となるモジュールのソースコードのサンプルを示す図である。図13は、モジュールに対して出力変数を特定する処理を説明する図である。図14は、モジュールに対して定数伝播処理および入力伝播処理を実行する動作を説明する図である。図15は、モジュールに対して枝刈り処理を実行する動作を説明する図である。図16は、モジュールに対して条件式情報伝播処理を実行する動作を説明する図である。図17は、モジュールに対して条件式情報伝播処理を実行して方程式を得る動作を説明する図である。図18は、3項演算子により表された方程式を論理演算子により表された方程式に変換する動作を説明する図である。図19は、等価変換処理を実行する前に出力変数を仮変数に設定する動作を説明する図である。図12〜19を参照しながら、具体的なモジュールに対する等価変換手段102による等価変換処理について説明する。
【0066】
図12に示す対象モジュール20は、以下の等価変換処理を実行する前の具体的なサンプルコードである。なお、図12においては、対象モジュール20のソースコードがC言語で記載されているが、これに限定されるものではなく、上述の等価変換処理が実行できるプログラム言語であればよい。
【0067】
まず、図13に示すように、出力変数特定手段101は、対象モジュール20において、更新されているグローバル変数、すなわち出力変数を特定する。図13に示すように、対象モジュール20においては、グローバル変数としては、グローバル変数200(「Output_data」)およびグローバル変数201(「Global_status」)が宣言されている。出力変数特定手段101は、グローバル変数のうち、グローバル変数201は参照されているのみ(「sample_status1=Global_status;」)なので、出力変数ではなく入力変数であると判断する。また、出力変数特定手段101は、グローバル変数のうち、グローバル変数200は書き換えられている(更新されている)(例えば「Output_data=status2;」)ので出力変数であると特定する。
【0068】
対象モジュール20における入力条件部202〜204は、後述するように、等価変換手段102によって導出された出力変数についての方程式における入力条件となるコード部である。
【0069】
次に、図14に示すように、コード部205において変数「status1」に定数「0」が代入されていることから、「status2=status1+1;」は「status2=1;」と置き換えることができる。したがって、等価変換手段102は、定数伝播処理によって、対象モジュール20のコード部205を、定数伝播処理後コード部210に置き換えることができる。
【0070】
また、変数「status2」には定数「1」が代入されていることから、コード部207a〜207c(「Output_data=status2;」)は、「Output_data=1;」に置き換えることができる。したがって、等価変換手段102は、定数伝播処理によって、対象モジュール20のコード部207a〜207cを、それぞれ定数伝播処理後コード部212a〜212cに置き換えることができる。
【0071】
また、変数「status2」には定数「1」が代入されていることから、if文の条件式を示すコード部208(「if((status2==0))」)は、「if((1==0))」に置き換えることができる。したがって、等価変換手段102は、定数伝播処理によって、対象モジュール20のコード部208を、定数伝播処理後コード部213に置き換えることができる。
【0072】
また、コード部206において入力変数「Global_status」が変数「sample_status1」に入力されていることから、「sample_status2=sample_status1+1;」は「sample_status2=Global_status+1;」に置き換えることができる。したがって、等価変換手段102は、入力変数伝播処理によって、対象モジュール20のコード部206を、入力変数伝播処理後コード部211に置き換えることができる。
【0073】
以上のようにして、等価変換手段102は、定数伝播処理および入力変数伝播処理によって、対象モジュール20を処理後モジュール21に変換する。
【0074】
次に、図15に示すように、分岐条件式であるコード部214において、図14に示す定数伝播処理後コード部213に相当する条件の部分が「1==0」であるので、「Output_data=1;」は実行されることがない。したがって、等価変換手段102は、枝刈り処理によって、処理後モジュール21のコード部214を、枝刈り処理後コード部220(コードなし)に置き換えることができる。
【0075】
以上のようにして、等価変換手段102は、枝刈り処理によって、処理後モジュール21を処理後モジュール22に変換する。
【0076】
次に、図16に示すように、条件分岐式であるコード部221は、3項演算子を用いた3項式に置き換えることができる。すなわち、等価変換手段102は、条件式情報伝播処理によって、処理後モジュール22のコード部221を、3項式である条件式情報伝播処理後コード部230(「Output_data=(!(sample_variable2==1)&&sample_flags==1)?1:0;」)に置き換えることができる。
【0077】
以上のようにして、等価変換手段102は、条件式情報伝播処理によって、処理後モジュール22を処理後モジュール23に変換する。
【0078】
次に、図17に示すように、条件分岐式であるコード部231は、3項演算子を用いた3項式に置き換えることができる。すなわち、等価変換手段102は、条件式情報伝播処理によって、処理後モジュール23のコード部231を、3項式である条件式情報伝播処理後コード部240(「Output_data=sample_variable1>61?1:((!(sample_variable2==1)&&sample_flags==1)?1:0);」)に置き換えることができる。
【0079】
以上のようにして、等価変換手段102は、条件式情報伝播処理によって、処理後モジュール23を処理後モジュール24に変換する。この変換された処理後モジュール24の条件式情報伝播処理後コード部240の方程式が、等価変換手段102によって導出される出力変数についての方程式となる。ただし、上述したように、後工程の原因結果グラフは、グラフ作成手段103により、入力条件式のノードがOR記号部、AND記号部およびNOT記号部によって結合されて作成される。したがって、図18に示すように、等価変換手段102は、導出した条件式情報伝播処理後コード部240に示す3項演算子を用いて表された方程式を、論理演算子を用いて表された方程式241(「Output_data=(sample_variable1>61)||!(sample_variable1>61)&&!(sample_variable2==1)&&sample_flags==1」)に変換する。すなわち、方程式241が、等価変換手段102が最終的に導出する出力変数についての方程式である。
【0080】
以上のように、等価変換手段102による等価変換処理(定数伝播処理、入力変数伝播処理、枝刈り処理および条件式情報伝播処理)によって、モジュールのソースコードを縮約することができ、それによって縮約された出力変数についての方程式を導出することができる。
【0081】
なお、モジュールのソースコードにおいて出力変数を使って計算する式がない場合、出力変数が等価変換手段102による等価変換処理のうちの枝刈り処理によって、出力変数についての方程式が削除されてしまう場合がある。この場合、図19の対象モジュール25の仮変数設定コード部250に示すように、出力変数特定手段101により特定された出力変数(図19では「V1」、「V2」および「V3」)を、仮変数(図19では「tmp_V1」、「tmp_V2」および「tmp_V3」)に代入処理を実行すればよい。これによって、等価変換手段102によって対象モジュール25から等価変換後モジュール26に変換された場合、仮変数設定コード部250は、仮変数(実質は出力変数)についての方程式である方程式コード部260に変換され、方程式が削除されてしまうことを防止できる。
【0082】
図20は、方程式の入力条件の論理式からOR記号部およびAND記号部によって中間的な原因結果グラフを導出する動作を説明する図である。図21は、中間的な原因結果グラフからNOT記号部および同一式のノードの統合によって最終的な原因結果グラフを導出する動作を説明する図である。図20および21を参照しながら、グラフ作成手段103による原因結果グラフの作成について説明する。
【0083】
まず、図20に示すように、グラフ作成手段103は、等価変換手段102によって導出された図18に示す方程式241の右辺(入力条件が論理演算子で結合された式)を抽出する。OR演算子(「||」)、AND演算子(「&&」)、NOT演算子(「!」)の順に演算の優先順位が高くなるので、グラフ作成手段103は、OR演算子によって結合された入力条件をそれぞれ抽出し、それぞれの入力条件をノードとして、各ノードを図20に示すOR記号部60によって結合させる。具体的には、グラフ作成手段103は、方程式241の右辺のうちOR演算子で結合された入力条件「sample_variable1>61」および「!(sample_variable1>61)&&!(sample_variable2==1)&&sample_flags==1」を、それぞれノード40、41としてOR記号部60で結合させる。ノード40とノード41とのOR演算の結果が出力値となり、グラフ作成手段103は、OR記号部60の出力側と、出力値を示す出力値ノード70とを結合させる。
【0084】
次に、グラフ作成手段103は、生成した各ノードの入力条件において、AND演算子によって結合された入力条件をそれぞれ抽出し、それぞれの入力条件を新たなノードとして、各ノードを図20に示すAND記号部61によって結合させる。具体的には、グラフ作成手段103は、ノード41の入力条件のうちAND演算子で結合された入力条件「!(sample_variable1>61)」、「!(sample_variable2==1)」および「sample_flags==1」を、それぞれ、ノード42〜44としてAND記号部61で結合させる。そして、グラフ作成手段103は、AND記号部61の出力側と、OR記号部60とを結合させる。
【0085】
次に、図21に示すように、グラフ作成手段103は、生成した各ノードの入力条件において、NOT演算子を含む入力条件を抽出し、NOT演算子を外した入力条件を新たなノードとして、そのノードを図21に示すNOT演算子と結合させる。具体的には、グラフ作成手段103は、ノード42の入力条件「!(sample_variable1>61)」にNOT演算子が含まれるので、NOT演算子を外した入力条件「sample_variable1>61」を新たなノードであるノード42aとする。そして、グラフ作成手段103は、ノード42aを、NOT記号部62aを介してAND記号部61に結合させる。また、グラフ作成手段103は、ノード43の入力条件「!(sample_variable2==1)」にNOT演算子が含まれるので、NOT演算子を外した入力条件「sample_variable2==1」を新たなノードであるノード43aとする。そして、グラフ作成手段103は、ノード43aを、NOT記号部62bを介してAND記号部61に結合させる。
【0086】
次に、グラフ作成手段103は、ここまでで生成したノードのうち、入力条件が同一式であるノードを1つのノードに統一する。具体的には、グラフ作成手段103は、ノード40およびノード42aの入力条件が「sample_variable1>61」で同一式なので、ノード40とノード42aとを1つのノード45に統一する。
【0087】
このように、グラフ作成手段103は、等価変換手段102により導出された方程式241から、右辺に含まれる入力条件をノードとしてOR記号部、AND記号部およびNOT記号部で結合させ、同一式の入力条件を1つのノードに統一させることによって、原因結果グラフを作成する。
【0088】
以上のように、グラフ作成手段103は、出力変数の方程式における入力条件を抽出して、抽出した入力条件をノードとして、論理記号(OR記号部、AND記号部およびNOT記号部)によって結合し、共通のノードを統合している。これによって、等価変換手段102により導出された出力変数についての方程式から、縮約された原因結果グラフを作成することができる。
【0089】
図22は、原因結果グラフからデシジョンテーブルを作成する動作を説明する図である。図22を参照しながら、テーブル変換手段104による原因結果グラフからデシジョンテーブルへの変換について説明する。
【0090】
図22に示すように、テーブル変換手段104は、グラフ作成手段103により作成された原因結果グラフをデシジョンテーブル50に変換する。デシジョンテーブルの形式は、様々な形式が存在するが、本実施形態においては、図22に示すデシジョンテーブル50のように、入力条件を示す「入力」、および出力変数を示す「出力」の各列で構成されたテーブルを作成するものとする。ただし、デシジョンテーブルの形式は、上述に限定されるものではない。
【0091】
具体的には、まず、テーブル変換手段104は、テーブルの「入力」(入力条件)の欄に、グラフ作成手段103により作成された原因結果グラフにおけるすべてのノードの入力条件をそれぞれ記載する。図22においては、入力条件として、「sample_variable1>61」、「sample_variable2==1」および「sample_flags==1」が記載されている。そして、テーブル変換手段104は、テーブルの「出力」(出力変数)の欄に、出力変数を記載する。図22においては、出力変数として、「Output_data」が記載されている。
【0092】
次に、テーブル変換手段104は、原因結果グラフに基づいて、各入力条件が真値「T」(true)であるか、偽値「F」(false)であるかの組み合わせによって、出力値が取り得る値である「1」および「0」のいずれとなるかについての対応関係を記載する。
【0093】
原因結果グラフから、入力条件「sample_variable1>61」が真値「T」であれば、入力条件「sample_variable2==1」および「sample_flags==1」の真偽に関わりなく、出力値は「1」となる。したがって、テーブル変換手段104は、テーブルに、入力条件「sample_variable1>61」が真値「T」の場合、出力値は「1」となる対応関係を記載する。このとき、テーブルにおける入力条件「sample_variable2==1」および「sample_flags==1」の欄は空欄としている。
【0094】
また、原因結果グラフから、入力条件「sample_variable1>61」が偽値「F」、かつ入力条件「sample_flags==1」が真値「T」の場合、入力条件「sample_variable2==1」の真偽によって、出力値は異なる。すなわち、入力条件「sample_variable2==1」が偽値「F」の場合、出力値は「1」となり、真値「T」の場合、出力値は「0」となる。したがって、テーブル変換手段104は、テーブルに、入力条件「sample_variable1>61」が偽値「F」、「sample_variable2==1」が偽値「F」、かつ「sample_flags==1」が真値「T」の場合、出力値は「1」となる対応関係を記載する。また、テーブル変換手段104は、テーブルに、入力条件「sample_variable1>61」が偽値「F」、「sample_variable2==1」が真値「T」、かつ「sample_flags==1」が真値「T」の場合、出力値は「0」となる対応関係を記載する。
【0095】
また、原因結果グラフから、入力条件「sample_variable1>61」および「sample_flags==1」が偽値「F」であれば、入力条件「sample_variable2==1」の真偽に関わりなく、出力値は「0」となる。したがって、テーブル変換手段104は、テーブルに、入力条件「sample_variable1>61」および「sample_flags==1」が偽値「F」の場合、出力値は「0」となる対応関係を記載する。このとき、テーブルにおける入力条件「sample_variable2==1」の欄は空欄としている。
【0096】
以上の動作によって、テーブル変換手段104は、グラフ作成手段103により作成された原因結果グラフを、図22に示すデシジョンテーブル50に変換する。このように、テーブル変換手段104は、等価変換手段102により導出された、縮約された出力変数についての方程式から、グラフ作成手段103により縮約された原因結果グラフが作成され、この縮約された原因結果グラフに基づいてデシジョンテーブル50に変換している。これによって、グラフ作成手段103により作成された原因結果グラフから、最適化された入力条件の組み合わせから構成されたコンパクトなデシジョンテーブルを求めることができる。
【0097】
なお、上述したソースコードからデシジョンテーブルを生成する方法は一例であり、これに限定されるものではなく、その他の方法でデシジョンテーブルを生成するものとしてもよい。
【0098】
図23は、複数のモジュールのデシジョンテーブルを共通仕様および差分仕様に分類する動作の一例を示すフローチャートである。図24は、複数のモジュールのデシジョンテーブルを共通仕様および差分仕様に分類する動作を説明する図である。図25は、入力条件に基づいて共通仕様および差分仕様のデシジョンテーブルに再構築される前のデシジョンテーブルの例を示す図である。図26は、各デシジョンテーブルに共通する入力条件と固有の入力条件とを並び替えた状態を示す図である。図27は、各デシジョンテーブルで共通する入力条件行を示す図である。図28は、各デシジョンテーブルで共通する入力条件行を削除した状態を示す図である。図29は、再構築された共通仕様のデシジョンテーブルを示す図である。図30は、再構築された差分仕様のデシジョンテーブルを示す図である。図23〜30を参照しながら、デシジョンテーブルを共通仕様および差分仕様に分類する動作について説明する。図23は、上述の図6のステップS14において、分類手段105が、各モジュールのデシジョンテーブル群を、各モジュールの共通仕様のデシジョンテーブルと、各モジュール固有の差分仕様のデシジョンテーブルとに分類する動作の手順の詳細を示したものである。なお、図23においては、簡便に記載するため、デシジョンテーブルを「DT」と記載している。
【0099】
(ステップS140)
分類手段105の第1分類手段105aは、いずれかのモジュールのみに含まれる関数があるか否かを判定する。いずれかのモジュールのみに含まれる関数がある場合(ステップS140:Yes)、ステップS141へ移行し、いずれかのモジュールのみに含まれる関数がない場合(ステップS140:No)、ステップS142へ移行する。
【0100】
例えば、図24に示すように、テーブル変換手段104によって、モジュールAに関するデシジョンテーブル群82a、および、モジュールBに関するデシジョンテーブル群82bが生成されている場合を考える。第1分類手段105aは、モジュールA、Bのうちいずれか一方のモジュールのみに含まれる関数があるか否かを判定する。図24の例では、関数dがモジュールAのみに存在し、関数eがモジュールBのみに存在するので、ステップS141へ移行することになる。
【0101】
(ステップS141)
第1分類手段105aは、いずれかのモジュールのみに含まれる関数のデシジョンテーブルのすべてを、差分仕様のデシジョンテーブルに分類し、差分仕様グループに追加する。そして、ステップS142へ移行する。
【0102】
図24の例では、第1分類手段105aは、モジュールAのみに存在する関数dのすべてのデシジョンテーブル(デシジョンテーブル群84a)を差分仕様のデシジョンテーブルに分類し、モジュールAの差分仕様グループに追加する。また、第1分類手段105aは、モジュールBのみに存在する関数eのすべてのデシジョンテーブル(デシジョンテーブル群84b)を差分仕様のデシジョンテーブルに分類し、モジュールBの差分仕様グループに追加する。
【0103】
(ステップS142)
第1分類手段105aは、テーブル変換手段104により生成された各モジュールのデシジョンテーブル群から、各モジュールにおいて同じ名称の関数のデシジョンテーブルを抽出する。ステップS141を経由する場合、テーブル変換手段104により生成された各モジュールのデシジョンテーブル群から、いずれかのモジュールのみに含まれる関数のデシジョンテーブルを除いた残りのデシジョンテーブルが抽出される。そして、ステップS143へ移行する。
【0104】
図24の例では、第1分類手段105aは、テーブル変換手段104により生成されたモジュールAのデシジョンテーブル群82aから、関数dのデシジョンテーブルを除いた残りのデシジョンテーブル群83aを抽出する。また、第1分類手段105aは、テーブル変換手段104により生成されたモジュールBのデシジョンテーブル群82bから、関数eのデシジョンテーブルを除いた残りのデシジョンテーブル群83bを抽出する。
【0105】
(ステップS143)
分類手段105の第2分類手段105bは、第1分類手段105aにより抽出された、各モジュールにおいて同じ名称の関数のデシジョンテーブル(第1デシジョンテーブル)について、いずれかのモジュールの関数のみに含まれる出力変数があるか否かを判定する。いずれかのモジュールの関数のみに含まれる出力変数がある場合(ステップS143:Yes)、ステップS144へ移行し、いずれかのモジュールの関数のみに含まれる出力変数がない場合(ステップS143:No)、ステップS145へ移行する。
【0106】
図24の例では、第2分類手段105bは、第1分類手段105aにより抽出されたデシジョンテーブル群83a、83bについて、ソースコードA、Bのうちいずれか一方のモジュールの関数のみに含まれる出力変数があるか否かを判定する。図24の例では、モジュールAの関数aのみに含まれる出力変数が存在し、モジュールBの関数bのみに含まれる出力変数が存在するので、ステップS144へ移行することになる。
【0107】
(ステップS144)
第2分類手段105bは、いずれかのモジュールの関数のみに含まれる出力変数のデシジョンテーブルのすべてを、差分仕様のデシジョンテーブルに分類し、差分仕様グループに追加する。そして、ステップS145へ移行する。
【0108】
図24の例では、第2分類手段105bは、モジュールAの関数のみに含まれる出力変数のデシジョンテーブル(デシジョンテーブル群86a)を差分仕様のデシジョンテーブルに分類し、モジュールAの差分仕様グループに追加する。また、第2分類手段105bは、モジュールBの関数のみに含まれる出力変数のデシジョンテーブル(デシジョンテーブル群86b)を差分仕様のデシジョンテーブルに分類し、モジュールBの差分仕様グループに追加する。
【0109】
(ステップS145)
第2分類手段105bは、第1分類手段105aにより抽出された各モジュールにおいて同じ名称の関数のデシジョンテーブル群から、各モジュールの同じ名称の関数において同じ出力変数のデシジョンテーブルを抽出する。ステップS144を経由する場合、第1分類手段105aにより抽出された各モジュールにおいて同じ名称の関数のデシジョンテーブルから、いずれかのモジュールの関数のみに含まれる出力変数のデシジョンテーブルを除いた残りのデシジョンテーブルが抽出される。そして、ステップS146へ移行する。
【0110】
図24の例では、第2分類手段105bは、第1分類手段105aにより抽出されたモジュールAのデシジョンテーブル群83aから、モジュールAの関数aのみに含まれる出力変数のデシジョンテーブル(デシジョンテーブル群86a)を除いた残りのデシジョンテーブル群85aを抽出する。また、第2分類手段105bは、第1分類手段105aにより抽出されたモジュールBのデシジョンテーブル群83bから、モジュールBの関数bのみに含まれる出力変数のデシジョンテーブル(デシジョンテーブル群86b)を除いた残りのデシジョンテーブル群85bを抽出する。
【0111】
(ステップS146)
分類手段105の再構築手段105cは、第2分類手段105bにより抽出された同じ出力変数のデシジョンテーブル(第2デシジョンテーブル)について、入力条件および出力値を比較して、共通仕様のデシジョンテーブルと、差分仕様のデシジョンテーブルとに再構築する。以下、図25〜30を参照しながら、再構築の動作を具体的に説明する。
【0112】
図25(a)および25(b)は、第2分類手段105bにより抽出されたモジュールA、Bについてのそれぞれ同じ出力変数「Output1」のデシジョンテーブルの例(それぞれ、デシジョンテーブル90a、90b)を示す。まず、再構築手段105cは、デシジョンテーブル90a、90bにおいて、入力条件が同じであるものを検索する。具体的には、再構築手段105cは、デシジョンテーブル90a、90bにおいて、入力条件「selmode==2」および「selmode==1」が同じであるものとして検出する。
【0113】
次に、再構築手段105cは、デシジョンテーブル90a、90bそれぞれにおいて、検出した入力条件の列を左側、かつ、同じ並び順になるようにソートして、図26(a)および26(b)に示すデシジョンテーブル91a、91bを作成する。図26(a)に示すデシジョンテーブル91aでは、左側、かつ、同じ並び順にソートされた入力条件を入力条件部400aに示している。また、図26(b)に示すデシジョンテーブル91bでは、左側、かつ、同じ並び順にソートされた入力条件を入力条件部400bに示している。
【0114】
次に、再構築手段105cは、デシジョンテーブル91a、91bそれぞれにおいて、入力条件の真偽の値と、出力変数の値(出力値)との組み合わせを示す各行(以下、入力条件行という)のうち、同じ入力条件行(第1組み合わせ)を探索する。このとき、入力条件の真偽の値が空欄(真偽の値が出力値に影響しない)であるものは考慮しないものとする。具体的には、再構築手段105cは、図27(a)に示すデシジョンテーブル91aの入力条件行401aと、図27(b)に示すデシジョンテーブル91bの入力条件行401bとが、同じであるものとして検出する。すなわち、入力条件行401a、401bは、入力条件「selmode==1」が真値、かつ、出力変数「Output1」の値が「1」で、同じ入力条件行となっている。再構築手段105cは、その他に、デシジョンテーブル91aの入力条件行402a、403aと、デシジョンテーブル91bの入力条件行402b、403bとが、それぞれ同じ入力条件行であるものとして検出する。
【0115】
次に、再構築手段105cは、デシジョンテーブル91aから、検出した入力条件行401a〜403aを抜き出す。図28(a)に示すテーブル92aは、デシジョンテーブル91aから入力条件行401a〜403aを抜き出した状態を示す。また、再構築手段105cは、デシジョンテーブル91bから、検出した入力条件行401b〜403bを抜き出す。図28(b)に示すテーブル92bは、デシジョンテーブル91bから入力条件行401b〜403bを抜き出した状態を示す。
【0116】
次に、再構築手段105cは、デシジョンテーブル91aから抜き出した入力条件行401a〜403a(デシジョンテーブル91bから抜き出した入力条件行401b〜403bでもよい)をまとめて、図29に示すデシジョンテーブル93を再構築する。デシジョンテーブル93は、モジュールA、Bそれぞれにおける出力変数「Output1」の共通の振る舞い(変動)を示すデシジョンテーブルとなる。したがって、再構築手段105cは、再構築したデシジョンテーブル93を、共通仕様のデシジョンテーブルとして分類し、共通仕様グループに追加する。
【0117】
次に、再構築手段105cは、図28(a)で示したテーブル92aのように、デシジョンテーブル91aから入力条件行401a〜403aを抜き出し、残った入力条件行(第2組み合わせ)について、真偽の値をテーブル内に有さなくなった入力条件(具体的には、入力条件「selmode==1」)の列を削除することによって、図30(a)に示すデシジョンテーブル94aを再構築する。デシジョンテーブル94aは、モジュールAのみにおける出力変数「Output1」の振る舞い(変動)を示すデシジョンテーブルとなり、入力条件として「selmode==2」、「selmode==6」、「selmode==4」および「Output1<15」を含む。したがって、再構築手段105cは、再構築したデシジョンテーブル94aを、モジュールAの差分仕様のデシジョンテーブルとして分類し、モジュールAの差分仕様グループに追加する。
【0118】
次に、再構築手段105cは、図28(b)で示したテーブル92bのように、デシジョンテーブル91bから入力条件行401b〜403bを抜き出し、残った入力条件行(第2組み合わせ)について、真偽の値をテーブル内に有さなくなった入力条件(具体的には、入力条件「selmode==2」)の列を削除することによって、図30(b)に示すデシジョンテーブル94bを再構築する。デシジョンテーブル94bは、モジュールBのみにおける出力変数「Output1」の振る舞い(変動)を示すデシジョンテーブルとなり、入力条件として「selmode==1」、「selmode==40」および「selmode==80」を含む。したがって、再構築手段105cは、再構築したデシジョンテーブル94bを、モジュールBの差分仕様のデシジョンテーブルとして分類し、モジュールBの差分仕様グループに追加する。
【0119】
図24の例では、再構築手段105cは、第2分類手段105bにより抽出されたデシジョンテーブル群85a、85bから、共通仕様のデシジョンテーブルとしてデシジョンテーブル群87を再構築し、デシジョンテーブル群87を共通仕様グループに追加する。また、再構築手段105cは、第2分類手段105bにより抽出されたデシジョンテーブル群85a、85bから、モジュールAの差分仕様のデシジョンテーブルとしてデシジョンテーブル群88aを再構築し、デシジョンテーブル群88aをモジュールAの差分仕様グループに追加する。さらに、再構築手段105cは、第2分類手段105bにより抽出されたデシジョンテーブル群85a、85bから、モジュールBの差分仕様のデシジョンテーブルとしてデシジョンテーブル群88bを再構築し、デシジョンテーブル群88bをモジュールBの差分仕様グループに追加する。
【0120】
以上のように、図24の例では、分類手段105は、ステップS146で再構築したデシジョンテーブル群87を、共通仕様グループ95に追加する。また、分類手段105は、ステップS141で分類したデシジョンテーブル群84a、ステップS144で分類したデシジョンテーブル群86a、および、ステップS146で再構築したデシジョンテーブル群88aを、モジュールAの差分仕様グループ96aに追加する。また、分類手段105は、ステップS141で分類したデシジョンテーブル群84b、ステップS144で分類したデシジョンテーブル群86b、および、ステップS146で再構築したデシジョンテーブル群88bを、モジュールBの差分仕様グループ96bに追加する。
【0121】
以上で、分類手段105によってデシジョンテーブルを共通仕様および差分仕様に分類する動作が終了する。
【0122】
なお、図24の例では、2つのモジュールA、Bについて、デシジョンテーブルを共通仕様および差分仕様に分類する動作を示したが、モジュールは2つであることに限定されるものではなく、3つ以上のモジュールであってもよい。
【0123】
また、上述においては、共通仕様および差分仕様に分類されるデシジョンテーブルは、PC1(出力変数特定手段101、等価変換手段102、グラフ作成手段103およびテーブル変換手段104)により生成されたデシジョンテーブルを対象としたが、これに限定されるものではない。すなわち、PC1により生成されたデシジョンテーブルではないデシジョンテーブルについて、分類手段105の機能により共通仕様および差分仕様に分類されるものとしてもよい。
【0124】
以上の動作のように、本実施形態に係る仕様抽出装置(PC1)は、機能別に異なる複数のモジュールからデシジョンテーブルを生成し、各モジュールの共通仕様のデシジョンテーブルと、各モジュール固有の差分仕様のデシジョンテーブルとに分類するものとしている。これによって、機能別に異なるモジュールから、各モジュールの共通仕様および差分仕様を把握することができる。
【0125】
また、分類手段105は、等価変換手段102により導出された、縮約された出力変数についての方程式から、グラフ作成手段103により縮約された原因結果グラフが作成され、この原因結果グラフから、テーブル変換手段104によりデシジョンテーブルに変換され、このデシジョンテーブルを、共通仕様のデシジョンテーブルと、差分仕様のデシジョンテーブルとに分類している。すなわち、縮約された出力変数についての方程式に基づいて、原因結果グラフおよびデシジョンテーブルがそれぞれ生成され、そのデシジョンテーブルが分類されるので、モジュールのソースコードが長大であっても、出力変数ごとに最適化された入力条件を求めてコンパクトな共通仕様および差分仕様のデシジョンテーブルを求めることができる。
【0126】
なお、上述の実施形態に係るPC1で実行されるプログラムは、ROM等に予め組み込まれて提供される。また、上述の実施形態に係るPC1で実行されるプログラムは、インストール可能な形式または実行可能な形式のファイルでCD−ROM(Compact Disc Read Only Memory)、フレキシブルディスク(FD)、CD−R(Compact Disc Recordable)、DVD(Digital Versatile Disc)等のコンピュータで読み取り可能な記録媒体に記録してコンピュータプログラムプロダクトとして提供されるように構成してもよい。
【0127】
さらに、上述の実施形態に係るPC1で実行されるプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、上述の実施形態に係るPC1で実行されるプログラムをインターネット等のネットワーク経由で提供または配布するように構成してもよい。
【0128】
本実施形態にPC1で実行されるプログラムは、コンピュータを上述したPC1の各機能部として機能させ得る。このコンピュータは、CPU(制御部16)がコンピュータ読取可能な記憶媒体からプログラムを主記憶装置上に読み出して実行することができる。
【0129】
本発明の実施形態を説明したが、この実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。この新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換えおよび変更を行うことができる。この実施形態およびその変形は、発明の範囲および要旨に含まれるとともに、特許請求の範囲に記載された発明およびその均等の範囲に含まれる。
【符号の説明】
【0130】
1 PC
11 通信部
12 操作部
13 表示部
14 記憶部
15 外部記憶装置
16 制御部
17 CD−ROM
18 CD−ROMドライブ
19 バス
20 対象モジュール
21〜24 処理後モジュール
25 対象モジュール
26 等価変換後モジュール
30、30a〜30c サンプルコード
31 定数伝播処理後コード
31a 入力変数伝播処理後コード
31b 枝刈り処理後コード
31c 条件式情報伝播処理後コード
40〜45 ノード
42a、43a ノード
50 デシジョンテーブル
60 OR記号部
61 AND記号部
62a、62b NOT記号部
70 出力値ノード
80、80a レガシーソースコード
81a〜81c デシジョンテーブル群
82a〜86a、82b〜86b デシジョンテーブル群
87 デシジョンテーブル群
88a、88b デシジョンテーブル群
90a、90b、91a、91b デシジョンテーブル
92a、92b テーブル
93、94a、94b デシジョンテーブル
95 共通仕様グループ
96a、96b 差分仕様グループ
101 出力変数特定手段
102 等価変換手段
103 グラフ作成手段
104 テーブル変換手段
105 分類手段
105a 第1分類手段
105b 第2分類手段
105c 再構築手段
200、201 グローバル変数
202〜204 入力条件部
205、206、207a〜207c、208 コード部
210 定数伝播処理後コード部
211 入力変数伝播処理後コード部
212a〜212c、213 定数伝播処理後コード部
214 コード部
220 枝刈り処理後コード部
221 コード部
230 条件式情報伝播処理後コード部
231 コード部
240 条件式情報伝播処理後コード部
241 方程式
250 仮変数設定コード部
260 方程式コード部
300〜303 コード部
300a、301a コード部
300b、301b コード部
300c コード部
310〜312 定数伝播処理後コード部
310a 入力変数伝播処理後コード部
310b 枝刈り処理後コード部
310c 条件式情報伝播処理後コード部
400a、400b 入力条件部
401a〜403a、401b〜403b 入力条件行
800 プリプロセッサ
A〜C モジュール
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22
図23
図24
図25
図26
図27
図28
図29
図30