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

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

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

Как это отличается от Статический анализ кода (т.е. что он может поймать, который нельзя поймать в статике)?

Я слышал об оценке границ и анализе памяти - что это?

Какие еще вещи проверяются с помощью динамического анализа?

-Adam

4b9b3361

Ответ 1

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

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

  • Возможность обнаружения зависимостей, которые невозможно обнаружить при статическом анализе. Пример: динамические зависимости с использованием отражения, инъекции зависимостей, полиморфизма.
  • Может собирать временную информацию.
  • Сделки с реальными входными данными. Во время статического анализа трудно понять, какие файлы будут передаваться в качестве входных данных, какие запросы WEB появятся, какой пользователь нажмет и т.д.

Недостатки динамического анализа

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

Ресурсы

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

Ответ 2

В основном вы обрабатываете свой код для анализа вашего программного обеспечения по мере его запуска (динамического), а не просто для анализа программного обеспечения без запуска (статического). Также см. Эту презентацию JavaOne, сравнивающую эти два. Valgrind - один из примеров инструмента для динамического анализа для C. Вы также можете использовать инструменты покрытия кода, такие как Cobertura или EMMA для анализа Java.

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

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

Ответ 3

Вы попросили дать хорошее объяснение "проверки границ и анализа памяти".

Наш инструмент Memory Safety Check позволяет вашему приложению смотреть во время выполнения для ошибок доступа к памяти (переполнение буфера, ошибки индекса строки, неправильные указатели, распределение/бесплатные ошибки). Ссылка содержит подробное объяснение с примерами.

Более простой пример: C (и С++) печально не проверяют обращения к массивам, чтобы увидеть, находится ли доступ внутри границ массива. Преимущество: хорошо продуманная программа не оплачивает такую ​​проверку в режиме производства. Недостаток: багги-программы могут касаться вещей вне массива, и это может привести к поведению, которое очень трудно понять; поэтому багги-программу трудно отлаживать.

Какой инструмент динамического инструментария, например Memory Check Checker, связывает некоторые метаданные с каждым указателем (например, тип вещи, на которую указывает указатель, и если это массив, границы массива), а затем проверить во время выполнения, любые обращения через указатели на массивы, нарушена ли граница массива. Инструмент изменяет исходную программу для сбора метаданных, где она сгенерирована (например, при входе в области, в которых объявлены массивы, или в результате операции malloc и т.д.) И изменяет программу по каждой ссылке на массив (написанную как как x [y], где x или y - указатель массива, а значение - некоторый тип интегрального типа, аналогично для * (x + y)!) для проверки доступа. Теперь, если программа запускается и выполняет доступ за пределы границ, проверка улавливает ошибку, и она сообщила в первую очередь, где она может быть обнаружена. [Если вы подумаете об этом, вы поймете, что инструменты для сбора метаданных и проверки должны быть довольно умными, чтобы обрабатывать все варианты вариантов, например, язык C. Его действительно сложно сделать эту работу полностью).

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

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

Ответ 4

Проверка оценок

Это означает проверку времени выполнения запросов к массиву. В отличие от подхода la lasese-faire к обращениям к памяти и арифметике указателя, другие языки, такие как Java или С#, действительно проверяют, имеет ли данный массив элемент, который пытается получить доступ.