Помощь - Поиск - Пользователи - Календарь
Полная версия: Заглушки и драйверы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Serega18
Начал изучать паскаль модульной структуры и услышал такой термин как заглушки .Как я понял небольшая программа для тестирования процедур при .
Хотелось бы посмотреть какой-нибудь пример.
Altair
Драйверы и заглушки это программы, которые используют для проверки тестовых наборовданных (вобщемдл ятестирвоания).
Драйвер это программа, тестирующая какой-то модуль, (технология восходящего тестирования), то есть программа вызывает например какую-то процедуру из тестируемого модуля ипроверяет входные данные и наболр выходных.

А заглушка это программа которая служит для утановки вместо какого-то модуля (тестирование нисходящее).
Пример


uses A;
var c:byte;
begin
readln©
writeln(F©);
end.


модуль B

Unit B;
Interface
function F(x:byte):byte;
implementation
function f(x:byte):byte;
begin
f:=x*2;
end;
end.


Тогда при тестирвоании нисходящшем, мы начинаем тестысглавнойпрограммы, идолжны сделать заггушку для модуля B, она будет выглядеть так примерно..


Unit B;
Interface
function F(x:byte):byte;
implementation
function f(x:byte):byte;
begin
writeln('подключенна заглугшка');
f:=10;
end;
end.



ТО есть она уже готовыеданные поставляет, в соотвествии стестом придуманным.
А драйвер к модулю B будет таким:

uses A;
begin
writeln(F(5));
end.



Serega18, а где ты учишься?
Serega18
МЭИ
Altair
Апо какой вы книге занимаетесь?
Altair
Просто про это очень хорошо рассказанно в книге
Майерс Г. "Искуство тестирования программ" ...
Serega18
Задачник(Зубов,Котарова) и пяток методичек. и все
Serega18
По ходу дела возник вопрос: у тебя в примере function а если будет procedure
от этого что-нибудь изменится?
volvo
Цитата(Serega18 @ 4.06.05 14:37)
а если будет  procedure от этого что-нибудь изменится?

В общем случае - нет. На процедуру точно так же можно ставить заглушку, но
uses A;
begin
writeln(F(5));
end.
сделать это с процедурой F уже будет проблематично... ;)
Serega18
А если б в модуле В было бы условие вроде этого
Код
Unit B;
Interface
function F(x:byte):byte;
implementation
function f(x:byte):byte;
begin
if X>5 then
 f:=x*2;
end;
end.

То в заглушке было бы так?
Код
Unit B;
Interface
function F(x:byte):byte;
implementation
function f(x:byte):byte;
begin
if x>5 then
 writeln('подключенна заглугшка');
  f:=10;
end;
end.

или останется как и было?
volvo
Да в модуле (в функции) - хоть десяток условий. Заглушка останется такой же. Условия будешь проверять, когда будешь отлаживать саму функцию, а здесь идет отладка главной программы ...
Serega18
значит я сначала делаю одну заглушку для основной программы а потом еще n-ое число для всех процедур?
volvo
Когда ты переходишь к тестированию функции - делаешь заглушки для всего, что она использует, и на ИЗВЕСТНЫХ наборах данных (ведь заглушка возвращает то, что ты ей сказал вернуть) тестируешь работу этой функции...
Serega18
Код
Unit B;
Interface
function F(x:byte):byte;
implementation
function f(x:byte):byte;
begin
 writeln('подключенна заглугшка');
  f:=10;
end;
end.

1)В данном примере F:=10 ,а если б была матрица A[i,j] то как это записать?
volvo
Что значит "матрица"? Результат функции? Так Turbo Pascal не позволяет возвращать результаты такого типа.
Serega18
Ну например в предыдущей задаче у меня была процедура(поменять местами столбец первый с indx)в результате эта процедура передавала матрицу измененную.В модульной структуре я загоняю ее в модуле В(например). В этом случае как быть?
volvo
Procedure change_rows(Var After, Before: matrix);
begin
writeln('Заглушка');
After := Before; { просто вернуть исходную матрицу }
end;

Это тебя чем не устраивает? Пойми, никаких действий в заглушке производить нельзя, на то она и заглушка а не простая функция !!!
Guest
Цитата(volvo @ 4.06.05 15:51)
Procedure change_rows(Var After, Before: matrix);
begin
  writeln('Заглушка');
  After := Before; { просто вернуть исходную матрицу }
end;

Это тебя чем не устраивает? Пойми, никаких действий в заглушке производить нельзя, на то она и заглушка а не простая функция !!!

А как будет выглядеть заглушка в случае входного данного массива двумерного, а выходного - одномерного массива и флажка?
volvo
Пример функции приводи, когда что-то спрашиваешь... Я не телепат, догадываться, что имеется в виду...
Guest
Цитата(volvo @ 4.06.05 21:43)
Пример функции приводи, когда что-то спрашиваешь... Я не телепат, догадываться, что имеется в виду...

В общем в подпрограмме нужно вывести массив одномерный с номерами столбцов матрицы, в которых все эл-ты расположены в порядке возрастания эл-ов. И если такой столбец есть флажку присвоить истину.
volvo
Ты заголовок подпрограммы привести можешь? angry.gif Или так и будем гадать? Откуда я знаю, КАК твоя подпрограмма должна "вывести" одномерный столбец, через параметры, или на печать через WriteLn ??
Guest
Цитата(volvo @ 4.06.05 21:49)
Ты заголовок подпрограммы привести можешь?  angry.gif Или так и будем гадать? Откуда я знаю, КАК твоя подпрограмма должна "вывести" одномерный столбец, через параметры, или на печать через WriteLn ??

Код
Procedure Stolb(Var A:Dvum; n,m:integer; Var NoS;Fl:Boolean);
implementation
Procedure Stolb;
Var i,j,kol:integer;
begin
 k:=1; fl:=false;
    for j:=1 to m do
       begin
         kol:=0;
             for i:=1 to n-1 do
                if a[i+1,j]>a[i,j] then kol:=kol+1;
                if kol=n-1 then
                    begin
                        odin(NoS)[k]:=j;
                        k:=k+1;
                        fl:=true
end;
end;
end;
volvo
Ну, начнем с того, что F1 не возвращается в вызывающую программу, так что про нее забудь smile.gif Ну, допустим вот такой вариант ЗАГЛУШКИ (ну поймите же вы, что эта вещь возвращает не то, что должно вернуться, а то, что ТЫ хочешь чтобы вернулось !!!)

Procedure Stolb(Var A:Dvum; n,m:integer; Var NoS;Fl:Boolean);
var i: integer;
begin
writeln('Заглушка');
for i := 1 to n - 1 do
odin(NoS)[i] := i;
end;


P.S. Если уже даешь что-то, будь добр давать и описания типов !!! Обязательно догадываться, что скрывается за извращениями типа Dvum или odin?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.