CppCat — тульский анализатор кода C++ с большими амбициями Материал редакции

Сегодня мы разговаривали с Евгением Рыжковым, генеральным директором компании «Системы программной верификации», которая занимается разработкой программного обеспечения в области тестирования программ и систем статического анализа исходного кода. У них есть два продукта — PVS-Studio и свежий CppCat, это инструменты статического анализа кода на C++.

[caption id="" align="aligncenter" width="384"] Евгений Рыжков[/caption]

Обсудили особенности отладки, сложности запуска международного бизнеса из Тулы, ценообразование в этой области и котов.

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

Рыжков: Я работаю в компании «СиПроВер» (Системы программной верификации), которую мы основали вместе с моим коллегой и партнером по бизнесу Андреем Карповым. Мы находимся в провинциальном городе Тула, который славен оружием, самоварами и пряниками. Поскольку всем этим зарабатывают на жизнь другие люди и ниши явно заняты, то мы занимаемся не совсем привычной для России темой. Мы создаем инструменты для программистов. А если более конкретно, то создаем инструменты статического анализа C++ кода.

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

[caption id="" align="aligncenter" width="600"] Андрей Карпов, кофаундер[/caption]

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

Наш основной продукт PVS-Studio мы продвигаем, рекламируем и продаем сами. Ну и, естественно, сами же его и разрабатываем.

КП: И чем отличается CppCat от PVS-Studio?

ЕР: Прежде всего PVS-Studio — довольно дорогой и сильно нишевый продукт. Сейчас минимальная лицензия на команду до 9 человек стоит €5250. Кроме того, это продукт с историей (он появился в начале 2011 года), и за это время он оброс большим количеством функций, которые не всем нужны. Поэтому осенью 2013 года у нас появилось желание попробовать сделать наш продукт как бы с нуля.

В результате за 3,5 месяца мы разработали новый продукт (естественно, на основе старого), выкинули из него то, что, как нам кажется, усложняло восприятие, и сделали новую ценовую политику. Продукт лицензируется на разработчика по цене в $250. Продукт был запущен на Новый год. И мы очень удивились тому, что нам самим удалось это сделать всего за 3,5 месяца. Кстати, про название продукта — расскажу историю его появления.

[caption id="" align="aligncenter" width="435"] Комната отдыха в офисе. Правильно, расслабляться некогда![/caption]

Вообще, придумывать названия — это очень сложно. Каждый, кто этим занимался, знает, ну а те, кому не доводилось, наверное, пока не поверят. Так вот нам нужно было название, которое: 1) говорило, что продукт для C++—программистов; 2) было свободным (поэтому всякие cppcheck и codescan отпадали); 3) было прикольным; 4) можно было сделать логотип.

Ну а поскольку считается, что программисты любят котиков, то весь сайт cppcat.com увешан нашим логотипом (если покрутить). Так что из 3,5 месяцев недели две заняло продумывание концепции названия и около месяца — создание логотипов и тестирование их на фокус-группах.

[caption id="" align="aligncenter" width="480"] Как рождался CppCat[/caption]

КП: Вот PVS-Studio вы продаёте за такие деньги — вправду находятся желающие? Неужто стандартный отладчик в Visual Studio настолько плох?

ЕР: Надо сразу сказать, что 85% продаж – это США и Европа, на Россию приходится только 10%. Вообще, инструменты статического анализа довольно дороги в мире. Их сложно продать тысячам клиентов, поэтому продаются они за существенные деньги. Дело не в том, что отладчик Visual Studio плох. Решение о том, применять ли наш или какой другой инструмент статического анализа, клиент принимает так. Он запускает триал, смотрит на найденные ошибки. Если среди этих ошибок он находит что-то интересное, то прикидывает, сколько времени потребовалось бы программисту для нахождения и исправления этой ошибки. А затем прикидывает стоимость часа работы. И если оказывается, что инструмент может экономить время на поиск ошибок, то он будет куплен. Здесь есть сразу несколько проблем с продажами, о которых хочется рассказать.

Во-первых, программист может не найти в списке найденных ошибок интересных сообщений. И не потому, что инструмент их не нашел. Но, к примеру, если инструмент выдал 300 сообщений, то программист внимательно просмотрит первые 10. Затем менее внимательно — еще 20. И потом уже не будет изучать оставшиеся. Очень важно подсунуть в список интересные ошибки первыми.

Во-вторых, как я говорил, стоимость часа рабочего времени. Если она в проекте низкая (к примеру, работают студенты), то, конечно, инструмент статического анализа им не нужен. А если работают американские дорогие программисты, получающие по $50 в час, то инструмент, который экономит хоть сколько-то времени, оказывает полезен.

[caption id="" align="aligncenter" width="580"] Ещё одно фото из офиса — бубен от Intel. А то какая ж отладка без бубна.[/caption]

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

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

