PVS-Studio
1.53K subscribers
1.25K photos
45 videos
2 files
1.29K links
Тот самый анализатор с Хабра:
https://pvs-studio.ru/ru/
Download Telegram
Мы просто смотрим на экран. Один варнинг. Один, но он красный. Он "орёт". Не получается сразу понять, в чём дело. Условный рефлекс срабатывает, и уже открывается Git. Сейчас пофиксим, а потом подумаем. Даже если предупреждение касается чего-то безобидного, один красный прямоугольник на фоне зелёных строчек может парализовать внимание.

Давайте поговорим про синдром тревожного анализатора и разработчика-заложника. Переходите по ссылке 🔗

#статья
Please open Telegram to view this post
VIEW IN TELEGRAM
4
Please open Telegram to view this post
VIEW IN TELEGRAM
422
Привет всем, кто принял участие в первой встрече клуба C++ программистов. А кто не принял, приглашаю следить за анонсами будущих мероприятий :)

Небольшой постскриптум по итогам докладов и общения.

Первое. Обсуждалась тема доверенных компиляторов, и меня просили подсказать номер стандарта. Вот он: ГОСТ Р 71206-2024 «Защита информации. Разработка безопасного программного обеспечения. Безопасный компилятор языков С/С++. Общие требования». Примеры компиляторов: SAFEC (на основе GCC) и Safelang (на основе Clang). Подробнее.

Второе. Я говорил, что в презентацию вкралась опечатка — там, где я рассматривал ошибку в функции сравнения. Мне не давал этот момент покоя, т.к. я не понимал, почему там такой код, хотя я вроде его не правил имена переменных и не перенабирал что-то. В общем, сейчас посмотрел и разобрался. Я допустил сopy-paste ошибку :)

Я запутался в двух похожих фрагментах с ошибками и скрестил их в презентации :)

Итак, на самом деле в нашей коллекции ошибок выписаны два разных случая:

Проект IronPython. Предупреждение PVS-Studio: V3021 There are two 'if' statements with identical conditional expressions. The first 'if' statement contains method return. This means that the second 'if' statement is senseless. SourceLocation.cs 156
public static int Compare(SourceLocation left,
SourceLocation right) {
if (left < right) return -1;
if (right > left) return 1;
return 0;
}

Здесь как раз местами поменяны операнды и изменён оператор сравнения на противоположный. В результате два условия на самом деле оказались идентичными.

Рассмотренный пример смешался с этим:

Проект Samba. Предупреждение PVS-Studio: V501 There are identical sub-expressions to the left and to the right of the '>' operator: i2->pid > i2->pid brlock.c 1901
static int compare_procids(const void *p1, const void *p2)
{
const struct server_id *i1 = (struct server_id *)p1;
const struct server_id *i2 = (struct server_id *)p2;

if (i1->pid < i2->pid) return -1;
if (i2->pid > i2->pid) return 1;
return 0;
}

Код похожий, но здесь другой тип ошибки. Переменная сравнивается сама с собой: i2->pid > i2->pid.

Никто не защищён от опечаток и сopy-paste ошибок. Даже я :) Используйте статический анализатор кода PVS-Studio как дополнительную пару глаз для обзоров кода :)

Третье. Условия получения бесплатных вариантов лицензий PVS-Studio:
- Бесплатное использование PVS-Studio студентами и преподавателями.
- Бесплатная лицензия PVS-Studio для Open Source.
621
Друзья, приглашаем вас на офлайн-митап "Работа над ошибками"!

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

В программе:
- Андрей Карпов: Типовые паттерны опечаток и как их избежать.
- Марк Шевченко: Верификация программ и доказательство корректности .NET-кода.
- Роман Гапонов: Все о Code Review: лучшие практики и анти-паттерны.

📅 16 июля 2025 (среда)
19:30
📍 Москва, Большая Новодмитровская ул., 36 стр. 6, Freedombar (Территория Дизайн-Завода "Флакон")

Ссылка на регистрацию 🔗

#мероприятие #PVS_Studio
Please open Telegram to view this post
VIEW IN TELEGRAM
72
Запускаем цикл "Вокруг РБПО за 25 вебинаров: ГОСТ Р 56939-2024"!

Друзья, напоминаем, что совместно с Учебным Центром "МАСКОМ" мы организовываем цикл вебинаров, посвященных разбору 25 процессов РБПО.

И сегодня в 16:00 состоится первый вебинар ⚡️

Тема: "Планирование процессов разработки безопасного программного обеспечения"

Регистрация на этот и последующие вебинары доступна по ссылке 🔗

Присоединяйтесь к путешествию вокруг РБПО вместе с нами!

#вебинар
Please open Telegram to view this post
VIEW IN TELEGRAM
321
Друзья, привет! Продолжаем знакомить вас с командами PVS-Studio.

Итак, встречайте! Отдел translations

Вот несколько фактов о девочках:

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

Поддержите отдел реакциями ❤️

#PVS_team
Please open Telegram to view this post
VIEW IN TELEGRAM
395
Как бороться с типовыми паттернами опечаток? Расскажет Андрей Карпов на митапе "Работа над ошибками"!

