О юнит-тестах в C++

Привет всем!

Сегодня я расскажу о средах для написания юнит-тестов в C++, а также, в частности, о том, как мы используем юнит-тесты в PDF Creator’e.

В определенный момент развития PDF Creator’a стало ясно, что без удобной процедуры тестирования становится все тяжелее и тяжелее. Значительные объемы кода (не везде отрефакторенного), множество клиентов, определенные тонкости формата PDF и работы библиотеки – эти факторы придают особый вес каждому изменению в коде. Сейчас как минимум при выпуске каждой версии (в действительности чаще) мы проверяем набор “визуальных” тестов библиотеки (на выходе получается PDF, нужно глазами оценить правильность результата), затем конвертацию emf-файлов (тоже визуально), ASP- и vbs-скрипты. Множество этих тестов постоянно пополняется, но, к сожалению, правильность получаемых результатов далеко не гарантирует того, что в ходе работы над версией не было ничего нарушено…

Поэтому при работе над PDF Creator 3.9 мы много рефакторили код, одна из задач рефакторинга – подготовить его для тестов. После этого встал вопрос – какую среду использовать. Изначально варианта было два – классический CppUnit (http://sourceforge.net/projects/cppunit/) и Boost Test Library (http://www.boost.org/libs/test/doc/index.html)

Continue reading “О юнит-тестах в C++”

О PDF Creator 3.9

Привет всем! Я – Виталий Шибаев, один из разработчиков библиотеки PDF Creator. В своей первой заметке я хочу рассказать об особенностях версии 3.9.

Главное, на мой взгляд, улучшение версии – вывод текста. Любой текст теперь выводится корректно с точки зрения поиска, копирования в буфер обмена. Помимо этого в общем случае выходные файлы получаются существенно меньшего размера (особенно при использовании CJK-шрифтов).

Другой, безусловно, важный момент – избавление от утечек памяти (и попутно серьезный рефакторинг кода). Как следствие, более быстрая и стабильная работа библиотеки.

Для отлова утечек мы не пользовались BoundsChecker’ом, выручили буквально два файла с кодом – http://www.colorpilot.com/~vit.shibaev/mmgr.zip, отличная вещь. Эти файлы просто добавляются в проект, в заголовочный файл прописывается #include “mmgr.h” и все! После этого рядом с исполняемым файлом программы будут создаваться файлы memleaks.log, memory.log и memreport.log. В memleaks.log показываются утечки, если есть; в memreport.log при соответствующих настройках в mmgr.cpp (по умолчанию подробные отчеты отключены) можно получить информацию обо всех выделениях/освобождениях памяти – где, когда, сколько и т.п. В общем всем C++-разработчикам рекомендую!

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

Еще одна область, подвергшаяся сильным улучшениям – интерактивные формы и аннотации. Во-первых, файлы с этими элементами стали намного более оптимальными по размеру, зачастую меньше в 2-3 раза. Во-вторых – улучшился вывод юникодных символов на этих элементах. Еще одно улучшение коснулось radiobutton’ов – мы наконец включили в описание элемента Caption, т.е. теперь текст рядом с radiobutton’ом – часть контрола. Соответствующий код приобретает следующий вид:

PDF.PDFPAGE_CreateControl_RadioButton “rb_group”, 0, 0, 100, 20
PDF.PDFANNOTATION_Caption = “Place some text here”

Приоткрывая завесу нашей девелоперской кухни могу сказать, что к версии 3.9 мы значительно реорганизовали (улучшили, разумеется) код. Добавили, наконец, юнит-тесты (пока, конечно, не на весь код). Интересно, кстати, подбирали среду для юнит-тестирования на C++. Но об этом, пожалуй, уже в другой раз…

Виталий Шибаев
Разработчик PDF Creator


Technorati :