56.7
Karma
209.8
Rating
Sergey Vasiliev @foto_shooter

Software developer

Проверка исходного кода библиотек .NET Core статическим анализатором PVS-Studio

+2
Кстати, разработчики начали вносить исправления. Их можно найти в открытых и закрытых PR'ах.

Было бы здорово, конечно, если бы они также были отмечены в Issue — так со стороны было бы удобнее следить за прогрессом по исправлению.

Проверка исходного кода библиотек .NET Core статическим анализатором PVS-Studio

Проверка исходного кода библиотек .NET Core статическим анализатором PVS-Studio

0
Спасибо. :)
Очень нравится эта картинка, плюсанул комментарий.

Не скрою, что когда находил какую-то проблему, до которой можно было добраться в разумных пределах, сразу разгорался интерес попробовать повторить её. В частности — закинуть куда-нибудь 'null'. Почему бы и нет?)

Проверка исходного кода библиотек .NET Core статическим анализатором PVS-Studio

+2
Алексей, добрый день.

Спасибо за развёрнутую критику. Наверное, из неё при желании можно составить контр-статью. :)

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

По поводу претензии про группировку предупреждений в статье — также спасибо за критику. Часто, когда пишу статьи, я группирую их по номерам предупреждений. В данном случае я решил сделать иначе, и выписывать предупреждения, показавшимися интересными, по проектам. Сделал для того, чтобы не утомлять читателя перечнями предупреждений одной категории, а разбавлять их.

Проверка исходного кода библиотек .NET Core статическим анализатором PVS-Studio

История о том, как PVS-Studio нашёл ошибку в библиотеке, используемой в… PVS-Studio

-4
Issue не заводил. Уже с десяток релизов прошло, актуальна ли проблема на последней доступной версии — вопрос. Не проверял.

История о том, как PVS-Studio нашёл ошибку в библиотеке, используемой в… PVS-Studio

+1
Теоретически, думаю, такая ситуация возможна.

Сходу могу придумать такой синтетический пример.

Возьмём, например, диагностику V3004 (then и else ветви оператора if имеют идентичные тела). Естественно, что диагностика содержит различные проверки. В частности, нам нет смысла анализировать код, если оператор if не имеет else-ветви. Допустим, есть проверка подобного вида.
if (ifStatement.Else == null)
  return;
.... // Дальнейшая логика по определению ошибки

Соответственно, ошибка, выявляемая V3004, в данном случае будет выглядеть как:
if (ifStatement.Else == null)
  return; // <=
else
  return; // <=
.... // Дальнейшая логика по определению ошибки

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

Пример, конечно, синтетический, но на вопрос ответить должен. :)

История о том, как PVS-Studio нашёл ошибку в библиотеке, используемой в… PVS-Studio

История о том, как PVS-Studio нашёл ошибку в библиотеке, используемой в… PVS-Studio

+3
На этот вопрос ответа у меня нет. :)

P.S. Про сакральные смыслы — это ещё пустяки. В библиотеках .NET Core встречались куда более интересные места. Вот там действительно сидишь и думаешь, а в чём здесь скрытый смысл… Впрочем, это тема другой статьи, не будем забегать вперёд.

WinForms: ошибки, Холмс

+1
Станислав, всеми неравнодушными силами можем попробовать оторваться плюсами на Вашем комментарии выше :)

WinForms: ошибки, Холмс

+4
Не обязательно.

Если left и right имеют ненулевые значения, но их фактический тип несовместим с типом OrderedCodeStatementCollection (как следствие — результат приведения через as будет null), получится ситуация, когда и left, и right != null, при этом cscLeft / cscRight равны null. В такой ситуации проверки из кода не помогут.

PVS-Studio заглянул в движок Red Dead Redemption — Bullet

+3
Вы имеете в виду проверку самого движка или игр, использующих его?
В любом случае, у меня есть ответы на оба вопроса. :)
Сам движок проверяли, более того — работали над исправлением ошибок в нём.

Соответствующие статьи:

Если говорить про проверку проектов, использующих UE4 — такая возможность тоже есть, люди пользуются. Подробнее про способ проверки можно в документации прочитать или спросить, если вопросы останутся.

Поддержка Visual Studio 2019 в PVS-Studio

+1
Рад, если статья оказалась интересной. :)

Да, с плагином мы и сами изначально не ожидали, что будет столько «веселья». Надеюсь, у Вас с портированием будет меньше проблем, и в любом случае – удачи в этом деле! :)

Поддержка Visual Studio 2019 в PVS-Studio

+3

Если прочитаете статью целиком, информации о торте не найдёте, а вот разные интересные моменты поддержки — вполне. :)


Тортик кушали в офисе — он был вкусным и ооочень сытным.

Поддержка Visual Studio 2019 в PVS-Studio

+2
Думаю, сейчас посредством плагина для VS проверить такие проекты не получится. Какое-то время назад я смотрел на VisualGDB проекты — их структура отличалась от 'традиционных' Visual C++ MSBuild проектов. Как я помню, в частности — набором узлов с данными, и некоторые из данных, которые нам необходимы, отсутствовали. Собственно, проверить их через плагин для VS было нельзя.

Вы можете попробовать проверить такой проект, используя утилиту 'C and C++ Compiler Monitoring UI' (она тоже идёт в составе дистрибутива для Windows).

