Интервью с Issam Lahlali, одним из создателей инструмента CppDepend

Андрей Карпов
Статей: 370



Аннотация

Статья представляет собой ответы на вопросы, заданные Иссаму Лалали (Issam Lahlali), и касаются инструмента для разработчиков CppDepend.

Введение

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

Вопросы задает (вопросы выделены жирным шрифтом):

Карпов Андрей Николаевич. Один из основателей компании "Системы программной верификации". Участвует в разработке пакета PVS-Studio, предназначенного для выявления дефектов в исходном коде приложений.

На вопросы отвечает:

Иссам Лалали (Issam Lahlali). Один из разработчиков, занимающихся созданием пакетов CppDepend и VBDepend.

Вопросы и ответы

Расскажите немного о себе и инструменте CppDepend. Какова его история?

Я Иссам Лалали, имею сертификаты MCSD и MCSD.NET. Я сотрудничал с несколькими разработчиками программного обеспечения, моей последней работой была должность архитектора программного обеспечения в компании Sophis. Два года назад мне выпала возможность познакомиться с Патриком Смачча (Patrick Smacchia) - разработчиком NDepend - и он убедил меня сотрудничать с его компанией для разработки инструментов CppDepend и VBDepend.

Что такое CppDepend?

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

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

Что бы Вы могли сказать о CppDepend в сравнении с другими распространенными инструментами?

CppDepend дополняет другие инструменты статического анализа - он больше фокусируется на архитектуре и проектировании, чем реализации, как это сделано в других инструментах. С помощью CppDepend мы можем получить подробное представление о связности между модулями программы, связности между элементами отдельных модулей, уровне абстрактности, неустойчивости и т.д.

С чего следует начать работу с CppDepend? Какой алгоритм действий вы рекомендуете?

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

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

Также имеется встроенная справочная система, в которой вы найдете пояснения о том, как начать работать с инструментом. Там же содержатся ссылки на скринкасты. Они поясняют, как выполнить ту или иную задачу.

Наконец, на нашем сайте вы можете найти расширенную документацию, например, полное описание CQL спецификаций.

Какая функция CppDepend, по Вашему мнению, является наиболее мощной или полезной? И почему?

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

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

Как инструмент CppDepend интегрируется в процесс разработки программного обеспечения? Что такое CQL и как он связан с продуктом?

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

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

VisualCppDepend также предоставляет язык запросов Code Query Language (CQL). CQL в сущности является сердцем этого продукта. CQL имеет такое же отношение к вашему коду, как SQL - к вашим данным.

Например, вы можете произвести поиск метода, в котором содержится более 30 строк кода, написав такой CQL-запрос:

SELECT METHODS WHERE NbLinesOfCode > 30 

И если вы хотите, чтобы вас предупреждали о подобных объемных методах, вы можете сделать из этого CQL-запроса CQL-правило следующим образом:

WARN IF Count > 0 IN SELECT METHODS WHERE NbLinesOfCode > 30 

CQL предоставляет много возможностей: от статистики по 60 метрикам кода до определения зависимостей, инкапсуляции, неустойчивости, изменений/различий/эволюции кода.

Например, сделать запрос методов, которые были недавно изменены, так же просто, как написать следующую строчку:

SELECT METHODS WHERE CodeWasChanged 

CppDepend имеет более 100 правил по умолчанию, и вы можете изменять существующие правила или добавлять новые для собственных нужд.

Другая сторона CppDepend - это его внедрение в процесс непрерывной интеграции и сервер сборки. Идея заключается в том, чтобы получать ежедневный и составленный специально для конкретного пользователя отчет в формате HTML, в котором сразу же можно увидеть, не были ли нарушены какие-то CQL-правила, и получить метрики качества или структурирования кода. Вот таким образом можно научиться контролировать, что на самом деле происходит в вашем отделе разработки.

Какие технологии вы использовали при разработке CppDepend? (Языки, библиотеки, парсеры)

Что касается парсера, мы адаптировали парсер doxygen под наши нужды. doxygen имеет открытый код, так что наш модифицированный парсер, который мы назвали CppDependency, также имеет открытый код и доступен для скачивания на сайте SourceForge. Движок CQL и пользовательский интерфейс разработаны с использованием технологии DotNet.

Работает ли CppDepend под Linux и Mac?

Мы использовали технологию DotNet, так что инструмент работает только под Windows. Мы планируем адаптировать наш продукт под Mono. Но в принципе мы можем анализировать любой C++ проект, правда, недостаток проверки C++ проектов, существующих на компьютере с Linux или Mac, заключается в том, что нам приходится копировать исходный код на компьютер с Windows.

Библиографический список



Найдите ошибки в своем C, C++, C# и Java коде

Предлагаем попробовать проверить код вашего проекта с помощью анализатора кода PVS-Studio. Одна найденная в нём ошибка скажет вам о пользе методологии статического анализа кода больше, чем десяток статей.

goto PVS-Studio;

Андрей Карпов
Статей: 370


Найденные ошибки

Проверено проектов
344
Собрано ошибок
12 970

А ты совершаешь ошибки в коде?

Проверь с помощью
PVS-Studio

Статический анализ
кода для C, C++, C#
и Java

goto PVS-Studio;