Heredé una gran pila de código de Ruby que, francamente, es casi imposible de entender para un mortal como yo. En realidad, es un código de prueba de la unidad Rspec, pero la estructura es "altamente inusual" para decirlo de forma agradable.¿Cómo registro cada método que se llama en un programa de Ruby?
Lo que me gustaría ser capaz de hacer es ejecutar el código, y tienen la siguiente información registrada en alguna parte:
- todos los métodos que se invoca, incluyendo el nombre de la clase que define el método, y el nombre del archivo donde se ha definido el método invocado (sí, tenemos la misma clase/método definido en múltiples archivos diferentes, y es difícil saber cuál se está invocando)
- (opcionalmente) los parámetros pasados a cada método invocado
Con eso, podría comenzar a tratar de refactorizarlo. Sin él, será una tarea muy difícil resolverlo, debido al tamaño de la base de código (20k + casos de prueba de la unidad).
No puedo permitirme realizar ediciones al por mayor del código que se está ejecutando, porque se rompe cuando incluso se utiliza un lenguaje hostil (es decir, con frecuencia). En cambio, necesito poder instrumentar el código en su estado actual, o con cambios mínimos a lo que existe ahora.
¿Hay alguna forma de registrar este nivel de detalle sin realizar cambios al por mayor en la base de códigos? He echado un vistazo al perfilador de Ruby para ver si podría ayudar, y probablemente podría; Tengo curiosidad por saber si hay una manera mejor (especialmente registrar el nombre de archivo que contiene el método invocado).
Gracias de antemano
¿Ha considerado un analizador estático o están sólo en busca de algo que realmente ejecuta el código? Doxygen genera agradables gráficos caller/callee, no han buscado si es compatible con Ruby, pero los gráficos de llamada pueden ser muy útiles para comprender el código existente. –
Estoy bastante seguro de que Doxygen no es compatible con Ruby; si lo hiciera, sin duda sería útil para mí, pero no puedo encontrar ninguna información sobre Doxygen que apoye a Ruby. Preferiría tener algo que realmente ejecute el código, principalmente porque el orden en el que se procesan los requisitos afectará a cuál de las múltiples definiciones (no idénticas) de un método dado se utilizará. Como dije, es un código base feo ... – monch1962