Автоматическая проверка качества программ на C++

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

Впрочем, в век быстротечных проектов, нехватки талантов, кадровой текучки требования, обращенные к программистам, зачастую выражаются лишь одной фразой: «Выдай код». Проверять же, насколько код удовлетворяет предъявляемым к нему требованиям, приходится руководителям проектов и менеджерам. Стремясь исправить сложившуюся ситуацию, компания ParaSoft выпустила специализированный инструментарий для Windows, позволяющий автоматизировать анализ качества кода C++. Пакет C++Test анализирует проект и генерирует код, предназначенный для проверки содержащихся в проекте компонентов. Я установил бета-версию программного обеспечения C++ Test на рабочую станцию с процессором AMD Athlon/1 ГГц. Машина, имеющая оперативную память емкостью 384 Мбайт, функционировала под управлением операционной системы Windows NT Workstation 4.0. На компьютере уже стоял пакет Visual Studio 6.0 (с дополнением Service Pack 3) и среда разработки Visual C++. Последующий перенос C++Test в среду Windows 2000 Professional показал, что производительность и особенности функционирования пакета по сравнению с предыдущей версией NT не претерпели никаких изменений.

Приложение C++Test загружает исходный код и отображает на экране дерево файлов, объектов и методов

Программное обеспечение C++Test представляет собой приложение Java со специфическим (не ориентированным на Web) интерфейсом. Установка пакета проста и предъявляет весьма скромные требования к дисковому пространству. Как и всем приложениям Java, программному обеспечению C++Test нужен быстрый процессор и большой объем оперативной памяти. Я специально настроил свою рабочую станцию Athlon для одновременного запуска Visual C++ и C++Test. В момент загрузки C++Test занимал 24 Мбайт оперативной памяти. С началом тестирования простого набора объектов этот объем увеличился до 31 Мбайт. В принципе пакет будет работать и на компьютере, оснащенном процессором Pentium III с тактовой частотой 500 МГц и оперативной памятью емкостью 256 Мбайт. Однако на медленных процессорах влияние C++Test на функционирование других приложений окажется гораздо более ощутимым. Требования, предъявляемые C++Test к аппаратным средствам, нельзя назвать чрезмерными, но тем не менее необходимо принимать их во внимание при настройке конфигурации тестовой рабочей станции.

Бета-версия C++Test производит очень хорошее впечатление. В комплект поставки программного обеспечения включены образцы проектов на C++ и система интерактивной помощи в формате HTML. Для инициирования сеанса тестирования необходимо выбрать файл проекта Visual C++. Приложение C++Test загружает исходный код и отображает на экране дерево файлов, объектов и методов. Чтобы просмотреть более подробную информацию о каком-либо объекте (например, ознакомиться с его исходным кодом, синтаксические конструкции которого автоматически выделяются цветом), достаточно щелкнуть на нем мышью.

Пакет C++Test делает очень важную работу по анализу классов C++. После того как проект загружен, необходимо настроить методы тестирования. Программное обеспечение изучает каждый аргумент метода и возвращает типы соответствующих значений. Для данных простых типов подставляются значения аргументов по умолчанию; можно определить тестовые данные для определенных пользователем типов и классов. Можно переопределить аргументы C++Test, используемые по умолчанию, и выдать значения, полученные в результате тестирования.

Особого внимания заслуживает способность C++Test тестировать незавершенный код. Программное обеспечение генерирует код-заглушку для любого метода и функции, которые еще не существуют. Поддерживается имитация внешних устройств и входных данных, задаваемых пользователем. И та и другая функции допускают возможность повторного тестирования.

После определения тестовых параметров для всех методов пакет C++Test готов к запуску исполняемого кода. Пакет генерирует тестовый код, вызывая для его подготовки компилятор Visual C++. Возможно формирование тестов на уровне метода, класса, файла и проекта.

Большинство проектов C++ для Windows предусматривают использование объектов Component Object Model, и как раз здесь пакету C++Test недостает функциональных возможностей. C++Test генерирует код для тестирования классов и методов C++, но обращения к методам объектов COM требуют анализа шаблонов, макросов и кода внешних библиотек. В то же время приложение TrueCoverage компании NuMega (входящее в состав пакета DevPartner Studio for Visual C++) не генерирует собственного тестового кода, но анализирует код, написанный разработчиками. Средства DevPartner Studio полностью поддерживают работу с объектами COM.

Отметим также, что в состав более дешевого (799 долл. за одно рабочее место) пакета DevPartner Studio включена BoundsChecker — весьма полезная утилита, позволяющая следить за выполнением кода C++ и обнаруживать ошибки распределения памяти, выделения ресурсов, неверные типы аргументов, неправильные указатели, а также находить другие подобные ситуации. Пакет C++Test не способен выявлять подобные ошибки в процессе автоматического тестирования. Специально для решения таких задач компания Parasoft предлагает другой пакет, Insure++.

Автоматическое тестирование объектов C++ позволяет снять значительную часть нагрузки с разработчиков. К сожалению, невозможность анализа средствами приложения C++Test объектов COM, отсутствие интеграции с пакетом Visual Studio и высокая цена могут привести к тому, что разработчики, как и прежде, будут составлять тестовые примеры собственными силами.


КОРОТКО О ПРОДУКТЕ
C++Test

БЕТА-ВЕРСИЯ

Увеличение числа краткосрочных проектов, требующих интенсификации усилий разработчиков, и высокая текучесть кадров усложняют тестирование программ, написанных на C++. Пакет C++Test позволяет автоматизировать процесс генерации и выполнения тестовых процедур. Обычно данные задачи возлагаются на программистов, но далеко не всегда у них хватает времени для их решения.

Достоинства: в комплект поставки включен универсальный текстовый процессор; возможность генерации подробных отчетов о свойствах кода


Недостатки: большая ресурсоемкость, присущая программам на Java; отсутствие поддержки COM; отсутствие интеграции с интерфейсом Visual Studio; высокая стоимость


Производитель: ParaSoft, www.parasoft.com
Платформы: Windows 98 и NT
Цена: 3500 долл. за одно рабочее место
Начало поставок: апрель 2000 года

- Том Ягер, INFOWORLD, США