Background Image
Previous Page  4 / 22 Next Page
Information
Show Menu
Previous Page 4 / 22 Next Page
Page Background

В терминологии CSA, описанной в работе [14], выполнение про-

граммы представляет собой множество последовательных переходов

между состояниями из одного состояния в другие. Каждому состоя-

нию соответствует точка выполнения (ProgramPoint), для которого это

состояние актуально

1

. Переходы между состояниями обусловлены ли-

бо эффектами интерпретации отдельных выражений, определенными

стандартом языка, либо событиям, связанными с выполнением прове-

рок проверяющими модулями (Checker). Из одной точки выполнения

может идти один и более переход в другое. Несколько переходов про-

исходит в случаях, когда условие перехода невозможно однозначно

разрешить в пользу выбора какой-либо одной ветви выполнения, на-

пример, при обработке условных операторов (это и есть разделение

на классы эквивалентности). Кроме того, проверки также могут разде-

лять состояние программы, сохраняя в разных структурах состояния

различающиеся данные состояния. Результирующее множество узлов

в виде состояний и переходов из одного состояния программы в другое

образует граф выполнения программы (ExplodedGraph).

За базовое моделирование без каких-либо проверок корректности

исходного кода отвечает ядро анализатора. Ядро анализатора пред-

ставляет собой, во-первых, набор методов, связанных с построением

графа состояний выполнения программы (класс CoreEngine), а, во-

вторых, набор методов, отвечающих за моделирование эффектов, спе-

цифичных для языка программирования, т.е. моделирование эффектов

выражений и правил их выполнения (ExprEngine). Кроме того, в про-

цедуре построения графа выполнения могут принимать участие прове-

ряющие модули, анализируя события, которые наступают в процессе

выполнения. Эти проверки могут останавливать построение графа на

заданном пути в случае обнаружения критического дефекта, разделять

состояние программы и вносить в него дополнительную информацию

для работы проверяющего модуля.

Структура состояния — представление состояния программы в точ-

ке выполнения. Структура состояния включает следующие данные.

1. Содержимое памяти программы (модель памяти,

RegionStore

)

[15], представляемое как отображение между регионами памяти и сим-

вольными значениями, связанными с этими регионами. Для создания

записи в модели памяти необходимо провести непосредственное свя-

зывание региона памяти и его значения, например, при обработке опе-

ратора присваивания. Операциями, изменяющими содержимое модели

памяти, являются непосредственное связывание региона со значением

(выполняющееся, например, при присваивании переменной значения),

1

Здесь и далее в скобках приведены названия соответствующих классов фрейм-

ворка CSA.

78 ISSN 0236-3933. Вестник МГТУ им. Н.Э. Баумана. Сер. “Приборостроение”. 2015. № 5