Спецификация и тестирование систем с асинхронным интерфейсом

       

Ядро операционной системы реального времени


Наиболее значимой работой по тестированию асинхронных аспектов поведения многопотоковых и многопроцессных систем является проект по тестированию ядра 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 предоставляет возможность тестирования действительно сложных целевых систем с нетривиальной функциональностью, таких как ядро операционной системы реального времени.


Содержание раздела