(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-06-27
(45)【発行日】2022-07-05
(54)【発明の名称】モデル検査用スクリプト変換プログラム、モデル検査プログラム、モデル検査用スクリプト変換装置及びモデル検査装置
(51)【国際特許分類】
G06F 11/36 20060101AFI20220628BHJP
【FI】
G06F11/36 108
G06F11/36 164
(21)【出願番号】P 2018154268
(22)【出願日】2018-08-20
【審査請求日】2021-08-18
(73)【特許権者】
【識別番号】308033283
【氏名又は名称】株式会社スクウェア・エニックス
(74)【代理人】
【識別番号】100188662
【氏名又は名称】浅見 浩二
(72)【発明者】
【氏名】長谷川 勇
(72)【発明者】
【氏名】横川 智教
【審査官】多賀 実
(56)【参考文献】
【文献】韓国公開特許第10-2015-0067545(KR,A)
【文献】横川 智教 ほか,「UMLによる組込みソフトウェア設計の検証支援環境の開発」,SEC journal,独立行政法人情報処理推進機構,2015年03月01日,第10巻, 第6号,pp.10-17,ISSN 1349-8622
【文献】小形 真平 ほか,「IoTシステムアーキテクチャのモデリング記法によるモデル検査支援手法の試作と評価」,電子情報通信学会技術研究報告,一般社団法人電子情報通信学会,2017年07月12日,第117巻, 第137号,pp.25-30,ISSN 0913-5685
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/00-8/77
G06F 11/28
G06F 11/36
(57)【特許請求の範囲】
【請求項1】
ビジュアルスクリプト記法によって記述された対象データをモデル検査用のスクリプトに変換する処理をコンピュータに実現させるためのモデル検査用スクリプト変換プログラムであって、
前記コンピュータに、
前記対象データのノードグラフの各ノードの入力側に対して1つの入力変数を宣言し、各ノードの出力側に対して1つの出力変数を宣言する変数宣言機能と、
各ノードについての入力変数が、何れのノードから入力信号を受信したかを表す値をとるように、ノードグラフのエッジ接続に従って入力変数の遷移関係を定義する入力変数定義機能と、
各ノードについての出力変数が、当該ノードがいつどのように出力信号を送信するかを表すように、ノードのセマンティクスに従って出力変数の遷移関係を定義する出力変数定義機能と、
ノードのセマンティクスをモデル化するために状態遷移が必要な場合に、状態遷移ノードに対して1つの状態遷移変数を導入し、ノードのセマンティクスを状態遷移変数の遷移として記述する状態遷移変数導入機能と
を実現させることで、対象データをモデル検査用のスクリプトに変換するモデル検査用スクリプト変換プログラム。
【請求項2】
前記コンピュータに、
複数の入力がなされ1つの出力を行うノードであって副作用を生じさせることなく入力された値を適切な出力先へ出力するノードについて、当該ノードに対して入力するノードからのエッジを当該ノードの出力先のノードに接続して当該ノードを省略するノード省略機能
を実現させる請求項1記載のモデル検査用スクリプト変換プログラム。
【請求項3】
ビジュアルスクリプト記法による対象データについてモデル検査を行う処理をコンピュータに実現させるためのモデル検査プログラムであって、
前記コンピュータに、
モデル検査の対象であるビジュアルスクリプト記法による対象データを取得する対象データ取得機能と、
モデル検査において成立すべき事後条件を設定する事後条件設定機能と、
前記対象データのノードグラフにおける検査範囲を指定する検査範囲指定機能と、
請求項1又は請求項2に記載のモデル検査用スクリプト変換プログラムに基づいて、前記検査範囲指定機能において指定されたノードグラフの範囲の対象データをモデル検査用のスクリプトに変換して変換済スクリプトを出力するスクリプト変換機能と、
前記変換済スクリプトに対してモデル検査を実行するモデル検査実行機能と、
モデル検査の結果が前記事後条件について成立しているか否かの結果を出力する検査結果出力機能と
を実現させるモデル検査プログラム。
【請求項4】
前記検査結果出力機能は、前記事後条件について不成立である場合に、対象データのノードグラフを表示する表示画面において、反例として不成立の原因となったノード箇所を視覚的に視認可能に表示する手法で検査結果を出力する
請求項3記載のモデル検査プログラム。
【請求項5】
ビジュアルスクリプト記法によって記述された対象データのノードグラフの各ノードの入力側に対して1つの入力変数を宣言し、各ノードの出力側に対して1つの出力変数を宣言する変数宣言部と、
各ノードについての入力変数が、何れのノードから入力信号を受信したかを表す値をとるように、ノードグラフのエッジ接続に従って入力変数の遷移関係を定義する入力変数定義部と、
各ノードについての出力変数が、当該ノードがいつどのように出力信号を送信するかを表すように、ノードのセマンティクスに従って出力変数の遷移関係を定義する出力変数定義部と、
ノードのセマンティクスをモデル化するために状態遷移が必要な場合に、状態遷移ノードに対して1つの状態遷移変数を導入し、ノードのセマンティクスを状態遷移変数の遷移として記述する状態遷移変数導入部と
を備えるモデル検査用スクリプト変換装置。
【請求項6】
モデル検査の対象であるビジュアルスクリプト記法による対象データを取得する対象データ取得機能と、
モデル検査において成立すべき事後条件を設定する事後条件設定部と、
前記対象データのノードグラフにおける検査範囲を指定する検査範囲指定部と、
請求項5に記載のモデル検査用スクリプト変換装置に基づいて、前記検査範囲指定部において指定されたノードグラフの範囲の対象データをモデル検査用のスクリプトに変換して変換済スクリプトを出力するスクリプト変換部と、
前記変換済スクリプトに対してモデル検査を実行するモデル検査実行部と、
モデル検査の結果が前記事後条件について成立しているか否かの結果を出力する検査結果出力部と
を備えるモデル検査装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態の少なくとも1つは、ビジュアルスクリプト記法による対象データに対するモデル検査を実現するための変換するモデル検査用スクリプト変換プログラム、モデル検査プログラム、モデル検査用スクリプト変換装置及びモデル検査装置に関する。
【背景技術】
【0002】
近年、ソフトウェアのボリュームの増大や複雑化に伴って、ソフトウェアの欠陥を発見するためのモデル検査手法へのニーズが高まっている。モデル検査は、ソフトウェアを網羅的に形式検査するものであるため、ソフトウェアのボリュームが増大すると検査に要する時間やリソースも増大する。そのため、処理負荷及び処理時間を低減可能なモデル検査手法が望まれている。
【0003】
モデル検査における処理負荷低減に関する文献として、例えば、特許文献1が挙げられる。この特許文献1に記載のモデル検査装置は、変数選択のランダム性に変化を与えずに探索領域を低減することができるモデル検査装置が開示されている。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
ところで、ソフトウェア開発におけるスクリプト作成のツールの1つとして、ビジュアルスクリプト記法(ビジュアルプログラミング言語ともいう。以下、単に「ビジュアルスクリプト」と表記する)が存在する。例えば、ビデオゲーム制作の現場などにおいてゲームロジックスクリプトを書く必要が生じるが、ビジュアルスクリプトを採用することで、プログラムの作成に慣れていないゲームデザイナーにとっても視覚的にゲームロジックスクリプトを記述できるため、ゲームロジック開発の生産性が向上するというメリットがある。
【0006】
他方で、ビジュアルスクリプトで書かれたロジックは、メンテナンスの長さに比例して大きくて複雑になるため、メンテナンスが困難になる。これらの大きくて複雑なビジュアルスクリプトは、人間にとっては読みにくく、スクリプトの変更中に誤記述が発生しやすくなるという問題があった。そこで、ビジュアルスクリプトで書かれたロジックに対してモデル検査を行いたいという要求が生まれるが、従来は、ビジュアルスクリプト記法によるロジックに対してモデル検査を行う手法は提案されていなかった。
【0007】
本発明の少なくとも1つの実施形態の目的は、上記問題を解決し、ビジュアルスクリプト記法による対象データに対するモデル検査を実現するためのモデル検査用スクリプト変換プログラム、モデル検査プログラム、モデル検査用スクリプト変換装置及びモデル検査装置を提供することである。
【課題を解決するための手段】
【0008】
非限定的な観点によると、本発明の一実施形態に係るモデル検査用スクリプト変換プログラムは、ビジュアルスクリプト記法によって記述された対象データをモデル検査用のスクリプトに変換する処理をコンピュータに実現させるためのモデル検査用スクリプト変換プログラムであって、前記コンピュータに、前記対象データのノードグラフの各ノードの入力側に対して1つの入力変数を宣言し、各ノードの出力側に対して1つの出力変数を宣言する変数宣言機能と、各ノードについての入力変数が、何れのノードから入力信号を受信したかを表す値をとるように、ノードグラフのエッジ接続に従って入力変数の遷移関係を定義する入力変数定義機能と、各ノードについての出力変数が、当該ノードがいつどのように出力信号を送信するかを表すように、ノードのセマンティクスに従って出力変数の遷移関係を定義する出力変数定義機能と、ノードのセマンティクスをモデル化するために状態遷移が必要な場合に、状態遷移ノードに対して1つの状態遷移変数を導入し、ノードのセマンティクスを状態遷移変数の遷移として記述する状態遷移変数導入機能とを実現させることで、対象データをモデル検査用のスクリプトに変換することを特徴とする。
【0009】
非限定的な観点によると、本発明の一実施形態に係るモデル検査プログラムは、ビジュアルスクリプト記法による対象データについてモデル検査を行う処理をコンピュータに実現させるためのモデル検査プログラムであって、前記コンピュータに、モデル検査の対象であるビジュアルスクリプト記法による対象データを取得する対象データ取得機能と、モデル検査において成立すべき事後条件を設定する事後条件設定機能と、前記対象データのノードグラフにおける検査範囲を指定する検査範囲指定機能と、モデル検査用スクリプト変換プログラムに基づいて、前記検査範囲指定機能において指定されたノードグラフの範囲の対象データをモデル検査用のスクリプトに変換して変換済スクリプトを出力するスクリプト変換機能と、前記変換済スクリプトに対してモデル検査を実行するモデル検査実行機能と、モデル検査の結果が前記事後条件について成立しているか否かの結果を出力する検査結果出力機能とを実現させることを特徴とする。
【0010】
非限定的な観点によると、本発明の一実施形態に係るモデル検査用スクリプト変換装置は、ビジュアルスクリプト記法によって記述された対象データのノードグラフの各ノードの入力側に対して1つの入力変数を宣言し、各ノードの出力側に対して1つの出力変数を宣言する変数宣言部と、各ノードについての入力変数が、何れのノードから入力信号を受信したかを表す値をとるように、ノードグラフのエッジ接続に従って入力変数の遷移関係を定義する入力変数定義部と、各ノードについての出力変数が、当該ノードがいつどのように出力信号を送信するかを表すように、ノードのセマンティクスに従って出力変数の遷移関係を定義する出力変数定義部と、ノードのセマンティクスをモデル化するために状態遷移が必要な場合に、状態遷移ノードに対して1つの状態遷移変数を導入し、ノードのセマンティクスを状態遷移変数の遷移として記述する状態遷移変数導入部とを備えることを特徴とする。
【0011】
非限定的な観点によると、本発明の一実施形態に係るモデル検査装置は、モデル検査の対象であるビジュアルスクリプト記法による対象データを取得する対象データ取得機能と、モデル検査において成立すべき事後条件を設定する事後条件設定部と、前記対象データのノードグラフにおける検査範囲を指定する検査範囲指定部と、モデル検査用スクリプト変換装置に基づいて、前記検査範囲指定部において指定されたノードグラフの範囲の対象データをモデル検査用のスクリプトに変換して変換済スクリプトを出力するスクリプト変換部と、前記変換済スクリプトに対してモデル検査を実行するモデル検査実行部と、モデル検査の結果が前記事後条件について成立しているか否かの結果を出力する検査結果出力部とを備えることを特徴とする。
【発明の効果】
【0012】
本願の各実施形態により1または2以上の不足が解決される。
【図面の簡単な説明】
【0013】
【
図1】本発明の実施形態に対応するモデル検査装置の構成の例を示すブロック図である。
【
図2】本発明の実施形態に対応するシステム構成の一例を示すブロック図である。
【
図3】本発明の実施形態に対応するモデル検査処理の例を示すフローチャートである。
【
図4】本発明の実施形態に対応するスクリプト変換処理の例を示すフローチャートである。
【
図5】ビジュアルスクリプト記法によるノード構成の一例を表した説明図である。
【
図6】Node2の入力変数(N2In)について入力変数定義処理を実行した場合の遷移関係の定義を行うためのスクリプトの一例を表した説明図である。
【
図7】(a)Joinノードのモデル、及び、(b)Joinノード機能させるためのスクリプトの一例を示した説明図である。
【
図8】Ifノードの出力変数の遷移関係定義を行うためのスクリプトの一例を表した説明図である。
【
図9】FadeInノードのモデルを定義するためのスクリプトの一例を表した説明図である。
【
図10】省略可能ノードの特性を持つ典型的なノードモデルを記述するためのスクリプトの一例を表した説明図である。
【
図11】(a)ノード省略処理を行う前のノードグラフと、(b)ノード省略処理を行った後のノードグラフの一例を表した説明図である。
【発明を実施するための形態】
【0014】
以下、本発明の実施形態の例について図面を参照して説明する。なお、以下で説明する各実施形態の例における各種構成要素は、矛盾等が生じない範囲で適宜組み合わせ可能である。また、ある実施形態の例として説明した内容については、他の実施形態においてその説明を省略している場合がある。また、各実施形態の特徴部分に関係しない動作や処理については、その内容を省略している場合がある。さらに、以下で説明する各種フローを構成する各種処理の順序は、処理内容に矛盾等が生じない範囲で順不同である。
【0015】
[第1の実施形態]
以下において、本発明の一実施形態に係るモデル検査装置について説明を行う。
図1は、本発明に係るモデル検査装置の構成の例を示すブロック図である。
図1に示すように、モデル検査装置10は、対象データ取得部11と、事後条件設定部12と、検査範囲指定部13と、スクリプト変換部14と、モデル検査実行部15と、検査結果出力部16とを少なくとも備える。
【0016】
モデル検査装置10は、1つの端末装置において実現してオフラインで使用するものであってもよいが、サーバ装置にモデル検査装置10としての機能を集約させてもよい。
図2は、本発明の実施形態に対応するシステム構成の一例を示すブロック図である。この
図2において、30はサーバ装置であり、このサーバ装置30にモデル検査装置10の機能を集約させる。そして、モデル検査を行いたいユーザが使用する端末装置401~40n(nは任意の整数)からそれぞれインターネットなどの通信ネットワーク50を介してサーバ装置30に接続して、モデル検査装置10としての機能を利用するシステムであってもよい。サーバ装置30は、システム管理者によって管理され、複数の端末装置401~40nに対して各種処理に関する情報を提供するための各種機能を有する。本例において、サーバ装置30は、WWWサーバなどの情報処理装置によって構成され、各種情報を格納する記憶媒体を備える。なお、サーバ装置30は、制御部や通信部などコンピュータとして各種処理を行うための一般的な構成を備えるが、ここでの説明は省略する。なお、システム構成はこの
図2の例に限定されず、モデル検査装置10として機能する1つの端末装置を複数のユーザが使用する構成としてもよいし、複数のサーバ装置を備える構成としてもよい。
【0017】
また、複数の端末装置401~40nは、それぞれ、通信ネットワーク50に接続し、サーバ装置30との通信を行うことにより各種処理を実行するためのハードウェア(例えば、座標に応じたブラウザ画面やゲーム画面を表示する表示装置など)およびソフトウェアを備える。なお、複数の端末装置401~40nそれぞれは、サーバ装置30を介さずに互いに直接通信を行うこともできる構成とされていてもよい。
【0018】
対象データ取得部11は、モデル検査の対象であるビジュアルスクリプト記法による対象データを取得する機能を有する。この対象データ取得部11においてユーザがモデル検査を行いたい対象データを取得する。
【0019】
事後条件設定部12は、モデル検査において成立すべき事後条件を設定する機能を有する。ここで、成立すべき事後条件とは、モデル検査の際の条件設定のことであり、対象データのスクリプトの実行が完了した後に成立すべき条件を設定することで、その条件が成立しない場合をエラーとして出力することが可能となる。
【0020】
検査範囲指定部13は、対象データのノードグラフにおける検査範囲を指定する機能を有する。ビジュアルスクリプト記法によって記述された対象データは、例えば、矩形状のノードと、ノードからノードへの接続関係を表すための矢印状のエッジとによって表され、これらのノード及びエッジによって表現された全体をノードグラフという。検査範囲指定部13では、ノードグラフのうち、何れの範囲についてモデル検査を実行するかの検査範囲を指定することを可能とする。なお、対象データのノードグラフ全体を指定することを妨げるものではない。
【0021】
スクリプト変換部14は、検査範囲指定機能において指定されたノードグラフの範囲の対象データをモデル検査用のスクリプトに変換して変換済スクリプトを出力する機能を有する。また、
図1に示すように、スクリプト変換部14は、変数宣言部21と、入力変数定義部22と、出力変数定義部23と、状態遷移変数導入部24と、ノード省略部25とを備える。これらの各構成については後述するが、これらの構成に基づくスクリプト変換アルゴリズムによって、ビジュアルスクリプト記法によって記述された対象データをモデル検査用のスクリプトに変換する。なお、このスクリプト変換部14において変換するスクリプトは、採用するモデル検査手法に合わせたスクリプトである必要があり、一例としてNuSMVを用いてモデル検査を行う場合には、NuSMVにおいてモデル検査を実行可能なスクリプト(SMV言語)に変換することになる。
【0022】
モデル検査実行部15は、変換済スクリプトに対してモデル検査を実行する機能を有する。モデル検査を実行するためのモデル検査手法については、既存のモデル検査手法を採用することが可能であり、例えば、NuSMVを用いてモデル検査を実行する。
【0023】
検査結果出力部16は、モデル検査の結果が前記事後条件について成立しているか否かの結果を出力する機能を有する。検査結果の出力内容は、事後条件成立の可否と、不成立の場合には併せて反例となる。これによって、開発者は、自身の作成したスクリプトのバグを発見することが可能となる。また、検査結果出力部16における検査結果の出力は、事後条件について不成立である場合に、対象データのノードグラフを表示する表示画面において、反例として不成立の原因となったノード箇所を視覚的に視認可能に表示する手法で検査結果を出力するようにしてもよい。ノードグラフ全体の中で何れの箇所にバグが発生したかを視覚的に視認可能に表示することで、開発者の修正作業が容易になるという効果がある。
【0024】
変数宣言部21は、対象データのノードグラフの各ノードの入力側に対して1つの入力変数を宣言し、各ノードの出力側に対して1つの出力変数を宣言する機能を有する。この変数宣言部21における変数宣言は、ノードの入力と出力にそれぞれ複数のポートを有しているとしても、入力変数と出力変数を1つずつしか宣言しないということであり、これによって変数削減を実現している。
【0025】
入力変数定義部22は、各ノードについての入力変数が、何れのノードから入力信号を受信したかを表す値をとるように、ノードグラフのエッジ接続に従って入力変数の遷移関係を定義する機能を有する。変数宣言部21において入力ポート数に関わらず1つの入力変数のみを宣言しているため、その1つの入力変数がどの値をとるかを、入力ポートに対するノードグラフのエッジ接続に従って入力変数の遷移関係を定義する。
【0026】
出力変数定義部23は、各ノードについての出力変数が、当該ノードがいつどのように出力信号を送信するかを表すように、ノードのセマンティクスに従って出力変数の遷移関係を定義する機能を有する。変数宣言部21において1つの出力変数のみを宣言しているため、その1つの出力変数がどの値をとるかを、ノードのセマンティクスに従って出力変数の遷移関係を定義するようにする。
【0027】
状態遷移変数導入部24は、ノードのセマンティクスをモデル化するために状態遷移が必要な場合に、状態遷移ノードに対して1つの状態遷移変数を導入し、ノードのセマンティクスを状態遷移変数の遷移として記述する機能を有する。例えば、ゲーム画面において「フェードイン(空白の画像からゲーム画面への段階的な移行のことをいう。)」のスクリーン効果を採用したい場合、「フェードイン」の実行中は状態遷移が生じ、「フェードイン」終了をもって処理を切り替える必要がある。このようなノードのセマンティクスをモデル化するために状態遷移が必要な状況において、状態遷移変数を導入することで対応する。例えば、「フェードイン」を表現する場合、(1)初期状態、(2)入力を受信して出力を開始した状態、(3)「フェードイン」の効果が終了するまで待機する状態、(4)「フェードイン」の効果が終了したことを出力する状態、の4つの状態の遷移として表現することができるので、これらの4つの状態を値として持つ可能性があることを定義した状態遷移変数を導入することで、「フェードイン」のノードを状態遷移変数で表現することが可能となる。
【0028】
ノード省略部25は、複数の入力がなされ1つの出力を行うノードであって副作用を生じさせることなく入力された値を適切な出力先へ出力するノードについて、当該ノードに対して入力するノードからのエッジを当該ノードの出力先のノードに接続して当該ノードを省略する機能を有する。このような条件を満たすノードについては、入力をノードの出力に再接続することで、ノードグラフから安全に省略することが可能となる。変数の数はノード数に比例するため、これらの多くの無害なノードを省略すると、変数の数を大幅に減らすことができる。
【0029】
図3は、本発明の実施形態に対応するモデル検査処理の例を示すフローチャートである。この
図3において、モデル検査処理は、モデル検査装置10が対象データを取得することによって開始される(ステップS101)。モデル検査装置10は、対象データを取得後、対象データのモデル検査における事後条件の設定を受付ける(ステップS102)。そして、モデル検査装置10は、取得した対象データのノードグラフにおけるモデル検査の検査範囲の指定を受付ける(ステップS103)。次に、モデル検査装置10は、指定した検査範囲のデータに対してスクリプト変換処理を実行する(ステップS104)。そして、モデル検査装置10は、変換済スクリプトに対してモデル検査を実行する(ステップS105)。最後に、モデル検査装置10は、モデル検査の検査結果を出力して(ステップS106)、処理を終了する。
【0030】
図4は、本発明の実施形態に対応するスクリプト変換処理の例を示すフローチャートである。スクリプト変換処理は、検査範囲に含まれるすべてのノードに対して実行されるものであるが、この
図4のフローチャートは、1つのノードに対する処理の開始から終了までの流れを表したものであり、実際には、全てのノードに対してこの
図4のスクリプト変換処理の流れが適用される。この
図4において、スクリプト変換処理は、モデル検査装置10が対象ノードを特定することによって開始される(ステップS201)。対象ノードの特定後、モデル検査装置10は、対象ノードについて入力変数と出力変数を1つずつ宣言する変数宣言処理を行う(ステップS202)。次に、モデル検査装置10は、宣言した入力変数について何れのノードから入力信号を受信したかを表す値をとることができるように入力変数定義処理を実行する(ステップS203)。また、モデル検査装置10は、宣言した出力変数について当該ノードがいつどのように出力信号を送信するかを表すことができるように出力変数定義処理を実行する(ステップS204)。次に、モデル検査装置10は、ノードのセマンティクスをモデル化するために状態遷移が必要なノードについては、1つの状態遷移変数を導入し、ノードのセマンティクスを状態遷移変数の遷移として記述する状態遷移変数導入処理を実行する(ステップS205)。また、モデル検査装置10は、複数の入力がなされ1つの出力を行うノードであって副作用を生じさせることなく入力された値を適切な出力先へ出力するノードについては、当該ノードを省略するノード省略処理を実行する(ステップS206)。以上の処理を実行することで、対象ノードのスクリプト変換処理を終了する。
【0031】
[変数宣言処理]
次に、スクリプト変換処理の具体的な内容について説明を行う。
図5は、ビジュアルスクリプト記法によるノード構成の一例を表した説明図である。この
図5に基づいて、変数宣言処理について説明する。
図5には、Node1、Node2、Node3の3つのノードが存在し、それぞれのノードにおいて入力変数と出力変数を宣言する。具体的には、
Node1 について、入力変数N1In と、出力変数N1Out を宣言
Node2 について、入力変数N2In と、出力変数N2Out を宣言
Node3 について、入力変数N3In と、出力変数N3Out を宣言
という宣言を実行することで、各ノードについての変数宣言処理が完了する。
【0032】
図5の各ノードについて変数宣言処理を行った各変数の値のドメインは、入出力ポートの名前とnone となる。
図5の場合、各変数の値域は以下の通りである。
N1In:{none, In1, In2}
N1Out:{none, Out3, Out4}
N2In:{none, In5, In6}
N2Out:{none, Out7, Out8}
N3In:{none, In1, In2}
N3Out:{none, Out3, Out4}
入出力変数の値は、ノード内でどのポートがアクティブであるかを示すことになる。
【0033】
[入力変数定義処理]
モデルのノードの入力変数の値は、ノードがどこから入力信号を受信したかを表す。次に、入力変数の遷移関係の定義は、ノードグラフのエッジ接続に従って定義される。
図5におけるエッジ接続を定義すると、以下のようになります。
・Node1 の出力変数(N1Out)がOut3 の場合、Node2の入力変数(N2In)は次の状態でIn5 になる。
・Node3 の出力変数(N3Out)がOut4 の場合、Node2の入力変数(N2In)は次の状態でIn6 になる。
図6は、Node2の入力変数(N2In)について入力変数定義処理を実行した場合の遷移関係の定義を行うためのスクリプトの一例を表した説明図である。
【0034】
なお、ビジュアルスクリプトでは複数のノードが並行して動作する。これは、ノードが2つの異なる入力を同時に受信する可能性があることを意味する。この場合、ノードの入力変数は1つの値しか持てないため、2つの入力のいずれかが無視され、正しく動作しなくなることになる。これは、状態図とビジュアルスクリプトの主な違いの1つであり、ビジュアルスクリプトに先行研究を直接適用することができない理由である。この場合、ノードのセマンティクスが2 つの入力を並行して扱う必要がある場合、2つの入力変数を宣言することで、対応可能である。
図7は、(a)Joinノードのモデル、及び、(b)Joinノード機能させるためのスクリプトの一例を示した説明図である。この
図7に示すJoinノードの目的は、手続き型プログラミング言語のマルチスレッドのためのjoin() 関数と似ていて、入力in1_とin2_の両方を受信した場合にのみ出力信号を送信する構成となっている。このJoinノードにより、2つの入力のいずれかが無視され、正しく動作しなくなることを回避することが可能となる。
【0035】
[出力変数定義処理]
モデルのノードの出力変数の値は、ノードがいつどのように出力信号を送信するかを示す。そして、出力変数の遷移関係の定義は、ノードのセマンティクスに従って定義される。
“ If node ”をモデル化すると仮定すると、入力in_を受け取ったときの条件に従って、出力true_または出力false_を送信します。典型的なアプローチは、Ifノードが入力in_を受け取ったとき、非決定的に出力true_又は出力false_を送信するノードとする。
図8は、Ifノードの出力変数の遷移関係定義を行うためのスクリプトの一例を表した説明図である。これらのセマンティクスについては、出力変数の遷移関係の定義ノードの実装から自動的に生成するようにしてもよいし、開発者が予め各ノードのセマンティクスを準備するようにしてもよい。
【0036】
[状態遷移変数導入処理]
いくつかのノードのセマンティクスをモデル化するためには状態遷移が必要となる。この場合のアプローチ手法として、各状態遷移ノードに対して1つの変数を導入し、ノードのセマンティクスを状態変数の遷移として記述することとした。
図9は、FadeInノードのモデルを定義するためのスクリプトの一例を表した説明図である。そのセマンティクスは典型的な単純な状態遷移を有する。ゲームデザイナーは、例えば、「フェードイン」スクリーン効果のためにFadeIn ノードを使用できる。FadeIn ノードが入力in_を受け取ると、スクリーン効果のフェードイン処理を開始し、直ちに出力out_を送信する。そして、スクリーン効果のフェードイン処理が終了すると、出力finished_を送信する。これらの振る舞いを念頭に置いて、FadeInノードに次の4つの状態を定義できる。
・s_ini: initial state.
・s_out: received input, and sending output out_.
・s_wait: waiting for the fade in will be finished.
・s_fin: the fade in is finished, and sending output finished_.
これらの状態では、次の手順でFadeIn ノードのセマンティクスをモデル化することができる。
(1)FadeIn_State の初期値はs_ini である。
(2)ノードが入力in_を受け取ると(FadeIn_In =in_)、値s_out をFadeIn_State に割り当てる。
(3)状態がs_out の場合、次の状態遷移でs_wait 状態に遷移する。出力out_が送信されるのは1回だけであることに注意が必要である。
(4)状態がs_wait の場合、s_wait またはs_fin に非決定的に遷移する。これは、フェードインのプロセスが完了するのを待つ動作をエミュレートすることになる。
(5)ステートがs_fin の場合、次のステート遷移時にs_ini ステートに遷移する。出力finished_を送信することが一度だけであることに注意が必要である。デフォルトルール(TRUE:s_ini;)にはこの動作が含まれているため、このルールを明示的に記述する必要はない。
(6)FadeIn_Out の値は、単にFadeIn_StState の状態に従って定義する。
【0037】
[ノード省略処理(最適化処理)]
モデル検査が現実的な時間内に検証を終了できるようにするためには、モデルを最適化することが好ましい。具体的には、状態の数はSMV変数の数の増加に伴って指数関数的に増加するため、SMV変数の数を減らすことが最適化の目標となる。ここで、ゲーム開発等で記述されたスクリプトを観察すると、スクリプトで使用されるノードの大半は次のような特徴を持っている。
・N inputs, 1 output.
・Output just after input without side effect.
図10は、省略可能ノードの特性を持つ典型的なノードモデルを記述するためのスクリプトの一例を表した説明図である。これらのノードは、入力をノードの出力に再接続することで、ノードグラフから安全に省略することができる。本手法では、SMV変数の数はノード数に比例するため、これらの多くの無害なノードを省略することで、SMV変数の数を大幅に減らすことが可能となる。
【0038】
図11は、(a)ノード省略処理を行う前のノードグラフと、(b)ノード省略処理を行った後のノードグラフの一例を表した説明図である。
図11(a)において、ノードNoSE1 とNoSE2は副作用がなく、セマンティクスは
図10で説明した典型的な省略可能ノードモデルと似ているといえる。この場合、ノードNoSE1 とNoSE2 を省略することができる。この場合、ノードNoSE1 とNoSE2のそれぞれに対する入力を直接それぞれの出力先に接続することで、
図11(b)に示すように、ノードNoSE1 とNoSE2を省略したノードグラフを得ることができる。
【0039】
以上に説明したように、第1の実施形態の一側面として、ビジュアルスクリプト記法によって記述された対象データのノードグラフの各ノードの入力側に対して1つの入力変数を宣言し、各ノードの出力側に対して1つの出力変数を宣言する変数宣言部と、各ノードについての入力変数が、何れのノードから入力信号を受信したかを表す値をとるように、ノードグラフのエッジ接続に従って入力変数の遷移関係を定義する入力変数定義部と、各ノードについての出力変数が、当該ノードがいつどのように出力信号を送信するかを表すように、ノードのセマンティクスに従って出力変数の遷移関係を定義する出力変数定義部と、ノードのセマンティクスをモデル化するために状態遷移が必要な場合に、状態遷移ノードに対して1つの状態遷移変数を導入し、ノードのセマンティクスを状態遷移変数の遷移として記述する状態遷移変数導入部とを備えるようにしたので、ビジュアルスクリプト記法による対象データに対するモデル検査を実現することが可能となる。
【0040】
すなわち、ビジュアルスクリプト記法による対象データのノードグラフにおいて扱っている変数を削減しつつモデル検査を適用可能なスクリプトに変換することを実現することで、変数削減によってモデル検査に要する時間を短縮することが可能となる。対象データのボリュームが膨大になった場合、モデル検査の処理で状態爆発が生じる可能性が増加するが、変数削減が可能な本発明によれば状態爆発を回避することが可能となる。
【0041】
以上に説明したように、本願の実施形態により1または2以上の不足が解決される。なお、本願の実施形態による効果は、非限定的な効果または効果の一例である。
【0042】
なお、上述した実施形態では、複数の端末装置401~40nとサーバ装置30は、自己が備える記憶装置に記憶されている各種制御プログラム(例えば、モデル検査用スクリプト変換プログラム、モデル検査プログラム)に従って、上述した各種の処理を実行する。
【0043】
また、システムの構成は上述した実施形態の例として説明した構成に限定されず、例えばモデル検査装置10が実行する処理として説明した処理の一部または全部をサーバ装置30が実行する構成としてもよいし、モデル検査装置10が実行する処理として説明した処理の一部または全部をサーバ装置30と端末装置40とで分担する構成としてもよい。また、サーバ装置30が備える記憶部の一部または全部を複数の端末装置401~40nの何れかが備える構成としてもよい。すなわち、
図2に示すシステムにおけるサーバ装置30と端末装置401~40nとのどちらか一方が備える機能の一部または全部を、他の一方が備える構成とされていてもよい。
【0044】
また、プログラムが、上述した各実施形態の例として説明した機能の一部または全部を、通信ネットワークを含まない装置単体に実現させる構成としてもよい。
【符号の説明】
【0045】
10 モデル検査装置
11 対象データ取得部
12 事後条件設定部
13 検査範囲指定部
14 スクリプト変換部
15 モデル検査実行部
16 検査結果出力部
21 変数宣言部
22 入力変数定義部
23 出力変数定義部
24 状態遷移変数導入部
25 ノード省略部
30 サーバ装置
401~40n 端末装置
50 通信ネットワーク