Вы находитесь на странице: 1из 20

1 АНАЛИЗ И ПОСТАНОВКА ЗАДАЧИ

1.1 Описание предметной области

Как уже было сказано во введении, целью данного курсового проекта разработка
программы «Архиватора».
Задачи разработки:
1. Поиск на различных ресурсах информации по теме «Сжатие данных».
2. Объяснение различных алгоритмов сжатия.
3. Написание программы - архиватора.
Различными компаниями и разработчиками всего мира были созданы специальные
программы для архивации файлов. Программы для архивации файлов позволяют
помещать копии файлов на диске в сжатом виде в архивный файл, извлекать файлы из
архива, просматривать оглавление архива и т.д. Как многие пользователи компьютерной
техники могли заметить, что программы отличаются форматом архивных файлов,
скоростью работы, степенью сжатия файлов при помещении в архив, удобством
использования.
На сегодняшний день применяется несколько десятков программ - архиваторов,
которые отличаются между собой перечнем функций и параметрами работы, однако
лучшие из них имеют схожие характеристики. Из числа наиболее популярных программ
можно выделить: PKPAK, LHA, ICE, HYPER, ZIP, РАК, ZOO, EXPAND, разработанные за
рубежом, а также AIN и RAR, разработанные в России. Зачастую упаковка и распаковка
файлов выполняются одной и той же программой, но также бывает, что это
осуществляется разными программами, например, программа РКZIР производит упаковку
файлов, a PKUNZIP - распаковку файлов.
Программы-архиваторы позволяют создавать и такие архивы, для извлечения из
которых содержащихся в них файлов не требуются какие - либо программы, так как сами
архивные файлы могут содержать программу распаковки. Отсюда и пошло их название
для таких архивных файлов –самораспаковывающиеся.
Самораспаковывающийся архивный файл - это загрузочный, исполняемый модуль,
который способен к самостоятельной разархивации находящихся в нем файлов без
использования программы - архиватора.
Самораспаковывающийся архив получил название SFX - архив (SelF - eXtracting).
1.2 Обзор и анализ аналогов программных средств

WinZip - один из старейших на рынке, который был представлен в 1991 году,


архиваторов для Windows, имеющих собственный графический интерфейс (рисунок 1.1).
Видимо, такой большой возраст и обеспечивает данному архиватору достаточно
внушительную аудиторию пользователей. Сжимает файлы, преобразуя их в такие
форматы, как: .zip, LHA (.lzh и .lha). Кроме того, WinZip имеет и собственный формат
сжатия .zipx, который позволяет добиться максимальной компрессии данных.

Рисунок 1.1 – графический интерфейс WinZip

WinZip имеет поддержку практически всех известных на сегодня форматов,


используемых для сжатия файлов, это: .rar, .7z, .bz2, .cab, .gzip, .tar, .cab и многие другие,
кроме того WinZip располагает функционалом, позволяющим преобразовывать сжатые
файлы этих форматов в Zip. С помощью WinZip очень удобно сжимать цифровые фото
без потери качества изображения, что может понадобиться, к примеру, для отправки
большого количества файлов по электронной почте или FTP, а также и для хранения на
всевозможных съемных носителях. В WinZip имеется возможность просмотра и
редактирования файлов содержащихся в архивах других типовых форматов, например,
таких как: 7z или RAR
WinRAR – наверное, самый популярный не только в России, но и во всем мире
архиватор, первая версия которого появилась в 1993 году. Он представляет собой
архиватор RAR для Windows, у которого существует несколько версий для разных
операционных систем (Windows, Linux, FreeBSD, DOS, OS/2, Mac OS X), а также
консольная версия (Rar.exe), запускаемая из командной строки и работающая в текстовом
режиме. Программа получила признание в качестве оптимального решения, имеющего
наиболее разумное соотношение между скоростью работы и коэффициентом сжатия
файлов.
Если говорить про интерфейс (рисунок 1.2), то он у архиватора WinRAR, на мой
взгляд, гораздо удобнее и понятнее, чем у других архиваторов, но у каждого свои вкусы.

Рисунок 1.2 – графический интерфейс WinRar

WinAce – является разработкой одноименной немецкой компании, которая


