(57)【要約】【課題】ビジュアルスクリプト記法による対象データに対するモデル検査を実現すること。【解決手段】ビジュアルスクリプト記法によって記述された対象データのノードグラフの各ノードの入力側に対して１つの入力変数を宣言し出力側に対して１つの出力変数を宣言する変数宣言部と、各ノードについての入力変数が何れのノードから入力信号を受信したかを表す値をとるようにノードグラフのエッジ接続に従って入力変数の遷移関係を定義する入力変数定義部と、各ノードについての出力変数が当該ノードがいつどのように出力信号を送信するかを表すようにノードのセマンティクスに従って出力変数の遷移関係を定義する出力変数定義部と、ノードのセマンティクスをモデル化するために状態遷移が必要な場合に１つの状態遷移変数を導入しノードのセマンティクスを状態遷移変数の遷移として記述する状態遷移変数導入部とを備える。【選択図】図１
2020030490.tif 000002
【特許請求の範囲】
【請求項１】
ビジュアルスクリプト記法によって記述された対象データをモデル検査用のスクリプトに変換する処理をコンピュータに実現させるためのモデル検査用スクリプト変換プログラムであって、
前記コンピュータに、
前記対象データのノードグラフの各ノードの入力側に対して１つの入力変数を宣言し、各ノードの出力側に対して１つの出力変数を宣言する変数宣言機能と、
各ノードについての入力変数が、何れのノードから入力信号を受信したかを表す値をとるように、ノードグラフのエッジ接続に従って入力変数の遷移関係を定義する入力変数定義機能と、
各ノードについての出力変数が、当該ノードがいつどのように出力信号を送信するかを表すように、ノードのセマンティクスに従って出力変数の遷移関係を定義する出力変数定義機能と、
ノードのセマンティクスをモデル化するために状態遷移が必要な場合に、状態遷移ノードに対して１つの状態遷移変数を導入し、ノードのセマンティクスを状態遷移変数の遷移として記述する状態遷移変数導入機能と
を実現させることで、対象データをモデル検査用のスクリプトに変換するモデル検査用スクリプト変換プログラム。
【請求項２】
前記コンピュータに、
複数の入力がなされ１つの出力を行うノードであって副作用を生じさせることなく入力された値を適切な出力先へ出力するノードについて、当該ノードに対して入力するノードからのエッジを当該ノードの出力先のノードに接続して当該ノードを省略するノード省略機能
を実現させる請求項１記載のモデル検査用スクリプト変換プログラム。
【請求項３】
ビジュアルスクリプト記法による対象データについてモデル検査を行う処理をコンピュータに実現させるためのモデル検査プログラムであって、
前記コンピュータに、
モデル検査の対象であるビジュアルスクリプト記法による対象データを取得する対象データ取得機能と、
モデル検査において成立すべき事後条件を設定する事後条件設定機能と、
前記対象データのノードグラフにおける検査範囲を指定する検査範囲指定機能と、
請求項１又は請求項２に記載のモデル検査用スクリプト変換プログラムに基づいて、前記検査範囲指定機能において指定されたノードグラフの範囲の対象データをモデル検査用のスクリプトに変換して変換済スクリプトを出力するスクリプト変換機能と、
前記変換済スクリプトに対してモデル検査を実行するモデル検査実行機能と、
モデル検査の結果が前記事後条件について成立しているか否かの結果を出力する検査結果出力機能と
を実現させるモデル検査プログラム。
【請求項４】
前記検査結果出力機能は、前記事後条件について不成立である場合に、対象データのノードグラフを表示する表示画面において、反例として不成立の原因となったノード箇所を視覚的に視認可能に表示する手法で検査結果を出力する
請求項３記載のモデル検査プログラム。
【請求項５】
ビジュアルスクリプト記法によって記述された対象データのノードグラフの各ノードの入力側に対して１つの入力変数を宣言し、各ノードの出力側に対して１つの出力変数を宣言する変数宣言部と、
各ノードについての入力変数が、何れのノードから入力信号を受信したかを表す値をとるように、ノードグラフのエッジ接続に従って入力変数の遷移関係を定義する入力変数定義部と、
各ノードについての出力変数が、当該ノードがいつどのように出力信号を送信するかを表すように、ノードのセマンティクスに従って出力変数の遷移関係を定義する出力変数定義部と、
ノードのセマンティクスをモデル化するために状態遷移が必要な場合に、状態遷移ノードに対して１つの状態遷移変数を導入し、ノードのセマンティクスを状態遷移変数の遷移として記述する状態遷移変数導入部と
を備えるモデル検査用スクリプト変換装置。
【請求項６】
モデル検査の対象であるビジュアルスクリプト記法による対象データを取得する対象データ取得機能と、
モデル検査において成立すべき事後条件を設定する事後条件設定部と、
前記対象データのノードグラフにおける検査範囲を指定する検査範囲指定部と、
請求項５に記載のモデル検査用スクリプト変換装置に基づいて、前記検査範囲指定部において指定されたノードグラフの範囲の対象データをモデル検査用のスクリプトに変換して変換済スクリプトを出力するスクリプト変換部と、
前記変換済スクリプトに対してモデル検査を実行するモデル検査実行部と、
モデル検査の結果が前記事後条件について成立しているか否かの結果を出力する検査結果出力部と
を備えるモデル検査装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態の少なくとも１つは、ビジュアルスクリプト記法による対象データに対するモデル検査を実現するための変換するモデル検査用スクリプト変換プログラム、モデル検査プログラム、モデル検査用スクリプト変換装置及びモデル検査装置に関する。
【背景技術】
【０００２】
近年、ソフトウェアのボリュームの増大や複雑化に伴って、ソフトウェアの欠陥を発見するためのモデル検査手法へのニーズが高まっている。モデル検査は、ソフトウェアを網羅的に形式検査するものであるため、ソフトウェアのボリュームが増大すると検査に要する時間やリソースも増大する。そのため、処理負荷及び処理時間を低減可能なモデル検査手法が望まれている。
【０００３】
モデル検査における処理負荷低減に関する文献として、例えば、特許文献１が挙げられる。この特許文献１に記載のモデル検査装置は、変数選択のランダム性に変化を与えずに探索領域を低減することができるモデル検査装置が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１０−２３１２８９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、ソフトウェア開発におけるスクリプト作成のツールの１つとして、ビジュアルスクリプト記法（ビジュアルプログラミング言語ともいう。以下、単に「ビジュアルスクリプト」と表記する）が存在する。例えば、ビデオゲーム制作の現場などにおいてゲームロジックスクリプトを書く必要が生じるが、ビジュアルスクリプトを採用することで、プログラムの作成に慣れていないゲームデザイナーにとっても視覚的にゲームロジックスクリプトを記述できるため、ゲームロジック開発の生産性が向上するというメリットがある。
【０００６】
他方で、ビジュアルスクリプトで書かれたロジックは、メンテナンスの長さに比例して大きくて複雑になるため、メンテナンスが困難になる。これらの大きくて複雑なビジュアルスクリプトは、人間にとっては読みにくく、スクリプトの変更中に誤記述が発生しやすくなるという問題があった。そこで、ビジュアルスクリプトで書かれたロジックに対してモデル検査を行いたいという要求が生まれるが、従来は、ビジュアルスクリプト記法によるロジックに対してモデル検査を行う手法は提案されていなかった。
【０００７】
本発明の少なくとも１つの実施形態の目的は、上記問題を解決し、ビジュアルスクリプト記法による対象データに対するモデル検査を実現するためのモデル検査用スクリプト変換プログラム、モデル検査プログラム、モデル検査用スクリプト変換装置及びモデル検査装置を提供することである。
【課題を解決するための手段】
【０００８】
非限定的な観点によると、本発明の一実施形態に係るモデル検査用スクリプト変換プログラムは、ビジュアルスクリプト記法によって記述された対象データをモデル検査用のスクリプトに変換する処理をコンピュータに実現させるためのモデル検査用スクリプト変換プログラムであって、前記コンピュータに、前記対象データのノードグラフの各ノードの入力側に対して１つの入力変数を宣言し、各ノードの出力側に対して１つの出力変数を宣言する変数宣言機能と、各ノードについての入力変数が、何れのノードから入力信号を受信したかを表す値をとるように、ノードグラフのエッジ接続に従って入力変数の遷移関係を定義する入力変数定義機能と、各ノードについての出力変数が、当該ノードがいつどのように出力信号を送信するかを表すように、ノードのセマンティクスに従って出力変数の遷移関係を定義する出力変数定義機能と、ノードのセマンティクスをモデル化するために状態遷移が必要な場合に、状態遷移ノードに対して１つの状態遷移変数を導入し、ノードのセマンティクスを状態遷移変数の遷移として記述する状態遷移変数導入機能とを実現させることで、対象データをモデル検査用のスクリプトに変換することを特徴とする。
【０００９】
非限定的な観点によると、本発明の一実施形態に係るモデル検査プログラムは、ビジュアルスクリプト記法による対象データについてモデル検査を行う処理をコンピュータに実現させるためのモデル検査プログラムであって、前記コンピュータに、モデル検査の対象であるビジュアルスクリプト記法による対象データを取得する対象データ取得機能と、モデル検査において成立すべき事後条件を設定する事後条件設定機能と、前記対象データのノードグラフにおける検査範囲を指定する検査範囲指定機能と、モデル検査用スクリプト変換プログラムに基づいて、前記検査範囲指定機能において指定されたノードグラフの範囲の対象データをモデル検査用のスクリプトに変換して変換済スクリプトを出力するスクリプト変換機能と、前記変換済スクリプトに対してモデル検査を実行するモデル検査実行機能と、モデル検査の結果が前記事後条件について成立しているか否かの結果を出力する検査結果出力機能とを実現させることを特徴とする。
【００１０】
非限定的な観点によると、本発明の一実施形態に係るモデル検査用スクリプト変換装置は、ビジュアルスクリプト記法によって記述された対象データのノードグラフの各ノードの入力側に対して１つの入力変数を宣言し、各ノードの出力側に対して１つの出力変数を宣言する変数宣言部と、各ノードについての入力変数が、何れのノードから入力信号を受信したかを表す値をとるように、ノードグラフのエッジ接続に従って入力変数の遷移関係を定義する入力変数定義部と、各ノードについての出力変数が、当該ノードがいつどのように出力信号を送信するかを表すように、ノードのセマンティクスに従って出力変数の遷移関係を定義する出力変数定義部と、ノードのセマンティクスをモデル化するために状態遷移が必要な場合に、状態遷移ノードに対して１つの状態遷移変数を導入し、ノードのセマンティクスを状態遷移変数の遷移として記述する状態遷移変数導入部とを備えることを特徴とする。
【００１１】
非限定的な観点によると、本発明の一実施形態に係るモデル検査装置は、モデル検査の対象であるビジュアルスクリプト記法による対象データを取得する対象データ取得機能と、モデル検査において成立すべき事後条件を設定する事後条件設定部と、前記対象データのノードグラフにおける検査範囲を指定する検査範囲指定部と、モデル検査用スクリプト変換装置に基づいて、前記検査範囲指定部において指定されたノードグラフの範囲の対象データをモデル検査用のスクリプトに変換して変換済スクリプトを出力するスクリプト変換部と、前記変換済スクリプトに対してモデル検査を実行するモデル検査実行部と、モデル検査の結果が前記事後条件について成立しているか否かの結果を出力する検査結果出力部とを備えることを特徴とする。
【発明の効果】
【００１２】
本願の各実施形態により１または２以上の不足が解決される。
【図面の簡単な説明】
【００１３】
【図１】本発明の実施形態に対応するモデル検査装置の構成の例を示すブロック図である。
【図２】本発明の実施形態に対応するシステム構成の一例を示すブロック図である。
【図３】本発明の実施形態に対応するモデル検査処理の例を示すフローチャートである。
【図４】本発明の実施形態に対応するスクリプト変換処理の例を示すフローチャートである。
【図５】ビジュアルスクリプト記法によるノード構成の一例を表した説明図である。
【図６】Node2の入力変数（N2In）について入力変数定義処理を実行した場合の遷移関係の定義を行うためのスクリプトの一例を表した説明図である。
【図７】（ａ）Joinノードのモデル、及び、（ｂ）Joinノード機能させるためのスクリプトの一例を示した説明図である。
【図８】Ifノードの出力変数の遷移関係定義を行うためのスクリプトの一例を表した説明図である。
【図９】FadeInノードのモデルを定義するためのスクリプトの一例を表した説明図である。
【図１０】省略可能ノードの特性を持つ典型的なノードモデルを記述するためのスクリプトの一例を表した説明図である。
【図１１】（ａ）ノード省略処理を行う前のノードグラフと、（ｂ）ノード省略処理を行った後のノードグラフの一例を表した説明図である。
【発明を実施するための形態】
【００１４】
以下、本発明の実施形態の例について図面を参照して説明する。なお、以下で説明する各実施形態の例における各種構成要素は、矛盾等が生じない範囲で適宜組み合わせ可能である。また、ある実施形態の例として説明した内容については、他の実施形態においてその説明を省略している場合がある。また、各実施形態の特徴部分に関係しない動作や処理については、その内容を省略している場合がある。さらに、以下で説明する各種フローを構成する各種処理の順序は、処理内容に矛盾等が生じない範囲で順不同である。
【００１５】
［第１の実施形態］
以下において、本発明の一実施形態に係るモデル検査装置について説明を行う。図１は、本発明に係るモデル検査装置の構成の例を示すブロック図である。図１に示すように、モデル検査装置１０は、対象データ取得部１１と、事後条件設定部１２と、検査範囲指定部１３と、スクリプト変換部１４と、モデル検査実行部１５と、検査結果出力部１６とを少なくとも備える。
【００１６】
モデル検査装置１０は、１つの端末装置において実現してオフラインで使用するものであってもよいが、サーバ装置にモデル検査装置１０としての機能を集約させてもよい。図２は、本発明の実施形態に対応するシステム構成の一例を示すブロック図である。この図２において、３０はサーバ装置であり、このサーバ装置３０にモデル検査装置１０の機能を集約させる。そして、モデル検査を行いたいユーザが使用する端末装置４０１〜４０ｎ（ｎは任意の整数）からそれぞれインターネットなどの通信ネットワーク５０を介してサーバ装置３０に接続して、モデル検査装置１０としての機能を利用するシステムであってもよい。サーバ装置３０は、システム管理者によって管理され、複数の端末装置４０１〜４０ｎに対して各種処理に関する情報を提供するための各種機能を有する。本例において、サーバ装置３０は、ＷＷＷサーバなどの情報処理装置によって構成され、各種情報を格納する記憶媒体を備える。なお、サーバ装置３０は、制御部や通信部などコンピュータとして各種処理を行うための一般的な構成を備えるが、ここでの説明は省略する。なお、システム構成はこの図２の例に限定されず、モデル検査装置１０として機能する１つの端末装置を複数のユーザが使用する構成としてもよいし、複数のサーバ装置を備える構成としてもよい。
【００１７】
また、複数の端末装置４０１〜４０ｎは、それぞれ、通信ネットワーク５０に接続し、サーバ装置３０との通信を行うことにより各種処理を実行するためのハードウェア（例えば、座標に応じたブラウザ画面やゲーム画面を表示する表示装置など）およびソフトウェアを備える。なお、複数の端末装置４０１〜４０ｎそれぞれは、サーバ装置３０を介さずに互いに直接通信を行うこともできる構成とされていてもよい。
【００１８】
対象データ取得部１１は、モデル検査の対象であるビジュアルスクリプト記法による対象データを取得する機能を有する。この対象データ取得部１１においてユーザがモデル検査を行いたい対象データを取得する。
【００１９】
事後条件設定部１２は、モデル検査において成立すべき事後条件を設定する機能を有する。ここで、成立すべき事後条件とは、モデル検査の際の条件設定のことであり、対象データのスクリプトの実行が完了した後に成立すべき条件を設定することで、その条件が成立しない場合をエラーとして出力することが可能となる。
【００２０】
検査範囲指定部１３は、対象データのノードグラフにおける検査範囲を指定する機能を有する。ビジュアルスクリプト記法によって記述された対象データは、例えば、矩形状のノードと、ノードからノードへの接続関係を表すための矢印状のエッジとによって表され、これらのノード及びエッジによって表現された全体をノードグラフという。検査範囲指定部１３では、ノードグラフのうち、何れの範囲についてモデル検査を実行するかの検査範囲を指定することを可能とする。なお、対象データのノードグラフ全体を指定することを妨げるものではない。
【００２１】
スクリプト変換部１４は、検査範囲指定機能において指定されたノードグラフの範囲の対象データをモデル検査用のスクリプトに変換して変換済スクリプトを出力する機能を有する。また、図１に示すように、スクリプト変換部１４は、変数宣言部２１と、入力変数定義部２２と、出力変数定義部２３と、状態遷移変数導入部２４と、ノード省略部２５とを備える。これらの各構成については後述するが、これらの構成に基づくスクリプト変換アルゴリズムによって、ビジュアルスクリプト記法によって記述された対象データをモデル検査用のスクリプトに変換する。なお、このスクリプト変換部１４において変換するスクリプトは、採用するモデル検査手法に合わせたスクリプトである必要があり、一例としてＮｕＳＭＶを用いてモデル検査を行う場合には、ＮｕＳＭＶにおいてモデル検査を実行可能なスクリプト（ＳＭＶ言語）に変換することになる。
【００２２】
モデル検査実行部１５は、変換済スクリプトに対してモデル検査を実行する機能を有する。モデル検査を実行するためのモデル検査手法については、既存のモデル検査手法を採用することが可能であり、例えば、ＮｕＳＭＶを用いてモデル検査を実行する。
【００２３】
検査結果出力部１６は、モデル検査の結果が前記事後条件について成立しているか否かの結果を出力する機能を有する。検査結果の出力内容は、事後条件成立の可否と、不成立の場合には併せて反例となる。これによって、開発者は、自身の作成したスクリプトのバグを発見することが可能となる。また、検査結果出力部１６における検査結果の出力は、事後条件について不成立である場合に、対象データのノードグラフを表示する表示画面において、反例として不成立の原因となったノード箇所を視覚的に視認可能に表示する手法で検査結果を出力するようにしてもよい。ノードグラフ全体の中で何れの箇所にバグが発生したかを視覚的に視認可能に表示することで、開発者の修正作業が容易になるという効果がある。
【００２４】
変数宣言部２１は、対象データのノードグラフの各ノードの入力側に対して１つの入力変数を宣言し、各ノードの出力側に対して１つの出力変数を宣言する機能を有する。この変数宣言部２１における変数宣言は、ノードの入力と出力にそれぞれ複数のポートを有しているとしても、入力変数と出力変数を１つずつしか宣言しないということであり、これによって変数削減を実現している。
【００２５】
入力変数定義部２２は、各ノードについての入力変数が、何れのノードから入力信号を受信したかを表す値をとるように、ノードグラフのエッジ接続に従って入力変数の遷移関係を定義する機能を有する。変数宣言部２１において入力ポート数に関わらず１つの入力変数のみを宣言しているため、その１つの入力変数がどの値をとるかを、入力ポートに対するノードグラフのエッジ接続に従って入力変数の遷移関係を定義する。
【００２６】
出力変数定義部２３は、各ノードについての出力変数が、当該ノードがいつどのように出力信号を送信するかを表すように、ノードのセマンティクスに従って出力変数の遷移関係を定義する機能を有する。変数宣言部２１において１つの出力変数のみを宣言しているため、その１つの出力変数がどの値をとるかを、ノードのセマンティクスに従って出力変数の遷移関係を定義するようにする。
【００２７】
状態遷移変数導入部２４は、ノードのセマンティクスをモデル化するために状態遷移が必要な場合に、状態遷移ノードに対して１つの状態遷移変数を導入し、ノードのセマンティクスを状態遷移変数の遷移として記述する機能を有する。例えば、ゲーム画面において「フェードイン（空白の画像からゲーム画面への段階的な移行のことをいう。）」のスクリーン効果を採用したい場合、「フェードイン」の実行中は状態遷移が生じ、「フェードイン」終了をもって処理を切り替える必要がある。このようなノードのセマンティクスをモデル化するために状態遷移が必要な状況において、状態遷移変数を導入することで対応する。例えば、「フェードイン」を表現する場合、（１）初期状態、（２）入力を受信して出力を開始した状態、（３）「フェードイン」の効果が終了するまで待機する状態、（４）「フェードイン」の効果が終了したことを出力する状態、の４つの状態の遷移として表現することができるので、これらの４つの状態を値として持つ可能性があることを定義した状態遷移変数を導入することで、「フェードイン」のノードを状態遷移変数で表現することが可能となる。
【００２８】
ノード省略部２５は、複数の入力がなされ１つの出力を行うノードであって副作用を生じさせることなく入力された値を適切な出力先へ出力するノードについて、当該ノードに対して入力するノードからのエッジを当該ノードの出力先のノードに接続して当該ノードを省略する機能を有する。このような条件を満たすノードについては、入力をノードの出力に再接続することで、ノードグラフから安全に省略することが可能となる。変数の数はノード数に比例するため、これらの多くの無害なノードを省略すると、変数の数を大幅に減らすことができる。
【００２９】
図３は、本発明の実施形態に対応するモデル検査処理の例を示すフローチャートである。この図３において、モデル検査処理は、モデル検査装置１０が対象データを取得することによって開始される（ステップＳ１０１）。モデル検査装置１０は、対象データを取得後、対象データのモデル検査における事後条件の設定を受付ける（ステップＳ１０２）。そして、モデル検査装置１０は、取得した対象データのノードグラフにおけるモデル検査の検査範囲の指定を受付ける（ステップＳ１０３）。次に、モデル検査装置１０は、指定した検査範囲のデータに対してスクリプト変換処理を実行する（ステップＳ１０４）。そして、モデル検査装置１０は、変換済スクリプトに対してモデル検査を実行する（ステップＳ１０５）。最後に、モデル検査装置１０は、モデル検査の検査結果を出力して（ステップＳ１０６）、処理を終了する。
【００３０】
図４は、本発明の実施形態に対応するスクリプト変換処理の例を示すフローチャートである。スクリプト変換処理は、検査範囲に含まれるすべてのノードに対して実行されるものであるが、この図４のフローチャートは、１つのノードに対する処理の開始から終了までの流れを表したものであり、実際には、全てのノードに対してこの図４のスクリプト変換処理の流れが適用される。この図４において、スクリプト変換処理は、モデル検査装置１０が対象ノードを特定することによって開始される（ステップＳ２０１）。対象ノードの特定後、モデル検査装置１０は、対象ノードについて入力変数と出力変数を１つずつ宣言する変数宣言処理を行う（ステップＳ２０２）。次に、モデル検査装置１０は、宣言した入力変数について何れのノードから入力信号を受信したかを表す値をとることができるように入力変数定義処理を実行する（ステップＳ２０３）。また、モデル検査装置１０は、宣言した出力変数について当該ノードがいつどのように出力信号を送信するかを表すことができるように出力変数定義処理を実行する（ステップＳ２０４）。次に、モデル検査装置１０は、ノードのセマンティクスをモデル化するために状態遷移が必要なノードについては、１つの状態遷移変数を導入し、ノードのセマンティクスを状態遷移変数の遷移として記述する状態遷移変数導入処理を実行する（ステップＳ２０５）。また、モデル検査装置１０は、複数の入力がなされ１つの出力を行うノードであって副作用を生じさせることなく入力された値を適切な出力先へ出力するノードについては、当該ノードを省略するノード省略処理を実行する（ステップＳ２０６）。以上の処理を実行することで、対象ノードのスクリプト変換処理を終了する。
【００３１】
［変数宣言処理］
次に、スクリプト変換処理の具体的な内容について説明を行う。図５は、ビジュアルスクリプト記法によるノード構成の一例を表した説明図である。この図５に基づいて、変数宣言処理について説明する。図５には、Node1、Node2、Node3の３つのノードが存在し、それぞれのノードにおいて入力変数と出力変数を宣言する。具体的には、
Node1 について、入力変数N1In と、出力変数N1Out を宣言
Node2 について、入力変数N2In と、出力変数N2Out を宣言
Node3 について、入力変数N3In と、出力変数N3Out を宣言
という宣言を実行することで、各ノードについての変数宣言処理が完了する。
【００３２】
図５の各ノードについて変数宣言処理を行った各変数の値のドメインは、入出力ポートの名前とnone となる。図５の場合、各変数の値域は以下の通りである。
N1In：｛none, In1, In2｝
N1Out：｛none, Out3, Out4｝
N2In：｛none, In5, In6｝
N2Out：｛none, Out7, Out8｝
N3In：｛none, In1, In2｝
N3Out：｛none, Out3, Out4｝
入出力変数の値は、ノード内でどのポートがアクティブであるかを示すことになる。
【００３３】
［入力変数定義処理］
モデルのノードの入力変数の値は、ノードがどこから入力信号を受信したかを表す。次に、入力変数の遷移関係の定義は、ノードグラフのエッジ接続に従って定義される。図５におけるエッジ接続を定義すると、以下のようになります。
・Node1 の出力変数（N1Out）がOut3 の場合、Node2の入力変数（N2In）は次の状態でIn5 になる。
・Node3 の出力変数（N3Out）がOut4 の場合、Node2の入力変数（N2In）は次の状態でIn6 になる。
図６は、Node2の入力変数（N2In）について入力変数定義処理を実行した場合の遷移関係の定義を行うためのスクリプトの一例を表した説明図である。
【００３４】
なお、ビジュアルスクリプトでは複数のノードが並行して動作する。これは、ノードが２つの異なる入力を同時に受信する可能性があることを意味する。この場合、ノードの入力変数は１つの値しか持てないため、２つの入力のいずれかが無視され、正しく動作しなくなることになる。これは、状態図とビジュアルスクリプトの主な違いの１つであり、ビジュアルスクリプトに先行研究を直接適用することができない理由である。この場合、ノードのセマンティクスが2 つの入力を並行して扱う必要がある場合、２つの入力変数を宣言することで、対応可能である。図７は、（ａ）Joinノードのモデル、及び、（ｂ）Joinノード機能させるためのスクリプトの一例を示した説明図である。この図７に示すJoinノードの目的は、手続き型プログラミング言語のマルチスレッドのためのjoin() 関数と似ていて、入力in1_とin2_の両方を受信した場合にのみ出力信号を送信する構成となっている。このJoinノードにより、２つの入力のいずれかが無視され、正しく動作しなくなることを回避することが可能となる。
【００３５】
［出力変数定義処理］
モデルのノードの出力変数の値は、ノードがいつどのように出力信号を送信するかを示す。そして、出力変数の遷移関係の定義は、ノードのセマンティクスに従って定義される。
“ If node ”をモデル化すると仮定すると、入力in_を受け取ったときの条件に従って、出力true_または出力false_を送信します。典型的なアプローチは、Ifノードが入力in_を受け取ったとき、非決定的に出力true_又は出力false_を送信するノードとする。図８は、Ifノードの出力変数の遷移関係定義を行うためのスクリプトの一例を表した説明図である。これらのセマンティクスについては、出力変数の遷移関係の定義ノードの実装から自動的に生成するようにしてもよいし、開発者が予め各ノードのセマンティクスを準備するようにしてもよい。
【００３６】
［状態遷移変数導入処理］
いくつかのノードのセマンティクスをモデル化するためには状態遷移が必要となる。この場合のアプローチ手法として、各状態遷移ノードに対して１つの変数を導入し、ノードのセマンティクスを状態変数の遷移として記述することとした。図９は、FadeInノードのモデルを定義するためのスクリプトの一例を表した説明図である。そのセマンティクスは典型的な単純な状態遷移を有する。ゲームデザイナーは、例えば、「フェードイン」スクリーン効果のためにFadeIn ノードを使用できる。FadeIn ノードが入力in_を受け取ると、スクリーン効果のフェードイン処理を開始し、直ちに出力out_を送信する。そして、スクリーン効果のフェードイン処理が終了すると、出力finished_を送信する。これらの振る舞いを念頭に置いて、FadeInノードに次の４つの状態を定義できる。
・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 ノードのセマンティクスをモデル化することができる。
（１）FadeIn_State の初期値はs_ini である。
（２）ノードが入力in_を受け取ると（FadeIn_In =in_）、値s_out をFadeIn_State に割り当てる。
（３）状態がs_out の場合、次の状態遷移でs_wait 状態に遷移する。出力out_が送信されるのは１回だけであることに注意が必要である。
（４）状態がs_wait の場合、s_wait またはs_fin に非決定的に遷移する。これは、フェードインのプロセスが完了するのを待つ動作をエミュレートすることになる。
（５）ステートがs_fin の場合、次のステート遷移時にs_ini ステートに遷移する。出力finished_を送信することが一度だけであることに注意が必要である。デフォルトルール（TRUE:s_ini;）にはこの動作が含まれているため、このルールを明示的に記述する必要はない。
（６）FadeIn_Out の値は、単にFadeIn_StState の状態に従って定義する。
【００３７】
［ノード省略処理（最適化処理）］
モデル検査が現実的な時間内に検証を終了できるようにするためには、モデルを最適化することが好ましい。具体的には、状態の数はＳＭＶ変数の数の増加に伴って指数関数的に増加するため、ＳＭＶ変数の数を減らすことが最適化の目標となる。ここで、ゲーム開発等で記述されたスクリプトを観察すると、スクリプトで使用されるノードの大半は次のような特徴を持っている。
・N inputs, 1 output.
・Output just after input without side effect.
図１０は、省略可能ノードの特性を持つ典型的なノードモデルを記述するためのスクリプトの一例を表した説明図である。これらのノードは、入力をノードの出力に再接続することで、ノードグラフから安全に省略することができる。本手法では、ＳＭＶ変数の数はノード数に比例するため、これらの多くの無害なノードを省略することで、ＳＭＶ変数の数を大幅に減らすことが可能となる。
【００３８】
図１１は、（ａ）ノード省略処理を行う前のノードグラフと、（ｂ）ノード省略処理を行った後のノードグラフの一例を表した説明図である。図１１（ａ）において、ノードNoSE1 とNoSE2は副作用がなく、セマンティクスは図１０で説明した典型的な省略可能ノードモデルと似ているといえる。この場合、ノードNoSE1 とNoSE2 を省略することができる。この場合、ノードNoSE1 とNoSE2のそれぞれに対する入力を直接それぞれの出力先に接続することで、図１１（ｂ）に示すように、ノードNoSE1 とNoSE2を省略したノードグラフを得ることができる。
【００３９】
以上に説明したように、第１の実施形態の一側面として、ビジュアルスクリプト記法によって記述された対象データのノードグラフの各ノードの入力側に対して１つの入力変数を宣言し、各ノードの出力側に対して１つの出力変数を宣言する変数宣言部と、各ノードについての入力変数が、何れのノードから入力信号を受信したかを表す値をとるように、ノードグラフのエッジ接続に従って入力変数の遷移関係を定義する入力変数定義部と、各ノードについての出力変数が、当該ノードがいつどのように出力信号を送信するかを表すように、ノードのセマンティクスに従って出力変数の遷移関係を定義する出力変数定義部と、ノードのセマンティクスをモデル化するために状態遷移が必要な場合に、状態遷移ノードに対して１つの状態遷移変数を導入し、ノードのセマンティクスを状態遷移変数の遷移として記述する状態遷移変数導入部とを備えるようにしたので、ビジュアルスクリプト記法による対象データに対するモデル検査を実現することが可能となる。
【００４０】
すなわち、ビジュアルスクリプト記法による対象データのノードグラフにおいて扱っている変数を削減しつつモデル検査を適用可能なスクリプトに変換することを実現することで、変数削減によってモデル検査に要する時間を短縮することが可能となる。対象データのボリュームが膨大になった場合、モデル検査の処理で状態爆発が生じる可能性が増加するが、変数削減が可能な本発明によれば状態爆発を回避することが可能となる。
【００４１】
以上に説明したように、本願の実施形態により１または２以上の不足が解決される。なお、本願の実施形態による効果は、非限定的な効果または効果の一例である。
【００４２】
なお、上述した実施形態では、複数の端末装置４０１〜４０ｎとサーバ装置３０は、自己が備える記憶装置に記憶されている各種制御プログラム（例えば、モデル検査用スクリプト変換プログラム、モデル検査プログラム）に従って、上述した各種の処理を実行する。
【００４３】
また、システムの構成は上述した実施形態の例として説明した構成に限定されず、例えばモデル検査装置１０が実行する処理として説明した処理の一部または全部をサーバ装置３０が実行する構成としてもよいし、モデル検査装置１０が実行する処理として説明した処理の一部または全部をサーバ装置３０と端末装置４０とで分担する構成としてもよい。また、サーバ装置３０が備える記憶部の一部または全部を複数の端末装置４０１〜４０ｎの何れかが備える構成としてもよい。すなわち、図２に示すシステムにおけるサーバ装置３０と端末装置４０１〜４０ｎとのどちらか一方が備える機能の一部または全部を、他の一方が備える構成とされていてもよい。
【００４４】
また、プログラムが、上述した各実施形態の例として説明した機能の一部または全部を、通信ネットワークを含まない装置単体に実現させる構成としてもよい。
【符号の説明】
【００４５】
１０              モデル検査装置
１１              対象データ取得部
１２              事後条件設定部
１３              検査範囲指定部
１４              スクリプト変換部
１５              モデル検査実行部
１６              検査結果出力部
２１              変数宣言部
２２              入力変数定義部
２３              出力変数定義部
２４              状態遷移変数導入部
２５              ノード省略部
３０              サーバ装置
４０１〜４０ｎ        端末装置
５０              通信ネットワーク
【図１】
2020030490.tif 000003
【図２】
2020030490.tif 000004
【図３】
2020030490.tif 000005
【図４】
2020030490.tif 000006
【図５】
2020030490.tif 000007
【図６】
2020030490.tif 000008
【図７】
2020030490.tif 000009
【図８】
2020030490.tif 000010
【図９】
2020030490.tif 000011
【図１０】
2020030490.tif 000012
【図１１】
2020030490.tif 000013