(57)【要約】【課題】本発明は、テストシナリオ構築方法及び情報処理装置を提供する。【解決手段】複数の分散型ノードにより非同期の方式で実行するアプリケーションのためにテストシナリオを構築する方法は、アプリケーションに含まれる関数の呼び出し関係図を構築し；呼び出し関係図における各関数のコード構造に基づいて、該関数のために、実行時エラーを引き起こす可能性がある複数のリスク類型のうちの１つの又は複数のリスク類型を確定し；呼び出し関係図を遍歴してすべての可能な関数経路を取得し、各関数経路における関数のリスク類型に基づいて該関数経路のリスク類型を特定し；及び、各関数経路のリスク類型に基づいて、該関数経路のテストシナリオの類型を確定することを含む。【選択図】図１
2020177658.tif 000002
【特許請求の範囲】
【請求項１】
複数の分散型ノードにより非同期の方式で実行するアプリケーションのためにテストシナリオを構築する方法であって、
前記アプリケーションに含まれる関数の呼び出し関係図を構築し；
前記呼び出し関係図における各関数のコード構造に基づいて、該関数のために、実行時エラーを引き起こす可能性がある複数のリスク類型のうちの１つの又は複数のリスク類型を確定し；
前記呼び出し関係図を遍歴して全ての可能な関数経路を取得し、各関数経路における関数のリスク類型に基づいて該関数経路のリスク類型を特定し；及び
各関数経路のリスク類型に基づいて、該関数経路のテストシナリオの類型を確定することを含む、方法。
【請求項２】
請求項1に記載の方法であって、
前記テストシナリオの類型は、
１つのノードでアプリケーションの実行を1回シミュレーションし、
１つのノードで複数のユーザによるアプリケーションへの並列操作の実行をシミュレーションし、
複数のノードでアプリケーションの同時実行を1回シミュレーションし、及び
複数のノードで複数のユーザによるアプリケーションへの並列操作の実行をシミュレーションするものを含む、方法。
【請求項３】
請求項2に記載の方法であって、
前記アプリケーションは、ブロックチェーンにおけるスマートコントラクトであり、前記複数の分散型ノードは、ブロックチェーンにおける複数の承認ノードである、方法。
【請求項４】
請求項2又は3に記載の方法であって、
前記複数のリスク類型は、関数が不確定な結果を生成する又は外部リソースを呼び出す操作を含むリスクを含み、該リスクについて確定するテストシナリオの類型は、複数のノードでアプリケーションの同時実行を1回シミュレーションする類型を含む、方法。
【請求項５】
請求項3に記載の方法であって、
複数のノードでアプリケーションの同時実行を1回シミュレーションするテストシナリオにおいて、前記複数の承認ノードは、先に、第一承認ポリシーを用いて1回スマートコントラクトを同時実行し、その後、第二承認ポリシーを用いて1回スマートコントラクトを同時実行する、方法。
【請求項６】
請求項3に記載の方法であって、
前記呼び出し関係図の構築は、前記ブロックチェーン全体のスマートコントラクトに含まれる関数の呼び出し関係図の構築を含み、
前記複数のリスク類型は、関数がその自身の書き込んだ変数を読み取る又はもう１つのスマートコントラクトの関数を呼び出すリスクを含み、該リスクについて確定するテストシナリオの類型は、１つの承認ノードでスマートコントラクトの実行を1回シミュレーションする類型を含む、方法。
【請求項７】
請求項2又は3に記載の方法であって、
前記複数のリスク類型は、関数が分散型データベースに対しての書き込み操作を含むリスクを含み、該リスクについて確定するテストシナリオの類型は、複数のノードで複数のユーザによるアプリケーションへの並列操作の実行をシミュレーションする類型を含む、方法。
【請求項８】
請求項7に記載の方法であって、
複数のノードで複数のユーザによるアプリケーションへの並列操作の実行をシミュレーションするテストシナリオにおいて、複数のノードは、異なるネットワーク遅延を有する、方法。
【請求項９】
請求項2又は3に記載の方法であって、
前記複数のリスク類型は、関数がバッチ処理の方式で問合せにより得られた複数の変数の値を更新する操作を含むリスクを含み、該リスクについて確定するテストシナリオの類型は、１つのノードで複数のユーザによるアプリケーションへの並列操作の実行をシミュレーションする類型を含む、方法。
【請求項１０】
処理器を含む情報処理装置であって、
前記処理器は、
アプリケーションに含まれる関数の呼び出し関係図を構築し、該アプリケーションが複数の分散型ノードにより非同期の方式で実行され；
前記呼び出し関係図における各関数のコード構造に基づいて、該関数のために、実行時エラーを引き起こす可能性がある複数のリスク類型のうちの１つの又は複数のリスク類型を確定し；
前記呼び出し関係図を遍歴して全ての可能な関数経路を取得し、各関数経路における関数のリスク類型に基づいて該関数経路のリスク類型を特定し；及び
各関数経路のリスク類型に基づいて、該関数経路のテストシナリオの類型を確定するように構成される、装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アプリケーションをテストする分野に関し、特に、ディセントラリゼーション（Decentralization）の方式で実行するアプリケーションのためにテストのシナリオを構築する方法、及び該方法を実現し得る情報処理装置に関する。
【背景技術】
【０００２】
近年、ブロックチェーンのような、ディセントラリゼーションの方式で非同期実行するアプリケーションが注目されるようになっている。その前に、従来のアプリケーションの実行がすべて１つの中央集権機構を頼りにした。これに対して、ディセントラリゼーションの方式で非同期実行するアプリケーションは、中心権威機構がなくても、対応する機能を実行することができる。よって、信頼を必要としないネットワークアーキテクチャを提供し、ネットワークユーザは、信頼の無い前提でアプリケーションを実行することができる。
【０００３】
ディセントラリゼーションの方式で非同期実行するアプリケーションが複数の異なるノードで実行されるため、実行の一致性は非常に重要である。それ相応に、アプリケーション実行前に、このようなアプリケーションの内部が正確であることを確認し、リスクを避ける必要がある。
【０００４】
従って、ディセントラリゼーションの方式で非同期実行するアプリケーションのために適切なテストシナリオを構築し得る方法を提供することが望ましい。これにより、テストを行うことで、アプリケーションにおけるリスクを避けることができる。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ディセントラリゼーションの方式で非同期実行するアプリケーションのためにテストシナリオを構築する方法が求められることに鑑み、本発明の目的は、複数の分散型ノードにより非同期の方式で実行するアプリケーションに対して適切なテストシナリオを構築することができる、テストシナリオ構築方法、及び該方法を実現し得る情報処理装置を提供することにある。
【課題を解決するための手段】
【０００６】
本発明の一側面によれば、複数の分散型ノードにより非同期の方式で実行するアプリケーションのためにテストシナリオを構築する方法が提供され、該方法は、
アプリケーションに含まれる関数の呼び出し関係図を構築し；
呼び出し関係図における各関数のコード構造に基づいて、該関数のために、実行時エラーを引き起こす可能性がある複数のリスク類型のうちの１つの又は複数のリスク類型を確定し；
呼び出し関係図を遍歴してすべての可能な関数経路を取得し、各関数経路における関数のリスク類型に基づいて該関数経路のリスク類型を特定し；及び
各関数経路のリスク類型に基づいて、該関数経路のテストシナリオの類型を確定することを含む。
【０００７】
本発明の他の側面によれば、処理器を含む情報処理装置が提供され、前記処理器は、以下のように構成され、即ち、
アプリケーションに含まれる関数の呼び出し関係図を構築し、そのうち、該アプリケーションが複数の分散型ノードにより非同期の方式で実行され；
呼び出し関係図における各関数のコード構造に基づいて、該関数のために、実行時エラーを引き起こす可能性がある複数のリスク類型のうちの１つの又は複数のリスク類型を確定し；
呼び出し関係図を遍歴してすべての可能な関数経路を取得し、各関数経路における関数のリスク類型に基づいて該関数経路のリスク類型を特定し；及び
各関数経路のリスク類型に基づいて、該関数経路のテストシナリオの類型を確定する。
【０００８】
本発明の他の側面によれば、コンピュータに、上述のようなテストシナリオ構築方法を実現し得るプログラムを実行させるためのプログラムがさらに提供される。
【０００９】
本発明の他の側面によれば、対応する記憶媒体がさらに提供され、その中には、マシン（例えば、コンピュータ）可読指令コードが記憶されており、前記指令コードは、マシンにより読み取られて実行されるときに、マシンに、上述のようなテストシナリオ構築方法を実行させることができる。
【００１０】
本発明の各側面によれば、少なくとも次のような効果が奏される。即ち、本発明によるテストシナリオ構築方法、情報処理装置、プログラム及び記憶媒体を用いることにより、ディセントラリゼーションの方式で非同期実行するアプリケーションのために適切なテストシナリオを構築することで、アプリケーションに存在可能なリスクを有効に検出することができる。
【図面の簡単な説明】
【００１１】
【図１】本発明の実施例によるテストシナリオ構築方法の例示的なフローのフローチャートを示す図である。
【図２】図1に示す方法を用いてアプリケーションのためにテストシナリオを構築する一例を説明するための説明図である。
【図３】４種類のテストシナリオ類型を示す図である。
【図４】ブロックチェーンにおけるハイパーレジャーファブリック（Hyperledger  Fabric）の例示的な構造を示す図である。
【図５】関数がその自身の書き込んだ変数を読み取る操作を含むことによりもたらされ得るリスクの一例を示す図である。
【図６】関数がRAWB（Read-Ahead  and  Write-Behind）操作を含むことによりもたらされ得るリスクの一例を示す図である。
【図７】関数が書き込み操作のみを含むことによりもたらされ得るリスクの一例を示す図である。
【図８】本発明の実施例による情報処理装置の例示的な構造を示す図である。
【図９】本発明の実施例によるテストシナリオ構築方法、情報処理装置及び情報処理装置を実現し得るハードウェア構成の一例を示す図である。
【発明を実施するための形態】
【００１２】
以下、添付した図面を参照しながら、本発明を実施するための好適な形態を詳細に説明する。なお、このような実施形態は、例示に過ぎず、本発明を限定するものでない。
【００１３】
本発明の一側面によれば、テストシナリオ構築方法が提供される。図1は、本発明の実施例によるテストシナリオ構築方法100の例示的なフローのフローチャートを示す図である。
【００１４】
本実施例に係るテストシナリオ構築方法100は、複数の分散型ノードにより非同期の方式で実行するアプリケーションのためにテストシナリオを構築することができる。図1に示すように、この方法100は、次のようなステップを含んでも良い。
【００１５】
ステップS101：アプリケーションに含まれる関数の呼び出し関係図を構築し；
ステップS103：呼び出し関係図における各関数のコード構造に基づいて、該関数のために、実行時エラーを引き起こす可能性がある複数のリスク類型のうちの１つの又は複数のリスク類型を確定し；
ステップS105：呼び出し関係図を遍歴してすべての可能な関数経路を取得し、各関数経路における関数のリスク類型に基づいて該関数経路のリスク類型を特定し；及び
ステップS107：各関数経路のリスク類型に基づいて、該関数経路のテストシナリオの類型を確定する。
【００１６】
以下、図2を参照しながら方法100における各ステップに係る例示的な処理を簡単に説明する。図2は、図1に示す方法100を用いてアプリケーションのためにテストシナリオを構築する１つの例を示している。図2に示すように、ターゲットアプリケーション200について、ステップS101、例えば、セマンティックアナリシス、構文解析などにより、ターゲットアプリケーション200に含まれる２つのアプリケーション（Chaincode1及びChaincode2）における関数の呼び出し関係図201を取得する。例として、ターゲットアプリケーション200は、GO言語によるブロックチェーンにおけるスマートコントラクトであっても良い。また、ステップS101では、GO言語解析器などによりスマートコントラクトを抽象構文木（AST）に解析し、そして、AST解析器により該ASTから関数f1〜f7及びこれらの関数間の呼び出し関係を抽出することで、呼び出し関係図201を取得することができる。
【００１７】
続いて、ステップS103により、呼び出し関係図201における各関数のコード構造に基づいて、該関数のために、実行時エラーを引き起こす可能性がある複数のリスク類型R1〜R7のうちの１つ又は複数のリスク類型を確定することで、リスク類型が付いた呼び出し関係図203を取得する。本例では、呼び出し関係図203に示すように、関数f1、f2は、実行時エラーを引き起こし得るリスクが無く、関数f3〜f7は各自、複数のリスク類型R1〜R7のうちの１つ又は複数のリスク類型と関連付けられる。ここで、例としての複数のリスク類型R1〜R7は、予め定義されても良く、また、例えば、対応する関数のコード言語、他の関数に対する呼び出し関係などによって、各関数のリスク類型を確定しても良い。なお、これらのリスク類型、及び、これらのリスク類型と関数との間の対応関係については、具体例に基づいて後述する。
【００１８】
上述のように各関数のリスク類型が付けられた後、ステップS105により、深さ優先探索、幅優先探索などの方式で、呼び出し関係図203におけるすべての可能な関数経路を遍歴（探索）することができる。幅優先探索を例とすれば、呼び出し関係図203から次のような関数経路：{f1；f1→f2；f1→f3；f1→f2→f4；f1→f2→f5；f1→f2→f5→f7；f1→f2→f5→f6}を得ることができる。続いて、この関数経路について、各関数経路における関数のリスク類型に基づいて、該関数経路のリスク類型、即ち、該関数経路における各関数のリスク類型の集合を確定することで、リスト205に示す各関数経路のリスク類型を取得することができる。なお、呼び出し関係図203を遍歴することで得られたすべての関数経路のうち、関数経路{f1；f1→f2}がいずれのリスク関数をも含まないから、リスト205には、これらの関数経路が含まれない。
【００１９】
続いて、ステップS107では、リスト205に示す各関数経路のリスク類型に基づいて、対応する関数経路のテストシナリオの類型A〜Dを確定し、即ち、テーブル（表）207に示すような関数経路とテストシナリオの類型との間の対応関係を得ることができる。ここで、例としてのテストシナリオ類型A〜Dは、予め定義されても良く、また、テスト待ちのアプリケーションのコード構造、実行方式などの各種のファクターに対して適切に設定されるものであり、これにより、アプリケーションにおける各関数経路の各種のリスク類型を検出することができる。
【００２０】
１つの好適な実施例では、テストシナリオの類型は、次のようなものを含んでも良く、即ち、１つのノードでアプリケーションの実行を1回シミュレーションするもの（類型A）、１つのノードで複数のユーザによるアプリケーションへの並列操作の実行をシミュレーションするもの（類型B）、複数のノードでアプリケーションの同時実行を1回シミュレーションするもの（類型C）、及び複数のノードで複数のユーザによるアプリケーションへの並列操作の実行をシミュレーションするもの（類型D）である。
【００２１】
この好適な選実施例における上述の４種類のリスク類型の設定は、特に、複数の分散型ノードにより非同期の方式で実行するアプリケーションのためのテストシナリオを構築することに有利である。
【００２２】
１つの中心権威機構により実行される従来のアプリケーションでは、該中心権威機構（中心ノード）のみについてシングルユーザ操作に対してユニットテストを行うことでコードの正確性を検出することができる。しかし、複数の分散型ノードにより非同期の方式で実行するアプリケーションでは、アプリケーションの各ノードにおける実行と、最終結果の確認又は書き込みとの間に中間ステップが存在し得るので、シングルノード、シングルユーザ操作のみに対してユニットテストを行うことにより、アプリケーションに存在し得るすべてのリスクに対してテストを行うことを保証できない。
【００２３】
これに対して、この好適な実施例では、４種類のテストシナリオ類型A〜Dが構築されており、そのうち、異なるノードの数量（シングルノード；複数のノード）及び並列ユーザ操作の数量（１つのみのユーザ操作（アプリケーションを1回実行する）；複数のユーザによる並列操作）を設定することにより、各関数経路の異なるリスク類型に対してその対応するリスクを検出し得るテストシナリオを適切に設定することができる。図3は、４種類のテストシナリオ類型A〜Dを示す図であり、そのうち、横軸は、テストシナリオに必要なノードの数量を表し、縦軸は、テストシナリオに必要な並列ユーザ操作の数量を表す。
【００２４】
上述のような本実施例におけるテストシナリオ構築方法を用いて、アプリケーションの各関数経路における関数のリスク類型に基づいて、該関数経路のテストシナリオの類型を確定することで、アプリケーション全体（即ち、アプリケーションの関数の呼び出し関係図におけるすべての可能な関数経路）に適切なテストシナリオを特定することができ、これにより、アプリケーションが直面し得るすべてのリスクに対して有効なテストを行うことができる。
【００２５】
例として、図1乃至図3に基づいて説明した本実施例に係る上述のテストシナリオ構築方法の実行の対象としてのアプリケーションは、ブロックチェーンにおけるスマートコントラクトであっても良く、また、非同期の方式で該アプリケーションを実行する複数の分散型ノードは、ブロックチェーンにおける複数の承認ノードであっても良い。例えば、該ブロックチェーンは、ハイパーレジャーファブリックを含んでも良い。
【００２６】
便宜のため、以下、スマートコントラクトを例として、本発明の実施例のうちの好適な実施例の細部を説明する。なお、本発明の内容をもとに当業者が理解すべきは、本発明の実施例はブロックチェーンのスマートコントラクト以外の、複数の分散型ノードにより非同期の方式で実行する各種のアプリケーションにも適用され得るということである。ここでは、その詳しい説明を省略する。
【００２７】
ここで、まず、図4を参照しながら、本実施例において、複数の分散型ノードにより非同期の方式で実行するアプリケーションの例としてのブロックチェーンにおけるハイパーレジャーファブリックを簡単に説明する。
【００２８】
図4に示すように、ハイパーレジャーに基づくアプリケーションが複数の分散型ノードで並列に非同期実行され、実行の結果は、分散型データベースとしてのブロックチェーン（ハイパーレジャー）に記憶される。ハイパーレジャーファブリックにおける最重要な３つの部分が承認ノード（endorsing  node）、並び替えノード（又は並び替えサービス、ordering  service）及び提出ノード（committing  node）である。スマートコントラクト（チェーンコード（chaincode）とも言う）が複数の承認ノードに位置する。ユーザは、APPアプリによりSDK（ソフトウェア開発キット）の呼び出しをトリガーすることで、スマートコントラクトの承認ノードにおける実行をトリガーすることができる。承認ノードは、実行の結果をR（read）／W（write）集合にパッケージし（関連分野では、スマートコントラクトを1回実行して対応する確認待ちの実行結果即ちR／W集合を得ることが「取引」と称され、以下、当業者が混淆しない限り、該用語が用いられる）、そして、取引情報の合法性に対しての検証及び取引情報へのサインを行った後に、それをクライアントに返す。
【００２９】
続いて、クライアントは、承認ノードからの検証応答を受信した後に、検証成功と確定する。検証成功後に、クライアントは、サインされた取引情報を並び替えノードに送信することができる。並び替えノードは、所定のコンセンサスに基づいて取引情報に対して並び替えを行い、そして、並び替えた取引情報をブロックにパッケージして提出ノードに送信する。受信した取引情報について、提出ノードは、具体的な承認ポリシーによって、アプリケーションの実行の結果が正確であるかを判断し、そして、確認した取引情報に対してサインを行う。アプリケーションの実行の結果が正確であるかどうかにもかかわらず、対応する、並び替えられた且つパッケージされた取引情報ブロックがすべて、提出ノードによりブロックチェーンに書き込まれ、これにより、複数のノードにおける台帳の状態を同期にすることができる。提出ノードから、パッケージされたブロックが台帳に書き込まれていることについての確認（ACK）を得た後に、ユーザの操作は終了する。
【００３０】
上述のように、ディセントラリゼーションの方式で非同期実行するアプリケーションの例としてのハイパーレジャーファブリックでは、承認ノードでスマートコントラクトを実行する、及び、提出ノードでスマートコントラクトの実行の結果をハイパーレジャーに最終的に書き込むという２つのステップの間に若干の中間ステップが存在し、即ち、この２つのステップは、非同期実行される。よって、テストシナリオ構築時に、図3に基づいて説明した上述の４種類の類型を考慮して、分散型ノードがアプリケーションを非同期実行するときに直面する各種のリスクを十分に検出することができる。
【００３１】
以下、図4に示すハイパーレジャーファブリックを参照しながら、図1乃至図3に基づいて述べた実施例をもとに、各好適な実施例におけるリスク類型、及び、これらのリスク類型とテストシナリオ類型との間の対応関係の例を説明する。具体的には、発明者が発見した、ハイパーレジャーファブリックのようなブロックチェーンアプリケーションに存在可能な複数のリスク類型R1〜R7について説明し、そして、これらのリスク類型に対応する、適切に確定したテストシナリオ類型A〜Dについて説明する。
【００３２】
R1：もう１つのスマートコントラクトの関数を呼び出すリスク
１つの例では、例えば、図1のステップS101でアプリケーションに含まれる関数の呼び出し関係図を構築するときに、ブロックチェーン全体のスマートコントラクトに含まれる関数の呼び出し関係図を構築することができる。図2の例を参照して、２つのスマートコントラクトChaincode1及びChaincode2について１つの全体としての呼び出し関係図201を構築する。このような場合、１つのスマートコントラクトにおける関数がもう１つのスマートコントラクトの関数を呼び出す可能性が存在し（例えば、GO言語におけるコードAPIstub.invokeChaincode（）を用いること）、これは、１つのスマートコントラクトの関数がもう１つのスマートコントラクトのデータベース（例えば、ハイパーレジャー）の状態を変更するようにさせる可能性がある。よって、関数がこのような呼び出し（コール）を含むときに不安全であるため、発明者は、ここで、関数がもう１つのスマートコントラクトにおける関数を呼び出すリスクをリスク類型R1と定義する。
【００３３】
それ相応に、例えば、図1のステップS103で関数のコード構造に基づいて呼び出し関係図201における関数のためにリスク類型を確定するときに、候補の複数のリスク類型は、関数がもう１つのスマートコントラクトにおける関数を呼び出すリスク（リスク類型R1）を含んでも良い。
【００３４】
発明者が次のようなことを発見した。即ち、リスク類型R1について、シングル承認ノードでスマートコントラクトを1回実行すること（シングル取引）でエラーを検出することができる。よって、１つの好適な実施例では、関数がもう１つのスマートコントラクトにおける関数を呼び出すリスク類型R1について確定するテストシナリオの類型は、１つの承認ノードでスマートコントラクトの実行を1回シミュレーションする類型、即ち、図3に示すような類型Aを含んでも良い。
【００３５】
R2：関数がその自身の書き込んだ変数を読み取るリスク
図5は、関数における一部のコードがその自身の書き込んだ変数を読み取る操作を含むことによりもたらされ得るリスクの例を示す図である。図5に示すように、例えば、ハイパーレジャーのブロックチェーンにおけるスマートコントラクトの書き込み操作の実行（例えば、図4における承認ノードにより行われる）と、実行の結果がデータベース（状態データベース）に書き込まれる（例えば、図4における提出ノードにより行われる）操作との間の非同期性が原因で、変数K1に対して値V1を書き込む操作（例えば、GO言語におけるコードAPIstub.PutState（K,V）を用いること）を行うことにより、値V1は、直ぐにブロックチェーンの分散型データベース（例えば、ハイパーレジャー）に反映することができず、変数K1は、依然として値V0を維持する。よって、新しく書き込んだ値V1は、直ちに同一のアプリケーションの実行（例えば、ブロックチェーンにおける同一の取引）における読み取り操作（例えば、GO言語におけるコードAPIstub.GetState（K）を使用すること）に用いることができない。もし該変数の値を使えば、後続のサービスロジックに誤りをもたらすことができる。よって、関数がこのような操作を含めば不安全であるため、発明者は、ここで、関数がその自身の書き込んだ変数を読み取る操作を含むリスクをリスク類型R2と定義する。
【００３６】
それ相応に、例えば、図1のステップS103で関数のコード構造に基づいて呼び出し関係図201における関数のためにリスク類型を確定するときに、候補の複数のリスク類型は、関数がその自身の書き込んだ変数を読み取る操作を含むことによりもたらされ得るリスク（リスク類型R2）を含んでも良い。
【００３７】
発明者が次のようなことを発見した。即ち、上述のリスク類型R2について、リスク類型R1と同様に、シングル承認ノードでアプリケーション又はスマートコントラクトを1回実行すれば（即ち、シングル取引）エラーを検出することができる。よって、１つの好適な実施例では、関数がその自身の書き込んだ変数を読み取るリスク類型R2について確定するテストシナリオの類型は、１つの承認ノードでスマートコントラクトの実行を1回シミュレーションする類型、即ち、図3に示すような類型Aを含んでも良い。
【００３８】
R3：関数がバッチ処理の方式で問合せ（Query）により得られた複数の変数の値を更新する操作を含むリスク
発明者が次のようなことを発見した。即ち、ハイパーレジャーのようなブロックチェーンアプリケーションでは、１つの関数が範囲問合せ操作（例えば、GO言語におけるコードAPIstub.GetQueryResult（）を用いること）の後に、範囲問合せにより得られた複数の変数の値に対して更新を行う操作を有すれば、更新の結果と、その対応する変数の最新値とが不一致する可能性があり、即ち、スマートコントラクトの非同期実行の特性が原因で、問合せにより得られたこれらの変数の値を更新する過程において、これらの値は、他のユーザ操作による他の取引により変更されている可能性がある。よって、関数がこのような操作を含むと不安全であるため、発明者は、ここで、関数がバッチ処理の方式で問合せにより得られた複数の変数の値を更新する操作を含むリスクをリスク類型R3と定義する。
【００３９】
それ相応に、例えば、図1のステップS103で関数のコード構造に基づいて呼び出し関係図201における関数のためにリスク類型を確定するときに、候補の複数のリスク類型は、関数がバッチ処理の方式で問合せにより得られた複数の変数の値を更新する操作を含むリスク（リスク類型R3）を含んでも良い。
【００４０】
関数が上述の操作を含むリスク類型R3について、該関数の、並列取引の場合における表現を注目する必要がある。それ相応に、１つの好適な実施例では、該リスク類型R3について確定するテストシナリオの類型は、１つのノードで複数のユーザがアプリケーションを並列操作する実行をシミュレーションする種類、即ち、図3に示すような類型Bを含んでも良い。
【００４１】
R4：関数が不確定な結果を生成する操作を含むリスク
例として、不確定な結果を生成する操作は、乱数の生成、ノードの一時値、キーの値の構造に対しての遍歴（例えば、Hashmap、Hashtable）などの操作を含んでも良い。アプリケーション又はスマートコントラクトの関数がこのような不確定な結果を生成する操作のうちのいずれか１つを含んだら、これらの関数の複数の異なる承認ノードにおける実行により、異なる結果を得る可能性があり、そして、複数のノード間の実行結果の不一致を引き起こすことがある。よって、関数がこのような操作を含んだら不安全であるため、発明者は、ここで、関数が不確定な結果を生成する操作を含むリスクをリスク類型R4と定義する。
【００４２】
それ相応に、例えば、図1のステップS103において関数のコード構造に基づいて呼び出し関係図201における関数のためにリスク類型を確定するときに、候補の複数のリスク類型は、関数が不確定な結果を生成する操作を含むリスク（リスク類型R4）を含んでも良い。
【００４３】
リスク類型R4に係る関数について、該関数が複数のノードで実行する場合における表現を注目する必要がある。よって、１つの好適な実施例では、該リスク類型R4について確定するテストシナリオの類型は、複数のノードでアプリケーションの同時実行を1回シミュレーションする類型、即ち、図3に示すような類型Cを含んでも良い。
【００４４】
R5：関数が外部リソースを呼び出す操作を含むリスク
例として、外部リソースを呼び出す操作は、例えば、Webサービスの呼び出し（http://xxx）、外部ライブラリーの呼び出し、システム命令行（コマンドライン）の呼び出しなどを含んでも良い。アプリケーション又はスマートコントラクトの関数が例えば、このような外部リソース呼び出し操作のうちのいずれか１つを含む場合、該関数の複数の異なるノードにおける実行により、異なる結果を得ることもできる。よって、関数がこのような操作を含むときに不安全であるため、発明者は、ここで、関数が外部リソースを呼び出す操作を含むリスクをリスク類型R5と定義する。
【００４５】
それ相応に、例えば、図1のステップS103で関数のコード構造に基づいて呼び出し関係図201における関数のためにリスク類型を確定するときに、候補の複数のリスク類型は、関数が外部リソース呼び出し操作を含むリスク（リスク類型R5）を含んでも良い。
【００４６】
リスク類型R5に係る関数について、該関数が複数のノードで実行する場合における表現を注目する必要がある。よって、１つの好適な実施例では、上述のリスク類型R5について確定するテストシナリオの類型は、複数のノードでアプリケーションの同時実行を1回シミュレーションする種類、即ち、図3に示すような類型Cを含んでも良い。
【００４７】
また、オプションとして、図4に示すようなハイパーレジャーの、ブロックチェーンのスマートコントラクトに関する応用例では、複数のノードでアプリケーションの同時実行を1回シミュレーションするテストシナリオ（例えば、上述のリスク類型R4、R5について確定する、図3に示すようなテストシナリオ類型C）において、各承認ノードの承認ポリシーについて限定しても良い。より具体的には、複数の承認ノードは、先に第一承認ポリシーでスマートコントラクトを1回同時実行し、その後、第二承認ポリシーでスマートコントラクトを1回同時実行しても良い。
【００４８】
例として、第一承認ポリシー及び第二承認ポリシーは、以下のような承認ポリシーのうちの任意の2つであっても良い。
【００４９】
「論理積」（AND）：複数の承認ノード上での実行結果の一致性を確認する必要があり、且つこれらの承認ノードがすべてサインに対しての承認を行った場合、提出ノードは、最終的に、取引を確認し、取引に対してサインを行うことができ；
「論理和」（OR）：複数の承認ノードのうちのいずれか１つの承認ノードのサインに対しての承認を確認することができれば、提出ノードは、取引を確認し、取引に対してサインを行うことができ；
「NのうちのM」（「M  of  N」であり、M及びNはともに自然数であり、且つM＜Nである）：N個の承認ノードのうちの任意のM個の承認ノードの実行結果の一致性を確認する必要があり、且つこのM個の承認ノードがすべてサインに対しての承認を行っているならば、提出ノードは、最終的に、取引を確認し、取引に対してサインを行う。なお、どの承認ポリシー用いても、複数の承認ノードでスマートコントラクトを実行することにより同じ結果が得られることが望まれる。
【００５０】
R6〜R7：関数が分散型データベースに対しての書き込み操作を含むリスク
例として、関数が分散型データベースに対しての書き込み操作を含む場合は、関数がRAWBの操作を含むときであっても良い。図6は、この場合に発生した誤りの例を示している。図6に示すように、２つのユーザが同時（又は、ほぼ同時）にアプリケーションを実行し、例えば、ハイパーレジャーの場合に同時に取引TX1及びTX2をそれぞれ提出し、この２つの取引が同じ変数Kを操作する。取引TX2の読み書きの間に、取引TX1が既に変数Kの値をV1に更新している。このように、読み書きの衝突が生じた場合、取引TX2の更新又は書き込み操作の失敗をもたらすことができる。よって、関数がこのような操作を含めば不安全であるため、発明者は、ここで、関数がRAWB操作を含むリスクをリスク類型R6と定義する。
【００５１】
また、関数が分散型データベースに対しての書き込み操作を含む場合は、さらに、関数が書き込み操作のみを含むときであっても良い。図7は、この場合に発生したエラーの例を示している。２つのユーザが同時（又は、ほぼ同時）にアプリケーションを実行し、例えば、ハイパーレジャーの場合に同時（又は、ほぼ同時）に取引TX1及びTX2を提出し、この２つの取引が同じ変数Kを操作するため、分散型データベースの状態を保証することができなくなる。提出時間がT0である取引TX1が、提出時間が（T0＋t）である取引TX2の前に提出されたが、この２つの取引が分散型ノードで承認され及び並び替えられた後に分散型データベースに書き込まれる必要があるから、取引結果が最終的に分散型データベースとしてのハイパーレジャーに書き込まれる時間の順序を保証することができず、取引TX1が取引TX2の後にハイパーレジャーに書き込まれることを引き起こす場合がある。このように、変数Kの値は、最終的に、予期した取引TX2でなく、取引TX1により決定されることになる。よって、関数がこのような操作を含むなら不安全であるため、発明者は、ここで、関数が書き込み操作のみを含むリスクをリスク類型R7と定義する。
【００５２】
それ相応に、例えば、図1のステップS103で関数のコード構造に基づいて呼び出し関係図201における関数のためにリスク類型を確定するときに、候補の複数のリスク類型は、関数が分散型データベースに対しての書き込み操作を含むリスク（リスク類型R6、R7）を含んでも良い。
【００５３】
発明者が次のようなことを発見した。即ち、上述のR6、R7の２種類のリスク類型の関数に関して、それらの、マルチ取引並列実行の場合におけるマルチ承認ノード上での実行結果の一致性をテストすることができれば、ベストである。よって、１つの好適な実施例では、関数が分散型データベースに対しての書き込み操作を含むリスク類型R6、R7について、複数のノードで複数のユーザによるアプリケーションの並列操作の実行をシミュレーションするテストシナリオ、即ち、図3に示すような類型Dを確定しても良く、これにより、上述の関数に存在可能な読み書きの衝突又は書き込みの衝突のリスクを認識することができる。
【００５４】
オプションとして、図4に示すようなハイパーレジャーの、ブロックチェーンのスマートコントラクトに関する応用例では、複数のノードで複数のユーザによるアプリケーションへの並列操作の実行をシミュレーションするテストシナリオ（例えば、上述のリスク類型R6、R7について確定する、図3に示すようなテストシナリオ類型D）において、複数のノードに異なるネットワーク遅延を持たせることができる。
【００５５】
例として、スマートコントラクトを実行するための複数の承認ノードのうち、一部の承認ノードにネットワーク遅延を持たせず、一部の承認ノードに5msの遅延を持たせ、残りの承認ノードに10msの遅延を持たせても良い。このように、承認ノードの異なるネットワーク遅延における表現をテストすることができ、また、ネットワーク遅延がどうあれ、一致した結果を取得し得ることが望ましい。
【００５６】
以上、ハイパーレジャーのような、複数の分散型ノードにより非同期実行するアプリケーションに適用され得る各種のリスク類型R1〜R7の実例、及び、如何にこれらのリスク類型に対応するテストシナリオ類型A〜Dを設定するかの好適な実施例を説明した。なお、これらの実例及び好適な実施例については、さらに図2に示す例を参照することもできる。
【００５７】
例えば、図2の中のリスト205における第１行に示すように、関数経路f1→f3についてリスク類型（R4，R5）を確定している。上述のように、リスク類型R4、R5は、すべて、複数のノードでアプリケーションの同時実行を1回シミュレーションする類型、即ち、図3に示すようなテストシナリオ類型Cを要する。よって、図2におけるテーブル207に示すように、関数経路のf1→f3のテストシナリオ類型が類型Cであると確定している。これに基づいて類推すれば、各関数経路のリスク類型に基づいて、図2のテーブル207に示すような対応するテストシナリオ類型を確定することができるが、ここでは、その詳しい説明を省略する。
【００５８】
以上、図1乃至図7に基づいて本発明によるテストシナリオ構築方法の例示的なフローを説明した。上述のように、本発明の実施例におけるテストシナリオ構築方法は、複数の分散型ノードにより非同期実行するアプリケーションに対して、適切なテストシナリオを構築することで、アプリケーションに存在可能なリスクを有効に認識することができる。特に、例えば、ハイパーレジャーのような、ブロックチェーンにおけるスマートコントラクトの応用例では、本発明の各好適な実施例に係る方法は、アプリケーションに存在可能なリスク類型を有効に認識し、そして、各リスク類型に対応するテストシナリオの類型を適切に確定することで、テストの効率と正確性との間の良好なバランスを取ることができる。
【００５９】
本発明の他の側面によれば、情報処理装置が提供される。図8は、本発明の実施例による情報処理装置の１つの例示的な構造を示す図である。
【００６０】
情報処理装置800は、複数の分散型ノードにより非同期の方式で実行するアプリケーションのためにテストシナリオを構築することができる。図8に示すように、情報処理装置800は、以下のものを含んでも良い。
【００６１】
呼び出し関係図構築ユニット801：アプリケーションに含まれる関数の呼び出し関係図を構築し；
関数リスク類型確定ユニット802：呼び出し関係図における各関数のコード構造に基づいて、該関数のために、実行時エラーを引き起こす可能性がある複数のリスク類型のうちの１つの又は複数のリスク類型を確定し；
経路リスク類型特定ユニット803：呼び出し関係図を遍歴してすべての可能な関数経路を取得し、各関数経路における関数のリスク類型に基づいて該関数経路のリスク類型を特定し；及び
テストシナリオ類型確定ユニット804：各関数経路のリスク類型に基づいて、該関数経路のテストシナリオの類型を確定する。
【００６２】
上述の情報処理装置及びその各ユニットは、例えば、図1乃至図7に基づいて説明したテストシナリオ構築方法及びその各ステップの操作及び／又は処理を行い、同様な効果を奏することができるため、ここでは、その詳しい説明を省略する。
【００６３】
以上、図8をもとに本発明による情報処理装置について説明した。
【００６４】
また、本発明の他の側面によれば、情報処理装置が提供される。該情報処理装置は、本発明の実施例によるテストシナリオ構築方法を実現することができ、それは、処理器を含んでも良く、該処理器は、次のように構成されても良く、即ち、アプリケーションに含まれる関数の呼び出し関係図を構築し、そのうち、該アプリケーションが複数の分散型ノードにより非同期の方式で実行され；呼び出し関係図における各関数のコード構造に基づいて、該関数のために、実行時エラーを引き起こす可能性がある複数のリスク類型のうちの１つの又は複数のリスク類型を確定し；呼び出し関係図を遍歴してすべての可能な関数経路を取得し、各関数経路における関数のリスク類型に基づいて該関数経路のリスク類型を特定し；及び、各関数経路のリスク類型に基づいて、該関数経路のテストシナリオの類型を確定する。
【００６５】
情報処理装置の処理器は、例えば、図1乃至図7をもとに説明したテストシナリオ構築方法及びその各ステップの操作及び／又は処理、並びに、図8に基づいて説明した情報処理装置及びその各ユニットの機能を行い、同様な効果を奏することができるから、ここでは、その詳細な説明を割愛する。
【００６６】
例えば、テストシナリオの類型は、１つのノードでアプリケーションの実行を1回シミュレーションする類型、１つのノードで複数のユーザによるアプリケーションへの並列操作の実行をシミュレーションする類型、複数のノードでアプリケーションの同時実行を1回シミュレーションする類型、及び複数のノードで複数のユーザによるアプリケーションへの並列操作の実行をシミュレーションする類型を含んでも良い。
【００６７】
１つの例では、アプリケーションは、ブロックチェーンにおけるスマートコントラクトであっても良く、複数の分散型ノードは、ブロックチェーンにおける複数の承認ノードであっても良い。
【００６８】
１つの好適な実施例では、複数のリスク類型は、関数が不確定な結果を生成する又は外部リソースを呼び出す操作を含むリスクを含んでも良く、該リスクについて確定するテストシナリオの類型は、複数のノードでアプリケーションの同時実行を1回シミュレーションする類型を含んでも良い。
【００６９】
オプションとして、複数のノードでアプリケーションの同時実行を1回シミュレーションするテストシナリオにおいて、複数の承認ノードは、先に第一承認ポリシーで1回スマートコントラクトを同時実行し、その後、第二承認ポリシーで1回スマートコントラクトを同時実行しても良い。
【００７０】
１つの好適な実施例では、呼び出し関係図の構築は、ブロックチェーン全体のスマートコントラクトに含まれる関数の呼び出し関係図を構築することを含んでも良く、複数のリスク類型は、関数がその自身の書き込んだ変数を読み取る又はもう１つのスマートコントラクトの関数を呼び出すリスクを含んでも良く、該リスクについて確定するテストシナリオの類型は、１つの承認ノードでスマートコントラクトの実行を1回シミュレーションする類型を含んでも良い。
【００７１】
１つの好適な実施例では、複数のリスク類型は、関数が分散型データベースに対しての書き込み操作を含むリスクを含んでも良く、該リスクについて確定するテストシナリオの類型は、複数のノードで複数のユーザによるアプリケーションへの並列操作の実行をシミュレーションする類型を含んでも良い。
【００７２】
オプションとして、複数のノードで複数のユーザによるアプリケーションへの並列操作の実行をシミュレーションするテストシナリオにおいて、複数のノードは、異なるネットワーク遅延を有しても良い。
【００７３】
１つの好適な実施例では、複数のリスク類型は、関数がバッチ処理の方式で問合せにより得られた複数の変数の値を更新する操作を含むリスクを含んでも良く、該リスクについて確定するテストシナリオの類型は、１つのノードで複数のユーザによるアプリケーションの並列操作の実行をシミュレーションする類型を含んでも良い。
【００７４】
また、上述の一連の処理などは、ソフトウェア及び／又はファームウェアにより実現されても良い。ソフトウェア及び／又はファームウェアにより実現される場合、記憶媒体やネットワークから、専用ハードウェア構造を有するコンピュータ、例えば、図9に示す汎用マシン900（例えば、コンピュータ）に、該ソフトウェアを構成するプログラムをインストールし、該コンピュータは、各種のプログラムがインストールされているときに、各種の機能などを実行することができる。
【００７５】
図9は、本発明の実施例によるテストシナリオ構築方法、情報処理装置及び情報処理装置を実現し得る１種のハードウェア構成（汎用マシン900）の構成図である。
【００７６】
汎用マシン900は、例えば、コンピュータシステムであっても良い。なお、汎用マシン900は、例示に過ぎず、本発明による方法及び装置の応用範囲又は機能について限定しない。また、汎用マシン900は、上述の方法及び装置における任意のモジュールやアセンブリなど又はその組み合わせに依存しない。
【００７７】
図9では、中央処理装置（CPU）901は、ROM  902に記憶されているプログラム又は記憶部908からRAM  903にロッドされているプログラムに基づいて各種の処理を行う。RAM  903では、ニーズに応じて、CPU  901が各種の処理を行うときに必要なデータなどを記憶することもできる。CPU  901、ROM  902及びRAM  903は、バス904を経由して互いに接続される。入力／出力インターフェース905もバス904に接続される。
【００７８】
また、入力／出力インターフェース905には、さらに、次のような部品が接続され、即ち、キーボードなどを含む入力部906、液晶表示器（LCD）などのような表示器及びスピーカーなどを含む出力部907、ハードディスクなどを含む記憶部908、ネットワーク・インターフェース・カード、例えば、LANカード、モデムなどを含む通信部909である。通信部909は、例えば、インターネット、LANなどのネットワークを経由して通信処理を行う。
【００７９】
ドライブ910は、ニーズに応じて、入力／出力インターフェース905に接続されても良い。取り外し可能な媒体911、例えば、半導体メモリなどは、必要に応じて、ドライブ910にセットされることにより、その中から読み取られたコンピュータプログラムを記憶部908にインストールすることができる。
【００８０】
また、本発明は、さらに、マシン可読指令コードを含むプログラムプロダクトを提供する。このような指令コードは、マシンにより読み取られて実行されるときに、上述の本発明の実施形態における方法を実行することができる。それ相応に、このようなプログラムプロダクトをキャリー（carry）する、例えば、磁気ディスク（フロッピーディスク（登録商標）を含む）、光ディスク（CD-ROM及びDVDを含む）、光磁気ディスク（MD（登録商標）を含む）、及び半導体記憶器などの各種記憶媒体も、本発明に含まれる。
【００８１】
上述の記憶媒体は、例えば、磁気ディスク、光ディスク、光磁気ディスク、半導体記憶器などを含んでも良いが、これらに限定されない。
【００８２】
また、上述の方法における各操作（処理）は、各種のマシン可読記憶媒体に記憶されているコンピュータ実行可能なプログラムの方式で実現することもできる。
【００８３】
また、以上の実施例などに関し、さらに以下のように付記として開示する。
【００８４】
（付記1）
複数の分散型ノードにより非同期の方式で実行するアプリケーションのためにテストシナリオを構築する方法であって、
アプリケーションに含まれる関数の呼び出し関係図を構築し；
呼び出し関係図における各関数のコード構造に基づいて、該関数のために、実行時エラーを引き起こす可能性がある複数のリスク類型のうちの１つの又は複数のリスク類型を確定し；
呼び出し関係図を遍歴してすべての可能な関数経路を取得し、各関数経路における関数のリスク類型に基づいて該関数経路のリスク類型を特定し；及び
各関数経路のリスク類型に基づいて、該関数経路のテストシナリオの類型を確定することを含む、方法。
【００８５】
（付記2）
付記1に記載の方法であって、
テストシナリオの類型は、
１つのノードでアプリケーションの実行を1回シミュレーションし、
１つのノードで複数のユーザによるアプリケーションへの並列操作の実行をシミュレーションし、
複数のノードでアプリケーションの同時実行を1回シミュレーションし、及び
複数のノードで複数のユーザによるアプリケーションへの並列操作の実行をシミュレーションする類型を含む、方法。
【００８６】
（付記3）
付記2に記載の方法であって、
前記アプリケーションは、ブロックチェーンにおけるスマートコントラクトであり、前記複数の分散型ノードは、ブロックチェーンにおける複数の承認ノードである、方法。
【００８７】
（付記4）
付記2又は3に記載の方法であって、
前記複数のリスク類型は、関数が不確定な結果を生成する又は外部リソースを呼び出す操作を含むリスクを含み、該リスクについて確定するテストシナリオの類型は、複数のノードでアプリケーションの同時実行を1回シミュレーションする類型を含む、方法。
【００８８】
（付記5）
付記3に記載の方法であって、
複数のノードでアプリケーションの同時実行を1回シミュレーションするテストシナリオにおいて、複数の承認ノードは、先に第一承認ポリシーを用いて1回スマートコントラクトを同時実行し、その後、第二承認ポリシーを用いて1回スマートコントラクトを同時実行する、方法。
【００８９】
（付記6）
付記3に記載の方法であって、
呼び出し関係図の構築は、ブロックチェーン全体のスマートコントラクトに含まれる関数の呼び出し関係図の構築を含み、
前記複数のリスク類型は、関数がその自身の書き込んだ変数を読み取る又はもう１つのスマートコントラクトの関数を呼び出すリスクを含み、該リスクについて確定するテストシナリオの類型は、１つの承認ノードでスマートコントラクトの実行を1回シミュレーションする類型を含む、方法。
【００９０】
（付記7）
付記2又は3に記載の方法であって、
前記複数のリスク類型は、関数が分散型データベースに対しての書き込み操作を含むリスクを含み、該リスクについて確定するテストシナリオの類型は、複数のノードで複数のユーザによるアプリケーションへの並列操作の実行をシミュレーションする類型を含む、方法。
【００９１】
（付記8）
付記7に記載の方法であって、
複数のノードで複数のユーザによるアプリケーションへの並列操作の実行をシミュレーションするテストシナリオにおいて、複数のノードは、異なるネットワーク遅延を有する、方法。
【００９２】
（付記9）
付記2又は3に記載の方法であって、
前記複数のリスク類型は、関数がバッチ処理の方式で問合せにより得られた複数の変数の値を更新する操作を含むリスクを含み、該リスクについて確定するテストシナリオの類型は、１つのノードで複数のユーザによるアプリケーションへの並列操作の実行をシミュレーションする類型を含む、方法。
【００９３】
（付記10）
処理器を含む情報処理装置であって、
前記処理器は、
アプリケーションに含まれる関数の呼び出し関係図を構築し、そのうち、該アプリケーションが複数の分散型ノードにより非同期の方式で実行され；
呼び出し関係図における各関数のコード構造に基づいて、該関数のために、実行時エラーを引き起こす可能性がある複数のリスク類型のうちの１つの又は複数のリスク類型を確定し；
呼び出し関係図を遍歴してすべての可能な関数経路を取得し、各関数経路における関数のリスク類型に基づいて該関数経路のリスク類型を特定し；及び
各関数経路のリスク類型に基づいて、該関数経路のテストシナリオの類型を確定するように構成される、装置。
【００９４】
（付記11）
付記10に記載の情報処理装置であって、
テストシナリオの類型は、
１つのノードでアプリケーションの実行を1回シミュレーションし、
１つのノードで複数のユーザによるアプリケーションへの並列操作の実行をシミュレーションし、
複数のノードでアプリケーションの同時実行を1回シミュレーションし、及び
複数のノードで複数のユーザによるアプリケーションへの並列操作の実行をシミュレーションする類型を含む、装置。
【００９５】
（付記12）
付記11に記載の情報処理装置であって、
前記アプリケーションは、ブロックチェーンにおけるスマートコントラクトであり、前記複数の分散型ノードは、ブロックチェーンにおける複数の承認ノードである、装置。
【００９６】
（付記13）
付記11又は12に記載の情報処理装置であって、
前記複数のリスク類型は、関数が不確定な結果を生成する又は外部リソースを呼び出す操作を含むリスクを含み、該リスクについて確定するテストシナリオの類型は、複数のノードでアプリケーションの同時実行を1回シミュレーションする類型を含む、装置。
【００９７】
（付記14）
付記12に記載の情報処理装置であって、
複数のノードでアプリケーションの同時実行を1回シミュレーションするテストシナリオにおいて、複数の承認ノードは、先に、第一承認ポリシーを用いて1回スマートコントラクトを同時実行し、その後、第二承認ポリシーを用いて1回スマートコントラクトを同時実行する、装置。
【００９８】
（付記15）
付記12に記載の情報処理装置であって、
呼び出し関係図の構築は、ブロックチェーン全体のスマートコントラクトに含まれる関数の呼び出し関係図の構築を含み、
前記複数のリスク類型は、関数がその自身の書き込んだ変数を読み取る又はもう１つのスマートコントラクトの関数を呼び出すリスクを含み、対該リスクについて確定するテストシナリオの類型は、１つの承認ノードでスマートコントラクトの実行を1回シミュレーションする類型を含む、装置。
【００９９】
（付記16）
付記11又は12に記載の情報処理装置であって、
前記複数のリスク類型は、関数が分散型データベースに対しての書き込み操作を含むリスクを含み、該リスクについて確定するテストシナリオの類型は、複数のノードで複数のユーザによるアプリケーションへの並列操作の実行をシミュレーションする類型を含む、装置。
【０１００】
（付記17）
付記16に記載の情報処理装置であって、
複数のノードで複数のユーザによるアプリケーションへの並列操作の実行をシミュレーションするテストシナリオにおいて、複数のノードは、異なるネットワーク遅延を有する、装置。
【０１０１】
（付記18）
付記11又は12に記載の情報処理装置であって、
前記複数のリスク類型は、関数がバッチ処理の方式で問合せにより得られた複数の変数の値を変更する操作を含むリスクを含み、該リスクについて確定するテストシナリオの類型は、１つのノードで複数のユーザによるアプリケーションへの並列操作の実行をシミュレーションする類型を含む、装置。
【０１０２】
（付記19）
マシン可読指令コードを記憶した記憶媒体であって、
前記指令コードは、マシンにより読み取られて実行されるときに、マシンに、複数の分散型ノードにより非同期の方式で実行するアプリケーションのためにテストシナリオを構築する方法を実行させ、
前記方法は、
アプリケーションに含まれる関数の呼び出し関係図を構築し；
呼び出し関係図における各関数のコード構造に基づいて、該関数のために、実行時エラーを引き起こす可能性がある複数のリスク類型のうちの１つの又は複数のリスク類型を確定し；
呼び出し関係図を遍歴してすべての可能な関数経路を取得し、各関数経路における関数のリスク類型に基づいて該関数経路のリスク類型を特定し；及び
各関数経路のリスク類型に基づいて、該関数経路のテストシナリオの類型を確定することを含む、記憶媒体。
【０１０３】
以上、本発明の好ましい実施形態を説明したが、本発明はこの実施形態に限定されず、本発明の趣旨を離脱しない限り、本発明に対するあらゆる変更は、本発明の技術的範囲に属する。
【図１】
2020177658.tif 000003
【図２】
2020177658.tif 000004
【図３】
2020177658.tif 000005
【図４】
2020177658.tif 000006
【図５】
2020177658.tif 000007
【図６】
2020177658.tif 000008
【図７】
2020177658.tif 000009
【図８】
2020177658.tif 000010
【図９】
2020177658.tif 000011