Beruflich Dokumente
Kultur Dokumente
Sitzplatz:
Fachgruppe Softwaretechnik
Heinz Nixdorf Institut
Fakultät für Elektrotechnik, Informatik und Mathematik
Universität Paderborn
Fürstenallee 11
33102 Paderborn
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:
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?
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:
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?
3
Name: Matrikelnummer:
Sitzplatz:
a) Softwareentwicklung (3 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)
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:
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)
6
Name: Matrikelnummer:
Sitzplatz:
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
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:
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:
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:
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)
19