Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Диплом_Frozen / отчет о преддипломной практике

.doc
Скачиваний:
35
Добавлен:
16.04.2013
Размер:
53.76 Кб
Скачать

Отчет о преддипломной практике.

Компания «МиСТ ленд – ЮГ» занимается разработкой компьютерных игр. Современная компьютерная игра – крупный и сложный программный комплекс, и затраты только на программную разработку измеряются сотнями человеко-месяцев. Одной из отличительных черт игры как компьютерного приложения является работа с огромным количеством ресурсов. Объемы графики, музыки, видео, скриптов исчисляются гигабайтами, ресурсы проектов насчитывают тысячи файлов. Имеет место проблема организации ресурсов, в частности, информации на диске. Применение СУБД в данном случае сопряжено с техническими и экономическими сложностями:

  1. Требуется специальная обработка данных для помещения их в БД, впоследствии будет затруднено их редактирование.

  2. СУБД – отдельное приложение, необходимо программно устанавливать связь между процессами.

  3. Высокая стоимость быстродействующих СУБД. В случае с распространением игры как товара, как правило, требуется отдельное лицензирование.

Ранее проблема решалась построением иерархических структур на диске. В силу внешних причин отдельные части ресурсов могут быть заархивированы и/или зашифрованы. Часть ресурсов может быть оставлена на ключевом носителе (сейчас в этой роли выступает оптический диск), который тоже может быть защищен по какой-либо технологии (используется StarForce). Также ресурсы могут быть размещены на сетевом сервере, что накладывает свои требования к доступу, верификации и иногда к защите. Особенности проектов «МиСТ ленда» диктуют и такое требование: необходима возможность работы с несколькими параллельными версиями ресурсов – это нужно для корректной установки патчей (пакетов исправлений и дополнений) и пользовательских модификаций. В результате формируется распределенный комплекс весьма сложных по структуре хранилищ. Кроме того, необходимость знать о типах хранилищ и особенностях работы с ними, вызывает резкое усложнение остального кода проекта и затрудняет его повторное использование.

Студент группы МП-55 Ересов А.Е., направленный в «МиСТ ленд – ЮГ» на преддипломную практику, решая описанную проблему, в рамках разработанного им ТЗ разработал модуль VFS, внедренный в проект «Альфа Антитеррор».

В разработанном модуле применен подход к организации файловых хранилищ, известный как «виртуальная файловая система». Основные положения этого подхода:

  1. Любые обращения к файловой системе идут по виртуальному «дереву» каталогов, начиная с корня (root).

  2. Любое файловое хранилище – носитель, архив, сетевой каталог и т.п. – может быть присоединено (замонтировано) к дереву как «ветка», соответственно, часть полного пути до файла будет располагаться в дереве, а часть – в ветке.

  3. Под «файлом» подразумевается любой потоковый источник информации, это могут быть дисковый файл, устройство или программно сформированные данные в памяти.

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

Используя этот подход, Ересов А.Е. разработал модуль, задачей которого является прозрачная работа с файловыми ресурсами вне зависимости от хранилища, из которого они получены – дисковый каталог, сеть, архив, зашифрованное хранилище, exe-файл или dll-файл. В рамках разработанного ТЗ, модуль предлагает следующий программный интерфейс для работы с файлами:

  1. Открытие файла на чтение и предоставление входного потока на него стандартной библиотеки С++, согласно относительной системе именования, принятой в структуре данных проекта.

  2. Открытие файла на запись или его создание с предоставлением исходящего потока стандартной библиотеки С++, согласно той же системе именования.

  3. Перебор файлов внутри директории безотносительно типу файлового хранилища с использованием идиомы STL «итератор».

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

  1. Наличие системы виртуальных директорий для организации разветвленных виртуальных пространств именования файлов.

  2. Возможность монтирования подсистемы (дисковой директории, зип-архива, сетевого диска, ресурсного exe/dll) в виртуальную директорию.

  3. Ручное и автоматическое («сборка мусора») демонтирование и удаление подсистем.

Архитектура модуля предусматривает максимально простое расширение функционала:

  1. Увеличение количества типов поддерживаемых файловых подсистем (хранилищ). Предусмотрен специальный интерфейс, реализуя который можно реализовать и подключить новую подсистему.

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

Предлагаемый модуль является независимой dll-библиотекой, статически подключаемой к любому проекту через интерфейс на языке С++.

Работа с ZIP-архивами реализована при помощи свободно распространяемой библиотеки zlib. Используются алгоритмы inflate/deflate.

Шифрование выполняется по алгоритму CRC32, реализованному самостоятельно, для обеспечения работы с зашифрованными ZIP-архивами.

Поддержка сети реализована для всех типов подсистем путем опознавания стандартного в Win32 указания сетевого пути в начале имени файла – двойной обратный слеш.

Работа с ресурсами исполняемых файлов Win32 реализована с помощью средств WinAPI.

Выбор средств разработки определялся удобством интеграции в существующие проекты, а также быстродействием результирующего модуля. В силу того, что программирование в «МиСТ ленд – ЮГ» ведется на языке С++, модуль также был реализован на C++ с обширным использованием STL. Из инструментальных средств, выбор пал на Microsoft Visual Studio 7.1, STLport, BOOST и zlib. Проектирование велось в Rational Rose, для не-UML схем использовался Microsoft Visio.

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

  1. Общий интерфейс VFS:

    1. Открытие файла на чтение и предоставление входного потока на него стандартной библиотеки С++, согласно относительной системе именования, принятой в структуре данных проекта.

    2. Открытие файла на запись или его создание с предоставлением исходящего потока стандартной библиотеки С++, согласно той же системе именования.

    3. Перебор файлов внутри директории безотносительно типу файлового хранилища.

  2. Ядро VFS:

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

    2. Монтирование/демонтирование подсистем различных типов в директории.

    3. Проверка механизма "сборки мусора".

  3. Особенности:

    1. Проверка на возможность существования нескольких файлов с одинаковым именем в рамках всей VFS.

    2. Проверка работы критериев сортировки и выбора предпочтительных вариантов файлов.

  4. Специализированные модули:

    1. Проверка корректности работы шифрования/дешифрования средствами разработанной подсистемы ml_encrypted_zip при заведомо внедренных ошибках шифрации.

  5. Надежность:

    1. Проверка на недопустимые имена файлов.

    2. Проверка на отсутствие запрашиваемых файлов.

    3. Проверка на ошибки физического доступа к подсистемам.

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

Студент группы МП-55

______________ (Ересов А.Е.)

Предполагаемая оценка за преддипломную практику – «отлично».

Технический директор ЗАО «МиСТ ленд - ЮГ»

_____________ (Сорокин А.С.)

Соседние файлы в папке Диплом_Frozen