(57)【要約】【課題】ソフトウェアを容易に理解できるソフトウェア検証装置及びソフトウェア検証プログラムを提供することを課題とする。【解決手段】ソフトウェア検証装置１であって、検証対象のソフトウェアＳＷのデータフローグラフＤＦを生成するデータフローグラフ生成手段１０と、データフローグラフＤＦ上の機能に対する重要な分岐についてのみパス分解したサブグラフＳＧを生成するサブグラフ生成手段ＳＧと、各サブグラフＳＧを１つの状態単位として状態遷移図ＳＤＡＬＬを生成する状態遷移図生成手段１２を備えることを特徴とし、事前条件を設定する事前条件設定手段１３と、事前条件に基づいて検証対象のソフトウェアＳＷを検査して状態遷移図ＳＤＡＬＬにおける各状態と状態間の各遷移が成立するか否かを判断する検査手段１４と、成立しないと判断した状態又は／及び遷移を状態遷移図ＳＤＡＬＬから削減する状態遷移図補正手段１４を備えると好適である。【選択図】図２
2013222327.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアを検証するソフトウェア検証装置であって、
検証対象のソフトウェアのデータフローグラフを生成するデータフローグラフ生成手段と、
前記データフローグラフ生成手段で生成したデータフローグラフ上の機能に対する重要な分岐についてのみパス分解したサブグラフを生成するサブグラフ生成手段と、
前記サブグラフ生成手段で生成した各サブグラフを１つの状態単位として状態遷移図を生成する状態遷移図生成手段と、
を備えることを特徴とするソフトウェア検証装置。
【請求項２】
事前条件を設定する事前条件設定手段と、
前記事前条件設定手段で設定した事前条件に基づいて検証対象のソフトウェアを検査し、前記状態遷移図生成手段で生成した状態遷移図における各状態と状態間の各遷移が成立するか否かを判断する検査手段と、
前記検査手段で成立しないと判断した状態又は／及び遷移を前記状態遷移図生成手段で生成した状態遷移図から削減する状態遷移図補正手段と、
を備えることを特徴とする請求項１に記載のソフトウェア検証装置。
【請求項３】
ソフトウェアを検証するためのソフトウェア検証プログラムであって、
コンピュータに、
検証対象のソフトウェアのデータフローグラフを生成するデータフローグラフ生成機能と、
前記データフローグラフ生成機能で生成したデータフローグラフ上の機能に対する重要な分岐についてのみパス分解したサブグラフを生成するサブグラフ生成機能と、
前記サブグラフ生成機能で生成した各サブグラフを１つの状態単位として状態遷移図を生成する状態遷移図生成機能と、
を実現させることを特徴とするソフトウェア検証プログラム。
【請求項４】
コンピュータに、
事前条件を設定する事前条件設定機能と、
前記事前条件設定機能で設定した事前条件に基づいて検証対象のソフトウェアを検査し、前記状態遷移図生成機能で生成した状態遷移図における各状態と状態間の各遷移が成立するか否かを判断する検査機能と、
前記検査機能で成立しないと判断した状態又は／及び遷移を前記状態遷移図生成機能で生成した状態遷移図から削減する状態遷移図補正機能と、
を実現させることを特徴とする請求項３に記載のソフトウェア検証プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェア検証装置及びソフトウェア検証プログラムに関する。
【背景技術】
【０００２】
Ｃ言語等で記述されたソフトウェア（プログラム）を開発した場合、ソフトウェアのロジックが適切であるかを検証する必要がある。しかし、ソフトウェアのソースコードの振る舞いをテキストベースで理解することは困難であり、ソースコードを解析し、ユーザに解りやすい形で提示する必要がある。特許文献１に記載の検証方法では、検証対象回路の構成から検証対象レジスタを特定し、検証対象レジスタにおいてＤｅｃｌａｒｅ，Ｉｎｉｔｉａｌｉｚｅ，Ｒｅａｄ，Ｗｒｉｔｅの４つの状態の中から生じる可能性のある状態遷移を表したＤＲＩＷマトリクスを用意し、ＤＩＲＷマトリクスを利用してガバレッジ基準となる検証を要するパターンを抽出する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１０−３２８１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
上記のＤＲＩＷマトリクスを用いた検証方法をソフトウェアの検証に適用した場合、状態の単位がレジスタのＤＲＩＷマトリクスであるので、ソフトウェアのロジックが適切か否かを検証することは困難である。つまり、ソフトウェアのロジックを検証するには、上記の検証方法では状態としてレジスタあるいはソフトウェア上の変数を設定して細かすぎるので、状態遷移図の状態がレジスタあるいは変数分だけ存在し、ソフトウェア全体（特に、ロジック）を把握することが困難である。また、ＤＩＲＷマトリクスから得られた状態遷移図はソフトウェアの構造上起こりえる遷移を列挙しており、ソフトウェアの構造上起こりえるかどうかまでは検証できるが、ソフトウェアの実際の使用環境で遷移が起こりえるかどうかは考慮されていない。
【０００５】
そこで、本発明は、ソフトウェアを容易に理解できるソフトウェア検証装置及びソフトウェア検証プログラムを提供することを課題とする。
【課題を解決するための手段】
【０００６】
本発明に係るソフトウェア検証装置は、ソフトウェアを検証するソフトウェア検証装置であって、検証対象のソフトウェアのデータフローグラフを生成するデータフローグラフ生成手段と、データフローグラフ生成手段で生成したデータフローグラフ上の機能に対する重要な分岐についてのみパス分解したサブグラフを生成するサブグラフ生成手段と、サブグラフ生成手段で生成した各サブグラフを１つの状態単位として状態遷移図を生成する状態遷移図生成手段とを備えることを特徴とする。
【０００７】
このソフトウェア検証装置では、データフローグラフ生成手段によって、検証対象のソフトウェア（プログラム）からデータフローグラフを生成する。データフローグラフ[Date Flow Graph(DFG)]は、ソフトウェアの中のある変数に着目し、その変数に対する依存関係を示したグラフである。データフローグラフの生成方法としては、例えば、ソフトウェアからコントロールフローグラフ[Control Flow Graph(CFG)]を生成し、コントロールフローグラフに対して注目すべき変数を与え、その変数に関係する命令を抽出することによって生成する。そして、ソフトウェア検証装置では、サブグラフ生成手段によって、データフローグラフ上の機能に対する重要な分岐（セレクタ）を選択し、その重要な分岐についてのみパス分解し、分解したパス毎にサブグラフを生成する。重要な分岐は、例えば、ユーザが選択してもよいし、注目すべき変数に近い部分から段階的に自動選択してもよいし、データフローグラフを抽象化し、その抽象化データフローグラフで残った分岐から選択（自動選択又はユーザが選択）してもよい。そして、ソフトウェア検証装置では、状態遷移図生成手段によって、各サブグラフをそれぞれ状態として状態遷移図を生成する。このように、ソフトウェア生成装置では、データフローグラフ上の重要な分岐だけパス分解してサブグラフを生成し、生成できたサブグラフだけを状態とすることにより、状態遷移図における状態を少なくでき、ユーザがソフトウェアを容易に理解できる状態遷移図を生成することができる。この状態遷移図によって、ユーザはソフトウェアのロジックを容易に検証でき、ソフトウェアを容易に理解できる。
【０００８】
本発明の上記ソフトウェア検証装置では、事前条件を設定する事前条件設定手段と、事前条件設定手段で設定した事前条件に基づいて検証対象のソフトウェアを検査し、状態遷移図生成手段で生成した状態遷移図における各状態と状態間の各遷移が成立するか否かを判断する検査手段と、検査手段で成立しないと判断した状態又は／及び遷移を状態遷移図生成手段で生成した状態遷移図から削減する状態遷移図補正手段とを備えると好適である。
【０００９】
このソフトウェア検証装置では、事前条件設定手段によって、検証対象のソフトウェアに対する事前条件を設定する。事前条件は、検証対象のソフトウェアが実際に使用される場合の各種条件であり、例えば、ソフトウェアにおける各変数の使用範囲、変数間の拘束条件、ソフトウェアでは決まらない外部条件がある。そして、ソフトウェア検証装置では、検査手段によって、事前条件に基づいて検証対象のソフトウェアに対する検査（例えば、モデル検査）を行い、状態遷移図における各状態と状態間の各遷移が成立するか否かを判断する。さらに、ソフトウェア検証装置では、状態遷移図補正手段によって、状態遷移図から成立しない状態と状態間の遷移を削減した状態遷移図を生成する。このように、ソフトウェア検証装置では、事前条件を設定して検証対象のソフトウェアに対する検査を行うことにより、実際の使用環境ではありえない状態や状態間の遷移を検出でき、これらの状態や状態間の遷移を削減した実際の使用環境に合った状態遷移図を生成できる。この状態遷移図によって、ユーザは実際の使用環境におけるソフトウェアのロジックを検証でき、ソフトウェアを更に容易に理解できる。
【００１０】
本発明に係るソフトウェア検証プログラムは、ソフトウェアを検証するためのソフトウェア検証プログラムであって、コンピュータに、検証対象のソフトウェアのデータフローグラフを生成するデータフローグラフ生成機能と、データフローグラフ生成機能で生成したデータフローグラフ上の機能に対する重要な分岐についてのみパス分解したサブグラフを生成するサブグラフ生成機能と、サブグラフ生成機能で生成した各サブグラフを１つの状態単位として状態遷移図を生成する状態遷移図生成機能とを実現させることを特徴とする。
【００１１】
本発明の上記ソフトウェア検証プログラムでは、コンピュータに、事前条件を設定する事前条件設定機能と、事前条件設定機能で設定した事前条件に基づいて検証対象のソフトウェアを検査し、状態遷移図生成機能で生成した状態遷移図における各状態と状態間の各遷移が成立するか否かを判断する検査機能と、検査機能で成立しないと判断した状態又は／及び遷移を状態遷移図生成機能で生成した状態遷移図から削減する状態遷移図補正機能とを実現させると好適である。
【００１２】
この各ソフトウェア検証プログラムによれば、各プログラムをコンピュータに実行させることによって、上記の各ソフトウェア検証装置と同様の作用及び効果を奏する。
【発明の効果】
【００１３】
本発明によれば、データフローグラフ上の重要な分岐だけパス分解してサブグラフを生成し、生成できたサブグラフだけを状態とすることにより、状態遷移図における状態を少なくでき、ユーザがソフトウェアを容易に理解できる状態遷移図を生成することができる。
【図面の簡単な説明】
【００１４】
【図１】本実施の形態に係るソフトウェアの検証方法の概要図である。
【図２】本実施の形態に係るソフトウェア検証装置の構成図である。
【図３】検証対象の制御ソフトウェアのＣソースコードの一例である。
【図４】図３の制御ソフトウェアのデータフローグラフである。
【図５】状態とイベントの説明図である。
【図６】図４のデータフローグラフの抽象化であり、（ａ）が抽象化の説明図であり、（ｂ）が抽象化データフローグラフである。
【図７】図４のデータフローグラフから生成したサブグラフであり、（ａ）が状態Ａのサブグラフであり、（ｂ）が状態Ｂのサブグラフであり、（ｃ）が状態Ｃのサブグラフであり、（ｄ）が状態Ｄのサブグラフであり、（ｅ）が状態ｄｏＮｏｔｈｉｎｇのサブグラフであり、（ｆ）がその他のサブグラフである。
【図８】図７のサブグラフから生成した状態遷移図である。
【図９】図８の状態遷移図から成立しない状態と遷移を削減した最終的な状態遷移図である。
【図１０】本実施の形態に係るソフトウェア検証装置における動作の流れを示すフローチャートである。
【発明を実施するための形態】
【００１５】
以下、図面を参照して、本発明に係るソフトウェア検証装置及びソフトウェア検証プログラムの実施の形態を説明する。なお、各図において同一又は相当する要素については同一の符号を付し、重複する説明を省略する。
【００１６】
本実施の形態では、本発明を、自動車制御等の制御ソフトウェア（制御プログラム）を検証するソフトウェア検証装置に適用する。本実施の形態に係るソフトウェア検証装置は、検証対象の制御ソフトウェアが入力されると、その制御ソフトウェアからデータフローグラフを生成し、データフローグラフから状態遷移図等を生成し、その状態遷移図等をユーザに提供する。本実施の形態に係るソフトウェア検証装置は、ソフトウェア検証だけを行う専用装置でもよいし、あるいは、汎用コンピュータでソフトウェア検証用のアプリケーションプログラムを実行することによって構成されてもよい。
【００１７】
まず、図１を参照して、本実施の形態に係るソフトウェアの検証方法の概要について説明する。図１は、本実施の形態に係るソフトウェアの検証方法の概要図である。
【００１８】
ソフトウェア検証装置には、検証対象の制御ソフトウェアＳＷ（ソースコード）が入力され、制御ソフトウェアＳＷからＳｌｉｃｉｎｇ  Ｃｒｉｔｅｒｉｏｎが設定される。Ｓｌｉｃｉｎｇ  Ｃｒｉｔｅｒｉｏｎは、制御ソフトウェアＳＷにおいて着目すべき変数であり、制御ソフトウェアＳＷ上の状態をよく表す変数である。そして、ソフトウェア検証装置では、制御ソフトウェアＳＷからＳｌｉｃｉｎｇ  ＣｒｉｔｅｒｉｏｎをＯＵＴＰＵＴとしたデータフローグラフＤＦを生成する。データフローグラフは、ソフトウェアのある変数（Ｓｌｉｃｉｎｇ  Ｃｒｉｔｅｒｉｏｎ）に着目し、その変数に対する依存関係を示したグラフである。データフローグラフは、ソフトウェアにおける演算や分岐をノード、変数をエッジで表現する。
【００１９】
次に、ソフトウェア検証装置では、データフローグラフＤＦから重要な分岐を選択する。重要な分岐は、データフローグラフＤＦにおいて制御ソフトウェアのロジックを検証する上で重要となる分岐（セレクタ）である。そして、ソフトウェア検証装置では、データフローグラフＤＦから重要な分岐についてのみパス分解したサブグラフＳＧを生成する。さらに、ソフトウェア検証装置では、生成できたサブグラフをそれぞれ状態として、制御ソフトウェアＳＷの構造上起こりえる状態遷移図ＳＤＡＬＬを生成する。
【００２０】
次に、ソフトウェア検証装置では、制御ソフトウェアＳＷに対する事前条件を設定する。事前条件は、制御ソフトウェアＳＷを実際に使用する場合の各種条件であり、例えば、制御ソフトウェアＳＷにおける変数の使用範囲、変数間の拘束条件、制御ソフトウェアＳＷでは決まらない外部条件等である。そして、ソフトウェア検証装置では、事前条件に基づいて制御ソフトウェアＳＷに対してモデル検査を行い、実際の使用環境で起こりえない状態や状態間の遷移（エッジ）を検出する。モデル検査は、従来の手法であり、ソフトウェア（対象関数）にある条件を与え、その条件において起こりえるか否かを網羅的に検査する。
【００２１】
次に、ソフトウェア検証装置では、状態遷移図ＳＤＡＬＬから起こりえない状態や遷移を削減し、最終的な状態遷移図ＳＤを生成する。また、ソフトウェア検証装置では、その状態遷移図ＳＤに対応した状態遷移マトリクスＳＭを生成する。状態遷移マトリクスＳＭは、状態とイベントからなるマトリクスであり、イベントは重要な分岐で分解される各パス（各状態）が成立するための条件である。そして、ソフトウェア検証装置では、状態遷移図情報（状態遷移図ＳＤ、状態遷移マトリクスＳＭ）をユーザに提示する。
【００２２】
それでは、図２〜図９を参照して、本実施の形態に係るソフトウェア検証装置１について説明する。図２は、本実施の形態に係るソフトウェア検証装置の構成図である。図３は、検証対象の制御ソフトウェアのＣソースコードの一例である。図４は、図３の制御ソフトウェアのデータフローグラフである。図５は、状態とイベントの説明図である。図６は、図４のデータフローグラフの抽象化である。図７は、図４のデータフローグラフから生成したサブグラフである。図８は、図７のサブグラフから生成した状態遷移図である。図９は、図８の状態遷移図から成立しない状態と遷移を削減した最終的な状態遷移図である。
【００２３】
ソフトウェア検証装置１は、データフローグラフ生成手段１０、サブグラフ生成手段１１、状態遷移図生成手段１２、検査要件生成手段１３、検証手段１４を備えている。ここでは、ソフトウェア検証装置１に図３に示す制御ソフトウェアＳＷ（Ｃソースコード）が入力され、その制御ソフトウェアＳＷに対する具体的な処理結果を示しながら説明する。
【００２４】
なお、本実施の形態では、データフローグラフ生成手段１０が特許請求の範囲に記載するデータフローグラフ生成手段及びデータフローグラフ生成機能に相当し、サブグラフ生成手段１１が特許請求の範囲に記載するサブグラフ生成手段及びサブグラフ生成機能に相当し、状態遷移図生成手段１２が特許請求の範囲に記載する状態遷移図生成手段及び状態遷移図生成機能に相当し、検査要件生成手段１３が特許請求の範囲に記載する事前条件設定手段及び事前条件設定機能に相当し、検証手段１４が特許請求の範囲に記載する検査手段と状態遷移図補正手段及び検査機能と状態遷移図補正機能に相当する。
【００２５】
図３に示す制御ソフトウェアＳＷは、Ｃ言語で記述されたソースコード（ｓｍｐｌｅＣｏｄｅ．ｃ）である。ｓｍｐｌｅＣｏｄｅ．ｃは、ｄｏＭｏｄｅＦｕｎｃがＯＮの場合にｍｏｄｅＦｌａｇに対応する関数ｄｏＭｏｄｅＡ〜Ｄ（）を順番に実行し、該当するフラグがないときには関数ｄｏＮｏｔｈｉｎｇ（）を実行し、ｄｏＭｏｄｅＦｕｎｃがＯＦＦの場合にｔｅｍｐＯｕｔｐｕｔ＝ＤＥＦＡＵＬＴを実行するソースである。このｓｍｐｌｅＣｏｄｅ．ｃに対するロジックの検証項目としては、ｄｏＭｏｄｅＡ〜Ｄ（）が順番に正しく遷移するかである。
【００２６】
データフローグラフ生成手段１０では、まず、ユーザによってソフトウェア検証装置１に制御ソフトウェアＳＷのソースコードが入力されると、制御ソフトウェアＳＷのソースコードからＳｌｉｃｉｎｇ  Ｃｒｉｔｅｒｉｏｎ（着目する変数）を設定する。Ｓｌｉｃｉｎｇ  Ｃｒｉｔｅｒｉｏｎとしては、１個でもよいし、あるいは、複数個でもよい。Ｓｌｉｃｉｎｇ  Ｃｒｉｔｅｒｉｏｎの設定は、ユーザによってソフトウェア検証装置１に入力された変数を設定してもよいし、あるいは、所定のルール（例えば、ソースコードでの最終的な出力変数を設定）に従ってソフトウェア検証装置１で自動設定してもよい。本実施の形態では、図３に示す制御ソフトウェアＳＷのソースコード（ｓｍｐｌｅＣｏｄｅ．ｃ）から変数のｏｕｔｐｕｔをＳｌｉｃｉｎｇ  Ｃｒｉｔｅｒｉｏｎとして設定する。そして、データフローグラフ生成手段１０では、制御ソフトウェアＳＷのソースコードからＳｌｉｃｉｎｇ  ＣｒｉｔｅｒｉｏｎをＯＵＴＰＵＴとするデータフローグラフを生成する。
【００２７】
データフローグラフの生成は、従来の手法を適用する。例えば、手続き型のソフトウェアのソースコードの場合、ソースコードの構文を解析し、その構文解析結果に基づいてコントロールフローグラフを生成し、コントロールフローグラフを用いてグローバル変数についての到達定義を算出し、各ノードの到達定義集合を用いてＳｌｉｃｉｎｇ  Ｃｒｉｔｅｒｉｏｎから到達定義を逆順に追跡し、その追跡結果に基づいてＳｌｉｃｉｎｇ  ＣｒｉｔｅｒｉｏｎをＯＵＴＰＵＴとするデータフローグラフを生成する。データフローグラフは、図４に示すように、演算が四角形（ノード）で表され、セレクタ（分岐）が菱形（ノード）で表され、参照が矢印（エッジ）で表される。
【００２８】
図４には、図３に示す制御ソフトウェアＳＷのソースコード（ｓｍｐｌｅＣｏｄｅ．ｃ）のｏｕｔｐｕｔをＳｌｉｃｉｎｇ  ＣｒｉｔｅｒｉｏｎとしたデータフローグラフＤＦＯを示している。データフローグラフＤＦＯでは、ｓｅｌ１とｓｅｌ２の２つのセレクタがあり、「＋」の演算が１つある。セレクタｓｅｌ２のＩＮＰＵＴは関数ｄｏＭｏｄｅＡ〜Ｄ（ｖｏｉｄ）、ｄｏＮＯｔｈｉｎｇ（ｖｏｉｄ）であり、この５つのＩＮＰＵＴがセレクタｓｅｌ２で切り替えられて出力される。また、セレクタｓｅｌ１のＩＮＰＵＴは「＋」の演算の演算値、ＤＥＦＡＵＬＴ、ＭＩＮ、ＭＡＸであり、この４つのＩＮＰＵＴがセレクタｓｅｌ１で切り替えられて出力される。セレクタｓｅｌ１からの出力された値が、データフローグラフＤＦＯのＯＵＴＰＵＴ（Ｓｌｉｃｉｎｇ  Ｃｒｉｔｅｒｉｏｎであるｏｕｔｐｕｔ）である。なお、［Ｌｉｎｅ＊］の各数字＊は、図３のソースコードにおけるライン番号を示している。また、ｓｅｌ＊の各数字は、セレクタ番号を示している。
【００２９】
ここで、図５を参照して、状態とイベントについて説明しておく。図５に示すデータフローグラフの例の場合、制御ソフトウェアのロジックを検証する上で重要な分岐（セレクタ）をＳＥＬ１とする。状態は、重要な分岐の入力側の各エッジをそれぞれ通る経路（パス）であり、この例の場合はエッジＥ１側を通ることを拘束条件とする状態Ｓ１とエッジＥ２側を通ることを拘束条件とする状態Ｓ２である。イベントは、重要な分岐の入力側の各エッジが成立するための条件であり、この例の場合にはエッジＥ１を通るための条件とエッジＲ２を通るための条件である。
【００３０】
サブグラフ生成手段１１では、まず、データフローグラフ生成手段１０で生成さえたデータフローグラフＤＦ０から重要な分岐（セレクタ）を選択する。重要な分岐を選択する方法としては、基本的には以下の３つの方法があり、ユーザがセレクタを選択する方法、Ｓｌｉｃｉｎｇ  Ｃｒｉｔｅｒｉｏｎに近いセレクタから段階的に自動選択する方法、データフローグラフを抽象化して抽象化データフローグラフで残ったセレクタを全て選択する方法がある。さらに、上記の方法を組み合わせた方法もあり、例えば、抽象化データフローグラフで残ったセレクタからユーザが選択する方法がある。
【００３１】
ユーザが選択する場合、データフローグラフＤＦＯからユーザがロジックを検証する上で重要と考えるセレクタを判断し、そのセレクタを選択する。この場合、サブグラフ生成手段１１では、ユーザによってセレクタが選択されると、そのセレクタを重要な分岐として設定する。ユーザによる選択は、例えば、モニタでデータフローグラフＤＦ０を表示し、セレクタ番号を入力やマウスによってセレクタをクリック等でセレクタを選択する。Ｓｌｉｃｉｎｇ  Ｃｒｉｔｅｒｉｏｎに近いセレクタから段階的に自動選択する場合、サブグラフ生成手段１１では、データフローグラフＤＦＯから、Ｓｌｉｃｉｎｇ  Ｃｒｉｔｅｒｉｏｎに近い順にセレクタを全て自動選択してもよいが、予めパス分解する上限を設定しておき、Ｓｌｉｃｉｎｇ  Ｃｒｉｔｅｒｉｏｎに近い順にパス分解するセレクタを自動選択し、設定上限に達した時点でそれ以上はセレクタを選択しない。
【００３２】
データフローグラフを抽象化する方法について説明する。この抽象化では、ライブラリ等のデータフローグラフ上の機能の本質と関係のないものを抽象化して重要でないセレクタを減らして、機能の本質を示すセレクタのみを残す。
【００３３】
例えば、図４に示すデータフローグラフＤＦＯの場合、ｓｅｌ１の一部を構成するＨＩＬＯＧＤは考慮する必要がないので、ＨＩＬＯＧＤの部分を抽象化する。ＨＩＬＯＧＤは、ある変数に対して上限（ＭＡＸ）と下限（ＭＩＮ）のガードが設定されている場合にその変数をガードに対して判断し、その変数を上限から下限までの値とするものである。具体的には、図６（ａ）に示すように、図４のセレクタｓｅｌ１の一部（「＋」の演算の出力、ＭＩＮ、ＭＡＸの何れかを切り替えて出力する部分）を、ＨＩＬＯＧＤに置き換えて抽象化する。これによって、セレクタｓｅｌ１の残り部分のＤＥＦＡＵＬＴとＨＩＬＯＧＤの出力をＩＮＰＵＴとし、新たにセレクタｓｅｌ３として分離する。図６（ｂ）には、抽象化されたデータフローグラフＤＦＡを示す。
【００３４】
抽象化を行う場合、サブグラフ生成手段１１では、ＨＩＬＯＧＤのような抽象化できるパターンを複数設定しておき、データフローグラフＤＦＯの中で抽象化パターンを適用できる箇所を全て抽象化パターンに置き換えて抽象化し、抽象化されたデータフローグラフＤＦＡの中で残された全てのセレクタを自動選択する。あるいは、抽象化データフローグラフＤＦＡの中で残された全てのセレクタの中から、ユーザがセレクタを選択してもよい。なお、ユーザがセレクタを選択する場合、１つのセレクタを選択してもよいし、あるいは、複数のセレクタを選択してもよい。
【００３５】
重要な分岐（セレクタ）を選択すると、サブグラフ生成手段１１では、抽象化データフローグラフＤＦＡに対してその重要な分岐（セレクタ）の入力側のエッジ毎にパス分解し、各パス（各状態）のデータフローグラフをサブグラフＳＧとしてそれぞれ生成する。
【００３６】
上記したように、図３に示すｓｍｐｌｅＣｏｄｅ．ｃに対する検証項目はｄｏＭｏｄｅＡ〜Ｄ（）が順番に正しく遷移するかである。この検証項目を容易に検証できる状態遷移図を得るために、図６（ｂ）に示す抽象化データフローグラフＤＦＡから、ユーザが重要な分岐としてセレクタｓｅｌ２を選択したとする。セレクタｓｅｌ２で分解されるパスとしては、ＩＮＰＵＴがｄｏＭｏｄｅＡ（ｖｏｉｄ）であるエッジのパス（状態Ａ）、ＩＮＰＵＴがｄｏＭｏｄｅＢ（ｖｏｉｄ）であるエッジのパス（状態Ｂ）、ＩＮＰＵＴがｄｏＭｏｄｅＣ（ｖｏｉｄ）であるエッジのパス（状態Ｃ）、ＩＮＰＵＴがｄｏＭｏｄｅＤ（ｖｏｉｄ）であるエッジのパス（状態Ｄ）、ＩＮＰＵＴがｄｏＮｏｔｈｉｎｇ（ｖｏｉｄ）であるエッジのパス（状態ｄｏＮｏｔｈｉｎｇ）がある。さらに、この各状態に含まれない部分（その他の状態）が残る。この各状態のサブグラフは、状態Ａが図７（ａ）に示すサブグラフＳＧＡとなり、状態Ｂが図７（ｂ）に示すサブグラフＳＧＢとなり、状態Ｃが図７（ｃ）に示すサブグラフＳＧＣとなり、状態Ｄが図７（ｄ）に示すサブグラフＳＧＤとなり、状態ｄｏＮｏｔｈｉｎｇが図７（ｅ）に示すサブグラフＳＧＥとなり、その他の状態が図７（ｆ）に示すサブグラフＳＧＦとなる。
【００３７】
状態遷移図生成手段１２では、サブグラフ生成手段１１で生成された全ての状態のサブグラフＳＧを用いて、各サブグラフを１つの状態として状態遷移図を生成する。ここでは、データフローグラフＤＦＯ（抽象化データフローグラフＤＦＡ）が繰り返し実行されることを前提に加えて、状態遷移図化する。この状態遷移図化では、全てのサブグラフＳＧをそれぞれ状態とし、２つの状態の全ての組み合わせ（同じ状態同士の組み合わせも含む）について全て遷移する状態遷移図とする。図７に示す６つのサブグラフＳＧＡ，ＳＧＢ，ＳＧＣ，ＳＧＤ，ＳＧＥ，ＳＧＦを用いた場合、図８に示す状態遷移図ＳＤＡＬＬとなる。
【００３８】
なお、状態遷移図生成手段１２で生成された状態遷移図ＳＤＡＬＬは、ある分岐（セレクタ）についてのみパス分解して得られた状態（サブグラフＳＧ）だけで状態遷移図化しているので、従来の手法による状態遷移図と比較すると状態の数は少なくなっている（ひいては、状態間の遷移の数も少なくなっている）。しかも、ロジックを検証する上で重要となる分岐に絞っている。しかし、この状態遷移図ＳＤＡＬＬは、構造的（ｉｆ文やｓｗｉｔｃｈ文でできた構造）にありえる状態、状態間の遷移を全て列挙したものとなっている。そのため、実際の使用環境ではありえない状態や遷移が含まれている場合がある。そこで、実際の使用環境に合った状態遷移図とする必要がある。
【００３９】
検査要件生成手段１３では、検証手段１４でのモデル検査の検査要件ＣＣ（事前条件、検査対象）を生成（設定）する。事前条件は、制御ソフトウェアＳＷが実際に使用される場合の各種条件である。事前条件としては、例えば、制御ソフトウェアＳＷのソースコードで用いられている各変数の使用範囲、変数間の拘束条件、制御ソフトウェアＳＷで決まらない外部条件（例えば、プラントモデル条件）がある。事前条件の場合、ユーザによってソフトウェア検証装置１に事前条件が入力されると、検査要件生成手段１３ではその事前条件を設定する。事前条件については、ソフトウェア検証装置１で入力される制御ソフトウェアＳＷのソースコードに対してデータベースに予め格納されている各変数の情報や外部条件等を用いて自動設定してもよい。検査対象は、状態遷移図生成手段１２で生成された状態遷移図ＳＤＡＬＬにおける全ての状態と状態間の全ての遷移が対象となる。検査対象の場合、状態遷移図ＳＤＡＬＬが生成されると、検査要件生成手段１３ではその状態遷移図ＳＤＡＬＬから全ての状態と全ての遷移を抽出して設定する。
【００４０】
検証手段１４では、まず、検査要件生成手段１３で生成された事前条件に基づいて制御ソフトウェアＳＷに対してモデル検査を行い、検査要件生成手段１３で生成された検査対象（状態遷移図ＳＤＡＬＬにおける全ての状態と全ての遷移）の成立性（実際にありえるか否か）を判断する。
【００４１】
図８に示す状態遷移図ＳＤＡＬＬの場合、まず、検査対象である状態遷移図ＳＤＡＬＬの全ての状態（状態Ａ〜Ｄ、状態ｄｏＮｏｔｈｉｎｇ、その他）について成立性を検査するために、事前条件に基づいて制御ソフトウェアＳＷの対象関数（ｍｏｄｅｆｕｎｃ（））を１回実行してモデル検査を行う。さらに、検査対象である状態遷移図ＳＤＡＬＬの状態間の全ての組み合わせについての遷移の成立性を検査するために、事前条件に基づいて制御ソフトウェアＳＷの対象関数（ｍｏｄｅｆｕｎｃ（））を２回実行してモデル検査を行う。
【００４２】
例えば、事前条件として各変数の使用範囲、変数間の拘束条件、プラントモデル条件を与えた場合、モデル検査を行うと、変数の型範囲でありえない状態や遷移（対象関数の中の条件式の関係や拘束条件からないもの）、更に、変数の使用範囲でありえない状態や遷移（実際に使用する変数範囲でありえないもの）、更に、外部条件でありえない状態や遷移（それぞれ変数の拘束条件、理想的にはプラントモデル条件でありえないもの）を検出できる。理想的な事前条件を設定できていれば、実際の使用環境でありえない状態や遷移を検出することができる。
【００４３】
検証手段１４では、ありえない（成立しない）状態や遷移を検出できた場合、状態遷移図生成手段１２で生成された状態遷移図ＳＤＡＬＬからその状態や遷移を削除し、最終的な状態遷移図ＳＤを生成する。さらに、検証手段１４では、その状態遷移図ＳＤに対応した状態遷移マトリクスＳＭを生成する。そして、検証手段１４では、その状態遷移情報ＳＩ（状態遷移図ＳＤ、状態遷移マトリクスＳＭ）をユーザに提示する。ユーザへの提示方法としては、例えば、モニタ表示、印刷出力がある。
【００４４】
図９には、図８に示す状態遷移図ＳＤＡＬＬから成立しない（ありえない）状態や遷移を削減した状態遷移図ＳＤの一例を示している。この状態遷移図ＳＤの場合、状態ｄｏＮｏｔｈｉｎｇが成立しない状態として削減されており、異なる状態間の遷移や同じ状態間の遷移も削減されている。また、この状態遷移図ＳＤの場合、状態Ｄが行き止まりの状態となっている。したがって、ユーザは、この状態遷移図ＳＤが提示された場合、実際の使用環境では状態ｄｏＮｏｔｈｉｎｇが実行されないことや状態Ｄからは他の状態に遷移しないことなどに気付く。
【００４５】
なお、ユーザは、状態遷移図ＳＤが提示されたときに、状態遷移図ＳＤに自分が意図（予想）していない状態や遷移が有ったりあるいは意図していた状態や遷移が無いことに気付く場合がある。このような場合、ユーザは、意図した状態や遷移となるように、制御ソフトウェアＳＷを修正する。そして、ユーザは、再度、ソフトウェア検証装置１で修正後の制御ソフトウェアＳＷを検証し、修正後の制御ソフトウェアＳＷに対する状態遷移図ＳＤを確認する。
【００４６】
図２〜図９を参照して、ソフトウェア検証装置１の動作を図１０のフローチャート沿って説明する。図１０は、本実施の形態に係るソフトウェア検証装置における動作の流れを示すフローチャートである。ユーザは、ソフトウェア検証装置１を起動し、ソフトウェア検証装置１に検証対象の制御ソフトウェアＳＷを入力する。この際、ユーザは、Ｓｌｉｃｉｎｇ  Ｃｒｉｔｅｒｉｏｎも設定する。
【００４７】
制御ソフトウェアＳＷを入力されると、ソフトウェア検証装置１のデータフローグラフ生成手段１０では、制御ソフトウェアＳＷからＳｌｉｃｉｎｇ  ＣｒｉｔｅｒｉｏｎをＯＵＴＰＵＴとしたデータフローグラフＤＦを生成する（Ｓ１）。
【００４８】
次に、ソフトウェア検証装置１のサブグラフ生成手段１１では、データフローグラフＤＦＯから重要な分岐（セレクタ）を選択する（Ｓ２）。この際、必要に応じて、データフローグラフＤＦＯから抽象化データフローグラフＤＦＡを生成する。そして、サブグラフ生成手段１１では、データフローグラフＤＦｏ（あるいは抽象化データフローグラフＤＦＡ）から重要な分岐（セレクタ）についてのみパス分解し、分解したパスに応じて各状態のサブグラフＳＧを生成する（Ｓ３）。
【００４９】
次に、ソフトウェア検証装置１の状態遷移図生成手段１２では、各サブグラフＳＧを１状態単位として状態遷移図ＳＤＡＬＬを生成する（Ｓ４）。
【００５０】
次に、ソフトウェア検証装置１の検査要件生成手段１３では、制御ソフトウェアＳＷを実際に使用する場合の事前条件を設定するとともに、状態遷移図ＳＤＡＬＬから検査対象の状態や状態間の遷移を設定する（Ｓ５）。
【００５１】
次に、ソフトウェア検証装置１の検証手段１４では、事前条件と制御ソフトウェアＳＷをモデル検査にかけ、検証対象（状態、状態間の遷移）の成立性を検証し、成立しない状態や遷移を検出する（Ｓ６）。そして、検証手段１４では、成立しない状態や遷移を状態遷移図ＳＤＡＬＬから削減し、最終的な状態遷移図ＳＤを生成する（Ｓ７）。さらに、検証手段１４では、少なくとも状態遷移図ＳＤをユーザに提示する（Ｓ８）。
【００５２】
このソフトウェア検証装置１によれば、データフローグラフ上の重要な分岐だけパス分解してサブグラフを生成し、生成できたサブグラフだけを状態とすることにより、状態遷移図における状態（ひいては、遷移）を少なくでき、ユーザが制御ソフトウェアを容易に理解できる状態遷移図を生成することができる。ユーザは、この状態遷移図によって制御ソフトウェアのロジックの検証を容易にでき、制御ソフトウェアを容易に理解できる。
【００５３】
また、ソフトウェア検証装置１によれば、事前条件を設定して検証対象の制御ソフトウェアに対するモデル検査を行うことにより、実際の使用環境でありえない状態や状態間の遷移を検出でき、これらの状態や状態間の遷移を削減した実際の使用環境に合った状態遷移図を生成できる。ユーザは、この状態遷移図によって実際の使用環境における制御ソフトウェアのロジックの検証を容易にでき、制御ソフトウェアを更に容易に理解できる。
【００５４】
また、ソフトウェア検証装置１によれば、データフローグラフ上で機能の本質に関係のないものを抽象化した抽象化データフローグラフを生成することにより、データフローグラフ上の重要でない分岐（セレクタ）を削減でき、データフローグラフ上の重要な分岐を容易に選択できる。
【００５５】
ユーザは、制御ソフトウェアを容易に理解できる状態遷移図が提示されるので、制御ソフトウェアの不具合やロジックの抜け等を容易に検出できる。また、ユーザは、提示された状態遷移図において意図していた状態や遷移を含んでいないことあるいは意図していない状態や遷移を含んでいることに容易に気付くことができ、迅速に制御ソフトウェアを修正できる。
【００５６】
以上、本発明に係る実施の形態について説明したが、本発明は上記実施の形態に限定されることなく様々な形態で実施される。
【００５７】
例えば、本実施の形態ではソフトウェアを検証するソフトウェア検証装置に適用したが、ＣＤ−ＲＯＭ等の記憶媒体に格納されるソフトウェア検証プログラムやインタネット等のネットワークを介して利用可能なソフトウェア検証プログラム等に適用し、このソフトウェア検証プログラムをコンピュータで実行することによってソフトウェアを検証する構成としてもよい。
【００５８】
また、本実施の形態では検証対象のソフトウェアとして自動車制御等の制御ソフトウェアに適用したが、制御以外の様々なソフトウェアに適用可能である。また、本実施の形態では検証対象のソフトウェアとしてＣ言語で記述されたソフトウェアを示したが、ｓｉｍｕｌｉｎｋ等のＣ言語以外の様々な言語のソフトウェアを適用可能である。
【００５９】
また、本実施の形態では事前条件を設定してモデル検査を実施し、実際の使用環境ではありえない状態や遷移を削減した状態遷移図を生成する構成としたが、このようなモデル検査を実施せず、状態や遷移を削減しない状態遷移図を提供する構成としてもよい。
【００６０】
また、本実施の形態では各状態や各遷移の成立性を検証するための検証手段としてモデル検査を利用したが、他の検証手段を用いてもよい。
【符号の説明】
【００６１】
１…ソフトウェア検証装置、１０…データフローグラフ生成手段、１１…サブグラフ生成手段、１２…状態遷移図生成手段、１３…検査要件生成手段、１４…検証手段。
【図１】
2013222327.tif 000003
【図２】
2013222327.tif 000004
【図３】
2013222327.tif 000005
【図４】
2013222327.tif 000006
【図５】
2013222327.tif 000007
【図６】
2013222327.tif 000008
【図７】
2013222327.tif 000009
【図８】
2013222327.tif 000010
【図９】
2013222327.tif 000011
【図１０】
2013222327.tif 000012