(57)【要約】      （修正有）【課題】ソースコードのプロパティを検証するための方法及びシステムを提供する。【解決手段】プロパティを検証するための方法２００は、プロパティを検証するためのソースコードを受信するステップ２０２と、ソースコードを分析して、グループ化技法に基づいて複数のプロパティを複数のグループにマージするステップ２０４と、複数のグループの中の各グループのためのスライスを作成するステップ２０６と、各グループのために作成された各スライスを検証するように構成され、各グループ内の1つまたは複数のプロパティの検証が同時に実施されるステップ２０８を備える。【選択図】図２
2019215867.tif 000002
【特許請求の範囲】
【請求項１】
ソースコードのプロパティを検証するための、プロセッサ(104)で実装される方法であって、前記方法は、
前記プロセッサ(104)によって、プロパティを検証するためにソースコードを受信するステップであって、前記ソースコードが、グループ化されるべき、アサーションに対応する複数のプロパティでアノテーションを付けられ、前記複数のプロパティがユーザによって定義される、ステップと、
前記プロセッサ(104)によって、グループ化技法に基づいて前記複数のプロパティを複数のグループにマージするために前記ソースコードを分析するステップであって、1つまたは複数のプロパティが、前記複数のグループの中の各グループ下にグループ化され、前記グループ化技法が、スライス包摂(SS)グループ化技法と、データフロー依存(DD)グループ化技法と、データおよび制御フロー依存(DC)グループ化技法とのうちの1つを含み、前記グループ化技法が独立グループを作成する、ステップと、
前記プロセッサ(104)によって、前記複数のグループの中の各グループのためのスライスを作成するステップと、
前記プロセッサ(104)によって、各グループのために作成された各スライスを検証するステップであって、各グループ内の前記1つまたは複数のプロパティの前記検証が同時に実施される、ステップと
を含む、方法。
【請求項２】
前記スライス包摂(SS)グループ化技法は、
前記ソースコードの前記複数のプロパティの中の各プロパティのためのバックワードスライスを計算することであって、ソースコードロケーションのセットに関する前記バックワードスライスが、前記ソースコードの前記所与のロケーションにおいて読み取られた変数の値に影響を及ぼすことができる前記ソースコードのすべての可能なステートメントのセットである、計算することと、
前記複数のグループを作成するために、前記複数のプロパティからの1つまたは複数のプロパティを単一のグループ中にマージすることであって、各グループ中の前記1つまたは複数のプロパティが、各プロパティのために計算された前記バックワードスライスの事前定義サブセット関係に基づいて互いに関係する、マージすることと
を含む、請求項1に記載の方法。
【請求項３】
前記データフロー依存(DD)グループ化技法は、
前記ソースコードの変数のための推移データフロー依存を計算することであって、前記変数が、前記ソースコードの前記複数のプロパティからのプロパティのセットのために読み取られる、計算することと、
前記複数のグループを作成するために、前記複数のプロパティからの1つまたは複数のプロパティを単一のグループ中にマージすることであって、各グループ中の前記1つまたは複数のプロパティが、各プロパティのための前記計算された推移データフロー依存の事前定義サブセット関係に基づいて互いに関係する、マージすることと
を含む、請求項1に記載の方法。
【請求項４】
前記データおよび制御フロー依存(DC)グループ化技法は、
前記データフロー依存(DD)グループ化技法によって形成された前記複数のグループを識別することと、
前記データフロー依存(DD)グループ化技法によって形成された各グループ中の前記プロパティの推移制御フロー依存を計算することと、
前記複数のグループを作成するために、前記複数のプロパティからの1つまたは複数のプロパティを単一のグループ中にマージすることであって、各グループ中の前記1つまたは複数のプロパティが、前記データフロー依存(DD)グループ化技法によって形成された各グループ中の各プロパティのための前記計算された推移制御フロー依存の事前定義サブセット関係に基づいて互いに関係する、マージすることと
を含む、請求項1に記載の方法。
【請求項５】
ソースコードのプロパティを検証するシステム(100)であって、前記システム(100)は、
命令を記憶するメモリ(102)と、
1つまたは複数の入出力(I/O)インターフェース(106)と、
前記1つまたは複数のI/Oインターフェース(106)を介して前記メモリ(102)に結合された1つまたは複数のプロセッサ(104)とを備え、前記プロセッサ(104)は、
プロパティを検証するためにソースコードを受信することであって、前記ソースコードが、グループ化されるべき、アサーションに対応する複数のプロパティでアノテーションを付けられ、前記複数のプロパティがユーザによって定義される、受信することと、
グループ化技法に基づいて前記複数のプロパティを複数のグループにマージするために前記ソースコードを分析することであって、1つまたは複数のプロパティが、前記複数のグループの中の各グループ下にグループ化され、前記グループ化技法が、スライス包摂(SS)グループ化技法と、データフロー依存(DD)グループ化技法と、データおよび制御フロー依存(DC)グループ化技法とのうちの1つを含み、前記グループ化技法が独立グループを作成する、分析することと、
前記複数のグループの中の各グループのためのスライスを作成することと、
各グループのために作成された各スライスを検証することであって、各グループ内の前記1つまたは複数のプロパティの前記検証が同時に実施される、検証することと
を行うように前記命令によって構成される、
システム(100)。
【請求項６】
前記スライス包摂(SS)グループ化技法は、
前記ソースコードの前記複数のプロパティの中の各プロパティのためのバックワードスライスを計算することであって、ソースコードロケーションのセットに関する前記バックワードスライスが、前記ソースコードの前記所与のロケーションにおいて読み取られた変数の値に影響を及ぼすことができる前記ソースコードのすべての可能なステートメントのセットである、計算することと、
前記複数のグループを作成するために、前記複数のプロパティからの1つまたは複数のプロパティを単一のグループ中にマージすることであって、各グループ中の前記1つまたは複数のプロパティが、各プロパティのために計算された前記バックワードスライスの事前定義サブセット関係に基づいて互いに関係する、マージすることと
を含む、請求項5に記載のシステム(100)。
【請求項７】
前記データフロー依存(DD)グループ化技法は、
前記ソースコードの変数のための推移データフロー依存を計算することであって、前記変数が、前記ソースコードの前記複数のプロパティからのプロパティのセットのために読み取られる、計算することと、
前記複数のグループを作成するために、前記複数のプロパティからの1つまたは複数のプロパティを単一のグループ中にマージすることであって、各グループ中の前記1つまたは複数のプロパティが、各プロパティのための前記計算された推移データフロー依存の事前定義サブセット関係に基づいて互いに関係する、マージすることと
を含む、請求項5に記載のシステム(100)。
【請求項８】
前記データおよび制御フロー依存(DC)グループ化技法は、
前記データフロー依存(DD)グループ化技法によって形成された前記複数のグループを識別することと、
前記データフロー依存(DD)グループ化技法によって形成された各グループ中の前記プロパティの推移制御フロー依存を計算することと、
前記複数のグループを作成するために、前記複数のプロパティからの1つまたは複数のプロパティを単一のグループ中にマージすることであって、各グループ中の前記1つまたは複数のプロパティが、前記データフロー依存(DD)グループ化技法によって形成された各グループ中の各プロパティのための前記計算された推移制御フロー依存の事前定義サブセット関係に基づいて互いに関係する、マージすることと
を含む、請求項5に記載のシステム(100)。
【請求項９】
1つまたは複数のハードウェアプロセッサによって実行されたとき、
プロセッサ(104)によって、プロパティを検証するためにソースコードを受信することであって、前記ソースコードが、グループ化されるべき、アサーションに対応する複数のプロパティでアノテーションを付けられ、前記複数のプロパティがユーザによって定義される、受信することと、
前記プロセッサ(104)によって、グループ化技法に基づいて前記複数のプロパティを複数のグループにマージするために前記ソースコードを分析することであって、1つまたは複数のプロパティが、前記複数のグループの中の各グループ下にグループ化され、前記グループ化技法が、スライス包摂(SS)グループ化技法と、データフロー依存(DD)グループ化技法と、データおよび制御フロー依存(DC)グループ化技法とのうちの1つを含み、前記グループ化技法が独立グループを作成する、分析することと、
前記プロセッサ(104)によって、前記複数のグループの中の各グループのためのスライスを作成することと、
前記プロセッサ(104)によって、各グループのために作成された各スライスを検証することであって、各グループ内の前記1つまたは複数のプロパティの前記検証が同時に実施される、検証することと
を含む行為を実施する1つまたは複数の命令を備える1つまたは複数の非一時的機械可読情報記憶媒体。
【請求項１０】
前記スライス包摂(SS)グループ化技法は、
前記ソースコードの前記複数のプロパティの中の各プロパティのためのバックワードスライスを計算することであって、ソースコードロケーションのセットに関する前記バックワードスライスが、前記ソースコードの前記所与のロケーションにおいて読み取られた変数の値に影響を及ぼすことができる前記ソースコードのすべての可能なステートメントのセットである、計算することと、
前記複数のグループを作成するために、前記複数のプロパティからの1つまたは複数のプロパティを単一のグループ中にマージすることであって、各グループ中の前記1つまたは複数のプロパティが、各プロパティのために計算された前記バックワードスライスの事前定義サブセット関係に基づいて互いに関係する、マージすることと
を含む、請求項9に記載の1つまたは複数の非一時的機械可読情報記憶媒体。
【請求項１１】
前記データフロー依存(DD)グループ化技法は、
前記ソースコードの変数のための推移データフロー依存を計算することであって、前記変数が、前記ソースコードの前記複数のプロパティからのプロパティのセットのために読み取られる、計算することと、
前記複数のグループを作成するために、前記複数のプロパティからの1つまたは複数のプロパティを単一のグループ中にマージすることであって、各グループ中の前記1つまたは複数のプロパティが、各プロパティのための前記計算された推移データフロー依存の事前定義サブセット関係に基づいて互いに関係する、マージすることと
を含む、請求項9に記載の1つまたは複数の非一時的機械可読情報記憶媒体。
【請求項１２】
前記データおよび制御フロー依存(DC)グループ化技法は、
前記データフロー依存(DD)グループ化技法によって形成された前記複数のグループを識別することと、
前記データフロー依存(DD)グループ化技法によって形成された各グループ中の前記プロパティの推移制御フロー依存を計算することと、
前記複数のグループを作成するために、前記複数のプロパティからの1つまたは複数のプロパティを単一のグループ中にマージすることであって、各グループ中の前記1つまたは複数のプロパティが、前記データフロー依存(DD)グループ化技法によって形成された各グループ中の各プロパティのための前記計算された推移制御フロー依存の事前定義サブセット関係に基づいて互いに関係する、マージすることと
を含む、請求項9に記載の1つまたは複数の非一時的機械可読情報記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照および優先権
本出願は、2018年6月11日に出願された、インド特許出願第201821021741号の優先権を主張する。
【０００２】
本明細書における開示は、一般に、ソフトウェア検証に関し、より詳細には、ソースコードのプロパティを検証するための方法およびシステムに関する。
【背景技術】
【０００３】
ソースコードからモデルを抽出するためのコストがあまりに高いので、コードレベルでのプログラムの検証が、多くのソフトウェア製造業者を引きつけた。従来、ソフトウェア製造業者は、多数のプロパティに関連する増加したサイズの埋込みコードを公式に検証するために、ますます効率的な方法およびツールを必要とする。その上、コンピュータシステムの機能は、それが実行するソフトウェアによって決定される。ソースコードによって表されるそのようなアプリケーションプログラムの挙動は、ソースコードにおいて記述された一連の命令によって命令された、一連のプログラム動作を意味する。これらの挙動に関係するプロパティは、メモリが動的に割り振られる場合、メモリを確実に解放するプロパティを含み、プログラム中の命令が実行される場合、対応する特定の命令をいつか確実に実行するプロパティを含む。コードレベル検証のために利用可能な手法の大部分が、それらの検証結果間の含意関係を識別することにより、プロパティの十分なサブセットを検証することによって支えられる。実際には、この手法は、費用がかかり、また、スライスに共通のコードの繰返し分析を生じる。
【０００４】
既存のシステムでは、コンカレントシステムについてのプロパティの自動検証の方法が、ソースコードから生成されたソースストリングを、ターゲット言語に属するストリングに変換することと、ターゲット言語での検証モデルを生成することとによって抽出を実施する。変換は、ルックアップテーブルにおける明示的マッピング、随意のユーザ定義されたデータ制限、およびデフォルトタイプのルールによって誘導される。システムが所与の明示的または暗黙的論理システムプロパティを満たす(または、場合によってはそれに違反することがある)ことを検査するために、抽出された検証モデルに対して標準論理モデル検査が実施される。しかしながら、システムは、プロパティの効率的およびスケーラブルな検証のために同じグループに属するプロパティのグループ化において制限する。
【０００５】
別の既存のシステムでは、システムは、要件ソースからキャプチャされた要件情報に基づいてプロジェクトのための要件を定義し、各要件について、要件のために開発されたソースコードをプロジェクトに関連付けるか、または、ソースコードの開発のために要件を割り当てる。さらに、システムは、マッピングされたプロシージャ上で実施された分析、コードカバレージ測定、システム試験およびユニット試験のうちの1つまたは複数の結果に基づいて、プロジェクトのための定義された要件を検証する。しかしながら、既存のシステムは、時間効率的な検証を提供せず、それにより、検証されるべきソースコードの性能を低減する。
【発明の概要】
【課題を解決するための手段】
【０００６】
本開示の実施形態は、従来のシステムにおいて発明者によって認識される上述の技術的問題のうちの1つまたは複数の解決策として、技術改善を提示する。たとえば、一実施形態では、ソースコードのプロパティを検証するためのシステムが提供される。システムは、プロセッサと、入出力(I/O)インターフェースと、プロセッサに結合されたメモリとを含み、プロパティを検証するためにソースコードを前処理し、受信するために、プロセッサに記憶されたプログラムされた命令をメモリ中で実行することが可能である。ソースコードは、グループ化されるべき、アサーションに対応する複数のプロパティでアノテーションを付けられ、複数のプロパティはユーザによって定義される。受信されたソースコードは、グループ化技法(grouping technique)に基づいて複数のプロパティを複数のグループにマージするために分析される。さらに、1つまたは複数のプロパティが、複数のグループの中の各グループ下にグループ化され、グループ化技法は、スライス包摂(SS:slice subsumption)グループ化技法と、データフロー依存(DD:data flow dependence)グループ化技法と、データおよび制御フロー依存(DC:data and control flow dependence)グループ化技法とのうちの1つを含み、グループ化技法は独立グループを作成する。次いで、複数のグループの中の各グループのためのスライスが作成される。さらに、各グループのために作成された各スライスが検証され、各グループ内の1つまたは複数のプロパティについての検証が同時に実施される。別の態様では、ソースコードのプロパティを検証するための方法が提供される。方法は、プロセッサと、入出力(I/O)インターフェースと、プロセッサに結合されたメモリとを含み、プロパティを検証するためにソースコードを前処理し、受信するために、プロセッサに記憶されたプログラムされた命令をメモリ中で実行することが可能である。ソースコードは、グループ化されるべき、アサーションに対応する複数のプロパティでアノテーションを付けられ、複数のプロパティはユーザによって定義される。受信されたソースコードは、グループ化技法に基づいて複数のプロパティを複数のグループにマージするために分析される。さらに、1つまたは複数のプロパティが、複数のグループの中の各グループ下にグループ化され、グループ化技法は、スライス包摂(SS)グループ化技法と、データフロー依存(DD)グループ化技法と、データおよび制御フロー依存(DC)グループ化技法とのうちの1つを含み、グループ化技法は独立グループを作成する。次いで、複数のグループの中の各グループのためのスライスが作成される。さらに、各グループのために作成された各スライスが検証され、各グループ内の1つまたは複数のプロパティについての検証が同時に実施される。
【０００７】
また別の態様では、1つまたは複数のハードウェアプロセッサによって実行されたとき、プロパティを検証するためにソースコードを受信することを含む行為を実施する、1つまたは複数の命令を備える、1つまたは複数の非一時的機械可読情報記憶媒体を提供する。ソースコードは、グループ化されるべき、アサーションに対応する複数のプロパティでアノテーションを付けられ、複数のプロパティはユーザによって定義される。受信されたソースコードは、グループ化技法に基づいて複数のプロパティを複数のグループにマージするために分析される。さらに、1つまたは複数のプロパティが、複数のグループの中の各グループ下にグループ化され、グループ化技法は、スライス包摂(SS)グループ化技法と、データフロー依存(DD)グループ化技法と、データおよび制御フロー依存(DC)グループ化技法とのうちの1つを含み、グループ化技法は独立グループを作成する。次いで、複数のグループの中の各グループのためのスライスが作成される。さらに、各グループのために作成された各スライスが検証され、各グループ内の1つまたは複数のプロパティについての検証が同時に実施される。上記の概略的な説明と以下の詳細な説明の両方が、例示的および説明的なものにすぎず、特許請求の範囲のように、本発明を限定するものではないことを理解されたい。
【０００８】
本開示に組み込まれ、本開示の一部を構成する添付の図面は、例示的な実施形態を示し、その説明とともに、開示される原理を説明するのに役立つ。
【図面の簡単な説明】
【０００９】
【図１】本開示のいくつかの実施形態による、ソースコードのプロパティを検証するためのシステムの例示的なブロック図である。
【図２】本開示のいくつかの実施形態による、図4とともに、ソースコードのプロパティを検証するための流れ図である。
【図３Ａ】本開示のいくつかの実施形態による、図2および図4とともに、スライス包摂(SS)グループ化技法を使用して、ソースコードのプロパティを検証するためのシステムにおいて利用されるステップをもつ方法を示す例示的な流れ図である。
【図３Ｂ】本開示のいくつかの実施形態による、図2および図4とともに、データフロー依存(DD)グループ化技法を使用して、ソースコードのプロパティを検証するためのシステムにおいて利用されるステップをもつ方法を示す例示的な流れ図である。
【図３Ｃ】本開示のいくつかの実施形態による、図2および図4とともに、データおよび制御フロー依存(DC)グループ化技法を使用して、ソースコードのプロパティを検証するためのシステムにおいて利用されるステップをもつ方法を示す例示的な流れ図である。
【図４】本開示のいくつかの実施形態による、ソースコードのプロパティを検証するための高レベルアーキテクチャの図である。
【発明を実施するための形態】
【００１０】
添付の図面を参照しながら、例示的な実施形態が説明される。図では、参照番号の最も左の桁は、その参照番号が最初に表示された図を識別する。好都合な場合はいつでも、同じまたは同様の部分を指すために図面全体にわたって同じ参照番号が使用される。開示される原理の例および特徴が本明細書で説明されるが、開示される実施形態の範囲から逸脱することなく、変更形態、適応形態、および他の実装形態が可能である。以下の発明を実施するための形態は、例示的なものにすぎないと見なされ、真の範囲は、以下の特許請求の範囲によって示されることが意図される。
【００１１】
本明細書の実施形態は、ソースコードのプロパティを検証するための方法およびシステムを提供する。本明細書のプロパティは、アサーションと呼ばれることもある。提案される方法およびシステムは、ユーザが、関係するプログラムプロパティをグループ化することによってソフトウェアコードを効率的に検証することを可能にする。方法は、複数のアサーションの多くを確認するために必要とされるコードの繰返し分析を回避することによって、それらのアサーションを効率的に検証する。関係するプロパティのグループを検証することは、既存の検証技法と比較すると、性能を改善し、コストを軽減し、それにより、スケーラビリティを増加させる。プロパティをグループ化する目的は、ソースコードのプロパティの個々のスライスに共通であるコードセグメントの繰返し分析を回避することによって、それらのソースコードのプロパティを検証する効率を改善することである。また、システムは、ローカルプロパティをグループとして一緒に検証することを可能にし、それによりスケーラビリティを増加させる。入力プログラムの制御およびデータフローを介してソースコードのための関係するプロパティをグループ化することを検証するために、1つまたは複数のグループ化技法が利用され得る。提案されるシステムはまた、グループ化のためにアサーションでアノテーションを付けられて入力された任意のソフトウェア言語ソースコードの関係するプロパティのグループを検証するために、任意のプロパティ検証フレームワークにプラグインされ得る。システムは、ユーザが少なくとも1つのグループ化技法を選択することを可能にし、そのグループ化技法はさらに、独立グループが生成されるまで、グループ化アルゴリズムを反復的に呼び出し、それによりその性能が改善される。
【００１２】
次に図面を参照すると、より詳細には、同様の参照符号が、対応する特徴を図全体を通して一貫して示す、図1から図4を参照すると、好ましい実施形態がそこに示されており、これらの実施形態は、以下の例示的なシステムおよび/または方法の文脈において説明される。
【００１３】
図1は、本開示のいくつかの実施形態による、ソースコードのプロパティを検証するためのシステムの例示的なブロック図を示す。一実施形態では、ソースコード検証システム100が、プロセッサ104と、代替的に入出力(I/O)インターフェース106と呼ばれる通信インターフェースデバイスと、プロセッサ104に動作可能に結合された1つまたは複数のデータストレージデバイスまたはメモリ102とを含む。プロセッサは、代替的に1つまたは複数のハードウェアプロセッサと呼ばれることがある。一実施形態では、ハードウェアプロセッサは、1つまたは複数のマイクロプロセッサ、マイクロコンピュータ、マイクロコントローラ、デジタル信号プロセッサ、中央処理ユニット、状態機械、論理回路、および/または動作可能な命令に基づいて信号を操作する任意のデバイスとして実装され得る。能力の中でも、プロセッサは、メモリに記憶されたコンピュータ可読命令をフェッチし、実行するように構成される。一実施形態では、システム100は、ラップトップコンピュータ、ノートブック、ハンドヘルドデバイス、ワークステーション、メインフレームコンピュータ、サーバ、ネットワーククラウドなど、様々なコンピューティングシステムで実装され得る。
【００１４】
I/Oインターフェース106は、たとえば、ウェブインターフェース、グラフィカルユーザインターフェースなど、様々なソフトウェアおよびハードウェアインターフェースを含むことができ、ワイヤードネットワーク、たとえば、LAN、ケーブルなどと、WLAN、セルラー、または衛星などのワイヤレスネットワークとを含む、多種多様なネットワークN/Wおよびプロトコルタイプ内での複数の通信を容易にすることができる。一実施形態では、I/Oインターフェースデバイスは、ソフトウェアコードを検証するために、いくつかのデバイスを互いにまたは別のサーバに接続するための1つまたは複数のポートを含むことができる。
【００１５】
メモリ102は、たとえば、スタティックランダムアクセスメモリ(SRAM)およびダイナミックランダムアクセスメモリ(DRAM)など、揮発性メモリ、ならびに/または、読取り専用メモリ(ROM)、消去可能プログラマブルROM、フラッシュメモリ、ハードディスク、光ディスク、および磁気テープなど、不揮発性メモリを含む、当技術分野で知られている任意のコンピュータ可読媒体を含み得る。一実施形態では、メモリ102はリポジトリ108を含み得る。リポジトリ108は、検証のために受信されたソースコードを記憶し得る。メモリ102はさらに、本開示のシステム100および方法によって実施される各ステップの入力/出力に関する情報を備え得る。システム100は、プロパティでアノテーションを付けられた複数のソースコードと、グループ化技法の中のユーザ選択されたグループ化技法とを受信するように構成され得る。
【００１６】
一実施形態では、システムは、プロパティグループ化技法などの以下のモジュールと、検証エンジンでサポートされるスライサとを含み。プロパティグループ化技法はさらに、スライス包摂(SS)技法、データフロー依存(DD)グループ化技法、ならびにデータおよび制御フロー依存(DC)グループ化技法など、3つのグループ化技法を含み得る。プロパティの検証結果にかかわらずプロパティをグループ化する主要な目的は、それらのプロパティの個々のスライスに共通であるコードセグメントの繰返し分析を回避することによって、効率を改善することである。ψ(g)を、プロパティのセットgに関するスライスとする。ψ(g)は、g中のすべてのプロパティをグループ化するという決定が行われたときに生成される。所与のローカライザーについて、目的は、関係するプロパティのより大きいグループが形成されるように、したがってより多数のプロパティが一緒に分析されるように、グループまたはスライスの総数を低減することである。各グループ化技法は、以下のセクションに例とともに詳述され得る。
【００１７】
図2は、本開示のいくつかの実施形態による、図4とともに、ソースコードのプロパティを検証するための流れ図を示す。次に、流れ図の方法200のステップが、図3A、図3Bおよび図3Cからの図示されたシステムの例示的なアーキテクチャとともに、システム100の構成要素またはブロックを参照しながら説明される。一実施形態では、システム100は、1つまたは複数のプロセッサ104に動作可能に結合された1つまたは複数のデータストレージデバイスまたはメモリ102を備え、1つまたは複数のプロセッサ104による方法200のステップの実行のための命令を記憶するように構成される。プロセスステップ、方法ステップ、技法などが、順次に説明され得るが、そのようなプロセス、方法および技法は、代替順序で機能するように構成され得る。言い換えれば、説明され得るステップの任意のシーケンスまたは順序は、ステップがその順序で実施されるという要件を必ずしも示すとは限らない。本明細書で説明されるプロセスのステップは、実際的な任意の順序で実施され得る。さらに、いくつかのステップは、同時に実施され得る。
【００１８】
方法200のステップ202において、プロセッサ104は、プロパティを検証するためにソースコードを受信するように構成され、ソースコードは、グループ化されるべき、アサーションに対応する複数のプロパティでアノテーションを付けられ、複数のプロパティはユーザによって定義される。以下で述べられるようにプロパティを検証するために、プロセッサによって受信された自動車アプリケーション(automotive application)の例示的なソースコードについて考える。
【００１９】
【表１】
2019215867.tif 000003
【００２０】
ソースコードは、アサーションとして符号化された4つのプロパティP1-4を含んでおり、アサーションは、これらのプロパティに関してさらにスライスされ得ない。ソースコードのすべてのプロパティの有効性は、一定のアレイ、pおよびaと、「*」によって示された入力とに依存する。ソースコードとともにプロパティを検証するための一実施形態では、いくつかの既存のツールが、すべての与えられたプロパティを一緒に分析するか、または一度に1つのプロパティを分析するかのいずれかである。しかし、すべてのプロパティを一緒に分析することは、所与の例示的なソースコードについて以下でTable.1(表2)に述べられる産業用コードを超えてスケーリングしないことがある。さらに、一度に1つのプロパティを分析することは、コードの潜在的に大きい部分または複雑な部分の繰返し分析につながる。上述のソースコードサンプルにおいて、行9〜13は、3つのプロパティP2-4について分析される必要がある。他の既存の技法は、いくつかプロパティが、等価であるかどうか、あるいは互いの有効性または無効性を含意するかどうかを調査するプロパティの検証結果に関係する。しかし、そのような技法は、そのアサーションのいずれも、等価でなく、そのアサーションのいずれの有効性(無効性)も、他のものの有効性(無効性)を保証しないので、コードサンプルに適用され得ない。存在する唯一の関係は、アサーションP2とP3との間の関係である−P2が失敗した場合、P3が成り立つ。概して、そのような関係を見つけることは、費用がかかる分析または複数のモデル検査器コールを必要とし得る。ワーストケースでは、それは、一度に単一のプロパティを検証することにつながり得る。これは実際的でない。個々のアサーションP2、P3およびP4に関するバックワードプログラムスライスについて考える。P2に関するスライスは、行番号2、3、9〜12における命令を含んでおり、ψ({P2})={2,3,9,10,12}によって与えられる。同様に、ψ({P3})={2,3,9,10,12}であり、ψ({P4})={2,3,9,10,12,15,16,17,19}である。したがって、アサーションP3に関するスライスは、P2に関するスライスを包摂し、アサーションP4に関するスライスは、各々P2およびP3に関する個々のスライスを包摂する。明らかに、これらのアサーションの各々を別々に分析することは、各スライスに共通である行番号2、3、9、10および12における命令の繰返し分析につながる。しかし、単一のスライス中で一緒にP2-4を分析すると、この繰返しを削除することになり、分析がスケーリングする場合、全体的検証時間を低減することになる。一方、P1をアサーションP2-4とグループ化することは実際的でない。それらをグループ化することは、場合によっては別個に分析され得るアサーションについてのスケーラビリティの欠如につながることがある。ここで、既存の技法を利用して、以下でTable.1(表2)に述べられるアサーションの異なるグループを用いて上述の例示的なソースコード上で実験が行われ、Table.1(表2)は、プロパティのグループを検証することを表し、ここで、Pi-j:プロパティPi-jを確認するための時間。Pi+j:Pi、次いでPjを確認するための時間。T:時間＞120秒。構成:2.4GHz Intel Xeonプロセッサ、20GB RAM。
【００２１】
【表２】
2019215867.tif 000004
【００２２】
さらに、4つのよく知られているツールの利用は、述語抽象化ベースのSATABSと、有界モデル検査ベースのC有界モデル検査器(CBMC:C Bounded Model Checker)と、ループ抽象化(loop abstraction)ベースのVeriAbsと、補間、間隔分析、陽値分析(explicit value analysis)およびk帰納法を含む技法に基づくCPA-Seqとのための、様々な技法に基づいた。P2-4が一緒にグループ化されたときに、各ツールは最も効率的であり、各アサーションを個々に検証するよりもはるかに優れていた。P1-4がグループ化されたとき、ツールのいずれもスケーリングされなかった。たとえば、有界モデル検査(bounded model checking)の場合、P1は、行番号5におけるループの非有界性(unbounded nature)により、分析することができなかった。したがって、P1とグループ化されたとき、P2-4も分析することができなかった。
【００２３】
一実施形態では、提案される解決策は、複数のアサーションのうちの多くを確認することが必要とされるコードの繰返し分析を回避することによって、複数のアサーションの効率的な検証を支援する。これらの解決策は、(i)プログラムの制御およびデータフローに基づくプロパティのグループ化が、既存の検証技法の性能を改善するのを支援することができる、(ii)スケーラビリティを失うことなしに、ローカルプロパティがグループとして一緒に検証され得るなど、プロパティの検証結果について考えることなしにプロパティをグループ化する。そのスケーラビリティを維持するためにどのプロパティがグループ化されるべきでないかを決定するために、ローカライザーが使用される。主要な寄与は、次のとおりである。1.入力プログラムの制御およびデータフローを介した費用がかからない分析を使用して、関係するプロパティをグループ化するための3つの技法。2.様々なグループ化技法をプラグインすることを可能にする、プロパティグループ化フレームワーク。3.(i)6つの産業用アプリケーションと6つの学術的ベンチマークとを介した3つのグループ化技法が、関係するプロパティのグループを一緒に検証することが性能を改善することを示し、(ii)最近のプロパティ結果依存(property-outcome dependent)解決策に対する、6つのオープンソースベンチマークを介した最も効率的なグループ化技法が、グループ化がより効率的であることを示す、実験評価。
【００２４】
方法200のステップ204において、プロセッサ104は、グループ化技法に基づいて複数のプロパティを複数のグループにマージするためにソースコードを分析するように構成され、1つまたは複数のプロパティが、複数のグループの中の各グループ下にグループ化され、グループ化技法は、スライス包摂(SS)グループ化技法と、データフロー依存(DD)グループ化技法と、データおよび制御フロー依存(DC)グループ化技法とのうちの1つを含む。次に、本開示のいくつかの実施形態による、図4とともに、図3A、図3B、および図3Cの例示的なアーキテクチャを参照しながら、流れ図の方法200のステップが説明される。スライス包摂グループ化技法では、システム300のステップ302に示されているように、最初に、システムが、複数のソースコードとユーザ選択されたグループ化技法とを受信する。さらに、システム300のステップ304に示されているように、受信されたソースコードのために、ソースコードに関連する変数に基づいて複数のプロパティが決定される。さらに、複数のプロパティを複数のグループにマージするために、ステップ308において示されているように、受信されたソースコードは、スライス包摂(SS)グループ化技法を使用して分析され、グループ化される。プロパティの行番号に基づいて、ソースコードにおいて各変数のためのバックワードスライスが作成される(14)。さらに、プロパティのスライス依存に基づいてプロパティのグループを作成するために、ローカライザーを使用して、関数内でまたは関数にわたってプロパティが選択される(16)。ソースコードの複数のプロパティの中の各プロパティのためのバックワードスライスが、計算される。ソースコードロケーションのセットに関するバックワードスライスは、ソースコードの所与のロケーションにおいて読み取られた変数の値に影響を及ぼすことができるソースコードのすべての可能なステートメントのセットである。さらに、複数のグループを作成するために、複数のプロパティからの1つまたは複数のプロパティが単一のグループ中にマージされ、各グループ中の1つまたは複数のプロパティは、各プロパティのために計算されたバックワードスライスの事前定義サブセット関係に基づいて互いに関係する。上述の例示的なソースコードP1-4のためのプロパティのバックワードスライスは、ψ({P1})={4,5,7}、ψ({P2})={2,3,9,10,12}、ψ({P3})={2,3,9,10,12}、およびψ({P4})={2,3,9,10,12,15,16,17,19}である。({P2})⊆ψ({P3})⊆ψ({P4})であるので、ψ({P2,P3})の繰返し分析を回避するために、スライス包摂(SS)グループ化技法によってP2-4をグループ化する。ここで、プロパティの2つのセット、gxとgyとが、ψ(gx)⊆ψ(gy)である場合、グループ化され、
【数１】
2019215867.tif 000005
であるので、P1をP2-4とグループ化しない。したがって、スライス包摂(SS)グループ化技法によって、2つのグループ、{P1}および{P2,P3,P4}が形成される。
【００２５】
次に、方法300のステップ310におけるデータフロー依存(DD)グループ化技法の図3Bを参照する。さらに、システム300のステップ302に示されているように、受信された複数のソースコードとユーザ選択されたグループ化技法とについて。さらに、システム300のステップ304に示されているように、受信されたソースコードのために、ソースコードに関連する変数に基づいて複数のプロパティが決定される。選択されたデータフロー依存(DD)グループ化技法310では、それは、方法300のステップ318において表されているように、プロパティのセットg中で読み取られた変数の推移(transitive)データフロー依存Φ(g)を計算する。さらに、方法300のステップ320において、変数へのデータフローを定義するステートメントの推移閉包(transitive closure)が、取得される。このために、それは、到達定義(reaching definition)データフロー分析を使用する。さらに、方法300のステップ322において、プロパティのデータフロー依存に基づいてプロパティのグループを作成するために、ローカライザーを使用して、関数内でまたは関数にわたってプロパティが選択される。このグループ化技法では、ソースコードの変数のための推移データフロー依存を計算するために、受信されたソースコードが利用され、変数が、ソースコードの複数のプロパティからのプロパティのセットのために読み取られる。さらに、複数のグループを作成するために、複数のプロパティからの1つまたは複数のプロパティが単一のグループ中にマージされ、各グループ中の1つまたは複数のプロパティが、各プロパティのための計算された推移データフロー依存の事前定義サブセット関係に基づいて互いに関係する。セット(g)は、プロパティg中で読み取られた変数へのデータフローを定義するステートメントの推移閉包である。データフロー依存のみを追跡することが、それを軽量の分析にする。DDグループ化技法を用いた上述の例示的なソースコードを参照する、プロパティP1-4のデータフロー依存情報は、Φ({P1})={4,7}、Φ({P2})={3,12}、Φ({P3})={3,12}、Φ({P4})={16,19}と表される。({P2})⊆Φ({P3})であるので、Φ({P2})の繰返し分析を回避するために、DDグループ化によってプロパティP2とP3とがグループ化される。これは、3つのグループ、{P1}、{P2,P3}および{P4}の形成につながる。概して、プロパティの2つのセット、gxとgyとが、Φ(gx)⊆(gy)である場合、DDグループ化によってグループ化される。
【００２６】
次に、方法300のステップ312におけるデータおよび制御フロー依存(DC)グループ化技法の図3Cを参照する。さらに、システム300のステップ302に示されているように、受信された複数のソースコードとユーザ選択されたグループ化技法とについて。さらに、システム300のステップ304に示されているように、受信されたソースコードのために、ソースコードに関連する変数に基づいて複数のプロパティが決定される。データおよび制御フロー依存(DC)グループ化として選択されたグループ化技法では、本技法は、方法300のステップ324において、データフロー依存グループ化技法から、作成されたグループを取得する。さらに、方法300のステップ326において表されるように、データフロー依存(DD)グループ化技法によって作成されたあらゆるグループgについて、DCグループ化技法は、g中のプロパティの推移制御依存φ(g)を計算する。このグループ化技法では、受信されたソースコードのために、データフロー依存(DD)グループ化技法によって形成された複数のグループが識別される。さらに、データフロー依存(DD)グループ化技法によって形成された各グループのために、プロパティの推移制御フロー依存が計算される。さらに、複数のグループを作成するために、複数のプロパティからの1つまたは複数のプロパティが単一のグループ中にマージされ、各グループ中の1つまたは複数のプロパティは、データフロー依存(DD)グループ化技法によって形成された各グループ中の各プロパティのための計算された推移制御フロー依存の事前定義サブセット関係に基づいて互いに関係する。したがって、セット(g)は、g中のプロパティの到達可能性(reachability)を制御するステートメントの推移閉包である。制御フローグラフにおける状態について最も強い後支配節(post-dominator)を計算することによって、制御依存分析が実施される。説明されたように、データフロー依存(DD)グループ化によって、サンプルコードのために、3つのグループ{P1}、{P2,P3}および{P4}が形成される。方法300のステップ328において表されるこれらのグループの推移制御依存φ(g)は、({P1})={5}、φ({P2,P3})={9,10}、φ({P4})={9,10,15,17}によって与えられる。φ({P2,P3})⊆φ({P4})であるので、DCグループ化技法は、2つのグループ、{P1}および{P2,P3,P4}を形成する。さらに、本技法は、方法300のステップ330において表されるように、プロパティの制御フロー依存に基づいてプロパティのグループを作成するために、ローカライザーを使用して、関数内でまたは関数にわたってプロパティを選択する。これらは、SSグループ化技法または方法によって形成されたグループと同一である。しかし、これは、一般的なケースでないことがある。SSグループ化は、依存グラフを形成しながら、反復的にデータおよび制御依存を追跡しなければならないが、データおよび制御フロー依存(DC)グループ化は、最初に、データフロー依存(DD)グループ化のみを実施し、次いで、制御依存分析を実施するので、データおよび制御フロー依存(DC)グループ化方法は、SSグループ化よりも効率的である。
【００２７】
方法200のステップ206において、プロセッサ104は、複数のグループの中の各グループのためのスライスを作成するように構成される。提案されるシステムは、様々なグループ化技法をプラグインされ得、また、グループ化されるべきアサーションでアノテーションを付けられたCソースコードを受け入れる。ユーザによって選択されたグループ化技法に応じて、システムは、生成されたグループが独立になるまで、対応するグループ化アルゴリズムを反復的に呼び出す。最終的に、それは、グループg1、g2、...gnに対応するスライスψ(g1)、ψ(g2)...ψ(gn)を生成するためにスライサを呼び出す。実際問題として、検証をスケーリングするためにスライシングが必要である。ユーザは、次いで、プロパティのグループを同時に検査することが可能な任意の検証器を使用して、これらのスライスを検証することができる。
【００２８】
方法200のステップ208において、プロセッサ104は、各グループのために作成された各スライスを検証するように構成され、各グループ内の1つまたは複数のプロパティの検証が同時に実施される。さらに、このステップは、方法300のステップ334に関して詳述され得、ここで、6つの産業用埋込みアプリケーションと6つのオープンソースベンチマークとに対して実験を実施することによって、グループ化技法のうちの1つを使用して実験分析が検証される。実験の2つのセットを行うことによって、効率における利得を評価するための実験分析1について。第1のセットでは、875個のアサーションで符号化されたよく知られているベンチマークに対して実験が実施され、それは、複数のアサーションの存在下でのFunFrogツールの効率の改善を示す。実験はまた、CBMC 5.8、CPA-Seq 1.6.1、VeriAbs 1.3.10、およびUltimate Automizer 0.1.23-3204b741など、現況技術における4つのよく知られているツールに関して実施された。Ultimate Automizerは、CEGARのような技法、述語抽象化およびレイジー抽象化(lazy abstraction)を使用する。上述のツールは、1つのコールにおいて複数のアサーションを検証することができる。CPA-SeqおよびUltimate Automizerは、複数回呼び出されなければならず、それぞれ失敗する、無効なアサーションを見つけたときに終了する。比較実験分析は、Table 2(表3)において以下で説明されるように、開示される提案されるシステムとともに当技術分野で知られている手法を使用して、効率における利得を評価するためのよく知られているベンチマークを介して実施される。この表の最後の3つの列は、最も効率的なグループ化技法、DCグループ化と、最近の技法、アサーション含意検出(DAI:detecting assertion implication)との比較を示している。
【００２９】
【表３】
2019215867.tif 000006
【００３０】
別の実施形態では、データおよび制御フロー依存(DC)グループ化技法は、それが最小数のグループを形成するので、最も速く、データフロー依存(DD)グループ化技法よりも速いことを示す。DCグループ化によって生成されたグループは、試験ツールへの入力として使用された。結果は、すべてのツールによって必要とされる総時間が、ソースコードの関係するプロパティのグループ化により、最高92%だけ低減されることを示す。低減は、VeriAbsについて最少であり、0.13%であった。このデータ全体は、グループ化の前に、検証ツールが、それらの時間の最高92%を、繰返しコードフラグメントを分析することに費やしたことを示す。この繰返しは、グループ化によって大幅に低減された。しかしながら、検証時間と比較して、かなりの量の時間が、プロパティをグループ化することに費やされた。これは、入力ベンチマークの単純さに起因した。したがって、入力ツールは、迅速にそれらを検証することができた。
【００３１】
実験の次のセットでは、グループ化技法を高度検証ツールに関する6つの産業用アプリケーションに適用し、検証ツールはELABMCであり得る。この検証ツールは、いくつかの現況技術のツールよりも良好なスケーラビリティおよび精度で大規模埋込みアプリケーションを検証することが示された。それは、有界モデル検査(BMC)のスケーラビリティを支援するために抽象化を使用する。グループ化技法を6つの埋込みアプリケーションA1〜A6に適用する前および後に、このツールの性能が比較された。アプリケーションA1は、スマートカード機能を実装し、アプリケーションA2〜A6は、それぞれ、車両のプロトコルスタックのモジュール、CANドライバ、制動コントローラ、バッテリーコントローラ、およびインフォテインメントシステムを実装する。検証ツールは、入力コードにアサーションでアノテーションを付け、入力コードを抽象化し、次いで、抽象化したものに一度に1つのプロパティずつBMCを適用する。グループ化フレームワークが、検証ツールのアノテーションフェーズの後に呼び出され、単一のSATコールにおいて複数のプロパティが検証されたことを保証するためにオールクレームモード(all-claims mode)でCBMCを実行した。これらのアプリケーションは、グループ化なしに対して、SS、DDおよびDCグループ化技法を使用して、無効なアレイインデックス付けとゼロ除算とデータタイプのオーバーフローおよびアンダーフローとについて評価された。結果は、Table 3(表4)に示されており、グループ化による検証ツールの効率における利得を評価するための実験的を表す。
【００３２】
【表４】
2019215867.tif 000007
【００３３】
値は四捨五入された。総実行計時は、グループ化するための時間を含む。キロラインズオブコード(KLOC)単位でのアプリケーションサイズ。マシン構成:2.10GHz Intel i5プロセッサ、8GB RAM、64ビットWindowsオペレーティングシステム。Ap.:アプリケーション。#Pr.:プロパティの数。W/o:ない場合。
【００３４】
検証ツールによってこれらのアプリケーションを検証するために必要とされる総時間は、少なくとも45%だけおよび最高約70%だけ低減した。このデータは、グループ化の前に、検証ツールが、その時間の最高70%を、繰返しコードフラグメントを分析することに費やしたことを示す。この繰返しは、グループ化によって大幅に低減された。最新の実験と同様に、DCグループ化は、SSグループ化が最小数のグループを形成するにもかかわらず、DCグループ化の効率的なグループ化アルゴリズムにより、累積的に最も速かった。また、グループ化がある場合と、グループ化がない場合(w/o)とで検証されたプロパティの数は、同じままであり、グループ化の後にスケーラビリティの欠如による検証ツールの精度の低下を示さなかった。最後に、プロパティをグループ化するための時間は、検証時間と比較してあまり有意でないことに留意されたい。これは、これらのアプリケーションの高い複雑さに起因した。検証ツールは、グループ化よりもプロパティを分析することに多くの時間を費やした。
【００３５】
一実施形態では、実験分析2について説明することは、入力プログラムの制御およびデータフロー特性に関するプロパティをグループ化することが、プロパティ間の含意関係を検査することよりも効率的であり得ることを確認するための、この実験を実施することによる既存の技法との比較である。3つのグループ化技法のうちの最も効率的であるDCグループ化が、アサーション含意検出(DAI)と呼ばれる最近の技法に対して評価される。DAIは、多くのアサーションの存在下で、補間ベースのツール、FunFrogの性能を改善した。DAIは、アサーション間の含意関係を見つけることによって、検証されるべきアサーションの数を低減する。DAIは、プリプロセッサとしてFunFrogに実装され、よく知られている検証ベンチマーク上で評価された。この比較は、同じベンチマーク上で、DCグループ化を用いてFunFrogの効率を改善することを試みた。FunFrogは、入力プログラム中で符号化されたプロパティのグループを同時に分析することができる。Table.2(表3)の最後の3つの列が、この実験の詳細を示す。わかるように、DC+FunFrogは、DAI+FunFrogよりも約54.5%少ない時間がかかった。また、全体的DCグループ化時間は、44%だけDAIよりも少ない。これは、軽量静的分析に基づくグループ化の利点を明確に強調する。
【００３６】
図4は、本開示のいくつかの実施形態による、ソースコードのプロパティを検証するための高レベルアーキテクチャである。本明細書の実施形態は、任意のソフトウェアアプリケーションに関連するソースコードのプロパティを検証するための方法およびシステムを提供する。最初に、システムは、処理のために複数のソースコードとユーザ選択されたグループ化技法とを受信する。さらに、ソースコードに関連する変数に基づいて、複数のプロパティが決定される。ユーザは、スライス包摂グループ化技法、データフロー依存グループ化技法、ならびにデータおよび制御フロー依存グループ化技法など、グループ化技法の中のグループ化技法を選択することができる。ユーザ選択されたグループ化技法がスライス包摂グループ化技法である場合、順次、システムは後続のステップを実施し、所与の行番号におけるプロパティ中で読み取られた変数に関してバックワードスライスを作成し、そのスライスに基づくプロパティのグループを作成するために、ローカライザーを使用して、関数内でまたは関数にわたってプロパティが分類される。
【００３７】
さらに、ユーザ選択されたグループ化技法がデータフロー依存グループ化技法である場合、順次、システムは後続のステップを実施し、ソースコードのプロパティにおいて関連する変数について、推移データフロー依存が計算される。変数へのデータフローを定義するステートメントの推移閉包が取得され、プロパティのデータフロー依存に基づいてプロパティのグループを作成するために、ローカライザーを使用して、関数内でまたは関数にわたってプロパティが分類される。さらに、ユーザ選択されたグループ化技法がデータおよび制御フロー依存グループ化技法である場合、順次、システムは後続のステップを実施し、データフロー依存グループ化技法から作成されたプロパティのグループが取得される。ソースコードのこれらのグループ化されたプロパティに関連するプログラムステートメントの推移制御フロー依存が、計算される。これらのプロパティの到達可能性を制御するステートメントの推移閉包が取得され、プロパティの制御フロー依存に基づいてプロパティのグループを作成するために、ローカライザー使用をして、関数内でまたは関数にわたってこれらのプロパティが分類され得る。選択されたグループ化技法に基づいてプロパティの各グループのバックワードスライスを生成するために、スライス包摂グループ化技法、データフロー依存グループ化技法、ならびにデータおよび制御フロー依存グループ化技法など、グループ化技法から取得された処理されたデータが提供される。各グループの複数のプロパティが同時に検証され得る。
【００３８】
本明細書は、いかなる当業者も実施形態を製作および使用することができるように、本明細書の主題について説明する。主題実施形態の範囲は、特許請求の範囲によって定義され、当業者が想起する他の変更形態を含み得る。そのような他の変更形態は、それらが特許請求の範囲の文字通りの文言とは異ならない同様の要素を有する場合、または、それらが特許請求の範囲の文字通りの文言とのわずかな差をもつ等価要素を含む場合、特許請求の範囲内に入ることが意図される。
【００３９】
本明細書の本開示の実施形態は、ソースコードのプロパティを検証する未解決の問題に対処する。したがって、実施形態は、一度に1つのグループずつ検証可能なプロパティの独立グループを作成するための方法を提供し、それは、実世界ソフトウェアシステムの多数のプロパティのための効率的、自動的、およびスケーラブルな検証である。その上、本明細書の実施形態は、さらに、システムが、ソースコードを検証するための様々なグループ化技法をプラグインされることを可能にする。提案される方法は、改善された性能を実験的に示し、それにより、現況技術において知られている既存の技法と比較してコストを低減する。また、システムは、ローカルプロパティをグループとして一緒に検証することを可能にし、それにより、検証されるべきプロパティのスケーラビリティが増加する。システムは、ソースコードがそれについて検証可能である1つまたは複数のグループ化技法を提供し、それらのプロパティの個々のスライスに共通であるコードセグメントの繰返し分析を回避することによって、効率を改善する。
【００４０】
保護の範囲は、そのようなプログラムおよび、加えて、その中にメッセージを有するコンピュータ可読手段に拡張され、そのようなコンピュータ可読記憶手段は、プログラムがサーバまたはモバイルデバイスまたは任意の好適なプログラマブルデバイス上で動作するとき、方法の1つまたは複数のステップの実装のためのプログラムコード手段を含んでいることを理解されたい。ハードウェアデバイスは、たとえば、サーバまたはパーソナルコンピュータなどのような任意の種類のコンピュータ、あるいはそれらの任意の組合せを含む、プログラムされ得る任意の種類デバイスであり得る。デバイスはまた、たとえば、たとえば特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)のようなハードウェア手段、または、ハードウェア手段およびソフトウェア手段の組合せ、たとえばASICおよびFPGA、または、ソフトウェア処理構成要素がその中に位置する少なくとも1つのマイクロプロセッサおよび少なくとも1つのメモリであり得る、手段を含み得る。したがって、手段は、ハードウェア手段とソフトウェア手段の両方を含むことができる。本明細書で説明される方法実施形態は、ハードウェアおよびソフトウェアで実装される実装され得る。デバイスは、ソフトウェア手段をも含み得る。代替的に、実施形態は、たとえば複数のCPUを使用する、異なるハードウェアデバイス上に実装され得る。
【００４１】
本明細書の実施形態は、ハードウェア要素およびソフトウェア要素を含むことができる。ソフトウェアで実装される実施形態は、限定はしないが、ファームウェア、常駐ソフトウェア、マイクロコードなどを含む。本明細書で説明される様々な構成要素によって実施される機能は、他の構成要素または他の構成要素の組合せで実装され得る。本明細書では、コンピュータ使用可能またはコンピュータ可読媒体は、命令実行システム、装置、またはデバイスによって、またはそれと関連して使用するために、プログラムを備え、記憶し、伝搬し、または移送することができる任意の装置であり得る。
【００４２】
図示されたステップは、図示の例示的な実施形態を説明するために提示され、進行中の技術開発が、特定の機能が実施される様式を変更することになることが予期されるべきである。これらの例は、限定ではなく、説明の目的で本明細書で提示される。さらに、機能構成ブロックの境界が、説明の便宜のために本明細書で恣意的に定義された。指定された機能およびそれらの関係が適切に実施される限り、代替境界が定義され得る。(本明細書で説明されるものの、等価物、拡張、変動、逸脱などを含む)代替形態が、本明細書に含まれている教示に基づいて、当業者に明らかであろう。そのような代替形態は、開示される実施形態の範囲内に入る。また、「備える、含む(comprising)」、「有する(having)」、「含んでいる(containing)」、および「含む(including)」という単語、ならびに他の同様の形式は、意味が等価であり、これらの単語のいずれか1つに続く1つまたは複数の項目が、そのような1つまたは複数の項目の網羅的なリスティングを意味するものではなく、または1つまたは複数のリストされた項目のみに限定されることを意味するものではないという点で、オープンエンドであることが意図される。また、本明細書でおよび添付の特許請求の範囲において使用される、単数形「a」、「an」、および「the」は、文脈が別段に明確に規定しない限り、複数形の言及を含むことに留意されたい。
【００４３】
さらに、本開示と一致する実施形態を実装する際に、1つまたは複数のコンピュータ可読記憶媒体が利用され得る。コンピュータ可読記憶媒体は、プロセッサによって可読な情報またはデータが記憶され得る任意のタイプの物理メモリを指す。したがって、コンピュータ可読記憶媒体は、プロセッサに、本明細書で説明された実施形態と一致するステップまたは段階を実施させるための命令を含む、1つまたは複数のプロセッサによる実行のための命令を記憶し得る。「コンピュータ可読媒体」という用語は、有形の品物を含み、搬送波および過渡信号を除外する、すなわち、非一時的であると理解されるべきである。例は、ランダムアクセスメモリ(RAM)、読取り専用メモリ(ROM)、揮発性メモリ、不揮発性メモリ、ハードドライブ、CD ROM、DVD、フラッシュドライブ、ディスク、および任意の他の知られている物理的記憶媒体を含む。
【００４４】
本開示および例は、例示的なものにすぎないと見なされ、開示された実施形態の真の範囲は、以下の特許請求の範囲によって示されることが意図される。
【符号の説明】
【００４５】
100  システム
102  メモリ
104  プロセッサ
106  入出力(I/O)インターフェース
108  リポジトリ
【図１】
2019215867.tif 000008
【図２】
2019215867.tif 000009
【図３Ａ】
2019215867.tif 000010
【図３Ｂ】
2019215867.tif 000011
【図３Ｃ】
2019215867.tif 000012
【図４】
2019215867.tif 000013
【外国語明細書】
2019215867000001.pdf