Менеджеры НАСА обеспокоены качеством эксплуатируемого ПО и намерены существенно повысить надежность критически важных программных модулей, устанавливаемых на космические аппараты. Ведь, согласно многолетней статистике, одна ошибка присутствует в каждых 10-100 строках кода. НАСА выделило 600 тыс. долл. фирме GrammaTech на создание коммерческого варианта технологии статистического анализа исходного кода, которая исходно была разработана в подразделении надежного ПО LaRS лаборатории реактивных двигателей НАСА. В 2006 г. её ведущий специалист Герард Хольцманн сформулировал 10 правил создания надежного софта, которые выработались в многолетней практики подготовки лабораторией критически важного ПО. Эти правила, сильно напоминающие классические принципы структурного программирования, придуманные ещё полвека назад, ориентированы на формирование кодировщиком исходного кода, который затем хорошо подвергается автоматическому анализу. Вкратце перечислим правила Хольцмана:

1) код формируется простыми управляющими конструкциями и единым потоком (без операторов перехода);

2) все циклы должны иметь фиксированную верхнюю границу;

3) не допускается динамическое выделение памяти, за исключением команд инициализации нового объекта;

4) любая функция или метод после распечатки должны умещаться на стандартном листе бумаги, при этом для каждого оператора и каждого объявления переменной отводится отдельная строка. Таким образом, размер функции не превысит 50-60 операторов;

5) повсеместное использование отладочной функции assert() (тестовая проверка значений с выдачей сообщения при нарушении условия). В каждой функции должны присутствовать минимум два вызова assert(), например, для проверки корректности промежуточных расчетов;

6) видимость объектов из других модулей должна быть минимизирована;

7) каждая функция, вызывающая другую функцию, должна проверять корректность возвращаемого ей значения, а каждая вызываемая функция должна проверять корректность переданных ей параметров;

8) использование макропроцессора ограничивается инструкциями подключения внешних файлов и простыми макрорасширениями. Использование инструкций условной компиляции нежелательно;

9) использование указателей максимально ограничивается. В любом случае допускается не более одного уровня ссылок (не разрешены ссылки на ссылки). Указатели на функции запрещены;

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

Пресс-релиз