1.
Составить тесты для проверки программы, используя метод покрытия операторов и метод покрытия решений.
Сформировать список ошибок, которые могут быть выявлены этими тестами.
Задача: написать программу, вычисляющую значения выражения , где
Значения переменных k, z вводятся с клавиатуры. Результат выводится на экран.
Программа должна быть составлена с применением пользовательских процедур и функций.
Эталон ответа:
Текст программы:
program func;
Uses Crt;
var
k, z, x, y : real;
procedure Header;
begin
WriteLn ('Нахождение значения функции Y=Ln^k(1+X),');
WriteLn ('где X=k*z^3 при k<1');
WriteLn (' X=z*(z+1) при k>=1');
WriteLn;
end; {procedure Header}
procedure XValue(k,z:real; var x:real);
begin
if k < 1 then x := k*(z*z*z)+1
else x := z*(z+1)+1;
end; {procedure XValue}
procedure OutCount;
begin
if x <= 0 then
begin
WriteLn ('X = ',x,': функция в этой точке не определена');
Exit;
end
else if k = 0 then
begin
WriteLn ('Y = 1');
Exit;
end
else
begin
y := exp(ln(ln(x))*k);
Write ('Y= ',y);
end;
end; {procedure OutCount}
begin
ClrScr;
Header;
Write ('Введите значение k: ');
ReadLn (k);
Write ('Введите значение z: ');
ReadLn (z);
XValue(k,z,x);
OutCount;
ReadKey;
end.
Набор тестов (тестирование):
Метод покрытия операторов
Очевидно, что выполнить все операторы можно, подобрав тестовые значения, при которых будут выполнены все ветви функции Valid, где происходит сравнение с нулем переменной a и функции Dis. Остальные части программы имеют линейную структуру и при выполнении программы будут выполнены в любом случае. Таким образом, подобрав значения переменных, при которых истинны пары условий a = 0, Dis < 0
a = 0, Dis > 0
a ≠ 0, Dis < 0
a ≠ 0, Dis > 0, выполним каждый оператор программы. Первую пару можно не рассматривать, т.к. при a = 0 нет смысла переходить к проверке значения дискриминанта, т. е. необходимо провести три теста:
Тест 1
Определяет, будет ли выполнен оператор вывода на экран сообщения «Уравнение линейное», когда a = 0
Входные данные: a=0, b=2, c=3
Тест 2
Определяет, будет ли выполнен оператор вывода на экран сообщения «Уравнение не имеет действительных корней», когда a ≠ 0, dis < 0
Входные данные: a=3, b=2, c=4
Тест 3
Определяет, будет ли выполнена функция Results, когда a ≠ 0, dis > 0
Входные данные: a=2, b=5, c=3
Метод покрытия решений
Для того, чтобы каждое решение приняло значение ИСТИНА либо ЛОЖЬ хотя бы один раз, достаточно трех тестов, когда a = 0; a ≠ 0, Dis < 0; a ≠ 0, Dis > 0:
Тест 4
Определяет, будет ли выполнен оператор вывода на экран сообщения «Уравнение линейное», когда a = 0
Входные данные: a=0, b=3, c=-2
Тест 5
Определяет, будет ли выполнен оператор вывода на экран сообщения «Уравнение не имеет действительных корней», когда a ≠ 0, dis < 0
Входные данные: a=3, b=2, c=1
Тест 6
Определяет, будет ли выполнена функция Results, когда a ≠ 0, dis > 0
Входные данные: a=2, b=4, c=1
Ошибки:
Тест 1: выявляет ошибку, когда при введенном a=0 вычисления производятся далее.
Тест 2: выявляет ошибку, когда при значении Dis < 0 вычисления производятся далее.
Тест 3: выявляет ошибку, когда при значениях a≠0, Dis > 0 вычисления далее не производятся.
Тест 4: выявляет ошибку, когда при введенном a=0 вычисления производятся далее.
Тест 5: выявляет ошибку, когда при значении Dis < 0 вычисления производятся далее.
Тест 6: выявляет ошибку, когда при значениях a≠0, Dis > 0 функция Valid не возвращает значение true и вычисления далее не производятся.
2 Задание.
Составить блок-схему алгоритма программы, в которой создается случайным образом двумерный массив A[3][3], вычисляется сумма элементов, на экран выводится созданный массив в виде таблицы и значение суммы.
Текст программы:
program massiv3;
uses crt;
var
a :array [1..3,1..3] of Byte ;
s, j : Byte;
i : Word;
begin
ClrScr;
Randomize;
s := 0;
for i := 1 to 3 do
begin
WriteLn;
for j := 1 to 3 do
begin
a[i,j] := round(random(100));
s := s+a[i,j];
Write (a[i,j]:3);
end;
end;
WriteLn;
Write ('Сумма элементов = ',s);
ReadLn;
end.
Эталон ответа: Блок-схема программы:
4
Составить блок-схему и программу для решения задачи на языке программирования Turbo Pascal, отладить программу, получить результат. Прокомментировать каждый этап решения задачи на ПК.
Задача
Даны координаты точки М (х, у). Определите, принадлежит ли данная точка замкнутому множеству D (a>0; b>0).
Y
b
D
0 а X
Эталон ответа:
Нет Нет
Да Да
Нет
Да
Нет
Да
Рис. Схема программы
В данном варианте в каждом блоке «решение» проверяется простое условие (вычисляется булевское выражение), имеющее вид «арифметическое выражение» «знак сравнения» «арифметическое выражение», которое может принимать одно из двух значений: «истина» (true) или «ложь» (false).
Текст программы
program lr1_2_1;
{ Даны координаты точки М(х,у). Определите, принадлежит ли данная точка замкнутому множеству D. D – прямоугольник с координатами вершин (0;0), (a;0), (a;b), (0;b) (a>0; b>0).
Исходные данные: a, b, x, y.
Результат: сообщение на экране «Точка не принадлежит» или «Точка принадлежит»}
uses
crt;
var
a,b,x,y:real;
begin
clrscr; {очистка экрана}
{Ввод исходных данных}
write(‘Введите через пробел значения a,b,x,y’);
readln(a,b,x,y);
{Определение принадлежности точки множеству}
if x0 then
if xa then
if y0 then
if yb then
writeln(‘Точка принадлежит’)
else
writeln(‘Точка не принадлежит’)
else
writeln(‘Точка не принадлежит’)
else
writeln(‘Точка не принадлежит’)
else
writeln(‘Точка не принадлежит’);
readkey; {ожидание нажатия клавиши}
end.