В разработке ПО важно обеспечивать чистоту и качество кода, чтобы проект оставался легко поддерживаемым.

Однако в ежедневной работе разработчики часто сталкиваются с необходимостью быстро решить задачу, и тогда они начинают оставлять в коде комментарии типа 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 комментария

  • их количество

  • средний возраст TODO комментариев

  • имя автора наибольшего числа подобных комментариев

Дополнительная информация, которую выводит Todoctor
Дополнительная информация, которую выводит Todoctor

А также сортируемый список TODO комментариев в вашем проекте:

Список TODO комментариев
Список TODO комментариев

Для того, чтобы использовать этот инструмент у себя в проекте, достаточно выполнить в корне проекта команду:

npx todoctor

И спустя какое-то время вы получите сгенерированный отчёт по вашему проекту.

Заключение

Технический долг может казаться незначительной проблемой, пока он не начинает замедлять разработку и ухудшать качество продукта. TODO комментарии часто упускаются из виду, но, как и любой долги, рано или поздно их придётся погашать.

Todoctor

Комментарии (2)


  1. JekaMas
    24.10.2024 12:37

    Обычно делаю ьак с новыми проектами с легаси:

    1. Проходим по всем todo и fixme.

    2. Если выглядит актуальным и ясно, что автор хотел, то заводим issue и удялянм комментарий из кода.

    3. Если автор комментария недрступен, не помним и группе тоже неясно, что тут хотелось, то удаляем комментарий.

    4. Добавляем линтер, запрещающий новын fixme и todo.

    5. Хочешь что-то починить или доделать после - заводи issue


  1. Vitaly_js
    24.10.2024 12:37

    А это действительно сейчас проблема? Сам не могу вспомнить, что бы когда-нибудь пользовался todo. Сейчас когда в команде есть проект менеджер и таск менеджер любые доработки либо сразу планируются/оформляются в виде задач, либо на месте принимается волевое решение, что данное решение является финальным.

    Иными словами, зачем это в коде оставлять, если любая активность разработчика должна быть запланирована пм и видна не только разработчику? Действительно все может быть настолько плохо, что в коде регулярно появляются todo?