Вы открыли статью, на которую вы должны дать ссылку в Twitter. Или разместить в любимой программисткой группе. Это принесёт пользу и нам, и открытым проектам. Чтобы программисты всего мира узнали о PVS-Studio, мы проверяем открытые проекты и делаем их лучше. А заодно пишем интересные и полезные статьи. Чем больше люди будут узнавать про наши статьи, тем приятнее нам будет это делать и тем больше проектов мы будем проверять. Совместный profit.
Идея проверять открытые проекты с целью популяризации своих продуктов не нова. Однако мы делаем то, что не делает никто другой. Мы подробно описываем результаты своих проверок.
Часто можно видеть заметки о проверке проекта с помощью статического анализатора X. Однако это или общие слова, либо смесь из сообщений анализатора и результатов работы diff. Пустую рекламу читать не интересно. А из отчёта о правках в коде, непосвященному человеку сложно понять, в чем собственно суть ошибки.
Мы не ленимся. Мы стараемся подробно описать в чём суть ошибки, как её поправить и как по возможности избегать таких ошибок. Вот результаты нашей многолетней работы:
Обновляемый список статей, в которых мы рассказываем об ошибках, найденных с помощью PVS-Studio в открытых проектах.
Читать наши статьи не только интересно, но и полезно. Даже опытные программисты узнают из них о новых паттернах ошибок и о тёмных закоулках языка Си++.
Чтобы было интересно, мы отдаём предпочтение известным программам. Например, вы можете познакомиться с ошибками в коде следующих проектов:
- CoreCLR
- LibreOffice
- Qt
- Clang
- Chromium
Мы пишем статьи не про все проверенные проекты. Некоторые из проектов слишком маленькие или содержат мало интересных ошибок. Однако мы обязательно уведомляем авторов об этих ошибках и заносим их вот в эту базу. Эта база может служить источником вдохновения для многих статей (пример). Так что рекомендуем использовать этот ресурс в качестве источника примеров ошибок для подготовки презентаций, написания статей, книг или при разработке стандартов кодирования.
Желаем вам безбажного кода. А чтобы быть в курсе о новых проверках, подписывайтесь на нас в твиттере: @Code_Analysis.
Комментарии (25)
Andrey2008 Автор
08.04.2015 22:00+3Тихо как-то. Давайте, бодрее, веселее! Оставляем комментарии.
Вот коллега скоро про проверку ОС Haiku напишет.
А вы бы какие проекты хотели предложить?hell0w0rd
08.04.2015 23:00+2node.js (js на сервере)
v8 (js движок)
mongo (самая популярная nosql база)
cocaine (облачная платформа от Яндекс)Andrey2008 Автор
08.04.2015 23:44V8 смотрели.
И MongoDB смотрели (ссылку не могу найти).
На интересные статьи не набралось.
brom_portret
08.04.2015 23:25+1Было бы интересно посмотреть на результат проверки sqlite с ихним 100% branch test coverage и Millions and millions of test cases.
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 ); .... }
datacompboy
09.04.2015 11:41+2Я тыкал палочкой пару гиганских проектов с неплохим покрытием тестами; и могу сказать, что как правило находится постфактум немного, только в заброшенных углах.
Но это всё приходит ценой неслабых затрат энергии на ревью, багтестах, и крови пользователей.
Статический анализатор позволяет экономить в этом месте.
То есть если добавить статический анализатор к идеальному проекту, то просто разработка станет дешевле на 10-30% (в зависимости от опыта команды).
Разумеется, если воткнуть анализатор к «альтернативно одаренному» проекту, то разработка станет дороже на 300-500%, так как вместо исправления люди начнут его игнорировать и пытаться подавлять.EvgeniyRyzhkov
09.04.2015 11:45+3Спасибо за комментарий. Чуть раскрою мысль.
Тут очень важно понимать, что хотя мы рекламируемся через проверку проектов (часто разовую), это самый неправильный способ использования статического анализатора :-).
Фразы от программистов типа: «Ага, фигня ваш инструмент! Я прогнал на нашем релизе — всего ошибок нашел!» мы слышим часто. И приходится как раз объяснять, что смысл анализатора в регулярном использовании, когда ошибка обнаруживается и исправляется сразу при написании кода. А не когда тестеры ее нашли (или пользователи).datacompboy
09.04.2015 11:49… а еще при наличии анализаторов (желательно автоматически работающих по каждому чиху) писать на С++ становится не так погано.
… тяжело плюсокодить после динамических языков
… особенно тяжело после языков с нормальной системой типов
Klotos
09.04.2015 12:34+4Скажите, а есть ли у вас, даже не планы, а так, задумки/размышления на будущее, чтобы разработать статический анализатор для чего-то ещё, кроме C++? Меня прежде всего интересует платформа .NET (и C# как самый популярный язык на ней).
EvgeniyRyzhkov
09.04.2015 12:41+5Да, мы начинаем думать в сторону статического анализа для C#. Так как там понятная конкретная среда (Visual Studio), понятная аудитория (коммерческие пользователи Visual Studio). Так что очень даже может быть.
Vitalykurin
09.04.2015 18:44Только чувак на картинке совсем не лайкает.
Andrey2008 Автор
09.04.2015 18:59+1Да, я знаю. И я был большой любитель Fallout. :)
Для тех кто не знает: Если вы видите облако–гриб ядерного взрыва, вытяните руку в его направлении и поднимите большой палец. Если гриб больше большого пальца — вы в зоне поражения
ASkvortsov
09.04.2015 19:16Интересно, когда-нибудь появятся анализаторы, находящие архитектурные просчеты (ну или хотя бы проблемы с многопоточностью)? :)
kalessil
19.04.2015 15:08Появятся, даже не сомневайтесь: сложность алгоритмов и лигики в софте постоянно растёт и, чтобы не стагнировать, индустрия делает средства разработки и анализа всё интелектуальнее.
Например,
FindBugs (Java) уже умеет находить проблемы с многопоточностью.
Этот анализатор (PHP) умеет находить проблемы с шаблонами проектирования и памятью.
Можно вспомнить ещё ReSharper Inspections.
А вот как людей будут обучать и готовить к подобному окружению в разработке ПО, я пока не представляю.
datacompboy
19.04.2015 15:26на тему многопоточности — есть же code.google.com/p/data-race-test/wiki/ThreadSanitizer
ASkvortsov
20.04.2015 14:22Тулза, бесспорно, полезная, но это отнюдь не статический анализатор, а очень даже инструмент для выявления рейсов в рантайме, причем с недетерминированным результатом (нельзя гарантировать, что если рейс есть, то эта тулза его обязательно найдет).
datacompboy
20.04.2015 14:44Видел и статические реализации, правда, ограниченного применения.
В целом же, тут скорее ближе тулзы доказательства корректности
Andrey2008 Автор
Примечание. Эта заметка появилась по двум причинам. Во-первых, никто не знает про список и вновь и вновь предлагают посмотреть одни и те-же проекты. Во-вторых, раз никто не знает, значит масса людей пропустила интересные статьи. А в списке можно найти тот проект, который интересен для души читателя.
datacompboy
А есть тот же список на английском?
Andrey2008 Автор
О списке: Bugs. Bugs Never Change
Сам список: An always up-to-date list of articles describing errors that we find in open source projects with PVS-Studio analyzer.