Разбиение на эквивалентности в тестировании программного обеспечения — это техника тестирования «черного ящика», которая помогает создавать эффективные тестовые случаи без ущерба для покрытия тестов.
В этой статье мы рассмотрим, что такое разделение классов эквивалентности, почему оно полезно, а также изучим некоторые процессы и подходы, которые можно использовать для раскрытия преимуществ этой техники.
Что такое разбиение на классы эквивалентности
в тестировании программного обеспечения?
Все программы имеют определенные условия ввода. В контексте тестирования программного обеспечения эти входные условия описывают значения или данные, которые тестировщик должен использовать для проверки качества и функциональности своего программного обеспечения. В качестве входных данных могут выступать как простые щелчки мышью, так и текст и цифры.
Раздел эквивалентности при тестировании программного обеспечения изучает различные входные данные, необходимые для использования программного обеспечения, и группирует их в классы эквивалентности, то есть наборы входных данных, которые будут оказывать эквивалентное влияние на поведение программного обеспечения.
Если вы знаете, как поведет себя каждая группа входов, то вам не нужно тестировать каждого представителя группы. Таким образом, разбиение на классы эквивалентности — отличный способ помочь тестировщикам сократить количество лишних тестов. В мире гиперконкурентной разработки программного обеспечения, где сроки становятся все более сжатыми, экономия времени и усилий на жизненном цикле тестирования программного обеспечения (STLC) имеет решающее значение.
Наконец, стоит отметить, что тестирование на эквивалентность — это техника тестирования «черного ящика». Короче говоря, это означает, что тестировщикам не нужно знать внутренний код программы или ее внутреннюю работу. Тесты основаны на входах, выходах и внешнем поведении. Таким образом, эти тесты в значительной степени ориентированы на поведение пользователя во время работы с программой.
1. Разбиение эквивалентности тестирования программного обеспечения в двух словах
Разбиение на эквивалентности делит входные данные для тестирования программного обеспечения на два лагеря: валидные и невалидные входные данные. Значения в каждом разделе должны вызывать одинаковое поведение программного обеспечения. Например:
- Если условие одного значения в разделе A истинно, то должны быть истинными и другие значения в разделе A.
- Аналогично, если условия для одного значения в разделе A ложны, то и другие значения в разделе A должны быть ложными.
В контексте тестирования каждый раздел должен быть пройден хотя бы один раз. Логически это означает, что если один вход в раздел A не работает, то все остальные входы тоже не работают. Этот процесс должен сэкономить время, поскольку вместо тестирования каждого входа, входящего в раздел A, тестировщики могут протестировать только один и экстраполировать результат на основе общих черт.
2. Почему тестирование классов эквивалентности важно для тестирования программного обеспечения
Прежде чем перейти к непосредственным преимуществам тестирования классов эквивалентности в тестировании программного обеспечения, необходимо определить, почему этот подход важен.
Все тестировщики понимают, что тестирование программного обеспечения требует компромиссов. Время и бюджеты ограничены, поэтому тестировщикам необходимо максимально эффективно использовать свои ресурсы. Разбиение эквивалентности тестирования программного обеспечения помогает командам найти баланс между эффективностью и надежностью тестирования за счет сокращения количества входных данных.
Преимущества разделения эквивалентности
в тестировании программного обеспечения
Эквивалентный раздел в тестировании программного обеспечения предпочитают команды тестировщиков по целому ряду причин. Вот некоторые из самых убедительных.
1. Эффективность
Большое преимущество тестирования на разделение эквивалентности заключается в его эффективности. Когда тестировщики используют разбиение на эквивалентности, они могут сократить количество необходимых тестовых случаев без ущерба для покрытия тестов. Выбрав входной пример из каждого класса эквивалентности, тестировщики могут быть уверены, что понимают, как работает их программа при различных входных данных.
2. Простота
Еще одно большое преимущество разделения эквивалентности тестирования программного обеспечения — простота. Разбивка разнообразных входных данных на достоверные и недостоверные означает, что планирование тестов значительно упрощается. Тестирование каждого входа по отдельности требует большого количества документации и координации. Сокращение количества примеров до одного репрезентативного упрощает процесс тестирования.
Расширенное покрытие
Использование классов эквивалентности при тестировании также позволяет более эффективно использовать время тестирования. Сокращение тестовых входов в классы означает, что вы можете более тщательно протестировать каждый класс. Такой комплексный подход был бы откровенно невозможен, если бы вы тестировали каждый вход по отдельности. Разбиение на эквивалентности позволяет командам тщательно тестировать достоверные и недостоверные данные, граничные случаи, пограничные значения и многое другое.
3. Возможность повторного использования
Первоначальное время, потраченное на создание каждого класса эквивалентности при тестировании программного обеспечения, окупается в будущем, если вы будете использовать эти классы для будущих входных тестов. Хотя не все разделы пригодятся для будущих тестов, те, что пригодятся, сэкономят вам массу времени в будущих проектах или даже в ситуациях регрессионного тестирования.
Недостатки разбиения на эквивалентности
в тестировании программного обеспечения
Хотя разделение по эквивалентности дает ряд существенных преимуществ, оно не является идеальным решением для каждого сценария. Давайте рассмотрим некоторые из его недостатков.
1. Порядок ввода
В некоторых ситуациях порядок ввода является критической частью тестирования функциональности приложения. Это не то, что можно реально сократить с помощью разделения эквивалентности. Тестировщики должны помнить о таких ситуациях и использовать альтернативные методы для обеспечения хорошего покрытия.
2. Сложные зависимости на входе
Сложные программы со сложными входными зависимостями — еще одна область, где проявляются ограничения эквивалентного разбиения. Например, программное обеспечение, которое выводит расчеты на основе различных исходных данных. В этом случае тестировщикам придется использовать различные методы, чтобы уменьшить комбинаторный взрыв и повысить вероятность выявления дефектов.
Альтернативные подходы к дополнению
ограничения при проведении испытаний на эквивалентность
Хотя тестирование на разделение эквивалентности подходит для многих тестовых сценариев, очень сложное программное обеспечение с запутанными зависимостями между входными значениями может потребовать дополнительных подходов.
Когда дело доходит до написания тестовых примеров для сложного программного обеспечения, использование комбинации этих подходов является хорошей идеей.
1. Попарное тестирование
Парное тестирование — это метод тестирования программного обеспечения, при котором проверяются все возможные комбинации каждой пары входных параметров. Такой подход гарантирует, что каждая пара параметров будет протестирована вместе как минимум один раз.
2. Тестирование таблицы решений
Таблица решений помогает тестировщикам методично прорабатывать различные комбинации входных данных. Это хороший способ обеспечить систематическое покрытие при наличии сложных зависимостей.
3. Тестирование переходов состояний
Этот тип тестирования измеряет, как программное обеспечение переходит из одного состояния в другое в ответ на различные комбинации входных данных.
4. Тестирование на основе моделей
Этот подход предполагает создание модели, основанной на внутренней логике программного обеспечения, и использование инструмента автоматизации для создания тестовых примеров на основе этой модели. Эта техника отлично справляется со сложностью и обеспечивает адекватное покрытие.
Примеры тестирования на разбиение классов эквивалентности
Лучший способ понять, что такое разделение эквивалентности, — это рассмотреть, как и где можно использовать класс эквивалентности в тестировании программного обеспечения. Вот несколько примеров, которые помогут вам лучше представить себе эту концепцию.
1. Пример тестирования разбиения на классы эквивалентности №1
Форма онлайн-заказа — хороший пример класса эквивалентности при тестировании программного обеспечения.
Допустим, вы создаете приложение для интернет-магазина стационарного оборудования. Существует типовая форма заказа пачек бумаги формата А4. Вот как можно использовать классы эквивалентности для проверки этой формы.
Классы эквивалентности:
Количество бумаги формата A4 находится в определенном диапазоне, например, от 1 до 100. Итак, три класса:
- 1 до 100
- Числа ниже 1
- Числа больше 100.
Тестовые случаи:
Необходимо выполнить три тестовых случая со следующими ожидаемыми результатами
- Любое число от 1 до 100 = заказ обработан
- Числа ниже 1 = сообщение об ошибке
- Числа более 100 = сообщение об ошибке
2. Пример тестирования разбиения на эквивалентности №2
Класс эквивалентности в тестировании программного обеспечения может иметь дело не только с числами. В этом примере мы рассмотрим, как можно использовать тот же принцип для проверки портала загрузки файлов. Допустим, вам нужно протестировать сайт, который требует от пользователей загрузить документы, удостоверяющие личность, но вы можете принять только определенные форматы.
Классы эквивалентности:
- Поддерживаются документы в форматах PDF и JPEG.
- Неподдерживаемыми документами являются все остальные форматы документов
- Нет документа
Тестовые случаи:
- Проверка путем загрузки PDF или JPEG = успешная загрузка
- Тест с загрузкой неподдерживаемого формата = сообщение об ошибке
- Тест без загрузки файла = сообщение об ошибке
Как реализовать эквивалентное разбиение
подход к тестированию программного обеспечения
Если вы хотите использовать классы эквивалентности в тестировании, вам необходимо использовать стратегический подход. Здесь представлено полезное пошаговое руководство по применению разделения эквивалентности в тестировании программного обеспечения.
Шаг № 1: Определите входные переменные
Каждое программное обеспечение реагирует на различные входные переменные. Для сложного программного обеспечения эти переменные могут быть огромными. Итак, просмотрите требования и спецификации к программному обеспечению и определите все переменные, которые влияют на его поведение.
Среди наиболее очевидных способов ввода данных — формы пользовательского ввода. Однако вам нужно рассмотреть более широкий спектр исходных данных для вашего списка. Вы также можете учитывать переменные окружения, вызовы API, внутренние вычисления и т. д.
Далее вам следует разобраться в различных типах переменных данных. Вы можете классифицировать эти переменные как целочисленные, булевы, строковые и т. д., чтобы определить соответствующие разделы.
Наконец, необходимо изучить ограничения на входные данные. Это такие вещи, как допустимые символы, определенные форматы и минимальные/максимальные значения.
Шаг № 2. Определение допустимых и недопустимых разделов
Рассмотрите каждую входную переменную и начните разбивать их на допустимые и недопустимые результаты. Это будут ваши классы эквивалентности при тестировании.
1. Допустимые разделы
Действительные разделы можно разделить на два класса.
Классы положительной эквивалентности:
Значения, которые, как вы ожидаете, будет успешно обрабатывать ваше программное обеспечение. Например, для программного обеспечения, которое записывает оценки в процентах, подходит все от 0 до 100.
Классы отрицательной эквивалентности:
В эту категорию попадают значения, которые выходят за границы ожидаемого ввода, но которые ваше программное обеспечение должно обработать с помощью сообщения об ошибке. Например, при вводе значения 110 для оценки в процентах программа выдает сообщение об ошибке: «Все значения должны быть от 0 до 100».
2. Неправильные разделы
Эти классы эквивалентности будут включать в себя входные данные, которые будут вызывать ошибки или неожиданное поведение. В нашем примере это может включать попытки ввести A+ или B или аналогичные данные в процентную оценку. Хотя эти данные могут быть технически правильными, они выходят за рамки числовых ожиданий.
#3. Написание эффективных тестовых примеров
Далее вам нужно разработать тестовые примеры, которые хотя бы раз охватывают каждый раздел эквивалентности. Как уже говорилось ранее в статье, это обеспечивает соответствующее тестовое покрытие.
Прежде всего, необходимо выбрать репрезентативные значения в каждом разделе эквивалентности, которые могут охватывать как достоверные, так и недостоверные данные.
Советы по написанию надежных тестовых примеров
- Подумайте о граничных значениях: Убедитесь, что вы проверили границы ваших перегородок. Минимальный, максимальный, инклюзивный, эксклюзивный и т. д., поскольку эти области — сильные кандидаты на ошибки. Например, если ожидаемые значения входных данных находятся в диапазоне от 0 до 100, проверьте их на наличие отрицательных значений, а также чисел типа 101.
- Рассмотрите положительные и отрицательные сценарии тестирования для валидных и невалидных тестовых примеров.
- Комбинированное тестирование — хорошая идея. Используйте несколько различных подходов, как описано в наших альтернативных подходах, чтобы дополнить ограничения раздела о тестировании эквивалентности выше.
- Документируйте обоснование того, почему входные значения были разделены на определенные части, и четко определите ожидаемое поведение каждого теста
- По возможности используйте визуальные инструменты, чтобы придать тестовым случаям ясность и объективность, используя диаграммы или таблицы для разметки разделов.
#4. Планирование и выполнение тестовых заданий
Расставьте приоритеты, основываясь на таких факторах, как:
- В каких областях наиболее вероятно наличие дефектов
- Какие сценарии с наибольшей вероятностью приведут к серьезным последствиям, таким как сбои или зависания
Затем выполните тесты и запишите результаты и возникшие ошибки. Для сложных программ с большим количеством вводимых данных можно использовать инструменты RPA, имитирующие действия пользователя.
#5. Проанализируйте результаты
Соберите собранные тестовые данные и проанализируйте результаты. Некоторые методы, которые вам необходимо использовать, таковы:
- Просмотрите каждый тестовый пример и сравните фактические результаты с ожидаемыми.
- Находите любые несоответствия, изучайте и сообщайте о любых ошибках и дефектах.
#6 Дополнительные советы
Хотя эти советы применимы не во всех сценариях, они окажутся полезными при тестировании сложного программного обеспечения.
- Таблицы решений — отличный способ визуализировать разделы эквивалентности и различные комбинации входных данных, которые вы можете использовать.
- Вы можете объединить классы эквивалентности, если они демонстрируют практически идентичное поведение, что еще больше оптимизирует процесс тестирования.
- Использование тестирования граничных значений для улучшения обнаружения дефектов
- По возможности автоматизируйте тестовые случаи разделения эквивалентности
Эквивалентное разбиение и анализ граничных значений
Эквивалентное разбиение основано на предположении, что каждый тест в пределах разбиения даст одинаковый результат. Во многих ситуациях это верно, но не всегда срабатывает. Например, любые входы, которые были добавлены в раздел по ошибке, могут остаться непроверенными, что приведет к снижению покрытия и потенциальной нестабильности программного обеспечения в дальнейшем.
Решением этой проблемы является тестирование граничных значений. Это позволяет командам тестирования программного обеспечения сосредоточиться на областях, которые с наибольшей вероятностью содержат риски, и тестировать программное обеспечение на этой основе. Короче говоря, он предполагает, что риски с наибольшей вероятностью возникают на краях или границах ваших входных разделов. Поэтому тестировщики могут писать тестовые примеры для верхней и нижней границ входных данных, в дополнение к другим тестовым примерам класса эквивалентности.
Разбиение на эквивалентности и автоматизация с помощью ZAPTEST
Средства автоматизации тестирования программного обеспечения, такие как ZAPTEST, могут помочь командам автоматизировать разделение эквивалентности как при создании, так и при выполнении тестов.
Давайте узнаем, как ZAPTEST может помочь вам раскрыть преимущества этого полезного подхода к тестированию «черного ящика».
1. Выбор инструмента
Выбор правильного инструмента для работы очень важен. Большинство инструментов автоматизации тестирования специализируются на тестировании веб-приложений, мобильных устройств или настольных компьютеров. ZAPTEST способен выполнять тестирование на различных платформах и в различных приложениях, что делает его надежным выбором.
2. Написание и выполнение тестовых примеров
ZAPTEST 1Script позволяет сканировать пользовательский интерфейс для создания автоматизации тестирования. Кроме того, вы можете сканировать макеты приложений, если они находятся на ранней стадии разработки. Используя функцию Scan GUI, ZAPTEST просканирует все тестовые объекты и добавит их в список объектов.
Отсюда вы можете добавлять объекты на диаграмму и строить шаги тестирования.
ZAPTEST позволяет автоматизировать написание кейсов с помощью простого интерфейса перетаскивания. Для создания тестовых примеров с помощью ZAPTEST вам не нужны знания в области кодирования. Отсюда вы можете выбрать соответствующую операцию из выпадающего метода и построить тестовый пример на основе входных значений, необходимых для вашего интерфейса. Затем вы можете построить тестовые примеры для каждой эквивалентности и выполнить их. Вы даже можете повторно использовать тестовые примеры и редактировать их в редакторе Step, что экономит массу времени.
3. Отчетность и управление тестовыми случаями
ZAPTEST позволяет запускать тестовые случаи параллельно, что значительно экономит время. Это поможет вам одновременно выполнить большое количество различных разделов эквивалентности или запустить определенные группы тестов.
Результаты легко собрать благодаря подробным отчетам о проваленных/непройденных тестах, скриншотам, журналам выполнения и показателям производительности, относящимся к каждому тестовому случаю.
4. Обслуживание тестовых примеров
Вы также можете просто отслеживать и поддерживать свои тестовые случаи благодаря качественным возможностям контроля версий. Более того, пользователи ZAPTEST могут клонировать и повторно использовать тесты для достижения нового уровня эффективности.
ZAPTEST предлагает гораздо больше функций, помимо автоматизации тестовых случаев. Благодаря набору инструментов RPA, ZAPTEST предлагает функциональность 2-в-1, преодолевая разрыв между DevOps и BizOps в будущем, отмеченном гиперавтоматизацией, где все, что может быть автоматизировано, будет автоматизировано.
Заключительные мысли
Эквивалентное разбиение — это элегантное решение для ситуаций, когда тестировщикам необходимо найти баланс между эффективностью и точностью. Поскольку некоторые программы допускают практически бесконечный диапазон входных данных, разбиение на классы эквивалентности помогает командам разбить тестовые данные на управляемые кусочки, каждый из которых можно тщательно протестировать.