История о том, как мы иконку PVS-Studio меняли

+5
Хотел уточнить один момент.
ИМХО, видение / отсутствие видения букв не носит эмоционального характера.

Это простой человеческий интерес. Я, например, букв не вижу. Коллеги (не знаю, все ли) — видят. Поэтому было интересно, каково будет разделение по группам среди читателей. :)

История о том, как мы иконку PVS-Studio меняли

PVS-Studio для Java

Стреляем в ногу, обрабатывая входные данные

+1
С удовольствием читаю ваши статьи.

Спасибо, приятно слышать!

Хочется подкинуть идею где ещё можно найти прекрасных тем для статей. В Python есть множество популярных библиотек которые используют С и С++.

Спасибо за наводку. Если будет желание и конкретные проекты для проверки — можете отписать о них (через PR, например) в соответствующем проекте на GitHub.

Там уже такое количество проектов набралось, правда — ух! :)

Самые быстрые отчёты на диком западе. И горстка багов в придачу…

+3
Увы, даже правильное именование сущностей не всегда помогает.

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

Посмотрел срабатывания диагностики V3005 — оказалось, подобный пример не один, что, впрочем, ожидаемо.

Вот несколько примеров:

Sony ATF

public ProgressCompleteEventArgs(Exception progressError, 
  object progressResult,
  bool cancelled)
{
  ProgressError = ProgressError;
  ProgressResult = progressResult;
  Cancelled = cancelled;
}


Roslyn

public DiagnosticAsyncToken(
  AsynchronousOperationListener listener,
  string name,
  object tag,
  string filePath,
  int lineNumber)
  : base(listener)
{
  Name = Name;
  Tag = tag;
  FilePath = filePath;
  LineNumber = lineNumber;
  StackTrace = PortableShim.StackTrace.GetString();
}


MonoDevelop

public ViMacro (char macroCharacter) {
  MacroCharacter = MacroCharacter;
}

public char MacroCharacter { get; set; }


MonoDevelop

public WhitespaceNode(string whiteSpaceText, TextLocation startLocation)
{
  this.WhiteSpaceText = WhiteSpaceText;
  this.startLocation = startLocation;
}

public string WhiteSpaceText { get; set; }


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

Статический анализ в видеоигровой индустрии: топ-10 программных ошибок

0
Автор оригинальной статьи про проверку X-Ray Engine тоже обратил на это внимание :)

Toп 10 ошибок в C++ проектах за 2017 год

+2
Это define из исходников.
Мне показалось это очевидным, поэтому я не стал писать этот факт прямым текстом.

Toп 10 ошибок в C++ проектах за 2017 год

Toп 10 ошибок в C++ проектах за 2017 год

+1
Только я не предлагал 'исправлений'. :)
Возможно, недостоточно ясно выразился в статье.

В коде CryEngine форматирование поправили, к слову.

Сравнение качества кода Firebird, MySQL и PostgreSQL

Анализаторы Roslyn: повадки и места обитания

Анализаторы Roslyn: повадки и места обитания

Как перешагнуть через legacy и начать использовать статический анализ кода

0
Т.к. SharpDevelop использует MSBuild в качестве сборочной системы (поправьте, если не прав), Вы можете попробовать проверить .sln или .csproj с помощью PVS-Studio_Cmd.exe. А для просмотра отчёта уже использовать, например, Standalone.

Я попробовал на синтетическом проекте — получилось.

Война машин: PVS-Studio vs TensorFlow

Война машин: PVS-Studio vs TensorFlow

Библиотека глубокого обучения Tensorflow

+8
Я, кстати, недавно проверял исходный код TensorFlow с помощью PVS-Studio и нашёл несколько любопытных мест. Может быть кому-то будет интересно. Ссылка на статью.

Дивный новый Roslyn: Кому нужны собственные анализаторы кода и скриптинг на C#?

DotNext 2016 Moscow: Спокойствие после бури

Продолжаем проверять проекты Microsoft: анализ PowerShell

0
Статистику предупреждений анализатора по уровням?
Я могу поискать лог, но я не высчитывал процент FA, и, повторюсь (впрочем, вы это самы процитировали), что на собранном проекте кол-во предупреждений может быть несколько больше или меньше.

Продолжаем проверять проекты Microsoft: анализ PowerShell

Продолжаем проверять проекты Microsoft: анализ PowerShell

+1
Не разобрались?
Я пробовал собрать как решение 'из коробки' с разными конфигурациями, так и собирал проект через скрипт. Несмотря на то, что на GitHub на странице проекта не рекомендуют для сборки Visual Studio, написал разработчикам, чтобы удостовериться, что .sln необходим только для удобства работы, но не для сборки. Убедился, что всё нормально собирается через скрипт (с использование .Net Core). И описал эти ситуации, а также плюсы и минусы проверки собранного и несобранного проекта.
Я бы не назвал это 'не разобрались'.

Продолжаем проверять проекты Microsoft: анализ PowerShell

Ищем ошибки в Mono: сотни их

Ищем ошибки в Mono: сотни их

0
Что вы понимаете под 'честной проверкой'?
Проектные файлы используются в том числе и для получения компиляции, из которой извлекается семантическая информация, необходимая для глубокого анализа.
Я об этом писал в этой статье.

Ищем ошибки в Mono: сотни их

1 There