Кстати, наша целевая аудитория накладывает очень интересные ограничения на то, как продвигать продукт.

КП: Да, это тоже важно, но сперва мне интересно узнать, как вам удалось так быстро запуститься.

ЕР: Нет-нет, к сожалению мы не запустились быстро. Наша компания основана в 2008 году, мы уже тогда начинали заниматься технологиями анализа кода. Наш первый продукт назывался Viva64 и был предназначен для поиска проблем миграции приложений на 64-битные системы. Кстати, выявление проблем миграции на 64-битные системы — тема моей кандидатской диссертации, так что продукт рос параллельно с научной деятельностью. А мой коллега Андрей Карпов делал диссер про параллельное программирование. Естественно, мы работали программистами, но хотелось поделать что-то своё. И мы сделали Viva64. К сожалению, тогда опыта продаж у нас было ещё меньше, чем сейчас. И долгое время продукт не приносил денег на то, чтобы быть самостоятельным бизнесом без подработок в виде аутсорсинга.

[caption id="" align="aligncenter" width="580"] Подкову советуют прибивать к системному блоку, а она почему-то висит на стене.[/caption]

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

Ну и ещё нам повезло, конечно. Не в том смысле, что «ничего не делали, а тут как подфартило...» Нет, мы много-много работали, и однажды утром я увидел в свой почте уведомление о покупке из id Software от пользователя с именем John Carmack. Проверив несколько раз, что это не фрод, я приятно удивился. Но радость от того, что ты делаешь, по-настоящему накрыла меня, да и всю нашу небольшую команду, когда на QuakeCon 2011 Кармак со сцены положительно отозвался про PVS-Studio. Я хочу для читателей только пояснить, зачем я это говорю. Не только для того, чтобы похвастаться. Хотя это и приятно. Важно понимать: для того, чтобы о вас написал какой-нибудь крутой товарищ, нужно очень много сделать предварительной работы, которая на первый взгляд может быть и не видна.

Ну а запуск CppCat за 3,5 месяца произошел потому, что продумывание концепции продукта шло довольно долго, и мы знали проблемные места PVS-Studio, которые нам надо так или иначе порешать.

КП: Ого, Кармак — это круто, конечно.

ЕР: Кстати, сейчас мы так и продаем два продукта — PVS-Studio и CppCat, они живут параллельной жизнью и помогают друг другу.

[caption id="" align="aligncenter" width="1024"] Кармак радуется продуктам из России[/caption]

КП: А вот вы там у себя на сайте издеваетесь над Chromium, MTA, Doom 3 и т. п. — это не доказательство того, что ошибки можно искать бесконечно?

ЕР: Константин, вы затронули мою любимую тему — продвижение наших продуктов. Наша аудитория — это крутые и опытные программисты. Решение о покупке принимает тимлид (если речь о крупных компаниях) или директор по разработке (если о мелких). Для таких людей можно хоть весь интернет завесить банерами «Наш продукт лучше всех, купи и забудешь о проблемах!» — они на это не купятся.

Более того, многие программисты либо используют AdBlock, либо за годы приучили глаза на баннеры не смотреть, а к рекламным обзорам они относятся крайне скептически. Поэтому несколько лет назад мы, на самом деле, довольно случайно открыли для себя наиболее удачный формат для продвижения. Мы берем open source проект. Желательно поизвестнее. Проверяем его. Находим десяток ошибок и пишем про это статью. Лучше всего такие статьи получаются у Андрея, он уже мастер в их написании. В чем идея таких статей? Мы НЕ стремимся показать, что все эти проекты написаны новичками и неумехами. Мы говорим: «Смотрите, даже разработчики Chromium допускают ошибки! Может, и вы проверите свой проект? Вдруг и вы не совершенны?».

И такие статьи людям нравятся, после них они приходят и скачивают триал. А мораль проста. Программы пишут люди. Люди допускают ошибки. Даже самые лучшие из людей. Проекты развиваются, разработчики пишут новый код, модифицируют старый. И ошибки в программах всегда неизбежны. Чем раньше они будут диагностированы (нашими инструментами или другими), тем дешевле их исправление.

[caption id="" align="aligncenter" width="794"] Скриншот программы (для порядка)[/caption]

Кстати, нам очень повезло с целевой аудиторией (программисты). За годы работы я это понял. У нас на 100 обращений только одно-два неадекватных, часто люди присылают разумные баг-репорты, стек-дампы, а иногда даже подсказывают, как нам исправить ошибки в наших инструментах (при этом нередко правильно подсказывают). Я просто сравниваю это с пользователями других продуктов (по историям от друзей) — нам сказочно повезло с пользователями.

КП: Да, что будет, если прогнать через CppCat код самого CppCat?

