Верификация и валидация
Два похожих слова, за которыми стоят два разных вопроса к продукту.
Верификация отвечает на вопрос «делаем ли мы продукт правильно?» (по спецификации), а валидация — «делаем ли мы правильный продукт?» (тот, что нужен пользователю).
Две стороны качества
Можно безупречно реализовать функцию по спецификации — и всё равно сделать бесполезный продукт, если спецификация ошибочна. Поэтому различают две проверки.
| Аспект | Верификация | Валидация |
| Вопрос | Правильно ли построено? | То ли построено? |
| С чем сверяем | С требованиями и дизайном | С реальными потребностями пользователя |
| Когда | В процессе разработки | Ближе к готовому продукту |
| Пример | Код соответствует спецификации | Продукт решает задачу клиента |
Запоминалка
«Verification — building the thing right. Validation — building the right thing». Верификация смотрит внутрь (соответствие спецификации), валидация смотрит наружу (соответствие потребности).
Пример, где код верен, а продукт — нет
Допустим, в спецификации сказано: «комиссия — 5% от суммы». Программист реализовал это идеально. Верификация пройдена. Но если бизнесу на самом деле нужна была фиксированная комиссия, валидация провалена — построили не то.
def fee(amount):
"""Комиссия по спецификации: 5% от суммы."""
return amount * 0.05
# ВЕРИФИКАЦИЯ: код соответствует написанной спецификации (5%)
assert fee(1000) == 50
assert fee(0) == 0
print("Верификация пройдена: код соответствует спецификации")
# ВАЛИДАЦИЯ: а нужна ли была вообще процентная комиссия?
business_needs_fixed_fee = True # бизнес хотел фиксированную комиссию
if business_needs_fixed_fee:
print("Валидация провалена: построили не то, что нужно бизнесу")
Вывод:
Верификация пройдена: код соответствует спецификации Валидация провалена: построили не то, что нужно бизнесу
Зачем различать
Модульные и интеграционные тесты — это в основном верификация: они проверяют код против спецификации. А приёмочное тестирование, демо заказчику, бета-тесты — это валидация: показывают, решает ли продукт реальную задачу. Здоровая команда занимается обеими: и собирает продукт правильно, и собирает правильный продукт.
Итог
- Верификация — соответствие спецификации («строим правильно»).
- Валидация — соответствие потребности («строим правильное»).
- Можно пройти верификацию и провалить валидацию — нужны обе.