Forum: PC-Programmierung Gute Literatur zum Testing? insbesondere Qt


von Mart (Gast)


Lesenswert?

Hallo Forum,

ich bitte um ein paar Hinweise was ich noch lesen könnte.

Mein "Problem" ist, ich habe eine Anwendung geschrieben, die bisher noch 
nicht sehr umfangreich ist (ca. 3000 Zeilen Code). Nachdem ich jetzt den 
Code etwas aufgeräumt und mit Doxygen die Funktionen kommentiert habe, 
dachte ich der nächste logische Schritt wäre "Tests einzubauen" [0].

Aber wie?
Entweder sind die Funktionen wirklich simpel, d.h. 3-Zeiler; oder sie 
sind, da sie mit Objekten hantieren oder diese auf den Bildschirm 
zeichnen, sehr komplex. Bei den ersten habe ich kein Problem die Tests 
zu schreiben. Aber ist es nötig bzw. guter Stil selbst für die 
einfachsten Sachen einen Test zu schreiben? Und wie macht man das am 
Besten? Was testet man, was nicht? Die offensichtlichen Sachen schlagen 
ja nicht fehl, bzw das merkt man sofort beim Compilieren oder erstem 
Programmdurchlauf, wenn etwas nicht stimmen kann. Aber dazu sind Tests 
doch eigentlich da ... Und wie gehe ich erst die Sache bei den komplexen 
Funktionen an? Ich bin ziemlich ratlos.

Von Test-Driven-Development habe ich schonmal gehört, eine grobe 
Vorstellung, davon was ein Unit-Test sein könnte, habe ich auch, aber 
wie man das alles anwendet? Keine Ahnung, da fehlt mir einfach noch zu 
viel in den Grundlagen, glaube ich.

Also, was sollte ich lesen wenn es um einen "Allgemeinen Einsteig" zum 
Thema "Testen" geht und was wäre besonders empfehlenswert in Bezug auf 
Qt?
Das qtestlib-tutorial [1] kenne ich bereits. Gibt es da was 
umfangreicheres?

Ich würde mich über eine oder gerne auch mehrere 
{Buch,Paper,Tutorial,Video,etc}-Empfehlungen sehr freuen, vorzugsweise 
in Deutsch, Englisch wär notfalls aber auch ok.

Vielen Dank schonmal
Mart

[0]: Ok, das hätte man vielleicht lieber von Anfang an machen sollen. 
Aber ich schreibe das Program ja auch um das "Richtigmachen" zu lernen.
[1]: http://qt-project.org/doc/qt-4.8/qtestlib-tutorial1.html

von Borislav B. (boris_b)


Lesenswert?

Mart schrieb:
> Entweder sind die Funktionen wirklich simpel, d.h. 3-Zeiler; oder sie
> sind, da sie mit Objekten hantieren oder diese auf den Bildschirm
> zeichnen, sehr komplex.

Da ist es hilfreich, GUI und Logik streng zu trennen (z.B. mit dem MVC 
oder MVVM Pattern). Dann ist die GUI nicht mehr als eine einfache 
XML-Beschreibung, und braucht nicht getestet zu werden. Dafür lässt sich 
die dahinter liegende Logik umso leichter automatisiert testen.

Mart schrieb:
> Von Test-Driven-Development habe ich schonmal gehört, eine grobe
> Vorstellung, davon was ein Unit-Test sein könnte, habe ich auch, aber
> wie man das alles anwendet? Keine Ahnung, da fehlt mir einfach noch zu
> viel in den Grundlagen, glaube ich.

Visual Studio bietet dafür mitlerweile sehr umfangreiche Unterstützung. 
Damit kannst du mit einem Klick für jede Klasse/Methode einen Unit Test 
erstellen lassen, den du dann nur noch mit Leben füllen musst. Du 
bekommst auf Wunsch auch sofort angezeigt, wie deine Testabdeckung 
aussieht, und insbesondere welche Code-Teile noch nicht durch einen Test 
abgedeckt sind.

Konkrete Lektüre kann ich dir leider nicht empfehlen. Aber mit den 
obigen Schlagworten solltest du schon einiges finden...

: Bearbeitet durch User
von ggg (Gast)


Lesenswert?


von Mart (Gast)


Lesenswert?

Ich schau mal rein, danke.

von Mart (Gast)


Lesenswert?

Visualstudio ist nicht die Lösung, ich entwickel unter Linux, freie 
Software und so ;)

Auch was XML angeht, ist das leider ist sobald es komplexer/dynamisch 
wird nicht mehr praktikabel.

Aber trotzdem Danke.

von Borislav B. (boris_b)


Lesenswert?

Mart schrieb:
> Auch was XML angeht, ist das leider ist sobald es komplexer/dynamisch
> wird nicht mehr praktikabel.

Gerade dann fährst du mit einer GUI, die nur noch durch eine einfache 
XML-Beschreibung realisiert ist, doch deutlich besser.
Oder was meinst du, warum quasi alle modernen GUI-Frameworks das so 
machen (sei es Android, iOS, Windows Phone, WPF etc.) ;-)

Mart schrieb:
> Visualstudio ist nicht die Lösung, ich entwickel unter Linux, freie
> Software und so ;)

Gibt es denn unter Linux nichts vergleichbares? Entwurfsmuster wie MVC 
oder MVVM mit den entsprechenden Testkonzepten gibt es ja nicht erst 
seit gestern.
Da wird es doch entsprechende Tool-Untersützung geben?

von Holger J. (trac3r)


Lesenswert?

Mart schrieb:
> Visualstudio ist nicht die Lösung, ich entwickel unter Linux, freie
> Software und so ;)

Auch für Linux steht CppUnit für die Sprachen C/C++ zur Verfügung. Um in 
das Thema Unit Tests einzusteigen, hier wirst du nämlich für modular 
testbaren Code einige Voraussetzungen erfüllen müssen, würde ich 
persönlich das Buch Test-Driven Development for Embedded C von James 
Grenning empfehlen. Zwar wird dort weder von CppUnit oder Qt gesprochen, 
aber man bekommt einen guten Einblick darin, wie man generell gut 
testbaren Code in C oder C++ schreibt.

von Markus (Gast)


Lesenswert?

Holger J. schrieb:
> Zwar wird dort weder von [...] oder Qt gesprochen,
Rate mal, warum! Und rate mal weiter, warum es diverse (teure) Produkte 
auf dem Markt gibt, die den Markt "GUI-basierte Tests" bedienen?

Grüße
Markus

von Sven B. (scummos)


Lesenswert?

GUI-Tests mit Qt gehen eigentlich ziemlich gut, außer du willst wirklich 
wildes Zeug testen. Auf Buttons klicken oder Text in Felder eingeben und 
schauen was passiert ist ziemlich problemlos möglich. Siehe zum Beispiel 
http://qt-project.org/doc/qt-4.8/qtest.html#keyClick etc.

Generell hängt meiner Meinung nach ein sinnvolles Testing sehr von der 
konkreten Anwendung ab. GUI-Tests finde ich oft zu wartungsintensiv, 
insbesondere wenn sich die UI noch in der Entwicklung befindet. 
Test-Driven Development für den GUI-Code halte ich so gut wie immer für 
Schwachsinn.

Oh, und ja: Man kann auch beim Schreiben vom Code ein Augenmerk drauf 
legen, dass der Code leicht testbar ist. Gut möglich, dass das die 
Architektur der Anwendung ohnehin besser macht :)

Erklär doch mal was deine Anwendung tut, dann ist es einfacher, konkret 
über Tests zu reden.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.