Выбор инструмента статического анализа кода [закрыто]
Я работаю над проектом, где я кодирую на C в среде UNIX. Я использую инструмент lint для проверки моего исходного кода. Lint существует уже давно (с 1979 года), может ли кто-нибудь предложить более новый инструмент анализа кода, который я мог бы использовать ? Предпочтительно инструмент, который является бесплатным.
15 ответов:
Не упускайте из виду сам компилятор.
прочитайте документацию компилятора и найдите все предупреждения и ошибки, которые он может предоставить, а затем включите столько, сколько имеет смысл для вас.
также убедитесь, что ваш компилятор обрабатывает предупреждения как ошибки, поэтому вы вынуждены исправить их сразу. ("- Werror " на gcc)
также: "- Стена " на gcc делает не включить все предупреждения, не обманывайте себя.
также: проверьте valgrind (бесплатно!) - он "автоматически обнаруживает многие ошибки управления памятью и потоковой передачи, а также подробно описывает ваши программы."
Valgrind - это не статическая проверка, но это отличный инструмент! http://valgrind.org
для кода C, вы определенно должны определенно использовать Flexelint. Я использовал его в течение почти 15 лет и клянутся им. Одна из действительно замечательных особенностей заключается в том, что предупреждения могут быть выборочно отключены и включены с помощью комментариев в коде ("/* lint-e123*/"). Это оказалось мощным инструментом документации, когда вы хотели что-то из ряда вон выходящее. "Я отключаю предупреждение X, поэтому есть какая-то веская причина, по которой я делаю X"
ни для кого в интересные вопросы C / C++, посмотрите на некоторые из их примеров на своем сайте и посмотрите, можете ли вы выяснить ошибки, не глядя на подсказки.
Я слышал хорошие вещи о clang статический анализатор, который IIRC использует LLVM в качестве бэкэнда. Если это реализовано на вашей платформе, это может быть хорошим выбором.
из того, что я понимаю, он делает немного больше, чем просто синтаксический анализ. "Автоматический поиск ошибок", например.
мы использовали Coverity Prevent чтобы проверить исходный код на C++.
Это не бесплатный инструмент (хотя я считаю, что они предлагают бесплатные проверки для проектов с открытым исходным кодом), но это один из лучших инструментов статического анализа вы найдете. Я слышал, что это еще более впечатляет на C, чем на C++, но это помогло нам избежать довольно большого количества ошибок до сих пор.
можно использовать cppcheck. Это простой в использовании инструмент статического анализа кода.
например:cppcheck --enable=all .
проверит все файлы C / C++ в текущей папке.
Lint-подобные инструменты обычно страдают от проблемы "ложной тревоги": они сообщают о гораздо большем количестве проблем, чем на самом деле существуют. Если доля действительно полезных предупреждений слишком мала, пользователь учится просто игнорировать инструмент. Более современные инструменты прилагают некоторые усилия, чтобы сосредоточиться на наиболее вероятных/интересных предупреждениях.
PC-lint / Flexelint очень мощные и полезные инструменты статического анализа, и настраиваемый, хотя, к сожалению, не бесплатно.
при первом использовании такого инструмента они могут выдавать огромное количество предупреждений, что может затруднить различие между основными и второстепенными. Поэтому лучше всего начать использовать инструмент в своем коде как можно раньше в проекте, а затем запускать его в своем коде как можно чаще, чтобы вы могли иметь дело с новыми предупреждениями как они поднимаются.
при постоянном использовании, как это, вы скоро узнаете, как написать свой код таким образом, который подтверждает правила, применяемые инструментом.
вы можете попробовать CppDepend, довольно полный статический анализатор, доступный в windows и linux, через плагин VS, IDE или командную строку, и это бесплатно для разработчиков
вы можете найти Uno tool полезное. Это один из немногих бесплатных вариантов без игрушек. Он отличается от корпии, Flexelint и др. при фокусировании на небольшом количестве "семантических" ошибок (пустые указатели, индексы массива за пределами границ и использование неинициализированных переменных). Он также позволяет пользовательские проверки, как блокировка-разблокировка дисциплины.
Я работаю над публичным выпуском инструмента-преемника,
Орион( КОНТЕНТ НЕДОСТУПЕН Больше)
существует опция" - Weffc++ " для gcc, которая в соответствии с man-страницей Mac OS X будет:
предупреждать о нарушениях следующих правил стиля из эффективной книги Скотта Мейерса на C++:
[snip]
Я знаю, что вы спрашивали о C, но это самое близкое, что я знаю..
Добрый день,
Я полностью согласен с предложениями прочитать и переварить то, что компилятор говорит вам после установки-Wall.
хорошим инструментом статического анализа для обеспечения безопасности является FlawFinder написано Дэвидом Уилером. Он делает хорошую работу в поисках различных эксплойтов безопасности,
однако это не заменяет наличие знающего кого-то, кто читает ваш код. Как говорит Дэвид на своей веб-странице, "дурак с инструментом еще дурак!"
спасибо,
Роб
Я нашел, что лучше использовать несколько инструментов статического анализа для поиска ошибок. Каждый инструмент разработан по-разному, и они могут найти очень разные вещи друг от друга.
есть некоторые хорошие обсуждения в некоторых переговорах здесь. Это из конференции, проведенной Министерством внутренней безопасности США по статическому анализу.
редкие это компьютерное программное средство, уже доступное в Linux, предназначенное для поиска возможных ошибок кодирования в ядре Linux.
есть два активных проектов Центр Верификации Linux направлена на улучшение качества загружаемых модулей ядра.
- проверка драйверов Linux (LDV) - комплексный набор инструментов для статической проверки исходного кода драйверов устройств Linux.
- Kedr Framework-расширяемый основы динамического анализа и верификации модулей ядра.
- еще одним текущим проектом является проверка файловой системы Linux, которая направлена на разработку специального набора инструментов для проверки реализаций файловой системы Linux.