Ядро операционной системы реального времени
Наиболее значимой работой по тестированию асинхронных аспектов поведения многопотоковых и многопроцессных систем является проект по тестированию ядра POSIX-совместимой операционной системы реального времени ОС2000. Эта операционная система предоставляет пользователю прикладной программный интерфейс, состоящий из 482 функций. В рамках проекта все функции были проанализированы и сгруппированы по подсистемам согласно реализуемой ими функциональности. Список подсистем приведен в таблице 2. Во втором столбце таблицы указано число интерфейсных функций, принадлежащих соответствующей подсистеме.
Потоки управления | 39 | A1 |
Планировщик | 10 | A1 |
Сигналы | 19 | A1 |
Синхронизация | 30 | A2 |
Очереди сообщений | 10 | A2 |
Прерывания | 14 | A1 |
Время и таймеры | 25 | A1 |
Поддержка многопроцессорности | 15 | A3 |
Память | 9 | A3 |
Ввод-вывод | 61 | A2 |
Асинхронный ввод-вывод | 8 | A1 |
Файловая система | 11 | A3 |
Терминалы | 10 | A1 |
Сокеты | 39 | A2 |
IEEE 754 | 16 | A1 |
Математические функции | 37 | S |
Строковые функции | 50 | S |
Функции протоколирования | 53 | A1 |
Вспомогательные функции | 26 | S |
Таблица 2. Разбиение функций ОС2000 на подсистемы.
Анализ функциональности выделенных подсистем показал, что только три подсистемы из девятнадцати не требуют применения методов тестирования систем с асинхронным интерфейсом и могут быть полностью протестированы на основе методов синхронного тестирования. Эти подсистемы помечены в таблице 2 символом S. Они реализуют математические функции, функции для работы со строками и вспомогательные функции.
Остальные шестнадцать подсистем либо содержат в своем интерфейсе взаимодействия, инициируемые тестируемой системой, либо их тестирование не может быть проведено на требуемом уровне качества с использованием только последовательных взаимодействий. К первой группе относятся девять подсистем, помеченных символом A1, а ко второй группе - семь подсистем, помеченных символами A2 и A3.
Подсистема управления потоками содержит такие асинхронные реакции как:
- старт нового потока управления;
- вызов функции инициализации во время динамической инициализации переменных;
- вызов функций свертывания и функций деструкторов локальных данных потока в процессе завершения работы потока.
В ходе проекта было выделено три класса функций прикладного программного интерфейса, для тестирования которых требуется применение асинхронных методов.
Первый класс функций составляют функции, приводящие к появлению явных асинхронных реакций, таких как сигналы, вызов функций обратного интерфейса, старт, приостановка и завершение потоков управления и т.д. Второй класс образуют блокируемые функции, управление из которых возвращается только при наступлении определенных условий, таких как освобождение требуемых ресурсов, поступление необходимого числа данных и т.д. В третий класс входят функции, которые должны обеспечивать корректность своей работы при одновременном вызове из различных потоков управления и для тестирования которых требуется одновременное участие целевой системы в нескольких взаимодействиях.
Одним из результатов проекта является подтверждение того, что во всех трех случаях использование предложенного метода тестирования систем с асинхронным интерфейсом позволяет преодолеть ограничения синхронного тестирования и обеспечить необходимый уровень качества тестирования. С другой стороны, проект продемонстрировал, что реализация метода тестирования асинхронных систем в системе тестирования CTesK предоставляет возможность тестирования действительно сложных целевых систем с нетривиальной функциональностью, таких как ядро операционной системы реального времени.