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

Несмотря на простоту и полезность, обычная пирамида не дает тестировщику достаточно информации, которая необходима для масштабирования наборов, когда нужно учитывать множество нюансов и идти на компромиссы. Для эффективного масштабирования тестового набора нужно выходить за пределы стандартной пирамиды.
Мнемоника SMURF — простой способ запомнить 5 характеристик, которые необходимо учитывать при балансировке растущего тестового набора:
- Скорость (Speed): Юнит-тесты намного быстрее других и могут выполняться чаще — так быстрее находятся баги.
- Удобство обслуживания (Maintainability): Совокупные затраты на отладку и поддержку тестов (всех типов) быстро растут. В большой системе больше кода, а это значит, что система больше подвержена изменению зависимостей и дрейфу требований, что, в свою очередь, приводит к увеличению объема работ по обслуживанию.
- Утилизация ресурсов (Utilization): Тесты, использующие меньше ресурсов (память, диск, процессор), обходятся дешевле. Хороший тестовый набор оптимизирует использование ресурсов таким образом, чтобы оно не росло сверхлинейно с увеличением количества тестов. Юнит-тесты обычно обладают отличными характеристиками утилизации, потому что в них используются тестовые дублеры, и проверяются маленькие части системы.
- Надежность (Reliability): Надежные тесты падают только при обнаружении реальной проблемы. Разбор нестабильных тестов в поисках проблем требует времени и ресурсов на повторное выполнение тестов. По мере роста системы и количества тестов в ней растет неопределенность (и, следовательно, нестабильность тестов), и ваш набор теряет надежность.
- Точность (Fidelity): Точные тесты соответствуют реальным условиям работы системы (например, реальной нагрузке на БД и реальному трафику) и лучше предсказывают поведение на продакшене. Интеграционные и сквозные тесты лучше отражают реальные условия, в то время как юнит-тесты вынуждены моделировать свое окружение, что приводит к расхождению между ожиданиями от тестов и реальностью.

Радарная диаграмма “Типы тестов vs Свойства тестов (то есть SMURF). Чем дальше от центра, тем лучше.
Во многих случаях отношения между осями SMURF противоречивы: улучшение по одной оси может ухудшить другие. Однако если вы видите возможность улучшить одну или несколько осей без ущерба для других, то следует это сделать.