Main Content

カスタム データストアのテストのガイドライン

カスタム データストア クラスから派生したすべてのデータストアには共通の動作があります。このテスト手順は、すべてのカスタム データストアが備えていなければならない最小限の動作と機能のセットをテストするためのガイドラインを提供します。カスタム データストア固有の機能を検定するためには、追加のテストが必要です。

カスタム データストアの開発の指示に基づいてカスタム データストアを作成した場合は、以下のテスト手順に従ってカスタム データストアを検定します。最初にユニット テストを実行してから、ワークフロー テストを実行します。

  • ユニット テストではデータストアのコンストラクターとメソッドを検定します。

  • ワークフロー テストではデータストアの使用方法を検定します。

これらのすべてのテスト ケースには以下の共通点があります。

  • テストの説明で指定されている場合を除き、空でないデータストア ds をテストしていることが想定されています。

  • カスタム データストアで設計上サポートされているファイルの拡張子、ファイルのエンコード、およびデータの場所 (Hadoop® など) についてテスト ケースを検証します。

ユニット テスト

構築

データストアのコンストラクターに関するユニット テストのガイドラインは以下のとおりです。

テスト ケースの説明期待される出力

カスタム データストアのコンストラクターが最低限の必須入力で動作するかどうかをチェックします。

期待される最小限のプロパティとメソッドをもつカスタム データストア タイプのデータストア オブジェクト

データストア オブジェクト ds のスーパークラスの 1 つが matlab.io.Datastore であるかどうかをチェックします。

以下のコマンドを実行します。

isa(ds,'matlab.io.Datastore') 

1 または true

カスタム データストア コンストラクターを、必須入力と任意のサポートされる入力引数、および名前と値の引数ペアで呼び出します。

期待される最小限のプロパティとメソッドをもつカスタム データストア タイプのデータストア オブジェクト

read

read メソッドのユニット テストのガイドライン

テスト ケースの説明期待される出力

データストア オブジェクト ds に対して read メソッドを呼び出します。

t = read(ds);

データストアの先頭からのデータ

読み取りサイズを指定する場合は、返されるデータのサイズが読み取りサイズと同等になります。

データストア オブジェクトに対して read メソッドを再度呼び出します。

t = read(ds);

前回の読み取り操作の終了点から開始するデータ

読み取りサイズを指定する場合は、返されるデータのサイズが読み取りサイズと同等になります。

データストア オブジェクトに対して、while ループ内で read メソッドを連続して呼び出します。

while(hasdata(ds))
  t = read(ds);
end

エラーなし

正しい形式の正しいデータ

読み取り可能なデータがある場合、read メソッドの info 出力 (ある場合) をチェックします。

データストア オブジェクト ds を呼び出します。

[t,info] = read(ds);

エラーなし

info には期待される情報が含まれています。

t には期待されるデータが含まれています。

読み取り可能なデータがなくなった場合に、データストア オブジェクトに対して read を呼び出します。

カスタム データストアの実装に基づき、期待される出力またはエラー メッセージ。

readall

readall メソッドのユニット テストのガイドライン

テスト ケースの説明期待される出力

データストア オブジェクトに対して readall メソッドを呼び出します。

すべてのデータ

hasdata(ds)false のときに readall メソッドをデータストア オブジェクトに対して呼び出します。

hasdata(ds)false になるまでデータストアから読み取り、次に readall メソッドを呼び出します。

while(hasdata(ds))
  t = read(ds);
end
readall(ds)

すべてのデータ

hasdata

hasdata メソッドのユニット テストのガイドライン

テスト ケースの説明期待される出力

read を呼び出す前に、データストア オブジェクトに対して hasdata メソッドを呼び出します。

true

read を何回か呼び出した後、すべてのデータが読み取られる前に、データストア オブジェクトに対して hasdata メソッドを呼び出します。

true

読み取り可能なデータがまだある場合に、readall メソッドを呼び出してから、hasdata メソッドを呼び出します。

true

読み取り可能なデータがなくなった場合に、hasdata メソッドを呼び出します。

false

reset

reset メソッドのユニット テストのガイドライン

テスト ケースの説明期待される出力

read メソッドを呼び出す前にデータストア オブジェクトに対して reset メソッドを呼び出します。

reset メソッドに対する呼び出しの後で read メソッドが適切なデータを返すかどうかを検証します。

reset(ds);
t = read(ds);

エラーなし

read はデータストアの先頭からデータを返します。

読み取りサイズを指定する場合は、返されるデータのサイズが読み取りサイズと同等になります。

読み取り可能なデータがまだある場合に、read メソッドを数回呼び出してから、reset メソッドを呼び出します。

reset メソッドに対する呼び出しの後で read メソッドが適切なデータを返すかどうかを検証します。

エラーなし

read メソッドはデータストアの先頭からデータを返します。

