Почему динамический анализ не может охватить весь путь выполнения программы?

Я новичок в области анализа программ, и после прочтения некоторых материалов в этой области у меня возникли вопросы, на которые я не могу найти соответствующие ответы.

Смотрите, если я реализую инструмент: символическое выполнение + конкретное выполнение, как DART

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

Мне говорят, что динамический анализ не может охватить весь путь выполнения, но в основном почему? Я думаю, что методы, такие как DART, уже достаточно развиты

Другие, такие как проверка моделей, теоретически гарантируют 100% покрытие кода... я прав?

Кто-нибудь может мне помочь? Спасибо!

1 ответ

Решение

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

if (a) {
  // do something
}
if (b) {
  // do something
}
...
if (z) {
  // do something
}

затем существует 67108864 возможных путей кода, в зависимости от значений 26 логических переменных.

Другие вопросы по тегам