Негативное тестирование в тестировании программного обеспечения — это техника, которая проверяет, как ваше приложение реагирует на неожиданное поведение или недостоверные данные. Этот тип тестирования может помочь командам контроля качества повысить надежность и стабильность программного обеспечения, выявляя исключения, которые приводят к зависанию, сбоям или другим нежелательным последствиям.
В этой статье мы рассмотрим, что такое негативное тестирование программного обеспечения, почему оно важно, а также некоторые из различных подходов, методов и инструментов, которые вы можете использовать для этой техники.
Что такое негативное тестирование программного обеспечения?
Негативное тестирование — это метод тестирования программного обеспечения, при котором в систему намеренно подаются недопустимые входные данные или неожиданные сведения, чтобы посмотреть, как она справится с этими сценариями. Этот подход, также известный как тестирование на отказ или тестирование пути ошибок, имитирует разнообразные реальные сценарии, с которыми может столкнуться ваше приложение, например, ввод пользователями недопустимых дат или символов или использование определенных функций не по назначению.
В большинстве видов тестирования для проверки приложения используются достоверные данные. Однако негативное тестирование использует другой подход, тестируя по краям и за пределами типичных входов и наблюдая, как приложение обрабатывает исключения.
Проверка работоспособности приложения очень важна. Но, с другой стороны, понимание того, что происходит, когда пользователи выходят за рамки дозволенного, тоже крайне важно, особенно если эти непреднамеренные действия приводят к сбоям, зависаниям или другим дефектам.
Разница между положительным и отрицательным тестированием
тестирование при тестировании программного обеспечения
Как мы уже говорили выше, негативное тестирование использует неожиданные или недостоверные данные для проверки поведения системы. В отличие от этого, позитивное тестирование использует ожидаемые или действительные данные для проверки того, что система работает так, как ожидается.
Другими словами:
- Позитивное тестирование поможет вам понять, работает ли ваше приложение так, как планировалось
- Негативное тестирование определяет, сможет ли ваше приложение справиться с неожиданными событиями
Если вы хотите тщательно протестировать свое приложение, необходимо провести как позитивное, так и негативное тестирование.
Почему негативное тестирование программного обеспечения является жизненно важным?
Когда разработчики создают программное обеспечение, они четко представляют себе, как пользователь будет его использовать. Однако пользователи не всегда следуют правилам. Довольно часто они пытаются нажать на несуществующие кнопки, ввести буквы в числовые поля или сделать ввод, которого вы просто не ожидаете.
Негативное тестирование направлено на учет таких побочных ситуаций, которые не могут быть выявлены с помощью позитивных методов тестирования, таких как
юнит
,
системное
или
интеграционное тестирование
. Чтобы придумывать «кривые шары» для системы, требуется нестандартное мышление. Однако в итоге получается более стабильное и надежное приложение.
Какова цель негативного тестирования
в тестировании программного обеспечения?
Негативное тестирование преследует те же цели, что и другие виды тестирования программного обеспечения. А именно, выявление ошибок, дефектов и уязвимостей в приложении. Однако он играет особую роль в поиске дефектов, которые невозможно выявить с помощью достоверных данных. Вот некоторые причины, по которым стоит использовать подход негативного тестирования.
1. Выявление дефектов
Главная цель негативного тестирования в тестировании программного обеспечения — выявить дефекты, возникающие из-за недостоверных данных или неожиданных входных данных. Это позволяет тестировщикам применять более активный подход к обнаружению ошибок и гарантировать, что программное обеспечение соответствует ожиданиям.
2. Безопасность
Неожиданный ввод или недостоверные данные могут стать причиной уязвимости системы безопасности. Тестирование и решение этих проблем приводит к созданию более безопасного и надежного приложения за счет снижения вероятности вредоносных атак, инъекций или попыток несанкционированного доступа.
3. Обработка ошибок
Негативное тестирование полезно для проверки обработки ошибок. Речь идет не только о том, чтобы система оставалась стабильной после столкновения с неожиданными входными данными или данными, но и о том, как она реагирует на эти события, например, выдает сообщения об ошибках, чтобы конечный пользователь знал, что данные недействительны.
4. Улучшение тестового покрытия
Позитивное и негативное тестирование в тестировании программного обеспечения в значительной степени дополняют друг друга. Они оба охватывают различные элементы ввода данных, а значит, ваше тестирование будет более полным.
5. Лучший пользовательский опыт
Негативное тестирование помогает обнаружить источник сообщений об ошибках, сбоев и других неожиданных действий, которые могут негативно повлиять на пользовательский опыт.
Разница между позитивным и негативным
тестирование в программной инженерии
Как мы уже упоминали выше, при негативном тестировании для проверки поведения системы используются неожиданные или недостоверные данные. Позитивное тестирование, с другой стороны, отправляет ожидаемые или действительные данные, чтобы убедиться, что система работает так, как ожидалось.
Разница между положительным и отрицательным тестированием заключается в следующем:
1. Задачи:
Позитивное тестирование проверяет, работает ли программное обеспечение так, как задумано; негативное тестирование стремится понять, что происходит в непредусмотренных сценариях.
2. Данные:
При позитивном тестировании используются достоверные данные, а при негативном — недостоверные входные данные, экстремальные значения и неожиданные форматы.
3. Фокус:
Позитивное тестирование фокусируется на успешных сценариях, в то время как негативное тестирование в большей степени связано с неудачными сценариями.
Различные виды негативного тестирования
Негативное тестирование — это понятие, которое охватывает несколько различных подходов к проверке качества и целостности приложения. Вот семь типов негативного тестирования, которые вам необходимо знать.
#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. Напишите тестовые примеры
После того как вы собрали все сценарии, пришло время написать тестовые примеры. Теперь, при негативном тестировании, вы можете написать практически неограниченное количество тестовых случаев. В конце концов, этот тип тестирования заключается в том, чтобы выяснить, что происходит, когда люди используют программное обеспечение не так, как вы планировали. Однако сроки диктуют вам сократить список потенциальных дел до ситуаций, которые с наибольшей вероятностью вызовут проблемы.
Как всегда, пишите свои тестовые примеры ясным, кратким и объективным языком. Здесь нет места двусмысленности.
Вот хороший формат для отрицательных тестовых примеров.
- Используйте идентификатор тестового случая
- Опишите, что именно проверяется
- Отметьте все предпосылки для отрицательного теста
- Опишите набор необходимых действий
- Установите четкие и объективные результаты
- Запишите фактический результат вашего теста
#6. Запланируйте тест
Теперь вам нужно составить расписание тестов. Опять же, важно определить приоритетность сценариев, которые имеют наиболее серьезные негативные последствия, такие как аварии, или в которых наиболее вероятно обнаружение проблем.
Пример негативного тестового случая
Вот пример негативного тестового случая.
Идентификатор тестового случая: TC001
Описание: Убедитесь, что при вводе пользователем недопустимого адреса электронной почты отображается сообщение об ошибке.
Предварительные условия: Пользователь должен находиться на странице входа в приложение
Шаги: 1. Введите недопустимый адрес электронной почты. 2. Нажмите «Вход».
Ожидаемый результат: Когда пользователь нажимает кнопку «Войти», появляется сообщение об ошибке: «Введен неверный адрес электронной почты».
Результат: Запишите, что произошло, когда был выбран пункт «Вход».
Примеры негативных сценариев при тестировании программного обеспечения
Вот несколько типичных сценариев, которые можно проверить с помощью негативных методов тестирования.
1. Типы данных и полей
Если вы заполняли форму в Интернете, то наверняка знаете, что эти поля настроены на прием определенных типов данных. Некоторые из них содержат только числа, а другие принимают даты, текст или другие типы данных.
Отрицательное тестирование для этих ящиков заключается в отправке недопустимых данных, например, вводе букв в числовое поле.
2. Необходимые поля
Опять же, обязательные поля — обычная особенность форм и приложений. Они являются удобным инструментом для сбора всей важной информации, прежде чем пользователь перейдет к следующему этапу.
Хороший тестовый пример для этих сценариев — посмотреть, что произойдет, если оставить эти поля пустыми. В идеальном случае должно появиться сообщение об ошибке, призывающее пользователя заполнить необходимое поле.
3. Соответствующее количество символов
Если у вас есть тестируемое приложение, состоящее из веб-страниц, то в нем может быть поле данных, требующее ограниченного количества символов. Это могут быть имена пользователей, номера телефонов, регистрационные номера и так далее.
Вы можете создать негативные тестовые случаи для этих полей, написав тесты, которые вводят больше максимально допустимого количества символов, чтобы посмотреть, как отреагирует приложение.
4. Границы и пределы данных
В некоторых формах есть поля с фиксированными ограничениями. Например, если вы хотите, чтобы кто-то оценил что-то из 100 баллов, границы данных будут 1-100.
Создайте отрицательный тестовый пример, в котором вы попытаетесь ввести 0, 101 или другие отрицательные или положительные значения из диапазона 1-100.
Лучшие практики негативного тестирования
Существует несколько лучших практик для обеспечения качественного негативного тестирования. Вот несколько советов, которые помогут вам в этом.
1. Определите недействительные входы:
Изучите документацию по разработке, примеры использования и UI/UX, чтобы понять и выявить потенциальные недействительные вводы. Ищите недопустимые типы данных, экстремальные значения, недостающие данные, пустые поля, неожиданные форматы и многое другое.
2. Используйте анализ граничных значений:
Как уже говорилось выше, наметьте граничные значения, чтобы найти крайние случаи, которые могут вызвать неожиданную реакцию.
3. Разбиение на эквивалентности сотрудников:
Посмотрите на свои входные домены и разбейте их на разделы эквивалентности, состоящие из допустимых и недопустимых значений. Этот процесс помогает сократить количество тестовых примеров, которые вам придется написать, потому что если эквивалентный фрагмент недостоверных данных вызывает проблемы для одного входа, он, скорее всего, будет представлен во всем классе.
4. Подражайте плохим пользователям:
Позитивное тестирование подтверждает ожидаемое поведение пользователя. Негативное тестирование изучает, что происходит, когда люди неправильно используют ваше приложение. Поэтому подумайте о различных сценариях, в которых это может произойти, и воспроизведите их в своих тестовых примерах.
5. Пусть риск и воздействие направляют ваше тестирование:
Ни у одного испытателя нет неограниченного времени. В какой-то момент вам придется сделать сложный выбор, потому что вы не можете проверить (или даже знать) все неожиданные исходы. Когда вам нужно решить, какие типы негативных тестов проводить, отдайте предпочтение тем областям, которые принесут наибольший риск или негативное влияние на ваш продукт.
6. Проверка обработки ошибок:
Убедитесь, что работа с ошибками является частью вашего тестирования, проверяя полезность и точность сообщений об ошибках.
7. Автоматизируйте как можно больше:
Автоматизация прекрасно справляется с рутинными и повторяющимися задачами. Однако негативное тестирование все еще требует ручного подхода для исследовательского тестирования и поиска крайних случаев.
Лучшие инструменты для негативного тестирования на 2024 год
Несмотря на то, что тестирование негативного программного обеспечения распространено во всей отрасли, существует недостаток отдельных инструментов для этой работы. Причиной тому является универсальность негативного тестирования. Более того, многие из тех же инструментов, которые используются для позитивного тестирования, работают и для негативного тестирования, когда вы корректируете исходные данные.
ZAPTEST это лучший инструмент для негативного тестирования благодаря своей универсальности и модульности. Он прост в использовании и настраивается, а благодаря кросс-платформенным и кросс-прикладным возможностям его гибкость трудно превзойти.
Тестирование на основе данных и
мутационное тестирование
Функциональность делает ZAPTEST идеальным средством для негативного тестирования. Более того, благодаря его RPA Функции позволяют моделировать реальных пользователей, повторно использовать тесты и с легкостью создавать отчеты и документацию. Одним словом, способность ZAPTEST работать с современными программами автоматизации программного обеспечения и роботизированных процессов делает его универсальным решением для любых задач автоматизации, включая тестирование на негативные факторы.
Заключительные мысли
Негативное тестирование при тестировании программного обеспечения помогает командам понять, как приложение будет справляться с неожиданными вводами и недействительными данными. В то время как позитивное тестирование проверяет, функционирует ли ваше программное обеспечение так, как задумано, негативное тестирование помогает выяснить, что происходит, когда пользователи неправильно выбирают входные данные и данные. Оба подхода важны, если вы хотите создать надежное и прочное приложение, способное выдержать все нагрузки и стрессы, связанные с разнообразным взаимодействием с пользователями.