Bis vor einigen Jahren dachte ich "Software Testing? Was soll ich denn da testen, ich weiß doch dass es funktioniert".
Bei einem meiner ersten Projekte als Freelancer durfte ich eine App entwickeln. Irgendwann war die erste Version fertig und wir wollten es den Kunden präsentieren.
Und wie so oft kam kurz vor der Präsentation noch ein kleiner Fehler auf. Den konnte ich schnell beheben, soweit so gut also. Dachte ich zumindest.
Die Präsentation kam und unsere App hätte eigentlich Musik abspielen lassen sollen. Doch es war still. Klick auf Play - nichts passiert. Im Englischen würde man sagen "awkward silence".
Meine "kleine Änderung" von vorher hat leider einen anderen, viel schlimmeren Fehler produziert und die App war quasi funktionslos.
Ab diesem Zeitpunkt war klar: Tests sind sinnvoll. Sie sind nicht nur sinnvoll, sie sind lebensrettend gerade für solche wichtigen Momente.
In diesem Blogpost werden wir also darüber sprechen, warum Testing als Programmierer so wichtig ist und wie es dir dabei helfen kann, bessere Codes zu schreiben.
Was dich erwartet
- Warum ist Testing wichtig als Programmierer?
- Was sind die Vorteile des Testens?
- Arten von Tests
- Wie oft sollte man testen?
- Best Practices beim Testen
- Fazit
1. Warum ist Testing wichtig als Programmierer?
Mal abgesehen von meiner Story in der Einleitung gibt es noch weiter Gründe fürs Testing:
Jeder Programmierer möchte den bestmöglichen Code schreiben, aber es gibt viele Dinge, die schiefgehen können.
Der Code kann fehlerhaft sein oder aber noch viel schlimmer: Es kann alles funktionieren aber mit falschen Ergebnissen.
Stell dir vor du baust eine Datenbank mit Produkten auf und eine Funktion berechnet die Versandkosten. Jetzt kann es sein, dass die Funktion zwar funktioniert aber leider um eine Kommastelle verrutscht. Dann gibt es zwar keine Fehler aber der Kunde zahlt 59€ statt 5,90€ Versand.
Wenn diese Probleme nicht frühzeitig erkannt werden, kann es schwierig und teuer werden, sie später zu beheben.
Deshalb ist Software Testing so wichtig. Es hilft dir, Probleme frühzeitig zu erkennen und zu beheben, bevor sie zu größeren Problemen werden. Außerdem wird sichergestellt, dass dein Code die erwarteten Ergebnisse liefert und dass er in der Lage ist, mit anderen Systemen zu interagieren.
2. Was sind die Vorteile des Software Testings?
Es gibt viele Vorteile beim Testen deines Codes, hier sind einige der wichtigsten:
- Früherkennung von Fehlern: Durch das Testen deines Codes kannst du Probleme frühzeitig erkennen und beheben, bevor sie zu größeren Problemen werden. Dadurch sparst du dir Zeit, Geld und verärgerte Kunden.
- Erhöhte Code-Qualität: Wenn du deinen Code testest, wird er in der Regel stabiler und zuverlässiger. Tests helfen dabei, Codefehler und -schwächen zu identifizieren und zu beseitigen.
Dazu gehört auch die Performance. Es ist wichtig zu wissen wenn deine App auf einmal doppelt so lange Ladezeiten hat. - Weniger Wartungsaufwand: Wenn du deinen Code regelmäßig testest, wird er in der Regel weniger Fehler enthalten. Das bedeutet, dass du weniger Zeit für die Wartung und Fehlerbehebung aufwenden musst.
- Bessere Zusammenarbeit: Tests helfen dabei, die Kommunikation zwischen Entwicklern zu verbessern. Sie stellen sicher, dass alle Entwickler auf dem gleichen Stand sind und dass der Code für alle verständlich ist.
3. Arten von Tests
Es gibt mehrere Arten von Software Testing, die du als Programmierer durchführen kannst. Eine kurze Übersicht hierzu:
- Unit-Tests: Unit-Tests testen einzelne Funktionen oder Methoden deines Codes. Sie sind sehr schnell und einfach durchzuführen und helfen dabei, Fehler in kleinen Codeabschnitten zu erkennen.
Um das Beispiel von oben aufzugreifen: Eine Funktion die die Versandkosten berechnet (ggf. auf Basis des Gewichts) wäre mit einem Unit-Test abzudecken. - Funktionale Tests: Funktionale Tests testen, ob dein Code die erwarteten Funktionen erfüllt. Das ist also die nächste Stufe nach den Unit-Test.
Sie simulieren die Interaktion mit der App/dem Programm, also z.B. das "in den Warenkorb legen" in einem Webshop kann mit einem funktionalen Test geprüft werden. - Integrationstests: Integrationstests testen, wie verschiedene Teile deines Codes miteinander interagieren. Sie helfen dabei, Fehler in der Kommunikation zwischen verschiedenen Code-Teilen zu identifizieren.
Das bietet sich vor allem für die Kommunikation zwischen Website/App und Datenbank an. Werden die richtigen Daten gesendet? Und werden diese im Frontend auch richtig dargestellt? - Akzeptanztests: Akzeptanztests testen, ob dein Code die Anforderungen erfüllt, die vom Kunden oder der Benutzerseite gestellt werden. Sie helfen dabei, sicherzustellen, dass dein Code den Anforderungen entspricht und dass er für den Benutzer funktionsfähig ist.
Das ist die letzte Stufe der Tests und deckt eine ganze "User story" ab. Also z.B. der gesamte Kaufprozess (Produkt finden, Warenkorb, Kasse, Zahlung) ist ein typischer Anwendungsfall hier.
4. Wie oft sollte man testen?
Das Testen deines Codes sollte regelmäßig und kontinuierlich erfolgen. Es ist ein wichtiger Bestandteil des Entwicklungsprozesses und sollte von Anfang an integriert werden.
Ein guter Ansatz ist das Test-driven development (TDD). Dabei schreibst du Tests, bevor du den Code schreibst. Das hilft dir, dich auf die Funktionalität des Codes zu konzentrieren und sicherzustellen, dass er die erwarteten Ergebnisse liefert.
Dafür muss man natürlich etwas umdenken. Das Ergebnis des Codes muss vorher klar definiert werden. Dann schreibst du einen Test der genau das prüft und erst danach, als letzten Schritt, wird die eigentliche Funktion geschrieben.
Es ist auch wichtig, Software Testing als regelmäßige Aufgabe zu haben. Insbesondere wenn du Änderungen vornimmst oder neue Funktionen hinzufügst. Dadurch stellst du sicher, dass dein Code auch nach den Änderungen noch einwandfrei funktioniert.
Hier gibt es viele Anbieter für CI/CD (Continous Integration/Continous Deployment) wie GitHub oder GitLab. Damit kann man Pipelines erstellen, also automatisierte Prozesse die dann bei jeder Änderung alle Tests starten. Nur wenn alle erfolgreich waren, wird die Code Änderung übernommen.
5. Best Practices beim Testen
Beim Software Testing gibt es einige bewährte Methoden, die du befolgen solltest, um sicherzustellen, dass du die bestmöglichen Ergebnisse erzielst:
Schreibe klare und verständliche Tests: Deine Tests sollten einfach zu verstehen und zu interpretieren sein. Dadurch wird es einfacher, Fehler zu erkennen und zu beheben. Das beginnt schon beim Namen. Die Testfunktion darf gerne einen langen Namen haben wenn dadurch klar wird was sie tut.
Automatisiere deine Tests: Automatisierte Tests sind schneller und zuverlässiger als manuelle Tests. Dadurch kannst du Zeit sparen und sicherstellen, dass dein Code regelmäßig und kontinuierlich getestet wird (s. "Wie oft sollte man testen?")
Teste verschiedene Szenarien: Stelle sicher, dass du verschiedene Szenarien testest, um sicherzustellen, dass dein Code unter allen Bedingungen funktioniert.
Verwende Mocks und Stubs: Mocks und Stubs sind Test Interfaces oder Dummy Daten. Mit diesen kannst du Tests schreiben, die unabhängig von externen Systemen sind. Dadurch kannst du sicherstellen, dass dein Code auch dann funktioniert, wenn externe Systeme nicht verfügbar sind.
6. Fazit
Insgesamt ist das Testen deines Codes ein wichtiger Bestandteil des Entwicklungsprozesses. Es hilft dabei, Probleme frühzeitig zu erkennen und zu beheben, die Code-Qualität zu verbessern und die Wartungskosten zu senken. Es gibt viele Arten von Tests, die du durchführen kannst, und es ist wichtig, das Testen kontinuierlich durchzuführen.
Indem du das Testen zu einem integralen Bestandteil deiner Entwicklungsroutine machst, kannst du sicherstellen, dass dein Code zuverlässig, stabil und fehlerfrei ist. Das kann dazu beitragen, dass du bessere und erfolgreichere Produkte entwickelst.