Aufgaben - SE-Wiki

Werbung
Aufgaben
Objektentwurf
(Einschub
zum
5.
Tutorium)
Tutorium
6
13.
März
2009
©
Svetlana
Matiouk,
Uni
Bonn
Ferientutorien
zur
Vorlesung
Softwaretechnologie
WS
2008
6.
Treffen,
Aufgabe
1
Vorwärtsmodellierung
Realisierung
von
Assoziationen
• • • a) Erläutern
Sie
das
allgemeine
Prinzip,
wie
die
entsprechende
Assoziation
in
Java
umzusetzen
ist,
malen
Sie
ein
einfachstmögliches
vollständiges
UML‐Beispiel
dazu
und
setzen
Sie
Ihr
Beispiel
in
Java
um.
Unidirektionale
Assoziation
mit
Kardinalität
1
public class Kunde {
private Konto konto = null;
public class Kunde {
Konto konto = null;
}
©
Svetlana
Matiouk,
Uni
Bonn
public Kunde() {
konto = new Konto();
}
oder
public Konto getKonto() {
return konto;
}
}
Ferientutorien
zur
Vorlesung
Softwaretechnologie
WS
2008
6.
Treffen,
Aufgabe
1
Vorwärtsmodellierung
Realisierung
von
Assoziationen
• • • Erläutern
Sie
das
allgemeine
Prinzip,
wie
die
entsprechende
Assoziation
in
Java
umzusetzen
ist,
malen
Sie
ein
einfachstmögliches
vollständiges
UML‐Beispiel
dazu
und
setzen
Sie
Ihr
Beispiel
in
Java
um.
b)
Unidirektionale
1‐zu‐N‐Assoziation
public class Kunde {
private Collection<Konto> konten;
public Kunde() {
konten = new ArrayList<Konto>();
}
import java.util.Collection;
public class Kunde {
Collection<Konto> konten;
}
©
Svetlana
Matiouk,
Uni
Bonn
public Collection<Konto> getKonto() {
return konten;
}
oder
public void addKonto(Konto konto) {
konten.add(konto);
}
}
Ferientutorien
zur
Vorlesung
Softwaretechnologie
WS
2008
6.
Treffen,
Aufgabe
1
Vorwärtsmodellierung
Realisierung
von
Assoziationen
• • • Erläutern
Sie
das
allgemeine
Prinzip,
wie
die
entsprechende
Assoziation
in
Java
umzusetzen
ist,
malen
Sie
ein
einfachstmögliches
vollständiges
UML‐Beispiel
dazu
und
setzen
Sie
Ihr
Beispiel
in
Java
um.
c)
Bidirektionale
1‐zu‐1‐Assoziation.
Geben
Sie
auch
den
Code
der
Methode(n)
zum
Einfügen
von
Elementen
an!
Aufgabe
1
Vorwärtsmodellierung
Realisierung
von
Assoziationen
• • • Erläutern
Sie
das
allgemeine
Prinzip,
wie
die
entsprechende
Assoziation
in
Java
umzusetzen
ist,
malen
Sie
ein
einfachstmögliches
vollständiges
UML‐Beispiel
dazu
und
setzen
Sie
Ihr
Beispiel
in
Java
um.
d)
Bidirektionale
1‐zu‐N‐Assoziation.
Geben
Sie
auch
den
Code
der
Methode(n)
zum
Einfügen
von
Elementen
an!
Aufgabe
1
Vorwärtsmodellierung
Realisierung
von
Assoziationen
• • • Erläutern
Sie
das
allgemeine
Prinzip,
wie
die
entsprechende
Assoziation
in
Java
umzusetzen
ist,
malen
Sie
ein
einfachstmögliches
vollständiges
UML‐Beispiel
dazu
und
setzen
Sie
Ihr
Beispiel
in
Java
um.
e)
Bidirektionale
N‐zu‐M‐Assoziation.
Überlegen
Sie
sich
eine
Implementierung
in
der
die
in
Beziehung
stehenden
Klassen
nicht
um
Variablen
erweitert
werden
und
erläutern
Sie
das
Prinzip!
Aufgaben
Workflows:
Refactoring
und
Testen
©
Svetlana
Matiouk,
Uni
Bonn
Ferientutorien
zur
Vorlesung
Softwaretechnologie
WS
2008
6.
Treffen,
Aufgabe
2
Black‐Box
Testen
(Äquivalenzklassentests)
a) b) c) Erklären
Sie,
was
in
JUnit
geschieht,
wenn
eine
JUnit‐Assertion
innerhalb
einer
Testmethode
fehlschlägt.
Worin
unterscheidet
sich
hier
das
Verhalten
von
einem
„normalen“
Java‐Assert?
Erläutern
Sie
kurz
den
Unterschied
zwischen
Blackbox‐Tests
und
Whitebox‐Tests.
Eine
Methode
calcSumFromString(String input) soll
getestet
werden.
Die
Methode
berechnet
für
einen
String
mit
einer
Addition
als
Inhalt
die
resultierende
Summe
und
gibt
diese
als
Integerwert
zurück.
Z.B.:
calcSumFromString(“1+2+3+4“) = 10
d) Denken
Sie
sich
5
sinnvolle
Tests
aus
und
beschreiben
Sie
sie
mit
jeweils
einem
Satz.
Tipp:
Testen
Sie
nicht
nur
die
Korrektheit
der
Methode
in
sinnvollen
Szenarien,
sondern
auch
die
Behandlung
von
Fehlerfällen.
©
Svetlana
Matiouk,
Uni
Bonn
Ferientutorien
zur
Vorlesung
Softwaretechnologie
WS
2008
6.
Treffen,
Aufgabe
2
Black‐Box
Testen
(Äquivalenzklassentests)
d)
Beschreiben
Sie
eine
Eingabe
für
die
die
obige
Implementierung
der
Methode
zu
einem
Fehler
führt
und
erklären
Sie
welche
Fehlerbehandlung
hier
fehlt.
public static int calcSumFromString(String input){
if(input.equals("")) return 0;
int result = 0;
int pointer = 0;
while(pointer< input.length()){
int pointer_next = nextPointer(pointer, input);
String nN = input.substring(pointer, pointer_next);
result+= Integer.parseInt(nN);
pointer = pointer_next + 1;
}
return result;
}
private static int nextPointer(int index, String input) {
while(index< input.length()){
if( input.charAt(index) == '+'){
return index;
}
else index++;
}
return input.length();
}
Aufgabe
3
Whitebox
Testing
(Strukturtests)
Gegeben
sei
folgende
Methode
doSth:
public int doSth(int werte[]) {
int sum = 0;
// 1
for (int i = 0;
i < werte.length;
i++) {
if (werte[i] >= 0) {
sum += werte[i];
// Anweisung-Nr.
// 2
// 3
// 4
// 5
// 6
};
}
return sum;
// 7
}
Zeichnen
Sie
den
Kontrollflussgraphen
der
Methode
doSth.
Beschriften
Sie
dabei
auch
die
von
den
Verzeigungsknoten
ausgehenden
Kanten
mit
den
dazugehörigen
Bedingungen.
Aufgabe
3
Whitebox
Testing
(Strukturtests)
Lösung:
Aufgabe
3
Whitebox
Testing
(Strukturtests)
• Geben
Sie
ein
Feld
als
Eingabeparameter
der
Methode
doSth
an,
welches
nötig
ist,
um
eine
Anweisungsüberdeckung
zu
erreichen.
• Schreiben
Sie
den
Pfad
auf
(als
Sequenz
der
Anweisungsnummern)
der
für
das
gewählte
Eingabefeld
durchlaufen
wird.
public int doSth(int werte[]) {
int sum = 0;
// 1
for (int i = 0;
i < werte.length;
i++) {
if (werte[i] >= 0) {
sum += werte[i];
// 2
// 3
// 4
// 5
// 6
};
}
return sum;
}
// Anweisung-Nr.
// 7
Aufgabe
3
Whitebox
Testing
(Strukturtests)
• Erreichen
Sie
mit
den
Eingabewerten
aus
b)
eine
Verzweigungsabdeckung?
Begründen
Sie
kurz
Ihre
Antwort.
Falls
nicht,
dann
geben
Sie
ein
weiteres
Feld
an,
welches
die
noch
fehlenden
Verzweigungen
abdeckt.
Notieren
Sie
zum
neuen
Testfall
wieder
den
Pfad
(als
Anweisungsfolge),
welcher
mit
diesem
Feld
getestet
wird.
• Ist
mit
Ihren
bisherigen
Testeingaben
auch
eine
Pfadabdeckung
erreicht?
Falls
nicht,
geben
Sie
die
fehlenden
Pfade
an.
public int doSth(int werte[]) {
int sum = 0;
// 1
for (int i = 0;
i < werte.length;
i++) {
if (werte[i] >= 0) {
sum += werte[i];
// 2
// 3
// 4
// 5
// 6
};
}
return sum;
}
// Anweisung-Nr.
// 7
Aufgabe
Refactoring
a) b) Erklären
Sie,
was
man
unter
Refactoring
versteht,
und
nennen
Sie
zwei
Gründe,
warum
man
Rafactoring
anwendet!
Gegeben
sei
die
folgende
Methode:
Durch
welches
Refactoring
kann
die
Schleife
aus
Zeile
17
bis
20
zu
einer
Methode
zusammengefasst
werden?
Schreiben
Sie
die
durch
das
Refactoring
gewonnene
neue
Methode
und
die
transformierte
printRechnung()‐Methode
auf!
©
Svetlana
Matiouk,
Uni
Bonn
Ferientutorien
zur
Vorlesung
Softwaretechnologie
WS
2008
6.
Treffen,
Aufgabe
Refactoring
Lösung:
©
Svetlana
Matiouk,
Uni
Bonn
Ferientutorien
zur
Vorlesung
Softwaretechnologie
WS
2008
6.
Treffen,
Aufgabe
Refactoring
Alternative
Lösung:
©
Svetlana
Matiouk,
Uni
Bonn
Ferientutorien
zur
Vorlesung
Softwaretechnologie
WS
2008
6.
Treffen,

Herunterladen