Статический анализ и динамический анализ в тестировании программного обеспечения



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

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

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

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


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

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


Когда разработчики проводят анализ кода, они обычно ищут

  • Строки кода
  • Частота комментариев
  • Правильное гнездование
  • Количество вызовов функций
  • Цикломатическая сложность
  • Также можно проверить модульные тесты

Атрибуты качества, которые могут быть предметом статического анализа:

  • Надежность
  • Ремонтопригодность
  • Тестируемость
  • Повторное использование
  • Портативность
  • Эффективность


Каковы преимущества статического анализа?

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

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


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

    • Недостижимый код

    • Вариативное использование (необъявленное, неиспользованное)

    • Невызванные функции

    • Нарушение границ

Ограничения статического анализа кода:

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


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

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

Из Википедии определение динамического анализа программ :

Динамический программный анализ - это анализ компьютерного программного обеспечения, который выполняется с выполнением программ, созданных из этого программного обеспечения, на реальном или виртуальном процессоре (анализ, выполняемый без выполнения программ, известен как статический анализ кода). Инструменты динамического анализа программ могут потребовать загрузки специальных библиотек или даже перекомпиляции программного кода.


Наиболее распространенная практика динамического анализа - выполнение модульных тестов кода для обнаружения ошибок в коде.

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

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

Ограничения динамического анализа кода:

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