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» - происходит при нажатии на кнопку «Считать PartitionTable»), к которому принадлежит ,выбранный из выпадающего списка логический диск
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 | Если не удалось считать PartitionTable | Должно появиться сообщение о том , что не возможно считать PartitionTable | Вывод сообщения: «Не удалось считать PartitionTable» |
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 }» |
Дополнительный тест