CVS-Versionsstand

Aus THM-Wiki
Wechseln zu: Navigation, Suche

Im Rahmen der Veranstaltung Methoden des Softwareentwicklungsprozesses (MSP) im Wintersemester 2006/2007 wurde die Aufgabe gestellt, dem eStudy-Projekt eine Erweiterung hinzuzufügen, die es erlaubt, den aktuellen Versionsstand der Codebasis einzusehen. Die Informationen sollten aus den Datei-Zeitstempeln und den Metadaten in den CVS-Verzeichnissen gewonnen werden. Unter dem Menüpunkt Wartung im eStudy-Portal sollte der Administrator eine Tabelle mit den entsprechenden Daten sehen können.

Vorgehensweise

Für die Implementierung dieser Aufgabe wurde als Vorgehensmodell eXtreme Programming gewählt, da nur eine Person beteiligt war und sich die Aufgabe sehr gut in kleine Iterationen aufteilen ließ. Außerdem wurde es so problemlos möglich, auf evtl. Anforderungsänderungen zu reagieren. Der Test-First-Ansatz stellte zudem sicher, dass eine möglichst fehlerfrei Software entstand. Das Vorgehensmodell eXtreme Programming wurde leicht angepasst (z.B. wurde auf Pair Programming verzichtet, da ja nur eine Person beteiligt war). Im Folgenden wird auf die einzelnen Schritte des Softwareentwicklungsprozesses eingegangen:

User Stories

Für die Anforderungsanalyse wurden folgende User Stories erstellt:

  1. CVS-Root/-Branch/-Tag finden
    Der Administrator möchte feststellen, aus welchem CVS-Root bzw. Branch/Tag der zur Zeit auf dem Server befindliche Code ausgecheckt wurde. Dazu schaut er in eine Tabelle, die die Roots/Branches/Tags und das Datum des letzten Auscheck-Vorgangs bzw. der letzten lokalen Änderung einer Datei enthält. Bei Bedarf kann er sich zu einem oder mehreren der Punkte eine Dateiliste anzeigen lassen (z.B. Liste der beim letzten Auscheck-Vorgang aktualisierten Dateien).

    Akzeptanzkriterium: Der Administrator öffnet die Tabelle unter dem Menüpunkt Wartung und sieht einen Root-Eintrag (":extssh:xxx@estudy.cvs.sourceforge.net:/cvsroot/estudy") mit dem entsprechenden Branch ("IAT").

  2. Konflikte erkennen
    Bestehen nach einem Auscheck-Vorgang Konflikte zwischen dem CVS-Repository und lokalen Dateien, möchte der Administrator dies sehen. Bei Bedarf möchte er sich eine Liste der konfliktbehafteten Dateien anzeigen lassen.

    Akzeptanzkriterium: Nach einem Merge mit einem anderen Branch (z.B. "weiss_planspiel") entstehen Konflikte. Diese Konflikte sind in der Tabelle unter dem Menüpunkt Wartung zu sehen. Durch Aufklappen/Erweitern des entsprechenden Tabelleneintrags ist die vollständige Liste der konfliktbehafteten Dateien zu sehen.

  3. Nicht erfasste bzw. ignorierte Dateien finden
    Der Administrator möchte die Anzahl aller Dateien im auf dem Server befindlichen eStudy-Verzeichnis sehen, die nicht von CVS erfasst oder der CVS-Ignore-Liste hinzugefügt wurden. Bei Bedarf möchte er sich eine Liste dieser Dateien anzeigen lassen.

    Akzeptanzkriterium: Im Menüpunkt Wartung erscheint eine Tabelle, in der die nicht erfassten bzw. ignorierten Dateien zu sehen sind. Es müssen mindestens die Dateien "/.project" und "/eStudy/common/config.inc.php" enthalten sein.

Release Plan

Entsprechend der Anforderungsbeschreibung wurden zwei Iterationen durchgeführt, nach deren Ende jeweils eine vollständig verwendbare Software vorhanden war.

Iteration 1

In dieser Iteration wurden die User Stories 1 und 2 umgesetzt. Unter dem Menüpunkt Wartung wurde eine neue Tabelle hinzugefügt, die Angaben über die CVS-Roots/-Branches und -Tags bzw. die entsprechenden Angaben über das Datum des letzten Auscheck-Vorgangs, der letzten lokalen Änderung und die Anzahl der Konflikte enthielt. Es wurde ein Icon neben den Tabelleneinträgen hinzugefügt, mit dem man sich die entsprechenden Dateilisten anzeigen lassen kann.

