2010-08-09 3 views
3

Мы планируем использовать Splint в качестве анализатора кода для нашей базы кода кода C. Но мы никогда не пробовали инструмент Splint раньше, поэтому мы хотим, чтобы ваш вклад в его benifts, плюсы и минусы.Анализаторы кода Splint для C

ответ

1

Прочтите this transcript для краткого обзора того, что он может сделать для вас.

8

Инструменты Lint полезны для поиска общих проблем и ошибок, которые, как правило, не учитываются в обзорах кода. Мое мнение таково, что вам нечего терять при анализе статического кода. Единственная нижняя сторона заключается в том, что вы можете получить много ложных срабатываний или предупреждений, которые могут быть несущественными (например, рекомендации стиля кодирования). Вам просто нужно развивать хорошие навыки фильтрации. Статические анализаторы также могут не поймать все, но эй лучше, чем ничего.

Вот белая бумага из института SANS, которые могут вас заинтересовать: http://www.sans.org/reading_room/whitepapers/securecode/secure-software-development-code-analysis-tools_389

+1

+1 для подчеркивания * ложных срабатываний *. Использование Splint по не аннотированному коду не очень забавно ... – eckes

0

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

1

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

Пример типичной ложной тревоги и хороший сигнализатор:

bar (char **output) 
{ 
    *output = malloc(100); 
} 
foo() 
{ 
    char *output=NULL; 
    bar(&output) 
} 

В функции бар было бы сообщить утечку памяти для вывода указателя. В функции foo он сообщает о разыменовании NULL при вызове функциональной панели. Но, тем не менее, это выбор между поиском истинного сигнала тревоги в течение 100 секунд ложных тревог.

Таким образом, мы можем найти утечки памяти, которые могут быть пропущены во время обзоров кода. Предотвращение лицензии является дорогостоящим, и после того, как сигнал тревоги помечен как ложный, он не появляется в последующем анализе. Следовательно, вы должны найти, делает ли Splint то же самое.

1

Splint отличается тем, что ваш код более идиоматичен (и, следовательно, его легче читать, для различных компиляторов для синтаксического анализа, более портативного и простого в рефакторе). Splint может найти тонкие ошибки, такие как неявные отбрасывания между ints и float. Splint отслеживает утечки памяти и другие уязвимости безопасности.

Попробуйте: splint hello.c.

Смежные вопросы