среда, 15 октября 2014 г.

Про тестирование

Unit-тесты – тесты, проверяющие корректность работы отдельных модулей программы.

Плюсы unit-тестов
- Можно запустить сразу после внесения изменений в код – позволяют найти дефект сразу после его создания.
- Могут служить документацией к коду.
- Упрощают процесс рефакторинга.

Минусы unit-тестов
- Их надо писать.
- Их надо уметь писать.
- Их надо поддерживать.

Но даже если все компоненты по отдельности работают правильно, то это ещё ничего не значит.

Интеграционные тесты – тесты,  проверяющие корректность взаимодействия отдельных модулей друг с другом.

Плюсы интеграционных тестов
- Находят баги, которые не могут быть обнаружены unit-тестами.
- Запускаются после сборки проекта и позволяют быстро обнаружить проблемы взаимодействия.

Минусы интеграционных тестов
- Все минусы unit-тестов

Приёмочные тесты – тесты, проверяющие работоспособность системы целиком. В реальном окружении, с реальными данными, на реальных сценариях.

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

Минусы приёмочных тестов
- Самые высокоуровневые – сложнее локализовывать проблему
- Занимают больше времени
- Обнаруживают проблемы с некоторой задержкой

Функциональное тестирование – проверка работы кода/продукта на соответствие требованиям. Проверка логики работы.

Конфигурационное тестирование на клиенте –  проверка работоспособности на различных конфигурациях. Для веб-сайтов – в разных браузерах.
Конфигурационное тестирование сервер-сайда – проверка работоспособности в окружении, максимально идентичном продакшену (железка, OS, утилиты, библиотеки, конфиги, версии).

Нагрузочное тестирование – проверка работоспособности под нагрузкой (одновременная обработка большого потока запросов).

Тестирование производительности – проверка скорости работы системы.
Причём:
- Необходимо измерить длительность полного цикла «запрос-ответ». Оценить общее время, обратить внимание на отдельные этапы.
- То же самое – под нагрузкой
- В пользовательских условиях (сетевые условия).

Тестирование безопасности.

Тестирование юзабилити – тестирование удобства использования.

Тестирование стабильности – тестирование стабильности работы под нагрузкой, длительное время.

До кучи:
– Volume тестирование
– Stress/Recovery тестирование
– Spike тестирование
– Localization тестирование
– Compatibility тестирование
– и т. д. и т. п.

Способы тестирования
Ручное тестирование – выполнение тестов вручную или с помощью скриптов. Ручной анализ результатов.

Плюсы ручного подхода
- Более информативно – замечаются дефекты рядом

Минусы ручного подхода
- Долго
- Дорого

Автоматическое тестирование – выполнение с помощью скриптов или инструментов. Оценка результатов проводится автоматически.

Плюсы неручного подхода
- Удобно и легко

Минусы неручного подхода
- Тесты нужно писать и поддерживать
- Тесты выполняются «в лоб»
- Сами тесты/скрипты/инструменты могут содержать баги и порождать ложные результаты

Инструменты

Функциональное, приемочное тестирование:
- Selenium
- TestComplete

Функциональное, unit тестирование
- подбирается под используемый язык

Нагрузочное тестирование/тестирование производительности:
- Яндекс.Танк
- Jmeter:

Как сымитировать плохую сеть:
- Fiddler
- Charles
- Утилита tc: man tc

Комментариев нет:

Отправить комментарий