>
>
Дорожная карта PVS-Studio на 2021 год

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

Дорожная карта PVS-Studio на 2021 год

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

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) будут развиваться по следующим направлениям:

  • Поддержка новых версий языков программирования;
  • Улучшение существующих диагностик с целью уменьшения количества ложных срабатываний;
  • Реализация новых диагностик общего назначения (GA);
  • Ручная аннотация функций в популярных библиотеках для увеличения количества обнаруживаемых дефектов;
  • Развитие внутренних механизмов анализаторов, таких, как анализ потоков данных, символьные вычисления, межпроцедурный и межмодульный анализ и т.д.

Мы решили сразу перечислить все эти пункты, чтобы не повторять их ниже для каждого из языков.

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

Сайт

Новый сайт анализатора

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

Email подписка на новости

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

C++

MISRA C, MISRA C++, AUTOSAR

Будет продолжена поддержка стандартов кодирования MISRA C и MISRA C++. Но, помимо этого, пришло время также поддержать более современный набор правил, описываемый в The AUTOSAR C++14 Coding Guidelines. Этот документ является обновлением стандарта MISRA C++:2008, а также основан на других ведущих стандартах написания кода и исследованиях, проделанных организацией AUTOSAR.

Межмодульный анализ потока данных

Ядра анализатора PVS-Studio для C# и Java умеют в том или ином виде осуществлять межмодульный анализ. По ряду причин реализация межмодульного анализа в C++ анализаторе более сложна и постоянно откладывалась. В 2021 году мы чувствуем силы реализовать межмодульный анализ потока данных. Это позволит находить, например, такие ошибки, когда в функцию передаётся нулевой указатель, и эта функция, реализованная в другом юните трансляции, разыменовывает этот указатель, не выполнив предварительную проверку.

На всякий случай уточним. Нет, речь идёт не про модули из C++20. Поддержка модулей — это другая задача, которой мы тоже будем заниматься, но, возможно, не в этому году. Речь идёт про анализ, учитывающий взаимодействие функций, реализованных в разных *.cpp файлах (в разных единицах трансляции).

SAL

Планируется частично поддержать извлечение дополнительной информации из кода, размеченного с помощью языка аннотирования Microsoft Source-Code (SAL).

Компиляторы для embedded платформ

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

Эльбрус

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

CLion

Планируется выпустить плагин для среды разработки 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.

C#

OWASP

При реализации новых диагностик планируется сосредоточиться на OWASP и особенно OWASP Top 10. На наш взгляд статический анализатор для C# очень сильно выиграет от увеличения количества диагностик из сферы безопасности.

.NET

Мы планируем добавить поддержку проектов на .NET 5, а также работу с .NET 5 SDK. Вместе с этим будет добавлен анализ кода, написанного на C# 9.

Если верить roadmap от Microsoft, выпуск новых версий .NET планируется каждый год. Следовательно, в 2021 планируется выпуск уже .NET 6, поддержку которого мы также хотим добавить.

Учесть особенности C# 8 и C# 9 в старых диагностиках

Хочется провести аудит старых диагностик, с целью посмотреть, насколько они учитывают новшества языка, появившиеся в версиях C# 8 и C# 9. Возможно, некоторые диагностики можно улучшить, и они начнут выдавать срабатывания на коде, использующие самые современные конструкции. Вряд ли таких случаев будет много, но провести такое исследование однозначно будет полезно.

Java

Планируется разметить часть существующих диагностик, чтобы они соответствовали OWASP классификации потенциальных уязвимостей. Также планируется создание новых диагностик, ориентируясь на OWASP и особенно на OWASP Top 10.

Прочее

Visual Studio Code

Возможно, в этом году мы реализуем плагин для Visual Studio Code, что позволит удобно просматривать отчёты, сгенерированные консольной версией анализатора. Сейчас для этого можно использовать утилиту C and C++ Compiler Monitoring UI, входящую в дистрибутив PVS-Studio. Или конвертировать отчёт в HTML формат. Это вполне рабочие варианты, но используя плагин для Visual Studio Code будет и удобнее работать с отчётом, и вносить правки в код.

Выше, в разделе про поддержку CLion, мы также писали про существующую ситуацию с "зоопарком" различных IDE для Unix-образных систем. Сейчас мы видим перспективу того, что именно Visual Studio Code, за счёт своей открытости и модульности, имеет шансы стать де-факто самой универсальной IDE для разработки под большое количество языков, компиляторов и платформ. В это ещё одна причина, по которой мы планируем уделить в предстоящем году внимание именно этой IDE.

Offline мероприятия

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

Мы всегда активно участвовали в различных конференциях и других offline мероприятиях (описание, как прошло первое и второе полугодие 2019 года). В 2020 году почти все такие активности были свёрнуты, и 2021 год может пройти аналогично.

Нам очень не хватает offline мероприятий. Во-первых, это был отличный способ получить фидбек от наших клиентов, потенциальных пользователей и вообще узнать от посетителей, что происходит в мире программного обеспечения. Во-вторых, это был хороший способ сделать дополнительные касания, подогреть интерес к продукту. И, в-третьих, это позитивно сказывалось на сотрудниках. Они могли посещать мероприятия с целью передохнуть, других посмотреть и себя показать.

Поэтому мы подумали и решили попробовать в 2021 году организовать цикл маленьких собственных offline мероприятий. Это будет что-то среднее между бизнес-обедами и семинарами. Мы будем собирать представителей компаний-клиентов, а также тех, кто пока только рассматривает возможность приобретения лицензии. Мы будем рассказывать о новых возможностях PVS-Studio, о способах их интеграции с различными системами, такими как Jenkins, Incredibuild, Travis CI, SonarQube. Для разнообразия, возможно будем приглашать и сторонних докладчиков, которые захотят рассказать что-то на тему статического анализа кода. И естественно будут дискуссии, ответы на вопросы и демонстрация, как и что работает.

Для простоты начать мы хотим с Москвы. А если нам понравится, как всё проходит, то мы расширим географию мероприятий. Мероприятия будут бесплатные для участников.

Вопрос к читателям. Есть ли здесь кто-то, кто уже хочет принять участие в таком мероприятии как слушатель? Если да, то просим написать нам, что вы хотели бы присутствовать в качестве слушателя или докладчика. Так мы сможем понять заинтересованность аудитории к таким offline активностям, и сможем лучше спланировать их проведение. Заранее спасибо.

Дополнительные ссылки