Sie sind auf Seite 1von 19

Name: Matrikelnummer:

Sitzplatz:

Fachgruppe Softwaretechnik
Heinz Nixdorf Institut
Fakultät für Elektrotechnik, Informatik und Mathematik
Universität Paderborn
Fürstenallee 11
33102 Paderborn

Klausur zur Lehrveranstaltung


Softwaretechnikpraktikum
SS 2022
18. Juli 2022
,

Aufgabe 1 2 3 4 5 Summe
mögliche Punkte 14 14 14 14 14 70
erreichte Punkte
Hinweise:
• Diese Klausur umfasst 5 Aufgaben auf 19 Seiten. Überprüfen Sie Ihre Klausur bitte
auf Vollständigkeit!
• Um die Maximalpunktzahl zu erreichen, müssen Sie alle Aufgaben lösen.
• Die Bearbeitungszeit beträgt 70 Minuten.
• Verwenden Sie einen unauslöschbaren Stift (also insbesondere keinen Bleistift), der
nicht rot und nicht grün ist. Andernfalls erhält die betreffende Antwort 0 Punkte.
• Schreiben Sie bitte Ihren Namen und Ihre Matrikelnummer auf jede Seite dieser
Klausur und ggf. auf weitere von Ihnen benutzte Zusatzblätter.
• Es sind keine Hilfsmittel erlaubt.
• Nehmen Sie sich Zeit, die Klausuraufgaben vollständig durchzulesen.
• Nicht lesbare oder widersprüchliche Antworten werden mit 0 Punkten bewertet.

Viel Erfolg!

1
Name: Matrikelnummer:
Sitzplatz:

Aufgabe 1: Fragen (14 Punkte)


Bei dieser Aufgabe geht es darum, kurze Fragen zum Softwaretechnikpraktikum zu beantwor-
ten.
1 Punkt pro Frage
1. Welche Rolle im Prozessframework SCRUM trägt die Verantwortlichkeit für Releases?

2. Wie nennt sich die Aufwandsschätzungsmethode in welcher das Produkt zunächst in


Teilprodukte zerlegt wird, welche dann anhand vergleichbarer Teilprodukte geschätzt
werden?

3. Welche grundlegende Schätzmethode liegt der Function-Point-Methode zugrunde?

4. Wofür steht der Archtitekturstil MVC?

5. Mit welchem Befehl lässt sich ein lokales Git Repository anlegen?

6. Wie nennt sich der Bereich in Git, in welchem sich Änderungen aufhalten, die Teil des
nächsten Commits werden sollen?

7. Wie viele Arten von Branches enthält die Versionsverwaltungskonvention Git-Flow


mindestens?

8. Wie nennt sich die Prüfmethode, die genutzt wird, um Fehler oder Inkonsistenzen eines
Dokumentes aufzudecken?

9. Wie nennt sich die Testform in der das Zusammenspiel einzelner Teile des Systems
überprüft wird.

2
Name: Matrikelnummer:
Sitzplatz:

10. Wofür steht der Begriff DevOps?

11. Nennen Sie die zwei möglichen Build-Systeme welche laut Product Vision zu verwen-
den waren.

12. Wie nennt sich der Entwicklugsprozess, in dem Tests vor der eigentlichen Implementie-
rung geschrieben werden?

13. Wo werden die zu erfüllenden Qualitätskriterien in agilen Projekten festgelegt?

14. Nennen Sie die zwei Arten des Qualitätsmanagements.

3
Name: Matrikelnummer:
Sitzplatz:

Aufgabe 2: Vorlesungsinhalte (14 Punkte)


In dieser Aufgabe werden Inhalte der Vorlesung abgefragt. Die Lösungen können Sie stich-
punktartig angeben.

a) Softwareentwicklung (3 Punkte)

i) Nennen Sie vier Arten der Analyse von Software. (2 Punkte)

ii) Was sind Prozess- bzw. Vorgehensmodelle und weshalb werden sie eingesetzt? (1
Punkt)

b) Scrum (3 Punkte)

i) Nennen Sie die in SCRUM verwendeten Artefakte und beschreiben Sie kurz ihren In-
halt. (2 Punkte)

4
Name: Matrikelnummer:
Sitzplatz:

ii) Nennen Sie die Phasen im SCRUM Prozessframework und kennzeichnen Sie ihre Rei-
henfolge im Ablauf. (1 Punkt)

c) Schätzmethoden und Entwurfsmuster (4 Punkte)

i) Beschreiben Sie das Vorgehen bei Nutzung der Function-Point-Methode zur Aufwands-
schätzung. (2 Punkte)

