EFSM Traversal » History » Version 3
Alexander Kamkin, 02/27/2014 08:18 PM
1 | 1 | Alexander Kamkin | h1. EFSM Traversal |
---|---|---|---|
2 | |||
3 | 3 | Alexander Kamkin | h2. Веронский алгоритм |
4 | |||
5 | 1 | Alexander Kamkin | Алгоритм в целом состоит из трёх фаз: |
6 | 3 | Alexander Kamkin | # Обучение (learning); |
7 | # Случайный обход (random walk); |
||
8 | # Поиск с возвратами (backjumping). |
||
9 | 1 | Alexander Kamkin | |
10 | 3 | Alexander Kamkin | h3. Обучение |
11 | |||
12 | В ходе первой фазы анализируются зависимости переходов по данным и по управлению. Зависимость по данным: один переход устанавливает значение переменной, которую другой переход использует при вычислении значения другой переменной (внутренней или выходной). Зависимость по управлению: один переход устанавливает значение переменной, которая входит в условие срабатывания другого перехода. |
||
13 | |||
14 | Эти зависимости можно представить в виде ориентированного графа, в котором вершины — это переходы EFSM, а дуги представляют зависимости по данным/управлению. |
||
15 | Тут же происходит выявление счётчиков и зависимых от них переходов. Переменная _x_ считается счётчиком, если существует цикл, в который входит переход с условием срабатывания, зависящим от _x_, а также переход, в действии которого меняется значение _x_, причём значение _x_ прямо или косвенно зависит от предыдущего значения _x_. |
||
16 | 2 | Alexander Kamkin | |
17 | 3 | Alexander Kamkin | h3. Случайный обход |
18 | 1 | Alexander Kamkin | |
19 | 3 | Alexander Kamkin | На вход случайного обходчика подаётся два параметра: количество тестовых последовательностей и длина каждой последовательности. В цикле, пока количество тестовых последовательностей не достигнет максимального числа или пока не будут покрыты все переходы выполняются следующие действия: |
20 | |||
21 | 1 | Alexander Kamkin | # сброс состояния EFSM; |
22 | # генерация входных векторов в цикле, пока не будет достигнута максимальная длина текущей последовательности. |
||
23 | |||
24 | Входной вектор генерируется следующим образом: |
||
25 | |||
26 | # случайным образом выбирается один из переходов, исходящих из текущего состояния; |
||
27 | 3 | Alexander Kamkin | # делается попытка разрешить его условие срабатывания; |
28 | # если условие срабатывания разрешено: |
||
29 | ## невовлечённым в него входным переменным присваиваются случайные значения; |
||
30 | ## применяется действие перехода и обновляется состояние EFSM; |
||
31 | ## выполненному переходу ставится в соответствие номер текущей последовательности и номер текущего её элемента. |
||
32 | ### *TODO: Переходу или состоянию?* |
||
33 | # если условие срабатывания не разрешено: |
||
34 | ## *TODO: Что делается в этом случае?* |
||
35 | 1 | Alexander Kamkin | |
36 | 3 | Alexander Kamkin | h3. Поиск с возвратами |
37 | 1 | Alexander Kamkin | |
38 | 3 | Alexander Kamkin | Составляется список непокрытых переходов, причём переходы, исходящие из посещённых на предыдущем этапе состояний, помещаются в начало списка. Затем циклически выполняются следующие действия: |
39 | 1 | Alexander Kamkin | |
40 | # выбирается переход из начала списка; |
||
41 | 3 | Alexander Kamkin | # если его условие срабатывания зависит только от входных переменных: |
42 | ## извлекается сохранённая на предыдущем шаге информация о достижимости начального состояния этого перехода; |
||
43 | ## на основе этой информации к EFSM применяется соответствующая входная последовательность, и EFSM оказывается в начальном состоянии обрабатываемого перехода; |
||
44 | ## разрешается условие срабатывания этого перехода; |
||
45 | ### *TODO: А если условие неразрешимо?* |
||
46 | ## переход удаляется из списка; |
||
47 | # если его условие срабатывания зависит не только от входных переменных: |
||
48 | ## извлекается сохранённая на предыдущем шаге информация о достижимости начального состояния этого перехода; |
||
49 | ## на основе этой информации к EFSM применяется соответствующая входная последовательность, и EFSM оказывается в начальном состоянии обрабатываемого перехода; ## делается попытка разрешить условие срабатывания этого перехода: |
||
50 | ### если она успешна, переход удаляется из списка; |
||
51 | ### если нет — обработка продолжается; |
||
52 | # на основании информации о зависимостях по данным извлекаются переходы, которые определяют значение переменных, входящих в условие срабатывания обрабатываемого перехода; |
||
53 | # для каждого из них (пусть это будет _t_) выполняются следующие действия: |
||
54 | ## получить информацию о достижимости начального состояния _t_, выполнить соответствующую тестовую цепочку; |
||
55 | ### *TODO: что делать, если начальное состояние _t_ недостижимо?* |
||
56 | ## если переход _t_ не обновляет значение счётчика, при помощи алгоритма Дейкстры найти путь от _t_ к целевому переходу; |
||
57 | ## если в _t_ обновляется значение счётчика, алгоритм Дейкстры применяется два раза: сначала, чтобы найти путь от конечного состояния _t_ до целевого перехода, а затем - чтобы найти путь из начального состояния _t_ в самого себя через _t_; |
||
58 | ## при помощи решателя ограничений определяется, сколько раз необходимо пройти по второму пути (то есть по циклу), чтобы начать двигаться по первому; |
||
59 | ### *TODO: как это делается?* |
||
60 | ## построить ограничение в виде композиции действия перехода _t_ и условие срабатывания _t_ и целевого перехода; |
||
61 | ## если это ограничение неразрешимо: |
||
62 | ### перейти к следующему _t_; |
||
63 | ## если это ограничение разрешимо: |
||
64 | ### подать полученные значения входных переменных в EFSM; |
||
65 | ### последовательно пройти по каждому переходу из найденного алгоритмом Дейкстры пути; |
||
66 | ### если условие срабатывания какого-либо из переходов неразрешимо: |
||
67 | #### перейти к следующему _t_. |