Upload
lesley-levy
View
44
Download
2
Embed Size (px)
DESCRIPTION
Ускорение направленного тестирования ПО путем учета потока данных при ограничении вариативности траекторий выполнения. А. С. Щербаков ЗАО «Интел А / О». Содержание. Обзор базового алгоритма тестирования - DART Первичные и повторные обходы путей З ависимости данных в планировании путей - PowerPoint PPT Presentation
Citation preview
Ускорение направленного тестирования ПО путем учета потока данных при ограничении вариативности траекторий выполнения
А. С. ЩербаковЗАО «Интел А/О»
2Intel
Содержание
• Обзор базового алгоритма тестирования - DART• Первичные и повторные обходы путей • Зависимости данных в планировании путей• Комбинирование стратегий и приоритизация• Сбор зависимостей данных• Учет использований данных• Проблема недостижимых путей• Замечания по деталям реализации алгоритма• Результаты• Заключение
3Intel
Пример DART. Тестируемый код
int main () { const int x = choose_int ("x"); const int y = choose_int ("y"); f (x, y); return 0;}
• Процедуры системы тестирования
void f (int x, int y) { if (x > y) { x = x + y;
y = x – y – 3; x = x – y;
} x = x – 1; if (x > y) { abort (); }}
6Intel
x1 = x + y;y1 = x1 – y;x2 = x1 – y1 – 3;x3 = x2 – 1;
x < y
x1 = x – 1;
x1 > y
да
нет
x = 0 y = 1
x3 > y1
=1=0=-2=-3
Пример DART. Шаг 3
7Intel
x1 = x + y;y1 = x1 – y;x2 = x1 – y1 – 3;x3 = x2 – 1;
x < y
x1 = x – 1;
x1 > y
x = 0 y = 9
x3 > y1
Ошибка
да
=9
=0=6=5
да
Пример DART. Шаг 4
8Intel
Философское замечание
• В отличие от большинства методов статического анализа, оперирующих конструкциями кода и его графом управления, в нашем подходе мы большей частью рассматриваем выполнение программы как блуждание по тропкам леса в поисках волшебного зверя бага в программе
9Intel
Первичные обходы vs. повторные
• Первичный обход ветви – первое в прогоне набора тестов “срабатывание” соответствующего условия перехода с передачей управления на данную ветвь. Реализуется в первую очередь, т.к. приводит к
росту покрытияNперв ~ N условий
• Повторные обходы в различных комбинациях дают разнообразные пути присваиваний переменных, в результате могут быть созданы условия для новых первичных переходов
Nповт ~ exp(N условий)• В среднем, количество обнаруженных ошибок
приблизительно пропорционально покрытию кода.
10Intel
Ограничение повторных обходов
• Идея ограничения повторных обходов:Чтобы обнаружить баг, вероятно, достаточно изменить направление лишь небольшого числа условных переходов в случайном прогоне теста
• Новые присвоения данных – естественный индикатор интереса к повторным обходам..
• Строгое соответствие Зависимость данных – повторные обходы не всегда эффективно:<<< Комбинаций присваиваний может быть (экспоненциально) много>>> Зависимость данных не всегда “видна”: массивы, динамические ссылки, black boхеs, волатильность, гонки..
11Intel
Комбинирование стратегий
• Решение: мягкое регулируемое ограничение повторных обходов в зависимости от числа обнаруженных зависимостей от новых присваиваний приоритизационный алгоритм
1 2 3 4 5 6 7 8 9 101112131415161718192021222324252627282930
0
5
10
15
20
25
30
без зависимостей
1-3 зависимости
>3 зависимостей
число ПЧ
штраф
12Intel
Сбор зависимостей данных
Использов.
C2L5
Присваив.
C4 H1
C4 H2
C7 H3
{v1,v2,v3}Стек ПВП
• Для каждой значимой комбинации внутренних переменных аккумулируется:
• Множество использующих условий и участков кода• Таблицу записей (хеш стека присваиваний + номер
участка) для обнаруженных присваиваний
14Intel
Пример: планирование тестов
№ Префикс пути выполнения
Решение о запуске теста (непосещенная ветвь/иная причина)
Входные переменные Обнаруж.использования
Обнаруж. присваивания
Подстек присваивания
a b c {x} {y} {x} {y} {x} {y}
1() Да (начало) 0 0 0 C3 L0 L0 (L0) (L0)
2
(C1=0;C2=0;C3=1) Да (С3=1) нет решения
3
(C1=0; C2=1) Да (С2=1) 0 1 0 L2 L2 (L0;L2) - новый
4
(C1=0;C2=1;C3=1) Да (C3=1) нет решения (L0;L1)-новый
5(C1=1) Да (С1=1) 1 0 0 L1 (L0)
6
(C1=1; С2=0;C3=1) Да (C3=1) нет решения
7
(C1=1,C2=1) Да (в L2 используется новый подстек для {x})
1 1 0 (L0;L2)
8
(C1=1,C2=1; C3=1) Да (C3=1) 1 1 3
15Intel
Учет использований
Необходимо знать использования переменных в произвольном конусе!
Обход CFG ? сложность ~ Nузлов на каждое
принятие решенияХранение копий для узлов ?
память ~ N2 узлов
Отказ от учета использований ?Допустим в сочетании с
ограничением числа повторных обходов ветвей при “быстром” тестировании
16Intel
Оптимизация учета
• Ограничение числа учитываемых используемых переменных в узле..• Как правило, если в конусе используются
многие переменные, то и вероятность использования произвольной переменной велика
• Хеширование• Вносит вероятность избыточного
тестирования, но кардинально снижает расходы
18Intel
Эффект маскирования путей
if (x) print(“x=true”); //неважно..else print (“x=false”); //неважно..
a = 15 a = 2 a = 5
@ v=T, w=F, y= F
x = F x = T
if ((x & w) | y) a = a * 2;else a = a * 5;
if ((x & v) | y) a = 1;else a = 3;
19Intel
Эффект маскирования: учет• К счастью, мы явно знаем неудовлетворенные
условия и можем проверить их еще раз с новым префиксом• Список таких условий может быть велик, а
вероятность успеха мала..• Оптимизация: Рассматривать пересечение
текущего условия со всеми условиями суффикса, повторно проверять только в случае возможной импликации• При ограничении сложности рассмотрения
логических форм, эффективно таргетирует повторные проверки неудовлетворенных путей суффикса
20Intel
Альтернативы учета маскирования
• Обход с ограничением комбинаций (Realernation limit) даже при отсутствии зависимостей данных• Вероятность покрытия невелика
• Особое рассмотрение для “гамаков”• “гамаки” могут содержать дополнительные
условия выхода/обхода• “Ожидание” “гамака”. Рассмотрение
ослабленного условия префикса• Множество новых комбинаций, увеличенное
время теста, память
21Intel
«Разворачивание» циклов
i>j
i>j
i>j
z=z+1
z=z+1
i>j
x=i+1
for (int i=0; i<=j; i++) { x=i+1; z++; print (x);}
22Intel
“Перекрестные” использования
Использование приоритетов → порядок обходов отличен от DFSУчитываем
динамическое добавление использований из конкурирующих прогонов
23Intel
Результаты• Метод применялся , в частности, при отладке
аппаратно-программного комплекса для тестирования готовых кристаллов процессоров.
• Быстрое тестирование с числом чередований условий переходов более 30, нахождение ошибок с вероятностью более 99% в примерах Firmware и модульных тестов
• Высокая эффективность при выявления ошибок в программах тестирования СБИС, встроенном ПО и программах обработки текста на уровне регулярных выражений.
• Для сложных арифметико-логических устройств предпочтительнее специализированные алгоритмы, не использующие перебор путей
24Intel
Заключение
• DART - универсальным метод тестирования ПО для СБИС• Мощность решателей (SMT solvers)
стремительно растет.• Все же требуется кардинальное сокращение
обходов комбинаций ветвлений.• Комбинация ограничения повторных обходов с
учетом зависимости данных является умеренно ресурсоемкой, но эффективной стратегией быстрого достижения покрытия теста и выявления ошибок
• Алгоритм легко интегрируется с различными эвристиками, ограничивающими число тестов