ii) Skizzieren Sie die grundlegenden Zusammenhänge der Schichtenarchitektur und be-
schreiben Sie den Inhalt der einzelnen Schichten. (2 Punkte)

5
Name: Matrikelnummer:
Sitzplatz:

d) Versionsverwaltung und Qualitätsmanagement (4 Punkte)

i) Nennen und beschreiben Sie die zwei in der Vorlesung erläuterten Konsistenzmechanis-
men der Versionsverwaltung. Nennen Sie zudem Nachteile der jeweiligen Konsistenz-
mechanismen. (2 Punkte)

ii) Nennen Sie die zwei in der Vorlesung erläuterten Qualitätsmanagement-Maßnahmen


und beschreiben Sie ihre Eigenschaften. (2 Punkte)

6
Name: Matrikelnummer:
Sitzplatz:

Aufgabe 3: Modellierung (14 Punkte)


In dieser Aufgabe sollen Sie ein Datenmodell für eine vereinfachte Form des Gesell-
schaftsspiels Rummikub erstellen und anschließend einen Spielverlauf in Form eines
Aktivitätendiagramms modellieren.

In Rummikub gibt es insgesamt 106 Spielsteine. Jeder Spielstein hat eine Farbe (schwarz,
orange, blau, rot) und eine Zahl zwischen 1 und 13. Zudem gibt es zwei Joker-Steine.
Vorbereitung:
Jeder Spieler startet mit 14 zufälligen Spielsteinen auf der Hand.
Das Spielfeld beinhaltet zum Start noch keine Spielsteine.
Spielziel:
Ziel des Spiels ist es, als Erster alle Steine in gültigen Kombinationen von der Hand auf das
Spielfeld abzulegen.
Ablauf:
Die Spieler sind nacheinander an der Reihe.
Spielsteine können in Form einer Gruppe oder einer Reihe auf das Spielfeld abgelegt werden.
Eine Gruppe ist eine Kombination von 3 oder 4 Spielsteinen mit derselben Zahl in unterschied-
lichen Farben (jede Farbe maximal einmal). Eine Reihe besteht aus mindestens 3 Spielsteinen
mit Zahlen derselben Farbe in aufsteigender Reihenfolge.
Des Weiteren kann ein Spieler Spielsteine an eine bereits auf dem Spielfeld liegende Gruppe
oder Reihe anlegen. Zudem kann ein Spieler alle Spielsteine die auf dem Spielfeld liegen ma-
nipulieren und somit beliebig neu anordnen, so lange am Ende des Spielzugs alle Spielsteine
in einer validen Gruppe oder Reihe liegen. Ein Joker-Stein kann als Spielstein mit beliebiger
Farbe und Zahl genutzt werden und somit immer angelegt werden.
Sobald ein Spieler keine weiteren Steine mehr von der Hand auslegen kann, nimmt dieser
einen Spielstein vom Zugstapel auf die Hand und der nächste Spieler ist an der Reihe.

13 13 13 }Gruppe
7 8 9 10 } Reihe

9 12 1 1 2 8 13
} Hand
7 3 6 5 1 10 13

Abbildung 1: Rummikub Partie Beispiel

7
Name: Matrikelnummer:
Sitzplatz:

a) Datenmodell (9 Punkte)

Erstellen Sie für das Spiel Rummikub ein Datenmodell, unter Berücksichtigung der folgenden
Eigenschaften. Stellen Sie das Modell in Form eines UML-Klassendiagramms dar, das die
Daten-Klassen und deren Beziehungen beschreibt.
Berücksichtigen Sie für die Erstellung des Datenmodells die folgenden Spieleigenschaften:
• Ein Rummikub Spiel hat 2-4 Spieler
• Es gibt genau 106 Spielsteine
• Es gibt 2 Arten von Spielsteinen: normale Steine und Joker-Steine
• Normale Spielsteine haben eine Farbe und einen Zahlenwert
• Es gibt ein Spielfeld, welches aus Reihen und Gruppen besteht
• Eine Gruppe hat eine Zahl und eine Anzahl Steine
• Eine Reihe hat eine Farbe, einen Start und ein Ende
• Spielsteine befinden sich entweder auf der Spielerhand, dem Zugstapel oder auf dem
Spielfeld

8
Name: Matrikelnummer:
Sitzplatz:

9
Name: Matrikelnummer:
Sitzplatz:

b) Spielablauf (5 Punkte)

