НовостиОбзорыСобытияIT@WorkРеклама
Идеи и практики автоматизации:

Блог

Как запрограммировать истребитель F-35, чтобы он не упал

Методы минимизации ошибок в программах ищутся с момента появления самой первой программы. Интересную лекцию на тему шаблонов типовых ошибок в программировании (которая применима отнюдь не только к программированию) прочел в университете Джорджа Мейсона господин Уолтер Брайтон, автор первого кросс-платформного компилятора C++ и языка D (см. предыдущий пост).

Его подход основывается на принципе Эйнштейна "умный человек решает проблему, а мудрый ее обходит".

[spoiler]Брайтон предлагает:
- регулярно вести список ошибок;
- выявлять в нем типовые (шаблонные) ошибки;
- перепроектировать процесс разработки так, чтобы эти шаблоны исключить.
В итоге же не потребуется ни тренировок в избегании ошибок, ни дополнительного тестирования, а выигрыш будет существенным, так как исключаются ошибки массовые.

Вопрос, как же (в каком направлении) процесс разработки перепроектировать. Правильный процесс создания практически чего угодно (применительно например к дизайну) характеризуется такими особенностями:
- легко делать правильно;
- трудно делать неправильно;
- когда это выглядит правильно, это правильно;
- когда это выглядит неправильно, это неправильно.

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

Брайтон в качестве одного из образцовых примеров приводит подробный стандарт кодирования на С++ для истребителя F-35 (объем бортового кода этой машины, напомню, больше, чем в Windows XP, где-то под 10 млн. строк кода -- и это в ситуации, когда отладка из-за аппаратной специфики весьма затруднена). Скачать его можно со странички Бьярна Страуструпа (pdf).

Еще один отличный стандарт -- Cert (C Secure Coding Standard), разработанный в институте программной инженерии SEI при университете Карнеги-Меллона (это где создана модель зрелости программных процессов CMM) при поддержке специалистов ISO.

Все подходы к минимизации ошибок Брайтон делит на две группы:
Субъективные.
- полагаться на удачу/авось;
- применять стандарты кодирования;
- использовать средства статического анализа кода;
- регулярно проводить обзоры кода, т.н. метод пристального взгляда (одно из важных правил, на котором категорически настаивает SEI);
- организовывать качественное обучение;
- нанимать хороших программистов.

Объективные.
- делать ошибки трудными для "создания";
- делать ошибки невозможными;
- делать правильный код легко пишущимся.

В этом как раз и помогут новые языки (например, D и Go из предыдущего поста) -- их грамматика не допустит множество потенциально ошибочных конструкций.