Поиск мертвого кода в проектах nodejs

За последние пару месяцев мне вручили проект, который требовал очистки. Это проект JavaScript пятилетней давности, объем которого составляет около 20kLoC. Качество кода оставляет желать лучшего, да и мусора очень много.

Итак, чтобы очистить эту вещь, мы начали писать тесты, чтобы можно было провести рефакторинг без особого риска. Затем однажды мы потратили два дня на написание тестов для кода, который не был вызван. Автор не удалил старый код, но все клиенты перестали его использовать. Последовала легкая депрессия.

Мы решили, что нам нужно потратить некоторое время на поиск и удаление мертвого кода, желательно просто и эффективно. Мы хотели идентифицировать мертвый код, чтобы мы могли его удалить.

Теперь я знаю, что движок V8, на котором работает Node, поддерживает довольно много инструментовки кода. Покопавшись, я нашел проект c8. c8 - это то, что позволяет разработчикам тестов, таким как nyc, взаимодействовать с V8.

Мы хотели запустить его в производство в течение нескольких часов. Если есть код, который не используется, его можно удалить. Во время бега мы заметили замедление примерно на 20-40%. Помните об этом в более загруженных системах.

Единственная проблема, с которой я столкнулся, заключалась в том, как остановить сервер, когда он работает с инструментами. Оказывается, отправка ^ c программе, работающей под c8, мешает c8 и заставляет ее выдавать пустые отчеты. Доставка SIGTERM процессу c8 или базовому процессу узла дает тот же результат. Я установил обработчик сигналов в свой серверный процесс, который выполняет упорядоченный выход.

Чтобы написать этот пост, я попробовал то же самое на тестовом проекте, который у меня валялся. Это просто API, реализующий простой калькулятор. Я бы рекомендовал загрузить и поиграть с ним, пока вы не научитесь использовать это в своем программном обеспечении.

Код устанавливается и вызывается следующим образом:

$ npm install -g c8

$ c8 узел server.js

После выхода вы можете посмотреть результат. «C8 report» предоставит вам отчет в вашей консоли. Для чего-нибудь полезного я бы порекомендовал создать отчет HTML, например:

$ c8 --reporter = html отчет

Результатом является отчет в папке «Покрытие». Откройте его в браузере, и вы увидите что-то вроде этого. Это довольно понятно.

Результат должен быть знаком, если вы имели дело с участниками тестирования. Ниже приведен типичный пример кода, который не вызывается. Обратите внимание на зеленый столбец, в котором подсчитывается количество вызовов для этой конкретной строки.

Итак, имея это в вашем ящике с инструментами, вы сможете запускать свой проект под c8. Вывод поможет вам отследить мертвый код в вашем проекте nodejs.

Спасибо, что прочитали это. Удачной охоты.