IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 富士通株式会社の特許一覧

<>
  • 特許-並行脆弱性検出 図1
  • 特許-並行脆弱性検出 図2
  • 特許-並行脆弱性検出 図3
  • 特許-並行脆弱性検出 図4
  • 特許-並行脆弱性検出 図5
  • 特許-並行脆弱性検出 図6
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-12-26
(45)【発行日】2023-01-10
(54)【発明の名称】並行脆弱性検出
(51)【国際特許分類】
   G06F 11/36 20060101AFI20221227BHJP
【FI】
G06F11/36 184
【請求項の数】 20
(21)【出願番号】P 2018241155
(22)【出願日】2018-12-25
(65)【公開番号】P2019204482
(43)【公開日】2019-11-28
【審査請求日】2021-09-09
(31)【優先権主張番号】15/988934
(32)【優先日】2018-05-24
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(72)【発明者】
【氏名】ファン・コック-サーン
(72)【発明者】
【氏名】ムルティー・プラヴィーン
【審査官】金田 孝之
(56)【参考文献】
【文献】特開平09-212385(JP,A)
【文献】特表2011-515000(JP,A)
【文献】特開2016-167262(JP,A)
【文献】特開2009-123216(JP,A)
【文献】特開2010-003153(JP,A)
【文献】SUTTON, M ほか著, 伊藤裕之 ほか訳,「ファジング ブルートフォースによる脆弱性発見手法 ランダムデータの自動注入によるセキュリティテストの実際」,第1版,日本,株式会社毎日コミュニケーションズ,2008年,pp. 3-28, 161-171,ISBN 978-4-8399-2629-8
【文献】BOHME, M et al.,Coverage-Based Greybox Fuzzing as Markov Chain,IEEE Transactions on Software Engineering [online],IEEE,2017年,Vol. 45, No. 5,pp. 489-506,[retrieved on 2022.07.12], Retrieved from the Internet: <URL: https://ieeexplore.ieee.org/abstract/document/8233151>,<DOI: 10.1109/TSE.2017.2785841>
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/36
(57)【特許請求の範囲】
【請求項1】
並行脆弱性を識別する方法であって、
共有メモリへのプログラムのリード及びライト・アクセスをインストルメントすることと、
グレーボックス・ファザーにより前記プログラムのテスト・ケースを識別することと、
前記グレーボックス・ファザーにより前記テスト・ケースに基づき、該テスト・ケースが優先テスト・ケースであるかどうかを判別するよう、競合するペアの組を含む前記プログラム2つ以上のブランチによって解析することと、
前記テスト・ケースが優先テスト・ケースであることに応答して、該テスト・ケースを前記グレーボックス・ファザーから並行性確認モジュールへ供給することと、
前記並行性確認モジュールにより、1つ以上の並行脆弱性を識別するよう、前記テスト・ケースを1つ以上のスケジューリング・ポリシーにより試験することと
を有する方法。
【請求項2】
前記テスト・ケースを前記並行性確認モジュールへ供給することは、モデル・チェッカー及びアクティブ試験ツールのうちの1つへ前記テスト・ケースを供給することを含む、
請求項1に記載の方法。
【請求項3】
前記プログラム前記2つ以上のブランチによって解析することは、
前記テスト・ケースが第1ビットマップ及び第2ビットマップの夫々で新しいビットを生成するかどうかを判定することと、
前記テスト・ケースが前記第1ビットマップ及び前記第2ビットマップの夫々で新しいビットを生成する場合に、前記テスト・ケースを優先テスト・ケースとして識別することと
を有する、
請求項1に記載の方法。
【請求項4】
前記プログラムのブランチを解析することは、競合指向型のカバレッジ誘導グレーボックス・ファザーにより前記ブランチを解析することを含む、
請求項1に記載の方法。
【請求項5】
1つ以上の並行脆弱性を識別するよう前記テスト・ケースを1つ以上のスケジューリング・ポリシーにより試験することは、モデル・チェッカー及びアクティブ試験ツールのうちの1つにより前記テスト・ケースを試験することを含む、
請求項1に記載の方法。
【請求項6】
前記テスト・ケースが優先テスト・ケースであることに応答して、テスト・ケース優先度付き待ち行列の一番上に前記テスト・ケースを位置付ける
請求項1に記載の方法。
【請求項7】
前記テスト・ケースが優先テスト・ケースでないことに応答して、
前記テスト・ケースを低優先テスト・ケースとして指定し、
テスト・ケース優先度付き待ち行列の一番下に前記テスト・ケースを位置付ける
請求項1に記載の方法。
【請求項8】
1つ以上のプロセッシング・システムによって実行される場合に、該プロセッシング・システムに、
共有メモリへのプログラムのリード及びライト・アクセスをインストルメントすることと、
グレーボックス・ファザーにより前記プログラムのテスト・ケースを識別することと、
前記グレーボックス・ファザーにより前記テスト・ケースに基づき、該テスト・ケースが優先テスト・ケースであるかどうかを判別するよう、競合するペアの組を含む前記プログラム2つ以上のブランチによって解析することと、
前記テスト・ケースが優先テスト・ケースであることに応答して、該テスト・ケースを前記グレーボックス・ファザーから並行性確認モジュールへ供給することと、
前記並行性確認モジュールにより、1つ以上の並行脆弱性を識別するよう、前記テスト・ケースを1つ以上のスケジューリング・ポリシーにより試験することと
を有する動作を実行させる命令を含む
1つ以上の非一時的なコンピュータ可読媒体。
【請求項9】
前記テスト・ケースを前記並行性確認モジュールへ供給することは、モデル・チェッカー及びアクティブ試験ツールのうちの1つへ前記テスト・ケースを供給することを含む、
請求項8に記載のコンピュータ可読媒体。
【請求項10】
前記プログラム前記2つ以上のブランチによって解析することは、
前記テスト・ケースが第1ビットマップ及び第2ビットマップの夫々で新しいビットを生成するかどうかを判定することと、
前記テスト・ケースが前記第1ビットマップ及び前記第2ビットマップの夫々で新しいビットを生成する場合に、前記テスト・ケースを優先テスト・ケースとして識別することと
を有する、
請求項8に記載のコンピュータ可読媒体。
【請求項11】
前記プログラムのブランチを解析することは、競合指向型のカバレッジ誘導グレーボックス・ファザーにより前記ブランチを解析することを含む、
請求項8に記載のコンピュータ可読媒体。
【請求項12】
1つ以上の並行脆弱性を識別するよう前記テスト・ケースを1つ以上のスケジューリング・ポリシーにより試験することは、モデル・チェッカー及びアクティブ試験ツールのうちの1つにより前記テスト・ケースを試験することを含む、
請求項8に記載のコンピュータ可読媒体。
【請求項13】
前記テスト・ケースが優先テスト・ケースであることに応答して、テスト・ケース優先度付き待ち行列の一番上に前記テスト・ケースを位置付ける
請求項8に記載のコンピュータ可読媒体。
【請求項14】
前記テスト・ケースが優先テスト・ケースでないことに応答して、
前記テスト・ケースを低優先テスト・ケースとして指定し、
テスト・ケース優先度付き待ち行列の一番下に前記テスト・ケースを位置付ける
請求項8に記載のコンピュータ可読媒体。
【請求項15】
共有メモリへのプログラムのリード及びライト・アクセスをインストルメントし、
グレーボックス・ファザーにより前記プログラムのテスト・ケースを識別し、
前記グレーボックス・ファザーにより前記テスト・ケースに基づき、該テスト・ケースが優先テスト・ケースであるかどうかを判別するよう、競合するペアの組を含む前記プログラム2つ以上のブランチによって解析し、
前記テスト・ケースが優先テスト・ケースであることに応答して、該テスト・ケースを前記グレーボックス・ファザーから並行性確認モジュールへ供給し、
前記並行性確認モジュールにより、1つ以上の並行脆弱性を識別するよう、前記テスト・ケースを1つ以上のスケジューリング・ポリシーにより試験する
よう構成された1つ以上のプロセッシング・ユニットを有する
システム。
【請求項16】
前記並行性確認モジュールは、モデル・チェッカー及びアクティブ試験ツールのうちの1つを有する、
請求項15に記載のシステム。
【請求項17】
前記プログラム前記2つ以上のブランチによって解析するよう、前記1つ以上のプロセッシング・ユニットは、
前記テスト・ケースが第1ビットマップ及び第2ビットマップの夫々で新しいビットを生成するかどうかを判定し、
前記テスト・ケースが前記第1ビットマップ及び前記第2ビットマップの夫々で新しいビットを生成する場合に、前記テスト・ケースを優先テスト・ケースとして識別する
よう構成される、
請求項15に記載のシステム。
【請求項18】
前記グレーボックス・ファザーは、競合指向型のカバレッジ誘導グレーボックス・ファザーを有する、
請求項15に記載のシステム。
【請求項19】
前記テスト・ケースが優先テスト・ケースでないことに応答して、前記1つ以上のプロセッシング・ユニットは、テスト・ケース優先度付き待ち行列の一番下に前記テスト・ケースを位置付けるよう構成される、
請求項15に記載のシステム。
【請求項20】
前記テスト・ケースが優先テスト・ケースであることに応答して、前記1つ以上のプロセッシング・ユニットは、テスト・ケース優先度付き待ち行列の一番上に前記テスト・ケースを位置付けるよう構成される、
請求項15に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本明細書で説明される実施形態は、並行性(concurrency)の脆弱性を検出することに関する。
【背景技術】
【0002】
並行脆弱性は、2つ以上のスレッドが同時に実行される並行プログラムにおいて起こりうる。並行脆弱性は、例えば、データ競合(data race)によって(例えば、マルチスレッドのプロセスの実行中に)引き起こされることがあり、ルート・アクセスを得ること又はリング0内で任意のコードを実行すること又はカーネル・メモリ破損を引き起こすことの可能性をローカル・ユーザに与えうる。
【0003】
本願で請求される主題は、上記のような環境でしか動作しない実施形態又は上記のようなあらゆる欠点を解消する実施形態に限られない。むしろ、この背景は、本明細書で記載されるいくつかの実施形態が実施され得る技術分野の一例を説明するためにのみ与えられている。
【発明の概要】
【0004】
実施形態の態様に従って、方法は、共有メモリへのプログラムのリード及びライト・アクセスをインストルメントすることを含んでよい。方法は、グレーボックス・ファザー(greybox fuzzer)により前記プログラムのテスト・ケースを識別することを更に含んでよい。更に、方法は、前記グレーボックス・ファザーにより前記テスト・ケースに基づき、該テスト・ケースが優先テスト・ケースであるかどうかを判別するよう、競合するペアの組を含む前記プログラムの2つ以上のブランチを解析することを含んでよい。前記テスト・ケースが優先テスト・ケースであることに応答して、方法は、前記テスト・ケースを前記グレーボックス・ファザーから並行性確認モジュールへ供給することを含んでよい。方法は、前記並行性確認モジュールにより、1つ以上の並行脆弱性を識別するよう、前記テスト・ケースを1つ以上のスケジューリング・ポリシーにより試験することを更に含んでよい。
【0005】
実施形態の目的及び利点は、少なくとも、特許請求の範囲で特に指し示されている要素、特徴、及び組み合わせによって、実現及び達成されるだろう。
【0006】
前述の概要及び以下の詳細な説明は、請求される発明の限定ではなく、説明及び例示であることが理解されるべきである。
【図面の簡単な説明】
【0007】
例となる実施形態は、添付の図面の使用を通じて、更なる特定及び詳細をもって記載及び説明されるだろう。
【0008】
図1】例となるプログラムの複数のスレッドを含むソースコードを表す。
図2】複数のスレッドを含むプログラムの例のソースコードを表す。
図3】グレーボックス・ファザー及び並行性確認モジュールを含むシステムの例を表す。
図4】グレーボックス・ファジングを実行する方法の例となるフロー図を表す。
図5】複数のスレッド及びロケーションを含むプログラムの例のソースコードを表す。
図6】例となるコンピュータ装置のブロック図である。
【発明を実施するための形態】
【0009】
本明細書で説明される様々な実施形態は、並行性バグを発見することに関する。例えば、いくつかの実施形態は、バグ(例えば、ハッカー及び/又は犯罪者によって悪用され得るバグ)を発見するようプログラム・バイナリを試験することに関係があり得る。
【0010】
並行性バグは、それらの発生が、例えば、オペレーティング・システムのスケジューリング・ポリシー及び外部環境に依存するので、周知のことだが、発見及び再現することが難しい。より具体的には、プログラムの実行の順序はスケジューリング・ポリシーに基づき変化することがあるので、脆弱性の検出又は再現は困難であり得る。
【0011】
“ファジング”(fuzzing)又は“ファズ試験”(fuzz testing)は、無効な、予期しない、又はランダムなデータをコンピュータ・プログラムへの入力として供給することを含む自動ソフトウェア試験プロセスを指し得る。カバレッジに基づくグレーボックス・ファジング(CGF;Coverage-based Greybox Fuzzing)は、プログラム解析を必要としなくてよいランダム試験アプローチである。カバレッジ誘導(coverage-guided)グレーボックス・ファジングは、バグを発見するための、よく知られた技術である。しかし、並行性バグに対するカバレッジ誘導の影響は非常に限られている。グレーボックス・ファジングでは、プログラムは入力をもって実行され得、カバレッジが観測され得る。けれども、いくつかのバグは、試験中に検出されない可能性があり、あるいは、同じ入力による多数(例えば、1000回)の実行の後にしか起こらない可能性がある。更に、モデル検査及びアクティブ試験は、所与の入力により並行性バグを発見し得るが、入力を決定することが努力を必要としうる。
【0012】
様々な実施形態は、並行性バグを発見することに関するファジングの有効性を改善する方法に関係があり得る。よって、本明細書でより十分に記載される本開示の様々な実施形態は、人によって道理に従って実行され得ないテクノロジから生じる1つ以上の問題に対する技術的解決法を提供し、そして、本明細書で開示される様々な実施形態は、上記の問題及び/又は課題を解決するためにコンピュータ・テクノロジに根ざしている。更に、本明細書で開示される少なくともいくつかの実施形態は、コンピュータによって従前実行不可能であった機能のコンピュータ実行を可能にすることによって、コンピュータ関連テクノロジを改善し得る。
【0013】
本開示の実施形態は、添付の図面を参照して説明される。
【0014】
図1は、例となるプログラムの2つのスレッド、すなわち、スレッド102(“Thread1”)及びスレッド104(“Thread2”)、を含むソースコード100を表す。例えば、グレーボックス・ファジングは、両方のパス(例えば、y>15及びy<=15)を実行する入力を生成してよい。しかし、例えば、y=18により多数回(例えば、1000回)プログラムを実行すること、バグを発見しない可能性がある。むしろ、バグは、スケジューラがスレッド102における命令を実行する前にスレッド104における全ての命令を実行する(従って、x=0、よって、Abort()関数が呼び出され得る。)場合にのみ起こり得る。更に、モデル検査及び/又はアクティブ試験は、yが特定の値(例えば、y=18)である場合にしかバグを発見しない可能性がある。
【0015】
スレッドは、演算のストリームを含んでよい。例えば、オペレーティング・システムは、開始から終了まで1つずつ命令を実行してよい。逐次プログラムは、1つしかスレッドがない場合に、しばしば、シングルスレッドのプログラムと呼ばれる。シングルスレッドでは、しばしば、実行の多数のブランチが存在する。例えば、プログラムが条件x>0を含む場合には、2つのブランチ、すなわち、x>0(条件が真であるとき、しばしば“then”ブランチと呼ばれる。)及びx<=0(“else”ブランチ、“if … then … else …”に由来した名称)がある。入力(例えば、x=1又はx=-1)に応じて、演算のストリームは“then”ブランチ又は“else”ブランチをたどってよい。
【0016】
ウィーク・メモリ・モデル(WMM;Weak Memory Models)(例えば、C及びJava(登録商標)で使用される。)によれば、命令サイクル(ひいては性能)を最適化するよう、命令は、プログラム内のそれらの元の順序で実行されないことがある。更に、アクティブ試験により、スケジューラの、命令をインターリーブするためのポリシーは、並行性バグを発見するよう制御され得る。更には、モデル検査により、WMMの下での全ての競合は、(例えば、サマリー関数(summary function)を介して)検出され得る。
【0017】
例えば、図2を参照して、2つのスレッド、すなわち、スレッド202(“Thread1”)及びスレッド204(“Thread2”)、を含むプログラムの例のソースコード200が表されている。例えば、WMMは、性能のためにプログラムを最適化してよい(例えば、y=1は、x=1の前に実行されてよい。)。起こり得るWMMの下での1つの潜在的な競合は、y=1、x=0である。
【0018】
アメリカン・ファジー・ロップ(AFL;American Fuzzy Lop)は、テスト・ケースのコード・カバレッジを大きくするためのアルゴリズムを使用する既知のファジング・ツールである。例えば、プログラムをインストルメントするためにAFLを利用すると、プログラムの各基本ブロックは一意の識別子ロケーションを与えられ得る。更に、ブロックAからブロックBへの移行は、“locationA ^ locationB”によって識別され得る(例えば、XORがハッシングとして使用され得る。)。更には、様々な実施形態に従って、ビットマップ(例えば、ビットのアレイ)は、どの移行が既に探査されているかを識別するために使用されてよい。例えば、ビットマップ内の新しいビットは、テスト・ケースにおける新しい移行の識別(例えば、発見及び/又は探査)を示し得る。更に、例えば、汎用アルゴリズムにより、テスト・ケースの組(例えば、母集団)がミューテートされ得る。少なくともいくつかの実施形態では、新しい移行を発見するテスト・ケースは、ミューテートされるよう優先順位を付けられてよい。AFLは、決定的プログラムにとって有効と考えられ、異なるプログラム・パスを働かせるための入力(テスト・ケース)を直ちに生成し得る。しかし、AFLは、スケジューラ又は環境を制御することができないことがあるので、並行性バグを発見することができない可能性がある。
【0019】
本開示の様々な実施形態に従って、アルゴリズムは、共有メモリへの全てのリード(READ)及びライト(WRITE)動作が識別され得る前処理を含んでよい(例えば、共有メモリへの全てのリード及びライト・アクセスをインストルメントする。)。
【0020】
更に、アルゴリズムは、プログラムの異なるブランチを探索するための入力を(例えば、グレーボックス・ファザーにより)生成することを含んでよい。例えば、いくつかの実施形態において、競合するペアの組において命令文(statements)を有しているプログラムのブランチは、特に関心が持たれ得る(例えば、焦点を当てられる。)。より具体的には、いくつかの実施形態において、競合するペアの組において命令文を有しているプログラムのブランチは、関連するテスト・ケースが優先テスト・ケースであるかどうかを判定するよう解析されてよい。
【0021】
例えば、グレーボックス・ファザーは、並行性バグに焦点を当てるよう構成されてよい。より具体的には、いくつかの実施形態に従って、2つのビットマップが使用されてよく、一方のビットマップ(“第1ビットマップ”)は、全体のカバレッジのために使用されてよく(例えば、AFLと同様)、他方のビットマップは、競合するペアの組のために使用されてよい。
【0022】
例えば、ツール(例えば、ファザー)を実装する擬似コードは:
【数1】
を含んでよい。ここで、現在及び前のロケーション(“cur_location”及び“prev_location”)は、共有メモリ(“shared_mem”)へのリード及びライトのロケーションを含む。
【0023】
その上、アルゴリズムは、入力を(例えば、グレーボックス・ファザーにより)選択すること、及び並行性確認モジュール(例えば、モデル・チェッカー)へ入力を送ることを含んでよい。いくつかの実施形態に従って、ミューテーションのために入力を選択する場合に、第2ビットマップにおいて新しいトレースを生成する入力が、最初に選択されてよい。更に、少なくともいくつかの実施形態では、第2ビットマップにおいて一意のカバレッジを生成するテスト入力のみが並行性確認モジュールへ送られてよい。
【0024】
更に、アルゴリズムは、並行性バグを発見するよう、ファザーからの夫々の具体的な入力を異なるスケジューリング・ポリシーを用いて(例えば、モデル・チェッカー又はアクティブ試験ツールのような、並行性確認モジュールにより)解析することを含んでよい。
【0025】
図3は、本開示の様々な実施形態に従って、例となるシステム300を表す。システム300はファザー302を含み、ファザー302はグレーボックス・ファザーを含んでよい。より具体的には、例えば、ファザーは、競合指向の(race directed)カバレッジ誘導グレーボックス・ファザーを含んでよい。システム300は並行性確認モジュール304(本明細書では“確認ツール”又は“試験装置”とも呼ばれる。)を更に含む。並行性確認モジュール304は、モデル・チェッカー及び/又はアクティブ試験ツールを含んでよい。例えば、並行性確認モジュール304がモデル・チェッカーを含む実施形態では、並行性確認モジュール304は、明示的状態(explicit-state)モデル・チェッカーを含んでよい。
【0026】
システム300の予期された動作中に、ファザー302は、プログラムの異なるブランチを探索するための入力を生成(例えば、決定)してよい。更に、ファザー302は入力を選択してよく、そして、入力はファザー302から並行性確認モジュール304へ送られてよい。更には、並行性確認モジュール304は、並行性バグを発見するよう、夫々の具体的な入力を異なるスケジューリング・ポリシーを用いてチェックしてよい。このように、様々な実施形態に従って、システム300、そして、より具体的には、ファザー302は、並行性確認モジュール304へ供給されるテスト・ケースの数を減らすよう構成されてよい。
【0027】
変更、追加、又は削除は、本開示の適用範囲から逸脱することなしに、システム300に対して行われてよい。例えば、システム300は、2つ以上のファザー302及び/又は2つ以上の並行性確認モジュール304を含んでよい。
【0028】
図4は、本開示の1つ以上の実施形態に従って、ファジングを実行する例となる方法400のフローチャートを表す。いくつかの実施形態において、方法400に関連した動作の1つ以上は、図1のシステム300によって行われてよい。より具体的には、例えば、方法400は、システム300のファザー302によって行われてよい。
【0029】
代替的に、又は追加的に、方法400は、如何なる適切なシステム、装置、又はデバイスによっても行われてよい。例えば、システム600のプロセッサ610(図6を参照。)が、方法400に関連した動作の1つ以上を実行してよい。たとえ別個のブロックにより表されているとしても、方法400のブロックの1つ以上に関連したステップ及び動作は、所望の実施に応じて、更なるブロックに分けられても、より少ないブロックへとまとめられても、又は削除されてもよい。
【0030】
ブロック402で、テスト・ケースが識別されてよく、方法400はブロック404へ進んでよい。いくつかの実施形態において、待ち行列(queue)がテスト・ケースを含んでよく、テスト・ケースは、それらのテスト・ケースに割り当てられている優先度に基づき試験のために識別されてよい。よって、そのような実施形態では、待ち行列内で最も高い優先度を有しているテスト・ケースが、試験のために識別されてよい。例えば、テスト・ケースは、システム600のプロセッサ610(図6を参照。)により決定(例えば、識別)されてよい。
【0031】
例えば、1つ又は複数のシード・テスト・ケースを含むいくつかの実施形態では、グレーボックス・ファザー(例えば、図3のファザー302)は、入力をミューテートし、最も高い優先度を有している1つ又は複数のケースを、再びミューテートされるように選択してよい。いくつかの実施形態に従って、優先度(例えば、高又は低)は、適応度関数(fitness function)によって決定されてよい。
【0032】
更に、少なくともいくつかの実施形態では、テスト・ケースに基づき、競合するペアの組を含むプログラムの2つ以上のブランチは、テスト・ケースが高優先度のテスト・ケース(“優先テスト・ケース”とも呼ばれる。)又は低優先度のテスト・ケースであるかどうかを判定するよう(例えば、図3のファザー302のような、グレーボックス・ファザーにより)解析されてよい。例えば、解析は、ブロック404及び408を参照して以下でより詳細に記載されるように、第1ビットマップ及び第2ビットマップの夫々が新しいビットを含むか否かを判定することを含んでよい。
【0033】
例えば、ブロック404で、第1ビットマップ内の新しいビットが生成されているか否かに関して決定がなされてよい。第1ビットマップ内の新しいビットが生成されていない場合には、方法400はブロック406へ進んでよい。第1ビットマップ内の新しいビットが生成されていた場合には、方法400はブロック408へ進んでよい。いくつかの実施形態において、第1ビットマップはAFLタイプのビットマップを含んでよい。
【0034】
例えば、ブロック404で、1つのビット(例えば、0又は1)に基づき、新しい条件が競合において起きた(例えば、新しいビットが生成された)か否かが判定されてよい。より具体的には、例えば、ビットマップは、どの1つ以上のブランチが探索されたかを記録してよい。更に、例えば、ファザー(例えば図3のファザー302)がテスト入力(又は“テスト・ケース”若しくは“テスト・ベクトル”)を用いてプログラムを実行し、トレースを記録する場合に、ビットマップが新しいビットを含む(例えば、新しいブランチが発見された)かどうかが判定されてよい。新しいブランチを発見するテスト・ケースは、(再びミューテートされるよう)より高い優先度を割り当てられてよい。例えば、システム600のプロセッサ610(図6を参照。)が、第1ビットマップ内の新しいビットが生成されているか否を判定してよい。
【0035】
ブロック406で、テスト・ケースは捨てられてよい。いくつかの実施形態において、方法400は、(例えば、テスト・ケースが捨てられた後に)ブロック402へ戻ってよい。
【0036】
ブロック408で、第2ビットマップ内の新しいビットが生成されているか否かに関して決定がなされてよい。第2ビットマップ内の新しいビットが生成されていない場合には、方法400はブロック410へ進んでよい。第2ビットマップ内の新しいビットが生成されていた場合には、方法400はブロック412及びブロック414の夫々へ進んでよい。例えば、システム600のプロセッサ610(図6を参照。)が、第2ビットマップの新しいビットが生成されているか否を判定してよい。
【0037】
例えば、少なくともいくつかの実施形態では、第1ビットマップは、(例えば、プログラム全体における)発見された1つ以上のブランチを記録してよい。更に、第2ビットマップは、同じようにして、共有メモリにおけるブランチを決定してよい。テスト・ケースが第2ビットマップにおいて新しいビットを発見する(例えば、共有メモリにおいて新しいブランチを発見する)場合に、そのテスト・ケースは、並行性バグを発見することにとって興味深いものであり得る。テスト・ケースが興味深いものであるということで、そのテスト・ケースは、異なるスケジューリング・ポリシーでの更なる検査のために、(例えば、ブロック412で)モデル・チェッカー/アクティブ試験ツールへ送られてよい。更に、テスト・ケースは、ミューテートされるよう(例えば、ブロック414で)より高い優先度を割り当てられてよい。
【0038】
ブロック410で、テスト・ケースは、低い優先度を割り当てられてよく、方法400はブロック416へ進んでよい。例えば、テスト・ケースは、テスト・ケース待ち行列の一番下に又はその近くに位置付けられてよい。例えば、システム600のプロセッサ610(図6を参照。)が、テスト・ケースに低い優先度を割り当ててよい。
【0039】
ブロック412で、テスト・ケースは並行性確認モジュールへ送られてよい。例えば、テスト・ケースは並行性確認モジュール304(図3を参照。)へ送られてよく、並行性確認モジュール304はモデル・チェッカー及び/又はアクティブ試験ツールを含んでよい。
【0040】
ブロック414で、テスト・ケースは、高い優先度を割り当てられてよく、方法400はブロック416へ進んでよい。例えば、テスト・ケースは、テスト・ケース待ち行列の一番上に又はその近くに位置付けられてよい。例えば、システム600のプロセッサ610(図6を参照。)が、テスト・ケースに高い優先度を割り当ててよい。
【0041】
ブロック416で、テスト・ケースはミューテートされてよく、方法400はブロック402へ戻ってよい。例えば、システム600のプロセッサ610(図6を参照。)がテスト・ケースをミューテートしてよい。
【0042】
変更、追加、又は削除は、本開示の適用範囲から逸脱することなしに、方法400に対して行われてよい。例えば、方法400の動作は別の順序で実施されてよい。更に、説明されている動作及びアクションは、単に例として与えられており、動作及びアクションの一部は、開示されている実施形態の本質から外れることなしに、任意であっても、より少ない動作及びアクションへとまとめられても、又は更なる動作及びアクションに拡張されてもよい。例えば、いくつかの実施形態において、方法400は、共有メモリへのプログラムの夫々のリード及びライト・アクセスについてインストルメントすることを含んでよい。
【0043】
図5は、2つのスレッド、すなわち、スレッド502(“Thread1”)及びスレッド504(“Thread2”)、を含むプログラムの例となるソースコード500を表す。例えば、第2ビットマップ(例えば、競合するペアの組についてのビットマップ)に焦点を当てると、テスト・ケースy=3又はy=7において、フローはロケーションA(“Location A”)からロケーション(“Location B”)へ進む。この例では、新しいブランチは、第2ビットマップではなく第1ビットマップにおいて発見される。別の言い方をすれば、第1ビットマップは新しいビットを含むが、第2ビットマップは新しいビットを含まない。然るに、この例では、テスト・ケースは、競合検出にとって興味深いものではなく、テスト・ケースは低い優先度を与えられ得る。しかし、他の例として、例えば、y=18では、フローはロケーションAからロケーションBへ、そしてロケーションBからロケーションC(“Location C”)へ進む。この例では、新しいブランチは第1ビットマップにおいて生成され、且つ、新しいブランチは第2ビットマップにおいて生成される。別の言い方をすれば、第1ビットマップは新しいビットを含み、且つ、第2ビットマップは新しいビットを含む。然るに、この例では、テスト・ケースは、競合検出にとって興味深いものであり、そして、テスト・ケースは高い優先度を与えられ得る。更に、テスト・ケースは、並行性確認モジュール304(図3を参照。)のような、並行性確認モジュール(例えば、モデル・チェッカー及び/又はアクティブ試験ツール)へ供給されてよい。
【0044】
例えば、3つの入力y=3、7及び18の実行がこれより説明される。y=3の場合に、y>15及びy>3はいずれも偽であり、よって、移行シーケンスはロケーションA→ロケーションB→ロケーションF(“Location F”)である。y=7の場合に、y>15は偽であるが、y>5は真である。よって、移行シーケンスはロケーションA→ロケーションB→ロケーションE(“Location E”)→ロケーションFである。然るに、第1ビットマップと比較して、ロケーションBからロケーションEへ及びロケーションEからロケーションFへの移行を記録する2つの新しいビットがある。しかし、それらの移行は、この例では変数xしか含まない共有メモリとは無関係である。よって、第2ビットマップにおいては新しいビットがない。従って、テスト・ケースは並行性確認モジュールへ送られなくてよい。
【0045】
y=18の場合に、y>15は真であり、起こり得るスケジューリング・ポリシーはThread1及びThread2に等しい優先度を与えてよい。よって、x=1は、条件文if(x!=1)の前に実行されてよく、よって、条件は偽である。この例では、移行シーケンスは、ロケーションA→ロケーションB→ロケーションD→ロケーションFであってよい。このテスト・ケースはバグを発見することができない(例えば、中止(abort)命令文はプログラムの強制終了を行い得るが、それは、第2ビットマップ内の新しい移行(例えば、ロケーションBからロケーションD)が発見され得るということで、興味深いものであると見なされ得る。)。よって、この例では、テスト・ケースは並行性確認モジュールへ送られてよい。並行性確認モジュールは、x!=1を真とするポリシーを発見することができ、よって、バグが発見され得る。
【0046】
図6は、本開示の少なくとも1つの実施形態に従って、例となるコンピュータ装置600のブロック図である。コンピュータ装置600は、デスクトップ・コンピュータ、ラップトップ・コンピュータ、サーバ・コンピュータ、タブレット・コンピュータ、携帯電話機、スマートフォン、パーソナル・デジタル・アシスタント(PDA)、電子リーダー装置、ネットワーク・スイッチ、ネットワーク・ルータ、ネットワーク・ハブ、若しくは他のネットワークキング装置、又は他の適切なコンピュータ装置を含んでよい。
【0047】
コンピュータ装置600は、プロセッサ610、記憶デバイス620、メモリ630、及び通信デバイス640を含んでよい。プロセッサ610、記憶デバイス620、メモリ630、及び/又は通信デバイス640は、コンポーネントの夫々が他のコンポーネントと通信し得るように、全てが通信上結合されてよい。コンピュータ装置600は、本開示で記載される動作のいずれかを実行してよい。
【0048】
一般に、プロセッサ610は、様々なハードウェア又はソフトウェア・モジュールを含む如何なる適切な特別目的又は汎用のコンピュータ、コンピューティング・エンティティ、又はプロセッシング・デバイスも含んでよく、如何なる適切な適用可能なコンピュータ可読記憶媒体に記憶されている命令も実行するよう構成されてよい。例えば、プロセッサ610は、マイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールド・プログラマブル・ゲート・アレイ(FPGA)、あるいは、プログラム命令を解釈及び/又は実行するよう及び/又はデータを処理するよう構成された他のあらゆるデジタル又はアナログ回路を含んでよい。図6では単一のプロセッサとして表されているが、プロセッサ610は、本開示で記載される動作をいくつでも個別的に又は集合的に実行するよう構成されたプロセッサをいくつでも含んでよい。
【0049】
いくつかの実施形態において、プロセッサ610は、記憶デバイス620、メモリ630、又は記憶デバイス620及びメモリ630に記憶されているプログラム命令を解釈及び/又は実行し及び/又はそれに記憶されているデータを処理してよい。いくつかの実施形態において、プロセッサ610は、記憶デバイス620からプログラム命令をフェッチし、プログラム命令をメモリ630にロードしてよい。プログラム命令がメモリ630にロードされた後、プロセッサ610はプログラム命令を実行してよい。
【0050】
例えば、いくつかの実施形態において、並行脆弱性を検出するプロセッシング動作の1つ以上は、プログラム命令としてデータ記憶部620に含まれてよい。プロセッサ610は、プロセッシング動作の1つ以上のプログラム命令をフェッチしてよく、プロセッシング動作のプログラム命令をメモリ630にロードしてよい。プロセッシング動作のプログラム命令がメモリ630にロードされた後、プロセッサ610はプログラム命令を実行してよく、それにより、コンピュータ装置600は、プログラム命令によって指示されるように、プロセッシング動作に関連した動作を実施してよい。
【0051】
記憶デバイス620及びメモリ630は、コンピュータ実行可能命令又はデータ構造を運ぶ又は記憶しているコンピュータ可読記憶媒体を含んでよい。そのようなコンピュータ可読記憶媒体は、プロセッサ610のような汎用又は特別目的のコンピュータによってアクセスされ得る如何なる利用可能な媒体も含んでよい。例として、制限なしに、そのようなコンピュータ可読記憶媒体は、RAM、ROM、EEPROM、CD-ROM若しくは他の光ディスクストレージ、磁気ディスクストレージ若しくは他の磁気記憶デバイス、フラッシュ・メモリ(例えば、固体状態メモリ・デバイス)、あるいは、コンピュータ実行可能命令又はデータ構造の形で所望のプログラム・コードを搬送又は記憶するために使用されてよく且つ汎用又は特別目的のコンピュータによってアクセスされ得る他のあらゆる記憶媒体を含む有形な又は非一時的なコンピュータ可読記憶媒体を含んでよい。上記の組み合わせも、コンピュータ可読記憶媒体の適用範囲内に含まれ得る。コンピュータ実行可能命令は、例えば、プロセッサ610に特定の動作又は動作群を実行させるよう構成された命令及びデータを含んでよい。
【0052】
いくつかの実施形態において、記憶デバイス620及び/又はメモリ630は、並行脆弱性検出に関連したデータ、より具体的には、ソースコード、プログラム、入力、ビット、ビットマップ、テスト入力待ち行列、などに関連したデータを記憶してよい。
【0053】
通信デバイス640は、コンピュータ装置600と他の電子機器との間の通信を助ける又は可能にするよう構成された如何なるデバイス、システム、コンポーネント、又はコンポーネントの集合も含んでよい。例えば、通信デバイス640は、制限なしに、モデム、ネットワーク・カード(無線若しくは有線)、赤外線通信デバイス、光通信デバイス、無線通信デバイス(例えば、アンテナ)、及び/又はチップセット(例えば、Bluetooth(登録商標)デバイス、802.6デバイス(例えば、メトロポリタン・エリア・ネットワーク(MAN))、Wi-Fiデバイス、WiMAXデバイス、セルラー通信設備、など)、及び/又は同様のものを含んでよい。通信デバイス640は、いくつかの例を挙げると、セルラー・ネットワーク、Wi-Fiネットワーク、MAN、光ネットワーク、などのような如何なるネットワーク、及び/又は遠隔デバイスを含む、本開示で記載される他のあらゆるデバイスともデータが交換されることを可能にし得る。
【0054】
変更、追加、又は省略は、本開示の適用範囲から逸脱することなしに、図6に対して行われてよい。例えば、コンピュータ装置600は、本開示で例示及び記載されているものよりも多い又は少ない要素を含んでよい。例えば、コンピュータ装置600は、タブレット又は携帯電話機の画面のような、組み込まれた表示装置を含んでよく、あるいは、コンピュータ装置600から離れており、それと通信上結合され得る外付けモニタ、プロジェクタ、テレビ受像機、又は他の適切な表示装置を含んでよい。
【0055】
本開示で使用されるように、語“モジュール”又は“コンポーネント”は、モジュール若しくはコンポーネントの動作を実行するよう構成された特定のハードウェア実施、並びに/又はコンピューティング・システムの汎用ハードウェア(例えば、コンピュータ可読媒体、プロセッシング・デバイス、など)によって記憶及び/若しくは実行され得るソフトウェア・オブジェクト若しくはソフトウェア・ルーチンを指し得る。いくつかの実施形態において、本開示で記載される種々のコンポーネント、モジュール、エンジン、及びサービスは、コンピューティング・システムで(例えば、別個のスレッドとして)実行するオブジェクト又はプロセスとして実装されてよい。本開示で記載されるシステム及び方法の一部は、概して、(汎用ハードウェアによって記憶及び/又は実行される)ソフトウェアにおいて実装されるものとして記載されているが、特定のハードウェア実施、又はソフトウェア及び特定のハードウェア実施の組み合わせも可能であり、考えられている。本開示において、“コンピューティング・エンティティ”は、本開示で以前に定義されたあらゆるコンピューティング・システム、又はコンピューティング・システムで実行されるあらゆるモジュール若しくはモジュールの組み合わせであってよい。
【0056】
本開示で、特に添付の特許請求の範囲(例えば、添付の特許請求の本文)で使用される語は、一般的に、“非限定的な(open)”用語として意図されている(例えば、語「含んでいる(including)」は、“~を含んでいるが、~に制限されない”との意に解釈されるべきであり、語「備えている(having)」は、“少なくとも~を備えている”との意に解釈されるべきであり、語「含む(includes)」は、“~を含むが、~に制限されない”との意に解釈されるべきである、など。)。
【0057】
加えて、導入されたクレーム記載(introduced claim recitation)において特定の数が意図される場合、そのような意図は当該クレーム中に明確に記載され、そのような記載がない場合は、そのような意図も存在しない。例えば、理解を促すために、後続の添付された特許請求の範囲では、「少なくとも1つの(at least one)」及び「1つ以上の(one or more)」といった導入句を使用し、クレーム記載を導入することがある。しかし、このような句を使用するからといって、「a」又は「an」といった不定冠詞によりクレーム記載を導入した場合に、たとえ同一のクレーム内に、「1つ以上の」又は「少なくとも1つの」といった導入句と「a」又は「an」といった不定冠詞との両方が含まれるとしても、当該導入されたクレーム記載を含む特定のクレームが、当該記載事項を1しか含まない例に限定されるということが示唆されると解釈されるべきではない(例えば、「a」及び/又は「an」は、「少なくとも1つの」又は「1つ以上の」を意味すると解釈されるべきである。)。定冠詞を使用してクレーム記載を導入する場合にも同様のことが当てはまる。
【0058】
更には、導入されたクレーム記載において特定の数が明示されている場合であっても、そのような記載は、通常、少なくとも記載された数を意味するように解釈されるべきであることは、当業者には理解されるであろう(例えば、他に修飾語のない、単なる「2つの記載事項」という記載がある場合、この記載は、少なくとも2つの記載事項、又は2つ以上の記載事項を意味する。)。更に、「A、B及びCなどのうち少なくとも1つ」又は「A、B及びCなどのうちの1つ以上」に類する表記が使用される場合、一般的に、そのような構造は、Aのみ、Bのみ、Cのみ、AとBの両方、AとCの両方、BとCの両方、及び/又はAとBとCの全て、などを含むよう意図される。
【0059】
更に、2つ以上の選択可能な用語を表す如何なる離接語及び/又は離接句も、明細書、特許請求の範囲、又は図面のいずれであろうと、それら用語のうちの1つ、それらの用語のうちのいずれか、あるいは、それらの用語の両方を含む可能性を意図すると理解されるべきである。例えば、「A又はB」という句は、「A又はB」、あるいは、「A及びB」の可能性を含むことが理解されるべきである。
【0060】
本開示で挙げられている全ての例及び条件付き言語は、当該技術の促進に本発明者によって寄与される概念及び本発明を読者が理解するのを助ける教育上の目的を意図され、そのような具体的に挙げられている例及び条件に制限されないと解釈されるべきである。本開示の実施形態が詳細に記載されてきたが、様々な変更、置換、及び代替が、本開示の主旨及び適用範囲から逸脱することなしに行われてよい。
【0061】
上記の実施形態に加えて、以下の付記を開示する。
(付記1)
並行脆弱性を識別する方法であって、
共有メモリへのプログラムのリード及びライト・アクセスをインストルメントすることと、
グレーボックス・ファザーにより前記プログラムのテスト・ケースを識別することと、
前記グレーボックス・ファザーにより前記テスト・ケースに基づき、該テスト・ケースが優先テスト・ケースであるかどうかを判別するよう、競合するペアの組を含む前記プログラムの2つ以上のブランチを解析することと、
前記テスト・ケースが優先テスト・ケースであることに応答して、該テスト・ケースを前記グレーボックス・ファザーから並行性確認モジュールへ供給することと、
前記並行性確認モジュールにより、1つ以上の並行脆弱性を識別するよう、前記テスト・ケースを1つ以上のスケジューリング・ポリシーにより試験することと
を有する方法。
(付記2)
前記テスト・ケースを前記並行性確認モジュールへ供給することは、モデル・チェッカー及びアクティブ試験ツールのうちの1つへ前記テスト・ケースを供給することを含む、
付記1に記載の方法。
(付記3)
前記プログラムの前記2つ以上のブランチを解析することは、
前記テスト・ケースが第1ビットマップ及び第2ビットマップの夫々で新しいビットを生成するかどうかを判定することと、
前記テスト・ケースが前記第1ビットマップ及び前記第2ビットマップの夫々で新しいビットを生成する場合に、前記テスト・ケースを優先テスト・ケースとして識別することと
を有する、
付記1に記載の方法。
(付記4)
前記プログラムのブランチを解析することは、競合指向型のカバレッジ誘導グレーボックス・ファザーにより前記ブランチを解析することを含む、
付記1に記載の方法。
(付記5)
1つ以上の並行脆弱性を識別するよう前記テスト・ケースを1つ以上のスケジューリング・ポリシーにより試験することは、モデル・チェッカー及びアクティブ試験ツールのうちの1つにより前記テスト・ケースを試験することを含む、
付記1に記載の方法。
(付記6)
前記テスト・ケースが優先テスト・ケースであることに応答して、テスト・ケース優先度付き待ち行列の一番上に又はその近くに前記テスト・ケースを位置付ける
付記1に記載の方法。
(付記7)
前記テスト・ケースが優先テスト・ケースでないことに応答して、
前記テスト・ケースを低優先テスト・ケースとして指定し、
テスト・ケース優先度付き待ち行列の一番下に又はその近くに前記テスト・ケースを位置付ける
付記1に記載の方法。
(付記8)
1つ以上のプロセッシング・システムによって実行される場合に、該プロセッシング・システムに、
共有メモリへのプログラムのリード及びライト・アクセスをインストルメントすることと、
グレーボックス・ファザーにより前記プログラムのテスト・ケースを識別することと、
前記グレーボックス・ファザーにより前記テスト・ケースに基づき、該テスト・ケースが優先テスト・ケースであるかどうかを判別するよう、競合するペアの組を含む前記プログラムの2つ以上のブランチを解析することと、
前記テスト・ケースが優先テスト・ケースであることに応答して、該テスト・ケースを前記グレーボックス・ファザーから並行性確認モジュールへ供給することと、
前記並行性確認モジュールにより、1つ以上の並行脆弱性を識別するよう、前記テスト・ケースを1つ以上のスケジューリング・ポリシーにより試験することと
を有する動作を実行させる命令を含む
1つ以上の非一時的なコンピュータ可読媒体。
(付記9)
前記テスト・ケースを前記並行性確認モジュールへ供給することは、モデル・チェッカー及びアクティブ試験ツールのうちの1つへ前記テスト・ケースを供給することを含む、
付記8に記載のコンピュータ可読媒体。
(付記10)
前記プログラムの前記2つ以上のブランチを解析することは、
前記テスト・ケースが第1ビットマップ及び第2ビットマップの夫々で新しいビットを生成するかどうかを判定することと、
前記テスト・ケースが前記第1ビットマップ及び前記第2ビットマップの夫々で新しいビットを生成する場合に、前記テスト・ケースを優先テスト・ケースとして識別することと
を有する、
付記8に記載のコンピュータ可読媒体。
(付記11)
前記プログラムのブランチを解析することは、競合指向型のカバレッジ誘導グレーボックス・ファザーにより前記ブランチを解析することを含む、
付記8に記載のコンピュータ可読媒体。
(付記12)
1つ以上の並行脆弱性を識別するよう前記テスト・ケースを1つ以上のスケジューリング・ポリシーにより試験することは、モデル・チェッカー及びアクティブ試験ツールのうちの1つにより前記テスト・ケースを試験することを含む、
付記8に記載のコンピュータ可読媒体。
(付記13)
前記テスト・ケースが優先テスト・ケースであることに応答して、テスト・ケース優先度付き待ち行列の一番上に又はその近くに前記テスト・ケースを位置付ける
付記8に記載のコンピュータ可読媒体。
(付記14)
前記テスト・ケースが優先テスト・ケースでないことに応答して、
前記テスト・ケースを低優先テスト・ケースとして指定し、
テスト・ケース優先度付き待ち行列の一番下に又はその近くに前記テスト・ケースを位置付ける
付記8に記載のコンピュータ可読媒体。
(付記15)
共有メモリへのプログラムのリード及びライト・アクセスをインストルメントし、
グレーボックス・ファザーにより前記プログラムのテスト・ケースを識別し、
前記グレーボックス・ファザーにより前記テスト・ケースに基づき、該テスト・ケースが優先テスト・ケースであるかどうかを判別するよう、競合するペアの組を含む前記プログラムの2つ以上のブランチを解析し、
前記テスト・ケースが優先テスト・ケースであることに応答して、該テスト・ケースを前記グレーボックス・ファザーから並行性確認モジュールへ供給し、
前記並行性確認モジュールにより、1つ以上の並行脆弱性を識別するよう、前記テスト・ケースを1つ以上のスケジューリング・ポリシーにより試験する
よう構成された1つ以上のプロセッシング・ユニットを有する
システム。
(付記16)
前記並行性確認モジュールは、モデル・チェッカー及びアクティブ試験ツールのうちの1つを有する、
付記15に記載のシステム。
(付記17)
前記プログラムの前記2つ以上のブランチを解析するよう、前記1つ以上のプロセッシング・ユニットは、
前記テスト・ケースが第1ビットマップ及び第2ビットマップの夫々で新しいビットを生成するかどうかを判定し、
前記テスト・ケースが前記第1ビットマップ及び前記第2ビットマップの夫々で新しいビットを生成する場合に、前記テスト・ケースを優先テスト・ケースとして識別する
よう構成される、
付記15に記載のシステム。
(付記18)
前記グレーボックス・ファザーは、競合指向型のカバレッジ誘導グレーボックス・ファザーを有する、
付記15に記載のシステム。
(付記19)
前記テスト・ケースが優先テスト・ケースでないことに応答して、前記1つ以上のプロセッシング・ユニットは、テスト・ケース優先度付き待ち行列の一番下に又はその近くに前記テスト・ケースを位置付けるよう構成される、
付記15に記載のシステム。
(付記20)
前記テスト・ケースが優先テスト・ケースであることに応答して、前記1つ以上のプロセッシング・ユニットは、テスト・ケース優先度付き待ち行列の一番上に又はその近くに前記テスト・ケースを位置付けるよう構成される、
付記15に記載のシステム。
【符号の説明】
【0062】
300 システム
302 ファザー
304 並行性確認モジュール
600 コンピュータ装置
610 プロセッサ
620 記憶デバイス
630 メモリ
640 通信デバイス
図1
図2
図3
図4
図5
図6