Введение¶
АНИС — это инструмент для динамической верификации
на основе формальных моделей. Он позволяет проверять
свойства во время динамической верификации,
записанные в виде формальной модели на языке Event-B
.
АНИС позиционируется как средство интегрирования существующих инструментов динамической верификации (не использующих формальные модели) с формальными моделями. Инструмент динамической верификации должен мониторить поведение тестируемой системы и генерировать файлы с трассами. Эти файлы содержат выполнявшиеся системные операции и описание состояния системы перед первой операцией. АНИС проверит, что эти операции выполнялись в соответствии с формальной моделью.
Формальная модель должна состоять из спецификаций системных операций. Формальная спецификация операции содержит следующую информацию:
название операции;
список аргументов операции;
список результатов операции (за исключением числового кода – статуса завершения);
предусловия операции (условие, при котором операция должна завершиться успешно);
постусловия операции (условие, описывающее значения результатов операции).
Зачастую тестируемые системы обладают состоянием, то есть результаты предыдущих операций влияют на выполнение последующих операций. Поэтому формальная модель должна содержать спецификацию состояния:
список переменных состояния;
указание, какой тип имеет каждая переменная;
инварианты (условия, при которых переменные состояния описывают правильные, безопасные, корректные состояния системы).
Для моделей с состоянием предусловия операций – это выражения от аргументов операции и переменных состояния, постусловия операций – это выражения от аргументов операции, результатов операции и переменных состояния. Кроме того, спецификация операции дополняется еще одним компонентом – описанием того, как надо изменить состояние модели при выполнении этой операции.
Проверка трасс на соответствие формальной модели выполняется следующим образом:
модель переводится в состояние, соответствующее начальному состоянию из трассы;
затем последовательно для каждой операции трассы:
проверяется предусловие;
если операция завершилась неуспешно и предусловие истинно, фиксируется несоответствие трассы модели и проверка завершается;
если операция завершилась успешно и предусловие ложно, фиксируется несоответствие трассы модели и проверка завершается;
если операция завершилась успешно, то проверяется постусловие;
если постусловие ложное, фиксируется несоответствие трассы модели и проверка завершается;
иначе выполняется переход в новое состояние модели согласно спецификации операции.
Если формат операций в реализации и в модели различаются (типы данных в модели для аргументов и результатов операций, названия операций, список аргументов и результатов), то необходимо преобразовать операции к модельному виду. Аналогичная потребность в промежуточном этапе преобразования возникает, если нет прямого способа перевести модель в состояние, соответствующее начальному состоянию в трассе. Такой преобразователь будет называться медиатором.
В языке Event-B
формальная спецификация операций
(они называются событиями) выглядит несколько иначе.
Нет разделения на аргументы и результаты операции —
они называются параметрами событий.
Нет разделения на предусловия и постусловия —
они называются охранными условиями событий. Тем самым
проверка предусловия и постусловия будет выполняться
совместно.
Итого, чтобы выполнить динамическую верификацию в АНИС пользователь должен сделать следующее:
подготовить модель;
задать директорию с трассами и их формат;
реализовать медиатор.
Далее каждый из этих этапов будет описан подробнее.