Сравнение инструментов анализа статического кода в Linux? [закрыто
-
13-09-2019 - |
Вопрос
Кто -нибудь сделал какие -либо сравнения по инструментам анализа статического кода, доступными для Linux? Каковы сильные и слабые стороны следующих инструментов:
- Линьян,
- Редкий,
- Шине,
- Крысы,
- Используя опцию -wall.
Считаете ли вы, что использование только одного из этих инструментов является адекватным?
Я не ищу рекомендаций (я могу найти много из них), но прямое сравнение между доступными инструментами.
Решение
Есть, конечно Список Википедии. Анкет Этот список - это просто список, а не сравнение, а один из ссылки На странице, кажется, по крайней мере частично отвечает на ваш вопрос и (очень кратко) упоминает пару перечисленных вами программ.
Другие советы
Использование -Wall должно быть само собой разумеющимся для каждого разработчика C. Кроме того, дополнительно использование -Wextra может быть хорошей идеей.
Splint может найти другие потенциальные недостатки в вашем приложении, но в большинстве случаев (!).вне/ или же /неиспользованный/ В вашем коде, так что шина не кричит на вас. С помощью шины вы должны отфильтровать предупреждения, которые не важны для вас, в противном случае вы потратили слишком много времени на анализ и прокрутку множества сообщений.
Обратите внимание, что эти инструменты выполняют только статическую проверку кода. Вы должны использовать Valgrind, чтобы найти утечки памяти времени выполнения.
Я использовал шину пару раз и нашел его слишком многословным: я отключил большую часть предупреждений. Я думаю, что этот инструмент может дать интересные результаты, если вы правильно аннотируете свой код. Без кодовой аннотации этот инструмент не очень полезен.
Я иногда использую редкий и считаю его ценным инструментом. Он обеспечивает обертку вокруг GCC, называемой «CGCC». В результате легко запустить разреженную программу, даже если она содержит много исходных файлов (export
CC=cgcc
и вуаля). Эта программа работает лучше всего, если вы анализируете исходный код ядра.
В качестве сиденота я также использую PMCCabe на регулярной основе. PMCCabe не является статическим анализатором: он рассчитывает цикломатическую сложность. Это может помочь вам найти самые сложные функции в вашей программе. Эти функции, вероятно, будут подвержены ошибкам и трудно проверить.