(57)【要約】【課題】ルールについて部分的な決定表の生成を可能とし、ルールの確認にかかる人の負荷を軽減する。【解決手段】決定表生成装置は、ソフトウェアの仕様を、入力条件と出力変数の値を示す情報である結果とを含む一つ以上のルールにより記述した情報であるルール仕様、及び決定表の生成範囲を特定する情報である生成範囲特定情報、を記憶し、ルール仕様のうち生成範囲特定情報によって特定される範囲について決定表を生成する。決定表生成装置は、例えば、ルール仕様のうち、比較の対象とするルール仕様との差分について決定表を生成する。また決定表生成装置は、例えば、メトリクス値及びメトリクス評価情報に基づき特定される生成範囲について決定表を生成する。また決定表生成装置は、例えば、ルール仕様にフィルタ条件を適用することにより特定される生成範囲について決定表を生成する。【選択図】図２
2019133538.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアの仕様を入力条件と出力変数の値を示す情報である結果とを含む一つ以上のルールにより記述した情報であるルール仕様、及び、
決定表の生成範囲を特定する情報である生成範囲特定情報、
を記憶する情報記憶部と、
前記ルール仕様のうち、前記生成範囲特定情報によって特定される範囲について決定表を生成する決定表生成部と、
を備える、決定表生成装置。
【請求項２】
請求項１に記載の決定表生成装置であって、
前記入力条件の構成要素は、比較式、真偽型の変数、及び真偽値の少なくともいずれかである項、もしくは前記項の否定である、
決定表生成装置。
【請求項３】
請求項２に記載の決定表生成装置であって、
前記入力条件又は前記ルール仕様に基づき生成された論理式を、論理的に等価な、前記構成要素の論理積である節を論理和で結合した論理式である選言標準形に変換する、
決定表生成装置。
【請求項４】
請求項３に記載の決定表生成装置であって、
前記決定表生成部は、前記構成要素ごとに前記入力条件に影響を与えるか否かを判定し、前記入力条件に影響を与えない前記構成要素を前記入力条件から除外して前記決定表を生成する、
決定表生成装置。
【請求項５】
請求項１に記載の決定表生成装置であって、
前記生成範囲特定情報は、決定表の生成対象である第１の前記ルール仕様について比較の対象とする第２の前記ルール仕様を特定する情報を含み、
前記決定表生成部は、前記第１のルール仕様と前記第２のルール仕様のうち、異なる結果となる同一の前記入力条件と当該入力条件における前記第１のルール仕様の結果及び前記第２のルール仕様の結果との組合せについて決定表を生成する、
決定表生成装置。
【請求項６】
請求項１に記載の決定表生成装置であって、
前記生成範囲特定情報は、決定表の生成対象である前記ルール仕様について取得されるメトリクス値と、前記メトリクス値を評価して前記生成範囲を特定する情報であるメトリクス評価情報とを含み、
前記決定表生成部は、前記メトリクス値及び前記メトリクス評価情報に基づき前記生成範囲を特定し、特定した前記生成範囲について決定表を生成する、
決定表生成装置。
【請求項７】
請求項６に記載の決定表生成装置であって、
前記メトリクス評価情報は、前記メトリクス値と比較される閾値を含み、
前記決定表生成部は、前記メトリクス値と前記閾値とを比較することにより特定される前記生成範囲について決定表を生成する、
決定表生成装置。
【請求項８】
請求項２及び請求項６に記載の決定表生成装置であって、
前記メトリクス値は、前記入力条件の前記構成要素の組合せの数であり、
前記メトリクス評価情報は、予め設定された閾値以下の数のルールにしか出現しない前記組合せを含む前記ルールを前記生成範囲として特定する情報を含む、
決定表生成装置。
【請求項９】
請求項２及び請求項６に記載の決定表生成装置であって、
前記メトリクス値は、前記入力条件の前記構成要素の数であり、
前記メトリクス評価情報は、前記構成要素の数が予め設定された閾値以上の前記ルールを前記生成範囲として特定する情報を含む、
決定表生成装置。
【請求項１０】
請求項２及び請求項６に記載の決定表生成装置であって、
前記ルール仕様はソースコードに基づき生成されたものであり、
前記メトリクス値は、前記ルールの前記入力条件の前記構成要素に対応する命令の前記ソースコードにおける距離であり、
前記メトリクス評価情報は、前記距離が予め設定された閾値以上の前記ルールを前記生成範囲として特定する情報を含む、
決定表生成装置。
【請求項１１】
請求項２及び請求項６に記載の決定表生成装置であって、
前記ルール仕様はソースコードに基づき生成されたものであり、
前記メトリクス値は、前記ルールの前記入力条件の前記構成要素に対応する前記ソースコードの命令が内包する「Ｉｆ〜Ｔｈｅｎ〜Ｅｌｓｅ」形式の命令におけるＥｌｓｅ命令の数であり、
前記メトリクス評価情報は、前記Ｅｌｓｅ命令の数が予め設定された閾値以上の前記ルールを前記生成範囲として特定する情報を含む、
決定表生成装置。
【請求項１２】
請求項１に記載の決定表生成装置であって、
前記生成範囲特定情報は論理式で記述されたフィルタ条件を含み、
前記決定表生成部は、前記ルール仕様に前記フィルタ条件を適用することにより特定される前記生成範囲について決定表を生成する、
決定表生成装置。
【請求項１３】
請求項１に記載の決定表生成装置であって、
前記情報記憶部はソースコードを記憶し、
前記出力変数を受け付けるユーザインタフェース、及び前記ソースコードと出力変数とに基づき前記ルール仕様を自動生成するルール仕様生成部をさらに備える、
決定表生成装置。
【請求項１４】
請求項１に記載の決定表生成装置であって、
前記情報記憶部は決定表を記憶し、
前記決定表に基づき前記ルール仕様を自動生成する決定表逆変換部をさらに備える、
決定表生成装置。
【請求項１５】
情報処理装置が、
ソフトウェアの仕様を入力条件と出力変数の値を示す情報である結果とを含む一つ以上のルールにより記述した情報であるルール仕様、及び、
決定表の生成範囲を特定する情報である生成範囲特定情報、
を記憶するステップ、
前記ルール仕様のうち、前記生成範囲特定情報によって特定される範囲について決定表
を生成するステップ、
を実行する、決定表生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、決定表生成装置、及び決定表生成方法に関する。
【背景技術】
【０００２】
特許文献１には「表形式のソフトウェア仕様を作成及び検証する技術に関し」、「可読性は確保しつつ決定表の作成・解読工数削減と記憶容量削減を達成する」ため、「ソフトウェア仕様の開発を支援する装置であって、複数の条件を有する条件部および複数の結果を有する結果部からなる複数の命題形式の仕様を受け付ける命題仕様受付手段と、各行が上記複数の条件の１つまたは上記複数の結果の１つを示し、各列が上記複数の命題形式の各々を示す表形式で表した決定表を上記複数の命題形式の仕様から作成する決定表作成手段と、上記複数の命題形式の仕様の各々が互いに矛盾しないかどうかを判定する整合性検証手段とを、備え、上記決定表作成手段は、上記命題仕様受付手段から上記複数の命題形式の仕様を取得すると、上記複数の命題形式の仕様の各々について、当該命題形式の仕様の条件部と結果部を取り出して上記決定表の行を作成し、当該命題形式の仕様に対応する列の当該行の欄に印付けし、上記整合性検証手段は、複数の命題形式の仕様のうち任意の２つの命題形式の仕様を上記決定表から取り出し、上記２つの命題形式の仕様の条件部の論理積が充足可能かどうかを判定し、充足可能であるならば上記複数の命題形式の仕様の各々が互いに矛盾すると出力する装置を提供する。」と記載されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１２−１９２２０３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
一般にソースコード中の命令の実行系列（以下、「実行パス」と称する。）は、ソースコードの中の分岐命令（以下、「Ｉｆ文」と称する。）や反復命令（以下、「ループ文」と称する。）の数に依存し、場合によっては指数関数的に増加する。そのため、Ｉｆ文やループ文の数が増えてソースコードの規模が膨大になるとソースコードのパスも指数関数的に増加し、人がソースコードを確認することが困難になる。
【０００５】
そこである変数に着目し、変数への値の割り当て(以下、「結果」と称する。）と、そ
の割り当てが発生する条件（以下、「入力条件」と称する。）の組をルールとみなし、ソースコードから抽出したルールを決定表形式で可視化することによりソースコードの仕様の確認を効率化する方法が存在する。
【０００６】
ソースコードからルールを抽出する方法として記号実行等が知られている。ソースコードからルールを抽出する場合、単純には一つの実行パスが一つのルールに対応する。そのため、抽出されるルールの数はＩｆ文及びループ文の数に対して指数関数的に増加する。
【０００７】
特許文献１には命題形式の仕様（ルールに相当）から決定表を生成する技術に関して記載されている。しかし膨大な数のルールを決定表化すると生成される決定表が巨大化して人による決定表の確認が困難となる。また特許文献１は巨大な決定表の確認を支援する技術に関して何も開示していない。
【０００８】
本発明はこうした背景に鑑みてなされたもので、ルールについて部分的な決定表を生成することを可能とし、ルールの確認にかかる人の負荷を軽減することを目的とする。
【課題を解決するための手段】
【０００９】
上記課題を解決するための本発明のうちの一つは、決定表生成装置であって、ソフトウェアの仕様を入力条件と出力変数の値を示す情報である結果とを含む一つ以上のルールにより記述した情報であるルール仕様、及び、決定表の生成範囲を特定する情報である生成範囲特定情報、を記憶する情報記憶部と、前記ルール仕様のうち、前記生成範囲特定情報によって特定される範囲について決定表を生成する決定表生成部と、を備える。
【００１０】
その他、本願が開示する課題、及びその解決方法は、発明を実施するための形態の欄、及び図面により明らかにされる。
【発明の効果】
【００１１】
本発明によれば、ルールについて部分的な決定表の生成を可能とし、ルールの確認にかかる人の負荷を軽減することができる。
【図面の簡単な説明】
【００１２】
【図１】決定表生成装置のハードウェア構成を示す図である。
【図２】決定表生成装置が備える機能を示す図である。
【図３】ルール仕様の例である。
【図４】生成結果の例である。
【図５】設定画面の例である。
【図６】決定表生成処理を説明するフローチャートである。
【図７】差分の決定表生成処理を説明するフローチャートである。
【図８】全体の決定表生成処理を説明するフローチャートである。
【図９】論理式等価変換処理を説明するフローチャートである。
【発明を実施するための形態】
【００１３】
以下、図面を参照しつつ実施形態について説明する。以下の説明において、同一の又は類似する構成について同一の符号を付して重複した説明を省略することがある。
【００１４】
図１に一実施形態として説明する決定表生成装置１００のハードウェア構成を、図２に決定表生成装置１００が備える機能を、夫々示している。決定表生成装置１００は、ソフトウェア（例えば、金融、保険、製造、流通、通信、教育、医療等の業務に関するもの）の開発や保守に際して利用される情報処理装置（コンピュータ）である。決定表生成装置１００は、例えば、クラウドシステムにより提供されるクラウドサーバのように仮想的な情報処理資源を用いて実現されるものであってもよい。
【００１５】
一般にソフトウェアは、商品やサービス等に関する法的な規制、業務上の規則や基準、ビジネスルール、システムルール、チェックルール等に従ってその仕様が決定される。以下、上記仕様における、入力条件とその入力条件を満たしたときの結果の組を「ルール」と称する。ルールは、例えば、「もし〜ならば〜である」といった自然文による記述や「If A=1 And B=2 Then R=1」といった情報処理装置により解釈可能な所定の規則に従った
記述、入力条件と結果の対応関係を表形式で定義した決定表（decision table）による記述等、様々な形で表される。
【００１６】
上記の入力条件及び結果は夫々一つ以上の構成要素を含んで構成される。上記構成要素は、例えば、比較式、真偽型の変数、及び真偽値のいずれか（以下、「項」と称する。）、もしくは項の否定である。尚、以下の説明において、項または項の否定のことを「リテラル」と称する。上記入力条件は、例えば、リテラルを論理演算子（論理積（And）や論
理和（Or）等）を用いて組み合わせた論理式で表される。また上記の結果は、例えば、「
変数＝値」、「変数＝変数」、もしくは「変数＝変数を０以上含む計算式」等の形式のリテラルから成る論理式で表される。
【００１７】
以下の説明において、ルールの結果に出現する変数のことを「出力変数」と称し、ルールのそれ以外の変数のことを「入力変数」と称する。また出力変数が共通する一つ以上のルールの集合のことを「ルールセット」と称し、ルールセットの集合のことを「ルール仕様」と称する。ルール仕様は、例えば、記号実行等のソースコード解析技術により、情報処理装置を用いてソースコードから自動的に生成することもできる。
【００１８】
決定表生成装置１００は、ルール仕様と、ルール仕様のうち決定表を生成する範囲（以下、「生成範囲」と称する。）を特定する情報（以下、「生成範囲特定情報」と称する。）とに基づき、リテラルを論理積で結合した論理式により入力条件を表したルールの集合を生成し、生成した上記集合に基づき決定表を生成する。
【００１９】
上記の生成範囲特定情報は、例えば、決定表の生成対象であるルール仕様（第１のルール仕様）（以下、「決定表生成対象」と称する。）について、比較の対象となるルール仕様（第２のルール仕様）（以下、「比較対象」と称する。）を特定する情報である。尚、上記の比較対象とするルール仕様は、例えば、決定表生成対象のルール仕様（ソースコード）が変更(修正）された場合における修正前（変更前）のルール仕様（ソースコード）
である。
【００２０】
また上記の生成範囲特定情報は、例えば、決定表の生成対象となるルール仕様のうち、上記ルール仕様について取得されるメトリクス値と、上記メトリクス値を評価して生成範囲を特定するための情報（例えば、閾値や評価式。以下、「メトリクス評価情報」と称する。）とを含んだ情報である。尚、決定表生成装置１００は、例えば、ルール仕様を変換して得られるソースコードからメトリクス値を取得する。
【００２１】
また上記の生成範囲特定情報は、例えば、決定表の生成対象となるルール仕様から生成範囲のルール仕様を抽出する論理式（以下、「フィルタ条件」と称する。）を含んだ情報である。上記のフィルタ条件は、例えば「70<x<80 And y=True」といった論理式で記述される。
【００２２】
尚、上記のメトリクス値は、例えば、「レアなリテラルの組合せ出現数」、「ルールの長さ」、「距離」、「内包するＥｌｓｅ数」等である。このうち「レアなリテラルの組合せの出現数」は、ルール仕様に含まれるリテラルの組合せのうち、閾値以下の数のルールにしか出現しないリテラルの組合せの数である。尚、リテラルの組合せは２つのリテラルの組合せに限らず３つ以上のリテラルの組合せでもよい。また「ルールの長さ」は、ルールの入力条件に含まれるリテラルの数である。また「距離」は、例えば、ルール仕様に対応するソースコードが存在する場合、ルールの入力条件に含まれるリテラルが上記ソースコードのどの命令に対応するかを特定した場合における、２つのリテラル間の上記命令の行番号の差（記述間隔））である。尚、ルールの入力条件にリテラルが３つ以上含まれる場合、例えば、リテラルの全ての組合せに対して、対応する命令の行番号の差を求め、その平均、最大、最小等を距離にする。行番号の差以外に、例えば、各リテラルに対応する各命令が別関数や別ファイルであるか否かに基づき各命令間の距離を求めてもよい。また「内包するＥｌｓｅ数」は、ルール仕様に対応するソースコードがあった場合、ルールに含まれるリテラルが上記ソースコードのどの命令に対応するかを測定し、上記対応する命令に、「Ｉｆ  Ｔｈｅｎ  Ｅｌｓｅ」形式の命令においてＥｌｓｅ命令が何個含まれるかを、重複を許さずにカウントした数である。
【００２３】
また上記のメトリクス評価情報は、例えば、（１）ルール仕様に含まれるルールのうち
出現頻度が低い（出現頻度が予め設定された閾値以下の）リテラルの組合せを含むルールを決定表生成対象とする、（２）入力条件に含まれるリテラルの数が多い（入力条件に所定数以上のリテラルが含まれる）ルールを決定表生成対象とする、（３）距離が長い（予め設定された閾値以上の）ルールを決定表生成対象とする、（４）ルールが内包するＥｌｓｅ数が多い（予め設定された閾値以上の）ルールを決定表生成対象とする、等である。ここで（１）のように出現頻度が低いリテラルの組合せを含むルールを決定表生成対象とするのは、例えば、ルール仕様のうち見落とす可能性の高い部分を決定表にして可視化するためである。また（２）のように入力条件が多いルールを決定表生成対象とするのは、例えば、入力条件が多くて複雑な部分は誤りが生じやすいのでこれを決定表にして可視化しユーザに注意を促すためである。また（３）のように距離が長いルールを決定表生成対象とするのは、距離が長いと誤りが生じやすく（例えば、長いソースコードや複数ファイルに分割されたソースコードは一つの画面に収まりきらず、全体の見通しがつきにくく誤りが生じやすい等）、決定表を生成して可視化しユーザに注意を促すためである。また（４）のようにルールが内包するＥｌｓｅ数が多いルールを決定表生成対象とするのは、ユーザが「Ｉｆ 条件 Ｔｈｅｎ  処理１ Ｅｌｓｅ 処理２」という形でソースコードを記述した場合、Ｅｌｓｅに相当する条件はソースコード上に明示的には表示されず、ユーザはＥｌｓｅに相当する条件を意識しない可能性があるため、ルールが内包するＥｌｓｅ数が多いと誤りが生じやすく、決定表を生成して可視化しユーザに注意を促すためである。
【００２４】
図１に示すように、決定表生成装置１００は、プロセッサ１１０、主記憶装置１２０、補助記憶装置１３０、入力装置１４０、出力装置１５０、及び通信装置１６０を備える。これらは図示しないバス等の通信手段を介して互いに通信可能に接続されている。
【００２５】
プロセッサ１１０は、例えばＣＰＵ（Central Processing Unit）やＭＰＵ（Micro Processing Unit）を用いて構成されている。プロセッサ１１０が、主記憶装置１２０に格納されているプログラムを読み出して実行することにより、決定表生成装置１００の様々な機能が実現される。
【００２６】
主記憶装置１２０は、プログラムやデータを記憶する装置であり、例えば、ＲＯＭ（Read Only Memory）、ＲＡＭ（Random Access Memory）、不揮発性半導体メモリ（NVRAM（Non Volatile RAM））等である。
【００２７】
補助記憶装置１３０は、例えば、ハードディスクドライブ、ＳＳＤ（Solid State Drive）、光学式記憶装置（ＣＤ（Compact Disc）、ＤＶＤ（Digital Versatile Disc）等）
、ストレージシステム、ＩＣカード、ＳＤメモリカードや光学式記録媒体等の記録媒体の読取／書込装置、クラウドサーバの記憶領域等である。補助記憶装置１３０に格納されているプログラムやデータは主記憶装置１２０に随時読み込まれる。
【００２８】
入力装置１４０は、例えば、キーボード、マウス、タッチパネル、カードリーダ、音声入力装置等である。
【００２９】
出力装置１５０は、ユーザに処理経過や処理結果等の各種情報を提供するユーザインタフェースであり、例えば、画像表示装置（液晶モニタ、ＬＣＤ（Liquid Crystal Display）、グラフィックカード等）、音声出力装置（スピーカ等）、印字装置等である。尚、例えば、決定表生成装置１００が通信装置１６０を介して他の装置との間で情報の入力や出力を行う構成としてもよい。
【００３０】
通信装置１６０は、ＬＡＮ（Local Area Network）やインターネット等の通信手段を介した他の装置との間の通信を実現する有線方式又は無線方式の通信インタフェースであり、例えば、ＮＩＣ（Network Interface Card）、無線通信モジュール、ＵＳＢ（Universa
l Serial Interface）モジュール、シリアル通信モジュール等である。
【００３１】
図２に示すように、決定表生成装置１００は、情報記憶部２０５、ルール仕様生成部２１０、決定表生成部２２０、決定表逆変換部２３０、及びメトリクス値取得部２４０の各機能を備える。
【００３２】
情報記憶部２０５は、ソースコード２６０、ルール仕様２７０、生成範囲特定情報２８０、及び生成結果２９０を記憶する。ソースコード２６０は、例えば、ユーザが決定表生成装置１００に入力したソースコードである。ルール仕様２７０は、例えば、ユーザが決定表生成装置１００に入力したルール仕様、ルール仕様生成部２１０がソースコード２６０に記憶されたソースコードから自動生成（抽出）したルール仕様、決定表逆変換部２３０が決定表から逆変換して自動生成したルール仕様等である。尚、決定表生成装置１００にルール仕様をどのようにして与えるか、即ちルール仕様の入力方法は必ずしも限定されない。ルール仕様の入力方法として、例えば、ルール仕様を直接入力する方法、所定の言語で記述されたソースコードを入力として決定表生成装置１００が上記ソースコードからルール仕様を生成する方法、決定表を入力として決定表生成装置１００が決定表をルール仕様に逆変換する方法等がある。生成範囲特定情報２８０は、例えば、後述する設定画面５００を介して取得される情報である。生成結果２９０は、決定表生成部２２０がルール仕様２７０と生成範囲特定情報２８０とに基づき生成した決定表等の情報である。
【００３３】
上記機能のうち、ルール仕様生成部２１０は、記号実行等のソースコード解析技術によりソースコード２６０からルール仕様を抽出し、抽出したルール仕様をルール仕様２７０として記憶する。決定表生成部２２０は、ルール仕様２７０と生成範囲特定情報２８０とに基づき決定表を生成し、生成した決定表を生成結果２９０として記憶する。決定表逆変換部２３０は、決定表をルール仕様に逆変換する。決定表の１行は一つのルールに対応する。決定表逆変換部２３０は、決定表の１行を「Ｉｆ  入力条件  Ｔｈｅｎ  結果」の形式に変換することで決定表をルール仕様に逆変換する。メトリクス値取得部２４０は、ソースコード２６０からメトリクス値を取得する。
【００３４】
図３にルール仕様２７０の一例を示す。同図に示すように、ルール仕様２７０は、同一の結果変数を有する一つ以上のルールセットを含む。各ルールセットには識別子（以下、「ルールセットＩＤ」と称する。）が付与される。各ルールセットは、「Ｉｆ〜Ｔｈｅｎ」形式で記述される一つ以上のルールを含む。各ルールには識別子（以下、「ルールＩＤ」と称する。）が付与される。
【００３５】
同図に示すルール仕様２７０は、ルールセットＩＤが「RS1」のルールセット３１０と
ルールセットＩＤが「RS2」のルールセット３２０とを含む。ルールセット３１０及びル
ールセット３２０は夫々、ルールＩＤが「1」〜「4」の４つのルールを含む。
【００３６】
各ルールセットにおいて、入力変数の具体的な値を定めると、各ルールの入力条件が充足するか（真となるか）一意に定まる。ルールの入力条件が充足すると、当該ルールの結果が充足するように出力変数の値が定まる。例えば、図３に例示するルールセット３１０において、入力変数「x」、「y」、「z」の具体的な値が夫々、「100」、「-1」、「-1」であるときにルールＩＤが「4」のルールの入力条件は充足し、出力変数「out」の具体的な値が「0」に定まる。
【００３７】
図４は、決定表生成部２２０により生成され情報記憶部２０５が記憶する生成結果２９０の一例である。生成結果２９０は一つ以上の決定表を含む。各決定表には識別子（以下、「決定表ＩＤ」と称する。）が付与される。同図に示す生成結果２９０は、決定表ＩＤが夫々「DT1」〜「DT4」である４つの決定表を含む。決定表は一つ以上の行を含み、各行
には識別子（以下、「行番号」と称する。）が付与される。決定表の各行は、入力条件「If」と結果「Then」とを含み、１行が一つのルールに対応する。例えば、決定表４１０の２行目は「If x<=50 And y>=0 Then out=1」というルールに対応し、決定表４１０の３行目は「If 0<x And x<=50 Then out=2」というルールに対応する。各行のセルは変数が同
じ０個以上のリテラルに対応する。例えば、決定表４１０のセル４１１は、リテラル「x<=50」に対応し、決定表４１０のセル４１２は、リテラル「y>=0」に対応し、決定表４１
０のセル４１３は、リテラル「0<x」と「x<=50」に対応する。尚、決定表４１０のセル４１４の「-」は、変数「y」の値が関係ないことを意味している。
【００３８】
決定表４１０は、図３に示すルールセット３１０に基づき生成される決定表である。ここでルールセット３１０のルールＩＤが「1」及「2」のルールから、「x>50」であれば、「out」は「1」になる。即ちこれらのルールから、「y>0」、「x>0」、「x>100」、「Not(x>100)」を除去したとしても「out」が「1」になる入力条件に影響がない。このように
決定表生成部２２０は、決定表の生成に際し、除去したとしても入力条件に影響がないリテラル（以下、「ドントケア」と称する。）を除去する。決定表４１０の１行目の場合、「x>50」以外のリテラルがすべてドントケアとして除去されるため、決定表の行番号「1
」は「If x>50 Then out=1」に対応する内容になっている。
【００３９】
決定表４２０は、図３に示すルールセット３１０を決定表生成対象とし、ルールセット３２０を比較対象として、ルールセット３１０とルールセット３２０との間で、異なる結果となる同一の入力条件（以下、「差分入力条件」と称する。）と差分入力条件における各ルールセットの結果との組合せ（以下、差分入力条件と上記の結果の組合せを「差分」と称する。）を決定表とした例である。ルールセット３１０とルールセット３２０とを比較すると、ルールセット３１０に含まれるリテラル「x>100」、「x <=100」(Not(x>100))、「x>50」、「x<=50」(Not(x>50))が夫々、ルールセット３２０では「x>=100」、「x<100」(Not(x>=100))、「x>=50」、「x<50」(Not(x>=50))となっているが、「50<=x And x<=50」のときのみ、ルールセット３１０は「out」が「2」となり、一方、ルールセット３２０は「out」が「1」となり、両者は異なる結果となる。決定表４２０の１行目はこの両者の差分を決定表にしたものであり、「If 50 <= x And x <= 50 Then out(RS1(ルールセット310))=2 And out(RS2(ルールセット320))=1」というルールに対応する内容になってい
る。
【００４０】
決定表４３０は、図３に示すルールセット３１０を決定表生成対象とし、フィルタ条件「out=2 And y<0」を満たす範囲について決定表を生成した例である。決定表生成部２２
０は、生成範囲特定情報２８０にフィルタリング条件が指定されている場合、フィルタリング条件を満たす範囲について決定表を生成する。決定表４３０は、ルールセット３１０の全体の決定表である決定表４１０のうち、フィルタリング条件「out=2 And y<0」を満
たす３行目のみについて決定表を生成した例である。
【００４１】
決定表４４０は、図３に示すルールセット３１０を決定表生成対象とし、図２のメトリクス値取得部２４０が取得するメトリクス値の一つであるルールの長さが閾値「２」以上を満たす範囲のみについて決定表を生成した例である。決定表生成部２２０は、例えば、生成範囲特定情報２８０にメトリクス値と閾値とが設定されている場合、ルールセット３１０のうちメトリクス値が閾値以上（もしくは閾値以下）の範囲について決定表を生成する。決定表４３０は、ルールセット３１０の全体の決定表である４１０のうち、ルールの長さが２以上である２行目、３行目、及び４行目のみについて決定表を生成した例である。
【００４２】
図５は、決定表の生成に際し決定表生成部２２０が出力装置１５０に出力する画面（以下、「設定画面５００」と称する。）の一例である。同図に示すように、設定画面５００
には、決定表の生成対象入力欄５１０、比較対象入力欄５２０、ルールメトリクス入力欄５３０、フィルタ条件入力欄５４０、及び決定表生成ボタン５５０が設けられている。
【００４３】
決定表の生成対象入力欄５１０には、決定表生成対象を指定する情報が設定される。同図に示すように、決定表の生成対象入力欄５１０は、テキストフォーム５１１、ラジオボタン５１２、及びテキストフォーム５１３を含む。テキストフォーム５１１には、決定表生成対象のデータ（ソースコード、仕様ルール、及び決定表のいずれか）を含むファイルのファイル名が設定される。ラジオボタン５１２は、入力ファイルの種類（ソースコード、仕様ルール、及び決定表のいずれか）の指定を受け付ける。テキストフォーム５１３には、ラジオボタン５１２により入力ファイルの種類として「ソースコード」が選択されている場合は出力変数名が設定され、それ以外が選択されている場合は決定表生成対象のルール仕様のルールセットＩＤが設定される。同図の例では、テキストフォーム５１１に「rule.cbl」が設定され、ラジオボタン５１２ではソースコードが選択され、テキストフォーム５１３に出力変数「out」が設定されている。尚、テキストフォーム５１１及びテキ
ストフォーム５１３はダイアログボックス等としてもよい。またラジオボタン５１２はリストボックス等としてもよい。
【００４４】
比較対象入力欄５２０には、決定表の生成範囲の特定に比較対象を用いる場合に必要な情報が設定される。同図に示すように、比較対象入力欄５２０は、チェックボックス５２１、テキストフォーム５２２、ラジオボタン５２３、及びテキストフォーム５２４を含む。チェックボックス５２１には、決定表の生成範囲を特定するために比較対象を用いるか否かのユーザの意思表示が設定され、比較対象を用いる場合、ユーザはチェックボックス５２１をチェックする。テキストフォーム５２２には、比較対象のデータ（ソースコード、仕様ルール、及び決定表のいずれか）を含むファイルのファイル名が設定される。ラジオボタン５２３は、入力ファイルの種類（ソースコード、仕様ルール、及び決定表のいずれか）の指定を受け付ける。テキストフォーム５２４には、ラジオボタン５２３により入力ファイルの種類として「ソースコード」が選択されている場合は出力変数名が設定され、それ以外の場合には比較対象のルール仕様のルールセットＩＤが設定される。同図の例では、チェックボックス５２１はチェックされておらず、テキストフォーム５２２には「old_rule.smt2」が設定され、ラジオボタン５２３では仕様ルールが選択され、テキスト
フォーム５２４にルールセットＩＤ「RS2」が設定されている。尚、テキストフォーム５
２２及びテキストフォーム５２４はダイアログボックス等としてもよい。またラジオボタン５２３はリストボックス等としてもよい。
【００４５】
ルールメトリクス入力欄５３０には、メトリクスにより決定表の生成範囲を特定する場合に必要な情報が設定される。同図に示すように、ルールメトリクス入力欄５３０は、チェックボックス５３１、メトリクス入力テーブル５３２、及び一行追加ボタン５３３を含む。チェックボックス５３１には、決定表の生成範囲を特定するためにメトリクスを用いるか否かのユーザの意思表示が設定され、メトリクスを用いる場合、ユーザはチェックボックス５３１をチェックする。メトリクス入力テーブル５３２には、メトリクス評価情報としてメトリクス名と閾値とが設定される。一行追加ボタン５３３は、メトリクス入力テーブル５３２の行数を追加する場合にユーザが操作する。同図の例では、チェックボックス５３１はチェックされておらず、メトリクス入力テーブル５３２には、メトリクス名「ルールの長さ」と閾値「2」が入力されている。尚、メトリクスの長さを指定するリスト
ボックスはテキストフォーム等としてもよく、閾値を入力するテキストフォームは、リストボックス等としてもよい。
【００４６】
フィルタ条件入力欄５４０には、決定表の生成範囲を特定するための情報としてフィルタ条件を使う場合に必要な情報が設定される。同図に示すように、フィルタ条件入力欄５４０は、チェックボックス５４１及びテキストフォーム５４２を含む。チェックボックス
５４１には、決定表の生成範囲を特定するためにフィルタ条件を使うか否かのユーザの意思表示が設定され、フィルタ条件を使う場合、ユーザはチェックボックス５４１をチェックする。テキストフォーム５４２には、フィルタ条件を入力する。同図の例では、チェックボックス５４１がチェックされ、テキストフォーム５４２にフィルタ条件「out=2 And y<0」が設定されている。
【００４７】
設定画面５００に必要な情報を設定した後、ユーザが決定表生成ボタン５５０を操作すると、決定表生成装置１００が決定表を生成するための処理を開始する。上記処理では、まず決定表生成部２２０が、設定画面５００の内容（決定表の生成対象、決定表、比較対象、メトリクス名、閾値、フィルタ条件等）を生成範囲特定情報２８０として情報記憶部２０５に記憶させる。続いて、決定表生成部２２０が、生成範囲特定情報２８０を用いて、決定表生成対象のルールセットについて決定表の生成を開始する。尚、設定画面５００において、決定表生成対象もしくは比較対象がソースコードで指定されている場合、決定表生成部２２０は、決定表生成処理の前に、ルール仕様生成部２１０を用いてソースコードからルール仕様を抽出し、抽出したルール仕様をルール仕様２７０として情報記憶部２０５に記憶させる。また例えば、生成対象もしくは比較対象が決定表で指定された場合、決定表生成部２２０は、決定表逆変換部２３０を用いて決定表をルール仕様に逆変換し、逆変換したルール仕様をルール仕様２７０として情報記憶部２０５に記憶させる。尚、仕様ルールの抽出及び決定表の逆変換は、設定画面５００を生成範囲特定情報２８０として情報記憶部２０５が記憶するよりも前に行ってもよい。
【００４８】
図６は、決定表の生成に際して決定表生成部２２０が行う処理（以下、「決定表生成処理Ｓ６００」と称する。）を説明するフローチャートである。以下、同図とともに決定表生成処理Ｓ６００について説明する。尚、決定表生成部２２０は、例えば、ユーザの指示操作を契機として決定表生成処理Ｓ６００を開始する。また決定表生成部２２０は、例えば、スケジュールされたタイミングでバッチ処理等により自動的に決定表生成処理Ｓ６００を実行する。尚、以下において、符号の前に付している文字「Ｓ」は処理ステップを意味する。
【００４９】
まず決定表生成部２２０は、決定表生成対象のルール仕様２７０（ルールセット）を読み込むとともに（Ｓ６０１）、生成範囲特定情報２８０を読み込む（Ｓ６０２）。
【００５０】
続いて、決定表生成部２２０は、生成範囲特定情報２８０として比較対象が設定されているか否かを判定する（Ｓ６０３）。比較対象が設定されている場合（Ｓ６０３：ＹＥＳ）、処理はＳ６０４に進み、比較対象が設定されていない場合（Ｓ６０３：ＮＯ）、処理はＳ６０５に進む。
【００５１】
Ｓ６０４では、決定表生成部２２０は、前述した差分に基づき決定表を生成する処理（以下、「差分の決定表生成処理Ｓ６０４」と称する。）を行う。差分の決定表生成処理Ｓ６０４の詳細については後述する。差分の決定表生成処理Ｓ６０４の終了後、処理はＳ６０６に進む。
【００５２】
Ｓ６０５では、決定表生成部２２０は、決定表生成対象の全体に基づき決定表を生成する処理（以下、「全体の決定表生成処理Ｓ６０５」と称する。）を行う。全体の決定表生成処理Ｓ６０５の詳細については後述する。全体の決定表生成処理Ｓ６０５の終了後、処理はＳ６０７に進む。
【００５３】
Ｓ６０６では、決定表生成部２２０は、差分の決定表生成処理Ｓ６０４の結果（戻り値）が「差分無し」であるか否かを判定する。差分の決定表生成処理Ｓ６０４の結果が「差分無し」であれば、決定表生成部２２０は、決定表生成処理Ｓ６００を終了する。差分の
決定表生成処理Ｓ６０４の結果が「差分無し」でなければ、処理はＳ６０７に進む。
【００５４】
Ｓ６０７では、決定表生成部２２０は、フィルタ条件が設定されているか否か（生成範囲特定情報２８０がフィルタ条件の設定を含むか否か）を判定する。生成範囲特定情報２８０にフィルタ条件が設定されている場合（Ｓ６０７：ＹＥＳ）、処理はＳ６０８に進み、フィルタ条件が設定されていない場合（Ｓ６０７：ＮＯ）、処理はＳ６０９に進む。
【００５５】
Ｓ６０８では、決定表生成部２２０は、Ｓ６０４又はＳ６０５にて生成された決定表からフィルタ条件を満たさない部分（行）を除外する。より詳細には、決定表生成部２２０は、決定表の行ごとに「フィルタ条件 And 入力条件And 結果」が真になり得るか（以下
、真になり得ることを「充足可能」と称し、真になり得ないことを「充足不能」と称する。）を判定し、充足不能の場合、その行を決定表から除外する。尚、論理式の充足可能性を判定する技術として、ＳＭＴソルバ（Satisfiability Modulo Theories Solver）があ
る。決定表生成部２２０は、例えば、ＳＭＴソルバ等を用いて充足可能性を判定する。
【００５６】
続いて、決定表生成部２２０は、生成範囲特定情報２８０としてメトリクスに関する情報が設定されているかを判定する（Ｓ６０９）。メトリクスに関する情報が設定されている場合（Ｓ６０９：ＹＥＳ）、処理はＳ６１０に進み、メトリクスに関する情報が設定されていない場合（Ｓ６０９：ＮＯ）、処理はＳ６１２に進む。
【００５７】
Ｓ６１０では、メトリクス値取得部２４０が、決定表の行ごとにメトリクス値を取得する。続いて、決定表生成部２２０は、メトリクス値が予め設定された閾値以下（もしくは上記閾値以上）の行を決定表から除外する（Ｓ６１１）。その後、処理はＳ６１２に進む。
【００５８】
Ｓ６１２では、決定表生成部２２０は、以上の処理によって生成された決定表を生成結果２９０として記憶する。尚、図６のＳ６０３〜Ｓ６０６の処理とＳ６０７〜Ｓ６１１の処理とは実行順序を逆にしてもよい。
【００５９】
図７は、図６における「差分の決定表生成処理Ｓ６０４」を説明するフローチャートである。以下、同図とともに差分の決定表生成処理Ｓ６０４について説明する。
【００６０】
まず決定表生成部２２０は、決定表生成対象の出力変数と比較対象の出力変数とが一致（変数名が一致）しているか否かを判定する（Ｓ７０１）。両者が一致している場合（Ｓ７０１：ＹＥＳ）、処理はＳ７０２に進み、両者が一致していない場合（Ｓ７０２：ＮＯ）、処理はＳ７０３に進む。
【００６１】
Ｓ７０２では、決定表生成部２２０は、決定表生成対象と比較対象とで出力変数が異なるようにする。例えば、決定表生成部２２０は、決定表生成対象と比較対象の各ルールの結果中の出力変数を「出力変数（対応するルールセットのルールセットＩＤ）」に置き換える。例えば、決定表生成対象が図３のルールセット３１０で、比較対象が図３のルールセット３２０である場合、決定表生成部２２０は、出力変数を夫々、「out(RS1)」、「out(RS2)」に置き換える。尚、出力変数の置き換え方法は上記方法に必ずしも限定されない。
【００６２】
続いて、決定表生成部２２０は、決定表生成対象と比較対象との差分を論理式で表す（Ｓ７０３）。具体的には、決定表生成部２２０は、まずルールセットに含まれるルールごとに、入力条件と結果とを論理積で結合し、さらにそれらを論理和で結合することにより、決定表生成対象及び比較対象を論理式に変換する。例えば、図３のルールセット３１０は「(((y>0 Or x>0) And x>100)And(out=1))Or(((y>0 Or x>0) And Not(x>100) And x>50)And(out=1))Or(((y>0 Or x>0) And Not(x>100) And Not(x>50))And(out=2))Or((Not(y>0
Or x>0))And(out=0))」という論理式に変換される。尚、この論理式は、ルールセット３１０に含まれるルールＩＤが「1」〜「4」のルールのうち、一つ以上のルールにおいて入力条件と結果が成り立つことを意味している。
【００６３】
続いて、決定表生成部２２０は、ルールセットの論理式を用いて差分を表す論理式を生成する。ここで差分は、決定表生成対象と比較対象のルールセットが異なる結果に至る入力条件と当該入力条件における結果との組合せであり、「決定表生成対象の論理式 And 
比較対象の論理式 And Not(決定表生成対象の出力変数 =比較対象の出力変数)」という論理式で表すことができる。この論理式は、決定表生成対象と比較対象を満たす入力条件と結果のうち、決定表生成対象の出力変数の値と比較対象の出力変数の値とが異なるケースを表している。
【００６４】
続いて、決定表生成部２２０は、差分を表す論理式を、リテラルを論理積で結合し（以下、リテラルを論理積で結合した論理式を「節」と称する。）、節を論理和で結合した形の等価な論理式（以下、「選言標準形」と称する。）に変換する（Ｓ７０４）。この変換処理（以下、「論理式等価変換処理Ｓ７０４」と称する。）の詳細については後述する。
【００６５】
続いて、決定表生成部２２０は、論理式等価変換処理Ｓ７０４の結果（戻り値）が「選言標準形が偽（差分無し）」であるか否かを判断する（Ｓ７０５）。論理式等価変換処理Ｓ７０４の結果が「選言標準形が偽（差分無し）」である場合（Ｓ７０５：ＹＥＳ）、決定表生成部２２０は、当該処理（差分の決定表生成処理Ｓ６０４）の結果（戻り値）を「差分無し」として当該処理を終了し、その後、処理は図６の決定表生成処理Ｓ６００のＳ６０６に進む。一方、論理式等価変換処理Ｓ７０４の結果が「選言標準形が偽でない（差分あり）」である場合（Ｓ７０５：ＮＯ）、処理はＳ７０６に進む。
【００６６】
Ｓ７０６では、決定表生成部２２０は、Ｓ７０４で生成した選言標準形の全ての節についてＳ７０７〜Ｓ７１０の処理を繰り返し実行する。選言標準形の全節についてＳ７０７〜Ｓ７１０の処理が終了すると、決定表生成部２２０は、当該処理（差分の決定表生成処理Ｓ６０４）の結果（戻り値）を「差分有り」として当該処理を終了する。その後、処理は図６の決定表生成処理Ｓ６００のＳ６０６に進む。
【００６７】
Ｓ７０７では、決定表生成部２２０は、差分入力条件と差分入力条件における結果との組合せ（以下、「結果ペア」と称する。）を取得する。決定表生成部２２０は、節に含まれるリテラルのうち出力変数を含まないリテラルをすべて論理積で結合した論理式を差分入力条件とし、節に含まれるリテラルのうち出力変数を含むすべてのリテラルを結果ペアとする。尚、Ｓ７０４で生成した選言標準形の各節には、決定表生成対象の出力変数を含むリテラルと比較対象の出力変数を含むリテラルとが一つずつ含まれる。
【００６８】
Ｓ７０８では、決定表生成部２２０は、Ｓ７０７で生成した結果ペアに含まれるリテラルにおいて、出力変数の値の不一致が自明であるか否かを判定する。具体的には、例えば、決定表生成部２２０は、「Not(差分入力条件 → 結果ペアに含まれる各リテラルの右辺を不等号で結合したリテラル)」の充足可能性を判定する。上記論理式が充足不能の場合
、上記論理式から否定を除外した論理式「（差分入力条件  →  結果ペアに含まれる各リテラルの右辺を不等号で結合したリテラル」は常に真である。即ち、差分入力条件が成り立つならば、必ず決定表生成対象の出力変数と比較対象の出力変数に割り当てられる値が異なるので、決定表生成部２２０は、出力変数の値の不一致が自明であるとする。上記論理式が充足可能の場合、決定表生成部２２０は、出力変数の値の不一致が自明でないとする。決定表生成部２２０が出力変数の値の不一致が自明であると判定した場合（Ｓ７０８：ＹＥＳ）、処理はＳ７１０に進む。決定表生成部２２０が出力変数の値の不一致が自明でないと判定した場合（Ｓ７０８：ＮＯ）、処理はＳ７０９に進む。
【００６９】
Ｓ７０９では、決定表生成部２２０は、結果ペアに含まれる各リテラルから右辺を抽出し、上記各右辺を不等号で結合したリテラル（以下、「結果不一致リテラル」と称する。）を生成し、上記結果不一致リテラルを差分入力条件に論理積で結合する。
【００７０】
Ｓ７１０では、決定表生成部２２０は、差分入力条件と結果ペアを差分として決定表に設定する。
【００７１】
図８は、図６における「全体の決定表生成処理Ｓ６０５」を説明するフローチャートである。以下、同図とともに全体の決定表生成処理Ｓ６０５について説明する。
【００７２】
まず決定表生成部２２０は、決定表生成対象に含まれているルールに対して、結果が同じルールをグループ化する（Ｓ８０１）。尚、以下、結果が同じルールの集合のことを「ルールグループ」と称する。
【００７３】
続いて、Ｓ８０２では、決定表生成部２２０は、Ｓ８０１で生成した全てのルールグループについてＳ８０３〜Ｓ８０９の処理を繰り返し実行する。
【００７４】
Ｓ８０３では、決定表生成部２２０は、ルールグループ中の全てのルールの入力条件を論理和で結合した論理式（以下、「統合入力条件」と称する。）を生成する。
【００７５】
続いて、決定表生成部２２０は、生成した統合入力条件を選言標準形に変換する（Ｓ８０４）。この変換処理（以下、「論理式等価変換処理Ｓ８０４」と称する。）の詳細については後述する。
【００７６】
続いて、決定表生成部２２０は、論理式等価変換処理Ｓ８０４の結果が「選言標準形が偽」であるか否かを判断する（Ｓ８０５）。論理式等価変換処理Ｓ８０４の結果が「選言標準形が偽」である場合（Ｓ８０５：ＹＥＳ）、決定表生成部２２０は、Ｓ８０６〜Ｓ８０９の処理をスキップする。論理式等価変換処理Ｓ８０４の結果が「選言標準形が偽」でない場合（Ｓ８０５：ＮＯ）、処理はＳ８０６に進む。
【００７７】
Ｓ８０６では、決定表生成部２２０は、選言標準形の節を夫々入力条件として抽出する。このとき入力条件は一つ以上抽出される。
【００７８】
続いて、決定表生成部２２０は、ルールグループ内のルールから結果を抽出する（Ｓ８０７）。このとき、ルールグループにおいて全てのルールは結果が同じであり、結果は一つのみ抽出される。
【００７９】
続いて、決定表生成部２２０は、Ｓ８０６で抽出した入力条件を入力条件とし、Ｓ８０６で抽出した結果を結果とするルール（以下、「決定表ルール」と称する。）を生成する（Ｓ８０８）。尚、決定表ルールはＳ８０６で抽出した入力条件ごとに一つ生成される。
【００８０】
続いて、決定表生成部２２０は、生成した決定表ルールを決定表に設定する（Ｓ８０９）。
【００８１】
図９は、前述した論理式等価変換処理（図７の「論理式等価変換処理Ｓ７０４」又は図８の「論理式等価変換処理Ｓ８０４」。以下、「論理式等価変換処理Ｓ９００」と称する。）を説明するフローチャートである。以下、同図とともに論理式等価変換処理Ｓ９００について説明する。
【００８２】
まず決定表生成部２２０は、変換対象の論理式から項を抽出する（Ｓ９０１）。
【００８３】
続いて、決定表生成部２２０は、Ｓ９０１で抽出した全ての項の否定を生成する。以下、Ｓ９０１で抽出した項、及び、Ｓ９０２で生成した項の否定の集合のことを「リテラル集合」と称する（Ｓ９０２）。尚、決定表生成部２２０は、Ｓ９０１で抽出した時点で否定が存在する項については否定を生成しない。
【００８４】
続いて、決定表生成部２２０は、変換対象の論理式の否定が充足可能であるか否かを判定する（Ｓ９０３）。変換対象の論理式の否定が充足不能である場合（Ｓ９０３：ＮＯ）、処理はＳ９０４に進み、変換対象の論理式の否定が充足可能である場合（Ｓ９０３：ＹＥＳ）、処理はＳ９０５に進む。
【００８５】
Ｓ９０４では、決定表生成部２２０は、「真（True）」を変換後の選言標準形（戻り値）として論理式等価変換処理Ｓ９００を終了する。
【００８６】
Ｓ９０５では、決定表生成部２２０は、変換対象の論理式が充足可能か否かを判定する。変換対象の論理式が充足不能な場合（Ｓ９０５：ＮＯ）、処理はＳ９０６に進み、充足可能な場合（Ｓ９０５：ＹＥＳ）、処理はＳ９０７に進む。
【００８７】
Ｓ９０６では、決定表生成部２２０は、「偽（False）」を変換後の選言標準形（戻り
値）として、論理式等価変換処理Ｓ９００を終了する。
【００８８】
Ｓ９０７では、決定表生成部２２０は、変換対象の論理式が充足する変数への値の割り当て（以下、「充足解」と称する。）を取得する。尚、決定表生成部２２０は、例えば、充足可能な論理式の充足解を取得する機能を有するＳＭＴソルバを用いて充足解を取得する。
【００８９】
続いて、決定表生成部２２０は、Ｓ９０７で取得した充足解において、充足するリテラルをすべて取得する（Ｓ９０８）。以下、Ｓ９０７で取得した充足解において、充足するリテラルの集合のことを「充足節」と称する。
【００９０】
続いて、決定表生成部２２０は、充足節からドントケアを除外する（Ｓ９０９）。決定表生成部２２０は、充足節からリテラルを一つ除外し、除外後の充足節に含まれる全てのリテラルと変換対象の論理式の否定とを論理積で結合した論理式が充足可能であるか否かを判定する。充足不能と判定した場合、決定表生成部２２０は、除外後の充足節は変換対象の論理式を満たすと判断し、除外されたリテラルをドントケアと判断する。決定表生成部２２０は、充足節に含まれるリテラルについて順にドントケアであるか否かを判定し、ドントケアである場合は充足節からドントケアを除外する。このとき、リテラル間の包含関係を調べ、上記包含関係に基づき、ドントケアであるか否かを判定する順序を決めてもよい。
【００９１】
続いて、決定表生成部２２０は、Ｓ９０６でドントケアを除外した充足節を充足節の集合（以下、「充足節集合」と称する。）に追加する（Ｓ９１０）。
【００９２】
続いて、決定表生成部２２０は、変換対象の論理式に重複禁止式を論理積で結合する（Ｓ９１１）。即ち、決定表生成部２２０は、類似する充足節が生成されることを防ぐため、充足節に含まれる全てのリテラルを論理積で結合し、全体を否定した論理式を重複禁止式として変換対象の論理式に論理積で結合する。
【００９３】
続いて、決定表生成部２２０は、変換対象の論理式が充足可能か否かを判定する（Ｓ９
１２）。変換対象の論理式が充足可能である場合（Ｓ９１２：ＹＥＳ）、処理はＳ９０７に戻り、変換対象の論理式が充足不能である場合（Ｓ９１２：ＮＯ）、処理はＳ９１３に進む。
【００９４】
Ｓ９１３では、決定表生成部２２０は、充足集合節に含まれる全ての充足節に対して全てのリテラルを論理積で結合した論理式を生成し、上記論理式の全てを論理和で結合した論理式を生成してこれを戻り値とする。その後、処理は呼び出し元の処理に後続する処理に進む。即ち図７の論理式等価変換処理Ｓ７０４の場合はＳ７０５に進み、図８の論理式等価変換処理Ｓ８０４の場合はＳ８０５に進む。
【００９５】
以上に説明したように、決定表生成装置１００は、決定表生成対象であるルール仕様のうち、生成範囲特定情報２８０によって特定される範囲について決定表を生成するので、例えば、ルール仕様に含まれるルールが膨大である場合にルール仕様の確認にかかる人の負荷を軽減することができる。
【００９６】
また決定表生成装置１００は、例えば、決定表の生成対象であるルール仕様のうち、異なる結果となる同一の入力条件と当該入力条件における決定表の生成対象のルール仕様の結果及び比較の対象とするルール仕様の結果との組合せ（差分）について決定表を生成する。そのため、ユーザが確認を行いたい部分（例えば、ルール仕様（ソースコード）の変更（修正）前後に関係する部分）のみについて決定表を生成することができ、ユーザは効率よくルール仕様を確認することができる。
【００９７】
また決定表生成装置１００は、例えば、メトリクス値及びメトリクス評価情報に基づき特定した生成範囲について決定表を生成する。そのため、ユーザはメトリクス値及びメトリクス評価情報を適切に設定することで、確認を行いたい部分について決定表を生成することができ、ユーザは効率よくルール仕様を確認することができる。
【００９８】
また決定表生成装置１００は、例えば、ルール仕様にフィルタ条件を適用することにより特定される生成範囲について決定表を生成する。そのため、ユーザはフィルタ条件を適切に設定することで、確認を行いたい部分について決定表を生成することができ、ユーザは効率よくルール仕様を確認することができる
【００９９】
以上、本発明について実施の形態に基づき具体的に説明したが、本発明は上記の実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。例えば、上記の実施の形態は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また上記実施形態の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【０１００】
例えば、以上ではルールの結果に含まれるリテラルの数が一つである場合を例として説明したが、「変数＝値」、「変数＝変数」、「変数＝変数を０以上含む計算式」といった形式のリテラルを論理積で結合することで、結果に２つ以上のリテラルを含むルールについても前述と同様の論理式で表すことが可能である。また結果に２つ以上のリテラルを含むルールが存在する場合、結果を論理積で分割し、分割後の各リテラルを結果とし、上記結果に二つ以上のリテラルを含むルールの入力条件を入力条件とするルールを生成することで、上記結果に２つ以上のリテラルを含むルールを、結果に一つのリテラルを含むルールに変換することができる。
【０１０１】
また上記の各構成、機能部、処理部、処理手段等は、それらの一部または全部を、例えば、集積回路で設計する等によりハードウェアで実現してもよい。また上記の各構成、機
能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリやハードディスク、ＳＳＤ（Solid State Drive）等の記録装置、また
はＩＣカード、ＳＤカード、ＤＶＤ等の記録媒体に置くことができる。
【０１０２】
また上記の各図において、制御線や情報線は説明上必要と考えられるものを示しており、必ずしも実装上の全ての制御線や情報線を示しているとは限らない。例えば、実際にはほとんど全ての構成が相互に接続されていると考えてもよい。
【０１０３】
また以上に説明した決定表生成装置１００の各種機能部、各種処理部、各種データベースの配置形態は一例に過ぎない。各種機能部、各種処理部、各種データベースの配置形態は、決定表生成装置１００が備えるハードウェアやソフトウェアの性能、処理効率、通信効率等の観点から最適な配置形態に変更し得る。
【０１０４】
また前述した各種データベースの構成（スキーマ（Schema）等）は、リソースの効率的な利用、処理効率向上、アクセス効率向上、検索効率向上等の観点から柔軟に変更し得る。
【符号の説明】
【０１０５】
１００  決定表生成装置、２０５  情報記憶部、２１０  ルール仕様生成部、２２０  決定表生成部、２３０  決定表逆変換部、２４０  メトリクス値取得部、２６０  ソースコード、２７０  ルール仕様、２８０  生成範囲特定情報、２９０  生成結果、５００  設定画面、Ｓ６００  決定表生成処理、Ｓ６０４  差分の決定表生成処理、Ｓ６０５  全体の決定表生成処理、Ｓ９００  論理式等価変換処理
【図１】
2019133538.tif 000003
【図２】
2019133538.tif 000004
【図３】
2019133538.tif 000005
【図４】
2019133538.tif 000006
【図５】
2019133538.tif 000007
【図６】
2019133538.tif 000008
【図７】
2019133538.tif 000009
【図８】
2019133538.tif 000010
【図９】
2019133538.tif 000011