Курсовая работа: Разработка вспомогательной системной программы в системе программирования Delphi с использованием средств WinApi
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;