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

⚡ スマートサマリー

ドメインテストでは、有効な値、無効な値、境界値を含む最小限の有用な入力セットをアプリケーションに与え、許容範囲内の値のみが要求された出力を生成することを確認することで、アプリケーションの妥当性を検証します。

  • 🔘 核となるアイデア: 各入力ドメインを同値類に分割し、各同値類ごとに代表的な値を1つずつテストする。すべての可能な入力値をテストするわけではない。
  • ☑️ 境界に焦点を当てる: クラスの境界値やそのすぐ外側の値は、中間値に比べて、オフバイワン欠陥をはるかに頻繁に露呈する。
  • ✅ 組み合わせた技法: 同値類分析はグループを決定しますping境界値分析によって、各グループのうちどのメンバーを実行するかが決定されます。
  • 🧪 実例: 年齢と性別に基づいて競技を割り当てるチケット発行モジュールは、4つの年齢区分を短く価値の高いテストセットに絞り込む。
  • 📈 知識依存性: 出力が正しいかどうかを判断するにはビジネスルールが必要となるため、この手法は小さく、十分に理解されているロジックの塊に適している。

同値クラスと境界値を用いたソフトウェアテストにおけるドメインテスト

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

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

それは、 機能テスト システムの出力を最小限の入力でテストし、システムが無効な入力値や範囲外の入力値を受け入れないことを保証する手法。また、重要な手法の1つとしても扱われる。 ホワイトボックステスト この方法は、システムが指定された範囲または有効な範囲外の入力、条件、およびインデックスを受け入れないことをさらに検証します。

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

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

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

対象領域は、いずれか1つの入力変数のテスト、または複数の入力変数の組み合わせのテストを含む可能性がある。

実務家は、ドメインテストの最も単純なケースを、「境界テスト」と「同値クラス分析」という別の2つの名称で研究することが多い。

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

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

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

  • 入力変数のテストのみ
  • 検査時にのみ システムレベル
  • 一度にXNUMXつずつテストした場合のみ
  • 非常に表面的な方法でテストされた場合にのみ

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

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

説明:

  • あるフィールドが0~100の範囲の値を受け入れる場合、-1と101は無効な入力値であり、範囲外であるため、そのフィールドはこれらの値を受け入れるべきではありません。
  • このフィールドには、0、100、およびそれらの間の任意の数値を入力できる必要があります。

このようなテーブルを実際に作成する

  • 時間の経過に伴う同値類分析を行うには、情報をスプレッドシートに入力します。まず変数の一覧を作成し、入手した情報を追加していきます。
  • 最終的には、この表にはすべての変数が含まれるべきです。つまり、すべての入力変数、すべての出力変数、そして観測可能なすべての中間変数が含まれます。
  • 実際には、こうした表のほとんどは不完全である。最も優れた表は、すべての変数を列挙し、重要な変数については詳細な説明を加えるものである。

ドメインテスト戦略

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

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

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

テスト対象となるドメインには、入力機能と出力機能があります。入力すべき変数があり、それに対して適切な出力を検証する必要があります。下の図は、その入力と出力の関係を示しています。

ドメインテスト戦略では、入力変数がドメインに流入し、出力を生成する様子が示されている。

ドメインテストの例

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

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

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

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

子供向けゲーム展示会を例に考えてみましょう。6つの競技が用意されており、年齢と性別に応じてチケットを配布する必要があります。チケット配布は、ゲーム展示会全体の機能性をテストするためのモジュールの1つです。

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

  • 5歳以上10歳以下の男の子は、ストーリーテリングに参加すべきです。
  • 5歳以上10歳以下の女の子は、絵画コンクールに参加する必要があります。
  • 10歳以上15歳以下の男子はクイズに参加する必要があります。
  • 10歳以上15歳以下の女子は、作文に参加すべきである。
  • 5歳以下のお子様は、男女ともに童謡コンテストにご参加ください。
  • 15 歳以上の男女は詩のコンテストに参加する必要があります。

ここでは、入力は年齢と性別となり、それによって競技会のチケットが発行されます。このケースは、入力の分割、または単にグループ分けを行うケースです。ping 価値観という観点から、この問題が浮上する。

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

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

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

  • 等価分割 – 同値分割は、ソフトウェアユニットの入力データを同値なデータのパーティションに分割するソフトウェアテスト手法です。 テストケース 導出可能である。原則として、テストケースは各パーティションを少なくとも一度は網羅するように設計されている。
  • 境界値分析 境界値分析とは、ソフトウェアテストの手法の一つで、テストを設計する際に、ある範囲内の境界値を代表する値を含めるようにするものです。この考え方は境界から来ています。

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

  • クラス1:5歳から10歳までの児童
  • クラス2:5歳未満の子供たち
  • クラス3:10歳から15歳までの児童
  • クラス4:15歳以上の児童。

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

テスト用に取得する値は境界値であるべきです。

  • 境界は、サンプリング元の同値類を代表するものです。境界は他の同値類メンバーよりもエラーを露呈する可能性が高いため、より優れた代表例と言えます。
  • 同値クラスを最もよく表すのは、範囲内の値です。

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

例えば、シナリオ1の場合:

クラス1:5歳から10歳までの児童(5歳以上10歳以下)

境界値:

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

同値分割値:

同値分割とは、各分割から 1 つの条件のみをテストする必要がある場合を指します。この場合、分割内の 1 つの条件が機能すれば、すべての条件が機能すると想定します。同様に、その分割内の 1 つの条件が機能しない場合は、他の条件も機能しないと想定します。たとえば、

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

6から10までの値は有効な値であるため、6、7、8、9、10の中からいずれか1つを選択する必要があります。したがって、選択された年齢「8」は、(5歳以上10歳以下)の年齢グループに対する有効な入力年齢となります。このような分割は、同値分割と呼ばれます。

シナリオ 取るべき境界値 等価分割値
男の子 - 年齢 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

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

機能の実装は、上記のシナリオの結果だけに依存するわけではありません。入力値と期待される出力値によって結果が決まるのですが、そのためにはドメイン知識が必要となります。

例の結果を確認する:下の画面は、年齢と性別の組み合わせごとにチケット発行結果を示しています。

ドメインテスト結果を決定するために使用される、年齢と性別の組み合わせごとのチケット発行数

したがって、上記のすべてのテストケースに合格すれば、競技におけるチケット発行のドメインは合格となります。そうでなければ、ドメインは不合格となります。

ドメインのテスト構造

通常、テスターはドメインテストにおいて以下の手順に従います。これらの手順は、テストのニーズに応じてカスタマイズしたり、省略したりすることができます。

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

よくあるご質問

どちらのラベルも実際に現れます。仕様から派生したクラスは、 ブラックボックス 手法としては、コードから派生したクラスを用いることでホワイトボックス化を実現している。分析自体は同一である。

この方法は、ごく少数のテストケースでエラーが発生しやすいエッジ部分をカバーしています。限界は確かに存在します。境界を正確に特定するのは難しく、ワークフロー全体が実行されることはないため、他の方法を置き換えるのではなく、補完する役割を果たします。

同値分割はドメインテストの手順の一つであり、変数の順序付け、境界分析の追加、二次次元と出力変数の処理、そして最終的にはリスク表の作成といった工程も含まれます。

両者は重複しているが同一ではない。この記事では入力ドメイン分析について解説するが、業界での使用例としては、 医療分野のテスト これは、業界知識に基づいたテストを意味し、期待される結果を判断するには依然として業界知識が必要である。

AIアシスタントは要件を読み取り、候補となる同値クラス、境界値、および欠落している無効ケースを提案します。ただし、誤った範囲を推測すると、自信はあるものの役に立たないテストセットになってしまうため、テスターは実際の境界を最終的に確認する必要があります。

GitHubコパイロット プロンプトまたはコードにクラスとエッジが現れると、パラメータ化されたテストメソッドが生成されます。明示されていないビジネス上の制約は、テスターが指定する必要があります。

どの組み合わせも乗法的に増加するので、実用的であることは稀です。まず各変数を単独で分析し、次にペアワイズまたは 直交表 リスクの高い組み合わせを選択する。

有効なクラスのみをテストし、スキップしますping ネガティブテストルールが排他的な場合でも、包括的な境界を使用し、出力変数を完全に無視する。