Тестирование алгоритма работы потока, который также относится к основному заданию курсового проекта.
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 и данные о PartitionTable нулевыми значениями. | Заполнение таблиц нулевыми значениями |
2 | Выбран носитель отсутствующий в списке активных носителей | Заполнение таблиц ,содержащих данные о BPB и данные о PartitionTable нулевыми значениями. | Заполнение таблиц нулевыми значениями |
3 | Если не удалось создать дескрипторы файлов, отождествляющих жёсткий и логический диски. | Вывод сообщения : «Не удалось создать дескрипторы носителя» | Вывод сообщения : «Не удалось создать дескрипторы носителя» |
4 | Выбран активный носитель и дескрипторы носителя успешно созданы. | Вывод данных о блоке параметров Bios , PartitionTable и расшифрованных значений в специальные таблицы. | Заполнение таблиц всеми необходимыми данными о носителе. |
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 | Проекция файла создана. Было введено сообщение «Отправлено» | Вывод сообщения : «Отправлено» | Вывод сообщения : «Отправлено» |
4. Эксплуатационные документы