прекратила своё существование. Работает под Windows, однако доступна бесплатная
консольная версия программы для извлечения файлов, известная под названием Unace,
для Mac OS X и Linux. Имеется также версия архиватора для командной строки. WinAce
завоевал популярность благодаря своим нестандартным способностям по степени сжатия
файлов и скорости работы, но самый пик популярности этого архиватора уже прошел, и
сегодня по названным параметрам он уступает другим рассматриваемым решениям, так
как последнее обновление вышло в далеком 2007. Архиватор использует собственный
архивный формат ACE, обеспечивающий хорошую степень сжатия при неплохой
скорости осуществления этого процесса, но сегодня данный формат (как и формат ZIP)
уже устаревает. Помимо ACE-архивов программа умеет создавать и распаковывать
архивы в форматах ZIP, LHA, MS-CAB, JAR, GZip и TAR. Просмотр и распаковка
предусмотрены для архивных форматов RAR, ARC, ARJ и ZOO, то есть возможность
работы с 7Z-архивами отсутствует, а в отношении RAR-архивов предусмотрена только
распаковка. Интерфейс у архиватора интуитивно понятный, а принцип применения точно
такой же, как у популярного WinRAR (рисунок 1.3).

Рисунок 1.3 – графический интерфейс WinAce

7-Zip - свободный файловый архиватор с высокой степенью сжатия данных.


Поддерживает несколько алгоритмов сжатия и множество форматов данных, включая
собственный формат 7z c высокоэффективным алгоритмом сжатия LZMA. Программа
разрабатывается с 1999 года и является бесплатной, а также имеет открытый исходный
код. Основной платформой является Windows, где доступны две версии программы: с
графическим интерфейсом (рисунок 1.4) и версия для командной строки. Также 7-Zip
является победителем SourceForge.net Community Choice Awards 2007 года в категориях:
лучший проект и лучший технический дизайн.
7-Zip использует свой новый формат архивирования 7Z, обеспе-чивающий очень
высокий коэффициент сжатия: на многих данных он выше, чем в других форматах. При
создании архивов в этом формате сжимаются не только данные, но и заголовок архива,
при этом разрешается выбирать любой метод сжатия, конверсии и шифрования и
архивировать файлы размером до 16 млрд Гбайт.
Из рассмотренных нами архиваторов, архивы в этом формате сегодня не умеет
распаковывать только WinAce, а 7-Zip может распаковывать файлы в форматах ARJ, CAB,
CHM, CPIO, DEB, DMG, HFS, ISO, LZH, LZMA, MSI, NSIS, RAR, RPM, UDF, WIM, XAR
и Z. Архиватор также умеет создавать ZIP-, GZIP-, BZIP2- и TAR-архивы и
разархивировать соответствующие архивы, за исключением многотомных ZIP-архивов.

Рисунок 1.4 – графический интерфейс 7zip

1.3 Характеристика решаемой задачи

Производительность компьютеров, размер оперативной памяти и жесткого диска


постоянно увеличиваются, но объемы данных, которые необходимо сохранить, растут в
несколько раз быстрее. Еще недавно казалось, что диск в 2-3 десятка гигабайт надежно
решит проблему нехватки дискового пространства. Однако появляются новые, очень
требовательные к аппаратным ресурсам программы. Размеры же мультимедийных
файлов, которые тоже хотелось бы сохранить, превышают все разумные пределы. В
результате оказывается, что жесткий диск полон и перед пользователем встает задача хоть
чуть-чуть освободить его.
Первоначально проводят инвентаризацию содержимого жесткого диска и пытаются
рассортировать все данные на нужные и те, которые можно удалить. Однако появляются
файлы, которые в настоящий момент не нужны, а удалить их – не поднимается рука. Это
могут быть старые проекты, фотографии, игрушки, подборка любимых музыкальных
фрагментов или собрание дистрибутивов часто используемых программ и утилит. Их
желательно упаковать как можно более компактно и положить в «дальний уголок» до
востребования. В этом случае они займут гораздо меньше места на жестком диске и в то
же время будут всегда под рукой, а при желании всегда будет возможность восстановить
оригинальную копию.
Упаковать (сжать) данные на жестком диске можно с помощью специальной
программы – архиватора. Существует множество разновидностей подобных программ.
Они отличаются алгоритмом сжатия, скоростью работы, набором дополнительных
функций, пользовательским интерфейсом и т.д.
Алгоритмы сжатия информации активно совершенствуются, и современные
архиваторы позволяют сжимать данные гораздо более эффективно. Однако наиболее
продвинутые, с точки зрения сжатия информации, программы не всегда являются и
самыми многофункциональными, а значит и наиболее распространенными. Поэтому
большинство пользователей делают выбор в пользу программ, которые обеспечивают
меньший коэффициент сжатия, но имеют хорошо продуманный интерфейс и большое
количество дополнительных возможностей.
2 ВЫБОР И ОБОСНОВАНИЕ СРЕДСТВ И СРЕДЫ РАЗРАБОТКИ

