Initial commit: IHK Ausbildung materials
This commit is contained in:
274
1-Ausbildungsjahr/LF5-Analyse-Design/LF5-04-Testverfahren.md
Normal file
274
1-Ausbildungsjahr/LF5-Analyse-Design/LF5-04-Testverfahren.md
Normal file
@@ -0,0 +1,274 @@
|
||||
# 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*
|
||||
Reference in New Issue
Block a user