Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top

Статический анализ в машиностроении

Статический анализатор PVS‑Studio предназначен для выявления ошибок в коде программ, написанных на языках C, C++, C#, Java. Анализатор крайне эффективен для поиска дефектов в embedded‑системах и других инженерных проектах.

Упрощение и удешевление процесса поиска ошибок

Чем раньше ошибка найдена, тем дешевле её исправление. Статический анализ находит ошибки ещё на этапе написания кода или, по крайней мере, во время ночных запусков на сервере. В итоге поиск и исправление многих ошибок обходятся гораздо дешевле.

Graph with cost to fix

Статический анализ может быть особенно полезным при отладке embedded‑систем.

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

В результате процесс поиска ошибки может сильно затянуться, так как часто непонятно, где её искать.

Если программист посчитает, что код написан правильно, это может повлечь долгие изыскания с привлечением схемотехников и других коллег, отвечающих за hardware‑часть.

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

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

Вот как один программист описывал нам подобную ситуацию:

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

Мне ставится очередная типовая задача, с которой я справляюсь буквально за пару часов и отдаю её двум коллегам для прошивки в созданное ими устройство. Коллеги удивляются, как быстро всё сделал, хвалят, на что я гордо заявляю: "Ну я уже профессионал, подобные вещи писать, и вообще — там всё просто". Коллеги удаляются с флешкой, куда я им записал бинарный файл для прошивки микроконтроллера.

И я забываю про это дело. Есть другие большие и более интересные задачи. Тем более, раз они не пришли, значит, всё хорошо.

А они пришли. Но только через неделю. Говорят, ничего не понимаем. Всю голову сломали. Не работает наш стенд. Вернее, работает, но не совсем как надо. Мы уже перепаяли его заново и исполнительные электромеханические детали заменили. Не работает... Может, посмотришь? Может, всё‑таки, в программе что‑то не так... Открываю код и сразу вижу ошибку в духе:

uchar A[3];
....
for (uchar i = 0; i != 4; i++)
  average += A[i];
average /= 3;

За основу был взят другой мой проект, и код во многом написан методом Copy‑Paste. В одном месте я забыл заменить количество датчиков: 4 на 3. Мне так стыдно было, что я двух людей заставил проработать впустую неделю.

Обнаружение ошибок в программе до её выпуска в серийном устройстве

Ошибки во встраиваемых устройствах крайне неприятны. Ведь их невозможно или почти невозможно исправить, если началось серийное производство. Что делать, если уже выпущены сотни тысяч стиральных машин, они разъехались по магазинам, но в определённом режиме работают неадекватно? В общем‑то, вопрос риторический, и реальных вариантов два:

  1. Смириться и получать негативные отзывы клиентов на различных сайтах, портя свою репутацию. Можно, конечно, выпустить и разослать к инструкции приложение "не делайте вот так", но это тоже слабое решение;
  2. Отозвать серию и заняться обновлением прошивок. Дорогое решение.

Более того, независимо от того, велик тираж устройств или мал, правка ошибок может быть проблемной или запоздалой:

  • Ракета упала, ошибка обнаружена, но поздно;

  • Пациенты умерли, ошибка обнаружена, но людей это не вернёт;

  • Машины не тормозили, ошибки найдены, но пострадавшим с этого прока нет.

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

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

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

Знания и опыт тысячи программистов, заложенные в анализатор

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

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

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

Используя статический анализатор, программисты могут подстраховать себя от множества подобных неприятных ситуаций. Дополнительно анализатор может использоваться для контроля качества кода в целом, что актуально, когда состав участников проекта растёт или изменяется. Другими словами, анализатор помогает отследить, не начал ли новичок писать плохой код.

Поддержка стандартов кодирования, таких как MISRA C, MISRA C++, AUTOSAR C++

Разработка встраиваемых систем часто подразумевает использование таких стандартов, как MISRA C, MISRA C++, AUTOSAR C++. Статические анализаторы могут проконтролировать, что код соответствует этим стандартам.

Стандарты родственны и служат одной цели — улучшить безопасность, переносимость и надёжность программ для встраиваемых систем.

СКАЧАТЬ И ПОПРОБОВАТЬ СТАТИЧЕСКИЙ АНАЛИЗАТОР КОДА PVS‑STUDIO

Unicorn with cool gift for all our awesome visitors :)
close form

Заполните форму в два простых шага ниже:

Ваши контактные данные:

Шаг 1
Поздравляем! У вас есть промокод!

Тип желаемой лицензии:

Шаг 2
Team license
Enterprise license
** Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности
close form
Запросите информацию о ценах
Новая лицензия
Продление лицензии
--Выберите валюту--
USD
EUR
RUB
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Бесплатная лицензия PVS‑Studio для специалистов Microsoft MVP
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Для получения лицензии для вашего открытого
проекта заполните, пожалуйста, эту форму
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Мне интересно попробовать плагин на:
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form

Ваш запрос в обработке

Мы пришлем ключ на .

Если вы так и не получили ответ, пожалуйста, проверьте, отфильтровано ли письмо в одну из следующих стандартных папок:

  • Промоакции
  • Оповещения
  • Спам