Встроенное программное обеспечение стало неотъемлемой частью нашей повседневной жизни. Он окружает нас повсюду: с его помощью мы можем посмотреть точное время на часах, доехать до дома, позвонить друзьям и договориться о встрече. Как только человек лишится всех вещей со встроенными системами, скорее всего, он будет без них во многом беспомощен. Этим системам доверяют не только повседневные бытовые дела вроде стирки белья или разогрева еды. Им мы тоже доверяем свою жизнь: кардиомониторы, электронные стетоскопы, пожарные датчики получили широкое распространение в медицине и пожарной безопасности. Поэтому ошибки во встроенном ПО могут привести к фатальным последствиям.

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

Одним из примеров статических анализаторов является инструмент PVS-Studio. Это анализатор кода C, C++, C# и Java. Именно об этом будет наш рассказ.

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

· Встроенная инструментальная цепочка GNU. Это коллекция компиляторов Arm, основанная на коллекции компиляторов GNU. Он поддерживает следующие процессоры ARM: Cortex-M0, Cortex-M0+, Cortex-M3, Cortex-M4, Cortex-M7, Cortex-M23, Cortex-M33, Cortex-R4, Cortex-R5, Cortex-R7, Cortex-R8. и Кортекс-R52. GNU Embedded Toolchain помогает разрабатывать код, работающий непосредственно на процессоре, без прослойки в виде операционной системы.

· Встроенная рабочая среда IAR. Инструментарий IAR Embedded Workbench, поддерживающий более 30 семейств различных микроконтроллеров (8051, AVR, PIC, ARM, STM8 и т. д.), представляет собой полноценную среду разработки. Инструментарий включает компилятор, ассемблер, компоновщик и отладчик. Он предоставляет специалистам бесшовный рабочий процесс и общий набор инструментов, в котором все компоненты легко взаимодействуют друг с другом. Инструменты IAR Embedded Workbench протестированы на совместимость с обширным списком мировых ИТ-вендоров и реализованы в интуитивно понятном дружественном интерфейсе.

· Встроенные средства разработки Keil для Arm. Инструменты разработки Keil предлагают полную среду разработки для устройств на базе ARM и объединяют набор инструментов для компиляции кода ARM C/C++.

Начиная с версии 6.27, статический анализатор кода PVS-Studio получил возможность классифицировать свои предупреждения по стандартам MISRA C и MISRA C++.

MISRA C — стандарт разработки программного обеспечения на языках C и C++, созданный MISRA (Ассоциация надежности программного обеспечения для автомобильной промышленности). Целью стандартов является повышение безопасности, переносимости и надежности программ для встраиваемых систем. Существует также стандарт MISRA для C++, который называется MISRA C++. Стандарты MISRA не ограничиваются автомобильной промышленностью, они используются при разработке медицинских устройств, телекоммуникаций, военных проектов и т.д.

Создатели PVS-Studio долгое время сомневались в добавлении стандартов MISRA в свой продукт. Большинство диагностик MISRA относятся к стилю кода: не использовать восьмеричные константы, правильно расставлять скобки, оставлять в функциях только одну точку возврата и так далее. Да, соответствие стандартам MISRA упростит и улучшит качество кода, но применить эти стандарты к существующему большому проекту сложно. В этом случае анализаторы начинают выдавать огромное количество предупреждений, связанных со стилем кода. В результате многие предупреждения об ошибках теряются в этой большой куче сообщений. Однако в 2018 году разработчики PVS-Studio начали поддерживать встраиваемые системы, поэтому реализация диагностики MISRA в анализаторе стала иметь смысл. Многие разработчики встраиваемых систем уже пишут проекты с учетом рекомендаций MISRA, поэтому поддержка стандарта MISRA в статическом анализаторе наверняка будет им полезна. Но чтобы не сбивать с толку разработчиков, не использующих его стандарты, по умолчанию эти диагностики отключены. Эту диагностику следует включать только в том случае, если разработчик целенаправленно хочет использовать стандарт MISRA в своей программе.

За последние два года PVS-Studio продвинулась в поддержке встраиваемого ПО. Добавлена ​​поддержка многих диагностик MISRA и нескольких компиляторов. Чтобы оценить статический анализатор в действии, предлагаю вам скачать его и попробовать проверить свой проект с помощью PVS-Studio.