Beschreiben Sie den Ablauf einer Partie Rummikub in Form eines UML-
Aktivitätendiagramms. Eine Partie Rummikub läuft wie folgt ab:
• Vorbereitung (jeder Spieler erhält 14 Spielsteine auf die Hand)
• Ein Spieler legt, falls möglich, Spielsteine aus der Hand auf das Spielfeld um Reihen
oder Gruppen zu bilden oder zu erweitern
• Hat der Spieler keine Spielsteine mehr auf der Hand, hat der Spieler die Partie gewonnen
• Der Spieler hat die Möglichkeit die auf dem Spielfeld liegenden Spielsteine zu manipu-
lieren und weitere Spielsteine aus der Hand abzulegen
• Kann der Spieler keinen Spielstein mehr auslegen (auch zu Zugbeginn), muss der Spie-
ler einen Spielstein vom Zugstapel auf die Hand nehmen. Der nächste Spieler ist am
Zug

10
Name: Matrikelnummer:
Sitzplatz:

Aufgabe 4: Programmierkenntnisse (14 Punkte)


In dieser Aufgabe geht es darum, Ihre Programmierkenntnisse zu prüfen. In Aufgabenteil
a sollen Sie eine Methode, die zum Überprüfen von validen Maulwurf-Platzierungen dient,
mittels JavaDoc kommentieren. In Aufgabenteil b sind Methoden gegeben, welche sowohl
Laufzeit- als auch Syntaxfehler enthalten, die Sie identifizieren sollen. In Aufgabenteil c sol-
len Sie eine Methode implementieren, welche überprüft, ob ein Maulwurf einen validen Zug
durchführen kann.
Jeglicher Code ist von Ihnen in Java zu verfassen.

a) Javadoc (3 Punkte)

Erstellen Sie für die folgende Methode einen Javadoc-Kommentar, der ihren Namen als Autor,
sowie eine Beschreibung der Funktionsweise, der Parameter und des Rückgabewertes beinhal-
ten soll.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 public boolean validMolePlacement(Client client, Mole mole) {
20 boolean result;
21
22 result &= currentLayer == 0;
23 result &= validPosition(mole.getPosition());
24 result &= amountOfMoles(client) <= configuration.getMolesPerPlayer();
25 result &= !moleOnHole(mole.getPosition());
26
27 return result;
28 }

b) Fehlersuche (4 Punkte)

Die folgende Klasse enthält vier Methoden. Von diesen Methoden beinhalten zwei Metho-
den Syntax-Fehler, während die anderen zwei Methoden nicht robust geschrieben sind und zu
Laufzeitfehlern führen können. Geben Sie für jede Methode an, ob es sich um einen Syntax-

11
Name: Matrikelnummer:
Sitzplatz:

oder möglichen Laufzeitfehler handelt. Beschreiben Sie den Fehlertypen (Name der Excep-
tion oder kurze Beschreibung genügt) und beschreiben Sie kurz (textuell oder als Code), wie
der Fehler innerhalb der Methode behoben/verhindert werden kann.
Fehlerbehandlungen mit try-catch Blöcken werden nicht akzeptiert.

1 import java.util.List;
2
3 class Fehlersuche {
4
5 public int fibonacci10() {
6 int fib = 1;
7 int prevFib = 1;
8
9 for (int i = 2; i < 10; i++) {
10 int temp = fib;
11 fib += prevFib;
12 prevFib = temp;
13 }
14
15 }
16
17 public void printWordLengths(List<String> words) {
18 if (words != null) {
19 for (String word : words) {
20 System.out.println(word.length());
21 }
22 }
23 }
24
25 public boolean checkPrime(int n) {
26 if (n < 2) {
27 return false;
28 }
29 int m = n / 2;
30 for (int i = 2; i <= m; i++) {
31 if (n % i = 0) {
32 return false;
33 }
34 }
35 return true;
36 }
37
38 public int[] addNumbers(int[] numbers1, int[] numbers2) {
39 if (numbers1 != null && numbers2 != null) {
40 for (int i = 0; i < numbers1.length; i++) {
41 numbers1[i] += numbers2[i];
42 }
43 }
44 return numbers1;
45 }
46
47 }

12
Name: Matrikelnummer:
Sitzplatz:

Methode fibonacci10:

□ Laufzeitfehler □ Syntaxfehler
Fehlertyp/Beschreibung:

Verhinderung:

Methode printWordLengths:

□ Laufzeitfehler □ Syntaxfehler
Fehlertyp/Beschreibung:

Verhinderung:

Methode checkPrime:

□ Laufzeitfehler □ Syntaxfehler

13
Name: Matrikelnummer:
Sitzplatz:

