1 Letzte Aktualisierung: 29. Juli 2004 Programmierung im Grossen Bertrand Meyer 2 Vorlesung 22: Konfigrationsmanagement Bernd Schoeller bernd.schoeller@inf.ethz.ch Themenübersicht 3 Motivation Was ist Konfigurationsmanagement? Wofür brauchen wir Konfigurationsmanagement? Konfigurationsmanagement Aspekte des Konfigurationsmanagements Begriffe und Definitionen Probleme und Lösungen Werkzeugunterstützung Erhältliche SCM Werkzeuge Beispiele: CVS, Bugzilla, Xenofarm Zusammenfassung 1
Über Eure Zukunft 4 Ihr werdet nie alleine arbeiten. Andere werden Euren Code durcheinander bringen. Ihr werdet anderer Leute Code durcheinander bringen. Ihr werdet nie ein (grösseres) Programm von null auf entwickeln. Die Software an der Ihr arbeitet war schon da als in die Firma angefangen habt. Die Software an der Ihr arbeitet wird noch da sein wenn ihr die Firma verlasst. ICH NEHME WETTEN DARAUF AN! KM: Die lange Version 5 Configuration management is unique identification, controlled storrage, change control, and status reporting of selected intermediate work products, product components, and products during the life of a system. Anne Mette Jonassen Hass: Configuration Management; Principles and Practice KM: Die kurze Version 6 Konfigurationsmanagement beschäftigt sich mit der Rolle von ZEIT innerhalb der Softwareentwicklung. 2
Raum 7 Raum root_class.e readme.txt gui/ gui/main_window.e gui/dialog_window.e net/ net/ftp_protocol.e... Ein System, welches Dokumente über einem Raum verwaltet ist ein FILE SYSTEM. Raum und Zeit 8 Raum Copyright Info verbessert Neuer Knopf hinzugefügt Verbesserte Dokumentation root_class.e readme.txt gui/ gui/main_window.e gui/dialog_window.e net/ net/ftp_protocol.e... Verzeichnis erzeugt Protokol implementiert Fehler im Handshake behoben Time Ein System, welches Dokumente über Raum und Zeit verwaltet nennt man ein REPOSITORY. Dokumente 9 Konfigurationsmanagement verwaltet nicht nur Quellcode, sondern auch: Binäre Versionen der Software (Builds) Anforderungs- und Analysedokumente Entwurfsdokumente, UML-Diagramme Testergebnisse Informationen über die Systemkonfiguration... 3
Konfigurationsmanagement ist darüber... 10... zu wissen wer was an welchem Dokument in in der Vergangenheit geändet hat.... es zu ermöglichen, dass unterschiedliche Personen and unterschiedlichen Plätzen zur gleichen Zeit an dem selben Satz von Dokumenten arbeiten können.... zu einer alten Version zurückzugehen wenn man erkennt dass der eingeschlagene Weg der falsche war.... verfolgen der Softwarequalität über die Zeit und um software regression zu verhindern. Versionierung 11 Versionen geben eine einzigartige zeitabhängige Indentifikation für jedes Dokument. Die Auswahl geeigneter Namensschemen ist die Basis für den erfolgreichen einsatz von Konfigurationsmanagement. Es können unterschiedliche Ebenen von Namenschemata in einem Projekt benutzt werden. Beispiele: Versionen für schriftliche Dokumente: REQDOC-20040103-R4 Versionen für den Quellcode: 1.1, 1.2, 1.3, 1.4, 1.4.1,... Versionen fur die binären Builds: 610, 611, 612,... Änderungsmanagement (CM) 12 CM muss aufzeichnen WELCHES Dokument sich verändert hat. WAS sich verändert hat. WER diese Änderung gemacht hat. WANN die Änderung gemacht wurde. Die Geschichte der Änderungen sollte sichtbar gemacht werden. Änderungen sollten rückgängig gemacht werden können. Es sollte möglich sein, ein Dokument zu einem bestimmten Zeitpunkt zu betrachten. 4
Ansichten 13 Zeit T DATEI A DATEI B 1.0 1.1 1.2 1.3 1.0 1.1 1.2 DATEI C 1.0 1.1 1.2 1.3 1.4 1.5 Ansicht zum Zeitpunkt T Kopfversion 14 Time DATEI A DATEI B 1.0 1.1 1.2 1.3 1.0 1.1 1.2 DATEI C 1.0 1.1 1.2 1.3 1.4 1.5 Kopf = Ansicht zum Zeitpunkt Kopf Branching 15 Die Erstellung verschiedener Versionen von einem gegebenen Satz von Dokumenten nennt man BRANCHING (oder GABELUNG): 1.0 1.1 1.2 1.3 1.1.1 1.1.2 1.1.3 5
Zusammenfügung 16 Das zusammenführen von Versionen, welche über eine Zeit unabhängig voneinander entwickelt wurden nennt man MERGING: 1.0 1.1 1.2 1.3 1.4 1.1.1 1.1.2 1.1.3 Verteilte Entwicklung 17 Entwickler 1 Repository Entwickler 2 Checkout Checkout Commit Commit Konflikt Binäre Builds 18 Es gibt unterschiedliche Ebenen von binären Builds: Current, but not Tägliche (Nächtliche) Builds reliable. Integrations Builds Stabile Builds Abgabe Alpha Release Beta Release Release Candidate Not current, but reliable. Official Release 6
Regression Testing 19 Regression Testing überprüft Features die schon in alten Versionen funktioniert haben, ob sie auch in neuen Versionen funktionieren. Eine Testfolge wird zusammen mit der Software entwickelt um deren Korrektheit zu überprüfen. Diese Testfolge wird auf jeder geänderten Version laufen gelassen um zu überprüfen, ob die Elemente noch funktionieren. Regression Test sind normalerweise Teil des Commit Processes oder des täglichen Build. Bug-Tracking 20 Bug-Tracking ist der oberbegriff für die Infrastruktur welche Fehlermeldungen aufnimmt, verwaltet und an die entsprechenden Entwickler weiterleitet. Die Anzahl und Qualität der Fehlermeldungen ist normalerweise eine Mass für die Qualität der Software. CM: Terminologie 21 Repository, Commit, Update, Checkout, Head Branch/Fork, Merge Conflicts, Resolving Conflicts Tag, Label Release, Build Test Cases, Test Suite, Regression Tests 7
Werkzeuge für Konfigurationsmanagement 22 Software Configuration Management (SCM) CVS, Subversion (Open Source) ClearCase (Rational) Bug-Tracking Bugzilla (Open Source) Täglicher Build Xenofarm (Open Source) Tinderbox (Open Source) Die meisten Projekte haben individuelle Software CVS 23 Bekanntestes SCM Werkzeug. http://www.cvshome.org Schlüssel für die meisten Open-Source Projekte und vieler Einsatz in Unternehmen. Basiert auf RCS (Revision Control System) Command-line program (!) Grafische Benutzerschnittstelle: WinCVS (Windows) / GCVS (Unix) Integration in Eclipse und viele andere IDEs CVS (forts.) 24 Eigenschaften von CVS: Zentrales Repository Checkout erzeugt eine Kopie der Dateien auf der lokalen Maschine. Versionierung auf Dateiebene Verteiltes Arbeiten über das Internet mit dem PSERVER (unsicher) oder SSH (sicher) Protokoll. Kann mit Binär- und ASCII-Dateien arbeiten, ist aber nicht sehr effizient mit Binärdateien. Kennt primitive Problemlösungsstrategien für Konflikte. 8
Bugzilla 25 Open Source Bug-Tracking Werkzeug http://www.bugzilla.org/ Entwickelt für die Mozilla Browser Suite Web-Basiertes Interface Bugzilla (forts.) 26 Xenofarm 27 System für einen täglichen Build. http://xenofarm.tigris.org/ Entwickelt für Projekt mit vielen Zielplattformen. Verwendet in: ArgoUML Pike Python Automatische Scripte verteilen den Quellcode auf Build-Maschinen. Startet den Compilationsprozess und eine Anzahl von Testläufen. 9
Xenofarm (forts.) 28 Zusammenfassung 29 IchhabenurkeinenkleinenÜberblicküber Konfigurationsmanagement gegeben. Jedes Softwareprojekt sollte es benutzen. Jedes Softwareprojekt sollte es von anfang an benutzen. Ein grosses Langzeitprojekt ohne es ist Wahnsinn. Konfigurationsmanagement kann durch geeignete Werkzeuge unterstützt werden. Aber der Schlüssel zum erfolgreichen Einsatz von Konfigurationsmanagement liegt in der Disziplin derbenutzereszuverwenden. 10