Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Softwaretests und Qualitätssicherung (https://www.delphipraxis.net/86-softwaretests-und-qualitaetssicherung/)
-   -   Unit Testing sinnvoll? (https://www.delphipraxis.net/155518-unit-testing-sinnvoll.html)

stahli 18. Jan 2011 18:00

AW: Unit Testing sinnvoll?
 
Ich bin da etwas hin- und hergerissen.

Über solche Tests kann man doch auch nur einige Dinge und Situationen prüfen, die man in einem starren Ablauf nachvollziehen kann.
Wenn ich eine Funktion Addiere(A,B) mit 1 und 2 prüfe, kommt korrekt 3 heraus.
Auf 100 und 200 teste ich nicht, aber durch einen Fehler in der Funktion kommt 400 heraus. Den Fehler erkennt man also auch über ein Unit-Testing nicht.

Ein weiteres Problem ist in der GUI-Anbindung zu sehen. Gibt es hier irgendwelche (zeitkritischen) Probleme, kann man das mit Unittesting auch nicht feststellen.
Da scheint mir ein GUI-Testing schon sinnvoller, aber so richtig überzeugt mich das auch nicht (vom Aufwand/Nutzen her).

Also ich bin noch nicht sicher, was ich davon halten soll (ob sich der Aufwand lohnt).

Assarbad 18. Jan 2011 18:47

AW: Unit Testing sinnvoll?
 
Zitat:

Zitat von stahli (Beitrag 1075615)
Über solche Tests kann man doch auch nur einige Dinge und Situationen prüfen, die man in einem starren Ablauf nachvollziehen kann.
Wenn ich eine Funktion Addiere(A,B) mit 1 und 2 prüfe, kommt korrekt 3 heraus.
Auf 100 und 200 teste ich nicht, aber durch einen Fehler in der Funktion kommt 400 heraus. Den Fehler erkennt man also auch über ein Unit-Testing nicht.

Aaah. In der Tat. Hierbei kommen dann "Integration Tests" und "System Tests" zum Einsatz.

Stell dir den jeweiligen Unit Test einfach als Möglichkeit vor die dokumentierte oder implizierte Funktionsweise der Funktion zu testen, jedoch nicht deren Einbindung in das Produkt. Dafür gibt es, wie gesagt, wiederum andere Varianten.

Zitat:

Zitat von stahli (Beitrag 1075615)
Ein weiteres Problem ist in der GUI-Anbindung zu sehen. Gibt es hier irgendwelche (zeitkritischen) Probleme, kann man das mit Unittesting auch nicht feststellen.

Absolut korrekt. Aber hier kann bspw. die Trennung deiner Anwendung in verschiedene Ebenen (siehe http://de.wikipedia.org/wiki/3-Tier#...en-Architektur) helfen. Vorteil: du kannst deine Tests bspw. in einer Kommandozeilenversion automatisieren. Damit haste sicher in den meisten Fällen mehr als 90% der Funktionalität einer Anwendung abgedeckt, es sei denn du mischst Logik und Präsentation (was Delphi leider ein wenig fördert, s.o.).

Zitat:

Zitat von stahli (Beitrag 1075615)
Also ich bin noch nicht sicher, was ich davon halten soll (ob sich der Aufwand lohnt).

Okay, mach es doch einfach mal anhand eines kleinen Projekts. Und dann notierst du exakt den Zeitaufwand. Ich denke aufgrund der Erfahrung mit Projekten ohne Tests kannste es sehr bald abschätzen. Aber Gold wert sind Unit Tests sobald du eine tiefgreifende Änderung am System vornehmen willst.

BUG 18. Jan 2011 19:50

AW: Unit Testing sinnvoll?
 
Zitat:

Zitat von stahli (Beitrag 1075615)
Wenn ich eine Funktion Addiere(A,B) mit 1 und 2 prüfe, kommt korrekt 3 heraus.
Auf 100 und 200 teste ich nicht, aber durch einen Fehler in der Funktion kommt 400 heraus. Den Fehler erkennt man also auch über ein Unit-Testing nicht.

Man kann natürlich nicht alles abdecken.
Aber überlege, was du testest, wenn du "live" beim Programmieren testest.

z.B.

A,B: Integer

Dann hast du zum Beispiel Eigenschaften wie:
1) A < 0, A > 0, A = 0
2) B < 0, B > 0, B = 0
3) A < B, A > B, A = B

Wenn du für alle diese Kombinationen von Eigenschaften ein Beispiel testest, solltest du beim Addieren relativ gut hinkommen.
(Ob das wohl in der Praxis irgendjemand so ausführlich macht :mrgreen:)

Zusätzlich kannst du dir Eingabewerte merken, bei denen es in der Vergangenheit Probleme gab:
Wenn mal bei ADD(6,-4) = 42 herauskam und du den Fehler gefixt hast, dann kannst du sichergehen, das der Fehler nicht nochmal auftritt (z.B. wenn du wegen eines anderen Problems eine frühere Version aus dem SVN holst).

Und dann gibt es noch die Möglichkeit, Fehler zu testen, die einfach häufig sind:
Grenzfälle, Off-By-One-Errors, usw.


Zudem kannst du beim Unit-Test ja relativ gut abschätzen, wo der Fehler herkommt, was beim GUI-Testen schwerer ist.

Viktorii 24. Jan 2011 15:11

AW: Unit Testing sinnvoll?
 
Zitat:

Zitat von Unwissender (Beitrag 1075109)
Zitat:

Zitat von Net7 (Beitrag 1075100)
Hmm... heißt das, du rufst im Ereignis zb. OnBTN_Click eine Funktion zb. MaleAufCaptionEinenText auf?? Oder wägst du ab wie komplex die einzelnen Aufrufschritte sind.

Hi,

ohne das für Assabard beantworten zu wollen möchte ich schon mal sagen, dass die Antwort ganz klar JA lauten wird (so hätte ich das schon gesagte interpretiert) und so gilt das für saubere Entwicklung.

Die Komplexität der Ereignisbehandlung hat nichts damit zu tun ob oder wie die Trennung in verschiedene Schichten erfolgen soll. Der Grund dass man im einfachsten Fall das GUI von der Domänenlogik trennt liegt nicht darin, dass die Komplexität sinkt oder man leichter testen kann, vielmehr haben die beiden Schichten unterschiedliche "Lebenszeiten".
So kann sich ein GUI sehr schnell und häufig ändern, ohne dass das einen Einfluss auf die Fachlichkeit hat. Auch kann es gut sein, dass Du mehrere GUIs unterstützen musst, z.B. ein Webinterface, einen Fatclient und vielleicht noch mal eine extra Oberfläche für's Smartphone.

Nimmst Du also einfach immer und sofort die Trennung vor, dann geht das in Routine über, Du arbeitest gleich richtig und musst nicht überlegen ob die Komplexität jetzt hoch genug ist es zu trennen. Alles was nicht nur mit der Darstellung in einem GUI zu tun hat, gehört da einfach nicht rein. Dass Du so leichter testen oder das GUI austauschen kannst. Auch steigt die Wartbarkeit, keiner muss lange durch die Ereignisbehandlung gehen und schauen, ob hier noch Logik drinsteckt, die nichts mit der Anzeige zu tun hat. Entsprechend weißt Du auch schon, in welcher Schicht Du Änderungen einpflegen musst, für solche an der Fachlichkeit musst Du nicht durch ein GUI durch und dort die richtige Stelle suchen. Zuguter letzt kannst Du hier auch schöner sprechende Methodennamen verwenden, da die nun die Fachlichkeit beschreiben und nicht die Behandlung eines bestimmten Buttons, der gedrückt wurde.

Ich finde das klingt alles sehr einleuchtend und zu dieser Vorgehensweise möchte ich auch hin.

Allerdings hapert es bei mir etwas an der praktischen Umsetzung.

Gibt es mal irgendwo ein (kleines) open source Programm, welches nach diesem Prinzip aufgebaut ist, nicht zu komplex ist damit man nicht direkt erschlagen wird, aber auch nicht zu simpel ist damit man die praktische Anwendung auch erkennt?? Jo, drei Wünsche auf einmal :stupid:

Bei allem was ich hiermal so runtergeladen habe (soweit ich mich erinnere) war diese Prinzip nicht wirklich da.

Würde mich über den einen oder anderen Tipp sehr freuen :-D

mquadrat 25. Jan 2011 14:15

AW: Unit Testing sinnvoll?
 
Wir stellen gerade auf Test-Driven-Developement um. Also ja, ich denke schon, dass Unit-Tests Sinn machen ;)

Kleinere Projekte eignen sich hervorragend zum üben, bevor man sich an die alten großen Bestandsprojekte macht.

Viktorii 31. Jan 2011 15:34

AW: Unit Testing sinnvoll?
 
Bezüglich #24: Also gibt es sowas in Delphi nicht (viel)?

Stimmt die These von mquadrat also doch irgendwo??

http://www.delphipraxis.net/157452-d...re-design.html

Assarbad 31. Jan 2011 16:50

AW: Unit Testing sinnvoll?
 
Zitat:

Zitat von Viktorii (Beitrag 1078576)
Stimmt die These von mquadrat also doch irgendwo??

http://www.delphipraxis.net/157452-d...re-design.html

Ich würde ihm zustimmen. Es läuft im Grunde auf das gleiche Argument hinaus wie meines, daß Delphi zu schludriger Programmierung verleitet ... (und die oft kopierten Codebeispiele ebenso).

Viktorii 1. Feb 2011 07:01

AW: Unit Testing sinnvoll?
 
Schade :(

Na, dann werde ich mich ab jetzt mal mehr in den besagten C# Foren rumtreiben...

stahli 1. Feb 2011 11:57

AW: Unit Testing sinnvoll?
 
Ich habe das programmieren vor 30 Jahren autodidaktisch gelernt.
Dann ist irgendwo logisch, dass man (mit Delphi) irgendwelche Berechnungen in einer Ereignisbehandlung durchführt. Man befasst sich ja auch nicht bei den ersten Schritten mit dem Erstellen von Klassen.

Inzwischen sehe ich die Sinnhaftigkeit der Trennung in mehrere Schichten durchaus ein. Zumindest für ernsthaftere und komplexere Projekte.

Wenn ich aber mal schnell einen kleinen Test zusammenklicke, werde ich mich nicht zwangsläufig mit Klassendeklarationen herumschlagen.

Also die Möglichkeit, mit Delphi auch schnell und schludrig zu arbeiten, sollte Dich nicht vertreiben. Du kannst ja jederzeit Dein Projekt auch "sauber" aufbauen.
Man muss halt Aufwand und Nutzen abwägen - auch im Hinblick auf Wartbarkeit und möglicher späterer Migration.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:29 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz