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

Эта тема довольно простая и если в ней разобраться, то можно обеспечить себе пару плюсов во время собеседования. Но как показывает практика, далеко не все кандидаты умеют правильно выделять граничные значения. Давайте вместе разберемся, как это делать.
1. Классы эквивалентности

Для начала надо понять, что такое классы эквивалентности. Если брать определение, которое дают в глоссарии ISTQB, то мы получим следующее:

Классы эквивалентности – это часть области значений элемента данных, связанного с тестовым объектом, для которого все значения должны обрабатываться одинаково на основе спецификации. Как по мне – это тяжело понять. Просто набор слов.

Давайте, я расскажу проще. Классы эквивалентности – это набор входных значений, которые приводят систему в одно и то же состояние и вызывают один и тот же блок кода.
Например, у меня есть поле ввода, куда можно ввести числа от 0 до 9. Программа проверяет, входит ли введенное число в данный промежуток. Если да, то число сохраняется.

Итак, можно выделить первый класс эквивалентности (Класс 1) – это числа 1, 2, 3 .... 9. При вводе любого из них будет вызван один и тот же блок кода и пользователь увидит одну и ту же реакцию приложения на ввод (например, число сохраниться).
Второй класс эквивалентности – это значения, которые программа не принимает. Т.е. после ввода этих значений мы должны увидеть какое-то валидационное сообщение. Например, после ввода 10 под полем отображается сообщение «Неверный ввод».

НО, мы не можем все недопустимые значения объединить в один класс эквивалентности. Почему, спросите вы.

Все просто: разные входные данные вызовут разные блоки кода. Например, при вводе чисел более 9, программа проверит условие number <= 9. Если условие не выполняется – мы увидим валидационное сообщение.

При вводе отрицательного числа, программа проверит условие number > 0. Если условие не совпадает – мы увидим то же самое валидационное сообщение.

Но будут выполнены разные блоки кода, поэтому мы разделим негативный ввод на два класса эквивалентности: Класс 2 – отрицательные числа, Класс 3 – числа более 9.
Если добавить проверку на ввод недопустимых символов (буквы, спецсимволы, пробелы), то мы получим еще один класс эквивалентности. Итого у нас 4 класса:

  • Класс 1: Валидные данные от 0 до 9

  • Класс 2: Невалидные данные от -∞ до -1 (включительно)

  • Класс 3: Невалидные данные от 10 до +∞

  • Класс 4: Невалидные данные не числа.

Все классы эквивалентности делятся на три типа:

  • Класс, который имеет нижнюю и верхнюю границы (Класс 1)
  • Класс, который имеет только нижнюю границу (Класс 3)
  • Класс, который имеет только верхнюю границу (Класс 2)
2. Граничные значения

У каждого эквивалентного класса есть свои граничные значения. Для начала, давайте разберемся, что это такое.

По ISTQB граничные значения - это минимальное или максимальное значение, принадлежащее упорядоченной эквивалентной области.

Сложно и непонятно? Добро пожаловать в мир ISTQB. Давайте объясню простыми словами.

Граничные значения - это значения на пересечении классов.
Например, рассмотрим Классы 1, 2 и 3 из первого раздела.

Класс 1 включает в себя данные от 0 до 9. Граничные значения данного класса 0 и 9 (примечание: это не все граничные значения, дальше расскажу почему).

Класс 2 включает в себя значения от -∞ до -1. Нижней границы у него нет, а значит и нет нижнего граничного значения. А верхнее граничное значение равно -1 (минус один).

Класс 3 включает в себя значения от 10 до +∞. Верхней границы у него нет, а значит и нет верхнего граничного значения. А нижнее граничное значение - 10.
3. Методы анализа граничных значений

Существует два варианта определения граничных значений - это 2 boundary value analysis (2 BVA) и 3 boundary value analysis (3 BVA).

При анализе граничных значения методом 2 BVA мы берем одно значение внутри класса и одно ближайшее значение вне класса.

Для Класса 1:
  • нижние граничные значения будут: 0 (внутри класса) и -1 (ближайшее значение вне класса).
  • верхнее граничное значение будет 9 (внутри класса) и 10 (вне класса).
Для Класса 2:
  • нижней границы нет
  • верхие граничные зачения -1 (внутри класса) и 0 (вне класса)
Для Класса 3:
  • верхней границы нет
  • нижние значения 10 (внутри класса) и 9 (вне класса).
Как видите из примера, некоторые граничные значения для классов совпадают. Очевидно, что дублировать тесты не стоит. Т.е. для проверки поля ввода нам надо выполнить следующие тесты:

  • 0 (проверим Класс 1 и Класс 2)

  • -1 (проверим Класс 1 и Класс 2)

  • 9 (проверим Класс 1 и Класс 3)

  • 10 (проверим Класс 1 и Класс 3)

  • буквы, спецсимволы (Класс 4)

Проведя пять тестов при подборе граничных значений методом 2 BVA, мы можем утверждать, что проверили поле ввода (но, конечно же, мы не можем утверждать, что багов нет).
Второй вариант определения граничных значений - это метод 3 BVA.

При анализе граничных значения методом 3 BVA мы берем два значение внутри класса и одно ближайшее значение вне класса.

Для Класса 1:
  • нижние граничные значения будут: 0 и 1 (внутри класса), и -1 (ближайшее значение вне класса).
  • верхнее граничное значение будет 8 и 9 (внутри класса) и 10 (вне класса).

Для Класса 2:
  • нижней границы нет
  • верхние граничные значения -2 и -1 (внутри класса) и 0 (вне класса)

Для Класса 3:
  • верхней границы нет
  • нижние значения 11 и 10 (внутри класса) и 9 (вне класса).

4. Ловушка метода 2 BVA

По умолчанию используют 2 BVA анализ. Но иногда он может не найти баг!

Пример:
В коде мы должны проверить условие, что x ≥ 10.

При анализе методом 2 BVA мы проверим следующие значения: 9 и 10, где 9 - негативный тест, а 10 - позитивный.

Допустим, разработки ошибся и вместо знака поставил знак =. В таком случае наши тесты (9 и 10) не найдут баг:
  • 9 вернет ошибку, как мы и ожидали
  • 10 будет сохранено, как и ожидается

Но если бы мы использовали метод 3 BVA, то такой баг мы бы нашли, потому что мы бы дополнительно протестировали ввод числа 11, которое бы вернуло нам ошибку, хотя мы ожидали, что оно сохранится.

Поэтому, я советую не всегда полагаться на 2 BVA!

Ставьте лайки, если статья была вам полезна. А я пока подумаю над другими интересными темами!
Хотите узнать больше о тестировании - приходи на наш курс В тестировщики с нуля!
В тестировщики с нуля
  • 320$
    Lite
    Включает в себя:
    - Пакет В тестировщики с нуля
    - Интенсив по GIT
    - 1 месяц стажировки
  • 400$
    Medium
    Включает в себя:
    - Пакет В тестировщики с нуля
    - Интенсив по GIT
    - Доступ к вебинарам
    - 2 месяца стажировки
  • 540$
    Maximum
    Включает в себя:
    - Пакет В тестировщики с нуля
    - Интенсив по GIT
    - Доступ к вебинарам
    - Курс Тестирование API
    - 4 месяца стажировки

Учимся отличать тест-план, тест-кейсы и чек-листы на примерах.
Полезные ресурсы и советы для поиска работы
Выпускник школы QaLearning рассказывает про свой путь обучения, поиска работы и прохождения собеседований. Вы получите много дельных советов!