VU Qualit¨atssicherung in der Softwareentwicklung LV-Nr. 716.066, SS 2012
Aufgabenblatt 2
Ass.-Prof. Dr. Bernhard Aichernig
Sandra Fruhmann,sandra.fruhmann@student.tugraz.at Stefan Tiran,stiran@ist.tugraz.at
8.05.2012, Graz
1 Interface Spezifikation mit Modell-Variable
Frist:bis Di 5. 6. 2012, 10:00 MESZ
Modell-Variablen bieten die M¨oglichkeit, Spezifikationen abstrakter zu formulieren und auf we- niger Implementierungsdetails R¨ucksicht nehmen zu m¨ussen.
Bei unserem Bahnhof aus Aufgabenblatt 1 hatten wir den Zustand des Systems auf sehr viele Objekte verteilt. So hatten wir die Information, ob ein bestimmtes Gleisst¨uck f¨ur eine Fahrstraße verwendet wird, als Flag am jeweiligen Gleisst¨uck selbst gespeichert. Die Spezifikation war somit eine Beschreibung des Verhaltens der Implementierung.
Nun wollen wir weg von komplizierten Datentypen, welche die Informationen kapseln und hin zu einfachen Datentypen wie Listen und Mengen, ¨uber die man Spezifikationen abstrakter formulieren kann.
Erg¨anzen Sie die im Framework vorhandene KlasseAbstractElementManager, um eine modell- basierte Spezifikation eines Element-Containers! Abstrakte Elemente implementieren das Interface JMLValue und besitzen eine eindeutige ID, welche ein Integer ist. Der abstrakte Element-Manager soll dabei aus zwei Mengen von abstrakten Elementen bestehen. Die MengefreeElementsenth¨alt alle freien Elemente, die MengeusedElementsenth¨alt alle Elemente, die gerade verwendet werden.
Neu hinzugef¨ugte Elemente werden als frei angesehen und landen daher in der Menge freier Ele- mente. Weiters gibt es eine MethodesetAllUsed(), welche alle vorhandenen, freien Elemente aus der Menge freier Elemente entfernt und in die Menge verwendeter Elemente verschiebt.
Aufgrund einer Einschr¨ankung von OpenJML, die nur das Mapping einer einzigen Variable zul¨asst, m¨ussen diese zwei Mengen jedoch zu einer Klasse namens ModelState zusammengefasst werden.
Erg¨anzen Sie weiters die KlasseConcreteElementManager, welche eine konkrete Implementie- rung enth¨alt. Diese Implementierung soll dabei die objekt-orientierte Architektur besitzen. Das bedeutet, dass an statt zweier Mengen, die Objekte der KlasseAbstractElement nun ein Vector existiert, der Objekte der KlasseConcreteElemententh¨alt. Die KlasseConcrete Elementist da- bei vonAbstractElementabgeleitet und enth¨alt ein zus¨atzliches Flag namensinUse, welches die Information speichert, ob das Element in Verwendung ist.
1
Abbildung 1: Klassendiagramm
Kopieren Sie die modellbasierte Spezifikationen des abstrakten Bahnhofes in die Klasse und definieren sie mit einerrepresents-Clause und einer Modell-Methode das Mapping zwischen Modell und konkreter Implementierung!
Abzugebende Dateien:AbstractElement.java, ConcreteElement.java
AbstractElementManager.java, ConcreteElementManager.java, ModelState.java Erreichbare Punkte:5
Verwendetes Tool:OpenJML
2 Kombinatorisches Testen
Frist:bis di 5. 6. 2012, 10:00 MESZ
F¨ur das kombinatorische Testen enth¨alt das Framework von der LV-Homepage auch eine Im- plementierung eines Bahnhofes. Diese entspricht im wesentlichen der Musterl¨osung f¨ur das 1. Auf- gabenblatt, wobei eine zus¨atzliche Methode trainHasLeft(TrackElement te)eingef¨uhrt wurde, mit der ein Zug dem Bahnhof mitteilen kann, dass er das TrackElementteverlassen hat, und somit dieses Element nicht mehr verwendet wird. Außerdem wird im Konstruktor ein konkreter Gleisplan geladen. Es existieren weiters vier m¨ogliche Fahrstraßen,AB,AC,BAundCA.
2.1 Zustandsautomat
Berechnen Sie alle m¨oglichen abstrakten Zust¨ande und Transitionen (siehe Vorlesung) des Bahnho- fes und stellen Sie die Zustandsmaschine grafisch dar.
2
Abzugebende Datei:Automat.pdf Erreichbare Punkte:5
2.2 Testen mit JMLUnitNG
Testen Sie diesen Automaten nach den folgenden Gesichtspunkten mit Hilfe von JMLUnitNG:
1: Abdeckung aller Zust¨ande: Alle Zust¨ande des Automaten sollen mindestens einmal besucht werden.
2: Abdeckung aller Transitionen: Es soll jede Transition des Automaten einmal getestet werden.
3: Abdeckung aller Paare von Transitionen: Jedes aufeinanderfolgende Paar von ¨Uberg¨angen soll getestet werden.
Hinweis:Die Abdeckung aller Transitionen enth¨alt die Abdeckung aller Zust¨ande. Die Abde- ckung aller Paare von Transitionen enth¨alt die Abdeckung aller Transitionen.
Tipp:Denken Sie an die Eigenschaften des kombinatorischen Testens!
Passen Sie dazu die von JMLUnitNG generierten Package- und Instance- Stragies an und tragen Sie die jeweils ben¨otigten Objekte, welche vom SingletonTrainStationDatazur Verf¨ugung gestellt werden ein. F¨uhren Sie die Tests der KlasseTrainStation JML Testmit Hilfe des Testframeworks TestNG aus und stellen Sie sicher, dass die Tests entweder durchlaufen (pass), oder aufgrund der Vorbedingung ¨ubergangen werden (skip).
Abzugebende Dateien:Alle von JMLUnitNG erstellten Dateien Erreichbare Punkte:5
Verwendete Tools:jml4c und JMLUnitNG
3 Abgabedetails
Frist:bis Di 24.4.2012,10:00 MESZ
Art der Abgabe: Per SVN, weleches vom OnlineSystem erzeugt wird Die Dateien m¨ussen sich in einem Verzeichnis NamensA2befinden. Die Verzeichnisstruktur des Framework soll beibehalten werden. Korrigiert wird die letzte in Zeit eingecheckte Version.
Da keine Unterverzeichnisse erlaubt sind, ist auch das Anlegen von Packages nicht erlaubt. Jeglicher Code zur L¨osung der Aufgaben ist innerhalb der Gruppe geheim zu halten. Es wird dringend dazu geraten, den Code ausschließlich ¨uber das SVN-Repository und nicht ¨uber E-Mail auszutauschen.
Sollte Code unerlaubterweise in die Newsgroup oder auf einen Webserver gelangen, darf er von keiner Gruppe verwendet werden. Dies gilt auch f¨ur die Gruppe, die den Code zwar geschrieben, aber nicht ordnungsgem¨aß verwahrt hat.
3