fachgebiet software engineering Übersicht © 22.01.2014 albert zündorf, kassel university...
TRANSCRIPT
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Teamorganisation: Versionsverwaltung
Übersicht
• Wofür Versionskontrolle?
• Sperrmechanismen
• Systeme
• Beispiel
• Besonderheiten
• CVS mit eclipse
• Tools
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Wofür Versionskontrolle?
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Sperrmechanismen
pessimistische Sperren
• explizite Sperre pro Datei
• keine konkurrierenden Zugriffe keine Konflikte
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Sperrmechanismen
optimistische Sperren
• Sperre nur beim einchecken
• update (Synchronisation) jeder Zeit möglich Konflikte (semiautomatische Behebung)
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Systeme
RCS – Revision Control System, der Anfang
CVS - Concurrent Versions System, der Klassiker keine Verzeichnisse kein Umbenennen / Verschieben kein Check-In Begriff aber: gute Tool-Unterstützung
SVN – Subversion, verbessertes CVS
Git – verteilte Versionsverwaltung, Linux Kernel Entwicklung
Mercurial - OpenSolaris, XEN, Kernel-Entwicklung
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
CVS Beispiel
Alice, Bob arbeiten an einem Projekt beide checken die Version 1.1 vom Server aus Alice bearbeitet die Datei Server.java, Client.java (Zeile 42) Bob bearbeitet Helper.java und Client.java (Zeile 23) Alice checkt ein Bob versucht einzuchecken Fehler Bob führt ein Update durch
neue Server.java Merge von Client.java, kein Konflikt
Bob checkt ein
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
CVS Beispiel Teil 2
Bob ändert in HtmlPanel.java (Zeile 42)
Bob checkt ein
Alice ändert in HtmlPanel.java (Zeile 42)
Alice macht ein Update Konflikt<<<<<<< HtmlPanel.java
doc1 = (HTMLDocument) html.getDocument();=======
doc = html.getDocument();>>>>>>> 1.4
Alice behebt den Konflikt
Alice checkt ein
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Timestamps / Tags / Branches
CVS speichert (Rückwärts-)Deltas
Wiederherstellen alter Versionen möglich
Versionen identifizierbar durch Timestamps Revision Numbers Markierungen (Tags)
Verzweigungen (Branches) sind möglich
v 1.1
v 1.1.1.1
v 1.1.2.1
v 1.1.3.1
v 1.2 v 1.2.1.1
v 1.2.2.1
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
CVS mit eclipse
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Konflikte
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Tools: cvsmail
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Tools: cvsweb
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Tools: cvsstat
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Reverse Engineering
Aufgabe:
Wie funktioniert das alte Programm
Wo finde ich zu ändernde Funktionalität
Wo muss ich neue Funktionalität einbauen
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Reverse Engineering
Z.B.:
In welchen Phasen läuft ein RedCode Wettkampf ab?
Welcher Baustein macht dabei was?
Wo und wie würde man Mult und Div Befehle realisieren
Wo und wie würde man neue OpCode Modifier implementieren
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Reverse Engineering Techniken
Doku lesen
Java Docs
Googlen
Klassendiagramm generieren (Omondo, Fujaba, …)(Achtung man braucht nur „wichtige“ Klassen)
Debuggen / EDobsen
Eclipse „Show Declaration“ / „Show Usages“
Traces generieren
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Reverse Engineering Ergebnisdokumentformat
Eine gemeinsames Teamdokument
Doku im HTML Format (wegen CVS)
Kapitelstruktur wie Vorlage
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Reverse Engineering Ergebnisinhalte
Code Ausschnitte
Story Boards
Sequenzdiagramme
Klassendiagramm für wichtige Bausteine
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Aufgabe: Getting started
Die zu verwendende CoreWar-Version wird über das CVS-Repository eurer Gruppe bereit gestellt. Dort befindet sich auch ein Verzeichnis, das Beispieldokumente enthält.Auf der Vorlesungsseite ist eine Anleitung verlinkt, wie das auschecken mit Eclipse vorzunehmen ist.
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Aufgabe: CoreWars kennen lernen
Als erste einfache Übung spielen Sie mit dem gegebenen Programm. Geben Sie ein oder zwei einfache Kämpfer ein (Quelltexte finden sich in den Dokumenten bzw. im Internet). Hinweis: Das gegebene CoreWars-Framework erwartet entweder ein Label oder Whitespace am Beginn jeder Instruktions-Zeile. Also lautet der einfachste Kämpfer:" MOV 0, 1" (statt "MOV 0, 1")Lassen Sie diese Kämpfer gegeneinander kämpfen. Führen sie den Kampf schrittweise aus. Das Menü dazu befindet sich unten links in der Kampf-Anzeige.
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Aufgabe: Struktur erkennen
Beschäftigen Sie sich nun mit dem Quellcode des CoreWars-Framework. Nach einigem Lesen sollte man schon eine grobe Aufteilung der Software in Subsysteme und Komponenten erkennen. Diese gilt es textuell und mit Hilfe von Package- bzw. Komponentendiagrammen zu dokumentieren. Kleine Klassendiagramme mit den wichtigsten Methoden für wichtige Ausschnitte der Funktionalität sind sinnvoll. Insbesondere soll die Redcode-Befehlsverarbeitung im MARS untersucht werden. Erstellen Sie einen Klassendiagramm(-Ausschnitt) der Klassen, die zum MARS und der Befehlsverarbeitung gehören (Hinweis: ca. 8-10) und führen Sie die wichtigsten Methoden auf. Beschreiben Sie den Ablauf in Sequenz- oder Aktivitätsdiagrammen.
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Aufgabe: Client-Server-Kommunikation
Untersuchen Sie die Kommunikation zwischen Client und Server im Existierenden Framework. Wie ist der Ablauf des Protokolls? Welche Daten werden ausgetauscht? Wie werden diese codiert? Die Kommunikation über Interfaces bzw. Oberklassen (sprich festgelegte Methodensignaturen) und die Ereignisse müssen im Reverse Engineering Dokument beschrieben werden. Zur Unterstützung für die Beschreibung des Austauschs von Nachrichten bieten sich Sequenzdiagramme an. Unterstützend zu Beschreibungen der Spielabläufe können ein paar Screenshots helfen.
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Aufgabe: 8 neue Befehle implementieren
In dieser Projektphase sind die acht neuen Befehle zu implementieren. Identifizieren Sie die Stellen im existierenden Code die geändert werden müssen, um den Befehlssatz zu erweitern. Erweitern sie auch den Test-Code um Testfälle für die neuen Befehle! Orientieren Sie sich hierbei an den existierenden Testfällen (Hinweis: Klasse CUTest, pro Befehl eine Methode test<neuerOpCode>() einfügen. Der Befehl JOI benötigt die weiteren Aufgabenteile. Implementieren sie nur das Grundgerüst, die Ausführung des Befehls soll den Sprung vorerst NICHT durchführen, also einfach den program counter inkrementieren).Dokumentieren Sie kurz, welche Änderungen Sie in welchen Klassen vorgenommen haben.