# SWT Blatt 12
## Aufgabe 1 White Box Test
*Gegeben sei die Methode sortiere, welche mittels Bubblesort ein Feld von Variablen des Typs int sortiert.
a) Entwerfen Sie für die Methode sortiere einen Kontrollflussgraphen.*

*b) Geben Sie ein Feld mit Eingabewerten an, das nötig ist, um eine Anweisungsüberdeckung zu erreichen. Schreiben Sie die Reihenfolge auf, in der die Anweisungen getestet werden.*
- bestand = 2, 1
- Anweisungsnummern: 1,2,3,4,5,6,7,8,9,10,11,12,13,5,6,3,4,5,6,7,8,9,10,5,6,3,14
*c) Erreichen Sie mit diesem Feld an Eingabewerten auch eine Verzweigungsabdeckung? Begründen Sie kurz Ihre Antwort. Falls ja, geben Sie eine Codemodifikation an, mit der die Verzweigungsabdeckung nicht mehr gegeben wäre. Falls nicht, geben Sie ein weiteres Eingabewerte-Feld an, sodass auch die übrigen Zweige überdeckt werden. Notieren Sie zu diesem neuen Testfall wieder die Reihenfolge der durchgeführten Anweisungen.*
- nein, die Anweisungsnummer 2 (if (bestand.length > 1)) nur einmal mit > 1 durchgelaufen ist. Der Fall bestand.lenght <= 1 wird nicht abgedeckt.
- weiteres Eingabewerte-Feld:
- bestand = 1
- Anweisungsnummern: 1,2,14
*d) Wie viele Pfade ohne mehrfache Schleifendurchläufe gibt es? Welche Pfade können vom Programm durchlaufen werden und sollten daher getestet werden? Geben Sie kurze Begründungen an.*

1. Pfad 1 (rot) ist ohne mehrfache Schleifendurchläufe
2. Pfad 4 (lila) ist ohne mehrfache Schleifendurchläufe für einen Bestand von 2 Elementen, welcher bereits sortiert ist (z.B bestand: 1,2 & Anweisungsnummern: 1,2,3,4,5,6,7,8,9,10,5,3,14). Bei sortierten Elementen mit einem Bestand größer als 2 gibt es auch hier mehrfache Schleifendurchläufe.
3. Pfad 3 (grün): Bei jeder Eingabe, bei der mindestens einmal umsortiert wird, gibt es mehrere Schleifendurchläufe.
*e) Formulieren Sie ein minimales Programm, für das mindestens zwei verschiedene Testfälle notwendig sind, um eine Anweisungsüberdeckung zu erreichen.*
```
nameAusgeben(String name){
if(name.length <= 3) print ("kurzer Name");
else print ("langer Name");
}
```
## Aufgabe 2 Black Box Test
a) unser Format ist: Äquivalenzklasse (Eingabestring -> Methoden-Ergebnis)
1. monat in 1 bis 12, jahr vierstellig, tag in 1 bis gültiger tag (01.01.2012 -> 01-01-2012 12:00:00)
2. jahr ist zweistellig (01.01.12 -> 01-01-2012 12:00:00)
3. monat < 1 (01.0.2012 -> 01-01-2012 12:00:00)
4. monat > 12 (01.13.2012 -> 01-12-2012 12:00:00)
5. tag < 1 (0.01.2012 -> 01-01-2012 12:00:00)
6. tag > zuletzt gültigen Tag (33.01.2012 -> 31-01-2012 12:00:00)
7. ungültige Eingabe (ghsd -> null)
## Aufgabe 3 Objektentwurf
*a) Nennen Sie drei UML-Konzepte, die nicht in Java realisierbar sind.*
- Multiple Klassifikation
- Dynamische Klassifikation
- Partitionierung von Unterklassen
*b) Schauen Sie sich die Implementierung der Klasse java.io.BufferedReader an. Welches Entwurfsmuster wird dort genutzt?*
- Das Decorator Pattern: "decorated" mit dem Buffering Feature, obwohl es eigentlich ein normaler Reader ist
*c) Erklären Sie im Rahmen von „Split Object“-Patterns was die Begriffe Forwarding, Subtyping und Overriding bedeuten und wie diese Konzepte implementiert werden wird.*
- Forwarding
- Kindobjekt leitet empfangene Nachricht an Elternobjekt weiter
- Code-Wiederverwendung
- Implementierung:
- protected Methoden der „Oberklasse“ müssen public deklariert werden
- protected Variablen der „Oberklasse“ brauchen public Zugriffsmethoden damit sie aus der „Unterklasse“ aufrufbar sind
- Subtyping
- Kindklasse bietet volles Interface der Elternklasse
- Implementierung:
- Subtypbeziehung mittels Oberklassen-Interface (enthält alles, was in der Simulation public ist und wird implementert von der "Oberklasse" und "Unterklasse")
- Overriding
- im Kontext weitergeleiteter Nachrichten werden Methoden des Kindobjekts benutzt
- ... anstelle entsprechender Methoden des Elternobjekts
- Implementierung
- mittels explizitem "this" (als Parameter oder gespeichert)
- gespeichertes "trueSelf" (keine Schnittstellen Änderung erforderlich)
- gespeichertes "trueSelf" ist vom Typ "Oberklassen-Interface" (verschiedene Unterklassen möglich)