3.6 Методы испытаний
3.6.1 Тестирование методом белого ящика:
Прежде чем нумеровать текст программы, необходимо все циклы изменить на структурированные, сложные условия разбить на простые, а линейные части программы(по возможности) записать в одну строку. Затем строки текста функции нумеруются: номер получают только те строки, которые содержат операторы, условия или закрывающие операторные скобки.
1) Тестирование процедуры выполняющей запись данных в проецируемый файл(2 этап выполнения программы). В данном случае это является первым заданием курсового проекта - обмен данными между приложениями с помощью файла проецируемого в память.
1инициализация
2if Edit1.Text <> then
Begin
WriteDataInMMF(Nicname+ Написал:+#13#10+string(Edit1.Text));
(тело функции WriteDataInMMF(вхдными данными является строка S)
имеет следующий вид):
begin
3 WaitForSingleObject(HMutex, INFINITE);
PBaseAdress:=MapViewOfFile(HFileSender,FILE_MAP_WRITE,0,0,Length(s)+4);
4 if(PBaseAdress = nil) then
begin
5 CloseHandle(HFileSender);
st:=не удалось передать данные;
Application.MessageBox(st,Сообщение...,MB_OK);
exit;
end;
begin
6 integer(PBaseAdress^):=length(s);
CopyMemory(Pointer(Integer(PBaseAdress)+4),PChar(s),length(s));
UnmapViewOfFile(PBaseAdress);
SetEvent(HEvent);
ReleaseMutex(HMutex);
7 end;
8 end;
9 Edit1.Text:=;
10 end
else
11 exit;
12 end;
Рисунок 4.1 - Потоковый граф обработчика события «Событие1» которое происходит при нажатии на кнопку «ОТПРАВИТЬ» на основной форме программы.
Цикломатическая сложность потокового графа:
1) V(G) = 3 региона;
2) V(G) = 13 дуг - 12 узлов + 2 = 3;
3) V(G) = 2 предикатных узла +1 = 3.
Базовое множество независимых линейных путей:
Путь 1:1-2-11-12 .
Путь 2: 1-2-3-4-5-12.
Путь 3: 1-2-3-4-5-6-7-8-9-10-12.
Таблица тестовых вариантов 4.1
№ пути |
Исходные данные |
Ожидаемые результаты |
Реальные результаты |
|
1 |
Строка содержащая, которая должна содержать текст сообщения пуста |
Не происходит отправки пустого сообщения |
Состояние программы после перехода на главную форму не |
|
2 |
Не удалось отобразить файл на адресное пространство процесса при обращении к дескриптору файла , проецируемого в память. |
Сообщение: «Не удалось отобразить файл на адресное пространство процесса».. |
Сообщение: «Не удалось отобразить файл на адресное пространство процесса». |
|
3 |
Текст сообщения: «Привет!» |
Появление текста «Привет!» в поле истории переписки. |
Удачный исход - появление текста «Привет!» в поле истории переписки |
2) Тестирование процедуры выполняющей создание дескрипторов логического диска с
которым ведётся работа и дескриптора жёсткого диска которому принадлежит этот логический диск(3 этап выполнения программы ).
1 инициализация
2 if hDrive <> 0 then
3CloseHandle(hDrive);
4 if hMBRDrive <> 0 then
5CloseHandle(hMBRDrive);
6 discNameBPB:=.+DriveComboBox1.Drive+:;
discNameMBR:=.PHYSICALDRIVE+intToStr(0);
hMBRDrive:= CreateFile(PChar(discNameMBR),GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE,nil,OPEN_EXISTING,0,0);
hDrive:= CreateFile(PChar(discNameBPB),GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE,nil,OPEN_EXISTING,0,0);
7 if (hDrive <> INVALID_HANDLE_VALUE) and (hMBRDrive <> INVALID_HANDLE_VALUE) then
begin
8 Result := DeviceIoControl(hDrive,IOCTL_DISK_GET_DRIVE_GEOMETRY,nil,0,
@DiscGeometry,SizeOf(TDiscGeometry),junk,nil) and (junk = SizeOf(TDiscGeometry));
DiscGeometryShow();
9 end
else
begin
10 ShowMessage(не удалось создать дескрипторы дисков);
11 exit;
end;
12 end;
Рисунок 4.2 Потоковый граф обработчика события «С1» которое происходит при нажатии на кнопку «Начать работу с диском»
Цикломатическая сложность потокового графа:
1) V(G) = 4 регионов;
2) V(G) = 14 дуга - 12 узлов + 2 = 4;
3) V(G) = 3 предикатных узлов +1 = 4.
Путь 1:1-2-4-6-7-10-11-12;
Путь 2:1-2-3-4-6-7-10-11-12.
Путь 3: 1-2-4-5-6-7-10-11-12.
Путь 4:1-2-3-4-5-7-8-9-12.
№ пути |
Исходные данные |
Ожидаемые результаты |
Реальные результаты |
|
1 |
Дескрипторы файлов не созданы . |
Невозможно получить данные о носителе вывод сообщения: «Не удалось создать дескрипторы файлов» |
Вывод сообщения «Не удалось создать дескрипторы файлов» |
|
2 |
Создан дескриптор файла BPB |
Невозможно получить данные о носителе вывод сообщения: «Не удалось создать дескрипторы файлов» |
Вывод сообщения «Не удалось создать дескрипторы файлов» |
|
3 |
Создан дескриптор файла MBR |
Невозможно получить данные о носителе вывод сообщения: «Не удалось создать дескрипторы файлов» |
Вывод сообщения «Не удалось создать дескрипторы файлов» |
|
4 |
Дескрипторы файлов существуют как MBR так и BPB |
Загрузка данных о носителе. |
Загрузка данных о носителе. |
3) Тестирование процедуры считывающей блок параметров Bios - событие «С2» (происходит при нажатии на кнопку «Считать BPB»)логического диска
дескриптор которого был создан в процедуре обрабатывающей событие «С1» при нажатии на кнопку «Начать работу с диском»
1инициализация
2IfReadSectors(hDrive,0,1,@buffer,DiscGeometry.BytesPerSector) = DiscGeometry.BytesPerSector then
begin
3for i:= 1 to 16 do
4Grid1.Cells[i,0]:=intToHex((i-1),1);
5i:=1; j:=1; k:=1;
6while k<=DiscGeometry.BytesPerSector do
begin
7 if i=1 then
8 Grid1.Cells[0,j]:=IntToHex(((j-1)*16+(i-1)),3);
9 Grid1.Cells[i,j]:=IntToHex(Buffer[k],2);
inc(k);
inc(i);
10 if i>16 then
begin
11 i:=1;
j:=j+1;
Grid1.RowCount:= Grid1.RowCount+1;
12end;
13end;
14{линейный блок расшифровки данных BPB}
end
else
15ShowMessage(`не удалось считать BPB);
16end
17end;
программа многопоточный приложение служебный
Рисунок 4.3 - Потоковый граф обработчика события С2 (Считывание блока параметров Bios).
Цикломатическая сложность потокового графа:
1) V(G) = 6 регионов;
2) V(G) = 21дуг - 17 узлов + 2 = 6;
3) V(G) = 5 предикатных узлов +1 = 6.
Путь 1:1-2-15-16-17;
Путь 2:1-2-3-4-5-6-7-9-10-12-13-14-17.
Путь 3: 1-2-3-4-5-6-7-8-9-10-12-13-14-16-17.
Путь 4:1-2-3-4-5-6-7-9-10-11-12-13-14-16-17.
Путь 5:1-2-3-4-5-6-7-8-9-10-11-12-13-14-16-17.
Путь 6: 1-2-3-4-3-4-5-6-7-9-10-12-13-6-7-8-9-10-11-12-13-14-16-17.
№ пути |
Исходные данные |
Ожидаемые результаты |
Реальные результаты |
|
1 |
Не удалось считать сектор BPB . |
Вывод сообщения о том, что считать BPB не удалось |
Вывод сообщения: « не удалось считать BPB» |
|
2 |
Часть данных считана , при этом номер строки остаётся прежним и номер элемента строки не достиг 16. |
Вывод данных в таблицу, содержащую данные о BPB,например команду перехода на программу загрузки: «EB0090h» |
Вывод данных в таблицу, содержащую данные о BPB: команда перехода на программу загрузки: «EB0090h» |
|
3 |
Чтение данных началось и строка получила значение |
Вывод данных в таблицу, содержащую данные о BPB,например команду перехода на программу загрузки: «EB0090h» |
Вывод данных в таблицу, содержащую данные о BPB: команда перехода на программу загрузки: «EB0090h» |
|
4 |
Строка считана и номер элемента в строке достиг 16 |
Вывод данных в таблицу, содержащую данные о BPB,например команду перехода на программу загрузки: «EB0090h» |
Вывод данных в таблицу, содержащую данные о BPB: команда перехода на программу загрузки: «EB0090h» |
|
5 |
Строка получила номер и элемент в строке достиг 16 |
Вывод данных в таблицу, содержащую данные о BPB,например команду перехода на программу загрузки: «EB0090h» |
Вывод данных в таблицу, содержащую данные о BPB: команда перехода на программу загрузки: «EB0090h» |
|
6 |
Чтение данных из буфера в течении нескольких проходов циклов с изменением номера строк и столбцов таблицы , содержащей значения BPB |
Пошаговый вывод данных в таблицу содержащую 16рмчные значения и вывод данных в таблицу содержащую расшифрованные значения |
Обе таблицы «Шестнадцатиричное представление BPB логического диска» и «Расшифровка блока параметров BIOS» заполняются необходимыми значениями |
4) Тестирование процедуры, считывающей таблицу разделов носителя(событие «С3» - происходит при нажатии на кнопку «Считать Partition Table»), к которому принадлежит ,выбранный из выпадающего списка логический диск
1инициализация.
2Memo2.Clear;
3If.ReadSectors(hMBRDrive,0,1,@buffer,DiscGeometry.BytesPerSector)= DiscGeometry.BytesPerSector then
begin
4for i:= 1 to 16 do
5Grid2.Cells[i,0]:=intToHex((i-1),1);
6i:=1; j:=1; k:=1;
7while k<=DiscGeometry.BytesPerSector do
begin
8if i=1 then
9Grid2.Cells[0,j]:=IntToHex(((j-1)*16+(i-1)),3);
10Grid2.Cells[i,j]:=IntToHex(Buffer[k],2);
inc(k);
inc(i);
11if i>16 then
begin
12 i:=1;
j:=j+1;
Grid2.RowCount:= Grid2.RowCount+1;
13 end;
14end;
begin
15{Линейный блок расшифровки значений полученных в буфере после чтения сектора}
16end
else
17ShowMessage(Не удалось считать блок PartitionTable);
18end;
Рисунок 4.4 - Потоковый граф обработчика события «С3» (кнопка «Считать PartitionTable »)
Цикломатическая сложность потокового графа:
1) V(G) = 6 регионов;
2) V(G) = 22 дуга - 18 узлов + 2 = 6;
3) V(G) = 5 предикатных узлов +1 = 6.
Путь 1:1-2-17-18;
Путь 2:1-2-3-4-5-6-7-8-10-11-13-14-15-16-18;
Путь 3:1-2-3-4-5-6-7-8-9-10-11-13-14-15-16-18;
Путь 4: 1-2-3-4-5-6-7-8-10-11-12-13-14-15-16-18;
Путь 5: 1-2-3-4-5-4-5-6-7-8-9-10-11-13-14-15-16-18;
Путь 6: 1-2-3-4-5-4-5-6-7-8-10-11-12-13-14-7-8-9-10-11-13-14-15-16-18;
№ пути |
Исходные данные |
Ожидаемые результаты |
Реальные результаты |
|
1 |
Если не удалось считать Partition Table |
Должно появиться сообщение о том , что не возможно считать Partition Table |
Вывод сообщения: «Не удалось считать Partition Table» |
|
2 |
Происходить считывание элемента массива , который имеет номер отличающийся от 1 и от 16. |
Вывод данных, например: «Начало раздела диска{Головка: 255 Сектор: 255 Цилиндр: 15 }» |
Вывод данных, например: «Начало раздела диска{Головка: 255 Сектор: 255 Цилиндр: 15 }» |
|
3 |
Считывание элемента массива , который имеет номер 1 в строке таблицы |
Вывод данных, например: «Начало раздела диска{Головка: 255 Сектор: 255 Цилиндр: 15 }» |
Вывод данных, например: «Начало раздела диска{Головка: 255 Сектор: 255 Цилиндр: 15 }» |
|
4 |
Считывание элемента, который имеет последний номер в строке (16) |
Вывод данных, например: «Начало раздела диска{Головка: 255 Сектор: 255 Цилиндр: 15 }» |
Вывод данных, например: «Начало раздела диска{Головка: 255 Сектор: 255 Цилиндр: 15 }» |
|
5 |
Считывание данных из массива. При прохождении этого пути проверяется заполнение верхней строчки таблицы номерами от 0 до F. |
Вывод данных, например: «Начало раздела диска{Головка: 255 Сектор: 255 Цилиндр: 15 }» |
Вывод данных, например: «Начало раздела диска{Головка: 255 Сектор: 255 Цилиндр: 15 }» |
|
6 |
Считывание данных из массива. Когда элемент имеет номер 16 в строке, а последующий элемент имеет номер 1 в след. строке. |
Вывод данных, например: «Начало раздела диска{Головка: 255 Сектор: 255 Цилиндр: 15 }» |
Вывод данных, например: «Начало раздела диска{Головка: 255 Сектор: 255 Цилиндр: 15 }» |
Дополнительный тест
Тестирование алгоритма работы потока, который также относится к основному заданию курсового проекта.
1инициализация.
2while (not terminated) do
begin
3 WaitForSingleObject(Form1.HEvent, INFINITE);
4 ResetEvent(Form1.HEvent);
5 try
// резерв. память в потоке для этотой проекции
6PBaseAdress:=MapViewOfFile(Form1.HFileSender, FILE_MAP_READ,0,0,65536);
7 if (PBaseAdress = nil) then
begin
8 CloseHandle(Form1.HFileSender);
st:=не удалось отобразить файл на адресное пространство;
Application.MessageBox(st,Сообщение...,MB_OK);
form1.BitBtn2.Visible:=false;
form1.Button1.Visible:=false;
9 exit;
10end;
11 nlineSize:=integer(PBaseAdress^);
SetLength(TextString,nlineSize);
CopyMemory(PChar(TextString),Pointer(Integer(PBaseAdress)+4),nlineSize);
Form1.Memo1.Text:=Form1.Memo1.Text+---------+#13#10;
Form1.Memo1.Text:=Form1.Memo1.Text+TextString+#13#10;
sendmessage(Form1.memo1.handle, em_linescroll, 0, Form1.memo1.lines.count-1);
UnmapViewOfFile(PBaseAdress);
finally
12end;
13end;
Рисунок 4.5 - Потоковый граф обработчика потока(данный обработчик выполняется постоянно после запуска программы и если не была нажата кнопка «отсоединится при работе программы»)
Цикломатическая сложность потокового графа:
1) V(G) = 3 регионов;
2) V(G) = 14 дуг - 13 узлов + 2 = 3;
3) V(G) = 2 предикатных узлов +1 = 3.
Путь 1:1-2-3-4-5-6-7-8-9-13;
Путь 2:1-2-3-4-5-6-7-10-11-12-13;
Путь 3:1-2-3-4-5-6-7-8-9-10-11-12-2-3-4-5-6-7-10-11-12-13;
№ пути |
Исходные данные |
Ожидаемые результаты |
Реальные результаты |
|
1 |
Не удалось отобразить файл на адресное пространство в потоке. |
Должно появиться сообщение : не удалось отобразить данные на адресное пространство потока |
Вывод сообщения: «Не отобразить файл на адресное пространство» |
|
2 |
Ввод данных в поле сообщения и однократное нажатие на кнопку «отправить» |
Вывод сообщения «отправить» в поле истории переписки. |
Сообщение введённое в поле сообщений «отправить» появилось в поле истории переписки. |
|
3 |
Ввод сообщения в поле сообщений и нажатие на кнопку «отправить» с последующим повторение этих действий |
Вывод сообщения «отправить» в поле истории переписки. |
Сообщение введённое в поле сообщений «отправить» появилось в поле истории переписки. |
3.6.2 Тестирование методом черного ящика
1) Тестирование процедуры, выполняющей запись данных в проецируемый файл
(Рисунок 4.6. ).
(Этап выполнения программы 2 «Событие 1»).
Предусловие : Текст сообщения должен быть обязательно введён.
Постусловие: Если проекция файла создана, и объект типа поток сработал нормально, то вывод текста сообщения в поле истории переписки.
Рисунок 4.6 - Дерево разбиений для события «Событие1» (первое задание)
№ листа |
Исходные данные |
Ожидаемые результаты |
Реальные результаты |
|
1 |
Сообщение не введено |
Никаких действий не должно происходить, программа не должна отвечать на действия такого рода |
Программа никак не реагирует |
|
2 |
Проекция файла не создана |
Вывод сообщения: «Не удалось передать данные» |
Вывод сообщения: «Не удалось передать данные» |
|
3 |
Поток не сработал |
Вывод сообщения : «Не удалось создать проекцию файла» |
Вывод сообщения : «Не удалось создать проекцию файла» |
|
4 |
В поле ввода сообщения введено : «СЛОВО» |
Вывод сообщения с содержимым «СЛОВО» в поле истории переписки |
В поле истории появится сообщение с текстом : «<имя введённое при авторизации> написал : СЛОВО» |
2) Тестирование процедуры выполняющей создание дескрипторов носителя с которым ведётся работа (Рисунок 4.7).
(Этап выполнения программы 3 , событие С1).
Предусловие: Программа должна быть запущена от имени администратора.
Постусловие: 1 Должен быть выбран присутствующий носитель.
2 Если дескрипторы файлов успешно созданы и данные прочитаны в буфер, то- вывод информации в таблицы.
Рисунок 4.7 Дерево разбиений для процедуры, выполняющей создание дескрипторов носителя(Этап выполнения программы 3 события C1).
№ листа |
Исходные данные |
Ожидаемые результаты |
Реальные результаты |
|
1 |
Программа запущена не от имени администратора |
Заполнение таблиц ,содержащих данные о BPB и данные о Partition Table нулевыми значениями. |
Заполнение таблиц нулевыми значениями |
|
2 |
Выбран носитель отсутствующий в списке активных носителей |
Заполнение таблиц ,содержащих данные о BPB и данные о Partition Table нулевыми значениями. |
Заполнение таблиц нулевыми значениями |
|
3 |
Если не удалось создать дескрипторы файлов, отождествляющих жёсткий и логический диски. |
Вывод сообщения : «Не удалось создать дескрипторы носителя» |
Вывод сообщения : «Не удалось создать дескрипторы носителя» |
|
4 |
Выбран активный носитель и дескрипторы носителя успешно созданы. |
Вывод данных о блоке параметров Bios , Partition Table и расшифрованных значений в специальные таблицы. |
Заполнение таблиц всеми необходимыми данными о носителе. |
3)Тестирование процедуры, выполняющей считывание блока параметров Bios (Рисунок 4.8).
(Этап выполнения программы 3 , событие «С2»).
Предусловие: Дескрипторы должны быть созданы.
Постусловие: Файловая система должна быть FAT32.
Рисунок 4.8 -Дерево разбиений для процедуры, выполняющей считывание блока BPB для выбранного носителя.
№ листа |
Исходные данные |
Ожидаемые результаты |
Реальные результаты |
|
1 |
Дескрипторы не созданы. |
Вывод сообщения «Не удалось считать блок параметров Bios» |
Вывод сообщения «Не удалось считать блок параметров Bios» |
|
2 |
Файловая система отличается от FAT32. |
Заполнение таблицы расшифровки BPB неверными значениям , например : «Количество FAT : 0» |
Заполнение таблицы содержащей расшифрованные данные о BPB неверными значениям: «Количество FAT : 0» |
|
3 |
Файловая система FAT32 |
Заполнение таблицы расшифровки верными значениями, например: «количество FAT : 2» |
Заполнение таблицы расшифровки верными значениями: «количество FAT : 2» |
4)Тестирование процедуры, считывающей таблицу разделов жёсткого диска(Рисунок 4.9).
(Этап выполнения программы 3 , событие «С3»).
Предусловие: Программа должна быть запущена от имени администратора.
Постусловие: Дескрипторы должны быть созданы.
Рисунок 4.9 - Дерево разбиений для процедуры считывающей таблицу разделов носителя.
№ листа |
Исходные данные |
Ожидаемые результаты |
Реальные результаты |
|
1 |
Программа запущена не от имени администратора. |
Заполнение полей таблицы расшифровки нулевыми значениями. |
Заполнение полей таблицы расшифровки нулевыми значениями. |
|
2 |
Дескрипторы не созданы |
Вывод сообщения: «Не удалось считать PartitionTable» |
Вывод сообщения: «Не удалось считать PartitionTable» |
|
3 |
Дескрипторы созданы |
Заполнение таблицы расшифровки верными значениями, например: «Размер раздела {: 61432497 }» |
Заполнение таблицы расшифровки верными значениями «Размер раздела {: 61432497 }» |
5)Тестирование процедуры работы потока.(Рисунок 4.10).
Предусловие: 1.Поток должен быть запущен.
2.Средства синхронизации созданы.
Постусловие: Файл проецируемый в память должен быть успешно создан.
Рисунок 4.10 - Дерево разбиений для процедуры работы потока.
№ листа |
Исходные данные |
Ожидаемые результаты |
Реальные результаты |
|
1 |
Средства синхронизации не созданы. |
Вывод сообщения «не удалось осуществить обмен сообщениями» |
Вывод сообщения «не удалось осуществить обмен сообщениями» |
|
2 |
Проекция файла не создана. |
Вывод сообщения «не удалось отобразить файл на адресное пространство» |
Вывод сообщения «не удалось отобразить файл на адресное пространство» |
|
3 |
Проекция файла создана. Было введено сообщение «Отправлено» |
Вывод сообщения : «Отправлено» |
Вывод сообщения : «Отправлено» |
- Введение
- 1. Техническое задание
- 1.1 Основания для разработки программы
- 1.2 Назначение разработки
- 1.3 Требования к программам
- 1.4 Требования к надежности
- 1.5 Требования к программной документации
- 1.6 Текст задания по варианту
- 2. Описания разработанных программ
- 2.1 Общие сведения
- 2.2 Функциональное назначение
- 2.3 Описание логической структуры
- 2.3.1 Логическая структура программы
- 2.3.2 Логическая структура справочной системы.
- 2.3.3 Создание программы инсталлятора
- 2.4 Используемые технические средства
- 2.5 Вызов и загрузка
- 2.6 Входные данные
- 2.7 Выходные данные
- 3. Программа и методика испытаний
- 3.1 Объект испытаний
- 3.2 Цель испытаний
- 3.4 Требования к программной документации
- 3.5 Средства и порядок испытаний
- 3.6 Методы испытаний
- 4. Эксплуатационные документы
- 4.1 Руководство программиста
- 4.1.1 Общие сведения о программе
- 4.1.2 Структура программы
- 4.1.3 Проверка программы
- 4.1.4 Дополнительные возможности
- 4.1.5 Сообщения системному программисту
- 4.2.2 Обращение к программе для запуска:
- 4.2.3 Входные и выходные данные:
- 4.2.4 Сообщения оператору:
- Приложение
- 33. Перспективы программирования в delphi
- Система программирования Delphi
- 1. Назначение и состав системы Delphi
- Язык программирования Delphi
- 3.1.1 Выбор средств программирования
- 43 Понятие о системе программирования
- 4.2 Выбор языка программирования
- I. Особенности разработки программ под Windows. Введение в Delphi.
- 2. Использование системы программирования Delphi для создания Windows-приложений