Ответ
Ожидаемое поведение системы определяется из иерархии источников, где приоритет отдается явным и формальным требованиям:
Источники в порядке приоритета:
- Явные требования: Функциональные спецификации (SRS), User Stories с критериями приемки (Acceptance Criteria), техническое задание (ТЗ).
- Техническая документация: Документация API (OpenAPI/Swagger), руководства пользователя, интерфейсные гайдлайны.
- Стандарты и протоколы: RFC для сетевых взаимодействий, отраслевые стандарты (например, PCI DSS для платежных систем).
- Общепринятые практики (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 # Сумма противоположных чисел равна нулю
Четкая привязка ожиданий к конкретному источнику позволяет обосновать тестовый сценарий и упрощает коммуникацию в случае обнаружения расхождений.