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

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

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

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

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

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

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


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

>
>
>
Уточнения о проверке проектов CPython и…

Уточнения о проверке проектов CPython и Ruby

11 Авг 2016

В одной из недавних статей мы сравнивали классические реализации языков Python и Ruby по плотности ошибок. При этом ошибку допустили в самой статье: в список ошибок CPython попали ошибки из сторонних библиотек. Поэтому перепроверим проекты и посчитаем заново всю статистику.

0418_RubyCPythonDisclaimer_ru/image1.png

В предыдущей серии

0418_RubyCPythonDisclaimer_ru/image2.png

Часть ошибок (фрагменты N2, N4, N5, N6), найденных в предыдущей статье относятся к OpenSSL. Стоит отметить, что эти ошибки так или иначе оказывают влияние и на проекты, использующие эту библиотеку, включая CPython. Однако причислять их к ошибкам самого проекта будет неправильно. Естественно в PVS-Studio есть функционал для игнорирования такого рода срабатываний: можно просто добавить каталог с вашими externals или 3rd_party в список игнорируемых и больше при проверке своего проекта срабатываний оттуда вы не увидите.

О новой проверке

На этот раз для проверки CPython и Ruby воспользуемся разрабатываемой сейчас Linux версией. Работает она очень просто: просто запускаем сборку из PVS-Studio и ждём её окончания. PVS-Studio отслеживает все запуски компилятора, поэтому не зависит от способа сборки проекта. На выходе получаем лог.

Плотность ошибок

В этот раз каких-то новых ошибок, достаточно интересных для описания в статье я не нашёл. Есть ошибки, связанные с некорректной обработкой аварийных ситуаций. Они часто встречаются даже в хорошо протестированных проектах, потому что на такие ситуации тесты пишут реже. Вот такой пример можно найти в CPython:

int
_PyState_AddModule(PyObject* module, struct PyModuleDef* def)
{
  PyInterpreterState *state;
  if (def->m_slots) {
    ....
    return -1;
  }
  state = GET_INTERP_STATE();
  if (!def)
    return -1;
  ....
}

Предупреждение PVS-Studio: V595 The 'def' pointer was utilized before it was verified against nullptr. Check lines: 286, 292. pystate.c 286

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

Что касается новой статистике, то вот она:

0418_RubyCPythonDisclaimer_ru/image3.png

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

0418_RubyCPythonDisclaimer_ru/image4.png

Заключение

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

Предлагаю всем желающим попробовать PVS-Studio и записаться на бета-версию для Linux.

Популярные статьи по теме
Бесплатный PVS-Studio для тех, кто развивает открытые проекты

Дата: 22 Дек 2018

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

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

Дата: 31 Май 2014

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

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

Дата: 21 Ноя 2018

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

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

Дата: 20 Мар 2017

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

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

Дата: 17 Янв 2019

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

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

Дата: 27 Июн 2017

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

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

Дата: 16 Окт 2017

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

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

Дата: 22 Окт 2018

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

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

Дата: 14 Апр 2016

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

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

Дата: 30 Янв 2019

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

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

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

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

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