Спецификация и тестирование систем с асинхронным интерфейсом

       

Проекция технологии UniTesK на язык программирования C


Процесс тестирования по технологии UniTesK на платформе языка программирования C поддерживается семейством инструментов CTesK. Работа семейства инструментов CTesK устроена по принципам, рассмотренным в предыдущем разделе.

Для описания основных элементов архитектуры тестовой системы UniTesK используется спецификационное расширение языка C (SEC), которое позволяет сделать эти описания более компактными и удобными. SEC расширяет синтаксис языка программирования C небольшим числом дополнительных конструкций, основными среди которых являются:

  • спецификационные типы;
  • подтипы (инварианты типов);
  • инварианты переменных;
  • спецификационные функции;
  • медиаторные функции;
  • сценарные функции;
  • тестовые сценарии.

Спецификационные типы являются дополнительным видом типов SEC. Значения спецификационных типов располагаются в динамической памяти, управление которой осуществляется автоматически. Вместе с каждым таким значением хранится таблица функций для создания, сравнения, копирования и удаления значений соответствующего типа.

Подтипы также представляют собой дополнительный вид типов, множеством значений которых является подмножество значений других типов, ограниченное инвариантом подтипа. Другим видом инвариантов, поддерживаемых в спецификационном расширении языка C, являются инварианты переменных, которые позволяют определить множество допустимых значений глобальных переменных программы.

Спецификационные функции предназначены для описания модели требований. Каждая спецификационная функция определяет спецификацию одной интерфейсной операции. Спецификационная функция состоит из сигнатуры и тела.

Сигнатура спецификационной функции задает сигнатуру, соответствующей интерфейсной операции. Параметры спецификационной функции и их типы описываются как параметры обычной функции языка C. Для описания набора переменных модельного состояния, с которыми работает данная функция, используется дополнительная конструкция языка SEC, получившая название ограничения доступа. Ограничение доступа содержит список переменных модельного состояния с указанием вида доступа, осуществляемого к каждой переменной.
Набор метрик покрытия описывается последовательностью составных операторов, помеченных ключевым словом SEC coverage и идентификатором покрытия. Код внутри каждого отдельного составного оператора эквивалентен коду функции языка C, имеющей те же параметры, что и спецификационная функция, и возвращающей значение перечислимого типа. Этот перечислимый тип не определяется явным образом, а получается объединением всех идентификаторов, использованных в операторах return внутри данного составного оператора. Таким образом, составной оператор определяет метрику покрытия интерфейсной операции, а идентификатор покрытия задает имя этой метрики.

Тело спецификационной функции содержит одно предусловие, одно постусловие и ноль или более метрик покрытия. Предусловие и постусловие определяют спецификацию интерфейсной операции. Совокупность спецификаций интерфейсных операций, задаваемых всеми спецификационными функциями, образует модель требований.

Для задания модели поведения целевой системы используется другой вид функций SEC, называемых медиаторными. Каждой медиаторной функции соответствует некоторая спецификационная функция, которая получила название базовой спецификационной функции. Сигнатура медиаторной функции состоит из ключевого слова SEC mediator, идентификатора медиаторной функции, ключевого слова for и сигнатуры базовой спецификационной функции. Тело медиаторной функции представляет собой тело функции языка C, имеющей те же параметры и тот же тип возвращаемого значения, что и базовая спецификационная функция.

Медиаторная функция должна выполнить следующую последовательность действий:



  • осуществить воздействие на целевую систему, моделируемое соответствующей спецификационной функцией;
  • получить ответ от целевой системы:
  • синхронизировать переменные модельного состояния с внутренним состоянием целевой системы;
  • возвратить значение, моделирующее ответ целевой системы.


Каждое выполнение медиаторной функции в процессе тестирования рассматривается как выполнение одного взаимодействия между тестовой системой и целевой системой.


Значения переменных сценария определяют глобальное состояние сценария, которое может использоваться для определения графа сценария, правил построения последовательности тестовых воздействий и других аспектов поведения тестового сценария. Переменные сценария описываются как обычные глобальные переменные языка C и не имеют никакого специального синтаксического выделения.

Функция вычисления вершины графа задается в виде обычной функции языка C. Эта функция не имеет параметров и возвращает значение, представляющее вершину графа, которая соответствует текущему модельному состоянию и текущему глобальному состоянию сценария.

Изменение глобального состояния сценария и вызов спецификационных функций могут быть выполнены только из сценарных функций. Сценарные функции являются еще одним специальным видом функций SEC. Они не имеют параметров и возвращают значение типа bool. Каждая сценарная функция определяет набор стимулов графа сценария и отображение из каждого стимула в "компактный" тестовый сценарий, который может осуществлять тестовые воздействия посредством вызова спецификационных функций и изменять глобальное состояние сценария.

И в дополнение к основным исходным данным механизма dfsm также определяются функции инициализации и завершения работы тестового сценария, которые несут ответственность за выделение и освобождение необходимых ресурсов, а также за инициализацию глобального состояния сценария.

Для обработки описаний компонентов тестовой системы, выполненных на спецификационном расширении языка C, в состав системы тестирования CTesK входит SEC2C транслятор, который преобразует эти описания в код на языке C. Далее этот код обрабатывается обычным C компилятором и может быть собран в исполнимую программу или программы, образующие автоматизированный тестовый набор. Во время сборки к тестовому набору подключаются библиотеки, входящие в состав системы тестирования CTesK:


  • библиотека абстрактных типов данных;
  • библиотека поддержки тестовой системы;
  • библиотека поддержки времени исполнения SEC;
  • библиотека функций трассировки событий.



Содержание раздела