読み取りサイズを指定する場合は、返されるデータのサイズが読み取りサイズと同等になります。

読み取り可能な追加のデータがまだある場合に、readall メソッドを 1 回呼び出してから、reset メソッドを呼び出します。

reset メソッドに対する呼び出しの後で read メソッドが適切なデータを返すかどうかを検証します。

エラーなし

read メソッドはデータストアの先頭からデータを返します。

読み取りサイズを指定する場合は、返されるデータのサイズが読み取りサイズと同等になります。

読み取り可能なデータがなくなった場合に、データストア オブジェクトに対して reset メソッドを呼び出してから、read メソッドを呼び出します。

reset メソッドに対する呼び出しの後で read が適切なデータを返すかどうかを検証します。

エラーなし

read メソッドはデータストアの先頭からデータを返します。

読み取りサイズを指定する場合は、返されるデータのサイズが読み取りサイズと同等になります。

progress

progress メソッドのユニット テストのガイドライン

テスト ケースの説明期待される出力

read メソッドを呼び出す前にデータストア オブジェクトに対して progress メソッドを呼び出します。

0 またはカスタム データストアの実装に基づく期待される出力。

readall を呼び出した後、read を呼び出す前に、データストア オブジェクトに対して progress メソッドを呼び出します。

readall(ds);
progress(ds)

0 またはカスタム データストアの実装に基づく期待される出力。

read を何回か呼び出した後、読み取り可能なデータがまだある間に、データストア オブジェクトに対して progress メソッドを呼び出します。

01 の間の小数またはカスタム データストアの実装に基づく期待される出力。

読み取り可能なデータがなくなった場合に、データストア オブジェクトに対して progress メソッドを呼び出します。

1 またはカスタム データストアの実装に基づく期待される出力。

preview

preview メソッドのユニット テストのガイドライン

テスト ケースの説明期待される出力

read を呼び出す前に、データストア オブジェクトに対して preview を呼び出します。

preview メソッドはカスタム データストアの実装に基づき、データストアの先頭から期待されるデータを返します。

read を何回か呼び出した後、読み取り可能なデータがまだある間に、データストア オブジェクトに対して preview を呼び出します。

preview メソッドはカスタム データストアの実装に基づき、データストアの先頭から期待されるデータを返します。

readall を呼び出した後、読み取り可能なデータがまだある間に、データストア オブジェクトに対して preview を呼び出します。

preview メソッドはカスタム データストアの実装に基づき、データストアの先頭から期待されるデータを返します。

read を何回か呼び出し、reset を 1 回呼び出した後、データストア オブジェクトに対して preview を呼び出します。

preview メソッドはカスタム データストアの実装に基づき、データストアの先頭から期待されるデータを返します。

読み取り可能なデータがなくなった場合に、データストア オブジェクトに対して preview を呼び出します。

preview メソッドはカスタム データストアの実装に基づき、データストアの先頭から期待されるデータを返します。

read メソッドを何回か呼び出し、preview を呼び出した後で、再び read を呼び出します。

read メソッドは前回の読み取り操作の終了点から開始するデータを返します。

読み取りサイズを指定する場合は、返されるデータのサイズが読み取りサイズと同等になります。

preview を呼び出してから、データストアに対して readall を呼び出します。

readall メソッドは、データストアからすべてのデータを返します。

データストアに読み取り可能なデータがある間に、preview を呼び出してから hasdata を呼び出します。

hasdata メソッドは true を返します。

partition

partition メソッドのユニット テストのガイドライン

テスト ケースの説明期待される出力

有効な区画数と有効な分割インデックスを指定して、データストア オブジェクト ds に対して partition を呼び出します。

データストアの区画に対して read を呼び出し、データを検証します。

subds = partition(ds,n,index)
read(subds)

区画が有効であることを検証します。

isequal(properties(ds),properties(subds))
isequal(methods(ds),methods(subds))

partition メソッドはデータストアを n 個の区画に分割し、指定された index に対応する区画を返します。

返される区画 subds はカスタム データストアのデータストア オブジェクトでなければなりません。

分割されたデータストア subds には元のデータストアと同じメソッドとプロパティがなければなりません。

isequal ステートメントは true を返します。

区画に対して read を呼び出すと、区画の先頭から開始するデータが返されます。

読み取りサイズを指定する場合は、返されるデータのサイズが読み取りサイズと同等になります。

区画数を 1 に指定し、返される区画の index1 に指定して、データストア オブジェクト ds に対して partition を呼び出します。

分割されたデータストアの区画に対して read および preview を呼び出した場合に返されるデータを検証します。

subds = partition(ds,1,1)
isequal(properties(ds),properties(subds))
isequal(methods(ds),methods(subds))
isequaln(read(subds),read(ds))
isequaln(preview(subds),preview(ds))