ЕР: Один из самых частых вопросов. Мы регулярно используем свои же собственные инструменты. Как правило, они выявляют ошибки в момент написания кода, когда сразу после компиляции запускается анализ. Ошибки тут же правятся. Поэтому мы никогда не сможем выпустить статью типа «Мы нашли 20 ошибок в своем анализаторе». Не потому, что ошибок не делаем. Делаем, ещё как. А потому, что сразу их исправляем и они даже в баг-треккер не попадают.

КП: Отлично. Вот насчёт денег — вы отбиваетесь уже? Сколько у вас вообще клиентов, какой оборот?

ЕР: С точки зрения бизнеса, мы старались всегда быть прибыльными, так как запускались и работали на свои. Точнее так, мы никогда не были убыточными, поскольку не можем себе этого позволить. Отчасти поэтому мы до сих пор такие маленькие, хотя и хочется подрасти, конечно. Про оборот. Ну смотрите, за 2013 год у нас было около 40 продаж PVS-Studio. Это не все новые лицензии (у нас часто клиенты продлевают лицензию на год за 80% стоимости). Там есть и обычные лицензии, и подороже (Site License на много разработчиков), но есть и продажи подешевле, когда мы экспериментировали с ценами. Так что эти цифры — неплохая оценка нашего бизнеса. Не волшебно конечно, и всегда хочется большего. Но пока так.

По CppCat пока цифры озвучивать рано, так как продукт запущен в январе 2014, а в этой нише, как я говорил, миллионных инсталляций не бывает.

КП: Серьёзно, на свои, без внешних инвестиций?

ЕР: Да. Но на заре нашей деятельности, когда еще бума инвестиций в России не было, мы пробовали общаться с некоторыми фондами. Везде был ответ в стиле: «Когда будет действующий бизнес, приходите». Когда появился действующий бизнес, они отвечали: «Когда будет ТАКОЙ-ТО доход, тогда и приходите». А когда доход стали ТАКИМ-ТО, то они уже и не очень то нужны оказались. Так что мы довольно давно и не пытались с кем-то общаться по этому поводу. Вот такая вот история взаимоотношений с инвесторами. Допускаю, что много ситуаций, когда это окажется взаимовыгодно, но нам с нашей узкой темой это не помогло.

КП: Пока всё довольно радужно, так не бывает. В чём у вас сомнения есть?

ЕР: Как всегда, кроме позитивных моментов, есть и то, что не получается. Не получается выйти на большую аудиторию разработчиков из США и Европы, не получается добиться большого количества чтений статей и загрузок триалов. Вроде бы и работаем, и старемся, а результаты не достаточно радуют. Как посмотришь на какой-нибудь график Google Analytics у коллег, и думаешь: «Как же они могут столько тысяч посетителей привлечь? Что я делаю не так?». Аж слюнки текут: «Мне бы такой трафик!».

Только не надо комментариев в стиле: «Ясное дело, что из Тулы вы не выйдете на США и Европу!».

КП: Да ну, какая разница, люди же к вам на сайт приходят,а не в офис, всё правильно.

ЕР: Да, но мы тупо не понимаем, к примеру, на каких сайтах тусуются программисты из США. То есть стараемся, и первые пять сайтов, которые назовут в комментах — мы с ними пробуем работать. Но, видимо, недостаточно. Короче, направление интернет-маркетинга у нас, видимо, пока страдает. Я про то, что нельзя прийти на новый форум, зарегистрировать нулевый аккаунт и написать: «Ребята, качайте вот тут продукты».

КП: Ничего, думаю, у вас всё наладится.

ЕР: Сам так думаю :-)

КП: Большое спасибо!

 
{ "author_name": "Константин Панфилов", "author_type": "editor", "tags": ["\u0441\u0442\u0430\u0440\u0442\u0430\u043f","\u043f\u0440\u043e\u0432\u0438\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f_\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430","\u043e\u0442\u043b\u0430\u0434\u043a\u0430_\u043a\u043e\u0434\u0430","\u0434\u0436\u043e\u043d_\u043a\u0430\u0440\u043c\u0430\u043a","visual_studio","cppcat","c"], "comments": 0, "likes": 17, "favorites": 0, "is_advertisement": false, "subsite_label": "flood", "id": 2875, "is_wide": true, "is_ugc": false, "date": "Tue, 04 Feb 2014 12:11:31 +0400", "is_special": false }
{ "page_type": "article" }

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "Article Branding", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "cfovx", "p2": "glug" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-1104503429", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=bugf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Баннер в ленте на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvc" } } }, { "id": 19, "disable": true, "label": "Тизер на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "p1": "cbltd", "p2": "gazs" } } }, { "id": 20, "label": "Кнопка в сайдбаре", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "cgxmr", "p2": "gnwc" } } } ] { "page_type": "default" }