JPEEK est un collectionneur statique de mesures de code Java.
Motivation : la cohésion de classe, par exemple, est considérée comme l'un des attributs logiciels orientés objet les plus importants. Jusqu'à présent, plus de 30 mesures de cohésion différentes sont inventées, mais presque aucun d'entre eux n'a de calculatrices disponibles. La situation avec d'autres mesures est très similaire. Nous voulons créer un tel outil qui permettra d'analyser la qualité du code plus ou moins formellement (avec des centaines de mesures). Ensuite, nous appliquerons cette analyse à différentes bibliothèques Java avec l'intention de prouver que les idées de la série de livres d'objets élégants ont un sens.
Chargez le dernier fichier jar-with-dependencies.jar à partir d'ici et ensuite:
java -jar jpeek-jar-with-dependencies.jar --sources . --target ./jpeek JPEEK analysera les fichiers Java dans le répertoire actuel. Des rapports XML seront générés dans le répertoire ./jpeek . Apprécier.
| Option | Description |
|---|---|
-s, --sources <path> | Requis. Chemin de répertoire avec les fichiers de classe |
-t, --target <path> | Requis. Chemin de répertoire où les rapports seront générés |
--include-ctors | Inclure les constructeurs dans toutes les formules |
--include-static-methods | Inclure des méthodes statiques dans toutes les formules |
--include-private-methods | Inclure des méthodes privées dans toutes les formules |
--metrics <metrics> | Liste des métriques séparées par des virgules à inclure (par défaut: "LCOM5,NHD,MMAC,SCOM,CAMC" ) |
--overwrite | Écraser le répertoire cible, s'il existe, ou sortir avec erreur |
--quiet | Éteindre la journalisation |
--help | Afficher le message d'aide |
Vous pouvez également le déployer en tant que service Web sur votre propre plateforme. Il suffit de le compiler avec mvn clean package --settings settings.xml puis d'exécuter, comme Procfile le suggère. Vous devrez avoir settings.xml avec les données suivantes:
< 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 > Vous aurez également besoin de ces tables dans DynamoDB (tous les index doivent livrer ALL les attributs):
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)
Ces articles fournissent un assez bon résumé des mesures de cohésion:
[ izadkhah17 ] Habib Izadkhah et al.,
Métriques de cohésion de classe pour l'ingénierie logicielle: une revue critique ,
Informatique Journal de Moldavie, vol.25, n ° 1 (73), 2017, PDF.
[ badri08 ] Linda Badri et al.,
Revisiter la cohésion des classes: une enquête empirique sur plusieurs systèmes ,
Journal of Object Technology, Vol.7, No.6, 2008, PDF.
[ chidamber94 ] Manque de cohésion dans les méthodes ( LCOM ).
Shyam Chidamber et al.,
Une suite de métriques pour la conception orientée objet ,
Transactions IEEE sur l'ingénierie logicielle, vol.20, n ° 6, 1994, PDF.
[ bieman95 ] Cohésion de classe serrée ( TCC ) et cohésion de classe lâche ( LCC ).
James M. Bieman et al.,
Cohésion et réutilisation dans un système orienté objet ,
Département d'informatique, Colorado State University, 1995, PDF.
[ hitz95 ] Manque de cohésion dans les méthodes 4 ( LCOM4 ).
Martin Hitz et al.,
Mesurer le couplage et la cohésion dans les systèmes orientés objet ,
Institute of Applied Computer Science and Systems Analysis, Université de Vienne, 1995, PDF.
[ sellers96 ] Manque de cohésion dans les méthodes 2-3 ( LCOM 2, 3 et 5 ).
B. Henderson-Sellers et al.,
Couplage et cohésion (vers une suite de métriques valides pour l'analyse et la conception orientées objet) ,
Systèmes orientés objet 3, 1996, PDF.
[ bansiya99 ] Cohésion parmi les méthodes de classes ( CAMC ).
Jagdish Bansiya et al.,
Une métrique de cohésion de classe pour les conceptions orientées objet ,
Journal of Object Oriented Programming, Vol. 11, non. 8, 1999, pdf.
[ etzkorn00 ] La parenté logique des méthodes ( lorm ).
L. Etzkorn et H. Delugach,
Vers une suite de métriques sémantiques pour le design orienté objet ,
Technologie des langages et systèmes orientés objet, 2000. Outils 34. Procédures. 34e Conférence internationale sur. IEEE, 2000, pp. 71–80, PDF
[ wasiq01 ] Métrique de connexion de classe ( CCM ).
M. Wasiq
Mesurer la cohésion des classes dans les systèmes orientés objet ,
Master Thèse à l'Université King Fahd de Petroleum & Minerals, 2001, PDF.
[ aman04 ] Cohésion de classe optimiste ( OCC ) et cohésion de classe pessimiste ( PCC ).
Hirohisa Aman et al.,
Une proposition de mesures de cohésion de classe à l'aide de tailles de pièces cohésives ,
Proc. de la cinquième conférence conjointe sur l'ingénierie logicielle basée sur les connaissances, 2002, PDF.
[ marcus05 ] Cohésion conceptuelle des classes ( C3 ).
A. Marcus et D. poshyvanyk,
La cohésion conceptuelle des classes ,
21e Conférence internationale de l'IEEE sur la maintenance des logiciels (ICSM'05), Budapest, Hongrie, 2005, pp. 133-142, PDF
[ counsell06 ] Distance de Hamming normalisée ( NHD ).
Steve Counsell et al.,
L'interprétation et l'utilité de trois mesures de cohésion pour la conception orientée objet ,
ACM Tosem, avril 2006, PDF.
[ fernandez06 ] Une métrique sensible de la cohésion de la classe ( SCOM ).
Luis Fernández et al.,
[A] nouvelle métrique [...] donnant des valeurs significatives [...] plus sensibles que ceux précédemment rapportés ,
Journal international "Théories et applications de l'information", volume 13, 2006, PDF.
[ dallal07 ] Méthode Méthode à travers les attributs Cohésion ( MMAC ).
Jehad Al Dallal,
Une métrique de cohésion basée sur le design pour les classes orientées objet ,
World Academy of Science, Engineering and Technology International Journal of Computer and Information Engineering Vol: 1, No: 10, 2007, PDF.
[ liu09 ] Entropie pondérée maximale ( MWE ).
Y. Liu, D. Poshyvanyk, R. Ferenc, T. Gyim´othy et N. Chrisochoides,
Modélisation de la cohésion de la classe comme mélange de sujets latents ,
Software Maintenance, 2009. ICSM 2009. IEEE International Conference sur. IEEE, 2009, pp. 233-242, PDF
[ dallal11 ] Manque transitif de cohésion dans les méthodes ( TLCOM ).
Jehad Al Dallal,
Métrique de manque de cohésion orientée objet en transitif ,
Département des sciences de l'information, Université du Koweït, 2011, PDF.
Tout d'abord, Skeleton Parses Java Bytecode utilisant Javaassit et ASM, afin de produire skeleton.xml . Ce document XML contient des informations sur chaque classe, ce qui est nécessaire pour les calculs de métriques. Par exemple, cette simple classe Java:
class Book {
private int id ;
int getId () {
return this . id ;
}
} Ressemblera à ceci dans le 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 > Ensuite, nous avons une collection de feuilles de styles XSL, une pour chaque métrique. Par exemple, LCOM.xsl transforme skeleton.xml en LCOM.xml , qui peut ressembler à ceci:
< 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 >Ainsi, tous les calculs se produisent dans les fichiers XSLT. Nous avons décidé de le mettre en œuvre de cette façon après une tentative moins réussie de tout faire en Java. Il semble que XSL soit beaucoup plus adapté aux manipulations avec des données que Java.
Nous développons un plugin JPEEK pour Maven, voir le projet de plugin JPeek Maven.
final . Par exemple, toutes les mesures LCOM et COM sont affectées. Just Fork, effectuez des modifications, exécutez mvn clean install -Pqulice et soumettez une demande de traction; Lisez ceci, s'il est perdu.
N'hésitez pas à ajouter votre nom à cette liste dans votre prochaine demande de traction.