В начале года наша команда года провела несколько встреч и выработала внутреннюю карту развития компании и продукта PVS-Studio на 2021 год. Мы решили оформить часть наших планов в виде этой статьи. Неопубликованная часть планов секретна? Нет, но вряд ли нашим читателям будут интересны подробности по планам обучения отдельных сотрудников или когда и какой сервер мы планируем приобрести. Здесь мы опишем основные планы развития самого программного продукта PVS-Studio и его позиционирования. PVS-Studio является статическим анализатором общего назначения, и именно так мы продолжим его развивать. Однако в этом году мы сделаем уклон в сторону его позиционирования как средства статического тестирования защищённости приложений (Static Application Security Testing, SAST). Для этих целей мы сосредоточимся над поддержкой CWE, OWASP, SEI CERT, MISRA, AUTOSAR. На данный момент PVS-Studio поддерживает анализ программ на языках C, C++, C#, Java. Также поддерживаются некоторые расширения языка C++, например, C++/CLI и C++/CX. В 2021 году мы не планируем реализовывать поддержку новых языков, но планируем развивать анализатор "вширь". А именно, хочется поддержать дополнительно несколько новых компиляторов (C, C++) для микроконтроллеров и некоторые среды разработки, такие как CLion. Помимо усовершенствований, которые будут описаны ниже, ядра всех анализаторов (C++, C#, Java) будут развиваться по следующим направлениям: Мы решили сразу перечислить все эти пункты, чтобы не повторять их ниже для каждого из языков.  Примечание. Если вы не знакомы с терминами "анализ потока данных" и "ручная аннотация функций", то предлагаем познакомиться с публикацией "Технологии, используемые в анализаторе кода PVS-Studio для поиска ошибок и потенциальных уязвимостей". Постоянное развитие анализатора требует обновление сайта, чтобы отражать актуальную информацию и организовывать понятный доступ к новым фичам с документацией. В какой-то момент продукт перерастает идеологию и возможности текущего сайта. Сейчас у нас наступил тот момент. И в первой половине 2021 года мы полностью обновим наш сайт, переработав размещение информации на нём и сделав новый дизайн. При подготовке нового сайта нами была проведена работа по категоризации и тегированию имеющихся у нас статей. Теперь такой подход позволит сделать релевантные рассылки. Например, можно будет подписаться на статьи о проверке проектов, либо только на анонсы релизов или теоретические статьи. Будет продолжена поддержка стандартов кодирования MISRA C и MISRA C++. Но, помимо этого, пришло время также поддержать более современный набор правил, описываемый в The AUTOSAR C++14 Coding Guidelines. Этот документ является обновлением стандарта MISRA C++:2008, а также основан на других ведущих стандартах написания кода и исследованиях, проделанных организацией AUTOSAR. Ядра анализатора PVS-Studio для C# и Java умеют в том или ином виде осуществлять межмодульный анализ. По ряду причин реализация межмодульного анализа в C++ анализаторе более сложна и постоянно откладывалась. В 2021 году мы чувствуем силы реализовать межмодульный анализ потока данных. Это позволит находить, например, такие ошибки, когда в функцию передаётся нулевой указатель, и эта функция, реализованная в другом юните трансляции, разыменовывает этот указатель, не выполнив предварительную проверку. На всякий случай уточним. Нет, речь идёт не про модули из C++20. Поддержка модулей — это другая задача, которой мы тоже будем заниматься, но, возможно, не в этому году. Речь идёт про анализ, учитывающий взаимодействие функций, реализованных в разных *.cpp файлах (в разных единицах трансляции). Планируется частично поддержать извлечение дополнительной информации из кода, размеченного с помощью языка аннотирования Microsoft Source-Code (SAL). За прошедшие несколько лет PVS-Studio для C и C++ существенно расширила поддержку различных компиляторов, при этом мы концентрировались, в основном, на компиляторах для платформы ARM. В предстоящем году мы уделим внимание и более экзотическим платформам. Мы изучим вопрос возможности портировать ядро C++ анализатора на платформу Эльбрус. Около года назад мы уже думали о таком эксперименте, но компилятор под эту платформу отстаёт от современного стандарта языка C++. Анализатор PVS-Studio пишется с использование последних новшеств языка, так как нам ведь надо самим тренироваться с новыми конструкциями языка C++ :). Но здесь написание кода в таком стиле является минусом. Посмотрим, как обстоят дела в этом году, но пока ничего не обещаем. Планируется выпустить плагин для среды разработки CLion. Это кроссплатформенная IDE для C и C++ от компании JetBrains. Кстати, если вы хотите стать бета-тестером этого плагина, то вы можете перейти по этой ссылке и заполнить форму. И мы свяжемся с вами, когда у нас появится первая его реализация. Сейчас анализатор PVS-Studio для C++ можно использовать на Unix-подобных системах (Linux, macOS) совместно с большим количеством IDE и сборочных систем. Однако интеграция с такими кроссплатформенными IDE осуществляется через стандартные средства самой IDE, обычно в виде загрузки отчёта анализатора в формате предупреждений компилятора. Данный способ интеграции, хотя и вполне достаточный для работы, тем не менее проигрывает интеграции анализатора через расширение (плагин) для IDE, как в случае с плагином PVS-Studio для Visual Studio. Через IDE плагин пользователю доступно множество дополнительных возможностей анализатора, таких, как подавление сообщений, удобная разметка ложно-позитивных срабатываний и т.п. В связи с тем, что для Unix-подобных систем, в отличии от Windows с её Visual Studio, нет одной наиболее распространённой IDE, до данного момента мы откладывали разработку полноценного плагина под какую-либо из кроссплатформенных IDE для языка C++. Тем не менее, так как сейчас мы видим, что популярность JetBrains CLion среди наших пользователей растёт каждый год, и у нас уже есть поддержка "близких" к этой IDE сред IntelliJ IDEA и Rider, мы решили, что пришло время поддержать и CLion. При реализации новых диагностик планируется сосредоточиться на OWASP и особенно OWASP Top 10. На наш взгляд статический анализатор для C# очень сильно выиграет от увеличения количества диагностик из сферы безопасности. Мы планируем добавить поддержку проектов на .NET 5, а также работу с .NET 5 SDK. Вместе с этим будет добавлен анализ кода, написанного на C# 9. Если верить roadmap от Microsoft, выпуск новых версий .NET планируется каждый год. Следовательно, в 2021 планируется выпуск уже .NET 6, поддержку которого мы также хотим добавить. Хочется провести аудит старых диагностик, с целью посмотреть, насколько они учитывают новшества языка, появившиеся в версиях C# 8 и C# 9. Возможно, некоторые диагностики можно улучшить, и они начнут выдавать срабатывания на коде, использующие самые современные конструкции. Вряд ли таких случаев будет много, но провести такое исследование однозначно будет полезно. Планируется разметить часть существующих диагностик, чтобы они соответствовали OWASP классификации потенциальных уязвимостей. Также планируется создание новых диагностик, ориентируясь на OWASP и особенно на OWASP Top 10. Возможно, в этом году мы реализуем плагин для Visual Studio Code, что позволит удобно просматривать отчёты, сгенерированные консольной версией анализатора. Сейчас для этого можно использовать утилиту C and C++ Compiler Monitoring UI, входящую в дистрибутив PVS-Studio. Или конвертировать отчёт в HTML формат. Это вполне рабочие варианты, но используя плагин для Visual Studio Code будет и удобнее работать с отчётом, и вносить правки в код. Выше, в разделе про поддержку CLion, мы также писали про существующую ситуацию с "зоопарком" различных IDE для Unix-образных систем. Сейчас мы видим перспективу того, что именно Visual Studio Code, за счёт своей открытости и модульности, имеет шансы стать де-факто самой универсальной IDE для разработки под большое количество языков, компиляторов и платформ. В это ещё одна причина, по которой мы планируем уделить в предстоящем году внимание именно этой IDE. Помимо плана по разработке продукта, дорожная карта включает в себя задачи, связанные с рекламными активностями. Это наша внутренняя кухня, но один момент хочется озвучить публично. Мы всегда активно участвовали в различных конференциях и других offline мероприятиях (описание, как прошло первое и второе полугодие 2019 года). В 2020 году почти все такие активности были свёрнуты, и 2021 год может пройти аналогично. Нам очень не хватает offline мероприятий. Во-первых, это был отличный способ получить фидбек от наших клиентов, потенциальных пользователей и вообще узнать от посетителей, что происходит в мире программного обеспечения. Во-вторых, это был хороший способ сделать дополнительные касания, подогреть интерес к продукту. И, в-третьих, это позитивно сказывалось на сотрудниках. Они могли посещать мероприятия с целью передохнуть, других посмотреть и себя показать.  Поэтому мы подумали и решили попробовать в 2021 году организовать цикл маленьких собственных offline мероприятий. Это будет что-то среднее между бизнес-обедами и семинарами. Мы будем собирать представителей компаний-клиентов, а также тех, кто пока только рассматривает возможность приобретения лицензии. Мы будем рассказывать о новых возможностях PVS-Studio, о способах их интеграции с различными системами, такими как Jenkins, IncrediBuild, Travis CI, SonarQube. Для разнообразия, возможно будем приглашать и сторонних докладчиков, которые захотят рассказать что-то на тему статического анализа кода. И естественно будут дискуссии, ответы на вопросы и демонстрация, как и что работает. Для простоты начать мы хотим с Москвы. А если нам понравится, как всё проходит, то мы расширим географию мероприятий. Мероприятия будут бесплатные для участников. Вопрос к читателям. Есть ли здесь кто-то, кто уже хочет принять участие в таком мероприятии как слушатель? Если да, то просим написать нам, что вы хотели бы присутствовать в качестве слушателя или докладчика. Так мы сможем понять заинтересованность аудитории к таким offline активностям, и сможем лучше спланировать их проведение. Заранее спасибо. Директор по маркетингу