Рисунок 1

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

PVS-Studio — это статический анализатор для выявления ошибок и потенциальных уязвимостей в исходном коде программ, написанных на языках С, C++, C# и Java.

Для популяризации методологии статического анализа кода и нашего инструмента мы пишем заметки о проверке различных открытых проектов. В том числе, мы время от времени проверяем различные компиляторы. Например, мы проверяли и находили ошибки в таких проектах, как: GCC, LLVM, PascalABC.NET, Roslyn.

Мы уже не раз замечали интересный факт. Как только мы проверяем, скажем, LLVM или GCC, то через один-два релиза в этих компиляторах появляется пара новых диагностик, нацеленных на выявление ошибок, которые удалось найти PVS-Studio в их коде :). К сожалению, мы не догадались выписывать даты и ссылки на соответствующие нововведения, поэтому вам придётся поверить здесь нам на слово. Различные C++ компиляторы заимствуют некоторые наши диагностики, и мы считаем, что это совершенно нормально, правильно и полезно!

Помимо C++ компиляторов теперь к заимствованию диагностик подключились и C# анализаторы. Это значит, что C# анализатор, реализованный в PVS-Studio, становится другим образцом для подражания! Осознавать это приятно и здорово.

В данном случае я могу зафиксировать, можно сказать, в реальном времени, как это происходит. 13 августа 2019 года мы опубликовали большую статью, посвященную проверке .NET Core Libraries (CoreFX). Помимо всего прочего, в этой статье мы описали паттерн ошибки, связанный с использованием интерполированных строк (см. диагностику V3138). Разработчики CoreFX с интересом отнеслись к нашей публикации и приступили к исправлению найденных нами ошибок. И уже 14 августа они добрались до найденных нами ошибок, связанных с этими самыми интерполированными строками: Fix a few missing $s for string interpolation in tracing.

Теперь самое интересное. В этот же самый день в проекте Roslyn Analyzers появилась задача по реализации новой диагностики "New rule: Interpolated strings that are missing the $ special character #2767", связанная как раз с ошибками, исправленными в CoreFX.

Нам приятно, что наш труд оказался полезен разработчикам CoreFX и что наши диагностики стали примером для подражания у разработчиков Roslyn Analyzers. Немного жаль, что нигде в дискуссии не упоминается инструмент PVS-Studio. Получается, что как будто они сами нашли эти ошибки и сами придумали сделать диагностики. Нам бы, конечно, польстило, если бы нас упоминали как первоисточник. Ну да ладно.

Почему мы решили написать про всё это? Нам очень приятно, и мы даже немного гордимся собой! Изучая наш опыт, другие компиляторы реализуют новые диагностики, что повышает качество разрабатываемого программного обеспечения в целом. Я понимаю, что не только мы влияем на развитие возможностей компиляторов по поиску ошибок. Однако нам приятно осознавать, что мы вносим вклад в этот процесс.

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

  • Быстрая качественная поддержка (на письма отвечают только программисты);
  • Интеграция с Visual Studio, IntelliJ IDEA, SonarQube, Jenkins, IncrediBuild;
  • Возможность использования как локально, так и в облаке (Docker, Travis CI);
  • Инструменты интеграции анализа в большие старые проекты (Mass Suppression);
  • Подробная документация с примерами по каждому паттерну ошибки;
  • Механизм рассылки писем разработчикам (BlameNotifier);
  • Отслеживание запусков компилятора (Compiler Monitoring);
  • И так далее.

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

