JP2013222327A - ソフトウェア検証装置及びソフトウェア検証プログラム - Google Patents
ソフトウェア検証装置及びソフトウェア検証プログラム Download PDFInfo
- Publication number
- JP2013222327A JP2013222327A JP2012093859A JP2012093859A JP2013222327A JP 2013222327 A JP2013222327 A JP 2013222327A JP 2012093859 A JP2012093859 A JP 2012093859A JP 2012093859 A JP2012093859 A JP 2012093859A JP 2013222327 A JP2013222327 A JP 2013222327A
- Authority
- JP
- Japan
- Prior art keywords
- software
- transition diagram
- state transition
- state
- data flow
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
【課題】ソフトウェアを容易に理解できるソフトウェア検証装置及びソフトウェア検証プログラムを提供することを課題とする。
【解決手段】ソフトウェア検証装置1であって、検証対象のソフトウェアSWのデータフローグラフDFを生成するデータフローグラフ生成手段10と、データフローグラフDF上の機能に対する重要な分岐についてのみパス分解したサブグラフSGを生成するサブグラフ生成手段SGと、各サブグラフSGを1つの状態単位として状態遷移図SDALLを生成する状態遷移図生成手段12を備えることを特徴とし、事前条件を設定する事前条件設定手段13と、事前条件に基づいて検証対象のソフトウェアSWを検査して状態遷移図SDALLにおける各状態と状態間の各遷移が成立するか否かを判断する検査手段14と、成立しないと判断した状態又は/及び遷移を状態遷移図SDALLから削減する状態遷移図補正手段14を備えると好適である。
【選択図】図2
【解決手段】ソフトウェア検証装置1であって、検証対象のソフトウェアSWのデータフローグラフDFを生成するデータフローグラフ生成手段10と、データフローグラフDF上の機能に対する重要な分岐についてのみパス分解したサブグラフSGを生成するサブグラフ生成手段SGと、各サブグラフSGを1つの状態単位として状態遷移図SDALLを生成する状態遷移図生成手段12を備えることを特徴とし、事前条件を設定する事前条件設定手段13と、事前条件に基づいて検証対象のソフトウェアSWを検査して状態遷移図SDALLにおける各状態と状態間の各遷移が成立するか否かを判断する検査手段14と、成立しないと判断した状態又は/及び遷移を状態遷移図SDALLから削減する状態遷移図補正手段14を備えると好適である。
【選択図】図2
Description
本発明は、ソフトウェア検証装置及びソフトウェア検証プログラムに関する。
C言語等で記述されたソフトウェア(プログラム)を開発した場合、ソフトウェアのロジックが適切であるかを検証する必要がある。しかし、ソフトウェアのソースコードの振る舞いをテキストベースで理解することは困難であり、ソースコードを解析し、ユーザに解りやすい形で提示する必要がある。特許文献1に記載の検証方法では、検証対象回路の構成から検証対象レジスタを特定し、検証対象レジスタにおいてDeclare,Initialize,Read,Writeの4つの状態の中から生じる可能性のある状態遷移を表したDRIWマトリクスを用意し、DIRWマトリクスを利用してガバレッジ基準となる検証を要するパターンを抽出する。
上記のDRIWマトリクスを用いた検証方法をソフトウェアの検証に適用した場合、状態の単位がレジスタのDRIWマトリクスであるので、ソフトウェアのロジックが適切か否かを検証することは困難である。つまり、ソフトウェアのロジックを検証するには、上記の検証方法では状態としてレジスタあるいはソフトウェア上の変数を設定して細かすぎるので、状態遷移図の状態がレジスタあるいは変数分だけ存在し、ソフトウェア全体(特に、ロジック)を把握することが困難である。また、DIRWマトリクスから得られた状態遷移図はソフトウェアの構造上起こりえる遷移を列挙しており、ソフトウェアの構造上起こりえるかどうかまでは検証できるが、ソフトウェアの実際の使用環境で遷移が起こりえるかどうかは考慮されていない。
そこで、本発明は、ソフトウェアを容易に理解できるソフトウェア検証装置及びソフトウェア検証プログラムを提供することを課題とする。
本発明に係るソフトウェア検証装置は、ソフトウェアを検証するソフトウェア検証装置であって、検証対象のソフトウェアのデータフローグラフを生成するデータフローグラフ生成手段と、データフローグラフ生成手段で生成したデータフローグラフ上の機能に対する重要な分岐についてのみパス分解したサブグラフを生成するサブグラフ生成手段と、サブグラフ生成手段で生成した各サブグラフを1つの状態単位として状態遷移図を生成する状態遷移図生成手段とを備えることを特徴とする。
このソフトウェア検証装置では、データフローグラフ生成手段によって、検証対象のソフトウェア(プログラム)からデータフローグラフを生成する。データフローグラフ[Date Flow Graph(DFG)]は、ソフトウェアの中のある変数に着目し、その変数に対する依存関係を示したグラフである。データフローグラフの生成方法としては、例えば、ソフトウェアからコントロールフローグラフ[Control Flow Graph(CFG)]を生成し、コントロールフローグラフに対して注目すべき変数を与え、その変数に関係する命令を抽出することによって生成する。そして、ソフトウェア検証装置では、サブグラフ生成手段によって、データフローグラフ上の機能に対する重要な分岐(セレクタ)を選択し、その重要な分岐についてのみパス分解し、分解したパス毎にサブグラフを生成する。重要な分岐は、例えば、ユーザが選択してもよいし、注目すべき変数に近い部分から段階的に自動選択してもよいし、データフローグラフを抽象化し、その抽象化データフローグラフで残った分岐から選択(自動選択又はユーザが選択)してもよい。そして、ソフトウェア検証装置では、状態遷移図生成手段によって、各サブグラフをそれぞれ状態として状態遷移図を生成する。このように、ソフトウェア生成装置では、データフローグラフ上の重要な分岐だけパス分解してサブグラフを生成し、生成できたサブグラフだけを状態とすることにより、状態遷移図における状態を少なくでき、ユーザがソフトウェアを容易に理解できる状態遷移図を生成することができる。この状態遷移図によって、ユーザはソフトウェアのロジックを容易に検証でき、ソフトウェアを容易に理解できる。
本発明の上記ソフトウェア検証装置では、事前条件を設定する事前条件設定手段と、事前条件設定手段で設定した事前条件に基づいて検証対象のソフトウェアを検査し、状態遷移図生成手段で生成した状態遷移図における各状態と状態間の各遷移が成立するか否かを判断する検査手段と、検査手段で成立しないと判断した状態又は/及び遷移を状態遷移図生成手段で生成した状態遷移図から削減する状態遷移図補正手段とを備えると好適である。
このソフトウェア検証装置では、事前条件設定手段によって、検証対象のソフトウェアに対する事前条件を設定する。事前条件は、検証対象のソフトウェアが実際に使用される場合の各種条件であり、例えば、ソフトウェアにおける各変数の使用範囲、変数間の拘束条件、ソフトウェアでは決まらない外部条件がある。そして、ソフトウェア検証装置では、検査手段によって、事前条件に基づいて検証対象のソフトウェアに対する検査(例えば、モデル検査)を行い、状態遷移図における各状態と状態間の各遷移が成立するか否かを判断する。さらに、ソフトウェア検証装置では、状態遷移図補正手段によって、状態遷移図から成立しない状態と状態間の遷移を削減した状態遷移図を生成する。このように、ソフトウェア検証装置では、事前条件を設定して検証対象のソフトウェアに対する検査を行うことにより、実際の使用環境ではありえない状態や状態間の遷移を検出でき、これらの状態や状態間の遷移を削減した実際の使用環境に合った状態遷移図を生成できる。この状態遷移図によって、ユーザは実際の使用環境におけるソフトウェアのロジックを検証でき、ソフトウェアを更に容易に理解できる。
本発明に係るソフトウェア検証プログラムは、ソフトウェアを検証するためのソフトウェア検証プログラムであって、コンピュータに、検証対象のソフトウェアのデータフローグラフを生成するデータフローグラフ生成機能と、データフローグラフ生成機能で生成したデータフローグラフ上の機能に対する重要な分岐についてのみパス分解したサブグラフを生成するサブグラフ生成機能と、サブグラフ生成機能で生成した各サブグラフを1つの状態単位として状態遷移図を生成する状態遷移図生成機能とを実現させることを特徴とする。
本発明の上記ソフトウェア検証プログラムでは、コンピュータに、事前条件を設定する事前条件設定機能と、事前条件設定機能で設定した事前条件に基づいて検証対象のソフトウェアを検査し、状態遷移図生成機能で生成した状態遷移図における各状態と状態間の各遷移が成立するか否かを判断する検査機能と、検査機能で成立しないと判断した状態又は/及び遷移を状態遷移図生成機能で生成した状態遷移図から削減する状態遷移図補正機能とを実現させると好適である。
この各ソフトウェア検証プログラムによれば、各プログラムをコンピュータに実行させることによって、上記の各ソフトウェア検証装置と同様の作用及び効果を奏する。
本発明によれば、データフローグラフ上の重要な分岐だけパス分解してサブグラフを生成し、生成できたサブグラフだけを状態とすることにより、状態遷移図における状態を少なくでき、ユーザがソフトウェアを容易に理解できる状態遷移図を生成することができる。
以下、図面を参照して、本発明に係るソフトウェア検証装置及びソフトウェア検証プログラムの実施の形態を説明する。なお、各図において同一又は相当する要素については同一の符号を付し、重複する説明を省略する。
本実施の形態では、本発明を、自動車制御等の制御ソフトウェア(制御プログラム)を検証するソフトウェア検証装置に適用する。本実施の形態に係るソフトウェア検証装置は、検証対象の制御ソフトウェアが入力されると、その制御ソフトウェアからデータフローグラフを生成し、データフローグラフから状態遷移図等を生成し、その状態遷移図等をユーザに提供する。本実施の形態に係るソフトウェア検証装置は、ソフトウェア検証だけを行う専用装置でもよいし、あるいは、汎用コンピュータでソフトウェア検証用のアプリケーションプログラムを実行することによって構成されてもよい。
まず、図1を参照して、本実施の形態に係るソフトウェアの検証方法の概要について説明する。図1は、本実施の形態に係るソフトウェアの検証方法の概要図である。
ソフトウェア検証装置には、検証対象の制御ソフトウェアSW(ソースコード)が入力され、制御ソフトウェアSWからSlicing Criterionが設定される。Slicing Criterionは、制御ソフトウェアSWにおいて着目すべき変数であり、制御ソフトウェアSW上の状態をよく表す変数である。そして、ソフトウェア検証装置では、制御ソフトウェアSWからSlicing CriterionをOUTPUTとしたデータフローグラフDFを生成する。データフローグラフは、ソフトウェアのある変数(Slicing Criterion)に着目し、その変数に対する依存関係を示したグラフである。データフローグラフは、ソフトウェアにおける演算や分岐をノード、変数をエッジで表現する。
次に、ソフトウェア検証装置では、データフローグラフDFから重要な分岐を選択する。重要な分岐は、データフローグラフDFにおいて制御ソフトウェアのロジックを検証する上で重要となる分岐(セレクタ)である。そして、ソフトウェア検証装置では、データフローグラフDFから重要な分岐についてのみパス分解したサブグラフSGを生成する。さらに、ソフトウェア検証装置では、生成できたサブグラフをそれぞれ状態として、制御ソフトウェアSWの構造上起こりえる状態遷移図SDALLを生成する。
次に、ソフトウェア検証装置では、制御ソフトウェアSWに対する事前条件を設定する。事前条件は、制御ソフトウェアSWを実際に使用する場合の各種条件であり、例えば、制御ソフトウェアSWにおける変数の使用範囲、変数間の拘束条件、制御ソフトウェアSWでは決まらない外部条件等である。そして、ソフトウェア検証装置では、事前条件に基づいて制御ソフトウェアSWに対してモデル検査を行い、実際の使用環境で起こりえない状態や状態間の遷移(エッジ)を検出する。モデル検査は、従来の手法であり、ソフトウェア(対象関数)にある条件を与え、その条件において起こりえるか否かを網羅的に検査する。
次に、ソフトウェア検証装置では、状態遷移図SDALLから起こりえない状態や遷移を削減し、最終的な状態遷移図SDを生成する。また、ソフトウェア検証装置では、その状態遷移図SDに対応した状態遷移マトリクスSMを生成する。状態遷移マトリクスSMは、状態とイベントからなるマトリクスであり、イベントは重要な分岐で分解される各パス(各状態)が成立するための条件である。そして、ソフトウェア検証装置では、状態遷移図情報(状態遷移図SD、状態遷移マトリクスSM)をユーザに提示する。
それでは、図2〜図9を参照して、本実施の形態に係るソフトウェア検証装置1について説明する。図2は、本実施の形態に係るソフトウェア検証装置の構成図である。図3は、検証対象の制御ソフトウェアのCソースコードの一例である。図4は、図3の制御ソフトウェアのデータフローグラフである。図5は、状態とイベントの説明図である。図6は、図4のデータフローグラフの抽象化である。図7は、図4のデータフローグラフから生成したサブグラフである。図8は、図7のサブグラフから生成した状態遷移図である。図9は、図8の状態遷移図から成立しない状態と遷移を削減した最終的な状態遷移図である。
ソフトウェア検証装置1は、データフローグラフ生成手段10、サブグラフ生成手段11、状態遷移図生成手段12、検査要件生成手段13、検証手段14を備えている。ここでは、ソフトウェア検証装置1に図3に示す制御ソフトウェアSW(Cソースコード)が入力され、その制御ソフトウェアSWに対する具体的な処理結果を示しながら説明する。
なお、本実施の形態では、データフローグラフ生成手段10が特許請求の範囲に記載するデータフローグラフ生成手段及びデータフローグラフ生成機能に相当し、サブグラフ生成手段11が特許請求の範囲に記載するサブグラフ生成手段及びサブグラフ生成機能に相当し、状態遷移図生成手段12が特許請求の範囲に記載する状態遷移図生成手段及び状態遷移図生成機能に相当し、検査要件生成手段13が特許請求の範囲に記載する事前条件設定手段及び事前条件設定機能に相当し、検証手段14が特許請求の範囲に記載する検査手段と状態遷移図補正手段及び検査機能と状態遷移図補正機能に相当する。
図3に示す制御ソフトウェアSWは、C言語で記述されたソースコード(smpleCode.c)である。smpleCode.cは、doModeFuncがONの場合にmodeFlagに対応する関数doModeA〜D()を順番に実行し、該当するフラグがないときには関数doNothing()を実行し、doModeFuncがOFFの場合にtempOutput=DEFAULTを実行するソースである。このsmpleCode.cに対するロジックの検証項目としては、doModeA〜D()が順番に正しく遷移するかである。
データフローグラフ生成手段10では、まず、ユーザによってソフトウェア検証装置1に制御ソフトウェアSWのソースコードが入力されると、制御ソフトウェアSWのソースコードからSlicing Criterion(着目する変数)を設定する。Slicing Criterionとしては、1個でもよいし、あるいは、複数個でもよい。Slicing Criterionの設定は、ユーザによってソフトウェア検証装置1に入力された変数を設定してもよいし、あるいは、所定のルール(例えば、ソースコードでの最終的な出力変数を設定)に従ってソフトウェア検証装置1で自動設定してもよい。本実施の形態では、図3に示す制御ソフトウェアSWのソースコード(smpleCode.c)から変数のoutputをSlicing Criterionとして設定する。そして、データフローグラフ生成手段10では、制御ソフトウェアSWのソースコードからSlicing CriterionをOUTPUTとするデータフローグラフを生成する。
データフローグラフの生成は、従来の手法を適用する。例えば、手続き型のソフトウェアのソースコードの場合、ソースコードの構文を解析し、その構文解析結果に基づいてコントロールフローグラフを生成し、コントロールフローグラフを用いてグローバル変数についての到達定義を算出し、各ノードの到達定義集合を用いてSlicing Criterionから到達定義を逆順に追跡し、その追跡結果に基づいてSlicing CriterionをOUTPUTとするデータフローグラフを生成する。データフローグラフは、図4に示すように、演算が四角形(ノード)で表され、セレクタ(分岐)が菱形(ノード)で表され、参照が矢印(エッジ)で表される。
図4には、図3に示す制御ソフトウェアSWのソースコード(smpleCode.c)のoutputをSlicing CriterionとしたデータフローグラフDFOを示している。データフローグラフDFOでは、sel1とsel2の2つのセレクタがあり、「+」の演算が1つある。セレクタsel2のINPUTは関数doModeA〜D(void)、doNOthing(void)であり、この5つのINPUTがセレクタsel2で切り替えられて出力される。また、セレクタsel1のINPUTは「+」の演算の演算値、DEFAULT、MIN、MAXであり、この4つのINPUTがセレクタsel1で切り替えられて出力される。セレクタsel1からの出力された値が、データフローグラフDFOのOUTPUT(Slicing Criterionであるoutput)である。なお、[Line*]の各数字*は、図3のソースコードにおけるライン番号を示している。また、sel*の各数字は、セレクタ番号を示している。
ここで、図5を参照して、状態とイベントについて説明しておく。図5に示すデータフローグラフの例の場合、制御ソフトウェアのロジックを検証する上で重要な分岐(セレクタ)をSEL1とする。状態は、重要な分岐の入力側の各エッジをそれぞれ通る経路(パス)であり、この例の場合はエッジE1側を通ることを拘束条件とする状態S1とエッジE2側を通ることを拘束条件とする状態S2である。イベントは、重要な分岐の入力側の各エッジが成立するための条件であり、この例の場合にはエッジE1を通るための条件とエッジR2を通るための条件である。
サブグラフ生成手段11では、まず、データフローグラフ生成手段10で生成さえたデータフローグラフDF0から重要な分岐(セレクタ)を選択する。重要な分岐を選択する方法としては、基本的には以下の3つの方法があり、ユーザがセレクタを選択する方法、Slicing Criterionに近いセレクタから段階的に自動選択する方法、データフローグラフを抽象化して抽象化データフローグラフで残ったセレクタを全て選択する方法がある。さらに、上記の方法を組み合わせた方法もあり、例えば、抽象化データフローグラフで残ったセレクタからユーザが選択する方法がある。
ユーザが選択する場合、データフローグラフDFOからユーザがロジックを検証する上で重要と考えるセレクタを判断し、そのセレクタを選択する。この場合、サブグラフ生成手段11では、ユーザによってセレクタが選択されると、そのセレクタを重要な分岐として設定する。ユーザによる選択は、例えば、モニタでデータフローグラフDF0を表示し、セレクタ番号を入力やマウスによってセレクタをクリック等でセレクタを選択する。Slicing Criterionに近いセレクタから段階的に自動選択する場合、サブグラフ生成手段11では、データフローグラフDFOから、Slicing Criterionに近い順にセレクタを全て自動選択してもよいが、予めパス分解する上限を設定しておき、Slicing Criterionに近い順にパス分解するセレクタを自動選択し、設定上限に達した時点でそれ以上はセレクタを選択しない。
データフローグラフを抽象化する方法について説明する。この抽象化では、ライブラリ等のデータフローグラフ上の機能の本質と関係のないものを抽象化して重要でないセレクタを減らして、機能の本質を示すセレクタのみを残す。
例えば、図4に示すデータフローグラフDFOの場合、sel1の一部を構成するHILOGDは考慮する必要がないので、HILOGDの部分を抽象化する。HILOGDは、ある変数に対して上限(MAX)と下限(MIN)のガードが設定されている場合にその変数をガードに対して判断し、その変数を上限から下限までの値とするものである。具体的には、図6(a)に示すように、図4のセレクタsel1の一部(「+」の演算の出力、MIN、MAXの何れかを切り替えて出力する部分)を、HILOGDに置き換えて抽象化する。これによって、セレクタsel1の残り部分のDEFAULTとHILOGDの出力をINPUTとし、新たにセレクタsel3として分離する。図6(b)には、抽象化されたデータフローグラフDFAを示す。
抽象化を行う場合、サブグラフ生成手段11では、HILOGDのような抽象化できるパターンを複数設定しておき、データフローグラフDFOの中で抽象化パターンを適用できる箇所を全て抽象化パターンに置き換えて抽象化し、抽象化されたデータフローグラフDFAの中で残された全てのセレクタを自動選択する。あるいは、抽象化データフローグラフDFAの中で残された全てのセレクタの中から、ユーザがセレクタを選択してもよい。なお、ユーザがセレクタを選択する場合、1つのセレクタを選択してもよいし、あるいは、複数のセレクタを選択してもよい。
重要な分岐(セレクタ)を選択すると、サブグラフ生成手段11では、抽象化データフローグラフDFAに対してその重要な分岐(セレクタ)の入力側のエッジ毎にパス分解し、各パス(各状態)のデータフローグラフをサブグラフSGとしてそれぞれ生成する。
上記したように、図3に示すsmpleCode.cに対する検証項目はdoModeA〜D()が順番に正しく遷移するかである。この検証項目を容易に検証できる状態遷移図を得るために、図6(b)に示す抽象化データフローグラフDFAから、ユーザが重要な分岐としてセレクタsel2を選択したとする。セレクタsel2で分解されるパスとしては、INPUTがdoModeA(void)であるエッジのパス(状態A)、INPUTがdoModeB(void)であるエッジのパス(状態B)、INPUTがdoModeC(void)であるエッジのパス(状態C)、INPUTがdoModeD(void)であるエッジのパス(状態D)、INPUTがdoNothing(void)であるエッジのパス(状態doNothing)がある。さらに、この各状態に含まれない部分(その他の状態)が残る。この各状態のサブグラフは、状態Aが図7(a)に示すサブグラフSGAとなり、状態Bが図7(b)に示すサブグラフSGBとなり、状態Cが図7(c)に示すサブグラフSGCとなり、状態Dが図7(d)に示すサブグラフSGDとなり、状態doNothingが図7(e)に示すサブグラフSGEとなり、その他の状態が図7(f)に示すサブグラフSGFとなる。
状態遷移図生成手段12では、サブグラフ生成手段11で生成された全ての状態のサブグラフSGを用いて、各サブグラフを1つの状態として状態遷移図を生成する。ここでは、データフローグラフDFO(抽象化データフローグラフDFA)が繰り返し実行されることを前提に加えて、状態遷移図化する。この状態遷移図化では、全てのサブグラフSGをそれぞれ状態とし、2つの状態の全ての組み合わせ(同じ状態同士の組み合わせも含む)について全て遷移する状態遷移図とする。図7に示す6つのサブグラフSGA,SGB,SGC,SGD,SGE,SGFを用いた場合、図8に示す状態遷移図SDALLとなる。
なお、状態遷移図生成手段12で生成された状態遷移図SDALLは、ある分岐(セレクタ)についてのみパス分解して得られた状態(サブグラフSG)だけで状態遷移図化しているので、従来の手法による状態遷移図と比較すると状態の数は少なくなっている(ひいては、状態間の遷移の数も少なくなっている)。しかも、ロジックを検証する上で重要となる分岐に絞っている。しかし、この状態遷移図SDALLは、構造的(if文やswitch文でできた構造)にありえる状態、状態間の遷移を全て列挙したものとなっている。そのため、実際の使用環境ではありえない状態や遷移が含まれている場合がある。そこで、実際の使用環境に合った状態遷移図とする必要がある。
検査要件生成手段13では、検証手段14でのモデル検査の検査要件CC(事前条件、検査対象)を生成(設定)する。事前条件は、制御ソフトウェアSWが実際に使用される場合の各種条件である。事前条件としては、例えば、制御ソフトウェアSWのソースコードで用いられている各変数の使用範囲、変数間の拘束条件、制御ソフトウェアSWで決まらない外部条件(例えば、プラントモデル条件)がある。事前条件の場合、ユーザによってソフトウェア検証装置1に事前条件が入力されると、検査要件生成手段13ではその事前条件を設定する。事前条件については、ソフトウェア検証装置1で入力される制御ソフトウェアSWのソースコードに対してデータベースに予め格納されている各変数の情報や外部条件等を用いて自動設定してもよい。検査対象は、状態遷移図生成手段12で生成された状態遷移図SDALLにおける全ての状態と状態間の全ての遷移が対象となる。検査対象の場合、状態遷移図SDALLが生成されると、検査要件生成手段13ではその状態遷移図SDALLから全ての状態と全ての遷移を抽出して設定する。
検証手段14では、まず、検査要件生成手段13で生成された事前条件に基づいて制御ソフトウェアSWに対してモデル検査を行い、検査要件生成手段13で生成された検査対象(状態遷移図SDALLにおける全ての状態と全ての遷移)の成立性(実際にありえるか否か)を判断する。
図8に示す状態遷移図SDALLの場合、まず、検査対象である状態遷移図SDALLの全ての状態(状態A〜D、状態doNothing、その他)について成立性を検査するために、事前条件に基づいて制御ソフトウェアSWの対象関数(modefunc())を1回実行してモデル検査を行う。さらに、検査対象である状態遷移図SDALLの状態間の全ての組み合わせについての遷移の成立性を検査するために、事前条件に基づいて制御ソフトウェアSWの対象関数(modefunc())を2回実行してモデル検査を行う。
例えば、事前条件として各変数の使用範囲、変数間の拘束条件、プラントモデル条件を与えた場合、モデル検査を行うと、変数の型範囲でありえない状態や遷移(対象関数の中の条件式の関係や拘束条件からないもの)、更に、変数の使用範囲でありえない状態や遷移(実際に使用する変数範囲でありえないもの)、更に、外部条件でありえない状態や遷移(それぞれ変数の拘束条件、理想的にはプラントモデル条件でありえないもの)を検出できる。理想的な事前条件を設定できていれば、実際の使用環境でありえない状態や遷移を検出することができる。
検証手段14では、ありえない(成立しない)状態や遷移を検出できた場合、状態遷移図生成手段12で生成された状態遷移図SDALLからその状態や遷移を削除し、最終的な状態遷移図SDを生成する。さらに、検証手段14では、その状態遷移図SDに対応した状態遷移マトリクスSMを生成する。そして、検証手段14では、その状態遷移情報SI(状態遷移図SD、状態遷移マトリクスSM)をユーザに提示する。ユーザへの提示方法としては、例えば、モニタ表示、印刷出力がある。
図9には、図8に示す状態遷移図SDALLから成立しない(ありえない)状態や遷移を削減した状態遷移図SDの一例を示している。この状態遷移図SDの場合、状態doNothingが成立しない状態として削減されており、異なる状態間の遷移や同じ状態間の遷移も削減されている。また、この状態遷移図SDの場合、状態Dが行き止まりの状態となっている。したがって、ユーザは、この状態遷移図SDが提示された場合、実際の使用環境では状態doNothingが実行されないことや状態Dからは他の状態に遷移しないことなどに気付く。
なお、ユーザは、状態遷移図SDが提示されたときに、状態遷移図SDに自分が意図(予想)していない状態や遷移が有ったりあるいは意図していた状態や遷移が無いことに気付く場合がある。このような場合、ユーザは、意図した状態や遷移となるように、制御ソフトウェアSWを修正する。そして、ユーザは、再度、ソフトウェア検証装置1で修正後の制御ソフトウェアSWを検証し、修正後の制御ソフトウェアSWに対する状態遷移図SDを確認する。
図2〜図9を参照して、ソフトウェア検証装置1の動作を図10のフローチャート沿って説明する。図10は、本実施の形態に係るソフトウェア検証装置における動作の流れを示すフローチャートである。ユーザは、ソフトウェア検証装置1を起動し、ソフトウェア検証装置1に検証対象の制御ソフトウェアSWを入力する。この際、ユーザは、Slicing Criterionも設定する。
制御ソフトウェアSWを入力されると、ソフトウェア検証装置1のデータフローグラフ生成手段10では、制御ソフトウェアSWからSlicing CriterionをOUTPUTとしたデータフローグラフDFを生成する(S1)。
次に、ソフトウェア検証装置1のサブグラフ生成手段11では、データフローグラフDFOから重要な分岐(セレクタ)を選択する(S2)。この際、必要に応じて、データフローグラフDFOから抽象化データフローグラフDFAを生成する。そして、サブグラフ生成手段11では、データフローグラフDFo(あるいは抽象化データフローグラフDFA)から重要な分岐(セレクタ)についてのみパス分解し、分解したパスに応じて各状態のサブグラフSGを生成する(S3)。
次に、ソフトウェア検証装置1の状態遷移図生成手段12では、各サブグラフSGを1状態単位として状態遷移図SDALLを生成する(S4)。
次に、ソフトウェア検証装置1の検査要件生成手段13では、制御ソフトウェアSWを実際に使用する場合の事前条件を設定するとともに、状態遷移図SDALLから検査対象の状態や状態間の遷移を設定する(S5)。
次に、ソフトウェア検証装置1の検証手段14では、事前条件と制御ソフトウェアSWをモデル検査にかけ、検証対象(状態、状態間の遷移)の成立性を検証し、成立しない状態や遷移を検出する(S6)。そして、検証手段14では、成立しない状態や遷移を状態遷移図SDALLから削減し、最終的な状態遷移図SDを生成する(S7)。さらに、検証手段14では、少なくとも状態遷移図SDをユーザに提示する(S8)。
このソフトウェア検証装置1によれば、データフローグラフ上の重要な分岐だけパス分解してサブグラフを生成し、生成できたサブグラフだけを状態とすることにより、状態遷移図における状態(ひいては、遷移)を少なくでき、ユーザが制御ソフトウェアを容易に理解できる状態遷移図を生成することができる。ユーザは、この状態遷移図によって制御ソフトウェアのロジックの検証を容易にでき、制御ソフトウェアを容易に理解できる。
また、ソフトウェア検証装置1によれば、事前条件を設定して検証対象の制御ソフトウェアに対するモデル検査を行うことにより、実際の使用環境でありえない状態や状態間の遷移を検出でき、これらの状態や状態間の遷移を削減した実際の使用環境に合った状態遷移図を生成できる。ユーザは、この状態遷移図によって実際の使用環境における制御ソフトウェアのロジックの検証を容易にでき、制御ソフトウェアを更に容易に理解できる。
また、ソフトウェア検証装置1によれば、データフローグラフ上で機能の本質に関係のないものを抽象化した抽象化データフローグラフを生成することにより、データフローグラフ上の重要でない分岐(セレクタ)を削減でき、データフローグラフ上の重要な分岐を容易に選択できる。
ユーザは、制御ソフトウェアを容易に理解できる状態遷移図が提示されるので、制御ソフトウェアの不具合やロジックの抜け等を容易に検出できる。また、ユーザは、提示された状態遷移図において意図していた状態や遷移を含んでいないことあるいは意図していない状態や遷移を含んでいることに容易に気付くことができ、迅速に制御ソフトウェアを修正できる。
以上、本発明に係る実施の形態について説明したが、本発明は上記実施の形態に限定されることなく様々な形態で実施される。
例えば、本実施の形態ではソフトウェアを検証するソフトウェア検証装置に適用したが、CD−ROM等の記憶媒体に格納されるソフトウェア検証プログラムやインタネット等のネットワークを介して利用可能なソフトウェア検証プログラム等に適用し、このソフトウェア検証プログラムをコンピュータで実行することによってソフトウェアを検証する構成としてもよい。
また、本実施の形態では検証対象のソフトウェアとして自動車制御等の制御ソフトウェアに適用したが、制御以外の様々なソフトウェアに適用可能である。また、本実施の形態では検証対象のソフトウェアとしてC言語で記述されたソフトウェアを示したが、simulink等のC言語以外の様々な言語のソフトウェアを適用可能である。
また、本実施の形態では事前条件を設定してモデル検査を実施し、実際の使用環境ではありえない状態や遷移を削減した状態遷移図を生成する構成としたが、このようなモデル検査を実施せず、状態や遷移を削減しない状態遷移図を提供する構成としてもよい。
また、本実施の形態では各状態や各遷移の成立性を検証するための検証手段としてモデル検査を利用したが、他の検証手段を用いてもよい。
1…ソフトウェア検証装置、10…データフローグラフ生成手段、11…サブグラフ生成手段、12…状態遷移図生成手段、13…検査要件生成手段、14…検証手段。
Claims (4)
- ソフトウェアを検証するソフトウェア検証装置であって、
検証対象のソフトウェアのデータフローグラフを生成するデータフローグラフ生成手段と、
前記データフローグラフ生成手段で生成したデータフローグラフ上の機能に対する重要な分岐についてのみパス分解したサブグラフを生成するサブグラフ生成手段と、
前記サブグラフ生成手段で生成した各サブグラフを1つの状態単位として状態遷移図を生成する状態遷移図生成手段と、
を備えることを特徴とするソフトウェア検証装置。 - 事前条件を設定する事前条件設定手段と、
前記事前条件設定手段で設定した事前条件に基づいて検証対象のソフトウェアを検査し、前記状態遷移図生成手段で生成した状態遷移図における各状態と状態間の各遷移が成立するか否かを判断する検査手段と、
前記検査手段で成立しないと判断した状態又は/及び遷移を前記状態遷移図生成手段で生成した状態遷移図から削減する状態遷移図補正手段と、
を備えることを特徴とする請求項1に記載のソフトウェア検証装置。 - ソフトウェアを検証するためのソフトウェア検証プログラムであって、
コンピュータに、
検証対象のソフトウェアのデータフローグラフを生成するデータフローグラフ生成機能と、
前記データフローグラフ生成機能で生成したデータフローグラフ上の機能に対する重要な分岐についてのみパス分解したサブグラフを生成するサブグラフ生成機能と、
前記サブグラフ生成機能で生成した各サブグラフを1つの状態単位として状態遷移図を生成する状態遷移図生成機能と、
を実現させることを特徴とするソフトウェア検証プログラム。 - コンピュータに、
事前条件を設定する事前条件設定機能と、
前記事前条件設定機能で設定した事前条件に基づいて検証対象のソフトウェアを検査し、前記状態遷移図生成機能で生成した状態遷移図における各状態と状態間の各遷移が成立するか否かを判断する検査機能と、
前記検査機能で成立しないと判断した状態又は/及び遷移を前記状態遷移図生成機能で生成した状態遷移図から削減する状態遷移図補正機能と、
を実現させることを特徴とする請求項3に記載のソフトウェア検証プログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012093859A JP2013222327A (ja) | 2012-04-17 | 2012-04-17 | ソフトウェア検証装置及びソフトウェア検証プログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012093859A JP2013222327A (ja) | 2012-04-17 | 2012-04-17 | ソフトウェア検証装置及びソフトウェア検証プログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2013222327A true JP2013222327A (ja) | 2013-10-28 |
Family
ID=49593238
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2012093859A Pending JP2013222327A (ja) | 2012-04-17 | 2012-04-17 | ソフトウェア検証装置及びソフトウェア検証プログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2013222327A (ja) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2016081089A (ja) * | 2014-10-09 | 2016-05-16 | 株式会社東芝 | データフロー図生成装置 |
JP2016143075A (ja) * | 2015-01-29 | 2016-08-08 | 東芝ソリューション株式会社 | 仕様抽出装置、仕様抽出方法およびプログラム |
JP2017117449A (ja) * | 2015-12-24 | 2017-06-29 | インテル コーポレイション | ベクトル推定に基づくグラフ分割を伴う、コンピューティング装置のデータフロープログラミング |
JP7009001B1 (ja) * | 2021-03-02 | 2022-01-25 | 株式会社Team F | 情報処理装置およびプログラム |
JP7101934B1 (ja) * | 2021-03-02 | 2022-07-19 | 株式会社Team F | 情報処理装置およびプログラム |
-
2012
- 2012-04-17 JP JP2012093859A patent/JP2013222327A/ja active Pending
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2016081089A (ja) * | 2014-10-09 | 2016-05-16 | 株式会社東芝 | データフロー図生成装置 |
JP2016143075A (ja) * | 2015-01-29 | 2016-08-08 | 東芝ソリューション株式会社 | 仕様抽出装置、仕様抽出方法およびプログラム |
JP2017117449A (ja) * | 2015-12-24 | 2017-06-29 | インテル コーポレイション | ベクトル推定に基づくグラフ分割を伴う、コンピューティング装置のデータフロープログラミング |
CN106919380A (zh) * | 2015-12-24 | 2017-07-04 | 英特尔公司 | 利用基于向量估计的图分割的计算装置的数据流编程 |
CN106919380B (zh) * | 2015-12-24 | 2020-06-16 | 英特尔公司 | 利用基于向量估计的图分割的计算装置的数据流编程 |
JP7009001B1 (ja) * | 2021-03-02 | 2022-01-25 | 株式会社Team F | 情報処理装置およびプログラム |
JP7101934B1 (ja) * | 2021-03-02 | 2022-07-19 | 株式会社Team F | 情報処理装置およびプログラム |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Baudry et al. | Barriers to systematic model transformation testing | |
Knauss et al. | Supporting continuous integration by code-churn based test selection | |
US8291372B2 (en) | Creating graphical models representing control flow of a program manipulating data resources | |
US20170220456A1 (en) | System and method for coverage-based automated test case augmentation for design models | |
JP2013222327A (ja) | ソフトウェア検証装置及びソフトウェア検証プログラム | |
US9342439B2 (en) | Command coverage analyzer | |
JP2016115175A (ja) | ソフトウェアテスト装置およびソフトウェアテストプログラム | |
Tierno et al. | Open issues for the automotive software testing | |
Soares et al. | Varxplorer: Lightweight process for dynamic analysis of feature interactions | |
Gao et al. | Testing coverage analysis for software component validation | |
Niranjan | Jenkins pipelines: A novel approach to machine learning operations (mlops) | |
Teixeira et al. | EasyTest: An approach for automatic test cases generation from UML Activity Diagrams | |
Rubasinghe et al. | Towards traceability management in continuous integration with SAT-Analyzer | |
Kosindrdecha et al. | A test case generation process and technique | |
Allweyer et al. | A tool for animating BPMN token flow | |
JP2009134360A (ja) | モデル検査システム、モデル検査方法およびモデル検査用プログラム | |
US9405514B1 (en) | Process fragment management | |
Das et al. | State machine antipatterns for UML-RT | |
Sabharwal et al. | An event-based approach to generate test scenarios | |
JP6279750B2 (ja) | ソースコード等価性検証装置 | |
JP5755861B2 (ja) | テストケース生成装置、テストケース生成方法およびテストケース生成プログラム | |
Grossmann et al. | A trace management platform for risk-based security testing | |
CN110928761A (zh) | 需求链及其应用的系统和方法 | |
US20100293018A1 (en) | Test Model Abstraction For Testability in Product Line Engineering | |
KR101521595B1 (ko) | 인터렉티브 컨텐츠 구성을 위한 데이터 처리 장치, 그 방법및 기록매체 |