​​Статический анализ кода

#разработка #комментарии



Одной из последних задач, которую я решал на текущем проекте, была добавление статического анализа кода. Перед началом работы казалось, что задача тривиальная и не вызовет каких-то сложностей. Но для того, чтобы посмотреть все обилие существующих решений, попробовать их и понять, какое из них работает потребовалось большое количество времени.



SpotBugs — достаточно распространенное решение, которое позволяет строить отчеты по текущей базе кода. Решение, которое не заработало у меня на проекте из-за наличия flavor.



Infer — решение для статического анализа от Facebook, основано также на отчетах. Кроме того, позволяет строить отчеты для вновь добавленного кода. Не смог оценить решение из-за странных несовместимостей с последней версией JDK. Но выглядит интересно.



Gnag — представляет из себя комбайн нескольких решений: checkstyle, pmd, findbugs, ktlint, detekt. Шикарное решение, которое работает сейчас на нашем проекте. Отдельной крутой фичей является анализ пулреквеста и добавление комментариев в нем, что позволяет встроить Gnag в CI.



SonarQube — представляет из себя утилиту для детального отчета на сервере, показа текущего статуса приложения и количества критичных багов. Очень удачное решение, однако стартовая версия имеет ряд ограничений: анализ только master-ветки, отсутствие интеграции в CI, отсутствие интеграции с GitHub. Но получать отчет и анализировать его вы сможете и в ней.



После поиска, я пришел к выводу, что есть очень мало бесплатных и хорошо работающих решений. Некоторые из них работают плохо, другие невозможно подключить к проекту из-за непонятных несовместимостей с текущими библиотеками. И я уже не говорю про встраивание их в процесс CI. Остаются только платные решения, благо цена на них не слишком высока для коммерческих проектов, а для open-source чаще всего и вовсе отсутствует.



А что вы используете на своих проектах?