Iteration 2

In der zweiten Iteration wurde User Story 3 umgesetzt, sodass man sich bei Bedarf auch eine Liste der nicht erfassten bzw. ignorierten Dateien anzeigen lassen kann. Die grafische Oberfläche wurde außerdem so überarbeitet, dass nun auch über entsprechende "Fragezeichen-Symbole" Hilfetexte zu den einzelnen Tabelleneinträgen einsehbar sind.

Unit- und Akzeptanz-Tests

Für die Informationsgewinnung aus den CVS-Verzeichnissen auf dem Server wurde eine spezielle PHP-Klasse erstellt (siehe unten). Zu jeder öffentlichen Methode wurde ein Unit-Test geschrieben, sodass die korrekte Funktion der Klasse sichergestellt werden konnte. Dabei wurde der Test-First-Ansatz verwendet, bei dem zuerst Tests geschrieben werden, bevor der eigentliche Code implementiert wird. Dies diente auch zur Einhaltung einer guten Strukturierung der Klassendefinition im Sinne von Erweiterbarkeit und Wartbarkeit.

Bei den Akzeptanztests wurde jeweils die Einhaltung der bei den User Stories festgelegten Akzeptanzkriterien überprüft.

Technisches

Zur Gewinnung der Information aus den CVS-Metadaten werden folgende Schritte durchgeführt:

  1. Rekursiver Abstieg im Verzeichnisbaum der eStudy-Installation und sammeln der Daten zu den von CVS erfassten Dateien in einem Array, bzw. der nicht erfassten oder ignorierten Dateien in einem zweiten Array.
  2. Erstellung einer Tabellenansicht mit den in Punkt 1 gewonnenen Daten

Unter Punkt 1 wird dazu in jedem Rekursionsschritt das Verzeichnis "CVS" durchsucht (falls vorhanden) und folgendermaßen verarbeitet:

  • Datei "Root"
    Diese Datei einthält den Root-Tag (z.B: ":extssh:xxx@estudy.cvs.sourceforge.net:/cvsroot/estudy") des entsprechenden Unterverzeichnisses in einer einzelnen Zeile.
  • Datei "Tag"
    In der Datei "Tag" wird der Name des Branchs oder Tags des Unterverzeichnisses in einer einzelnen Zeile in folgendem Format abgelegt:
    <Typ><Name>
    Der Typ ist ein einzelnes Zeichen mit folgender Bedeutung:
    T: <Name> ist ein Branch
    N: <Name> ist ein Tag
    D: <Name> ist ein Zeitstempel
  • Datei "Entries"
    In "Entries" wird zu jeder Datei im Unterverzeichnis eine Zeile in folgendem Format abgelegt:
    ['D']/<Dateiname>/<Revision>/<Zeitstempel>['+conflict']/<CVS-Optionen>/<Tag>
    Das erste Zeichen ('D') ist optional. Ist es vorhanden, handelt es sich bei dem Eintrag um einen Deskriptor für ein Unterverzeichnis. Die folgenden Daten sind durch Schrägstriche getrennt. Zunächst wird der Dateiname angegeben, dann die Revision und der Zeitstempel im CVS-Repository. Dem Zeitstempel kann die Zeichenkette '+conflict' angefügt werden, um deutlich zu machen, dass die entsprechende Datei konfliktbehaftet ist. Die CVS-Optionen enthalten statische Informationen (z.B. '-kb' für binäre Dateien). Das letzte Datum gibt den Tag an, zu dem die Datei gehört.

Klassen

Die Klassen für den CVS-Versionsstand sind im Modul "admin" zu finden:

/eStudy/admin/classes/class.cvsversions.inc.php (Hauptklasse)
/eStudy/admin/classes/class.cvsexception.inc.php (Exception-Klasse, falls während der Aufbereitung der Informationen ein Fehler auftritt)

Der Unit-Test zur Haupt-Klasse befindet sich unter

/eStudy/admin/tests/test.class.cvsversions.inc.php

Links


--Kraemer-MKr 11:31, 18. Mär. 2007 (CET)