JP4759546B2 - 仕様欠陥検証システム、その方法及びプログラム - Google Patents
仕様欠陥検証システム、その方法及びプログラム Download PDFInfo
- Publication number
- JP4759546B2 JP4759546B2 JP2007244439A JP2007244439A JP4759546B2 JP 4759546 B2 JP4759546 B2 JP 4759546B2 JP 2007244439 A JP2007244439 A JP 2007244439A JP 2007244439 A JP2007244439 A JP 2007244439A JP 4759546 B2 JP4759546 B2 JP 4759546B2
- Authority
- JP
- Japan
- Prior art keywords
- state
- event
- node
- transition
- state transition
- 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.)
- Active
Links
- 238000012795 verification Methods 0.000 title claims abstract description 118
- 230000007547 defect Effects 0.000 title claims abstract description 75
- 238000000034 method Methods 0.000 title claims description 350
- 230000007704 transition Effects 0.000 claims abstract description 326
- 230000008859 change Effects 0.000 claims abstract description 13
- 238000011161 development Methods 0.000 claims abstract description 5
- 230000008569 process Effects 0.000 claims description 346
- 239000000284 extract Substances 0.000 claims description 14
- 230000015654 memory Effects 0.000 claims description 12
- 230000004044 response Effects 0.000 claims description 7
- 238000004088 simulation Methods 0.000 abstract description 5
- 238000001514 detection method Methods 0.000 abstract 1
- 238000012545 processing Methods 0.000 description 110
- 230000006870 function Effects 0.000 description 62
- 238000007726 management method Methods 0.000 description 26
- 238000013461 design Methods 0.000 description 9
- 238000012360 testing method Methods 0.000 description 8
- 238000010586 diagram Methods 0.000 description 7
- 230000005540 biological transmission Effects 0.000 description 4
- 238000004891 communication Methods 0.000 description 4
- 230000018109 developmental process Effects 0.000 description 3
- 238000012553 document review Methods 0.000 description 2
- 230000033772 system development Effects 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 230000003936 working memory Effects 0.000 description 2
- FFBHFFJDDLITSX-UHFFFAOYSA-N benzyl N-[2-hydroxy-4-(3-oxomorpholin-4-yl)phenyl]carbamate Chemical compound OC1=C(NC(=O)OCC2=CC=CC=C2)C=CC(=C1)N1CCOCC1=O FFBHFFJDDLITSX-UHFFFAOYSA-N 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000002950 deficient Effects 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000012552 review Methods 0.000 description 1
- 238000010845 search algorithm Methods 0.000 description 1
- 238000010998 test method Methods 0.000 description 1
Images
Landscapes
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Description
設計者は、仕様書を関係者間において設計書レビューを行ってチェックを行ったり、シミュレーションツールを独自に開発して、可能な限りの仕様上の動作を確認して、上記欠陥を除去する努力を行っている。
また、システムの試験工程においては、製品の内部仕様に基づいた単体試験や総合試験を実施したり、外部仕様に基づいて、単体試験や総合試験を実施することにより、仕様欠陥を検証する処理を行っている(例えば、特許文献1参照)。
上記特許文献1は、システムのあらゆる状態遷移を発生させて表示するシステムであり、設計書レビューを支援するために利用可能であるが、手作業を伴い、組合せが膨大となると作業時間が増加し、システムの利用時間も膨大となってしまう。
本発明は、製品設計の段階において、製品仕様を記述した状態遷移モデルを、この製品仕様における全パラメータを用いて動作させ、セキュリティ上の「起こるべきではない」欠陥の状態を、簡易に検証することができる仕様欠陥検証システム及びプログラムを提供することを目的とする。
また、本発明によれば、リスクが起こる組み合わせが抽出された場合、その起こってはいけない組み合わせがどのようなイベントの実行順序にて発生したのかを、スタック領域記憶部に記憶されている処理の状態遷移の変化によりトレースが行え、再現性が可能となる。
また、上記イベントには、外部から直接に起動されずに、上記状態ノードの状態遷移に対応してプログラムにより実行される事後イベントも含まれている。
本実施形態において、状態遷移とは、上記イベント(さらに事後イベントも含む)の実行による状態ノードが変更され、状態ノードの組合せが変化することを意味している。
この図において、欠陥検証システムは、初期設定部1、展開部2、検証部3、出力部4、モデル記憶部5、履歴記憶部6、リスクファイル記憶部7、状態管理記憶部8及びスタック領域記憶部9から構成されている。
モデル記憶部5には、欠陥の検証を行う製品仕様の状態遷移モデルが記憶されている。ここで、状態遷移モデルは図2に示すように、複数の状態遷移ラベルから構成されている。図2には例として、LABEL_AUTH1、LABEL_AUTH2、LABEL_LIFECYCLE、LABEL_ADMINFILE、LABEL_USERFILEが記載されている。この状態遷移モデルは、ICカードの動作状態の例を表すものとしている。
イベント「CHANGE_LIFECYCLE1」の実行による状態遷移が実行されるためには、事前条件として図3(a)の状態遷移ラベル「LABEL_AUTH1」の状態ノードの値が「ON」である場合、イベント「CHANGE_LIFECYCLE1」による状態遷移が実行される。
このイベント「CHANGE_LIFECYCLE1」による状態遷移が実行されると、状態ノードの値が「ISSUE」から「USAGE」に変更され、この状態ノードの値の変更に伴い事後イベント「RESET_KEY1」が実行される。
また、事後イベント「RESET_KEY1」による状態遷移が実行されると、図3(a)のラベル「LABEL_AUTH1」の状態ノードが「ON」である場合に「OFF」に変更され、図2(e)のラベル「LABEL_ADMINFILE」の状態ノードが「READ」である場合に「NOT_READ」に変更される。
このイベント「CHANGE_LIFECYCLE2」が実行されると、状態ノードの値が「USAGE」から「ISSUE」に変更され、この状態ノードの値の変更に伴い事後イベント「RESET_KEY2」が実行される。
また、事後イベント「RESET_KEY2」が実行されると、図3(d)の状態遷移ラベル「LABEL_USERFILE」の状態ノードの値が「READ」である場合に「NOT_READ」に変更される。
上述したように、事前条件が設定されている際には、他の状態遷移ラベルにおける状態ノードの値が設定された事前条件と一致している場合にのみ、イベントに対応する状態ノードの値を変更して状態遷移を実行する。
また、事後イベントが設定されている際には、状態ノードの値が変更され状態遷移が発生した場合、この事後イベントが起動し他の状態遷移ラベルの状態ノードの値を変更し、状態遷移が発生する。
また、事後イベントが設定されていない場合、他の状態遷移ラベルの状態ノードに対しては影響を与えずに、自身の状態ノードの値の変更のみを行うこととなる。
ここで、上記イベントIDとイベント名とは、図4に示すイベントテーブルにより対応付けられている。上記イベントIDに対応したイベント名をキーとし、状態遷移モデルを検索することにより、状態ノードの遷移情報、事前条件や事後イベントを参照することができる。
また、後述する処理において、展開部2が実行するイベントの順番は、上記イベントテーブルのイベントID順となる。このイベントテーブルにおける最初のイベントID(=1)が初期イベントを示している。
また、展開部2は、全てのイベントの実行に失敗した場合、イベントの実行が失敗したことを示すfalse信号を検証部3に対して通知する。
ここで、全てのイベントの実行に失敗する場合とは、全てのイベントが以下のいずれかのためイベントが行えない場合をいう。
A.状態遷移の事前条件が満足されていないので、状態ノードの変更が行えない
B.状態遷移前の状態ノードがイベントが定義している状態遷移前の状態ノードでないため、状態遷移が行えない
C.状態遷移の変更を行った際、すでに履歴記憶部6に記憶されている状態ノードの組み合わせであったので状態変更が行えない
また、検証部3は、状態管理記憶部8に記憶されている現在の状態ノードの値の組合せを、時系列に履歴記憶部6に記憶させる。
また、検証部3は、状態管理記憶部8から読み出した現在の状態ノードの値の組合せが、リスクファイル記憶部7に記憶されている状態ノードの値の組合せ(起きるべきではない組合せ)であるか否かの検出を行い、検出された場合、スタック内の全ての情報を、内部のrisklogファイルに記録し、全ての検証処理が終了したことを検出すると、上記risklogファイルを出力部4を介して、結果リストとして出力する。
リスクID「R1」及び「R2」は、認証成功前にファイルが読み込まれてしまう状態ノードの組み合わせである。
すなわち、リスクID「R1」は、状態遷移ラベル「LABEL_AUTH1」がOFFであり、認証が成功していないにもかかわらず、状態遷移ラベル「LABEL_ADMINFILE」がREADとなっており、ファイルの読み出しが可能な状態となっている。
また、リスクID「R2」は、状態遷移ラベル「LABEL_AUTH2」がOFFであり、認証が成功していないにもかかわらず、状態遷移ラベル「LABEL_USERFILE」がREADとなっており、ファイルの読み出しが可能な状態となっている。
また、リスクID「R3」は、利用フェーズにおいて管理者ファイルを読み出す状態ノードの組み合わせである。
すなわち、ICカードが利用フェーズであるから、状態遷移ラベル「LABEL_ADMINFILE」は読み出されてはいけないにもかかわらず、状態遷移ラベル「LABEL_ADMINFILE」はREADとなっておりファイルの読み出しが可能な状態となっている。
また、リスクID「R4」は、発行フェーズにおいて利用ファイルを読み出す状態ノードの組み合わせである。
すなわち、ICカードが発行フェーズであるから、状態遷移ラベル「LABEL_USERFILE」が読み出されてはいけないにもかかわらず、状態遷移ラベル「LABEL_USERFILE」はREADとなっておりファイルの読み出しが可能となっている。
まず、初期設定部1及び検証部が行う処理として図6のフローチャートを説明する。
初期設定部1は、ユーザが検証対象として入力した名称の状態遷移モデルをモデル記憶部5から読み込み(処理1)、各状態遷移ラベルにおける初期状態における状態ノードの値の組合せ及び初期イベント番号(node=1)とをスタックST(状態ノードの値の組合せのスタック領域)及びND(イベント番号のスタック領域)にプッシュするとともに、状態管理記憶部8へ記憶させる(処理2)。
そして、検証部3は、スタックSTが空か否かの検出を行い、空(スタックSTになにも記憶されていない状態)でないことを検出した場合、処理を処理4へ進め、空であることを検出した場合、処理を処理10へ進め、内部に記憶されているrisklogファイルを結果リストとして出力部4を介して出力して検証処理を終了する。
この処理4は、処理4−1及び処理4−2とを有しており、後述する処理8−a及び処理8−bのいずれを通過してきたか、あるいは処理2を通過してきたかにより、行われる処理が異なる。
処理2及び処理8−bを通過してきた場合、検証部3は、状態管理記憶部8に現在の状態statusとイベント番号(node=1)とを記憶させて設定する(処理4−1)。
一方、処理8−aを通過してきた場合、検証部3は、ポップしたスタックST及びNDの先頭の状態ノードの値の組合せ及びイベント番号{node}に1を加算した数値それぞれを、現在の状態statesとイベント番号{node}として状態管理記憶部8に設定する(処理4−2)。
次に、検証部3は、状態管理記憶部8に記憶されている現在の状態ノードの値の組合せの状態と、リスクファイル記憶部7に記憶されている状態ノードの複数の組合せ(リスク集合)のいずれかと一致するか否かの検出を行い(処理6)、一致する状態ノードの組合せがリスクファイル記憶部7に記憶されたリスク集合から検出された場合、処理を処理9へ進め、一方、検出されない場合に処理を処理7へ進める。
一致したことが検出されると処理9において、検証部3は、「起こるべきでない状態」に到達したため、スタック内の情報を全て内部のriskファイルに追加書き込みする。
一方、検証部は、true信号が入力されると、後述する次の状態newstatesに記載されている状態ノードの値の状態と、後述する関数Aにおける作業量メモリのtmpnodeに記憶されているイベント番号をスタックにプッシュして記憶させる(処理8−b)。
展開部2は、状態管理記憶部8に記憶されている現在の状態statesとイベント番号{node}とを読み出し、作業用メモリに格納(tmpnode=node、tmpstates=states)し(処理A1)、処理を処理A2へ進める。
そして、展開部2は、tmpnodeに対応するイベントtmpeventを、状態遷移モデルから取得し(処理A2)、作業用メモリにおけるnewstatesを初期化し、処理を処理A3へ進める。
これにより、展開部2は、関数Bの処理においてイベントtmpeventを実行し(処理A4、この処理A4の詳細は後述)、イベントtmpeventの実行が成功であればtrue信号を出力し、処理を図6の処理8−bへ進め、イベントtmpeventの実行が失敗であればfalse信号を出力し、処理を処理A5へ進める。
次に、展開部2は、インクリメントされたtmpnodeが状態遷移モデルにおけるイベント数以下であるか否かの検出を行い(処理A6)、イベント数よりtmpnodeが少ないことを検出した場合、処理を処理A3へ進め、一方イベント数をtmpnodeが超えたことを検出した場合、処理を処理A8へ進める。
そして、展開部2は、false信号を検証部3へ出力し(処理A8)、処理を処理8−aへ進める。
この図7(a)のフローチャートの処理において、図7(b)に示すように、ある状態ノードの組合せの状態において、予め実行される順番(イベント番号)がイベントテーブル設定されているイベントを、関数Bにより順次実行していく処理を、展開部2が関数Aの処理により制御している。
展開部2は、イベントtmpeventが実行されることによって状態ノードが変更される状態遷移ラベルの全てとその状態遷移に含まれる遷移前の状態ノードと遷移後の状態ノードの値を状態遷移モデルから検出し、状態遷移tmpmoveとして一時的に記憶しておく(処理B1)。例えば、イベントAUTH_SUCCESS1のtmpmoveには、状態遷移ラベル「LABEL_AUTH1」をOFFからONに遷移させることが記憶されている。
そして、展開部2は、関数Cにより、イベントtmpeventを実行することにより、上記一覧テーブルを参照して、状態遷移tmpmoveに対応した状態ノードの値の変更を行い、変更された値をnewstatesへ上書きする(処理B2、この処理B2の詳細は後述)。
これにより、展開部2は、一覧テーブルを参照して、状態遷移tmpmoveが全て実行されたか否かを検出し(処理B3)、全て実行されたことを検出すると処理を処理B4へ進め、一方全て実行されていないことを検出すると、処理を処理B2へ進め、実行されていない状態遷移tmpmoveの実行を行う。
そして、展開部2は、処理B3にて状態遷移tmpmoveが全て実行されたことを検出すると、true信号を出力し(処理B4)、処理を図7(a)の処理A7へ進める。
そして、展開部2は関数Cの処理においてfalse信号が出力されると、このfalse信号を出力し(処理B5)、処理を図7(a)における処理A5へ進める。
ここで、展開部2は、図8(b)に示すように、上記関数Bの処理において、状態遷移tmpmoveを1つずつ処理し、イベントtmpeventにおいて実行される各状態ノードの状態遷移tmpmoveが全て終了、すなわち変更される状態ノードが全て変更されて、状態遷移が全て成功した場合、関数Bの処理結果の出力としてtrue信号を出力する。
展開部2は、状態遷移モデルから実行するイベントtmpeventにおいて、実行するイベントに対応して、このイベントによる状態ノードの変換を実行する条件として設定されている事前条件tmpconstraintを抽出し、抽出された事前条件tmpconstraintが記載された事前条件テーブルを一覧として生成し(処理C1)、1つでも事前条件tmpconstraintが存在する場合、処理を処理C2へ進め、1つも事前条件tmpconstraintが検出されない場合、処理を処理C3へ進める。
展開部2は、1つでも満足しない事前条件tmpconstraintの状態ノードが検出された場合、false信号を出力し(処理C11)、処理を図8(a)の処理B5へ進める。
次に、展開部2は、現在のtmpstatesが遷移前状態prestatesを有しているか否かの検出を行い(処理C4)、現在のtmpstatesが遷移前状態prestatesを有していることが検出された場合、処理を処理C5へ進め、一方、現在のtmpstatesが遷移前状態prestatesを有していないことが検出された場合、処理を処理C11へ進める。
次に、展開部2は、次の状態newstatesにおける状態ノードの値の組合せが、履歴記憶部6に記憶されている状態ノードの値の組合せの中に存在するか否かを検出し(処理C6)、一致する値の組合せが検出された場合、すでに検出された状態のため処理を処理C11へ進め、一方、一致する値の組合せが検出されない場合、未検証の状態として処理を処理C7へ進める。
次に、展開部2は、関数Bの処理により、すでに説明した図8のフローチャートの処理により、イベントの実行と同様に、事後イベントの実行を行い(処理C8)、実行結果として事後イベントposteventの実行に失敗した場合、false信号を出力して処理を処理C11へ進め、事後イベントposteventの実行に成功した場合、true信号を出力して処理を処理C9へ進める。
そして、展開部2は、全ての事後イベントが終了していないことを検出した場合、あるいは処理C7において1つも事後イベントposteventが存在していない場合、true信号を出力し(処理C10)、処理を図8(a)の処理B3へ進める。
これにより、図9(b)に示すように、展開部2は、関数Cにおいてイベントを実行する際、各状態ノードの状態遷移を行う際に事前条件の有無を検出し、事前条件があれば事前条件が満足されるか否かを検出し、条件が満足されてイベントが実行され、状態遷移がなされた後、この状態ノードの変更により事後イベントの実行をイベントと同様の処理により行うこととなる。
上記図11〜図18においては、奇数番号の図にて、各欄が左からメインルーチン(図6の各処理に対応)、関数A(図7の各処理に対応)、関数B(図8の各処理に対応)、関数C(図9の各処理に対応)、事後イベントの関数B(図8の各処理に対応)、事後イベントの関数C(図9の各処理に対応)、処理、処理内容及び処理結果、スタック領域記憶部9のスタック(上部が先頭となる)内の状態ノード及びイベント番号となっている。
例として用いる状態遷移モデルは、図3に示す各状態遷移ラベルから構成されるものとする。また、リスクファイル記憶部7には、図5に示すように、「起こるべきではない状態」を示すリスク状態がリスクIDに対応して、リスク集合として記憶されている。また、実行されるイベントは、図4に示すように、イベントIDに対応して記憶されている。また、図19及び図20には、各処理の深さにおいて成功するイベントに対応し、状態遷移後の状態ノードの組み合わせと実行されたイベント番号とが、スタック記憶領域記憶部9にプッシュされていく過程が記載されている。
深さ=1における処理において、初期設定部1は、初期設定1として、状態遷移モデルの各状態遷移モデルを、モデル記憶部5から読み出す(処理1)。
そして、初期設定部1は、初期設定2として、スタックに対して各状態遷移ラベルの状態ノードの組み合わせ{AUTH1,AUTH2,LIFECYCLE,ADMINFILE,USERFILE}の初期状態{OFF,OFF,ISSUE,NOT,NOT}をスタック領域STへ、またイベント番号{node}の最初のイベント番号{1}をスタック領域NDへプッシュする(処理2)。
次に、検証部3は、スタックの各領域が空であるか否かを検出し(処理3)、最初にこの処理が行われるため、スタックの先頭に初期状態の状態ノードの組み合わせが記録されていることを検出すると、この状態ノードとイベント番号とを現在の状態として、状態管理記憶部8へ記憶する(処理4−1)。
そして、検証部3は、処理4にて状態管理記憶部8へ記憶した現在の状態{AUTH1,AUTH2,LIFECYCLE,ADMINFILE,USERFILE}を、履歴記憶部6historyに記憶する(処理5)。
処理が処理7に移行すると、展開部2は、上記関数Aの処理により、現在の状態ノードの値の組み合わせstatesと、イベント番号{node}とを、内部の作業用メモリtmpstates及びtmpnodeに対してそれぞれ記憶させる(処理A1)。
そして、展開部2は、tmpnode(=1)のイベント番号{node}に対応するイベントであるtmpevent(AUTH_SUCCESS1)を取得し(処理A2)、newstatesを初期化し(処理A3)、関数Bを読み出して処理を処理A4へ進める。
そして、展開部2は、状態遷移tmpmoveにおける状態遷移前の状態ノードの値を取得してprestate(=OFF)に設定し、状態遷移後の状態ノードの値を取得してpoststate(=ON)に設定する(処理C3)。
展開部2は、現在の状態ノードの値(OFF)が、prestate(=OFF)と一致しているか否かを検出し(処理C4)、一致しているため処理を処理C5へ進める。
そして、展開部2は、次の状態newstatesが履歴記憶部6のhistoryに記憶されている状態ノードの組み合わせでないかどうかの検出を行い(処理C6)、この状態ノードの組み合わせが履歴記憶部6のhistoryに記憶されていないため、処理を処理7へ進める。
展開部2は、状態遷移tmpmove後に起動する事後イベントを状態遷移モデルから抽出し、事後イベントテーブルを生成する(処理C7)、事後イベントが存在しないため、処理を処理C10へ進める。
そして、展開部2は、関数Cの処理結果として、true信号を出力し(処理C10)、処理を処理B3へ進める。
そして、検証部3は、関数Bのtrue信号が入力されると、関数Aの処理としてtrue信号を出力し(処理A7)、該関数Aからtrue信号が出力されたため、newstatesの状態ノードの値とtmpnodeのイベント番号(=1)とをスタックST及びNDへそれぞれプッシュして記憶させる(処理8−b)。このとき、スタック領域記憶部9には、図19(a)に示す深さ1のように、初期状態のノード状態の組み合わせと、イベント「AUTH_SUCCESS1」の実行により状態遷移が実行された結果の状態ノードの組み合わせとが記憶されている。
次に、検証部3は、スタックが空か否かを検出し(処理3)、空でないことを検出し、処理8−bを通過しているため、深さ=1から深さ=2へ処理の対象が移行することとなるので、スタックSTから読み出した状態ノードの値の組み合わせと、スタックNDから読み出したイベント番号(=1)とを、状態管理記憶部8へ記憶させる(処理4−1)。
そして、検証部3は、処理4−1にて状態管理記憶部8へ記憶した現在の状態{AUTH1,AUTH2,LIFECYCLE,ADMINFILE,USERFILE}を、履歴記憶部6historyに記憶する(処理5)。
処理が処理7に移行すると、展開部2は、上記関数Aの処理により、現在の状態ノードの値の組み合わせstatesと、イベント番号{node}とを、内部の作業用メモリtmpstates及びtmpnodeに対してそれぞれ記憶させる(処理A1)。
そして、展開部2は、tmpnode(=1)のイベント番号{node}に対応するイベントであるtmpevent(AUTH_SUCCESS1)を取得し(処理A2)、newstatesを初期化し(処理A3)、関数Bを読み出して処理を処理A4へ進める。
そして、展開部2は、状態遷移tmpmoveにおける状態遷移前の状態ノードの値を取得してprestate(=OFF)に設定し、状態遷移後の状態ノードの値を取得してpoststate(=ON)に設定する(処理C3)。
展開部2は、現在の状態ノードの値(OFF)が、prestate(=OFF)と一致しているか否かを検出し(処理C4)、一致していないためfalse信号を出力し(処理C11)、処理を処理B5へ進める。
次に、展開部2は、tmpnodeのイベント番号をインクリメントし(処理A5)、処理を処理A6へ進める。
そして、展開部2は、このインクリメントしたtmpnodeのイベント番号{node}が予め設定しているノード数を超えたか否かの検出を行い(処理A6)、イベント番号が「2」でありノード数「6」を超えていないことを検出したため、処理を処理A2へ進める。
これにより、展開部2は、展開部2は、tmpnode(=2)のイベント番号に対応するイベントであるtmpevent(AUTH_SUCCESS2)を取得し(処理A2)、newstatesを初期化し(処理A3)、関数Bを読み出して処理を処理A4へ進める。
これにより、展開部2は、false信号を出力し(処理C11)、処理を処理B5へ進める。
次に、展開部2は、tmpnodeのイベント番号{node}をインクリメントし(処理A5)、処理を処理A6へ進める。
そして、展開部2は、このインクリメントしたtmpnodeのイベント番号{node}が予め設定しているノード数を超えたか否かの検出を行い(処理A6)、イベント番号が「3」でありノード数「6」を超えていないことを検出したため、処理を処理A2へ進める。
これにより、展開部2は、展開部2は、tmpnode(=3)のイベント番号{node}に対応するイベントであるtmpevent(READ_ADMINFILE)を取得し(処理A2)、newstatesを初期化し(処理A3)、関数Bを読み出して処理を処理A4へ進める。
そして、展開部2は、状態遷移tmpmoveにおける状態遷移前の状態ノードの値を取得してprestate(=NOT)に設定し、状態遷移後の状態ノードの値を取得してpoststate(=READ)に設定する(処理C3)。
展開部2は、現在の状態ノードの値(NOT)が、prestate(=NOT)と一致しているか否かを検出し(処理C4)、一致しているため処理を処理C5へ進める。
そして、展開部2は、次の状態newstatesが履歴記憶部6のhistoryに記憶されている状態ノードの組み合わせに存在するか否かの検出を行い(処理C6)、この状態ノードの組み合わせが履歴記憶部6のhistoryに記憶されていないため、処理を処理C7へ進める。
展開部2は、状態遷移tmpmove後に起動する事後イベントを状態遷移モデルから抽出し、事後イベントテーブルを生成する(処理C7)、事後イベントが存在しないため、処理を処理C10へ進める。
そして、展開部2は、関数Cの処理結果として、true信号を出力し(処理C10)、処理を処理B3へ進める。
そして、検証部3は、関数Bのtrue信号が入力されると、関数Aの処理としてtrue信号を出力し(処理A7)、該関数Aからtrue信号が出力されたため、newstatesの状態ノードの値とtmpnodeのイベント番号(=1)とをスタックST及びNDへそれぞれプッシュして記憶させる(処理8−b)。
このときのスタック領域記憶部9には、図19(b)に示す深さ2のように、初期状態の状態ノードの組み合わせと、深さ1にてイベントAUTH_SUCCESS1の実行により遷移が実行された結果である状態ノードの組み合わせと、今回の深さ2でイベントREAD_LIFECYCLEの実行により遷移が実行された結果である状態ノードの組み合わせが記憶されている。
以降、上述したように、深さ=3〜深さ=11の検証処理が行われる。
上述したように、深さ3においても同様の検証処理が行われる。深さ3においては、tmpnodeのイベント番号{node}が「5」の場合、イベント「tmpivent(=CHANGE_LIFECYCLE1)」により状態遷移が実行され、状態遷移ラベル「LABEL_LIFECYCLE」の状態ノードがISSUEからUSAGEに遷移した際に、事後イベントRESET_KEY1が起動される。
以下、処理A2にて、イベントtmpivent(=CHANGE_LIFECYCLE1)が選択された時点から説明する。
そして、展開部2は、tmpnode(=5)のイベント番号{node}に対応するイベントであるtmpevent(CHANGE_LIFECYCLE1)を取得し(処理A2)、newstatesを初期化し(処理A3)、関数Bを読み出して処理を処理A4へ進める。
そして、展開部2は、状態遷移tmpmoveにおける状態遷移前の状態ノードの値を取得してprestate(=ISSUE)に設定し、状態遷移後の状態ノードの値を取得してpoststate(=USAGE)に設定する(処理C3)。
展開部2は、現在の状態ノードの値(ISSUE)が、prestate(=ISSUE)と一致しているか否かを検出し(処理C4)、一致しているため処理を処理C5へ進める。
そして、展開部2は、次の状態newstatesが履歴記憶部6のhistoryに記憶されている状態ノードの組み合わせと一致するか否かの検出を行い(処理C6)、一致するものが検出されず、この状態ノードの組み合わせが履歴記憶部6のhistoryに記憶されていないため、処理を処理7へ進める。
展開部2は、状態遷移tmpmove後に起動する事後イベントを状態遷移モデルから抽出し、事後イベントテーブルを生成する(処理C7)、事後イベントRESET_KEY1が存在するため、処理を処理C8へ進める。
そして、展開部2は、状態遷移tmpmoveにおける状態遷移前の状態ノードの値を取得してprestate(=ON)に設定し、状態遷移後の状態ノードの値を取得してpoststate(=OFF)に設定する(処理C3)。
展開部2は、現在の状態ノードの値(ON)が、prestate(=ON)と一致しているか否かを検出し(処理C4)、一致しているため処理を処理C5へ進める。
そして、展開部2は、次の状態newstatesが履歴記憶部6のhistoryに記憶されている状態ノードの組み合わせと一致するか否かの検出を行い(処理C6)、一致するものが検出されず、この状態ノードの組み合わせが履歴記憶部6のhistoryに記憶されていないため、処理を処理C7へ進める。
そして、展開部2は、関数Cの処理結果として、true信号を出力し(処理C10)、処理を処理B3へ進める。
次に、展開部2は、イベントtmpevent(reset_key1)に対応するtmpmoveが全て実行されたか否かを検出し(処理B3)、まだ状態遷移ラベル「LABEL_ADMINFILE」の状態ノードをREADからNOT_READに移行する状態遷移が実行されていないため、処理B2に移る。
そして、検証部3は、関数Bからtrue信号が入力されると、関数Aの処理としてtrue信号を出力し、newstatesの状態ノードの組み合わせとイベントID(=5)とをスタック領域記憶部9にプッシュして記憶させる(処理8−b)。
すなわち、上述した検証部3によるプッシュ処理により、スタック領域記憶部9は、今回の深さ3におけるイベント「CHANGE_LIFECYCLE1」と、その事後イベント「RESET_KEY1」の実行により遷移が実行された結果である状態ノードの組み合わせ{OFF,OFF,USAGE,NOT,NOT,5}がプッシュされ、図19(c)に示す状態となる。
以降、上述した処理と同様に、各深さにて処理が継続されるため、詳細な説明は省略し、深さ4から深さ9までの検証部3による関数Aの実行状況を簡単に説明する。
図10(d)に示す深さ4においては、tmpnodeのイベントIDが「1」の場合、イベントtmpevent(=AUTH_SUCCESS1)により、状態遷移が実行され、状態遷移ラベル「LABEL_AUTH1」の状態ノードがOFFからONに遷移する。このとき、スタック領域記憶部9には、図19(d)に示す深さ4のように、{ON,OFF,USAGE,NOT,NOT,1}がプッシュされて記憶される。
図10(f)に示す深さ6においては、tmpnodeのイベントIDが「4」の場合、イベントtmpevent(=READ_USERFILE)により、状態遷移が実行され、状態遷移ラベル「LABEL_USERFILE」の状態ノードがNOT_READからREADに遷移する。このとき、スタック領域記憶部9には、図19(f)に示す深さ6のように、{ON,ON,USAGE,NOT,READ,4}がプッシュされて記憶される。
図10(h)に示す深さ8においては、tmpnodeのイベントIDが「3」の場合、イベントtmpevent(=READ_ADMINFILE)により、状態遷移が実行され、状態遷移ラベル「LABEL_ADMINFILE」の状態ノードがNOT_READからREADに遷移する。このとき、スタック領域記憶部9には、図19(h)に示す深さ8のように、{ON,ON,ISSUE,READ,NOT,4}がプッシュされて記憶される。
図10(i)に示す深さ9においては、tmpnodeのイベントIDが「4」の場合、イベントtmpevent(=READ_USERFILE)により、状態遷移が実行され、状態遷移ラベル「LABEL_USERFILE」の状態ノードがNOT_READからREADに遷移する。このとき、スタック領域記憶部9には、図19(i)に示す深さ9のように、{ON,ON,ISSUE,READ,READ,4}がプッシュされて記憶される。
また、状態管理記憶部8の状態ノードの値の組み合わせが、リスクファイル記憶部7に記憶されている集合リスクのいずれかの組み合わせと一致した場合の処理について、深さ=10において説明する。
深さ9における処理8−bにおいて、すでに述べたように、スタック領域記憶部9には{ON,ON,ISSUE,READ,READ,4}がプッシュされて記憶されている。
そして、検証部3は、スタックが空か否かを検出し(処理3)、空でないことを検出し、処理8−bを通過しているため、深さ=9から深さ=10へ処理の対象が移行することとなるので、スタックSTから読み出した状態ノードの値の組み合わせと、スタックNDから読み出したイベント番号(=1)とを、状態管理記憶部8へ記憶させる(処理4−1)。
ここで、検証部3は、現在の状態における状態ノードの値の組み合わせが、リスクファイル記憶部7のリスク集合に含まれている状態ノードの値の組み合わせのいずれかと一致するか否かの検出を行い(処理6)、リスクR4の{LABEL_LIFECYCLE,LABEL_USERFILE}={ISSUE,READ}に対応していることが検出されたため、処理を処理9へ進める。
そして、検証部3は、現在のスタックST及びスタックNDの全てを内部のriskファイルにリスク到達履歴として追加書き込みして記憶する(処理9)。
最終的に、全ての検証が終了した際、検証部3は、出力部4を介して結果リストとして、上記riskファイルを出力する。
続いて、関数Aが実行されるが、深さ10(図10(j))においては、tmpnodeのイベント番号{node}が「5」の場合、イベントtmpevent(=CHANGE_LIFECYCLE1)による状態遷移と、その事後イベントRESET_KEY1による状態遷移が実行され、状態遷移ラベル「LABEL_LIFECYCLE」の状態ノードがISSUEからUSAGEの遷移と、状態遷移ラベル「LABEL_ADMINFILE」の状態ノードがREADからNOT_READの遷移と、状態遷移ラベル「LABEL_AUTH1」の状態ノードがONからOFFへの遷移とが行われる。これにより、スタック領域記憶部には、図20の(j)に示すように、{OFF,ON,USAGR,NOT,READ,5}がプッシュされて記憶される。
次に、スタックに対してプッシュされた状態ノードの組み合わせ及びイベント番号{node}がポップされる動作について深さ=11において説明する。添付したフローチャートにおいては、深さ=11において、イベント番号{node}が「6」までのイベント全てが実行できないとして説明している。
上記処理をイベント番号{node}が「5」のイベント(CHANGE_LIFECYCLE1)により得られるnewstatesがすでにスタックSTに記憶されている状態ノードの組み合わせに存在するため、処理A5に処理が戻った時点から説明する。
展開部2は、tmpnodeのイベント番号{node}をインクリメントし、(処理A5)、処理を処理A6へ進める。
これにより、展開部2は、tmpnode(=2)のイベント番号{node}に対応するイベントであるtmpevent(CHANGE_LIFECYCLE2)を取得し(処理A2)、newstatesを初期化し(処理A3)、関数Bを読み出して処理を処理A4へ進める。
そして、展開部2は、状態遷移tmpmoveにおける状態遷移前の状態ノードの値を取得してprestate(=USAGE)に設定し、状態遷移後の状態ノードの値を取得してpoststate(=ISSUE)に設定する(処理C3)。
これにより、展開部2は、false信号を出力し(処理C11)、処理を処理B5へ進める。
そして、展開部2は、false信号を出力し(処理B5)、処理を処理A5へ進める。
次に、展開部2は、tmpnodeのイベント番号{node}をインクリメントし(処理A5)、処理を処理A6へ進める。
これにより、展開部2は、false信号を出力し(処理A8)、処理を8−aへ進める。
次に、検証部3は、スタックST及びスタックNDの先頭に記憶されている状態ノードの組み合わせ{OFF,ON,ISSUE,NOT,READ}とイベント番号{node}の「5」とをポップして削除する(処理8−a)。
そして、検証部3は、処理4にて状態管理記憶部8へ記憶した現在の状態{AUTH1,AUTH2,LIFECYCLE,ADMINFILE,USERFILE}を、履歴記憶部6historyに記憶する(処理5)。
後述する処理についてはすでに説明しているため省略する。
2…展開部
3…検証部
4…出力部
5…モデル記憶部
6…履歴記憶部
7…リスクファイル記憶部
8…状態管理記憶部
9…スタック領域記憶部
Claims (10)
- 設計対象のシステムの仕様をイベントの発生に伴う状態ノードの変更による状態遷移の複数の組み合わせとして記述した状態遷移モデルとし、前記イベントに基づく状態遷移のシミュレーションにより、該設計対象のシステムの仕様を検証する仕様欠陥検証システムであって、
前記状態遷移モデルが記憶されているモデル記憶部と、
前記状態遷移モデルの状態ノードの状態において、発生してはいけない状態ノードの組合せを示すリスクファイルが記憶されたリスクファイル部と、
該モデル記憶部から前記状態遷移モデルを読み出し、該状態遷移モデルから、イベント、及び該イベントによる状態ノードの遷移前後の状態を示す状態情報を読み出す初期設定部と、
前記イベントを順次実行し、所定の条件を満たす場合に前記状態情報に応じて状態ノードの状態を変更し、状態遷移モデルにおける状態遷移を行う展開部と、
前記展開部の前記イベントの実行により状態ノードの状態が変更された場合、遷移後の状態ノードの状態及びイベントとを状態遷移モデルから抽出し、遷移後の状態ノードの状態がリスクファイル部に記憶されている発生してはいけない状態ノードの組合せに一致するか否かを検出し、一致した場合に仕様欠陥として出力する検証部と
を有することを特徴とする仕様欠陥検証システム。 - 前記仕様欠陥検証システムがさらにスタック領域記憶部を有し、
前記展開部が、前記状態遷移モデルの初期状態の状態ノードの組み合わせと、イベントの実行により状態ノードの状態が変更された場合の遷移後の状態ノードの組み合わせ及びイベントとを前記スタック領域記憶部にプッシュする
ことを特徴とする請求項1に記載の仕様欠陥検証システム。 - 前記状態遷移モデルが前記イベントを実行したときに前記状態ノードの値を変更する条件として、前記状態ノードの値を事前条件として有しており、
前記展開部がイベントの実行時における状態ノードの値が前記事前条件に一致する場合、イベントに対応して状態ノードの値を変更して状態遷移を行うことを特徴とする請求項1または請求項2に記載の仕様欠陥検証システム。 - 前記展開部が、前記イベントの実行による状態遷移モデルにおける状態遷移が行われた場合、遷移した状態を示す状態情報を、時系列に記憶する履歴管理記憶部をさらに有することを特徴とする請求項1から請求項3のいずれかに記載の仕様欠陥検証システム。
- 前記展開部は、遷移後の状態の組み合わせと前記履歴管理記憶部に記憶されている状態ノードの組み合わせとが一致した場合、対応するイベントの状態遷移を行わないことを特徴とする請求項4記載の仕様欠陥検証システム。
- 前記状態遷移モデルが、状態ノードの変化に対応して実行される事後イベントを有していることを特徴とする請求項1から請求項5のいずれかに記載の仕様欠陥検証システム。
- 前記検証部が状態遷移後の状態ノードの組み合わせと、前記リスクファイル部に記憶されている発生してはいけない状態ノードの組合せとが一致した場合、前記スタック領域記憶部に記憶されている各状態における状態ノードの組み合わせとイベントとを出力することを特徴とする請求項2から請求項6のいずれかに記載の仕様欠陥検証システム。
- 前記展開部が、ある状態遷移における状態ノードの組み合わせにおいて、全てのイベントが実行され、状態遷移が行われなかった場合、前記スタック領域記憶部の最上部のイベントの組み合わせをポップし、その前の状態で未実行のイベントを実行することを特徴とする請求項2から請求項7のいずれかに記載の仕様欠陥検証システム。
- 設計対象のシステムの仕様をイベントの発生に伴う状態ノードの変更による状態遷移の複数の組み合わせとして記述した状態遷移モデルとし、前記イベントに基づく状態遷移のシミュレーションにより、該設計対象のシステムの仕様を検証する仕様欠陥検証方法であって、
初期設定部が状態遷移モデルが記憶されているモデル記憶部から前記状態遷移モデルを読み出し、該状態遷移モデルから、イベント、及び該イベントによる状態ノードの遷移前後の状態を示す状態情報を読み出す過程と、
展開部が前記イベントを順次実行し、所定の条件を満たす場合に前記状態情報に応じて状態ノードの状態を変更し、状態遷移モデルにおける状態遷移を行う過程と、
検証部が前記展開部の前記イベントの実行により状態ノードの状態が変更された場合、遷移後の状態ノードの状態及びイベントとを状態遷移モデルから抽出し、前記状態遷移モデルの状態ノードの状態において発生してはいけない状態ノードの組合せを示すリスクファイルが記憶されたリスクファイル部に記憶されている発生してはいけない状態ノードの組合せと、前記遷移後の状態ノードの状態が一致するか否かを検出し、一致した場合に仕様欠陥として出力する過程と
を有することを特徴とする仕様欠陥検証方法。 - 請求項1から請求項8のいずれかに記載の仕様欠陥検証システムとして、コンピュータを機能させるためのプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007244439A JP4759546B2 (ja) | 2007-09-20 | 2007-09-20 | 仕様欠陥検証システム、その方法及びプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007244439A JP4759546B2 (ja) | 2007-09-20 | 2007-09-20 | 仕様欠陥検証システム、その方法及びプログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2009075886A JP2009075886A (ja) | 2009-04-09 |
JP4759546B2 true JP4759546B2 (ja) | 2011-08-31 |
Family
ID=40610786
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007244439A Active JP4759546B2 (ja) | 2007-09-20 | 2007-09-20 | 仕様欠陥検証システム、その方法及びプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP4759546B2 (ja) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5610530B2 (ja) * | 2010-12-27 | 2014-10-22 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | リソース保護処理プログラムとリソース保護処理装置とリソース保護処理方法 |
CN103823748B (zh) * | 2013-04-28 | 2017-04-19 | 电子科技大学 | 一种基于随机Petri网的分区软件可靠性分析方法 |
CN106326110A (zh) * | 2016-08-10 | 2017-01-11 | 浪潮(北京)电子信息产业有限公司 | 一种系统版本开发过程中bug缺陷的修复方法及系统 |
JP6962867B2 (ja) * | 2018-06-04 | 2021-11-05 | 矢崎総業株式会社 | 脆弱性評価装置 |
KR102593465B1 (ko) * | 2021-07-30 | 2023-10-24 | 엘아이지넥스원 주식회사 | 원샷 시스템의 안전도 설계 처리 방법 및 그를 위한 장치 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2799526B2 (ja) * | 1991-01-28 | 1998-09-17 | 日本電信電話株式会社 | 通信サービス仕様検証方式 |
JPH0573281A (ja) * | 1991-09-11 | 1993-03-26 | Toshiba Corp | プログラム生成装置 |
JPH0675817A (ja) * | 1992-08-27 | 1994-03-18 | Hitachi Ltd | 状態遷移ルールの動作履歴表示方法 |
JP3305049B2 (ja) * | 1993-07-22 | 2002-07-22 | 株式会社東芝 | ソフトウェア品質管理システム |
JP3060951B2 (ja) * | 1996-06-19 | 2000-07-10 | 日本電気株式会社 | 通信ソフトウェア設計検証方式 |
JP2002312206A (ja) * | 2001-04-17 | 2002-10-25 | Mitsubishi Electric Corp | 状態遷移情報検証装置及び状態遷移情報検証方法 |
JP2004348473A (ja) * | 2003-05-22 | 2004-12-09 | Hitachi Ltd | 状態遷移検証方法及び検証装置 |
-
2007
- 2007-09-20 JP JP2007244439A patent/JP4759546B2/ja active Active
Also Published As
Publication number | Publication date |
---|---|
JP2009075886A (ja) | 2009-04-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6986125B2 (en) | Method and apparatus for testing and evaluating a software component using an abstraction matrix | |
US6941546B2 (en) | Method and apparatus for testing a software component using an abstraction matrix | |
US20070150433A1 (en) | Method for managing file in version control system | |
US20170010889A1 (en) | Continuous integration with reusable context aware jobs | |
JP4759546B2 (ja) | 仕様欠陥検証システム、その方法及びプログラム | |
Herbold et al. | Improved bug reporting and reproduction through non-intrusive gui usage monitoring and automated replaying | |
JP2009140155A (ja) | アプリケーションプログラムのテストプログラム | |
CN106991048A (zh) | 网页测试方法和装置 | |
CN113190448B (zh) | 测试代码更新方法及装置、电子设备、存储介质 | |
US10466761B2 (en) | Power system monitoring and control system | |
JP5164919B2 (ja) | テストデータ生成方法及び装置及びプログラム | |
JP2008293382A (ja) | テスト仕様自動生成方式 | |
JP2006309576A (ja) | 論理システムの検証装置及び検証方法、記憶媒体及びコンピュータプログラム | |
JP2007140954A (ja) | オペレータ擬似システムおよびオペレータ擬似方法 | |
CN109933351A (zh) | 一种修复和升级Linux系统的方法与装置 | |
US20190286453A1 (en) | System construction assisting apparatus, method, and program | |
JP5119765B2 (ja) | 仕様書作成支援装置および支援方法 | |
CN114996955A (zh) | 一种云原生混沌工程实验的靶场环境构建方法及装置 | |
KR101685299B1 (ko) | 비결정적인 이벤트 처리가 가능한 프로그램의 자동 테스트 방법 및 자동 테스트 장치 | |
JP5728979B2 (ja) | 情報処理装置、ソフトウェア検査方法およびソフトウェア検査プログラム | |
WO2004068347A1 (en) | Method and apparatus for categorising test scripts | |
JP2013161182A (ja) | テスト項目生成装置、テスト項目生成方法 | |
JP6949440B2 (ja) | ベクタ生成装置及びベクタ生成用プログラム | |
Decusatis et al. | Methodology for an open digital forensics model based on CAINE | |
CN109684870B (zh) | 一种自包含的文件信息配置方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20101116 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20110208 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20110404 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20110510 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20110606 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 Ref document number: 4759546 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140610 Year of fee payment: 3 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
S533 | Written request for registration of change of name |
Free format text: JAPANESE INTERMEDIATE CODE: R313533 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |