fbpx

ソフトウェアテストにおける等価分割は、テストカバレッジに妥協することなく効率的なテストケースを構築するのに役立つブラックボックステスト技法である。

この記事では、等価クラス・パーティショニングとは何か、なぜそれが有用なのか、そしてこのテクニックのメリットを引き出すために使用できるプロセスやアプローチのいくつかを探ります。

 

等価クラス分割とは

ソフトウェア・テストで?

QAテスト - QAテストとは何か、その種類、プロセス、アプローチ、ツール、その他!

すべてのソフトウェアには特定の入力条件がある。 ソフトウェアテストの文脈では、これらの入力条件は、テスターがソフトウェアの品質と機能性を検証するために使用しなければならない値やデータを記述する。 これらの入力は、マウスのクリックのような単純なものから、テキストや数字に至るまで様々なものがある。

ソフトウェアテストにおける等価分割は、ソフトウェアを使用するために必要なさまざまな入力を調査し、それらを等価クラス、すなわちソフトウェアの動作に等価な影響を及ぼす入力のセットにグループ化する。

入力の各グループがどのように振る舞うかがわかっていれば、グループの各代表をテストする必要はない。 このように、等価クラス分割は、テスターが冗長なテストの頻度を減らすのに役立つ素晴らしい方法である。 締め切りがますます厳しくなる過当競争のソフトウェア開発の世界では、ソフトウェア・テスト・ライフサイクル(STLC)における時間と労力の節約は極めて重要である。

最後に、等価性テストはブラックボックス・テスト技法であることは注目に値する。 要するに、テスターはプログラムの内部コードや内部構造を知る必要がないということだ。 テストは、入力、出力、外部動作に基づいて行われる。 そのため、これらのテストはプログラム使用中のユーザーの行動に非常に重点を置いている。

 

1.ソフトウェア・テストの同値分割の概要

等価分割は、ソフトウェアテストの入力データを、有効な入力と無効な入力の2つの陣営に分割する。 各パーティション内の値は、ソフトウェアが同じ挙動を示すようにしなければならない。 例えば、こうだ:

  • パーティションAの1つの値の条件が真であれば、パーティションAの他の値も真でなければならない。
  • 同様に、パーティションAのある値の条件が偽であれば、パーティションAの他の値も偽でなければならない。

テストの文脈では、各パーティションは少なくとも1回はカバーされなければならない。 論理的には、パーティションAの1つの入力が失敗すれば、他のすべての入力も失敗することを意味する。 パーティションAにある各入力をテストする代わりに、テスターは1つだけをテストし、その共通点に基づいて結果を推定することができるため、このプロセスは時間を節約できるはずだ。

 

2.ソフトウェア・テストにおける等価クラス・テストが重要な理由

ソフトウェアテストにおける等価クラステストの直接的な利点に入る前に、なぜこのアプローチが重要なのかを定義しなければならない。

すべてのテスターは、ソフトウェアテストには妥協が必要であることを理解している。 時間と予算は限られており、テスターはリソースを最大限に活用する必要がある。 ソフトウェアテストの等価分割は、インプットの数を減らすことによって、チームがテストの効率性と信頼性のバランスを見つけるのに役立つ。

 

等価分割の利点

ソフトウェアテスト

保険と会計におけるロボティック・プロセス・オートメーションの使用例

ソフトウェア・テストにおける同等のパーティションは、さまざまな理由からテスト・チームに好まれている。 ここでは、その中から最も説得力のあるものをいくつか紹介しよう。

1.効率性

等価分割テストの大きな利点は、その効率性にある。 テスト担当者が等価分割を使用すると、テストカバレッジを犠牲にすることなく、必要なテストケースの数を減らすことができる。 各等価クラスから入力ケースを選択することで、テスト担当者は、さまざまな入力に対してソフトウェアがどのように動作するかを理解していると確信することができる。

2.シンプルさ

ソフトウェアテストの等価分割のもう一つの大きな利点は、シンプルさである。 多様な入力を、有効なデータと無効なデータの両方に分解することは、テスト計画がはるかにシンプルになることを意味する。 それぞれの入力を個別にテストするには、多くの文書化と調整が必要だ。 代表的な例を1つに絞ることで、テスト工程を効率化できる。

カバー率の向上

また、テストに等価クラスを使うことで、テスト時間をより効率的に使うことができる。 テスト入力をクラスに減らすということは、各クラスをより徹底的にテストできるということだ。 各入力を個別にテストしていたのでは、このような包括的なアプローチははっきり言って不可能だ。 等価分割により、チームは有効なデータ、無効なデータ、エッジケース、境界値などを徹底的にテストすることができる。

3.再利用性

ソフトウェアテストにおいて、各同値クラスを確立するために最初に投資した時間は、将来、これらのクラスを入力テストに再利用する場合に報われる。 すべてのパーティションが将来のテストに関連するわけではないが、関連するパーティションがあれば、将来のプロジェクトやリグレッション・テストの場面で多くの時間を節約できる。

 

等価分割の欠点

ソフトウェアテスト

チャレンジロードテスティング

等価パーティショニングにはいくつかの大きなメリットがあるが、すべてのシナリオにとって理想的なソリューションというわけではない。 その限界を探ってみよう。

1.入力順序

ある状況においては、入力順はアプリケーションの機能をテストする上で重要な部分である。 それは、等価分割を使っても本当に削減できるものではない。 テスターはこのような状況に気を配り、代替テクニックを駆使して良いカバレッジを提供しなければならない。

2.複雑な入力依存関係

複雑な入力依存関係を持つ複雑なソフトウェアは、等価分割の限界が露呈するもう一つの分野である。 例えば、様々な入力に基づいて計算結果を出力するソフトウェア。 このシナリオでは、テスターは組み合わせによる爆発を減らし、欠陥を分離する可能性を高めるために、さまざまなテクニックを使う必要がある。

 

補完する代替アプローチ

同等性試験の限界

アルファテストとベータテストの比較

等価分割テストは多くのテストシナリオに適しているが、入力値間に複雑な依存関係がある非常に複雑なソフトウェアでは、さらに補完的なアプローチが必要になることがある。

複雑なソフトウェアのテストケースを書く場合、これらのアプローチを組み合わせて使うのが堅実なアイデアだ。

1.ペアワイズテスト

ペアワイズ・テストとは、入力パラメーターの各ペアのすべての可能な組み合わせをテストするソフトウェアのテスト技法である。 このアプローチは、各パラメーターのペアが少なくとも1回は一緒にテストされることを保証する。

IS YOUR COMPANY IN NEED OF

ENTERPRISE LEVEL

TASK-AGNOSTIC SOFTWARE AUTOMATION?

2.決定表テスト

デシジョンテーブルは、テスターがさまざまな入力の組み合わせを系統的にマッピングするのに役立つ。 複雑な依存関係が存在する場合に、体系的なカバレッジを確保する良い方法だ。

3.状態遷移テスト

このテストタイプでは、さまざまな入力の組み合わせに対して、ソフトウェアがどのように異なる状態間を遷移するかを測定する。

4.モデルベースのテスト

このアプローチでは、ソフトウェアの内部ロジックに基づいてモデルを作成し、自動化ツールを使ってそのモデルに基づいてテストケースを作成する必要がある。 このテクニックは、複雑さを処理し、十分なカバレッジを確保することに長けている。

 

等価クラス分割テストの例

ベータテストとは何か、種類、プロセス、アプローチ、ツール、アルファテストとの比較、その他!

等価パーティショニングを理解する最良の方法は、ソフトウェア・テストで等価クラスをどこでどのように使うかを見てみることだ。 このコンセプトをよりイメージしやすくするために、いくつかの例を挙げよう。

 

1.等価クラス分割テスト例1

オンライン注文フォームは、ソフトウェアテストにおける等価クラスの良い例である。

例えば、オンラインの文房具販売店のアプリを作るとしよう。 A4用紙1ベールの典型的な注文書がある。 等価クラスを使ってこの形をテストする方法を紹介しよう。

同等クラス:

A4用紙の数量は、例えば1~100の特定の範囲内である。 つまり、3つのクラスがある:

  • 1 から 100
  • 1以下の数字
  • 100以上の数字。

 

テストケース:

3つのテストケースを実行し、以下の結果を期待する。

  • 1から100までの数字=注文処理済み
  • 1以下の数字=エラーメッセージ
  • 100を超える数字 = エラーメッセージ

 

2.等価分割テスト例2

ソフトウェアテストにおける等価クラスは、数字以上のものを扱うことができる。 この例では、同じ原理を使ってファイルアップロードポータルを検証する方法を探ります。 例えば、ユーザーが身分証明書をアップロードする必要があるが、特定の形式しか受け付けないサイトのテストが必要だとしよう。

同等クラス:

  • 対応ドキュメントはPDFとJPEGです。
  • サポートされていないドキュメントは、他のすべてのドキュメント形式です。
  • 資料なし

 

テストケース:

  • PDFまたはJPEGのアップロードによるテスト = アップロード成功
  • 未対応フォーマットのアップロードによるテスト = エラーメッセージ
  • ファイルをアップロードしないテスト = エラーメッセージ

 

等価分割の実装方法

ソフトウェアテストアプローチ

アジャイルDevOpsテスト自動化:ZAPTESTのモックアップベースの自動化アプローチを説明する

テストに等価クラスを使いたいのであれば、戦略的なアプローチを取る必要がある。 ここでは、ソフトウェア・テストにおける等価分割を実装するための便利なステップ・バイ・ステップ・ガイドを紹介する。

 

ステップ1:入力変数の特定

 

各ソフトウェアは、さまざまな入力変数に反応する。 複雑なソフトウェアの場合、これらの変数は膨大になる。 そのため、ソフトウェアの要件と仕様に目を通し、ソフトウェアの動作に影響を与えるすべての変数を特定する。

最も明白な入力には、ユーザー入力フォームが含まれる。 しかし、リストにはより幅広いインプットを考慮する必要がある。 環境変数、APIコール、内部計算なども考慮できる。

次に、変数データの種類を理解する必要がある。 これらの変数を整数、ブーリアン、文字列などに分類し、適切なパーティションを定義することができる。

最後に、入力の制約を探る必要がある。 それは、許可される文字、定義されたフォーマット、最小値/最大値などである。

 

ステップその2。 有効なパーティションと無効なパーティションを決定する

各入力変数を見て、有効な結果と無効な結果に従って分割し始める。 これらはテストにおける同等クラスとなる。

1.有効なパーティション

有効なパーティションは2つのクラスに分けられる。

正の等価クラス:

ソフトウェアが正常に処理することを期待する値。 例えば、成績のパーセンテージを記録するソフトウェアの場合、0から100の間であれば何でも有効です。

負の等価クラス:

このカテゴリーは、期待される入力の境界から外れているが、ソフトウェアがエラーメッセージで処理すべき値のためのものである。 例えば、入力がパーセンテージ評点の110である場合、ソフトウェアは「すべての値は0から100でなければなりません」というエラーメッセージを返します。

 

2.無効なパーティション

これらの等価クラスには、エラーや予期せぬ動作を引き起こす入力が含まれる。 上記の例では、A+やB、または同様の入力をパーセンテージ評点に入力しようとする試みも含まれる。 これらの入力は技術的には正しいかもしれないが、数値的な期待値からは外れている。

 

#3. 効果的なテストケースの作成

次に、各同値パーティションを少なくとも1回はカバーするテストケースを設計する必要がある。 この記事で前述したように、これによって適切なテスト・カバレッジが確保される。

まず最初に、各等価パーティション内で、有効なデータと無効なデータの両方をカバーできる代表値を選択しなければならない。

しっかりとしたテストケースを書くためのヒント

  • 境界値を考える:パーティションの境界を必ずテストしてください。 最小、最大、包括的、排他的など、これらの領域はバグの有力候補だからだ。 例えば、入力の期待値が0から100の間なら、101のような数字だけでなく、負の値もテストする。
  • 有効なテストケースと無効なテストケースの両方について、肯定的なテストシナリオと否定的なテストシナリオを考えてください。
  • 組み合わせテストはいいアイデアだ。 上記の同等性テストのセクションの限界を補完するために、代替アプローチで説明したように、いくつかの異なるアプローチを使用する。
  • 入力値を特定のパーティションに分割した理由の根拠を文書化し、各テストの期待される動作の概要を明確にする。
  • 可能であれば、ビジュアルツールを使用して、テストケースに明快さと客観性を持たせましょう。図や表を使ってパーティションをマッピングします。

 

#4. テストケースのスケジュールと実行

などの要素に基づいてタスクの優先順位を決める:

  • どの部分に欠陥がある可能性が高いか
  • クラッシュやフリーズなどの深刻なシナリオを引き起こす可能性の高いシナリオはどれか。

そしてテストを実行し、出力と発生したエラーを記録する。 入力の多い複雑なプログラムでは、RPAツールを使ってユーザーの行動を模倣することができる。

 

#5. 結果を分析する

収集したテストデータをプールし、結果を分析する。 そのために必要な方法がいくつかある:

  • 各テストケースを見て、実際の出力と期待される出力を比較する。
  • 矛盾点を見つけ、バグや不具合を調査し報告する。

 

#6 その他のヒント

