Comments 166
UFO just landed and posted this here
Регулярно читаю статьи про PVS-Studio, и в каждой статье одни и те же комменты:
и т.д.
Уже даже не смешно.
- А у вас есть в планах сделать его под линукс(и желательно консольным)?
- А как там у вас с поддержкой Linux? Планируется?
- Можно ли ожидать в дальнейшем поддержку Linux/Eclipse?
и т.д.
Уже даже не смешно.
UFO just landed and posted this here
С нетерпением жду статьи «PVS-Studio наконец-то добрался до PVS-Studio»! :)
Да-да.
Мне кажется, это так же опасно, как искать google в Гугле. :)
Андрей уже неоднократно писал, что сами себя они постоянно проверяют ;)
На тему PVS-Studio Standalone и Linux, возможно будет интересна вот эта новая заметка — "PVS-Studio теперь работает и без среды Visual Studio или C++Builder – проверяем препроцессированные файлы от чего угодно".
да еще и бесплатный… только что кушать разработчикам?
UFO just landed and posted this here
положа руку на сердце скажите, сколько опенсорс проект соберёт средств, если его использование никак извне не видно?
UFO just landed and posted this here
Во-1х: видно
Во-2х: они как раз продают поддержку, не хочешь брать у них — бери любого сисадмина.
В-3их: RHEL не опенсорс, у них есть проприетарный кусок.
в случае с вышеупомянутым инструментом эта модель не окупится.
Во-2х: они как раз продают поддержку, не хочешь брать у них — бери любого сисадмина.
В-3их: RHEL не опенсорс, у них есть проприетарный кусок.
в случае с вышеупомянутым инструментом эта модель не окупится.
UFO just landed and posted this here
Уважаемый знаток, продай нас, пожалуйста, Гуглу.
вы тоже хотите на pinterest.com/googlegraveyard/google-graveyard/?
Другими словами, «придумайте там, как взять деньги с кого-нибудь, а мне дайте пожалуйста на халяву».
Можно не опенсорс, можно не бесплатный, но для открытых проектов бесплатно, для маленьких проектов кодеров-одиночек цена в 50-200$ (и не в год, а разовым платежом). Подобная ценовая политика сделала бы PVS-Studio офигенную популярность и не думаю что разорила бы разработчиков. PVS-Studio инструмент конечно классный, но лично для меня и парочки небольших компаний, которые я знаю его как бы вообще нету при такой ценовой политике) Надеюсь опенсорсную библиотеку cpp-парсер они еще поддерживают. Думаю, скоро и ее прикроют.
Даже и статьи их читать уже не интересно… просто красивая реклама
Даже и статьи их читать уже не интересно… просто красивая реклама
Я не знаю, что мне еще нужно сделать… Разработчики маленьких проектов и кодеры-одиночки могут и так использовать PVS-Studio. Имеющихся в триале кликов им для этого хватит.
Из статьи "Лицензирование PVS-Studio: почему у нас нет Single User License?".
И ещё. Нам время от времени пишут, что дорого. Вот если бы продукт стоил 200, 400, 500$ то тогда бы ого-го!.. и он бы купил и все купили. Мы одно время провели эксперимент. Всем кто такое писал, предлагали купить PVS-Studio по озвученной ими цене. И что вы думаете? Купила пара человек. Остальные отвалились. Или оказалось, что и 400$ нет, или что не нужно (он на C#) пишет, или что он студент и просто так написал, или что то кризис и начальник денег не дал. Больше мы не слушаем таких советчиков. Кому нужно, тот покупает. Иногда обсуждается скидка, но не цены в 200$. А кому не нужно, тот и за 200$ не купит. Будет писать что дорого, и вот если бы 20$, то тогда ого-го!!!
Разработка небольшого проекта силами одного-двух человек
В данном случае, приобретать инструмент PVS-Studio нет смысла. Не то что бы он вредит или не помогает, просто в малом объеме кода, который пишется 1-2 программистами, c ошибками еще можно бороться вручную. Программист знает весь проект целиком. Нет старого незнакомого унаследованного кода. Нет новых неопытных сотрудников. Нет спешки при разработке.
В данном варианте использование статического анализатора выглядит скорее как украшательство, чем как необходимость. Тем более, поскольку проект маленький, для его работы вполне хватит триальной версии PVS-Studio. В ней есть ограничение по количеству переходов. Но можно переходить в нужные места проекта, не используя клики. Это не очень удобно, но поскольку проект маленький, то подобной навигацией можно вполне пользоваться. Также в маленьком проекте будет мало ошибок, а значит, переходить к предупреждениям потребуется не часто.
Получается, что в маленьком проекте вполне можно использовать PVS-Studio бесплатно.
И ещё. Нам время от времени пишут, что дорого. Вот если бы продукт стоил 200, 400, 500$ то тогда бы ого-го!.. и он бы купил и все купили. Мы одно время провели эксперимент. Всем кто такое писал, предлагали купить PVS-Studio по озвученной ими цене. И что вы думаете? Купила пара человек. Остальные отвалились. Или оказалось, что и 400$ нет, или что не нужно (он на C#) пишет, или что он студент и просто так написал, или что то кризис и начальник денег не дал. Больше мы не слушаем таких советчиков. Кому нужно, тот покупает. Иногда обсуждается скидка, но не цены в 200$. А кому не нужно, тот и за 200$ не купит. Будет писать что дорого, и вот если бы 20$, то тогда ого-го!!!
А вот сейчас посмотрим, как за $250 пойдёт… :)
Прошёл год и Ваша мечта исполнилась. :)
Мы выпустили новый статический анализатор кода CppCat. Отличный вариант для кодеров-одиночек. Одна лицензия — $250. Приглашаю скачать и попробовать. Ну и купить тоже. :)
Мы выпустили новый статический анализатор кода CppCat. Отличный вариант для кодеров-одиночек. Одна лицензия — $250. Приглашаю скачать и попробовать. Ну и купить тоже. :)
Звучит как «PVS-Studio наконец то посягнул на святая святых» :)
Вопрос из постскриптума тоже пишут к каждой статье о PVS-Studio. Ну просто к К-А-Ж-Д-О-Й…
И это хорошо, так как это сподвигает автора добавлять эту информацию . И если это будет добавлено в конец следующей статьи, то таких вопросов сразу не возникнет и будет всё понятно не только тем, кто читает абсолютно все статьи и видел уже много стандартных вопросов и ответов к ним, но и обычным людям, которые просто наткнулись на статью с этого блога впервые. Вы согласны?
Пробовал. Всё равно спрашивают. :) Да и статья захламляется.
А может просто стоит добавлять в конец статьи ссылки на багрепорты?
Например, мне было бы интересно, что думают об этих ошибках разработчики и как/когда они будут исправлены, а так получается, что информация об ошибках есть, а где искать информацию о процессе их устранения неизвестно (понятно, что скорее всего в баг-трекере или mail-листах, но они большие и искать в них сложно).
Например, мне было бы интересно, что думают об этих ошибках разработчики и как/когда они будут исправлены, а так получается, что информация об ошибках есть, а где искать информацию о процессе их устранения неизвестно (понятно, что скорее всего в баг-трекере или mail-листах, но они большие и искать в них сложно).
Если честно — просто лень и я делать это не буду. Я отписываю про ошибки уже после публикации статей. Собственно, я в баг трекере и даю ссылку на статью. Ходить потом везде и вписывать ссылки не хочется. Тем более, что мое письмо разбивают на десяток отдельных багов и мне надо отслеживать какие новые записи появляются в баг теркере. Мне это не интересно. Плюс, надо помнить, что правильным решением является самостоятельная проверка проекта, а не исправления того, что отписал я.
Можно удовлетворить любопытство так. Подождать недельку после публикации статьи. Затем использовать Google. Например, вводим «chromium pvs-studio» (искать за месяц). И смотрим, что нашлось: 1, 2, 3,…
Можно удовлетворить любопытство так. Подождать недельку после публикации статьи. Затем использовать Google. Например, вводим «chromium pvs-studio» (искать за месяц). И смотрим, что нашлось: 1, 2, 3,…
Специально для интересующихся:
N1: svn.boost.org/trac/boost/ticket/9026
N2: svn.boost.org/trac/boost/ticket/7337 (старая)
N3: svn.boost.org/trac/boost/ticket/9027 (разработчик только что исправил и поблагодарил)
N4: svn.boost.org/trac/boost/ticket/8752 (старая)
N5: svn.boost.org/trac/boost/ticket/9028
N6: не ошибка, перед этим в коде выставляется флаг «кидать исключения при сбоях»
N7: как замечено ниже — не ошибка
N1: svn.boost.org/trac/boost/ticket/9026
N2: svn.boost.org/trac/boost/ticket/7337 (старая)
N3: svn.boost.org/trac/boost/ticket/9027 (разработчик только что исправил и поблагодарил)
N4: svn.boost.org/trac/boost/ticket/8752 (старая)
N5: svn.boost.org/trac/boost/ticket/9028
N6: не ошибка, перед этим в коде выставляется флаг «кидать исключения при сбоях»
N7: как замечено ниже — не ошибка
Любой школьник может с помощью инструмента PVS-Studio обнаружить эти ошибки и исправить их в бусте. Andrey2008 один, а проектов — десятки тысяч. Не удивительно, что он только подмечает проблемы в известных проектах, а не исправляет их…
Если мне не изменяет в память в одной из последних (триал, само собой) версий видел clang в пакете. Вы перешли на него в плане разбора или остаетесь на своем движке? Какие планы?
Немного о взаимодействии PVS-Studio и Clang
Аннотация. Причина, по которой эта заметка появилась в том, что многие считают, что анализатор PVS-Studio основан на Clang. Это не так. Хотел кратко изложить информацию, о том, почему в составе дистрибутива PVS-Studio находится компилятор Clang и для чего он используется.
Аннотация. Причина, по которой эта заметка появилась в том, что многие считают, что анализатор PVS-Studio основан на Clang. Это не так. Хотел кратко изложить информацию, о том, почему в составе дистрибутива PVS-Studio находится компилятор Clang и для чего он используется.
Спасибо за ответ, проглядел почему-то эту статью, хотя почитываю вас регулярно. С тех пор решение о переходе на clang не поменялось? В статье достаточно сухо этот момент упомянут, мол, было бы круто, но работает и так. Миграция не окупится, правильно понимаю? Простите, что пристал, просто самому очень понравился libclang.
И да, ребят, вы ахренительные, как с точки зрения подхода к бизнесу (в том числе и маркетингу), так и с точки зрения разработки. Успехов вам.
И да, ребят, вы ахренительные, как с точки зрения подхода к бизнесу (в том числе и маркетингу), так и с точки зрения разработки. Успехов вам.
Не поменялось. Боюсь, что не окупится. Плюс мы тогда не сможем полностью контролировать процесс разработки. Вот выйдет VS2013, мы сядем и сделаем, что они там нового поддержат из C++11 и C99. А с Clang не понятно. Вдруг, они запланируют поддержать VS2013 через пол год или год. Что тогда делать…
Дописывать самим и делиться. Шучу от части, понял вас, вполне разумно.
А Clang уже поддерживает C++11 и C99, доделывать ничего не нужно.
Толку-то. А как не умел много в заголовочных файлах Visual C++ разбирать, так и не умеет. И не хочет. Упрямится поддерживать многие ms-специфики.
Так это вопрос поддержки MS расширений, а не C++11, как написано в комментарии, на который я отвечаю.
> И не хочет. Упрямится поддерживать многие ms-специфики.
Что значит упрямится? Ваши патчи не приняли что ли? (Но вроде бы таких не видел в списке рассылки.) А вот от других разработчиков патчи для поддержки MS расширений видел (например, declspec(property...), квалификаторы модели наследования, uuidof). Кажется, кто-то писал что недавно удалось собрать MFC приложение.
> И не хочет. Упрямится поддерживать многие ms-специфики.
Что значит упрямится? Ваши патчи не приняли что ли? (Но вроде бы таких не видел в списке рассылки.) А вот от других разработчиков патчи для поддержки MS расширений видел (например, declspec(property...), квалификаторы модели наследования, uuidof). Кажется, кто-то писал что недавно удалось собрать MFC приложение.
Только простейший проект в Visual C++ 2012 им не собрать — не поддерживаются заголовки…
И да, ребят, вы ахренительные
Спасибо, такие комментарии всегда приятно читать.
(Коллега ответит про clang)
Вы не думали о реализации анализаторов кода для других языков программирования?
Думали. Решили, что пока не стоит. Си/Си++ живее всех живых. И ошибок, больше чем в других языках. Комфортный язык для анализа.
Есть языки ошибки в программах которых стоят очень больших денег — Verilog / VHDL
Если по дизайну Verilog сделана микросхема ASIC за миллион долларов, а уже потом найдена ошибка, то исправить ее никак нельзя.
Причем типовые ошибки такие же, как в C: типа напишут if(a=b) вместо if(a==b) или что-то в этом роде.
Вот такая есть статья как раз про это Verilog Gotcha.
Если по дизайну Verilog сделана микросхема ASIC за миллион долларов, а уже потом найдена ошибка, то исправить ее никак нельзя.
Причем типовые ошибки такие же, как в C: типа напишут if(a=b) вместо if(a==b) или что-то в этом роде.
Вот такая есть статья как раз про это Verilog Gotcha.
Ну по крайней мере, в мире HDL языков юнит тестирование, а точнее верификация дизайна не просто принята, а является неотъемлемой частью разработки. Но вообще вы конечно же правы. Подобные ошибки могут и имеют место быть.
А еще можно в добавок сказать, что грамматики этих языков в разы проще чем С++. Тут и LR(1) парсер справится на ура. Так что можно всецело сконцентрироваться именно на анализе.
А еще можно в добавок сказать, что грамматики этих языков в разы проще чем С++. Тут и LR(1) парсер справится на ура. Так что можно всецело сконцентрироваться именно на анализе.
верификация дизайна не просто принята, а является неотъемлемой частью разработки
Да, но одно не отменяет другое. Плюс ко всему — статический анализ все-таки быстрее и позволяет на более ранней стадии выявлять ошибки, чем симуляция с тестовыми данными.
А еще можно в добавок сказать, что грамматики этих языков в разы проще чем С++. Тут и LR(1) парсер справится на ура. Так что можно всецело сконцентрироваться именно на анализе.
Здесь вы очень сильно ошибаетесь. Всё настолько плохо, что существуют компании вроде Verific, которые целиком делают бизнес на разработке, продаже и поддержке компиляторов для HDL.
Парсинг VHDL — это ад. Парсинг простого Verilog'а полегче, но вот SystemVerilog — это тоже ад.
Я был одним из разработчиков подобного статического анализатора (http://www.aldec.com/en/products/functional_verification/alint).
Инструментов такого рода хватает (лидер сейчас — Atrenta SpyGlass), но все они стоят немалых денег.
Могу сказать, что насчёт «типовые ошибки такие же, как в С», вы слегка заблуждаетесь. То есть да, какую-то часть можно так выловить, но для полноценного поиска ошибок необходима хотя бы частичная эмуляция RTL-синтеза — а здесь на одном только опыте написания статических анализаторов далеко не уедешь. Плюс ко всему — неплохо бы быть в теме проектирования ASIC/FPGA и уметь писать на SV и VHDL. Ну и last but not least — на авторов Windows-only инструмента в этой индустрии посмотрели бы, мягко говоря, странно:)
Инструментов такого рода хватает (лидер сейчас — Atrenta SpyGlass), но все они стоят немалых денег.
Могу сказать, что насчёт «типовые ошибки такие же, как в С», вы слегка заблуждаетесь. То есть да, какую-то часть можно так выловить, но для полноценного поиска ошибок необходима хотя бы частичная эмуляция RTL-синтеза — а здесь на одном только опыте написания статических анализаторов далеко не уедешь. Плюс ко всему — неплохо бы быть в теме проектирования ASIC/FPGA и уметь писать на SV и VHDL. Ну и last but not least — на авторов Windows-only инструмента в этой индустрии посмотрели бы, мягко говоря, странно:)
Для JavaScript неплохо было бы сделать, так как он популярен, но в нём можно допустить кучу орфографических ошибок (а кроме того, всяких ошибок контекста переменных, отсутствие var'ов и так далее), и многое он наследует от C/C++.
Так есть уже подобные анализаторы же. Вот например: jsfiddle.net/9vvZ4/1/ ткните там в меню кнопку «JSHint»
Проверка им стиля кода отбивает всё желание его использовать. Ну ладно ещё разветвления без фигурных скобок (из-за отсутствия скобок можно ошибиться в отступах, классический if if else), но чем ему битовые операторы и ==null не угодили?
>>> undefined==null
true
>>> undefined===null
false
true
>>> undefined===null
false
Настраивается же.
Но в любом случае, сравнивать jshint/jslint с PVS-Studio несерьезно, конечно.
Но в любом случае, сравнивать jshint/jslint с PVS-Studio несерьезно, конечно.
Огромное вам спасибо за нахождение ошибок.
Вы не могли бы мне скинуть полный отчет по ошибкам в личку (в буст рассылке нет письма об ошибках :( )? Постараемся исправить их до следующего релиза.
Вы не могли бы мне скинуть полный отчет по ошибкам в личку (в буст рассылке нет письма об ошибках :( )? Постараемся исправить их до следующего релиза.
Просто мозг человек на совершенен, и мы все допускаем ошибки.Так к месту, что и исправлять не стоит :)
Фрагмент N4. Классика жанра. SOCKET
…
Такая проверка незаконна. Следует сравнивать переменную с константой SOCKET_ERROR. Однако, программисты часто ленятся и пишут «socket < 0» или «socket >= 0».
В Linux тип SOCKET знаковый и подобная халтурная работа сходит с рук. ...
Чувствуется Windows-центричный менталитет. :-) В предыдущей статье вы сформулировали ту же мысль более нейтрально.
Да, для кроссплатформенного кода сравнение с нулём — безусловно ошибка, но слова «незаконный» и «халтурный» всё-таки не совсем подходят, потому что в линуксовых манах (и в POSIX) прямо сказано, что ф-ция возвращает в случае ошибки число -1, а не константу SOCKET_ERROR. Да и нет такой константы вообще ни в Линуксе, ни в стандартах.
Наткнулся в файле Winsock.h (из Windows SDK) на следующий фрагмент:
Что бы это значило?
/*
* This is used instead of -1, since the
* SOCKET type is unsigned.
*/
#define INVALID_SOCKET (SOCKET)(~0)
#define SOCKET_ERROR (-1)
Что бы это значило?
unsigned a = x;
if (a < 0) и if (a == -1) это разные вещи.
if (a < 0) и if (a == -1) это разные вещи.
1. Зачем две константы, если они эквивалентны?
2. В каких случаях может возникнуть необходимость сравнивать беззнаковое целое с отрицательным числом вместо использования положительной константы?
3. Приведенный вами код выглядит подозрительно, возможно некоторые компиляторы даже генерируют предупреждение. Неужели для сокетов корректно писать «if (socket==-1)»?
2. В каких случаях может возникнуть необходимость сравнивать беззнаковое целое с отрицательным числом вместо использования положительной константы?
3. Приведенный вами код выглядит подозрительно, возможно некоторые компиляторы даже генерируют предупреждение. Неужели для сокетов корректно писать «if (socket==-1)»?
К кому обращены эти вопросы? :)
3. Может быть, но лучше не надо. Во-первых, есть вероятность того, что какая-нибудь гипотетическая ОС присваивает разные коды ошибок сокетам, а во-вторых, -1 — это mov reg, 0xffffffff, а 0 — это xor reg, reg.
Это значит, что вы невнимательно читаете комментарии.
UFO just landed and posted this here
(signed SOCKET)(socket) < 0 работало бы?
Или *((signed SOCKET *)(&socket)) < 0.
Или *((signed SOCKET *)(&socket)) < 0.
«Лишь бы дороги не делать» © не помню откуда :)
а будет сокет со значением 0xF0402471 — иии?
UFO just landed and posted this here
Естественно больше. Но для начала, попробуйте хотя-бы найти другие 3-4 ошибки.
UFO just landed and posted this here
Очень хорошо. Я вот тоже отписал о 976 очень подозрительных местах в разных проектах. К сожалению, я не изучил Boost подробнее. Возможно, я просмотрел ещё несколько ошибок, которые были в логе. Но пожалуй, я лучше проверю ещё что-то. :)
Подозреваю, что в последнем фрагменте (вычитание дат) преследуется цель получить не целочисленный ноль, а нулевое значение типа date_duration, и, возможно, вычитание даты из самой себя — наиболее приемлимый путь.
Во фрагменте №7 структура называется identity_element, и его value должно быть 0. Но, так как шаблоны и всё такое, то просто 0 писать нельзя, нужен ноль правильного типа.
Возможно. Поэтому я всегда говорю, что могу быть не прав. И что разработчики должны сами проверять проекты. Мне может не понравится корректный код, и при этом я пропущу другую настоящую ошибку.
Ну ок, и что в такой ситуации делать разработчику?
По моему опыту борьбы с анализаторами могу представить следующие варианты:
— Исправить «ошибку», например вставив static_cast<date_duration>(0) — а static_cast возьмет и не скомпилируется, и придется делать reinterpret_cast — а с него-то и начнинается самая жесть и капец проекта.
— Забить на этот варнинг. — Как и еще на тысячу других «таких же». Посмотришь, потыкаешь в некоторые, и отключишь его совсем.
— Выключить варнинг локально комментом или прагмой — Очень сомневаюсь, что такой коммит сможет попасть в буст. Просто потому, что буст это буст, а PVS — ну, он, скажем так, не настолько популярный.
По моему опыту борьбы с анализаторами могу представить следующие варианты:
— Исправить «ошибку», например вставив static_cast<date_duration>(0) — а static_cast возьмет и не скомпилируется, и придется делать reinterpret_cast — а с него-то и начнинается самая жесть и капец проекта.
— Забить на этот варнинг. — Как и еще на тысячу других «таких же». Посмотришь, потыкаешь в некоторые, и отключишь его совсем.
— Выключить варнинг локально комментом или прагмой — Очень сомневаюсь, что такой коммит сможет попасть в буст. Просто потому, что буст это буст, а PVS — ну, он, скажем так, не настолько популярный.
Однако, путь для этого типизированного нуля выбран больно уж странный.
При том, что дефолтный конструктор создаёт именно нейтральное значение:
По крайней мере, в бусте 1.51.
Может, в следующих версиях буста что-то резко поменялось?
Так, на всякий случай: если программист хочет экономить на спичках написать дефолтный конструктор, который НЕ инициализирует объект, и наряду с ним предусмотреть инициализацию нейтральным/сигнальным/терминальным значением, то есть такой приём:
При том, что дефолтный конструктор создаёт именно нейтральное значение:
explicit date_duration(duration_rep day_count = 0) : base_type(day_count) {}
По крайней мере, в бусте 1.51.
Может, в следующих версиях буста что-то резко поменялось?
Так, на всякий случай: если программист хочет
class Foo
{
int x, y, z;
public:
// типизированный тэг
enum zeroinit_t { zeroinit }; // так
struct zeroinit {}; // или так
Foo() {} // дефолт и экономия процессорного времени
Foo(zeroinit_t) : x(0), y(0), z(0) {} // инициализация (причём конструктор можно делать explicit, а можно и не делать - по вкусу)
.....
};
.....
Foo f; // не инициализирован
Foo g(Foo::zeroinit); // если тэг - перечисление
Foo h(Foo::zeroinit()); // если тэг - структура
UFO just landed and posted this here
Зачем так делаете: http ://www.viva64.com/go.php?url=NNNN? Я привык наводить мышкой на ссылку и решать, кликать или нет.
Или вы скидки даете активно кликающим?
Или вы скидки даете активно кликающим?
Мы временами запускаем программу. Видим ссылки, которые отвалились. По возможности, находим новое местоположение статей и правим в базе. В результате, мы более-менее стараемся поддерживать все ссылки в наших материалах в адекватном состоянии. Как ни открой статью на стороннем сайте 5-ти летней давности — ни одна ссылка не работает. А мы заботимся о наших читателях.
Ну, и заодно, собираете статистику для маркетологов.
Вы, наверное, себе целую корпорацию нафантазировали… :) К моему сожалению, это не так.
Маркетологов у нас нет. Все по немного занимаются продвижением. Но если хотите, меня можете назвать главным маркетологом. Так как в основном я на внешний мир воздействую и придумываю всякое разное, веду твиттеры и т.п. Кстати, присоединяйтесь к твиттеру. Часто публикую статьи по теме Си++ и прочего.
Нет, не собираем. Это у меня бзик на тему битых ссылок. Уж очень иногда раздражает. Я даже статью на эту тему писал "Д'Артаньян и интернет, или работа над проблемой битых ссылок".
Маркетологов у нас нет. Все по немного занимаются продвижением. Но если хотите, меня можете назвать главным маркетологом. Так как в основном я на внешний мир воздействую и придумываю всякое разное, веду твиттеры и т.п. Кстати, присоединяйтесь к твиттеру. Часто публикую статьи по теме Си++ и прочего.
Нет, не собираем. Это у меня бзик на тему битых ссылок. Уж очень иногда раздражает. Я даже статью на эту тему писал "Д'Артаньян и интернет, или работа над проблемой битых ссылок".
Интересно, много ли было ложных срабатываний? И сколько человеческого времени ушло на поиск описанных багов (учитывая расследование и отсеивание ложных срабатываний).
UFO just landed and posted this here
На Хабре есть наши клиенты, включая клиентов Site-лицензий.
Конкретнее по Вашему случаю — во-первых, а зачем Вы смотрите на Site-лицензию, если она для вашей команды не подходит? Может быть Вам вполне будет достаточно обычной лицензии?
Во-вторых, посчитайте, сколько тратит компания на одного программиста в месяц? Сравните это с нашей ценой…
Мы готовы лично Вам продемонстрировать ценность нашего продукта, напиши мне в почту, я более конкретно опишу.
Конкретнее по Вашему случаю — во-первых, а зачем Вы смотрите на Site-лицензию, если она для вашей команды не подходит? Может быть Вам вполне будет достаточно обычной лицензии?
Во-вторых, посчитайте, сколько тратит компания на одного программиста в месяц? Сравните это с нашей ценой…
Мы готовы лично Вам продемонстрировать ценность нашего продукта, напиши мне в почту, я более конкретно опишу.
UFO just landed and posted this here
Вы вполне можете начать пользоваться не всей командой. Что касается кряков — то кряки не дают поддержки, а поддержка штука полезная.
У вас есть Visual C++ проекты? Хотите устроим тест-драйв на вашем коде и попробуем найти несколько ошибок?
У вас есть Visual C++ проекты? Хотите устроим тест-драйв на вашем коде и попробуем найти несколько ошибок?
UFO just landed and posted this here
UFO just landed and posted this here
Клиенты есть уже.
UFO just landed and posted this here
Надо понимать, что «Microsoft» означает, что какой-то конкретной команде приглянулся инструмент и они купили его себе. Это (к сожалению) не означает, что продана лицензия на весь Microsoft. Такие продажи мы делать пока не умеем. :) Такие продажи делают Coverity и прочие гиганты. В общем-то, в такие компании можно продавать по несколько раз. :)
Вопрос не понятен. Это список из тех компаний, которые покупали и были не против, чтобы мы разместили их логотип. Есть ещё компании, которые, по каким-то причинам, не разрешают упоминать их.
А какие кампании реально купили и используют а не скачали чтобы посмотреть?
Вопрос не понятен. Это список из тех компаний, которые покупали и были не против, чтобы мы разместили их логотип. Есть ещё компании, которые, по каким-то причинам, не разрешают упоминать их.
А в каком порядке они у вас перечислены? В порядке приобретения лицензий? Не логичнее поместить на первом месте таких узнаваемых гигантов, как Microsoft, Bosh и IDSoftware?
«комментарий удален...» поздно отписался.
Предлагаю посмотреть на наш новый инструмент — CppCat. Это облегчённый статический анализатор кода для Visual C++. Для небольших команд это очень хорошая альтернатива PVS-Studio ценой в $250 за лицензию.
UFO just landed and posted this here
Да, к сожалению, у нас редко появляются клиенты, пришедшие с Хабра. Однако бывает и такое. В основном, это иностранные компании. Некоторые используют продукт не один год.
А на Хабре зато интересно. Активное общение. Без этого скучно. Где ещё тебя м… ом обзовут, и ты ответить можешь. :) Интересно ведь пообщаться! И иногда попадаются ценные пожелания/советы.
Важную составляющую в цену вносит поддержка. Попробуйте у разработчиков DevPartner/ Bounds Cheсker что-то выпросить изменить. А тут вот мы. Готовы к общению и идеям. И в почте не люди-роботы отвечают, а я и мои коллеги. Мы оперативно готовы что-то кому-то сделать, поправить или сделать спец режим. Люди в восторге от скорости, с которой мы отзываемся и делаем что-то. Возможно, если компания разрастется, мы так не сможем. Но мы будем стараться до последнего сохранить скорость общения и реакции.
В том числе, мы прислушиваемся и к просто дельным советам и пожеланиям. Вот, например фраза из совсем свежей переписки. Надеюсь, человек не обидится за использование :)
… Спасибо за ответы, но честно говоря, немного настораживает такая «оперативность в реализации замечаний в желании угодить клиенту». Я конечно понимаю, правило «клиент всегда прав» и всё такое, но во-первых, мы пока ещё не ваш клиент (и наш директор не охотно соглашается на доп. затраты), а во-вторых,… (дальше к делу не относится) ....
А на Хабре зато интересно. Активное общение. Без этого скучно. Где ещё тебя м… ом обзовут, и ты ответить можешь. :) Интересно ведь пообщаться! И иногда попадаются ценные пожелания/советы.
Важную составляющую в цену вносит поддержка. Попробуйте у разработчиков DevPartner/ Bounds Cheсker что-то выпросить изменить. А тут вот мы. Готовы к общению и идеям. И в почте не люди-роботы отвечают, а я и мои коллеги. Мы оперативно готовы что-то кому-то сделать, поправить или сделать спец режим. Люди в восторге от скорости, с которой мы отзываемся и делаем что-то. Возможно, если компания разрастется, мы так не сможем. Но мы будем стараться до последнего сохранить скорость общения и реакции.
В том числе, мы прислушиваемся и к просто дельным советам и пожеланиям. Вот, например фраза из совсем свежей переписки. Надеюсь, человек не обидится за использование :)
… Спасибо за ответы, но честно говоря, немного настораживает такая «оперативность в реализации замечаний в желании угодить клиенту». Я конечно понимаю, правило «клиент всегда прав» и всё такое, но во-первых, мы пока ещё не ваш клиент (и наш директор не охотно соглашается на доп. затраты), а во-вторых,… (дальше к делу не относится) ....
у меня контора лям+ в месяц рублей зарабатывает
1000'000 белорусских рублей = 112.11 долларов США
:)
UFO just landed and posted this here
Всё просто. Если вы не покупаете — то не покупаете. А если у них перестанут покупать — то они подумают. А раз цена такая — значит она вполне адекватна.
UFO just landed and posted this here
Вы не поверите, но в мире в целом воровать не принято.
Да, мы знаем, что существуют кряки и кейгены. Но не боремся с ними. Ну разве что изредка, немного что-то поменяем. Тот кто не готов купить, все равно не купит. Мы не верим в «упущенную выгоду». Плюс такие люди лишают себя сопровождения, ответов на вопросы. А вопросы нам иногда задают ого-го. Ответ может дать только квалифицированный программист.
Предлагаю посмотреть на наш новый инструмент — CppCat. Это облегчённый статический анализатор кода для Visual C++. Одна лицензия — $250
У меня столько нет…
Cкажите, пожалуйста, Ваши инструменты CppCat или PVS-Studio умеют для анализа прозрачно притворяться компилятором cl?
Чтобы можно было, например, добавить путь к этой обертке в PATH, запустить сборку проекта, а потом почитать готовый отчет?
Чтобы можно было, например, добавить путь к этой обертке в PATH, запустить сборку проекта, а потом почитать готовый отчет?
По-моему, с такими ценами проще что-нибудь крупное и популярное написать, выпустить и дождаться, пока сами Viva64 проверят.
Только надо помнить, что толку от такой разовой проверки крайне мало. Смысл статического анализа в регулярности. Вы ведь варнинги компилятора не раз в 3 года включаете, чтобы посмотреть, что и как? (вопрос риторический. можно не отвечать :)
Так они ещё и ключик на время дают.
Ну хорошо. Вы ведь включаете варнинги компилятора не раз в 3 года на 2 недели? )
А я их и не выключаю.
Ну кроме _CRT_SECURE и C4996, потому что они бесят.
Ну кроме _CRT_SECURE и C4996, потому что они бесят.
А теперь попробуйте ещё PVS-Studio к ним добавить.
UFO just landed and posted this here
5+
Можете меня не извинять, но ваши комментарии в этом топики уже поднадоели. Если вас не устраивает цена и качество PVS-Studio, просто проигнорируйте его и не занимайтесь спамом своего мнения.
А вообще странно, что вы не смогли оценить всей полезности этого инструмента. На Хабре уже несколько десятков статей, анализирующих ошибки в популярных open-source проектах из различных уголков мира IT, и из геймдева тоже. Некоторые, действительно, являются следствием машинальных действий программистов. Некоторые — более интересны, такие, о которых ранее и не задумывался. И не смотря на то, что PVS-Studio я не использую, потому чтонищеброд масштабы проектов не те, эти статьи, хоть они и являются по большому счету рекламными, открывают глаза на вот те ошибки, о существовании которых ранее и не задумывался, и помогают писать код более ответственно и аккуратно.
Ну и опять же, то, что вам не нужен PVS-Studio не означает, что он не нужен вообще никому. Возможно, у вас проекты — говно-социалочки под мобилочки с небольшой кодовой базой и временем жизни.
А вообще странно, что вы не смогли оценить всей полезности этого инструмента. На Хабре уже несколько десятков статей, анализирующих ошибки в популярных open-source проектах из различных уголков мира IT, и из геймдева тоже. Некоторые, действительно, являются следствием машинальных действий программистов. Некоторые — более интересны, такие, о которых ранее и не задумывался. И не смотря на то, что PVS-Studio я не использую, потому что
Ну и опять же, то, что вам не нужен PVS-Studio не означает, что он не нужен вообще никому. Возможно, у вас проекты
UFO just landed and posted this here
Если больной темой является оптимизация, то тут PVS-Studio не помощник. Это удел динамических анализаторов.
Помимо отложенной ошибки, есть ещё опечатки. Они точно есть и их много. Их «тыщи» в свежем коде. Доказательство — их можно найти даже в старом и отлаженном коде. Раз они есть там, то в свежем коде их вообще много. Вот я вроде в курсе, как делать не надо. Но разве меня это защищает? Вот недавно скопипастил:
Хорошо, что PVS-Studio тут же одёрнул: V656 Variables 'l', 'r' are initialized through the call to the same function. It's probably an error or un-optimized code. Consider inspecting the 'SafeSkipParentesis(pParentExpr)' expression. Check lines: 345, 346. functionselector.cpp 346
Должно было быть:
Я бы сидел потом тупил, почему работает не так как задумано. Зачем тратить время на такие глупые ошибки? Я лучше над более сложными ошибками и алгоритмами подумаю.
А ещё, например, анализатор подсказывает о том, о чём человек может вообще не догадываться. Одной из таких диагностик является V597. Примеры.
Помимо отложенной ошибки, есть ещё опечатки. Они точно есть и их много. Их «тыщи» в свежем коде. Доказательство — их можно найти даже в старом и отлаженном коде. Раз они есть там, то в свежем коде их вообще много. Вот я вроде в курсе, как делать не надо. Но разве меня это защищает? Вот недавно скопипастил:
const Ptree *l = SafeSkipParentesis(pParentExpr); const Ptree *r = SafeSkipParentesis(pParentExpr);
Хорошо, что PVS-Studio тут же одёрнул: V656 Variables 'l', 'r' are initialized through the call to the same function. It's probably an error or un-optimized code. Consider inspecting the 'SafeSkipParentesis(pParentExpr)' expression. Check lines: 345, 346. functionselector.cpp 346
Должно было быть:
const Ptree *l = SafeSkipParentesis(First(pParentExpr)); const Ptree *r = SafeSkipParentesis(Third(pParentExpr));
Я бы сидел потом тупил, почему работает не так как задумано. Зачем тратить время на такие глупые ошибки? Я лучше над более сложными ошибками и алгоритмами подумаю.
А ещё, например, анализатор подсказывает о том, о чём человек может вообще не догадываться. Одной из таких диагностик является V597. Примеры.
может быть экспириенс не прокачен?
Не исключено.
лично мне фантзия не подсказывает пример программерской ошибки в коде которая не проявит себя синтаксически или логически в момент тестирования продукта
Если вы о ручном тестировании тестерами, т.е. взяли игру и играем в нее, пытаясь обнаружить баги, то надо или очень много тестеров, или очень много времени, чтобы обнаружить те баги, которые обнаружит толпа игроков. Ну только если они совсем уж не очевидные.
Если вы о юнит-тестировании, то эти тесты пишутся теми же программистами, которые эти ошибки и совершают. В написании тестов тоже можно накосячить, не говоря уже о том, что качественно писать тесты с максимальным покрытием тоже нужно уметь.
Да и не нужно тут полагаться на свою фантазию: откройте блог PVS-Studio и просмотрите их статьи. Там детально и структурированно описано множество ошибок, некоторые из которых совершены программистами с весьма обширным опытом.
а если ошибка никак не проявляется себя — то может быть и нет смысла тратить 9к чтобы ее найти?
Во-первых, да, может быть и не стоит. Цена ошибки у каждого продукта своя.
Во-вторых, то, что ошибка себя не проявляет в конкретный момент времени, еще не означает, что ее нет. Закон Мерфи всегда готов о себе напомнить.
Теперь ждать не надо! Предлагаю посмотреть на наш новый инструмент — CppCat. Это облегчённый статический анализатор кода для Visual C++. Для небольших команд это очень хорошая альтернатива PVS-Studio. Цена: $250 за лицензию.
В статье все так красиво написно(как и в других статьях про PVS-Studio)… берем инструмент запускаем на boost(или любом другом проекте), и получаем 5-10 мест с ошибками/опечатками… но это наверняка не правда.
Последний раз когда я брал в руки этот инструмент(было давно), это выглядело примерно так:
Ставим PVS-Studio, запускам студию с большим проектом… все висит… ждем, запускаем анализ… много ждем… получает 100500 сообщений… счастье не наступило… :(… (кстати после этого я студию переставлял — PVS-Studio и студия что то не поделили ...)
А не могли бы вы сделать видео вместо статьи?
По типу: тут мы ставим PVS-Studio, тут запускаем анализ на очень большом проекте X, вот все быстро отработало, вот мы отключили ложные срабатывания, а вот наши ошибки… profit!!!
Последний раз когда я брал в руки этот инструмент(было давно), это выглядело примерно так:
Ставим PVS-Studio, запускам студию с большим проектом… все висит… ждем, запускаем анализ… много ждем… получает 100500 сообщений… счастье не наступило… :(… (кстати после этого я студию переставлял — PVS-Studio и студия что то не поделили ...)
А не могли бы вы сделать видео вместо статьи?
По типу: тут мы ставим PVS-Studio, тут запускаем анализ на очень большом проекте X, вот все быстро отработало, вот мы отключили ложные срабатывания, а вот наши ошибки… profit!!!
Предлагаю попробовать ещё раз. Если будут проблемы — напишите в поддержку. Мы стараемся помочь всем.
Написал статью: "Работа с ложными срабатываниями в PVS-Studio и CppCat".
Кстати, отзыв от команды МТА. Выдали им на недельку ключ, чтобы проект внимательней проверить. Обсуждаем возможность предоставить им версию на постоянной основе в обмен на ссылку на сайте.
Пердлагаю проверить ваши продуктом это.
narod.ru/disk/45533488001.b71b2fe6e6acfd2682b674d3a2f6ae67/main.cpp (беременным, яросным адептам идеального форматирования и просто брезгливым лучше не смотреть)
Вообще у меня пара вопросов — я тут проверил ваши продуктом пару своих хобби проектов, стало интересно — чем плоха индексация массива типом отличным от size_t? Компиляторы по моим опытам на этом практически никогда не спотыкаются.
narod.ru/disk/45533488001.b71b2fe6e6acfd2682b674d3a2f6ae67/main.cpp (беременным, яросным адептам идеального форматирования и просто брезгливым лучше не смотреть)
Вообще у меня пара вопросов — я тут проверил ваши продуктом пару своих хобби проектов, стало интересно — чем плоха индексация массива типом отличным от size_t? Компиляторы по моим опытам на этом практически никогда не спотыкаются.
Вы лучше сами скачайте триал и проверьте.
Прошу сделать из этого проект, компилируемый (можно без линковки) в VS2005-2012. С непонятным огрызком возиться не хочется.
Про size_t. Если много памяти не выделяете, то почти всегда ничем. А если массив может стать более UINT_MAX, здесь начинаются разные нюансы.
1) На таких объемах начинается сказываться скорость работы с массивом. См. пример из статьи "Что такое size_t и ptrdiff_t" (см. раздел «Быстродействие кода, использующего типы ptrdiff_t и size_t»). А вот тут пример с числами (см. раздел «Использование правильных типов данных с точки зрения 64-битных технологий»).
2) Банально int не подходит для индексации больших массивов. При этот, что забавно, иногда из-за оптимизации, может казаться, что код работает. Описание такого поведения есть здесь: "64-битный конь, который умеет считать".
3) Начинаются различные ошибки переполнения. На эту тему можно почитать:
Про size_t. Если много памяти не выделяете, то почти всегда ничем. А если массив может стать более UINT_MAX, здесь начинаются разные нюансы.
1) На таких объемах начинается сказываться скорость работы с массивом. См. пример из статьи "Что такое size_t и ptrdiff_t" (см. раздел «Быстродействие кода, использующего типы ptrdiff_t и size_t»). А вот тут пример с числами (см. раздел «Использование правильных типов данных с точки зрения 64-битных технологий»).
2) Банально int не подходит для индексации больших массивов. При этот, что забавно, иногда из-за оптимизации, может казаться, что код работает. Описание такого поведения есть здесь: "64-битный конь, который умеет считать".
3) Начинаются различные ошибки переполнения. На эту тему можно почитать:
Подскажите пожалуйста, а у вас есть какая-то интеграция с CI, в частности интересует Jenkins?
Да, это все есть и удобно работает. См. Использование PVS-Studio вместе с системами continuous integration. Если есть трудности или непонимание — пишите нам в поддержку, все покажем и расскажем.
Я немного другое имел ввиду, хочется что-то со статистикой, графиками, которые можно показать менеджерам и т.п., что-то вроде: wiki.jenkins-ci.org/display/JENKINS/Cppcheck+Plugin
Каждый раз, когда читаю статьи про PVS-Studio, очень рад, что это земляки из Тулы. :o)
Ребята вы молодцы!
Ребята вы молодцы!
Sign up to leave a comment.
PVS-Studio наконец то добрался до Boost