Готовлю доклад на очередной митап сообщества php программистов в Воронеже. Тема доклада “Зачем мне пирамида если я не Хеопс? Доклад про тестирование.” Бумага все стерпит, поэтому постараюсь структурировать свои мысли здесь в блоге.
Мой доклад для тех, кто занимается коммерческой разработкой.
Тезисы:
- Тесты стоят денег
- Тесты нужны не всегда
- Только эффективные тесты нужно писать
Навигация по серии статей:
Тесты стоят денег
Программист должен решать проблемы бизнеса и за это он получает зарплату. Сначала интересы бизнеса, а потом программиста. Это утверждение может задеть ваши нежные чувства, но оно достаточно эгоистично по своей сути. Если бизнес выигрывает благодаря вам, то вы не будете обижены. (Если вы работаете в нормальной компании)
- Тесты - это код, который вам придется написать ($)
- Тесты - это код, который вам придется поддерживать ($)
- Тесты - это код, который вам нужно будет запускать. Поддерживать инфрастуктуру, которая это делает ($)
- Тесты - требуют определенной квалификации сотрудников ($)
- Тесты - это то, что нужно мониторить и чем нужно управлять ($)
Это очевидные, но не для всех, истины. После перечисления всех этих ужасов в воздухе повис немой вопрос:
А нужны ли нам эти тесты?
Ответ: Нужны, но далеко не всегда и уж точно не все тесты одинаково полезны.
Тесты нужно писать тогда, когда они принесут ценность бизнесу, когда они будут выгодны. Выгода тестов особенно хорошо чувствуется на при длительном сопровождении кода. Ценность тестов(особенно хороших), тяжело переоценить если проект растет и развивается в течении нескольких лет.
Рисунок из книги Unit Testing Principles, Practices, and Patterns / Vladimir Khorikov.
Тесты нужны не всегда
Сколько кода из всего написанного будет поддерживаться в течении времени? 1%?
Только единицы стартапов выживают и выстреливают. Остальные погибают, стартап - это проверка бизнес модели. Если код все равно будет выброшен, то владелец стартапа вам был бы очень благодарен, если бы вы сэкономили ему несколько тысяч долларов и выбросили меньше кода. А что если стартапу не хватило совсем немного ресурсов чтобы выжить и превратиться в бизнес? Что, если вы убили потенциально успешный бизнес своими тестами?
Даже у успешных проектов есть сотни и тысячи функций, которые не “выстреливают”. Пользователи их не используют. Даже в успешном проекте, было бы полезнее вместо выброшенного кода потратить больше денег, например, на маркетинг.
Да что я, давайте послушаем экспертов.
Карл Маркс:
Никакая вещь не может быть стоимостью, не будучи предметом потребления. Если она бесполезна, то и затраченный на нее труд бесполезен, не считается за труд
И еще цитату:
Все время спрашивайте себя: “Не х*ню ли я делаю?”
Только эффективные тесты нужно писать
Считаю, что программисту неплохо думать о своей финансовой эффективности для бизнеса. Особенно в маленьких кампаниях, когда нет экспертов, которые вам точно скажут какой код вам сегодня нужно написать.
Бывают тесты, которые действительно ускоряют разработку уже сейчас. Искусство - это находить как можно больше таких ситуаций и тем самым повышать свою продуктивность и эффективность.
Бывают тесты, которые требуют усилий($) для написания. Рефакторинга кода. Времени на проектирование. Времени на поддержку. Но эти усилия оказываются не напрасными с течением времени. Исскуство - видеть эти места.
А бывают ужасные тесты. На которые вы потратите время при проектировании. Потом они будут ломаться при самом мелчайшем рефакторинге. Искуство - избегать таких тестов.