ソフトウェアテストにおけるドメインテストとは? (例あり)

ドメインテストとは何ですか?

ドメインのテスト   ソフトウェアテスト 最小限の入力を与え、適切な出力を評価することによってアプリケーションをテストするプロセス。 ドメイン テストの主な目的は、ソフトウェア アプリケーションが許容範囲内の入力を受け入れ、必要な出力を提供するかどうかを確認することです。

それは、 機能テスト システムが無効な入力値や範囲外の入力値を受け入れないことを確認するために、システムの出力を最小限の入力でテストする手法。 最も重要なものの XNUMX つです ホワイト Box テスト 方法。 また、システムが指定された範囲または有効な範囲外の入力、条件、インデックスを受け入れるべきではないことも検証します。

ドメインのテストは特定のドメインごとに異なるため、ソフトウェア システムをテストするにはドメイン固有の知識が必要です。

ドメインテストのより簡単な実践

ドメイン テストでは、ドメインをサブドメイン (等価クラス) に分割し、各サブドメインの値を使用してテストします。 たとえば、テスト用に Web サイト (ドメイン) が指定されている場合、テストを容易にするために Web サイトを小さな部分 (サブドメイン) に分割します。

ドメインには、任意の XNUMX つの入力変数または入力変数の組み合わせのテストが含まれる場合があります。

専門家は、「境界テスト」と「等価クラス分析」という XNUMX つの名前に満たないドメイン テストの最も単純なケースを研究することがよくあります。

境界テスト – 境界値分析 (BVA) は、パーティション間の境界でのテストに基づいています。 パーティション/クラスの有効な入力値と無効な入力値の両方をテストします。

等価クラスのテスト – この手法の背後にある考え方は、テスト条件のセットを同じとみなせるグループまたはセットに分割する (つまり、パーティション化する) ことです (つまり、システムはそれらを等価に処理する必要があります)。したがって「等価分割」となります。

その簡略化された形式はドメインのテストに適用されます –

  1. 入力変数のテストのみ
  2. システムレベルでテストされた場合のみ
  3. 一度にXNUMXつずつテストした場合のみ
  4. 非常に表面的な方法でテストされた場合にのみ

以下のように簡略化できます。

変数 有効なクラスの等価クラス 無効なクラス同等クラス 境界と特殊なケース Notes
X 0-100 0
100
<0 -1
> 100 101

説明:

  1. フィールドが 0 ~ 100 の範囲を受け入れる場合、-1 と 101 は無効なエントリであり、境界を超えているため、フィールドで受け入れるべきではありません。
  2. このフィールドには、0,100 とそれらの間の任意の数値を受け入れる必要があります。

このようなテーブルを作成します (実際)

  1. 長期にわたる等価クラス分析を構築するには、情報をスプレッドシートに入力します。 まずは変数を列挙することから始めます。 それらに関する情報を入手したら追加してください。
  2. 最終的にテーブルにはすべての変数が含まれるはずです。 これは、観察できるすべての入力変数、すべての出力変数、およびすべての中間変数を意味します。
  3. 実際、私が見たテーブルのほとんどは不完全です。 最も優れたものでは、すべての変数がリストされ、重要な変数の詳細が追加されています。

ドメインテスト戦略

ドメインテストを行う際には、以下の点を考慮する必要があります。

  1. どのドメインをテストしているのでしょうか?
  2. 値をクラスにグループ化するにはどうすればよいですか?
  3. テストされるクラスの値はどれですか?
  4. 結果をどのように判断するか?

どのドメインをテストしているのでしょうか?

私たちがテストするドメインには、いくつかの入力機能と出力機能があります。 いくつかの入力変数を入力する必要があり、適切な出力を検証する必要があります。

ドメインテスト戦略

ドメインテストの例

  1. 単一の入力テスト シナリオを考えてみましょう。

C = a+b、a と b は入力変数、C は出力変数です。

上記の例では、変数の分類または組み合わせは必要ありません。

  1. 以下の複数の入力と適切な出力シナリオを考慮してください。

子供向けのゲーム展示会を考えてみましょう。6 つの競技会が用意されており、チケットは年齢と性別の入力に従って与えられる必要があります。 チケット発行は、ゲーム展示の機能全体をテストするモジュールの XNUMX つです。

シナリオによれば、年齢と競技に基づいて XNUMX つのシナリオがありました。

  1. 5 歳以上 10 歳未満の少年は、ストーリーテリングに参加する必要があります。
  2. 5 歳以上 10 歳未満の女の子は絵画コンテストに参加できます。
  3. 10 歳以上 15 歳未満の少年はクイズに参加する必要があります。
  4. 10 歳以上 15 歳未満の女の子はエッセイの執筆に参加する必要があります。
  5. 5 歳未満の場合は、男の子も女の子も韻コンペティションに参加する必要があります。
  6. 15 歳以上の男女は詩のコンテストに参加する必要があります。

ここでは、入力は年齢と性別となるため、コンテストのチケットが発行されます。 この場合、入力の分割、または単に値のグループ化が問題になります。

値をクラスにグループ化するにはどうすればよいですか?

一部の値を分割するということは、値を重複しないサブセットに分割することを意味します。

