Сравнение инструментов статического анализа кода в Linux?

Проводили ли какие-либо сравнения с инструментами анализа статического кода, доступными для Linux? Каковы сильные и слабые стороны следующих инструментов:

  • Lintian,
  • разреженный,
  • Шинная,
  • Крысы,
  • Использование опции -Wall.

Вы считаете, что использование только одного из этих инструментов является адекватным?

Я не ищу рекомендации (я могу найти много таких), но прямое сравнение между доступными инструментами.

Ответы

Ответ 1

Существует, конечно, список википедии. Этот список - это просто список, а не сравнение, но один из ссылок на странице, по крайней мере, частично отвечает на ваш вопрос и (очень кратко) упоминает пару программ, которые вы указали.

Ответ 2

Использование -Wall должно быть само собой разумеющимся для каждого c-разработчика. Кроме того, использование -Wextra может быть хорошей идеей.

Splint может найти другие потенциальные недостатки в вашем приложении, но в большинстве случаев (!) он печатает ложные предупреждения, поэтому вам нужно понять, что означает шина с каким предупреждением, и в большинстве случаев вам приходится вставлять аннотации, такие как/out/or/unused/в вашем коде, поэтому шина не кричит на вас. С шиной вы должны отфильтровывать предупреждения, которые не важны для вас, иначе вы потратили слишком много времени на анализ и прокрутку множества сообщений.

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

Ответ 3

Я использовал шину пару раз и нашел ее слишком многословной: I отключено большинство предупреждений. Я думаю, что этот инструмент может обеспечить интересные результаты, если вы правильно комментируете свой код. Без кода аннотация, этот инструмент не очень помогает.

Я иногда использую разреженный и рассматриваю его как ценный инструмент. Это обеспечивает обертка вокруг gcc, называемая "cgcc". В результате его просто запустить разреженный в программе, даже если он содержит много исходных файлов (export CC=cgcc и voilà). Эта программа работает лучше всего, если вы анализируете Исходный код ядра.

В качестве побочного я также регулярно использую pmccabe. pmccabe не является статический анализатор: он вычисляет циклическую сложность. Это может помочь вам найти самые сложные функции в вашей программе. Эти функции вероятно, будет подвержен ошибкам и трудно проверить.