Sie sind auf Seite 1von 13

Software-Projekt (SWP)

WiSe 2014/15
Pr
ufer: Prof. Dr. R. Koschke

Schriftliche Pr
ufung
Wichtige Hinweise:
Mit Erhalt dieser Aufgaben beginnt die Pr
ufung. Sie konnen ab sofort nicht mehr
von der Pr
ufung zur
ucktreten, ohne Gefahr zu laufen, dass die Pr
ufung mit einer 5,0
bewertet wird.
Tragen Sie zuerst Ihre Matrikelnummer und Ihren Namen gut lesbar ein.
Tragen Sie auf jedem Blatt unten Ihre Initialen (die jeweils ersten Buchstaben Ihres
Namens) ein.
Es sind keine Hilfsmittel erlaubt.
Sie haben exakt 100 Minuten Zeit.
Als Informatikstudent ben
otigen Sie 50 % der erreichbaren Punktzahl jeweils im Aufgabenteil der Datenbankgrundlagen (DBG) und des Software-Projekts (SWP), um
mindestens eine 4,0 zu erreichen. Als sonstiger Student benotigen Sie 50 % der erreichbaren Punktzahl im Aufgabenteil des Software-Projekts.
F
ur die beiden Aufgabenbereiche DBG und SWP werden getrennte Noten ermittelt.
Die Gesamtnote ergibt sich dann als gewichtetes Mittel der beiden Teilnoten. Dabei
hat DBG das Gewicht 1/3 und SWP das Gewicht 2/3. Die Summe der Punktzahlen
betragt in beiden Teilen jeweils 10 Punkte. Die Teilnote jedes Bereichs ergibt sich
relativ zu dieser maximal erreichbaren Punktzahl des Bereichs.
Beachten Sie, dass sich Aufgaben sowohl auf den Vorder- als auch den R
uckseiten
befinden k
onnen.
Von der Aufsicht erhalten Sie weitere Blatter, wenn Sie welche benotigen. Geben Sie
bitte alles ab, gegebenfalls auch Ihre Notizen. Auch daf
ur konnte es noch Punkte geben.
Beschriften Sie alle diese Bl
atter mit Ihrem Namen.

Vorname:

Nachname:

Matrikelnummer:
Aufgabe
1
2
3
4

erreichbare Punktzahl
1,5
2,0
2,5
4,0

erreichte Punktzahl

Aufgabe 1. Risikoanalyse
Sie sind Projektmanager eines Softwareprojekts und haben bei der Planung folgende Risiken identifiziert:
R1: Ein/e Entwickler/in erkrankt f
ur einen langeren Zeitraum wahrend der geplanten Projektdurchf
uhrung.
R2: Der Kunde w
unscht den Einsatz von gleich drei neuen Technologien, mit denen Sie keine Projekterfahrung haben.

Teil 1.a. (0.75 Punkte)


Geben Sie jeweils zwei Folgen f
ur die oben genannten Risiken R1R2 unter der Voraussetzung an,
dass das Risiko eintritt und Sie keine Gegenmanahmen vorgesehen haben. Begr
unden Sie diese Folgen.
Welche weiteren zwei Angaben geh
oren zur Bewertung eines Risikos generell? Erganzen Sie diese
Angaben ebenso (mit Begr
undung).
Hinweis: Fassen Sie sich m
oglichst kurz mit Ihrer Antwort, um Ihre Bearbeitungszeit zu sparen.

Initialen:

2 von 13

Teil 1.b. (0.75 Punkte)


Nennen Sie pro Risiko (R1 bis R2 wie oben) zwei Manahmen, die Ihnen sinnvoll erscheinen, um
mit diesen Risiken umzugehen. Beschreiben Sie genau, in welcher Weise sich diese Manahmen auf
Ihre Bewertung der Risiken auswirken (gemeint sind jene zwei weiteren Angaben bei der Bewertung
eines Risikos, von denen in der vorherigen Teilaufgabe die Rede ist). Begr
unden Sie Ihre Antwort.

Initialen:

3 von 13

Aufgabe 2. Analyse und Modellierung


Teil 2.a. (0.5 Punkte)
Erlautern Sie den Unterschied zwischen synchronen und asynchronen Nachrichten in UML-Sequenzdiagrammen.

Teil 2.b. (1,5 Punkte)


