(57)【特許請求の範囲】
【請求項１】
ソフトウェア仕様の開発を支援する装置であって、
複数の条件を有する条件部および複数の結果を有する結果部からなる複数の命題形式の仕様を受け付ける命題仕様受付手段と、各行が前記複数の条件の１つまたは前記複数の結果の１つを示し、各列が前記複数の命題形式の各々を示す表形式で表した決定表を前記複数の命題形式の仕様から作成する決定表作成手段と、前記複数の命題形式の仕様の各々が互いに矛盾しないかどうかを判定する整合性検証手段と
を備え、
前記決定表作成手段は、前記命題仕様受付手段から前記複数の命題形式の仕様を取得すると、前記複数の命題形式の仕様の各々について、当該命題形式の仕様の条件部と結果部を取り出して前記決定表の行を作成し、当該命題形式の仕様に対応する列の当該行の欄に印付けし、
前記整合性検証手段は、複数の命題形式の仕様のうち任意の２つの命題形式の仕様を前記決定表から取り出し、前記２つの命題形式の仕様の条件部の論理積が充足可能かどうかを判定し、充足可能であるならば前記複数の命題形式の仕様の各々が互いに矛盾すると出力する
ことを特徴とする装置。
【請求項２】
前記命題仕様受付手段が新たな命題形式の仕様を受け付け、前記決定表作成手段が前記命題仕様受付手段から前記新たな命題形式の仕様を取得すると、前記決定表作成手段が前記新たな命題形式の仕様の条件部と結果部を取り出して前記決定表の行に挿入することを特徴とする請求項１に記載の装置。
【請求項３】
１つまたは複数の条件を有する必要条件部と１つまたは複数の条件を有する十分条件部からなる、複数の条件間の制約関係を示す条件制約を受け付ける条件制約受付手段と、
前記複数の命題形式の仕様が前記条件制約を満たすかどうかをチェックする条件制約検査手段と、
をさらに備え、
前記条件制約検査手段は、前記条件制約受付手段から前記条件制約を取得すると、前記決定表の各列について、当該列にかかる命題仕様が前記条件制約の十分条件部を構成する複数の条件を全て有し、かつ、当該命題仕様の結果部と前記条件制約の必要条件部とが同時に成立しえない場合には、当該列を前記決定表から削除する
ことを特徴とする請求項１に記載の装置。
【請求項４】
前記決定表の複数の列のうち、条件部の一部のみが異なり、かつ、結果部が同一である複数の列について、当該複数の列を１つの列に統合し、任意値を表す記号で前記条件部の前記一部を置き換える、任意値記号置換手段をさらに備える請求項１乃至３に記載の装置。
【請求項５】
前記決定表から、当該決定表の仕様を満たすソフトウェア・プログラムを生成することを特徴とする請求項１乃至３に記載の装置。
【請求項６】
前記整合性検証手段は、ＳＡＴソルバを用いて前記論理積が充足可能かどうかを判定することを特徴とする請求項１に記載の装置。
【請求項７】
ソフトウェア仕様の開発を支援する装置におけるソフトウェア仕様開発支援方法であって、
前記装置は、複数の条件を有する条件部および複数の結果を有する結果部からなる複数の命題形式の仕様を受け付ける命題仕様受付手段と、各行が前記複数の条件の１つまたは前記複数の結果の１つを示し、各列が前記複数の命題形式の各々を示す表形式で表した決定表を前記複数の命題形式の仕様から作成する決定表作成手段と、前記複数の命題形式の仕様の各々が互いに矛盾しないかどうかを判定する整合性検証手段と
を備え、
前記決定表作成手段が、前記命題仕様受付手段から前記複数の命題形式の仕様を取得すると、前記複数の命題形式の仕様の各々について、当該命題形式の仕様の条件部と結果部を取り出して前記決定表の行を作成し、当該命題形式の仕様に対応する列の当該行の欄に印付けするステップと、
前記整合性検証手段が、複数の命題形式の仕様のうち任意の２つの命題形式の仕様を前記決定表から取り出し、前記２つの命題形式の仕様の条件部の論理積が充足可能かどうかを判定し、充足可能であるならば前記複数の命題形式の仕様の各々が互いに矛盾すると出力するステップと
を含むことを特徴とする方法。
【請求項８】
前記命題仕様受付手段が新たな命題形式の仕様を受け付け、前記決定表作成手段が前記命題仕様受付手段から前記新たな命題形式の仕様を取得すると、前記決定表作成手段が前記新たな命題形式の仕様の条件部と結果部を取り出して前記決定表の行に挿入することを特徴とする請求項７に記載の方法。
【請求項９】
前記装置は、１つまたは複数の条件を有する必要条件部と１つまたは複数の条件を有する十分条件部からなる、複数の条件間の制約関係を示す条件制約を受け付ける条件制約受付手段と、
前記複数の命題形式の仕様が前記条件制約を満たすかどうかをチェックする条件制約検査手段と、
をさらに備え、
前記条件制約検査手段が、前記条件制約受付手段から前記条件制約を取得すると、前記決定表の各列について、当該列にかかる命題仕様が前記条件制約の十分条件部を構成する複数の条件を全て有し、かつ、当該命題仕様の結果部と前記条件制約の必要条件部とが同時に成立しえない場合には、当該列を前記決定表から削除するステップ
をさらに含む請求項７に記載の方法。
【請求項１０】
前記決定表の複数の列のうち、条件部の一部のみが異なり、かつ、結果部が同一である複数の列について、当該複数の列を１つの列に統合し、任意値を表す記号で前記条件部の前記一部を置き換える、任意値記号置換手段をさらに備える請求項７乃至９に記載の方法。
【請求項１１】
前記決定表から、当該決定表の仕様を満たすソフトウェア・プログラムを生成することを特徴とする請求項７乃至９に記載の方法。
【請求項１２】
前記整合性検証手段が、ＳＡＴソルバを用いて前記論理積が充足可能かどうかを判定することを特徴とする請求項７に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェア開発を支援する技術に関し、特に、表形式のソフトウェア仕様を作成及び検証する技術に関する。
【背景技術】
【０００２】
ソフトウェアの仕様を、ソフトウェア実行前の条件とその実行後の結果の対応関係で定義する場合がある。この条件と結果の対応関係は決定表（デシジョンテーブル）と呼ばれる表形式で表現できることが知られており、ソフトウェア開発工程において頻繁に使用される。決定表にはいくつかの異なる記述形式があるが、記述形式が異なる決定表でも条件と結果の対応関係を表すというセマンティクスは一様である。さらに、決定表は、条件マトリクスやチェックリストなどの別の名称で呼ばれる場合もある。
【０００３】
この決定表を使って仕様を表すことにより、条件と結果の対応関係を誤解なく明確に記述できるとともに、条件のパタン漏れを発見し易くなるという効果がある。一方で、決定表による仕様記述には次のような欠点もある。すなわち、条件の要素が増えるにつれてパタンが増え決定表が肥大化するため、可読性が低下するという問題がある。
【０００４】
この問題を解決する従来技術として、特許文献１では、決定表を分割して表記することで可読性の低下を防ぐ方法が開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００５−４４３０３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１で開示されている従来技術を用いると、決定表を可読性の高い形式で表示できる。しかし決定表の記述量は変わらないため、決定表の入力量が増え作成工数が増加するという問題や決定表を保存するために必要な記憶容量が増大すること、それに伴い決定表に記載された仕様の検証に必要な時間を多く要すること、仕様の冗長性を発見しにくくなることという問題は解決できない。
【０００７】
上記に鑑み、上記課題に対処し、可読性は確保しつつ決定表の作成・解読工数削減と記憶容量削減を達成するための技術を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記課題を解決し、上記目的を達成するため、ソフトウェア仕様の開発を支援する装置であって、複数の条件を有する条件部および複数の結果を有する結果部からなる複数の命題形式の仕様を受け付ける命題仕様受付手段と、各行が上記複数の条件の１つまたは上記複数の結果の１つを示し、各列が上記複数の命題形式の各々を示す表形式で表した決定表を上記複数の命題形式の仕様から作成する決定表作成手段と、上記複数の命題形式の仕様の各々が互いに矛盾しないかどうかを判定する整合性検証手段とを備え、上記決定表作成手段は、上記命題仕様受付手段から上記複数の命題形式の仕様を取得すると、上記複数の命題形式の仕様の各々について、当該命題形式の仕様の条件部と結果部を取り出して上記決定表の行を作成し、当該命題形式の仕様に対応する列の当該行の欄に印付けし、上記整合性検証手段は、複数の命題形式の仕様のうち任意の２つの命題形式の仕様を上記決定表から取り出し、上記２つの命題形式の仕様の条件部の論理積が充足可能かどうかを判定し、充足可能であるならば上記複数の命題形式の仕様の各々が互いに矛盾すると出力することを特徴とする装置を提供する。
【発明の効果】
【０００９】
一実施形態によれば、決定表の作成・解決に必要な工数を削減し、決定表を保存・表示するために必要な記憶容量を削減することができる。
【図面の簡単な説明】
【００１０】
【図１】決定表作成支援・検証装置の構成例を示すブロック図である。
【図２】決定表作成支援・検証装置のハードウェア構成例を示すブロック図である。
【図３】入力命題仕様入力・表示部が受け付ける入力命題仕様の例である。
【図４】条件項目及び結果項目のデータの例である
【図５】入力命題仕様から作成した決定表の例である。
【図６】決定表作成の手順例を示すフローチャートである。
【図７】入力命題仕様を解釈して決定表に記入する手順例を示すフローチャートである。
【図８】整合性検証の結果に基づく修正後の決定表の例である。
【図９】決定表及び入力命題仕様の整合性検証の手順例を示すフローチャートである。
【図１０】条件制約入力・表示部が受け付ける条件制約の例である。
【図１１】条件制約に基づいて列を削除した後の決定表の例である。
【図１２】任意値記号置換後の決定表の例である。
【図１３】決定表の最小化の手順例を示すフローチャートである。
【図１４】決定表から条件制約を満たさない列を削除する手順例を表すフローチャートである。
【図１５】決定表に対する任意値記号置換えの手順例を表すフローチャートである。
【図１６】決定表から変換した出力命題仕様の例である。
【図１７】決定表変換及び出力命題仕様表示の手順例を示すフローチャートである。
【図１８】決定表作成支援・検証装置の画面表示の例である。
【図１９】プログラム生成の手順例を表すフローチャートである。
【図２０】決定表から生成したプログラムの例である。
【図２１】決定表と入力命題仕様の対応表示の例である。
【図２２】検証結果のハイライト表示の例である。
【発明を実施するための形態】
【００１１】
以下、本発明の実施の一形態を、図面を参照しながら詳細に説明する。
【００１２】
本実施形態は、決定表作成支援・検証装置に適用される。
【００１３】
本実施形態では、命題形式の仕様（入力命題仕様と呼ぶ）の入力を受け付けて、その入力命題仕様の内容に基づいて決定表を作成する。つまりユーザは、決定表の各列にマルなどの記号を直接記入するのではなく、入力命題仕様を入力することで決定表を作成する。
【００１４】
よって本実施形態によれば、決定表作成のための入力量を削減できる。また、決定表作成の際に参照する要求定義文書の文を大きく変更することなく命題仕様として直接的に本装置に入力できるため、要求定義文書の解読作業を軽減できる。
【００１５】
さらに本実施形態では、入力した命題仕様と、その命題仕様に基づいて記入した決定表の列を対応付けて表示する。
【００１６】
よって本実施形態によれば、命題仕様のもとになった要求定義文書に変更があった場合に、要求定義文書の変更による決定表への影響を誤りなく特定できる。
【００１７】
また本実施形態では、条件に関する命題形式の制約（条件制約と呼ぶ）の入力を受け付け、その条件制約の内容に基づいて、成立し得ない決定表の列を削除する。あるいは、任意値記号置換えの命令を受け付け、マルなどの記号を任意値記号に置き換えることで、複数の列を１列に集約する。
【００１８】
よって本実施形態によれば、不要な列を削除して決定表を最小化するため、決定表保存・表示のために必要な記憶容量を削減できる。
【００１９】
また本実施形態では、作成した決定表の表す仕様を命題形式の仕様（出力命題仕様と呼ぶ）として出力する。
【００２０】
よって本実施形態によれば、決定表が定義する仕様の全体像を容易に読み取ることができる。また、決定表の最小化後に出力命題仕様の出力を行うことで、（入力命題仕様とは異なり）、冗長な情報あるいは重複した情報を含まない命題形式の仕様が得られる。そのため、命題形式の仕様の保存・表示のために必要な記憶容量を削減できる。
【００２１】
また本実施形態では、入力命題仕様や決定表の矛盾を検証し、矛盾する入力命題仕様や決定表の列を対応付けて表示する。さらに矛盾検証の問題を充足可能性問題に帰着し、充足可能性問題を高速に解くことができるＳＡＴソルバを使用することで、上記矛盾検証を高速化する。
【００２２】
さらに本実施形態では、決定表から、その対象ソフトウェアの処理を表すプログラムを生成する。
【００２３】
よって本実施形態によれば、矛盾のない決定表から、その仕様を実現する処理を表す正しいプログラムを効率的に取得できる。
【００２４】
図１は、本実施形態における決定表作成支援・検証装置２０１の構成例を示すブロック図である。
【００２５】
決定表作成支援・検証装置２０１は、入力命題仕様入力・表示部１０１、条件／結果項目入力部１０２、条件／結果項目抽出部１０３、決定表結果記入部１０４、決定表見出し作成部１０５、任意値記号置換部１０６、条件制約入力・表示部１０７、不成立条件削除部１０８、決定表保持部１０９、整合性検証部１１０、入力命題仕様保持部１１１、決定表変換部１１２、出力命題仕様保持部１１３、決定表表示・編集部１１４、出力命題仕様表示部１１５、プログラム生成部１１６、条件制約保持部１１７を含む。
【００２６】
入力命題仕様入力・表示部１０１は、入力命題仕様を受け付け、受け付けた入力命題仕様を入力命題仕様保持部１１１に登録する。
【００２７】
条件／結果項目抽出部１０３は、入力命題仕様保持部１１１から入力命題仕様を取得し、取得した入力命題仕様から条件項目、及び結果項目を抽出する。抽出した条件項目、及び結果項目は、決定表見出し作成部１０５に渡す。
【００２８】
条件／結果項目入力部は、条件項目、及び結果項目の入力を受け付け、決定表見出し作成部１０５に受け渡す。
【００２９】
決定表見出し作成部１０５は、条件／結果項目抽出部１０３あるいは条件／結果項目入力１０２から条件項目、及び結果項目を受け取り、決定表の見出し部分を作成する。決定表の見出しは、図５に示す通り、１列目５０２に条件／結果項目を縦に並べ、そして各条件／結果項目の右隣の列に、条件／結果項目の取り得る値５０３を縦に並べて作成する。さらに上記決定表の条件部を全パタン分作成する。前記条件部のパタンは、条件項目の総数と、その条件項目が何通りの値をとるかに基づいて網羅的に作成される。例えば、条件項目Ａと条件項目Ｂが存在し、条件項目Ａは値ａ１と値ａ２をとり、条件項目Ｂが値ｂ１と値ｂ２と値ｂ３をとると定義する。この場合、条件部に作成されるパタンは（ａ１、ｂ１）（ａ１、ｂ２）（ａ１、ｂ３）（ａ２、ｂ１）（ａ２、ｂ２）（ａ２、ｂ３）の６通りである。これは上記定義から機械的に作成される。よって仮に条件項目Ａが現実には存在しない条件項目だったとしても、あるいは値ａ１が条件項目の取り得えない値だったとしても、上記定義に従って条件部を作成する。また、条件項目が１つも定義されていない場合は、決定表の条件部は作成しない。作成した決定表は決定表保持部１０９に登録する。
【００３０】
決定表結果記入部１０４は、入力命題仕様保持部１１１から入力命題仕様を取得し、同時に決定表保持部１０９から結果記入対象の決定表を取得する。そして、上記入力命題仕様に基づいて、上記決定表の結果部を記入する。
【００３１】
決定表表示・編集部１１４は、決定表保持部１０９から決定表を取得して画面表示するとともに、ユーザによる決定表の編集を受け付ける。決定表を画面表示する際は、決定表結果記入部１０４によって結果部を記入した列と、そのもとになった上記入力命題仕様を対応付けて表示する。決定表と入力命題仕様の対応表示の例を図２１に示す。図２１では，決定表２１０１と入力命題仕様２１０３を対応付けて表示している。決定表２１０１の決定表列２１０２は，入力命題仕様２１０３に基づいて記入されたため，入力命題仕様２１０３と決定表列２１０２を同色に色づけて表示する。または，ユーザが入力命題仕様を選択した場合のみ，選択した入力命題仕様とその対応する決定表列を色づけて表示してもよい。また、結果部が未記入の列も強調表示する。編集した決定表は、決定表保持部１０９に再登録する。
【００３２】
整合性検証部１１０は、入力命題仕様保持部１１１から入力命題仕様を取得し、さらに取得した入力命題仕様に基づいて記入した決定表を決定表保持部１０９から取得する。そして、上記入力命題仕様間の整合性、及び上記入力命題仕様と上記決定表間の整合性を検証し、検証結果を上記入力命題仕様及び上記決定表に対応付けて、それぞれ入力命題仕様保持部１１１及び決定表保持部１０９に登録する。
【００３３】
条件制約入力・表示部１０７は、条件制約の入力を受け付け、受け付けた上記条件制約を条件制約保持部１１７に登録する。
【００３４】
不成立条件削除部１０８は、条件制約保持部１１７から条件制約を取得し、さらに取得した条件制約の対象となる決定表を決定表保持部１０９から取得する。そして、上記条件制約に基づいて成立し得ないパタンを特定し、そのパタンを表す列を上記決定表から削除する。その後、成立し得ない列を削除した上記決定表を決定表保持部１０９に再登録する。
【００３５】
任意値記号置換部１０６は、決定表の任意値記号置換えの命令を受け付け、指定された決定表を決定表保持部１０９から取得する。そして、決定表の列が含むマル記号を、任意値記号であるアスタリスク記号に置き換え、複数の列を１列に集約する。さらに、集約後の上記決定表を決定表保持部１０９に再登録する。
【００３６】
決定表変換部１１２は、決定表変換の命令を受け付け、指定された決定表を決定表保持部１０９から取得する。そして取得した上記決定表の表す仕様を、命題形式の仕様である出力命題仕様に変換する。変換した上記出力命題仕様は、出力命題仕様保持部１１３に登録される。
【００３７】
出力命題仕様表示部１１５は、出力命題仕様保持部１１３から出力命題仕様を取得し、取得した上記出力命題仕様を画面表示する。
【００３８】
プログラム生成・表示部１１６は、決定表保持部１０９から決定表を取得し、上記決定表が仕様を表すソフトウェアの、処理を表すプログラムを生成する。さらに、生成した上記プログラムを画面表示する。
【００３９】
図２は、決定表作成支援・検証装置のハードウェア構成例を示すブロック図である。
【００４０】
決定表作成支援・検証装置２０１は、ＣＰＵ２０２、メモリ２０３、外部記憶装置２０４、表示装置２０５、入力装置２０６、及び外部媒体入出力装置２０７を備える。
【００４１】
ＣＰＵ２０２は、メモリ２０３に記憶されたプログラムを実行することによって、各種処理を実行する。メモリ２０３は、ＣＰＵ２０２のワークエリアとして機能し、プログラム及びプログラムの実行に必要なデータを記憶する。具体的には、入力命題仕様入力・表示部１０１、条件／結果項目入力部１０２、条件制約入力・表示部１０７、条件／結果項目抽出部１０３、決定表結果記入部１０４、決定表見出し作成部１０５、不成立条件削除部１０８、整合性検証部１１０、決定表表示・編集部１１４、任意値記号置換部１０６、決定表変換部１１２、プログラム生成・表示部１１６、及び出力命題仕様表示部１１５を構成するプログラムが記憶され、同時に入力命題仕様保持部１１１、条件制約保持部１１７、決定表保持部１０９、及び出力命題仕様保持部１１３の保持するデータが記憶される。
【００４２】
外部記憶装置２０４は、各種データを格納する。外部記憶装置２０４は、例えば、ハードディスク装置などである。具体的には、入力命題仕様保持部１１１、条件制約保持部１１７、決定表保持部１０９、及び出力命題仕様保持部１１３が格納される。
【００４３】
あるいは、入力命題仕様入力・表示部１０１、条件／結果項目入力部１０２、条件制約入力・表示部１０７、条件／結果項目抽出部１０３、決定表結果記入部１０４、決定表見出し作成部１０５、不成立条件削除部１０８、整合性検証部１１０、決定表表示・編集部１１４、任意値記号置換部１０６、決定表変換部１１２、プログラム生成・表示部１１６、及び出力命題仕様表示部１１５を構成するプログラムの少なくとも一部についても、外部記憶装置２０４に格納され、各種処理実行の際にＣＰＵ２０２がメモリ２０３へ読み出してプログラムを実行することとしてもよい。また各プログラムは、あらかじめメモリ２０３または外部記憶装置２０４に格納されていても良いし、必要に応じて、利用可能な媒体を介して、他の装置からメモリ２０３または外部記憶装置２０４に導入されてもよい。媒体とは、例えば、外部媒体入出力装置２０７に着脱可能な記憶媒体、または、ネットワークや、ネットワークを伝搬する搬送波やデジタル信号などの通信媒体を指す。
【００４４】
表示装置２０５は、プログラムの処理結果などを表示する。表示装置２０５は、例えば、ディスプレイなどである。入力装置２０６は、処理の実行指示及び処理に必要な情報の入力などを利用者から受け付ける。入力装置２０６は、例えば、キーボード及びマウスなどである。
【００４５】
外部媒体入出力装置２０７は、外部媒体と、外部記憶装置２０４に格納されているデータなどの入出力を行う。外部媒体は、外部媒体入出力装置２０７に着脱可能で可搬性のある記憶媒体であり、外部媒体出力装置２０７は、外部媒体に読み書き可能なドライブ装置などである。
【００４６】
図３は、入力命題仕様入力・表示部が受け付ける入力命題仕様の例である。
【００４７】
入力命題仕様３０１、３０２、３０３、３０４は自然言語形式の入力命題仕様であり、入力命題仕様３０５は論理式形式の入力命題仕様である。入力命題仕様中の括弧（「」）に囲まれた用語は、条件及び結果項目、あるいはそれらの値を表す。例えば入力命題仕様３０１に含まれる「保険加入有無」という用語は条件項目であり、「加入済み」という用語はその値である。また、入力命題仕様３０５は、入力命題仕様３０１と同じ意味を表す。
【００４８】
図４は、条件項目及び結果項目のデータの例である。
【００４９】
条件項目のデータ４０１は、条件項目４０２と条件の値４０３を含む。条件項目４０２は条件の項目名称を表し、条件の値４０３はその項目が取り得る値の名称を表す。
【００５０】
結果項目のデータ４０４は、結果項目４０５と結果の値４０６を含む。結果項目４０５は結果の項目名称を表し、結果の値４０６はその項目が取り得る値の名称を表す。
【００５１】
図５は、決定表の例であり、条件項目のデータ４０１と、結果項目のデータ４０４と、入力命題仕様３０１、３０２、３０３、及び３０４から作成した決定表である。
【００５２】
決定表５０１は、条件／結果項目の欄５０２、条件／結果項目の値の欄５０３、及び条件と結果の対応関係を表す列５０４を含む。列５０４の表す対応関係は、列５０４のマル記号が、条件／結果項目の欄５０２及び条件／結果項目の値の欄５０３のどの行に記入されているかによって定義される。例えば、決定表５０１の最左列は、「保険加入有無が加入済みで、保険加入額が２万円以上で、国籍が日本ならば、補助金は交付ありで、納税義務は義務あり」という対応関係を表す。
【００５３】
図６は、決定表作成の手順例を示すフローチャートである。
【００５４】
以下に示す処理は、決定表作成支援・検証装置２０１の備えるＣＰＵ２０２が、メモリ２０３で実行するプログラムによって実現される。そしてこのプログラムは、以下に説明される各種の動作を行うためのコードから構成されている。
【００５５】
ＣＰＵ２０２は、入力命題仕様入力・表示部１０１を実行することによって、入力命題仕様を受け付け、上記入力命題仕様を入力命題仕様保持部１１１に登録する（ステップ６０１）。
【００５６】
ＣＰＵ２０２は、条件／結果項目入力部１０２を実行することによって、ユーザからの条件項目データあるいは結果項目データの入力の有無を判定する。入力がある場合はステップ６０３を、入力がない場合はステップ６０４を実行する（ステップ６０２）。
【００５７】
ＣＰＵ２０２は、条件／結果項目抽出部１０３を実行することによって、上記入力命題仕様から条件項目データ及び結果項目データを抽出する（ステップ６０３）。
【００５８】
ＣＰＵ２０２は、条件結果項目入力１０２を実行することによって、条件項目データ及び結果項目データの入力を受け付ける（ステップ６０４）。
【００５９】
ＣＰＵ２０２は、決定表見出し作成部１０５を実行することによって、上記条件項目データ及び結果項目データに基づいて、決定表の見出し部分を作成する。さらに決定表の条件部を全列分作成する。作成した決定表は決定表保持部１０９に登録する。（ステップ６０５）。
【００６０】
ＣＰＵ２０２は、決定表結果記入部１０４を実行することによって、上記決定表を決定表保持部１０９から取得する。さらに、上記入力命題仕様を解釈して、上記決定表の結果部を記入する（ステップ６０６）。
【００６１】
決定表結果記入部１０４は、結果記入済みの上記決定表を決定表保持部１０９に登録する（ステップ６０７）。
【００６２】
ＣＰＵ２０２は、決定表表示・編集部１１４を実行することによって、決定表保持部１０９から決定表を取得し、画面表示する。決定表を画面表示する際は、決定表結果記入部１０４によって記入した列と、そのもとになった入力命題仕様を対応付けて表示する。加えて、結果部が未記入の列を強調表示する。また、ユーザからの上記決定表の編集入力を受け付け、上記決定表を編集する（ステップ６０８）。
【００６３】
決定表表示・編集部１１４は、編集済みの上記決定表を決定表保持部１０９に再登録する（ステップ６０９）。
【００６４】
図７は、入力命題仕様を解釈して決定表に記入する手順例を示すフローチャートであり、ステップ６０６の詳細手順である。
【００６５】
以下に示す処理は、決定表作成支援・検証装置２０１の備えるＣＰＵ２０２が、メモリ２０３で実行するプログラムによって実現される。そしてこのプログラムは、以下に説明される各種の動作を行うためのコードから構成されている。
【００６６】
ＣＰＵ２０２は、決定表結果記入部１０４を実行することによって、入力命題仕様の条件部と結果部を分割する（ステップ７０１）。
【００６７】
決定表結果記入部１０４は、決定表保持部１０９から入力命題仕様の記入対象である決定表を取得する（ステップ７０２）。
【００６８】
決定表結果記入部１０４は、上記決定表から、条件が上記入力命題仕様の条件部と一致する列を検索し、取得する（ステップ７０３）。
【００６９】
決定表結果記入部１０４は、前ステップで取得した列の結果に、上記入力命題仕様の結果部の内容を記入する（ステップ７０４）。
【００７０】
図８は、整合性検証の結果に基づく修正後の決定表の例である。
【００７１】
決定表８０１は整合性検証部１１０の検証結果に基づいて、決定表５０１を修正した結果である。決定表５０１は、結果の矛盾５０５、５０６と、結果の未定義５０７、５０８、及び５０９を含む。整合性検証部１１０は、検証の結果として、結果の矛盾５０５、５０６をその矛盾する入力命題仕様と対応付けてハイライト表示する。検証結果のハイライト表示の例を図２２に示す。結果の矛盾５０５，５０６を含む決定表列２２０２は，入力命題仕様２２０３，２２０４に基づいて記入される。よって図２２に示す通り，入力命題仕様２２０３，２２０４，及び決定表列２２０２を同色で色づけ表示する。または，ユーザが矛盾する複数の入力命題仕様を選択した場合のみ，選択された入力命題仕様とその矛盾を含む決定表列を色づけて表示してもよい。また（検証の結果としてではないが）、結果の未定義５０７、５０８も検出し、ハイライト表示する。ユーザはこれらのハイライト表示に基づいて、入力命題仕様の追加・削除や決定表の直接編集を行い、決定表８０１を作成する。
【００７２】
図９は、決定表及び入力命題仕様の整合性検証の手順例を示すフローチャートである。
【００７３】
以下に示す処理は、決定表作成支援・検証装置２０１に備えられたＣＰＵ２０２が、メモリ２０３内に格納されたプログラムを実行することによって実現される。そしてこのプログラムは、以下に説明する各種の動作を行うためのコードから構成されている。
【００７４】
ＣＰＵ２０２は、整合性検証部１１０を実行することによって、決定表保持部１０９から決定表を取得する（ステップ９０１）。
【００７５】
整合性検証部１１０は、入力命題仕様保持部１１１から、上記決定表の結果部の記入に用いた入力命題仕様を取得する（ステップ９０２）。
【００７６】
整合性検証部１１０は、取得した上記入力命題仕様から、異なる２つの入力命題仕様を選択し、整合性を検証する（ステップ９０３）。整合性の検証には例えば次の方法を用いる。
【００７７】
検証対象の２つの入力命題仕様から、乗法標準形（Conjunctive Normal Form）の検証用論理式を作成する。上記検証用論理式は、その充足可能性と、上記２つの入力命題仕様の整合性とが対応付くように作成する。例えば、「保険加入有無が保険加入済みで、かつ保険納入額が２万円以上の場合、補助金は交付あり」という入力命題仕様１と、「保険加入有無が保険加入済みで、かつ国籍が日本の場合、補助金は交付なし」という入力命題仕様２の整合性検証について考える。まず、２つの入力命題仕様の条件部と結果部を分割し、それぞれ条件部１「保険加入有無が保険加入済みで、かつ保険納入額が２万円以上」、結果部１「補助金は交付あり」、条件部２「保険加入有無が保険加入済みで、かつ国籍が日本」、結果部２「補助金は交付なし」とする。次に条件部、結果部をそれぞれ乗法標準系の論理式に変換する。条件項目あるいは結果項目が２通りの値をとる場合、その条件あるいは結果を１つの命題記号で表現することができる。例えば「保険加入有無が保険加入済み」を論理式Ａで表現でき、逆に「保険加入有無が未加入」を論理式¬Ａで表現できる。条件項目あるいは結果項目がｎ（≧３）通りの値をとる場合、その条件あるいは結果をｎ個の命題記号で表現できる。例えば「保険納入額が２万円以上」を論理式Ｂ＿１∧¬Ｂ＿２∧¬Ｂ＿３で表現でき、逆に「保険納入額が１万円以上２万円未満」を論理式¬Ｂ＿１∧Ｂ＿２∧¬Ｂ＿３で表現できる。同様に，「国籍が日本」は論理式Ｃで表現できる。
【００７８】
また，条件部に含まれる「かつ」という言葉は，論理式における「∧」に変換できる。よって条件部１は論理式「Ａ∧（Ｂ＿１∧¬Ｂ＿２∧¬Ｂ＿３）」で表せる。同様に条件部２は論理式「Ａ∧Ｃ」で表せる。
【００７９】
そして、条件部１の論理式「Ａ∧（Ｂ＿１∧¬Ｂ＿２∧¬Ｂ＿３）」と条件２の論理式「Ａ∧Ｃ」をアンド結合することで、検証用論理式α「Ａ∧（Ｂ＿１∧¬Ｂ＿２∧¬Ｂ＿３）∧Ａ∧Ｃ」を作成する。この検証用論理式αが充足不能であれば、入力命題仕様１と入力命題仕様２は同一のパタンに対して重複して結果を定義することはないため、結果の矛盾が発生することはない。言い換えると，入力命題仕様１と入力命題仕様２は，同一の決定表列への記入を行わないため，（同一の決定表列に異なる結果を記入するという）矛盾を引き起こす可能性はない。つまり検証用論理式αが充足不能であれば、入力命題仕様１と入力命題仕様２には不整合は生じ得ないと判断できる。上記の例では，Ａ，Ｂ＿１，Ｃがそれぞれ真であり，Ｂ＿２，Ｂ＿３がそれぞれ偽であるとき，検証用論理式αは充足されることが分かる。
【００８０】
さらに、検証用論理式αが充足可能であった場合は以下の手順を続行する。結果部１の論理式と結果部２の論理式をアンド結合することで、検証用論理式βを作成する。この検証用論理式βが充足可能であれば、入力命題仕様１と入力命題仕様２による結果の定義は矛盾しないと言える。つまり、検証用論理式βが充足可能であれば、入力命題仕様１と入力命題仕様２は整合すると判断できる。
【００８１】
さらに上記検証用論理式α、及び上記検証用論理式βの充足可能性判定には、ＳＡＴソルバを用いることができる。ここで、ＳＡＴソルバとは、論理式の充足可能性問題（ＳＡＴ）を解く種々のアルゴリズム（ＳＡＴアルゴリズム）を実装するツールの総称である。ＳＡＴソルバを用いることで、整合性検証を高速化できる。
【００８２】
このように、入力命題仕様から乗法標準系の検証用論理式を作成することで、ＳＡＴソルバを活用した高速な整合性検証を実現できる。
【００８３】
整合性検証部１１０は、入力命題仕様保持部１１１から取得した上記入力命題仕様の全組合せについて整合性検証を実施済みであれば、ステップ９０５を実行する。未検証の組合せがある場合は、ステップ９０３に戻る（ステップ９０４）。
【００８４】
整合性検証部１１０は、入力命題仕様保持部１１１から取得した上記入力命題仕様から１つの入力命題仕様を選択し、さらに上記決定表から列を１列選択する。そして選択した上記入力命題仕様と上記列の整合性を検証する（ステップ９０５）。整合性の検証には例えば次の方法を用いる。
【００８５】
ステップ９０３で述べた方法と同様に、上記入力命題仕様と上記列の整合性検証は、検証対象の入力命題仕様と決定表の列から、乗法標準系の検証用論理式を作成し、その充足可能性を判定するという問題に帰着する。決定表の列は入力命題仕様と同等にみなせるため、ステップ９０３で述べた方法と全く同じ方法にて検証できる。例えば、決定表５０１の最左列は、「保険加入有無が加入済みで、かつ保険加入額が２万円以上で、かつ国籍が日本の場合、補助金は交付ありで、かつ納税義務は義務あり」という入力命題仕様と同等である。
【００８６】
整合性検証部１１０は、入力命題仕様保持部１１１から取得した上記入力命題仕様と決定表の列の全組合せについて整合性検証を実施済みであれば、ステップ９０７を実行する。未検証の組合せがある場合は、ステップ９０５に戻る（ステップ９０６）。
【００８７】
整合性検証部１１０は、整合性検証の結果、矛盾のあった入力命題仕様、及び決定表の列に、矛盾があることを表すデータを追加する。そして、入力命題仕様は入力命題仕様保持部１１１に、決定表は決定表保持部１０９に再登録する（ステップ９０７）。
【００８８】
たとえば、入力命題仕様入力・表示部１０１は、矛盾のあった入力命題仕様を対応付けてハイライト表示してもよい。ステップ９０３の結果から入力命題仕様間に矛盾があった場合は、入力命題仕様の一覧画面において矛盾のあった入力命題仕様を同色で色付けして表示する。（ステップ９０８）。
【００８９】
決定表表示・編集部１１４は、矛盾のあった決定表の列を、ステップ９０８の入力命題仕様の表示と対応付けてハイライト表示する。ステップ９０５の結果から入力命題仕様と決定表列に矛盾があった場合は、入力命題仕様の一覧画面において矛盾のあった前記入力命題仕様を色付けして表示するとともに、決定表表示画面において矛盾のあった前記列の条件部および結果部全体を前記入力命題仕様と同色で色付けして表示する（ステップ９０９）。ハイライト表示の例は図２２に示す。図２２では，入力命題仕様２２０３，２２０４，及び決定表列２２０２を同色で色づけ表示している。
【００９０】
上記の整合性検証により、要求定義文書に変更があった場合は決定表のどの範囲に影響があるかを従来は人手で判断していたため変更の影響範囲を誤って特定してしまう等の問題を解決することができる。
【００９１】
図１０は、条件制約入力・表示部が受け付ける条件制約の例である。
【００９２】
条件制約１００１は自然言語形式の条件制約であり、条件制約１００２は論理式形式の条件制約の例である。条件制約中の括弧（「」）に囲まれた用語は、条件項目及びその値を表す。例えば条件制約１００１に含まれる「保険加入有無」という用語は条件項目であり、「未加入」という用語はその値である。図３の入力命題仕様と異なる点は、結果項目及びその値が現れない点である。これは、入力命題仕様が条件に対する結果を定義するのに対し、条件制約は条件と条件の制約条件を定義しているためである。また、入力命題仕様１００２は、入力命題仕様１００１と同じ意味を表す。
【００９３】
ここで、条件制約は決定表の各条件から選択されて構成されており、条件制約を構成する条件を表す内部データと、決定表の項目を構成する条件を表す内部データとは同形式のデータ（例えば、文字列形のデータ）であるものとする。さらに同一の条件は同一のデータになるようにデータ化を行う。例えば、条件制約を構成する条件名称Ａをデータ化した結果がデータαで、決定表の項目を構成する条件名称Ａをデータ化した結果がデータβの場合は、「データα＝データβ」となる。
【００９４】
これにより、後述の不成立条件削除部１０８の動作において、条件制約の条件を表す文字列型データと，決定表の条件を表す文字列型データを比較することにより、条件制約で指定された必要条件または十分条件が、決定表の条件部または結果部を構成する各条件のうちどの条件（またはその否定）に該当するかが判断される。
【００９５】
条件制約は、作成した決定表から現実には成立し得ない列を除去する目的で与えるものである。例えば条件制約１００１は、「保険加入が未加入である場合は、保険納入額は０円である」という現実の制約を与えており、これに違反する条件は現実には成立し得ないことを意味する。つまりこの条件制約１００１を与えると、「保険加入が未加入である、かつ保険納入額が２万円以上である場合、・・・」という意味を表す決定表列や、「保険加入が未加入である、かつ保険納入額が２万円以上である場合、・・・」という意味を表す決定表列は現実には成立し得ない列と判断されるため、決定表から除去される。
【００９６】
図１１は、条件制約に基づいて列を削除した後の決定表の例であり、条件制約１００１に基づいて決定表８０１から列集合８０２を削除した後の決定表である。上述の通り、条件制約１００１は「保険加入が未加入である場合は、保険納入額は０円である」という制約を表す。また，前記列集合８０２の最左列は「保険加入が未加入である、かつ保険納入額が２万円以上である、かつ国籍が日本である場合、補助金は交付無である，かつ納税義務は義務なしである」という意味を表す。前記列集合８０２の最左列は、「保険加入が未加入である、かつ保険納入額が２万円以上である」という条件を含むため、条件制約１００１の表す制約に違反すると言える。よって前記列集合８０２の最左列は、条件制約１００１によって削除される。列集合８０２の含む他の列についても同様である。
【００９７】
図１２は、任意値記号置換後の決定表の例であり、決定表１１０１の列集合１１０２を１列に集約し、列集合１１０３を１列に集約し、列集合１１０４を１列に集約し、列集合１１０５を１列に集約した後、列集合１１０４と列集合１１０５の集約によってできた２列をさらに１列に集約してできた決定表である。本集約では，結果項目に影響を与えない条件項目がある決定表列集合を抽出し，前記条件項目の値を任意値記号に置き換えると同時に前記列集合を１つの列に集約するという処理を行う。例として，列集合１１０２の集約について説明する。列集合１１０２は，「保険加入有無が加入済みであり，かつ保険納入額が２万円以上であり，かつ国籍が日本である場合，補助金は交付ありであり，納税義務は義務ありである」という意味を表す列１と，「保険加入有無が加入済みであり，かつ保険納入額が２万円以上であり，かつ国籍が日本以外である場合，補助金は交付ありであり，納税義務は義務ありである」という意味を表す列２で構成される。ここで「国籍」の条件項目に着目すると，「国籍」の条件項目の値が「日本」でも「日本以外」でも，結果項目の「補助金」および「納税義務」の値は同じであることが分かる。つまり列１と列２を合わせると「保険加入有無が加入済みであり，かつ保険納入額が２万円以上であり，かつ国籍が任意値である場合，補助金は交付ありであり，納税義務は義務ありである」という意味になる。そしてこれは決定表列１２０２の表す意味と一致する。以上の理由から，列集合１１０２に含まれる列１と列２は，決定表列１２０２に集約できる。
【００９８】
このように決定表列を集約することで，決定表の列数を削減できるため，決定表を保持するために必要な記憶容量を削減できるという効果が得られるとともに，決定表の可読性が向上するという効果が得られる。さらに，決定表の列数を削減することで，決定表列と入力命題仕様の間の検証を行う際に検証の対象となる列の数を削減できるため，前記検証にかかるステップ数を削減できるという効果も得られる。
【００９９】
図１３は、決定表を最小化する手順の例を示すフローチャートである。
【０１００】
以下に示す処理は、決定表作成支援・検証装置２０１の備えるＣＰＵ２０２が、メモリ２０３内に格納されたプログラムを実行することによって実現される。そしてこのプログラムは、以下に説明する各種の動作を行うためのコードから構成されている。
【０１０１】
ＣＰＵ２０２は、条件制約入力・表示部１０７を実行することによって、条件制約の入力を受け付け、受け付けた上記条件制約を、条件制約保持部１１７に登録する（ステップ１３０１）。
【０１０２】
ＣＰＵ２０２は、不成立条件削除部１０８を実行することによって、条件制約保持部から条件制約を取得し、さらに決定表保持部１０９から制約対象の決定表を取得する。そして上記制約条件を満たさないパタンを表す列を、上記決定表から削除する（ステップ１３０２）。
【０１０３】
不成立条件削除部１０８は、列削除済みの決定表を決定表保持部１０９に再登録する（ステップ１３０３）。
【０１０４】
ＣＰＵ２０２は、任意値記号置換部１０６を実行することによって、決定表に対する任意値記号置換えの命令を受け付け、指定された決定表を決定表保持部１０９から取得し、上記決定表の条件の値を任意値記号に置換する（ステップ１３０４）。
【０１０５】
任意記記号置換部１０６は、任意値記号にて置換済みの決定表を決定表保持部１０９に再登録する。
【０１０６】
図１４は、決定表から条件制約を満たさない列を削除する手順例を表すフローチャートであり、ステップ１３０２の詳細手順である。
【０１０７】
以下に示す処理は、決定表作成支援・検証装置２０１に備えられたＣＰＵ２０２が、メモリ２０３内に格納されたプログラムを実行することによって実現される。そしてこのプログラムは、以下に説明される各種の動作を行うためのコードから構成されている。
【０１０８】
ＣＰＵ２０２は、不成立条件削除部１０８を実行することによって、条件制約保持部から条件制約を取得し、条件制約の十分条件部と必要条件部を分割する。例えば条件制約１００１の場合、「保険加入有無が未加入である」が十分条件部で、「保険納入額は０円である」が必要条件部である（ステップ１４０１）。
【０１０９】
不成立条件削除部１０８は、決定表保持部１０９から制約対象の決定表を取得し、上記決定表の列から、条件が上記条件制約の十分条件部を構成する条件を全て含む列、つまり当該列の条件部が成立する場合に上記条件制約の十分条件部が必ず成立するような列を検索する（ステップ１４０２）。
【０１１０】
不成立条件削除部１０８は、ステップ１４０２の検索によって取得した列集合から、列の結果部と上記条件制約の必要条件とをＡＮＤ結合した式が充足不可能な列，つまり当該列の条件部と上記条件制約の必要条件とが同時に成立し得ないような列を検索する（ステップ１４０３）。
【０１１１】
不成立条件削除部１０８は、ステップ１４０３の検索によって取得した列集合を、上記決定表から削除する（ステップ１４０４）。このように列集合を削除することで，決定表の列数を削減できるため，決定表を保持するために必要な記憶容量を削減できるという効果が得られるとともに，決定表の可読性が向上するという効果も得られる。さらに，決定表の列数を削減することで，決定表列と入力命題仕様間の検証を行う際の検証対象列を削減できるため，前記検証にかかるステップ数を削減できる効果もある。
【０１１２】
図１５は、決定表に対する任意値記号置換えの手順例を表すフローチャートであり、ステップ１３０４の詳細手順である。
【０１１３】
以下に示す処理は、決定表作成支援・検証装置２０１に備えられたＣＰＵ２０２が、メモリ２０３内に格納されたプログラムを実行することによって実現される。そしてこのプログラムは、以下に説明する各種の動作を行うためのコードから構成されている。
【０１１４】
ＣＰＵ２０２は、任意値記号置換部１０６を実行することによって、決定表に対する任意値記号置換えの命令を受け付け、指定された決定表を決定表保持部１０９から取得する（ステップ１５０１）。
【０１１５】
任意値記号置換部１０６は、上記決定表から結果が等しい列を検索する（ステップ１５０２）。
【０１１６】
任意値記号置換部１０６は、決定表の条件項目を１つ選択する（ステップ１５０３）。
【０１１７】
任意値記号置換部１０６は、ステップ１５０２の検索によって取得した列集合から、ステップ１５０３にて選択した条件項目の値は異なるが、その他の全ての条件項目の値が等しい列を検索する（ステップ１５０４）。
【０１１８】
任意値記号置換部１０６は、ステップ１５０４の検索によって得た列集合が、ステップ１５０３にて選択した条件項目の全通りの値を含む場合、ステップ１５０６を実行する。そうでない場合、ステップ１５０７を実行する（ステップ１５０５）。
【０１１９】
任意値記号置換部１０６は、ステップ１５０４の検索によって得た列集合が含む列を、任意の１列を残して削除し、残した列の条件のうち、ステップ１５０３にて選択した条件項目の値を任意値記号に置換する。同時に、同列の同条件項目のセルを結合する（ステップ１５０６）。
【０１２０】
任意値記号置換部１０６は、ステップ１５０３にて全条件項目を選択済みの場合、処理を終了する。そうでない場合、ステップ１５０３に戻る（ステップ１５０７）。
【０１２１】
図１６は、決定表から変換した出力命題仕様の例であり、出力命題仕様１６０１、１６０２、１６０３、１６０４は決定表１２０１から変換して得た出力命題仕様である。
【０１２２】
出力命題仕様１６０１、１６０２、１６０３、１６０４は自然言語形式の入力命題仕様であり、出力命題仕様１６０５は論理式形式の入力命題仕様である。入力命題仕様と同様、
出力命題仕様中の括弧（「」）に囲まれた用語は、条件及び結果項目、あるいはそれらの値を表す。また、出力命題仕様１６０５は、出力命題仕様１６０１と同じ意味を表す。
【０１２３】
例として，決定表１２０１を変換して出力命題仕様１６０１を得る方法を述べる。決定表から出力命題仕様を作成する方針は複数考えられるが，本例では結果項目の値ごとに出力命題仕様を作成する方針を採用する。その他にも，条件項目に優先度を設定し，優先度の高い条件項目の値ごとに出力命題仕様を作成する方針もある。
【０１２４】
まず，決定表１２０１の結果項目のうち「補助金」の結果項目を選択し，さらにその値から「交付あり」の値を選択する。次に決定表１２０１を参照すると，「補助金」が「交付あり」となるパタンの条件は，条件項目「保険加入有無」の値が「加入済み」であり，かつ条件項目「保険納入額」の値が「２万円以上」である場合と分かる。最後にこの条件と結果を結合することで，「保険加入有無が加入済みである，かつ保険納入額が２万円以上である場合，補助金は交付ありである」という出力命題仕様１６０１を得る。
【０１２５】
上記決定表から出力命題仕様への変換により，決定表と同等の情報を命題仕様形式で保持できるようになるため，前記情報の保持に必要な記憶容量を削減できるという効果がある。また，決定表から仕様を読み取るのには時間がかかるが，同等の情報を命題仕様形式で表示することで，仕様の読み取りにかかる時間を短縮できるという効果もある。
【０１２６】
上記の任意値置き換え処理により、成立する可能性のない条件に対して結果を定義するという仕様の冗長性や、同じ仕様を異なる文で複数回定義するという仕様の重複、および保持する文形式仕様の分量が必要以上に大きくなるといった問題を解決することができる。
【０１２７】
図１７は、決定表変換及び出力命題仕様表示の手順例を示すフローチャートである。
【０１２８】
以下に示す処理は、決定表作成支援・検証装置２０１に備えられたＣＰＵ２０２が、メモリ２０３内に格納されたプログラムを実行することによって実現される。そしてこのプログラムは、以下に説明する各種の動作を行うためのコードから構成されている。
【０１２９】
ＣＰＵ２０２は、決定表変換部１１２を実行することによって、決定表変換の命令を受け付け、指定された決定表を決定表保持部１０９から取得する（ステップ１７０１）。
【０１３０】
決定表変換部１１２は、上記決定表の結果項目を選択し、選択した結果項目の値が等しい列の集合を作成する。上記結果項目の選択方法は様々考えられ、少なくとも、予め結果項目に優先度を設定しておいて、その優先度に従って選択する方法がある（ステップ１７０２）。
【０１３１】
決定表変換部１１２は、ステップ１７０２にて取得した列集合から、その意味を表す出力命題仕様を作成し、出力命題仕様保持部１１３に登録する（ステップ１７０３）。
【０１３２】
決定表変換部１１２は、上記決定表が含む全ての列が、ステップ１７０２にて取得したいずれかの列集合に含まれる場合、つまり全ての列が出力命題仕様に反映済みの場合、ステップ１７０５を実行する。そうでない場合、ステップ１７０２に戻り、未選択の条件項目を選択する（ステップ１７０４）。
【０１３３】
ＣＰＵ２０２は、出力命題仕様表示部１１５を実行することによって、出力命題仕様保持部１１３から出力命題仕様を取得し、画面に表示する（ステップ１７０５）。
【０１３４】
図１８は、決定表作成支援・検証装置２０１の画面表示の例である。
【０１３５】
決定表作成支援・検証装置２０１の画面表示１８０１は、決定表表示領域１８０４、整合性検証ボタン１８０２、決定表最小化ボタン１８０３、命題仕様変換ボタン１８１０、入力命題仕様表示領域１８０５、条件制約表示領域１８０６、出力命題仕様表示領域１８１１、入力命題仕様登録領域１８０７、条件制約登録領域１８０８、及び条件／結果項目登録領域１８０９を含む。
【０１３６】
ユーザが整合性検証ボタンを押下すると、ＣＰＵ２０２は、整合性検証部１１０を実行する。
【０１３７】
ユーザが決定表最小化ボタン１８０３を押下すると、ＣＰＵ２０２は、不成立条件削除部１０８を実行した後、任意値記号置換部１０６を実行する。
【０１３８】
ユーザが命題仕様変換ボタン１８１０を押下すると、ＣＰＵ２０２は、決定表変換部１１２を実行する。
【０１３９】
図１９は、プログラム生成の手順例を表すフローチャートである。
【０１４０】
以下に示す処理は、決定表作成支援・検証装置２０１に備えられたＣＰＵ２０２が、メモリ２０３内に格納されたプログラムを実行することによって実現される。そしてこのプログラムは、以下に説明する各種の動作を行うためのコードから構成されている。
【０１４１】
ＣＰＵ２０２は、プログラム生成・表示部１１６を実行することによって、決定表保持部１０９から決定表を取得する（ステップ１９０１）。
【０１４２】
プログラム生成・表示部１１６は、上記決定表が示す仕様の通りに条件判定を行うプログラムを生成する。プログラム生成の方法としては、少なくとも、上記決定表の列ごとにIF文を作成する方法がある（ステップ１９０２）。
【０１４３】
プログラムを生成する方法の例を，決定表１２０１と関数プログラム２００１を用いて説明する。まず決定表１２０１を参照すると，前記決定表は３つの条件項目と２つの結果項目を持つことが分かる。そこで条件項目の値を表す変数ｃ１，ｃ２，ｃ３と，結果項目の値を表す変数ｒ１，ｒ２を引数として持つ関数プログラム２００１を定義する。結果項目の引数はポインタ引数とする。次に，決定表の列ごとにIF文を作成する。列１２０２は「保険加入有無が加入済みである，かつ保険納入額が２万円以上である，かつ国籍が任意値である場合，補助金は交付ありであり，納税義務は義務ありである」という意味を表すが，このうち「国籍が任意値である」という条件は省略可能であるため，結局「保険加入有無が加入済みである，かつ保険納入額が２万円以上である場合，補助金は交付ありであり，納税義務は義務ありである」という意味を表す。ここで条件項目を変数に変換し，条件項目の値を変数値に変換する。上で定義した通り，条件項目「保険加入有無」の値は変数ｃ１で，条件項目「保険納入額」の値は変数ｃ２で表す。さらに「保険加入有無」の値「加入済み」を１で表し，「未加入」を０で表すとする。同様に「保険納入額」の値「２万円以上」を２で表し，「１円以上２万円未満」を１で表し，「０円」を０で表すとする。すると「保険加入有無が加入済みである，かつ保険納入額が２万円以上である場合」という条件は，IF文２００２に示す「if (c1 == 1 && c2 == 2)」という条件で表せる。さらに結果項目も同様に変数に変換すると，「補助金は交付ありであり，納税義務は義務ありである」という結果は，IF文２００２に示す「*r1 = 1; *r2 = 1;」という代入文で表せる。他の決定表列も同様の方法でIFに変換し，IF文２００３および２００４を生成する。以上より，決定表１２０１から関数プログラム２００１を生成できることが分かる。
【０１４４】
図２０は決定表１２０１から生成したプログラムの例である。関数プログラム２００１は，IF文２００２，２００３，２００４から構成される。IF文２００２は，決定表列１２０２から生成される。同様にIF文２００３は決定表１２０１の２列目から，IF文２００４は３列目から生成される。
【０１４５】
決定表からプログラムを生成することにより，決定表を仕様とした実装の工数を削減するともに，人手による実装の誤りを防止する効果が得られる。
【０１４６】
以上のようにして、ソフトウェア仕様を表す決定表に対して、命題仕様の入力による決定表作成支援手段と、上記命題仕様間の整合性を検証する手段と、上記命題仕様と上記決定表間の整合性を検証する手段と、条件制約に基づく上記決定表の不成立条件削除手段と、任意値記号置換による上記決定表の列集約手段と、上記決定表をその仕様を表す命題仕様へ変換する手段と、上記決定表が示す仕様の通りに条件判定を行うプログラムを生成する手段を提供する、決定表作成支援・検証装置を提供できる。
【符号の説明】
【０１４７】
１０１  入力命題仕様入力・表示部
１０２  条件／結果項目入力部
１０３  条件／結果項目抽出部
１０４  決定表結果記入部
１０５  決定表見出し作成部
１０６  任意値記号置換部
１０７  条件制約入力・表示部
１０８  不成立条件削除部
１０９  決定表保持部
１１０  整合性検証部
１１１  入力命題仕様保持部
１１２  決定表変換部
１１３  出力命題仕様保持部
１１４  決定表表示・編集部
１１５  出力命題仕様表示部
１１６  プログラム生成・表示部
１１７  条件制約保持部
【図１】
0005460629.tif 000002
【図２】
0005460629.tif 000003
【図３】
0005460629.tif 000004
【図４】
0005460629.tif 000005
【図５】
0005460629.tif 000006
【図６】
0005460629.tif 000007
【図７】
0005460629.tif 000008
【図８】
0005460629.tif 000009
【図９】
0005460629.tif 000010
【図１０】
0005460629.tif 000011
【図１１】
0005460629.tif 000012
【図１２】
0005460629.tif 000013
【図１３】
0005460629.tif 000014
【図１４】
0005460629.tif 000015
【図１５】
0005460629.tif 000016
【図１６】
0005460629.tif 000017
【図１７】
0005460629.tif 000018
【図１８】
0005460629.tif 000019
【図１９】
0005460629.tif 000020
【図２０】
0005460629.tif 000021
【図２１】
0005460629.tif 000022
【図２２】
0005460629.tif 000023