2009-09-09 12 views
6

Tengo una fuente de programa python que no tiene ninguna documentación o comentario. Lo intenté dos veces para entenderlo, pero la mayoría de las veces estoy perdiendo mi pista, porque hay muchos archivos. ¿Cuáles deberían ser los pasos para comprender ese programa completa y rápidamente.Cómo aplicar ingeniería inversa a un programa que no tiene documentación

+0

es un problema muy común .. –

Respuesta

10

Michael Feathers ' 'Working Effectively with Legacy Code' es un punto de partida excelente para este tipo de esfuerzos - no es particularmente dependiente del idioma (sus ejemplos están en varios idiomas además del pitón, pero las técnicas y mentalidad DO se extienden bastante bien a Python y casi cualquier otro idioma).

El objetivo principal es que desee comprender el código por un motivo - modificarlo y/o portarlo. Por lo tanto, instrumentar el código heredado, con baterías y andamios de pruebas y rastreo/registro, es la ruta crucial en el largo y difícil camino para comprender y modificar de manera segura y responsable.

plumas sugiere heurísticas y técnicas para dónde enfocar sus esfuerzos y cómo empezar cuando el código es un desastre total (de ahí "legado") - no hay documentación, o engañosa Docs (que describe algo muy diferente, tal vez en formas sutiles, de lo que realmente hace el código), sin pruebas, una maraña de dependencias de spaghetti no evaluables sin refactorización. Esto puede parecer un caso extremo, pero cualquiera que haya pasado una larga carrera en la programación sabe que en realidad es más común de lo que a nadie le gustaría ;-).

+1

+1 Me pregunto cuántos puntos de repetición se han repartido por decir "Ve a leer Trabajar con efectividad con el código heredado"? –

0

Comenzaría con un buen IDE de python. Vea las respuestas para this question.

5
  • En el pasado he utilizado 'Python call graph' para comprender la estructura fuente
  • Uso un depurador por ejemplo pdb para wak a través de el código.
  • tratar de leer el código de nuevo después de una rotura del día , que también ayuda a
5

recomendaría para generar algún tipo de documentación con epydoc http://epydoc.sourceforge.net/. Por supuesto, si no existe ninguna docstring, el resultado será pobre pero le dará al menos una vista de su aplicación y podrá navegar en las clases más fácilmente.

Luego puede intentar documentar por sí mismo cuando comprenda algo nuevo y luego vuelva a generar los documentos. Nunca es demasiado tarde para comenzar algo.

espero que ayude

2

he tenido que hacer un montón de esto en mi trabajo. Lo que funciona para mí puede ser diferente a lo que funciona para usted, pero compartiré mi experiencia.

Empiezo por tratar de identificar las estructuras de datos que se utilizan y dibujar diagramas que muestran las relaciones entre ellas. No necesariamente algo formal como UML, sino un boceto en papel que usted entiende que le permite ver la estructura general de los datos que manipula el programa. Solo cuando tengo alguna vista de las estructuras de datos que se utilizan, empiezo a intentar comprender cómo se están manipulando los datos.

En segundo lugar, para un gran cuerpo de software, a veces primero tienes que atacar las piezas del tamaño de un bocado. No obtendrás una comprensión general de inmediato, pero si entiendes las piezas pequeñas en detalle y sigues quitándolas, eventualmente todas las piezas caen juntas.

Combino estos dos enfoques, alternando entre ellos cuando me estoy frustrando demasiado o aburrido. Se recomiendan caminatas regulares alrededor de la cuadra :) Encuentro que esto me da buenos resultados al final.

¡Buena suerte!

3

Tienes suerte de que sea fácil de leer en Python. Pero también es posible escribir un código difícil de entender en Python.

Los pasos son:

  1. ejecutar el software y aprender a usarlo, y entender sus características, al menos un poco.
  2. Lea las pruebas, si las hubiera.
  3. Lea el código.
  4. Cuando encuentras un código que no comprendes, pon una brecha de depuración allí y revisa el código, observando lo que hace.
  5. Si no hay ninguna prueba, o la cobertura de la prueba es baja, escriba pruebas para aumentar la cobertura de la prueba. Es una buena forma de aprender el sistema.
  6. Repita hasta que sienta que tiene un control vago del código. Un agarre vago es todo lo que necesita si va a administrar el código. Tendrás un buen agarre una vez que comiences a trabajar con el código. Para un sistema grande que puede llevar años, no intente comprenderlo todo primero.

Hay herramientas que pueden ayudarlo. Como dice Stephen C, un IDE es una buena idea. Explicaré por qué:

Muchos editores analizan el código. Normalmente, esto le proporciona la finalización del código, pero lo más importante es que en este caso es posible simplemente hacer clic en una variable para ver de dónde proviene. Esto realmente acelera las cosas cuando quieres entender el código de otras personas.

Además, debe aprender un depurador. En partes complicadas del código, tendrá que pasar por ellos en un depurador para ver qué hace realmente el código. Pythons pdb funciona, pero muchos IDE tienen depuradores integrados, que facilitan la depuración.

Eso es todo. Buena suerte.

0

Enterprise Architect por Sparx Systems es muy bueno para procesar un directorio fuente y generar diagramas de clase. No es gratis, pero tiene un precio muy razonable por lo que obtienes. (No estoy asociado con esta compañía de ninguna manera, sólo he sido un usuario satisfecho de su producto desde hace varios años.)

1

pyreverse de Logilab y PyNSource de Andy Bulka son útiles también para la generación de diagramas UML.

Cuestiones relacionadas