usuario profesionales para interfaz interfaces gráfica graficas grafica diseño diseñar con como aplicaciones java .net architecture refactoring reverse-engineering

java - profesionales - Gráfico de llamadas de toda la aplicación.



interfaz grafica para netbeans (4)

¿Existe una herramienta que no sea de juguete que pueda crear un gráfico de llamadas de toda la aplicación? No me refiero solo a obtener una imagen o dibujar un gráfico de llamada por medio de señalar método por método.

Necesito un gráfico de llamadas, al que se puede acceder mediante programación, es decir, la herramienta debe vaciarlo en un archivo en modo de texto (por ejemplo, XML) o crear el gráfico de llamadas en la memoria (lo que se vuelve problemático para una aplicación grande). Un gráfico de llamadas construido en una base de datos sería genial.

Tanto los gráficos de llamadas estáticas como las dinámicas están en demanda; aunque la estática es un poco más interesante, es aceptable el hecho de que está sobre-aproximada.

He intentado Soot hasta ahora. Sin embargo, no es capaz de manejar proyectos de tamaño medio como FreeCol (las fuentes Java están disponibles). Soot agota 1.5GB de memoria en ese proyecto, y luego JVM se bloquea, como se describe aquí: http://www.sable.mcgill.ca/pipermail/soot-list/2008-July/001828.html

¿Podría alguien sugerir una herramienta para generar un gráfico de llamadas, como se describe anteriormente? Los lenguajes Java o .NET están bien.


1.5 GB no es mucha memoria para gráficos de llamadas realistas. Supongo que Soot solo te da lo que estás pidiendo. Los gráficos de llamadas de otras herramientas pueden ser más pequeños, pero es probable que estén incompletos.


Echa un vistazo a http://semmle.com/

He utilizado su herramienta cuando estaba en beta. Crea una base de datos de información del programa que puede consultar mediante programación. La compañía está iniciando y el producto ya no está en versión beta, aunque no puedo encontrar en su sitio cómo comprarlo o cuánto cuesta.

NDepend ( http://www.ndepend.com/ ) es una herramienta similar para .NET que también he utilizado, pero no estoy seguro de que se pueda acceder a ella de manera programática. XDepend ( http://www.xdepend.com/ ) es su herramienta para Java, que no he usado.


JProfiler es un perfilador de Java decente que generará el gráfico de llamadas y le permitirá exportarlo en formato XML.

No he usado Soot, por lo que no puedo comentar cómo se encuentra JProfiler en comparación con Soot, pero espero que JProfiler requiera 2.5-3 veces más memoria que la aplicación.


Nuestro kit de herramientas de reingeniería de software DMS puede construir gráficos de llamadas globales para C, Java y COBOL. Estos se calculan como una estructura de datos en memoria, y luego se pueden recorrer para recopilar otros datos arbitrarios. (Puede exportarlo a alguna otra herramienta para recorrerlo, pero para un gráfico de llamadas grandes, el tiempo y el esfuerzo para exportar dominarán el tiempo para analizarlo, por lo que no lo exportaremos. YMMV).

Es relativamente fácil extraer la información del gráfico de llamadas de una declaración de la forma abstracta de "LLAMAR X (...)", porque la X objetivo está justo ahí en el código del sitio de la llamada. Las llamadas indirectas (virtuales o de método) son problemáticas porque los destinos de llamada reales no están trivialmente en el código en el sitio de la llamada, pero de hecho están dispersos por todo el sistema y, lo que es peor, controlados por condiciones condicionales de tiempo de ejecución. En ausencia de cualquier información adicional, un constructor del gráfico de llamadas debe asumir que una llamada indirecta puede ir a cualquier destino con una firma coincidente; Esto introduce muchos arcos de llamadas falsos positivos en el gráfico.

DMS utiliza un análisis global (conservador) de puntos a parte del proceso de extracción del gráfico de llamadas, para determinar dónde van esas llamadas indirectas, mientras minimiza los falsos positivos. Consulte Análisis de flujo y gráficos de llamadas para obtener más ejemplos de lo que el DMS puede extraer, y un gráfico de muestra extraído de un sistema de 250,000 funciones.