Институт системного программирования РАН Автоматическая генерация базовых тестов для программных интерфейсов библиотек на основе заголовочных файлов Владимир Рубанов, Андрей Пономаренко Институт системного программирования РАН
Тестируем библиотеки и модули 2 / 15
Институт системного программирования РАН Какие тесты нужны? 1.Глубокие тесты – вызывают каждую целевую функцию и их цепочки сотни раз с различными параметрами и в различных внутренних состояниях целевой системы. Тщательно контролируется корректность результатов работы. 2.Средние тесты – вызывают целевые функции в нескольких основных сценариях использования. Контролируются основные результаты работы. 3.Базовые тесты – каждая функция вызывается хотя бы один раз с некоторым корректным набором параметров. Контролируется отсутствие грубых ошибок. 3 / 15
Институт системного программирования РАН Технологии автоматизации: какой ценой? 1.Глубокие тесты – тяжеловесные технологии, например model based на основе конечных автоматов (UniTESK) Высокая удельная стоимость разработки тестов в расчете на одну целевую функцию. 2.Средние тесты – классические unit тесты (CUnit, TET, T2C) Средняя удельная стоимость разработки тестов в расчете на одну целевую функцию. 3.Базовые тесты – ? Целесообразно при низкой стоимости создания тестов. 4 / 15
Институт системного программирования РАН Базовая идея генерации базовых тестов 5 / 15
Институт системного программирования РАН Базовая идея+ 6 / 15
Институт системного программирования РАН Построение цепочки инициализации Дерево инициализации вызова S1 = F () P1 = F1 (S1) I1 = 10 P2 = G1 (I1) P3 = test string Res = Target (P1, P2, P3) CHECK (Res != error) Базовый тест 7 / 15
Институт системного программирования РАН Дополнительная информация (опциональная) как правильно инициализировать библиотеку как получить корректное значение определенного типа данных каким должно быть корректное значение определенного параметра функции какие проверки можно сделать для возвращаемых значений определенного типа 8 / 15
Институт системного программирования РАН Специальные конструкции в описании дополнительной информации $(type) – создание объекта данного типа void create_QProxyModel(QProxyModel* Obj) { Obj->setSourceModel($(QItemModel*)); } $[function] – вызов данной функции с корректными параметрами xmlListPtr create_filled_list() { xmlListPtr l = $[xmlListCreate]; int num = 100; xmlListPushBack(l,&num); return l; } 9 / 15
Институт системного программирования РАН Характеристика технологии Даже без задания дополнительной информации получаются вполне работоспособные тесты, которые могут обнаруживать ошибки. Введение дополнительной информации позволяет значительно повысить качество тестирования, при этом такая информация автоматически повторно используется в сотнях и тысячах тестов. Получаемые тесты могут служить готовой базой для разработки более глубоких тестов. 10 / 15
Институт системного программирования РАН Примеры использования (1) Официальные тестовые наборы Linux Foundation: libxml2 Qt3 Qt4 ALSA Официальный тестовый набор rpm5 Десятки upstream применений в качестве дополнительного шага контроля качества. 11 / 15
Институт системного программирования РАН Примеры использования (2) 12 / 15
Институт системного программирования РАН Примеры использования (3) 13 / 15
Институт системного программирования РАН Распространение API Sanity Autotest 1.Лицензия GPL 2.Домашняя страница проекта: API_Sanity_Autotest 3.Принят в репозитории: Alt Linux Arch Linux Debian FreeBSD … 14 / 15
Институт системного программирования РАН Ссылки API Sanity Autotest API_Sanity_Autotest API_Sanity_Autotest Центр верификации OC Linux Институт системного программирования РАН Докладчик Владимир Рубанов, к.ф.-м.н., зав. сектором операционных систем ИСП РАН, руководитель Центра верификации ОС Linux 15 / 15