На сегодняшний день существует множество вариантов программной реализации


архивирования. Наиболее востребованы архиваторы, в которых реализована простота,
удобства и многофункциональность.
Для реализации программного средства «Архиватор» были выбраны следующие
средства разработки:
– язык программирования – С++;
– интегрированная среда разработки – С++ Builder 10.3;
Рассмотрим каждое из средств разработки поподробнее.

2.1 Язык программирования С++


Язык программирования С++ представляет высокоуровневый компилируемый язык
программирования общего назначения со статической типизацией, который подходит для
создания самых различных приложений. На сегодняшний день С++ является одним из
самых популярных и распространенных языков.
Автором языка является Бьерн Страуструп, который в 1980 усовершенствовал язык
«С» под собственные нужды, а в 1985 увидело свет его первое издание.
С++ содержит средства для создания программ практически любого назначения, от
низкоуровневых до сложных программных комплексов разного назначения.
Достоинства языка:
- С++ поддерживает разные технологии и стили программирования, включая
объектно-ориентированное, обобщенное и метапрограммирование;
- более надежное освобождение ресурсов путем автоматического вызова
деструкторов при уничтожении объектов;
-возможность создавать пользовательские функции-операторы, позволяющие
записывать выражения над пользовательскими типами в алгебраической форме;
- важным достоинством является предсказуемое выполнение программ, что
является важным для систем реального времени;
- при помощи шаблонов можно создавать обобщенные контейнеры и алгоритмы
для разных типов данных;
- при помощи шаблонов и множественного наследия можно имитировать классы-
примеси и комбинаторную параметризацию библиотек;
- поддержка понятия физической и логической константности, что делает
программу надежнее, так как позволяет диагностировать ошибочные попытки изменения
переменных;
- C++ - кроссплатформенный язык, его стандарт накладывает минимальные
требования на компьютер для запуска скомпилированной программы. На С++
разрабатывают программы для различных платформ и систем с помощью компиляторов
для большого количества платформ;
- в С++ существует возможность низкоуровневой работы с адресами памяти,
однако, при неосторожном использовании это легко может превратиться в недостаток;
- язык С++ спроектирован так, чтобы у программиста был максимальный контроль
над всеми аспектами структуры и порядка выполнения программы;
- существующий код на C может с минимальными изменениями использоваться в
С++.
Часть недостатков С++ унаследовал от C, это:
- синтаксис, вызывающий ошибки - операцию сравнения и присваивания легко
перепутать, тем более присваивание возвращает значение, поэтому конструкция с
присваиванием вместо выражения не будет восприниматься компилятором как ошибка, в
циклах и ветвлениях так же существует такая ошибка;
- макросы являются потенциально опасным средством, несмотря на то что их
необходимость не велика, ввиду наличия шаблонов и встроенных функций;
- не интуитивные преобразования некоторых типов;
- примитивный, унаследованный от С препроцессор;
У языка С++ имеются так же и собственные недостатки:
- В С++ существует много возможностей, нарушающих принципы
типобезопасности, что приводит к труднонаходимым ошибкам. Частой проблемой в С++
являются проблемы "переполнения буфера";
- C++ является слишком сложным и большим языком, из за чего есть трудности с
его изучением;
- недостаточность информации о типах данных во время компиляции программы;
- шаблоны могут привести к коду очень большого объема;
- многие схожие конструкции с С, выполняющие те же самые функции могут сбить
с толку программиста;
- сложность и ограниченность метапрограммирования на основе шаблонов С++;
- некоторые считают отсутствие встроенной системы сборки мусора недостатком
языка.
2.2 Среда разработки – С++Builder 10.3

