JP4759546B2 - 仕様欠陥検証システム、その方法及びプログラム - Google Patents

仕様欠陥検証システム、その方法及びプログラム Download PDF

Info

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
Application number
JP2007244439A
Other languages
English (en)
Other versions
JP2009075886A (ja
Inventor
尚久 市原
浩明 鴨田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NTT Data Corp
Original Assignee
NTT Data Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by NTT Data Corp filed Critical NTT Data Corp
Priority to JP2007244439A priority Critical patent/JP4759546B2/ja
Publication of JP2009075886A publication Critical patent/JP2009075886A/ja
Application granted granted Critical
Publication of JP4759546B2 publication Critical patent/JP4759546B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Description

本発明は、設計段階における製品の仕様を記述した状態遷移モデルを用いて、イベントにより発生する状態遷移により、設計段階におけるシステムの仕様の欠陥の有無を検証する仕様欠陥検証システムに関する。
システムの開発を行う際、設計者はシステムが作成される前の段階において、製品仕様における欠陥、例えばセキュリティ上において、権限の無い人間がアクセス可能となる状態などの「起こるべきではない状態」をできる限り除去するための作業を行っている。
設計者は、仕様書を関係者間において設計書レビューを行ってチェックを行ったり、シミュレーションツールを独自に開発して、可能な限りの仕様上の動作を確認して、上記欠陥を除去する努力を行っている。
また、システムの試験工程においては、製品の内部仕様に基づいた単体試験や総合試験を実施したり、外部仕様に基づいて、単体試験や総合試験を実施することにより、仕様欠陥を検証する処理を行っている(例えば、特許文献1参照)。
特開平06−161759号公報
しかしながら、開発対象の製品仕様のパラメータ(状態ノード、状態ノードを変更するイベントなど)の数が非常に多い場合、その全ての動作や動作に基づく状態が爆発的に増加するするため、設計書レビューや特許文献1に記載したシミュレーションツールだけで、網羅的に確認することは不可能である。
上記特許文献1は、システムのあらゆる状態遷移を発生させて表示するシステムであり、設計書レビューを支援するために利用可能であるが、手作業を伴い、組合せが膨大となると作業時間が増加し、システムの利用時間も膨大となってしまう。
また、上述した欠陥の検証については、試験工程においても同様であり、膨大な試験項目に時間を費やすことによるシステム開発コストの増大を、システム開発から除くため、境界値試験や実験計画法などのテスト手法に頼ることも考えられるが、仕様欠陥を完全に除去することはできない。
本発明は、製品設計の段階において、製品仕様を記述した状態遷移モデルを、この製品仕様における全パラメータを用いて動作させ、セキュリティ上の「起こるべきではない」欠陥の状態を、簡易に検証することができる仕様欠陥検証システム及びプログラムを提供することを目的とする。
本発明の仕様欠陥検証システムは、設計対象のシステムの仕様をイベントの発生に伴う状態ノードの変更による状態遷移の複数の組み合わせとして記述した状態遷移モデルとし、前記イベントに基づく状態遷移のシミュレーションにより、該設計対象のシステムの仕様を検証する仕様欠陥検証システムであって、前記状態遷移モデルが記憶されているモデル記憶部と、前記状態遷移モデルの状態ノードの状態において、発生してはいけない状態ノードの組合せを示すリスクファイルが記憶されたリスクファイル部と、該モデル記憶部から前記状態遷移モデルを読み出し、該状態遷移モデルから、イベント、及び該イベントによる状態ノードの遷移前後の状態を示す状態情報を読み出す初期設定部と、前記イベントを順次実行し、所定の条件を満たす場合に前記状態情報に応じて状態ノードの状態を変更し、状態遷移モデルにおける状態遷移を行う展開部と、前記展開部の前記イベントの実行により状態ノードの状態が変更された場合、遷移後の状態ノードの状態及びイベントとを状態遷移モデルから抽出し、遷移後の状態ノードの状態がリスクファイル部に記憶されている発生してはいけない状態ノードの組合せに一致するか否かを検出し、一致した場合に仕様欠陥として出力する検証部とを有することを特徴とする。
本発明の仕様欠陥検証システムは、前記仕様欠陥検証システムがさらにスタック領域記憶部を有し、前記展開部が、前記状態遷移モデルの初期状態の状態ノードの組み合わせと、イベントの実行により状態ノードの状態が変更された場合の遷移後の状態ノードの組み合わせ及びイベントとを前記スタック領域記憶部にプッシュすることを特徴とする。
本発明の仕様欠陥検証システムは、前記状態遷移モデルが前記イベントを実行したときに前記状態ノードの値を変更する条件として、前記状態ノードの値を事前条件として有しており、前記展開部がイベントの実行時における状態ノードの値が前記事前条件に一致する場合、イベントに対応して状態ノードの値を変更して状態遷移を行うことを特徴とする。
本発明の仕様欠陥検証システムは、前記展開部が、前記イベントの実行による状態遷移モデルにおける状態遷移が行われた場合、遷移した状態を示す状態情報を、時系列に記憶する履歴管理記憶部をさらに有することを特徴とする。
本発明の仕様欠陥検証システムは、前記展開部は、遷移後の状態の組み合わせと前記履歴管理記憶部に記憶されている状態ノードの組み合わせとが一致した場合、対応するイベントの状態遷移を行わないことを特徴とする。
本発明の仕様欠陥検証システムは、前記状態遷移モデルが、状態ノードの変化に対応して実行される事後イベントを有していることを特徴とする。
本発明の仕様欠陥検証システムは、前記検証部が状態遷移後の状態ノードの組み合わせと、前記リスクファイル部に記憶されている発生してはいけない状態ノードの組合せとが一致した場合、前記スタック領域記憶部に記憶されている各状態における状態ノードの組み合わせとイベントとを出力することを特徴とする。
本発明の仕様欠陥検証システムは、前記展開部が、ある状態遷移における状態ノードの組み合わせにおいて、全てのイベントが実行され、状態遷移が行われなかった場合、前記スタック領域記憶部の最上部のイベントの組み合わせをポップし、その前の状態で未実行のイベントを実行することを特徴とする。
本発明の仕様欠陥検証方法は、設計対象のシステムの仕様をイベントの発生に伴う状態ノードの変更による状態遷移の複数の組み合わせとして記述した状態遷移モデルとし、前記イベントに基づく状態遷移のシミュレーションにより、該設計対象のシステムの仕様を検証する仕様欠陥検証方法であって、初期設定部が状態遷移モデルが記憶されているモデル記憶部から前記状態遷移モデルを読み出し、該状態遷移モデルから、イベント、及び該イベントによる状態ノードの遷移前後の状態を示す状態情報を読み出す過程と、展開部が前記イベントを順次実行し、所定の条件を満たす場合に前記状態情報に応じて状態ノードの状態を変更し、状態遷移モデルにおける状態遷移を行う過程と、検証部が前記展開部の前記イベントの実行により状態ノードの状態が変更された場合、遷移後の状態ノードの状態及びイベントとを状態遷移モデルから抽出し、前記状態遷移モデルの状態ノードの状態において発生してはいけない状態ノードの組合せを示すリスクファイルが記憶されたリスクファイル部に記憶されている発生してはいけない状態ノードの組合せと、前記遷移後の状態ノードの状態が一致するか否かを検出し、一致した場合に仕様欠陥として出力する過程とを有することを特徴とする。
本発明のプログラムは、上記いずれかに記載の仕様欠陥検証システムとして、コンピュータを機能させるためのプログラムである。
以上説明したように、本発明によれば、設計段階における仕様を表す状態遷移モデルを用い、状態遷移モデルが有するイベントを順次実行していき、実行結果として遷移後の状態の各状態ノード(あるいは内部変数)と、リスクファイル部に予め記憶されている「起こるべきでない」組合せの状態と一致するか否かを検出し、一致している場合に仕様の欠陥として通知する構成であり、状態遷移モデルに含まれる全てのイベントに対して起こる状態遷移の結果を検証することが可能となるため、設計段階において製品仕様の欠陥を早期に検出し、また製品仕様に欠陥がないことが検証できる。
また、本発明によれば、外部から入力されるイベント(あるいは外部イベント)による状態遷移の結果として起動する事後イベント(あるいは内部イベント:状態ノードの変化に対応して実行されるイベント)による状態遷移の結果をも含んで欠陥を検証することができるため、事後イベントによる状態遷移を含めて、設計段階において製品仕様の欠陥を早期に検出し、また製品仕様に欠陥がないことが検証できる。
また、本発明によれば、リスクが起こる組み合わせが抽出された場合、その起こってはいけない組み合わせがどのようなイベントの実行順序にて発生したのかを、スタック領域記憶部に記憶されている処理の状態遷移の変化によりトレースが行え、再現性が可能となる。
本発明は、ソフトウェアを開発する際に製品仕様をモデル化して記述するモデリング言語、例えばUML(Unified Modeling Language)等で記述された状態遷移モデルを用い、イベントによる各状態ノードの変更による状態遷移をシミュレーションし、状態遷移後の状態ノードの値が、予め設定した仕様上において「起こってはならない」状態ノードの組合せ、すなわち欠陥である状態ノードの組合せに、実行した各イベントにより遷移したか否かを検出することで、欠陥の有無を検証するものである。
上記状態遷移モデルは、複数の状態遷移ラベルから構成されている。この状態遷移ラベルは、外部からのイベント(外部装置やユーザから入力される)と、イベントにより変更される状態ノードの遷移前後の値との対応関係を示すものである。
また、上記イベントには、外部から直接に起動されずに、上記状態ノードの状態遷移に対応してプログラムにより実行される事後イベントも含まれている。
本実施形態において、状態遷移とは、上記イベント(さらに事後イベントも含む)の実行による状態ノードが変更され、状態ノードの組合せが変化することを意味している。
以下、本発明の一実施形態による欠陥検証システムを図面を参照して説明する。図1は同実施形態による欠陥検証システムの構成例を示すブロック図である。
この図において、欠陥検証システムは、初期設定部1、展開部2、検証部3、出力部4、モデル記憶部5、履歴記憶部6、リスクファイル記憶部7、状態管理記憶部8及びスタック領域記憶部9から構成されている。
モデル記憶部5には、欠陥の検証を行う製品仕様の状態遷移モデルが記憶されている。ここで、状態遷移モデルは図2に示すように、複数の状態遷移ラベルから構成されている。図2には例として、LABEL_AUTH1、LABEL_AUTH2、LABEL_LIFECYCLE、LABEL_ADMINFILE、LABEL_USERFILEが記載されている。この状態遷移モデルは、ICカードの動作状態の例を表すものとしている。
各状態遷移ラベルには、図3の各テーブルに示されるように、状態ノードの値と、イベントと、このイベント実行後にイベントにより変更される状態ノードの値ととともに、イベントを実行する前提となる事前条件及び状態遷移直後に実行される事後イベントが付加されている。各テーブルにおいて「*」が付加されている状態ノードの値はその状態遷移ラベルのデフォルト値であり、製品が起動された状態において初期設定される値である。
例えば、図3(c)のラベルLABEL_LIFECYCLEにおいて、状態ノードの値として「ISSUE」と「USAGE」とが設定され、イベントとして「CHANGE_LIFECYCLE1」と「CHANGE_LIFECYCLE2」とが設定され、それぞれのイベントに対応してイベント実行後の状態遷移ラベルの状態ノードの値として「USAGE」と「ISSUE」とが設定され、同様にそれぞれのイベントを実行するための条件である事前条件として「LABEL_AUTH1=ON」と「LABEL_AUTH1=ON」とが設定され、状態遷移後、すなわち状態ノードの値が変更されたことにより実行される事後イベントとして、それぞれのイベントに対応して「RESET_KEY1」と「RESET_KEY2」とが設定されている。
ここで、簡単に図3におけるイベントの実行による状態遷移について説明する。各イベントは外部からイベントに対応するイベント名や制御信号などが入力されると起動する。
イベント「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」に変更される。
一方、図3(c)のイベント「CHANGE_LIFECYCLE2」が実行されるためには、事前条件として図3(a)の状態遷移ラベル「LABEL_AUTH1」の状態ノードの値が「ON」である必要があり、「LABEL_AUTH1=ON」である場合、イベント「CHANGE_LIFECYCLE2」が実行される。
このイベント「CHANGE_LIFECYCLE2」が実行されると、状態ノードの値が「USAGE」から「ISSUE」に変更され、この状態ノードの値の変更に伴い事後イベント「RESET_KEY2」が実行される。
また、事後イベント「RESET_KEY2」が実行されると、図3(d)の状態遷移ラベル「LABEL_USERFILE」の状態ノードの値が「READ」である場合に「NOT_READ」に変更される。
上述したように、事前条件が設定されている際には、他の状態遷移ラベルにおける状態ノードの値が設定された事前条件と一致している場合にのみ、イベントに対応する状態ノードの値を変更して状態遷移を実行する。
また、事後イベントが設定されている際には、状態ノードの値が変更され状態遷移が発生した場合、この事後イベントが起動し他の状態遷移ラベルの状態ノードの値を変更し、状態遷移が発生する。
一方、図3(a)のイベント「AUTH_SUCCES1」においては、事前条件が設定されていないため、図3の状態遷移ラベル「LABEL_AUTH1」の状態ノードが「OFF」である場合には、「ON」に状態ノードが変更される。
また、事後イベントが設定されていない場合、他の状態遷移ラベルの状態ノードに対しては影響を与えずに、自身の状態ノードの値の変更のみを行うこととなる。
初期設定部1は、ユーザが入力した名称の状態遷移モデルを上記モデル記憶部5から読み出し、各状態遷移ラベルにおける状態ノードのディフォルト値(初期状態)及びイベントID(後述する初期イベントを示すイベントを特定するための番号)を、それぞれの状態遷移ラベルに対応して、状態管理記憶部(状態管理メモリ)8へ記憶させるとともに、上記初期状態と初期イベントのイベントIDをスタック領域記憶部9のスタックにプッシュ(PUSH)して記憶させる。
ここで、上記イベントIDとイベント名とは、図4に示すイベントテーブルにより対応付けられている。上記イベントIDに対応したイベント名をキーとし、状態遷移モデルを検索することにより、状態ノードの遷移情報、事前条件や事後イベントを参照することができる。
また、後述する処理において、展開部2が実行するイベントの順番は、上記イベントテーブルのイベントID順となる。このイベントテーブルにおける最初のイベントID(=1)が初期イベントを示している。
展開部2は、入力されるイベントが事前条件の有無、また事前条件が有ればこのイベントを実行する状態に対応する状態ノードの値がこの事前条件と一致しているか(満足されているか)否かを検出し、イベントに対応した状態遷移である状態ノードの変更を行い、成功した場合、状態管理記憶部8のイベントに対応する状態ノードの値及びイベント番号を変更し、イベントの実行が成功したことを示すture信号を検証部3に対して通知する。
また、展開部2は、全てのイベントの実行に失敗した場合、イベントの実行が失敗したことを示すfalse信号を検証部3に対して通知する。
ここで、全てのイベントの実行に失敗する場合とは、全てのイベントが以下のいずれかのためイベントが行えない場合をいう。
A.状態遷移の事前条件が満足されていないので、状態ノードの変更が行えない
B.状態遷移前の状態ノードがイベントが定義している状態遷移前の状態ノードでないため、状態遷移が行えない
C.状態遷移の変更を行った際、すでに履歴記憶部6に記憶されている状態ノードの組み合わせであったので状態変更が行えない
検証部3は、上記展開部2からture信号が入力されると、変更後の状態ノードの値の組合せ及び及び実行したイベント番号を上記スタックの先頭にプッシュして記憶させ、false信号が入力されると、上記スタック領域記憶部9のスタックの先頭をポップ(POP)し、最後に記憶された変更後の状態ノードの組合せ及び及び実行したイベントのイベント番号を削除する。
また、検証部3は、状態管理記憶部8に記憶されている現在の状態ノードの値の組合せを、時系列に履歴記憶部6に記憶させる。
また、検証部3は、状態管理記憶部8から読み出した現在の状態ノードの値の組合せが、リスクファイル記憶部7に記憶されている状態ノードの値の組合せ(起きるべきではない組合せ)であるか否かの検出を行い、検出された場合、スタック内の全ての情報を、内部のrisklogファイルに記録し、全ての検証処理が終了したことを検出すると、上記risklogファイルを出力部4を介して、結果リストとして出力する。
次に、図5は、図3の状態遷移モデルに対応するリスク状態と判定される状態ノードの組み合わせを、各リスク状態の組み合わせを示すリスクIDとの対応を示すリスクテーブルを記憶したリスクファイル記憶部7の一例である。
リスク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,図3,図6,図7,図8,及び図9を参照して本実施形態による仕様欠陥検証システムの動作を説明する。図6〜図9は、図1の仕様欠陥検証システムの動作例を示すフローチャートである。また、本発明にて用いられているアルゴリズムは、Pythonの探索アルゴリズムに対応した処理である。各状態遷移ラベルに対応するイベントは、状態遷移モデルが読み込まれた段階にて、図3に示すテーブルのイベントの項目から初期設定部1により抽出される。また、イベントが実行される順番を示すイベント番号は任意にユーザが予め設定しておく。
まず、初期設定部1及び検証部が行う処理として図6のフローチャートを説明する。
初期設定部1は、ユーザが検証対象として入力した名称の状態遷移モデルをモデル記憶部5から読み込み(処理1)、各状態遷移ラベルにおける初期状態における状態ノードの値の組合せ及び初期イベント番号(node=1)とをスタックST(状態ノードの値の組合せのスタック領域)及びND(イベント番号のスタック領域)にプッシュするとともに、状態管理記憶部8へ記憶させる(処理2)。
そして、検証部3は、スタックSTが空か否かの検出を行い、空(スタックSTになにも記憶されていない状態)でないことを検出した場合、処理を処理4へ進め、空であることを検出した場合、処理を処理10へ進め、内部に記憶されているrisklogファイルを結果リストとして出力部4を介して出力して検証処理を終了する。
次に、検証部3は、スタックにおけるスタックST及びスタックNDの先頭の値を読み出し、状態管理記憶部8に現在の状態ノードの値の組合せ(以下、現在の状態states)及びノードとして設定し(処理4)、処理を処理5へ進める。
この処理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に記憶されている現在の状態ノードの値の組合せの状態を、時系列に履歴記憶部6へ記憶させ(処理5)、処理を処理6へ進める。
次に、検証部3は、状態管理記憶部8に記憶されている現在の状態ノードの値の組合せの状態と、リスクファイル記憶部7に記憶されている状態ノードの複数の組合せ(リスク集合)のいずれかと一致するか否かの検出を行い(処理6)、一致する状態ノードの組合せがリスクファイル記憶部7に記憶されたリスク集合から検出された場合、処理を処理9へ進め、一方、検出されない場合に処理を処理7へ進める。
一致したことが検出されると処理9において、検証部3は、「起こるべきでない状態」に到達したため、スタック内の情報を全て内部のriskファイルに追加書き込みする。
そして、展開部2は、関数Aを呼び出し、状態管理記憶部8に記憶されている状態ノードの組合せの状態にて、上記イベントテーブルにおけるイベントIDの順番にイベントを実行し、状態遷移の実行(状態ノードの変更)が行われた場合、その時点においてtrue信号(成功)を検証部3に通知し(処理7、この処理7の詳細は後述)、イベントテーブルにおけるすべてのイベントを実行しても状態遷移の実行が行われなかった場合、false信号(失敗)にて、検証部3に対して通知し(同様に処理7)、処理を処理8へ進める。
次に、検証部3は、false信号が入力されると、スタックの先頭に記憶されている状態ノードの状態とイベント番号とをポップし(処理8−a)、処理を処理3へ進める。
一方、検証部は、true信号が入力されると、後述する次の状態newstatesに記載されている状態ノードの値の状態と、後述する関数Aにおける作業量メモリのtmpnodeに記憶されているイベント番号をスタックにプッシュして記憶させる(処理8−b)。
次に、展開部2における関数Aの処理について、図7(a)のフローチャートにより説明する。
展開部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へ進める。
イベントtmpeventの実行が失敗すると、展開部2はtmpnodeをインクリメント(1を加算)して、次のイベントの処理を行う準備を行い(処理A5)、処理を処理A6へ進める。
次に、展開部2は、インクリメントされたtmpnodeが状態遷移モデルにおけるイベント数以下であるか否かの検出を行い(処理A6)、イベント数よりtmpnodeが少ないことを検出した場合、処理を処理A3へ進め、一方イベント数をtmpnodeが超えたことを検出した場合、処理を処理A8へ進める。
そして、展開部2は、false信号を検証部3へ出力し(処理A8)、処理を処理8−aへ進める。
この図7(a)のフローチャートの処理において、図7(b)に示すように、ある状態ノードの組合せの状態において、予め実行される順番(イベント番号)がイベントテーブル設定されているイベントを、関数Bにより順次実行していく処理を、展開部2が関数Aの処理により制御している。
次に、展開部2における関数Bの処理について、図8(a)のフローチャートにより説明する。
展開部2は、イベントtmpeventが実行されることによって状態ノードが変更される状態遷移ラベルの全てとその状態遷移に含まれる遷移前の状態ノードと遷移後の状態ノードの値を状態遷移モデルから検出し、状態遷移tmpmoveとして一時的に記憶しておく(処理B1)。例えば、イベントAUTH_SUCCESS1のtmpmoveには、状態遷移ラベル「LABEL_AUTH1」をOFFからONに遷移させることが記憶されている。
そして、展開部2は、関数Cにより、イベントtmpeventを実行することにより、上記一覧テーブルを参照して、状態遷移tmpmoveに対応した状態ノードの値の変更を行い、変更された値をnewstatesへ上書きする(処理B2、この処理B2の詳細は後述)。
次に、展開部2は処理B2の関数Cの処理において、イベントtmpeventの処理が成功した場合、true信号を出力し、処理を処理B3へ進める。
これにより、展開部2は、一覧テーブルを参照して、状態遷移tmpmoveが全て実行されたか否かを検出し(処理B3)、全て実行されたことを検出すると処理を処理B4へ進め、一方全て実行されていないことを検出すると、処理を処理B2へ進め、実行されていない状態遷移tmpmoveの実行を行う。
そして、展開部2は、処理B3にて状態遷移tmpmoveが全て実行されたことを検出すると、true信号を出力し(処理B4)、処理を図7(a)の処理A7へ進める。
一方、展開部2は処理B2の関数Cの処理において、イベントtmpeventの処理が失敗した場合、false信号を出力し処理を処理B5へ進める。
そして、展開部2は関数Cの処理においてfalse信号が出力されると、このfalse信号を出力し(処理B5)、処理を図7(a)における処理A5へ進める。
ここで、展開部2は、図8(b)に示すように、上記関数Bの処理において、状態遷移tmpmoveを1つずつ処理し、イベントtmpeventにおいて実行される各状態ノードの状態遷移tmpmoveが全て終了、すなわち変更される状態ノードが全て変更されて、状態遷移が全て成功した場合、関数Bの処理結果の出力としてtrue信号を出力する。
次に、展開部2における関数Cの処理について、図9(a)のフローチャートにより説明する。
展開部2は、状態遷移モデルから実行するイベントtmpeventにおいて、実行するイベントに対応して、このイベントによる状態ノードの変換を実行する条件として設定されている事前条件tmpconstraintを抽出し、抽出された事前条件tmpconstraintが記載された事前条件テーブルを一覧として生成し(処理C1)、1つでも事前条件tmpconstraintが存在する場合、処理を処理C2へ進め、1つも事前条件tmpconstraintが検出されない場合、処理を処理C3へ進める。
次に、展開部2は、事前条件が検出された状態ノードにおいて、現在の状態ノードの値の状態tmpstatesが事前条件に設定されている状態ノードの値の組合せと同一であるか否かの検出を行い(処理C2)、1つでも満足しない事前条件tmpconstraintが検出された場合、処理を処理C11へ進め、一方、事前条件tmpconstraintを全て満足することが検出された場合、処理を処理C3へ進める。
展開部2は、1つでも満足しない事前条件tmpconstraintの状態ノードが検出された場合、false信号を出力し(処理C11)、処理を図8(a)の処理B5へ進める。
一方、展開部2は、事前条件tmpconstraintを全て満足することが検出された場合、あるいは処理C1にて1つも事前条件tmpconstraintが検出されなかった場合、状態遷移tmpmoveの状態遷移前の状態を状態遷移モデルから抽出し、遷移前状態prestatesに設定し、状態遷移後の状態を同様に状態遷移モデルから抽出し、遷移後状態poststatesに設定し(処理C3)、処理を処理C4へ進める。
次に、展開部2は、現在のtmpstatesが遷移前状態prestatesを有しているか否かの検出を行い(処理C4)、現在のtmpstatesが遷移前状態prestatesを有していることが検出された場合、処理を処理C5へ進め、一方、現在のtmpstatesが遷移前状態prestatesを有していないことが検出された場合、処理を処理C11へ進める。
そして、展開部2は、現在のtmpstatesが遷移前状態prestatesを有していることが検出された場合、poststatesに記載された状態ノードの値がtmpstatesに上書きされた状態を、次の状態newstatesとして記録して設定し(処理C5)、処理を処理C6へ進める。
次に、展開部2は、次の状態newstatesにおける状態ノードの値の組合せが、履歴記憶部6に記憶されている状態ノードの値の組合せの中に存在するか否かを検出し(処理C6)、一致する値の組合せが検出された場合、すでに検出された状態のため処理を処理C11へ進め、一方、一致する値の組合せが検出されない場合、未検証の状態として処理を処理C7へ進める。
そして、展開部2は、状態遷移tmpmoveの後の状態ノードの値の変更により起動される事後イベントを、この状態遷移される状態ノードにより状態遷移モデルから抽出し、各状態ノードに対応して、事後イベントposteventの一覧である事後イベントテーブルを生成し(処理C7)、1つでも事後イベントposteventが存在する場合、処理を処理C8へ進め、1つも事後イベントが存在しない場合、処理をC10へ進める。
次に、展開部2は、関数Bの処理により、すでに説明した図8のフローチャートの処理により、イベントの実行と同様に、事後イベントの実行を行い(処理C8)、実行結果として事後イベントposteventの実行に失敗した場合、false信号を出力して処理を処理C11へ進め、事後イベントposteventの実行に成功した場合、true信号を出力して処理を処理C9へ進める。
展開部2は、処理C8において事後イベントposteventの実行に成功した場合、事後イベントテーブルにある全ての事後イベントposteventの処理が終了したか否かを検出し(処理C9)、全ての事後イベントが終了していることを検出した場合、処理を処理C10へ進め、一方、全ての事後イベントが終了していないことを検出した場合、処理を処理C8へ進める。
そして、展開部2は、全ての事後イベントが終了していないことを検出した場合、あるいは処理C7において1つも事後イベントposteventが存在していない場合、true信号を出力し(処理C10)、処理を図8(a)の処理B3へ進める。
これにより、図9(b)に示すように、展開部2は、関数Cにおいてイベントを実行する際、各状態ノードの状態遷移を行う際に事前条件の有無を検出し、事前条件があれば事前条件が満足されるか否かを検出し、条件が満足されてイベントが実行され、状態遷移がなされた後、この状態ノードの変更により事後イベントの実行をイベントと同様の処理により行うこととなる。
次に、図1の仕様欠陥検証システムが図6〜図9のフローチャートにより、実際に仕様の欠陥の検証を行う処理を、図10〜図18を用い動作の一例を説明する。図10は存在する状態及び選択されるノードを説明する概念図であり、図11、図12、図13、図14、図15、図16、図17、図18は動作フローを時系列(上部から順に)に記載したフロー図を示すものである。
上記図11〜図18においては、奇数番号の図にて、各欄が左からメインルーチン(図6の各処理に対応)、関数A(図7の各処理に対応)、関数B(図8の各処理に対応)、関数C(図9の各処理に対応)、事後イベントの関数B(図8の各処理に対応)、事後イベントの関数C(図9の各処理に対応)、処理、処理内容及び処理結果、スタック領域記憶部9のスタック(上部が先頭となる)内の状態ノード及びイベント番号となっている。
例として用いる状態遷移モデルは、図3に示す各状態遷移ラベルから構成されるものとする。また、リスクファイル記憶部7には、図5に示すように、「起こるべきではない状態」を示すリスク状態がリスクIDに対応して、リスク集合として記憶されている。また、実行されるイベントは、図4に示すように、イベントIDに対応して記憶されている。また、図19及び図20には、各処理の深さにおいて成功するイベントに対応し、状態遷移後の状態ノードの組み合わせと実行されたイベント番号とが、スタック記憶領域記憶部9にプッシュされていく過程が記載されている。
<図10における深さ1の処理(図11参照)>
深さ=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)。
ここで、検証部3は、現在の状態における状態ノードの値の組み合わせが、リスクファイル記憶部7のリスク集合に含まれている状態ノードの値の組み合わせのいずれかと一致するか否かの検出を行う(処理6)が、いずれにも対応しないため、関数Aを読み出して処理7へ処理を進める。
処理が処理7に移行すると、展開部2は、上記関数Aの処理により、現在の状態ノードの値の組み合わせstatesと、イベント番号{node}とを、内部の作業用メモリtmpstates及びtmpnodeに対してそれぞれ記憶させる(処理A1)。
そして、展開部2は、tmpnode(=1)のイベント番号{node}に対応するイベントであるtmpevent(AUTH_SUCCESS1)を取得し(処理A2)、newstatesを初期化し(処理A3)、関数Bを読み出して処理を処理A4へ進める。
次に、展開部2は、イベントtmpevent(AUTH_SUCCESS1)に関連する状態ノード全ての状態遷移tmpmoveの一覧を遷移状態モデルから抽出して取得し(処理B1)、関数Cを読み出し処理を処理B2へ進める。この処理B1において、イベントtmpevent(AUTH_SUCCESS1)に対応する状態遷移tmpmoveは、LABEL_AUTH1の状態ノードをOFFからONへ移行することが示されている。また、イベントtmpevent(AUTH_SUCCESS1)には事前条件及び事後イベントが設定されていない。
処理が処理B2に遷移すると、展開部2は、状態遷移tmpmoveに記載された状態ノードの値の遷移が行われるための事前条件tmpconstrainの事前条件テーブルを取得し(処理C1)、事前条件が設定されている状態ノードの有無を検出する(処理C2)が、事前条件が検出されないため、処理を処理C3へ進める。
そして、展開部2は、状態遷移tmpmoveにおける状態遷移前の状態ノードの値を取得してprestate(=OFF)に設定し、状態遷移後の状態ノードの値を取得してpoststate(=ON)に設定する(処理C3)。
展開部2は、現在の状態ノードの値(OFF)が、prestate(=OFF)と一致しているか否かを検出し(処理C4)、一致しているため処理を処理C5へ進める。
次に、展開部2は、poststateの示す状態遷移ラベルの状態ノードを、tmpstatesに上書きした状態ノードの値をnewstates{AUTH1,AUTH2,LIFECYCLE,ADMINFILE,USERFILE}={ON,OFF,ISSUE,NOT,NOT}として設定する(処理C5)。
そして、展開部2は、次の状態newstatesが履歴記憶部6のhistoryに記憶されている状態ノードの組み合わせでないかどうかの検出を行い(処理C6)、この状態ノードの組み合わせが履歴記憶部6のhistoryに記憶されていないため、処理を処理7へ進める。
展開部2は、状態遷移tmpmove後に起動する事後イベントを状態遷移モデルから抽出し、事後イベントテーブルを生成する(処理C7)、事後イベントが存在しないため、処理を処理C10へ進める。
そして、展開部2は、関数Cの処理結果として、true信号を出力し(処理C10)、処理を処理B3へ進める。
展開部2は、イベントtmpevent(AUTH_SUCCESS1)に対応する全ての状態遷移tmpmoveを実行したか否かを検出し(処理B3)、全てが終了したことを検出したため、関数Bの処理によりtrue信号を出力し処理を処理A7へ進めるにおける(処理B4)。
そして、検証部3は、関数Bのtrue信号が入力されると、関数Aの処理としてtrue信号を出力し(処理A7)、該関数Aからtrue信号が出力されたため、newstatesの状態ノードの値とtmpnodeのイベント番号(=1)とをスタックST及びNDへそれぞれプッシュして記憶させる(処理8−b)。このとき、スタック領域記憶部9には、図19(a)に示す深さ1のように、初期状態のノード状態の組み合わせと、イベント「AUTH_SUCCESS1」の実行により状態遷移が実行された結果の状態ノードの組み合わせとが記憶されている。
<図10における深さ2の処理(図12及び図13参照)>
次に、検証部3は、スタックが空か否かを検出し(処理3)、空でないことを検出し、処理8−bを通過しているため、深さ=1から深さ=2へ処理の対象が移行することとなるので、スタックSTから読み出した状態ノードの値の組み合わせと、スタックNDから読み出したイベント番号(=1)とを、状態管理記憶部8へ記憶させる(処理4−1)。
そして、検証部3は、処理4−1にて状態管理記憶部8へ記憶した現在の状態{AUTH1,AUTH2,LIFECYCLE,ADMINFILE,USERFILE}を、履歴記憶部6historyに記憶する(処理5)。
ここで、検証部3は、深さ=1の場合と同様に、現在の状態における状態ノードの値の組み合わせが、リスクファイル記憶部7のリスク集合に含まれている状態ノードの値の組み合わせのいずれかと一致するか否かの検出を行う(処理6)が、いずれにも対応しないため、関数Aを読み出して処理7へ処理を進める。
処理が処理7に移行すると、展開部2は、上記関数Aの処理により、現在の状態ノードの値の組み合わせstatesと、イベント番号{node}とを、内部の作業用メモリtmpstates及びtmpnodeに対してそれぞれ記憶させる(処理A1)。
そして、展開部2は、tmpnode(=1)のイベント番号{node}に対応するイベントであるtmpevent(AUTH_SUCCESS1)を取得し(処理A2)、newstatesを初期化し(処理A3)、関数Bを読み出して処理を処理A4へ進める。
次に、展開部2は、イベントtmpevent(AUTH_SUCCESS1)に関連する状態ノード全ての状態遷移tmpmoveの一覧を遷移状態モデルから抽出して取得し(処理B1)、関数Cを読み出し処理を処理B2へ進める。この処理B1において、イベントtmpevent(AUTH_SUCCESS1)に対応する状態遷移tmpmoveは、状態遷移ラベル「LABEL_AUTH1」の状態ノードをOFFからONへ移行することが示されている。また、イベントtmpevent(AUTH_SUCCESS1)には事前条件及び事後イベントが設定されていない。
処理が処理B2に移行すると、展開部2は、状態遷移tmpmoveに記載された状態ノードの値の遷移が行われるための事前条件tmpconstrainの事前条件テーブルを取得し(処理C1)、事前条件が設定されている状態ノードの有無を検出する(処理C2)が、事前条件が検出されないため、処理を処理C3へ進める。
そして、展開部2は、状態遷移tmpmoveにおける状態遷移前の状態ノードの値を取得してprestate(=OFF)に設定し、状態遷移後の状態ノードの値を取得してpoststate(=ON)に設定する(処理C3)。
展開部2は、現在の状態ノードの値(OFF)が、prestate(=OFF)と一致しているか否かを検出し(処理C4)、一致していないためfalse信号を出力し(処理C11)、処理を処理B5へ進める。
そして、展開部2は、false信号を出力し(処理B5)、処理を処理A5へ進める。
次に、展開部2は、tmpnodeのイベント番号をインクリメントし(処理A5)、処理を処理A6へ進める。
そして、展開部2は、このインクリメントしたtmpnodeのイベント番号{node}が予め設定しているノード数を超えたか否かの検出を行い(処理A6)、イベント番号が「2」でありノード数「6」を超えていないことを検出したため、処理を処理A2へ進める。
これにより、展開部2は、展開部2は、tmpnode(=2)のイベント番号に対応するイベントであるtmpevent(AUTH_SUCCESS2)を取得し(処理A2)、newstatesを初期化し(処理A3)、関数Bを読み出して処理を処理A4へ進める。
次に、展開部2は、イベントtmpevent(AUTH_SUCCESS2)に関連する状態ノード全ての状態遷移tmpmoveの一覧を遷移状態モデルから抽出して取得し(処理B1)、関数Cを読み出し処理を処理B2へ進める。この処理B1において、イベントtmpevent(AUTH_SUCCESS2)に対応する状態遷移tmpmoveは、状態遷移ラベル「LABEL_AUTH2」の状態ノードをOFFからONへ移行することが示されている。また、イベントtmpevent(AUTH_SUCCESS2)には事後イベントが設定されていないが、事前条件としてLABEL_LIFECYCLE=USAGEであることが設定されている。
処理が処理B2に遷移すると、展開部2は、状態遷移tmpmoveに記載された状態ノードの値の遷移が行われるための事前条件tmpconstrainの事前条件テーブルを取得し(処理C1)、事前条件が設定されている状態ノードの有無を検出し、かつ事前条件が満足されているか否かを検出する(処理C2)が、事前条件LABEL_LIFECYCLE=USAGEが検出され、現在、LABEL_LIFECYCLE=ISSUEであるため、事前条件を満足していないことを検出したため、false信号を出力して処理を処理C11へ進める。
これにより、展開部2は、false信号を出力し(処理C11)、処理を処理B5へ進める。
そして、展開部2は、false信号を出力し(処理B5)、処理を処理A5へ進める。
次に、展開部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は、イベントtmpevent(READ_ADMINFILE)に関連する状態ノード全ての状態遷移tmpmoveの一覧を遷移状態モデルから抽出して取得し(処理B1)、関数Cを読み出し処理を処理B2へ進める。この処理B1において、イベントtmpevent(READ_ADMINFILE)に対応する状態遷移tmpmoveは、状態遷移ラベル「LABEL_ADMINFILE」の状態ノードをNOTからREADへ移行することが示されている。また、イベントtmpevent(READ_ADMINFILE)には事後イベントが設定されていないが、事前条件としてLABEL_AUTH1=ON、LABEL_LIFECYCLE=ISSUEであることが設定されている。
処理が処理B2に遷移すると、展開部2は、状態遷移tmpmoveに記載された状態ノードの値の遷移が行われるための事前条件tmpconstrainの事前条件テーブルを取得し(処理C1)、事前条件が設定されている状態ノードの有無を検出し、かつ事前条件が満足されているか否かを検出する(処理C2)が、事前条件LABEL_AUTH1=ON、LABEL_LIFECYCLE=ISSUEが検出され、現在、LABEL_AUTH1=ONかつLABEL_LIFECYCLE=ISSUEであるため、事前条件を満足していることを検出したため、処理を処理C3へ進める。
そして、展開部2は、状態遷移tmpmoveにおける状態遷移前の状態ノードの値を取得してprestate(=NOT)に設定し、状態遷移後の状態ノードの値を取得してpoststate(=READ)に設定する(処理C3)。
展開部2は、現在の状態ノードの値(NOT)が、prestate(=NOT)と一致しているか否かを検出し(処理C4)、一致しているため処理を処理C5へ進める。
次に、展開部2は、poststateの示す状態遷移ラベルの状態ノードを、tmpstatesに上書きした状態ノードの値をnewstates{AUTH1,AUTH2,LIFECYCLE,ADMINFILE,USERFILE}={ON,OFF,ISSUE,READ,NOT}として設定する(処理C5)。
そして、展開部2は、次の状態newstatesが履歴記憶部6のhistoryに記憶されている状態ノードの組み合わせに存在するか否かの検出を行い(処理C6)、この状態ノードの組み合わせが履歴記憶部6のhistoryに記憶されていないため、処理を処理C7へ進める。
展開部2は、状態遷移tmpmove後に起動する事後イベントを状態遷移モデルから抽出し、事後イベントテーブルを生成する(処理C7)、事後イベントが存在しないため、処理を処理C10へ進める。
そして、展開部2は、関数Cの処理結果として、true信号を出力し(処理C10)、処理を処理B3へ進める。
展開部2は、イベントtmpevent(AUTH_SUCCESS1)に対応する全ての状態遷移tmpmoveを実行したか否かを検出し(処理B3)、全てが終了したことを検出したため、関数Bの処理によりtrue信号を出力し処理を処理A7へ進めるにおける(処理B4)。
そして、検証部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の検証処理が行われる。
<図10の深さ3における事後イベントの処理(図14及び図15を参照)>
上述したように、深さ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は、イベントtmpevent(CHANGE_LIFECYCLE1)に関連する状態ノード全ての状態遷移tmpmoveの一覧を遷移状態モデルから抽出して取得し(処理B1)、関数Cを読み出し処理を処理B2へ進める。この処理B1において、イベントtmpevent(CHANGE_LIFECYCLE1)に対応する状態遷移tmpmoveは、状態遷移ラベルLABEL_LIFECYCLE」の状態ノードをISSUEからUSAGEへ移行することが示されている。また、イベントtmpevent(CHANGE_LIFECYCLE1)には事後イベントRESET_KEY1が設定され、事前条件としてLABEL_AUTH1=ONであることが設定されている。
処理が処理B2に遷移すると、展開部2は、状態遷移tmpmoveに記載された状態ノードの値の遷移が行われるための事前条件tmpconstrainの事前条件テーブルを取得し(処理C1)、事前条件が設定されている状態ノードの有無を検出し、かつ事前条件が満足されているか否かを検出する(処理C2)が、事前条件LABEL_AUTH1=ONが検出され、現在、LABEL_AUTH1=ONであるため、事前条件を満足していることを検出したため、処理を処理C3へ進める。
そして、展開部2は、状態遷移tmpmoveにおける状態遷移前の状態ノードの値を取得してprestate(=ISSUE)に設定し、状態遷移後の状態ノードの値を取得してpoststate(=USAGE)に設定する(処理C3)。
展開部2は、現在の状態ノードの値(ISSUE)が、prestate(=ISSUE)と一致しているか否かを検出し(処理C4)、一致しているため処理を処理C5へ進める。
次に、展開部2は、poststateの示す状態遷移ラベルの状態ノードを、tmpstatesに上書きした状態ノードの値をnewstates{AUTH1,AUTH2,LIFECYCLE,ADMINFILE,USERFILE}={ON,OFF,USAGE,READ,NOT}として設定する(処理C5)。
そして、展開部2は、次の状態newstatesが履歴記憶部6のhistoryに記憶されている状態ノードの組み合わせと一致するか否かの検出を行い(処理C6)、一致するものが検出されず、この状態ノードの組み合わせが履歴記憶部6のhistoryに記憶されていないため、処理を処理7へ進める。
展開部2は、状態遷移tmpmove後に起動する事後イベントを状態遷移モデルから抽出し、事後イベントテーブルを生成する(処理C7)、事後イベントRESET_KEY1が存在するため、処理を処理C8へ進める。
これにより、展開部2は、関数Bを読み出し、イベントtmpevent(RESET_KEY1)に関連する状態ノード全ての状態遷移tmpmoveの一覧を遷移状態モデルから抽出して取得し(処理B1)、関数Cを読み出し処理を処理B2へ進める。この処理B1において、イベントtmpevent(RESET_KEY1)に対応する状態遷移tmpmoveは、状態遷移ラベル「LABEL_AUTH1」の状態ノードをONからOFFに移行する状態遷移と、状態遷移ラベル「LABEL_ADMINFILE」の状態ノードをREADからNOT_READに移行する状態遷移とが示されている。
処理が処理B2に移行し、展開部2は、状態遷移tmpmoveの一覧から状態遷移ラベル「LABEL_AUTH1」の状態ノードをONからOFFに移行する状態遷移を実行する。状態ノードの値の状態遷移が行われるための事前条件tmpconstrainの事前条件テーブルを取得し(処理C1)、事前条件が設定されている状態ノードの有無を検出し、かつ事前条件が満足されているか否かを検出する(処理C2)が、事前条件が設定されてないことが検出されたため、処理を処理C3へ進める。
そして、展開部2は、状態遷移tmpmoveにおける状態遷移前の状態ノードの値を取得してprestate(=ON)に設定し、状態遷移後の状態ノードの値を取得してpoststate(=OFF)に設定する(処理C3)。
展開部2は、現在の状態ノードの値(ON)が、prestate(=ON)と一致しているか否かを検出し(処理C4)、一致しているため処理を処理C5へ進める。
次に、展開部2は、poststateの示す状態遷移ラベルの状態ノードを、tmpstatesに上書きした状態ノードの値をnewstates{AUTH1,AUTH2,LIFECYCLE,ADMINFILE,USERFILE}={OFF,OFF,USAGE,READ,NOT}として設定する(処理C5)。
そして、展開部2は、次の状態newstatesが履歴記憶部6のhistoryに記憶されている状態ノードの組み合わせと一致するか否かの検出を行い(処理C6)、一致するものが検出されず、この状態ノードの組み合わせが履歴記憶部6のhistoryに記憶されていないため、処理を処理C7へ進める。
展開部2は、状態遷移tmpmove後に起動する事後イベントを状態遷移モデルから抽出し、事後イベントテーブルを生成する(処理C7)、事後イベントが存在しないため、処理を処理C10へ進める。
そして、展開部2は、関数Cの処理結果として、true信号を出力し(処理C10)、処理を処理B3へ進める。
次に、展開部2は、イベントtmpevent(reset_key1)に対応するtmpmoveが全て実行されたか否かを検出し(処理B3)、まだ状態遷移ラベル「LABEL_ADMINFILE」の状態ノードをREADからNOT_READに移行する状態遷移が実行されていないため、処理B2に移る。
そして、展開部2は、状態遷移ラベル「LABEL_ADMINFILE」の状態ノードをREADからNOT_READに移行させる状態遷移を関数Cにより実行する。処理内容は、すでに説明したものと同様であるため、詳細な説明を省略する。展開部2は、この処理の関数Cが出力する処理結果としてのnewstatesの状態ノード値を、newstates{AUTH1,AUTH2,LIFECYCLE,ADMINFILE,USERFILE}={OFF,OFF,ISSUE,READ,NOT}として設定し、true信号を出力し、処理をB3へ進める。
ここで、展開部2は、全てのtmpmoveが実行されたため、関数Bの処理によりtrue信号を出力し、処理を処理A7へ進める。
そして、検証部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(e)に示す深さ5においては、tmpnodeのイベントIDが「2」の場合、イベントtmpevent(=AUTH_SUCCESS2)により、状態遷移が実行され、状態遷移ラベル「LABEL_AUTH2」の状態ノードがOFFからONに遷移する。このとき、スタック領域記憶部9には、図19(e)に示す深さ5のように、{ON,ON,ISSUE,NOT,NOT,2}がプッシュされて記憶される。
図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(g)に示す深さ7においては、tmpnodeのイベントIDが「6」の場合、イベントtmpevent(=CHANGE_LIFECYCLE2)による状態遷移と、その事後イベントRESET_KEY2による状遷移とが実行され、状態遷移ラベル「LABEL_LIFECYCLE」の状態ノードがUSAGEからISSUEに遷移し、また状態遷移ラベル「LABEL_USERFILE」の状態ノードがREADからNOT_READに遷移する。このとき、スタック領域記憶部9には、図19(g)に示す深さ7のように、{ON,ON,ISSUE,NOT,NOT,6}がプッシュされて記憶される。
図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}がプッシュされて記憶される。
<図10の深さ10において、状態ノードの組合せがリスクで検出される処理(図16参照)>
また、状態管理記憶部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は、処理4−1にて状態管理記憶部8へ記憶した現在の状態{AUTH1,AUTH2,LIFECYCLE,ADMINFILE,USERFILE}を、履歴記憶部6のhistoryに記憶する(処理5)。
ここで、検証部3は、現在の状態における状態ノードの値の組み合わせが、リスクファイル記憶部7のリスク集合に含まれている状態ノードの値の組み合わせのいずれかと一致するか否かの検出を行い(処理6)、リスクR4の{LABEL_LIFECYCLE,LABEL_USERFILE}={ISSUE,READ}に対応していることが検出されたため、処理を処理9へ進める。
そして、検証部3は、現在のスタックST及びスタックNDの全てを内部のriskファイルにリスク到達履歴として追加書き込みして記憶する(処理9)。
最終的に、全ての検証が終了した際、検証部3は、出力部4を介して結果リストとして、上記riskファイルを出力する。
このスタック領域記憶部9のRISKLOGにより、イベントをどの順序にて実行した場合に、リスクに到達するのかを知ることができる。
続いて、関数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}がプッシュされて記憶される。
<図10の深さ11におけるスタックからのポップ処理(図17及び図18参照)>
次に、スタックに対してプッシュされた状態ノードの組み合わせ及びイベント番号{node}がポップされる動作について深さ=11において説明する。添付したフローチャートにおいては、深さ=11において、イベント番号{node}が「6」までのイベント全てが実行できないとして説明している。
上記処理をイベント番号{node}が「5」のイベント(CHANGE_LIFECYCLE1)により得られるnewstatesがすでにスタックSTに記憶されている状態ノードの組み合わせに存在するため、処理A5に処理が戻った時点から説明する。
展開部2は、tmpnodeのイベント番号{node}をインクリメントし、(処理A5)、処理を処理A6へ進める。
そして、展開部2は、このインクリメントしたtmpnodeのイベント番号{node}が予め設定しているノード数を超えたか否かの検出を行い(処理A6)、イベント番号{node}が「6」でありノード数「6」を超えていないことを検出したため、処理を処理A2へ進める。
これにより、展開部2は、tmpnode(=2)のイベント番号{node}に対応するイベントであるtmpevent(CHANGE_LIFECYCLE2)を取得し(処理A2)、newstatesを初期化し(処理A3)、関数Bを読み出して処理を処理A4へ進める。
次に、展開部2は、イベントtmpevent(CHANGE_LIFECYCLE2)に関連する状態ノード全ての状態遷移tmpmoveの一覧を遷移状態モデルから抽出して取得し(処理B1)、関数Cを読み出し処理を処理B2へ進める。この処理B1において、イベントtmpevent(CHANGE_LIFECYCLE2)に対応する状態遷移tmpmoveは、CHANGE_LIFECYCLE2の状態ノードをUSAGEからISSUEへ移行することが示されている。また、イベントtmpevent(CHANGE_LIFECYCLE2)には事後イベントRESET_KEY1が設定され、事前条件としてLABEL_AUTH1=ONであることが設定されている。
処理が処理B2に遷移すると、展開部2は、状態遷移tmpmoveに記載された状態ノードの値の遷移が行われるための事前条件tmpconstrainの事前条件テーブルを取得し(処理C1)、事前条件が設定されている状態ノードの有無を検出し、かつ事前条件が満足されているか否かを検出する(処理C2)が、事前条件LABEL_AUTH1=ONが検出され、現在、LABEL_AUTH1=ONであるため、事前条件を満足していることを検出したため、処理を処理C3へ進める。
そして、展開部2は、状態遷移tmpmoveにおける状態遷移前の状態ノードの値を取得してprestate(=USAGE)に設定し、状態遷移後の状態ノードの値を取得してpoststate(=ISSUE)に設定する(処理C3)。
展開部2は、現在の状態ノードの値(ISSUE)が、prestate(=USAGE)と一致しているか否かを検出し(処理C4)、一致していないことを検出したため処理を処理C11へ進める。
これにより、展開部2は、false信号を出力し(処理C11)、処理を処理B5へ進める。
そして、展開部2は、false信号を出力し(処理B5)、処理を処理A5へ進める。
次に、展開部2は、tmpnodeのイベント番号{node}をインクリメントし(処理A5)、処理を処理A6へ進める。
そして、展開部2は、このインクリメントしたtmpnodeのイベント番号{node}が予め設定しているノード数を超えたか否かの検出を行い(処理A6)、イベント番号{node}が「7」でありノード数「6」を超えたことを検出したため、処理を処理A8へ進める。
これにより、展開部2は、false信号を出力し(処理A8)、処理を8−aへ進める。
次に、検証部3は、スタックST及びスタックNDの先頭に記憶されている状態ノードの組み合わせ{OFF,ON,ISSUE,NOT,READ}とイベント番号{node}の「5」とをポップして削除する(処理8−a)。
ここで、深さ=11の処理から深さ=10の処理に戻り、検証部3は、スタックの各領域が空であるか否かを検出し(処理3)、処理8−aを通過してきているため、ポップして削除したスタックSTの先頭にあった状態の組み合わせ{OFF,ON,USAGE,NOT,READ}と、スタックNDの先頭にあったイベント番号{5}をインクリメント(1を加算)した値とを、状態管理記憶部8に現在の状態として記憶する(処理4−2、図10(l))。
そして、検証部3は、処理4にて状態管理記憶部8へ記憶した現在の状態{AUTH1,AUTH2,LIFECYCLE,ADMINFILE,USERFILE}を、履歴記憶部6historyに記憶する(処理5)。
後述する処理についてはすでに説明しているため省略する。
上述したように、本実施形態によれば、製品の仕様を状態遷移モデルとして記述し、「起こるべきではない状態」をリスク集合としてリスクファイル記憶部7に記憶され、外部からイベントを与え、このイベントにより状態遷移後の、状態ノードの組み合わせがリスク集合に含まれているか否かを検証することにより、仕様欠陥を設計段階レベルにて無くすことが可能な仕様欠陥検証システムを提供することができる。また、状態遷移には、外部から与えられるイベントのみでなく、状態遷移による状態ノードの変更に伴い起動される事後イベントによる状態遷移を含むため、全ての状態遷移を網羅して製品仕様を検証することができる。
なお、図1における仕様欠陥検証システムの機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することにより、設計段階における仕様欠陥検証の処理を行ってもよい。なお、ここでいう「コンピュータシステム」とは、OSや周辺機器等のハードウェアを含むものとする。また、「コンピュータシステム」は、ホームページ提供環境(あるいは表示環境)を備えたWWWシステムも含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ROM、CD−ROM等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ(RAM)のように、一定時間プログラムを保持しているものも含むものとする。
また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク(通信網)や電話回線等の通信回線(通信線)のように情報を伝送する機能を有する媒体のことをいう。また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル(差分プログラム)であっても良い。
本発明の一実施形態による仕様欠陥検証システムの構成例を示すブロック図である。 図1のモデル記憶部5に記憶されている状態遷移モデルを構成する状態遷移ラベルの一例を示す概念図である。 図2における各状態遷移ラベルの構成を示すテーブルである。 イベントIDとイベント名との対応関係を示すイベントテーブルの構成例を示す図である。 図3の状態遷移モデルに対応するリスク状態と判定される状態ノードの組み合わせと、各リスク状態の組み合わせを示すリスクIDとの対応を示すリスクテーブルの構成例を示す図である。 図1の仕様欠陥検証システムの動作例を示すフローチャートである。 図1の仕様欠陥検証システムの動作例を示すフローチャートである。 図1の仕様欠陥検証システムの動作例を示すフローチャートである。 図1の仕様欠陥検証システムの動作例を示すフローチャートである。 図1の仕様欠陥検証システムの実施形態の図9〜図105の検証例における検証の深さと各深さにおけるイベントのイベント番号との関係を示す概念図である。 図1の仕様欠陥検証システムの実施形態による検証例のフローを示すテーブルである。 図1の仕様欠陥検証システムの実施形態による検証例のフローを示すテーブルである。 図1の仕様欠陥検証システムの実施形態による検証例のフローを示すテーブルである。 図1の仕様欠陥検証システムの実施形態による検証例のフローを示すテーブルである。 図1の仕様欠陥検証システムの実施形態による検証例のフローを示すテーブルである。 図1の仕様欠陥検証システムの実施形態による検証例のフローを示すテーブルである。 図1の仕様欠陥検証システムの実施形態による検証例のフローを示すテーブルである。 図1の仕様欠陥検証システムの実施形態による検証例のフローを示すテーブルである。 各処理の深さにおいて成功するイベントに対応し、状態遷移後の状態ノードの組み合わせと実行されたイベント番号とが、スタック記憶領域記憶部9にプッシュされていく過程を示す概念図である。 各処理の深さにおいて成功するイベントに対応し、状態遷移後の状態ノードの組み合わせと実行されたイベント番号とが、スタック記憶領域記憶部9にプッシュされていく過程を示す概念図である。
符号の説明
1…初期設定部
2…展開部
3…検証部
4…出力部
5…モデル記憶部
6…履歴記憶部
7…リスクファイル記憶部
8…状態管理記憶部
9…スタック領域記憶部