Im Zuge der Anforderungsanalyse wurde eine Interaktion zwischen einem Kunden und einem BuchWebshop mit Hilfe eines Sequenzdiagramms modelliert. Der Kunde interagiert dabei u
ber die GUI mit
dem System. Das Verhalten des Kunden ist wie folgt:
a. Der Kunde gibt die ISBN 3827417058 ein und dr
uckt eine Schaltflache zum Suchen. Diese Aktion
bewirkt, dass die Nachricht search("3827417058)" an den Bookshop geschickt wird. Der Kunde
wartet auf das Resultat.
b. Nach der Antwort des Bookshops fragt der Kunde den Preis des gefundenen Buchs ab. Dazu
ergeht die Nachricht getPrice() an den Bookshop. Der Kunde wartet, bis er den Preis erh
alt.
c. Schlielich bestellt der Kunde das Buch. Hierzu ergeht die Nachricht order() an den Bookshop.
Der Kunde wendet sich nach dem Abschicken seiner Bestellung ohne weiteres Warten seinen
anderen T
atigkeiten zu. Das heit, er wartet nicht auf eine Bestatigung der Bestellung.
d. Die Zustellung des Buchs erfolgt irgendwann spater. Dies wird hier aber nicht mehr modelliert.

Initialen:

4 von 13

Nachfolgend finden Sie eine fragmentarische Implementierung der Software zum Buch-Webshop. Erg
anzen
Sie diese Implementierung an den markierten Stellen, so dass sich die Implementierung konform zum
Sequenzdiagramm verh
alt. Ihre Implementierung soll nat
urlich nicht nur die angegebenen konkreten
Werte (3827417058, 55.0) verarbeiten, sondern beliebige.
p u b l i c c l a s s Book {
private String t i t l e ;
p r i v a t e double p r i c e ;
private String isbn ;
p u b l i c Book ( S t r i n g i s b n , S t r i n g t i t l e , d o u b l e p r i c e ) {
this . titl e = tit le ;
this . price = price ;
this . isbn = isbn ;
}
public String getTitle () {
return t i t l e ;
}
p u b l i c double g e t P r i c e ( ) {
return price ;
}
p u b l i c S t r i n g getISBN ( ) {
return isbn ;
}
}

Initialen:

5 von 13

p u b l i c c l a s s Bookshop {
/
Das g e f u n d e n e Buch .
/
p r i v a t e Book b ;
/
Die Buchdatenbank .
/
p r i v a t e Database d = new Database ( ) ;
/
Sucht nach dem Buch mit d e r gegebenen ISBN .

@param i s b n ISBN d e s zu suchenden Buchs


/
p u b l i c v o i d s e a r c h ( S t r i n g i s b n ) { / HIER ERGAENZEN /

}
/
L i e f e r t den P r e i s d e s g e f u n d e n e n Buchs . Vorbedingung :
s e a r c h ( ) muss v o r h e r a u s g e f u e h r t worden s e i n .

@return P r e i s d e s g e f u n d e n e n Buchs
/
p u b l i c d o u b l e g e t P r i c e ( ) { / HIER ERGAENZEN /

}
/
Das g e f u n d e n e Buch g i l t a l s b e s t e l l t und wird an den
Kunden v e r s c h i c k t . Es wird dann aus d e r Datenbank e n t f e r n t .
/
p u b l i c v o i d o r d e r ( ) { / HIER ERGAENZEN /

}
}

Initialen:

6 von 13

import j a v a . u t i l . HashMap ;
import j a v a . u t i l . Map ;
p u b l i c c l a s s Database {
/
Buchdaten .
/
p r i v a t e c l a s s BookData {
S t r i n g t i t l e ; // T i t e l d e s Buchs
d o u b l e p r i c e ; // P r e i s d e s Buchs
}
/
T a b e l l e d e r Buchdaten i n d i z i e r t u e b e r d i e ISBN .
/
p r i v a t e Map<S t r i n g , BookData> t a b l e = new HashMap<S t r i n g , BookData > ( ) ;
/
Konstruktor .
/
p u b l i c Database ( ) {
f i n a l BookData data = new BookData ( ) ;
data . t i t l e = S o f t w a r e t e c h n i k ;
data . p r i c e = 5 5 . 0 ;
t a b l e . put ( 3827417058 , data ) ;
}
/
L i e f e r t das Buch mit d e r gegebenen ISBN .

@param i s b n ISBN d e s zu suchenden Buchs


@return g e f u n d e n e s Buch
/
p u b l i c Book g e t ( S t r i n g i s b n ) { / HIER ERGAENZEN /

}
/
E n t f e r n t das Buch aus d e r Datenbank .

@param b das Buch , das e n t f e r n t werden s o l l .


/
p u b l i c v o i d remove ( Book b ) { / HIER ERGAENZEN /

}
}

Initialen:

7 von 13

Aufgabe 3. Architektur
Teil 3.a. (1 Punkte)
Erlautern Sie den Architekturstil Schichtung. Welche Einschrankungen f
ur die Abhangigkeiten zwischen Modulen der Architektur sind damit verbunden? Welchen Vorteil verspricht man sich davon?

Teil 3.b. (1,5 Punkte)


Gegeben sei folgende Schichtenarchitektur:

Nutzungsoberflche

Anwendungslogik
Netzwerk

Datenhaltung

Utilities

SystemSoftware

Beurteilen Sie diese Schichtenarchitektur mit Hilfe der Software Architecture Analysis Method (SAAM)

unter den Qualit


atsaspekten Performanz und Anderbarkeit.
Der Schritt in SAAM, alternative Modularisierungen zu erstellen, entf
allt hier, weil nur die oben gezeigte Modularisierung in Form einer
Schichtenarchitektur betrachtet werden soll. Gehen Sie aber ansonsten in allen anderen Punkten von
SAAM entsprechend der Methodik vor. Geben Sie f
ur jeden Qualitatsaspekt ein passendes Szenario
an.

Initialen:

8 von 13

Initialen:

9 von 13

Aufgabe 4. Test
Gegeben sei folgende Implementierung einer limitierten Menge (Set):
p u b l i c c l a s s Set {
p r i v a t e Obj ect e l e m e n t s [ ] ;
i n t noOfElements ;
/
K o n s t r u k t o r . Neue l e e r e Menge , d i e P l a t z f u e r maximal
max >= 1 Elemente b i e t e t .

@param max maximale Anzahl von Elementen ; muss >= 1 s e i n


/
p u b l i c S e t ( i n t max) {
e l e m e n t s = new Obj ect [ max ] ;
noOfElements = 0 ;
}
/
Wahr genau dann , wenn item i n d e r Menge e n t h a l t e n i s t .

@param item g e s u c h t e s Element


@return wahr g . d . w . item e n t h a l t e n i s t
/
p u b l i c b o o l e a n i s I n ( Obj ect item ) {
f o r ( i n t i = 0 ; i < noOfElements ; i ++) {
i f ( e l e m e n t s [ i ] . e q u a l s ( item ) ) {
return true ;
}
}
return f a l s e ;
}
/
Fuegt Element item i n d i e Menge , f a l l s e s n i c h t schon
enthalten i s t .

@param item h i n z u z u f u e g e n d e s Element


@throws E x c e p t i o n f a l l s d i e Menge u e b e r l a u f e n wuerde ,

wenn item h i n z u g e f u e g t werden muesste


/
p u b l i c v o i d i n s e r t ( Obj ect item ) throws E x c e p t i o n {
i f ( ! i s I n ( item ) ) {
i f ( s i z e ( ) == e l e m e n t s . l e n g t h ) {
throw new E x c e p t i o n ( F u l l ) ;
}
e l e m e n t s [ noOfElements ] = item ;
noOfElements++;
}
}
/
L i e f e r t d i e Anzahl d e r Elemente i n d e r Menge .

@return K a r d i n a l i t a e t d e r Menge
/
public int size () {
r e t u r n noOfElements ;
}
}

Initialen:

10 von 13

Teil 4.a. (1 Punkte)


Geben Sie ein Aktivit
atsdiagramm f
ur den Kontrollfluss der Methode isIn() an.

Teil 4.b. (1 Punkte)


Geben Sie f
ur den folgenden JUnit-Testfall die Zweigabdeckung f
ur die Methode isIn() an. Begr
unden
Sie Ihre Antwort.
@Test
public void t e s t I s I n ( ) {
S e t s = new S e t ( 1 0 ) ;
assertFalse ( s . isIn ( s ));
}

Initialen:

11 von 13

Teil 4.c. (1 Punkte)


Geben Sie ein Zustandsdiagramm f
ur die vorangegangene Klasse Set an, das deren Verhalten vollst
andig
beschreibt.

Initialen:

12 von 13

Teil 4.d. (1 Punkte)


Sie sollen die Klasse Set nun zustandsbasiert testen. Geben Sie f
ur jeden Ihrer Zustande aus dem
Zustandsdiagramm der vorherigen Teilaufgabe einen JUnit-Testfall an, der alle ausgehenden Kanten
dieses Zustands testet.

Initialen:

13 von 13