На Хабре время от времени появляются статьи, посвященные статическому анализатору кода PVS-Studio (также рассматриваются и иные анализаторы), в которых то и дело делаются проверки того или иного проекта с публикацией найденных проблемных мест. Не так давно был представлен новый продукт CppCat— облегченная версия за небольшие, относительно PVS-Studio, деньги. Некоторое описание проекта PVS-Studio для Visual C++ можно найти здесь и здесь, а описание нового проекта можно найти в статье «Альтернатива PVS-Studio за $250».
Данная статья будет ориентирована не на всевозможные технические подробности, связанные с продуктами, а на позиционирование продукта на рынке на той или иной платформе, немного о компании и т.д.
Во многих статьях о продуктах компании в комментариях можно найти вопросы о поддержке такой платформы, как Linux. Здесь также затронут этот вопрос и получен исчерпывающий ответ.
На заданные мною вопросы отвечает Андрей Карпов Andrey2008 — технический директор проектов PVS-Studio и CppCat. Также Андрей делится некоторыми рассуждениями о языке программирования, продуктах иных компаний и взаимодействии с этими самыми компаниями.
Преамбула
Если понаблюдать за развитием программиста, то можно иногда заметить некоторую закономерность. В начале пути будущий разработчик изучает какую-то литературу, что-то спрашивает на форумах. В определенный момент, для некоторого шага вперед, получает пинок под зад вопросом типа: «А вы не пробовали открыть для себя отладчик?». Открыв для себя этот один из многочисленных, но в то же время основных инструментов, разработчик продолжает свой путь совершенствования. В определенный момент он приходит к мысли или ему таковую подсказывают, что можно ускорить свою работу, сократив время на поиск ошибок, если искать их еще на начальных этапах с помощью статического анализатора кода, а не искать ошибки уже в готовом продукте, натравливая на него WinDbg и всевозможно упражняясь в изощренной отладке приложений. В этот момент начинается обзор имеющихся средств на рынке, как платных, так и бесплатных. В такой обзор может быть включен и данный материал.
Беседуем...
Я прошел по указанной в профиле Андрея ссылке на «Мой Круг». Судя по прочитанной информации, компания не является большой. Может в этом и есть ее плюс… Это, как правило, минимум бюрократизма, большая вовлеченность в процесс, больше творческой работы и т.д. У малых компаний есть своя прелесть в сравнении с большими. О положительных сторонах малого бизнеса есть хорошая статья.
Андрей, расскажите, пожалуйста, немного о компании: сколько на данный момент в компании сотрудников, сколько задействовано в разработке непосредственно продуктов компании и еще немного того, что посчитаете нужным в общих чертах указать?
Андрей: Да, мы маленькая компания. Конечно, мы хотим стать большой и богатой. Но это желание исполняется медленно. Скажем так. Нас устраивает то, что есть, но очень-очень хочется большего. Видны перспективы, но они сопротивляются, чтобы мы их достигли.
Есть и явные плюсы: спокойная обстановка и отсутствие необходимости подстраиваться, например, под заказчика или дату релиза, придуманную отделом маркетинга. Очень быстрая реакция на письма пользователей. Конечно, со временем компания может обрасти жирком и обзавестись бюрократией. Но пока наши решения и действия стремительны. Мы не раз удивляли пользователя, предоставляя ему дистрибутив в тот же день, когда он написал нам об обнаруженной ошибке.
Сейчас непосредственно в разработке и продвижении PVS-Studio/CppCat принимает участие 4 человека. Дальше я считать затрудняюсь. Сотрудники или по совместительству, как, например, бухгалтер, или выполняют работу удаленно. Вспоминается термин «половина рудокопа».
Некоторые практики компаний показывают, что одним из успехов компании является то, что они ориентированы в первую очередь на продукт, на его качество, и как бы на то, что хотелось бы иметь для себя. Скажите, в компании ее продукты используются для разработки ее же продуктов, т.е. при разработке новой версии PVS-Studio используется для поиска проблем та же PVS-Studio, но стабильной продаваемой версии? Не могли бы привести несколько интересных примеров, когда продукт помог в поиске проблемных мест в разрабатываемой версии?
Андрей: Я считаю, что PVS-Studio и CppCat очень качественные продукты. Мы можем почти в любой день сделать и выложить дистрибутив. У нас используется очень большое количество автоматизированных тестов различного уровня и типов. Если исправленная версия прошла все тесты, значит ее можно смело выдавать пользователям.
К сожалению, вся красота и надежность внутреннего кода иногда разваливается из-за воздействий враждебной окружающей среды. В результате все впечатление от продукта портится. Вроде и не мы виноваты, но не работает-то именно наш продукт. Я могу приводить просто бесконечное количество примеров. Первое что вспоминается:
- Сторонний инструмент что-то портит в окружении Visual Studio. В результате приходится создавать костыль для обхода проблемы или смириться и ответить «извините, ничего не можем сделать». Один из таких примеров — «Описание ошибки интеграции Intel Parallel Studio Service Pack 1 в Visual Studio 2005/2008».
- COM-интерфейсы Visual Studio для получения информации о проекте неожиданно могут кинуть исключение. Видимо, среда в этот неудачный момент занята чем-то еще. Вызовы приходится заворачивать в цикл для многократного их повторения. Танцы с бубном, которые не всегда помогают.
- У разработчика стоит антивирус X и, согласно корпоративной политике, у него нет прав менять его настройки. Этот антивирус «держит» какое-то время некоторые временные файлы, и анализатор не может их удалить. В результате получается, что анализатор «гадит» в папку проекта.
- Разное можно вспоминать. Например, можно посмотреть здесь, здесь и еще вот здесь.
Однако, наши читатели ждут, покажу ли я ошибки, которые PVS-Studio нашел сам в себе. Меня уже неоднократно просили написать статью про это. К сожалению, я все никак не могу накопить достаточное количество примеров ошибок. Если честно, я банально забываю их выписывать, когда они обнаруживаются инкрементальным анализом. Увидел, поправил и пошел дальше над алгоритмом думать. На следующий день вспомнил, что неплохо бы такие предупреждения выписывать. Да уже не помню где и что было.
bool VirtualValueSaver::IsNotZero() const
{
if (m_decl == nullptr)
return false;
return m_decl->m_wiseType.m_pValue != nullptr &&
m_decl->m_wiseType.m_pValue->m_isPrecisionBound &&
m_decl->m_wiseType.m_pValue->m_minValue ==
m_decl->m_wiseType.m_pValue->m_minValue &&
m_decl->m_wiseType.m_pValue->m_maxValue != 0;
}
Предупреждение: V501 There are identical sub-expressions 'm_decl->m_wiseType.m_pValue->m_minValue' to the left and to the right of the '==' operator. vivawalker.cpp 382 error
Должно быть:
m_decl->m_wiseType.m_pValue->m_minValue ==
m_decl->m_wiseType.m_pValue->m_maxValue
static void FixSourceFileName(vstring &s,
const NormalizedFileOrDirectoryName &defaultname)
{
....
if (in[0] == '\' && in[1] == '.' && in[1] == '\')
{
in += 2;
continue;
}
....
}
Предупреждение: V547 Expression is always false. Probably the '||' operator should be used here. vivabasepreprocessor.cpp 428
Должно быть:
if (in[0] == '\' && in[1] == '.' && in[2] == '\')
static void GetUseType(...)
{
....
if (kind == ntAssignExpr)
{
const Ptree *l = SafeSkipParentesis(pParentExpr);
const Ptree *r = SafeSkipParentesis(pParentExpr);
....
}
Предупреждение: 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));
В статье «Альтернатива PVS-Studio за $250» представлен новый продукт компании — CppCat. В самом начале утверждается, что проект создан почти «с чистого листа».
Во многих продуктах есть ядро, вокруг которого все и строится, как, например, для антивирусного программного обеспечения — это его антивирусный движок. Как правило, это одно ядро на несколько продуктов компании. Вокруг этого ядра строится целая система из всевозможной логики, интерфейса и всевозможных полезностей для пользователя (например, все та же генерация отчетов) — все это и есть продукт, который отличается от иных продуктов компании, построенных на том же движке.
Хотелось бы узнать PVS-Studio и CppCat — это продукты, построенные на одном и том же ядре? Стоит ли пользователям ожидать такое же качество анализа кода от нового продукта, как и от старого в том его сегменте, на который он ориентирован? Если оба продукта построены на одном и том же ядре, то пользователь упрощенного и более дешевого продукта получает некоторое преимущество в том, что он получит те же исправления дефектов и новшеств в анализаторе, что и пользователь сложного продукта. Можно ли это сказать о CppCat?
Андрей: Да, PVS-Studio и CppCat построены на одном ядре. А вот интерфейс переработан очень существенно.
С точки зрения анализа общего назначения они очень близки. В CppCat отключены наиболее неудачные диагностики, дававшие много шума. Причем не факт, что это плохо. Лучше исправить 5 ошибок, просмотрев 10 сообщений, чем невнимательно пролистав список из 100 предупреждений и поправить только 2 ошибки.
По поводу того, что CppCat частично оттянет на себя пользователей PVS-Studio. Да, наверное это произойдет, но не массово. Многим нашим пользователям нужна специфическая функциональность. Кто-то покупает PVS-Studio из-за 64-битных диагностик, кому-то нужна модифицированная метрика «цикломатическая сложность» (непубличная функциональность). Кто-то использует MSBuild и так далее.
Говоря о проверке больших проектов в PVS-Studio и CppCat, не могли бы Вы привести некоторые ориентировочные цифры, например, продукты были проверены на проектах с количеством подпроектов, скажем, чуть более 500-700, код которых в XXX Мб можно собрать на машине с некоторой указанной конфигурацией за такой-то временной промежуток?
Да, вполне возможно, что многие проекты куда меньше, но разработчики крупных программных систем вполне могли бы заинтересоваться подобными цифрами.
Андрей: Мы не занимались специальным сбором такой статистики. Пожалуй, в будущем этим стоит заняться. Сейчас я могу привести следующие числа.
Если взять набор для тестирования работы с Visual Studio 2010, в который входят следующие проекты:
- CamStudio
- CrashRpt
- DosBox
- ffdshow
- IPP-Samples
- Logs
- Miranda
- MongoDB
- mpc-hc
- Shareaza_vc10
- STweet
- XUI-GUI Fraimework
- Zlib_IA64
То все они проверяются на моей рабочей машине за 55 минут. Объем исходного кода этих проектов составляет около 320 мегабайт.
Конфигурация:
- Intel Core i7-4770 (3.40ГГц, 4x256Кб + 8Мб, EM64T, GPU), количество ядер — 4, количество потоков — 8;
- 16 гигабайт памяти (2 планки: DDR3 8Gb Kingston PC10600, 1333МГц);
- Все, относящееся к тестам, находится на SSD диске.
Ценовая политика CppCat предполагает покупку лицензии за некоторую фиксированную плату, но на год. Для некоторых продуктов годовая лицензия так же имеет место быть, но каждый год компания может выпускать новую версию продукта с такой же ценой на лицензию. Предусматривается ли или есть мысли о некотором стимулировании пользователей обновлениями, новыми версиями и т.д.: всем тем, что у пользователя вызвало бы больше желания для приобретения продукта с ежегодной оплатой его использования вместо покупки продукта, за который можно заплатить единожды и пользоваться сколько угодно, например, до момента осознания о необходимости приобретения новой версии?
Андрей: Мы считаем неприемлемым продажу «бесконечной» лицензии. Нам кажется, мы по духу близки к антивирусам. Анализатор постоянно учится ловить новые ошибки, учится поддерживать новшества в языке C++, поддерживает новые среды Visual Studio и новые версии Windows.
В каком-то смысле мы продаем «сервис по предотвращению ошибок». Этот сервис постоянно требует с нашей стороны вложений и усилий. За это честно просить покупку обновлений.
Предвижу возражение: «А мне не надо обновлений. Я хочу один раз купить и пользоваться потом сколько захочу». Это глупо. Странно использовать антивирус трехлетней давности. Свежий антивирус найдет намного больше вирусов. Так и новый анализатор найдет больше ошибок, чем старый. Тот, кто просит «бесконечный анализатор» на самом деле плевать хотел на количество ошибок в своем коде. Ему анализатор не нужен и можно не обращать на него внимание.
Вы предлагаете попробовать CppCat в течении 7 дней бесплатно. Не всегда разработчику с его загрузкой можно по достоинству оценить продукт за 5 дней, если он это делает на рабочем месте с целью вынесения предложения о закупке продукта начальству.
Нередка ситуация, когда потребность в продукте определяется руководящим составом без учета мнений сотрудников (непосредственных пользователей продукта), но имеются и ситуации, когда именно высказанные потребности сотрудников и являются определяющим фактором к приобретению того или иного продукта.
Не хотели бы увеличить срок до месяца и расширить целевую аудиторию для рекламы за счет непосредственных пользователей-программистов, которые выступили бы перед своим руководством с предложениями о покупке?
Андрей: По поводу увеличения срока. Спорный момент. Когда у разработчика 5 дней, он помнит что ему надо попробовать инструмент. Когда у него месяц, ему все время будет «некогда» или «лень». Короткий срок стимулирует к действию.
А почему бы Вам не реализовать некоторый online-сервис, аналогичный online-компиляторам с целью просто посмотреть как анализатор отреагирует на некоторый фрагмент кода? Или также online-сервис, отправив на который какой-нибудь тестовый проект или даже реальный, пользователь мог бы воспользоваться проверкой своего проекта, не устанавливая ПО на свою рабочую станцию. Тут же можно организовать некоторую интересную модель, коих уже немало для, например, веб-разработки: дать некоторое ограничение на проект для бесплатного использования и за отсутствие этих ограничений предлагать внести некоторую плату. То, что многие откажутся от установки ПО локально и уйдут в online мне предоставляется маловероятным, т.к. политики безопасности компаний, охраняющие их интеллектуальную собственность, не станут огромные свои проекты заливать в online-ресурс. Зато вполне возможно расширилась бы аудитория небольших проектов без параноидальной защиты своего умственного труда, и ресурс мог бы стать тестовой и, как следствие, рекламной площадкой для основных продуктов компании. К тому же заинтересовавшийся разработчик мог бы пробовать продукты как на работе, так и дома, т.к. нет привязки лицензии (даже триальной) к идентификатору его рабочей станции.
Андрей: Нам не нравятся никакие идеи связанные с online. Вот ход рассуждений.
Есть человек, который разрабатывает приложения в среде Visual Studio. Что может быть проще, чем запустить CppCat для анализа своего проекта? Человеку или нравится результат, или нет. Если нравится, он может купить инструмент. Online-сервис здесь как собаке пятая нога.
Фантазии на тему «залить куда-то проект и проверить» очень сложно реализовать и главное не понятно зачем. Анализатору требуется проект, который можно скомпилировать. Иначе он не будет знать, какие типы что означают, какие директивы препроцессора установлены, как раскрыть макросы и так далее. Это значит, что где-то нужно будет настроить полноценное окружение. Автоматически это сделать невозможно. Придется заставить человека залить библиотеки, используемые в проекте, создать некий аналог проекта в веб-системе, чтобы анализатор знал про директивы препроцессора и так далее. Получается, что человеку нужно создать и поддерживать «параллельный проект» где-то в облаках. А нам всю эту прелесть надо где-то хранить и тоже поддерживать.
Единственное, для чего можно использовать online-анализатор — это ставить эксперименты. Но и это лучше не делать. Программисты очень однобоко подходят к таким тестам. На эту тему я писал даже заметку: «Мифы о статическом анализе. Миф пятый – можно составить маленькую программу, чтобы оценить инструмент». Человек легко может сделать негативный вывод, основываясь на одном, двух примерах. Так что пусть лучше он проверяет свой реальный проект и найдет в нем ошибки.
CppCat предлагается для использования совместно с некоторыми версиями MS Visual Studio, что определяет его платформу использования — Windows и целый класс приложений — настольное ПО. Да, Windows существует как для рабочих станций, так и для серверов, но если посмотреть на всевозможные публикации о каком-то крупном веб-ресурсе или новом построенном кластере, то, в основном, можно увидеть много информации о Linux на сегменте серверного программного обеспечения. Можно заметить, что успехи Windows на серверном сегменте, аналогичны успехам Linux на сегменте настольного ПО. Среди настольных приложений для Windows у C++ появляется все больше конкурентов, на сегменте серверного ПО C++ так же не испытывает недостаток в конкуренции. Хотелось бы узнать Вашу позицию относительно выпуска продуктов для Linux и проникновения на рынок серверного ПО.
Была интересная статья о попытках продажи Вашего ПО в Google и как пример полезности Ваших продуктов проверка браузера Chrome. Есть ли какие-то новые события в этом вопросе? Рассматриваете ли возможность сотрудничества с крупными компаниями в продвижении Ваших продуктов на рынок серверного ПО с учетом выпуска версий под *nix платформы? Тут же есть и отечественные игроки: Yandex, Mail.ru и т.д.
Андрей: Вначале я хотел написать что-то в духе: «У нас нет Linux версии и не предвидится. Причиной можете считать нашу некомпетентность, лень и самодурство. Только отстаньте он нас пожалуйста». Затем я решил, что просто попрошу убрать из интервью вопросы, связанные с Linux. Но потом коллега спросил: «Почему я говорю, что Linux версии нет, когда вот она в данный момент запущена у него в виртуальной машине?». Я понял, что все-таки надо дать развернутый ответ на эту тему.
Мы маленькая и самостоятельная компания. У нас нет подпитки от других родительских организаций или грантов от правительства. Мы очень легко можем прекратить свое существование, если начнем делать глупости. Достаточно, чтобы расходы в течение 3 месяцев превысили доходы и можно закрываться. Одним из таких глупых действий может быть раздувание инфраструктуры с целью реализации «Linux-версии».
Программисты упорно не хотят понимать и осознавать, что скомпилированный исполняемый файл, это не то же самое, что программный продукт. Звучит это банально, но действительно люди не замечают разницы размером со слона.
У нас есть сборка под command-line версии анализатора под openSUSE 13.1. Она запускается и даже выводит предупреждения. Но у нас нет «Linux-версии». У нас нет такого программного продукта и не предвидится в обозримом будущем.
К счастью, я и Евгений EvgeniyRyzhkov совмещаем в себе не только программистов, но и менеджеров. Иначе мы, как компания, уже давно исчезли бы. Мы можем предвидеть, как технический энтузиазм может все испортить.
Вспомним, из чего складывается наш программный продукт:
- Поддержка операционной системы. Хорошо, с этим все относительно просто. Взяли и скомпилировали программу. Но помним, что для этого нам понадобятся как минимум виртуальные машины и усложнение систем сборки и подготовки релизов.
- Поддержка компилятора и системных библиотек. Здесь начинаются сложности. Не надо думать, что программа на C++ это просто текстовый файл, который будет везде можно анализировать одинаково. Каждый компилятор и системные библиотеки просто кишат всякими нестандартными расширениями. Поддержка этих особенностей — незаметный, но очень большой объем работ. То, что ключевое слово '__restrict' используется в 10 000 раз реже, чем оператор 'for' вовсе не означает, что его можно не поддерживать. Многие программисты и не подозревают о таких вещах как _Bool, __w64, __noop, __int3264, __if_exists, 123.0fi, __uuidof, __based, __LPREFIX, __builtin_offsetof, __volatile__ и так далее и так далее.
- Диагностические правила. Каждая система — своя модель данных, свои библиотеки и прочие нюансы. Если хочется выдавать хорошие диагностики, нужно знать особенности работы системных функций. Например, в PVS-Studio/CppCat имеется огромная таблица, подсказывающая как можно неправильно использовать ту или иную функцию и что можно от нее ожидать. Там сказано: подозрительно если у функции '_wcsicmp_l' совпадает первый и второй фактический аргумент. Сейчас файл «functions_info.cpp» занимает более 800 килобайт и нам еще работать и работать над его пополнением. Если мы хотим идти на другие системы, нам нужно учесть соответствующие системные функции и сильно пополнить таблицу. Это ужасно трудоемкая задача.
- Документация. Документацию надо серьезно перерабатывать. Надо помнить, что сейчас PDF файл с документацией к PVS-Studio содержит 250 страниц и постоянно растет.
- Интеграция со средами разработки. Одно дело напечатать что-то в консоль, а совсем другое сделать инструмент удобным. В Windows приоритет очевиден — надо интегрироваться с Visual Studio. В Linux мире все более разнообразно. Нужно поддержать несколько наиболее распространенных редакторов. Пусть даже не в виде плагинов, но все равно нужно уметь выдать информацию в подходящем для них формате, чтобы можно было осуществлять навигацию.
- Дистрибутив.
- Тестирование. Самый убийственный пункт. У нас много разновидностей автоматических тестов. Основная система — это набор регрессионных тестов, показывающий отличия в диагностиках. Всего для этого используется более 100 open-source проектов. Время полного прохождения тестов занимает многие часы. Если мы хотим освоить новую операционную систему, мы должны создать новую, более сложную, переносимую систему тестирования. Мы должны найти как минимум 50 новых open-source проектов, которые можно собрать в этой системе. Еще нужно научиться запускать в новой операционной системе юнит-тесты и так далее.
- Поддержка. Усложняется поддержка, так как придется иметь под рукой различные виртуальные машины и людей, которые готовы разбираться в специфичных для этой системы проблемах.
А теперь самое главное. Под Unix/Linux версией каждый понимает на самом деле свою собственную операционную систему. Это очень важно! От того, что есть пакет для системы X, пользователю системы Y ни тепло ни холодно. Для него у нас по-прежнему нет «Linux-версии». Это значит, что надо делать версию, как минимум, для пяти разных наиболее распространенных систем (но все равно останутся недовольные).
Соответственно, все, что описано выше, нужно умножить на количество поддерживаемых систем. Например, умножьте это на 5 и представьте объем работ.
При этом сразу колоссально возрастают инфраструктурные издержки. Нужны программисты. Да даже только для поддержки зоопарка виртуальных машин и регрессионных тестов нам понадобится специальный системный администратор. Потребуется создать сложную инфраструктуру, где поочередно для тестов запускаются разные виртуальные машины. Вдобавок, поскольку тесты должны проходить хотя бы за ночь, видимо потребуется сразу несколько компьютеров или мощный сервер.
Новые программисты, системные администраторы, компьютеры, серверы, виртуальные машины, дополнительный кабель, чтобы не сгорела электрическая сеть, съем дополнительного помещения для сервера.
К сожалению, то, что я описал не поняли 90% программистов и посмеялись. Провод он собрался какой-то тянуть…
Простой программист никогда не бегал разыскивать электрика, когда беда. У него просто дополнительный выходной. Программист никогда не проходил круги бюрократического ада, пытаясь протянуть провод от электрической будки. Провод я, конечно, привел для примера. Будет не провод, так что-то еще.
Мы в обозримое время это не потянем.
А можете рассказать о взаимодействиях с отечественными компаниями-разработчиками ПО? К примеру, с такими компаниями, как «Лаборатория Касперского», «Acronis» и так далее.
Андрей: Пока никакого с этими и подобными компаниями общения не было. Даже не знаю, что припомнить. Было мимолетное общение с Yandex. Думаю, можно рассказать, так как никакого NDA не подписывалось.
Yandex незадолго до IPO решил немного усилить себя приобретением некоторых стартапов. По крайней мере у нас сложилось такое впечатление. Они с охотой общались с разными командами. Пообщались и с нами. Но не сложилось.
Был задан вопрос: «Сколько денег и кому должен ваш стартап?». На что мы честно ответили: «Никому и нисколько. Стартап нам приносит деньги и мы в плюсе». Они удивились и потеряли интерес. Это понятно. Намного проще и выгоднее выкупать убыточные стартапы и тем самым получать в штат хороших сотрудников.
Мы предложили им просто купить PVS-Studio, но это тоже не вызвало интереса. По слухам, сейчас в Yandex используется статический анализатор Coverity.
Вы говорите, что проект CppCat — это облегченная версия PVS-Studio, из которой убрано все, что связано с корпоративной версией программы. Почему Вы не пошли по классическому пути формирования линейки из Standart, Professional и т.д. версий одного и того же продукта, с соответствующим набором функциональности для каждой из версий? Появился новый продукт с новым названием. Закладывали ли Вы какой-то маркетинговый ход в такое решение? Да, имеются случаи, когда одна и та же компания выпускает новый продукт и по каким-то причинам хочет его отвязать от ассоциаций нового продукта с иными продуктами компании, чтобы не кидать тень дешевым продуктом на более дорогие, дать продукту более емкое, короткое и более запоминающееся имя и т.д. Были ли подобные замыслы у Вас при выпуске CppCat?
Андрей: Мы пришли к выводу, что интерфейс PVS-Studio слишком сложен, перегружен и мешает быстрому знакомству с инструментом. Включение/выключение части функционала только еще больше все запутает. Мы решили кардинально переделать интерес и сделать новый продукт. В идеале мы хотим рекламировать только CppCat и массово его продавать. А PVS-Studio будет только на тот случай, кому CppCat будет тесен.
Что можете сказать о продукте Cppcheck? Есть ли какие-то идеи, планы по выпуску аналогичного коммерческого продукта для Linux с какими-то фишками?
Андрей: Cppcheck — хороший инструмент для знакомства с методологией статического анализа. Можно запустить даже на не
собирающемся проекте. То есть просто на наборе каких-то файлов. Конечно, качество анализа от этого страдает, зато очень просто попробовать.
Про Linux я уже отвечал. Нет, не планируем.
В октябре прошлого 2013 года была опубликована статья «PVS-Studio. Отсчет цен в обратную сторону», в которой был анонсирован задуманный эксперимент с формированием цен в индивидуальном порядке. Хотелось бы узнать о результатах этого эксперимента. Завершен ли он или продолжается? Были ли найдены интересные для Вас варианты ценообразования?
Андрей: Эксперимент продолжается. Выводы пока делать рано. Стало больше общения с потенциальными пользователями, но вот удастся ли зарабатывать больше денег, пока не понятно. У нас очень длительный цикл продаж. Нередко продажа PVS-Studio осуществляется через полгода, а то и через год после первого контакта в почте.
В статье так же описан вариант, когда покупают компании одну лицензию, а пользуется вся команда, приводя вполне законные аргументы. По моему мнению такая ситуация постепенно должна пропадать. Это все-таки «некая экономия на списках», все равно, что купить один отладчик на небольшую команду разработчиков. Вызывает неудобство.
Считаете ли Вы, что со временем небольшие компании, которые на данный момент могут поступать подобным образом, станут более сознательны и у Вас станет меньше преград для распространения лицензий для «одного разработчика»?
Андрей: Ситуация с покупкой одной лицензии на коллектив стала одной из причин создания CppCat. Ранее мы защищались от использования одиночных лицензий для работы с крупными проектами, повышением цены. PVS-Studio стал предназначен только для средних и больших проектов. К сожалению, этим мы потеряли действительно маленькие команды и индивидуальных разработчиков.
CppCat исправляет эту ситуацию. Даже экономный в тратах коллектив может позволить себе приобрести инструмент за $250 и проверить свой проект. Если проверять на одной единственной машине недостаточно – пусть приобретают еще лицензии для других разработчиков.
Кстати, именно по этой причине нам не нравится идея делать «плавающую» лицензию. Люди говорят, что им нужна «плавающая» лицензия, чтобы удобно работать то на ноутбуке, то на рабочем компьютере, то на домашнем компьютере. Но по факту, это сведется опять к тому, что одна лицензия будет стоять на нескольких компьютерах и ей будут пользоваться как захотят. Придумывать же и создавать сложную систему, отслеживающую чтобы одновременно не пользовались одной лицензией мы не хотим и не будем.
Да и вообще, все, кто говорит про плавающую лицензию, ложно притворяются нищими. Сами посудите. Итак, человек имеет помимо рабочего компьютера еще и свой домашний компьютер с ноутбуком. Везде установлено платное программное обеспечение, необходимое для работы. Эти компьютеры нужны ему не просто так, а для работы. Человек готов работать дома и в дороге. Все это целесообразно только при хорошем доходе. И при этом, люди жадничают потратить дополнительно $250-$500 долларов, для приобретения дополнительных лицензий. Несерьезно даже дискутировать.
Кстати вспомнился один схожий момент. В давние времена у антивируса Касперского (KAV) не было лицензии на 3 ПК. Нужно было покупать лицензию на 2 ПК и еще лицензию на 1 ПК. Или что-то в этом духе. Я уже забыл подробности. На форуме человек возмутился: «Я хочу лицензию сразу на 3 ПК. Она должна получиться дешевле, чем если бы я покупал 2 и 1. У меня недостаточно на это денег». На что ему справедливо заметили: «Если у Вас нашлись деньги на приобретение ТРЁХ компьютеров, то у Вас должны найтись деньги и на покупку антивируса».
Так же в этой статье описывается причина создания анализатора кода и доведение его до коммерческого продукта. Продукт нацелен на C++ разработчиков.
В отношении C++ нередко всплывают «разоблачающие» статьи, местами однобоко подчеркивающие и заключающие в жирную рамку некоторые подводные камни C++ — в общем есть некоторый тренд «ругать С++». Для меня C++ — это любимый, основной и единственный язык программирования; может быть это кому-то покажется странным…
Как Вы считаете каковы перспективы данного языка программирования в той целевой аудитории, на которую нацелены Ваши флагманские продукты? C++, Windows, настольное ПО — все вместе взятое весьма рискованная целевая аудитория. Риск оправдывается?
Андрей: Для меня ответ очевиден. На C++ написано столько больших и малых проектов, что никакой речи о существенном уменьшении роли этого языка в ближайшие 20 лет говорить не приходится. Достаточно посмотреть на такой большой проект как Chromium, и сразу понятно, что никуда программисты от языка C++ в ближайшее время не убегут.
Chromium появился совсем недавно и для его создания можно было делать выбор среди множества инновационных языков. Но в силу необходимости использования сотен сторонних библиотек на C/C++ это нереально. Слишком много всего наработано на языке C/C++. В общем-то, с этим языком такая же ситуация как с FORTRAN или COBOL. Даже хуже.
Программы на языках FORTRAN / COBOL по прежнему широко используются. Например, компания Intel зарабатывает больше денег от продажи компилятора FORTRAN, чем от продажи Intel C++. А программисты для COBOL сейчас являются самыми высокооплачиваемыми программистами.
Просто статьи про эти языки сейчас почти не пишут. Поэтому и кажется, что они сошли со сцены. Пишут статьи про инструменты и языки, которые продвигают. Что про FORTRAN или COBOL писать. Им и так неплохо.
Что-то можете сказать о конкурирующих с Вами продуктах и о преимуществах Ваших продуктов? Какие недостатки в конкурентах Вы видели, которые смогли решить в своих продуктах? Возможно Вы в конкурирующих продуктах видели некоторые сильные стороны, которые в то же время оказались и их уязвимым местом, которое также было закрыто одним из Ваших продуктов?
Андрей: Сложная тема. Хотя бы потому, что просто нам никто не дает даже пробную версию :).
Мы считаем нашим основным преимуществом простоту пробной версии и то, что мы легко идем на контакт по техническим вопросам. Я думаю непросто упросить крупную компанию что-то изменить или реализовать в своем инструменте. И главное, это может занять месяцы времени. У нас многие вопросы решаются в течение нескольких дней.
Подводя итоги
Что можно сказать в завершении нашей беседы? Компания, создающая продукты, рассмотренные в данной статье, — это малый бизнес, предоставляющий весьма интересные программные продукты. На пути малого бизнеса одна из ключевых проблем — это обязательная необходимость строгого учета средств. Что порой не дает возможности воплощать в жизнь и тестировать на потребителях казалось бы прорывные идеи. Этот вопрос может конечно быть решен, например, путем привлечения «чужих денег» (кредиты, инвесторы и т.д.). А вот чтобы решиться на такое привлечение, возможно стоит неоднократно подумать, взвесив все «за» и «против».
Есть очень положительный момент — компания существует и прибыльна! В то же время она может находить в себе силы на выпуск на рынок новых продуктов, в данном случае — это CppCat. У этого продукта в его позиционировании есть много интересных сторон. И даже на основной вопрос любого бизнеса: «А почему этот продукт должен купить потребитель?», уже есть хороший ответ в статье «Обзор статического анализатора CppCat», в которой приводятся вполне конкретные цифры в пользу продукта, основанные на материалах пробного использования продукта.
В то же время этот продукт нацеленный только на Windows. Относительно Linux вопросы не перестают задаваться команде разработчиков продукта. Вполне может быть Андрею и его коллегам стоит обратить на эти вопросы свое внимание более пристально. Иногда потребитель не знает чего бы он хотел, и может только выдавать пожелания об улучшении текущих продуктов. В таком случае компания может что-то новое выпустить на рынок и тем самым завоевать его при положительном отклике целевой аудитории. Контраргументы Андрея в отношении Linux мне именно в таком ключе и показались. Вполне может быть не стоит из пушки по воробья палить со всеми издержками, указанными Андреем, а просто изыскать средства на временное привлечение аналитика, который проанализирует ситуацию и выдаст пищу для размышлений о принятии решения о выпуске данной версии. Есть известное правило, что 20% чего-то приносит 80% прибыли. Но, к сожалению, мир меняется, а может и к счастью, происходит некоторая его большая поляризация и это правило уже становится 10/90. Вполне может оказаться, что по данным аналитика затраченные 90% усилий компании дадут всего лишь 10% прибыли, а вполне может и наоборот, выпуск продукта под Linux для компании станет прорывной идеей, которая даст возможность воплотиться мечтам компании. Думаю, что Андрею и коллегам стоит подумать над аналитикой этого вопроса. Или просто максимально «обводить в рамку» ту информацию, что их специализация — это Windows приложения. И что лучше иметь хорошую репутацию, подтвержденную финансовым откликом потребителей в одном секторе, чем сделать большой шаг в другом направлении и потерять все.
Почитывая блог о C++ на Хабре, в который иногда и пишу, заметил тенденцию, что разработчиков все больше и больше интересует вопрос статического анализа кода. Как пример этому можно привести то, что на момент написания данного материала в C++ блоге было подряд сразу две статьи о статическом анализе кода с тестированием соответствующих анализаторов (о CppCat и Cppcheck). Что говорит о том, что продукты на C++ становятся сложнее, а время разработчиков дороже — и это все можно принять как положительную тенденцию для развития ПО для статического анализа кода, чтобы на него возложить рутину по поиску ошибок как на более дешевое средство, чем разработчики, специалисты отдела контроля качества и т.д. Это и может быть положительным моментом для компаний, разрабатывающих такое ПО.
В связи с чем хочу пожелать команде разработчиков CppCat и PVS-Studio успехов. Андрею хочу сказать большое спасибо за любезно предоставленные развернутые ответы. Андрей так же был благодарен за возможность наконец-то мобилизоваться и изложить многие свои мысли, в том числе и привести немного примеров, когда их продукт помог в улучшении качества их же продукта, о чем, по его словам, рассказать просили уже не однократно.
Всем спасибо за внимание, а Андрею за интервью!
Автор: NYM