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

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

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

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

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

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

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


person lllllllllllll    schedule 27.02.2014    source источник


Ответы (1)


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

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

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

person Abednego    schedule 27.02.2014
comment
67 миллионов путей - недостаточно веская причина. Экспоненциальная причина. Однако экспоненциальный результат исходит из предположения, что пути независимы. На практике это не так. Одни условия предотвращают появление других; поэтому реальный вопрос заключается в количестве возможных путей, а не в независимых путях. Исследования, которые я видел в 90-х годах, показывают, что большие программы могут иметь миллионы возможных путей, и это можно обработать. В чем мы не очень хороши, так это в перечислении возможных путей. И да, это все еще может выйти из-под контроля. - person Ira Baxter; 27.02.2014