С каждым годом интерес к программированию растет с очень большой скоростью.


Это связано с развитием и внедрением в повседневную жизнь человка информационных
технологий. Если человек имеет дело с компьютером, то рано или поздно у него возникает
мысль, а иногда и желание, научиться программировать. Среди пользователей
компьютеров в настоящее время наиболее популярна операционная система Windows, и
естественно, что тот, кто хочет программировать, хочет и писать программы, которые
будут работать в Windows, но также существуют и другие операционные системы.
Несколько лет назад человеку или рядовому программисту оставалось только
мечтать о создании своих собственных программ, работающих в Windows. Единственным
средством разработки был Borland C++ for Windows, явно ориентированный на
профессионалов, которые обладали серьезными знаниями и опытом. Бурное развитие
вычислительной техники, потребность в эффективных средствах разработки
программного обеспечения привели к появлению на рынке целого ряда систем
программирования, ориентированных на так называемую "быструю разработку", среди
которых особо следует отметить Microsoft Visual Basic и Borland Delphi. В основе систем
быстрой разработки (RAD-систем, Rapid Application Development — среда быстрой
разработки приложений) лежит технология визуального проектирования и событийного
программирования, суть которой заключается в том, что среда разработки берет на себя
большую часть работы по генерации кода программы, оставляя программисту работу по
конструированию диалоговых окон и написанию функций обработки событий.
Успех и популярность Delphi вызвал желание фирмы Borland распространить
методы быстрой разработки на область профессионального программирования, что и
привело к появлению Borland C++ Builder.
3 РАЗРАБОТКА АЛГОРИТМА РЕШЕНИЯ

Создание архиватора — задача не из простых. Если говорить точнее, то вся


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

15 12 00 00 00 00 00 00 00 00 00 00 00 00 44 44
44 55 77 44 AF 00 00 11 11 12 45 45 00 00 00 00
01 02 03 04 05 01 02 03 04 05 06 01 02 03 04 05

Как видно в содержимом файла есть много повторов. А значит первое что
необходимо сделать — «нужно как-то избавиться от них». Решение данной проблемы
вполне логичное, ведь можно, например, заменить все повторяющиеся подряд байты всего
двумя. Первый будет указывать на число повторов, второй на повторяющийся байт.
Например, было: 00 00 00 00 00 00 00 00
Стало: 08 00
Однако тут стоит помнить, что максимальное значение байта (FF или 255). Значит
можно сокращать цепочки максимум из 255 одинаковых байтов. На самом деле можно
сократить цепочку в 256 байтов, для этого нужно начинать нумерацию с нуля, однако
этого не стоит делать.
Так же стоит помнить о том, что файл нужно разархивировать, а значит нужен
способ декодирования. Чтобы была возможность однозначно восстановить файл придется
использовать данный метод и к неповторяющимся байтам. А это уже может повлечь за
собой рост размера архива, так как один байт исходного файла заменяется двумя байтами
в архиве.
В итоге для исходного файла имеем:

01 15 01 12 0С 00 03 44 01 55 01 77 01 44 01 AF
02 00 02 11 01 12 02 45 04 00 01 01 01 02 01 03
01 04 01 05 01 01 01 02 01 03 01 04 01 05 01 06
01 01 01 02 01 03 01 04 01 05
Как видно файл не уменьшился, а стал больше. Поэтому нужно вводить еще одно
правило архивации. Не трудно заметить, что структура архива такова, что его можно
считывать парами байт. При этом каждый четный байт не будет нулевым, так как он
отвечает за количество повторяющихся символов и как минимум будет равен единице.
Введем следующее правило: если четный байт равен нулю, то далее идет байт-число
неповторяющихся байт, за ним идут непосредственно эти байты.
Например, было: 01 02 03 04 AA AB AC AE.
Стало: 00 08 01 02 03 04 AA AB AC AE.
Очевидно, что такая конструкция не приводит к уменьшению числа байт, однако
это увеличение крайне мало, по сравнению с первым методом.
Теперь применим оба правила к файлу. Имеем:

00 02 15 12 0С 00 03 44 00 04 55 77 44 AF 02 00
02 11 00 01 12 02 45 04 00 00 10 01 02 03 04 05
01 02 03 04 05 06 01 02 03 04 05

Вот теперь файл стал меньше.


На рисунке 3.1 представлена диаграмма классов.
Рисунок 2.1 – Диаграмма классов

На рисунке 3.2 представлена диаграмма вариантов использования в общем виде.

Рисунок 3.2 – Диаграмма вариантов использования


5 ТЕСТИРОВАНИЕ

Тестирование – процесс исследования, испытания программного продукта,


имеющий две различные цели:
− продемонстрировать разработчикам и заказчикам, что программа соответствует
требованиям;
− выявить ситуации, в которых поведение программы является непра-вильным,
нежелательным или не соответствующим спецификации.
Существующие на сегодня методы тестирования программного обеспечения не
позволяют однозначно и полностью выявить все дефекты и установить корректность
функционирования анализируемой программы, поэтому все существующие методы
тестирования действуют в рамках формального процесса проверки исследуемого или
разрабатываемого программного обеспечения.
Существует несколько признаков, по которым принято производить
классификацию видов тестирования. Обычно выделяют следующие:
− по объекту тестирования;
− по знанию кода (тестирование чёрного ящика, тестирование белого
ящика, тестирование серого ящика);
− по степени автоматизации;
− по степени изолированности компонентов;
− по времени проведения тестирования;
− по признаку позитивности сценариев;
− по степени подготовленности к тестированию.
При тестировании белого ящика (также говорят — прозрачного ящика),
разработчик теста имеет доступ к исходному коду программ и может писать код, который
связан с библиотеками тестируемого программного обеспечения. Это типично для
компонентного тестирования, при котором тестируются только отдельные части системы.
Оно обеспечивает то, что компоненты конструкции работоспособны и устойчивы, до
определённой степени.
При тестировании чёрного ящика тестировщик имеет доступ к программе только
через те же интерфейсы, что и заказчик или пользователь, либо через внешние
интерфейсы, позволяющие другому компьютеру либо другому процессу подключиться к
системе для тестирования. Например, тестирующий компонент может виртуально
нажимать клавиши или кнопки мыши в тестируемой программе с помощью механизма
взаимодействия процессов, с уверенностью в том, все ли идёт правильно, что эти события
вызывают тот же отклик, что и реальные нажатия клавиш и кнопок мыши. Как правило,
тестирование чёрного ящика ведётся с использованием спецификаций или иных
документов, описывающих требования к системе.
При тестировании серого ящика разработчик теста имеет доступ к
исходному коду, но при непосредственном выполнении тестов доступ к коду, как правило,
не требуется. При разработке использовалось тестирование чёрного ящика или
поведенческое тестирование. Стратегия поведенческого теста представлена в таблице 1.
Таблица 1 – Тестирование программного средства
Ожидаемый
№ Название Шаги Выполнение
результат
Открылось
Запуск 1.Запустить exe-файл
1 главное окно Пройден
приложения Corona
программы
1.Нажать кнопку Файлы Пройден
«Add» добавились
Добавление
2.В диалоговом окне
2 файлов для
выбрать нужные
архивации
файлы и нажать
«Открыть»
1.Нажать кнопку Архив создан Пройден
3 Архивация
«Compress»

Продолжение таблицы 1
1 2 3 4 5
2. Выбрать путь
сохранения
1.Нажать кнопку
«Open»
Извлечение Архив
4 2.Выбрать архив Пройден
архива извлечен
3.Нажать кнопку
«Extract»
1.Нажать кнопку Открылось
Обратная
5 «Feedback» окно в Пройден
связь
2. Нажать кнопку «Vk» браузере
Открылось
1.Нажать кнопку About
6. О продукте окно с Пройден
product
информацией

На рисунке 5.1 представлен тест по времени сжатия известных


архиваторов.
Рисунок 5.1 – Время сжатия

На рисунке 5.2 представлен тест по сжатому размеру известных


архиваторов.

Рисунок 5.2 – Сжатый размер


