- •I. 1.Внешняя спецификация.
- •1.1 Постановка задачи:
- •1.2 Состав данных.
- •1.3 Форма ввода.
- •2.1.1 Подзадача:
- •2.1.2 Состав данных
- •1.4 Форма вывода.
- •1.5/6 При декомпозиции задачи выделены следующие подзадачи:
- •1.7 Аномалии:
- •1.8 Тесты:
- •2. Внутренняя спецификация сегмента 1.1
- •Внутренняя спецификация сегмента 1.2
- •2.2.1 Подзадача:
- •Внутренняя спецификация сегмента 1.3
- •2.3.1 Подзадача:
- •2.3.2 Состав данных
- •II. Алгоритмы
- •III. 1.Паскаль-программа блочной структуры.
- •IV. Отладка программ:
- •1. Отладка программы блочной структуры.
- •2. Отладка программы модульной структуры.
- •2) Структурное тестирование программы.
- •VI. Рекомендации по применению.
2) Структурное тестирование программы.
На данной стадии проведено тестирование с использованием метода тестовых счётчиков, согласно которому до начала структурного тестирования в начало и конец алгоритма, в каждую ветвь ветвления, в начало, тело и конец цикла вставляются счётчики.
При тестировании использован тот же набор тестов, что и при функциональном тестировании подпрограмм, так как в нём моделируются все возможные результаты выполнения основной программы, т.е. предположительно, каждый счётчик при определённом наборе исходных данных изменит своё значение.
Паскаль-программа со счётчиками.
PROGRAM schetchik;
const kk=50;
TYPE MATR=array [1..kk,1..kk] of integer;
VAR A:MATR;
i,j,k,h,m,q,r:integer;
F:boolean;
f1,f2:text;
FUNCTION simm (Var A:MATR;k:integer):boolean;
Var n:integer;
Begin
n:=0;
F:=FALSE;
FOR i:=1 TO (k-1) DO
FOR j:=i+1 TO k DO
IF A[i,j]=A[j,i] THEN
n:=n+1;
IF n=10 THEN
F:=TRUE;
simm:=F
End;
PROCEDURE OBN (Var A:MATR;k:integer);
begin
FOR i:=1 TO (k-1) DO
FOR j:=(i+1) TO k DO
A[i,j]:=0
End;
FUNCTION sum(Var A:MATR;k:integer):integer;
Var S: integer;
Begin
S:=0;
FOR i:=2 TO k DO
FOR j:=1 TO (i-1) DO
S:=S+A[i,j];
sum:=S
End;
BEGIN
ASSIGN (f1,'isdan17.pas');
ASSIGN (f2,'vdan17.pas');
RESET (f1);
REWRITE (f2);
h:=0;
m:=0;
q:=0;
r:=0;
READ (f1,k);
READLN (f1);
FOR i:=1 TO k DO
begin
FOR j:=1 TO k DO
Begin
read (f1,A[i,j]);
h:=h+1
End;
readln (f1)
end;
WRITELN (f2,' ':35,'РЕЗУЛЬТАТЫ');
F:=simm(A,k);
IF F THEN
Begin
m:=m+1;
OBN(A,k);
FOR i:=1 TO k DO
begin
FOR j:=1 TO k DO
Begin
WRITE (f2,' ',A[i,j]);
q:=q+1
End;
WRITELN (f2)
End;
writeln (f2,' ':25,'сумма= ',sum(A,k))
End
ELSE
Begin
WRITELN (f2,' ':25,'Матрица не симметрична');
r:=r+1
End;
WRITELN (f2);
WRITELN (f2,' ':25,'h=',h,' ','m=',m,' ','q=',q,' ','r=',r);
CLOSE (f1);
CLOSE (f2)
END.
№ |
Назначение теста
|
Контрольные значения |
|
Исходные данные |
Выходные данные |
||
1 |
Получение положительных результатов решения задачи |
K=5 А= 1 2 3 4 5 2 7 5 7 2 3 5 9 7 3 4 7 7 6 1 5 2 3 1 2 |
1 0 0 0 0 2 7 0 0 0 3 5 9 0 0 4 7 7 6 0 5 2 3 1 2 Сумма элементов S=39 h=25 m=1 q=25 r=0 |
2 |
Получение отрицательных результатов решения задачи |
K=5 А= 1 2 3 4 5 2 7 5 7 2 3 5 9 7 3 4 7 7 6 1 5 2 3 1 2 |
Матрица не симметрична.
h=25 m=0 q=0 r=1
|
Результаты тестирования показали, что программа работает исправно.
При определённых значениях исходных данных каждый счётчик изменил своё значение в соответствии с контрольными значениями. Значит, можно сделать вывод о том, что каждое ветвление алгоритма пройдено, и каждый цикл завершен.
-Тестирование программы модульной структуры.
Для тестирования программы модульной структуры был использован метод нисходящего проектирования. Отдельные модули тестировались с использованием тех же функциональных тестов, что и при отладке подпрограмм модульной структуры.
В модуле OBIVL применение «заглушек» не требуется, так как там отсутствует описание процедур. В остальных модулях подпрограммы были заменены «заглушками».
UNIT PFUN;
INTERFACE
USES OBIVL;
FUNCTION simm (Var A:MATR;k:integer):boolean;
FUNCTION sum(Var A:MATR;k:integer):integer;
IMPLEMENTATION
FUNCTION simm;
Var n:integer;
Begin
F:=TRUE;
simm:=F
End;
FUNCTION sum;
Var S: integer;
Begin
S:=39;
sum:=S
End;
END.
UNIT PPROC;
INTERFACE
USES OBIVL;
PROCEDURE OBN (Var A:MATR;k:integer);
IMPLEMENTATION
PROCEDURE OBN;
begin
A[1,1]:=1; A[1,2]:=0; A[1,3]:=0; A[1,4]:=0; A[1,5]:=0;
A[2,1]:=2; A[2,2]:=7; A[2,3]:=0; A[2,4]:=0; A[2,5]:=0;
A[3,1]:=3; A[3,2]:=5; A[3,3]:=9; A[3,4]:=0; A[3,5]:=0;
A[4,1]:=4; A[4,2]:=7; A[4,3]:=7; A[4,4]:=6; A[4,5]:=0;
A[5,1]:=5; A[5,2]:=2; A[5,3]:=3; A[5,4]:=1; A[5,5]:=2
End;
END.
В результате тестирование показало успешные результаты, что позволило сделать вывод о правильном выполнении всех подпрограмм.
При структурном тестировании программы модульной структуры был применён метод тестовых счетчиков, как и при тестировании программы блочной структуры.
Для этого необходимы изменения в модуле OBIVL и основной программе.
UNIT OBIVL;
INTERFACE
CONST kk=50;
TYPE MATR=ARRAY [1..kk,1..kk] of integer;
VAR i,j,k,h,m,q,r:integer;
A:MATR;
F:boolean;
f1,f2:text;
IMPLEMENTATION
BEGIN
ASSIGN (f1,'isdan17.pas');
ASSIGN (f2,'vdan17.pas');
RESET (f1);
REWRITE (f2)
END.
PROGRAM tipovik;
USES OBIVL,PFUN,PPROC;
BEGIN
h:=0;
m:=0;
q:=0;
r:=0;
READ (f1,k);
READLN (f1);
FOR i:=1 TO k DO
Begin
FOR j:=1 TO k DO
Begin
read (f1,A[i,j]);
h:=h+1
End;
readln (f1)
End;
WRITELN (f2,' ':35,'РЕЗУЛЬТАТЫ');
F:=simm(A,k);
IF F THEN
Begin
m:=m+1;
OBN(A,k);
FOR i:=1 TO k DO
Begin
FOR j:=1 TO k DO
Begin
WRITE (f2,' ',A[i,j]);
q:=q+1
End;
WRITELN (f2)
End;
writeln (f2,' ':25,'сумма= ',sum(A,k))
End
ELSE
Begin
WRITELN (f2,' ':25,'Матрица не симметрична');
r:=r+1
End;
CLOSE (f1);
CLOSE (f2)
END.
В модулях PFUN и PPROC изменения не требуются. Тестирование происходило при том же наборе тестов и показало успешный результат (каждое ветвление алгоритма пройдено, и каждый цикл завершен), что позволяет сделать вывод о третьем уровне корректности.
