Statistische/dynamische Tests

Diskutiere Statistische/dynamische Tests im Allgemeine Java-Themen Bereich.
hello_autumn

hello_autumn

Hallo,

ich wollte euch mal fragen ob ihr Erfahrung machen konntet im bereich des Testings.
Ich habe meine Uni-Ausarbeitung. An der werkel ich weiterhin.

Ich nutze JUnit.
Meine Überlegung war nun ob es ein Tool gibt, welches überprüft, ob ein Test nur eine Java-Klasse oder mehrere Java-Klassen auf einmal testet. Geht sowas überhaupt? Ist das möglich zu überprüfen? Oder muss ich das manuell pro Klasse selber prüfen? Jedoch endet der Spaß bei ca. 75.000 Java-Klassen... :/

Hättet ihr Tipps?
 
T

Tobias-nrw

Man schreibt (für gewöhnlich) ein JUnit-Test pro Klasse.
 
J

JustNobody

Die Frage ist hier, was man wie bewerten will. Man kann bei Unit Tests durchaus auch schauen, welche Codeteile benutzt wurden. https://www.eclemma.org/ wäre da ein Beispiel für ein Open Source Tool.

Da bekommt man halt einen Überblick, welcher Code benutzt wurde. Aber hier geht es um die Aussage, welche Zeilen vom Code nicht benutzt wurden. Diese Aussage ist eindeutig: Code, der nicht benutzt wurde, wurde auch nicht getestet.

Aber wenn ein Unit Test beim Durchlaufen auch eine Zeile Code genutzt hat, bedeutet dies ja nicht automatisch, dass diese Zeile Code getestet wurde.
Also wenn ich die Klasse A teste, dann kann ich im Inneren durchaus die Klasse B verwenden. Aber nur weil ich Teile von Klasse B verwendet habe, habe ich die Klasse B nicht getestet. Ich setze einfach voraus, dass die Klasse B bereits getestet wurde und ich die Funktionalität nutzen kann.

Daher ist diese Fragestellung so in meinen Augen nicht beantwortbar. Aber evtl. kann so etwas als Indiz gewertet werden...
 
L

LimDul

Ich würde sagen, kommt drauf an.

Aus technischer Sicht ist es so, dass die wenigstens Unit-Test wirklich nur genau eine Klasse testen. Denn wenn ich einen Test schreibe, um die Methode doSomething() der Klasse myClass teste, wird in den meisten Fällen auch Code anderer Klassen aufgerufen. Das heißt, eine rein technische Lösung, welche schaut, welche Codestellen aufgerufen werden, scheidet aus.

Aus fachlicher sollte es aber so sein, dass es pro zu testender Klasse auch eine JUnit-Test Klasse gibt, die genau diese Klasse fachlich testet. Und damit so Tools wie moreUnit in Eclipse sauber funkionieren, gibt es auch Namenskonventionen. (MoreUnit erlaubt vom Test-Code zum getesteten Code hin und zurück zu springen). Das heißt, der test für die die Klasse somepackage.SomeClass sollte somepackage.SomeClassTest heißen. Gleiches Package und Klassenname um Test ergänzt. Wenn das der Fall ist, würde ich aus statistischer Sicht davon ausgehen, dass der Test genau diese Klasse testet.

Damit hättest du vermutlich für den Großteil der Testklassen eine Aussage. Für alle Testklassen die nicht in diese Namenskonvetion passen, müsste man da mal schauen, ob man da auch Muster findet, die man sinnvoll auswerten kann. Wie viele das sind, kann ich aber nicht abschätzen.
 
hello_autumn

hello_autumn

Danke euch schon mal für die Ideen!

Also die klassische Code Coverage nutze ich schon bei Eclipse. Die ist für mich auch essenziell wichtig, da ich nur auf erfolgreiche Tests abziele (zumindest versuche ich es)...

Das moreUnit-Tool sieht schon echt ansprechend aus. Sehr schön, wie ich dann die weiteren/mitgetesteten Klassen einfach nach verfolgen kann!

Jedoch kommt mir eine weitere Idee auf: Unittests testen ja theoretisch nur eine (in sich geschlossene) Klasse. Dann gibt es ja die Modultests und dann die Integrationstests. Wenn ich dann wenig bzw. keine Tools habe das zu testen, kann ich das irgenwie anders testen/überprüfen? Vielleicht irgendwie nach der Zeit, oder nach der Rechenleistung, oder so ähnlich? Oder gibt es da noch weitere Geheimnisse im Bereich des Testing, von denen ich gerade nichts weiß?

Meine Erfahrung ist im Testing relativ begrenzt und wenn, dann habe ich nur so schicke klitzekleine Tests für je eine geometrische Form geschrieben... :p
 
L

LimDul

Ich glaube alles weitere wird sehr schwierig zu generalisieren.
JUnit 5 bietet diverese Möglichkeiten sowas zu strukturieren, z.B. Tags: https://junit.org/junit5/docs/5.0.1/api/org/junit/jupiter/api/Tag.html

Aber da gibt es soweit mir bekannt keine Vorgaben, das müsste man für jedes zu analysierende Projekt individiuell auswerten, was da genutzt wird.

Rechenleistung ist durchaus ein Indiz, weil Integrationstest oft höhere Rechenleistung haben - aber das ist nur Indiz, kein hartes Merkmal
 
hello_autumn

hello_autumn

Danke schon mal für die Antwort. :)

Was meinst du denn mit "individuell Auswerten"? Mein Programm ist ca. 500.000 Line of Code lang. Also schon ein echter Batzen. Das sind alles Lines ohne Kommentare und Leerstellen... Ich weiß nur, da sind Modul, sowie Integrationstests zwischen. Kann aber nicht alle überprüfen, händisch... Ist nicht mein Programm. Bzw, ist halt zu groß. Der sprengt echt den Rahmen.
 
L

LimDul

Wenn du ein Programm überprüfst, kannst du dir da eine handvoll Integrationstests anschauen und sehen, ob die z.B. mit Junit-Tags versehen sind, ob die einer Namenskonvention genügen etc. Damit kannst du dann vielleicht erfolgreich den Rest der Tests in diesem Programm katagorisieren und analysieren - aber das wird für ein anderes Programm nicht mehr tragen.

Sprich du wirst für jedes Programm einzeln nachsehen müssen, ob es Merkmale gibt.
 
mrBrown

mrBrown

Theoretisch könntest du für jeden Test prüfen, wie viele Klassen durch diesen getestet werden (über Codeabdeckung), und dann danach gruppieren.

Keine Ahnung wie gut das klappen könnte, aber mit etwas Glück findet man da zwei oder mehr Cluster. Das ganze lässt sich dann zumindest auch Projekt-Übergreifend nutzen.
 
hello_autumn

hello_autumn

Ich überlege und suche auch weiter im Netz rum.
Ich habe mit den Tags nun ein Problem. Ich wollte so wenig wie möglich im Code rumschreiben und den Code verändern. So wie ich es verstehe müssen die Tags im Code notiert werden.

Ich bin weiter am Überlegen, ob es Möglichkeiten gibt, quasi, von außen da ran zu kommen... Es muss noch nicht Projekt übergreifend sein... Ich würde mich freuen, wenn es erst in meinem riesen Projekt funktionieren könnte... Hm...
 
Thema: 

Statistische/dynamische Tests

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben