Конспект лекций по программированию для начинающих. Гладков В.П. - 92 стр.

UptoLike

Составители: 

94
while x<>y do { B }
if x>y { C }
then x:=x-y { D }
else y:=y-x; { E }
write(x); { F }
end.
Проведем тестирование программы. Для этого построим столько тестов, чтобы
можно было пройти по каждой ветви программы хотя бы по разу. В приведенном
фрагменте имеется пять ветвей:
первая ветвь - A - B;
вторая ветвь - B - C;
третья ветвь - B - F;
четвертая ветвь - C - D - B;
пятая ветвь - C - E - B.
Путей здесь бесконечно много. Примерами путей являются последовательности
из следующих
ветвей:
первый путь ветви - 1 - 3;
второй путь ветви - 1 - 2 - 4 - 3;
третий путь ветви - 1 - 2 - 5 - 3;
четвертый путь ветви - 1 - 2 - 4 - 2 - 5 - 3;
пятый путь ветви - 1 - 2 - 4 - 2 - 4 - 2 - 4 - 3;
шестой путь ветви - 1 - 2 - 5 - 2 - 5 - 2 - 4 - 3 и т. д.
Среди указанных путей есть такие, в которых используются не все ветви (это
пути 1, 2, 3, 5), но есть и такие, в которых проходится каждая ветвь программы
хотя бы
по одному разу (это пути 4, 6).
Для построения теста выбранного пути построим сначала предикат пути,
который будет принимать значение истинно, если в процессе исполнения
программы реализуется данный путь, и ложно - при реализации других путей.
Для построения предиката пути проходим путь в обратном направлении и
выписываем конъюнкцию всех условий, которые встречаются
на этом пути. Если
при обратном проходе пути осуществляется переход через оператор присваивания
(переменная := выражение), то в предикат пути вместо всех вхождений переменной
из левой части оператора присваивания подставляется выражение из его правой
части. Предикаты пути, построенные так, как описано выше, всегда выражаются в
терминах констант и входных переменных. Чтобы
пройти заданный путь во время
исполнения программы, необходимо только найти такие значения исходных
данных, которые делают предикат пути истинным.
Рассмотрим процесс построения предиката для четвертого пути приведенной
выше программы.
Вначале проходим ветвь 3 от F к B. При исполнении программы в блок F
попадаем в случае ложности условия В, поэтому предикат этой ветви имеет
вид P:
X=Y.
Движемся дальше от В к С через Е. При переходе оператора присваивания
Y:=Y-X в предикате Р все вхождения переменной Y заменим на выражение Y-X.
Получаем P: X=Y-X или P: 2*X=Y. Поскольку Е выполняется в случае ложности
                                        94

            while x<>y do         {B}
                   if x>y         {C}
                   then x:=x-y    {D}
                   else y:=y-x;   {E}
            write(x);             {F}
    end.
    Проведем тестирование программы. Для этого построим столько тестов, чтобы
можно было пройти по каждой ветви программы хотя бы по разу. В приведенном
фрагменте имеется пять ветвей:
    первая ветвь           - A - B;
    вторая ветвь           - B - C;
    третья ветвь           - B - F;
    четвертая ветвь - C - D - B;
    пятая ветвь            - C - E - B.
    Путей здесь бесконечно много. Примерами путей являются последовательности
из следующих ветвей:
    первый путь ветви - 1 - 3;
    второй путь ветви - 1 - 2 - 4 - 3;
    третий путь ветви - 1 - 2 - 5 - 3;
    четвертый путь ветви - 1 - 2 - 4 - 2 - 5 - 3;
    пятый путь ветви - 1 - 2 - 4 - 2 - 4 - 2 - 4 - 3;
    шестой путь ветви - 1 - 2 - 5 - 2 - 5 - 2 - 4 - 3 и т. д.
    Среди указанных путей есть такие, в которых используются не все ветви (это
пути 1, 2, 3, 5), но есть и такие, в которых проходится каждая ветвь программы
хотя бы по одному разу (это пути 4, 6).
    Для построения теста выбранного пути построим сначала предикат пути,
который будет принимать значение истинно, если в процессе исполнения
программы реализуется данный путь, и ложно - при реализации других путей.
    Для построения предиката пути проходим путь в обратном направлении и
выписываем конъюнкцию всех условий, которые встречаются на этом пути. Если
при обратном проходе пути осуществляется переход через оператор присваивания
(переменная := выражение), то в предикат пути вместо всех вхождений переменной
из левой части оператора присваивания подставляется выражение из его правой
части. Предикаты пути, построенные так, как описано выше, всегда выражаются в
терминах констант и входных переменных. Чтобы пройти заданный путь во время
исполнения программы, необходимо только найти такие значения исходных
данных, которые делают предикат пути истинным.
    Рассмотрим процесс построения предиката для четвертого пути приведенной
выше программы.
    Вначале проходим ветвь 3 от F к B. При исполнении программы в блок F
попадаем в случае ложности условия В, поэтому предикат этой ветви имеет вид P:
X=Y.
    Движемся дальше от В к С через Е. При переходе оператора присваивания
Y:=Y-X в предикате Р все вхождения переменной Y заменим на выражение Y-X.
Получаем P: X=Y-X или P: 2*X=Y. Поскольку Е выполняется в случае ложности