В разработке ПО важно обеспечивать чистоту и качество кода, чтобы проект оставался легко поддерживаемым.
Однако в ежедневной работе разработчики часто сталкиваются с необходимостью быстро решить задачу, и тогда они начинают оставлять в коде комментарии типа TODO
или FIXME
для последующего улучшения.
Спустя какое-то время проект оказывается перегружен невыполненными задачами. Подобные комментарии накапливаются и превращаются в невидимый технический долг, который может негативно сказаться на проекте.
Проблема TODO Комментариев
Изначально подобные комментарии служат напоминанием о местах, требующих доработки или рефакторинга. Например, это может быть необходимость оптимизировать алгоритм, исправить временное решение, улучшить читаемость кода или заменить устаревший API. Однако в условиях сжатых сроков и приоритетов больше внимания получают «реальные» задачи в Jira, Trello или GitHub Issues.
TODO комментарии могут лежать в исходном коде годами. Со временем на них и вовсе перестают обращать внимание, часто из-за смены приоритетов или изменений в составе команды.
Но каждый такой комментарий — долг, который нужно выполнить. Чем больше долгов, тем сложнее контролировать технический долг.
Итак, какие проблемы имеют TODO
комментарии:
Невидимый технический долг: Накопление
TODO
комментариев создает иллюзию, что кодовая база в порядке, хотя на самом деле в ней скрыты потенциальные проблемы.Ухудшение качества кода: Нерешённые задачи приводят к появлению багов и сложности в поддержке.
Потеря контекста: Со временем разработчики могут забыть, что именно требовало доработки, особенно если команда меняется.
Что с этим Можно Сделать?
Технический долг — практически неизбежная часть процесса разработки, но важно уметь им управлять, чтобы он не превратился в серьёзное препятствие. Для этого можно проводить ревизию комментариев в ходе код-ревью, интегрировать задачи из TODO
комментариев в систему управления проектом и регулярно пересматривать приоритеты.
Регулярный рефакторинг, осознанное отношение к TODO
комментариям помогают поддерживать кодовую базу в здоровом состоянии.
Для анализа этой проблемы я написал утилиту Todoctor, которая помогает изучать долги и контролировать их накопление.
Как Работает Todoctor?
Todoctor — это CLI утилита, которая занимается обработкой и анализом TODO
комментариев в JavaScript и TypeScript коде, изучает историю появления этих комментариев и формирует отчёт в виде HTML.
На основании собранной информации Todoctor рисует график, как изменилось количество TODO
комментариев за N месяцев.
Такая визуализация мотивирует команду к действиям, предоставляя конкретные метрики и позволяя отслеживать прогресс в уменьшении технического долга.
Кроме этого также предоставляется дополнительная информация:
возраст самого старого
TODO
комментарияих количество
средний возраст
TODO
комментариевимя автора наибольшего числа подобных комментариев
А также сортируемый список TODO
комментариев в вашем проекте:
Для того, чтобы использовать этот инструмент у себя в проекте, достаточно выполнить в корне проекта команду:
npx todoctor
И спустя какое-то время вы получите сгенерированный отчёт по вашему проекту.
Заключение
Технический долг может казаться незначительной проблемой, пока он не начинает замедлять разработку и ухудшать качество продукта. TODO
комментарии часто упускаются из виду, но, как и любой долги, рано или поздно их придётся погашать.
Комментарии (2)
Vitaly_js
24.10.2024 12:37А это действительно сейчас проблема? Сам не могу вспомнить, что бы когда-нибудь пользовался todo. Сейчас когда в команде есть проект менеджер и таск менеджер любые доработки либо сразу планируются/оформляются в виде задач, либо на месте принимается волевое решение, что данное решение является финальным.
Иными словами, зачем это в коде оставлять, если любая активность разработчика должна быть запланирована пм и видна не только разработчику? Действительно все может быть настолько плохо, что в коде регулярно появляются todo?
JekaMas
Обычно делаю ьак с новыми проектами с легаси:
Проходим по всем todo и fixme.
Если выглядит актуальным и ясно, что автор хотел, то заводим issue и удялянм комментарий из кода.
Если автор комментария недрступен, не помним и группе тоже неясно, что тут хотелось, то удаляем комментарий.
Добавляем линтер, запрещающий новын fixme и todo.
Хочешь что-то починить или доделать после - заводи issue