Project

General

Profile

EFSM Traversal » History » Version 4

Alexander Kamkin, 02/28/2014 06:03 AM

1 4 Alexander Kamkin
h1. Обход расширенного конечного автомата (EFSM, Extended Finite State Machine)
2 1 Alexander Kamkin
3 4 Alexander Kamkin
h2. Веронский метод (Franco Fummi et al.)
4 3 Alexander Kamkin
5 4 Alexander Kamkin
Метод обхода EFSM состоит из трёх фаз:
6
# обучение (learning);
7
# случайный обход (random walk);
8
# поиск с возвратами (backjumping).
9
10 1 Alexander Kamkin
h3. Обучение
11
12 4 Alexander Kamkin
В ходе первой фазы анализируются _зависимости_ переходов EFSM по _данным_ и по _управлению_, и строится граф зависимостей — ориентированный граф, вершинами которого являются переходы заданного EFSM, а дуги представляют зависимости.
13 3 Alexander Kamkin
14 4 Alexander Kamkin
# *TODO: в одном графе представляются как зависимости по данным, так и зависимости по управлению?*
15
# *TODO: зависимости по разным переменным представляются разными дугами?*
16
17
Переход _t_ ~2~ _зависит по данным_ от перехода _t_ ~1~, если _t_ ~1~ устанавливает значение некоторой переменной _x_ (действие перехода содержит присваивание в _x_), а _t_ ~2~ использует _x_ при вычислении значения другой переменной (внутренней или выходной).
18
19
Переход _t_ ~2~ _зависит по управлению_ от перехода _t_ ~1~, если _t_ ~1~ устанавливает значение некоторой переменной _x_, которая входит в условие срабатывания _t_ ~2~.
20
21
На этой же фазе происходит выявление счётчиков и зависимых от них переходов. Переменная _x_ считается _счётчиком_, если существует цикл в графе состояний EFSM, в который входит переход с условием срабатывания, зависящим от _x_, а также переход, в действии которого меняется значение _x_, причём значение _x_ прямо или косвенно зависит от предыдущего значения _x_.
22 2 Alexander Kamkin
 
23 3 Alexander Kamkin
h3. Случайный обход
24 1 Alexander Kamkin
25 3 Alexander Kamkin
На вход случайного обходчика подаётся два параметра: количество тестовых последовательностей и длина каждой последовательности. В цикле, пока количество тестовых последовательностей не достигнет максимального числа или пока не будут покрыты все переходы выполняются следующие действия:
26
27 1 Alexander Kamkin
# сброс состояния EFSM;
28
# генерация входных векторов в цикле, пока не будет достигнута максимальная длина текущей последовательности.
29
30
Входной вектор генерируется следующим образом:
31
32
# случайным образом выбирается один из переходов, исходящих из текущего состояния;
33 3 Alexander Kamkin
# делается попытка разрешить его условие срабатывания;
34
# если условие срабатывания разрешено:
35
## невовлечённым в него входным переменным присваиваются случайные значения;
36
## применяется действие перехода и обновляется состояние EFSM;
37
## выполненному переходу ставится в соответствие номер текущей последовательности и номер текущего её элемента.
38
### *TODO: Переходу или состоянию?*
39
# если условие срабатывания не разрешено:
40
## *TODO: Что делается в этом случае?*
41 1 Alexander Kamkin
42 3 Alexander Kamkin
h3. Поиск с возвратами
43 1 Alexander Kamkin
 
44 3 Alexander Kamkin
Составляется список непокрытых переходов, причём переходы, исходящие из посещённых на предыдущем этапе состояний, помещаются в начало списка. Затем циклически выполняются следующие действия:
45 1 Alexander Kamkin
46
# выбирается переход из начала списка;
47 3 Alexander Kamkin
# если его условие срабатывания зависит только от входных переменных:
48
## извлекается сохранённая на предыдущем шаге информация о достижимости начального состояния этого перехода;
49
## на основе этой информации к EFSM применяется соответствующая входная последовательность, и EFSM оказывается в начальном состоянии обрабатываемого перехода;
50
## разрешается условие срабатывания этого перехода;
51
### *TODO: А если условие неразрешимо?*
52
## переход удаляется из списка;
53
# если его условие срабатывания зависит не только от входных переменных:
54
## извлекается сохранённая на предыдущем шаге информация о достижимости начального состояния этого перехода;
55
## на основе этой информации к EFSM применяется соответствующая входная последовательность, и EFSM оказывается в начальном состоянии обрабатываемого перехода; ## делается попытка разрешить условие срабатывания этого перехода:
56
### если она успешна, переход удаляется из списка;
57
### если нет — обработка продолжается;
58
# на основании информации о зависимостях по данным извлекаются переходы, которые определяют значение переменных, входящих в условие срабатывания обрабатываемого перехода;
59
# для каждого из них (пусть это будет _t_) выполняются следующие действия:
60
## получить информацию о достижимости начального состояния _t_, выполнить соответствующую тестовую цепочку;
61
### *TODO: что делать, если начальное состояние _t_ недостижимо?*
62
## если переход _t_ не обновляет значение счётчика, при помощи алгоритма Дейкстры найти путь от _t_ к целевому переходу;
63
## если в _t_ обновляется значение счётчика, алгоритм Дейкстры применяется два раза: сначала, чтобы найти путь от конечного состояния _t_ до целевого перехода, а затем - чтобы найти путь из начального состояния _t_ в самого себя через _t_;
64 1 Alexander Kamkin
## при помощи решателя ограничений определяется, сколько раз необходимо пройти по второму пути (то есть по циклу), чтобы начать двигаться по первому;
65
### *TODO: как это делается?*
66
## построить ограничение в виде композиции действия перехода _t_ и условие срабатывания _t_ и целевого перехода;
67
## если это ограничение неразрешимо:
68 3 Alexander Kamkin
### перейти к следующему _t_;
69
## если это ограничение разрешимо:
70
### подать полученные значения входных переменных в EFSM;
71
### последовательно пройти по каждому переходу из найденного алгоритмом Дейкстры пути;
72
### если условие срабатывания какого-либо из переходов неразрешимо:
73
#### перейти к следующему _t_.
74 4 Alexander Kamkin
75
h2. Литература
76
77
*TODO: Дать ссылку на статью.*