Через пару місяців колега перейде до нового проекту, і я успадкую один з його проектів. Щоб підготуватися, я вже наказав « Ефективно працювати Майклом Пером зі спадщиною» .
Але ця книга, а також більшість питань щодо застарілого коду, які я знайшов дотепер, стосуються справи про спадковий код як є. Але в цьому випадку я фактично маю доступ до оригінального розробника, і ми маємо певний час для впорядкованої передачі.
Деякі твори коду, який я буду успадковувати:
- Це функціонує: помилок невідомо, але оскільки вимоги до продуктивності продовжують зростати, деякі оптимізації стануть необхідними в не надто віддаленому майбутньому.
- Незадокументовано: Існує майже нульова документація на рівні методу та класу. Що, як передбачається, робить код на більш високому рівні, добре зрозуміло, тому що я вже багато років пишу проти його API (як чорна скринька).
- Тільки тести інтеграції вищого рівня: Існують лише тести інтеграції, які перевіряють належну взаємодію з іншими компонентами через API (знову ж таки, чорна скринька).
- Дуже низький рівень, оптимізований для швидкості: Оскільки цей код є центральним у всій системі додатків, багато його було оптимізовано кілька разів протягом багатьох років і є надзвичайно низьким рівнем (одна частина має власний менеджер пам'яті для певних структур / записи).
- Одночасне і без блокування: Хоча я дуже добре знайомий з одночасним і без замком програмуванням і фактично внесли в цей код кілька фрагментів, це додає ще один рівень складності.
- Велика база даних: Цей конкретний проект налічує більше десяти тисяч рядків коду, тому я не зможу все пояснити мені.
- Написано в Delphi: Я просто збираюся викласти це там, хоча я не вважаю, що мова є германною до питання, оскільки я вважаю, що цей тип проблеми є мовно-агностичним.
Мені було цікаво, як найкраще витратити час до його від'їзду. Ось пара ідей:
- Отримайте все, що можна побудувати на моїй машині: Хоча все слід перевіряти у контролі вихідного коду, хто не забув раз у раз перевіряти файл, тож, мабуть, це буде першим замовленням у бізнесі.
- Більше тестів: Хоча я хотів би більше тестів на рівні класу, щоб, коли я буду вносити зміни, будь-які помилки, які я ввів, можна було потрапити на ранній стадії, код, як зараз, не перевіряється (величезні класи, довгі методи, занадто багато взаємні залежності).
- Що потрібно документувати: Я думаю, що для початківців було б найкраще зосередити документацію на тих областях коду, які інакше було б важко зрозуміти, наприклад, через їх низький рівень / дуже оптимізований характер. Я боюся, що там є кілька речей, які можуть виглядати некрасиво і потребують рефакторингу / переписування, але насправді є оптимізаціями, які були там з вагомою причиною, яку я можу пропустити (пор. Джоел Спольський, речі , які тобі слід Ніколи не роби, Частина I )
- Як документувати: Я думаю, що найкращі діаграми класів архітектури та послідовності діаграм критичних функцій, які супроводжуються деякою прозою, були б найкращими.
- Кого документувати: Мені було цікаво, що було б краще, щоб він написав документацію чи попросив його пояснити мені, щоб я міг написати документацію. Я боюся, що речі, які для нього очевидні, але не мені, інакше не будуть висвітлені належним чином.
- Рефакторинг за допомогою парного програмування: Це може бути неможливо зробити через обмеження часу, але, можливо, я міг би відновити деякий його код, щоб зробити його більш рентабельним, поки він все ще був, щоб подати інформацію про те, чому все є таким, яким вони є.
Будь ласка, коментуйте та додайте до цього. Оскільки часу на все це недостатньо, я особливо зацікавлений у тому, як би ви дали пріоритет.
Оновлення: Коли проект здачі завершено, я розширив цей список, маючи власний досвід у цій відповіді нижче .