😇
На testengineer.ru мы не размещаем рекламу, но над сайтом регулярно работают несколько человек. Поддержите нас, подписавшись на телеграм-канал "Тестировщик от бога"!
ДомойОбучениеЧто такое классы эквивалентности?

Что такое классы эквивалентности?

Автор

Дата

Категория

Содержание

Коротко: выбранные тестировщиком наборы данных (диапазоны), которые подаются на ввод в модуль, и это должно приводить к одинаковым результатам.

Методика группировки и разделения тестовых входных данных на некие эквивалентные классы. Широко применяемая техника тестирования черного ящика; относится к базовым; всегда спрашивают на собеседованиях. Альтернативное название: эквивалентное разбиение.

Как гласит Первый принцип тестирования, “полное тестирование программы невозможно, или займет недопустимо длительное время”. Причина в том, что нужно проверить слишком много комбинаций тестовых данных. 

Например, слушатель курсов программирования написал простейший калькулятор, и нужно протестировать в нем (хотя бы) все возможные операции сложения (а их 10 в 16 степени, то есть 10 квадриллионов), на это понадобятся миллиарды лет.

Классы эквивалентности помогают тестировщику получить четкие результаты за ограниченное время, покрывая множество тестовых сценариев. Улучшается качество тест-кейсов, устраняется избыточность, возможная в других методиках.

Особенности

  • Это методика черного ящика (то есть тестировщик не видит код, является “внешним наблюдателем” по отношению к программе)
  • Еще одна формулировка КЭ: формируются группы (классы) тестовых вводов с одинаковым поведением
  • Суть в том, что если один член класса ведет себя каким-то образом, то и все остальные члены должны вести себя так же
  • Применяется на любом этапе жизненного цикла тестирования
  • В том числе в юнит-тестировании, интеграционном, системном и приемочном тестировании
  • Тест-кейсы основаны на классах (а не на отдельных тестовых вводах, которых может быть огромное количество). Это экономит рабочее время, потому как не создается много избыточных тест-кейсов.
  • Техника применяется, когда тестовые данные можно поделить на интервалы и наборы дискретных значений (то есть почти всегда)
  • Как правило, в QA применяется сочетание классов эквивалентности и граничных значений — это дает более надежные результаты.

Стандартные действия по методике

  1. Правильно определяются классы эквивалентности, это главное.
  2. Выбирается один представитель (член) в каждом классе. Из каждого эквивалентного набора тестов выбирается один тест.
  3. Выполнение тестов от каждого класса.
  4. Если времени достаточно (или ситуация требует, см. далее о типах), берутся несколько членов из каждого класса. Но у опытного тестировщика классы определены правильно с начала, поэтому несколько членов будут не обязательны (избыточны = покажут те же результаты).

Пример

Есть приложение, принимающее на ввод число из 2 или 3 цифр. Из условия понятно, что диапазон возможных чисел — достаточно большой, и все варианты проверить получается неэкономно. 

  • Теперь эти числа группируем, формируя из них классы эквивалентности. Вместо проверки сотен чисел сформируем из них 4 эквивалентных класса, и разделим вводы на категорию валидных и невалидных.
  • Один элемент из класса как бы представляет весь класс. Например, число 122 представляет класс “трехзначные числа”. Поданное на ввод, число 122 не вызывает ошибку в приложении (тест пройден). Из этого делаем вывод, что все другие члены класса “Трехзначные” также будут нормально приняты приложением. А если тест не пройдет с числом 122, то предполагается, что все трехзначные числа будут вызывать ошибку.
  • А теперь берем число 7 из класса “однозначные числа”, то есть невалидный ввод. Ожидается, что приложение выдаст ошибку в ответ на заведомо невалидный ввод, и это будет значить, что оно работает правильно, и предполагается, что остальные однозначные числа также будут вызывать ошибку.

Еще пример

Есть приложение, в которое подается число от 10 до 100, и затем вычисляется его корень. Эквивалентные классы будут такими:

КлассОписание
Числа от 10 до 100Дата-сет для позитивного сценария
Числа от 0 до 9Дата-сет для негативного сценария
Числа больше 100Тоже не примет приложение
Отрицательные числаУсложняем задачу
БуквыЕще усложняем
Специальные символы типа %^&#И еще такой отдельный класс

