JP2013206310A - モデル検査装置、モデル検査方法、およびプログラム - Google Patents
モデル検査装置、モデル検査方法、およびプログラム Download PDFInfo
- Publication number
- JP2013206310A JP2013206310A JP2012076787A JP2012076787A JP2013206310A JP 2013206310 A JP2013206310 A JP 2013206310A JP 2012076787 A JP2012076787 A JP 2012076787A JP 2012076787 A JP2012076787 A JP 2012076787A JP 2013206310 A JP2013206310 A JP 2013206310A
- Authority
- JP
- Japan
- Prior art keywords
- module
- verification code
- verification
- output
- defect
- 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
Landscapes
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
【課題】システムやソフトウェアの設計を検証するモデル検査において、反例解析の効率を向上させる。
【解決手段】ソフトウェアまたはシステムを構成するモジュールの動作仕様と、入力条件・出力条件を定義した仕様・設計情報の入力を受ける仕様・設計情報入力部11と、仕様・設計情報に基づいて、モジュール毎に不具合の有無を検証する検証コードを生成する検証コード生成部12と、検証コードを用いてモデル検査を実行するモデル検査実行部13と、モデル検査において不具合を発見した場合に得られる反例から、不具合の存在するモジュールが実行するものではないステップを排除する反例加工部14と、モデル検査において発見された不具合の有無を出力し、不具合がある場合には、不具合のあるモジュールを提示すると共に、不具合のあるモジュールが実行するものではないステップを排除した反例を出力する検証結果出力部15と、を備える。
【選択図】図1
【解決手段】ソフトウェアまたはシステムを構成するモジュールの動作仕様と、入力条件・出力条件を定義した仕様・設計情報の入力を受ける仕様・設計情報入力部11と、仕様・設計情報に基づいて、モジュール毎に不具合の有無を検証する検証コードを生成する検証コード生成部12と、検証コードを用いてモデル検査を実行するモデル検査実行部13と、モデル検査において不具合を発見した場合に得られる反例から、不具合の存在するモジュールが実行するものではないステップを排除する反例加工部14と、モデル検査において発見された不具合の有無を出力し、不具合がある場合には、不具合のあるモジュールを提示すると共に、不具合のあるモジュールが実行するものではないステップを排除した反例を出力する検証結果出力部15と、を備える。
【選択図】図1
Description
本発明は、モデル検査装置、モデル検査方法、およびプログラムに関する。
近年、複雑化・巨大化が進むシステムやソフトウェアの検証手法として、モデル検査による検証が行われている。モデル検査とは、検証対象を状態遷移系としてモデル化し、それを網羅的に探索することで、検証対象が仕様を満たしているかどうかを検証する技術である。モデル検査は設計段階から適用できるため、システムやソフトウェアの信頼性を向上させるための技術として注目されている。
モデル検査による検証手法でシステムやソフトウェアの不具合が発見された場合、その不具合に至るまでのシーケンスが、満たすべき仕様に対する反例として得られる。得られるのはあくまでシーケンスの一例であるため、不具合を修正するにあたりその原因を特定するには、得られた反例を解析する必要がある。その解析作業は一般に困難なものであるため、それを支援する技術が開発されている。例えば特許文献1には、反例と共に問題箇所候補を提示する技術が開示されている。
しかし、特許文献1に記載された方法では、反例そのものの可読性は向上しないという問題がある。反例のシーケンス内には、通常不具合と直接関係のあるステップだけでなく、無関係なステップも数多く含まれている。したがって、不具合の原因となっている箇所が判明しても、不具合が発生する理由や修正案の検討には反例の解析が不可欠である。その際に、不具合とは無関係のステップについても確認することは時間の浪費であり、検証の工数を増大させる原因となる。
そこで、本発明の目的は、システムやソフトウェアの設計が仕様を満たしているか否かを検証するモデル検査において、反例解析の効率を向上させることである。
本発明に係るモデル検査装置は、ソフトウェアまたはシステムを構成するモジュールの動作仕様と、入力条件・出力条件を定義した仕様・設計情報の入力を受ける仕様・設計情報入力部と、前記仕様・設計情報に基づいて、モジュール毎に不具合の有無を検証する検証コードを生成する検証コード生成部と、前記検証コードを用いてモデル検査を実行するモデル検査実行部と、前記モデル検査において不具合を発見した場合に得られる反例から、不具合の存在するモジュールが実行するものではないステップを排除する反例加工部と、前記モデル検査において発見された不具合の有無を出力し、不具合がある場合には、不具合のあるモジュールを提示すると共に、不具合のあるモジュールが実行するものではないステップを排除した反例を出力する検証結果出力部と、を備えたものである。
本発明に係るモデル検査方法は、ソフトウェアまたはシステムを構成するモジュールの動作仕様と、入力条件・出力条件を定義した仕様・設計情報の入力を受ける工程と、前記仕様・設計情報に基づいて、モジュール毎に不具合の有無を検証する検証コードを生成する工程と、前記検証コードを用いてモデル検査を実行する工程と、前記モデル検査において不具合を発見した場合に得られる反例から、不具合の存在するモジュールが実行するものではないステップを排除する工程と、前記モデル検査において発見された不具合の有無を出力し、不具合がある場合には、不具合のあるモジュールを提示すると共に、不具合のあるモジュールが実行するものではないステップを排除した反例を出力する工程と、を備えたものである。
本発明に係るプログラムは、コンピュータを、ソフトウェアまたはシステムを構成するモジュールの動作仕様と、入力条件・出力条件を定義した仕様・設計情報の入力を受ける仕様・設計情報入力部と、前記仕様・設計情報に基づいて、モジュール毎に不具合の有無を検証する検証コードを生成する検証コード生成部と、前記検証コードを用いてモデル検査を実行するモデル検査実行部と、前記モデル検査において不具合を発見した場合に得られる反例から、不具合の存在するモジュールが実行するものではないステップを排除する反例加工部と、前記モデル検査において発見された不具合の有無を出力し、不具合がある場合には、不具合のあるモジュールを提示すると共に、不具合のあるモジュールが実行するものではないステップを排除した反例を出力する検証結果出力部と、して機能させるためのものである。
本発明によれば、システムやソフトウェアの設計が仕様を満たしているか否かを検証するモデル検査において、反例解析の効率を向上させることができる。
実施の形態1.
次に、本発明を実施するための形態について、図面を参照して詳細に説明する。
図1は、本発明の実施の形態1によるモデル検査装置1の構成を示すブロック図である。
図1に示すように、モデル検査装置1は、仕様・設計情報入力部11、検証コード生成部12、モデル検査実行部13、反例加工部14、および検証結果出力部15を備えている。
次に、本発明を実施するための形態について、図面を参照して詳細に説明する。
図1は、本発明の実施の形態1によるモデル検査装置1の構成を示すブロック図である。
図1に示すように、モデル検査装置1は、仕様・設計情報入力部11、検証コード生成部12、モデル検査実行部13、反例加工部14、および検証結果出力部15を備えている。
モデル検査装置1は、CPU、ROMやRAM等のメモリ、各種の情報を格納する外部記憶装置、入力装置、出力装置、通信インタフェース及びこれらを結ぶバスを備える専用又は汎用のコンピュータを適用することができる。なお、モデル検査装置1は、単一のコンピュータにより構成されるものであっても、通信回線を介して互いに接続された複数のコンピュータにより構成されるものであってもよい。
仕様・設計情報入力部11、検証コード生成部12、モデル検査実行部13、反例加工部14、および検証結果出力部15は、CPUがROM等に格納された所定のプログラムを実行することにより実現される機能の単位に相当する。
仕様・設計情報入力部11は、入力装置を介して、システムあるいはソフトウェアを構成するモジュールの内容と、モジュールの入力条件・出力条件と、を定義した仕様・設計情報の入力を受ける。
図2に示すように、仕様・設計情報D11は、各モジュールについてのモジュールの識別子D1111、モジュールが参照する変数名D1112、モジュールの入力条件・出力条件D1113、およびモジュールの動作仕様D1114の情報を含むモジュール情報D111を有している。
検証コード生成部12は、仕様・設計情報入力部11から仕様・設計情報D11を受信し、モデル検査実行部13が実行可能な検証コードを生成する。検証コードは、システムあるいはソフトウェアを構成するモジュールの内容とその検証内容を定義している。
ここでは、検証内容は、モジュールが入力条件を満たす入力を受け取った場合に、出力条件を満たさない出力を行なう不具合を意味する出力違反の有無の検証、またはモジュールがその他のモジュールを呼び出す場合に、モジュールがその他のモジュールの入力条件を満たさない入力を行なう不具合を意味する呼出違反の有無の検証、のいずれかであるものとして説明する。ただし、適切な検証コードが生成できるものであれば、検証内容は出力違反の有無または呼出違反の有無に限定されない。
検証コードは、システムあるいはソフトウェアを構成するモジュール毎に、出力違反検証を行なう検証コードと呼出違反検証を行なう検証コードのそれぞれを生成する。すなわち、モジュール1つにつき検証コードが2つ生成されることになるので、モジュールの数がn(nは自然数)であった場合、検証コードは2n生成される。
モデル検査実行部13は、検証コード生成部12で生成された各々の検証コードについてモデル検査を実行し、検証内容の成否である検証結果と、さらに検証内容が満たされない場合にはその反例とを生成する。検証コード1つにつきモデル検査が1回実行され、検証結果が1つと、さらに検証内容が満たされない場合には反例が1つ生成されることになる。したがって、検証コードの数が2nであった場合、モデル検査が2n回実行され、検証結果は2n生成され、反例は最大で2n生成される。
反例加工部14は、モデル検査実行部13が実行したモデル検査の結果として生成された各々の反例から、出力違反検証あるいは呼出違反検証の対象であるモジュール以外のモジュールのステップを排除し、新たな反例を生成する。反例1つにつき新たな反例が1つ生成されることになるので、反例の数が2nであった場合、新たな反例は2n生成される。
検証結果出力部15は、モデル検査実行部13が実行したモデル検査の結果である検証結果と、反例加工部14が生成した新たな反例とをそれぞれ個別に出力する。仕様・設計情報D11に含まれるモジュール1つにつき、出力違反検証の結果が1つ、呼出違反検証の結果が1つ生成されることになるので、モジュールの数がnであった場合、検証結果は2n出力される。また、モジュール1つにつき新たな反例が最大2つ生成されることになるので、モジュールの数がnであった場合、新たな反例は最大2n出力される。
次に、図3のフローチャートを用いてモデル検査装置1の動作について説明する。
まず、ユーザーは、仕様・設計情報D11を作成し、入力装置を介してモデル検査装置1に入力する(ステップS11)。モデル検査装置1は仕様・設計情報入力部11において仕様・設計情報D11を受信する。
まず、ユーザーは、仕様・設計情報D11を作成し、入力装置を介してモデル検査装置1に入力する(ステップS11)。モデル検査装置1は仕様・設計情報入力部11において仕様・設計情報D11を受信する。
次に、検証コード生成部12において、仕様・設計情報D11を検証コードD12に変換する(ステップS12)。
図4を用いて、検証コード生成部12の詳細な動作について説明する。
まず、検証コード生成部12は仕様・設計情報D11に含まれる全てのモジュールの動作仕様を検証コード化した、ベースとなる検証コードD121を生成する(ステップS121)。次に、ベースとなる検証コードD121のコピーD121’を1つ生成し、仕様・設計情報D11からモジュールMを1つ抽出する(ステップS123)。
まず、検証コード生成部12は仕様・設計情報D11に含まれる全てのモジュールの動作仕様を検証コード化した、ベースとなる検証コードD121を生成する(ステップS121)。次に、ベースとなる検証コードD121のコピーD121’を1つ生成し、仕様・設計情報D11からモジュールMを1つ抽出する(ステップS123)。
次に、ベースとなる検証コードD121を用いて、モジュールMの出力違反検証コードD122を生成する(ステップS124)。さらに、同じくベースとなる検証コードD121を用いて、呼出違反検証コードD123を生成する(ステップS125)。これを、仕様・設計情報D11から抽出していないモジュールがなくなるまで繰り返す(ステップS122)。
モジュール1つにつき検証コードが2つ生成されることになるので、モジュールの数がnであった場合、検証コードは2n生成される。
図5を用いて、出力違反検証コードD122の生成について詳細に説明する。
まず、ベースとなる検証コードD121のコピーD121’を生成する(ステップS1241)。次に、抽出したモジュールMの入力条件の成否を判定する検証コードD1221を生成し(ステップS1242)、ベースとなる検証コードD121のコピーD121’内の、モジュールMの動作仕様を表す部分の入力動作の直後に挿入する(ステップS1243)。
まず、ベースとなる検証コードD121のコピーD121’を生成する(ステップS1241)。次に、抽出したモジュールMの入力条件の成否を判定する検証コードD1221を生成し(ステップS1242)、ベースとなる検証コードD121のコピーD121’内の、モジュールMの動作仕様を表す部分の入力動作の直後に挿入する(ステップS1243)。
さらに、モジュールMがその他のモジュールを呼び出す場合には(ステップS1244:Yes)、呼び出すモジュールのそれぞれについてその出力条件の成否を判定する検証コードD1222を生成し(ステップS1245)、ベースとなる検証コードD121のコピーD121’内の、各呼出動作の直後にそれぞれ対応する検証コードD1222を挿入する(ステップS1246)。
最後に、モジュールMの出力条件の成否を判定する検証コードD1223を生成し(ステップS1247)、ベースとなる検証コードD121のコピーD121’内の、モジュールMの動作仕様を表す部分の出力動作の直前に挿入する(ステップS1248)。
これらの手順により生成された検証コードを、モジュールMの出力違反検証コードD122とする。モジュール1つにつき出力違反検証コードが1つ生成されることになるので、モジュールの数がnであった場合、出力違反検証コードはn生成される。
図6を用いて、呼出違反検証コードD123の生成について詳細に説明する。
まず、ベースとなる検証コードD121のコピーD121’を生成する(ステップS1251)。
まず、ベースとなる検証コードD121のコピーD121’を生成する(ステップS1251)。
次に、抽出したモジュールMの入力条件の成否を判定する検証コードD1231を生成し(ステップS1252)、ベースとなる検証コードD121のコピーD121’内の、モジュールMの動作仕様を表す部分の入力動作の直後に挿入する(ステップS1253)。
さらに、モジュールMがその他のモジュールM’を呼び出す場合には(ステップS1254:Yes)、呼び出すモジュールM’のそれぞれについてその入力条件の成否を判定する検証コードD1232を生成し(ステップS1255)、ベースとなる検証コードD121のコピーD121’内の、各呼出動作の直前にそれぞれ対応する検証コードD1232を挿入する(ステップS1256)。
これらの手順により生成された検証コードを、モジュールMの呼出違反検証コードD123とする。モジュール1個につき呼出違反検証コードが1つ生成されることになるので、モジュールの数がnであった場合、呼出違反検証コードはn生成される。
モデル検査実行部13は、検証コード生成部12で生成された検証コードD12のそれぞれに対して個別にモデル検査を実行し、検証結果D13と、さらに検証内容が満たされない場合には反例D14とを生成する(図3、ステップS13)。
検証コード1つにつきモデル検査が1回実行され、検証結果が1つと、検証内容が満たされない場合には反例が1つと、が生成されることになるので、検証コードの数が2nであった場合、モデル検査が2n回実行され、検証結果は2n個生成され、反例は最大で2n個生成される。
反例加工部14は、反例D14をそれぞれ解析し、出力違反検証あるいは呼出違反検証の対象だったモジュールを特定する。さらに、検証の対象だったモジュールのものではないステップを反例D14から排除し、新たな反例D15を生成する(ステップS14)。
図7を用いて反例加工部14の動作の一例について説明する。
まず、反例加工部14は、反例D14内のステップを先頭から順に抽出し(ステップS141)、出力違反検証コード生成や呼出違反検証コード生成により挿入された検証コードであるか否か判断してゆく(ステップS142)。
まず、反例加工部14は、反例D14内のステップを先頭から順に抽出し(ステップS141)、出力違反検証コード生成や呼出違反検証コード生成により挿入された検証コードであるか否か判断してゆく(ステップS142)。
当該ステップが出力違反検証コード生成や呼出違反検証コード生成によって挿入された検証コードであった場合(Yes)、ステップを行なったモジュールを検証の対象だったモジュールと特定する(ステップS143)。さらに、反例D14に他のステップが残っている場合には、ステップS145に進む。
ステップS142で、当該ステップが出力違反検証コード生成や呼出違反検証コード生成によって挿入された検証コードではない場合には、ステップS141に戻り次のステップを抽出する。
検証の対象だったモジュールの特定が完了したら、改めて反例D14内の次のステップD142を先頭から順に抽出し(ステップS145)、検証の対象だったモジュールのものではないステップを削除してゆく(ステップS146,S147)。
以上の手順により生成された反例を、新たな反例D15とする。この動作は一例であり、検証の対象だったモジュールが特定でき、かつ、検証の対象だったモジュールのものではないステップが適切に削除できるのであれば、これ以外の動作により新たな反例D15を生成してもよい。反例1つにつき新たな反例が1つ生成されることになるので、反例の数が2n個であった場合、新たな反例は2n個生成される。
検証結果出力部15は、検証結果D13と、新たな反例D15とを参照し、仕様・設計情報D11に含まれる各モジュールに出力違反あるいは呼出違反があるかどうかの検証結果D13と、違反の可能性がある場合にその一例であるシーケンスとして新たな反例D15とをそれぞれ個別に出力する(図3、ステップS15)。
仕様・設計情報D11に含まれるモジュール1つにつき、出力違反検証の結果が1つ、呼出違反検証の結果が1つ生成されることになるので、モジュールの数がn個であった場合、検証結果は2n回出力される。また、モジュール1つにつき新たな反例が最大2個生成されることになるので、モジュールの数がnであった場合、新たな反例は最大2n回出力される。
ユーザーは、ステップS15で出力された結果を確認する(ステップS16)。
ユーザーは、ステップS15で出力された結果を確認する(ステップS16)。
以上のように、本実施形態によれば、検証コード生成部12でソフトウェアあるいはシステムを構成するモジュールの不具合(出力違反あるいは呼出違反)の有無を検証する検証コードをモジュール毎に生成し、モデル検査実行部13で検証コードのそれぞれに対してモデル検査を実行して不具合が発見された場合にはその反例を生成し、反例加工部14で反例から不具合の存在するモジュールのものではないステップを排除する。これにより、不具合の存在するモジュールを特定すると共に不具合とは無関係なステップを解析する手間が削減されるため、反例解析の効率を向上させることができる。
なお、本実施形態では、検証内容として出力違反の有無及び呼出違反の有無の検証を例に挙げているが、適切な検証コードが生成できるのであれば、検証内容は出力違反及び呼出違反の有無に限定されるものではない。
実施の形態2.
実施の形態2では、仕様・設計情報入力部11に入力される仕様・設計情報D11は、図8に示すように、システムあるいはソフトウェアを構成するモジュールを定義したクラス図及びアクティビティ図を含む。
実施の形態2では、仕様・設計情報入力部11に入力される仕様・設計情報D11は、図8に示すように、システムあるいはソフトウェアを構成するモジュールを定義したクラス図及びアクティビティ図を含む。
仕様・設計情報D11のモデル検査装置1への入力は、キーボードやマウス等の入力装置を介して行なわれる。図8に示すように、クラス図D1121では、各モジュールについて、クラスが持つメソッド名として各モジュールの識別子D1111(図2のモジュールの識別子D1111に対応)を定義している。
また、クラスが持つ属性名として各モジュールが参照する変数名D1112(図2のモジュールが参照する変数名D1112に対応)を定義している。さらに、各モジュールの入力条件・出力条件(図2のモジュールの入力条件・出力条件D1114に対応)を定義している。図9にクラス図D1121の例を示す。
また、アクティビティ図D1122では、各モジュールに関して、モジュールの動作仕様D11221(図2のモジュールの動作仕様D1114に対応)を定義している。図10にアクティビティ図D1122の例を示す。
ユーザーは、システムあるいはソフトウェアを構成するモジュールを定義したクラス図D1121及びアクティビティ図D1122を含む仕様・設計情報D11を作成し、入力装置を介してモデル検査装置1に入力する。モデル検査装置1は入力された仕様・設計情報D11に基づいて実施の形態1と同様に動作し、検証結果および反例を生成して出力する。
実施の形態3.
実施の形態3では、検証結果出力部15は、モデル検査を実行したSpin(モデル検査ツール)の出力を参照し、検証内容を満たさないモジュールがあれば、どの部分が満たさないのかをアクティビティ図上で示す形式でディスプレイ(出力装置)に表示する。
実施の形態3では、検証結果出力部15は、モデル検査を実行したSpin(モデル検査ツール)の出力を参照し、検証内容を満たさないモジュールがあれば、どの部分が満たさないのかをアクティビティ図上で示す形式でディスプレイ(出力装置)に表示する。
また、反例加工部14が生成した新たな反例をファイルとして出力する。仕様・設計情報D11に含まれるモジュール1つにつき、検証結果は最大2つ生成されることになるので、モジュールの数がn個であった場合、検証内容を満たさない部分は最大2n箇所出力される。また、モジュール1つにつき新たな反例が最大2回生成されることになるので、モジュールの数がn個であった場合、新たな反例は最大2n個のファイルに出力される。
実施の形態3によるモデル検査装置1の動作について図3を用いて説明する。
検証結果出力部15は、検証結果D13を参照し、ステップS14で実行したモデル検査の結果をディスプレイに表示する(ステップS15)。検証内容を満たさないモジュールがあれば、どの部分が満たさないのかをアクティビティ図上で示す形式でディスプレイに表示する。
検証結果出力部15は、検証結果D13を参照し、ステップS14で実行したモデル検査の結果をディスプレイに表示する(ステップS15)。検証内容を満たさないモジュールがあれば、どの部分が満たさないのかをアクティビティ図上で示す形式でディスプレイに表示する。
また、反例加工部14が生成した新たな反例D15をファイルとして出力する。仕様・設計情報D11に含まれるモジュール1つにつき、検証結果は最大2n個生成されることになるので、モジュールの数がn個であった場合、検証結果を満たさない部分は最大2n箇所ディスプレイに出力される。また、モジュール1個につき新たな反例が最大2回生成されることになるのでモジュールの数がn個であった場合、新たな反例は最大2n個のファイルに出力される。
ステップS11で仕様・設計情報入力部11に図9のクラス図及び図10のアクティビティ図を入力した場合に、ステップS15で出力されるアクティビティ図の例を図11に示す。図11に示したアクティビティ図は、mainモジュールで呼出違反が起こることを表している。
実施の形態4.
実施の形態4では、検証コード生成部12は、仕様・設計情報D11から、モデル検査ツールSpinの入力言語Promelaで記述された検証コードを生成する。生成する検証コードは、実施の形態1と同様の特徴を持つ。
実施の形態4では、検証コード生成部12は、仕様・設計情報D11から、モデル検査ツールSpinの入力言語Promelaで記述された検証コードを生成する。生成する検証コードは、実施の形態1と同様の特徴を持つ。
また、モデル検査実行部13は、モデル検査ツールSpinである。検証結果は、モデル検査を実行したSpinの出力である。本実施形態のSpinのバージョンは6.1.0とするが、その他のバージョンを用いてもよい。また、Spin以外のモデル検査ツールを用いてもよい。
反例加工部14は、Spinが実行したモデル検査の結果として生成された反例のそれぞれから、出力違反検証あるいは呼出違反検証の対象となったモジュール以外のステップを排除し新たな反例を生成する。
実施の形態4によるモデル検査装置1の動作について図3〜6を用いて説明する。
検証コード生成部12では、仕様・設計情報D11を検証コードに変換する(ステップS12)。具体的には、クラス図D1121で定義されている各モジュールをそれぞれPromelaプロセスとして宣言し、各モジュールの動作仕様D11221を各Promelaプロセスの動作として定義する。
検証コード生成部12では、仕様・設計情報D11を検証コードに変換する(ステップS12)。具体的には、クラス図D1121で定義されている各モジュールをそれぞれPromelaプロセスとして宣言し、各モジュールの動作仕様D11221を各Promelaプロセスの動作として定義する。
さらに、各モジュールの入力条件・出力条件の成否を格納するbool型の変数(以下、成否格納変数)を対応する各Promelaプロセス内で宣言し、各モジュールが参照する変数名D11212を変換しPromelaのグローバル変数として宣言する。
ここまでの手順で生成された検証コードを、ベースとなる検証コードD121とする(ステップS121)。次に、ベースとなる検証コードD121のコピーD121’を1つ生成し、仕様・設計情報D11からモジュールMを1つ抽出する(ステップS123)。
ベースとなる検証コードD121を用いて、モジュールMの出力違反検証コードD122を生成する(ステップS124)。さらに、同じくベースとなる検証コードD121を用いて、呼出違反検証コードD123を生成する(ステップS125)。これを、仕様・設計情報D11から抽出していないモジュールがなくなるまで繰り返す(ステップS122)。
モジュール1つにつき検証コードが2つ生成されることになるので、モジュールの数がn個であった場合、検証コードは2n個生成される。
出力違反検証コードD122生成のより詳細な動作に関して、図5を参照して説明する。まず、ベースとなる検証コードD121のコピーD121’を生成する(ステップS1241)。
次に、抽出したモジュールMの入力条件が満たされる場合はtrue、満たされない場合はfalseを入力条件の成否格納変数に代入する検証コードD1221を生成し(ステップS1242)、ベースとなる検証コードD121のコピーD121’内の、モジュールMに対応するPromelaプロセス内の入力動作の直後に挿入する(ステップS1243)。
さらに、モジュールMがその他のモジュールM’を呼び出す場合には(ステップS1244)、呼び出すモジュールM’のそれぞれについて、その出力条件が満たされる場合にはtrue、満たされない場合にはfalseを、呼び出すモジュールの出力条件の成否格納変数に代入する検証コードD1222を生成する(ステップS1245)。
さらに、ベースとなる検証コードD121のコピーD121’内の、各呼出動作の直後にそれぞれ対応する検証コードD1222を挿入する(ステップS1246)。
最後に、これまでの手順で挿入した検証コードで使用している成否格納変数が全てtrueである場合にモジュールMの出力条件の成否を判定する検証コードD1223(例えばassert文)を生成し(ステップS1247)、ベースとなる検証コードD121のコピーD121’内の、モジュールMに対応するPromelaプロセス内の出力動作の直前に挿入する(ステップS1248)。
以上の手順により生成された検証コードを、モジュールMの出力違反検証コードD122とする。モジュール1つにつき出力違反検証コードが1個生成されることになるので、モジュールの数がn個であった場合、出力違反検証コードはn個生成される。
呼出違反検証コードD123生成のより詳細な動作に関して、図6を参照して説明する。まず、ベースとなる検証コードD121のコピーD121’を生成する(ステップS1251)。
次に、抽出したモジュールMの入力条件が満たされる場合はtrue、満たされない場合はfalseを入力条件の成否格納変数に代入する検証コードD1231を生成する(ステップS1252)。
さらに、ベースとなる検証コードD121のコピーD121’内の、モジュールMに対応するPromelaプロセス内の入力動作の直後に挿入する(ステップS1253)。
さらに、モジュールMがその他のモジュールM’を呼び出す場合には(ステップS1254)、呼び出すモジュールM’のそれぞれについて、これまでの手順で挿入した検証コードで使用している成否格納変数が全てtrueである場合にモジュールM’の入力条件が満たされる場合はtrue、満たされない場合はfalseを、呼び出すモジュールM’の入力条件の成否格納変数に代入し、さらにその成否を判定する検証コードD1232を生成する(ステップS1255)。
さらに、ベースとなる検証コードD121のコピーD121’内の、各呼出動作の直前にそれぞれ対応する検証コードD1232を挿入する(ステップS1256)。ここで、検証コードD1232の生成手順における「これまでの手順で挿入した検証コード」とは、呼び出すモジュールM’が複数ある場合、その2つ目以降においては、その前までに呼び出されるモジュールM’の入力条件の成否格納変数への代入を行なう検証コードを含む。
以上の手順により生成された検証コードを、モジュールMの呼出違反検証コードD123とする。モジュール1つにつき呼出違反検証コードが1つ生成されることになるので、モジュールの数がn個であった場合、呼出違反検証コードはn個生成される。
検証コード生成部12が生成する検証コードの例として、図9に示すクラス図及び図10に示すアクティビティ図を変換した例を図12に示す。図12に示す検証コードは、各モジュールの出力違反検証・呼出違反検証の全てについて、それらを行なう検証コードを挿入し生成したものである。実際には前述のように、ステップS12において、各モジュールの出力違反検証・呼出違反検証を行なう検証コードは、それぞれ個別に生成される。
例えば図9のクラス図及び図10のアクティビティ図を入力とした場合、mainモジュールの出力違反検証を行なう検証コードと、mainモジュールの呼出違反検証を行なう検証コードと、methodAモジュールの出力違反検証を行なう検証コードと、methodAモジュールの呼出違反検証を行なう検証コード、の4つの検証コードが生成される。
ただしこの場合、mainモジュールは出力条件が定義されておらず、また、methodAモジュールはその他のモジュールを呼び出さないため、mainモジュールの出力違反検証を行なう検証コード及びmethodAモジュールの呼出違反検証を行なう検証コードは用を成さない検証コードとなる。
この例に限らず、モジュールに出力条件が定義されていない場合の出力違反検証コードと、モジュールがその他のモジュールを呼び出さない場合の呼出違反検証コードは用を成さないため、その場合は検証コードを生成しないことにしてもよい。
また、生成する検証コードは、出力違反と呼出違反の適切な検証が可能であれば図12に示す形式のものに限らず、その他の変換方式により生成してもよい。
モデル検査実行部13(Spin)は、検証コード生成部12で生成された検証コードD12のそれぞれに対してモデル検査を実行し、検証結果D13と、検証内容が満たされない場合には反例D14と、を生成する(ステップS13)。
検証コード1つにつきモデル検査が1回実行され、検証結果が1個と、検証内容が満たされない場合には反例が1個とが生成されることになるので、検証コードの数が2n個であった場合、モデル検査が2n回実行され、検証結果は2n個生成され、反例は最大で2n個生成される。
反例加工部14は、反例D14をそれぞれ解析し、出力違反検証あるいは呼出違反検証の対象だったモジュールを特定する。さらに、前記検証の対象だったモジュール以外のモジュールのステップを反例から排除し、新たな反例D15を生成する(ステップS14)。
反例加工部14の動作の一例を、図7を参照して説明する。反例D14内のステップを先頭から順に抽出し(ステップS141)、出力違反検証コード生成(ステップS124)や呼出違反検証コード生成(ステップS125)により挿入された検証コード(例えばassert文)であるか否かを判断してゆく。
当該ステップが挿入された検証コードであった場合、そのステップを行なったプロセスに対応するモジュールを検証の対象だったモジュールと特定する(ステップS143)。当該ステップが挿入された検証コードでない場合には、次のステップを抽出する。検証の対象だったモジュールの特定が完了したら、改めて反例D14内のステップを先頭から順に抽出し(ステップS145)、検証の対象だったモジュールに対応するプロセスのものではないステップを削除してゆく(ステップS147)。
これらの手順により生成された反例を、新たな反例D15とする。なお、この動作は一例であり、検証の対象だったモジュールが特定でき、かつ、検証の対象だったモジュールのものではないステップが適切に削除できるのであれば、これ以外の動作により新たな反例D15を生成してもよい。
上記の実施の形態の一部または全部は、以下の付記のようにも記載されうるが、以下には限られない。
(付記1)ソフトウェアまたはシステムを構成するモジュールの動作仕様と、入力条件・出力条件を定義した仕様・設計情報の入力を受ける仕様・設計情報入力部と、
前記仕様・設計情報に基づいて、モジュール毎に不具合の有無を検証する検証コードを生成する検証コード生成部と、
前記検証コードを用いてモデル検査を実行するモデル検査実行部と、
前記モデル検査において不具合を発見した場合に得られる反例から、不具合の存在するモジュールが実行するものではないステップを排除する反例加工部と、
前記モデル検査において発見された不具合の有無を出力し、不具合がある場合には、不具合のあるモジュールを提示すると共に、不具合のあるモジュールが実行するものではないステップを排除した反例を出力する検証結果出力部と、を備えたモデル検査装置。
(付記1)ソフトウェアまたはシステムを構成するモジュールの動作仕様と、入力条件・出力条件を定義した仕様・設計情報の入力を受ける仕様・設計情報入力部と、
前記仕様・設計情報に基づいて、モジュール毎に不具合の有無を検証する検証コードを生成する検証コード生成部と、
前記検証コードを用いてモデル検査を実行するモデル検査実行部と、
前記モデル検査において不具合を発見した場合に得られる反例から、不具合の存在するモジュールが実行するものではないステップを排除する反例加工部と、
前記モデル検査において発見された不具合の有無を出力し、不具合がある場合には、不具合のあるモジュールを提示すると共に、不具合のあるモジュールが実行するものではないステップを排除した反例を出力する検証結果出力部と、を備えたモデル検査装置。
(付記2)前記検証コード生成部は、
前記モジュールが入力条件を満たす入力を受信した際に、前記モジュールが出力条件を満たさない出力を行なう不具合である出力違反の検証を行なう出力違反検証コードと、
前記モジュールがその他のモジュールを呼び出す際に、前記モジュールが前記その他のモジュールの入力条件を満たさない入力を行なう不具合である呼出違反の検証を行なう呼出違反検証コードと、をモジュール毎に生成する、付記1に記載のモデル検査装置。
前記モジュールが入力条件を満たす入力を受信した際に、前記モジュールが出力条件を満たさない出力を行なう不具合である出力違反の検証を行なう出力違反検証コードと、
前記モジュールがその他のモジュールを呼び出す際に、前記モジュールが前記その他のモジュールの入力条件を満たさない入力を行なう不具合である呼出違反の検証を行なう呼出違反検証コードと、をモジュール毎に生成する、付記1に記載のモデル検査装置。
(付記3)前記検証コード生成部は、
前記モジュールに出力条件が定義されていない場合、前記モジュールの前記出力違反検証コードを生成せず、前記モジュールがその他のモジュールを呼び出さない場合、前記モジュールの前記呼出違反検証コードを生成しない、付記2に記載のモデル検査装置。
前記モジュールに出力条件が定義されていない場合、前記モジュールの前記出力違反検証コードを生成せず、前記モジュールがその他のモジュールを呼び出さない場合、前記モジュールの前記呼出違反検証コードを生成しない、付記2に記載のモデル検査装置。
(付記4)前記仕様・設計情報は、
各モジュールの識別子と、各モジュールが参照する変数名と、各モジュールの入力条件・出力条件と、を定義したクラス図と、
各モジュールの動作仕様を定義したアクティビティ図と、を含む、付記1から3のいずれか1項に記載のモデル検査装置。
各モジュールの識別子と、各モジュールが参照する変数名と、各モジュールの入力条件・出力条件と、を定義したクラス図と、
各モジュールの動作仕様を定義したアクティビティ図と、を含む、付記1から3のいずれか1項に記載のモデル検査装置。
(付記5)前記検証結果出力部は、不具合のあるモジュールを示すにあたり、前記仕様・設計情報に含まれるアクティビティ図における不具合の発生箇所を示す、付記4に記載のモデル検査装置。
(付記6)ソフトウェアまたはシステムを構成するモジュールの動作仕様と、入力条件・出力条件を定義した仕様・設計情報の入力を受ける工程と、
前記仕様・設計情報に基づいて、モジュール毎に不具合の有無を検証する検証コードを生成する工程と、
前記検証コードを用いてモデル検査を実行する工程と、
前記モデル検査において不具合を発見した場合に得られる反例から、不具合の存在するモジュールが実行するものではないステップを排除する工程と、
前記モデル検査において発見された不具合の有無を出力し、不具合がある場合には、不具合のあるモジュールを提示すると共に、不具合のあるモジュールが実行するものではないステップを排除した反例を出力する工程と、を備えたモデル検査方法。
前記仕様・設計情報に基づいて、モジュール毎に不具合の有無を検証する検証コードを生成する工程と、
前記検証コードを用いてモデル検査を実行する工程と、
前記モデル検査において不具合を発見した場合に得られる反例から、不具合の存在するモジュールが実行するものではないステップを排除する工程と、
前記モデル検査において発見された不具合の有無を出力し、不具合がある場合には、不具合のあるモジュールを提示すると共に、不具合のあるモジュールが実行するものではないステップを排除した反例を出力する工程と、を備えたモデル検査方法。
(付記7)コンピュータを、
ソフトウェアまたはシステムを構成するモジュールの動作仕様と、入力条件・出力条件を定義した仕様・設計情報の入力を受ける仕様・設計情報入力部と、
前記仕様・設計情報に基づいて、モジュール毎に不具合の有無を検証する検証コードを生成する検証コード生成部と、
前記検証コードを用いてモデル検査を実行するモデル検査実行部と、
前記モデル検査において不具合を発見した場合に得られる反例から、不具合の存在するモジュールが実行するものではないステップを排除する反例加工部と、
前記モデル検査において発見された不具合の有無を出力し、不具合がある場合には、不具合のあるモジュールを提示すると共に、不具合のあるモジュールが実行するものではないステップを排除した反例を出力する検証結果出力部と、して機能させるためのプログラム。
ソフトウェアまたはシステムを構成するモジュールの動作仕様と、入力条件・出力条件を定義した仕様・設計情報の入力を受ける仕様・設計情報入力部と、
前記仕様・設計情報に基づいて、モジュール毎に不具合の有無を検証する検証コードを生成する検証コード生成部と、
前記検証コードを用いてモデル検査を実行するモデル検査実行部と、
前記モデル検査において不具合を発見した場合に得られる反例から、不具合の存在するモジュールが実行するものではないステップを排除する反例加工部と、
前記モデル検査において発見された不具合の有無を出力し、不具合がある場合には、不具合のあるモジュールを提示すると共に、不具合のあるモジュールが実行するものではないステップを排除した反例を出力する検証結果出力部と、して機能させるためのプログラム。
本発明は、システム開発やソフトウェア開発における設計の妥当性を検証するツールに適用できる。
1 モデル検査装置、11 仕様・設計情報入力部、12 検証コード生成部、13 モデル検査実行部、14 反例加工部、15 検証結果出力部、D11 仕様・設計情報、D12 検証コード、D13 検証結果、D14 反例、D15 新たな反例
Claims (7)
- ソフトウェアまたはシステムを構成するモジュールの動作仕様と、入力条件・出力条件を定義した仕様・設計情報の入力を受ける仕様・設計情報入力部と、
前記仕様・設計情報に基づいて、モジュール毎に不具合の有無を検証する検証コードを生成する検証コード生成部と、
前記検証コードを用いてモデル検査を実行するモデル検査実行部と、
前記モデル検査において不具合を発見した場合に得られる反例から、不具合の存在するモジュールが実行するものではないステップを排除する反例加工部と、
前記モデル検査において発見された不具合の有無を出力し、不具合がある場合には、不具合のあるモジュールを提示すると共に、不具合のあるモジュールが実行するものではないステップを排除した反例を出力する検証結果出力部と、を備えたモデル検査装置。 - 前記検証コード生成部は、
前記モジュールが入力条件を満たす入力を受信した際に、前記モジュールが出力条件を満たさない出力を行なう不具合である出力違反の検証を行なう出力違反検証コードと、
前記モジュールがその他のモジュールを呼び出す際に、前記モジュールが前記その他のモジュールの入力条件を満たさない入力を行なう不具合である呼出違反の検証を行なう呼出違反検証コードと、をモジュール毎に生成する、請求項1に記載のモデル検査装置。 - 前記検証コード生成部は、
前記モジュールに出力条件が定義されていない場合、前記モジュールの前記出力違反検証コードを生成せず、前記モジュールがその他のモジュールを呼び出さない場合、前記モジュールの前記呼出違反検証コードを生成しない、請求項2に記載のモデル検査装置。 - 前記仕様・設計情報は、
各モジュールの識別子と、各モジュールが参照する変数名と、各モジュールの入力条件・出力条件と、を定義したクラス図と、
各モジュールの動作仕様を定義したアクティビティ図と、を含む、請求項1から3のいずれか1項に記載のモデル検査装置。 - 前記検証結果出力部は、不具合のあるモジュールを示すにあたり、前記仕様・設計情報に含まれるアクティビティ図における不具合の発生箇所を示す、請求項4に記載のモデル検査装置。
- ソフトウェアまたはシステムを構成するモジュールの動作仕様と、入力条件・出力条件を定義した仕様・設計情報の入力を受ける工程と、
前記仕様・設計情報に基づいて、モジュール毎に不具合の有無を検証する検証コードを生成する工程と、
前記検証コードを用いてモデル検査を実行する工程と、
前記モデル検査において不具合を発見した場合に得られる反例から、不具合の存在するモジュールが実行するものではないステップを排除する工程と、
前記モデル検査において発見された不具合の有無を出力し、不具合がある場合には、不具合のあるモジュールを提示すると共に、不具合のあるモジュールが実行するものではないステップを排除した反例を出力する工程と、を備えたモデル検査方法。 - コンピュータを、
ソフトウェアまたはシステムを構成するモジュールの動作仕様と、入力条件・出力条件を定義した仕様・設計情報の入力を受ける仕様・設計情報入力部と、
前記仕様・設計情報に基づいて、モジュール毎に不具合の有無を検証する検証コードを生成する検証コード生成部と、
前記検証コードを用いてモデル検査を実行するモデル検査実行部と、
前記モデル検査において不具合を発見した場合に得られる反例から、不具合の存在するモジュールが実行するものではないステップを排除する反例加工部と、
前記モデル検査において発見された不具合の有無を出力し、不具合がある場合には、不具合のあるモジュールを提示すると共に、不具合のあるモジュールが実行するものではないステップを排除した反例を出力する検証結果出力部と、して機能させるためのプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012076787A JP2013206310A (ja) | 2012-03-29 | 2012-03-29 | モデル検査装置、モデル検査方法、およびプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012076787A JP2013206310A (ja) | 2012-03-29 | 2012-03-29 | モデル検査装置、モデル検査方法、およびプログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2013206310A true JP2013206310A (ja) | 2013-10-07 |
Family
ID=49525283
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2012076787A Pending JP2013206310A (ja) | 2012-03-29 | 2012-03-29 | モデル検査装置、モデル検査方法、およびプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2013206310A (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101834247B1 (ko) * | 2016-08-02 | 2018-03-06 | (주)씽크포비엘 | 전장용 소프트웨어 안전성 분석 방법 및 장치 |
KR20220063528A (ko) * | 2020-11-10 | 2022-05-17 | 경북대학교 산학협력단 | 내장형 제어 프로그램의 검증 방법 및 그 장치 |
-
2012
- 2012-03-29 JP JP2012076787A patent/JP2013206310A/ja active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101834247B1 (ko) * | 2016-08-02 | 2018-03-06 | (주)씽크포비엘 | 전장용 소프트웨어 안전성 분석 방법 및 장치 |
KR20220063528A (ko) * | 2020-11-10 | 2022-05-17 | 경북대학교 산학협력단 | 내장형 제어 프로그램의 검증 방법 및 그 장치 |
KR102471537B1 (ko) * | 2020-11-10 | 2022-11-28 | 경북대학교 산학협력단 | 내장형 제어 프로그램의 검증 방법 및 그 장치 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8768651B2 (en) | System and method for automatic standardization and verification of system design requirements | |
JP5725359B2 (ja) | ソースコード比較装置、ソースコード比較方法およびソースコード比較プログラム | |
JP2012221380A (ja) | 自動プログラム生成装置、方法及びコンピュータプログラム | |
JP2008191963A (ja) | ソースコード検証システム、ソースコード検証方法、およびソースコード検証用プログラム | |
JP5176478B2 (ja) | データフロー解析装置、データフロー解析方法およびデータフロー解析プログラム | |
JP2016115175A (ja) | ソフトウェアテスト装置およびソフトウェアテストプログラム | |
US20150261505A1 (en) | Method and system for generating stateflow models from software requirements | |
JP5440287B2 (ja) | シンボリック実行支援プログラム、方法及び装置 | |
JP4888790B2 (ja) | 契約定義関数検証装置、その方法及びそのプログラム | |
JP6107455B2 (ja) | テストスケジュール決定装置、プログラム | |
JP2013206310A (ja) | モデル検査装置、モデル検査方法、およびプログラム | |
WO2021100156A1 (ja) | テストデータ生成装置、テストデータ生成方法、及びプログラム | |
JP5316485B2 (ja) | ソフトウェア開発支援装置、ソフトウェア開発支援方法およびソフトウェア開発支援プログラム | |
Yoshino et al. | Requirements traceability management support tool for UML models | |
CN117555792A (zh) | 一种测试代码生成方法及装置 | |
JP2014164677A (ja) | 仕様検証支援装置、仕様検証支援方法及びプログラム | |
JP2009134360A (ja) | モデル検査システム、モデル検査方法およびモデル検査用プログラム | |
JPWO2016151710A1 (ja) | 仕様構成装置および方法 | |
JP6036089B2 (ja) | データ遷移トレース装置、データ遷移トレース方法、及び、データ遷移トレースプログラム | |
JP6547345B2 (ja) | テストケース生成プログラム、テストケース生成方法およびテストケース生成装置 | |
JPWO2012049816A1 (ja) | モデル検査装置、方法及びプログラム | |
JP2014126900A (ja) | プログラム解析装置、プログラム解析方法、及び、プログラム解析プログラム | |
JP6369269B2 (ja) | 検証支援装置、検証支援方法およびコンピュータプログラム | |
US20220405196A1 (en) | Operation pattern generation apparatus, operation pattern generation method and program | |
JP2014115960A (ja) | 検証装置、検証方法及び検証プログラム |