Klassen Anzahl sowie die Anzahl der Junit Tests ermitteln?

hello_autumn

Mitglied
Hallo!

Ich bin kein riesen Expert in Java, komme aber gut zurecht. Leider wusste ich nicht wohin mit meinem Thema...

Ich schreibe für die Uni eine Ausarbeitung. Ich wollte mehrere Java Programme vergleichen. Ich habe mir bei GitHub ein paar nette Programme mit vielen Junit Tests geklont.
Nun, ich muss nicht alles verstehen WAS die Programme in jeder einzelnen Klasse machen. Mein Vergleich findet auf einer anderen Eben statt.
Ich möchte die Gesamtanzahl der Klassen, die in den Programmen erstellt sind, zählen. Nun ja, ich habe eine Option gefunden. Ich zähle die .java Klassen manuell. Doch kann ich mir sicher sein, dass ich das richtige mache? Nun habe ich bei einem Programm 55 .java Dateien gezählt. Also 55 Klassen. Auch die Namen sehen nach Klassen aus.
ABER: Ich denke das ist falsch. Habt ihr einen Tipp wie ich die Klassen automatisiert zählen kann? Ich benutze auch Eclipse.
Dazu wollte ich die Testklassen ebenfalls getrennt gezählt haben. Heißt alle Junit Testklassen. Nun, hier wird nicht eine *Test.java nur 1 Testklasse beinhalten, oder? Oder zählt man die Methoden?

Ich bin verwirrt. Ich arbeite das erste Mal mit Junit, so richtig. Und das in so einem Ausmaß, wo laut den Testdurchläufen 24.000 Tests gefunden werden.... Ich bin nun doppelt verwirrt. Kann jemand helfen? 😵😵😵😵😵😵
 
Ich zähle die .java Klassen manuell. Doch kann ich mir sicher sein, dass ich das richtige mache? Nun habe ich bei einem Programm 55 .java Dateien gezählt. Also 55 Klassen. Auch die Namen sehen nach Klassen aus.
ABER: Ich denke das ist falsch. Habt ihr einen Tipp wie ich die Klassen automatisiert zählen kann? Ich benutze auch Eclipse.
Was genau willst du denn Zählen?

Alle Java-Dateien?
Alle Klassen (zB innere Klassen einzeln)?
Nur Klassen, oder auch interfaces?

Dazu wollte ich die Testklassen ebenfalls getrennt gezählt haben. Heißt alle Junit Testklassen. Nun, hier wird nicht eine *Test.java nur 1 Testklasse beinhalten, oder? Oder zählt man die Methoden?
„Ein Test“ ist üblicherweise eine Methode, allerdings kann eine Methode auch mehreren Testfällen entsprechen, und Testfälle können auch erst zur Laufzeit generiert werden (und sind damit gar nicht statisch überprüfbar).

Die Frage ist aber auch wieder, was genau die Zählen willst:
Alle Test-Klassen (und dabei wieder die Punkte oben)?
Alle „Test-Methoden“?
Alle ausgeführten Test-Fälle?
 
Was genau willst du denn Zählen?

Alle Java-Dateien?
Alle Klassen (zB innere Klassen einzeln)?
Nur Klassen, oder auch interfaces?


„Ein Test“ ist üblicherweise eine Methode, allerdings kann eine Methode auch mehreren Testfällen entsprechen, und Testfälle können auch erst zur Laufzeit generiert werden (und sind damit gar nicht statisch überprüfbar).

Die Frage ist aber auch wieder, was genau die Zählen willst:
Alle Test-Klassen (und dabei wieder die Punkte oben)?
Alle „Test-Methoden“?
Alle ausgeführten Test-Fälle?
Da ich einen Vergleich aufstellen möchte, wäre ich nur an den Klassen interessiert. Welche dann ja getestet werden.
Also: Klassen zählen. Danach die Anzahl der Tests. Jetzt frage ich mich, durch deinen Denkanstoß, ob es dann doch sinnvoll wäre auch alle Testmethoden zu zählen? Oder reicht es einfach die Testklassen zu zählen. Ein Beispielprogramm wäre die Apache Commons Collections. Die ist echt mega groß und die testet ja schön ausgiebig JUnit, was mir ja gerade passt... Aber der Vergleich muss ja irgendwie notiert werden...

Pro .java Datei kann es auch mehrere Java Klassen geben, bitte daran denken..
Verdammt, genau meine Vermutung! Falsch ist es also blind die Dateien zu zählen.
 
Aber was soll dabei rauskommen? angenommen Ich habe eine Funktion "String Berechne(String s, int anzahl)". Dabei soll s eine String aus 0 und 1 sein, der nach bestimmten Vorgaben verändert wird( wie Game of Life). Diese Aufgabenstellung umfaßt eine ganze Anzahl Tests. Die Funktion "int loese( float p , float q) " zur Lösung quadratischer Gleichungen benötigt im Idealfall erstmal nur die Tests, ob der Rückgabewert die Anzahl der Lösungen korrekt zurückgibt, also 3 Tests. Und man wird sicher auch die Lösungen testen, also wahrscheinlich noch 2 oder 3 Tests.
 
Aber was soll dabei rauskommen? angenommen Ich habe eine Funktion "String Berechne(String s, int anzahl)". Dabei soll s eine String aus 0 und 1 sein, der nach bestimmten Vorgaben verändert wird( wie Game of Life). Diese Aufgabenstellung umfaßt eine ganze Anzahl Tests. Die Funktion "int loese( float p , float q) " zur Lösung quadratischer Gleichungen benötigt im Idealfall erstmal nur die Tests, ob der Rückgabewert die Anzahl der Lösungen korrekt zurückgibt, also 3 Tests. Und man wird sicher auch die Lösungen testen, also wahrscheinlich noch 2 oder 3 Tests.

Okay.
Hm... Dann würde ich einfach alle Methoden zählen, welche in einem Programm vorhanden sind... Ginge das?
Hier geht es um die Skalierung der Programme. Ich möchte die Größe der Programme haben: LoC, Anzahl der Klassen, Anzahl der Tests, sowie super wäre noch die Line Coverage...
 
Was du suchst ist ein statischer Code Analyzer, welcher dir Metriken erstellen kann. Hierzu existieren etliche Tools. Sehr bekannt ist zum Beispiel Sonar https://www.sonarqube.org/ .
Auch das Metrics Plugin für Eclipse könnte dir weiterhelfen https://marketplace.eclipse.org/content/eclipse-metrics
Zur Messung der Testabdeckung existieren zum Beispiel Atlassian Clover
https://www.atlassian.com/software/clover oder Emma
https://de.wikipedia.org/wiki/Emma_(Software)

Viel Erfolg bei deiner Ausarbeitung.
 
Was du suchst ist ein statischer Code Analyzer, welcher dir Metriken erstellen kann. Hierzu existieren etliche Tools. Sehr bekannt ist zum Beispiel Sonar https://www.sonarqube.org/ .
Auch das Metrics Plugin für Eclipse könnte dir weiterhelfen https://marketplace.eclipse.org/content/eclipse-metrics
Zur Messung der Testabdeckung existieren zum Beispiel Atlassian Clover
https://www.atlassian.com/software/clover oder Emma
https://de.wikipedia.org/wiki/Emma_(Software)

Viel Erfolg bei deiner Ausarbeitung.
Wow! Danke Dir! Fühle Dich gedrückt! Ich werde gleich mal direkt alles ausprobieren! Hoffentlich klappt das alles!
 

Zurück
Oben