Fehlertyp/Beschreibung:

Verhinderung:

Methode addNumbers:

□ Laufzeitfehler □ Syntaxfehler
Fehlertyp/Beschreibung:

Verhinderung:

c) Implementierung (7 Punkte)

Die Methode canMakeMove erhält einen Maulwurf und eine Karte als Argumente und ermit-
telt, ob der ausgewählte Maulwurf einen Zug machen kann.
Ergänzen Sie zunächst die unten gezeigte Grafik um valide Positionen, die ein Maulwurf,
welcher auf dem Feld (3, 3) steht, durch eine Karte mit dem Wert 3 in einem Zug erreichen
kann. Markieren Sie die Koordinaten wie sie laut Interfacedokument und Product Vision auf
dem Spielfeld definiert sind. Gehen Sie von einer Konfiguration mit Radius 3 aus! Markieren
Sie valide erreichbare Positionen mit V und unerreichbare Positionen mit I.

14
Name: Matrikelnummer:
Sitzplatz:

Ersatzfeld! Markieren Sie kenntlich die zu be-


wertende Lösung.

15
Name: Matrikelnummer:
Sitzplatz:

Implementieren Sie nun die Methode canMakeMove, die zurückgibt, ob der Maulwurf mit der
entsprechenden Karte einen Zug durchführen kann. Diese Methode soll für alle Konfiguratio-
nen funktionieren, deren Koordinaten sich mit int ausdrücken lassen.
Hinweis: mole.getPosition().getKey() gibt die X-Koordinate des Maulwurfs zu-
rück, mole.getPosition().getValue() die Y-Koordinate.
card.getValue() gibt den Wert der Karte zurück.
containsValidMove(List positions) gibt zurück, ob eine übergebene Liste von
Positionen eine Position enthält, welche durch einen validen Zug erreicht werden kann.
1 public boolean canMakeMove(Mole mole, Card card) {
2 List<Pair<Integer, Integer>> possibleDestinations = new ArrayList<>();
3 // Insert your solution here...
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58 // containsValidMove receives a List of coordinate pairs and
59 // returns whether the List contains a valid move

16
Name: Matrikelnummer:
Sitzplatz:

60 return containsValidMove(possibleDestinations);
61 }

17
Name: Matrikelnummer:
Sitzplatz:

Aufgabe 5: Schnittstellen (14 Punkte)


In dieser Aufgabe sollen Sie die bestehenden Klassen des Netzwerkprotokolls für ein Maul-
wurf Company Spiel erweitern, sodass zusätzliche Funktionen unterstützt werden. Ihre Auf-
gabe ist es, für jede der folgenden Funktionen die jeweils nötigen Klassen anzupassen bzw. zu
erweitern und ggf. neue Klassen zu definieren.
Geben Sie die Klassen vollständig an und vermerken Sie, wann und von wem (Server oder
Client) Instanzen der Klasse verschickt werden. Halten Sie die Anzahl der Klassen möglichst
gering. Geben Sie die Klassen immer als JSON String an. Falls sie eine Klasse erweitern,
können mit einer Anmerkung bereits existierende Felder weggelassen werden.

i) Erstellen Sie eine Nachricht, die ein Client zu dem Server schicken kann, um zu be-
antragen einen anderen Client zu kicken, welche zudem eine Begründung enthält. (3
Punkte)

ii) Erstellen Sie eine Nachricht, die ein Client zu dem Server schicken kann, um eine Pause
zu beantragen. Der Client kann zudem die gewünschte Länge der Pause und die Einheit
(s, min, h) mitsenden. (3 Punkte)

iii) Erstellen Sie eine Nachricht, die ein Client zu dem Server schicken kann, um anzufragen
nach wie vielen Spielzügen ein beliebiger (eigener oder anderer) Client wieder an der

18
Name: Matrikelnummer:
Sitzplatz:

Reihe ist. Erstellen Sie außerdem eine passende Antwort vom Server. (3 Punkte)

iv) Erweitern Sie das Spiel um Richtungswechselfelder. Ein Richtungswechselfeld ist


ein Spezialfeld. Es verändert die Zugrichtung eines Maulwurfs in eine bestimmte
Richtung. Falls ein Maulwurf über ein derartiges Feld läuft, wird seine Zugrichtung für
die verbleibenden Schritte in diese Richtung verändert. Ein Spielzug von einem Spieler
soll immer noch eindeutig sein. Die folgende Grafik visualisiert einen Spielzug durch
ein Richtungswechselfeld mit Zuglänge 3. (5 Punkte)

19

Das könnte Ihnen auch gefallen