В программировании есть полезные паттерны, а есть и антипаттерны. Опечаткам, как ни странно, тоже свойственны некоторые повторяемые шаблоны. Как их замечать и, что еще важнее, как от них защититься?

На нашей встрече Андрей Карпов подробно разберет эту тему.

🗓 16 июля (среда), 19:30
📍 Москва, Freedombar на Дизайн-Заводе "Флакон" (Большая Новодмитровская ул., 36 стр. 6)

Ссылка на регистрацию 🔗

Это один из трех докладов на митапе "Работа над ошибками". Следите за анонсами других спикеров!
Please open Telegram to view this post
VIEW IN TELEGRAM
53
В эпоху монолитных UI-фреймворков существовала легенда о земле, где один код правил всеми платформами. Сегодня мы ступаем на берега этого забытого материка зовущегося Avalonia.

Переходите по ссылке 🔗

#статья #csharp
Please open Telegram to view this post
VIEW IN TELEGRAM
4
Можно ли доказывать правильность обычного бизнес-кода в .NET? Узнаем на митапе "Работа над ошибками"!

Марк Шевченко (Московский клуб программистов, Wildberries) расскажет об языке Coq и покажет, как доказать корректность бизнес-кода для .NET-проекта, приближаясь к созданию гарантированно правильного ПО.

🗓 16 июля (среда), 19:30
📍 Москва, Freedombar на Дизайн-Заводе "Флакон" (Большая Новодмитровская ул., 36 стр. 6)

Ссылка на регистрацию 🔗

*количество участников ограничено

#мероприятия #PVS_Studio
Please open Telegram to view this post
VIEW IN TELEGRAM
42
Классы — это, скорее всего, первое, что добавил Страуструп в далёких 1980-х, ознаменовав рождение С++. Если представить, что мы археологи древних плюсов, то косвенным подтверждением этого факта для нас будет this, который по-прежнему в С++ является указателем, а значит, скорее всего, он был добавлен до "изобретения" ссылок!

Читать далее тут 👈🏻

#статья #cpp
52
Цикл "Вокруг РБПО за 25 вебинаров: ГОСТ Р 56939-2024"!

Друзья, напоминаем, что совместно с Учебным Центром "МАСКОМ" мы организовываем цикл вебинаров, посвященных разбору 25 процессов РБПО.

Сегодня в 16:00 состоится второй вебинар ⚡️

Тема: "Обучение сотрудников"

Регистрация на этот и последующие вебинары доступна по ссылке 🔗

Присоединяйтесь к путешествию вокруг РБПО вместе с нами!
Please open Telegram to view this post
VIEW IN TELEGRAM
4
Приглашаю познакомиться с публикацией Дмитрия Пономарева:
Итоги этапа «Домашнее задание» испытаний статических анализаторов под патронажем ФСТЭК России
В апреле-мае 2025 года состоялся первый этап испытаний открытых и коммерческих статических анализаторов исходных кодов компилируемых и динамических языков программирования под патронажем ФСТЭК России. Полный отчёт об итогах этапа был согласован участниками и жюри и передан организаторам испытаний.

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

В процессе выполнения домашнего задания наша команда для собственного удобства написала небольшую утилиту генерации html-таблицы с раскраской. И соответственно стояла задача избавиться от красных ячеек :) Ставилась задача достичь показателей, описанных в ГОСТ Р 71207-2024 в п. 8.4:
Требования по качеству выполняемого статического анализа предъявляются для критических типов ошибок, приведенных в 6.3-6.5, и проверяются на квалификационном наборе тестов, построенных в соответствии с требованиями раздела 10.
Для данных типов ошибок на наборе тестов, отвечающих требованиям 10.4, статический анализатор должен обеспечивать достижение следующих показателей:
а) долю ошибок первого рода (ложноположительных срабатываний) (FP) — не более 50%;
б) долю ошибок второго рода (ложноотрицательных срабатываний, т. е. пропусков заведомо известных ошибок) (FN) — не более 50%.
Домашнее задание подразумевает проверку соответствия на квалификационных тестах небольшого размера (см. п. 10.2.а).


Достигнуты все необходимые показатели, кроме процента False Positives для тестов на выявление разыменования нулевых указателей. Представленные здесь таблицы сгенерированы 29.05.2025.

В среднем PVS-Studio показывает хорошие показатели (FP < 50%, FN < 50%) для всех поддерживаемых языков C, C++, C#, Java для основного и дополнительного наборов тестов домашнего задания. В дополнительный набор вошли тесты на ошибки, которые ГОСТ Р 71207-2024 не описывает как критические, но выявление которых по мнению жюри также очень важно. Про расширение списка критических ошибок, их фильтрацию и что означают идентификаторы типов ошибок (SEC-STR-FORMAT, SEC-BUF-OVERFLOW и т.д.) можно прочитать в статье "Фильтрация предупреждений PVS-Studio, выявляющих критические ошибки (согласно классификации ГОСТ Р 71207-2024)".

Позже сделаю более подробный пост на habr.