Testen von Softwaresystemen - Cheatsheet
Unterschiedliche Testarten (z.B. Unit-Tests, Integrationstests, Systemtests)
Definition:
Arten von Softwaretests zur Überprüfung unterschiedlicher Aspekte eines Softwaresystems.
Details:
- Unit-Tests: Testen einzelne Komponenten oder Funktionen in Isolation. Ziel: Sicherstellen, dass jede Komponente wie erwartet funktioniert.
- Integrationstests: Prüfen das Zusammenspiel mehrerer Komponenten. Ziel: Fehler bei der Interaktion von Modulen identifizieren.
- Systemtests: Überprüfen das gesamte System auf Anforderungen und Funktionalität. Ziel: Sicherstellen, dass das gesamte System korrekt arbeitet.
Äquivalenzklassen- und Grenzwertanalysen
Definition:
Äquivalenzklassen- und Grenzwertanalysen helfen, die Testfälle für Software zu reduzieren, indem sie Eingaben in Klassen einteilen und ihre Grenzwerte testen.
Details:
- Äquivalenzklassen: Eingaberaum wird in Klassen aufgeteilt, die als gleichwertig angesehen werden können.
- Grenzwertanalyse: Testen der Grenzen jeder Äquivalenzklasse (inklusive Rand- und Extremwerte).
- Formeln zur Äquivalenzklassenaufteilung: \[ \text{Äquivalenzklasse A} = \{x \mid \text{Bedingung1}(x) \} \]
- Vorteile: Reduziert Anzahl der Testfälle, deckt Fehler an den Rändern der Eingabebereiche.
Black-Box- und White-Box-Testing Methoden
Definition:
Black-Box- und White-Box-Testing Methoden sind Ansätze zur Untersuchung und Validierung von Software, wobei sie unterschiedliche Perspektiven und Techniken verwenden.
Details:
- Black-Box-Testen: Testen der Funktionalität ohne Kenntnis der internen Struktur oder des Codes.
- White-Box-Testen: Testen des internen Codes und der Struktur, basierend auf Kenntnis des Programms.
- Black-Box-Testtechniken: Äquivalenzklassenbildung, Grenzwertanalyse, Entscheidungstabellen.
- White-Box-Testtechniken: Kontrollflussanalyse, Pfadabdeckung, Schleifentests.
- Ziel von Black-Box: Überprüfung der Anforderungserfüllung und Benutzerperspektive.
- Ziel von White-Box: Überprüfung der internen Logik und Code-Fehler.
Best Practices für die Implementierung von Testskripten
Definition:
Best Practices für die Implementierung von Testskripten in der Vorlesung Testen von Softwaresystemen im Studiengang Informatik an der Universität Erlangen-Nürnberg.
Details:
- Modularität: Testskripte sollten in unabhängige, wiederverwendbare Module aufgeteilt werden.
- Lesbarkeit: Schreibe Testskripte klar und verständlich, nutze beschreibende Namen und Kommentare.
- Automatisierung: Nutze Frameworks und Tools zur Automatisierung der Tests, z.B. JUnit, Selenium.
- Konsistenz: Halte dich an einheitliche Kodierstandards und -richtlinien.
- Fehlerbehandlung: Implementiere robuste Fehler- und Ausnahmenbehandlung, um Testabbrüche zu vermeiden.
- Dokumentation: Führe geeignete Dokumentation der Tests und deren Ergebnisse.
- Wiederholbarkeit: Sorge dafür, dass Tests unter gleichen Bedingungen reproduzierbare Ergebnisse liefern.
- Umgebungsunabhängigkeit: Testskripte sollten nicht von spezifischen Umgebungen abhängig sein.
- Wartbarkeit: Stelle sicher, dass Testskripte leicht zu pflegen und zu aktualisieren sind.
- Isolierung: Testfälle sollten isoliert und unabhängig voneinander sein, um Seiteneffekte zu vermeiden.
Überblick über marktführende Testtools (z.B. Selenium, JUnit, TestNG)
Definition:
Kurzbeschreibung marktführender Testtools
Details:
- Selenium: Automatisierung von Webanwendungen für Testzwecke. Unterstützt mehrere Programmiersprachen (z.B. Java, C#, Python).
- JUnit: Framework für Unit-Tests von Java-Anwendungen. Nutzt Annotationen zur Definition von Testmethoden.
- TestNG: Erweiterbares Framework für Unit- und Integrationstests. Bietet erweiterte Features wie parallele Ausführung und Testkonfigurationen.
Kontinuierliches Testen in Agilem und DevOps
Definition:
Kontinuierliches Testen ist ein Prozess innerhalb der agilen und DevOps-Methoden, der sicherstellt, dass Software ständig getestet wird, um schnell Feedback zu erhalten und Probleme frühzeitig zu identifizieren.
Details:
- Integrierte Tests in CI/CD-Pipelines
- Automatisierte Tests (Unittests, Integrationstests, End-to-End-Tests)
- Fokus auf schnelle und häufige Feedback-Zyklen
- Nutzung von Testumgebungen, die die Produktionsumgebung nachbilden
- Tests als integraler Bestandteil des Entwicklungsprozesses
Metriken und Kennzahlen zur Qualitätssicherung
Definition:
Metriken und Kennzahlen helfen bei der Bewertung und Sicherstellung der Softwarequalität.
Details:
- Fehlerdichte (\texttt{Fault Density}): Anzahl der Fehler pro KLOC (\texttt{thousands of lines of code})
- Testabdeckung (\texttt{Test Coverage}): Prozentsatz des Codes, der durch Tests abgedeckt ist
- MTTF (\texttt{Mean Time To Failure}): Durchschnittliche Zeit bis zum Auftreten eines Fehlers
- MTTR (\texttt{Mean Time To Repair}): Durchschnittliche Zeit zur Behebung eines Fehlers
- Defektentdeckungsrate: Anz. der entdeckten Fehler pro Zeiteinheit
- Defektdichte: Anz. der Fehler pro Funktionseinheit oder Komponentengröße
- Reaktionszeit auf Vorfälle: Zeit von der Meldung eines Defekts bis zur ersten Reaktion
Fehlersuchstrategien und Fehlerbäumen
Definition:
Strategien zur Identifikation von Fehlern in Softwaresystemen, oft durch strukturierte Analyse und Visualisierung mit Fehlerbäumen.
Details:
- Fehlersuchstrategien: Systematische Ansätze zur Fehlersuche, z.B. Top-Down, Bottom-Up, Divide-and-Conquer.
- Fehlerbäume: Diagramme zur Darstellung von Fehlern und deren Ursachen in einem System.
- Ziel: Verständnis und Lokalisierung von Fehlern zur effizienten Behebung.
- Logische Verknüpfungen in Fehlerbäumen oft durch UND- bzw. ODER-Gatter dargestellt.
- Fehlerwahrscheinlichkeit durch Quantifizierung der Einzelereignisse im Baum berechenbar.