これらのヒントは、すべてのシナリオに当てはまるわけではないが、複雑なソフトウェアのテストに役立つことは間違いない。

  • デシジョンテーブルは、等価パーティションと、使用する可能性のあるさまざまな入力の組み合わせを視覚化する優れた方法です。
  • 同格クラスがほぼ同じ挙動を示す場合、それらをマージしてテスト・プロセスをさらに最適化することができる。
  • 境界値テストを使用して欠陥検出を改善する
  • 可能であれば、等価分割のテストケースを自動化する。

 

等価分割と境界値解析

ソフトウェアテスト自動化の混乱を解消する

等価パーティショニングは、パーティション内の各テストが同じ結果を出すという前提に立っている。 多くの状況においてそれは正しいが、いつもうまくいくとは限らない。 例えば、誤ってパーティションに追加された入力がチェックされない可能性があり、その結果、カバレッジが低下し、ソフトウエアが不安定になる可能性がある。

この問題を解決するのが境界値テストである。 これにより、ソフトウェア・テスト・チームは、リスクを含む可能性が最も高い分野に焦点を当て、それに基づいてソフトウェアをテストすることができる。 要するに、リスクはインプット・パーティションのエッジや境界で最も発生しやすいということだ。 したがって、テスターは、他の等価クラスのテストケースに加え、入力の上界と下界のテストケースを書くことができる。

 

ZAPTESTによる等価分割と自動化

無料および企業向けソフトウェアテスト+RPA自動化ツールベスト

ZAPTEST のようなソフトウェアテスト自動化ツールは、テスト作成時と実行時の両方で等価分割を自動化するのに役立ちます。

ZAPTESTが、この有用なブラックボックステスト手法のメリットをどのように引き出すことができるかを探ってみよう。

 

1.ツール選択

作業に適した道具を選ぶことは重要だ。 ほとんどのテスト自動化ツールは、ウェブ、モバイル、デスクトップのいずれかのテストに特化している。 ZAPTESTは、さまざまなプラットフォームやアプリケーションのテストに対応できるため、確かな選択肢となります。

 

2.テストケースの作成と実行

ZAPTEST 1Script を使用すると、ユーザーインターフェイスをスキャンしてテスト自動化を構築できます。 さらに、開発の初期段階であれば、アプリケーションのモックアップをスキャンすることもできる。 スキャン GUI 機能を使用すると、ZAPTEST はすべてのテストオブジェクトをスキャンし、オブジェクトリストに追加します。

ここから、ダイアグラムにオブジェクトを追加し、テストステップを構築することができます。

ZAPTEST では、ドラッグ&ドロップの簡単なインターフェイスを使用して、ケースの作成を自動化できます。 ZAPTESTでテストケースを構築するのに、コーディングの専門知識は必要ありません。 ですから、ここからドロップダウンメソッドから関連する操作を選択し、インターフェイスに必要な入力値に基づいてテストケースを構築することができます。 そして、それぞれの等価性に対してテストケースを作成し、テストケースを実行することができます。 テストケースを再利用してステップエディタで編集することもできるので、時間を大幅に節約できます。

 

3.レポートとテストケースの管理

ZAPTEST では、テストケースを並行して実行できるため、時間を大幅に節約できます。 これは、一度に多数の異なる等価パーティションを実行したり、特定のテストグループを実行したりするのに役立つ。

各テストケースに関連する詳細な不合格/合格レポート、スクリーンショット、実行ログ、パフォーマンスメトリクスのおかげで、結果を簡単に収集できます。

 

4.テストケースのメンテナンス

また、高品質のバージョン管理機能により、テストケースを簡単に追跡・管理することができます。 さらに、ZAPTESTのユーザーは、テストをクローンして再利用することで、新たなレベルの効率を達成することができます。

ZAPTESTは、テストケースの自動化以外にも多くの機能を提供しています。 ZAPTESTはRPAツール群により、2-in-1の機能を提供し、自動化できるものはすべて自動化されるハイパーオートメーションが顕著な未来において、DevOpsとBizOpsのギャップを埋める。

 

最終的な感想

等価分割は、テスターが効率と精度のバランスを取らなければならない状況に対するエレガントなソリューションである。 ソフトウェアによっては、ほとんど無限の入力が可能であるため、等価クラス分割は、チームがテストデータを管理しやすい一口大の塊に分割し、それぞれを徹底的にテストできるようにするのに役立つ。

Download post as PDF

Alex Zap Chernyak

Alex Zap Chernyak

Founder and CEO of ZAPTEST, with 20 years of experience in Software Automation for Testing + RPA processes, and application development. Read Alex Zap Chernyak's full executive profile on Forbes.

Get PDF-file of this post

Virtual Expert

ZAPTEST

ZAPTEST Logo