Я сконструировал конечный автомат для медицинского оборудования.
FSM можно было настроить через определенный мной формат XML.
Чтобы определить конечный автомат, нужно опираться на опыт разработки цифровых схем использования карт состояний,
Вы должны использовать то, что я называю картой перехода магистрали. В восточном побережье США большинство автомагистралей называют шлагбаумами. Власти Магистрали выдают карту тарифов платной магистрали. Если в платном участке было 50 выходов, на карте ценообразования была бы таблица 50х x 50cols, в которой исчерпывающий список выходов представлен как в виде строк, так и столбцов. Чтобы узнать плату за проезд для входа в выход 20 и выхода 30, просто найдите пересечение строки 20 и столбца 30.
Для конечного автомата из 30 состояний карта перехода магистрали будет представлять собой матрицу 30 x 30, в которой перечислены все 30 возможных состояний по строкам и столбцам. Давайте определим, что строки - это ТЕКУЩИЕ состояния, а столбцы - СЛЕДУЮЩИЕ состояния.
В каждой пересекающейся ячейке будет указана «цена» перехода из состояния CURRENT (строка) в состояние NEXT (столбец). Однако вместо одного значения $ ячейка будет ссылаться на строку в таблице входов, которую мы могли бы назвать идентификатором перехода.
В разработанном мною медицинском оборудовании FSM были входные данные, такие как String, enums, int и т. Д. В таблице Inputs перечислены эти входные стимулы по столбцам.
Чтобы построить таблицу входов, вы должны написать простую процедуру для перечисления всех возможных комбинаций входов. Но стол будет огромным. В вашем случае таблица будет иметь 4320 строк и, следовательно, 4320 идентификаторов перехода. Но это не утомительная таблица, потому что вы создали таблицу программно. В моем случае я написал простую JSP для отображения таблицы ввода переходов (и таблицы пошлин) в браузере или загрузки в виде csv для отображения в MS Excel.
Существует два направления построения этих двух таблиц.
Направление проектирования, где вы строите таблицу шлагбаума со всеми возможными переходами, закрашивая недостижимые переходы. Затем создайте в таблице входов все ожидаемые входные данные только для каждого достижимого перехода с номером строки в качестве идентификатора перехода. Каждый идентификатор перехода записывается в соответствующую ячейку карты переходов магистрали. Однако, поскольку FSM является разреженной матрицей, не все идентификаторы перехода будут использоваться в ячейках карты перехода магистрали. Кроме того, идентификатор перехода может использоваться многократно, поскольку одни и те же условия перехода могут применяться к более чем одной паре изменений состояния.
направление теста обратное, где вы строите таблицу входов.
Вы должны написать общую процедуру для исчерпывающего теста перехода.
Сначала подпрограмма считывает таблицу последовательности переходов, чтобы привести конечный автомат в состояние точки входа, чтобы начать цикл тестирования. В каждом текущем состоянии он готов пройти через все 4320 идентификаторов переходов. В каждой строке состояний CURRENT в карте переходов Turnpike будет ограниченное число допустимых столбцов NEXT.
Вы бы хотели, чтобы подпрограмма циклически перебирала все 4320 строк входных данных, которые она считывает из таблицы Inputs, чтобы неиспользуемые идентификаторы перехода не влияли на состояние CURRENT. Вы хотите проверить, что все эффективные идентификаторы переходов являются действительными.
Но вы не можете - потому что, как только будет осуществлен эффективный переход, он изменит состояние машины в СЛЕДУЮЩЕЕ состояние и не позволит вам завершить тестирование остальных идентификаторов перехода в этом предыдущем состоянии CURRENT. Как только машина изменит состояние, вы должны снова начать тестирование с идентификатором перехода 0.
Пути перехода могут быть циклическими или необратимыми или иметь комбинацию циклических и необратимых участков вдоль пути.
В вашей тестовой программе вам необходим регистр для каждого состояния, чтобы запомнить последний идентификатор перехода, перекачанный в это состояние. Каждый раз, когда тест достигает эффективного идентификатора перехода, этот идентификатор перехода остается в этом регистре. Таким образом, когда вы завершите цикл и вернетесь в уже пройденное состояние, вы начнете выполнять итерацию для следующего идентификатора перехода, большего, чем тот, который хранится в регистре.
Ваша процедура должна была бы позаботиться о необратимых участках пути перехода, когда машина переводится в конечное состояние, она перезапускает тест из состояния точки входа, повторяя входные данные 4320 со следующего идентификатора перехода, превышающего один хранится для государства. Таким образом, вы сможете исчерпывающе обнаружить все возможные пути перехода машины.
К счастью, автоматы FSM являются разреженными матрицами эффективных переходов, поскольку при исчерпывающем тестировании не будет использоваться полная комбинация числа идентификаторов переходов и числа квадратов возможных состояний. Однако трудность возникает, если вы имеете дело с устаревшим автоматом FSM, в котором визуальные или температурные состояния не могут быть возвращены обратно в тестовую систему, где вы должны визуально контролировать каждое состояние. Это было бы ужасно, но все же мы потратили две недели на дополнительное тестирование оборудования, визуально проходя только эффективные переходы.
Вам может не потребоваться таблица последовательности перехода (для каждого состояния точки входа для чтения процедуры тестирования, чтобы привести машину к желаемой точке входа), если ваш FSM позволяет вам достичь точки входа с простым сбросом и применением идентификатора перехода было бы просто до состояния входа. Но ваша рутина, способная считывать таблицу последовательности переходов, полезна, потому что часто вам приходится заходить в сеть состояний и начинать тестирование оттуда.
Вам следует ознакомиться с использованием карт переходов и состояний, потому что очень полезно обнаружить все возможные и недокументированные состояния машины и опросить пользователей, если они действительно хотели, чтобы они были недоступны (переходы стали неэффективными, а состояния стали недоступными) .
Преимущество, которое я имел, состояло в том, что это было новое оборудование, и у меня был выбор: спроектировать контроллер конечного автомата для чтения XML-файлов, что означает, что я могу изменить поведение конечного автомата в любом случае, как мне захочется, фактически, в любом случае, клиент хотел, и я смог убедиться, что неиспользованные идентификаторы перехода были действительно неэффективны.
Для списка java контроллера конечного автомата http://code.google.com/p/synthfuljava/source/browse/#svn/trunk/xml/org/synthful. Тестовые процедуры не включены.