Bugs. Bugs Never Change
Вы открыли статью, на которую вы должны дать ссылку в Twitter. Или разместить в любимой программисткой группе. Это принесёт пользу и нам, и открытым проектам. Чтобы программисты всего мира узнали о PVS-Studio, мы проверяем открытые проекты и делаем их лучше. А заодно пишем интересные и полезные статьи. Чем больше люди будут узнавать про наши статьи, тем приятнее нам будет это делать и тем больше проектов мы будем проверять. Совместный profit.

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

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

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

Обновляемый список статей, в которых мы рассказываем об ошибках, найденных с помощью PVS-Studio в открытых проектах.

Читать наши статьи не только интересно, но и полезно. Даже опытные программисты узнают из них о новых паттернах ошибок и о тёмных закоулках языка Си++.

Чтобы было интересно, мы отдаём предпочтение известным программам. Например, вы можете познакомиться с ошибками в коде следующих проектов:
  • CoreCLR
  • LibreOffice
  • Qt
  • Clang
  • Chromium

Мы пишем статьи не про все проверенные проекты. Некоторые из проектов слишком маленькие или содержат мало интересных ошибок. Однако мы обязательно уведомляем авторов об этих ошибках и заносим их вот в эту базу. Эта база может служить источником вдохновения для многих статей (пример). Так что рекомендуем использовать этот ресурс в качестве источника примеров ошибок для подготовки презентаций, написания статей, книг или при разработке стандартов кодирования.

Желаем вам безбажного кода. А чтобы быть в курсе о новых проверках, подписывайтесь на нас в твиттере: @Code_Analysis.

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


  1. Andrey2008 Автор
    08.04.2015 17:11
    +6

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


    1. datacompboy
      08.04.2015 17:35
      +3

      А есть тот же список на английском?



  1. Andrey2008 Автор
    08.04.2015 22:00
    +3

    Тихо как-то. Давайте, бодрее, веселее! Оставляем комментарии.
    Вот коллега скоро про проверку ОС Haiku напишет.
    А вы бы какие проекты хотели предложить?


    1. hell0w0rd
      08.04.2015 23:00
      +2

      1. Andrey2008 Автор
        08.04.2015 23:44

        V8 смотрели.
        И MongoDB смотрели (ссылку не могу найти).
        На интересные статьи не набралось.



  1. brom_portret
    08.04.2015 23:25
    +1

    Было бы интересно посмотреть на результат проверки sqlite с ихним 100% branch test coverage и Millions and millions of test cases.


    1. Andrey2008 Автор
      08.04.2015 23:34
      +6

      Мы проверяли SQLite. Код качественный. Написать статью не о чем. Была только пара мелочей типа:

      static int fts3EvalPhraseStart(....)
      {
        ....
        int bIncrOk = (bOptOk 
         && pCsr->bDesc==pTab->bDescIdx 
         && p->nToken<=MAX_INCR_PHRASE_TOKENS && p->nToken>0
         && p->nToken<=MAX_INCR_PHRASE_TOKENS && p->nToken>0
         && pTab->bNoIncrDoclist==0
        );
        ....
      }
      


    1. datacompboy
      09.04.2015 11:41
      +2

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

      То есть если добавить статический анализатор к идеальному проекту, то просто разработка станет дешевле на 10-30% (в зависимости от опыта команды).

      Разумеется, если воткнуть анализатор к «альтернативно одаренному» проекту, то разработка станет дороже на 300-500%, так как вместо исправления люди начнут его игнорировать и пытаться подавлять.


      1. EvgeniyRyzhkov
        09.04.2015 11:45
        +3

        Спасибо за комментарий. Чуть раскрою мысль.

        Тут очень важно понимать, что хотя мы рекламируемся через проверку проектов (часто разовую), это самый неправильный способ использования статического анализатора :-).

        Фразы от программистов типа: «Ага, фигня ваш инструмент! Я прогнал на нашем релизе — всего ошибок нашел!» мы слышим часто. И приходится как раз объяснять, что смысл анализатора в регулярном использовании, когда ошибка обнаруживается и исправляется сразу при написании кода. А не когда тестеры ее нашли (или пользователи).


        1. datacompboy
          09.04.2015 11:49

          … а еще при наличии анализаторов (желательно автоматически работающих по каждому чиху) писать на С++ становится не так погано.

          … тяжело плюсокодить после динамических языков

          … особенно тяжело после языков с нормальной системой типов


  1. Klotos
    09.04.2015 12:34
    +4

    Скажите, а есть ли у вас, даже не планы, а так, задумки/размышления на будущее, чтобы разработать статический анализатор для чего-то ещё, кроме C++? Меня прежде всего интересует платформа .NET (и C# как самый популярный язык на ней).


    1. EvgeniyRyzhkov
      09.04.2015 12:41
      +5

      Да, мы начинаем думать в сторону статического анализа для C#. Так как там понятная конкретная среда (Visual Studio), понятная аудитория (коммерческие пользователи Visual Studio). Так что очень даже может быть.


      1. PsyHaSTe
        09.04.2015 17:04
        +1

        Это связанно с аннонсом Rosylin или такие идеи витали и раньше?


        1. EvgeniyRyzhkov
          09.04.2015 17:21

          Напрямую не связано. Да и аннонс Рослина был давно уже.


  1. Vitalykurin
    09.04.2015 18:44

    Только чувак на картинке совсем не лайкает.


    1. Andrey2008 Автор
      09.04.2015 18:59
      +1

      Да, я знаю. И я был большой любитель Fallout. :)
      Для тех кто не знает: Если вы видите облако–гриб ядерного взрыва, вытяните руку в его направлении и поднимите большой палец. Если гриб больше большого пальца — вы в зоне поражения


      1. datacompboy
        10.04.2015 16:11

        Мораль: хочешь жить — качай большой палец или укорачивай руки.


  1. ASkvortsov
    09.04.2015 19:16

    Интересно, когда-нибудь появятся анализаторы, находящие архитектурные просчеты (ну или хотя бы проблемы с многопоточностью)? :)


    1. kalessil
      19.04.2015 15:08

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

      Например,

      FindBugs (Java) уже умеет находить проблемы с многопоточностью.
      Этот анализатор (PHP) умеет находить проблемы с шаблонами проектирования и памятью.
      Можно вспомнить ещё ReSharper Inspections.

      А вот как людей будут обучать и готовить к подобному окружению в разработке ПО, я пока не представляю.


    1. datacompboy
      19.04.2015 15:26

      на тему многопоточности — есть же code.google.com/p/data-race-test/wiki/ThreadSanitizer


      1. ASkvortsov
        20.04.2015 14:22

        Тулза, бесспорно, полезная, но это отнюдь не статический анализатор, а очень даже инструмент для выявления рейсов в рантайме, причем с недетерминированным результатом (нельзя гарантировать, что если рейс есть, то эта тулза его обязательно найдет).


        1. datacompboy
          20.04.2015 14:44

          Видел и статические реализации, правда, ограниченного применения.
          В целом же, тут скорее ближе тулзы доказательства корректности