JDepend es una herramienta que recorre el directorio de clases Java y genera métricas de calidad de diseño para cada uno de los paquetes. JDepend permite medir automáticamente la calidad del diseño en términos de extensibilidad, reusabilidad y mantenibilidad para gestionar efectivamente las dependencias entre paquetes. Entre las métricas obtenidas por esta herramienta destacan las siguientes:
- Número de clases concretas y abstractas de cada paquete, lo cual es un indicador de la extensibilidad del paquete.
- Responsabilidad. Número de paquetes que tienen dependencias sobre las clases del paquete evaluado. Es una medida de la responsabilidad del paquete. Es tambien conocida como “Fan-in”. Valores elevados en esta métrica nos indicarán que el paquete tiene muchas responsabilidades.
- Independencia. Es el número total de paquetes a los que se hace referencia dentro del paquete evaluado. Es una medida de la independencia del paquete. Es tambien conocida como “Fan-out”. Un valor elevado en esta métrica nos indica que el paquete que se está evaluando es dependiente (alto acoplamiento).
- Abstracción. Es el resultado de dividir el número de clases abstractas del paquete entre el número total de clases. El rango varía entre 0 y 1.
- A=0 indica que el paquete es completamente concreto.
- A=1 indica que el paquete es totalmente abstracto.
- Inestabilidad. Es el resultado de dividir Ce (independencia) / [Ce + Ca (Responsabilidad)]. Es una medida de la resistencia al cambio, se mide en un rango entre 0 y 1.
- I=0 indica que el paquete es completamente estable.
- I=1 indica que el paquete es inestable.
- Distancia desde la secuencia principal. Es la distancia perpendicular a la línea ideal A + I = 1. Donde “A” es el nivel de abstracción e “I” es la inestabilidad. La Figura 1 nos muestra el concepto de la línea ideal “Main Sequence”. Un paquete que se encuentra en la línea ideal está bien balanceado entre estos dos indicadores. Los paquetes ideales son los que son completamente abstractos y completamente estables (I=0, A=1) O completamente concretos e inestables (I=1, A=0). El rango de esta métrica está entre 0 y 1:
- D=0 indica que el paquete se encuentra en la línea ideal.
- D=1 indica que el paquete está lo más alejado posible de esa línea.

Figura 1. Concepto “Main Sequence”
Dependencias cíclicas entre paquetes. Los paquetes que participan en un ciclo son aquellos que están en un bloqueo con respecto a su reutilización y su ciclo de modificaciones. Una vez se identifican estos ciclos se deben eliminar utilizando diversas técnicas de programación orientada a objetos (Refactoring). JDepend obtiene el listado de las dependencias cíclicas, directas e indirectas (una clase depende de una que esta dentro de una dependencia cíclica), de un producto. Hay que destacar que una vez que encuentra una dependencia cíclica en un paquete deja de seguir buscando.
Resumen de las características de JDepend.
URL: http://clarkware.com/software/JDepend.html
DESCRIPCIÓN: JDepend estudia la extensibilidad, mantenibilidad, etc. del código fuente.
MODO DE USO:VERSIÓN: JDepend 2.
- Descomprimir zip
- Añadir jdepend-2.9.jar en el classpath
- La instrucción para lanzar JDepend es:
- java jdepend.textui.JDepend [-components <components>] [-file <output file>] <directory> [directory2 [directory 3]
LICENCIA: BSD