前に説明したように、パーティショニングには XNUMX つのタイプがあります。

  1. 等価分割 – 等価分割は ソフトウェアテスト ソフトウェア ユニットの入力データを同等のデータのパーティションに分割し、そこからテスト ケースを導き出す技術。 原則として、テスト ケースは各パーティションを少なくとも XNUMX 回カバーするように設計されています。
  2. 境界値分析 – 境界値分析とは、 ソフトウェアテスト 範囲内の境界値の代表を含むようにテストを設計する手法。 このアイデアは、 境界.

上の例では、値を XNUMX つまたは複数のサブセットに分割しています。 年齢を以下のクラスに分割しています。

  1. クラス1: 5歳から10歳までのお子様
  2. クラス 2 : 5歳未満のお子様
  3. クラス3: 10歳から15歳までのお子様の年齢層
  4. クラス4: 15 歳以上のお子様。

テストされるクラスの値はどれですか?

テストのために選択される値は境界値である必要があります。

  1. 境界は、それらをサンプリングする等価クラスの代表です。 これらは他のクラス メンバーよりもエラーが発生する可能性が高いため、より適切な代表者となります。
  2. 同値クラスを最もよく表すのは、範囲内の値です。

上記の例では、次のクラスをテストする必要があります。

たとえば、シナリオ #1 の場合:

  1. クラス1: 5 歳から 10 歳までのお子様 (5 歳以上 10 歳以下)

境界値:

  1. 値は 10 以下である必要があります。したがって、年齢 10 がこのクラスに含まれる必要があります。
  2. 値は 5 より大きくなければなりません。したがって、5 歳はこのクラスに含めるべきではありません。
  3. 値は 10 以下である必要があります。したがって、11 歳はこのクラスに含めるべきではありません。
  4. 値は 5 より大きくなければなりません。したがって、6 歳がこのクラスに含まれる必要があります。

等価パーティション値:

等価パーティションは、各パーティションから XNUMX つの条件のみをテストする必要がある場合に参照されます。 ここでは、パーティション内の XNUMX つの条件が機能する場合、すべての条件が機能するはずであると想定しています。 同様に、そのパーティション内の XNUMX つの条件が機能しない場合は、他の条件も機能しないと想定されます。 例えば、

(年齢 5 歳以上 10 歳以下)

6 から 10 までが有効な値なので、6,7,8,9、10、8、5、10 のいずれかの値を選択する必要があります。 したがって、選択された年齢「XNUMX」は、(年齢 >XNUMX と <=XNUMX) の間の年齢グループに対する有効な入力年齢です。 この種のパーティションは等価パーティションと呼ばれます。

シナリオ 取るべき境界値 等価分割値
男の子 - 年齢 5 歳以上 10 歳以下 入力年齢 = 6
入力年齢 = 5
入力年齢 = 11
入力年齢 = 10
入力年齢 = 8
女の子 – 年齢 5 歳以上 10 歳以下 入力年齢 = 6
入力年齢 = 5
入力年齢 = 11
入力年齢 = 10
入力年齢 = 8
男の子 - 年齢 10 歳以上 15 歳以下 入力年齢 = 11
入力年齢 = 10
入力年齢 = 15
入力年齢 = 16
入力年齢 = 13
女の子 – 年齢 10 歳以上 15 歳以下 入力年齢 = 11
入力年齢 = 10
入力年齢 = 15
入力年齢 = 16
入力年齢 = 13
年齢<=5 入力年齢 = 4
入力年齢 = 5
入力年齢 = 3
15歳以上 入力年齢 = 15
入力年齢 = 16
入力年齢 = 25

プログラムがテストに合格したか不合格だったかをどのように判断するのでしょうか?

機能を渡すかどうかは、上記のシナリオの結果だけに依存するわけではありません。 与えられた入力と期待される出力から結果が得られますが、これにはドメインの知識が必要です。

例の結果を確認するには:

結果の決定

したがって、上記のすべてのテスト ケースに合格すると、コンテストでのチケット発行のドメインに合格します。 そうでない場合、ドメインは失敗します。

ドメインのテスト構造

通常、テスターはドメイン テストで次の手順に従います。 これらは、テストのニーズに応じてカスタマイズまたはスキップできます。

  • 潜在的に興味深い変数を特定します。
  • 今分析できる変数を特定し、それらを順序付けします (最小値から最大値、またはその逆)。
  • 上記のように境界値と等価クラス値を作成して特定します。
  • 二次的な次元を特定し、それぞれを古典的な方法で分析します。 (上記の例では、性別が XNUMX 番目のディメンションです)。
  • 結果を保持する変数 (出力変数) を特定し、テストします。
  • プログラムがこの変数の値をどのように使用するかを評価します。
  • 組み合わせテストのために、関連する可能性のある追加の変数を特定します。
  • 必ずしも明白な次元にマッピングされないリスクを想像してみてください。
  • 分析されていない変数を特定してリストします。後で分析するための情報を収集します。
  • リスク/同等性表を使用して分析を要約します。

まとめ

上で説明したように、ドメイン テストには、目的の出力を達成するために適切な入力を提供するための知識が必要です。 したがって、コードの小さな塊にのみ使用できます。