Статический анализ - это процесс анализа программного обеспечения без его выполнения. Это очень хорошо и рекомендуется, но вы должны иметь в виду, что
- разные инструменты статического анализа имеют разное понимание код, который они изучают, поэтому они могут сигнализировать (или не сигнализировать) о различных проблемах. Один инструмент может дать чистый отчет, а другой может жаловаться на миллион вещей.
- динамический инструмент (например, например, valgrind) может найти много других проблем ценой серьезной нагрузки на потребление ресурсов (время, использование памяти). Это так, потому что вы обычно используете инструментальную версию программного обеспечения. Обратите внимание, что, будучи каким-то образом инструментированным (замените ваш malloc на отладочный malloc), он не совсем идентичен вашему программному обеспечению (как вы можете видеть из времени выполнения)
Оба этих подхода страдают от недостатка контекста: они не знают, чего должен достичь sw.
Проверка кода выполняется другим программистом, который предположительно знает это и может проверить
- если код правильный
- если программное обеспечение семантически правильно.
Это намного дороже и имеет различную степень повторяемости, но очень помогает.
Как всегда, нет ни одной серебряной пули, которая бы исправила все ошибки и избежала всех проблем. Рекомендуется применять - насколько это возможно, учитывая место, код, время, три формы проверки (статическая, динамическая, больше глаз (и мозгов), реально смотрящих на код).
PS: я должен отметить, что обычно гораздо лучше применять инструменты с нуля. Преобразование унаследованной системы является гораздо менее приятным опытом из-за ложных срабатываний. Если вы начинаете с нуля и всегда стремитесь поддерживать чистоту инструмента анализа, вы, вероятно, избежите многих проблем.
pps: что касается инструментов, это зависит от языка. В мире C и C ++ вы можете начать с просмотра самой Visual Studio, которая содержит встроенный инструмент статического анализа. Относительно полный список можно найти в Википедии.
ppps: статический анализ больше подходит для статических языков, таких как C или C ++. Для Python может быть действительно трудно сказать, будет ли имя, которое ссылается на список в точке, ссылаться на список для остальной части программы из-за его динамических свойств. Это не означает, что ничего нельзя сделать, как показывает JIT-попытка, подобная PyPy .