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

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

Бесплатная лицензия PVS-Studio для специалистов Microsoft MVP
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

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

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

Ваше сообщение отправлено.

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


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

>
>
SQL-подобные запросы для C++ кода: зада…

SQL-подобные запросы для C++ кода: задача для статического анализа или нет?

21 Ноя 2012

Нередко пользователи инструментов статического анализа интересуются, как выполнить задачу поиска определенных фрагментов кода. Например, как найти функцию длиннее, чем 1000 строк. Или как найти класс, в котором более 100 методов. Или в каких функциях больше всего (или меньше всего) комментариев. Для чего они это спрашивают?

Причины могут быть разные:

  • Выбор методов и классов для дальнейшего рефакторинга.
  • Поиск либо слабо документированных, либо наоборот слишком документированных функций.
  • Анализ изменения статистических характеристик проекта – количества методов, классов, файлов.

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

Однако мне кажется все-таки, что статический анализ кода предназначен для выявления ошибок в программах. Ну, или если уж быть совсем точным, для выявления мест в программе, где программисту стоит внимательнее присмотреться и возможно найти ошибку. А отвечать на SQL-подобные запросы инструменты статического анализа кода хоть и могут, но все-таки, наверное, не должны. Потому что есть специальные инструменты для этого. Например, в инструменте CppDepend существует специальный язык запросов CQLinq (расшифровывается как "Code Querry Linq"). Как следует из названия, этот язык (очень похожий на Microsoft LINQ) позволяет строить запросы к анализируемой кодовой базе.

Какие публичные методы имеют размер больше 30 строк:

from m in Application.Methods  
where m.NbLinesOfCode >  30  && m.IsPublic
select m

Какие классы наследуются от конкретного класса:

particular from t in Types 
where t.IsClass && t.DeriveFrom ("CBase") 
select t

Какие сложные методы недостаточно прокомментированы:

from t in Types 
where t.IsClass && t.DeriveFrom ("CBase") 
select t

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

Популярные статьи по теме
Статический анализ как часть процесса разработки Unreal Engine

Дата: 27 Июн 2017

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

Проект Unreal Engine развивается - добавляется новый код и изменятся уже написанный. Неизбежное следствие развития проекта - появление в коде новых ошибок, которые желательно выявлять как можно раньш…
Эффект последней строки

Дата: 31 Май 2014

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

Я изучил множество ошибок, возникающих в результате копирования кода. И утверждаю, что чаще всего ошибки допускают в последнем фрагменте однотипного кода. Ранее я не встречал в книгах описания этого …
PVS-Studio ROI

Дата: 30 Янв 2019

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

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

Дата: 20 Мар 2017

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

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

Дата: 17 Янв 2019

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

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

Дата: 21 Ноя 2018

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

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

Дата: 22 Дек 2018

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

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

Дата: 16 Окт 2017

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

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

Дата: 22 Окт 2018

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

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

Дата: 14 Апр 2016

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

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

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

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