2009-06-15 4 views
13

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

  • Lintian,
  • разреженный,
  • Шинная,
  • РАТС,
  • Используя -Wall вариант.

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

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

ответ

6

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

4

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

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

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

+0

Да, у меня есть опыт работы с статическими шашками в мире Windows, поэтому я знаю о проблеме ложных срабатываний. – Makis

3

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

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

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