--- title: "Testprotokoll – Blackbox Test" author: "Chat App" date: "19.03.2026" geometry: margin=2cm fontsize: 11pt --- ## Projektinformationen | | | |---|---| | **Projekt** | Chat App | | **Datum** | 19.03.2026 | | **Tester** | _______________ | | **Version** | 1.0 | --- ## Testumgebung | | | |---|---| | **Browser** | Chrome / Firefox | | **URL** | http://localhost | | **Methode** | Manueller Blackbox Test | --- ## Beschreibung der Systemteile | Komponente | Technologie | Aufgabe | |---|---|---| | **Frontend** | React, Vite, Socket.IO Client, Nginx | Benutzeroberfläche für den Chat. Stellt Verbindung zum Backend über WebSocket her und zeigt Nachrichten, Teilnehmer und Verbindungsstatus an. | | **Backend** | Node.js, Express, Socket.IO | REST-API und WebSocket-Server. Verwaltet Benutzer-Sessions, Räume und leitet Nachrichten in Echtzeit weiter. | | **Datenbank** | MongoDB | Persistente Speicherung von Nachrichten und Benutzerdaten. Alternativ steht ein JSON-Fallback-Store zur Verfügung. | | **Infrastruktur** | Docker, Docker Compose, Nginx | Containerisierung aller Dienste. Nginx fungiert als Reverse Proxy für das Frontend. | --- ## Vorschläge zur Ausfallsicherheit **Frontend** - Automatischer Reconnect bei WebSocket-Verbindungsabbruch ist bereits implementiert (5 Versuche) - Statische Dateien über CDN ausliefern für höhere Verfügbarkeit **Backend** - Mehrere Instanzen hinter einem Load Balancer betreiben (z. B. Nginx upstream) - Bei mehreren Instanzen Socket.IO mit Redis Adapter koppeln, damit alle Instanzen dieselben Räume/Events teilen - Health-Check-Endpunkt `/health` ist bereits vorhanden und kann von einem Orchestrator (z. B. Kubernetes) genutzt werden **Datenbank** - MongoDB Replica Set einrichten: primärer Node schreibt, sekundäre Nodes lesen → bei Ausfall des primären Nodes übernimmt automatisch ein sekundärer - Regelmäßige automatische Backups des Volumes einrichten - JSON-Fallback-Store dient als Notlösung bei MongoDB-Ausfall (bereits implementiert) **Infrastruktur** - `restart: unless-stopped` ist in allen Docker-Diensten bereits konfiguriert → automatischer Neustart bei Absturz - Für Produktion: Docker Swarm oder Kubernetes für automatisches Failover und Skalierung --- ## Testfälle | Nr. | Beschreibung | Eingabe | Erwartetes Ergebnis | Tatsächliches Ergebnis | Status | |---|---|---|---|---|---| | T01 | Beitreten mit gültigem Benutzernamen und Raum | Username: `Max`, Room: `general` | Benutzer tritt dem Raum bei, Chatverlauf wird angezeigt | | [ ] | | T02 | Beitreten ohne Benutzernamen | Username: *(leer)*, Room: `general` | Fehlermeldung wird angezeigt, kein Beitritt | | [ ] | | T03 | Beitreten ohne Raumnamen | Username: `Max`, Room: *(leer)* | Fehlermeldung wird angezeigt, kein Beitritt | | [ ] | | T04 | Nachricht senden | Nachricht: `Hallo!` → Senden | Nachricht erscheint im Chat | | [ ] | | T05 | Leere Nachricht senden | Nachricht: *(leer)* → Senden | Nachricht wird nicht gesendet | | [ ] | | T06 | Zwei Benutzer im selben Raum | Tab 1: `Max` / `general`, Tab 2: `Anna` / `general` | Beide sehen Nachrichten des jeweils anderen in Echtzeit | | [ ] | | T07 | Benutzer in verschiedenen Räumen | Tab 1: `Max` / `general`, Tab 2: `Anna` / `privat` | Nachrichten sind voneinander getrennt | | [ ] | | T08 | Teilnehmerliste aktualisiert sich | Tab 2 schließen | Tab 1 zeigt Benutzer als offline/entfernt | | [ ] | | T09 | Chatverlauf nach Neuverbindung | Seite neu laden, wieder einloggen | Vorherige Nachrichten werden geladen | | [ ] | | T10 | Sonderzeichen in Nachricht | Nachricht: `` | Text wird als plain text angezeigt, kein Script ausgeführt | | [ ] | | T11 | Langer Text | Nachricht mit 500 Zeichen | Nachricht vollständig angezeigt, kein Layout-Fehler | | [ ] | | T12 | Backend nicht erreichbar | Backend stoppen, App öffnen | Fehlermeldung oder Reconnect-Versuch wird angezeigt | | [ ] | --- ## Legende | Symbol | Bedeutung | |---|---| | [OK] | Bestanden | | [X] | Fehlgeschlagen | | [ ] | Nicht getestet | --- ## Gesamtergebnis | Gesamt | Bestanden | Fehlgeschlagen | Nicht getestet | |---|---|---|---| | 12 | | | | --- ## Bemerkungen \vspace{1cm} _______________________________________________ \vspace{1cm} _______________________________________________