1 / 24

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

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

lesley-levy
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Содержание • Обзор базового алгоритма тестирования - DART • Первичные и повторные обходы путей • Зависимости данных в планировании путей • Комбинирование стратегий и приоритизация • Сбор зависимостей данных • Учет использований данных • Проблема недостижимых путей • Замечания по деталям реализации алгоритма • Результаты • Заключение

  3. Пример DART. Тестируемый код voidf (intx, inty) { if (x > y) { x = x + y; y = x – y – 3; x = x – y; } x = x – 1; if (x > y) { abort (); } } • intmain () { • constintx = choose_int ("x"); • constinty = choose_int ("y"); • f (x, y); • return 0; • } • Процедуры системы тестирования

  4. Пример DART. Шаг 1 x = 0 y = 0 x < y нет x1= x – 1; =-1 нет x1 > y

  5. Пример DART. Шаг 2 нет решения x < y нет x1= x – 1; недостижимый путь  да x1 > y

  6. Пример DART. Шаг 3 x = 0 y = 1 x < y да =1 x1= x + y; y1 =x1 – y; x2 =x1 – y1 – 3; x3 = x2 – 1; x1= x – 1; =0 =-2 =-3  x1 > y x3 > y1 нет

  7. Пример DART. Шаг 4 x = 0 y = 9 x < y да =9 x1= x + y; y1 =x1 – y; x2 =x1 – y1 – 3; x3 = x2 – 1; x1= x – 1; =0 =6 =5  x1 > y x3 > y1 да Ошибка

  8. Философское замечание • В отличие от большинства методов статического анализа, оперирующих конструкциями кода и его графом управления, в нашем подходе мы большей частью рассматриваем выполнение программы как блуждание по тропкам леса в поисках волшебного зверябага в программе

  9. Первичные обходы vs. повторные • Первичный обход ветви – первое в прогоне набора тестов “срабатывание” соответствующего условия перехода с передачей управления на данную ветвь. • Реализуется в первую очередь, т.к. приводит к росту покрытия • Nперв~ N условий • Повторныеобходы в различных комбинациях дают разнообразные пути присваиваний переменных, в результате могут быть созданы условия для новых первичных переходов • Nповт~ exp(N условий) • В среднем, количество обнаруженных ошибок приблизительно пропорционально покрытию кода.

  10. Ограничение повторных обходов • Идея ограничения повторных обходов:Чтобы обнаружить баг, вероятно, достаточно изменить направление лишь небольшого числа условных переходов в случайном прогоне теста • Новые присвоения данных – естественный индикатор интереса к повторным обходам.. • Строгое соответствие Зависимость данных – повторные обходы не всегда эффективно: <<<Комбинаций присваиваний может быть (экспоненциально) много >>>Зависимость данных не всегда “видна”: массивы, динамические ссылки, black boхеs, волатильность, гонки..

  11. Комбинирование стратегий штраф • Решение: мягкое регулируемое ограничение повторных обходов в зависимости от числа обнаруженных зависимостей от новых присваиваний • приоритизационный алгоритм

  12. Сбор зависимостей данных Стек ПВП • Для каждой значимой комбинации внутренних переменных аккумулируется: • Множество использующих условий и участков кода • Таблицу записей (хеш стека присваиваний + номер участка) для обнаруженных присваиваний {v1,v2,v3} Использов. C2 L5 Присваив. C4 H1 C4 H2 C7 H3

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

  14. Пример: планирование тестов

  15. Учет использований • Необходимо знать использования переменных в произвольном конусе! • Обход CFG ? • сложность ~ Nузлов на каждое принятие решения • Хранение копий для узлов ? • память ~ N2 узлов • Отказ от учета использований ? • Допустим в сочетании с ограничением числа повторных обходов ветвейпри “быстром” тестировании

  16. Оптимизация учета • Ограничение числа учитываемых используемых переменных в узле.. • Как правило, если в конусе используются многие переменные, то и вероятность использования произвольной переменной велика • Хеширование • Вносит вероятность избыточного тестирования, но кардинально снижает расходы

  17. Хеширование использований 0001 0010 0100 0100 0110 1000 1101 0001 1111

  18. Эффект маскирования путей if (x) print(“x=true”); //неважно.. else • print (“x=false”); //неважно.. x = F x = T if ((x &v) | y) a = 1; else a = 3; @ v=T, w=F, y= F if ((x &w) | y) a = a * 2; else a = a * 5; a = 15 a = 2 a = 5

  19. Эффект маскирования: учет • К счастью, мы явно знаем неудовлетворенные условия и можем проверить их еще раз с новым префиксом • Список таких условий может быть велик, а вероятность успеха мала.. • Оптимизация: Рассматривать пересечение текущего условия со всеми условиями суффикса, повторно проверять только в случае возможной импликации • При ограничении сложности рассмотрения логических форм, эффективно таргетирует повторные проверки неудовлетворенных путей суффикса

  20. Альтернативыучета маскирования • Обход с ограничением комбинаций (Realernation limit) даже при отсутствии зависимостей данных • Вероятность покрытия невелика • Особое рассмотрение для“гамаков” • “гамаки”могут содержать дополнительные условия выхода/обхода • “Ожидание” “гамака”. Рассмотрение ослабленного условия префикса • Множество новых комбинаций, увеличенное время теста, память

  21. «Разворачивание» циклов i>j i>j z=z+1 x=i+1 i>j z=z+1 for (inti=0; i<=j; i++) { x=i+1; z++; print (x); } i>j

  22. “Перекрестные” использования • Использование приоритетов →порядок обходов отличен от DFS • Учитываем динамическое добавление использований из конкурирующих прогонов

  23. Результаты • Метод применялся , в частности, при отладке аппаратно-программного комплекса для тестирования готовых кристаллов процессоров. • Быстрое тестирование с числом чередований условий переходов более 30, нахождение ошибок с вероятностью более 99% в примерах Firmware имодульных тестов • Высокая эффективность при выявления ошибок в программах тестирования СБИС, встроенном ПО и программах обработки текста на уровне регулярных выражений. • Для сложных арифметико-логических устройств предпочтительнее специализированные алгоритмы, не использующие перебор путей

  24. Заключение • DART - универсальным метод тестирования ПО для СБИС • Мощность решателей (SMT solvers)стремительно растет. • Все же требуется кардинальное сокращение обходов комбинаций ветвлений. • Комбинация ограничения повторных обходов с учетом зависимости данных являетсяумеренно ресурсоемкой, но эффективной стратегией быстрого достижения покрытия теста и выявления ошибок • Алгоритм легко интегрируется с различными эвристиками, ограничивающими число тестов

More Related