PVS-Studio ROI

Андрей Карпов
Статей: 367



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

Picture 6

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

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

Давайте рассчитаем возврат инвестиций от использования в процессе разработки статического анализатора кода PVS-Studio в режиме "скептика", а потом - в более реалистичном варианте.

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

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

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

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

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

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

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

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

Вот и получается, что стоимость часа нужно дополнительно умножить на 8/6=1.33 (режим скептика) или на 8/4=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

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

Описание таблицы. Верхняя строка: зарплата разработчика в месяц. Левый столбец: количество программистов в команде. Ячейка таблицы: сколько денег команда дополнительно заработает для компании в течение года, если вместо правки багов, которые найдёт PVS-Studio, будет заниматься полезным программированием.

Таблица для скептиков (нажмите на таблицу для увеличения):

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

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

Реальная таблица (нажмите на таблицу для увеличения):

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

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

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

Примечание

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

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

Кстати, приведённые расчёты и таблицы отличаются от тех, что приводятся в англоязычном варианте статьи. Приходится учитывать другой уровень зарплат, при котором получается, что PVS-Studio полезен практически любой команде. Что же, наверное, так оно и есть. Косвенно это подтверждается тем, что США и Европа дают нам гораздо больше заказов, чем Россия, хотя в России про нас больше знают.

Заключение

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



Найдите ошибки в своем C, C++, C# и Java коде

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

goto PVS-Studio;

Андрей Карпов
Статей: 367


Найденные ошибки

Проверено проектов
344
Собрано ошибок
12 899

А ты совершаешь ошибки в коде?

Проверь с помощью
PVS-Studio

Статический анализ
кода для C, C++, C#
и Java

goto PVS-Studio;