7
votes

Comment inverser l'ingénieur un programme qui n'a pas de documentation

J'ai une source de programme Python qui n'a pas de documentation ni de commentaires. J'ai essayé deux fois de le comprendre mais la plupart des moments où je perds ma piste, car il existe de nombreux fichiers. Quelles devraient être les étapes pour comprendre ce programme complètement et rapidement.


1 commentaires

C'est un problème très courant ..


8 Réponses :


0
votes

Je commencerais avec un bon python IDE. Consultez les réponses pour Cette question .


0 commentaires

5
votes
  • Dans le passé, j'ai utilisé 'Python Call Graph " pour comprendre la structure source
  • Utilisez un projet de débogueur E.G. PDB à wak thru le code.
  • Essayez de lire le code à nouveau après un jour pause, qui aide aussi

0 commentaires

5
votes

Je recommanderais de générer une documentation avec épydoc http://epydoc.sourceforge.net/ . Bien sûr, si aucun doctrage n'existe, le résultat sera médiocre mais cela vous donnera au moins une vue de votre application et vous pourrez naviguer dans les classes plus facilement.

Ensuite, vous pouvez essayer de documenter vous-même lorsque vous comprenez quelque chose de nouveau, puis régénérer à nouveau les docs. Il n'est jamais trop tard pour commencer quelque chose.

J'espère que cela aide


0 commentaires

2
votes

J'ai dû faire beaucoup de cela dans mon travail. Ce qui fonctionne pour moi peut être différent de ce qui fonctionne pour vous, mais je partagerai mon expérience.

Je commence à essayer d'identifier les structures de données utilisées et dessiner des diagrammes montrant les relations entre elles. Pas nécessairement quelque chose de formel comme UML, mais un croquis sur papier qui vous comprends qui vous permet de voir la structure globale des données manipulées par le programme. Une fois qu'une seule fois, j'ai une idée des structures de données utilisées, puis-je commencer à essayer de comprendre comment les données sont manipulées.

Deuxièmement, pour un grand nombre de logiciels, il faut parfois attaquer des morceaux de morsures au début. Vous n'obtiendrez pas tout de suite une compréhension générale, mais si vous comprenez de petites pièces en détail et continuez à vous éclairer, finalement toutes les pièces tombent ensemble.

Je combine ces deux approches, commutant entre eux lorsque je deviendrai trop frustré ou ennuyé. Des promenades régulières autour du bloc sont recommandées :) Je trouve cela me fait de bons résultats à la fin.

bonne chance!


0 commentaires

11
votes

Michael Plumes '" fonctionne efficacement avec le code hérité " est un superbe point de départ pour ces efforts - pas particulièrement dépendant de la langue (ses exemples sont dans plusieurs Langues non python, mais les techniques et la mentalité s'étendent assez bien à Python et à peu près n'importe quelle autre langue).

La principale mise au point est que vous souhaitez comprendre le code pour une raison - la modifiant et / ou le portant. Ainsi, en instrumentation du code hérité - avec des piles et des échafaudages de tests et de traçage / journalisation - est le chemin crucial sur le slog long et dur à comprendre et à modifier de manière sûre et responsable.

Les plumes suggèrent des heuristiques et des techniques pour les endroits où concentrer vos efforts et comment commencer lorsque le code est un désordre total (donc «héritage») - pas de docs, ni trompeurs Docs (décrivant quelque chose de tout à fait Différent, peut-être de manière subtile, de ce que le code fait réellement), aucun test, un enchevêtrement sans refactorisation sans refactorisation. Cela peut sembler un cas extrême mais quiconque a passé une carrière de longue durée dans la programmation sait qu'il est en fait plus commun que quiconque le souhaiterait; -).


1 commentaires

+1 Je me demande combien de points de report ont été distribués pour avoir déclaré "GO Lire de travailler efficacement avec le code hérité"?



3
votes

Vous avez de la chance que ce soit à Python, ce qui est facile à lire. Mais il est bien sûr possible d'écrire difficile de comprendre le code dans Python.

Les étapes sont:

  1. Exécutez le logiciel et apprenez à l'utiliser et à comprendre que cela fonctionne au moins un peu.
  2. lu si les tests, le cas échéant.
  3. lu via le code.
  4. Lorsque vous rencontrez du code, vous ne comprenez pas, mettez une pause de débogage là-bas et passez à travers le code, en regardant ce qu'elle fait.
  5. S'il n'y a pas de test ou que la couverture de test est faible, écrivez des tests pour augmenter la couverture de test. C'est un bon moyen d'apprendre le système.
  6. Répétez jusqu'à ce que vous sentais une prise vague sur le code. Une grip vague est tout ce dont vous avez besoin si vous allez gérer le code. Vous aurez une bonne adhérence une fois que vous commencez à travailler avec le code. Pour un grand système pouvant prendre des années, alors n'essayez pas de tout comprendre.

    Il existe des outils qui peuvent vous aider. Comme le dit Stephen C, une IDE est une bonne idée. Je vais expliquer pourquoi:

    De nombreux éditeurs analysent le code. Cela vous donne généralement une fin de code, mais plus important encore dans ce cas, il permet de simplement cliquer sur une variable pour voir d'où vient. Cela accélère vraiment les choses lorsque vous voulez comprendre le code des peuples d'otehr.

    En outre, vous devez apprendre un débogueur. Vous allez, dans des parties difficiles du code, devez les parcourir dans un débogueur pour voir ce que le code fait réellement. Pythons PDB fonctionne, mais de nombreux IDE ont intégré les débuggeurs, qui facilitent le débogage.

    C'est ça. Bonne chance.


0 commentaires

0
votes

architecte d'entreprise par SPARX Systems est très bon au traitement d'un répertoire source et de générer des diagrammes de classe. Ce n'est pas gratuit, mais très raisonnablement au prix de ce que vous obtenez. (Je ne suis pas associé à cette entreprise de quelque manière que ce soit, je viens d'être un utilisateur satisfait de leur produit depuis plusieurs années.)


0 commentaires

1
votes

Pyrenvers de Logilab et Pynsource de Andy Bulka sont également utiles pour la génération de diagramme UML.


0 commentaires