ソフトウェアテストにおけるネガティブテストは、予期しない動作や無効なデータに対してアプリケーションがどのように反応するかを検証する技法です。 この種のテストは、フリーズやクラッシュなどの望ましくない結果を引き起こす例外を突き止めることで、品質保証チームがソフトウェアの堅牢性と安定性を向上させるのに役立つ。
この記事では、ネガティブ・ソフトウェア・テストとは何か、なぜネガティブ・ソフトウェア・テストが重要なのか、そしてこの手法に使えるさまざまなアプローチ、テクニック、ツールをいくつか紹介する。
ネガティブソフトウェアテストとは何か?
ネガティブテストとは、システムに意図的に無効な入力や予期せぬデータを与え、そのシナリオがどのように処理されるかを確認するソフトウェアのテスト手法である。 失敗テストやエラーパステストとしても知られるこのアプローチは、ユーザーが無効な日付や文字を入力したり、意図しない方法で特定の機能を使用したりするなど、アプリケーションが遭遇するさまざまな現実世界のシナリオをシミュレートします。
ほとんどの種類のテストは、アプリケーションをテストするために有効なデータを使用します。 しかし、ネガティブ・テストは、典型的な入力を超えたエッジの周辺をテストし、アプリケーションがどのように例外を処理するかを見ることによって、異なるアプローチを取ります。
アプリケーションが意図したとおりに動作するかどうかをテストすることは重要です。 しかし裏を返せば、ユーザーが予約を外したときに何が起こるかを理解することも重要である。特に、意図しない使い方がクラッシュやフリーズ、その他の不具合を引き起こす場合はなおさらだ。
陽性反応と陰性反応の違い
ソフトウェアテストにおけるテスト
上で概説したように、ネガティブテストは、システムの動作を検証するために、予期せぬデータや無効なデータを使用する。 対照的に、ポジティブテストは、システムが期待通りに機能することを検証するために、期待されるデータや有効なデータをプッシュする。
言い換えれば、”忖度 “である:
- ポジティブテストは、アプリケーションが計画通りに動作するかどうかを理解するのに役立ちます。
- ネガティブテストは、アプリケーションが予期せぬイベントに対応できるかどうかを判断する。
アプリケーションを厳密にテストしたいのであれば、ソフトウェアテストにおけるポジティブテストとネガティブテストの両方が必要です。
なぜネガティブなソフトウェアテストが不可欠なのか?
開発者はソフトウェアを作るとき、ユーザーにどのように使ってもらうかを明確に考えている。 しかし、ユーザーは必ずしもルールに従うとは限らない。 存在しないボタンをクリックしようとしたり、数字欄に文字を入力しようとしたり、予想外の入力をしようとすることがよくある。
ネガティブ・テストは、次のようなポジティブ・テスト手法では発見できないエッジケースを考慮することを目的としている。
ユニット
,
システム
あるいは
統合テスト
. システムに “カーブボール “を投げるには、型破りな発想が必要だ。 しかし、正味の結果は、より安定した堅牢なアプリケーションである。
ネガティブ・テストの目的とは
ソフトウェア・テストで?
ネガティブ・テストは、他の種類のソフトウェア・テストと同様の目標を持つ。 すなわち、アプリケーションのバグ、欠陥、脆弱性を発見することである。 しかし、有効なデータを使っても発見できないような欠陥を発見する際には、特別な役割を果たす。 ネガティブ・テスト・アプローチを採用する理由をいくつか挙げてみよう。
1.欠陥の露呈
ソフトウェアテストにおけるネガティブテストの中心的な目的は、無効なデータや予期せぬ入力に起因する不具合を発見することである。 これにより、テスト担当者はバグ検出に対してより積極的なアプローチを取ることができ、ソフトウェアが期待に応えていることを確認できる。
2.セキュリティ
予期せぬ入力や無効なデータは、セキュリティの脆弱性を露呈する可能性がある。 これらのエッジケースをテストし解決することは、悪意のある攻撃、インジェクションの欠陥、あるいは不正アクセスの可能性を減らすことで、より安全で堅牢なアプリケーションにつながります。
3.エラー処理
否定テストは、エラー処理を検証するのに有効である。 予期せぬ入力やデータに遭遇してもシステムが安定した状態を維持できるようにすることだけでなく、エンドユーザーがデータが無効であることを認識できるようにエラーメッセージを出すなど、こうした事象にどのように対応するかも重要だ。
4.テストカバレッジの向上
ソフトウェア・テストにおけるポジティブ・テストとネガティブ・テストは、非常に相補的である。 どちらもデータ入力の異なる要素をカバーしているため、テストはより包括的なものとなる。
5.より良いユーザーエクスペリエンス
ネガティブテストは、エラーメッセージやクラッシュなど、ユーザーエクスペリエンスに悪影響を与える予期せぬ動作の原因を発見するのに役立ちます。
ポジティブとネガティブの違い
ソフトウェア工学におけるテスト
前述したように、ネガティブテストはシステムの動作を検証するために、予期せぬデータや無効なデータを送信する。 一方、ポジティブテストは、期待される、あるいは有効なデータを送信し、システムが期待通りに機能することを検証する。
陽性検査と陰性検査の違いには、以下のようなものがある:
1.目的
ポジティブ・テストは、ソフトウェアが意図したとおりに動作するかどうかを検証するもので、ネガティブ・テストは、意図しないシナリオで何が起こるかを理解しようとするものである。
2.データ:
肯定的なテストでは有効なデータを使用し、否定的なテストでは無効な入力、極端な値、予想外の形式を使用する。
3.フォーカス:
ポジティブ・テストは成功のシナリオに焦点を当て、ネガティブ・テストは失敗のシナリオに重点を置く。
さまざまな種類の陰性検査
ネガティブテストは、アプリケーションの品質と完全性を検証するための、いくつかの異なるアプローチを網羅する概念です。 ここでは、知っておくべき7種類のネガティブテストを紹介する。
#1. 境界値テスト
境界値テストは、入力範囲の境界または端にある入力でソフトウェアをテストしようとするものである。 期待される最大値と最小値の両方をテストするだけでなく、これらの入力を超えた部分もテストする。
例 入力フィールドは1〜9の数字を受け付ける。 境界値テストは1と9の両方を入力するが、0と10もテストする。
#2. 入力値テスト
入力値テストは、予期しない入力や無効な入力に対してシステムがどのように反応するかを決定する。 テストされる入力には以下のようなものがある:
- 誤ったデータ型
- 範囲外の値
- 特殊文字
- 空のフィールド。
例 入力ボックスには数字しか入力できないので、テストでは文字を入力し、システムがどのように反応するかを確認する。
#3. 負荷テスト
負荷テスト
テスト担当者は、大規模なデータセットや大量のトラフィックなど、大きなストレスや負荷の下でシステムがどのように反応するかを評価することができます。
テスト自動化ツール
は、このような極端な条件をシミュレートして、強迫状態におけるシステムの反応を理解することができます。
例テスターは、ウェブサイトにアクセスする何千人もの同時ユーザーをシミュレートします。
#4. 例外テスト
この種のテストでは、例外的なイベントやエラーに対してシステムがどのように反応するかを調べる。 いくつかのテストが含まれる
- システムクラッシュのシミュレーション
- ネットワーク障害
- データベースエラー
- ディスク容量の問題
- ファイルがありません。
例 ユーザーがアプリケーションからファイルをダウンロードしている時に、インターネットが遮断された場合に何が起こるかをテストする。
#5. セキュリティテスト
セキュリティテストは、無効な入力や予期しない入力によって暴露される可能性のあるソフトウェアの脆弱性を強調し、理解するために、ネガティブテストのアプローチを使用する。 このアプローチでは、以下のような一般的な攻撃をテストする:
- SQLインジェクション
- クロスサイト・スクリプティング(XSS)
- バッファオーバーフロー。
例セキュリティテストは、ユーザ入力フィールドに悪意あるコードを注入しようとするかもしれません。
#6. ユーザー・インターフェース・テスト
この種のテストは、ユーザーがソフトウェアとやりとりする際に発生するエラーに焦点を当てる。 その判断材料には、以下のようなものがある:
- ユーザーとのインタラクションに対する予期せぬ反応
- 誤ったエラーメッセージ
- ナビゲーションの問題
例 このテストでは、特定のアクションが順番通りに実行されなかった場合に何が起こるかを調べます。
#7. データ完全性テスト
データ整合性テストは、アプリケーション内の様々な操作において、データが正確で一貫性を保っていることを保証する。 テスト中のものには次のようなものがある:
- データ破損の可能性
- データ損失のシナリオ
- 不注意によるデータの修正
例このテストでは、送信後もデータが変わらないことを検証する。
お分かりのように、ネガティブ・テストにはさまざまなアプローチがある。 これらに共通するのは、予期しない入力や無効なデータを使用して、非定型的な条件下でアプリケーションがどのように動作するかを確認することである。
陰性検査の利点
ネガティブテストとは、予期せぬ状況が発生したときにアプリケーションがどのように動作するかを理解することです。 この方法を用いる主な利点をいくつか挙げてみよう。
- 予期せぬ入力や無効なデータがアプリケーションに与える影響を理解するのに役立ちます。 墜落するのか? 不正確なエラーメッセージを吐く?
- ネガティブ・テストは、システムの弱点を特定しようとするものであり、責任ある品質保証アプローチの一部である。
- ネガティブ・テストは、ソフトウエアが実際に遭遇する不測の事態や予期せぬシナリオに対する反応をテストすることで、ソフトウエアの実力を試すものである。
- 繰り返しになるが、ネガティブ・テストは、サイバー攻撃者が利用するかもしれない潜在的な攻撃ベクトルを浮き彫りにするため、セキュリティに対する徹底的なアプローチの不可欠な要素である。
陰性検査のデメリット
ネガティブテストには豊富なメリットがあるが、克服しなければならないマイナス面もある。
- 徹底的なネガティブ・テストには、追加のハードウェアやソフトウェアが必要になる場合があり、テストにかかるコストが増加する可能性がある。 厳しい予算で運営されているチームにとって、これは不利になりかねない。
- ネガティブテストは、本番環境でソフトウェアが直面するさまざまな入力の組み合わせをカバーするために、多くのテストケースを作成する必要があるため、かなり時間がかかる。
- ネガティブテストでカバーできる予測不可能な状況には限界がある。 実際、テスターが考慮できないような想定外の状況もあるかもしれない。
- ネガティブテストケースの自動化は難しい。 しかし、ZAPTESTのような適切なソフトウェアを使えば、そのプロセスははるかに管理しやすくなる。
陰性検査の課題
ネガティブ・テストは、ユーザーとのインタラクションのストレスやひずみに耐えられる、堅牢で信頼性の高いソフトウェアを作りたいのであれば、極めて重要である。 しかし、このアプローチを実施するには、注意しなければならない課題もある。
より根強い課題をいくつか挙げてみよう。
1.ソフトウェア・テストにおけるネガティブ・シナリオの特定
十分なカバレッジ:
ネガティブ・テストにおける最大の課題のひとつは、想定外のシナリオを十分にカバーすることだ。 否定的なシナリオや順列はたくさんあるので、それらすべてを考慮するには、ユーザーがソフトウェアとどのように接するかを想像する創造的なアプローチが必要です。
優先順位をつける:
潜在的なネガティブシナリオがたくさんあるため、テスターはどこから手をつけるべきか迷うこともある。 何を優先すべきかを評価する確かな基準には、予測が含まれる:
- 欠陥の可能性が高い状況
- 欠陥の結果の重大性。
2.適切なネガティブテストケースの設計
入力検証:
しっかりとしたネガティブテストケースを設計するには、システムの動作、アーキテクチャー、制限事項をかなり包括的に理解する必要があります。 ソフトウェアをテストするには、慎重に検討した入力とデータを使用する必要がある。 ランダム・アプローチは、いくつかの不具合を明らかにするのに役立つが、ネガティブ・テストに対するより正確で体系的なアプローチに比べれば見劣りする。
データの多様性:
システムの特殊性によっては、かなり多様なデータ群に対してテストを行う必要があるかもしれない。 実際、数値、テキスト、日付など、さまざまなデータ形式があり、アプリケーションはそれぞれを受け入れることができる。 ここでの課題は、各フォーマット、特に無効データの各バリエーションを考慮できるテストケースを設計することである。 このような状況は、テストチームにとってかなり時間のかかることである。
3.効率化とテストの自動化
時間がかかる:
ポジティブテストは、期待される結果に対してソフトウェアを検証することを目的としている。 一方、ネガティブテストでは、想定外のことを掘り下げ、潜在的なシナリオを探る必要がある。 未開の地を行くには時間がかかる。 その結果、陰性検査で得られる包括的な結果を望むなら、余分な時間を費やす覚悟が必要だ。
オートメーションの複雑さ:
ネガティブ・テストは、時間とリソースを要する。 そのため、ソフトウェア・テストの自動化にはうってつけの仕事だ。 しかし、克服しなければならない複雑な問題もある。 例えば、想定外の入力に対して期待される結果を定義するテストケースを設計するには、ある程度の経験とノウハウが必要だ。 さらに、自動テストのための既存のフレームワークは、アプリケーションにプッシュしたい無効なデータをサポートしていない可能性があり、さらに複雑なレイヤーを追加する。
4.結果の評価
偽陽性:
正確さと包括性のバランスを満足させるために検査を校正することは、ネガティブテスターにとって身近な問題である。 状況によっては、過敏なエラー処理は、有効な入力を否定的な入力と誤認し、関係のない問題に時間を浪費することになる。
曖昧な結果:
システムが無効な入力を受け取ると、クラッシュやエラー、フリーズを引き起こす可能性がある。 多くの場合、これはバグの兆候である。 しかし、開発者が考慮しなかったエッジケースの未処理の証拠である場合もある。 こうした個別の状況を区別することは重要だが、真の原因を調査するには時間がかかる。
データ管理:
ネガティブテストにはかなりの量のデータが必要だ。 この検査情報は、作成と維持の両方が必要である。 タイトな時間枠のある開発シナリオでは、これは考慮しなければならない余分な仕事である。
5.組織の問題
陰性検査の専門知識の欠如:
ネガティブテストは人気があるが、多くのテスターはこの種のテストを包括的に実施するスキルや専門知識が不足している。 ある種のネガティブなテストケースの設計は、ポジティブなテストケースに相当するものよりも直感的でない。 さらに、テスト自動化の実装は、適切な専門知識がなければ困難な場合もある。
ビジネスのプレッシャー
利害関係者、テスト実施者、経営陣は、堅牢なアプリケーションの開発においてネガティブテストが果たす重要な役割を理解しなければならない。 その重要性を理解していないと、陰性検査を犠牲にして陽性検査に重点を置く圧力につながりかねない。
ネガティブ・テストのメリットを引き出そうとするチームが直面している課題がいくつかあることは明らかだ。 しかし、適切なアプローチと適切なソフトウェアテストツールがあれば、これらの問題を克服し、ユーザーの期待以上のソフトウェアを構築することができる。
否定的なテストケースの書き方
ソフトウェアのテストに否定的なテストケースを書くには、ある程度の経験と創造的思考が必要だ。 ここでは、これらの重要なテストケースを構築するためのステップバイステップのガイドを示します。
#1. 目標を設定する
ソフトウェアテストのネガティブテストケースを書く前に、ネガティブテストを実施したい理由を理解する必要があります。 すべてのアプリケーションでネガティブテストが有効というわけではない。
だから、何を達成したいのかを理解することだ。 ネガティブテストは、想定外のユーザーインタラクションシナリオや条件から生じるエラーやクラッシュを発見するために設計されている。
#2. 潜在的なネガティブ・シナリオの概要
次に、ユーザーがあなたのソフトウェアとやりとりする際に起こりうるネガティブなシナリオについて説明する必要がある。 この段階でのリサーチは極めて重要である。 探検すべき分野はいくつかある:
- システム要件
- 代表的な使用例
- アプリケーションの特徴と機能
このような状況を洗い出し、アプリケーションが意図したとおりに機能しない可能性のあるシナリオをリストアップしてください。
次に、重要な入力検証シナリオを検討する。 一般的には、データ入力フォームやログインフィールドなどが含まれる。
最後に、ユーザーがソフトウェアとやりとりする無数の型破りな方法や、ネットワークの切断、システムの突然のシャットダウン、大量のデータ転送など、不利な結果をもたらす可能性のある予期せぬ出来事を考慮する。
可能な限り多くのシナリオを文書化したら、今度はこれらの想定外のシナリオから予想される結果を決定する。
#3. 期待される成果の概要
各テストケースには期待される結果がなければならず、否定的なテストケースも同様である。 ここでのベストプラクティスは、それぞれのネガティブなシナリオを書き出し、どのような結果になるべきかを決定することである。
その結果としては、以下のようなものが考えられる:
- 正確で有益なエラーメッセージ
- 適切なリダイレクション
- システムのフリーズやクラッシュを防ぐなど、システムを優雅に扱う。
#4. テストする入力を選択する
さて、次はどの入力をテストする必要があるかを確認する番だ。 これらの入力は、エラーやその他の否定的な動作を引き起こす可能性が最も高いものでなければならない。
必要なインプットは以下の通り:
- 範囲外の値(年齢フィールドの負の値など)
- 無効なデータ(数値フィールドの文字など)
- 予期しない文字や記号
- 特殊文字
- 欠損データ
#5. テストケースを書く
すべてのシナリオを集めたら、テストケースを書く番だ。 さて、ネガティブ・テストでは、書けるテストケースの数はほぼ無限である。 結局のところ、この種のテストは、人々があなたの意図しない方法でソフトウェアを使用したときに何が起こるかを見つけることなのです。 しかし、納期が迫っているため、問題が発生する可能性が最も高い状況に絞り込む必要がある。
いつものように、テストケースは明確、簡潔、客観的な言葉で書きましょう。 ここに曖昧さは許されない。
否定的なテストケースに適した書式を以下に示します。
- テストケースIDを使用する
- 試験内容を正確に説明する
- 検査が陰性であった場合の前提条件
- 一連のステップの概要
- 明確で客観的な成果を確立する
- テストの結果をメモする
#6. テストのスケジュール
さて、テストのスケジュールを立てる必要がある。 ここでも、事故など最も深刻な悪影響をもたらすシナリオや、問題が発覚する可能性が最も高いシナリオを優先することが重要だ。
ネガティブ・テストケースの例
以下は否定的なテストケースの例である。
テストケースIDTC001
説明ユーザが無効なメールアドレスを入力した場合にエラーメッセージが表示されることを確認する。
前提条件 ユーザーがアプリケーションのログインページにいること
ステップ 1.無効なメールアドレスを入力してください。 2.ログイン」を押す。
期待される結果 ユーザーが “Login “を押すと、”incorrect email address entered “というエラーメッセージが表示される。
結果: ログイン」が選択されたときに何が起こったかを記録する。
ソフトウェア・テストにおけるネガティブ・シナリオの例
以下は、ネガティブテストの方法で検証できる典型的なシナリオです。
1.データとフィールドのタイプ
オンラインでフォームに記入したことがある人なら、これらのボックスが特定の種類のデータを受け付けるように設定されていることをご存知でしょう。 数字だけのものもあれば、日付、テキスト、その他のタイプのデータを受け付けるものもある。
これらのボックスのネガティブ・テストでは、例えば数字フィールドに文字を入力するなど、無効なデータを送信する。
2.必須項目
繰り返しますが、必須フィールドはフォームやアプリケーションの一般的な機能です。 ユーザーが次の段階に進む前に、すべての重要な情報を確実に収集するための便利なツールである。
これらのシナリオの良いテストケースとしては、これらのフィールドを空白のままにした場合に何が起こるかを確認することである。 理想的なシナリオでは、エラーメッセージがトリガーされ、ユーザーに必須フィールドへの入力を促すべきである。
3.適切な文字数
テスト中のウェブページのアプリケーションがある場合、限られた文字数を必要とするデータフィールドがあるかもしれません。 これは、ユーザー名、電話番号、登録番号などである。
許容される最大文字数を超えて入力するテストを書いて、アプリがどのように反応するかを確認することで、これらのフィールドのネガティブ・テストケースを作成することができます。
4.データの境界と限界
特定のフォームには、上限が決まっているフィールドがあります。 例えば、誰かに何かを100点満点で評価してもらいたい場合、データの境界は1-100となる。
負のテストケースを作成し、1~100のうち0、101、その他の負または正の値を入力しようとする。
ネガティブ・テストのベスト・プラクティス
高品質のネガティブテストを確保するためには、いくつかのベストプラクティスがある。 そのためのヒントがここにある。
1.無効な入力を定義する:
開発ドキュメント、ユースケース、UI/UXに目を通し、潜在的な無効入力を理解し、特定する。 無効なデータ型、極端な値、欠落データ、空のフィールド、予期せぬフォーマットなどに注意。
2.境界値解析を使用する:
前述したように、予期せぬ反応を引き起こす可能性のあるエッジケースを見つけるために、境界値を概説する。
3.従業員等価分割:
入力ドメインを見て、有効な値と無効な値の同値分割に分割する。 このプロセスは、書くべきテストケースの数を減らすのに役立ちます。というのも、もし同じような無効なデータがある入力で問題を引き起こした場合、それはクラス全体で表現される可能性が高いからです。
4.悪いユーザーの真似をする:
ポジティブテストは、期待されるユーザーの行動を検証する。 ネガティブテストは、人々があなたのアプリを誤用したときに何が起こるかを探ります。 そこで、このようなことが起こりうるさまざまなシナリオを考え、テストケースに再現してください。
5.リスクと影響をテストの指針にする:
テスターに無限の時間はない。 予期せぬ結果をすべてテストすることはできない(あるいは知ることもできない)ため、ある時点で難しい選択を迫られることになる。 どの種類のネガティブテストを実施するかを決める必要がある場合、製品に最もリスクや悪影響をもたらす分野に優先順位をつける。
6.エラー処理の検証:
エラー処理がテストの一部であることを確認し、エラーメッセージが有用で正確であることを検証する。
7.可能な限り自動化する:
オートメーションは、平凡で反復的な作業を処理することに長けている。 しかし、ネガティブ・テストでは、探索的テストやエッジケースの発見のために、依然として手作業によるアプローチが必要である。
2024年、最高のネガティブテストツール
否定的なソフトウェア・テストは業界全体で一般的だが、そのための明確なツールは不足している。 その大きな理由は、陰性検査が万能であることだ。 しかも、陽性検査に使われるツールの多くは、入力データを調整すれば陰性検査にも使える。
ザップテスト は、その汎用性とモジュール性から、ネガティブ・テストに最適なツールである。 使いやすくカスタマイズ可能で、クロスプラットフォームやクロスアプリケーション機能のおかげで、他の追随を許さない柔軟性を提供している。
データ駆動テストと
突然変異テスト
の機能により、ZAPTESTは陰性検査に最適です。 そのうえ アールピーオー の機能を使えば、実際のユーザーをシミュレートし、テストを再利用し、レポートやドキュメントを簡単に作成することができます。 一言で言えば、ZAPTESTは最先端のソフトウェア・オートメーションとロボティック・プロセス・オートメーション・ソフトウェアを実行する能力を持っており、ネガティブテストを含むあらゆるオートメーション・タスクのためのワンストップショップとなっている。
最終的な感想
ソフトウェアテストにおけるネガティブテストは、アプリケーションが予期せぬ入力や無効なデータをどのように扱うかを理解するのに役立つ。 肯定的なテストでは、ソフトウェアが意図したとおりに機能するかどうかをテストしますが、否定的なソフトウェアテストでは、ユーザーが入力やデータを誤って選択した場合に何が起こるかを把握するのに役立ちます。 どちらのアプローチも、多様なユーザーとのインタラクションのストレスやひずみに対応できる、堅実で堅牢なアプリケーションを求めるのであれば、重要である。