Подтвердить что ты не робот

Что такое анализ статического кода?

Есть многие варианты статического анализа, и это горячая тема, поэтому:

Что такое статический анализ?

Когда вы должны использовать его, а когда он не должен использоваться?

Каковы потенциальные ошибки в отношении правильного и неправильного использования/применения статического анализа?

Любые языки, которые не имеют хорошего инструмента статического анализа, и что вы делаете, когда у вас нет возможности для автоматического анализа?

-Adam

4b9b3361

Ответ 1

Что такое статический анализ?

Анализ кода без его выполнения. Обычно используется для поиска ошибок или обеспечения соответствия правилам кодирования. Классический пример - это компилятор, который находит лексические, синтаксические и даже некоторые семантические ошибки.

Когда вы должны использовать его, а когда он не должен использоваться?

Инструменты статического анализа следует использовать, когда они помогают поддерживать качество кода. Если они используются, они должны быть интегрированы в процесс сборки, иначе они будут проигнорированы.

Каковы потенциальные ошибки в отношении правильного и неправильного использования/применения статического анализа?

При использовании инструментов статического анализа возникают две общие патологии:

  • Инструменты создают ложные предупреждения/ошибки, которые разработчики не могут заставить замолчать. В конце концов, большинство предупреждений являются ложными, и разработчики перестают обращать внимание на результат. Вот почему многие команды требуют, чтобы код компилировался чисто. Если разработчики чувствуют себя комфортно, игнорируя предупреждения компилятора, фаза компиляции в конечном итоге будет заполнена предупреждением, на которое никто никогда не обращает внимания, даже если они могут быть ошибками.

  • Инструменты слишком долго работают, и разработчики никогда не пытаются их запускать.

Любые языки, которые не имеют хорошего инструмента статического анализа, и что вы делаете, когда у вас нет возможности для автоматического анализа?

По ряду причин многие динамические языки (ruby, python, perl) не имеют инструментов статического анализа, которые так же сильны, как и доступные на статических языках. Стандартный метод поиска ошибок и обеспечения работоспособности кода в динамических языках - это модульные тесты, которые помогают повысить уверенность в том, что код действительно работает (шляпка: Chris Conway).

Ответ 2

Что такое статический анализ?

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

Каковы потенциальные ошибки в отношении правильного и неправильного использование/применение статического анализа?

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

Когда вы должны использовать его, а когда он не должен использоваться?

Основная цель - тестирование и обслуживание кода, так как оно хорошо вписывается в интуицию разработчика. На практике это наиболее распространенная форма обнаружения ошибок, но каждый тест исследует только одно возможное выполнение системы. Разработчики, работающие в сфере безопасности, используют это как основной инструмент для поиска ошибок кода, эксплойтов и т.д.

Вот пример статического анализа с использованием символического исполнения, когда ключевая идея состоит в обобщении тестирования с использованием неизвестных символических переменных в оценке, где мы отслеживаем символические состояния. Если путь выполнения зависит от неизвестного, мы выполняем символический исполнитель. Во время символического выполнения мы пытаемся определить, являются ли определенные формулы выполнимыми (например, конкретная точка программы достижимая, является ли доступ к массиву A [i] за пределы? И т.д.).

int a = α, b = β, c = γ;
// symbolic
int x = 0, y = 0, z = 0;
if (a) {
   x = -2;
}
if (b < 5) {
   if (!a && c) { y = 1; }
   z = 2;
}
assert(x+y+z!=3)

И анализ этого простого примера кода:   Static code Analysis

Вот несколько полезных ссылок для решателей SMT/SAT, которые используются для статического анализа кода:

SAT-решение, SMT-решение и проверка программ

Список инструментов для анализа статических кодов

Символическое выполнение, решение SAT, решение SMT и верификация программ

Символическое исполнение Harvard CS252r

Ответ 4

Статический анализ рассматривает исходный код для потенциальных проблем. Он называется static, потому что код не выполняется, чтобы найти проблемы, источник аналитически аналитически.

В настоящий момент статический анализ очень незрелый. Большинство инструментов находят только самые глупые ошибки. Например, никакие инструменты, о которых я знаю, не могут найти все нулевые указатели указателя, но это очевидная ошибка, на которую вы хотите настроить статический анализ. Вы можете забыть пытаться найти более сложные ошибки, такие как условия гонки со статическим анализом, на данный момент по крайней мере.

Статический анализ особенно полезен для обеспечения соблюдения стандартов кодирования. FXCop, который анализирует код .NET, содержит правила для всех видов дефектов стандартов кодирования.

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

  • FindBugs (Java)
  • FXCop (.NET)
  • PyLint (Python)

Я могу порекомендовать все из них.

Ответ 5

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

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

Сложные методы сочетают статический анализ кода с формальными методами. Формальные методы применяют теоретические основы информатики для решения сложных проблем в программном обеспечении, таких как проверка того, что программное обеспечение не сработает с ошибкой во время выполнения. Комбинация статического анализа кода и формальных методов позволяет разработчикам обнаруживать трудности при поиске ошибок и доказывать отсутствие определенных типов ошибок/ошибок. Например. эти методы могут доказать, что следующая строка кода никогда не завершится с делением на нулевую ошибку времени выполнения:

int x, y;
...
x = x / (x - y);

В общем, статический анализ следует использовать в начале процесса разработки, предпочтительно до unit test. Это позволяет разработать надежный код. Статический анализ также может сочетаться с системами сборки для получения показателей качества и обеспечения руководства по безопасности и надежности программного обеспечения. Однако для позднего использования статического анализа в целом может потребоваться больше времени и ресурсов для решения выявленных проблем.

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

Ответ 6

В дополнение к обнаружению ошибок в вашем коде (например, гарантированное разуплотнение нулевых указателей, бесконечные циклы и т.д.), статический анализ может использоваться для анализа безопасности кода. Я настоятельно рекомендую посмотреть "Безопасное программирование в статическом анализе" из программы Brian Chess of Fortify.

Ответ 7

Зайдите в http://www.ouncelabs.com, если вы ищете инструмент корпоративного класса.