PVS-Studio ROI: как не терять миллионы (черновой вариант статьи)

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

    Вашему вниманию предлагается описание калькулятора, позволяющего рассчитать возврат инвестиций от использования в процессе разработки статического анализатора кода PVS-Studio.

    Новый вариант статьи: RU, EN.

    Калькулятор по умолчанию работает в режиме «скептик». Однако, мы надеемся, что, прочитав статью, вы согласитесь, что правильнее будет переключиться в режим: Я доверяю расчётам, описанным в статье «PVS-Studio ROI» :).

    Ценность часа работы программиста


    Для того чтобы определить, сколько денег вернёт PVS-Studio, для начала надо рассчитать, какова настоящая стоимость (ценность) часа работы программиста.

    Дело в том, что недостаточно просто взять месячную зарплату программиста и поделить её на 160 (среднее количество часов в месяце при 40 часовой рабочей неделе).

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

    При этом использование программиста должно быть выгодным, то есть он прямым или косвенным образом должен приносить чистую прибыль компании. На практике это означает, что работа программиста в зависимости от ситуации приносит в 2-10 раз больше денег, чем тратится на его зарплату. Ещё раз подчеркну, что программисты здесь ничем не отличаются от любых других наёмных сотрудников. Некоторые особенности есть у аутсорсинга, но это отдельная история.

    Для скептически настроенных читателей мы возьмем коэффициент 2. То есть программист приносит в 2 раза больше денег, чем тратится на его зарплату. На самом деле, компания с такими коэффициентами балансирует на грани безубыточности. Более честно брать коэффициент, равный по крайней мере 3.

    Что всё это означает? Если программист выпал из процесса разработки на 1 час, то компания недополучила не сумму равную часу его работы, а в 2 или 3 раза больше.

    Есть и второй коэффициент, влияющий на цену настоящего рабочего часа. Дело том, что сотрудник вовсе не программирует 8 часов в день. Невозможно представить, что человек, как пришел с утра и как сел, так 8 часов не отрываясь занимается с кодом. Программист работает с Trello, участвует в совещаниях, отвечает в почте, участвует в code-review. В конце концов, ему ещё надо ходить в туалет и пить чай :). В лучшем случае непосредственно с кодом он будет работать 6 часов. А если вы читаете этот текст не в режиме скептика, то понимаете, что на самом деле 4 часа куда более правдоподобное время.

    Вот и получается, что стоимость часа нужно дополнительно умножить на 8/6=1.33 или на 2.

    Теперь перемножим два рассмотренных коэффициента и получим итоговый коэффициент, на который нужно умножать стоимость часа работы программиста:

    • коэффициент для скептиков: 2 * 1.33 = 2.66
    • коэффициент более близкий к реальности: 3 * 2 = 6

    На практике коэффициенты будут чуть больше, так как мы не учитываем в расчётах отпуск.

    Давайте теперь посмотрим, что означает для компании выпадение программиста с зарплатой 100 000 рублей из рабочего процесса на 1 час.

    Примечание. Для понимания отметим, что на самом деле компания тратит на выплату зарплаты больше, чем 100 000 рублей. Следует учесть, что компания делает отчисления в различные фонды («зарплатные налоги»). А на руки после удержания 13% налога человек получает 87 000 рублей. Для упрощения расчётов не будем учитывать отчисления и примем, что компания тратит только 100 000. Я решил это отметить, чтобы показать, что делаю округления не в пользу PVS-Studio.

    При зарплате 100 000 рублей ставка 1 часа работы составит 625 рублей. Получается, что если программист на 1 час отвлёкся на правку ошибки, то компания не сможет из-за этого заработать:

    • для скептика: 625 рублей/час * 2.66 = 1660 рублей/час
    • в реальности более чем: 625 рублей/час * 6 = 3750 рублей/час

    Это и есть настоящая стоимость (ценность) одного часа программиста, когда он занят полезным делом.

    Сколько часов экономит PVS-Studio


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

    Из эмпирических соображений для скептика мы скажем, что анализатор сэкономит как минимум 2 часа программиста в неделю, избавив его от необходимости искать баги, найденные юнит-тестами или отделом тестирования. Да, само исправление бага обычно занимает минуты, но вот попытки воспроизвести проблему, переписки в багрекере, прогоны тестов, мержи и так далее запросто съедят эти 2 часа.

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

    В году приблизительно 52 недели. В год анализатор экономит следующее количество часов настоящей работы программиста:

    • скептическое отношение к статическому анализу: 2 часа * 52 = 104 сэкономленных часа
    • позитивное отношение: 3 часа * 52 = 156 сэкономленных часа

    Пришло время считать ROI


    Тогда использование PVS-Studio одним программистом с зарплатой в 100 000 рублей будет возвращать бизнесу в год:

    • Если вы скептик: 1660 рублей/час * 104 часа = 172 640 рублей
    • Реально: 3750 рублей/час * 156 часов = 585 000 рублей

    Возьмём теперь типовую команду разработчиков из 10 человек. Внедрив PVS-Studio, можно ожидать, что благодаря сэкономленному времени команда сможет выполнить полезную работу стоимостью:

    • Скептик: 1 726 400 рублей
    • Реальность: 5 850 000 рублей

    Окончательная формула


    Итак, давайте теперь объединим всё в единую формулу, которая используется в калькуляторе.

    Обозначим месячную зарплату программиста как S.

    Количество программистов в команде обозначим как N.

    • Формула для скептика: N * (S / 160) * 2.66 * 104
    • Реальная формула: N * (S / 160) * 6 * 156

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

    Верхняя строка: количество программистов в команде. Левый столбец: зарплата разработчиков.

    Таблица для скептиков:

    Таблица N1. Скептик. Красный: использование PVS-Studio может быть неоправданным. Зеленый: использование статического анализатора оправдано и полезно. Голубой: использование однозначно выгодно.


    Таблица N1. Скептик. Красный: использование PVS-Studio может быть неоправданным. Зеленый: использование статического анализатора оправдано и полезно. Голубой: использование однозначно выгодно.

    Реальная таблица:

    Таблица N2. Реальность. Красный: использование PVS-Studio может быть неоправданным. Зеленый: использование статического анализатора оправдано и полезно. Голубой: использование однозначно выгодно.


    Таблица N2. Реальность. Красный: использование PVS-Studio может быть неоправданным. Зеленый: использование статического анализатора оправдано и полезно. Голубой: использование однозначно выгодно.

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

    Примечание


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

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

    Заключение


    Итак, хотя расчеты могут подходить не для всех компаний, надеюсь, что мне удалось продемонстрировать, как подойти к оценке эффективности использования PVS-Studio с точки зрения бизнеса в целом.
    PVS-Studio
    787,00
    Static Code Analysis for C, C++, C# and Java
    Поделиться публикацией

    Комментарии 85

      +5
      Из полученных цифр надо ещё вычесть стоимость лицензии. Какова она?
      На сайте цифр нет, только предложение «написать нам».
        –6
        Это очень обдуманное и взвешенное решение не говорить сразу о цене. Если услышать просто число, каким бы оно не было, первая реакция человека — это недопустимо много (это больше моей месячной зарплаты!). Поэтому, мы хотим прийти к режиму, что в начале человек оценивает пользу от анализатора кода для команды, а только затем узнаёт цену на него. Тогда восприятие цены будет правильным.
          +7
          Это не «просто число», это тот минимальный показатель, после которого траты на Ваш продукт будут оправданы.

          Из приведённой Вами таблицы 2 видно, что для одного человека с зарплатой менее 200 000 покупка может быть не оправдана. Но почему? Стоимость лицензии может достигать 900 000 в год на человека? Но при этом она оправдана для пятерых, «выхлоп» которых 1 755 000. Но ведь пять лицензий должны стоить в разы дороже одной (даже с учётом потовых скидок). Вообще неясно как с такими цифрами работать.

          Плюс есть поправка на опыт. Хороший программист не просто будет читать объяснения анализатора, но и осознавать их. А значит в дальнейшем будет повторять эти ошибки реже, или вовсе перестанет их допускать. Т.е. цифры в столбцах пойдут вниз, а стоимость лицензии потеряет только 20%.

          P.S. Я прекрасно понимаю ценность Вашего продукта. Я сам ездил в командировку только для того, чтобы у заказчика обнаружить throw(), который «выпал» из проверки наличия ошибки, и кидался просто так, потому что всё хорошо. И такую ошибку, вероятно, анализатор показал бы заранее.
            –1
            Вы правы. Но чтобы этот показатель правильно осознать, хорошо начать не с цены, а с объяснения ценности продукта. Это очень, очень важно. Любая цена вне контекста воспринимается как завышенная. Даже когда мы продавали CppCat за $250 было масса возмущающихся. Пример реального отзыва: «Не знаю в каком мире вы живете, но мне кажется что многие компании склонны переоценивать важность своего софта. На 9000 рублей можно кормить двух человек месяц.» (тогда 1$ был равен около 35 рублей). У нас нет цели спрятать цены, как думают некоторые. У нас есть цель, чтобы она была воспринята правильно после предварительной настройки восприятия :).

            P.S. Статические анализаторы кода приносят пользу всему проекту, а не только тому пользователю, которые его запускают. Поэтому у нас, как и у многих, нет Single User лицензии. И, да, на одного человека это скорее всего не выгодно.
              +1
              Цена для всех одинаковая, или если вы во время «объяснения ценности продукта» понимаете, что заказчик крупный и платёжеспособный, то можете предложить более высокую цену?
                +1
                Мы можем предложить ему более «крупную» лицензию и обсудить это.
            0
            Это почти НЛП выходит
          +1

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


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


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

            +2
            Неужели столь частое окучивание аудитории хабра со столь неприкрытым впариванием пвсстудии (может, и неплохой инструмент, речь не об этом) все ещё работает? По мне, так оно уже в обратную сторону работает, блевать хочется, как единорог на вашем лого.
            Время от времени программисты и менеджеры просят нас помочь им обосновать важность приобретения лицензии PVS-Studio для их компании. Особенно я прочувствовал это после цикла осенних конференций. Подходят люди и просят какие-то материалы, которые помогут им презентовать наш инструмент перед начальством. Это статья является попыткой помочь им обосновать ценность инструмента.

            А по поводу ваших подсчётов — обычная манипуляция. Нет там экономии такой большой. Это видно и по вашему анализу опен сорс проектов. Все ошибки довольно незначительные и редко проявляющиеся, собственно, поэтому даже необязательные к исправлению. Потому вы их и нашли, а не пользователи и сами разработчики. При этом для нахождения этих ошибок приходится перелопатить тонны ложных срабатываний, а это, между прочим, тоже время программистов, которое вы «забыли» учесть.
            Про это уже много раз было. Да, ошибки исправляются альтернативно, но гораздо большей ценой. Здесь как раз показано, какие ресурсы теряются из-за неэффективного подхода к их обнаружению и исправлению. По поводу количества ложных срабатываний: Характеристики анализатора PVS-Studio на примере EFL Core Libraries, 10-15% ложных срабатываний.

            Я восхищён тем, что вы сумели сделать неплохой продукт, который даже работает, я восхищён вашим упорством по его впариванию, при том, что впаривание, очевидно, продвигается не очень, судя по тому, что это делают все те же основатели в течение многих лет, но навязчивость и неприкрытость этого впаривания раздражает.
            Осенью я стоял на стенде на таких конференциях, как TeamLead, HighLoad++, CEE SECR, YappyDays, InfoSec. Так вот, половина посетителей вообще ничего не слышала про PVS-Studio. И что интересно, половина из тех, кто никогда про нас не слышал, говорят, что читают Хабр. Так что как-то не могу согласиться, прям все знают и что мы всем впариваем :).
              +4
              Вы, разумеется, не можете согласиться, вам надо впаривать. Если вам необходимо рассказать менеджерам, которые вас спрашивают, рассказывайте на своем сайте. Но нет, вы рассказываете на хабре и всегда об одном и том же. С однобоким рассмотрением или даже с некоторым искажением фактов с целью впарить пвс студию.

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

              Уверен, что 90% аудитории уже о вас знает и вам бы освоить новые площадки. Так вы и клиентов новых получите и у аудитории хабра отторжение вызывать не будете.
                +2
                По-моему, «впаривание» не совсем верно отражает специфику этого продукта и выбранный способ продвижения.
                  +4
                  Я просто сообщаю свое мнение
                  У вас довольно специфическое мнение:
                  Все ошибки довольно незначительные и редко проявляющиеся, собственно, поэтому даже необязательные к исправлению. Потому вы их и нашли, а не пользователи и сами разработчики. При этом для нахождения этих ошибок приходится перелопатить тонны ложных срабатываний, а это, между прочим, тоже время программистов, которое вы «забыли» учесть.
                  Начиная от того, что ошибки в коде могут быть необязательными к исправлению (?) и заканчивая тем, что, оказывается, ошибки лучше не искать, потому что «время программистов». Ну что вам сказать, у PVS-studio прямо противоположное мнение и лично я его разделяю.
                    –5

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


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


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


                    Например, давайте рассмотрим комплекс питания программистов через капельницу. Типа, каждый день программисты тратят минимум часа полтора на еду. Если посчитать, то это более 350 часов в год, а значит, по самым минимальным подсчетам от пвсстудии, более 500к руб в год на одного программиста. Плюс жрут всякую вредную фигню, а это приводит к болезням и дополнительному простою. Поэтому достаточно купить на каждое рабочее место капельницу с полезной питательной смесью, и будете экономить огромные деньги.


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


                    Поскольку лично меня мишура не обманывает и я вижу суть их посыла, я и возмущаюсь. Конечно, это моё личное мнение. Важность статического анализа я прекрасно осознаю. Знаю, какие инструменты для этого есть, и пользуюсь ими. Именно поэтому однобокое рекламное рассмотрение этой области от пвсстудии мне не нравится.

                      0
                      А целевую она раздражает грубым передергиванием фактов.
                      Статья написана именно для того, чтобы изучить как он воспринимается и внести корректировки в окончательный вариант текста. Какие именно числа, приведённые в статье, кажутся неверными?
                        –2

                        Ой, ну только не надо опять искажать факты. Это у вас не первая статья, чтобы попытаться квалифицировать ее как для "изучить". Эта статья исключительно, чтобы продавать.


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


                        Похожая на продажу гомеопатии и средств для похудения. Цель которых — впарить.

                          0
                          Не верны те числа, которых в статье нет: :-)

                          1. Не учтено время, потраченное программистом на анализ отчетов и исправление (отключение) ложных срабатываний. Далеко не любая диагностика PVS-Studio однозначно определяется как баг или ложное срабатывание, над некоторыми диагностиками приходится думать долго. См. примеры из ваших же статей.
                          2. Не учтено ухудшение кода, вызванное исправлением ложных срабатываний анализатора. Такой эффект есть у юниоров и мидлов, иногда в погоне за исключением хинтов компилятора верный код заменяется неверным, зато — не вызывающим нареканий компилятора.
                          3. Не учтено время, потерянное на начальную настройку PVS-Stduio. Мы за 3 дня мучений сумели запустить её только в бесплатном режиме.
                          4. Не учтено обучение программистов. Как правило, после принудительного включения диагностики компилятора, количество найденных её багов (и не багов) уменьшается по мерее обучения программистов.
                          5. Не учтен размер кода. При написании множества простых и слабо связанных программ польза от статического анализа меньше, чем при работе над большой программой.


                          В итоге, для команды без сеньоров, PVS-Studio скорее всего нейтрален или вреден. Для команды, где один сеньор + джуны — увеличивает нагрузку на сеньора.
                            +1
                            Не учтено время, потраченное программистом на анализ отчетов и исправление (отключение) ложных срабатываний.
                            Вы исходите из предположений, что ложных срабатываний много. Но это не так. После настройки их будет около 10%. Т.е. 9 из 10 сообщений будут указывать на ошибки или явные недочёты, которые в любом случае стоит исправить, дабы не смущать коллег и анализатор. Поэтому потери времени есть, но их нельзя назвать значимыми. Если же на ложные срабатывания тратится много времени, то значит анализатор всё ещё не настроен.
                            Не учтено ухудшение кода, вызванное исправлением ложных срабатываний анализатора.
                            См. пункт выше.
                            Не учтено время, потерянное на начальную настройку PVS-Stduio. Мы за 3 дня мучений сумели запустить её только в бесплатном режиме.
                            Становитесь нашими клиентами. Мы вам поможем. И при необходимости даже улучшим отдельные диагностики.
                            Не учтено обучение программистов
                            Разве это плохо? :) Эффект то достигается. :)
                            При написании множества простых и слабо связанных программ польза от статического анализа меньше, чем при работе над большой программой.
                            Да, это так.
                              0
                              Вы исходите из предположений, что ложных срабатываний много. Но это не так. После настройки их будет около 10%.
                              Я исхожу из опыта работы с gcc c -Wall -Wextra -Wshadow -Wpointer-arith. Ложных срабатываний — меньше процента, но времени они отнимают довольно много, особенно у коллеги-миддла.

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

                              Становитесь нашими клиентами. Мы вам поможем.
                              С учетом того, что уже год (или уже два?) не отвечаете ни мне, ни коллеге — вряд ли. Да и по расчетам — мы на на грани красной и зеленой зоны.
                                +1
                                Это хорошо, но эффект от внедрения уменьшается. На второй год он меньше, чем на первый.
                                Так и цена на второй год меньше :).
                                  0
                                  Это официальное заявление? И на сколько меньше? Но мы все равно на грани красной и зеленой зоны — не Москва и 5 программеров.
                        +1
                        Да, представьте себе. Некоторые ошибки править некритично. Некоторые ошибки стоят дешевле чем цена исправления.
                        Лично у меня после разговоров с продаванами пвс-студио складывается впечатление, что продукт бесполезен для программистов, и его впаривают исключительно менеджерам.

                        К сожалению все мои попытки выяснить, насколько PVS студия эффективна имеют один ответ — это дополнительный контроль кода, это качество вашего кода, это хорошо.

                        У меня возникает знаете, неприятная ассоциация с продавцами бадов и прочих тяньши.
                        Ну знаете, когда предлагают купить целебную минеральную соль по 5 тысяч за порцию. И на вопрос — насколько эта соль эффективна, может за эти деньги лучше как-то по другому полечиться, мне отвечают «это же ваше здоровье, что может быть дороже здоровья».
                        Я не могу это объяснить, но мне кажется что качественный продукт для программистов должен продаваться по другому. Снизу, показом для программистов, непосредственно занятых анализом кода, что этот продукт улучшает их жизнь. А на данный момент он продается только сверху, только руководству, а авторы прямым текстом говорят — на мнение инженеров плевать, не они решают покупать или нет. Это знаете, отторгает.
                          0
                          Некоторые ошибки править некритично. Некоторые ошибки стоят дешевле чем цена исправления.
                          Предлагаю рассмотреть несколько конкретных примеров подобных ошибок в коде и подискутировать на эту тему. Это действительно интересно. Прошу привести именно настоящие ошибки, а не криво написанные макросы, ситуацию с которым можно поправить настройками :)
                            0
                            Прошу привести именно настоящие ошибки

                            Настоящие критичные ошибки как правило отлавливаются во время написания юнит тестов и тестирования.

                            Я за свою жизнь пользовался кучей статических анализаторов на джаве, и могу сказать — что если в конторе поставлен процесс ревью, тестирования, CI, то статические анализаторы приносят очень мало пользы, если не отрицательную. А если перечисленное выше не поставлено — то статический анализатор тем более ничего не даст.
                              +1
                              Настоящие критичные ошибки как правило отлавливаются во время написания юнит тестов и тестирования.
                              Как правило да. Но не найденные остаются в коде и потом могут долго портить жизнь. Хотя их можно было бы сразу найти. Да и зачем отлавливать что-то при тестировании, открывать баги и т.д., когда многое можно найти сразу после написания кода при помощи статического анализа.

                              то статические анализаторы приносят очень мало пользы
                              «Быть может у вас нормального анализатора не было?» ;))) Такое вполне возможно при использовании полумёртвого FindBugs. Какие анализаторы использовались?

                              И кстати, всё-таки хочется увидеть примеры ошибок, которые лучше не править. :)
                                +2
                                А давайте погоняем наш Java анализатор на вашем коде? Одни плюсы:
                                • если найдем интересные ошибки, то это полезно вам
                                • если не найдем, то будете уверены, что ничего не теряете

                                Как идея? Только берем реальный коммерческий проект с большой кодовой базой, а не тестовые примерчики. Попробуем?
                                  0
                                  А давайте, высылайте ключ.
                                    +1
                                    Вот здесь выберите «Хочу анализатор для Java» и укажите еще свой ник на Хабре, пожалуйста.
                                      0
                                      del
                                0
                                Обработка високосного года в коде ядра(!!!) OS/360. Намного лучше было бы перенести это на оператора и уменьшить размер ядра. Пример из «The myfical man-month»
                                +3
                                Снизу, показом для программистов, непосредственно занятых анализом кода, что этот продукт улучшает их жизнь.

                                Так ведь почти все статьи про PVS-Studio содержат прогоны анализатора и разбор ошибок.
                                Например, эта habr.com/company/pvs-studio/blog/431370
                                  +2
                                  Некоторые ошибки править некритично. Некоторые ошибки стоят дешевле чем цена исправления.
                                  Я уже принес попкорн: приведите пример бага и адекватной оценки его стоимости в рублях/долларах/тенге. Стоимость = сколько заинтересованная сущность потеряет (не «может потерять», не «потеряла», а именно потеряет в будущем) денег. Пример обязательно должен быть про софтверную компанию, поизводящую только софт.
                                  К сожалению все мои попытки выяснить, насколько PVS студия эффективна имеют один ответ — это дополнительный контроль кода, это качество вашего кода, это хорошо.
                                  Абсолютно весь бизнес такой: впарить что угодно за максимальные деньги. Никто вам не ответит, насколько вам действительно нужен айфон и насколько он эффективен в решении ваших задач. Тем не менее, он замечательно продается.
                                  насколько PVS студия эффективна

                                  насколько эта соль эффективна

                                  Вот я вас спрашиваю, насколько лопата эффективна? Отвечайте.
                                    0
                                    Пример обязательно должен быть про софтверную компанию, поизводящую только софт.
                                    Почему? Чем хуже софтверно-железячные компании?

                                    Чисто софтовый пример — ради бога. Мой софт для АСУТП на Северстали проработал 15 лет без видимых эксплуатационщикам сбоев. При этом, по моим внутренним оценкам там осталось порядка 500 багов на 135 тысяч строк кода. Но софт написан так, что любой баг максимум вызывает перезапуск (там 3 уровня контроля). То есть виден только разработчику — в логах. И искать и устранять эти 500 багов- было намного дороже, чем сделать надежный софт.

                                    А программно-аппаратный пример — это любой GPS-приемник. С какими приемниками я не работал — во всех есть баги. И слова «у нас миллион пользователей, и у всех работает» давно не удивляют. Угу, у миллиона работает, но мы первые, кто пытается использовать ваш приемник ценой 2 тысячи рублей вместо приемника ценой за 2 миллиона. Поэтому мы баги видим, а остальной миллион — нет.

                                    А уж править или нет — зависит от желания разработчиков сотрудничать с нами. Иногда мы в своем коде обходим чужие баги, иногда правят разработчики, чаще стараемся и то и то…

                                    Но большинство багов — не критично, они лишь ухудшают качество решения. Причем обычно не катастрофично.

                                    Это тот самый длинный хвост, если знаете такой термин…
                                +5
                                Я понимаю, что вы не перестанете это делать, ибо считаете это одним из наименее затратных средств продвижения. Я просто сообщаю свое мнение, что я уже все ваши посты воспринимаю как однозначную неприкрытую рекламу. И столь частая реклама лично у меня вызывает отторжение. Вероятно, я далеко не один такой.

                                Я, как 1С-программист, скорее всего в обозримом будущем не стану пользователем PVS-Studio. И тем не менее, с интересом читаю статьи про анализатор. Да, я понимаю, что все статьи про анализатор имеют целью продать. Но, черт возьми, это, наверно, единственная реклама, которая носит содержательный и познавательный характер.
                                Лично у меня отторжения не вызывает.
                                  0
                                  Спасибо. :)
                                0
                                Если говорить об обосновании вмененных издержек то нужно учитывать и издержки из-за ошибок самого продукта. Например, я получаю сотни диагностик V003 на одном из своих проектов. Пока я пользуюсь триальной версией — для меня издержек нет, но как только я куплю продукт, эта диагностика станет для меня прямым убытком. Скорее всего, вам удастся эту ошибку исправить в рамках саппорта, но простои это не отменит, а с ними и убытки.
                                Так что, не все так однозначно. Не исключено, что озвучивание порядка цен, или хотя бы алгоритма для их расчета, не помешало бы, иначе потенциальному покупателю невозможно принять обоснованное решение, т.к. риски уже видны в триале, а их стоимость остается загадкой.
                                  0
                                  Отдельно взятую диагностику можно выключить тремя кликами мыши. Если она на самом деле false positive.
                                    +3
                                    Это внутренний код ошибки, о котором нужно сообщить нам. В 99% случаев такое исправляется в течение дня. Правки уже готовы, с gasizdat общаемся.
                                      +2
                                      Раз уж я завел речь про V003, то отпишусь здесь. Ошибка была исправлена и на следующий день стала доступна в beta версии. После чего я смог проверить свой проект нормально. Спасибо SvyatoslavMC.
                              0
                              (промахнулся, написал выше).
                                0
                                О, знакомая ссылка :) Еще можете рассмотреть кейс быстрой оценки продукта, который команду нанимают сопровождать и дописывать «небольшие функции» :)
                                  +5
                                  Справедливости ради, для честного расчета надо учесть не только время программиста, которое будет экономиться на самостоятельном поиске ошибок, но и вычесть из него время, которое будет им тратится на анализ незначительных предупреждений, просмотр отчетов и т.п. не всегда продуктивную деятельность сопутствующую использованию анализатора.
                                    +1
                                    После настройки 9 из 10 предупреждений будет указывать на ошибки или код, который явно будет полезно поправить, чтобы он не путал не только анализатор, но и коллег. PVS-Studio генерирует мало незначительных предупреждений. В нём нет диагностик в духе: поменять NULL на nullptr, имя переменной слишком длинное и т.п.
                                    +1
                                    Как-то по умолчанию считается, что в команде из 10 программистов каждый гарантированно тратит в год на поиск и исправление багов по 156 часов (1 560 часов суммарно).

                                    А что, по вашей статистике среднестатистический проект и правда требует такого объема баголовных часов? И более того, из этого времени 100% закрывается анализатором кода?
                                      +1
                                      Как-то по умолчанию считается, что в команде из 10 программистов каждый гарантированно тратит в год на поиск и исправление багов по 156 часов (1 560 часов суммарно).
                                      Прошу предложить на рассмотрение Ваши прикидки.

                                      А что, по вашей статистике среднестатистический проект и правда требует такого объема баголовных часов? И более того, из этого времени 100% закрывается анализатором кода?
                                      На мой взгляд, на баги (поиск, отладку и т.д.) программист тратит в год куда больше 156 часов. 156 часов, это то, что можно попробовать сэкономить, найдя часть ошибок с помощью анализатора.

                                      Конечно хочется сказать: да нет, это история не про нашу команду! Так вот только почему у всех багтрекеры забиты багами? :)
                                        +2
                                        Я не утверждаю, что расчеты неверные; мне была интересна статистика компании, профиль которой — разработка инструментов тестирования.

                                        И да, у нас в основном TDD, а как при таком подходе выделить чистое (и потенциально сэкономленное) время на поиск и устранение ошибок — не представляю.
                                      +1
                                      А почему не имеется совершенно никакой бесплатной лицензии, ну хотя бы для каких-нибудь мелких наколенных разработок? Да, это могло бы повлечь потери (хотя серьезно, большие клиенты платят за весь софт, за который просят деньги), но я думаю, что это способствовало популяризации PVS-Studio сильно больше, чем регулярная реклама на Хабре, и в долгосрочной перспективе окупилось бы сполна. На всякий случай, наколенные разработки != open-source, так что, насколько я понимаю, таким пользователям Вы бы не одолжили бесплатные ключи.
                                      И на счет ценовой политики, это лишь мое мнение, но мне кажется, что отсутствие определенной цены лишь отпугивает клиентов. Индивидуальная цена для каждого — это субъективизм, и вряд ли кому-либо нравится. Но это лишь мое мнение.
                                        0
                                        А почему не имеется совершенно никакой бесплатной лицензии, ну хотя бы для каких-нибудь мелких наколенных разработок?
                                        Имеется. В том числе не только для открытых проектов. Как использовать PVS-Studio бесплатно.

                                        Индивидуальная цена для каждого.
                                        Нет никакой цены для каждого. Прайс один для всех. Однако, есть цель а) в начале заинтересовать, иначе любая цена слишком высока б) начать общаться с человеком.
                                          0
                                          И ещё на тему бесплатной лицензии: Обсуждение бесплатной лицензии PVS-Studio для проектов, размещённых на GitHub. Приходите обсуждать.
                                            0
                                            Моя ситуация — закрытый проект, Mercurial, BitBucket. Так что потрачено))
                                          0
                                          Почитал. Такой подход очевидно может работать, но мне кажется что принцип ограничения не верен. Обычно для бесплатных/более дешевых лицензий отрезают некоторые возможности программы, а Вы вводите неудобства для клиентов (ИМХО, принудительные комментарии — как раз неудобство). Без обид, но напоминает ситуацию, когда хостинги принудительно вставляют рекламные баннеры в страницы клиентов, но там они хотя бы доход получают, а профит для Вас от комментариев в коде, который никогда никто кроме меня не увидит — не совсем ясен.
                                            0
                                            а Вы вводите неудобства для клиентов
                                            Cтоп, стоп. Не для клиентов. Клиентам ничего никуда вставлять не нужно. Комментарии для бесплатных пользователей.

                                            а профит для Вас от комментариев в коде, который никогда никто кроме меня не увидит — не совсем ясен
                                            Это способ отделить индивидуальные проекты от больших коммерческих разработок. При этом не важно, открытые эти проекты или нет. Хорошее, удобное для многих решение.
                                              0
                                              Мне кажется, намного лучше было бы поставлять бесплатную версию с вырезанными ошибками не первой существенности. Этого хватило бы для наколенных проектов, а большие клиенты с возгласами «Как это не все ошибки найдем?!» побежали бы покупать продукт. Ну или ввести для платных версий некоторые дополнительные примочки. Ну и поддержку ясное дело только для платных.
                                          0
                                          Ещё один новый вариант: habr.com/company/pvs-studio/blog/434012
                                          +1
                                          Да, общественность требует web-сервиса. Регистрируешься, имеешь 10000 строк кода на проверку в год, например. Думали про такое?
                                            0
                                            Да, общественность требует web-сервиса.
                                            web-сервис никому не нужен. Компании очень переживают об возможной утечке исходников. Многие наоборот часто спрашивают, не web-сервис ли мы случаем. Ибо если web-сервис, это им не надо из-за опасения утечки.

                                            10000 строк кода на проверку в год
                                            Это противоречит концепции регулярного использования анализатора.
                                              0
                                              Ну виртуалка, которая вычищается с определенной частотой. Первая доза должна быть бесплатной.
                                                0
                                                Ну, насчёт никому — это слишком категоричное утверждение.
                                                Совершенно очевидно, что содержать вычислительные мощности под это дело разработчикам совершенно не нужно, особенно с учётом того, что машины разработчиков редко бывают настолько дохлыми, а процесс настолько занятый, чтобы не выполнять ещё одну не самую ресурсоёмкую задачу.
                                                А ещё можно интегрировать анализатор в CI и прогонять, скажем, раз в сутки все анализы с генерацией отчётов.
                                              0
                                              Так, по-честному, надо учитывать расход времени на работу с инструментом и разгребание ложных сообщений. Теоретически, можно и в минус уйти.
                                              Скрытый текст

                                                +1
                                                Интеграция и настройка анализатора первый раз — немного иной процесс, за счёт этого нельзя усреднять время регулярного использования анализатора. О том, с чего можно начать первый раз за минимальное время, я описал в статье: "Как перешагнуть через legacy и начать использовать статический анализ кода".
                                                  0
                                                  Ложные сообщения могут появляться каждый день, в свеженаписанном коде.
                                                    0
                                                    Описанные способы позволяют с этим оперативно работать. Например, в Вашем случае можно нажать правый клик на сообщение и кликнуть на подавление предупреждения. Технически это даже быстрее, чем прочитать мой пост сейчас)
                                                      0
                                                      Могут. Но вот тут хочется конкретики. Что значит ложные? Если анализатор настроен, размечены хитрые макросы, то ложным срабатываниям практически нет места. Почти всегда предупреждение говорит об ошибке или о кривом коде, который сложно понять анализатору, а заодно и коллегам. И такой код в любом случае лучше переписать. Готов рассматривать и обсуждать обратные примеры.
                                                        0
                                                        На скриншоте — пример кода.
                                                          +1
                                                          Иногда false positives я видел в C#-коде какого-нибудь конвертера значений (WPF), когда нужно сделать отрицание: в этом случае методы Convert и ConvertBack будут иметь идентичные тела, и анализатор начинает на такое кричать.
                                                          Рефакторинг с вызовом другого метода всё равно оставляет идентичное тело.
                                                            0
                                                            И мы видели, например, одинаковые GetX() и GetY(), потом оказалось, что объект типа куб и так должно быть. Разметили как FA и продолжили править код, вполне штатная ситуация. Но бывают и откровенно ложные предупреждения, которые мы правим уже в ядре анализатора, если есть такой фидбек. К сожалению, мало кто пытается разобраться и просто оценивает цифры в отчётах. Хотя порядки у этих двух групп очень разные.
                                                              0
                                                              Раз пошло такое дело, то расскажите пожалуйста, как наиболее корректно в таких ситуациях поступать?
                                                              Я так и не разобрался в своё время, куда вписать комментарий для подавления предупреждения.
                                                                0
                                                                Кликнуть правой кнопкой мыши в предупреждение и выбрать «False Alarm», комментарий добавится автоматически.
                                                                Скрытый текст
                                                                  +1
                                                                  Имхо, если GetX и GetY абсолютно эквивалентны, я бы сделал
                                                                    retval GetX(args) {
                                                                       ...
                                                                    }
                                                                    retval GetY(args) {
                                                                       return GetX(args);
                                                                    }


                                                                  компилятор прекрасно оптимизирует это в один джамп или вообще в одно тело — а код при этом абсолютно ясно показывает их эквивалетность.

                                                                  снижая вероятноть _неожиданного_ разбега тушек.
                                                                    0
                                                                    Мы так и сделали, но контрибьюторам не понравилось, разметили как FA :D
                                                                  0
                                                                  Есть комментарии для кода в формате //-Vnnn, которые отключают конкретные срабатывания. Эту разметку можно произвести как вручную, так и из интерфейса плагина для Visual Studio. Иногда компании не любят размечать код, поэтому это можно сделать через внешний файл. У этого способа есть отличия, в заисимости от платформы. Познакомиться с ним Вы можете в моей статье "Как перешагнуть через legacy и начать использовать статический анализ кода". Если останутся вопросы, спрашивайте.
                                                                    0
                                                                    Пришли выходные, дома нету PVS.
                                                                    Есть код
                                                                        class NotValueConverter : IValueConverter
                                                                        {
                                                                            public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
                                                                            {
                                                                                return !(bool)value;
                                                                            }
                                                                    
                                                                            public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
                                                                            {
                                                                                return !(bool)value;
                                                                            }
                                                                        }
                                                                    

                                                                    В каком месте надо поставить //-Vnnn (понятно что не буквально), чтобы ругаться перестал анализатор?
                                                                      +1
                                                                      class NotValueConverter : IValueConverter
                                                                      {
                                                                        public object Convert(....) //-V3013
                                                                        {
                                                                          ....
                                                                        }
                                                                      
                                                                        public object ConvertBack(....)
                                                                        {
                                                                          ....
                                                                        }
                                                                      }

                                                                      Вот так это будет выглядеть для дигностики из C# анализатора. Комментарий добавляется в конце строки, на которую выдаётся предупреждение. Иногда анализатор выдаёт multi-line предупреждения, тогда надо использовать первую в списке.

                                                                      Также мне пришлось немного расширить Ваш пример, чтобы получить предупреждение. Предупреждение об одинаковых функциях не выдаётся, если анализатор посчитает фукнции тестовыми или недописанными. Мы много такого повидали во время разработки, поэтому предусмотрели парочку исключений.
                                                        +1
                                                        Понимаю такой код в тестах — на то они и тесты, чтоб создавать идиотские ситуации.
                                                        В конкретном случае правильно добавить коммент для анализатора «да, я знаю».

                                                        А в реальном коде подобный код не должен появиться, так что если код будет пойман анализатором а не тестами — то время вообще сэкономлено.
                                                          +1
                                                          Я не против анализаторов. Я лишь за объективность статьи. Написали, какие будут преимущества, но не написали, что с внедрением программисты должны будут регулярно отсматривать все сообщения анализатора и гасить ложные предупреждения (какие намного больше, чем реальных ошибок). Это снижает продуктивность, т.к. выбивает из потока и тратит "мыслетопливо".
                                                            0
                                                            Гасить ложные предупреждения (которых намного больше, чем реальных ошибок
                                                            Но ведь это не так :). Пример. Откуда все эти ложные срабатывания? Анализтор или не настроен или это плохой анализатор.
                                                        +2
                                                        Прайс один для всех. Однако, есть цель а) в начале заинтересовать, иначе любая цена слишком высока б) начать общаться с человеком.

                                                        Вот чисто из любопытства спрошу: вы в магазин ходите, чтобы общаться с продавцами, выпытывая у них, сколько стоит батон хлеба?
                                                          0
                                                          Магазин с батонами, это B2C. Статические анализаторы, это B2B. Это не хорошо и не плохо. Просто это так.
                                                            0
                                                            Серьезно? И где проходит разница между B2B и B2C в вашем случае?
                                                              0
                                                              Прошу утончить вопрос. Вы удивились, что нет цены :). Я ответил, что это стандартная практика для множества подобных продуктов.
                                                                0
                                                                Я и уточняю. Что означает «B2B» в вашем случае? Бизнес для бизнеса? Окей, сколько сотрудников должно быть минимально в компании? Какой оборот? Я, как обычный программист, могу приобрести ваш продукт?
                                                                  0
                                                                  Окей, сколько сотрудников должно быть минимально в компании?
                                                                  Эти прикидки как раз отображены в таблицах. Скорее всего есть смысл говорить о командах от 5 человек, у нас есть такие клиенты. Но надо понимать, что это высокооплачиваемые специалисты, а не джуниоры.

                                                                  Я, как обычный программист, могу приобрести ваш продукт?
                                                                  Нет. Подробнее про эту тему: Мы закрываем проект CppCat.
                                                          +2
                                                          Вы как-то сосредоточились на поиске ошибок в коде в стиле C с классами. Попробуйте проверить что-нибудь с бустовскими библиотеками, где делается свой EDSL типа Proto, Spirit, uBLAS. Ну или хотя бы в своих правилах проверяйте операторы на перегруженность и не давайте предупреждений на них, если не можете их правильно обрабатывать. А то отчёт полон предупреждений не просто ложных, а не имеющих отношения к коду вообще.
                                                            0
                                                            Опубликовал новый вариант статьи: RU, EN.

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

                                                            Самое читаемое