Files
ihk-ausbildung/1-Ausbildungsjahr/LF5-Analyse-Design/LF5-04-Testverfahren.md

275 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 5.4 Testverfahren
## Softwaretests - Grundlagen
### Warum testen?
```
Testziele
├── Fehler finden
├── Qualität sichern
├── Vertrauen schaffen
├── Risiken minimieren
└── Dokumentation
```
### Testprinzipien
```
Grundsätze des Testens
├── Vollständig unmöglich → 100% Test nicht möglich
├── Frühzeitig → Tests von Anfang an
├── Defektclustering → Fehler häufen sich
├── Pestizid-Paradox → Tests wiederholen
├── Fehlerfreiheitsirrtum → Keine Fehler ≠ Qualität
└── Kontextabhängig → Projektabhängig
```
---
## Testarten
### Nach Sichtweise
| Testart | Beschreibung |
|---------|-------------|
| **White Box** | Inneres bekannt, strukturbasiert |
| **Black Box** | Inneres unbekannt, funktional |
| **Gray Box** | Teilweise bekannt |
### Nach Zeitpunkt
```
Testphasen
├── Statische Tests (vor Ausführung)
│ └── Code-Review, Analyse
└── Dynamische Tests (bei Ausführung)
└── Unit, Integration, System, Abnahme
```
---
## Teststufen
### Pyramide
```
Testpyramide
╱╲
╲ End-to-End (wenige)
╱────╲
╲ Integration (mittel)
╱────────╲
╲ Unit-Tests (viele)
╱────────────╲
```
### Unit Tests
> Test einzelner Funktionen/Klassen
```python
import unittest
class TestRechner(unittest.TestCase):
def test_addition(self):
ergebnis = addieren(2, 3)
self.assertEqual(ergebnis, 5)
def test_division_durch_null(self):
with self.assertRaises(ZeroDivisionError):
dividieren(10, 0)
if __name__ == '__main__':
unittest.main()
```
### Integrationstests
> Test der Zusammenarbeit von Komponenten
```
Integration - Strategien
├── Big Bang → Alles gleichzeitig
├── Top-Down → Oberste Ebene zuerst
├── Bottom-Up → Unterste Ebene zuerst
└── Sandwich → Beide Richtungen
```
### Systemtests
> Test des gesamten Systems
```
Systemtest - Prüfbereiche
├── Funktionale Anforderungen
├── Nicht-funktionale Anforderungen
├── Schnittstellen
├── Datenintegration
└── Performance
```
### Abnahmetests
> Test durch den Kunden
```
Abnahmetest - Arten
├── Alpha (beim Hersteller)
├── Beta (bei Anwendern)
└── Operational (im Echtbetrieb)
```
---
## Testmethoden
### Black-Box-Tests
```
Techniken
├── Äquivalenzklassen
├── Grenzwertanalyse
├── Entscheidungstabellen
├── Zustandsübergänge
└── Anwendungsfall-basiert
```
### Äquivalenzklassen
```
Beispiel: Alterseingabe (0-120)
Gültige Klasse: 0 bis 120
Ungültige Klassen: < 0, > 120
Testfälle:
- 25 (gültig)
- 0 (Grenzwert)
- 120 (Grenzwert)
- -1 (ungültig)
- 121 (ungültig)
```
### White-Box-Tests
```
Techniken
├── Anweisungsabdeckung
├── Zweigabdeckung
├── Pfadabdeckung
└── Bedingungsabdeckung
```
---
## Testmanagement
### Testplan
```markdown
# Testplan - [Projekt]
## 1. Testobjekt
[Was wird getestet]
## 2. Testumgebung
[System, Tools]
## 3. Testfälle
| ID | Beschreibung | Erwartung |
|----|--------------|-----------|
| T1 | Login gültig | Erfolg |
| T2 | Login ungültig | Fehler |
## 4. Zeitplan
[Termine]
## 5. Kriterien
[Abnahme]
```
### Testfall-Struktur
```
Testfall - Elemente
├── Testfall-ID
├── Titel/Beschreibung
├── Vorbedingungen
├── Testschritte
├── Erwartetes Ergebnis
├── Tatsächliches Ergebnis
├── Status (Pass/Fail)
└── Tester
```
---
## Testautomatisierung
### Werkzeuge
| Zweck | Tools |
|-------|-------|
| Unit Tests | JUnit (Java), pytest (Python), NUnit (.NET) |
| UI Tests | Selenium, Playwright, Cypress |
| API Tests | Postman, RestAssured |
| Lasttests | JMeter, k6 |
### Beispiel: pytest
```python
# test_calculator.py
import pytest
def test_addition():
assert add(2, 3) == 5
def test_subtraktion():
assert sub(5, 3) == 2
@pytest.mark.parametrize("a,b,expected", [
(1, 1, 2),
(0, 0, 0),
(-1, 1, 0),
])
def test_add_param(a, b, expected):
assert add(a, b) == expected
```
---
## Fehlermanagement
### Fehlerverfolgung
```
Fehlerlebenszyklus
Neu → Bestätigt → In Bearbeitung → Gelöst → Geschlossen
Abgelehnt
```
### Fehlerprioritäten
| Priorität | Beschreibung | Reaktionszeit |
|-----------|-------------|---------------|
| Kritisch | System nicht nutzbar | Sofort |
| Hoch | Wichtige Funktion | 24h |
| Mittel | Kleinere Probleme | 1 Woche |
| Niedrig | kosmetisch | Bei Zeit |
---
## Querverweise
- [[LF5-03-Programmierung|Zurück: Programmierung]]
- [[LF6-Webanwendungen|Nächstes Lernfeld: Webanwendungen]]
- [[Wissen/Wirtschafts-Sozialkunde/WISO-Zusammenfassung|WISO: Qualitätsmanagement]]
---
*Stand: 2024*