2023-02-17 20:06:03
Галопом по Европам. Обсудим тесты. По-хорошему любое приложение и любой функционал должны тестироваться. У тестов много плюсов:
- повышают качество продукта
- уменьшают количество ошибок, а также вероятность посадить багу при внесении правок в код
- экономят время разработки в будущем, которое потратили бы на отладку и исправление багули или недоработки
- по хорошо написанным тестам можно разбираться, что делает тот или иной кусок кода
- готовые тесты упрощают написание новых тестов
- когда есть тесты, не так страшно вносить изменения в проект
Глобальное деление тестов на группы:
-
Ручные тесты и
автотесты. Понятное дело, что автотесты надежнее, их можно запускать при релеавантных изменениях автоматически, на них сложнее забить, их можно удобно править и переиспользовать
- Черный ящик(
blackbox)/белый ящик(
whitebox). Для blackbox мы не знаем внутреннее устройство, но знаем, какие результаты мы должны получать при тех или иных условиях. Whitebox для нас это то, чей код мы видели как написан, или сами его и писали. Серый ящик — что-то между
- Уже написанные тесты, и те, которых еще нет
Кратенько про
ручные тесты.
Тестировщик: по плану тестирования прогоняем критические пользовательские сценарии, если что-то идет не так - на доработку
Разработчик: пук сереньк на тестовой среде или локально, если что-то не так, то пытаемся разобраться
Далее все по большей части про
автотесты. Некоторые виды тестов:
-
юнит тесты — тестируем небольшую часть кода, функцию или модуль
-
интеграционные — проверяем работу несколько частей, от взимодействия между модулями до взаимодействия нескольких сервисов
-
smoke тесты — минимальный набор тестов, позволяющий понять, что у нас что-то да работает, дым не идет. Источники в интернетах утверждают, что это пошло от метода проверки утечки в трубах, которые наполняли дымом и на глазок проверяли, что утечек нет. Другая версия нравится мне чуть больше, проверяем работоспособность прибора, воткнув его в розетку, пошел дым — не работает
-
регрессионные тесты — проверяют на не ухудшение работоспособности программы
-
перфоманс тесты — проверяем, какую нагрузку держит наш сервис
Если тесты так хороши, почему их не все любят? Почему их иногда может не быть? Почему не внедрить TDD(test-driven development) и сначала писать тест assert -1 == f() и функцию f вида return -1?
- тесты достаются компании не бесплатно, это либо отдельные люди, которые занимаются именно тестированием, либо разработчики, которые эти тесты пишут (умножаем на два, вспоминая про blackbox/whitebox)
- время, стремление к наискорейшему релизу
- недостаток знаний, как протестировать того самого монстра, который уже получился
- наплевательское отношение к тестам, как со стороны разработчиков, так и со стороны тимлида/продукт менеджера
- излишняя самоуверенность в своих силах
- обошлись ручным тестированием, но не автоматизировали
Best Practices:
- добавили функцию, написали новый класс — пишем тест
- исправляем багу — должен появиться регрессионный тест
- до рефакторинга — нельзя рефакторить без тестов, если их нет, то пишем
- названия тестов должны говорить сами за себя, test_get_users_200_empty_list намного лучше названия test_success
- тесты могут быть полны копипасты, главное чтобы читались хорошо и все было прозрачно, если пришлось залезть внутрь почитать
- не надо тестировать зависимости, все же что-то придется взять за основу, на которую можно положиться
- тесты не могут отсутствовать совсем, юнит тесты — это минимальный минимум
- не тестируй на проде
Кроме того, обычно тесты не появляются сами по себе, пока их не напишешь ты сам, так что вперед.
Тема тестирования сама по себе намного больше. Меня тесты спасали не раз, как при рефакторинге, так и при добавлении фич, ставь , если и тебя тоже
#пятиминутка #тесты
114 views17:06