Бензобак для троллейбуса
Пишем СПО для сложного аппаратного комплекса, состоящего из нескольких вычислительных модулей, оптимизированных под выполнение узкоспециализированных задач. Модули общаются между собой по общей шине, протокол обмена описывает 256 управляющих слов, с каждым из которых до 12 параметров, которые зависят от режима работы комплекса (их 15). Итого — порядка 10 тысяч уникальных параметров, жёстко привязанных к железу.
СПО для каждого модуля в силу специфичности делает своя лаборатория. Когда комплекс собрали, он оказался более-менее работоспособным — за исключением одного модуля.
Причину нашли почти сразу. Как формируют параметры перед отсылкой? Программист обнуляет все биты управляющего слова и формирует набор параметров с соответствии с режимом работы. Что должен сделать программист на том конце? Правильно: определить режим работы и прочитать нужные параметры.
Их программист сделал иначе. Он считывал из шины все управляющие параметры во всех режимах, проводил над ними сложные вычисления, а потом определял режим работы и выбирал нужные. В результате 75% его процедур вычисляли формулы типа sqrt(−1)/0.
Гениальным было и предложение по устранению проблемы. «А вы не могли бы формировать неиспользуемые параметры такими, какими они были бы, если бы они использовались?» Угу, только параметры к железу привязаны. Рассчитайте-ка нам объём бензобака для троллейбуса, чтобы на нём можно было проехать 200 км по горному серпантину, а?