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