Автоматическая генерация тестовых данных для оптимизаторов графических моделей

       

В настоящее время графическое моделирование


В настоящее время графическое моделирование активно применяется в различных отраслях промышленности: автомобилестроении (Ford, General Motors [], Daimler Chrysler []), авиастроении (Boeing []), аэрокосмической промышленности (American Institute of Aeronautics and Astronautics []) и других.
Графическое моделирование позволяет создавать модели разрабатываемых систем из различных элементарных деталей на экране монитора, как в конструкторе. При этом от разработчиков не требуется изучения каких-либо формальных языков описания моделей.
Одной из наиболее распространенных сфер применения графического моделирования в настоящее время является создание исполняемого кода для микропроцессоров встроенных систем. Вместо написания кода вручную инженеры создают модель, описывающую работу устройства, а на основе этой модели специальная программа - генератор кода - создает код на языке программирования.
Среди существующих инструментов для создания моделей можно выделить инструменты Simulink и Stateflow, входящие в пакет Matlab от MathWorks [], ASCET от ETAS [], который может быть интегрирован в Matlab, а также Statemate от I-Logix [], позволяющий создавать модели с помощью UML-диаграмм.
Для генерации кода на основе моделей Matlab используются Real-Time Workshop, входящий в Matlab, а также инструмент TargetLink от компании dSpace []. Существует инструмент для генерации кода на основе моделей ASCET.
В автомобилестроении в настоящее время стандартом де-факто являются пакеты Matlab и TargetLink, используемые компаниями Daimler Chrysler, General Motors, Ford, Toyota [] и др.
Можно выделить следующие основные достоинства графического моделирования:

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



Генераторы кода широко используются в таких областях, где к используемым программам предъявляются очень высокие требования (встроенные системы автомобилей, самолетов и т.п.). Соответственно, высокие требования предъявляются и к генераторам кода.
Можно выделить два основных требования:

  • получаемый код должен быть сравним с кодом, написанным вручную, как по требованиям к ресурсам, так и по времени выполнения;
  • структура кода должна соответствовать модели.

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


Число всевозможных преобразований, как правило, велико, и для проверки корректности генератора требуется большое количество тестов, поэтому встает вопрос об автоматизации разработки тестовых данных.
Для формального описания преобразований моделей, осуществляемых трансляторами, используются так называемые правила преобразования графов []. Каждое правило состоит из двух частей - левой и правой. Левая часть описывает шаблонную конструкцию, которая будет подвергнута трансформации, и ограничения на параметры этой конструкции, при выполнении которых трансформация будет произведена. Правая часть описывает результирующую конструкцию, которая будет получена после преобразования.
Генераторы кода начали применяться в промышленности недавно, и работ, посвященных их тестированию, немного. Из существующих подходов можно выделить формальное доказательство корректности работы генератора (например, []) и тестирование на основе правил преобразований графов - Classification Tree Method (CTM) [, ].
При использовании формального доказательства (например, []) возникают традиционные для этого метода проблемы - длительные сроки и сложность проверки, приводящие к высокой стоимости тестирования.


Кроме того, в настоящее время для основных существующих генераторов кода отсутствуют общедоступные формальные описания. В промышленных масштабах формальные доказательства на данный момент не используется.
Метод CTM [, ] состоит из двух этапов:

  • разбиение шаблона для тестирования на независимые области;
  • разбиение полученных областей на классы эквивалентности.

На рис. 1 проиллюстрирован пример применения метода к оптимизации, выполняющей вычисление константных аргументов блока Sum. В качестве областей здесь выделены блоки Sum и Const, классы эквивалентности строятся согласно количеству блоков Const в модели.

Рис. 1.Пример применения метода CTM
Преимуществом метода CTM является простота определения покрытия. Также имеется большой опыт использования этого метода в смежной области - для полуавтоматического создания тестов для готовых систем на основе их моделей; последним фактом обусловлен большой интерес промышленности к методу CTM [].
Основным недостатком использования CTM для тестирования генераторов кода является отсутствие автоматизации. Разбиение шаблона на области и далее на классы эквивалентности осуществляется вручную; при этом для реальных систем число получаемых классов эквивалентности, как правило, очень велико. Для полноты тестирования для каждого из этих классов необходимо получить, по крайней мере, один тест, а инструментов для автоматической генерации тестов в настоящее время не существует.
В настоящей статье предложен метод GraphOTK автоматической генерации тестовых данных для тестирования оптимизирующих трансляторов графических моделей. Предложенный метод позволяет решить проблему автоматической генерации тестовых данных, а также за счет параметризации генератора позволяет варьировать количественные и качественные характеристики получаемых тестовых данных.

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