Quali strumenti o tecniche sono utili per descrivere una base di codice non familiare? [chiuso]

9

Quando eseguo manualmente l'ispezione di codice non familiare (da esaminare o modificare), mi sembra di avere tre opzioni.

  • Una lettura dall'alto del codice, scegliendo ogni successivo file di origine in base all'aspetto fondamentale del nome file. Di solito finisco per leggere quasi tutto. Alcuni file due volte.
  • Una lettura di ampiezza , dove trovo e leggo tutto il metodo di invocazione con una comprensione minima. Quindi leggi tutte le funzioni richiamate dalla funzione e così via. Il mio stack mentale tende a traboccare se faccio qualche chiamata in profondità.
  • Una lettura approfondita , in cui passo tutto il codice in un debugger, incerto se ciò richiederà 8 minuti o 8 ore.

Una volta letto abbastanza del codice per avere una comprensione abbastanza solida di ciò che sta facendo, rifletto spesso che ho letto l'80% o più del codebase, mentre il codice fondamentale è del 20% o meno . Ho perso un sacco di tempo.

Quali strumenti sono utili per ottenere una rapida comprensione del codice non adatto? Esistono strumenti in grado di dare una "immagine grande" del percorso critico del codice e permettermi di approfondire i dettagli di una qualsiasi parte?

    
posta Drew Dormann 23.12.2012 - 21:03
fonte

2 risposte

8

La cosa migliore, ovviamente, è per qualcuno che conosce la base di codice per guidarti attraverso di essa. Se questa non è un'opzione, allora ci sono alcuni strumenti che possono aiutarti.

  • VisualStudio può generare automaticamente un diagramma di classe UML di una base di codice. Per lo meno ti mostrerà le gerarchie di classi.
  • Doxygen può essere estremamente utile. Anche se il codice non ha i commenti in stile doxygen, doxygen può comunque generare documentazione leggibile, diagrammi delle classi e grafici delle chiamate, che possono essere molto utili per orientarsi su un code base sconosciuto.

In generale, si desidera anche utilizzare un IDE completo, in cui è possibile fare clic con il pulsante destro del mouse su qualsiasi cosa e "andare alla definizione". Questo può farti risparmiare un sacco di tempo, rispetto all'uso di grep su molti file in una struttura di directory complessa.

Un'altra cosa importante, a seconda di quanto tempo dovrai gestire il codice. Se ci sono dei test unitari, guarda attraverso i test. Se non ci sono test, inizia a scriverli. Formulare un'ipotesi su cosa fa una particolare classe o funzione e scrivere un test per testarlo. Questo richiede molta disciplina, ma è un ottimo modo per ottenere risposte su ciò che accade nel codice.

    
risposta data 23.12.2012 - 21:20
fonte
3

Questo è un approccio più drastico. Questa tecnica può essere utile per un progetto che ha molte classi che non sono organizzate in spazi dei nomi significativi.

L'obiettivo di questo esercizio è scoprire la relazione di classe. Crea un clone di throwaway del progetto, quindi prova a inserire alcune classi in spazi dei nomi. Per risparmiare tempo in caso di tentativi ripetuti, utilizzare alcuni strumenti di elaborazione file Regex per automatizzare questa modifica.

Ciò causerà molti errori del compilatore. Nel processo di correzione di questi errori, si avrà una migliore comprensione di come queste classi dipendano l'una dall'altra e decidere quali classi potrebbero essere inserite nello stesso spazio dei nomi.

Questa tecnica è utile in quanto è possibile applicarla anche con poca comprensione dell'organizzazione del codice del progetto. Con questo rischio esiste il rischio che alcune classi possano essere messe male da questa tecnica a causa di incomprensioni.

    
risposta data 23.12.2012 - 21:35
fonte

Leggi altre domande sui tag