### Softwaretesting

---
### Agenda
- Ziel von Softwaretests
- euer Unternehmen
- Testmethoden:
- Blackbox-Test
- Whitebox-Test
- Testlevel:
- Unit-Tests
- Integrationstest
- Systemtests
- Akzeptanztests
- Wie funktioniert Unit Testing?
---
### Ziele von Softwaretests
- So viele Fehler oder Bugs wie möglich zu finden<!-- .element: class="fragment" data-fragment-index="1" -->
- Stimmt das Produkt mit den vereinbarten Spezifikationen überein<!-- .element: class="fragment" data-fragment-index="2" --> **(Validation)**<!-- .element: class="fragment" data-fragment-index="2" -->
- Sicherstellen der Softwarequalität bei minimalen Kosten und Arbeitseinsatz<!-- .element: class="fragment" data-fragment-index="3" --> **(Verification)**<!-- .element: class="fragment" data-fragment-index="3" -->
---
### Q/A
- Zu welchem Zeitpunkt sollte man testen?
<!-- .element: class="fragment" data-fragment-index="1" -->
- Welche automatisierten Testvorgänge kennt ihr aus eurem Unternehmen?
<!-- .element: class="fragment" data-fragment-index="2" -->
---
### Der Testing Mythos
:::info
Es braucht Zeit, und ich bin immer überlastet
Mein Code ist grundsolide! Ich brauche keine Unit-Tests.
:::
Diese Annahmen führen zu folgendem Teufelskreis

---
### SDLC (Software Development Lifecycle): In the good old days

---
### SDLC nach Scrum: Der Prozess

---
### 6 Phasen des SDLC

---
### SDLC nach Scrum: Das Produkt

---
## Testmethoden
----
### Blackbox-Test

- Von Außen sichtbares Verhalten wird getestet
- Spezifizierung von Testfällen mit hoher Fehlerwahrscheinlichkeit
- Nur Teile werden geprüft
----
### Whitebox-Test

- Interne Struktur wird getestet
- Zusammenhängende Komponenten werden getestet
---
### Testlevel

----
### Unit-Tests
- Teilkomponenten oder Module werden geprüft
- Testroutine zur Fehlerüberprüfung
- Kann bereits früh eingesetzt werden
- Trennung von Source- und Testcode
----
### Integration-Tests
- Abhängigkeiten von Komponenten werden getestet
- Testen von z.B. Schnittstellen oder Variablenübergabe
- Aufdecken von Kommunikationsfehlern

----
### Unterschied zwischen Unit Testing und Integrationstest
| **Unit Testing** | **Integrationstests** |
| --- | --- |
| Wird in der Anfangsphase des Tests durchgeführt und kann dann jederzeit durchgeführt werden | Muss nach dem Unit-Test und vor dem Systemtest durchgeführt werden |
| Testet die einzelne Komponente des gesamten Systems, d. H. Testet eine Einheit isoliert. | Testet die Systemkomponenten, die zusammenarbeiten, d. H. Testet die Zusammenarbeit mehrerer Einheiten. |
| Schneller auszuführen | Kann langsam laufen |
| Keine externe Abhängigkeit. Jede externe Abhängigkeit wird verspottet oder ausgeblendet. | Erfordert die Interaktion mit externen Abhängigkeiten (z. B. Datenbank, Hardware usw.) |
| Einfach | Komplex |
| Vom Entwickler durchgeführt | Vom Tester durchgeführt |
| Es ist eine Art White-Box-Test | Es ist eine Art Black-Box-Test |
| Günstige Wartung | Teure Wartung |
| Beginnt mit der Modulspezifikation | Beginnt mit der Schnittstellenspezifikation |
| Unit-Tests haben einen engen Umfang, da nur geprüft wird, ob jeder kleine Code das tut, was er tun soll. | Es hat einen größeren Anwendungsbereich, da es die gesamte Anwendung abdeckt |
| Das Ergebnis von Unit-Tests ist eine detaillierte Sichtbarkeit des Codes | Das Ergebnis von Integrationstests ist die detaillierte Sichtbarkeit der Integrationsstruktur |
| Decken Sie die Probleme nur innerhalb der Funktionalität einzelner Module auf. Zeigt keine Integrationsfehler oder systemweite Probleme an. | Decken Sie die Fehler auf, die auftreten, wenn verschiedene Module miteinander interagieren, um das Gesamtsystem zu bilden |
---
### System-Tests
- Sind alle Anforderungen enthalten (Pflichten/Lastenheft)
- Testumgebung (Produktivumgebung nachempfunden )
- Test auf funktionale und nicht-funktionale Anforderungen
- Dokumentationsphase
----
### Unterschied zwischen Systemtest und Integrationstest
| NR. | VERGLEICH | SYSTEMTEST | INTEGRATIONSTESTS |
| --- | --- | --- | --- |
| 1. | Basic | Testet das fertige Produkt. | Validiert die Sammlungs- und Schnittstellenmodule. |
| 2. | Aufgeführt | Nach dem Integrationstest | Nach Unit-Tests |
| 3. | Erfordert | Verständnis der internen Struktur und der Programmiersprache. | Kenntnis von nur miteinander verketteten Modulen und deren Zusammenspiel. |
| 4. | Betonung | Auf das Verhalten aller Module als Ganzes. | Systemfunktionalitäten Schnittstelle zwischen einzelnen Modulen. |
| 5. | Abdeckungen | Sowohl funktionale als auch nicht-funktionale Tests. | Nur Funktionstest. |
| 6. | Testfälle | Erstellt, um reale Szenarien nachzuahmen. | Erstellen, um die Interaktion zwischen zwei Modulen zu simulieren. |
| 7. | Ansätze | Urknall, inkrementell und funktional. | Sanity, Regression, Usability, Retesting, Maintenance und Performance Tests. |
| 8. | Hingerichtet | Nur von Testingenieuren. | Sowohl von Testingenieuren als auch von Entwicklern. |
---
### Acceptance Tests / End-User-Tests
- Abnahme durch den Kunden
- Meist intuitives Vorgehen
- Oft mit Live-Daten
---
### Wie funktioniert Unit Testing?
https://www.digitalocean.com/community/tutorials/how-to-use-unittest-to-write-a-test-case-for-a-function-in-python
https://github.com/PhatSriwichai/python-unittest-example
https://www.guru99.com/unit-testing-guide.html
{"metaMigratedAt":"2023-06-16T20:21:32.608Z","metaMigratedFrom":"YAML","title":"Softwaretesting","breaks":false,"contributors":"[{\"id\":\"d8f98243-781c-4c2c-afc2-a8c1aa014f55\",\"add\":3078,\"del\":242},{\"id\":\"5ce5afcd-f1ce-4f26-840f-19790f04e2f2\",\"add\":16,\"del\":0},{\"id\":\"2906fc5e-2561-4f47-8469-4bba9ad6f26a\",\"add\":3290,\"del\":122}]"}