Как программировали Curiocity

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



Всего в проекте 3.8млн строк кода, пишут на Си под ОС "VxWorks". 120 потоков.
Вот (используемые стандарты кодирования), используют 5 разных статических анализаторов кода.

Что касается тестирования, их три вида — Unit-тесты, Интеграционные тесты и тесты на совпадение с математической моделью.

За падающую сборку или интеграционные тесты предусмотрены штрафы, а top 3 работников с наибольшим количеством ошибок весит на «доске почета».

6 комментариев

avatar
Интересно было узнать о методологии написания кода с таким высоким уровнем надежности. Хотя «штрафы» и «доска почета», ИМХО, смотрятся как-то по-детски :)

А кто-то пробовал использовать статические анализаторы в embedded проектах?

Я как-то попытался прогнать код через статический анализатор (какой-то из open source, точное название уже не вспомню). Он «сходил с ума» от записи и чтения регистров периферии МК замапленных на память. Например, с его точки зрения (и понять его логику можно), запись/чтение в память по произвольному адресу (типа PORTA = 0xFF) – это баг.

Можно, конечно прогонять через анализатор только код «высокого уровня», но это как-то не интересно.
avatar
Я пользовался встроенным в IAR MIRSA. Круто конечно, но писать очень сложно, он сильно замедляет написание кода. В итоге, отказался. Кроме того я, в основном, пишу на «Си с классами» (то есть на C++, не придерживаясь ОО подхода). Анализаторов, которые глотают такой «суржик» нет, насколько я знаю.
Комментарий отредактирован 2012-12-03 21:20:16 пользователем bsvi
avatar
пишу на «Си с классами»
Хм, я так понял, ты в курсе недавних споров не ЕЕ?

Я, честно говоря, редко пишу под МК на «Си с классами». Я привык либо проектировать программу под С++ (со всеми его возможностями), либо проектировать под С. Я, для себя, не вижу особого смысла а применении С++ для МК (это исключительно мое ИМХО). С++ очень мощный инструмент, но специфика МК очень ограничивает его использование. Это что-то типа «вот тебе пряник со вкусной начинкой, но начинку кушать нельзя» :)
Комментарий отредактирован 2012-12-03 22:31:40 пользователем e_mc2
avatar
Про споры на ЕЕ не в курсе, но я умею программировать и на Cи и на C++. Как раз, из-за специфики МК я беру лучшее из двух миров и использую стиль «Си с классами» (компилятор, естественно, C++).

Использовать все возможности C++ — это сродни самоубийству. Это очень сложный и неоднозначный язык (хотя, так и не кажется с первого взгляда), именно поэтому софт для Curiosity пишут на Си.
avatar
Про споры на ЕЕ не в курсе

Показалось.

Использовать все возможности C++ — это сродни самоубийству

При проектировании я либо опираюсь на каноны ООП либо пишу чисто структурный код. Многие возможности С++ я не использую даже при программировании для ПК (здесь, я разделяю твой поход и придерживаюсь «Google C++ Style Guide»).

Просто, ИМХО, от С++ на МК остается слишком мало. Даже динамический полиморфизм требует накладных расходов (да, не таких уж значительных, но иногда это критично). Да, есть инкапсуляция и наследование – но особого проффита только от них я не вижу без применения ООП в комплексе. Нет иерархии объектов, нет уровней абстракции. ИМХО, действительно получается «суржик». Хотя, безусловно, есть шаблоны. С их помощью можно много чего наворотить. Но я не любитель обобщённого программирования.

Все вышесказанное – это исключительно мое субъективное мнение.
avatar
От C++ остается объекты, строгая типизация, перегрузка, namespace (очень люблю их, они хорошо структурируют программу). Полиморфизм совсем мало кушает, особенно на современных процессорах, которые под него заточены.

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

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