区画 subds はカスタム データストアのデータストア オブジェクトでなければなりません。

区画 subds には元のデータストア ds と同じメソッドとプロパティがなければなりません。

isequal および isequaln ステートメントは true を返します。

有効な区画数と有効な分割インデックスを指定して、区画 subds に対して partition を呼び出します。

データストアの区画の再分割はエラーなしで動作しなければなりません。

initializeDatastore

データストアが matlab.io.datastore.HadoopFileBased から継承している場合は、次の表のガイドラインを使用して initializeDatastore の動作を検証してください。

テスト ケースの説明期待される出力

有効な info struct を使用して、データストア オブジェクト ds に対し initializeDatastore を呼び出します。

info struct には次のフィールドがあります。

  • FileName

  • Offset

  • Size

FileName のデータ型は char で、Offset および Size フィールドのデータ型は double です。

たとえば、info struct を初期化してから、データストア オブジェクト ds に対して initializeDatastore を呼び出します。

info = struct('FileName','myFileName.ext',...
                       'Offset',0,'Size',500)
initializeDatastore(ds,info)

データストア オブジェクトのプロパティを確認することで初期化を検証します。

ds

initializeDatastore メソッドは、info struct からの必要な情報を使用してカスタム データストア オブジェクト ds を初期化します。

getLocation

データストアが matlab.io.datastore.HadoopFileBased から継承している場合は、以下のガイドラインを使用して getLocation の動作を検証します。

テスト ケースの説明期待される出力

データストア オブジェクトに対して getLocation を呼び出します。

location = getLocation(ds)

カスタム データストアの実装に基づき、location の出力は以下のいずれかになります。

  • ファイルまたはディレクトリのリスト

  • matlab.io.datastore.DsFileSet オブジェクト

locationmatlab.io.datastore.DsFileSet オブジェクトの場合は、resolve を呼び出して location 出力内のファイルを検証します。

resolve(location)

getLocation メソッドは Hadoop のファイルの場所を返します。

isfullfile

データストアが matlab.io.datastore.HadoopFileBased から継承している場合は、以下のガイドラインを使用して isfullfile の動作を検証します。

テスト ケースの説明期待される出力

データストア オブジェクトに対して isfullfile を呼び出します。

カスタム データストアの実装に基づき、isfullfile メソッドは、true または false を返します。

ワークフロー テスト

適切な環境下でワークフロー テストを検証します。

  • データストアが matlab.io.Datastore からのみ継承している場合は、すべてのワークフロー テストをローカル MATLAB® セッションで検証します。

  • データストアが並列処理をサポートしている場合 (matlab.io.datastore.Partitionable から継承) は、Parallel Computing Toolbox™、MATLAB Parallel Server™ などの並列実行環境でワークフロー テストを検証します。

  • データストアが Hadoop をサポートしている場合 (matlab.io.datastore.HadoopFileBased) は、Hadoop クラスター内でワークフロー テストを検証します。

tall ワークフロー

tall ワークフローのテスト ガイドライン

テスト ケースの説明期待される出力

データストア オブジェクト ds に対して tall を呼び出し、tall 配列を作成します。

t = tall(ds)

関数 tall はデータストアの read メソッドの出力と同じデータ型の出力を返します。

このテスト ステップでは、システム メモリに収まるサイズのデータを含むデータストア オブジェクトを作成します。次に、このデータストア オブジェクトを使用して tall 配列を作成します。

t = tall(ds)

データが数値の場合は、dst の両方に対して関数 mean などの適切な関数を適用してから、結果を比較します。

データが string 型や categorical 型の場合は、ds の列と t の列に関数 unique を適用してから結果を比較します。

gather を適用して結果を検証します。

例については、tall 配列およびデータ ストアを使用するビッグ データのワークフロー (Parallel Computing Toolbox)を参照してください。

エラーなし

関数は正しいデータ型の出力を返します (tall データ型ではない)。

ds に適用した場合でも t に適用した場合でも、関数は同じ結果を返します。

MapReduce ワークフロー

MapReduce ワークフローのテスト ガイドライン

テスト ケースの説明期待される出力

データストア オブジェクト ds に対して mapreduce を呼び出します。

outds = mapreduce(ds,@mapper,@reducer)
詳細については、mapreduce を参照してください。

関数 mapreduce の使用をサポートするには、カスタム データストアの read メソッドが infodata の両方の出力引数を返さなければなりません。

エラーなし

MapReduce 演算は期待される結果を返します。

次のステップ

メモ

このテスト手順は、カスタム データストアの最小限の動作と機能のセットをテストするためのガイドラインを提供します。カスタム データストア固有の機能を検定するためには追加のテストが必要です。

実装と検証が完了したらカスタム データストアの使用を開始できます。

参考

| |

関連するトピック