80 Глава 5. Окрестностное тестирование программ
d
i
∈<D
p
> (см. рисунок 5.1 на странице 75). Цель данного раздела—таким образом органи-
зовать тестирование программы p, чтобы была получена формализация неформального
предельного критерия выбора тестов 5.3 (страница 78).
Первый момент, подлежащий формализации в данном критерии, заключен в во-
просе: “Что” использует информацию о тексте программы p в процессе тестовых
прогонов? Как организовать тестовый прогон, чтобы это “что-то” было явно наблю-
даемым? Необходимо процесс p d
i
L
∗
⇒ res
i
, в котором программа p играет активную
роль (субъект) а данные d
i
—пассивную роль (объект) преобразовать следующим обра-
зом: ввести в явное рассмотрение систему X , выполняющую вычисление p d
i
∗
⇒ res
i
,
которая бы имела в качестве объектов те кст программы p и данные d
i
.
Таким образом, необходимо перейти от изначальной формы организации тестового
прогона p d
i
L
∗
⇒ res
i
. к но во й форме его организации: X (p:d
i
)
∗
⇒ res
i
.
Это хорошо известное в тео рии программирования преобразование—переход от непо-
средственного исполнения к интерпретации,—и X —ничто иное, как интерпретатор язы-
ка L: intL. После данного преобразования имеем более точный (более формальмый)
критерий: набор тестов d
1
,. . . ,d
n
считается достаточным для тестирования про-
граммы p, если в процессе тестовых прогонов intL(p:d
i
)
∗
⇒ res
i
на данном наборе
тестов в совокупности было обеспечено использование интерпретатором intL всей
информации о p. Следующий шаг формализации—точное определение понятия “ис-
пользована информация”. Для него требуется введение метасистемы, наблюдающей,
как интерпретатор intL выполняет вычисление p d
i
и как он при этом потребляет
информацию о p . Метасистема тако го сорта описана в главе 4—это окрестностный ана-
лизатор. Таким образом, приходим к следующей схеме организации процесса тестового
прогона nan intL (p:d
i
), где intL∈R—интерпретатора языка L: для любой программы
p∈L и данных d в ыполнено
intL (p:d)
R
∗
⇒ res ⇐⇒ p d
L
∗
⇒ res.
В такой схеме—nan intL (p:d
i
)—организации процесса тестового прогона имеем
следующее распределение метасистемных уровней:
1. (p:d)—об ъекты, данные для intL;
2. intL—система, выполняет вычисление p d
i
∗
⇒ res
i
;
3. nan—метасистема, наблюдает, как работает система intL на данных (p:d), опре-
деляет, какая информация о данных (p :d ) при этом используется системой intL.
Помимо того, что такое распределение метауровней является необходимым для
формализации критерия 5.3, оно еще является и естественным: тестирование програм-
мы p—деятельность над программой p, в которой изучаются процессы выполнения
программы p на т есто вых данных. Поэтому естественно p отнести к объектам в дан-
ной деятельности. А поскольку необходимо изучать процессы исполнения программы
p, то естественно выделить систему, реализующую данные процессы, и метасисте-
му—в которой собственно и происходит изучение процессов исполнения программы p.
Приведенная выше схема организации процесса тестирования соответствует тому, что
тестирование—это метадеятельность над программой.