Опишем вкратце структуру системы. Надежность аппаратных средств обеспечивается четырьмя совершенно независимыми одинаковыми компьютерными системами, где, возможно, каждый датчик тоже имеет несколько копий — обычно четыре, причем каждая копия питает все четыре компьютерные линии связи. Если ввод от датчиков не согласуется, что зависит от обстоятельств, то в качестве эффективного ввода используются некоторые усредненные данные или набор основных данных. Алгоритм, используемый для каждого из четырех компьютеров, совершенно одинаковый, поэтому их вводы (как только каждый видит все копии датчиков) тоже одинаковые. Поэтому на каждом этапе результаты в каждом компьютере должны совпадать. Время от времени они сравниваются, и поскольку они могут работать при слегка различных скоростях, система останавливается и ждет установленное время, пока все показания сравниваются. Если показания одного из компьютеров не совпадают или ответ получен слишком поздно, три других, чьи показания оцениваются как правильные, остаются, а ошибочный полностью выводится из системы. Если дает сбой еще один компьютер, его показания не соответствуют двум другим, он тоже выводится из системы — оставшаяся часть полета прерывается, поступает команда на снижение, управляемая двумя последними компьютерами. Ясно, что это система с резервированием, так как отказ одного компьютера не влияет на полет. В конце концов в качестве дополнительного фактора безопасности можно поставить пятый независимый компьютер, память которого загружается только программами подъема и спуска и который способен контролировать спуск, если происходит нарушение работы более двух из четырех компьютеров основной линии.
В памяти основной линии компьютеров недостаточно места для всех программ подъема, спуска и контроля полезной нагрузки в полете, так что память загружается около четырех раз с кассетной ленты самими астронавтами.
В аппаратных средствах за много лет не произошло никаких изменений — используется аппаратура пятнадцатилетней давности — это сопряжено с колоссальными усилиями по замене и отладке нового программного обеспечения в такой сложной системе. Аппаратные средства устарели; например, установлена память старого типа с ферритовым сердечником. Становится все трудней найти производителей для поставки таких устаревших компьютеров высокого качества и высокой надежности. Современные компьютеры значительно более надежны, работают гораздо быстрее, имеют упрощенную схематику, позволяя выполнять больший объем работы, и не требуют дозагрузки памяти, поскольку их память значительно больше.
Программное обеспечение проверяется очень тщательно методом снизу вверх, «по восходящей». Во-первых, проверяется каждая новая строка программы, затем с помощью специальной функции контролируются разделы программы или модули. Границы раздвигаются шаг за шагом, пока новые изменения не будут вставлены в законченную систему и полностью проверены. Окончательный выход считается вновь выпущенным конечным продуктом. В заключение полностью независимая группа проверки, представляющая критикующую сторону по отношению к группе разработчиков программного обеспечения, тестирует и проверяет программное обеспечение, как будто эта группа является покупателем поставленного продукта. Существует дополнительная проверка с применением новых программ в имитирующем устройстве и так далее. Обнаружение ошибки в ходе проверочного тестирования считается очень серьезным промахом, причина ошибки тщательно изучается, чтобы избежать подобных ошибок в будущем. Такие неожиданные ошибки были обнаружены только шесть раз за все время программирования, программа изменена (для новых или модифицированных нагрузок). Принцип, которому следовали, состоял в том, что проверка — это не аспект программной безопасности, это просто тестирование безопасности, а не контроль катастрофы. О безопасности полета нужно судить исключительно по тому, насколько хорошо программа работает в проверочных тестах. Нарушения здесь приводят к серьезному беспокойству. Из всего вышесказанного ясно, что система проверки компьютерного программного обеспечения должна быть высочайшего качества. Казалось бы, что здесь мы не имеем элементов оглупления и снижения уровня стандартов безопасности, как в ракетах-носителях на твердом топливе или в основном двигателе космического корабля. Но… обратимся к последним предложениям руководства — предлагается сократить сложные и дорогостоящие тесты как необязательные. С этим никак нельзя согласиться, поскольку здесь не принимается во внимание едва уловимое взаимное влияние — источники ошибки, обусловленные даже незначительной заменой одной части программы на другую. Пользователи постоянно нуждаются в изменениях — новые нагрузки, новые требования и модификации. Изменения обходятся дорого, поскольку они требуют всестороннего тестирования. Правильный путь сберечь деньги — сократить количество самих изменений, но никак не качество тестирования для их осуществления.