Я унаследовал 10-строчную программу, написанную на ассемблере 8051, которая требует некоторых изменений. К сожалению, это написано в лучших традициях спагетти-кода. Программа, написанная как один файл, представляет собой лабиринт операторов CALL и LJMP (всего около 1200), причем подпрограммы имеют несколько точек входа и/или выхода, если они вообще могут быть идентифицированы как подпрограммы. Все переменные глобальны. Есть комментарии; некоторые из них верны. Нет существующих тестов и нет бюджета для рефакторинга.
Немного информации о приложении: код управляет концентратором связи в торговом приложении, которое в настоящее время развертывается на международном уровне. Он обрабатывает два последовательных потока одновременно (с помощью отдельного коммуникационного процессора) и может разговаривать до четырех различных физических устройств, каждый из которых отличается от другого поставщика. Недавно изготовитель одного из устройств внес изменения ( "Да, мы внесли изменения, но программное обеспечение абсолютно одинаково!" ), Что приводит к тому, что некоторые системные конфигурации больше не работают, и не заинтересованы в его изменении (что бы это ни было они не менялись).
Программа была первоначально написана другой компанией, переданной моему клиенту, а затем изменена девять лет назад другим консультантом. Ни оригинальная компания, ни консультант не доступны в качестве ресурсов.
Основываясь на анализе трафика на одной из последовательных шин, у меня появился хак, который, похоже, работает, но он уродлив и не затрагивает основную причину. Если бы у меня было лучшее понимание программы, я считаю, что я мог бы решить настоящую проблему. У меня есть еще одна неделя до того, как код заблокирован, чтобы поддерживать дату отправки в конце месяца.
Оригинальный вопрос: мне нужно понять программу достаточно хорошо, чтобы внести изменения без поломки. Кто-нибудь разработал методы работы с этим беспорядком?
Я вижу здесь несколько замечательных предложений, но я ограничен временем. Однако у меня может быть еще одна возможность в будущем провести некоторые из более активных мероприятий.