Как применить технику эквивалентного разбиения для тестирования поля логина?

«Как применить технику эквивалентного разбиения для тестирования поля логина?» — вопрос из категории Техники тест-дизайна, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Техника эквивалентного разбиения (Equivalence Partitioning) позволяет сократить количество тестов, группируя входные данные в классы, где поведение системы ожидается одинаковым.

Шаги для поля логина:

  1. Определить классы эквивалентности (КЭ):
    • Валидный КЭ: Корректный логин, соответствующий всем требованиям (например, user@example.com или valid_username).
    • Невалидные КЭ:
      • Пустая строка.
      • Строка короче минимально допустимой длины.
      • Строка длиннее максимально допустимой длины.
      • Содержит запрещённые символы (пробелы, недопустимые спецсимволы).
      • Не соответствует формату (например, не email, если требуется).
  2. Выбрать по одному представителю из каждого класса для тестирования.
  3. Дополнить проверкой граничных значений (Boundary Value Analysis) на стыках классов (например, минимальная и максимальная длина).

Пример тест-кейсов на Python:

def validate_login(login: str) -> bool:
    # Примерная логика валидации
    if not login:
        return False
    if len(login) < 3 or len(login) > 100:
        return False
    if " " in login:
        return False
    # ... другие проверки
    return True

# Тесты для представителей классов эквивалентности
def test_equivalence_partitioning():
    # Валидный класс
    assert validate_login("correct.user") == True
    # Невалидные классы
    assert validate_login("") == False          # Пустое поле
    assert validate_login("ab") == False        # Слишком коротко (граница)
    assert validate_login("a" * 101) == False   # Слишком длинно (граница)
    assert validate_login("user name") == False # Запрещённый символ (пробел)

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