metrica
Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top
close form

Заполните форму в два простых шага ниже:

Ваши контактные данные:

Шаг 1
Поздравляем! У вас есть промокод!

Тип желаемой лицензии:

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

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

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

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

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

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


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

Вебинар: Трудности при интеграции SAST, как с ними справляться - 04.04

>
>
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".

Популярные статьи по теме


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

Следующие комментарии next comments
close comment form