Дополнительные ссылки:

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



Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Andrey Karpov. PVS-Studio: Engine of Progress.

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


  1. SemenPV
    20.08.2019 18:20

    А как с вашей стороны? Есть ли примеры того как вы были вдохвлены конкурирующим продуктом? Или большинство нововведений внутренние идеи и запросы пользователей?

    И как дела с resharper? Есть информация что они что-то заимствуют у вас?


    1. Andrey2008 Автор
      20.08.2019 18:45

      А как с вашей стороны? Есть ли примеры того как вы были вдохвлены конкурирующим продуктом? Или большинство нововведений внутренние идеи и запросы пользователей?
      Да, изначально мы смотрели по сторонам, что есть в мире. Хотя делали всё равно своё, так как не видели, что кто-то хорошо ищет 64-битные ошибки или опечатки. Теперь же в плане диагностик как-то даже нет потребности куда-то смотреть. Есть целая гора предложений от пользователей и клиентов. Плюс выписываем что-то по итогам чтения статей, книг, просмотра докладов. В общем, всегда есть чем заняться. Плюс есть задача реализации уже готовых конкретных наборов диагностик (сейчас это MISRA).

      И как дела с resharper? Есть информация что они что-то заимствуют у вас?
      Не знаю. Мы не отслеживаем это. Просто иногда случайно замечали подобное в C++ компиляторах, аналогично тому, как это было в описанном сейчас случае.


      1. SemenPV
        20.08.2019 19:20

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



      1. NR_electronics
        21.08.2019 15:34
        +2

        Ждём с нетерпением появление полной поддержки всех трех стандартов MISRA C.


        1. GGribkov
          21.08.2019 15:49
          +1

          Если не секрет — с чем связана ваша заинтересованность в старых изданиях MISRA C? Ведь более современные версии стандарта содержат как новые правила, так и переосмысленные и доработанные старые. Ситуация здесь примерно такая же, как у разных изданий технической литературы — читать стоит самое последнее, ведь так?

          P. S. Мы сейчас усиленно занимаемся поддержкой MISRA C:2012 и MISRA C++:2008.
          На момент написания комментария в PVS-Studio есть 50 готовых MISRA-диагностик и еще около 20 на подходе (одна диагностика анализатора — это обычно несколько правил MISRA). И хотя наш анализатор уже можно использовать для проверки соответствия стандарту MISRA, мы продолжаем стремиться к полному покрытию всех правил. Поэтому ваше ожидание не проходит зря :)


  1. datacompboy
    20.08.2019 19:00
    +1

    Поздравляю! Учитывая, что это только одна из :)) логично что вам особо не из-за чего беспокоиться.

    p.s.: но двигателем прогресса вроде является ЖРДМТ 11Д428А-16?


  1. creat0r
    20.08.2019 20:43
    +8

    Пару месяцев назад в кулуарах одного тематического barcamp'а в Германии один из участников с энтузиазмом рассказывал мне про a very good source code static analyzer.
    Guess what, the world is a very small place, 'cause they are from my home town — ответил я.

    Вы очень хорошо известны в мире и котируетесь среди лучших. Моё почтение :)


    1. Alexufo
      21.08.2019 01:01

      Аську то ты совсем похоронил?


  1. alan008
    20.08.2019 23:33

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


    1. Andrey2008 Автор
      20.08.2019 23:40

      Мысль интересная и такое имело бы смысл сделать в случае дефицита проектов. Но их проверяй не хочу :). Вот сейчас, пока пауза между конференциями, команда выкатывает одну статью за одной. Тем более, частая перепроверка одних и тех же проектов может быть неинтересна читателям. А вот, например, не имеющая практического смысла, «историческая» статья "К тридцатилетию первого C++ компилятора: ищем ошибки в Cfront" очень даже нравится читателям и внесла разнообразие.


  1. alan008
    20.08.2019 23:37

    И если уж вы прошлись по всем популярным языкам (C++, Java, C#) вы просто обязаны добавить хоть какой-то анализатор для Python, благо в нем тоже хватает способов выстрелить себе в ногу и полно Open Source проектов на нем. Это возведет вас просто на вершину всех анализаторов.


    1. Andrey2008 Автор
      20.08.2019 23:45

      Это возведет вас просто на вершину всех анализаторов.
      Спасибо. :)

      Мы развиваемся за счёт собственных средств и пока не накопили ресурсов для следующего рывка. Каждый новый язык приводит к росту команды, усложнению инфраструктуры и так далее. Т.е. очень быстро поглощаются деньги. А отдача от начала освоения нового направления будет не быстро. А так, теоретически, мы давно считаем, что Python и/или PHP лишними не будут.


      1. alan008
        20.08.2019 23:59
        +1

        Тоже хотел было сначала предложить PHP, но все таки это не то. PHP — это только веб-бэкенд, причём в проектах чаще всего низкого уровня качества, где всем пофиг на ошибки, даже если они есть (а они там точно есть). А вот Python — это все что угодно, включая как фреймворки для веб бэкендов, так и математические расчёты (NumPy), нейросети, ORM и кучу всякой всячины.


  1. gasizdat
    21.08.2019 08:24
    +2

    на письма отвечают только программисты
    Сочувствую вам, коллеги. Держитесь!


    1. EvgeniyRyzhkov
      21.08.2019 09:30

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

      Приносить пользу людям — это круто. А когда конкретные люди тебя за это еще и благодарят, то это приятно вдвойне.

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


      1. MooNDeaR
        21.08.2019 20:40

        Это смотря кто твой пользователь :) Если это другие программисты, то еще куда ни шло конечно. А вот если это какой-нибудь? бухгалтер/директор в пенсионном фонде, то ну его нафиг)


    1. SvyatoslavMC
      21.08.2019 12:48
      +1

      Тем не менее, это очень ценится программистами на другой стороне. Всё понятно и решается быстро.

      А вот почему. Вы когда-нибудь пробовали сообщить о баге в крупную компанию? За последний месяц я отписал 3 бага в VK. И каждый раз мне пишут, что «такое бывает из-за вирусов, нате ссылку для проверки компьютера». Это так бесит, что по некоторым вопросам я просто забивал на продолжение общения. Хотя баг налицо, но связи с компетентными людьми нет.


      1. gasizdat
        21.08.2019 13:33

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


        1. SvyatoslavMC
          21.08.2019 14:00
          +1

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

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

          Ещё неприятный пример был (с хеппи эндом), когда мне надо было донести до хостера Rutube, где у них косяк. Кроме простых видосиков, услугами этого хостера пользуются разные компании для своих нужд. Так, я 3 месяца искал связи хоть с кем-нибудь. В итоге мне дали E-mail разработчиков и проблема была исправлена за 2 часа. Это я ещё был физиком в этой ситуации, когда такое происходит в B2B бизнесе, то это печаль.


  1. mirypoko
    21.08.2019 14:24

    Имхо было бы круто, если бы PVS-Studio был встроен в github и аналогичные сервисы по платной подписке. Кто-то сделал комит — сразу прилетает предупреждение о потенциальных проблемах.


    1. Andrey2008 Автор
      21.08.2019 14:31

      Мы движемся в эту стороны, но в каком виде это будет оформляться, пока говорить рано. См. ?PVS-Studio идёт в облака – запуск анализа на Travis CI.