Программисты не пишут юнит тесты? Наверняка вы попадали в такую ситуацию: приходите на проект, а тестов нет. На мой взгляд, это выстрел себе в ногу.
Как же донести пользу малых (юнит, модульных) тестов до программиста?
Я сталкивался с аргументацией от самих программистов
"Если я буду писать тесты, то тогда зачем ты?"
"Если ты не можешь в голове держать страницу кода, то ты так себе программист"
"Малые тесты нужны для не компилируемых языков".
Если у вас есть еще примеры, пишите в комментариях.
Итак, Перед нами стоит тяжелая задача, убедить или вообще научить писать хорошие малые тесты.
✅Вот несколько весомых аргументов в пользу того что юнит тесты можно и нужно писать программистам:
- уверенность в качестве кода;
- тестируемость кода;
- прозрачная архитектура;
- контролируемый рефакторинг…
На самом деле преимуществ гораздо больше.
❗Но есть и недостатки такого подхода:
- больше времени на разработку;
- при недостатке опыта тесты могут быть бесполезными;
- не готовая экосистема для тестов.
Теперь пройдемся по каждому пункту плюсов по порядку.
Уверенность в качестве кодаКаждый разработчик уверен в качестве своего кода. Но, если у него есть за спиной тест-сьют с тестами которые покрывают бизнес логику, то эта уверенность становится более обоснованной.
Тестируемость кодаЭто одна из важнейших характеристик качества, которая не касается функциональности продукта. Но этот аспект влияет напрямую на разработку. А именно тестируемость кода ускоряет процесс разработки за счет того, что каждую фичу нам тестировать проще.
Прозрачная архитектураВсе логично и взаимосвязано. Когда мы получаем тестируемость кода, то и архитектура приложения становится более ясной.
Контролируемый рефакторингНапомню, что рефакторинг — это изменение внутренней структуры кода без изменения поведения системы. И, как я уже говорил в постах, тесты должны проверять поведение системы. Это позволяет нам спокойно делать рефакторинг при наличии хорошего тест-сьюта не боясь разломать систему.
Теперь перейдем к недостаткам и тут я сразу приведу контраргументы.
Больше времени на разработку Конечно, тесты это строчки кода, которые нужно написать и время на разработку увеличится. Но если поразмыслить чуть шире, то мы можем посчитать предотвращение багов, улучшение тестируемости системы и остальные факторы, как то что нам ускоряет и упрощает разработку. И в итоге получается, что долго запрягаем, но быстро едем!
Недостаток опыта в написания тестовЭта проблема возникает, если разработчик не уделял время написанию тестов и вдруг ему надо это делать. С нуля времени на это потребуется много. Но, к счастью, есть мы! И наша обязанность это сделать процесс тестирования для разработчиков простым и понятным!
Не готовая экосистема тестовВ целом пункт плавно вытекает из предыдущего, это и есть наша работа — подготовить и настроить окружение для тестов, взаимодействуя с программистом.
🤝В этом вопросе нет противоборства. Мы все на одной стороне наши цели и цели программистов совпадают. Малые тесты ускоряют разработку, помогают раньше обнаруживать очевидные баги. Но самое большое преимущество: юнит тесты высвобождают время для более сложных и детальных тестов. В итоге это приводит к более надежному и качественному приложению.
А вы помогаете разработчиками с юнит тестами?
#qaroomThoughts