Комбинаторная генерация программных конфигураций ОС В. Кулямин

реклама
Комбинаторная генерация
программных конфигураций ОС
В. Кулямин
kuliamin@ispras.ru
ИСП РАН
Конфигурационное тестирование
• Программная конфигурация операционной системы
– Использование форматов, сигналов, устройств,
файловых систем, …
– Размеры буферов, страниц, пулов, …
– Количества очередей, мьютексов, портов, …
– Значения по умолчанию для приоритетов, политик,
режимов, …
– Имена и номера устройств, спец. файлы, адреса, …
• Нужно проверить работу ОС при различных
комбинациях значений конфигурационных
параметров
2 / 20
Общие задачи тестирования
• Как проверить корректность работы системы?
– Можно считать, что есть достаточно много тестов
работоспособности ОС
Они будут выполняться в разных конфигурациях и
проверять корректность работы ОС
• Как оценить полноту тестового набора?
– Для этого нужно знать, что такое конфигурация,
какие конфигурации бывают вообще, какие из них
существенно отличаются по поведению ОС
3 / 20
Основные вопросы
• Как задается одна конфигурация?
– Как определяются текущие значения параметров
– Результат работы генератора – набор таких описаний
• Какие конфигурации бывают?
– Какие есть параметры и какие значения они могут
принимать
– Это – входные данные генератора
• Как понять, что набор конфигураций «достаточно
полный»?
– И как построить такой набор?
– Так будет устроен механизм генерации
4 / 20
Определение конфигурации
5 / 20
Определение одной конфигурации
• Файлы configos.h, x_configbrd.h с набором
макроопределений в виде
#define/#undef
• Файл usermake.def для make, в котором
определения даются в виде
<имя> = <значение>
6 / 20
Возможные конфигурации
• Набор параметров и их возможных значений
зависит от аппаратной платформы
• Между параметрами есть зависимости
– При включенной сети можно определить
поддерживаемые протоколы, адреса шлюзов, …
При выключенной эти протоколы и адреса не имеют
смысла
• Полный набор параметров с их возможными
значениями и зависимостями описан в TCL-скрипте
для настройки конфигурации перед сборкой
– Этот скрипт и дает входные данные
– Это удобно с точки зрения возможных модификаций
системы параметров
7 / 20
Виды параметров
• Типы
– Булевский (#define/#undef)
– Целое число (десятичное, шестнадцатеричное)
– Идентификатор C
– Строка
– Перечисление
• Будем работать только с булевскими и
перечислимыми
8 / 20
Зависимости
• Примеры
– INCLUDE_REMOTE_DEBUG_SERVER :
$INCLUDE_DEBUG && $INCLUDE_NETWORK==1
– ERASE_MEMORY :
[string compare $OUTPUT_MSG_TO flash_memory]==0 ||
[string compare $OUTPUT_EMERG_TO flash_memory]==0
• Почти все имеют вид логических выражений
над формулами вида $x = v, $x != v
• Дизъюнкции используются редко (нет
дизъюнкций из трех выражений)
9 / 20
Критерий полноты
• Все возможные комбинации значений
– Нереализуем
– mips64/cprio64 – 563 (17215153413152541)
2.23875·10176
• Некоторые комбинации
– Использование: каждый участок кода закрыт не
более чем двумя-тремя условиями #ifdef
–
достаточно сочетаний пар или троек значений!
10 / 20
Формальная постановка задачи
• Задан класс конфигураций
– Набор параметров
– Для каждого – конечное множество значений
– Для каждого – условие использования : логическое
выражение из элементарных формул p = v
• Задано число t = 2,3,4
• Построить набор корректных конфигураций, в
рамках которого для каждых t параметров и
каждого возможного сочетания их значений
это сочетание встречается в одной из
конфигураций
11 / 20
Покрывающие наборы
• Есть k параметров, имеющих n1, …, nk
возможных значений
• Покрывающий набор глубины t – матрица
из k столбцов
– В каждом столбце j встречаются только nj
значений
– Для каждого набора из t параметров и для
каждого сочетания их возможных значений в
некоторой строке есть это сочетание
12 / 20
Пример
• 35 параметров со значениями {0,1}
– 34 359 738 368 всех комбинаций
– Есть набор из 8 тестов, покрывающих все сочетания пар
значений
00000
11111
11111
11110
10001
01001
00100
00010
00000
11111
11111
00000
11000
00110
10101
01011
00000
11111
00000
11111
11100
10011
01010
00101
00000
11111
00000
10000
01110
01101
11011
10111
00000
00000
11111
11111
11100
10011
01010
00101
00000
00000
11111
10000
01110
01101
11011
10111
00000
00000
00000
11110
11101
11011
10111
01111
13 / 20
Методы построения
• Комбинаторные и алгебраические
• Рекурсивные
• Оптимизационные
– Жадный алгоритм
14 / 20
Учет условий использования
• Для данного набора t параметров
– Условия использования могут быть
противоречивы
– Условия использования могут ограничивать
допустимые комбинации значений
15 / 20
Проверка противоречивости
• В общем виде – NP-полная задача
– Есть только алгоритмы, экспоненциальные от
числа используемых элементарных формул
• У нас дизъюнкции имеют не более 2-х
элементов
– Задача 2-SAT
– Есть линейный алгоритм Тарьяна
16 / 20
Алгоритм Тарьяна (-Аспвала-Пласса)
• Преобразуем X || Y в две импликации
!X  Y и !Y  X
• Строим граф с вершинами X, !X,
соединенных дугами, соответствующими
импликациям
• Поиск в глубину за линейное от числа дуг
время находит компоненты сильной связности
• Противоречие есть тогда и только тогда, когда
в одной компоненте есть X и !X
17 / 20
Общая схема
• Разбор TCL-файла
– дает набор параметров, множества их значений и
зависимости
• Транзитивное замыкание зависимостей
– дает полные условия использования
• Построение покрывающего набора без учета условий
использования
– комбинаторная инициализация части
+ жадный алгоритм
• Достраивание набора с учетом условий использования
• Выдача результатов
– Набор директорий с файлами, описывающими
конфигурации
18 / 20
Практические результаты
№
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Platform
i386/i386
i386/x86
mips/bt205
mips/bt23-202
mips64/bt128
mips64/bt211
mips64/bt206
mips64/mpon
mips64/vmips
mips64/cprio64
komdiv64/bt128
R4000/bt128
R4000/bt206
R4000/mpon
R4000/vmips
R4000/cprio64
NP
228
215
373
331
548
334
334
301
241
563
548
419
220
183
113
434
Params
42362220
42362207
172151887261534193212316
172151134947253473102298
17215153413152526
172151134947253453102302
172151726153453182302
17215153413152279
5141362233
17215153413152541
17215153413152526
17215153423142397
1721511414726153463172174
17215153423142161
5142352105
17215153423142412
C
172
170
279
267
500
277
278
251
203
511
500
377
155
138
80
388
N1
25
23
322
319
289
319
289
289
27
289
289
289
823
289
28
289
N2
92
72
670
653
556
726
651
574
89
564
556
541
826
543
62
549
T1
0.01
0.01
1.57
1.07
0.57
0.78
0.58
0.33
0.01
0.58
0.56
0.44
1.28
0.23
0.01
0.46
T2
0.31
0.26
5.07
4.58
7.88
4.08
2.99
2.15
0.42
6.70
7.80
7.00
1.65
0.56
0.07
5.59
19 / 20
Спасибо за внимание!
20 / 20
Скачать