Для получения триального ключа
заполните форму ниже
Team License (базовая версия)
Enterprise License (расширенная версия)
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

** На сайте установлена reCAPTCHA и применяются
Политика конфиденциальности и Условия использования Google.
Запросите информацию о ценах
Новая лицензия
Продление лицензии
--Выберите валюту--
USD
EUR
GBP
RUB
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

** На сайте установлена reCAPTCHA и применяются
Политика конфиденциальности и Условия использования Google.
Для получения лицензии для вашего открытого
проекта заполните, пожалуйста, эту форму
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

** На сайте установлена reCAPTCHA и применяются
Политика конфиденциальности и Условия использования Google.
Для получения лицензии для вашего открытого
проекта заполните, пожалуйста, эту форму
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

** На сайте установлена reCAPTCHA и применяются
Политика конфиденциальности и Условия использования Google.
Мне интересно попробовать плагин на:
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

** На сайте установлена reCAPTCHA и применяются
Политика конфиденциальности и Условия использования Google.
Ваше сообщение отправлено.

Мы ответим вам на


Если вы так и не получили ответ, пожалуйста, проверьте папку
Spam/Junk и нажмите на письме кнопку "Не спам".
Так Вы не пропустите ответы от нашей команды.

>
>
Интервью с Issam Lahlali, одним из созд…

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

06 Июн 2010

Статья представляет собой ответы на вопросы, заданные Иссаму Лалали (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.

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

Популярные статьи по теме
Главный вопрос программирования, рефакторинга и всего такого

Дата: 14 Апр 2016

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

Вы угадали, ответ - "42". Здесь приводится 42 рекомендации по программированию, которые помогут избежать множества ошибок, сэкономить время и нервы. Автором рекомендаций выступает Андрей Карпов - тех…
Характеристики анализатора PVS-Studio на примере EFL Core Libraries, 10-15% ложных срабатываний

Дата: 31 Июл 2017

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

После большой статьи про проверку операционной системы Tizen мне было задано много вопросов о проценте ложных срабатываний и о плотности ошибок (сколько ошибок PVS-Studio выявляет на 1000 строк кода)…
PVS-Studio для Java

Дата: 17 Янв 2019

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

В седьмой версии статического анализатора PVS-Studio мы добавили поддержку языка Java. Пришло время немного рассказать, как мы начинали делать поддержку языка Java, что у нас получилось и какие дальн…
Любите статический анализ кода!

Дата: 16 Окт 2017

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

Я в шоке от возможностей статического анализа кода, хотя сам участвую в разработке инструмента PVS-Studio. На днях я был искренне удивлён тому, что анализатор оказался умнее и внимательнее меня.
Зло живёт в функциях сравнения

Дата: 19 Май 2017

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

Возможно, читатели помнят мою статью под названием "Эффект последней строки". В ней идёт речь о замеченной мной закономерности: ошибка чаще всего допускается в последней строке однотипных блоков текс…
Как PVS-Studio оказался внимательнее, чем три с половиной программиста

Дата: 22 Окт 2018

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

PVS-Studio, как и другие статические анализаторы кода, часто выдаёт ложные срабатывания. Но не стоит спешить считать странные срабатывания ложными. Это короткая история о том, как PVS-Studio вновь ок…
PVS-Studio ROI

Дата: 30 Янв 2019

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

Время от времени нам задают вопрос, какую пользу в денежном эквиваленте получит компания от использования анализатора PVS-Studio. Мы решили оформить ответ в виде статьи и привести таблицы, которые по…
Бесплатный PVS-Studio для тех, кто развивает открытые проекты

Дата: 22 Дек 2018

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

В канун празднования нового 2019 года команда PVS-Studio решила сделать приятный подарок всем контрибьюторам open-source проектов, хостящихся на GitHub, GitLab или Bitbucket. Им предоставляется возмо…
Технологии, используемые в анализаторе кода PVS-Studio для поиска ошибок и потенциальных уязвимостей

Дата: 21 Ноя 2018

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

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

Дата: 20 Мар 2017

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

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

Комментарии (0)

Следующие комментарии

На сайте установлена reCAPTCHA и применяются
Политика конфиденциальности и Условия использования Google.
Этот сайт использует куки и другие технологии, чтобы предоставить вам более персонализированный опыт. Продолжая просмотр страниц нашего веб-сайта, вы принимаете условия использования этих файлов. Если вы не хотите, чтобы ваши данные обрабатывались, пожалуйста, покиньте данный сайт. Подробнее →
Принять