Что такое отрицательное тестирование? Тестовые случаи с примером
⚡ Умное резюме
Негативное тестирование проверяет, как программное приложение ведет себя при получении неожиданных входных данных или условиях эксплуатации, чтобы продукт корректно деградировал, а не зависал, повреждал данные или выявлял уязвимости в системе безопасности.

Отрицательное тестирование
Отрицательное тестирование Негативное тестирование — это тип тестирования программного обеспечения, используемый для проверки приложения на наличие неожиданных входных данных и условий. Неожиданные данные или условия варьируются от неправильного типа данных в простом поле формы до преднамеренной хакерской атаки. Цель негативного тестирования — предотвратить сбой приложения при недопустимых входных данных и улучшить качество и стабильность продукта.
Положительные результаты тестирования сами по себе доказывают лишь работоспособность системы в нормальных условиях. Отрицательные результаты тестирования подтверждают, что та же система справляется и с нештатными ситуациями, что и требуется для отказоустойчивого продукта.
Пример отрицательного тестирования
Лифт — это пример, который чаще всего используется для объяснения отрицательных результатов испытаний, поскольку его нормальное поведение и поведение при отказе легко представить.
Принцип работы лифта хорошо известен: нажатие кнопки с номером этажа отправляет лифт на этот этаж, а двери автоматически открываются, как только лифт достигает указанного этажа.
Ниже перечислены некоторые негативные сценарии для того же подъема, а также предположение, основанное на положительном результате тестирования.
| Отрицательное тестирование | Положительное тестирование |
|---|---|
| Что произойдет, если количество человек (вес) превысит указанный лимит? | Предполагается, что в лифт войдет только указанное количество человек. |
| Что произойдет, если кто-то закурит или устроит пожар внутри лифта? | Предполагается, что внутри лифта не будет дыма или огня. |
| Что произойдет, если во время работы произойдет сбой в электроснабжении? | Предполагается, что во время работы лифта не произойдет отключения электроэнергии. |
Все эти случаи подпадают под категорию отрицательных результатов тестирования. Невозможно гарантировать, что ни один из них никогда не повторится, поэтому каждый из них необходимо локализовать.
Предположим, что проблема с перегрузкой никогда не проверяется, и лифт начинает работать ненормально после перегрузки. Этот единственный пробел подрывает надежность системы и может даже представлять опасность для жизни. Вот что означает отрицательное тестирование на практике и почему оно важно.
Программное обеспечение ведет себя аналогичным образом. Отрицательный результат теста намеренно отклоняется от обычной процедуры работы. Рассмотрим регистрационную форму.
| Отрицательное тестирование | Положительное тестирование |
|---|---|
| Введите неверный адрес электронной почты в поле "Электронная почта". | В поле для ввода адреса электронной почты вводятся только действительные адреса электронной почты. |
| Введите недопустимый номер телефона, например, символы, в поле для ввода номера телефона. | В числовое поле вводятся только цифры. |
| Загрузите изображение, размер которого выходит за пределы указанных границ. | Загружаются только изображения, не превышающие указанный размер. |
| Загружайте некорректные файлы, например: XML or SQL файлы в поле для загрузки изображений | Загружаются только изображения в допустимых форматах, таких как .jpg или .png. |
В каждом из этих негативных случаев система должна оставаться работоспособной. Если символ вводится в числовое поле, приложение не может обработать неожиданные данные, которые оно не ожидало, и может дать сбой. Хуже того, SQL-инъекция Наличие строки в том же поле может привести к удалению содержимого базы данных. Именно из-за подобных потерь существует метод негативного тестирования.
Зачем проводить негативное тестирование?
Тестирование отнимает время и деньги, поэтому важно решить, что, как и в каком объеме тестировать. Обоснование целесообразности выделения части бюджета на негативное тестирование выглядит по-разному с двух сторон проекта.
Перспектива организации
Обеспечение предоставления клиенту качественной продукции — это обязанность организации, и тестирование с отрицательным результатом является частью этой обязанности. Это также служит доказательством того, что организация предприняла все разумные меры для предотвращения сбоев, хотя ни одна система не является полностью безошибочной.
Решающим фактором является воздействие. Сайт электронной коммерции может пройти все положительные тесты, но при этом содержать уязвимость, позволяющую злоумышленнику выполнить SQL-инъекцию и удалить данные. Это серьезное нарушение безопасности, и обнаружить его можно только с помощью негативного тестирования.
Приложения, доступные широкой публике, особенно веб-сайты, практически не позволяют контролировать их использование посетителями, поэтому негативное тестирование — единственный способ подтвердить, что необычное использование учтено и локализовано. То же самое относится и к злонамеренным пользователям: злоумышленники активно ищут возможность взлома системы, и сценарии взлома должны обязательно учитываться при негативном тестировании.
Взгляд клиента
Клиенты ожидают продукт без уязвимостей, и именно негативное тестирование подтверждает это ожидание. Для таких важных продуктов, как электронная коммерция или онлайн-торговля акциями, тестирование безопасности и отрицательные результаты тестирования являются обязательными, а не факультативными.
Единственная реальная забота клиента — это стоимость. После анализа последствий сбоя клиент может решить, насколько масштабными должны быть меры по проведению негативного тестирования.
Как провести негативное тестирование
Негативное тестирование начинается с рассмотрения всех входных данных, которые приложение может физически получать, а не только тех, которые оно должно получать. Каждый из этих входных данных должен быть включен в анализ. Тестовый кейс даже если это явно неправильный способ использования функции. Поле электронной почты проверяется на наличие всех недействительных адресов электронной почты, а элемент управления загрузкой изображений проверяется на наличие всех типов файлов, кроме изображений.
Список возможных недопустимых входных данных практически бесконечен, поэтому необходимо расставлять приоритеты при тестировании отрицательных сценариев. Для поля ввода изображения, принимающего только файлы .png, в число возможных вариантов загрузки входят .jpeg, .xml, .xls и многие другие. Файлы XML или SQL имеют гораздо больший потенциальный эффект, чем .jpeg, поэтому сначала выполняются именно эти сценарии. Ранжирование сценариев по степени влияния перед выполнением — это то, что делает тестирование отрицательных сценариев доступным по цене.
Большинство негативных тестовых случаев возникают из-за небольшого набора устоявшихся методов проектирования, а не в результате импровизации:
- Граничные значения: Выполняйте действия со значениями, находящимися непосредственно за пределами допустимого диапазона, например, от 0 до 101 для поля, принимающего значения от 1 до 100.
- Недопустимые классы эквивалентности: Выберите по одному представителю из каждого класса отклоненных входных данных, например, букв в числовом поле.
- Ошибка при угадывании: Используйте опыт выявления прошлых дефектов, чтобы определить входные данные, которые с наибольшей вероятностью могут привести к сбою такого рода функций.
- Некорректные и враждебные данные: теги скриптов, фрагменты SQL-запросов и большие объемы полезной нагрузки, которые проверяют корректность и обработку угроз безопасности.
- Fuzz-тестирование: Автоматически генерирует большие объемы случайных или измененных входных данных для обнаружения необработанных сбоев.
- Прерванные потоки: Отмена, обновление, истечение времени ожидания или потеря соединения в процессе транзакции.
Какой бы метод ни привел к такому результату, ожидаемый результат должен быть записан как контролируемый, читаемый сбой — сообщение об ошибке проверки, отклоненная загрузка, чистый откат — и никогда не просто как «система не дает сбоя».
Плюсы и минусы отрицательного результата теста
Как и любой другой метод тестирования, отрицательное тестирование имеет свои преимущества и недостатки, которые зависят от того, где, когда и в каком объеме оно применяется.
Преимущества отрицательного тестирования
- Это напрямую защищает качество продукции, поскольку качественный продукт — это продукт, не имеющий уязвимостей, которые можно использовать в своих целях.
- Это расширяет охват. Некорректные входные данные попадают в работающую систему намеренно или случайно, поэтому для того, чтобы охват был значимым, отрицательные случаи должны обрабатываться наряду с положительными.
- Это повышает доверие клиентов до запуска релиза.
- Он выявляет дефекты, которые структурно невозможно обнаружить с помощью позитивного тестирования, такие как необработанные исключения и слабая проверка входных данных.
Недостатки отрицательного тестирования
- В некоторых ситуациях это пустая трата времени и энергии. Если приложение разработано для одного пользователя, то тестирование в случае 100 одновременных пользователей не имеет смысла, поэтому выбор правильных условий имеет значение, и некоторым системам практически не требуется никакого негативного тестирования.
- Для разработки таких чехлов требуются квалифицированные и опытные специалисты.
- С точки зрения клиента, это увеличивает затраты и может задержать выпуск продукта.
- Это создает конкуренцию за усилия. Команда, которая тратит много средств на тестирование отрицательных результатов, в итоге может недофинансировать тестирование положительных результатов.
