(57)【特許請求の範囲】
【請求項１】
形式言語で記述されるソフトウェア仕様を証明するソフトウェア証明支援装置であって、
プロセッサ、及び記憶部を備え、
前記記憶部は、前記プロセッサを動作させるためのプログラムであって、前記ソフトウェア仕様を証明するための証明部と、前記ソフトウェア仕様から前記ソフトウェア仕様の性質を推論するための、不変条件推論部を備えるプログラムを格納し、
前記プロセッサは、
前記不変条件推論部によって、前記ソフトウェア仕様の性質が前記ソフトウェア仕様において不変的に成立する性質であるかを推論し、
前記推論によって、前記ソフトウェア仕様において不変的に成立する性質であると判明したソフトウェア仕様の性質を、前記ソフトウェア仕様に追加し、
前記証明部によって、前記ソフトウェア仕様を証明することを特徴とするソフトウェア証明支援装置。
【請求項２】
前記プロセッサは、
前記ソフトウェア仕様を実行して実行結果を取得し、
前記実行結果に矛盾しない性質を、前記ソフトウェア仕様の性質として抽出して、
前記ソフトウェア仕様から前記ソフトウェア仕様の性質を推論することを特徴とする請求項１に記載のソフトウェア証明支援装置。
【請求項３】
前記記憶部は、前記プログラムとして、前記ソフトウェア仕様の証明を成功させるための前記ソフトウェア仕様の修正方法を抽出する修正候補抽出手続き部を有するプログラムを格納し、
前記プロセッサは、
前記ソフトウェア仕様から前記ソフトウェア仕様の性質を含む不変条件候補を抽出し、
前記修正候補抽出手続き部によって、前記ソフトウェア仕様から、前記ソフトウェア仕様の証明を成功させるための前記ソフトウェア仕様の修正方法候補であって、ソフトウェア仕様の性質を含む修正方法候補を抽出し、
前記不変条件候補と前記修正方法候補を比較し、
前記比較の結果、それぞれに含まれる性質が一致した場合、前記性質を追加することで、前記ソフトウェア仕様から前記ソフトウェア仕様の性質を推論することを特徴とする請求項１あるいは請求項２に記載のソフトウェア証明支援装置。
【請求項４】
形式言語で記述されるソフトウェア仕様を証明するソフトウェア証明支援装置におけるソフトウェア証明支援方法であって、
前記ソフトウェア証明支援装置は、プロセッサ、及び記憶部を備え、
前記記憶部は、前記プロセッサを動作させるためのプログラムであって、前記ソフトウェア仕様を証明するための証明部と、前記ソフトウェア仕様から前記ソフトウェア仕様の性質を推論するための、不変条件推論部を有するプログラムを格納し、
前記プロセッサは、
前記不変条件推論部によって、前記ソフトウェア仕様の性質が前記ソフトウェア仕様において不変的に成立する性質であるかを推論し、
推論によって、前記ソフトウェア仕様において不変的に成立する性質であると判明したソフトウェア仕様の性質を、前記ソフトウェア仕様に追加し、
前記証明部によって、前記ソフトウェア仕様を証明することを特徴とするソフトウェア証明支援方法。
【請求項５】
請求項１乃至３のいずれかに記載のソフトウェア証明支援装置において、
前記ソフトウェア仕様の証明は、前記不変条件推論部として、ある２つの変数x、yについて、x、yは同じ値で初期化され、かつ各イベントにおいてx、yの値を変更しないか、変更する場合はx、yに同じ値を代入するならば、不変条件x＝yが成立するとの推論規則を用いて実行することを特徴とするソフトウェア証明支援装置。
【請求項６】
請求項４に記載のソフトウェア証明支援方法において、
前記ソフトウェア仕様の証明は、前記不変条件推論部として、ある２つの変数x、yについて、x、yは同じ値で初期化され、かつ各イベントにおいてx、yの値を変更しないか、変更する場合はx、yに同じ値を代入するならば、不変条件x＝yが成立するとの推論規則を用いて実行することを特徴とするソフトウェア証明支援方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェア開発を支援する技術に関し、特に、ソフトウェア仕様を証明または修正する技術に関する。
【背景技術】
【０００２】
従来、ソフトウェア仕様の正しさに関する形式的な証明は、自然言語又は図などによって記述されたソフトウェア仕様（以下、「自然言語仕様」）を形式言語によって記述された形式言語仕様に変換し、変換された形式言語仕様を証明する手順で行われている。
【０００３】
この形式言語仕様の証明を支援するツールとして、例えば、B言語の証明ツールAtelier Bや、Event B言語の証明ツールRodinなどがある（非特許文献１、非特許文献２参照）。
【０００４】
これらのツールを活用して形式言語仕様の証明を行い、形式言語仕様に誤りがないと分かった場合は証明を終了できる。しかし、形式言語仕様に誤りがあった場合は、形式言語仕様を修正してから再度証明を行う必要がある。形式言語仕様の誤りとは、例えば「ある処理の前後で成立すると定義した条件が、その処理の前後で成立しない」などの仕様矛盾である。
【０００５】
このように、証明によって形式言語仕様に誤りがあると判明した場合に、当該誤り箇所を特定する方法が知られている（例えば、特許文献１参照）。
【０００６】
さらに、形式言語仕様に誤りが検出された場合に、形式言語仕様の記述及び形式言語仕様の検証履歴に基づいて修正候補を抽出し、抽出した修正候補を画面表示する修正支援方法が知られている（例えば、特許文献２参照）。この方法によると、ユーザは画面表示された修正候補を選択するだけで形式言語仕様を修正できる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平６−１４９５６０号公報
【特許文献２】特開２００９−１１６６４８号公報
【非特許文献】
【０００８】
【非特許文献１】Event-B.org、"Event-B and the Rodin Platform"、[online]、平成21年1月20日検索、インターネット<URL：http://www.event-b.org/>
【非特許文献２】ClearSy、"Atelier B"、[online]、平成21年1月20日検索、インターネット<URL：http://www.atelierb.eu/index-en.php >
【発明の概要】
【発明が解決しようとする課題】
【０００９】
特許文献２の従来技術では、まず抽出した全ての修正候補を画面表示する。ユーザは修正候補の中から修正方法として適切なものを選別する。そして、選別した修正候補に基づて実際に形式言語仕様の修正を行う。
【００１０】
ユーザによる修正候補の選別が必要な理由は、抽出した修正候補の中に適切でない修正方法も含まれているためである。適切でない修正方法とは、ユーザの意図に反する修正方法であり、適切でない修正方法を採用した場合、ユーザの意図に反する仕様が得られてしまう。そのため、ユーザは修正候補の中から適切な修正方法を選択する必要がある。
【００１１】
この修正候補選別の作業においては、ユーザはその多数の修正候補を１つ１つ確認し、適切な修正方法を選択する。そのため、多数の修正候補が表示された場合は、この確認及び選択の作業に多大な労力、時間がかかるという問題がある。
【００１２】
そのため、形式言語仕様の証明に失敗した場合に、ユーザが修正候補の確認及び選択作業をせずとも、形式言語仕様を修正できるようにすることが課題となる。
【００１３】
本発明の目的は、上記課題に対処し、ユーザによる修正候補の確認及び選択作業を必要としない、形式言語仕様の修正のための支援技術を提供することである。
【課題を解決するための手段】
【００１４】
そのため、本発明は、形式言語で記述されるソフトウェア仕様を証明するソフトウェア証明支援装置であって、プロセッサ、及び記憶部を備え、記憶部は、前記プロセッサを動作させるためのプログラムであって、前記ソフトウェア仕様から前記ソフトウェア仕様を証明するための証明部と、前記ソフトウェア仕様から前記ソフトウェア仕様の性質を推論するための、不変条件推論部を備えるプログラムを格納し、前記プロセッサは、前記不変条件推論部によって、前記ソフトウェア仕様の性質が前記ソフトウェア仕様において不変的に成立する性質であるかを推論し、前記推論によって、前記ソフトウェア仕様において不変的に成立する性質であると判明したソフトウェア仕様の性質を、前記ソフトウェア仕様に追加し、前記証明部によって、前記ソフトウェア仕様を証明することを特徴とするソフトウェア証明支援装置を提供する。
【発明の効果】
【００１５】
本発明の一形態によれば、形式言語仕様に誤りが検出された場合に、現在の仕様から導かれるユーザの意図に沿った仕様を追加して前記形式言語仕様を修正するため、修正候補の確認及び選択をすることなく、形式言語仕様を修正できる。
【図面の簡単な説明】
【００１６】
【図１】ソフトウェア証明支援装置の構成例を示すブロック図である。
【図２】ソフトウェア証明支援装置のハードウェア構成例を示す図である。
【図３】形式言語仕様保持部が保持する形式言語仕様のデータの例を示す図（１）である。
【図４】形式言語仕様保持部が保持する形式言語仕様のデータの例を示す図（２）である
【図５】不変条件推論部、形式言語仕様実行部、不変条件候補抽出部、修正候補抽出部、及び証明部によって、形式言語仕様を証明する手順例を示すフローチャートである。
【図６】実行結果保持部が保持する形式言語仕様実行結果のデータの例を示す図である。
【図７】不変条件テンプレート保持部が保持する不変条件テンプレートのデータの例を示す図である。
【図８】不変条件候補保持部が保持する不変条件候補のデータの例を示す図である。
【図９】形式言語仕様実行部、及び不変条件候補抽出部によって、不変条件候補を不変条件候補保持部に登録する手順例を示すフローチャートである。
【図１０】修正候補保持部が保持する修正候補のデータの例を示す図である。
【図１１】不変条件推論部によって不変条件を推論する手順例を示すフローチャートである。
【図１２】不変条件推論部が推論した不変条件を追加した形式言語仕様のデータの例を示す図である。
【発明を実施するための形態】
【００１７】
以下、本発明の実施の一形態を、図面を参照しながら詳細に説明する。
【００１８】
本実施形態は、ソフトウェア証明支援装置に適用される。本実施形態では、入力された形式言語仕様からその不変条件候補一覧を抽出し、前記不変条件候補一覧から抽出した不変条件候補を前記形式言語仕様から推論し、推論した不変条件候補を前記形式言語仕様に追加する。
【００１９】
よって本実施形態によれば、形式言語仕様に誤りが検出された場合に、現在の仕様から導かれるユーザの意図に沿った不変条件を追加して前記形式言語仕様を修正するため、修正候補の確認及び選択をすることなく、形式言語仕様を修正できる。
【００２０】
また、本実施形態では、入力された形式言語仕様からその不変条件候補一覧を抽出する場合に、前記形式言語仕様を実行し、その実行において成立する条件を不変条件候補として採用する。
【００２１】
よって本実施形態によれば、形式言語仕様の少なくともその実行においては成立する条件を不変条件候補として抽出するため、明らかに形式言語仕様から推論できない条件を不変条件候補として抽出することがなくなる。よって、前記不変条件候補は前記形式言語から推論できる可能性が高くなるため、（明らかに推論できない条件を推論することで生じる）推論の失敗にかかる時間を削減でき、結果的に形式言語仕様の修正にかかる時間を削減できる。
【００２２】
また、本実施形態では、不変条件候補一覧から推論する不変条件候補を抽出する場合に、前記形式言語仕様から特許文献２などの従来技術を用いて修正候補一覧を取得し、前記不変条件候補一覧、及び前記修正候補一覧の両方に含まれる不変条件候補を、推論する不変条件候補として優先的に採用する。修正候補とはこの場合、追加することでその形式言語仕様が証明可能になるような、形式言語仕様の不変条件を意味する。
【００２３】
よって本実施形態によれば、抽出した不変条件候補一覧から、その追加によって形式言語仕様が証明可能になる不変条件候補を優先的に抽出して推論するため、形式言語仕様をより短時間で修正できる。
【００２４】
図１は、本実施形態におけるソフトウェア証明支援装置２０１の構成例を示すブロック図である。
【００２５】
ソフトウェア証明支援装置２０１は、入力部１０１、形式仕様保持部１０２、証明部１０３、証明結果保持部１０４、実行結果保持部１０５、形式言語仕様実行部１０６、不変条件推論部１０７、修正候補抽出部１０８、不変条件テンプレート保持部１０９、不変条件候補抽出部１１０、不変条件候補保持部１１１、修正候補保持部１１２、及び出力部１１３を含む。
【００２６】
入力部１０１は、証明対象の形式言語仕様を受け付け、前記形式言語仕様を形式言語仕様保持部１０２に登録する。
【００２７】
証明部１０３は、形式言語仕様保持部１０２から形式言語仕様を取得し、取得した形式言語仕様の証明を行う。証明には自動定理証明器などを用いてもよい。そして、前記形式言語仕様の証明結果を、証明結果保持部１０４に登録する。
【００２８】
不変条件推論部１０７は、形式言語仕様を識別する形式言語仕様識別情報のうち、証明に失敗した形式言語仕様の形式言語仕様識別情報を証明結果保持部１０４から取得する。そして取得した形式言語仕様識別情報の示す形式言語仕様を、形式言語仕様保持部１０２から取得する。
【００２９】
また不変条件推論部１０７は、形式言語仕様実行部１０６及び不変条件候補抽出部１１０の実行後、不変条件候補保持部１１１から不変条件候補一覧を取得する。同様に修正候補抽出部１０８の実行後、修正候補保持部１１２から修正候補一覧を取得する。そして取得した不変条件候補一覧、及び修正候補一覧に基づいて形式言語仕様の不変条件を推論する。さらに推論した不変条件を形式言語仕様に追加してから、前記形式言語仕様を形式言語仕様保持部１０２に再登録する。
【００３０】
形式言語仕様実行部１０６は、不変条件推論部１０７から形式言語仕様を受け取り、前記形式言語仕様を実行する。そしてその実行結果を実行結果保持部１０５に登録する。
【００３１】
不変条件候補抽出部１１０は、それぞれ実行結果保持部１０５から形式言語仕様の実行結果を、不変条件テンプレート保持部１０９から不変条件テンプレートを取得する。そして不変条件テンプレートを使って実行結果を解析し、不変条件候補を抽出する。抽出した不変条件候補は不変条件候補保持部１１１に登録する。
【００３２】
修正候補抽出部１０８は、不変条件推論部１０７から形式言語仕様を受け取り、前記形式言語仕様から修正候補を抽出する。修正候補とはこの場合、追加することでその形式言語仕様が証明可能になるような、形式言語仕様の不変条件を意味する。修正候補の抽出には特許文献２などの従来技術を用いてもよい。抽出した修正候補は修正候補保持部１１２に登録する。
【００３３】
出力部１１３は、証明結果保持部１０４から証明結果を取得し画面表示する。
【００３４】
図２は、本実施形態におけるソフトウェア証明支援装置２０１のハードウェア構成例を示す図である。
【００３５】
ソフトウェア証明支援装置２０１は、ＣＰＵ２０２、メモリ２０３、外部記憶装置２０４、表示装置２０５、入力装置２０６、及び外部媒体入出力装置２０７を備える。
【００３６】
ＣＰＵ２０２は、メモリ２０３に記憶されたプログラムを実行することによって、各種処理を実行する。メモリ２０３は、ＣＰＵ２０２のワークエリアとして機能し、プログラム及びプログラムの実行に必要なデータを記憶する。具体的には、証明部１０３、不変条件推論部１０７、形式言語仕様実行部１０６、不変条件候補抽出部１１０、及び修正候補抽出部１０８を構成するプログラムが記憶され、同時に形式言語仕様保持部１０２、実行結果保持部１０５、不変条件テンプレート保持部１０９、不変条件候補保持部１１１、修正候補保持部１１２、及び証明結果保持部１０４の保持するデータが記憶される。
【００３７】
外部記憶装置２０４は、各種データを格納する。外部記憶装置２０４は、例えば、ハードディスク装置などである。具体的には、形式言語仕様保持部１０２、不変条件テンプレート保持部１０９、及び証明結果保持部１０４が格納される。
【００３８】
あるいは、証明部１０３、不変条件推論部１０７、形式言語仕様実行部１０６、不変条件候補抽出部１１０、及び修正候補抽出部１０８を構成するプログラムの少なくとも一部についても、外部記憶装置２０４に格納され、各種処理実行の際にＣＰＵ２０２がメモリ２０３へ読み出してプログラムを実行することとしてもよい。また各プログラムは、あらかじめ、メモリ２０３または外部記憶装置２０４に格納されていても良いし、必要に応じ、利用可能な媒体を介して、他の装置からメモリ２０３または外部記憶装置２０４に導入されてもよい。媒体とは、例えば、外部媒体入出力装置２０７に着脱可能な記憶媒体、または、ネットワークや、ネットワークを伝搬する搬送波やデジタル信号などの通信媒体を指す。
【００３９】
表示装置２０５は、プログラムの処理結果などを表示する。表示装置２０５は、例えば、ディスプレイなどである。入力装置２０６は、処理の実行指示及び処理に必要な情報の入力などを利用者から受け付ける。入力装置２０６は、例えば、キーボード及びマウスなどである。
【００４０】
外部媒体入出力装置２０７は、外部媒体と、外部記憶装置２０４に格納されているデータなどの入出力を行う。外部媒体は、外部媒体入出力装置２０７に着脱可能で可搬性のある記憶媒体であり、外部媒体出力装置２０７は、外部媒体に読み書き可能なドライブ装置などである。
【００４１】
図３及び図４は、形式言語仕様保持部１０２が保持する形式言語仕様のデータの例を示す図である。
【００４２】
本例はEvent-B言語にて記述した形式言語仕様の例で、モデル３０１とコンテクスト４０１から構成される。
【００４３】
図５は、不変条件推論部１０７、形式言語仕様実行部１０６、不変条件候補抽出部１１０、修正候補抽出１０８部、及び証明部１０３によって、形式言語仕様を証明する手順例を示すフローチャートである。以下に示す処理は、ソフトウェア証明支援装置２０１の備えるＣＰＵ２０２が、メモリ２０３で実行するプログラムによって実現される。そしてこのプログラムは、以下に説明される各種の動作を行うためのコードから構成されている。
【００４４】
ＣＰＵ２０２は、入力部１０１を実行することによって、形式言語仕様の入力を受け付け、前記形式言語仕様を形式言語仕様保持部１０２に登録する。（ステップ５０１）。
【００４５】
ＣＰＵ２０２は、証明部１０３を実行することによって、形式言語仕様保持部１０２から形式言語仕様を取得し、取得した形式言語仕様の証明を行う。証明には自動定理証明器などを用いてもよい。そして前記形式言語仕様の証明結果を、証明結果保持部１０４に登録する（ステップ５０２）。
【００４６】
前記形式言語仕様の証明に失敗した場合は、ステップ５０３を実行する。前記形式言語仕様の証明に成功した場合は実行を終了する（ステップ５０３）。
【００４７】
ＣＰＵ２０２は、不変条件推論部１０７を実行することによって、形式言語仕様を識別する形式言語仕様識別情報のうち、証明に失敗した形式言語仕様の形式言語仕様識別情報を証明結果保持部１０４から取得する（ステップ５０４）。
【００４８】
不変条件推論部１０７は、ステップ５０４で取得した形式言語仕様識別情報の示す形式言語仕様を、形式言語仕様保持部１０２から取得する（ステップ５０５）。
【００４９】
ＣＰＵ２０２は、形式言語仕様実行部１０６及び不変条件候補抽出部１１０を実行することによって、ステップ５０５で取得した形式言語仕様からその不変条件候補を抽出する。この不変条件候補抽出の手順は、図９を用いて詳細に説明する。そして、抽出した不変条件候補を不変条件候補保持部１１１に登録する（ステップ５０６）。
【００５０】
ＣＰＵ２０２は、修正候補抽出部１０８を実行することによって、ステップ５０５で取得した形式言語仕様からその修正候補を抽出する。修正候補の抽出には特許文献２などの従来技術を用いてもよい。そして、抽出した修正候補を修正候補保持部１１２に登録する（ステップ５０７）。
【００５１】
ＣＰＵ２０２は、不変条件推論部１０７を再び実行することによって、それぞれ不変条件候補保持部１１１から不変条件候補一覧を、修正候補保持部１１２から修正候補一覧を取得する。そして取得した不変条件候補一覧、及び修正候補一覧に基づいて形式言語仕様の不変条件を推論する（ステップ５０８）。この不変条件推論の手順は、図１１を用いて詳細に説明する。
【００５２】
不変条件を推論できた場合は、ステップ５１０を実行する。不変条件を推論できなかった場合は、実行を終了する（ステップ５０９）。
【００５３】
不変条件推論部１０７は、推論した不変条件を形式言語仕様に追加してから、前記形式言語仕様を形式言語仕様保持部１０２に再登録する（ステップ５１０）。
【００５４】
図６は、実行結果保持部１０５が保持する形式言語仕様実行結果のデータの例を示す図である。
【００５５】
形式言語仕様実行結果６０１は、実行イベント番号６０２、実行イベント６０３、及び変数値状態６０４を含む。
【００５６】
実行イベント番号６０２は、実行したイベントの通し番号を表す。
【００５７】
実行イベント６０３は、実行した形式言語仕様のイベント名称を表す。
【００５８】
変数値状態６０４は、実行対象の形式言語仕様が含む変数の値で、実行イベント６０３の示すイベント実行後の変数値を表す。
【００５９】
図７は、不変条件テンプレート保持部１０９が保持する不変条件テンプレートのデータの例を示す図である。
【００６０】
不変条件テンプレートの一覧７０１は、テンプレート番号７０２、パラメータ７０３、パラメータ条件７０４、及び不変条件テンプレート７０５を含む。
【００６１】
テンプレート番号７０２は、不変条件テンプレートの通し番号を表す。
【００６２】
パラメータ７０３は、不変条件テンプレート７０５内で使用するパラメータのリストである。
【００６３】
パラメータ条件７０４は、パラメータ７０３の条件を表す。例えば、SETというパラメータを集合のパラメータとして使用したい場合は、パラメータ条件７０４に「"SET"は集合」と記述する。
【００６４】
不変条件テンプレート７０５は、不変条件のテンプレートを表す。テンプレートはパラメータ７０３を使った式で表わされ、パラメータ部分に実際の形式言語仕様の変数を代入することで、その形式言語仕様の不変条件候補を作成する。例えば、テンプレート「x＝y」のパラメータxに形式言語仕様の変数var1を代入し、パラメータyに形式言語仕様の変数var2を代入すると、前記形式言語仕様の不変条件候補「var1＝var2」を得られる。「var1＝var2」は変数var1と変数var2が等しいことを意味する。
【００６５】
その他、不変条件テンプレート７０５にある「x < y」や「X ＝ x ⇒ Y ＝ y」などの形式の不変条件が、不変条件候補として得られる。
【００６６】
図８は、不変条件候補保持部１１１が保持する不変条件候補のデータの例を示す図である。
【００６７】
不変条件候補の一覧８０１は、候補番号８０２、及び不変条件候補８０３を含む。
【００６８】
候補番号８０２は、不変条件候補の通し番号を表す。
【００６９】
不変条件候補８０３は、対象となる形式言語仕様の不変条件の候補を表す。
【００７０】
図９は、形式言語仕様実行部１０６、及び不変条件候補抽出部１１０によって、不変条件候補を不変条件候補保持部に登録する手順例を示すフローチャートである。以下に示す処理は、ソフトウェア証明支援装置２０１の備えるＣＰＵ２０２が、メモリ２０３で実行するプログラムによって実現される。そしてこのプログラムは、以下に説明される各種の動作を行うためのコードから構成されている。
【００７１】
ＣＰＵ２０２は、形式言語仕様実行部１０６を実行することによって、不変条件推論部１０７から形式言語仕様を取得する（ステップ９０１）。
【００７２】
形式言語仕様実行部１０６は、取得した形式言語仕様を実行し、実行結果を実行結果保持部１０５に登録する（ステップ９０２）。形式言語仕様の実行は複数回行ってもよく、その場合は全ての回数分の実行結果を実行結果保持部１０５に登録する。
【００７３】
ＣＰＵ２０２は、不変条件候補抽出部１１０を実行することによって、実行結果保持部１０５から対象の形式言語仕様の実行結果を取得する（ステップ９０３）。
【００７４】
不変条件候補抽出部１１０は、不変条件テンプレート保持部１０９から不変条件テンプレートを取得する（ステップ９０４）。
【００７５】
不変条件候補抽出部１１０は、取得した不変条件テンプレートのパラメータに対象の形式言語仕様の変数を代入することで、不変条件候補を作成する。そして、作成した不変条件候補の表す条件が、ステップ９０３で取得した実行結果において成立するかを確認する。具体的には、変数値状態６０４の示す全状態において、前記不変条件候補が成立するかを確認する。確認の結果、前記不変条件候補が前記実行結果において成立しない場合は、その不変条件候補を（不変条件候補の一覧から）削除する。つまり、前記実行結果において成立する不変条件のみを、不変条件候補として抽出する（ステップ９０５）。
【００７６】
不変条件候補を１つ以上抽出できた場合はステップ９０７を実行する。不変条件を１つも抽出できなかった場合は、実行を終了する（ステップ９０６）。
【００７７】
不変条件候補抽出部１１０は、抽出した不変条件候補を不変条件候補保持部１１１に登録する（ステップ９０７）。
【００７８】
図１０は、修正候補保持部１１２が保持する修正候補のデータの例を示す図である。
【００７９】
修正候補の一覧１００１は、候補番号１００２、及び修正候補１００３を含む。
【００８０】
候補番号１００２は、修正候補の通し番号を表す。
【００８１】
修正候補１００３は、対象となる形式言語仕様を証明できるようにするための修正候補を表す。この修正候補は形式言語仕様の不変条件であり、修正候補を形式言語仕様に追加することで修正を行う。修正候補の抽出には特許文献２などの従来技術を用いてもよい。
【００８２】
図１１は、不変条件推論部１０７によって不変条件を推論する手順例を示すフローチャートである。
【００８３】
以下に示す処理は、ソフトウェア証明支援装置２０１の備えるＣＰＵ２０２が、メモリ２０３で実行するプログラムによって実現される。そしてこのプログラムは、以下に説明される各種の動作を行うためのコードから構成されている。
【００８４】
ＣＰＵ２０２は、不変条件推論部１０７を実行することによって、不変条件候補保持部１１１から対象の形式言語仕様に対応する不変条件候補の一覧を取得する（ステップ１１０１）。
【００８５】
不変条件推論部１０７は、修正候補保持部１１２から、対象の形式言語仕様に対応する修正候補の一覧を取得する（ステップ１１０２）。
【００８６】
不変条件推論部１０７は、ステップ１１０１で取得した不変条件候補一覧とステップ１１０２で取得した修正候補一覧の、両方に含まれる不変条件候補を抽出する（ステップ１１０３）。
【００８７】
前記不変条件候補一覧と前記修正候補一覧の両方に含まれる不変条件候補がある場合は、ステップ１１０５を実行する。前記不変条件候補一覧と前記修正候補一覧の両方に含まれる不変条件候補がない場合は、ステップ１１０８を実行する（ステップ１１０４）。
【００８８】
ステップ１１０４で抽出した（前記不変条件候補一覧と前記修正候補一覧の両方に含まれる）不変条件候補が既に対象の形式言語仕様の不変条件に含まれる場合は、ステップ１１０３に戻って他の不変条件候補を抽出する。前記不変条件候補が対象の形式言語仕様の不変条件に含まれない場合は、ステップ１１０６を実行する（ステップ１１０５）。
【００８９】
不変条件推論部１０７は、ステップ１１０４で抽出した不変条件候補を対象の形式言語仕様から推論する（ステップ１１０６）。推論には、推論規則を用いる。以下では、図３及び図４に示した形式言語仕様を例に推論規則の具体例を説明する。
【００９０】
図３及び図４の形式言語仕様では、var1とvar2に値を代入するときは同じ値を同時に代入している。実際に、初期化イベントINITIALISATIONでは、cstという同じ値を代入している。また、イベントoprではvar1とvar2に同じ値を同時に代入している。さらに、イベントsync_var3ではvar1、var2の値は変更しない。以上より、var1とvar2は常に等しいと言える。つまり、「“ある２つの変数x、yについて、x、yは同じ値で初期化され、かつ全てのイベントにおいてx、yの値を変更しないか、変更する場合はx、yに同じ値を同時に代入する”ならば、“不変条件x＝yが成立する”」という推論規則が成り立つ。この推論規則を使って、図３及び図４の形式言語仕様からvar1＝var2という不変条件を推論できる。
【００９１】
ステップ１１０４で抽出した不変条件候補を対象の形式言語仕様から推論できた場合は、前記不変条件候補を前記形式言語仕様の不変条件として実行を終了する。ステップ１１０４で抽出した不変条件候補を対象の形式言語仕様から推論できなかった場合は、ステップ１１０８を実行する（ステップ１１０７）。
【００９２】
不変条件推論部１０７は、不変条件候補保持部から任意の不変条件候補を取得し、取得した不変条件候補を対象の形式言語仕様から推論する。推論できた場合は、前記不変条件候補を前記形式言語仕様の不変条件とする（ステップ１１０８）。
【００９３】
図１２は、不変条件推論部１０７が推論した不変条件を追加した形式言語仕様のデータの例を示す図である。
【００９４】
モデル１２０１は、モデル３０１に不変条件１２０２を追加したモデルである。モデル１２０１とコンテクスト４０１によって修正済みの形式言語仕様を構成する。
【００９５】
以上のようにして、ソフトウェア仕様を表す形式言語仕様に対して、形式言語仕様を実行して実行結果を取得する実行手段と、前記実行結果から形式言語仕様の不変条件候補一覧を抽出する不変条件抽出手段と、形式言語仕様を証明できるようにするための修正方法の候補である修正候補一覧を抽出する修正候補抽出手段と、前記不変条件候補一覧及び前記修正候補一覧から抽出した不変条件候補を、前記形式言語仕様から推論する推論手段と、推論した不変条件候補を前記形式言語仕様に追加する追加手段を提供する、ソフトウェア仕様証明支援装置を提供する。
【００９６】
これらの手段を使ってソフトウェア仕様を修正することで、ソフトウェア仕様の修正候補の確認及び選択作業をせずに、形式言語仕様を修正できるようになる。
【符号の説明】
【００９７】
１０１    入力部
１０２    形式言語仕様保持部
１０３    証明部
１０４    証明結果保持部
１０５    実行結果保持部
１０６    形式言語仕様実行部
１０７    不変条件推論部
１０８    修正候補抽出部
１０９    不変条件テンプレート保持部
１１０    不変条件候補抽出部
１１１    不変条件候補保持部
１１２    修正候補保持部
１１３    出力部
【図１】
0005508933.tif 000002
【図２】
0005508933.tif 000003
【図３】
0005508933.tif 000004
【図４】
0005508933.tif 000005
【図５】
0005508933.tif 000006
【図６】
0005508933.tif 000007
【図７】
0005508933.tif 000008
【図８】
0005508933.tif 000009
【図９】
0005508933.tif 000010
【図１０】
0005508933.tif 000011
【図１１】
0005508933.tif 000012
【図１２】
0005508933.tif 000013