← Назад к вопросам

Какие знаешь примеры эквивалентного класса?

1.0 Junior🔥 261 комментариев
#Работа с дефектами#Теория тестирования

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

# Примеры эквивалентных классов в тестировании программного обеспечения

Понятие эквивалентных классов

Эквивалентный класс (Equivalence Class) — это метод тестирования черного ящика, при котором все возможные входные данные разделяются на группы (классы), где каждое значение внутри одного класса должно обрабатываться программой одинаково. Это позволяет сократить количество тестов до минимум одного представителя от каждого класса.

Основной принцип: Если тестовый случай из класса обнаруживает дефект, то все остальные значения из этого класса, вероятно, приведут к тому же результату (и наоборот).

Классификация эквивалентных классов

// Структура разделения входных данных
interface EquivalenceClass {
  validClasses: Array<any>;     // Корректные (валидные) значения
  invalidClasses: Array<any>;   // Некорректные (невалидные значения)
}

Ключевые примеры эквивалентных классов

1. Поле ввода числового диапазона

Пример: Поле для ввода возраста пользователя от 18 до 100 лет.

# Пример разделения на эквивалентные классы
age_input_field = {
    "valid_equivalence_classes": [
        "Минимальная граница": 18,
        "Среднее значение": 59,
        "Максимальная граница": 100
    ],
    "invalid_equivalence_classes": [
        "Нижняя граница - 1": 17,
        "Верхняя граница + 1": 101,
        "Отрицательное число": -5,
        "Символы": "abc",
        "Дробное число": 25.5,
        "Пустое значение": ""
    ]
}

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

  • Валидные: [18, 19-99, 100]
  • Невалидные: [<18, >100, нечисловые значения]

2. Поле ввода с ограниченным набором значений

Пример: Выбор страны из выпадающего списка (Россия, США, Германия).

public class CountrySelectionExample {
    // Валидные эквивалентные классы
    String[] validCountries = {"Россия", "США", "Германия"};
    
    // Невалидные эквивалентные классы
    String[] invalidInputs = {
        "Канада",      // Страна не из списка
        "123",         // Числовое значение
        "",            // Пустое значение
        null,          // Null значение
        "Россия ",     // С пробелом
        "россия"       // В нижнем регистре
    };
}

3. Поле для ввода email-адреса

Пример: Валидация email в форме регистрации.

// Примеры эквивалентных классов для email
const emailValidation = {
  validClasses: [
    'user@example.com',
    'user.name@example.com',
    'user+tag@example.co.uk',
    'u@example.io'
  ],
  invalidClasses: [
    // Неправильный формат
    'userexample.com',        // Отсутствует @
    'user@example',           // Отсутствует домен
    'user@.com',              // Отсутствует доменное имя
    '@example.com',           // Отсутствует имя пользователя
    
    // Специальные случаи
    'user@example..com',      // Двойная точка
    'user@example.c',         // Слишком короткий домен
    'user name@example.com',  // Пробел в имени
    'user@example_com'        // Подчеркивание в домене
  ]
};

4. Тестирование функционала скидок

Пример: Система предоставляет скидки в зависимости от суммы покупки.

-- Логика скидок:
-- 0-999 руб.: без скидки
-- 1000-4999 руб.: 5% скидка
-- 5000-9999 руб.: 10% скидки
-- 10000+ руб.: 15% скидки

-- Эквивалентные классы для тестирования:
-- Класс 1: 0-999 руб. (без скидки)
-- Класс 2: 1000-4999 руб. (5% скидка)
-- Класс 3: 5000-9999 руб. (10% скидка)
-- Класс 4: 10000+ руб. (15% скидка)
-- Невалидные: отрицательные значения, нечисловые значения

5. Поле ввода даты

Пример: Поле для ввода даты рождения (формат ДД.ММ.ГГГГ).

public class DateValidationExamples
{
    public class EquivalenceClasses
    {
        // Валидные классы
        public string[] ValidDates = 
        {
            "01.01.2000",      // Минимальная корректная дата (зависит от контекста)
            "15.06.1990",      // Середина диапазона
            "31.12.2023"       // Максимальная корректная дата
        };
        
        // Невалидные классы
        public string[] InvalidDates =
        {
            "32.01.2000",      // Несуществующий день
            "15.13.2000",      // Несуществующий месяц
            "15.06.10000",     // Неправильный год
            "29.02.2023",      // 29 февраля в невисокосном году
            "00.01.2000",      // Нулевой день
            "abc.def.ghij",    // Нечисловые значения
            "15/06/2000",      // Неправильный разделитель
            ""                 // Пустое значение
        };
    }
}

Практические рекомендации по выделению эквивалентных классов

Правила выделения:

  1. Для каждого условия в спецификации создайте два класса:

    • Класс валидных значений (удовлетворяющих условию)
    • Класс невалидных значений (не удовлетворяющих условию)
  2. Для диапазонов значений создавайте три класса:

    • Ниже диапазона (невалидный)
    • Внутри диапазона (валидный)
    • Выше диапазона (невалидный)
  3. Для наборов значений создавайте:

    • Класс для каждого значения (валидный)
    • Класс для значений вне набора (невалидный)
  4. Для логических условий (true/false):

    • Класс true (валидный)
    • Класс false (валидный или невалидный в зависимости от контекста)

Пример процесса тест-дизайна:

def analyze_input_field(specification):
    """
    Анализ спецификации для выделения эквивалентных классов
    
    Аргументы:
        specification: Описание требований к полю ввода
    
    Возвращает:
        Словарь с валидными и невалидными классами
    """
    
    # Шаг 1: Определение граничных значений
    # Шаг 2: Выделение классов эквивалентности
    # Шаг 3: Выбор тестовых значений
    
    test_cases = {
        'valid': [],
        'invalid': []
    }
    
    return test_cases

Преимущества метода эквивалентных классов

  • Экономия времени за счет сокращения количества тестов
  • Системный подход к покрытию тестами
  • Обнаружение дефектов в обработке целых групп данных
  • Упрощение тестовой документации
  • Легкость воспроизведения и поддержки тестов

Ограничения метода

  • Не учитывает комбинации нескольких входных параметров
  • Может пропускать дефекты, связанные с конкретными значениями внутри класса
  • Требует четкой спецификации для корректного выделения классов
  • Не эффективен для тестирования сложной бизнес-логики

Заключение: Метод эквивалентных классов остается фундаментальным подходом в тестировании, который особенно эффективен при тестировании полей ввода, валидации данных и функционала с четко определенными правилами обработки входных данных. Грамотное применение этого метода позволяет достичь высокого покрытия тестами при минимальных затратах на разработку и поддержку тестового набора.

Какие знаешь примеры эквивалентного класса? | PrepBro