In un mondo ideale, tutto il codice scritto da un determinato sviluppatore sarà ben documentato, ben strutturato e testato in modo comprensibile, sia con strumenti automatici come test unitari sia usando script di casi che un utente esegue per verificare che si ottenga il risultato atteso.
Tuttavia, la prima cosa che imparerai è che non viviamo in un mondo ideale!
Molti sviluppatori non documentano correttamente il loro codice, se non altro, mescolano la logica aziendale con il codice non correlato e l'unico test che eseguono è una rapida analisi di ciò che si aspettano essere il normale caso d'uso.
Quando si lavora con codice come questo, la prima cosa da fare è stabilire cosa deve fare. Se ci sono commenti possono darti degli indizi, ma non contare su di esso. È la mia esperienza che molti programmatori non sono bravi a spiegarsi e anche se lasciano commenti potrebbero non avere senso. Tuttavia, a meno che tu non sia l'unico programmatore dell'azienda, sicuramente qualcuno deve avere almeno un'idea di base su cosa serve il codice e cosa deve fare. Chiedi in giro!
Se hai dei test unitari, ti renderanno la vita molto più facile. In caso contrario, parte dell'apprendimento del codebase può comportare la scrittura di unit test per il codice già esistente. Normalmente questa non è considerata una buona pratica perché se si scrivono unit test per adattarsi al codice esistente, si finiranno con unit test che pensano che il codice funzioni così com'è (verranno scritti per assumere che il comportamento che in realtà è un bug è corretto), ma almeno ti dà una base. Se in seguito scopri che alcuni comportamenti che ritieni fossero corretti sono in realtà errati, puoi modificare il test unitario per verificare quale sia il risultato atteso anziché il risultato che il codice fornisce ora. Dopo aver effettuato un test unitario, è possibile apportare modifiche e valutare quali effetti collaterali apportano eventuali modifiche.
Infine, la migliore risorsa che hai quando hai a che fare con un pezzo di codice non documentato è chiedere agli utenti finali. Potrebbero non sapere nulla del codice, ma sanno cosa vogliono che faccia l'applicazione. La raccolta dei requisiti è la prima fase di qualsiasi progetto e parlare con i potenziali utenti del sistema da sviluppare è sempre una parte importante di questo. Basti pensare che sta facendo la fase di acquisizione dei requisiti per un nuovo progetto che sembra essere già stato costruito.
Tieni presente che anche un codice ben scritto e ben documentato può essere difficile da comprendere per un estraneo. Il codice è essenzialmente un'espressione di come la persona che l'ha scritto stava pensando in quel momento, e ognuno ha il proprio processo di pensiero unico. Dovrai imparare ad essere un po 'paziente e ad essere un detective. Essere in grado di entrare nel processo di pensiero di un'altra persona è difficile, ma è un'abilità essenziale per un programmatore che fa manutenzione sul codice esistente. Poiché la maggior parte della codifica (circa il 70%) è legata al mantenimento del codice esistente, è un'abilità importante da imparare.
Oh, e ora che hai visto il dolore che può causare il codice scarsamente documentato, non testato e confuso, non lo farai al prossimo povero sviluppatore di venire, giusto? :) Impara dagli errori del tuo predecessore, commenta bene il tuo codice, assicurati che ogni modulo abbia una responsabilità chiaramente definita a cui si attacca e assicurati di avere un set completo di test unitari che scrivi prima (per le metodologie TDD) o almeno a fianco del codice in fase di sviluppo.