Initial commit: IHK Ausbildung materials

This commit is contained in:
2026-03-13 11:46:08 +01:00
commit eb4a13ef7c
67 changed files with 11361 additions and 0 deletions

View 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*

View File

@@ -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*

View File

@@ -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*

View 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*

View 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*