2009-09-09 7 views
6

Ho una fonte di programma Python che non ha alcuna documentazione o commenti. Ho provato due volte a capirlo, ma la maggior parte delle volte sto perdendo la mia traccia, perché ci sono molti file. Quali dovrebbero essere i passaggi per capire quel programma in modo completo e rapido.Come decodificare un programma che non ha documentazione

+0

è un problema molto comune .. –

risposta

10

Michael Feathers "" Working Effectively with Legacy Code "è un eccellente punto di partenza per tali tentativi, non particolarmente dipendenti dalla lingua (i suoi esempi sono in diversi linguaggi non Python, ma le tecniche e la mentalità DO si estendono abbastanza bene a Python e praticamente qualsiasi altra lingua).

L'obiettivo principale è che si desidera comprendere il codice per un motivo - modificandolo e/o portandolo. Quindi, strumentare il codice legacy - con batterie e scaffolding di test e tracing/logging - è il percorso cruciale sul lungo e duro slog per comprendere e modificare in modo sicuro e responsabile.

piume suggerisce euristiche e tecniche di dove concentrare i vostri sforzi e come iniziare quando il codice è un disastro totale (da qui "legacy") - non docs, o fuorvianti docs (che descrive qualcosa di molto diverso, forse in modi sottili, da ciò che effettivamente fa il codice), nessun test, un groviglio di dipendenze spaghetti non modificabile, senza refactoring. Questo può sembrare un caso estremo, ma chiunque abbia passato una lunga carriera nella programmazione sa che è in realtà più comune di quanto chiunque vorrebbe ;-).

+1

+1 Mi chiedo quanti punti di ripetizione sono stati distribuiti per dire "Vai a leggere in modo efficace con il codice legacy"? –

0

Vorrei iniziare con un buon IDE Python. Vedere le risposte per this question.

5
  • In passato ho usato 'Python call graph' per comprendere la struttura sorgente
  • Utilizzare un debugger esempio pdb to wak thru il codice.
  • provare a leggere il codice di nuovo dopo una giornata pausa, che aiuta anche
5

lo consiglio per generare una documentazione con epydoc http://epydoc.sourceforge.net/. Di sicuro, se non esiste alcuna docstring, il risultato sarà scarso ma ti darà almeno una vista della tua applicazione e sarai in grado di navigare più facilmente nelle classi.

Quindi puoi provare a documentare da solo quando capisci qualcosa di nuovo e poi rigeneri nuovamente i documenti. Non è mai troppo tardi per iniziare qualcosa.

Spero che aiuta

2

ho dovuto fare un sacco di questo nel mio lavoro. Ciò che funziona per me potrebbe essere diverso da ciò che funziona per te, ma condividerò la mia esperienza.

Inizio a cercare di identificare le strutture dati utilizzate e tracciare diagrammi che mostrano le relazioni tra di loro. Non necessariamente qualcosa di formale come UML, ma uno schizzo su carta che è capire che ti permette di vedere la struttura complessiva dei dati manipolati dal programma. Solo una volta che ho una visione delle strutture di dati in uso, comincio a provare a capire come vengono manipolati i dati.

In secondo luogo, per un grande numero di software, a volte è necessario attaccare solo pezzi di dimensioni piccole all'inizio. Non otterrai subito una comprensione generale, ma se comprendi le piccole parti in dettaglio e continui a scheggiarsi, alla fine tutti i pezzi cadono insieme.

Unisco questi due approcci, passando da uno all'altro quando mi sento eccessivamente frustrato o annoiato. Le passeggiate regolari intorno al blocco sono raccomandate :) Trovo che questo mi porti buoni risultati alla fine.

Buona fortuna!

3

Sei fortunato è in Python che è facile da leggere. Ma ovviamente è anche possibile scrivere codice difficile da comprendere in Python.

I passi sono:

  1. eseguire il software e imparare ad usarlo, e capire le sue caratteristiche, almeno un po '.
  2. Leggere se i test, se presenti.
  3. Leggere il codice.
  4. Quando si incontra un codice che non si capisce, inserire un'interruzione di debug lì e scorrere il codice, osservando cosa fa.
  5. Se non ci sono test o la copertura del test è bassa, scrivere test per aumentare la copertura del test. È un buon modo per imparare il sistema.
  6. Ripeti finché non senti di avere una vaga presa sul codice. Una presa vaga è tutto ciò che serve se hai intenzione di gestire il codice. Avrai una buona presa quando inizierai a lavorare con il codice. Per un grande sistema che può richiedere anni, quindi non cercare di capirlo tutto prima.

Ci sono strumenti che possono aiutarti. Come dice Stephen C, un IDE è una buona idea. Spiegherò perché:

Molti editor analizzano il codice. Questo in genere ti dà il completamento del codice, ma, soprattutto, in questo caso, rende possibile semplicemente fare clic su una variabile per vedere da dove proviene. Questo accelera davvero le cose quando vuoi capire il codice di altre persone.

Inoltre, è necessario imparare un debugger. Dovrai, in parti complicate del codice, doverli esaminare in un debugger per vedere cosa effettivamente fa il codice. Python pdb funziona, ma molti IDE hanno dei debugger integrati, che facilitano il debugging.

Questo è tutto. In bocca al lupo.

0

Enterprise Architect di Sparx Systems è molto bravo a elaborare una directory di origine e generare diagrammi di classe. Non è gratuito, ma a prezzi molto ragionevoli per quello che ottieni. (Non sono associato a questa azienda in alcun modo, sono stato un utente soddisfatto del loro prodotto per diversi anni.)

1

pyreverse di Logilab e PyNSource di Andy Bulka sono utili anche per la generazione di diagrammi UML.

Problemi correlati