JPeek es un coleccionista estático de métricas de código Java.
Motivación : la cohesión de clase, por ejemplo, se considera uno de los atributos de software orientados a objetos más importantes. Hay más de 30 métricas de cohesión diferentes inventadas hasta ahora, pero casi ninguna de ellas tiene calculadoras disponibles. La situación con otras métricas es muy similar. Queremos crear una herramienta de este tipo que permita analizar la calidad del código de manera más o menos formal (con cientos de métricas). Luego, aplicaremos este análisis a diferentes bibliotecas de Java con la intención de demostrar que las ideas de la elegante serie de libros de objetos tienen sentido.
Cargue el último archivo jar-with-dependencies.jar desde aquí y entonces:
java -jar jpeek-jar-with-dependencies.jar --sources . --target ./jpeek JPeek analizará los archivos Java en el directorio actual. Los informes XML se generarán en el directorio ./jpeek . Disfrutar.
| Opción | Descripción |
|---|---|
-s, --sources <path> | Requerido. Ruta al directorio con los archivos de clase |
-t, --target <path> | Requerido. Ruta hacia el directorio donde se generarán los informes |
--include-ctors | Incluir constructores en todas las fórmulas |
--include-static-methods | Incluir métodos estáticos en todas las fórmulas |
--include-private-methods | Incluir métodos privados en todas las fórmulas |
--metrics <metrics> | Lista de métricas separadas por comas para incluir (predeterminado: "LCOM5,NHD,MMAC,SCOM,CAMC" ) |
--overwrite | Sobrescribir el directorio de destino, si existe, o salga con error |
--quiet | Apague el registro |
--help | Muestra de ayuda de ayuda |
También puede implementarlo como un servicio web para su propia plataforma. Simplemente compile con mvn clean package --settings settings.xml y luego ejecute, como sugiere Procfile . Deberá tener settings.xml con los siguientes datos:
< settings >
< profiles >
< profile >
< id >jpeek-heroku</ id >
< activation >
< activeByDefault >true</ activeByDefault >
</ activation >
< properties >
< sentry .dsn>https://...</ sentry .dsn>
< dynamo .key>AKIAI..........LNN6A</ dynamo .key>
< dynamo .secret>6560KMv5+8Ti....................Qdwob63Z</ dynamo .secret>
</ properties >
</ profile >
</ profiles >
</ settings > También necesitará estas tablas en Dynamodb (todos los índices deben entregar ALL los atributos):
jpeek-mistakes:
metric (HASH/String)
version (RANGE/String)
indexes:
mistakes (GSI):
version (HASH/String),
avg (RANGE/Number)
jpeek-results:
artifact (HASH/String)
indexes:
ranks (GSI):
version (HASH/String)
rank (RANGE/Number)
scores (GSI):
version (HASH/String)
score (RANGE/Number)
recent (GSI):
good (HASH/String)
added (RANGE/Number)
Estos documentos proporcionan un buen resumen de las métricas de cohesión:
[ izadkhah17 ] Habib Izadkhah et al.,
Métricas de cohesión de clase para ingeniería de software: una revisión crítica ,
Computer Science Journal of Moldova, Vol.25, No.1 (73), 2017, pdf.
[ badri08 ] Linda Badri et al.,
Revisando la cohesión de la clase: una investigación empírica sobre varios sistemas ,
Journal of Object Technology, Vol.7, No.6, 2008, pdf.
[ chidamber94 ] Falta de cohesión en los métodos ( LCOM ).
Shyam Chidamber et al.,
Un conjunto de métricas para diseño orientado a objetos ,
IEEE Transactions on Software Engineering, Vol.20, No.6, 1994, PDF.
[ bieman95 ] Cohesión de clase estrecha ( TCC ) y cohesión de clase suelta ( LCC ).
James M. Bieman et al.,
Cohesión y reutilización en un sistema orientado a objetos ,
Departamento de Ciencias de la Computación, Universidad Estatal de Colorado, 1995, PDF.
[ hitz95 ] Falta de cohesión en los métodos 4 ( LCOM4 ).
Martin Hitz et al.,
Medición de acoplamiento y cohesión en sistemas orientados a objetos ,
Instituto de Ciencias de la Computación Aplicada y Análisis de Sistemas, Universidad de Viena, 1995, PDF.
[ sellers96 ] Falta de cohesión en los métodos 2-3 ( LCOM 2, 3 y 5 ).
B. Henderson-Sellers et al.,
Acoplamiento y cohesión (hacia un conjunto de métricas válidas para análisis y diseño orientados a objetos) ,
Sistemas orientados a objetos 3, 1996, PDF.
[ bansiya99 ] Cohesión entre los métodos de clases ( CAMC ).
Jagdish Bansiya et al.,
Una métrica de cohesión de clase para diseños orientados a objetos ,
Revista de Programación Orientada a Objetos, vol. 11, no. 8, 1999, PDF.
[ etzkorn00 ] RELIGICIÓN LOGICAL DE MÉTODOS ( LORM ).
L. Etzkorn y H. Delugach,
Hacia una suite de métricas semánticas para el diseño orientado a objetos ,
Tecnología de lenguajes y sistemas orientados a objetos, 2000. Herramientas 34. Actas. 34ª Conferencia Internacional sobre. IEEE, 2000, pp. 71–80, PDF
[ wasiq01 ] Métrica de conexión de clase ( CCM ).
M. Wasiq
Medición de la cohesión de clase en sistemas orientados a objetos ,
Tesis de maestría en la Universidad King Fahd de Petroleum & Minerals, 2001, pdf.
[ aman04 ] Cohesión de clase optimista ( OCC ) y cohesión de clase pesimista ( PCC ).
Hirohisa Aman et al.,
Una propuesta de métricas de cohesión de clase utilizando tamaños de piezas cohesivas ,
Proc. de la Quinta Conferencia Conjunta sobre Ingeniería de Software basada en el conocimiento, 2002, PDF.
[ marcus05 ] Cohesión conceptual de las clases ( C3 ).
A. Marcus y D. Poshyvanyk,
La cohesión conceptual de las clases ,
21ª Conferencia Internacional IEEE sobre mantenimiento de software (ICSM'05), Budapest, Hungría, 2005, pp. 133-142, PDF
[ counsell06 ] Distancia de hamming normalizada ( NHD ).
Steve Counsell et al.,
La interpretación y utilidad de tres métricas de cohesión para el diseño orientado a objetos ,
ACM Tosem, abril de 2006, PDF.
[ fernandez06 ] Una métrica sensible de cohesión de clase ( SCOM ).
Luis Fernández et al.,
[A] nueva métrica [...] produciendo valores significativos [...] más sensibles que los reportados anteriormente ,
Revista internacional "Teorías y aplicaciones de información", Volumen 13, 2006, PDF.
[ dallal07 ] método método a través de la cohesión de los atributos ( MMAC ).
Jehad Al Dallal,
Una métrica de cohesión basada en el diseño para clases orientadas a objetos ,
Academia Mundial de Ciencias, Ingeniería y Tecnología Internacional Revista de Ingeniería de Computación e Información Vol: 1, No: 10, 2007, PDF.
[ liu09 ] Entropía ponderada máxima ( MWE ).
Y. Liu, D. Poshyvanyk, R. Ferenc, T. Gyim´othy y N. Chrisochoides,
Modelado de la clase de cohesión como mezclas de temas latentes ,
Mantenimiento de software, 2009. ICSM 2009. Conferencia internacional IEEE sobre. IEEE, 2009, pp. 233–242, PDF
[ dallal11 ] Falta transitiva de cohesión en los métodos ( TLCOM ).
Jehad Al Dallal,
Métrica de falta de cohesión orientada a objetos a base de transitivos ,
Departamento de Ciencias de la Información, Universidad de Kuwait, 2011, PDF.
Primero, Skeleton analiza Java Bytecode usando Javaassit y ASM, para producir skeleton.xml . Este documento XML contiene información sobre cada clase, que es necesaria para los cálculos de métricas. Por ejemplo, esta simple clase de Java:
class Book {
private int id ;
int getId () {
return this . id ;
}
} Se verá así en el skeleton.xml :
< class id = ' Book ' >
< attributes >
< attribute public = ' false ' static = ' false ' type = ' I ' >id</ attribute >
</ attributes >
< methods >
< method abstract = ' false ' ctor = ' true ' desc = ' ()I ' name = ' getId ' public = ' true ' static = ' false ' >
< return >I</ return >
< args />
</ method >
</ methods >
</ class > Luego, tenemos una colección de hojas de estilo XSL, una por cada métrica. Por ejemplo, LCOM.xsl transforma skeleton.xml en LCOM.xml , que puede verse así:
< metric >
< title >MMAC</ title >
< app >
< class id = ' InstantiatorProvider ' value = ' 1 ' />
< class id = ' InstantationException ' value = ' 0 ' />
< class id = ' AnswersValidator ' value = ' 0.0583 ' />
< class id = ' ClassNode ' value = ' 0.25 ' />
[... skipped ...]
</ app >
</ metric >Por lo tanto, todos los cálculos ocurren dentro de los archivos XSLT. Decidimos implementarlo de esta manera después de un intento menos exitoso de hacerlo todo en Java. Parece que XSL es mucho más adecuado para manipulaciones con datos que Java.
Estamos desarrollando un complemento jpeek para Maven, consulte el proyecto Jpeek Maven Plugin.
final . Por ejemplo, todas las métricas LCOM y COM se ven afectadas. Solo bifurcado, realice cambios, ejecute mvn clean install -Pqulice y envíe una solicitud de extracción; Lea esto, si se pierde.
No dude en agregar su nombre a esta lista en su próxima solicitud de extracción.