Проблемы
Тестирование приложений представляет собой достаточно нетривиальную задачу, основные причины этому следующие:
- Зависимость от внешнего окружения (ОС, браузер, Web API, web сервисы) — чем больше зависимостей, тем сложнее воспроизвести сценарий.
- Сложный UI — даже самые тривиальные паттерны взаимодействия достаточно сложно описать и автоматизировать с нуля.
- Асинхронность — сетевые запросы, UI отрисовка, анимации, всё это усложняет верификацию поведения и взаимодействие с интерфейсом.
- Комплексная структура — современные приложения обладают сложной структурой, большим количеством зависимостей и комплексной системой сборки. Тесты наследуют данную сложность.
- Адаптивность — UI зачастую адаптивен, как к устройствам, так и к более тонким настройкам пользователя. Такие параметры также должны учитываться при тестировании.
- Производительность — приложение это комплексная и распределённая система с большим набором компонентов. Чем больше их задействовано, тем медленнее выполняется тест.
Также отдельно стоит отметить отсутствие чётких правил тестирования, которые порождают за собой такие проблемы как:
- Низкая защита — поведение проверяется не полностью.
- Вязкость — тесты писать сложно и долго.
- Отчужденность — тесты пишутся после основного функционала, либо в конце проекта по навязанным причинам.
- Недостоверность — выражается в случае ложно-отрицательных результатов. Тесты проходят, но код сломан.
- Хрупкость — проявляется в случае ложно-положительных результатов. Тесты падают, но код работает.
примечание
Плохие тесты — это не проблема инструментов, это следствие отсутствия понятной и измеримой модели тестирования.
Рассмотрим основные метрики, с помощью которых можно измерить качество тестов в конкретном проекте.