https://github.com/se2p/st-2020-lecture-examples
https://github.com/se2p/st-2020-lecture-examples
Last synced: 24 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/se2p/st-2020-lecture-examples
- Owner: se2p
- Created: 2020-11-06T10:44:13.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2020-12-10T18:25:16.000Z (over 5 years ago)
- Last Synced: 2025-02-21T13:30:31.282Z (over 1 year ago)
- Language: Java
- Size: 12.7 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Beispiele zur Vorlesung Software Testing WS20/21
## Woche 1
Die drei Beispiele sollen die Unterscheidung der Begriffe Fault, Error, und Failure illustrieren. Die drei Begriffe sind in der Praxis völlig überladen und es gibt verschiedene Definitionen (siehe https://stackoverflow.com/questions/6323049/understanding-what-fault-error-and-failure-mean/47963772). In der Vorlesung verwenden wir die Definition aus dem folgenden Buch:
Ammann, P., & Offutt, J. (2016). Introduction to software testing. Cambridge University Press.
Unabhängig von der genauen Begrifflichkeit, was zählt ist das Verständnis für die folgenden Punkte:
1. Source Code kann falsch sein. (Wir sagen dazu _Fault_)
2. Wenn falscher Code ausgeführt wird, kann das Resultat richtig oder falsch (= _Error_) sein.
3. Wenn ein Programmzustand falsch ist (Error) dann kann man diese Diskrepanz erst beobachten, wenn der Error bis zu einem Output des Programms propagiert ist (_Failure_)
## Woche 2
Die Beispielklassen und Tests dienen hauptsächlich dazu, die Unterschiede zwischen den in der Praxis verwendeten Kriterien (Line Coverage, Branch Coverage) und den in der Vorlesung besprochenen theoretischen Kriterien zu illustrieren.
Line Coverage entspricht in den meisten Fällen Statement Coverage, da guter Coding Style dazu führt, dass im Normalfall nur ein Statement pro Zeile steht.
Branch Coverage in Jacoco/IntelliJ bezieht sich nur auf Conditional Statements (`if`, `while`, etc.) und nicht auf Kanten im Kontrollflussgraphen. Somit subsumiert diese Variante von Branch Coverage _nicht_ Statement Coverage.
Die Short-Circuiting-Beispiele zeigen dass Condition Coverage in Java nicht immer offensichtlich erfüllbar ist, da der Compiler durch Short Circuiting komplexe Bedingungen in verschachtelte atomare Bedingungen übersetzt. Um die kompilierte Variante im Bytecode anzusehen, kann man das `javap` Tool an der Kommandozeile verwenden.
Die Beispiele sollen weiters Diskrepanzen zwischen Coverage-Messungen in Jacoco und IntelliJ zeigen (z.B. siehe DivisionByZero, oder TryCatchExample, oder SwitchExample).
## Woche 3
Wir haben uns in der Zoom-Session mit dem PIT Mutationsanalyse-Werkzeug beschäftigt. Informationen dazu findet man unter [https://pitest.org/](https://pitest.org/).
Das Eclipse-Plugin ([Pitclipse](https://marketplace.eclipse.org/content/pitclipse/)) ist im Eclipse-Marketplace verfügbar, ebenso gibt es ein [IntelliJ plugin](https://plugins.jetbrains.com/plugin/7119-pit-mutation-testing-idea-plugin). Es gibt weiters ein [Maven plugin](https://pitest.org/quickstart/maven/) und ein [Gradle-plugin](https://gradle-pitest-plugin.solidsoft.info/).
Die Tests in der `LiftTest`-Klasse "töten" 24 der 26 Mutanten, die PIT mit den Default-Einstellungen erzeugt. Die verbleibenden 2 Mutanten sind _äquivalent_.
## Woche 4
(Keine Inhalte zum Gastvortrag von Goran Petrovic)
## Woche 5
Beispiele zu CheckStyle, FindBugs etc, Test Smells -- kein Code Beispiel hier
## Woche 6
Beispiele zu Mocking, Assertion Libraries/Matchers, und BDD.
Diese Beispiele haben Dependencies die aktuell in diesem Repository nicht konfiguriert sind:
- Mockito (mockito-core + mockito-junit-jupiter)
- Hamcrest
- Google Truth
- JBehave