Тестирование с отложенными реакциями
Пример: Object Request Broker (ORB) RACE, разработанный для однопроцессорных встроенных систем. И тест, и целевая система - объекты, существующие под управлением этого ORB. Стимулы и реакции - сообщения ORB, причем сообщения передаются между объектами только в промежутке между получением ими управления.
В данном случае для задачи тестирования неважно, сколько реально существует активных потоков (см. ниже обсуждение случая 6). В любом случае тест не обладает собственным потоком управления и может в течение некоторого времени после применения тестового стимула получать реакции на него от целевой системы и выдавать новые стимулы. Именно эти критерии заставляют относить целевую систему к данному классу систем.
Если активный поток не является единственным, то требуется построение модели, аналогичной той, которая используется в случае 6 (см. ниже). Если такой поток - единственный, то данный случай проще случая 6, поскольку не требуется специальное построение сериализации событий. Однако случай 3 не может быть сведен к случаям 1 или 2, потому что возможны отложенные реакции целевой системы.
Задача построения модели для систем данного класса решается аналогично случаю 6. Однако для системы с конфигурацией такого рода потребовалась особая реализация обходчика: обычный тест UniTesK выполняется в собственном потоке управления с собственным стеком, в котором хранятся вызовы методов и их локальные переменные; в данном же случае тест не обладает собственным стеком вызовов и не имеет возможности выполнять какие-либо длительные действия.
Упрощенный алгоритм работы тестовой системы в случае 3 выглядит следующим образом:
1. | обеспечить регулярное получение управления в активном потоке (например, подписаться на получение сигналов от таймера); | |
2. | при очередном получении управления: | |
2.1 | проверить реакции от целевой системы, полученные за время ее самостоятельной работы, и состояние, в котором она находится; при необходимости сообщить об ошибках; | |
2.2 | если тест находится в состоянии ожидания реакций от целевой системы: | |
2.2.1 | если получены не все ожидаемые реакции и время ожидания еще не вышло, вернуть управление; | |
2.2.2 | если все ожидаемые реакции получены, перейти к шагу 2.4; | |
2.2.3 | иначе сообщить об ошибке; | |
2.3 | если тест находится в состоянии ожидания некоторого состояния целевой системы: | |
2.3.1 | если не все ожидаемые реакции получены и время ожидания еще не вышло, вернуть управление; | |
2.3.2 | если нужное состояние достигнуто, перейти к шагу 2.4; | |
2.3.3 | иначе сообщить об ошибке; | |
2.4 | вычислить очередной стимул, который следует применить к целевой системе в текущем состоянии; | |
2.5 | если такой стимул найден, применить его, проанализировать немедленные реакции, при необходимости перейти в состояние ожидания реакций и вернуть управление; | |
2.6 | если существует состояние целевой системы N, которое уже существовало в процессе выполнения теста, но в котором были применены не все возможные стимулы, то попытаться перейти в него; найти в уже обойденной части графа состояний путь из текущего состояния в искомое, вычислить и подать нужные стимулы, перейти в режим ожидания состояния N и возвратить управление; | |
2.7 | если такое состояние не найдено, значит во всех обнаруженных состояниях применены все возможные стимулы; тест завершает работу. |