Техническое задание на программу
Далее техническое задание (данная версия и возможные последующие) будем называть ТЗ.
1.1.	Предназначение разработки
1.	Библиотека (далее – основной модуль) для поддержки различных форматов растровых графических файлов посредством модулей (далее - плагинов), подключаемых с помощью однотипного интерфейса.
2.	Реализация вышеупомянутых плагинов для форматов BMP и JPEG.
1.2.	Условное наименование программного продукта
Для основного модуля – «libnebular»
1.3.	Основание для проведения разработки
Документ «Задача № 24»
1.4.	Требования к программному продукту
1.4.1.	Состав выполняемых функций:
1.	Основной модуль, функции с точки зрения пользователя – исполняемые посредством внешнего интерфейса (user API):
a.	Определение формата файла посредством плагинов с помощью:
i.	Расширения имени файла
ii.	Сигнатуры (file signature, “magic”), находящейся в содержимом файла
b.	Передача файла на обработку соответствующему плагину на основе информации о типе файла
c.	Чтение одностраничных растровых графических файлов посредством плагинов и выдача пользователю основного модуля следующей информации, полученной из содержимого файла:
i.	Битовой карты (bitmap) изображения
1.	Записывается либо в ту область оперативной памяти, куда запросил пользователь, либо в область, отведённую самим плагином (по выбору пользователя)
2.	В задачу основного модуля не будет входить что-либо, связанное с отрисовкой битовой карты, кроме записи той в оперативную память
3.	Формат: 
a.	Информация о пикселе представляет собой последовательность длиной до 32-х бит
b.	Количество байт для представления пикселя является целым (соотвественно, допустимы пиксели по {8, 16, 24, 32} бита)
c.	Для каждого канала (красный, зелёный, синий, alpha) задаётся битовая маска, с помощью которой этот канал записываетя в вышеупомянутую последовательность
d.	Биты маски каждого канала последовательны и не перекрывают маску другого канала
4.	В памяти битовая карта располагается начиная с левого вехнего угла
ii.	Размера в пикселях
iii.	Размера в физических единицах длины
iv.	Количества пикселей на физическую единицу длины (разрешения)
v.	Цветовой глубины, количества бит на пиксель (несжатого) изображения
vi.	Цветов палитры
d.	Запись файлов, требования к которым те же, что и на чтение, производимая посредством плагинов с предоставлением плагину такого же рода информации, какого может быть получена при чтении
e.	Те возможности из перечисленных выше, которые возложены на плагины, не обязаны быть полностью реализованы в каждом плагине – соответственно, из вышеперечисленных функций для каждого конкретного файла будут доступны только позволенные соответствующим выбранным плагином
f.	Плагинам для идентификации обрабатываемого файла передаётся его имя в формате, специфичном для используемой ОС; файл должен находиться на локальном компьютере (для того, чтоб быть доступным для чтения стандартными функциями C++)
2.	Плагин BMP:
a.	Поддержа чтения графических файлов формата Microsoft Windows Bitmap:
i.	Версии спецификации: 2 - 4
ii.	Без сжатия (uncompressed) или со сжатием с помощью битовых полей (bitfields encoding)
iii.	Только цвета в формате device-dependent RGB
b.	Поддержка записи файлов Microsoft Windows Bitmap:
i.	Версия спецификации – 4
ii.	Битовая карта:
1.	24 бита на пиксель (BPP) – без сжатия, либо
2.	32 бита на пиксель – формат RGB888 , сжатие с помощью битовых полей (идентично описанному выше формату битовой карты, предоставляемой пользователю)
iii.	Цвета в формате device-dependent RGB
iv.	Другие характеристики выходного изображения (кроме размера и разрешения), как и прочие значения в заголовках выходного файла, также фиксируются плагином
3.	Плагин JPEG
Осуществляет поддержку чтения и записи JPEG с помощью libjpeg от Independent JPEG Group (IJG).
a.	JPEG используется в соответствии со стандартом от ISO и стандартом JFIF. В соответствии с документацией libjpeg, не поддерживаются следующие части стандарта ISO:
i.	Hierarchical storage
ii.	Lossless JPEG
iii.	DNL marker
iv.	Nonintegral subsampling ratios
b.	Ширина и высота поддерживаемых изображений ограничивается значением 65500 (значение по умолчанию константы JPEG_MAX_DIMENSION в вышеупомянутой библиотеке)
c.	Характеристики выходного изображения (кроме размера и разрешения), как и прочие значения в заголовках выходного файла, фиксируются плагином
4.	Тестовое приложение для проведения приёмо-сдаточных испытаний
a.	Использует библиотеку SDL (Simple DirectMedia Layer) для вывода на экран и вышеуказанные разработки для работы с графическими файлами
b.	Имеет интерфейс командной строки
c.	Вывод информации о файле осуществляется с помощью соответствующей опции командной строки и в консоль.
1.4.2.	Требования к надёжности
Внутренние ошибки основного модуля должны обрабатываться так, чтоб пользователь имел информацию о них, и чтоб они по возможности не вызывали завершения работы основного модуля. Ошибки в плагинах, поставляемых в составе программного продукта, не должны вызывать срыва работы основного модуля; допускается лишь отмена текущей операции, вызванной основным модулем у плагина с предоставлением основному модулю сообщения об ошибке.
1.4.3.	Требования к исходным кодам
Будет использован язык программирования C++ стандартов ISO/IEC 14882:1998, ISO/IEC 14882:2003. Любой совместимый с данным стандартом компилятор может быть использован, однако исплонителем будет гарантироваться только работа с компилятором из пакета GCC 4.4. Допускается ограниченное использование специфичных для платформы и/или компилятора нестандартных языковых средств.
1.4.4.	Комплект поставки
1.	Скомпилированные бинарные модули и заголовочные файлы:
d.	Основной модуль – в виде статически связываемой библиотеки с приложенным заголовочным файлом С++ (.hpp).
e.	Плагины – в виде динамически связываемых библиотек
f.	Формат библиотек определяется при компиляции; работа гарантируется только на ОС GNU/Linux.
g.	Документация (см. требования к документации)
2.	Также возможна поставка исходых кодов
3.	Комплект оформлен в виде стандартного установочного комплекта для GNU/Linux.
1.4.5.	Требования к ПО на этапе использования программного продукта
Ввиду используемого стандарта, библиотеку можно будет использовать на различных программных платформах, но исполнителем гарантируется только работа на ОС Ubuntu 9.10 (Karmic Coala).
Требования к надёжности сторонних плагинов - такие же, как и требования к надёжности плагинов, являющихся частью программного продукта.
1.4.6.	Требования к огранизации входных и выходных данных
Для графических файлов - полностью определяются плагином, обрабатывающим данный файл.
1.4.7.	Требования к документации
Оформляется с помощью средства автогенерации документации из исходных кодов - Doxygen - в виде “man” (Unix Manual) файлов. Состав документации:
1.	Описание (description) программного продукта
2.	Руководство по работе с внешним интерфейсом (user API reference)
3.	Руководство по работе с интерфейсом для плагинов (plugin API reference)
1.4.8.	Дополнительные требования
Могут быть оговорены с заказчиком и приняты к исполнению при условии обязательного внесения в ТЗ.
1.5.	Стадии и этапы разработки
1.	Разработка и согласование ТЗ
Ведётся на основе требований заказчика; включает в себя определение и уточнение:
a.	Требований к программному продукту, в т.ч. к его документации
b.	Требований к порядку («стадиям и этапам») разработки
2.	Проектирование 
a.	Разработка основной части исходных кодов программного продукта
b.	Тестирование
c.	Документирование
3.	Внедрение
a.	Передача программного продукта в составе комплекта поставки заказчику
1.6.	Состав тестовых испытаний
Будут проводиться посредством вышеописанного тестового приложения.
1.	Открытие файла BMP, файла JPEG и вывод их на экран.
2.	Открытие подерживаемого графического файла и вывод его на экран в формате RGB565. 
3.	Открытие файла BMP, файла JPEG с размерами не менее 2000x2000 пикселей.
4.	Открытие файла BMP в формате, в который может сохранять плагин BMP, с последующим сохранением данного файла и сравнением сохранённой и оригинальной версий.
5.	Открытие подерживаемого графического файла с последующим сохранением в JPEG и визуальным сравнением содержимого.
6.	Запрос информации о поддерживаемом графическом файле.
7.	Попытка открытия неподдерживаемого формата файла (Ожидаемый результат – ошибка: нельзя определить формат файла).
8.	Попытка открытия файла BMP неподдерживаемой версии спецификации.
9.	Попытка открытия BMP со сжатием RLE.
10.	Попытка открытия BMP с неверно указанными размерами изображения (Ожидаемый результат – ошибка: неожиданный конец файла).
11.	Попытка открытия lossless JPEG.
12.	Попытка открытия JPEG с шириной либо высотой большей, чем максимально поддерживаемые.
13.	Заказчик может предоставить свои тесты в заранее оговоренном количестве.