На основании чего вы определяете ожидаемый результат (expected behavior) при тестировании?

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

Ответ

Ожидаемое поведение системы определяется из иерархии источников, где приоритет отдается явным и формальным требованиям:

Источники в порядке приоритета:

  1. Явные требования: Функциональные спецификации (SRS), User Stories с критериями приемки (Acceptance Criteria), техническое задание (ТЗ).
  2. Техническая документация: Документация API (OpenAPI/Swagger), руководства пользователя, интерфейсные гайдлайны.
  3. Стандарты и протоколы: RFC для сетевых взаимодействий, отраслевые стандарты (например, PCI DSS для платежных систем).
  4. Общепринятые практики (Best Practices) и здравый смысл: Логичные UX-паттерны (например, сообщение об успешном сохранении), принципы работы с данными (идемпотентность методов PUT).

Процесс уточнения: Если информация в источниках 1-3 отсутствует или противоречива, я согласовываю ожидания с ответственными сторонами — продукт-менеджером, бизнес-аналитиком или lead-разработчиком. Это критически важно для избежания разночтений.

Пример: Определение ожидания для простой функции

# Тест для функции сложения. Ожидание основано на базовой математике (источник #4).
def test_addition():
    """
    Ожидаемое поведение: Функция add() должна возвращать
    математическую сумму двух чисел.
    Источник ожидания: Общеизвестный математический принцип.
    """
    result = add(2, 2)
    # Ожидаемый результат — 4
    assert result == 4, f"Ожидалось, что 2 + 2 = 4, но функция вернула {result}"

    # Дополнительные проверки на основе здравого смысла:
    assert add(0, 5) == 5  # Ноль не должен менять сумму
    assert add(-1, 1) == 0 # Сумма противоположных чисел равна нулю

Четкая привязка ожиданий к конкретному источнику позволяет обосновать тестовый сценарий и упрощает коммуникацию в случае обнаружения расхождений.