24
Ускорение направленного тестирования ПО путем учета потока данных при ограничении вариативности траекторий выполнения А. С. Щербаков ЗАО «Интел А/О»

А. С. Щербаков ЗАО «Интел А / О»

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 (); }}

4Intel

x < y

x1 = x – 1;

x1 > y

нет

нет

x = 0y = 0

=-1

Пример DART. Шаг 1

5Intel

x < y

x1 = x – 1;

x1 > y

нетрешения

недостижимый путь

нет

да

Пример DART. Шаг 2

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}Стек ПВП

• Для каждой значимой комбинации внутренних переменных аккумулируется:

• Множество использующих условий и участков кода• Таблицу записей (хеш стека присваиваний + номер

участка) для обнаруженных присваиваний

13Intel

Пример программы

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

Оптимизация учета

• Ограничение числа учитываемых используемых переменных в узле..• Как правило, если в конусе используются

многие переменные, то и вероятность использования произвольной переменной велика

• Хеширование• Вносит вероятность избыточного

тестирования, но кардинально снижает расходы

17Intel

Хеширование использований

0001

0010

0100

0100

1000

0001

0110

1101

1111

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)

стремительно растет.• Все же требуется кардинальное сокращение

обходов комбинаций ветвлений.• Комбинация ограничения повторных обходов с

учетом зависимости данных является умеренно ресурсоемкой, но эффективной стратегией быстрого достижения покрытия теста и выявления ошибок

• Алгоритм легко интегрируется с различными эвристиками, ограничивающими число тестов