Claims (10)

  1. 設計対象のシステムの仕様をイベントの発生に伴う状態ノードの変更による状態遷移の複数の組み合わせとして記述した状態遷移モデルとし、前記イベントに基づく状態遷移のシミュレーションにより、該設計対象のシステムの仕様を検証する仕様欠陥検証システムであって、
    前記状態遷移モデルが記憶されているモデル記憶部と、
    前記状態遷移モデルの状態ノードの状態において、発生してはいけない状態ノードの組合せを示すリスクファイルが記憶されたリスクファイル部と、
    該モデル記憶部から前記状態遷移モデルを読み出し、該状態遷移モデルから、イベント、及び該イベントによる状態ノードの遷移前後の状態を示す状態情報を読み出す初期設定部と、
    前記イベントを順次実行し、所定の条件を満たす場合に前記状態情報に応じて状態ノードの状態を変更し、状態遷移モデルにおける状態遷移を行う展開部と、
    前記展開部の前記イベントの実行により状態ノードの状態が変更された場合、遷移後の状態ノードの状態及びイベントとを状態遷移モデルから抽出し、遷移後の状態ノードの状態がリスクファイル部に記憶されている発生してはいけない状態ノードの組合せに一致するか否かを検出し、一致した場合に仕様欠陥として出力する検証部と
    を有することを特徴とする仕様欠陥検証システム。
  2. 前記仕様欠陥検証システムがさらにスタック領域記憶部を有し、
    前記展開部が、前記状態遷移モデルの初期状態の状態ノードの組み合わせと、イベントの実行により状態ノードの状態が変更された場合の遷移後の状態ノードの組み合わせ及びイベントとを前記スタック領域記憶部にプッシュする
    ことを特徴とする請求項1に記載の仕様欠陥検証システム。
  3. 前記状態遷移モデルが前記イベントを実行したときに前記状態ノードの値を変更する条件として、前記状態ノードの値を事前条件として有しており、
    前記展開部がイベントの実行時における状態ノードの値が前記事前条件に一致する場合、イベントに対応して状態ノードの値を変更して状態遷移を行うことを特徴とする請求項1または請求項2に記載の仕様欠陥検証システム。
  4. 前記展開部が、前記イベントの実行による状態遷移モデルにおける状態遷移が行われた場合、遷移した状態を示す状態情報を、時系列に記憶する履歴管理記憶部をさらに有することを特徴とする請求項1から請求項3のいずれかに記載の仕様欠陥検証システム。
  5. 前記展開部は、遷移後の状態の組み合わせと前記履歴管理記憶部に記憶されている状態ノードの組み合わせとが一致した場合、対応するイベントの状態遷移を行わないことを特徴とする請求項4記載の仕様欠陥検証システム。
  6. 前記状態遷移モデルが、状態ノードの変化に対応して実行される事後イベントを有していることを特徴とする請求項1から請求項5のいずれかに記載の仕様欠陥検証システム。
  7. 前記検証部が状態遷移後の状態ノードの組み合わせと、前記リスクファイル部に記憶されている発生してはいけない状態ノードの組合せとが一致した場合、前記スタック領域記憶部に記憶されている各状態における状態ノードの組み合わせとイベントとを出力することを特徴とする請求項2から請求項6のいずれかに記載の仕様欠陥検証システム。
  8. 前記展開部が、ある状態遷移における状態ノードの組み合わせにおいて、全てのイベントが実行され、状態遷移が行われなかった場合、前記スタック領域記憶部の最上部のイベントの組み合わせをポップし、その前の状態で未実行のイベントを実行することを特徴とする請求項2から請求項7のいずれかに記載の仕様欠陥検証システム。
  9. 設計対象のシステムの仕様をイベントの発生に伴う状態ノードの変更による状態遷移の複数の組み合わせとして記述した状態遷移モデルとし、前記イベントに基づく状態遷移のシミュレーションにより、該設計対象のシステムの仕様を検証する仕様欠陥検証方法であって、
    初期設定部が状態遷移モデルが記憶されているモデル記憶部から前記状態遷移モデルを読み出し、該状態遷移モデルから、イベント、及び該イベントによる状態ノードの遷移前後の状態を示す状態情報を読み出す過程と、
    展開部が前記イベントを順次実行し、所定の条件を満たす場合に前記状態情報に応じて状態ノードの状態を変更し、状態遷移モデルにおける状態遷移を行う過程と、
    検証部が前記展開部の前記イベントの実行により状態ノードの状態が変更された場合、遷移後の状態ノードの状態及びイベントとを状態遷移モデルから抽出し、前記状態遷移モデルの状態ノードの状態において発生してはいけない状態ノードの組合せを示すリスクファイルが記憶されたリスクファイル部に記憶されている発生してはいけない状態ノードの組合せと、前記遷移後の状態ノードの状態が一致するか否かを検出し、一致した場合に仕様欠陥として出力する過程と
    を有することを特徴とする仕様欠陥検証方法。
  10. 請求項1から請求項8のいずれかに記載の仕様欠陥検証システムとして、コンピュータを機能させるためのプログラム。
