Al inspeccionar manualmente un código desconocido (para revisar o modificar), parece que tengo tres opciones.
- Una lectura de arriba hacia abajo del código, eligiendo cada archivo fuente siguiente por lo fundamental que parece el nombre del archivo. Usualmente termino leyendo casi todo. Algunos archivos dos veces.
- Una lectura de primera amplitud , donde encuentro y leo todo el método de invocación con una comprensión mínima. Luego lea todas las funciones que esa función llamó, y así sucesivamente. Mi pila mental tiende a desbordarse si hago algunas llamadas profundas.
- Una lectura de profundidad , donde paso por todo el código en un depurador, sin saber si esto llevará 8 minutos u 8 horas.
Una vez que he leído suficiente código para tener una comprensión bastante sólida de lo que está haciendo, a menudo reflexiono que he leído el 80% o más de la base de código, mientras que el código fundamental es del 20% o menos . Perdí mucho tiempo.
¿Qué herramientas son útiles para obtener una comprensión rápida del código poco común? ¿Hay alguna herramienta que pueda dar una "imagen general" de la ruta crítica del código y me permita profundizar en los detalles de cualquier parte?
tools
code-reviews
source-code
maintenance
Drew Dormann
fuente
fuente
Respuestas:
Lo mejor, por supuesto, es que alguien que conozca la base del código lo guíe a través de él. Si esa no es una opción, existen algunas herramientas que pueden ayudarlo.
En general, también desea utilizar un IDE con todas las funciones, donde puede hacer clic con el botón derecho en cualquier cosa e "ir a la definición". Esto puede ahorrarle mucho tiempo, en comparación con el uso de grep en muchos archivos en una estructura de directorio compleja.
Otra cosa importante, dependiendo de cuánto tiempo tendrá que lidiar con el código. Si hay pruebas unitarias, mire las pruebas. Si no hay pruebas, comience a escribirlas. Forme una hipótesis sobre lo que hace una clase o función en particular y escriba una prueba para probarla. Esto requiere mucha disciplina, pero es una excelente manera de obtener respuestas sobre lo que sucede en el código.
fuente
Este es un enfoque más drástico. Esta técnica puede ser útil para un proyecto que tiene muchas clases que no están organizadas en espacios de nombres significativos.
El objetivo de este ejercicio es descubrir la relación de clase. Haga un clon desechable del proyecto y luego intente poner algunas clases en espacios de nombres. Para ahorrar tiempo en intentos repetidos, use algunas herramientas de procesamiento de archivos Regex para automatizar este cambio.
Esto causará muchos errores de compilación. En el proceso de corregir estos errores, uno comprenderá mejor cómo estas clases dependen unas de otras y decidir qué clases se pueden poner en el mismo espacio de nombres.
Esta técnica es útil porque se puede aplicar incluso con poca comprensión de la organización del código del proyecto. Con esto viene el riesgo de que algunas clases puedan ser extraviadas por esta técnica debido a malentendidos.
fuente