# SQ01B
> [name=Lucas. C]
> [time=Wed, Mar 23, 2023]
> [name=Lukas. B]
> [time=Wed, Mar 23, 2023]
> [name=Linus. S]
> [time=Wed, Mar 23, 2023][color=#fa52e4]
# 1. Systemanforderung
### 1.1 Grobanforderungen
| Anforderung | Anforderungsart | Wichtigkeit | Dringlichkeit |
| --------------------------------------------------------------- | ------------------------------- | ----------- | ------------- |
| Unterstützung von ReactJS-Framework | Technische Anforderung | Hoch | Hoch |
| Integration von Maven als Build-Management-Tool | Technische Anforderung | Hoch | Hoch |
| Kompatibilität mit aktuellen Web-Browsern | Funktionale Anforderung | Mittel | Hoch |
| Umsetzung von responsive Design für mobile Geräte | Funktionale Anforderung | Niedrig | Hoch |
|Applikationssicherheit | Nicht-funktionale Anforderung | Hoch | Mittel |
### 1.2 Systemübersicht
#### Funktionsbaum:
<div style="display:flex; justify-content:center;">
<img src="https://i.imgur.com/vS2GQb0.png">
</div>
### 1.3 Detailanforderungen
##### Funktionalen Anforderungen:
1. Erstellen von Lernsets
2. Hinzufügen von neuen Vokabeln
##### Qualitätsanforderungen:
1. Responsive Desing
2. Schnelle Reaktionszeiten
##### Anforderungen zur Systemarchitektur:
- Das ***Frontend*** der Webapplikation wird mit **ReactJS** erstellt, um dem Anwender eine **moderne** und **leicht** zu bedienende Oberfläche zu bieten. Die Anwendung greift auf eine **REST API** zu, um die Daten abzuholen und zu speichern. Das ***Backend*** der Webapplikation wird mit **Java Spring Boot** erstellt, um eine REST API bereitzustellen, die von ReactJS aufgerufen werden kann. Die Daten werden in einer **MySQL Datenbank** gespeichert.
# 2. Testkonzept
## 2.1 Testziele
#### Globale messbare Testziele über alle Testfälle hinweg
| Nr. | Beschreibung | Messgrösse | Priorität |
| --- | ------------------------------------------------------------- | ------------------------------------------------------------- | --------- |
| 1 | Schnittstellentests erfolgreich | REST-Datenaustausch korrekt | M |
| 2 | Öffnen und Laden eines bereits vorhandenen Lernsets | Datenbank ist vom Frontend aus zugänglich | M |
| 3 | Konsistenz der Ergebnisse | Übereinstimmung von Quizergebnissen zwischen verschiedenen Plattformen und Geräten | 1 |
| 4 | Sicherheit der App | Einhaltung von Sicherheitsstandards, Vermeidung von Schwachstellen und Schutz der Privatsphäre der Benutzer | 1 |
###### * Priorität: M = Muss, 1 = hoch, 2 = mittel, 3 = tief
## 2.2 Teststrategie und Teststufen
Für die Webapplikation soll eine Kombination aus **manuellen** und **automatisierten** Tests verwendet werden. Es werden sowohl **Komponententests**, als auch **Integrationstests** und **Systemtests** durchgeführt. Die Komponententests werden **hauptsächlich automatisiert** durchgeführt, während die Integrationstests und Systemtests **manuell** durchgeführt werden. Es werden auch explorative Tests durchgeführt, um mögliche Anwenderfehler aufzudecken.
### Teststufen:
- Komponententests:
- Automatisierte Tests für die React-Komponenten
- Automatisierte Tests für die Spring Boot-REST API
- Automatisierte Tests für die MySQL-Datenbankzugriffe
- Integrationstests:
- Manuelle Tests, um sicherzustellen, dass die React-Komponenten korrekt mit der REST API interagieren
- Manuelle Tests, um sicherzustellen, dass die REST API korrekt mit der MySQL-Datenbank interagiert
- Systemtests:
- Manuelle Tests, um sicherzustellen, dass die Anwendung in verschiedenen Browsern und auf verschiedenen Geräten korrekt funktioniert
- Manuelle Tests, um sicherzustellen, dass alle Funktionalitäten der Anwendung ordnungsgemäß funktionieren
- Explorative Tests:
- Manuelle Tests, um potenzielle Anwenderfehler und Schwachstellen aufzudecken.
## 3. Testobjekte
| Nr. | Objekt | Beschreibung |
| --- | ---------------- | --------------------------------------------------------------------------------------------------------------- |
| 1 | Frage-Objekt | Ein Frage-Objekt sollte alle Informationen enthalten, die für eine Quiz-Frage benötigt werden: die Frage selbst, die Antwortmöglichkeiten und die richtige Antwort. |
| 2 | Kategorie-Objekt | Ein Kategorie-Objekt kann verwendet werden, um Quiz-Fragen in verschiedene Kategorien zu unterteilen, z.B. Sport, Geschichte, Musik. |
## 4. Testarten
| Nr. | Testart | Beschreibung |
| --- | ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 1 | Funktions-Test | Der Test prüft, ob alle Links, Schaltflächen, Formulare und andere Elemente der Benutzeroberfläche funktionieren und ob die Anwendung die erwarteten Ergebnisse liefert. |
| 2 | Sicherheits-Test | Der Test prüft, ob die Anwendung anfällig für Angriffe wie SQL-Injection, Cross-Site Scripting (XSS) und andere Arten von Angriffen ist. |
## 5. Testabdeckung
| Testobjekt | Testfall | Abgedeckt |
| ----------------- | -------------------------------------------------------------- | --------- |
| Frage-Objekt | Testen, ob die Frage korrekt angezeigt wird | Ja |
| | Testen, ob alle Antwortmöglichkeiten angezeigt werden | Ja |
| | Testen, ob die richtige Antwort ausgewählt werden kann | Ja |
| | Testen, ob die richtige Antwort als korrekt markiert wird | Ja |
| Kategorie-Objekt | Testen, ob die Quiz-Fragen in die richtigen Kategorien eingeteilt werden | Ja |
| | Testen, ob die Kategorien korrekt angezeigt werden können | Ja |
#### Beurteilung Testziele und Testabdeckung:
Basierend auf der Testabdeckungstabelle sind alle Testfälle für die Testobjekte "Frage-Objekt" und "Kategorie-Objekt" abgedeckt. Die Testziele wurden somit erreicht.
## 7. Testumgebung
Die folgende Testumgebung wird für die Durchführung der Tests der Webapplikation mit React und Java Spring Boot empfohlen:
- Betriebssystem: Windows 10, Linux oder Android, ~~iOS~~
- Browser: Google Chrome, Mozilla Firefox, Microsoft Edge
- Testframeworks: Jest (für die automatisierten Komponententests), JUnit (für die automatisierten Backend-Tests), Selenium (für die manuellen Browser-Tests)
- Datenbank: MySQL
- Entwicklerwerkzeuge: Visual Studio Code, Eclipse oder IntelliJ IDEA
## 8. Testinfrastruktur
Die Testinfrastruktur umfasst ein getrenntes Testsystem, Testdaten und Testhilfsmittel. Ein geeignetes Testsystem könnte eine virtuelle Maschine oder ein Container sein. Die Testdaten sollten realistisch sein und alle möglichen Eingabe- und Randbedingungen abdecken. Für die Durchführung der Tests können verschiedene Testhilfsmittel wie Testmanagement-Tools, Testautomatisierungstools und Mocking-Frameworks verwendet werden. Es ist wichtig sicherzustellen, dass die Testinfrastruktur und Testhilfsmittel den Anforderungen der Anwendung und der Teststrategie entsprechen und gut dokumentiert sind, um Tests reproduzierbar und verständlich zu machen.
## 10. Testfallbeschreibungen
| Testfall | Anzeige der Quiz-Frage und Antwortmöglichkeiten |
| --- | --- |
| Testziel | Überprüfen, ob die Quiz-Frage und alle Antwortmöglichkeiten korrekt angezeigt werden. |
| Vorbedingungen | Die Webapplikation ist gestartet. Ein Quiz wurde ausgewählt. |
| Testablauf | 1. Navigieren Sie zu dem ausgewählten Quiz. 2. Überprüfen Sie, ob die Quiz-Frage korrekt angezeigt wird. 3. Überprüfen Sie, ob alle Antwortmöglichkeiten angezeigt werden. 4. Überprüfen Sie, ob die Antwortmöglichkeiten korrekt formatiert sind. |
| Erwartetes Ergebnis | Die Quiz-Frage und alle Antwortmöglichkeiten werden korrekt angezeigt und sind korrekt formatiert. |
| Testfall | Einreichen einer Quiz-Antwort |
| --- | --- |
| Testziel | Überprüfen, ob die eingereichte Quiz-Antwort korrekt verarbeitet wird. |
| Vorbedingungen | Die Webapplikation ist gestartet. Ein Quiz wurde ausgewählt. |
| Testablauf | 1. Navigieren Sie zu dem ausgewählten Quiz. 2. Wählen Sie eine Antwortmöglichkeit aus. 3. Reichen Sie die ausgewählte Antwort ein. 4. Überprüfen Sie, ob die eingereichte Antwort korrekt verarbeitet wurde. |
| Erwartetes Ergebnis | Die eingereichte Quiz-Antwort wird korrekt verarbeitet und das Ergebnis wird dem Benutzer angezeigt. |