2009-09-01 11 views
5

A veces es necesario profundizar en el código de otra persona, comprenderlo y quizás refactorizarlo/corregirlo. Entonces, me pregunto qué herramientas/prácticas usas para hacer eso. No se trata de un lenguaje o plataforma específicos, sino de algunos consejos en general.
Yo mismo encuentro muy útil ejecutar el código en cuestión bajo el depurador (si es posible, por supuesto), establecer puntos de interrupción y recorrer el código.
También he usado algunas herramientas UML con funciones de ingeniería inversa para ver la imagen completa. La visualización funciona bastante bien para mí.
Hay una herramienta, que he usado bastante: Understand. No es una herramienta UML, pero tiene muchas visualizaciones para el código. Por ejemplo, controlar el diagrama de flujo para una función, que no es parte de UML, pero a veces es muy útil.
He oído que a veces las personas escriben pruebas para el código que quieren aprender, pero no me ha funcionado. Algunas veces el código que quiero entender no es muy comprobable.
Existen otras herramientas, como perfiladores, comprobadores de dependencias, registradores, etc. ¿Alguien lo usa con éxito? ¿Y cómo?
¿De qué empieza el uso inicial? ¿Cuál es el próximo?
Herramientas y mejores prácticas para comprender el código de otra persona

Respuesta

1

He estado en esta situación antes ... No es muy divertido. La mejor manera que he encontrado es escribir pruebas unitarias para cubrir las áreas que van a cambiar. Incluso si las pruebas ya existen, esto le brinda experiencia tanto con la API como con el comportamiento del código que pretende refactorizar. Además, ganas más pruebas para verificar la implementación de reemplazo.

0

¿Está buscando estructura de alto nivel, como módulos, espacios de nombres y diseño de clase? ¿O está tratando de comprender las partes internas de las clases, p. ¿Cómo funcionan las líneas de código específicas? Esos son dos tipos diferentes de herramientas de análisis.

+0

Ambos. Para mí, es más fácil entender el código cuando veo una imagen grande y luego bajo el nivel. – Max

1

Normalmente, divido este tipo de peticiones en 2 campos:

  1. corregir el error, no el código entero. En este caso, tendería a leer el código y ver si puedo poner fácilmente la solución sin hacer cambios significativos importantes, p. agregando 5 líneas de código o menos. Aquí es donde los cambios realizados son como un golpe quirúrgico que tiene un impacto mínimo para lograr el resultado deseado.

  2. Destruye el código y prepara cosas mucho mejores. En este caso, no hay una buena manera de hacer el cambio o hay muchos pequeños cambios que desean agrupar en un mini proyecto donde se necesita digerir todo el código y este no es un cambio menor rápido . Tomar un sitio ASP y ponerlo en el último .Net Framework sería un ejemplo aquí.

La determinación de qué tipo de cambio es algo que requiere un poco de práctica y experiencia de la comprensión de lo que otra persona puede llamar, "Una cosa más si pudiera ..." que puede ser un gran problema pero no lo hacen verlo de esa manera, por ejemplo ¿Podríamos agregar un pequeño módulo que registra cualquier error y enviarme un correo electrónico cuando ocurre algo malo que puede no ser tan fácil después de que se resuelvan todos los demás requisitos como qué pasa si el código no puede enviar un mensaje de correo electrónico? hacer.

0

Tipo de plataforma específica, pero ReSharper es ideal para descifrar el significado oculto del código .NET. Me encanta la función "Find Usages Advanced" (Buscar usos avanzados) donde puede buscar conjuntos, get, implementaciones, etc. ...

1

Haga check out nWire.Es un plugin de Eclipse, actualmente para Java & PHP, que analiza su código y ofrece exploración de código, herramientas de visualización y visualización. La herramienta trata sobre la comprensión de las asociaciones en su código: jerarquías de clases, invocaciones, instancias y casi todo lo demás.

Me resulta muy útil para cavar en montones de código (por cierto, incluso mi propio código se vuelve alienado después de un par de meses sin tocarlo).

Cuestiones relacionadas