Почему динамический анализ не может охватить весь путь выполнения программы?
Я новичок в области анализа программ, и после прочтения некоторых материалов в этой области у меня возникли вопросы, на которые я не могу найти соответствующие ответы.
Смотрите, если я реализую инструмент: символическое выполнение + конкретное выполнение, как DART
тогда я думаю, что он должен охватывать все пути выполнения, сохраняя при этом функции динамического анализа.
Мне говорят, что динамический анализ не может охватить весь путь выполнения, но в основном почему? Я думаю, что методы, такие как DART, уже достаточно развиты
Другие, такие как проверка моделей, теоретически гарантируют 100% покрытие кода... я прав?
Кто-нибудь может мне помочь? Спасибо!
1 ответ
Количество путей через фрагмент кода является экспоненциальным по отношению к числу операторов if. Например, если у вас есть такой код:
if (a) {
// do something
}
if (b) {
// do something
}
...
if (z) {
// do something
}
затем существует 67108864 возможных путей кода, в зависимости от значений 26 логических переменных.