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

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

заданного

а

выполняется только

else

-ветвь, но не

if

-ветвь.

Введем обозначения:

число

n

ветвей выполнения, полученных в резюме анализа вы-

зываемой функции;

номер

i

ветви выполнения,

0

6

i < n

;

число

p

i

символьных правосторонних входных значений в

i

ветви выполнения;

номер

j

символьного значения,

0

6

j < p

i

;

символьное значение

s

ij

с номером

j

в

i

-й ветви выполнения;

множество значений

r

входные

ij

для значения

s

ij

в контексте вызы-

вающей функции в точке непосредственно перед вызовом функ-

ции;

множество значений

r

резюме

ij

для значения

s

ij

в контексте вызы-

ваемой функции;

состояние программы

state

входное

в контексте вызывающей функ-

ции в точке непосредственно перед вызовом функции;

состояние программы

state

выходное

после вызова функции (после

применения резюме).

Тогда при применении

i

-й ветви выполнения резюме

i

[0;

n

]

,

j

[0;

p

i

] :

r

выходные

ij

=

r

входные

ij

r

резюме

ij

, т.е. результирующее

множество — пересечение множеств входных конкретных значений

символического значения и множества конкретных значений симво-

лического значения из применяемой ветви резюме.

Если результирующее множество конкретных значений является

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

выполнения недостижима и не принимается в рассмотрение, что мо-

жет быть выражено следующей формулой:

(

i, j

:

r

входные

ij

r

резюме

ij

=

=

)

(

state

входное

9

state

выходное

)

.

Сбор данных для создания резюме.

Пусть некоторое значение

относится к региону памяти. Поскольку при передаче аргумента функ-

ции не по значению его значение может измениться, необходимо раз-

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

ходное значение. Для получения информации о разбиении данных

на классы эквивалентности можно отслеживать события ветвлений

(assume), однако это неудобно на практике, так как, во-первых, требует

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

входных и выходных значений, а, во-вторых — активного участия сбор-

щика резюме в процессе принятия решения о ветвлении. Вместо это-

го в настоящем решении предложен и использован подход, основан-

ный на проверке активности символов и регионов. Входные данные,

внешние по отношении к анализируемой функции, всегда являются

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

тивности), можно определить диапазон возможных значений символа,

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