Реализация контроля целостности

Контроль целостности реализован на языке программирования С++. Код взят из сети интернет и адаптирован для решения поставленной задачи данного приложения.

unsigned short Crc16(unsigned char *pcBlock, unsigned short len)

{

unsigned short crc = 0xFFFF;

unsigned char i;

while (len--)

{

crc ^= *pcBlock++ << 8;

for (i = 0; i < 8; i++)

crc = crc & 0x8000 ? (crc << 1) ^ 0x1021 : crc << 1; // полином

}

return crc;

}

Блок тестового приложения:

int main()

{

unsigned char *txt = (unsigned char*)"123456789";

cout<<"CRC16 CCITT : "<<hex<<(int)Crc16(txt,9)<<endl;

return 0;

}

/*

Name : CRC-16 CCITT

Poly : 0x1021 x^16 + x^12 + x^5 + 1

Init : 0xFFFF

Revert: false

XorOut: 0x0000

Check : 0x29B1 ("123456789")

MaxLen: 4095 байт (32767 бит) - обнаружение

одинарных, двойных, тройных и всех нечетных ошибок

*/

Протокол работы приложения:

Реализация контроля целостности - student2.ru

В ходе работы приложения, Check полностью совпал, это доказывает, что программа полностью готова и не имеет ошибок.

Стыковка блоков программы предполагается с помощью создания классов и подключения динамических библиотек.

Глава 4. Реализация проекта

Разработка рабочей программы

В качестве языка программирования для реализации системы выбран Delphi. Данный язык является объектно-ориентированным, поэтому данную структуру необходимо представить в виде иерархии классов, для чего нужно выделить ключевые сущности, присущие системе, определить требования к их функциональности, установить иерархические связи.

Центральное место в объектно-ориентированном программировании занимает разработка логической модели системы в виде диаграммы классов. Диаграмма классов служит для представления статической структуры модели системы в терминологии классов программирования.

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

Диаграмма классов представляет собой граф, вершинами которого являются элементы, связанные различными типами структурных отношений. Диаграмма классов может также содержать интерфейсы, пакеты, отношения и даже отдельные экземпляры, такие как объекты и связи.

Разрабатываемое приложение состоит из клиентской части, которая предназначена для отправки файлов, а также в состав приложения входит сервер, предназначение которого прием файлов от клиента.

Разработка приложения основывается на основе протокола UDP.

С помощью клиентской части приложения пользователю доступна возможность отправки на сервер любых типов файлов.

Для выборки необходимых файлов, осуществляется с помощью компонента OpenDialog. Для открытия диалогового окна предназначен компонент Button. Для задания хоста и портов используются компоненты Edit. Для размещения на форме программы подписей использованы компоненты Label. Изменение скорости передачи файлов применяется компонент TrackBar.

Серверная часть приложения как говорилось выше, используется для приема файлов от клиента.

Для сохранения полученных от клиента файлов используется компонент SaveDialog. По умолчанию файлы сохраняются в папку, в которой находится сам сервер, но в программе предусмотрена возможность выбора места сохранения самим пользователем. Для открытия диалогового окна служащего для выборки места сохранения, служит компонент Button. Также место сохранения можно задать и вручную, прописав в текстовом поле полных адрес папки, в которую должно произвестись сохранение полученного файла. В качестве текстовых полей используется компонент Edit.

Тестирование программных средств

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

Процесс тестирования будем проводить в несколько этапов:

1. Синтаксическое тестирование текста программы встроенными средствами;

2. Тестирование отдельных компонентов приложения на стадиях разработки;

3. Окончательное тестирование законченного приложения.

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

Существуют следующие методы тестирования программных продуктов:

1. Метод «вход – выход»

2. Предполагает учет только входных и выходных параметров, без учета внутренней структуры и проверка производится на правильность выполнения возложенных функций.

3. Разрушающие методы

Разрушающие методы предполагают изменение текста программы, а именно внесение дополнительных операторов, с помощью которых выводится отладочная информация, проверка контрольных точек, работа с промежуточными данными и т.д. В результате происходит детальное изучение программы, но возникает необходимость восстановления программного кода после окончания тестирования.

При тестировании сложного приложения выбрать какой-то один метод не представляется возможным, т.к. он не обеспечит требуемый уровень надежности, поэтому применяется ряд этих методов, каждый из которых применяется в зависимости от ситуации.

В данном случае проводилось следующее тестирование:

1. На стадии разработки:

ü Синтаксическое тестирование

ü Тестирование отдельных компонентов

2. В ходе окончательного тестирования, проводились следующие тесты

ü Отправка на сервер файлов с разными расширениями;

ü Осуществлялась отправка файлов разного размера, от совсем маленьких в несколько килобайт, до файлов в несколько сотен мегабайт.

В результате проведения тестирования на стадии разработки было выявлено, большое количество ошибок. Большая часть из них была исправлена по ходу написания приложения, поэтому описание данных ошибок не представляет значительного интереса. Окончательное тестирование показало полную работоспособность приложения.

Оценка надежности

Надежность программного продукта складывается из надежности составляющих ее компонентов, а также используемых дополнительных программных средств. При оценке надежности программы не стоит полагаться только на определение надежности программного кода, т.к. текст программы не всегда напрямую связан с исполняемой программой и одна программа может с помощью компиляторов и версий средств разработки иметь различную надежность. Надежность программы напрямую не зависит от количества допущенных в ней ошибок, а, как правило, определяется реакцией программы на исключительные ситуации и последующую обработку данных, в результате необходимо постараться обеспечить восстановление работоспособности программы после всевозможного рода сбоев. Для этого программа должна иметь отлаженную систему контроля с выдачей информационных и прочих сообщений о результатах выполнения. Основной показатель при оценке надежности это частота появления ошибок при работе с программой, а также величина появления критических ошибок, требующих перезапуска или переустановки приложения. Таким образом, оценить надежность можно, используя вероятностные модели, смысл которых сводится к проведению определенного количества испытаний с фиксацией результата испытания, при этом испытания должны быть независимыми (т.е. не влиять друг на друга). Согласно теории вероятностей с ростом количества испытаний показатель надежности также увеличивается, данная ситуация обосновывается тем, что длительное время эксплуатации позволяет устранить большое количество ошибок и как следствие повысить надежность системы.

В данном случае проводилось многоткатная отправка различных файлов на сервер, при проведении данных испытаний было выявлено, что клиентская часть приложения так и серверная, корректно отработали, следствии чего можно сделать вывод, что разработанное приложение обладает высокой надежностью.

Наши рекомендации