Введение

Автоматизированное программное обеспечение для проверки кода проверяет соответствие исходного кода заранее определенному набору правил или передовым практикам. Использование аналитических методов для инспекции и анализа исходного кода с целью выявления ошибок или проблем безопасности является стандартной практикой разработки как в проектах с открытым исходным кодом, так и в коммерческом программном обеспечении. Этот процесс может выполняться как вручную, так и в автоматическом режиме. При автоматизации программные инструменты оказывают помощь в процессе проверки и инспекции кода. Программа или инструмент для проверки обычно отображает список предупреждений (нарушений стандартов программирования). Программа для проверки также может предоставлять автоматизированный или поддерживаемый программистом способ исправления обнаруженных проблем. Это способствует легкому освоению разработки программного обеспечения и развитию практики Software Intelligence. Этот процесс обычно называют "линтингом", поскольку одним из первых инструментов для статического анализа кода был Lint. Некоторые инструменты статического анализа кода могут использоваться для помощи в автоматизированной проверке кода. Они не могут сравниться с ручными проверками, однако их можно выполнить быстрее и эффективнее. Эти инструменты также содержат глубокие знания базовых правил и семантики, необходимых для выполнения такого анализа, что избавляет рецензента кода от необходимости обладать таким же уровнем экспертизы, как у опытного аудитора. Среды разработки Microsoft Visual Studio поддерживают различные плагины, облегчающие проверку кода. Помимо инструментов статического анализа кода, существуют также инструменты, которые анализируют и визуализируют структуры программного обеспечения, помогая лучше их понимать. Такие системы больше ориентированы на анализ, поскольку обычно не содержат заранее определенного набора правил для проверки программного обеспечения. Некоторые из этих инструментов (например, Imagix 4D, Resharper, SonarJ, Sotoarc, Structure101, ACTool) позволяют определять целевые архитектуры и обеспечивать соблюдение ограничений этих архитектур в фактической реализации программного обеспечения.