Сегодня важный день – после 28 релизов шестой версии мы выпускаем PVS-Studio 7.00, где ключевым новшеством является поддержка языка Java. Однако за 2018 год накопилось много других важных изменений, касающихся С++, С#, инфраструктуры и поддержки стандартов кодирования. Поэтому предлагаем вашему вниманию заметку, которая обобщает основные изменения, произошедшие в PVS-Studio за последнее время.
PVS-Studio — это инструмент для выявления ошибок и потенциальных уязвимостей в исходном коде программ, написанных на языках С, C++, C# и Java. Работает в среде Windows, Linux и macOS.
Возможности анализатора хорошо демонстрирует обширная коллекция ошибок в коде, найденных нами в процессе проверки различных отрытых проектов.
Начнём мы с изменения, из-за которого, собственно, и было решено сменить номер версии с 6.x на 7.x. Это поддержка в анализаторе языка Java, к которому мы давно готовились.
Самое важное в Java анализаторе то, что он появился :). Приглашаем Java разработчиков скачать инструмент и проверить проекты, над которыми они работают.
Мы сделали доступными для пользователей самые популярные способы интеграции анализатора в сборочную систему:
В случае использования самописных сборочных систем имеется возможность запускать анализатор напрямую, перечислив исходники и classpath.
Подробную информацию о всех способах запуска анализатора вы можете найти на странице документации "Как запустить PVS-Studio Java".
Мы не могли обойти стороной платформу контроля качества кода SonarQube, так популярную среди Java разработчиков, поэтому добавили поддержку языка Java в наш плагин для SonarQube.
В 2018 году наша команда активно поработала над развитием C++ анализатора. Появилось много новых диагностик, а также усовершенствованы алгоритмы, позволяющие собирать и обрабатывать информацию, извлекаемую из синтаксического дерева.
CWE, CERT
Сообщения C++ анализатора (как и C# анализатора) были классифицированы согласно Common Weakness Enumeration (CWE). CWE — это система классификации потенциальных и подтверждённых уязвимостей. Она поддерживается сообществом с целью выявления проблем программного обеспечения и создания автоматизированных инструментов, которые могут использоваться для выявления и устранения этих проблем.
Дополнительно сообщения были классифицированы согласно CERT C Coding Standard и CERT C++ Coding Standard. SEI CERT Coding Standards — это набор стандартов написания программного обеспечения (ПО) на языках C, C++, Java и Perl, разрабатываемых координационным центром CERT (CERT Coordination Center, CERT/CC) для повышения надёжности и безопасности ПО.
Классификация C и C++ диагностик согласно этим предупреждениям позволяет использовать PVS-Studio как SAST решение.
MISRA
В 2018 году статический анализатор кода PVS-Studio начал классифицировать свои предупреждения согласно стандартам MISRA C и MISRA C++. Благодаря поддержке этих стандартов анализатор стало возможным эффективно использовать для улучшения безопасности, переносимости и надежности программ для встраиваемых систем.
Подробнее: "PVS-Studio: поддержка стандартов кодирования MISRA C и MISRA C++".
Поддержка MISRA стала актуальной в связи с развитием в анализаторе поддержки различных embedded систем, о чём будет рассказано в следующем разделе статьи.
Embedded Development
В 2018 году в анализаторе PVS-Studio были поддержаны:
Две заметки на тему поддержки embedded систем:
Расширение пользовательских аннотаций
Иногда в проектах используются собственные реализации разных системных функций, например, memcpy, malloc и т.п. Анализатор очень хорошо умеет искать ошибки с использованием стандартных функций, но в пользовательском коде было невозможно применять такие алгоритмы до недавнего времени. Теперь с помощью аннотации V_FUNC_ALIAS вы можете ставить имена своих функций в соответствие системным.
Формат комментария:
Рассмотрим пример:
Теперь анализатор будет обрабатывать вызовы функции MyMemCpy так же, как вызовы memcpy. Например, на такой код будет выдаваться предупреждение V512:
В этом году существенных изменений C# анализатора не было. Были отдельные улучшения диагностик и правки недочётов. Сообщения C# анализатора, как и C++ анализатора были классифицированы согласно Common Weakness Enumeration (CWE). Соответствие C# диагностик с идентификаторами CWE приведены здесь (см. диагностики с номерами 3xxx).
Мы планируем вернуться к более активному развитию C# анализатора в 2019 году. Планируется разработка новых диагностик и усовершенствование механизма анализа потока данных (Data-Flow Analysis).
Утилиты PlogConverter.exe и plog-converter входят в дистрибутивы PVS-Studio для Windows и Linux/macOS соответственно. Также исходных код этих утилит доступен на GitHub.
С появлением PVS-Studio для Java мы переработали подсветку кода для C, C++, C# и добавили Java в формате FullHtml (для веб-браузера).
Также для отчёта в этом формате был добавлен столбец MISRA:
Как и CWE ID, столбец MISRA является опциональным и включается исследователями безопасности кода при изучении результатов анализа.
1. Полное обновление
Мы переписали наши плагины с использованием нового API. Это позволило добавить новый функционал и обеспечить совместимость с SonarQube 7.x. Минимальной поддерживаемый версией теперь является SonarQube 6.7 LTS.
2. PVS-Studio для Java
В новую версию плагинов добавлена поддержка диагностик для языка Java. Теперь вы можете добавить PVS-Studio к другим инструментам контроля качества своего Java-проекта.
3. Стандарт MISRA
Недавно мы объявляли о поддержке стандартов MISRA C и MISRA C++. В новых плагинах тоже появилась их поддержка. Например, был добавлен параметр (в дополнение к CWE):
который включает добавление идентификатора MISRA к предупреждениям анализатора:
Независимо от этого параметра будет доступен поиск по тегам misra и pvs-studio#misra в результатах анализа. Информация о количестве найденных предупреждений MISRA добавилась и в метрики, о которых пойдёт речь далее.
4. Новые метрики
В меню Projects -> Your Project -> Measures доступны различные метрики кода, среди которых теперь есть различная информация от PVS-Studio:
По каждой из метрик можно строить графики и следить за динамикой появления тех или иных групп предупреждений анализатора.
4. Multiline-переходы
Некоторые диагностики анализатора выдают предупреждения на несколько строчек файла. Иногда они находятся очень далеко друг от друга. В новой версии мы добавили multiline-переходы:
SonarQube также поддерживает переходы между разными файлами. Позже мы добавим и такие переходы для диагностик, в которых есть межмодульный анализ.
6. Документация
Документация претерпела большие изменения. PVS-Studio является кросс-платформенным и мультиязыковым продуктом, поэтому все переработки были направлены на написание более общих и понятных инструкций по работе на той или иной системе.
До недавнего времени в своих статьях мы позиционировали PVS-Studio как инструмент для выявления ошибок в коде. При этом мы почти не рассматривали PVS-Studio в контексте безопасности. В этом году мы исправили эту ситуацию и взглянули на инструмент с точки зрения тестирования защищённости приложений и DevSecOps практик.
PVS-Studio является средством статического тестирования защищённости приложений (Static Application Security Testing, SAST). Другими словами, анализатор PVS-Studio выявляет не только опечатки, мёртвый код и другие ошибки, но и потенциальные уязвимости.
Для удобства специалистов, которые будут использовать PVS-Studio как SAST инструмент, анализатор отображает свои предупреждения на Common Weakness Enumeration, SEI CERT Coding Standards. Таблицы соответствий диагностик PVS-Studio различным стандартам:
Более подробно данная тема раскрыта в статье "PVS-Studio как SAST решение".
Также предлагаем познакомиться с публикациями:
В канун празднования нового 2019 года команда PVS-Studio решила сделать приятный подарок всем контрибьюторам open-source проектов, хостящихся на GitHub или Bitbucket. Им предоставляется возможность бесплатного использования статического анализатора PVS-Studio для развития открытых проектов.
Подробности: "Бесплатный PVS-Studio для тех, кто развивает открытые проекты".
В 2018 году PVS-Studio научился работать под управлением macOS. К этому событию наша команда приурочила проверку XNU Kernel: "Релиз PVS-Studio для macOS: 64 weaknesses в Apple XNU Kernel".
XNU — это ядро компьютерных операционных систем, разрабатываемое компанией Apple и используемое в ОС семейства OS X (macOS, iOS, tvOS, watchOS).
Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Andrey Karpov, Svyatoslav Razmyslov. PVS-Studio 7.00.
PVS-Studio — это инструмент для выявления ошибок и потенциальных уязвимостей в исходном коде программ, написанных на языках С, C++, C# и Java. Работает в среде Windows, Linux и macOS.
Возможности анализатора хорошо демонстрирует обширная коллекция ошибок в коде, найденных нами в процессе проверки различных отрытых проектов.
Начнём мы с изменения, из-за которого, собственно, и было решено сменить номер версии с 6.x на 7.x. Это поддержка в анализаторе языка Java, к которому мы давно готовились.
Java
Самое важное в Java анализаторе то, что он появился :). Приглашаем Java разработчиков скачать инструмент и проверить проекты, над которыми они работают.
Мы сделали доступными для пользователей самые популярные способы интеграции анализатора в сборочную систему:
- Плагин для Maven.
- Плагин для Gradle.
- Плагин для IntelliJ IDEA.
В случае использования самописных сборочных систем имеется возможность запускать анализатор напрямую, перечислив исходники и classpath.
Подробную информацию о всех способах запуска анализатора вы можете найти на странице документации "Как запустить PVS-Studio Java".
Мы не могли обойти стороной платформу контроля качества кода SonarQube, так популярную среди Java разработчиков, поэтому добавили поддержку языка Java в наш плагин для SonarQube.
C, C++
В 2018 году наша команда активно поработала над развитием C++ анализатора. Появилось много новых диагностик, а также усовершенствованы алгоритмы, позволяющие собирать и обрабатывать информацию, извлекаемую из синтаксического дерева.
CWE, CERT
Сообщения C++ анализатора (как и C# анализатора) были классифицированы согласно Common Weakness Enumeration (CWE). CWE — это система классификации потенциальных и подтверждённых уязвимостей. Она поддерживается сообществом с целью выявления проблем программного обеспечения и создания автоматизированных инструментов, которые могут использоваться для выявления и устранения этих проблем.
Дополнительно сообщения были классифицированы согласно CERT C Coding Standard и CERT C++ Coding Standard. SEI CERT Coding Standards — это набор стандартов написания программного обеспечения (ПО) на языках C, C++, Java и Perl, разрабатываемых координационным центром CERT (CERT Coordination Center, CERT/CC) для повышения надёжности и безопасности ПО.
Классификация C и C++ диагностик согласно этим предупреждениям позволяет использовать PVS-Studio как SAST решение.
MISRA
В 2018 году статический анализатор кода PVS-Studio начал классифицировать свои предупреждения согласно стандартам MISRA C и MISRA C++. Благодаря поддержке этих стандартов анализатор стало возможным эффективно использовать для улучшения безопасности, переносимости и надежности программ для встраиваемых систем.
Подробнее: "PVS-Studio: поддержка стандартов кодирования MISRA C и MISRA C++".
Поддержка MISRA стала актуальной в связи с развитием в анализаторе поддержки различных embedded систем, о чём будет рассказано в следующем разделе статьи.
Embedded Development
В 2018 году в анализаторе PVS-Studio были поддержаны:
- Windows. IAR Embedded Workbench, C/C++ Compiler for ARM C, C++
- Windows/Linux. Keil µVision, DS-MDK, ARM Compiler 5/6 C, C++
- Windows/Linux. Texas Instruments Code Composer Studio, ARM Code Generation Tools C, C++
- Windows/Linux/macOS. GNU Arm Embedded Toolchain, Arm Embedded GCC compiler, C, C++
Две заметки на тему поддержки embedded систем:
- Статический анализатор кода PVS-Studio 6.22 адаптирован для ARM-компиляторов (Keil, IAR).
- В PVS-Studio появилась поддержка GNU Arm Embedded Toolchain.
Расширение пользовательских аннотаций
Иногда в проектах используются собственные реализации разных системных функций, например, memcpy, malloc и т.п. Анализатор очень хорошо умеет искать ошибки с использованием стандартных функций, но в пользовательском коде было невозможно применять такие алгоритмы до недавнего времени. Теперь с помощью аннотации V_FUNC_ALIAS вы можете ставить имена своих функций в соответствие системным.
Формат комментария:
//V_FUNC_ALIAS, implementation:sysf, function:f, namespace:ns, class:c
- Ключ implementation — задает имя стандартной функции, для которой определяется псевдоним.
- Ключ function — задает имя псевдонима. Сигнатура функции, имя которой указано в этом ключе, должна совпадать с сигнатурой функции, указанной в ключе implementation.
- Ключ class — имя класса. Может отсутствовать.
- Ключ namespace — имя пространства имен. Может отсутствовать.
Рассмотрим пример:
//V_FUNC_ALIAS, implementation:memcpy, function:MyMemCpy
Теперь анализатор будет обрабатывать вызовы функции MyMemCpy так же, как вызовы memcpy. Например, на такой код будет выдаваться предупреждение V512:
int buf[] = { 1, 2, 3, 4 };
int out[2];
MyMemCpy (out, buf, 4 * sizeof(int)); // Warning!
C#
В этом году существенных изменений C# анализатора не было. Были отдельные улучшения диагностик и правки недочётов. Сообщения C# анализатора, как и C++ анализатора были классифицированы согласно Common Weakness Enumeration (CWE). Соответствие C# диагностик с идентификаторами CWE приведены здесь (см. диагностики с номерами 3xxx).
Мы планируем вернуться к более активному развитию C# анализатора в 2019 году. Планируется разработка новых диагностик и усовершенствование механизма анализа потока данных (Data-Flow Analysis).
Конвертеры отчётов
Утилиты PlogConverter.exe и plog-converter входят в дистрибутивы PVS-Studio для Windows и Linux/macOS соответственно. Также исходных код этих утилит доступен на GitHub.
С появлением PVS-Studio для Java мы переработали подсветку кода для C, C++, C# и добавили Java в формате FullHtml (для веб-браузера).
Также для отчёта в этом формате был добавлен столбец MISRA:
Как и CWE ID, столбец MISRA является опциональным и включается исследователями безопасности кода при изучении результатов анализа.
Плагины SonarQube
1. Полное обновление
Мы переписали наши плагины с использованием нового API. Это позволило добавить новый функционал и обеспечить совместимость с SonarQube 7.x. Минимальной поддерживаемый версией теперь является SonarQube 6.7 LTS.
2. PVS-Studio для Java
В новую версию плагинов добавлена поддержка диагностик для языка Java. Теперь вы можете добавить PVS-Studio к другим инструментам контроля качества своего Java-проекта.
3. Стандарт MISRA
Недавно мы объявляли о поддержке стандартов MISRA C и MISRA C++. В новых плагинах тоже появилась их поддержка. Например, был добавлен параметр (в дополнение к CWE):
sonar.pvs-studio.misra=active
который включает добавление идентификатора MISRA к предупреждениям анализатора:
Независимо от этого параметра будет доступен поиск по тегам misra и pvs-studio#misra в результатах анализа. Информация о количестве найденных предупреждений MISRA добавилась и в метрики, о которых пойдёт речь далее.
4. Новые метрики
В меню Projects -> Your Project -> Measures доступны различные метрики кода, среди которых теперь есть различная информация от PVS-Studio:
По каждой из метрик можно строить графики и следить за динамикой появления тех или иных групп предупреждений анализатора.
4. Multiline-переходы
Некоторые диагностики анализатора выдают предупреждения на несколько строчек файла. Иногда они находятся очень далеко друг от друга. В новой версии мы добавили multiline-переходы:
SonarQube также поддерживает переходы между разными файлами. Позже мы добавим и такие переходы для диагностик, в которых есть межмодульный анализ.
6. Документация
Документация претерпела большие изменения. PVS-Studio является кросс-платформенным и мультиязыковым продуктом, поэтому все переработки были направлены на написание более общих и понятных инструкций по работе на той или иной системе.
SAST
До недавнего времени в своих статьях мы позиционировали PVS-Studio как инструмент для выявления ошибок в коде. При этом мы почти не рассматривали PVS-Studio в контексте безопасности. В этом году мы исправили эту ситуацию и взглянули на инструмент с точки зрения тестирования защищённости приложений и DevSecOps практик.
PVS-Studio является средством статического тестирования защищённости приложений (Static Application Security Testing, SAST). Другими словами, анализатор PVS-Studio выявляет не только опечатки, мёртвый код и другие ошибки, но и потенциальные уязвимости.
Для удобства специалистов, которые будут использовать PVS-Studio как SAST инструмент, анализатор отображает свои предупреждения на Common Weakness Enumeration, SEI CERT Coding Standards. Таблицы соответствий диагностик PVS-Studio различным стандартам:
Более подробно данная тема раскрыта в статье "PVS-Studio как SAST решение".
Также предлагаем познакомиться с публикациями:
- Как PVS-Studio может помочь в поиске уязвимостей?
- Стреляем в ногу, обрабатывая входные данные.
- Предоставляем анализатор PVS-Studio экспертам безопасности.
PVS-Studio Free
В канун празднования нового 2019 года команда PVS-Studio решила сделать приятный подарок всем контрибьюторам open-source проектов, хостящихся на GitHub или Bitbucket. Им предоставляется возможность бесплатного использования статического анализатора PVS-Studio для развития открытых проектов.
Подробности: "Бесплатный PVS-Studio для тех, кто развивает открытые проекты".
macOS
В 2018 году PVS-Studio научился работать под управлением macOS. К этому событию наша команда приурочила проверку XNU Kernel: "Релиз PVS-Studio для macOS: 64 weaknesses в Apple XNU Kernel".
XNU — это ядро компьютерных операционных систем, разрабатываемое компанией Apple и используемое в ОС семейства OS X (macOS, iOS, tvOS, watchOS).
Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Andrey Karpov, Svyatoslav Razmyslov. PVS-Studio 7.00.
staticmain
Эта штука по прежнему нацелена только на мегакорпорации и стоит 250 000+ рублей в год на одного разработчика?
Andrey2008 Автор
PVS-Studio лицензируется на команду разработчиков. Нет цены «для одного разработчика» :). Как вариант, для индивидуальных проектов можно воспользоваться одним из бесплатных вариантов лицензирования (вариант 1, вариант 2).
staticmain
Оба варианта не нацелены на компании среднего размера. Либо открытый код (нарушая при этом правила открытого лицензирования, при которых лицензионный комментарий должен идти первым), либо индивидуальный разработчик.
Сейчас ваш продукт (даже если считать не «для одного разработчика») стоит как новый сотрудник, который может с 8 до 17 непрерывно анализировать код и еще и попутно выяснять у разработчиков что они имели в виду конкретно в этом месте.
MonkAlex
Таки как раз в человека, который этим будет заниматься, я верю слабо.
Потому что тупые вещи пропускаются на ура.
Andrey2008 Автор
PVS-Studio ROI: как не терять миллионы.
staticmain
Не поленился, залез в статью, поиграл с калькулятором. У нас в низкоуровневой команде 3 человека (сама компания сверху пишет на скала большим кол-вом сотрудников). Верхний край средней зп программиста в наших краях 50 000
3 * (50 000 / 168) * 2.66 * 104 = 247 000
Однако по вашим таблицам можно реверснуть цену, при которой зона зеленеет (цену, которую вы предлагаете таким компаниям):
MAX(RED) = 877 500
MIN(GREEN) = 1 037 400
Т.е. реальная цена, предлагаемая для компаний (уже) колеблется где-то между 880 000 р и 1 000 000 р.
В таких условиях PVS будет окупаться 3.5 года. И мы такие не одни. Все компании, которые работают вне столицы делают это *умышленно*, чтобы минимизировать расходы (разница зарплат 5-10 раз).
Andrey2008 Автор
Да, PVS-Studio не ориентирован на маленькие низкооплачиваемые команды и арифметика не сходится. В Германии, например, средний заработок программистов: 56 – 93 тыс. евро в год и арифметика сходится. Всё OK :)
staticmain
А зачем тогда вы рекламируете продукт в России? Езжайте в Германию, там зарплаты выше, больше «покупателей».
Andrey2008 Автор
В России есть много взрослых компаний с взрослыми зарплатами. И количество российских клиентов уверенно растёт.
duodvk
Давайте вообще всех толковых людей из страны выгоним, что уж… мало ведь их уже уехало и ещё видимо уедет.
dmitry_dvm
Интересная логика. Либо руководство такой компании просто обирает сотрудников в свой карман, получая рыночную прибыль. Либо демпингует. И то и другое плохо. Вопрос — нафига работать в таких шарагах, где тебе платят в разы меньше, чем стоят твои знания и мотивируют тем, что у тебя дела расходы на жилье меньше?
semmaxim
Потому что переехать в большой город по тем или иным причинам невозможно?
EvgeniyRyzhkov
Согласитесь правда, что PVS-Studio здесь не виноват? :-)
VolodjaT
это в какой глуши такие низкие ЗП.
Он в Украине типичная зп синьйора в переводе на рубли будет 180-200 тыс. и это далеко не потолок
Maccimo
Рабочий день программиста с 8 утра?
Зачем работать в таких неадекватных конторах?
Cerberuser
С 9 до 18 — принципиально лучше?
Maccimo
Если говорить о принципиально лучших вариантах, то это будет что-то навроде «восьмичасовой рабочий день, начало рабочего дня в диапазоне 8-12, по согласованию с непосредственным руководителем».
Papashkin
Я работаю с 7 до 16, и меня это вполне устраивает. Да и руководство, PM и остальной персонал, находящийся в Челябинске, тоже (в то время, как я в Питере).
Есть много положительных моментов работать в таком графике. Точнее это мои субъективные положительные моменты. Если будет интересно — я с вами ими поделюсь.
PS речь в этой статье не об этом. Не будем «офф-топить».
semmaxim
Серьёзно? Рабочий день с 8 утра — и ты в 17 уже свободен. Можно провести время с семьёй, например. Если бы я жил поближе к работе, то вообще бы с 7 утра работал.
oracle_and_delphi
Не все жаворонки. Среди программеров не мало сов.
Am0ralist
Когда мне рассказывают сказки, что это просто привычка — я могу лишь криво улыбаться. В школе, в институте, на работу я постоянно вставал в 6-7 часов и к 8-9 всё равно приходил никакой. А лучшая работоспособность всегда была вечером. Итого, за 20 лет насилия над организмом — нифига не выработалась привычка быть жаворонком.
Aquahawk
Крутой прогресс. Хотя я и не пишу ни на одном из поддерживаемых языков, но с удовольствием читаю многие ваши статьи, в меру своего понимания C++. Как насчёт также публиковать англоязычные статьи на хабре, раз они у вас уже есть?
Andrey2008 Автор
Уже начали: habr.com/en/company/pvs-studio/blog/436332
Misaka10032
Так уже же. Я выставил в настройках хабра английский язык и у меня появляется статья на английском.
P.S. Судя по комментарию выше — это отдельная статья, а не потому, что я язык поставил английский.
eao197
Молодцы, поздравляю! Надеюсь, это откроет перед вами огромный рынок и сделает вашу компанию еще успешнее.
Andrey2008 Автор
Спасибо!
valery1707
А не планировали для OpenSource проектов сделать интеграцию с GitHub для автоматического анализа и добавления результатов анализа в PR?
Ну или что-то типа такого ?
EvgeniyRyzhkov
Со временем сделаем.
alan008
Либо я не понял фразу, либо какая-то гелогичность. Первое предложение звучит так, как будто в проекте может быть функция, называющаяся так же как системная, но делающая что-то другое (или делающая то же, но имеющая отличающуюся семантику). А оказывается наоборот — для системной функуии просто ввели другое название.
Andrey2008 Автор
В проектах есть самописные функции, которые ведут себя с точки зрения использования, точно также, как memcpy, malloc, но реализован особенным образом.
olekl
А не планируете сделать как-нибудь так, чтоб отчеты можно было сравнивать? Чтоб было можно быстро найти новую появившуюся ошибку, имея два отчета?
Andrey2008 Автор
Пожалуйста, расскажите про сценарий использования. Для чего это нужно?
И почему, не подходит массовое подавление сообщений анализатора (отключение выдачи предупреждений на существующий код). Которое как раз позволяет видеть только новые срабатывания.
pdima
например в CI системе найти список новых ошибок в комите и запостить в code review
Paull
На самом деле, у нас есть внутренние инструменты для «сравнения отчётов», мы их используем, например, в регрессионных тестах. Тем не менее, для конечного пользователя они, скорее всего, окажутся неудобными. Ведь при сравнении результатов работы анализатора, между получением которых прошло какое-то время, нужно учитывать, что проверяемый код мог правиться, в проверяемые файлы добавлялся код, из-за которого старый проверяемый код мог «съехать» и т.п. Поэтому, сравнение двух отчётов «в лоб» обычно неэффективно.
Существует ряд способов учитывать такие изменения, и показывать именно новые срабатывания анализатора. Например, можно использовать предоставляемые PVS-Studio различные (в зависимости от сборочной системы и платформы) способы инкрементального анализа, анализирую, в т.ч. и на коммитах, только модифицированные файлы. Можно видеть новые ошибки, которых не было в предыдущих отчётах, использую механизм подавления срабатываний (мой коллега в комментарии выше давал ссылку на его описание). Наконец, quality-control системы наподобие SonarQube (для которого у нас есть плагин), обычно предоставляют схожую функциональность. В конечном счёте, всё зависит от конкретного сценария использования анализатора.
Мы также предоставляем утилиты для рассылки писем с результатами анализа, для преобразования результатов в различные форматы и т.п., так что вставить результат в code review отчёт также не должно быть трудно.
EvgeniyRyzhkov
Как правило нет цели «сравнивать отчеты». Есть цель видеть новые ошибки. Этот механизм существует. Чтобы дать конкретные ссылки опишите свой сценарий использования.
olekl
И про стркопи, раз уж всплыло — а если собственная реализация, к примеру, использует в качестве третьего параметра количество символов, а не количество байт, то как избавиться от предупреждения? Поможет аннотация?
Andrey2008 Автор
Если собственная реализация использует в качестве третьего параметра количество элементов, а не количество байт, то это не memcpy, а совсем другая функция. И её размечать её как memcpy нельзя, так как это приведёт к ложным срабатываниям.
Для описанного случая, сейчас у нас ничего нет. Никто и не спрашивал. Становитесь клиентом, сделаем :).
Nick_Shl
Скачал, начал устанавливать и "C:\Program Files (x86)\PVS-Studio"… WTF???
Утилита которая началась давным давно с проверок переносимого года с 32-х на 64 бита сама до сих пор является 32-хбитной…
Paull
Ну во первых, наш продукт нельзя назвать чисто «32-битным» или «64-битным» — если говорить конкретно про Windows дистрибутив, то в него входит много разных утилит, некоторые из них (были) в том-числе 32-битными. Постепенно 32-битных утилит становится меньше, например наш C++ анализатор присутствовал в дистрибутиве как в виде 32-битной, так и 64-битной версий (сейчас от 32-битной версии мы отказались).
Во вторых, в папку Program Files (x86) он ставится, т.к. сам наш Windows инсталятор является 32-битным — можно сказать, что так исторически сложилось. В более старых версиях PVS-Studio, когда мы поддерживали старые IDE, такие как, например, Visual Studio 2008, возможно (я точно не ручаюсь, т.к. уже не помню), установка плагинов к таким IDE накладывала ограничения на создание чисто-64битного установщика. Также, PVS-Studio можно было установить и на 32-битную версию Windows (как я писал выше, сейчас это уже не актуально).
Так что, резюмируя, сам инсталятор, скорее всего, уже можно сделать 64-битным (возможно, мы это сделаем в будущем), однако на данный момент 32-битность инсталятора не создаёт для нас или наших пользователей каких-либо проблем, поэтому мы не видим это критичной задачей.
EvgeniyRyzhkov
Хочу акцентировать еще раз внимание присутсвующих. Сам анализатор 64-битный и использует это на полную :-).
Nick_Shl
Да какая разница какой он, если свою работу выполняет? Комментарий был из разряда "занимательные факты".
ianzag
Хорошие у вас художники :)
HDDimon
Есть ли сравнение с уже существующими анализаторами из java мира? На сколько ваш лучше/хуже?
Andrey2008 Автор
Лучше/хуже это очень непростой вопрос. Но мы точно хорошо дополним существующие инструменты (и найдём в них ошибки :): habr.com/ru/company/pvs-studio/blog/436434
Andrey2008 Автор
А вот и первая беглая проверка открытых проектов (IntelliJ IDEA, SpotBugs, SonarQube): PVS-Studio для Java.