Teamorganisation: Versionsverwaltung Übersicht Wofür Versionskontrolle? Sperrmechanismen Systeme Beispiel Besonderheiten CVS mit eclipse Tools Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University
Wofür Versionskontrolle? Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University
Sperrmechanismen pessimistische Sperren • explizite Sperre pro Datei • keine konkurrierenden Zugriffe keine Konflikte Fachgebiet Software Engineering Übersicht © 27.03.2017 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 © 27.03.2017 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 © 27.03.2017 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 © 27.03.2017 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 © 27.03.2017 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.1.1 v 1.1 v 1.1.2.1 v 1.2 v 1.2.1.1 v 1.1.3.1 v 1.2.2.1 Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University
CVS mit eclipse Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University
Konflikte Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University
Tools: cvsmail Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University
Tools: cvsweb Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University
Tools: cvsstat Fachgebiet Software Engineering Übersicht © 27.03.2017 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 © 27.03.2017 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 © 27.03.2017 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 © 27.03.2017 Albert Zündorf, Kassel University
Reverse Engineering Ergebnisdokumentformat Eine gemeinsames Teamdokument Doku im HTML Format (wegen CVS) Kapitelstruktur wie Vorlage Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University
Reverse Engineering Ergebnisinhalte Code Ausschnitte Story Boards Sequenzdiagramme Klassendiagramm für wichtige Bausteine Fachgebiet Software Engineering Übersicht © 27.03.2017 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 © 27.03.2017 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 © 27.03.2017 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 © 27.03.2017 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 © 27.03.2017 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. Fachgebiet Software Engineering Übersicht © 27.03.2017 Albert Zündorf, Kassel University