Gute Literatur zum Testing? insbesondere Qt

Gast #3814045
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
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...
Gast
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.
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?
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.
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.