(57)【要約】      （修正有）【課題】並行脆弱性を識別する方法、コンピュータ可読媒体、及びシステムを提供する。【解決手段】共有メモリへのプログラムのリード及びライト・アクセスをインストルメントする並行脆弱性のテスト方式である。まず、グレーボックス・ファザーによりプログラムのテスト・ケースを識別する。次に、識別されたテスト・ケースに基づき、テスト・ケースが優先テスト・ケースであるかどうかを判別するために、競合するペアの組を含むプログラムの２つ以上のブランチを解析する。テスト・ケースが優先テスト・ケースであることに応答して、テスト・ケースをグレーボックス・ファザーから並行性確認モジュールへ供給し、並行性確認モジュールにより、テスト・ケースを１つ以上のスケジューリング・ポリシーにより使用して、試験を行う。【選択図】図４
2019204482.tif 000002
【特許請求の範囲】
【請求項１】
並行脆弱性を識別する方法であって、
共有メモリへのプログラムのリード及びライト・アクセスをインストルメントすることと、
グレーボックス・ファザーにより前記プログラムのテスト・ケースを識別することと、
前記グレーボックス・ファザーにより前記テスト・ケースに基づき、該テスト・ケースが優先テスト・ケースであるかどうかを判別するよう、競合するペアの組を含む前記プログラムの２つ以上のブランチを解析することと、
前記テスト・ケースが優先テスト・ケースであることに応答して、該テスト・ケースを前記グレーボックス・ファザーから並行性確認モジュールへ供給することと、
前記並行性確認モジュールにより、１つ以上の並行脆弱性を識別するよう、前記テスト・ケースを１つ以上のスケジューリング・ポリシーにより試験することと
を有する方法。
【請求項２】
前記テスト・ケースを前記並行性確認モジュールへ供給することは、モデル・チェッカー及びアクティブ試験ツールのうちの１つへ前記テスト・ケースを供給することを含む、
請求項１に記載の方法。
【請求項３】
前記プログラムの前記２つ以上のブランチを解析することは、
前記テスト・ケースが第１ビットマップ及び第２ビットマップの夫々で新しいビットを生成するかどうかを判定することと、
前記テスト・ケースが前記第１ビットマップ及び前記第２ビットマップの夫々で新しいビットを生成する場合に、前記テスト・ケースを優先テスト・ケースとして識別することと
を有する、
請求項１に記載の方法。
【請求項４】
前記プログラムのブランチを解析することは、競合指向型のカバレッジ誘導グレーボックス・ファザーにより前記ブランチを解析することを含む、
請求項１に記載の方法。
【請求項５】
１つ以上の並行脆弱性を識別するよう前記テスト・ケースを１つ以上のスケジューリング・ポリシーにより試験することは、モデル・チェッカー及びアクティブ試験ツールのうちの１つにより前記テスト・ケースを試験することを含む、
請求項１に記載の方法。
【請求項６】
前記テスト・ケースが優先テスト・ケースでないことに応答して、テスト・ケース優先度付き待ち行列の一番上に又はその近くに前記テスト・ケースを位置付ける
請求項１に記載の方法。
【請求項７】
前記テスト・ケースが優先テスト・ケースでないことに応答して、
前記テスト・ケースを低優先テスト・ケースとして指定し、
テスト・ケース優先度付き待ち行列の一番下に又はその近くに前記テスト・ケースを位置付ける
請求項１に記載の方法。
【請求項８】
１つ以上のプロセッシング・システムによって実行される場合に、該プロセッシング・システムに、
共有メモリへのプログラムのリード及びライト・アクセスをインストルメントすることと、
グレーボックス・ファザーにより前記プログラムのテスト・ケースを識別することと、
前記グレーボックス・ファザーにより前記テスト・ケースに基づき、該テスト・ケースが優先テスト・ケースであるかどうかを判別するよう、競合するペアの組を含む前記プログラムの２つ以上のブランチを解析することと、
前記テスト・ケースが優先テスト・ケースであることに応答して、該テスト・ケースを前記グレーボックス・ファザーから並行性確認モジュールへ供給することと、
前記並行性確認モジュールにより、１つ以上の並行脆弱性を識別するよう、前記テスト・ケースを１つ以上のスケジューリング・ポリシーにより試験することと
を有する動作を実行させる命令を含む
１つ以上の非一時的なコンピュータ可読媒体。
【請求項９】
前記テスト・ケースを前記並行性確認モジュールへ供給することは、モデル・チェッカー及びアクティブ試験ツールのうちの１つへ前記テスト・ケースを供給することを含む、
請求項８に記載のコンピュータ可読媒体。
【請求項１０】
前記プログラムの前記２つ以上のブランチを解析することは、
前記テスト・ケースが第１ビットマップ及び第２ビットマップの夫々で新しいビットを生成するかどうかを判定することと、
前記テスト・ケースが前記第１ビットマップ及び前記第２ビットマップの夫々で新しいビットを生成する場合に、前記テスト・ケースを優先テスト・ケースとして識別することと
を有する、
請求項８に記載のコンピュータ可読媒体。
【請求項１１】
前記プログラムのブランチを解析することは、競合指向型のカバレッジ誘導グレーボックス・ファザーにより前記ブランチを解析することを含む、
請求項８に記載のコンピュータ可読媒体。
【請求項１２】
１つ以上の並行脆弱性を識別するよう前記テスト・ケースを１つ以上のスケジューリング・ポリシーにより試験することは、モデル・チェッカー及びアクティブ試験ツールのうちの１つにより前記テスト・ケースを試験することを含む、
請求項８に記載のコンピュータ可読媒体。
【請求項１３】
前記テスト・ケースが優先テスト・ケースでないことに応答して、テスト・ケース優先度付き待ち行列の一番上に又はその近くに前記テスト・ケースを位置付ける
請求項８に記載のコンピュータ可読媒体。
【請求項１４】
前記テスト・ケースが優先テスト・ケースでないことに応答して、
前記テスト・ケースを低優先テスト・ケースとして指定し、
テスト・ケース優先度付き待ち行列の一番下に又はその近くに前記テスト・ケースを位置付ける
請求項８に記載のコンピュータ可読媒体。
【請求項１５】
共有メモリへのプログラムのリード及びライト・アクセスをインストルメントし、
グレーボックス・ファザーにより前記プログラムのテスト・ケースを識別し、
前記グレーボックス・ファザーにより前記テスト・ケースに基づき、該テスト・ケースが優先テスト・ケースであるかどうかを判別するよう、競合するペアの組を含む前記プログラムの２つ以上のブランチを解析し、
前記テスト・ケースが優先テスト・ケースであることに応答して、該テスト・ケースを前記グレーボックス・ファザーから並行性確認モジュールへ供給し、
前記並行性確認モジュールにより、１つ以上の並行脆弱性を識別するよう、前記テスト・ケースを１つ以上のスケジューリング・ポリシーにより試験する
よう構成された１つ以上のプロセッシング・ユニットを有する
システム。
【請求項１６】
前記並行性確認モジュールは、モデル・チェッカー及びアクティブ試験ツールのうちの１つを有する、
請求項１５に記載のシステム。
【請求項１７】
前記プログラムの前記２つ以上のブランチを解析するよう、前記１つ以上のプロセッシング・ユニットは、
前記テスト・ケースが第１ビットマップ及び第２ビットマップの夫々で新しいビットを生成するかどうかを判定し、
前記テスト・ケースが前記第１ビットマップ及び前記第２ビットマップの夫々で新しいビットを生成する場合に、前記テスト・ケースを優先テスト・ケースとして識別する
よう構成される、
請求項１５に記載のシステム。
【請求項１８】
前記グレーボックス・ファザーは、競合指向型のカバレッジ誘導グレーボックス・ファザーを有する、
請求項１５に記載のシステム。
【請求項１９】
前記テスト・ケースが優先テスト・ケースでないことに応答して、前記１つ以上のプロセッシング・ユニットは、テスト・ケース優先度付き待ち行列の一番下に又はその近くに前記テスト・ケースを位置付けるよう構成される、
請求項１５に記載のシステム。
【請求項２０】
前記テスト・ケースが優先テスト・ケースでないことに応答して、前記１つ以上のプロセッシング・ユニットは、テスト・ケース優先度付き待ち行列の一番上に又はその近くに前記テスト・ケースを位置付けるよう構成される、
請求項１５に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書で説明される実施形態は、並行性（concurrency）の脆弱性を検出することに関する。
【背景技術】
【０００２】
並行脆弱性は、２つ以上のスレッドが同時に実行される並行プログラムにおいて起こりうる。並行脆弱性は、例えば、データ競合（data  race）によって（例えば、マルチスレッドのプロセスの実行中に）引き起こされることがあり、ルート・アクセスを得ること又はリング０内で任意のコードを実行すること又はカーネル・メモリ破損を引き起こすことの可能性をローカル・ユーザに与えうる。
【０００３】
本願で請求される主題は、上記のような環境でしか動作しない実施形態又は上記のようなあらゆる欠点を解消する実施形態に限られない。むしろ、この背景は、本明細書で記載されるいくつかの実施形態が実施され得る技術分野の一例を説明するためにのみ与えられている。
【発明の概要】
【０００４】
実施形態の態様に従って、方法は、共有メモリへのプログラムのリード及びライト・アクセスをインストルメントすることを含んでよい。方法は、グレーボックス・ファザー（greybox  fuzzer）により前記プログラムのテスト・ケースを識別することを更に含んでよい。更に、方法は、前記グレーボックス・ファザーにより前記テスト・ケースに基づき、該テスト・ケースが優先テスト・ケースであるかどうかを判別するよう、競合するペアの組を含む前記プログラムの２つ以上のブランチを解析することを含んでよい。前記テスト・ケースが優先テスト・ケースであることに応答して、方法は、前記テスト・ケースを前記グレーボックス・ファザーから並行性確認モジュールへ供給することを含んでよい。方法は、前記並行性確認モジュールにより、１つ以上の並行脆弱性を識別するよう、前記テスト・ケースを１つ以上のスケジューリング・ポリシーにより試験することを更に含んでよい。
【０００５】
実施形態の目的及び利点は、少なくとも、特許請求の範囲で特に指し示されている要素、特徴、及び組み合わせによって、実現及び達成されるだろう。
【０００６】
前述の概要及び以下の詳細な説明は、請求される発明の限定ではなく、説明及び例示であることが理解されるべきである。
【図面の簡単な説明】
【０００７】
例となる実施形態は、添付の図面の使用を通じて、更なる特定及び詳細をもって記載及び説明されるだろう。
【０００８】
【図１】例となるプログラムの複数のスレッドを含むソースコードを表す。
【図２】複数のスレッドを含むプログラムの例のソースコードを表す。
【図３】グレーボックス・ファザー及び並行性確認モジュールを含むシステムの例を表す。
【図４】グレーボックス・ファジングを実行する方法の例となるフロー図を表す。
【図５】複数のスレッド及びロケーションを含むプログラムの例のソースコードを表す。
【図６】例となるコンピュータ装置のブロック図である。
【発明を実施するための形態】
【０００９】
本明細書で説明される様々な実施形態は、並行性バグを発見することに関する。例えば、いくつかの実施形態は、バグ（例えば、ハッカー及び／又は犯罪者によって悪用され得るバグ）を発見するようプログラム・バイナリを試験することに関係があり得る。
【００１０】
並行性バグは、それらの発生が、例えば、オペレーティング・システムのスケジューリング・ポリシー及び外部環境に依存するので、周知のことだが、発見及び再現することが難しい。より具体的には、プログラムの実行の順序はスケジューリング・ポリシーに基づき変化することがあるので、脆弱性の検出又は再現は困難であり得る。
【００１１】
“ファジング”（fuzzing）又は“ファズ試験”（fuzz  testing）は、無効な、予期しない、又はランダムなデータをコンピュータ・プログラムへの入力として供給することを含む自動ソフトウェア試験プロセスを指し得る。カバレッジに基づくグレーボックス・ファジング（ＣＧＦ；Coverage-based  Greybox  Fuzzing）は、プログラム解析を必要としなくてよいランダム試験アプローチである。カバレッジ誘導（coverage-guided）グレーボックス・ファジングは、バグを発見するための、よく知られた技術である。しかし、並行性バグに対するカバレッジ誘導の影響は非常に限られている。グレーボックス・ファジングでは、プログラムは入力をもって実行され得、カバレッジが観測され得る。けれども、いくつかのバグは、試験中に検出されない可能性があり、あるいは、同じ入力による多数（例えば、１０００回）の実行の後にしか起こらない可能性がある。更に、モデル検査及びアクティブ試験は、所与の入力により並行性バグを発見し得るが、入力を決定することが努力を必要としうる。
【００１２】
様々な実施形態は、並行性バグを発見することに関するファジングの有効性を改善する方法に関係があり得る。よって、本明細書でより十分に記載される本開示の様々な実施形態は、人によって道理に従って実行され得ないテクノロジから生じる１つ以上の問題に対する技術的解決法を提供し、そして、本明細書で開示される様々な実施形態は、上記の問題及び／又は課題を解決するためにコンピュータ・テクノロジに根ざしている。更に、本明細書で開示される少なくともいくつかの実施形態は、コンピュータによって従前実行不可能であった機能のコンピュータ実行を可能にすることによって、コンピュータ関連テクノロジを改善し得る。
【００１３】
本開示の実施形態は、添付の図面を参照して説明される。
【００１４】
図１は、例となるプログラムの２つのスレッド、すなわち、スレッド１０２（“Thread1”）及びスレッド１０４（“Thread2”）、を含むソースコード１００を表す。例えば、グレーボックス・ファジングは、両方のパス（例えば、ｙ＞１５及びｙ＜＝１５）を実行する入力を生成してよい。しかし、例えば、ｙ＝１８により多数回（例えば、１０００回）プログラムを実行すること、バグを発見しない可能性がある。むしろ、バグは、スケジューラがスレッド１０２における命令を実行する前にスレッド１０４における全ての命令を実行する（従って、ｘ＝０、よって、Abort()関数が呼び出され得る。）場合にのみ起こり得る。更に、モデル検査及び／又はアクティブ試験は、ｙが特定の値（例えば、ｙ＝１８）である場合にしかバグを発見しない可能性がある。
【００１５】
スレッドは、演算のストリームを含んでよい。例えば、オペレーティング・システムは、開始から終了まで１つずつ命令を実行してよい。逐次プログラムは、１つしかスレッドがない場合に、しばしば、シングルスレッドのプログラムと呼ばれる。シングルスレッドでは、しばしば、実行の多数のブランチが存在する。例えば、プログラムが条件ｘ＞０を含む場合には、２つのブランチ、すなわち、ｘ＞０（条件が真であるとき、しばしば“then”ブランチと呼ばれる。）及びｘ＜＝０（“else”ブランチ、“if  …  then  …  else  …”に由来した名称）がある。入力（例えば、ｘ＝１又はｘ＝−１）に応じて、演算のストリームは“then”ブランチ又は“else”ブランチをたどってよい。
【００１６】
ウィーク・メモリ・モデル（ＷＭＭ；Weak  Memory  Models）（例えば、Ｃ及びＪａｖａ（登録商標）で使用される。）によれば、命令サイクル（ひいては性能）を最適化するよう、命令は、プログラム内のそれらの元の順序で実行されないことがある。更に、アクティブ試験により、スケジューラの、命令をインターリーブするためのポリシーは、並行性バグを発見するよう制御され得る。更には、モデル検査により、ＷＭＭの下での全ての競合は、（例えば、サマリー関数（summary  function）を介して）検出され得る。
【００１７】
例えば、図２を参照して、２つのスレッド、すなわち、スレッド２０２（“Thread1”）及びスレッド２０４（“Thread2”）、を含むプログラムの例のソースコード２００が表されている。例えば、ＷＭＭは、性能のためにプログラムを最適化してよい（例えば、ｙ＝１は、ｘ＝１の前に実行されてよい。）。起こり得るＷＭＭの下での１つの潜在的な競合は、ｙ＝１、ｘ＝０である。
【００１８】
アメリカン・ファジー・ロップ（ＡＦＬ；American  Fuzzy  Lop）は、テスト・ケースのコード・カバレッジを大きくするためのアルゴリズムを使用する既知のファジング・ツールである。例えば、プログラムをインストルメントするためにＡＦＬを利用すると、プログラムの各基本ブロックは一意の識別子ロケーションを与えられ得る。更に、ブロックＡからブロックＢへの移行は、“locationA  ^  locationB”によって識別され得る（例えば、XORがハッシングとして使用され得る。）。更には、様々な実施形態に従って、ビットマップ（例えば、ビットのアレイ）は、どの移行が既に探査されているかを識別するために使用されてよい。例えば、ビットマップ内の新しいビットは、テスト・ケースにおける新しい移行の識別（例えば、発見及び／又は探査）を示し得る。更に、例えば、汎用アルゴリズムにより、テスト・ケースの組（例えば、母集団）がミューテートされ得る。少なくともいくつかの実施形態では、新しい移行を発見するテスト・ケースは、ミューテートされるよう優先順位を付けられてよい。ＡＦＬは、決定的プログラムにとって有効と考えられ、異なるプログラム・パスを働かせるための入力（テスト・ケース）を直ちに生成し得る。しかし、ＡＦＬは、スケジューラ又は環境を制御することができないことがあるので、並行性バグを発見することができない可能性がある。
【００１９】
本開示の様々な実施形態に従って、アルゴリズムは、共有メモリへの全てのリード（READ）及びライト（WRITE）動作が識別され得る前処理を含んでよい（例えば、共有メモリへの全てのリード及びライト・アクセスをインストルメントする。）。
【００２０】
更に、アルゴリズムは、プログラムの異なるブランチを探索するための入力を（例えば、グレーボックス・ファザーにより）生成することを含んでよい。例えば、いくつかの実施形態において、競合するペアの組において命令文（statements）を有しているプログラムのブランチは、特に関心が持たれ得る（例えば、焦点を当てられる。）。より具体的には、いくつかの実施形態において、競合するペアの組において命令文を有しているプログラムのブランチは、関連するテスト・ケースが優先テスト・ケースであるかどうかを判定するよう解析されてよい。
【００２１】
例えば、グレーボックス・ファザーは、並行性バグに焦点を当てるよう構成されてよい。より具体的には、いくつかの実施形態に従って、２つのビットマップが使用されてよく、一方のビットマップ（“第１ビットマップ”）は、全体のカバレッジのために使用されてよく（例えば、ＡＦＬと同様）、他方のビットマップは、競合するペアの組のために使用されてよい。
【００２２】
例えば、ツール（例えば、ファザー）を実装する擬似コードは：
【数１】
2019204482.tif 000003
を含んでよい。ここで、現在及び前のロケーション（“cur_location”及び“prev_location”）は、共有メモリ（“shared_mem”）へのリード及びライトのロケーションを含む。
【００２３】
その上、アルゴリズムは、入力を（例えば、グレーボックス・ファザーにより）選択すること、及び並行性確認モジュール（例えば、モデル・チェッカー）へ入力を送ることを含んでよい。いくつかの実施形態に従って、ミューテーションのために入力を選択する場合に、第２ビットマップにおいて新しいトレースを生成する入力が、最初に選択されてよい。更に、少なくともいくつかの実施形態では、第２ビットマップにおいて一意のカバレッジを生成するテスト入力のみが並行性確認モジュールへ送られてよい。
【００２４】
更に、アルゴリズムは、並行性バグを発見するよう、ファザーからの夫々の具体的な入力を異なるスケジューリング・ポリシーを用いて（例えば、モデル・チェッカー又はアクティブ試験ツールのような、並行性確認モジュールにより）解析することを含んでよい。
【００２５】
図３は、本開示の様々な実施形態に従って、例となるシステム３００を表す。システム３００はファザー３０２を含み、ファザー３０２はグレーボックス・ファザーを含んでよい。より具体的には、例えば、ファザーは、競合指向の（race  directed）カバレッジ誘導グレーボックス・ファザーを含んでよい。システム３００は並行性確認モジュール３０４（本明細書では“確認ツール”又は“試験装置”とも呼ばれる。）を更に含む。並行性確認モジュール３０４は、モデル・チェッカー及び／又はアクティブ試験ツールを含んでよい。例えば、並行性確認モジュール３０４がモデル・チェッカーを含む実施形態では、並行性確認モジュール３０４は、明示的状態（explicit-state）モデル・チェッカーを含んでよい。
【００２６】
システム３００の予期された動作中に、ファザー３０２は、プログラムの異なるブランチを探索するための入力を生成（例えば、決定）してよい。更に、ファザー３０２は入力を選択してよく、そして、入力はファザー３０２から並行性確認モジュール３０４へ送られてよい。更には、並行性確認モジュール３０４は、並行性バグを発見するよう、夫々の具体的な入力を異なるスケジューリング・ポリシーを用いてチェックしてよい。このように、様々な実施形態に従って、システム３００、そして、より具体的には、ファザー３０２は、並行性確認モジュール３０４へ供給されるテスト・ケースの数を減らすよう構成されてよい。
【００２７】
変更、追加、又は削除は、本開示の適用範囲から逸脱することなしに、システム３００に対して行われてよい。例えば、システム３００は、２つ以上のファザー３０２及び／又は２つ以上の並行性確認モジュール３０４を含んでよい。
【００２８】
図４は、本開示の１つ以上の実施形態に従って、ファジングを実行する例となる方法４００のフローチャートを表す。いくつかの実施形態において、方法４００に関連した動作の１つ以上は、図１のシステム３００によって行われてよい。より具体的には、例えば、方法４００は、システム３００のファザー３０２によって行われてよい。
【００２９】
代替的に、又は追加的に、方法４００は、如何なる適切なシステム、装置、又はデバイスによっても行われてよい。例えば、システム６００のプロセッサ６１０（図６を参照。）が、方法４００に関連した動作の１つ以上を実行してよい。たとえ別個のブロックにより表されているとしても、方法４００のブロックの１つ以上に関連したステップ及び動作は、所望の実施に応じて、更なるブロックに分けられても、より少ないブロックへとまとめられても、又は削除されてもよい。
【００３０】
ブロック４０２で、テスト・ケースが識別されてよく、方法４００はブロック４０４へ進んでよい。いくつかの実施形態において、待ち行列（queue）がテスト・ケースを含んでよく、テスト・ケースは、それらのテスト・ケースに割り当てられている優先度に基づき試験のために識別されてよい。よって、そのような実施形態では、待ち行列内で最も高い優先度を有しているテスト・ケースが、試験のために識別されてよい。例えば、テスト・ケースは、システム６００のプロセッサ６１０（図６を参照。）により決定（例えば、識別）されてよい。
【００３１】
例えば、１つ又は複数のシード・テスト・ケースを含むいくつかの実施形態では、グレーボックス・ファザー（例えば、図３のファザー３０２）は、入力をミューテートし、最も高い優先度を有している１つ又は複数のケースを、再びミューテートされるように選択してよい。いくつかの実施形態に従って、優先度（例えば、高又は低）は、適応度関数（fitness  function）によって決定されてよい。
【００３２】
更に、少なくともいくつかの実施形態では、テスト・ケースに基づき、競合するペアの組を含むプログラムの２つ以上のブランチは、テスト・ケースが高優先度のテスト・ケース（“優先テスト・ケース”とも呼ばれる。）又は低優先度のテスト・ケースであるかどうかを判定するよう（例えば、図３のファザー３０２のような、グレーボックス・ファザーにより）解析されてよい。例えば、解析は、ブロック４０４及び４０８を参照して以下でより詳細に記載されるように、第１ビットマップ及び第２ビットマップの夫々が新しいビットを含むか否かを判定することを含んでよい。
【００３３】
例えば、ブロック４０４で、第１ビットマップ内の新しいビットが生成されているか否かに関して決定がなされてよい。第１ビットマップ内の新しいビットが生成されていない場合には、方法４００はブロック４０６へ進んでよい。第１ビットマップ内の新しいビットが生成されていた場合には、方法４００はブロック４０８へ進んでよい。いくつかの実施形態において、第１ビットマップはＡＦＬタイプのビットマップを含んでよい。
【００３４】
例えば、ブロック４０４で、１つのビット（例えば、０又は１）に基づき、新しい条件が競合において起きた（例えば、新しいビットが生成された）か否かが判定されてよい。より具体的には、例えば、ビットマップは、どの１つ以上のブランチが探索されたかを記録してよい。更に、例えば、ファザー（例えば図３のファザー３０２）がテスト入力（又は“テスト・ケース”若しくは“テスト・ベクトル”）を用いてプログラムを実行し、トレースを記録する場合に、ビットマップが新しいビットを含む（例えば、新しいブランチが発見された）かどうかが判定されてよい。新しいブランチを発見するテスト・ケースは、（再びミューテートされるよう）より高い優先度を割り当てられてよい。例えば、システム６００のプロセッサ６１０（図６を参照。）が、第１ビットマップ内の新しいビットが生成されているか否を判定してよい。
【００３５】
ブロック４０６で、テスト・ケースは捨てられてよい。いくつかの実施形態において、方法４００は、（例えば、テスト・ケースが捨てられた後に）ブロック４０２へ戻ってよい。
【００３６】
ブロック４０８で、第２ビットマップ内の新しいビットが生成されているか否かに関して決定がなされてよい。第２ビットマップ内の新しいビットが生成されていない場合には、方法４００はブロック４１０へ進んでよい。第２ビットマップ内の新しいビットが生成されていた場合には、方法４００はブロック４１２及びブロック４１４の夫々へ進んでよい。例えば、システム６００のプロセッサ６１０（図６を参照。）が、第２ビットマップの新しいビットが生成されているか否を判定してよい。
【００３７】
例えば、少なくともいくつかの実施形態では、第１ビットマップは、（例えば、プログラム全体における）発見された１つ以上のブランチを記録してよい。更に、第２ビットマップは、同じようにして、共有メモリにおけるブランチを決定してよい。テスト・ケースが第２ビットマップにおいて新しいビットを発見する（例えば、共有メモリにおいて新しいブランチを発見する）場合に、そのテスト・ケースは、並行性バグを発見することにとって興味深いものであり得る。テスト・ケースが興味深いものであるということで、そのテスト・ケースは、異なるスケジューリング・ポリシーでの更なる検査のために、（例えば、ブロック４１２で）モデル・チェッカー／アクティブ試験ツールへ送られてよい。更に、テスト・ケースは、ミューテートされるよう（例えば、ブロック４１４で）より高い優先度を割り当てられてよい。
【００３８】
ブロック４１０で、テスト・ケースは、低い優先度を割り当てられてよく、方法４００はブロック４１６へ進んでよい。例えば、テスト・ケースは、テスト・ケース待ち行列の一番下に又はその近くに位置付けられてよい。例えば、システム６００のプロセッサ６１０（図６を参照。）が、テスト・ケースに低い優先度を割り当ててよい。
【００３９】
ブロック４１２で、テスト・ケースは並行性確認モジュールへ送られてよい。例えば、テスト・ケースは並行性確認モジュール３０４（図３を参照。）へ送られてよく、並行性確認モジュール３０４はモデル・チェッカー及び／又はアクティブ試験ツールを含んでよい。
【００４０】
ブロック４１４で、テスト・ケースは、高い優先度を割り当てられてよく、方法４００はブロック４１６へ進んでよい。例えば、テスト・ケースは、テスト・ケース待ち行列の一番上に又はその近くに位置付けられてよい。例えば、システム６００のプロセッサ６１０（図６を参照。）が、テスト・ケースに高い優先度を割り当ててよい。
【００４１】
ブロック４１６で、テスト・ケースはミューテートされてよく、方法４００はブロック４０２へ戻ってよい。例えば、システム６００のプロセッサ６１０（図６を参照。）がテスト・ケースをミューテートしてよい。
【００４２】
変更、追加、又は削除は、本開示の適用範囲から逸脱することなしに、方法４００に対して行われてよい。例えば、方法４００の動作は別の順序で実施されてよい。更に、説明されている動作及びアクションは、単に例として与えられており、動作及びアクションの一部は、開示されている実施形態の本質から外れることなしに、任意であっても、より少ない動作及びアクションへとまとめられても、又は更なる動作及びアクションに拡張されてもよい。例えば、いくつかの実施形態において、方法４００は、共有メモリへのプログラムの夫々のリード及びライト・アクセスについてインストルメントすることを含んでよい。
【００４３】
図５は、２つのスレッド、すなわち、スレッド５０２（“Thread1”）及びスレッド５０４（“Thread2”）、を含むプログラムの例となるソースコード５００を表す。例えば、第２ビットマップ（例えば、競合するペアの組についてのビットマップ）に焦点を当てると、テスト・ケースｙ＝３又はｙ＝７において、フローはロケーションＡ（“Location  A”）からロケーション（“Location  B”）へ進む。この例では、新しいブランチは、第２ビットマップではなく第１ビットマップにおいて発見される。別の言い方をすれば、第１ビットマップは新しいビットを含むが、第２ビットマップは新しいビットを含まない。然るに、この例では、テスト・ケースは、競合検出にとって興味深いものではなく、テスト・ケースは低い優先度を与えられ得る。しかし、他の例として、例えば、ｙ＝１８では、フローはロケーションＡからロケーションＢへ、そしてロケーションＢからロケーションＣ（“Location  C”）へ進む。この例では、新しいブランチは第１ビットマップにおいて生成され、且つ、新しいブランチは第２ビットマップにおいて生成される。別の言い方をすれば、第１ビットマップは新しいビットを含み、且つ、第２ビットマップは新しいビットを含む。然るに、この例では、テスト・ケースは、競合検出にとって興味深いものであり、そして、テスト・ケースは高い優先度を与えられ得る。更に、テスト・ケースは、並行性確認モジュール３０４（図３を参照。）のような、並行性確認モジュール（例えば、モデル・チェッカー及び／又はアクティブ試験ツール）へ供給されてよい。
【００４４】
例えば、３つの入力ｙ＝３、７及び１８の実行がこれより説明される。ｙ＝３の場合に、ｙ＞１５及びｙ＞３はいずれも偽であり、よって、移行シーケンスはロケーションＡ→ロケーションＢ→ロケーションＦ（“Location  F”）である。ｙ＝７の場合に、ｙ＞１５は偽であるが、ｙ＞５は真である。よって、移行シーケンスはロケーションＡ→ロケーションＢ→ロケーションＥ（“Location  Ｅ”）→ロケーションＦである。然るに、第１ビットマップと比較して、ロケーションＢからロケーションＥへ及びロケーションＥからロケーションＦへの移行を記録する２つの新しいビットがある。しかし、それらの移行は、この例では変数ｘしか含まない共有メモリとは無関係である。よって、第２ビットマップにおいては新しいビットがない。従って、テスト・ケースは並行性確認モジュールへ送られなくてよい。
【００４５】
ｙ＝１８の場合に、ｙ＞１５は真であり、起こり得るスケジューリング・ポリシーはThread1及びThread2に等しい優先度を与えてよい。よって、ｘ＝１は、条件文if（x!=1）の前に実行されてよく、よって、条件は偽である。この例では、移行シーケンスは、ロケーションＡ→ロケーションＢ→ロケーションＤ→ロケーションＦであってよい。このテスト・ケースはバグを発見することができない（例えば、中止（abort）命令文はプログラムの強制終了を行い得るが、それは、第２ビットマップ内の新しい移行（例えば、ロケーションＢからロケーションＤ）が発見され得るということで、興味深いものであると見なされ得る。）。よって、この例では、テスト・ケースは並行性確認モジュールへ送られてよい。並行性確認モジュールは、x!=1を真とするポリシーを発見することができ、よって、バグが発見され得る。
【００４６】
図６は、本開示の少なくとも１つの実施形態に従って、例となるコンピュータ装置６００のブロック図である。コンピュータ装置６００は、デスクトップ・コンピュータ、ラップトップ・コンピュータ、サーバ・コンピュータ、タブレット・コンピュータ、携帯電話機、スマートフォン、パーソナル・デジタル・アシスタント（ＰＤＡ）、電子リーダー装置、ネットワーク・スイッチ、ネットワーク・ルータ、ネットワーク・ハブ、若しくは他のネットワークキング装置、又は他の適切なコンピュータ装置を含んでよい。
【００４７】
コンピュータ装置６００は、プロセッサ６１０、記憶デバイス６２０、メモリ６３０、及び通信デバイス６４０を含んでよい。プロセッサ６１０、記憶デバイス６２０、メモリ６３０、及び／又は通信デバイス６４０は、コンポーネントの夫々が他のコンポーネントと通信し得るように、全てが通信上結合されてよい。コンピュータ装置６００は、本開示で記載される動作のいずれかを実行してよい。
【００４８】
一般に、プロセッサ６１０は、様々なハードウェア又はソフトウェア・モジュールを含む如何なる適切な特別目的又は汎用のコンピュータ、コンピューティング・エンティティ、又はプロセッシング・デバイスも含んでよく、如何なる適切な適用可能なコンピュータ可読記憶媒体に記憶されている命令も実行するよう構成されてよい。例えば、プロセッサ６１０は、マイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、あるいは、プログラム命令を解釈及び／又は実行するよう及び／又はデータを処理するよう構成された他のあらゆるデジタル又はアナログ回路を含んでよい。図６では単一のプロセッサとして表されているが、プロセッサ６１０は、本開示で記載される動作をいくつでも個別的に又は集合的に実行するよう構成されたプロセッサをいくつでも含んでよい。
【００４９】
いくつかの実施形態において、プロセッサ６１０は、記憶デバイス６２０、メモリ６３０、又は記憶デバイス６２０及びメモリ６３０に記憶されているプログラム命令を解釈及び／又は実行し及び／又はそれに記憶されているデータを処理してよい。いくつかの実施形態において、プロセッサ６１０は、記憶デバイス６２０からプログラム命令をフェッチし、プログラム命令をメモリ６３０にロードしてよい。プログラム命令がメモリ６３０にロードされた後、プロセッサ６１０はプログラム命令を実行してよい。
【００５０】
例えば、いくつかの実施形態において、並行脆弱性を検出するプロセッシング動作の１つ以上は、プログラム命令としてデータ記憶部６２０に含まれてよい。プロセッサ６１０は、プロセッシング動作の１つ以上のプログラム命令をフェッチしてよく、プロセッシング動作のプログラム命令をメモリ６３０にロードしてよい。プロセッシング動作のプログラム命令がメモリ６３０にロードされた後、プロセッサ６１０はプログラム命令を実行してよく、それにより、コンピュータ装置６００は、プログラム命令によって指示されるように、プロセッシング動作に関連した動作を実施してよい。
【００５１】
記憶デバイス６２０及びメモリ６３０は、コンピュータ実行可能命令又はデータ構造を運ぶ又は記憶しているコンピュータ可読記憶媒体を含んでよい。そのようなコンピュータ可読記憶媒体は、プロセッサ６１０のような汎用又は特別目的のコンピュータによってアクセスされ得る如何なる利用可能な媒体も含んでよい。例として、制限なしに、そのようなコンピュータ可読記憶媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭ若しくは他の光ディスクストレージ、磁気ディスクストレージ若しくは他の磁気記憶デバイス、フラッシュ・メモリ（例えば、固体状態メモリ・デバイス）、あるいは、コンピュータ実行可能命令又はデータ構造の形で所望のプログラム・コードを搬送又は記憶するために使用されてよく且つ汎用又は特別目的のコンピュータによってアクセスされ得る他のあらゆる記憶媒体を含む有形な又は非一時的なコンピュータ可読記憶媒体を含んでよい。上記の組み合わせも、コンピュータ可読記憶媒体の適用範囲内に含まれ得る。コンピュータ実行可能命令は、例えば、プロセッサ６１０に特定の動作又は動作群を実行させるよう構成された命令及びデータを含んでよい。
【００５２】
いくつかの実施形態において、記憶デバイス６２０及び／又はメモリ６３０は、並行脆弱性検出に関連したデータ、より具体的には、ソースコード、プログラム、入力、ビット、ビットマップ、テスト入力待ち行列、などに関連したデータを記憶してよい。
【００５３】
通信デバイス６４０は、コンピュータ装置６００と他の電子機器との間の通信を助ける又は可能にするよう構成された如何なるデバイス、システム、コンポーネント、又はコンポーネントの集合も含んでよい。例えば、通信デバイス６４０は、制限なしに、モデム、ネットワーク・カード（無線若しくは有線）、赤外線通信デバイス、光通信デバイス、無線通信デバイス（例えば、アンテナ）、及び／又はチップセット（例えば、Ｂｌｕｅｔｏｏｔｈ（登録商標）デバイス、８０２．６デバイス（例えば、メトロポリタン・エリア・ネットワーク（ＭＡＮ））、Ｗｉ−Ｆｉデバイス、ＷｉＭＡＸデバイス、セルラー通信設備、など）、及び／又は同様のものを含んでよい。通信デバイス６４０は、いくつかの例を挙げると、セルラー・ネットワーク、Ｗｉ−Ｆｉネットワーク、ＭＡＮ、光ネットワーク、などのような如何なるネットワーク、及び／又は遠隔デバイスを含む、本開示で記載される他のあらゆるデバイスともデータが交換されることを可能にし得る。
【００５４】
変更、追加、又は省略は、本開示の適用範囲から逸脱することなしに、図６に対して行われてよい。例えば、コンピュータ装置６００は、本開示で例示及び記載されているものよりも多い又は少ない要素を含んでよい。例えば、コンピュータ装置６００は、タブレット又は携帯電話機の画面のような、組み込まれた表示装置を含んでよく、あるいは、コンピュータ装置６００から離れており、それと通信上結合され得る外付けモニタ、プロジェクタ、テレビ受像機、又は他の適切な表示装置を含んでよい。
【００５５】
本開示で使用されるように、語“モジュール”又は“コンポーネント”は、モジュール若しくはコンポーネントの動作を実行するよう構成された特定のハードウェア実施、並びに／又はコンピューティング・システムの汎用ハードウェア（例えば、コンピュータ可読媒体、プロセッシング・デバイス、など）によって記憶及び／若しくは実行され得るソフトウェア・オブジェクト若しくはソフトウェア・ルーチンを指し得る。いくつかの実施形態において、本開示で記載される種々のコンポーネント、モジュール、エンジン、及びサービスは、コンピューティング・システムで（例えば、別個のスレッドとして）実行するオブジェクト又はプロセスとして実装されてよい。本開示で記載されるシステム及び方法の一部は、概して、（汎用ハードウェアによって記憶及び／又は実行される）ソフトウェアにおいて実装されるものとして記載されているが、特定のハードウェア実施、又はソフトウェア及び特定のハードウェア実施の組み合わせも可能であり、考えられている。本開示において、“コンピューティング・エンティティ”は、本開示で以前に定義されたあらゆるコンピューティング・システム、又はコンピューティング・システムで実行されるあらゆるモジュール若しくはモジュールの組み合わせであってよい。
【００５６】
本開示で、特に添付の特許請求の範囲（例えば、添付の特許請求の本文）で使用される語は、一般的に、“非限定的な（open）”用語として意図されている（例えば、語「含んでいる（including）」は、“〜を含んでいるが、〜に制限されない”との意に解釈されるべきであり、語「備えている（having）」は、“少なくとも〜を備えている”との意に解釈されるべきであり、語「含む（includes）」は、“〜を含むが、〜に制限されない”との意に解釈されるべきである、など。）。
【００５７】
加えて、導入されたクレーム記載（introduced  claim  recitation）において特定の数が意図される場合、そのような意図は当該クレーム中に明確に記載され、そのような記載がない場合は、そのような意図も存在しない。例えば、理解を促すために、後続の添付された特許請求の範囲では、「少なくとも１つの（at  least  one）」及び「１つ以上の（one  or  more）」といった導入句を使用し、クレーム記載を導入することがある。しかし、このような句を使用するからといって、「a」又は「an」といった不定冠詞によりクレーム記載を導入した場合に、たとえ同一のクレーム内に、「１つ以上の」又は「少なくとも１つの」といった導入句と「a」又は「an」といった不定冠詞との両方が含まれるとしても、当該導入されたクレーム記載を含む特定のクレームが、当該記載事項を１しか含まない例に限定されるということが示唆されると解釈されるべきではない（例えば、「a」及び／又は「an」は、「少なくとも１つの」又は「１つ以上の」を意味すると解釈されるべきである。）。定冠詞を使用してクレーム記載を導入する場合にも同様のことが当てはまる。
【００５８】
更には、導入されたクレーム記載において特定の数が明示されている場合であっても、そのような記載は、通常、少なくとも記載された数を意味するように解釈されるべきであることは、当業者には理解されるであろう（例えば、他に修飾語のない、単なる「２つの記載事項」という記載がある場合、この記載は、少なくとも２つの記載事項、又は２つ以上の記載事項を意味する。）。更に、「Ａ、Ｂ及びＣなどのうち少なくとも１つ」又は「Ａ、Ｂ及びＣなどのうちの１つ以上」に類する表記が使用される場合、一般的に、そのような構造は、Ａのみ、Ｂのみ、Ｃのみ、ＡとＢの両方、ＡとＣの両方、ＢとＣの両方、及び／又はＡとＢとＣの全て、などを含むよう意図される。
【００５９】
更に、２つ以上の選択可能な用語を表す如何なる離接語及び／又は離接句も、明細書、特許請求の範囲、又は図面のいずれであろうと、それら用語のうちの１つ、それらの用語のうちのいずれか、あるいは、それらの用語の両方を含む可能性を意図すると理解されるべきである。例えば、「Ａ又はＢ」という句は、「Ａ又はＢ」、あるいは、「Ａ及びＢ」の可能性を含むことが理解されるべきである。
【００６０】
本開示で挙げられている全ての例及び条件付き言語は、当該技術の促進に本発明者によって寄与される概念及び本発明を読者が理解するのを助ける教育上の目的を意図され、そのような具体的に挙げられている例及び条件に制限されないと解釈されるべきである。本開示の実施形態が詳細に記載されてきたが、様々な変更、置換、及び代替が、本開示の主旨及び適用範囲から逸脱することなしに行われてよい。
【００６１】
上記の実施形態に加えて、以下の付記を開示する。
（付記１）
並行脆弱性を識別する方法であって、
共有メモリへのプログラムのリード及びライト・アクセスをインストルメントすることと、
グレーボックス・ファザーにより前記プログラムのテスト・ケースを識別することと、
前記グレーボックス・ファザーにより前記テスト・ケースに基づき、該テスト・ケースが優先テスト・ケースであるかどうかを判別するよう、競合するペアの組を含む前記プログラムの２つ以上のブランチを解析することと、
前記テスト・ケースが優先テスト・ケースであることに応答して、該テスト・ケースを前記グレーボックス・ファザーから並行性確認モジュールへ供給することと、
前記並行性確認モジュールにより、１つ以上の並行脆弱性を識別するよう、前記テスト・ケースを１つ以上のスケジューリング・ポリシーにより試験することと
を有する方法。
（付記２）
前記テスト・ケースを前記並行性確認モジュールへ供給することは、モデル・チェッカー及びアクティブ試験ツールのうちの１つへ前記テスト・ケースを供給することを含む、
付記１に記載の方法。
（付記３）
前記プログラムの前記２つ以上のブランチを解析することは、
前記テスト・ケースが第１ビットマップ及び第２ビットマップの夫々で新しいビットを生成するかどうかを判定することと、
前記テスト・ケースが前記第１ビットマップ及び前記第２ビットマップの夫々で新しいビットを生成する場合に、前記テスト・ケースを優先テスト・ケースとして識別することと
を有する、
付記１に記載の方法。
（付記４）
前記プログラムのブランチを解析することは、競合指向型のカバレッジ誘導グレーボックス・ファザーにより前記ブランチを解析することを含む、
付記１に記載の方法。
（付記５）
１つ以上の並行脆弱性を識別するよう前記テスト・ケースを１つ以上のスケジューリング・ポリシーにより試験することは、モデル・チェッカー及びアクティブ試験ツールのうちの１つにより前記テスト・ケースを試験することを含む、
付記１に記載の方法。
（付記６）
前記テスト・ケースが優先テスト・ケースでないことに応答して、テスト・ケース優先度付き待ち行列の一番上に又はその近くに前記テスト・ケースを位置付ける
付記１に記載の方法。
（付記７）
前記テスト・ケースが優先テスト・ケースでないことに応答して、
前記テスト・ケースを低優先テスト・ケースとして指定し、
テスト・ケース優先度付き待ち行列の一番下に又はその近くに前記テスト・ケースを位置付ける
付記１に記載の方法。
（付記８）
１つ以上のプロセッシング・システムによって実行される場合に、該プロセッシング・システムに、
共有メモリへのプログラムのリード及びライト・アクセスをインストルメントすることと、
グレーボックス・ファザーにより前記プログラムのテスト・ケースを識別することと、
前記グレーボックス・ファザーにより前記テスト・ケースに基づき、該テスト・ケースが優先テスト・ケースであるかどうかを判別するよう、競合するペアの組を含む前記プログラムの２つ以上のブランチを解析することと、
前記テスト・ケースが優先テスト・ケースであることに応答して、該テスト・ケースを前記グレーボックス・ファザーから並行性確認モジュールへ供給することと、
前記並行性確認モジュールにより、１つ以上の並行脆弱性を識別するよう、前記テスト・ケースを１つ以上のスケジューリング・ポリシーにより試験することと
を有する動作を実行させる命令を含む
１つ以上の非一時的なコンピュータ可読媒体。
（付記９）
前記テスト・ケースを前記並行性確認モジュールへ供給することは、モデル・チェッカー及びアクティブ試験ツールのうちの１つへ前記テスト・ケースを供給することを含む、
付記８に記載のコンピュータ可読媒体。
（付記１０）
前記プログラムの前記２つ以上のブランチを解析することは、
前記テスト・ケースが第１ビットマップ及び第２ビットマップの夫々で新しいビットを生成するかどうかを判定することと、
前記テスト・ケースが前記第１ビットマップ及び前記第２ビットマップの夫々で新しいビットを生成する場合に、前記テスト・ケースを優先テスト・ケースとして識別することと
を有する、
付記８に記載のコンピュータ可読媒体。
（付記１１）
前記プログラムのブランチを解析することは、競合指向型のカバレッジ誘導グレーボックス・ファザーにより前記ブランチを解析することを含む、
付記８に記載のコンピュータ可読媒体。
（付記１２）
１つ以上の並行脆弱性を識別するよう前記テスト・ケースを１つ以上のスケジューリング・ポリシーにより試験することは、モデル・チェッカー及びアクティブ試験ツールのうちの１つにより前記テスト・ケースを試験することを含む、
付記８に記載のコンピュータ可読媒体。
（付記１３）
前記テスト・ケースが優先テスト・ケースでないことに応答して、テスト・ケース優先度付き待ち行列の一番上に又はその近くに前記テスト・ケースを位置付ける
付記８に記載のコンピュータ可読媒体。
（付記１４）
前記テスト・ケースが優先テスト・ケースでないことに応答して、
前記テスト・ケースを低優先テスト・ケースとして指定し、
テスト・ケース優先度付き待ち行列の一番下に又はその近くに前記テスト・ケースを位置付ける
付記８に記載のコンピュータ可読媒体。
（付記１５）
共有メモリへのプログラムのリード及びライト・アクセスをインストルメントし、
グレーボックス・ファザーにより前記プログラムのテスト・ケースを識別し、
前記グレーボックス・ファザーにより前記テスト・ケースに基づき、該テスト・ケースが優先テスト・ケースであるかどうかを判別するよう、競合するペアの組を含む前記プログラムの２つ以上のブランチを解析し、
前記テスト・ケースが優先テスト・ケースであることに応答して、該テスト・ケースを前記グレーボックス・ファザーから並行性確認モジュールへ供給し、
前記並行性確認モジュールにより、１つ以上の並行脆弱性を識別するよう、前記テスト・ケースを１つ以上のスケジューリング・ポリシーにより試験する
よう構成された１つ以上のプロセッシング・ユニットを有する
システム。
（付記１６）
前記並行性確認モジュールは、モデル・チェッカー及びアクティブ試験ツールのうちの１つを有する、
付記１５に記載のシステム。
（付記１７）
前記プログラムの前記２つ以上のブランチを解析するよう、前記１つ以上のプロセッシング・ユニットは、
前記テスト・ケースが第１ビットマップ及び第２ビットマップの夫々で新しいビットを生成するかどうかを判定し、
前記テスト・ケースが前記第１ビットマップ及び前記第２ビットマップの夫々で新しいビットを生成する場合に、前記テスト・ケースを優先テスト・ケースとして識別する
よう構成される、
付記１５に記載のシステム。
（付記１８）
前記グレーボックス・ファザーは、競合指向型のカバレッジ誘導グレーボックス・ファザーを有する、
付記１５に記載のシステム。
（付記１９）
前記テスト・ケースが優先テスト・ケースでないことに応答して、前記１つ以上のプロセッシング・ユニットは、テスト・ケース優先度付き待ち行列の一番下に又はその近くに前記テスト・ケースを位置付けるよう構成される、
付記１５に記載のシステム。
（付記２０）
前記テスト・ケースが優先テスト・ケースでないことに応答して、前記１つ以上のプロセッシング・ユニットは、テスト・ケース優先度付き待ち行列の一番上に又はその近くに前記テスト・ケースを位置付けるよう構成される、
付記１５に記載のシステム。
【符号の説明】
【００６２】
３００  システム
３０２  ファザー
３０４  並行性確認モジュール
６００  コンピュータ装置
６１０  プロセッサ
６２０  記憶デバイス
６３０  メモリ
６４０  通信デバイス
【図１】
2019204482.tif 000004
【図２】
2019204482.tif 000005
【図３】
2019204482.tif 000006
【図４】
2019204482.tif 000007
【図５】
2019204482.tif 000008
【図６】
2019204482.tif 000009