Через пару месяцев коллега перейдет к новому проекту, и я унаследую один из его проектов. Чтобы подготовиться, я уже приказал Майклу Фезерсу « Эффективно работать с устаревшим кодом» .
Но эти книги, а также большинство вопросов по унаследованному коду, которые я нашел до сих пор, касаются случая наследования кода как есть. Но в этом случае у меня фактически есть доступ к первоначальному разработчику, и у нас есть время для упорядоченной передачи.
Некоторая информация о куске кода, который я унаследую
- Он функционирует: известных ошибок нет, но, поскольку требования к производительности продолжают расти, в ближайшем будущем потребуются некоторые оптимизации.
- Недокументированное: документации на уровне методов и классов практически нет. То, что код должен делать на более высоком уровне, тем не менее, хорошо понятно, потому что я писал против его API (как черный ящик) в течение многих лет.
- Только высокоуровневые интеграционные тесты: есть только интеграционные тесты, проверяющие правильное взаимодействие с другими компонентами через API (опять же, черный ящик).
- Очень низкоуровневый, оптимизированный по скорости: поскольку этот код является центральным для всей системы приложений, многие из них были оптимизированы несколько раз за последние годы и являются чрезвычайно низкоуровневыми (одна часть имеет собственный менеджер памяти для определенных структур / запись).
- Параллельное и без блокировок: хотя я очень хорошо знаком с параллельным и безблокировочным программированием и фактически внес несколько частей в этот код, это добавляет еще один уровень сложности.
- Большая кодовая база: этот конкретный проект содержит более десяти тысяч строк кода, поэтому я никак не смогу объяснить мне все.
- Написано в Delphi: Я просто собираюсь изложить это, хотя я не верю, что язык уместен в этом вопросе, так как я считаю, что этот тип проблемы не зависит от языка.
Мне было интересно, как лучше всего провести время до его отъезда. Вот пара идей:
- Получите все для сборки на моей машине: хотя все должно быть проверено в контроле исходного кода, кто не забыл время от времени проверять файл, так что, вероятно, это должно быть первым делом.
- Больше тестов: хотя я хотел бы больше модульных тестов на уровне класса, чтобы, когда я буду вносить изменения, любые обнаруженные ошибки можно было обнаружить на ранних этапах, а код, который есть сейчас, не тестируется (огромные классы, длинные методы, слишком много взаимозависимости).
- Что документировать: я думаю, для начала было бы лучше сосредоточить документацию на тех областях в коде, которые в противном случае было бы трудно понять, например, из-за их низкого уровня / высоко оптимизированной природы. Я боюсь, что есть несколько вещей, которые могут выглядеть уродливыми и нуждающимися в рефакторинге / переписывании, но на самом деле это оптимизация, которая была там по уважительной причине, которую я мог бы пропустить (см. Джоэл Спольски, Вещи , которые вы должны Никогда не делай, часть I )
- Как документировать: я думаю, что некоторые диаграммы классов архитектуры и диаграммы последовательности критических функций, сопровождаемые некоторой прозой, были бы лучшими.
- Кто должен документировать: мне было интересно, что было бы лучше, чтобы он написал документацию или попросил его объяснить мне, чтобы я мог написать документацию. Я боюсь, что вещи, которые очевидны для него, но не для меня, иначе не были бы покрыты должным образом.
- Рефакторинг с использованием парного программирования: это может быть невозможно из-за нехватки времени, но, возможно, я мог бы реорганизовать часть его кода, чтобы сделать его более удобным для сопровождения, пока он еще был рядом, чтобы предоставить информацию о том, почему все так, как есть.
Пожалуйста, прокомментируйте и добавьте к этому. Поскольку на все это не хватает времени, меня особенно интересует, как бы вы расставили приоритеты.
Обновление: По мере того, как проект передачи закончен, я расширил этот список своим собственным опытом в ответе ниже .