Testing
Что это
Тестирование - комплекс действий для получения информации о соответствии продукта требованиям.
Основные термины
Качество – то на сколько продукт соответствует требованию.
Валидация(validation) - проверка на соответствие требованиям продукта. Правильный ли продукт.
Верификация(verification) - проверка на соответствие продукта условий технологии, выполнение задач,
сроки - правильная ли разработка.
Ошибка – несоответствие производимого продукта требованиям, прямым или косвенным.
Виды тестирования
- Unit - модульное тестирование. Unit - воспринимать как поведение.
- Integration - проверка совместной работы нескольких классов/модулей.
- System - проверка всей системы в целом. Обычно запускается как отдельное приложение для DEV среды.
- End-to-End(chain testing) - как System tests но запускается через user interface имитирую реальные запросы(user case).
- Load(performance) - проверка нагрузки приложения.
Для нагрузочных тестов нужно оценить сколько реально запросов в секунду могут делать клиенты.
Не переоценивать это число.
- Penetration(pen) - проверка реакции на внешнюю атаку.
- Functional testing - вид тестирования программного обеспечения, который проверяет, соответствует ли
система или ее компоненты заявленным функциональным требованиям. Его виды:
- Smoke-тестирование – базовая проверка работоспособности.
- Регрессионное тестирование – проверка, не сломалось ли что-то после изменений.
- Интеграционное тестирование – проверка взаимодействия между модулями.
- Приемочное тестирование (UAT) – тестирование перед выпуском продукта.
Шаги работы с багом
- R: Replicate (воспроизведите). Найдите условия, при которых баг точно воспроизводится.
- I: Isolate (локализуйте). Сократите количество шагов воспроизведения до минимума.
- M: Maximize (максимизируйте). Продемонстрируйте, какой вред может причинить такой баг.
- G: Generalize (генерализуйте). Выясните, где еще и как еще этот баг может вызвать проблему.
- E: Externalize (сделайте видимым). Сделайте так, чтобы о баге услышали все заинтересованные лица.
- A или N: And use Neutral tone (будьте нейтральны). Будьте беспристрастны, держите свое личное мнение
(как это могли допустить???) при себе – не надо искать виноватых.
Test coverage
Test coverage - тестовое покрытие кода - проверка какое количество классов, методов, строк было
задействовано при прохождении тестов.
Основные сущности
Mocks
Используйте Mock для:
- Проверки контракта между тестируемым кодом и зависимостями.
- Проверки того, что методы зависимостей вызываются корректное число раз.
- Проверки корректности параметров, с которыми вызывается код зависимостей.
Следует использовать только для
- Репозитории
- DAO классы
- Внешние источники
Stubs
Используйте Stub для:
- Предоставления предопределённых результатов вызовов.
- Выполнения предопределённых действий, ожидаемых от зависимостей, таких как выбрасывание исключений.
Spies
Бойтесь шпионов (Spy). Как сказано в документации Spock. Подумайте дважды, прежде чем использовать этот
механизм. Возможно, вам стоит изменить дизайн вашего решения и реорганизовать ваш код.
Используйте Spy для:
- Тестирования легаси кода, который невозможно протестировать другими методами.
- Проверки того, что методы зависимостей вызываются корректное число раз.
- Проверки корректности передаваемых параметров.
- Предоставления предопределённого ответа от зависимостей.
- Выполнения предопределённых действий в ответ на вызовы методов зависимостей.
Различие Mock и Stub
Stub предназначены для получения нужного состояния объекта, а mock применяются для проверки ожидаемого
поведения тестируемого объекта.
Советы для тест кейсов
ТЗ
- Проверка на наличие - все ожидаемые поля.
- Проверка на null/empty - все ожидаемые поля.
- Проверка на null/empty - все опциональные поля.
- Проверка на null/empty - все не ожидаемые поля.
- Проверить формат - если он есть.
- Проверить ограничения - если они есть.
Spring
DateTime
- Проверка требуемого формата.