Блог LearnQA

Граничные значения и классы эквивалентности

Одним из самых популярных вопросов на собеседовании на позицию QA Engineer является следующий: "Что такое граничные значения? Что такое классы эквивалентности?". Чаще всего эти два вопроса задают вместе, как один.

Иногда, скажем, на позицию Senior QA Engineer этот вопрос может быть даже завуалирован. Например:

- Какие практики тест-дизайна вы знаете/применяете?
- Как будете писать тест кейсы для каких-то определенных значений?
- Какие значения будете проверять?
- Как вы будете выделять граничные значения?
- В чем разница граничных значений и классов эквивалентности?
- И т.д.

Что ж, вопрос популярный, давайте разбираться.

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


Классы эквивалентности - это разделение функционала или данных на определенные наборы, с которыми тестируемое приложение должно работать одинаково.
Рассмотрим на примере.

Предположим, что у нас есть приложение, которое переводит рубли в евро. Есть поле ввода, которое принимает цифровые значения. Ввели 500, получили евровый эквивалент. Наша задача - протестировать такое приложение.

Само собой, невозможно ввести все цифры, чтобы убедиться, что для каждой из них приложение будет работать правильно. Но давайте подумаем, а надо ли?

С точки зрения работы приложения между значением 500 и 600 разницы нет. Обе цифры будут умножены на соответствующий коэффициент. Следовательно, приложение будет работать одинаково в обоих случаях. Значит, эти проверки можно считать эквивалентными.

А вот еще пример. Для данного приложения целое число и дробное могут считаться эквивалентными значениями. Но только если дробное число имеет не более двух знаков после запятой: копейки и центы. Как будет обрабатываться дробное число с тремя знаками после запятой? Не важно, главное, что не так же, как целое число. И эта проверка уже эквивалентной не будет.

Суть разбиения проверок на классы эквивалентности в том, что в рамках одного класса достаточно совершить только одну проверку. Если все работает правильно, мы считаем, что для всех других эквивалентных значений все будет работать правильно.

Итак, какие проверки нам надо совершить для данного приложения?

- Проверить любое целое число или дробное с двумя знаками после запятой
- Проверить любое дробное число более чем с двумя знаками после запятой
- Проверить отрицательное число
- Проверить не числовое значение (ввести любой символ)

Такие вот классы эквивалентности у нас получились. Можно ли сказать, что это исчерпывающий набор? Скорее всего нет. Но точно можно сказать, что всего четырьмя проверками мы закрыли огромное количество кейсов. А главное - сделали это систематизированно.

Граничные значения


Граничные значения - это значения, в которых один класс эквивалентности переходит в другой.

Техника граничных значений является идейным продолжением техники эквивалентных классов. Считается, что помимо проверки значений из середины класса (например, значения 500 в нашем случае) еще надо проверять значения на границах. В нашем случае это значение 0, потому что отрицательного значения валюты быть не может.

Какой профит от этих техник?


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

Когда такие ребята выдыхаются и фантазия их истекает, они еще долго смотрят на листочек и пытаются что-то додумать. Они никогда не уверены, что протестировали все разумные кейсы. Вдруг случайно “придумается” еще какая-нибудь проверка поинтереснее... Знакомо? 🙂

Вышеописанные техники позволяют систематизировать проверки. Когда есть четкий план действий, полагаться на случайность не надо. Ваши действия выглядят осознанными, а вы сами понимаете, закончили проверку или нет.

Хотите увидеть пример использования этих и других эффективных и популярных техник тестирования и получить площадку для практики? Приходите на наш курс по основам тестирования - learnqa.ru/stageone