Algoritmo di come di solito mi avvicino al codice estraneo (guardate in basso per una sua versione concisa in pseudo-codice).
Il modo migliore per iniziare ad esplorare il sistema straniero è leggere la sua documentazione, specialmente se qui è disponibile una documentazione specifica per gli sviluppatori (manuale dello sviluppatore, ecc.). Chiedere allo sviluppatore precedente di inviarti tutta la documentazione che lui o lei ha per il sistema e nominare un incontro con lui / lei (se possibile) in 1-2 settimane.
Durante la preparazione per l'incontro, studiare la documentazione. Se non c'è documentazione di quante tu possa avere la possibilità di ottenere una copia delle specifiche originali che sono state utilizzate per implementare il sistema (in grandi aziende queste sono solitamente preparate dai Program / Project Managers e conservate più a lungo, rispetto alla documentazione in esecuzione).
Se il tuo IDE (come VS2010 Ultimate o Eclipse con plug-in) supporta la creazione di diagrammi di architettura, allora prova quelli a ottenere una panoramica del tuo sistema. C'è un mucchio di software speciali, come JDepend / NDepend, a seconda del tuo sistema, che può essere utile qui.
Se non ottieni alcuna specifica, dai un'occhiata ai test unitari, anche questa è una parte delle specifiche e già scritta nel formato a te familiare.
Durante l'incontro chiedi allo sviluppatore di guidarti attraverso il sistema e porre domande alle parti che non capisci. Di solito cerco di mettermi nei panni degli sviluppatori e vedere se qualcosa sembra essere implementato in un modo un po 'strano: basta chiedere, forse ci sono dei requisiti impliciti o delle limitazioni di cui dovresti essere a conoscenza.
Ed ecco la versione succinta promessa del testo sopra.
if (Documentation.Exists()) ReadDocumentation();
else {
AskDeveloperIfThereIsDocumentationLyingSomewhereAround();
if (Documentation.Found()) ReadDocumentation();
}
If (Code.IsDocumentedProperly()) {
ExtractCodeDocumentation();
ReadCodeDocumentation();
}
If (IDEOfYourChoice.Supports(ArchitectureDiagramms)) ProduceDiagrammsAndStudyThem();
if (Specification.Exists()) ReadSpecification();
else AskPMIfThereIsDocumentationLyingSomewhereAround();
TryToRunTheSoftwareOnYourOwn();
if (Developer.IsAvailable()) AskToGuideYouShortlyThroughTheCode();
else if (User.Any( user => user.IsCompetent(ThisSystem))) AskUserToGuideYouThroughProgramm();
If (System.HasUnitTests()) {
ReadUnitTests();
RunUniTests();
}