EFSM Traversal » History » Revision 4
« Previous |
Revision 4/13
(diff)
| Next »
Alexander Kamkin, 02/28/2014 06:03 AM
Обход расширенного конечного автомата (EFSM, Extended Finite State Machine)¶
Веронский метод (Franco Fummi et al.)¶
Метод обхода EFSM состоит из трёх фаз:- обучение (learning);
- случайный обход (random walk);
- поиск с возвратами (backjumping).
Обучение¶
В ходе первой фазы анализируются зависимости переходов EFSM по данным и по управлению, и строится граф зависимостей — ориентированный граф, вершинами которого являются переходы заданного EFSM, а дуги представляют зависимости.
- TODO: в одном графе представляются как зависимости по данным, так и зависимости по управлению?
- TODO: зависимости по разным переменным представляются разными дугами?
Переход t 2 зависит по данным от перехода t 1, если t 1 устанавливает значение некоторой переменной x (действие перехода содержит присваивание в x), а t 2 использует x при вычислении значения другой переменной (внутренней или выходной).
Переход t 2 зависит по управлению от перехода t 1, если t 1 устанавливает значение некоторой переменной x, которая входит в условие срабатывания t 2.
На этой же фазе происходит выявление счётчиков и зависимых от них переходов. Переменная x считается счётчиком, если существует цикл в графе состояний EFSM, в который входит переход с условием срабатывания, зависящим от x, а также переход, в действии которого меняется значение x, причём значение x прямо или косвенно зависит от предыдущего значения x.
Случайный обход¶
На вход случайного обходчика подаётся два параметра: количество тестовых последовательностей и длина каждой последовательности. В цикле, пока количество тестовых последовательностей не достигнет максимального числа или пока не будут покрыты все переходы выполняются следующие действия:
- сброс состояния EFSM;
- генерация входных векторов в цикле, пока не будет достигнута максимальная длина текущей последовательности.
Входной вектор генерируется следующим образом:
- случайным образом выбирается один из переходов, исходящих из текущего состояния;
- делается попытка разрешить его условие срабатывания;
- если условие срабатывания разрешено:
- невовлечённым в него входным переменным присваиваются случайные значения;
- применяется действие перехода и обновляется состояние EFSM;
- выполненному переходу ставится в соответствие номер текущей последовательности и номер текущего её элемента.
- TODO: Переходу или состоянию?
- если условие срабатывания не разрешено:
- TODO: Что делается в этом случае?
Поиск с возвратами¶
Составляется список непокрытых переходов, причём переходы, исходящие из посещённых на предыдущем этапе состояний, помещаются в начало списка. Затем циклически выполняются следующие действия:
- выбирается переход из начала списка;
- если его условие срабатывания зависит только от входных переменных:
- извлекается сохранённая на предыдущем шаге информация о достижимости начального состояния этого перехода;
- на основе этой информации к EFSM применяется соответствующая входная последовательность, и EFSM оказывается в начальном состоянии обрабатываемого перехода;
- разрешается условие срабатывания этого перехода;
- TODO: А если условие неразрешимо?
- переход удаляется из списка;
- если его условие срабатывания зависит не только от входных переменных:
- извлекается сохранённая на предыдущем шаге информация о достижимости начального состояния этого перехода;
- на основе этой информации к EFSM применяется соответствующая входная последовательность, и EFSM оказывается в начальном состоянии обрабатываемого перехода; ## делается попытка разрешить условие срабатывания этого перехода:
- если она успешна, переход удаляется из списка;
- если нет — обработка продолжается;
- на основании информации о зависимостях по данным извлекаются переходы, которые определяют значение переменных, входящих в условие срабатывания обрабатываемого перехода;
- для каждого из них (пусть это будет t) выполняются следующие действия:
- получить информацию о достижимости начального состояния t, выполнить соответствующую тестовую цепочку;
- TODO: что делать, если начальное состояние t недостижимо?
- если переход t не обновляет значение счётчика, при помощи алгоритма Дейкстры найти путь от t к целевому переходу;
- если в t обновляется значение счётчика, алгоритм Дейкстры применяется два раза: сначала, чтобы найти путь от конечного состояния t до целевого перехода, а затем - чтобы найти путь из начального состояния t в самого себя через t;
- при помощи решателя ограничений определяется, сколько раз необходимо пройти по второму пути (то есть по циклу), чтобы начать двигаться по первому;
- TODO: как это делается?
- построить ограничение в виде композиции действия перехода t и условие срабатывания t и целевого перехода;
- если это ограничение неразрешимо:
- перейти к следующему t;
- если это ограничение разрешимо:
- подать полученные значения входных переменных в EFSM;
- последовательно пройти по каждому переходу из найденного алгоритмом Дейкстры пути;
- если условие срабатывания какого-либо из переходов неразрешимо:
- перейти к следующему t.
- получить информацию о достижимости начального состояния t, выполнить соответствующую тестовую цепочку;
Литература¶
TODO: Дать ссылку на статью.
Updated by Alexander Kamkin over 10 years ago · 13 revisions