TDD

Семь лет назад прочитал книгу Кента Бека про экстремальное программирование и меня конкретно вштырило. До сих пор помню как поехал гулять на Невский, открыл книгу в метро и не смог остановиться. Была прекрасная погода, светило солнце, на Невском людно и шумно, а я иду уставившись в телефон, читаю про парное программирование и TDD и мне так хорошо на душе, что никакого солнца и Невского больше не нужно.

Короче говоря, после этой книги я начал писать код только по TDD — red, green, refactoring. Сначала падающий юнит-тест, потом минимальный код, который заставляет тест проходить, потом рефакторинг. Любая фича, любой даже самый мелкий кусочек кода начинался с теста.

От TDD ловишь кайф. После каждого превращения теста из "красного" в "зелёный" выбрасывается дофамин и возникает чувство восторга. На этот кайф подсаживаешься, он мотивирует разрабатывать как можно больше фичей и никогда не останавливаться.

Когда я перешёл из бэкенда во фронтенд, то взял практику TDD с собой. Мне нужно было написать терминал самообслуживания для кафе вроде тех, которые используются во "Вкусно и точка", "Ростикс" и "Бургер Кинг".

"Говно вопрос!", — подумал я и начал фигачить привычный мне red, green, refactoring. Через месяц первая версия приложения была готова. Покрытие тестами — сто процентов. Красота!

Мы выставили пилотный терминал в кафе, и через несколько недель нас попросили внести изменения в UI. Менять приложение после отзывов реальных пользователей — это очень круто, я такое люблю. Но в этот раз внутри меня бушевало сопротивление любым изменениям. Я не хотел менять UI.

После рефлексии до меня дошло. Во фронтовых приложениях, в отличие от бэка, больше движущихся частей, которые сильнее связаны. Такова природа GUI. Из-за этого юнит-тестов было так много, что любое изменение в UI тянуло за собой кучу дополнительной работы.

Меня словно окатили холодной водой. Я понял, что сопротивлялся не изменениям в UI, я сопротивлялся переписыванию юнит-тестов. Осознание далось болезненно. TDD приносил мне море удовольствия, но не выдержал проверку фронтендом.

От TDD пришлось отказаться. Но эти два года с TDD научили меня главному — сначала представлять результат, а только потом действовать.