Типы классов эквивалентности ( * )

  • Weak Normal. Тестируется по одной переменной из каждого класса. Поэтому еще называется предположением об одной ошибке (single fault assumption)
  • Strong Normal, или предположение о нескольких ошибках. Создаются тест-кейсы из каждого элемента в множестве прямого произведения эквивалентности. Это улучшает охват тестирования, поскольку покрывает все возможные классы, позволяя проверить все возможные комбинации вводов.
  • Weak Robust, как и Weak Normal, тестирует одну переменную из каждого КЭ, но фокусируется на тест-кейсах с невалидными значениями.
  • Strong Robust. Создаются тест-кейсы для всех валидных и невалидных элементов произведения эквивалентного класса. Это “неэкономный” тип КЭ, не уменьшающий избыточность тест-кейсов.

Советы 

  • Robust-типы применяются, если условия ошибки являются высокоприоритетными для проверки, и в сложных функциях
  • Robust применяется, если невалидные значения вызывают runtime-ошибки в системе (в языках со строгой типизацией)
  • Берутся одно валидное и оно невалидное значение, если входные условия в приложении не очень ясны
  • Установление правильной эквивалентности может требовать опыта, и усилий
  • Чем больше создано классов, тем вероятнее, что много тестов окажутся избыточными
  • И чем меньше классов, тем выше вероятность пропуска ошибок

Преимущества и недостатки

Плюсы

  • Главное — уменьшает количество тест-кейсов, не уменьшая покрытие
  • Уменьшает время тестирования и упрощает процесс, меньше данных обрабатывается
  • Применяется на всех этапах и уровнях тестирования
  • Позволяет сфокусироваться на небольших наборах данных, что улучшает вероятность найти больше багов
  • Тесты получаются более структурированными
  • Подходит для проектов с ограничением времени и ресурсов (то есть всегда)

Минусы

  • Не учитывает условия по граничным значениям (поэтому надо сочетать с анализом граничных значений)
  • Подбор эквивалентных классов — сложная вещь для новичков

Разница между классами эквивалентности и анализом граничных значений

Классы эквивалентностиГраничные значения
Стандартная техника «черного ящика», с которой начинают тестированиеЧасто последующий этап «черного ящика», продолжение тестирования после эквивалентных классов
Применяется на любом этапе тестирования: юнит-, интеграционное, системное, и пр. Как дополнение к КЭ и как часть негативного или стресс-тестирования
Техника: тестовые данные делятся на эквивалентные классы, которые “должны вести себя одинаково”Техника: проверяются “значения на границах” классов
Экономит время на тестирование, меньше тест-кейсов и они более эффективныеУменьшает общее время выполнения тестов, делая поиск багов быстрее и проще
Стандартно тестируется только по одному значению из каждого эквивалентного классаТест-кейсы создаются из граничных значений классов
Альтернативное название: эквивалентное разбиениеАльтернативное название: проверка границ диапазона

Какой была ваша первая зарплата в QA и как вы искали первую работу?

Мега обсуждение в нашем телеграм-канале о поиске первой работы. Обмен опытом и мнения.

Подписаться
Уведомить о
guest

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

Warning: file_put_contents(): Only 0 of 111 bytes written, possibly out of free disk space in /var/www/u0981169/data/www/testengineer.ru/wp-content/plugins/wpdiscuz/utils/class.WpdiscuzCache.php on line 148
$1100*
медианная зарплата в QA в ноябре 2021

*по результатам опроса QA-инженеров в нашем телеграм-канале

Последние публикации

Мы в Telegram

Наш официальный канал
Полезные материалы и тесты
Готовимся к собеседованию
Project- и Product-менеджмент

💬 Telegram-обсуждения

Наши подписчики обсуждают, как искали первую работу в QA. Некоторые ищут ее прямо сейчас.
Наши подписчики рассказывают о том, как не бояться задавать тупые вопросы и чувствовать себя уверенно в новой команде.
Обсуждаем, куда лучше податься - в менеджмент или по технической ветке?
Говорим о конфликтных ситуациях в команде и о том, как их избежать

Последние комментарии