O JPEEK é um colecionador estático das métricas de código Java.
Motivação : a coesão da classe, por exemplo, é considerada um dos atributos de software mais importantes orientados a objetos. Existem mais de 30 métricas diferentes de coesão inventadas até agora, mas quase nenhuma delas tem calculadoras disponíveis. A situação com outras métricas é muito semelhante. Queremos criar uma ferramenta que possibilitará a qualidade da qualidade do código mais ou menos formalmente (com centenas de métricas). Em seguida, aplicaremos essa análise a diferentes bibliotecas Java com a intenção de provar que as idéias da série de livros de objetos elegantes fazem sentido.
Carregue o arquivo mais recente jar-with-dependencies.jar daqui e depois:
java -jar jpeek-jar-with-dependencies.jar --sources . --target ./jpeek O JPEEK analisará os arquivos Java no diretório atual. Os relatórios XML serão gerados no diretório ./jpeek . Aproveitar.
| Opção | Descrição |
|---|---|
-s, --sources <path> | Obrigatório. Caminho para diretório com os arquivos da classe |
-t, --target <path> | Obrigatório. Caminho para diretório onde os relatórios serão gerados |
--include-ctors | Inclua construtores em todas as fórmulas |
--include-static-methods | Inclua métodos estáticos em todas as fórmulas |
--include-private-methods | Inclua métodos privados em todas as fórmulas |
--metrics <metrics> | Lista de métricas separadas por vírgula a incluir (padrão: "LCOM5,NHD,MMAC,SCOM,CAMC" ) |
--overwrite | Substitua o diretório de destino, se existir ou sair com erro |
--quiet | Desligue o log |
--help | Exibir mensagem de ajuda |
Você também pode implantá -lo como um serviço da Web em sua própria plataforma. Basta compilá -lo com mvn clean package --settings settings.xml e depois executar, como sugere Procfile . Você precisará ter settings.xml com os seguintes dados:
< 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 > Você também precisará dessas tabelas no DynamoDB (todos os índices devem entregar ALL os 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)
Esses trabalhos fornecem um bom resumo das métricas de coesão:
[ izadkhah17 ] Habib izadkhah et al.,
Métricas de coesão de classe para engenharia de software: uma revisão crítica ,
Jornal de Ciência da Computação da Moldávia, Vol.25, No.1 (73), 2017, PDF.
[ badri08 ] Linda Badri et al.,
Revisitando a coesão da classe: uma investigação empírica em vários sistemas ,
Journal of Object Technology, Vol.7, No.6, 2008, PDF.
[ chidamber94 ] Falta de coesão nos métodos ( LCOM ).
Shyam Chidamber et al.,
Uma suíte de métricas para design orientado a objetos ,
IEEE Transactions on Software Engineering, Vol.20, No.6, 1994, PDF.
[ bieman95 ] Coesão de classe apertada ( TCC ) e coesão de classe solta ( LCC ).
James M. Bieman et al.,
Coesão e reutilização em um sistema orientado a objetos ,
Departamento de Ciência da Computação, Universidade Estadual do Colorado, 1995, PDF.
[ hitz95 ] Falta de coesão nos métodos 4 ( LCom4 ).
Martin Hitz et al.,
Medição de acoplamento e coesão em sistemas orientados a objetos ,
Instituto de Ciência da Computação Aplicada e Análise de Sistemas, Universidade de Viena, 1995, PDF.
[ sellers96 ] Falta de coesão nos métodos 2-3 ( LCOM 2, 3 e 5 ).
B. Henderson-Sellers et al.,
Acoplamento e coesão (em direção a um conjunto de métricas válidas para análise e design orientados a objetos) ,
Sistemas Orientados a Objetos 3, 1996, PDF.
[ bansiya99 ] Coesão entre métodos de classes ( CAMC ).
Jagdish Bansiya et al.,
Uma métrica de coesão de classe para projetos orientados a objetos ,
Jornal de Programação Orientada a Objetos, vol. 11, não. 8, 1999, pdf.
[ etzkorn00 ] Relacionamento lógico dos métodos ( LORM ).
L. Etzkorn e H. Delugach,
Em direção a uma suíte de métricas semânticas para design orientado a objetos ,
Tecnologia de idiomas e sistemas orientados a objetos, 2000. Ferramentas 34. Proceedings. 34ª Conferência Internacional sobre. IEEE, 2000, pp. 71–80, pdf
[ wasiq01 ] Métrica de conexão de classe ( CCM ).
M. Wasiq
Medição da coesão da classe em sistemas orientados a objetos ,
Tese de mestrado na Universidade de Petróleo e Minerais do King Fahd, 2001, PDF.
[ aman04 ] Coesão da classe otimista ( OCC ) e coesão de classe pessimista ( PCC ).
Hirohisa Aman et al.,
Uma proposta de métricas de coesão de classe usando tamanhos de peças coesas ,
Proc. da quinta conferência conjunta sobre engenharia de software baseada no conhecimento, 2002, pdf.
[ marcus05 ] Coesão conceitual de classes ( C3 ).
A. Marcus e D. Poshyvanyk,
A coesão conceitual das classes ,
21ª Conferência Internacional IEEE sobre Manutenção de Software (ICSM'05), Budapeste, Hungria, 2005, pp. 133-142, PDF
[ counsell06 ] Distância de Hamming normalizada ( NHD ).
Steve Counsell et al.,
A interpretação e a utilidade de três métricas de coesão para design orientado a objetos ,
ACM Tosem, abril de 2006, pdf.
[ fernandez06 ] Uma métrica sensível de coesão de classe ( SCOM ).
Luis Fernández et al.,
[A] nova métrica [...] produzindo valores significativos [...] mais sensíveis do que os relatados anteriormente ,
International Journal "Information Theories & Applications", Volume 13, 2006, PDF.
[ dallal07 ] método por meio da coesão dos atributos ( MMAC ).
Jehad Al Dallal,
Uma métrica de coesão baseada em design para classes orientadas a objetos ,
Academia Mundial de Ciência, Engenharia e Tecnologia Jornal Internacional de Computação e Engenharia de Informações Vol: 1, NO: 10, 2007, PDF.
[ liu09 ] Entropia máxima ponderada ( MWE ).
Y. Liu, D. Poshyvanyk, R. Ferenc, T. Gyim'thy e N. Chrisochoides,
Modelando a coesão da classe como misturas de tópicos latentes ,
Manutenção de Software, 2009. ICSM 2009. IEEE International Conference sobre. IEEE, 2009, pp. 233–242, pdf
[ dallal11 ] Falta transitiva de coesão nos métodos ( TLCOM ).
Jehad Al Dallal,
Métrica de falta de coesão orientada a objetos baseada em transitivo ,
Departamento de Ciência da Informação, Universidade do Kuwait, 2011, PDF.
Primeiro, Skeleton analisa Java ByteCode usando JavaAsSit e ASM, para produzir skeleton.xml . Este documento XML contém informações sobre cada classe, necessária para os cálculos de métricas. Por exemplo, esta classe Java simples:
class Book {
private int id ;
int getId () {
return this . id ;
}
} Parecerá assim no 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 > Em seguida, temos uma coleção de folhas de estilo XSL, uma por cada métrica. Por exemplo, LCOM.xsl transforma skeleton.xml em LCOM.xml , que pode ser assim:
< 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 >Assim, todos os cálculos acontecem dentro dos arquivos XSLT. Decidimos implementá -lo dessa maneira após uma tentativa menos bem -sucedida de fazer tudo em Java. Parece que o XSL é muito mais adequado para manipulações com dados do que Java.
Estamos desenvolvendo um plug -in JPeek para Maven, consulte o JPEEK Maven Plugin Project.
final . Por exemplo, todas as métricas da LCOM e Com são afetadas. Apenas bifurcar, fazer alterações, executar mvn clean install -Pqulice e envie uma solicitação de tração; Leia isso, se perdido.
Não hesite em adicionar seu nome a esta lista na sua próxima solicitação de tração.