Software-Qualität - Hochschule Osnabrück

Werbung
Prof. Dr. Stephan Kleuker
Hochschule Osnabrück
Fakultät Ing.-Wissenschaften und Informatik
- Software-Entwicklung -
Software-Qualität
Sommersemester 2011
6. Aufgabenblatt
Aufgabe 6 (3 Punkte)
Gegeben sei folgende Klasse Schadensevaluator (auch auf der Web-Seite), deren Methode abzug
getestet werden soll. Überprüfen Sie Ihre Ergebnisse mit CodeCover. (Methodenergebnisse dürfen
vereinfachend ignoriert werden).
public enum Waffe {
Uzzi, Volksmusik, Wumme, Mine, Handgranate, Gebabbel
}
public class Schadensevaluator {
public int abzug(Waffe links, Waffe rechts){
int ergebnis=0;
if(links==Waffe.Gebabbel & rechts==Waffe.Wumme)
ergebnis+=40;
else
ergebnis+=10;
if(links==Waffe.Gebabbel | rechts==Waffe.Volksmusik)
ergebnis+=100;
if(links==rechts)
ergebnis*=2;
else
ergebnis+=10;
return ergebnis;
}
}
a) Geben Sie eine Menge von Testfällen zur C0-Überdeckung von abzug an, die keine C1Überdeckung ist.
b) Geben Sie eine Menge von Testfällen zur C1-Überdeckung von abzug an, die keine C2Überdeckung ist. Begründen Sie, warum keine C2-Überdeckung vorliegt.
c) Geben Sie eine Menge von Testfällen zur C2-Überdeckung von abzug an, die keine C1Überdeckung ist. Begründen Sie, warum keine C1-Überdeckung vorliegt.
Aufgabe 7 (5 Punkte)
Um beliebige Objekte in Java sortieren zu können, muss eine Klasse X nur das Interface Comparable,
besser Comparable<X> implementieren. Dieses Interfaces beinhaltet eine Methode
public int compareTo(X x)
die, falls this kleiner als x sein soll, einen beliebigen negativen Wert, für größer einen beliebigen
positiven Wert und bei Gleichheit den int-Wert Null zurückliefern muss. Die Methode muss eine
Halbordnung definieren, was anschaulich bedeutet, dass für zwei Objekte a und b, nur einer der drei
Fälle, a kleiner b, a gleich b, a größer b, gelten darf. Weiterhin muss aus a kleiner b immer b größer a
folgen. Für die aus der Vorlesung bekannte Klasse Mitarbeiter sehen die Ergänzungen wie folgt aus.
public class Mitarbeiter implements Serializable, Comparable<Mitarbeiter>{
//...
@Override
public int compareTo(Mitarbeiter o) {
return o.id-id;
}
Um in Java echte Kopien von Objekten erzeugen zu können, muss eine Klasse X das Interface
Cloneable implementieren. Dazu gehört, dass es eine Methode clone() gibt, die eine echte Kopie des
Objekts herstellt. Sollten in den Exemplarvariablen Objekte stehen, muss clone() rekursiv für diese
Variablen angewandt werden. Ausnahme sind hier Strings, da Konstanten generell immer kopiert
werden. Die Ergänzungen für die Klasse Mitarbeiter sehen wie folgt aus.
public class Mitarbeiter implements Serializable, Comparable<Mitarbeiter>,
Cloneable{
//...
@Override
Seite 1 von 2
Prof. Dr. Stephan Kleuker
Hochschule Osnabrück
Fakultät Ing.-Wissenschaften und Informatik
- Software-Entwicklung -
Software-Qualität
Sommersemester 2011
6. Aufgabenblatt
public Mitarbeiter clone(){
Mitarbeiter m = new Mitarbeiter(vorname, nachname);
m.setId(id);
return m;
}
Studierende wurden aufgefordert, eigene Sortieralgorithmen zu implementieren. Um diese flexibel
vergleichbar zu machen, wurde ein Interface definiert, dass von den eigenen Sortierklassen realisiert
werden soll. Das Interface sieht wie folgt aus und kann generisch beliebige Klassen T sortieren, die das
Interface Comparable<T> realisieren.
package hilfsklassen;
import java.util.List;
public interface MeinSortierer <T extends Comparable<T>>{
public List<T> sortieren(List<T> list);
}
Die Methode sortieren erhält eine Liste übergeben und soll eine sortierte Liste mit den gleichen
Objekten zurückgeben. Eine Klasse ohne Implementierung muss damit wie folgt aussehen.
package hilfsklassen;
import java.util.ArrayList;
import java.util.List;
public class Sortierer1<T extends Comparable<T>> implements MeinSortierer<T> {
@Override
public List<T> sortieren(List<T> list) {
// hier sortieren
}
}
Von der Webseite der Lehrveranstaltung können acht Beispielimplementierungen des Interfaces in
einem Projekt geladen werden. Mit der Klasse MainSortierer zeigen die Studierenden vermeintlich,
dass zumindest sieben ihrer Ideen funktionieren.
a) Überlegen Sie sich zunächst genau, wie man formalisieren kann, dass eine Liste mit beliebigen
Elementen, die geordnet werden können, durch eine Methode geordnet wird. Schreiben Sie
diese Kriterien zunächst als Text auf.
b) Überlegen Sie sich anschaulich verschiedene Szenarien, also anschauliche Äquivalenzklassen,
die eine Überprüfung des Sortierverhaltens einer Liste erlauben. Um die Aufgabe
einzuschränken, sollten Sie mindestens fünf Szenarien benennen.
c) Formulieren Sie die in b) gefundenen Testfälle für die verschiedenen Sortierer als JUnit4Testfälle. Ergänzen Sie gegebenenfalls Testfälle, um mit CodeCover eine 100% Statementund Brachüberdeckung zu erreichen. Welche Sortierer scheitern an welchen Testfällen?
Beachten Sie, dass man langweilige Testkopien durch parametrisierte Testklassen vermeiden
kann.
d) [ohne Punkte, freiwillig] Die meisten der fehlerhaften Sortierer lassen sich recht einfach
korrigieren. Führen Sie diese Korrekturen, z. B. in einem eigenen Eclipse-Projekt, durch und
testen Sie diese Lösungen.
Außer zu d) müssen Sie nebenbei den genauen Programmcode nicht verstehen.
Seite 2 von 2
Herunterladen