Как программировали Curiocity
В видео, Джерард Хольцман рассказывает о том, как происходит разработка кода для Curiosity. Есть чему поучиться. К сожалению, многое из этого не получится применить в наших с вами проектах из-за ограничения по времени и стоимости, но посмотреть, как пишется самый надежный код на двух планетах очень даже интересно.
Всего в проекте 3.8млн строк кода, пишут на Си под ОС "VxWorks". 120 потоков.
Вот (используемые стандарты кодирования), используют 5 разных статических анализаторов кода.
Что касается тестирования, их три вида — Unit-тесты, Интеграционные тесты и тесты на совпадение с математической моделью.
За падающую сборку или интеграционные тесты предусмотрены штрафы, а top 3 работников с наибольшим количеством ошибок весит на «доске почета».


Всего в проекте 3.8млн строк кода, пишут на Си под ОС "VxWorks". 120 потоков.
Вот (используемые стандарты кодирования), используют 5 разных статических анализаторов кода.
Что касается тестирования, их три вида — Unit-тесты, Интеграционные тесты и тесты на совпадение с математической моделью.
За падающую сборку или интеграционные тесты предусмотрены штрафы, а top 3 работников с наибольшим количеством ошибок весит на «доске почета».
6 комментариев
А кто-то пробовал использовать статические анализаторы в embedded проектах?
Я как-то попытался прогнать код через статический анализатор (какой-то из open source, точное название уже не вспомню). Он «сходил с ума» от записи и чтения регистров периферии МК замапленных на память. Например, с его точки зрения (и понять его логику можно), запись/чтение в память по произвольному адресу (типа PORTA = 0xFF) – это баг.
Можно, конечно прогонять через анализатор только код «высокого уровня», но это как-то не интересно.
Я, честно говоря, редко пишу под МК на «Си с классами». Я привык либо проектировать программу под С++ (со всеми его возможностями), либо проектировать под С. Я, для себя, не вижу особого смысла а применении С++ для МК (это исключительно мое ИМХО). С++ очень мощный инструмент, но специфика МК очень ограничивает его использование. Это что-то типа «вот тебе пряник со вкусной начинкой, но начинку кушать нельзя» :)
Использовать все возможности C++ — это сродни самоубийству. Это очень сложный и неоднозначный язык (хотя, так и не кажется с первого взгляда), именно поэтому софт для Curiosity пишут на Си.
Показалось.
При проектировании я либо опираюсь на каноны ООП либо пишу чисто структурный код. Многие возможности С++ я не использую даже при программировании для ПК (здесь, я разделяю твой поход и придерживаюсь «Google C++ Style Guide»).
Просто, ИМХО, от С++ на МК остается слишком мало. Даже динамический полиморфизм требует накладных расходов (да, не таких уж значительных, но иногда это критично). Да, есть инкапсуляция и наследование – но особого проффита только от них я не вижу без применения ООП в комплексе. Нет иерархии объектов, нет уровней абстракции. ИМХО, действительно получается «суржик». Хотя, безусловно, есть шаблоны. С их помощью можно много чего наворотить. Но я не любитель обобщённого программирования.
Все вышесказанное – это исключительно мое субъективное мнение.
Я тоже очень не люблю шаблоны в С++ варианте хотябы потому, что они сложны для понимания. Особенно, когда начинаются какие-то фокусы в стиле Александреску.
Вообщем, мы с тобой очень похоже мыслим, эт хорошо :)