Jpeek ist ein statischer Sammler von Java -Code -Metriken.
Motivation : Klassenkohäsion zum Beispiel wird als eines der wichtigsten Objekt-orientierten Softwareattribute angesehen. Bisher sind über 30 verschiedene Kohäsionsmetriken erfunden, aber fast keiner von ihnen hat Taschenrechner zur Verfügung. Die Situation mit anderen Metriken ist sehr ähnlich. Wir möchten ein solches Tool erstellen, mit dem die Codequalität mehr oder weniger formal analysiert werden kann (mit Hunderten von Metriken). Dann werden wir diese Analyse auf verschiedene Java -Bibliotheken anwenden, um zu beweisen, dass die Ideen aus eleganten Objekt -Buchreihen sinnvoll sind.
Laden Sie die neueste jar-with-dependencies.jar -Datei von hier und dann:
java -jar jpeek-jar-with-dependencies.jar --sources . --target ./jpeek JPEEK wird Java -Dateien im aktuellen Verzeichnis analysieren. XML -Berichte werden im Verzeichnis ./jpeek generiert. Genießen.
| Option | Beschreibung |
|---|---|
-s, --sources <path> | Erforderlich. Pfad zum Verzeichnis mit den Klassendateien |
-t, --target <path> | Erforderlich. Pfad zum Verzeichnis, in dem die Berichte erstellt werden |
--include-ctors | Geben Sie Konstruktoren in alle Formeln ein |
--include-static-methods | Geben Sie statische Methoden in alle Formeln ein |
--include-private-methods | Fügen Sie private Methoden in alle Formeln ein |
--metrics <metrics> | Komma getrennte Liste von Metriken, die einbezogen werden (Standard: "LCOM5,NHD,MMAC,SCOM,CAMC" ) |
--overwrite | Überschreiben Sie das Zielverzeichnis, wenn es existiert, oder beenden Sie mit Fehler |
--quiet | Schalten Sie die Protokollierung aus |
--help | Hilfsnachricht anzeigen |
Sie können es auch als Webdienst auf Ihrer eigenen Plattform bereitstellen. Kompilieren Sie es einfach mit mvn clean package --settings settings.xml und fahren Sie dann aus, wie Procfile vorschlägt. Sie müssen settings.xml mit den folgenden Daten haben: xml:
< 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 > Sie benötigen diese Tabellen auch in DynamoDB (alle Indizes müssen ALL Attribute liefern):
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)
Diese Papiere bieten eine ziemlich gute Zusammenfassung der Kohäsionsmetriken:
[ izadkhah17 ] Habib Izadkhah et al.,,
Klassenkohäsionsmetriken für Software Engineering: Eine kritische Überprüfung ,
Informatik Journal of Moldova, Vol.25, Nr. 1 (73), 2017, PDF.
[ badri08 ] Linda Badri et al.,,
Überprüfung der Klassenkohäsion: Eine empirische Untersuchung mehrerer Systeme ,
Journal of Object Technology, Vol.7, Nr. 6, 2008, PDF.
[ chidamber94 ] Mangel an Zusammenhalt bei Methoden ( LCOM ).
Shyam Chidamber et al.,,
Eine Metrik -Suite für objektorientiertes Design ,
IEEE Transactions on Software Engineering, Vol.20, Nr. 6, 1994, PDF.
[ bieman95 ] Ticker Klassenkohäsion ( TCC ) und Lose Class Cohäsion ( LCC ).
James M. BioMan et al.,
Zusammenhalt und Wiederverwendung in einem objektorientierten System ,
Abteilung für Informatik, Colorado State University, 1995, PDF.
[ hitz95 ] Mangel an Zusammenhalt in den Methoden 4 ( LCOM4 ).
Martin Hitz et al.,
Messung der Kopplung und Kohäsion in objektorientierten Systemen ,
Institut für angewandte Informatik und Systemanalyse, Universität Wien, 1995, PDF.
[ sellers96 ] Mangel an Zusammenhalt in den Methoden 2-3 ( LCOM 2, 3 und 5 ).
B. Henderson-Seller et al.,,
Kopplung und Zusammenhalt (in Richtung einer gültigen Metrik-Suite für objektorientierte Analyse und Design) ,
Objektorientierte Systeme 3, 1996, PDF.
[ bansiya99 ] Zusammenhalt zwischen den Klassenmethoden ( CAMC ).
Jagdish Bansiya et al.,,
Eine Klassenkohäsionsmetrik für objektorientierte Designs ,
Journal of Object-oriented Programming, Vol. 11, nein. 8, 1999, PDF.
[ etzkorn00 ] Logische Verwandtschaft von Methoden ( LORM ).
L. Etzkorn und H. Delugach,
Auf eine semantische Metriken Suite für objektorientiertes Design ,
Technologie von objektorientierten Sprachen und Systemen, 2000. Tools 34. Proceedings. 34. Internationale Konferenz über. IEEE, 2000, S. 71–80, PDF
[ wasiq01 ] Klassenverbindungsmetrik ( CCM ).
M. Wasiq
Messung der Klassenkohäsion in objektorientierten Systemen ,
Masterarbeit an der King Fahd University of Petroleum & Minerals, 2001, PDF.
[ aman04 ] Optimistischer Klassenkohäsion ( OCC ) und pessimistischer Klassenkohäsion ( PCC ).
Hirohisa Aman et al.,,
Ein Vorschlag für Klassenkohäsionsmetriken unter Verwendung von Größen von zusammenhängender Teile ,
Proc. der fünften gemeinsamen Konferenz über wissensbasiertes Software Engineering, 2002, PDF.
[ marcus05 ] Konzeptioneller Zusammenhalt von Klassen ( C3 ).
A. Marcus und D. Poshyvanyk,
Der konzeptionelle Zusammenhalt von Klassen ,
21. IEEE Internationale Konferenz für Software-Wartung (ICSM'05), Budapest, Ungarn, 2005, S. 133-142, PDF
[ counsell06 ] Normalisierter Hamming -Abstand ( NHD ).
Steve Counsell et al.,,
Die Interpretation und Nützlichkeit von drei Kohäsionsmetriken für objektorientiertes Design ,
ACM Tosem, April 2006, PDF.
[ fernandez06 ] Eine empfindliche Metrik des Klassenkohäsion ( SCOM ).
Luis Fernández et al.,,
[A] neue Metrik [...] aussagekräftige Werte [...] sensibler als die zuvor gemeldeten ,
Internationales Journal "Informationstheorien & Anwendungen", Band 13, 2006, PDF.
[ dallal07 ] Method-Methode durch Attribute Kohäsion ( MMAC ).
Jehad Al Dallal,
Eine aufgestellte Kohäsionsmetrik für objektorientierte Klassen ,
World Academy of Science, Engineering and Technology International Journal of Computer and Information Engineering Vol: 1, Nr.: 10, 2007, PDF.
[ liu09 ] Maximal gewichtete Entropie ( MWE ).
Y. Liu, D. Poshyvanyk, R. Ferenc, T. Gyim´othy und N. Chrisochoides,
Modellierungsklassenkohäsion als Gemische latenter Themen ,
Software Maintenance, 2009. ICSM 2009. IEEE International Conference on. IEEE, 2009, S. 233–242, PDF
[ dallal11 ] Transitiver Mangel an Kohäsion in Methoden ( TLCOM ).
Jehad Al Dallal,
Transitivbasierte objektorientierte Kohäsionsmetrik, mangelnde Kohäsion ,
Abteilung für Informationswissenschaft, Kuwait University, 2011, PDF.
Zunächst speichert Skeleton Java -Bytecode mit Javaassit und ASM, um skeleton.xml herzustellen. Dieses XML -Dokument enthält Informationen zu jeder Klasse, die für die Metrikenberechnungen erforderlich sind. Zum Beispiel diese einfache Java -Klasse:
class Book {
private int id ;
int getId () {
return this . id ;
}
} Wird so im skeleton.xml aussehen:
< 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 > Dann haben wir eine Sammlung von XSL -Stylesheets, jeweils pro Metrik. Zum Beispiel verwandelt LCOM.xsl skeleton.xml in LCOM.xml , was möglicherweise so aussieht:
< 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 >Somit finden alle Berechnungen in den XSLT -Dateien statt. Wir haben uns entschlossen, es nach einem weniger erfolgreichen Versuch, alles in Java zu tun, so umzusetzen. Es scheint, dass XSL viel besser für Manipulationen mit Daten als Java geeignet ist.
Wir entwickeln ein JPEEK -Plugin für Maven, siehe JPEEEK MAVEN -Plugin -Projekt.
final Konstanten handelt. Zum Beispiel sind alle LCOM- und COM -Metriken betroffen. Nur Gabel, Änderungen vornehmen, mvn clean install -Pqulice ausführen und eine Pull -Anfrage einreichen. Lesen Sie dies, wenn verloren.
Zögern Sie nicht, Ihren Namen dieser Liste in Ihrer nächsten Pull -Anfrage hinzuzufügen.