На рисунке 5.3 представлен тест по среднему баллу известных
архиваторов.
Рисунок 5.3 – Средний балл

На рисунке 5.4 представлен тест по коэффициенту сжатия известных


архиваторов.

Рисунок 5.4 – Коэффициент сжатия


6 РАЗРАБОТКА РУКОВОДСТВА ПОЛЬЗОВАТЕЛЯ
ПРОГРАММНОГО СРЕДСТВА
Минимальные системные требования отображают вариант комплектации ПК, на
котором ПО будет стабильно работать на минимальных настройках, не вызывая
дискомфорта.
Минимальные системные требования:
− ОС: Windows XP;
− Процессор: Dual Core 2.3 GHz;
− Оперативная память: 512 MB ОЗУ;
− Видеокарта: 256 MB;
− Место на диске: 200 MB.

Рекомендуемые системные требования – это ориентир того, какая мощность


необходима для раскрытия полной функциональности и технологического потенциала,
комфорта использования. На комплектации, указанной в рекомендуемых требованиях, ПО
сможет запуститься и комфортно работать максимально быстро.
Рекомендуемые системные требования:
− ОС: Windows 7 и более новые версии;
− Процессор: QuadCore 2.4 GHz;
− Оперативная память: 1 GB ОЗУ;
− Видеокарта: 1 GB;
− Место на диске: 250 MB.
Демонстрационный пример работы.
Для начала работы необходимо загрузить программу (рисунок 6.1).
Для того, чтобы создать архив необходимо нажать сначала кнопку «Add».
Затем выбрать в диалоговом окне нужные файлы и нажать кнопку открыть.
На завершающем этапе создания архива необходимо нажать кнопку «Compress» и
выбрать место сохранения.
Чтобы выполнить извлечение файлов из архива необходимо:
1. разместить архив на диске «С»
2. изменить его название на «love»
3. в программе нажать кнопку Open и открыть архив
4. нажать клавишу «Extract»
Извлеченные файлы будут находиться на диске «С» в папке «UnzipFiles»
ЗАКЛЮЧЕНИЕ

Выбирая архиватор из всего их многообразия, не стоит


руководствоваться только скоростью работы и обеспечиваемым
коэффициентом сжатия. Необходимо, чтобы он обладал развитым и удобным
оконным интерфейсом, поддерживал разные платформы (чтобы не возникало
проблем совместимости) и располагал большим количеством
дополнительных возможностей. Немаловажно при выборе архиватора
учитывать распространенность и возможную дальнейшую поддержку
авторами новых версий.
В процессе написания курсовой работы было собрано большое
количество по теме компрессия данных, разобрано несколько реализаций
различных алгоритмов сжатия данных, написана программа-архиватор.
В итоге получили готовый программный продукт, соответствующий
теме курсовой работы «Программное средство архивации данных».
Все цели и задачи, поставленные в работе, были выполнены.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1. Ватолин Д., Ратушняк А., Смирнов М., Юкин В. Методы сжатия


данных. Устройство архиваторов, сжатие изображений и видео. - М.:
ДИАЛОГ-МИФИ, 2002. - 384 с.
2. ZLib – библиотека для сжатия общего назначения [Электронный
ресурс]: Руководство по библиотеке ZLib – Режим доступа: 7zip.org.
3. Википедия [Электронный ресурс]: Свободная энциклопедия – Режим
доступа: http: wikipedia.org.
4. Сжатие данных [Электронный ресурс]: Крупнейший каталог
ресурсов по сжатия данных .
5. Библиотека алгоритмов [Электронный ресурс] – Режим доступа:
http://algolist.manual.ru
6. Зелковец М.В. Принципы разработки программного обеспечения /
М.В. Земковец. – Москва: Мир, 1982. – 400 с.: ил.
7. Зиглер К.К. Методы проектирования программных систем / К.К.
Зиглер – М.: Мир, 1985. – 520 с.: ил.
8. Карпей Т.В. Экономика. Организация и планирование
промышленного производства / Т.В. Карпей – М.: Дизайн ПРО, 2004г. – 321
с.: ил.
9. Кинг Д.А. Создание эффективного программного обеспечения/ Д.А.
Кинг. – М.: Мир, 1991. – 412 с.: ил.