PDF Creator – о проекте и процессе разработки

Привет всем!

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

Инструменты для разработки

1) SVN

Без репозитория жизнь решительно невозможна 🙂 На данный момент совершено 2387 коммитов, используем Tortoise SVN (http://tortoisesvn.tigris.org/). Поскольку каждая ошибка стоит дорого, стараюсь придерживаться следующего правила (и всем советую) – коммитить код небольшими порциями, каждый коммит должен соответствовать одной (!) задаче. Это необходимо потому, что а) проще найти ошибку при откатах версии (каждым коммитом изменяется небольшое количество кода) б) возможно найти ошибку еще до коммита (просто пробежаться глазами по изменениям перед коммитом) в) вашим коллегам по работе проще отслеживать изменения, внесенные в исходники (прочитать описание коммита и просмотреть небольшое количество измененного кода).

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

Еще пара полезных правил по работе с репозиторием:

а) На свн всегда должна лежат компилируемая и рабочая версия. Насчет компилируемости особых проблем нет, а вот к корректности работы надо неустанно стремиться.

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

2) Bug tracker (система для учета ошибок)

Мы используем Mantis. (http://www.mantisbt.org/) PDF Creator является базовым продуктом для ряда других продуктов компании (различные конвертеры, виртуальный принтер (http://www.colorpilot.com/developer.html)), поэтому число пользователей на деле значительно превышает количество покупателей именно библиотеки. Необходимость упростить взаимодействие между разработчиками библиотеки и остальных продуктов обуславливает использование bug tracker’a.

Для тех, кто никогда с подобными системами не работал, поясню на примере. Разработчики виртуального принтера получают от клиента информацию о неправильной конвертации в PDF. Виртуальный принтер сначала получает EMF файл, а затем уже подключает нашу библиотеку для конвертации. В bug tracker’e создается ticket (информация об ошибке) для разработчиков библиотеки, с описанием ошибки и с приложенным EMF файлом. Далее мы смотрим, насколько критичен баг, назначаем одному из разработчиков. После того, как ошибка исправлена, тикет закрывается. Все уведомления об изменении тикета приходят по почте, поэтому все заинтересованные лица отслеживают его состояние.

3) Техническая поддержка клиентов

В качестве системы управления перепиской с клиентами используем RT (http://bestpractical.com/rt/) Такая система необходима для удобного хранения архива переписки плюс контроля за подключением всех необходимых лиц к чтению служебной переписки.

В идеале, пункты 2 и 3 должны быть объединены в одном сервисе, чтобы клиент мог отслеживать статус своего обращения (в примере выше пользователь виртуального принтера мог бы отслеживать переписку разработчиков по своей проблеме). Примером такой системы является FogBugz (http://fogcreek.com/FogBugz/)

4) Ведение технической документации

Не многие знают об одном из наших внутренних проектов Squirrel, который тем не менее доступен любому желающему: http://www.colorpilot.com/squirrel.html. Данная программа позволяет создавать документацию в формате chm крайне удобным способом. Поддерживается интеграция с свн, а также создание онлайн документации, вроде http://www.colorpilot.com/pdfcreatorpilotmanual/PDF_Creator_Pilot.html

5) Среда разработки

Visual Studio 2008, языки C++ и C#

6) Инструменты рефакторинга

Visual Assist X (http://www.wholetomato.com/) Visual Studio не предоставляет инструментов для рефакторинга в C++, поэтому мы используем сторонний плагин к Visual Studio.

7) Юнит-тесты в C++

UnitTest++ (http://unittest-cpp.sourceforge.net/)

8 ) Инструменты профилирования

Для отслеживания утечек памяти: http://www.colorpilot.com/~vit.shibaev/mmgr.zip. Об этом я писал в одной из предыдущих статей (http://www.colorpilot.com/blog/about-pdf-creator-39/)
Для контроля за производительностью иногда используем Intel VTune (http://www.intel.com/cd/software/products/asmo-na/eng/239144.htm)

Устройство проекта

Напомню, PDF Creator – библиотека для программной работы с PDF-документами: создание, чтение, модификация, извлечение текста и т.п. На данный момент проект представляет из себя solution под Visual Studio 2008, содержащий 18 подпроектов. Проекты делятся на несколько типов:

1) Ядро библиотеки

Здесь сосредоточена вся логика работы с PDF, этот проект постоянно модифицируется. Одно из давних, но по-прежнему невоплощенных желаний – сделать ядро кросс-платформенным. Главное препятствие тут – код EMF-to-PDF конвертации, поскольку формат EMF – типичный Windows-only формат. Решение – отделить логику данной конвертации от кросс-платформенной части.

2) Интерфейсы для клиента

Таких подпроекта два – первый реализует COM-интерфейс, второй – статическую библиотеку C++. COM-интерфейс делегирует вызовы статической библиотеке, а та в свою очередь – ядру, поэтому дублирование кода отсутствует.

Статическая библиотека не рекламируется на сайте, однако любой наш клиент может получить ее наряду с COM версией. Статическая библиотека содержит ряд недокументированных возможностей для получения углубленной информации о документе. Если вы являетесь разработчиком, скажем, PDF Viewer’a, то эти возможности могут быть вам полезны.

3) Проекты с тестами

а) Неавтоматизированные тесты для COM-интерфейса. Набор функций, каждая из которых формирует и отображает PDF-документ на экране сразу после запуска проекта.

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

в) Проекты для проверки EMF конвертации. Первый (на WTL) конвертирует указанный EMF файл в PDF, имеет минимальный интерфейс, подобный нашему онлайн-сервису http://www.colorpilot.com/pdflibrary_convert-emf-to-pdf.html.

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

4) Собственные вспомогательные проекты

Шрифтовая библиотека (парсинг TrueType и Type1 шрифтов, работа с кодировками, модификация TrueType шрифтов), инсталлятор шрифтов в систему, работа с ключами и т.п.

5) Сторонние opensource продукты

Формат PDF достаточно сложен. В частности он охватывает множество различных областей, алгоритмов, форматов – алгоритмы сжатия и шифрования, различные форматы изображений и шрифтов, цветовые пространства и т.п. Большую часть реализации такой работы мы черпаем из opensource-проектов со свободной лицензий, типа CxImage, ZLib, LibJPEG, Lcms, UnitTest++.

Виталий Шибаев

Разработчик PDF Creator

Leave a Reply

Your email address will not be published. Required fields are marked *