JP2007244439A 2007-09-20 2007-09-20 仕様欠陥検証システム、その方法及びプログラム Active JP4759546B2 (ja)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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 状態遷移検証方法及び検証装置

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) 仕様欠陥検証システム、その方法及びプログラム
CN106991048A (zh) 网页测试方法和装置
JP2009140155A (ja) アプリケーションプログラムのテストプログラム
KR102194974B1 (ko) 프로세스 검증 기능이 구비된 전력 계통 감시 및 제어 시스템
JP5164919B2 (ja) テストデータ生成方法及び装置及びプログラム
JP5164918B2 (ja) テストデータ生成方法及び装置及びプログラム
JP2008293382A (ja) テスト仕様自動生成方式
JP2006309576A (ja) 論理システムの検証装置及び検証方法、記憶媒体及びコンピュータプログラム
JP2007140954A (ja) オペレータ擬似システムおよびオペレータ擬似方法
US20190286453A1 (en) System construction assisting apparatus, method, and program
JP5119765B2 (ja) 仕様書作成支援装置および支援方法
CN114996955A (zh) 一种云原生混沌工程实验的靶场环境构建方法及装置
KR101685299B1 (ko) 비결정적인 이벤트 처리가 가능한 프로그램의 자동 테스트 방법 및 자동 테스트 장치
JP5728979B2 (ja) 情報処理装置、ソフトウェア検査方法およびソフトウェア検査プログラム
JP2013161182A (ja) テスト項目生成装置、テスト項目生成方法
JP6949440B2 (ja) ベクタ生成装置及びベクタ生成用プログラム
Decusatis et al. Methodology for an open digital forensics model based on CAINE
CN109684870B (zh) 一种自包含的文件信息配置方法及***
JP2004326237A (ja) テストケース生成装置及びテストケース生成方法及びテストケース及びテスト方法
JPWO2018154784A1 (ja) 影響抽出装置、影響抽出プログラム及び影響抽出方法
Carranza et al. Software validation and daubert standard compliance of an open digital forensics model

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