Tra un paio di mesi un collega passerà a un nuovo progetto e io erediterò uno dei suoi progetti. Per prepararti, ho già ordinato a Michael Feathers di Lavorare efficacemente con il codice legacy .
Ma questo libro così come la maggior parte delle domande sul codice legacy che ho trovato finora riguardano il caso di ereditare il codice così com'è. Ma in questo caso ho effettivamente accesso allo sviluppatore originale e abbiamo un po 'di tempo per un passaggio ordinato.
Qualche background sul pezzo di codice che erediterò:
- Funziona: non ci sono bug noti, ma man mano che i requisiti delle prestazioni continuano a salire, alcune ottimizzazioni diventeranno necessarie in un futuro non troppo lontano.
- Non documentato: c'è praticamente zero documentazione a livello di metodo e di classe. Ciò che il codice dovrebbe fare ad un livello superiore, tuttavia, è ben compreso, perché ho scritto per anni contro la sua API (come una black-box).
- Solo test di integrazione di livello superiore: ci sono solo test di integrazione che testano l'interazione corretta con altri componenti tramite l'API (di nuovo, black-box).
- Molto basso livello, ottimizzato per la velocità: Poiché questo codice è fondamentale per un intero sistema di applicazioni, molte di esse sono state ottimizzate più volte nel corso degli anni ed è estremamente di basso livello (una parte ha il proprio gestore di memoria per determinate strutture / record).
- Concurrent e lock-free: anche se ho molta familiarità con la programmazione simultanea e lock-free e ho effettivamente contribuito con pochi pezzi a questo codice, questo aggiunge un ulteriore livello di complessità.
- Large codebase: questo particolare progetto è più di diecimila righe di codice, quindi non è possibile che mi venga spiegato tutto.
- Scritto in Delphi: lo spiegherò qui, anche se non credo che la lingua sia pertinente alla domanda, poiché ritengo che questo tipo di problema sia indipendente dalla lingua.
Mi stavo chiedendo come sarebbe stato meglio spendere il tempo fino alla sua partenza. Ecco un paio di idee:
- Ottieni tutto per costruire sulla mia macchina: Anche se tutto dovrebbe essere controllato nel controllo del codice sorgente, chi non ha dimenticato di archiviare un file una volta ogni tanto, quindi questo dovrebbe probabilmente essere il primo ordine di affari.
- Più test: Mentre vorrei testare più unità di livello di classe in modo tale che quando farò dei cambiamenti, qualsiasi bug che introduco possa essere catturato nelle prime fasi, il codice così com'è ora non è testabile (enorme classi, metodi lunghi, troppe dipendenze reciproche).
- Che cosa documentare: penso che per i principianti sarebbe meglio concentrare la documentazione su quelle aree del codice che altrimenti sarebbero difficili da comprendere, ad es. a causa della loro natura di basso livello / altamente ottimizzata. Temo che ci siano un paio di cose che potrebbero sembrare brutte e che necessitano di refactoring / riscrittura, ma in realtà sono ottimizzazioni che sono state là fuori per una buona ragione che potrei perdere (cfr Joel Spolsky, Cose che non dovresti mai fare, parte I )
- Come documentare: penso che alcuni diagrammi di classe dell'architettura e dei diagrammi di sequenza delle funzioni critiche accompagnati da una certa prosa sarebbero i migliori.
- Chi documentare: Mi chiedevo cosa sarebbe stato meglio, per fargli scrivere la documentazione o farglielo spiegare, così posso scrivere la documentazione. Ho paura, che le cose che sono ovvie per lui, ma non per me, non sarebbero coperte in modo appropriato.
- Rifattorizzazione utilizzando la programmazione a coppie: Questo potrebbe non essere possibile a causa di limiti di tempo, ma forse potrei refactoring alcuni dei suoi codici per renderlo più mantenibile mentre era ancora in giro per fornire input sul perché cose sono come sono.
Si prega di commentare e aggiungere a questo. Dato che non c'è abbastanza tempo per fare tutto questo, sono particolarmente interessato a come daresti la priorità.
Aggiornamento: Man mano che il progetto di handover è finito, ho ampliato questa lista con le mie esperienze in questa risposta sotto .