Initial commit: IHK Ausbildung materials
This commit is contained in:
45
1-Ausbildungsjahr/LF5-Analyse-Design/LF5-00-Übersicht.md
Normal file
45
1-Ausbildungsjahr/LF5-Analyse-Design/LF5-00-Übersicht.md
Normal file
@@ -0,0 +1,45 @@
|
||||
# Lernfeld 5: Softwareentwicklung analysieren und planen
|
||||
|
||||
## Übersicht
|
||||
|
||||
Dieses Lernfeld behandelt die Analyse und Planung von Softwareprojekten.
|
||||
|
||||
## Themen
|
||||
|
||||
| Nr. | Thema | Beschreibung |
|
||||
|-----|-------|-------------|
|
||||
| 5.1 | [[LF5-01-Anforderungsanalyse|Anforderungsanalyse]] | Anforderungen erheben und dokumentieren |
|
||||
| 5.2 | [[LF5-02-Softwaremodellierung|Softwaremodellierung]] | UML, Struktogramme, Flussdiagramme |
|
||||
| 5.3 | [[LF5-03-Programmierung|Programmierung]] | Algorithmen, Datenstrukturen |
|
||||
| 5.4 | [[LF5-04-Testverfahren|Testverfahren]] | Unit Tests, Integrationstests |
|
||||
|
||||
## Lernziele
|
||||
|
||||
- Anforderungen analysieren und dokumentieren
|
||||
- Softwaremodelle erstellen
|
||||
- Algorithmen entwickeln
|
||||
- Tests planen und durchführen
|
||||
|
||||
## Voraussetzungen
|
||||
|
||||
- LF1: Unternehmen und Rolle
|
||||
- LF2: Arbeitsplätze ausstatten
|
||||
- LF3: Datenbanken entwickeln
|
||||
- LF4: IT-Sicherheit
|
||||
|
||||
## Prüfungsrelevanz
|
||||
|
||||
- Teil 1 Abschlussprüfung (schriftlich)
|
||||
- Teil 2 Abschlussprüfung (praktisch)
|
||||
|
||||
---
|
||||
|
||||
## Querverweise
|
||||
|
||||
- [[LF4-04-Datenschutz|Zurück: Datenschutz (DSGVO)]]
|
||||
- [[LF6-Webanwendungen|Nächstes Lernfeld: Webanwendungen entwickeln]]
|
||||
- [[Wissen/Wirtschafts-Sozialkunde/WISO-Zusammenfassung|WISO: Projektmanagement]]
|
||||
|
||||
---
|
||||
|
||||
*Stand: 2024*
|
||||
@@ -0,0 +1,220 @@
|
||||
# 5.1 Anforderungsanalyse
|
||||
|
||||
## Anforderungsmanagement
|
||||
|
||||
### Was sind Anforderungen?
|
||||
|
||||
```
|
||||
Anforderungen - Definition
|
||||
Anforderung = Bedürfnis oder Erwartung eines Stakeholders
|
||||
```
|
||||
|
||||
### Arten von Anforderungen
|
||||
|
||||
```
|
||||
Anforderungstypen
|
||||
├── Funktionale Anforderungen
|
||||
│ └── Was das System tun muss
|
||||
└── Nicht-funktionale Anforderungen
|
||||
└── Qualitätsanforderungen (Performance, Sicherheit, etc.)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Funktionale Anforderungen
|
||||
|
||||
### Beispiele
|
||||
|
||||
| Anforderung | Beschreibung |
|
||||
|-------------|-------------|
|
||||
| F01 | Das System muss Benutzer anmelden können |
|
||||
| F02 | Das System muss Daten speichern können |
|
||||
| F03 | Das System muss Berichte erstellen können |
|
||||
|
||||
### Anforderungskategorien
|
||||
|
||||
```
|
||||
Funktionale Anforderungen
|
||||
├── Geschäftsregeln
|
||||
├── Schnittstellen
|
||||
├── Datenverarbeitung
|
||||
├── Reporting
|
||||
└── Administrationsfunktionen
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Nicht-funktionale Anforderungen
|
||||
|
||||
### Kategorien
|
||||
|
||||
| Kategorie | Beschreibung | Beispiele |
|
||||
|-----------|-------------|----------|
|
||||
| **Performance** | Geschwindigkeit | < 2 Sek. Ladezeit |
|
||||
| **Skalierbarkeit** | Wachstum | 1000 Benutzer |
|
||||
| **Verfügbarkeit** | Laufzeit | 99,9% |
|
||||
| **Sicherheit** | Schutz | TLS-Verschlüsselung |
|
||||
| **Benutzerfreundlichkeit** | Bedienung | Intuitiv |
|
||||
| **Wartbarkeit** | Änderungen | Modulare Struktur |
|
||||
| **Kompatibilität** | Plattformen | Windows, macOS, Linux |
|
||||
|
||||
---
|
||||
|
||||
## Anforderungen erheben
|
||||
|
||||
### Methoden
|
||||
|
||||
```
|
||||
Erhebungsmethoden
|
||||
├── Interviews
|
||||
├── Workshops
|
||||
├── Beobachtung
|
||||
├── Dokumentenanalyse
|
||||
├── Fragebögen
|
||||
└── Prototyping
|
||||
```
|
||||
|
||||
### Interview-Leitfaden
|
||||
|
||||
```
|
||||
Interview-Vorbereitung
|
||||
├── Ziele definieren
|
||||
├── Fragen vorbereiten
|
||||
├── Teilnehmer auswählen
|
||||
├── Zeitrahmen planen
|
||||
└── Dokumentation vorbereiten
|
||||
```
|
||||
|
||||
### Fragetechniken
|
||||
|
||||
| Fragetyp | Beispiel | Zweck |
|
||||
|----------|---------|-------|
|
||||
| Offen | "Wie arbeiten Sie heute?" | Verständnis |
|
||||
| Geschlossen | "Welches System nutzen Sie?" | Fakten |
|
||||
| Zurückfragend | "Warum ist das wichtig?" | Tiefe |
|
||||
| Hypothetisch | "Was würde passieren, wenn...?" | Szenarien |
|
||||
|
||||
---
|
||||
|
||||
## Anforderungen dokumentieren
|
||||
|
||||
### Lastenheft (Requirements Specification)
|
||||
|
||||
```markdown
|
||||
# Lastenheft - Projekt [Name]
|
||||
|
||||
## 1. Zielsetzung
|
||||
[Beschreibung des Projekts]
|
||||
|
||||
## 2. Funktionale Anforderungen
|
||||
- F01: [Beschreibung]
|
||||
- F02: [Beschreibung]
|
||||
|
||||
## 3. Nicht-funktionale Anforderungen
|
||||
- NF01: [Beschreibung]
|
||||
- NF02: [Beschreibung]
|
||||
|
||||
## 4. Schnittstellen
|
||||
- [Externe Systeme]
|
||||
|
||||
## 5. Abnahmekriterien
|
||||
- [Testfälle]
|
||||
```
|
||||
|
||||
### User Stories
|
||||
|
||||
```
|
||||
User Story - Format
|
||||
Als [Rolle] möchte ich [Ziel], um [Nutzen].
|
||||
|
||||
Beispiel:
|
||||
Als Kunde möchte ich mein Passwort zurücksetzen,
|
||||
um wieder Zugriff auf mein Konto zu haben.
|
||||
```
|
||||
|
||||
### User Story - Akzeptanzkriterien
|
||||
|
||||
```markdown
|
||||
User Story: Passwort zurücksetzen
|
||||
|
||||
Akzeptanzkriterien:
|
||||
- [ ] E-Mail-Adresse wird validiert
|
||||
- [ ] Link ist 24 Stunden gültig
|
||||
- [ ] Neues Passwort muss Mindestlänge haben
|
||||
- [ ] Bestätigungs-E-Mail wird gesendet
|
||||
- [ ] Nach Reset ist Login möglich
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Anforderungen priorisieren
|
||||
|
||||
### Priorisierungsmethoden
|
||||
|
||||
```
|
||||
Priorisierungs-Methoden
|
||||
├── MoSCoW-Methode
|
||||
├── Kano-Modell
|
||||
├── WSJF (Weighted Shortest Job First)
|
||||
└── Stack Ranking
|
||||
```
|
||||
|
||||
### MoSCoW-Methode
|
||||
|
||||
| Priorität | Bedeutung | Beispiel |
|
||||
|-----------|-----------|----------|
|
||||
| **Must have** | Unbedingt erforderlich | Login |
|
||||
| **Should have** | Sehr wichtig | Passwort vergessen |
|
||||
| **Could have** | Wünschenswert | Dark Mode |
|
||||
| **Won't have** | Dieses Release nicht | Export PDF |
|
||||
|
||||
---
|
||||
|
||||
## Anforderungen validieren
|
||||
|
||||
### Prüfkriterien
|
||||
|
||||
```
|
||||
Anforderungsprüfung - Checkliste
|
||||
├── Vollständig?
|
||||
├── Konsistent?
|
||||
├── Realisierbar?
|
||||
├── Testbar?
|
||||
├── Verständlich?
|
||||
└── Abgestimmt?
|
||||
```
|
||||
|
||||
### Review-Prozess
|
||||
|
||||
```
|
||||
Anforderungsreview
|
||||
├── Peer-Review
|
||||
├── Stakeholder-Abnahme
|
||||
├── Änderungsmanagement
|
||||
└── Versionierung
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Werkzeuge
|
||||
|
||||
### Anforderungsmanagement-Tools
|
||||
|
||||
| Tool | Typ | Einsatz |
|
||||
|------|-----|---------|
|
||||
| Jira | Professionell | Große Projekte |
|
||||
| Azure DevOps | Professionell | Microsoft-Umgebung |
|
||||
| YouTrack | Professionell | Flexible Projekte |
|
||||
| Trello | Einfach | Kanban-Boards |
|
||||
| Markdown | Einfach | Dokumentation |
|
||||
|
||||
---
|
||||
|
||||
## Querverweise
|
||||
|
||||
- [[LF5-02-Softwaremodellierung|Nächstes Thema: Softwaremodellierung]]
|
||||
- [[LF2-01-Kundenanforderungen|Kundengespräch]]
|
||||
|
||||
---
|
||||
|
||||
*Stand: 2024*
|
||||
@@ -0,0 +1,335 @@
|
||||
# 5.2 Softwaremodellierung
|
||||
|
||||
## Modellierungssprachen
|
||||
|
||||
### Übersicht
|
||||
|
||||
```
|
||||
Modellierung - Sprachen
|
||||
├── UML (Unified Modeling Language)
|
||||
├── Struktogramme (Nassi-Shneiderman)
|
||||
├── Flussdiagramme (Flowcharts)
|
||||
├── Entity-Relationship (ER)
|
||||
└── Aktivitätsdiagramme
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## UML - Unified Modeling Language
|
||||
|
||||
### UML-Diagrammtypen
|
||||
|
||||
```
|
||||
UML 2.5 - Diagrammübersicht
|
||||
├── Strukturdiagramme
|
||||
│ ├── Klassendiagramm
|
||||
│ ├── Objektdiagramm
|
||||
│ ├── Komponentendiagramm
|
||||
│ ├── Verteilungsdiagramm
|
||||
│ └── Paketdiagramm
|
||||
└── Verhaltensdiagramme
|
||||
├── Anwendungsfalldiagramm
|
||||
├── Aktivitätsdiagramm
|
||||
├── Zustandsdiagramm
|
||||
└── Sequenzdiagramm
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Klassendiagramm
|
||||
|
||||
### Elemente
|
||||
|
||||
```
|
||||
Klassendiagramm - Symbole
|
||||
┌─────────────────────────┐
|
||||
│ Klassenname │
|
||||
├─────────────────────────┤
|
||||
│ - attribut: Typ │ ← Eigenschaften
|
||||
├─────────────────────────┤
|
||||
│ + methode(): Rückgabetyp│ ← Methoden
|
||||
└─────────────────────────┘
|
||||
|
||||
Sichtbarkeit:
|
||||
+ public (öffentlich)
|
||||
- private (privat)
|
||||
# protected (geschützt)
|
||||
~ package (Paket)
|
||||
```
|
||||
|
||||
### Beziehungen
|
||||
|
||||
```
|
||||
Beziehungsarten
|
||||
├── Assoziation ───────
|
||||
├── Aggregation ◇─────── (hat ein, kann auch ohne existieren)
|
||||
├── Komposition ◆────── (hat ein, existiert nicht ohne)
|
||||
├── Vererbung △───────
|
||||
└── Implementierung ▷───
|
||||
```
|
||||
|
||||
### Beispiel
|
||||
|
||||
```
|
||||
┌─────────────┐ ┌─────────────┐
|
||||
│ Kunde │ 1 * │ Bestellung │
|
||||
├─────────────┤─────────│─────────────┤
|
||||
│ -name │* │ -datum │
|
||||
│ -adresse │ │ -status │
|
||||
├─────────────┤ ├─────────────┤
|
||||
│ +bestellen()│ │ +erstellen()│
|
||||
└─────────────┘ └─────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Anwendungsfalldiagramm (Use Case)
|
||||
|
||||
### Elemente
|
||||
|
||||
```
|
||||
Anwendungsfall-Diagramm
|
||||
┌─────────────┐
|
||||
│ Akteur │
|
||||
└──────┬──────┘
|
||||
│
|
||||
│ (Verbindung)
|
||||
▼
|
||||
┌─────────────────┐
|
||||
│ Anwendungsfall │
|
||||
└─────────────────┘
|
||||
```
|
||||
|
||||
### Beispiel
|
||||
|
||||
```
|
||||
┌────────┐
|
||||
│ Kunde │
|
||||
└────┬───┘
|
||||
│
|
||||
┌────┴────┐
|
||||
│ │
|
||||
▼ ▼
|
||||
┌─────────┐ ┌─────────────────┐
|
||||
│ Suchen │ │ Bestellen │
|
||||
└─────────┘ └─────────────────┘
|
||||
│
|
||||
┌───┴───┐
|
||||
│ │
|
||||
▼ ▼
|
||||
┌────────┐ ┌──────────┐
|
||||
│ Bezahlen│ │ Zurückgeben│
|
||||
└────────┘ └──────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Aktivitätsdiagramm
|
||||
|
||||
### Elemente
|
||||
|
||||
```
|
||||
Aktivitätsdiagramm - Symbole
|
||||
┌─────────┐ ◇──────►
|
||||
│ Start │ (Objekt)
|
||||
└─────────┘
|
||||
|
||||
▭ Entscheidung ▢ Parallel
|
||||
|
||||
┌─────────┐ ╱ ╲
|
||||
│ Aktion │ ╱ Merge ╲
|
||||
└─────────┘ ╲ ╱
|
||||
|
||||
┌─────────┐
|
||||
│ Ende │
|
||||
└─────────┘
|
||||
```
|
||||
|
||||
### Beispiel
|
||||
|
||||
```
|
||||
▭
|
||||
▼
|
||||
┌───────────┐
|
||||
│ Bestellung │
|
||||
│ starten │
|
||||
└─────┬─────┘
|
||||
│
|
||||
▼
|
||||
┌───────────┐
|
||||
│ Ware │
|
||||
│ verfügbar?│
|
||||
└─────┬─────┘
|
||||
│
|
||||
╱ ╲
|
||||
Ja Nein
|
||||
╲ ╱
|
||||
▼ ▼
|
||||
┌────────┐ ┌──────────┐
|
||||
│Liefern │ │Benachrich-│
|
||||
│ │ │tigen │
|
||||
└───┬────┘ └────┬─────┘
|
||||
│ │
|
||||
└─────┬─────┘
|
||||
▼
|
||||
┌────────┐
|
||||
│ Ende │
|
||||
└────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Sequenzdiagramm
|
||||
|
||||
### Elemente
|
||||
|
||||
```
|
||||
Sequenzdiagramm - Elemente
|
||||
┌──────┐ ┌──────┐
|
||||
│ Actor│ │ System│
|
||||
└──┬───┘ └──┬───┘
|
||||
│ │
|
||||
│ Nachricht ──►
|
||||
│ │
|
||||
│ ◄─────── Rückmeldung
|
||||
│ │
|
||||
```
|
||||
|
||||
### Beispiel
|
||||
|
||||
```
|
||||
┌────────┐ ┌────────┐ ┌────────┐
|
||||
│ Client │ │ Server │ │ Daten- │
|
||||
│ │ │ │ │ bank │
|
||||
└───┬────┘ └───┬────┘ └───┬────┘
|
||||
│ │ │
|
||||
│──Login()───►│ │
|
||||
│ │──Query()───►│
|
||||
│ │◄─────────── │
|
||||
│◄─────────── │ │
|
||||
│ │ │
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Struktogramme (Nassi-Shneiderman)
|
||||
|
||||
### Grundelemente
|
||||
|
||||
```
|
||||
Struktogramme
|
||||
┌──────────────────┐
|
||||
│ Anweisung │ ← einfache Anweisung
|
||||
└──────────────────┘
|
||||
|
||||
┌──────────────────┐
|
||||
│ Verzweigung │
|
||||
│ │
|
||||
│ Wenn Bedingung │
|
||||
│ dann Anweisung │
|
||||
│ sonst Anweisung│
|
||||
└──────────────────┘
|
||||
|
||||
┌──────────────────┐
|
||||
│ Schleife │
|
||||
│ │
|
||||
│ solange Bed. │
|
||||
│ Anweisung │
|
||||
└──────────────────┘
|
||||
```
|
||||
|
||||
### Beispiel
|
||||
|
||||
```
|
||||
┌──────────────────────────────────────┐
|
||||
│ Eingegebene Zahl ist negativ? │
|
||||
├──────────────────────────────────────┤
|
||||
│ JA NEIN │
|
||||
│ │ │ │
|
||||
│ ┌─────┴─────┐ ┌────┴────┐ │
|
||||
│ │ "Zahl ist │ │ "Zahl │ │
|
||||
│ │ negativ" │ │ ist pos.│ │
|
||||
│ └───────────┘ └─────────┘ │
|
||||
└──────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Flussdiagramme (Flowchart)
|
||||
|
||||
### Symbole
|
||||
|
||||
```
|
||||
Flussdiagramm - Symbole
|
||||
┌─────────┐
|
||||
│ Oval │ → Start/Ende
|
||||
└─────────┘
|
||||
|
||||
┌─────────┐
|
||||
│ Rechteck│ → Aktion/Prozess
|
||||
└─────────┘
|
||||
|
||||
┌────┐
|
||||
│Raute│ → Entscheidung
|
||||
└────┘
|
||||
|
||||
→ → Verbindungslinie
|
||||
```
|
||||
|
||||
### Beispiel
|
||||
|
||||
```
|
||||
┌───────┐
|
||||
│ Start │
|
||||
└───┬───┘
|
||||
│
|
||||
▼
|
||||
┌────────┐
|
||||
│ Zahl │
|
||||
│ einlesen│
|
||||
└───┬────┘
|
||||
│
|
||||
▼
|
||||
┌───────────┐
|
||||
│negativ? │
|
||||
└─────┬─────┘
|
||||
╱ ╲
|
||||
Ja Nein
|
||||
╲ ╱
|
||||
▼ ▼
|
||||
┌─────────┐ ┌─────────┐
|
||||
│ negativ │ │ positiv │
|
||||
└────┬────┘ └────┬────┘
|
||||
│ │
|
||||
└─────┬──────┘
|
||||
▼
|
||||
┌───────┐
|
||||
│ Ende │
|
||||
└───────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Werkzeuge
|
||||
|
||||
### Modellierungs-Tools
|
||||
|
||||
| Tool | Typ | Plattform |
|
||||
|------|-----|----------|
|
||||
| PlantUML | Text-basiert | Alle |
|
||||
| Mermaid | Text-basiert | Alle |
|
||||
| draw.io | Visuell | Web |
|
||||
| Lucidchart | Professionell | Web |
|
||||
| Enterprise Architect | Professionell | Windows |
|
||||
| Visual Paradigm | Professionell | Alle |
|
||||
|
||||
---
|
||||
|
||||
## Querverweise
|
||||
|
||||
- [[LF5-01-Anforderungsanalyse|Zurück: Anforderungsanalyse]]
|
||||
- [[LF5-03-Programmierung|Nächstes Thema: Programmierung]]
|
||||
|
||||
---
|
||||
|
||||
*Stand: 2024*
|
||||
302
1-Ausbildungsjahr/LF5-Analyse-Design/LF5-03-Programmierung.md
Normal file
302
1-Ausbildungsjahr/LF5-Analyse-Design/LF5-03-Programmierung.md
Normal file
@@ -0,0 +1,302 @@
|
||||
# 5.3 Programmierung
|
||||
|
||||
## Algorithmen
|
||||
|
||||
### Was ist ein Algorithmus?
|
||||
|
||||
> Ein **Algorithmus** ist eine endliche Folge von eindeutigen Anweisungen zur Lösung eines Problems.
|
||||
|
||||
### Eigenschaften
|
||||
|
||||
```
|
||||
Algorithmus-Eigenschaften
|
||||
├── Endlichkeit → Endlich viele Schritte
|
||||
├── Eindeutigkeit → Jeder Schritt klar definiert
|
||||
├── Ausführbarkeit → Jeder Schritt ausführbar
|
||||
├── Terminiertheit → Algorithmus endet
|
||||
└── Korrektheit → Liefert richtiges Ergebnis
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Grundlegende Programmstrukturen
|
||||
|
||||
### Sequenz
|
||||
|
||||
```
|
||||
Anweisungen werden nacheinander ausgeführt
|
||||
|
||||
Schritt 1
|
||||
↓
|
||||
Schritt 2
|
||||
↓
|
||||
Schritt 3
|
||||
```
|
||||
|
||||
### Selektion (Verzweigung)
|
||||
|
||||
```
|
||||
Wenn-Dann-Sonst
|
||||
|
||||
┌───────────────┐
|
||||
│ Bed. erfüllt? │
|
||||
└───────┬───────┘
|
||||
╱ ╲
|
||||
Ja Nein
|
||||
╲ ╱
|
||||
▼ ▼
|
||||
┌────────┐ ┌────────┐
|
||||
│ Block A│ │ Block B│
|
||||
└────────┘ └────────┘
|
||||
```
|
||||
|
||||
### Iteration (Schleife)
|
||||
|
||||
```
|
||||
Wiederholung
|
||||
|
||||
┌───────────────┐
|
||||
│ Bedingung │
|
||||
└───────┬───────┘
|
||||
╱ ╲
|
||||
wahr falsch
|
||||
╲ ╱
|
||||
▼ ▼
|
||||
┌─────────┐ ┌──────┐
|
||||
│ Block │──►│ Ende │
|
||||
│ ausführen│ └──────┘
|
||||
└─────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Datenstrukturen
|
||||
|
||||
### Grundlegende Datentypen
|
||||
|
||||
| Typ | Beispiel | Speicher |
|
||||
|-----|----------|----------|
|
||||
| Integer | 42 | 4 Byte |
|
||||
| Float | 3.14 | 8 Byte |
|
||||
| Boolean | true/false | 1 Byte |
|
||||
| Char | 'A' | 1 Byte |
|
||||
| String | "Hallo" | variabel |
|
||||
|
||||
### Arrays
|
||||
|
||||
```
|
||||
Array - eindimensional
|
||||
[0] [1] [2] [3] [4]
|
||||
10 20 30 40 50
|
||||
|
||||
Zugriff: array[2] → 30
|
||||
```
|
||||
|
||||
### Listen
|
||||
|
||||
```
|
||||
Liste - dynamisch
|
||||
Liste<String> namen = ["Max", "Anna", "Peter"]
|
||||
|
||||
Operationen:
|
||||
- add(Element) → Hinzufügen
|
||||
- remove(Index) → Entfernen
|
||||
- get(Index) → Abrufen
|
||||
- size() → Größe
|
||||
```
|
||||
|
||||
### Schlüssel-Wert-Paare (Dictionary/Map)
|
||||
|
||||
```
|
||||
Map - Schlüssel-Wert
|
||||
{
|
||||
"Name": "Max",
|
||||
"Alter": 25,
|
||||
"Stadt": "Berlin"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Algorithmen
|
||||
|
||||
### Suchen
|
||||
|
||||
#### Lineare Suche
|
||||
|
||||
```
|
||||
Suche in ungeordneter Liste
|
||||
Schleife durch alle Elemente
|
||||
→ O(n) Zeitkomplexität
|
||||
```
|
||||
|
||||
#### Binäre Suche
|
||||
|
||||
```
|
||||
Suche in sortierter Liste
|
||||
Teile und Herrsche
|
||||
→ O(log n) Zeitkomplexität
|
||||
```
|
||||
|
||||
### Sortieren
|
||||
|
||||
#### Bubble Sort
|
||||
|
||||
```
|
||||
Vergleiche benachbarte Elemente
|
||||
Tausche wenn in falscher Reihenfolge
|
||||
|
||||
Beispiel:
|
||||
[5, 3, 8, 1] → [3, 5, 1, 8] → [3, 1, 5, 8] → ...
|
||||
|
||||
→ O(n²) Zeitkomplexität
|
||||
```
|
||||
|
||||
#### Quick Sort
|
||||
|
||||
```
|
||||
Pivot-Element wählen
|
||||
Kleine links, große rechts
|
||||
Rekursiv wiederholen
|
||||
|
||||
→ O(n log n) Durchschnitt
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Komplexität
|
||||
|
||||
### Big O Notation
|
||||
|
||||
| Notation | Name | Beispiel |
|
||||
|----------|------|----------|
|
||||
| O(1) | Konstant | Array-Zugriff |
|
||||
| O(log n) | Logarithmisch | Binäre Suche |
|
||||
| O(n) | Linear | Lineare Suche |
|
||||
| O(n log n) | Linearithmisch | Quick Sort |
|
||||
| O(n²) | Quadratisch | Bubble Sort |
|
||||
| O(2^n) | Exponentiell | Brute Force |
|
||||
|
||||
---
|
||||
|
||||
## Programmiersprachen
|
||||
|
||||
### Übersicht
|
||||
|
||||
| Sprache | Typ | Einsatz |
|
||||
|---------|-----|----------|
|
||||
| **Python** | Interpretiert | Data Science, Web |
|
||||
| **Java** | Kompiliert | Enterprise |
|
||||
| **JavaScript** | Interpretiert | Web, Frontend |
|
||||
| **C#** | Kompiliert | Windows, .NET |
|
||||
| **C/C++** | Kompiliert | Systemnah |
|
||||
|
||||
### Sprachkonzepte
|
||||
|
||||
```
|
||||
Programmierparadigmen
|
||||
├── Imperativ → Anweisungen
|
||||
├── Prozedural → Funktionen
|
||||
├── Objektorientiert → Klassen/Objekte
|
||||
├── Funktional → Funktionen ohne Zustand
|
||||
└── Logisch → Regeln und Fakten
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Objektorientierte Programmierung (OOP)
|
||||
|
||||
### Grundkonzepte
|
||||
|
||||
```
|
||||
OOP - Prinzipien
|
||||
├── Kapselung (Encapsulation)
|
||||
├── Vererbung (Inheritance)
|
||||
├── Polymorphie
|
||||
└── Abstraktion
|
||||
```
|
||||
|
||||
### Klasse und Objekt
|
||||
|
||||
```python
|
||||
# Klasse (Bauplan)
|
||||
class Auto:
|
||||
# Konstruktor
|
||||
def __init__(self, marke, farbe):
|
||||
self.marke = marke
|
||||
self.farbe = farbe
|
||||
self.geschwindigkeit = 0
|
||||
|
||||
# Methode
|
||||
def beschleunigen(self, wert):
|
||||
self.geschwindigkeit += wert
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.marke}, {self.farbe}"
|
||||
|
||||
# Objekt (Instanz)
|
||||
mein_auto = Auto("BMW", "rot")
|
||||
mein_auto.beschleunigen(50)
|
||||
```
|
||||
|
||||
### Vererbung
|
||||
|
||||
```python
|
||||
class Tier:
|
||||
def __init__(self, name):
|
||||
self.name = name
|
||||
|
||||
def essen(self):
|
||||
print("Tier isst")
|
||||
|
||||
class Hund(Tier): # Vererbung
|
||||
def bellen(self):
|
||||
print("Wuff!")
|
||||
|
||||
hund = Hund("Bello")
|
||||
hund.essen() # Von Tier geerbt
|
||||
hund.bellen() # Eigene Methode
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Qualitätskriterien
|
||||
|
||||
### Clean Code Prinzipien
|
||||
|
||||
```
|
||||
Gute Software
|
||||
├── Lesbarkeit → Gut verständlich
|
||||
├── Wartbarkeit → Einfach zu ändern
|
||||
├── Effizienz → Schnell genug
|
||||
├── Zuverlässigkeit → Keine Fehler
|
||||
└── Sicherheit → Vor Angriffen geschützt
|
||||
```
|
||||
|
||||
### Namenskonventionen
|
||||
|
||||
```
|
||||
Variablen: camelCase
|
||||
meinName = "Max"
|
||||
|
||||
Konstanten: UPPER_CASE
|
||||
MAX_ALTER = 100
|
||||
|
||||
Funktionen: camelCase
|
||||
def holeDaten():
|
||||
|
||||
Klassen: PascalCase
|
||||
class Benutzer:
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Querverweise
|
||||
|
||||
- [[LF5-02-Softwaremodellierung|Zurück: Softwaremodellierung]]
|
||||
- [[LF5-04-Testverfahren|Nächstes Thema: Testverfahren]]
|
||||
- [[LF4-01-Gefahren-Analyse|Sicherheit: Sichere Programmierung]]
|
||||
|
||||
---
|
||||
|
||||
*Stand: 2024*
|
||||
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