Software Engineering Build Management und Dokumentation



Ähnliche Dokumente
Das Build-Tool ANT ETIS SS05

Kurzanleitung zu XML2DB

Eclipse und Java Einheit 06: Building Eclipse Projete mit Ant

ANT. Kurzvortrag von Manuel Schulze.

Software-Engineering Grundlagen des Software-Engineering

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Einführung in Javadoc

JCoverage. Uni Kassel Projektarbeit Software Engineering Markus Pilsl & Marko Medved

Wie konfiguiriert man Eclipse (mit oder ohne Plugin) Erich Ehses

Software-Engineering und Optimierungsanwendungen in der Thermodynamik

Das Build Tool Ant. Sebastian Mancke,

Ant - das Java Build-Tool

Einführung in die Informatik Tools

Übung: Verwendung von Java-Threads

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Buildsystem. Maven & Scons. Controls Entwicklungsforum Januar 2012

Software Engineering Klassendiagramme Assoziationen

25 Import der Beispiele

Anleitung zur Webservice Entwicklung unter Eclipse

Software Engineering Interaktionsdiagramme

PROJEKTVERZEICHNIS EINRICHTEN

Python SVN-Revision 12

1. Zeilenendkommentare: // geklammerte Kommentare: /*... */ 3. Dokumentationskommentare: /**... */

Erreichbarkeit von Klassenelementen. Daten verstecken und kapseln

Java: Vererbung. Teil 3: super()

Java Entwicklung für Embedded Devices Best & Worst Practices!

FTP-Server einrichten mit automatischem Datenupload für

LEHRSTUHL FÜR DATENBANKEN

Sonnenfinsternis in der Technischen Redaktion

Anleitung zur Installation und Verwendung von eclipseuml 2.1.0

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Inhaltsverzeichnis. 1 Einleitung. Literatur. 1.1 CVS (Concurrent Version System) [Pru03, Zee02, Ced05]

Die Dateiablage Der Weg zur Dateiablage

Installationsanleitungen

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java

ECLIPSE PLUG-IN. Redwood Anwendertage 2015

Entwicklungswerkzeuge

Testen mit JUnit. Motivation

Softwareentwicklung Dokumentation mit JavaDoc

Datensicherung und Wiederherstellung

B) Klassenbibliotheken Turtle und Util (GPanel, Console) installieren Ein Unterverzeichnis classes auf der Festplatte erstellen, z.b.

Backup der Progress Datenbank

Automatisierte Erstellung von Software-Builds und -dokumentationen. Teil 1

Hex Datei mit Atmel Studio 6 erstellen

Support-Tipp Mai Release Management in Altium Designer

Tritt beim Aufruf ein Fehler aus, so wird eine MessageBox mit dem Fehlercode und der Kommandozeile angezeigt.

Planung für Organisation und Technik

Virtueller Campus. Virtueller Campus Horw mit interaktiver Steuerung. HowTo: Externe Bibliotheken

Installation von NetBeans inkl. Glassfish Anwendungs-Server

MailUtilities: Remote Deployment - Einführung

OP-LOG

Dieses Tutorial gibt eine Übersicht der Form Klassen von Struts, welche Besonderheiten und Unterschiede diese aufweisen.

2. ERSTELLEN VON APPS MIT DEM ADT PLUGIN VON ECLIPSE

Java Einführung Programmcode

WhiteStarUML Tutorial

Artikel Schnittstelle über CSV

B) Klassenbibliotheken Turtle und Util (GPanel, Console) installieren Ein Unterverzeichnis classes auf der Festplatte erstellen, z.b.

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Enterprise java beans step-by-step

Abschnitt 12: Strukturierung von Java-Programmen: Packages

Die Programmiersprache Java. Dr. Wolfgang Süß Thorsten Schlachter

Nachklausur Programmieren / Algorithmen und Datenstrukturen 1

Babeș-Bolyai Universität Cluj Napoca Fakultät für Mathematik und Informatik Grundlagen der Programmierung MLG5005. Modulare Programmierung

Installation und Inbetriebnahme von Microsoft Visual C Express

Ant in Eclipse Starthilfe

SEP 114. Design by Contract

Installationsanleitung für Magento-Module

Entwicklungsumgebungen. Packer, Vagrant, Puppet. Alexander Pacnik Mannheim,

Software Engineering Klassendiagramme Einführung

Eclipse 3.0 (Windows)

Kleines Handbuch zur Fotogalerie der Pixel AG

Multimedia im Netz. Wintersemester 2011/12. Übung 10. Betreuer: Verantwortlicher Professor: Sebastian Löhmann. Prof. Dr.

Windows 7 Winbuilder USB Stick

Bundlemaker project. BundleMaker project state: initialized Parse

Kurzanleitung zu. von Daniel Jettka

KEIL software. Inhaltsverzeichnis UPDATE. 1. Wichtige Informationen 1.1. Welche Änderungen gibt es?

Qt-Projekte mit Visual Studio 2005

Installation des GeoShop Redirector für Apache (Stand ) ================================================================

Maven 2 Softwareprojekte mit Kultur

Auto-Provisionierung tiptel 30x0 mit Yeastar MyPBX

Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken.

1. License Borrowing Verfahren

Vorkurs C++ Programmierung

Visual Basic Express Kompilieren mit Skripten

1 Installation. 1.1 Die Java-Laufzeitumgebung. 1.2 PXLab. Um PXLab benutzen zu können benötigt man die Java Platform, diese kann man unter

Version 0.3. Installation von MinGW und Eclipse CDT

Installation einer C++ Entwicklungsumgebung unter Windows --- TDM-GCC und Eclipse installieren

KURZANLEITUNG CYBERDUCK MIT CLOUD OBJECT STORAGE

Unigraphics Schnittstelle entfernen

Programmierung für Mathematik (HS13)

Eclipse Equinox als Basis für Smart Client Anwendungen. Christian Campo, compeople AG, Java Forum Stuttgart 2007

Client-Server-Beziehungen

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

LabTech RMM. Integration von Teamviewer. Vertraulich nur für den internen Gebrauch

Skripte. Beispiel. M. Fyta Computergrundlagen 73/93

Starten Sie Eclipse: Hier tragen sie Ihr Arbeitsverzeichnis ein. Zu Hause z.b. c:\workspace.

Nuetzlicher Kleinkram

Datensicherung. Mögliche Vorgehensweisen:

Einführung in Eclipse und Java

Transkript:

Software Engineering Build Management und Dokumentation Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1

Wiederholung In Zeitpunkt einem Aktivität neu angelegten svn-repository t1 Datei "Anwendung.java" erstmalig hochgeladen (committed) werden t2 Datei zu "Test.java" den erstmalig im hochgeladen Folgenden (committed) genannten t3 Geänderte Datei "Anwendung.java" commited Zeitpunkten t4 Geänderte Datei die "Anwendung.java" folgenden commited Aktivitäten t5 Geänderte Datei "Test.java" commited ausgeführt: t6 Für den aktuellen Stand wird ein Tag "V1" erstellt t7 t8 t9 t10 t11 t12 Geänderte Datei "Test.java" commited Nun wird für Testzwecke ein Zweig "Z1" erstellt Im Zweig: Geänderte Datei "Test.java" commited Im Zweig: Geänderte Datei "Test.java" commited In der Hauptentwicklungslinie: Geänderte Datei "Anwendung.java" commited Im Zweig: Geänderte Datei "Anwendung.java" commited 2

Entscheidungen im Projekt Ordnerstruktur des Projekts Wo liegen die Quelltexte? Wo liegen die Binaries? Wohin kopiert man Ressourcen wie Konfigurationsdateien, Grafiken Wo liegen die Tests? Wo liegen Bibliotheken, wie benennt man sie? Wie geht man mit Abhängigkeiten (dependencies) um? Wie benennt man Klassen, Interfaces, Packages, usw.? Wie wird der Code dokumentiert? Wie wird Logging durchgeführt? Wie wird Persistenz umgesetzt? Nach: Schatten et al, Best Practice Software Engineering. Spektrum Akademischer Verlag 2010. 3

Hilfsmittel Konventionen Code-Konventionen Konventionen für Ordnerstrukturen, Dokumentation usw. Tools und Frameworks IDE (Entwicklungsumgebung, Integrated Development Environment) Syntax-Highlighting, Überprüfung mancher Konventionen, Code-Quality-Checks Z. B. Checkstyle, SourceMonitor Dokumentationstools Z. B. Java Doc Logging-Tools Z. B. java.util.logging, log4j Persistenzframeworks Z. B. Hibernate 4

Build-Management: Warum Automatisierung? Wiederkehrende Aufgaben in der Implementierung Kompilieren Post- und Preprocessing Dokumentation generieren Deployment auf Test-Server Tests ausführen Während der Entwicklung häufig zu wiederholen, z. T. täglich oder öfter Manuelle Durchführung Aufwändig Mögliche Fehlerquelle Nicht eindeutig reproduzierbar Nach: Schatten et al, Best Practice Software Engineering. Spektrum Akademischer Verlag 2010. 5

Automatisierung des Build-Prozesses Automatisierbare Schritte (Beispiele) Validierung von Sourcecode Code-Generierung (z. B. Konfigurationsdateien, Deployment-Deskriptor) Automatisierte Code-Quality-Checks Kompilieren Dependency-Management Verwaltung benötigter Bibliotheken (für die Kompilierung, zur Auslieferung) Post-Processing von Binaries (z. B. für Aspekt-orientierte Programmierung) Ausführen von Tests, Erstellen von Test-Reports Generieren von Dokumentation (z. B. Javadoc, Webseiten, ) Zusammenstellen der Software für die Auslieferung Verpacken der Software in Installationsdateien oder Archiven Hochladen auf einen Server Nach: Schatten et al, Best Practice Software Engineering. Spektrum Akademischer Verlag 2010. 6

Build-Tool Beispiel: Apache Ant Es gibt zahlreiche Build Tools, z. B. make hauptsächlich in der C/C++ -Entwicklung eingesetzt Ant und Maven für die Java-Entwicklung Ant ist die Abkürzung für Another Neat Tool Frei verfügbar, in Java geschrieben Verwendet XML-basierte Skripte Eingebaute Unterstützung für eine Reihe häufig benötigter Aufgaben Erweiterbar Eingebaute Tasks Java-Anwendungen kompilieren Javadoc-Dokumentationen generieren Archive erzeugen Dateien kopieren und Löschen etc. XML-Dateien validieren Sourcecode aus Versionsmanagement-Systemen auschecken JUnit-Tests durchführen 7

Ant Überblick Ant verwendet eine XML-Datei zur Konfiguration, normalerweise build.xml Ant builds enthalten: Task Tasks Targets Target Atomare Aufgabe, z. B. Kompilieren Zusammenfassung von Tasks Man kann Abhängigkeiten von anderen Targets definieren Ant kümmert sich darum, dass die Targets in der richtigen Reihenfolge ausgeführt werden 8

Ant: Nutzung Über die Kommandozeile In Eclipse integriert 9

Beispiel eines Ant-Skripts(1) Es soll ein Skript erstellt werden, das die folgenden Aufgaben durchführt: 1. Die Verzeichnisse build, docs, dist löschen 2. Die Verzeichnisse build, docs, dist neu anlegen 3. Den Java-Code kompilieren 4. Die Javadoc-Dokumentation generieren 5. Die Java-Klassen in eine ausführbare jar-datei packen 10

Beispiel eines Ant-Skripts(2) Anlegen einer build.xml-datei im Projekt-Verzeichnis: wird. Jedes Build-File hat genau ein Projekt Name des default-target, das ausgeführt wird, wenn ant ohne target-parameter aufgerufen Verzeichnis, auf das sich alle relativen Pfade beziehen. Properties entsprechen Variablen <?xml version="1.0"?> <project name="ant-test" default="main" basedir="."> <!-- Sets variables which can later be used. --> <!-- The value of a property is accessed via ${} --> <property name="src.dir" value="src" /> <property name="build.dir" value="build" /> <property name="dist.dir" value="dist" /> <property name="docs.dir" value="docs" /> Verwendung von Properties Tasks <!-- Deletes the existing build, docs and dist directory--> <target name="clean"> <delete dir="${build.dir}" /> <delete dir="${docs.dir}" /> <delete dir="${dist.dir}" /> </target> Targets <!-- Creates the build, docs and dist directory--> <target name="makedir"> <mkdir dir="${build.dir}" /> Beispiel von Lars Vogel: Apache Ant Tutorial, <mkdir dir="${docs.dir}" /> http://www.vogella.com/articles/apacheant/article.html <mkdir dir="${dist.dir}" /> </target> (leicht modifiziert) 11

Beispiel eines Ant-Skripts(3) Abhängigkeiten: Das target compile ist von clean und makedir abhängig. Daher führt Ant automatisch zuerst diese beiden anderen Targets aus. Für komplexere Angaben zu einem Task gibt es eigene XML- Tags. <!-- Compiles the java code --> <target name="compile" depends="clean, makedir"> <javac srcdir="${src.dir}" destdir="${build.dir}"> </javac> </target> <!-- Creates Javadoc --> <target name="docs" depends="compile"> <javadoc packagenames="src" sourcepath="${src.dir}" destdir="${docs.dir}"> <!-- Define which files / directory should get included, we include all --> <fileset dir="${src.dir}"> <include name="**" /> </fileset> </javadoc> </target> <!--Creates the deployable jar file --> <target name="jar" depends="compile"> <jar destfile="${dist.dir}\ant-test.jar" basedir="${build.dir}"> <manifest> <attribute name="main-class" value="test.main" /> </manifest> </jar> </target> <target name="main" depends="compile, jar, docs"> <description>main target</description> </target> Abhängig vom target compile Das am Anfang als default angegebene target, das beim Ausführen von Ant automatisch durchgeführt wird. Aufgrund der Abhängigkeiten werden alle anderen definierten targets vorher ausgeführt. </project> Beispiel von Lars Vogel (siehe vorige Folie) 12

Ausführung Buildfile: C:\Workspace\Ant-Test\build.xml clean: [delete] Deleting directory C:\Workspace\Ant-Test\build [delete] Deleting directory C:\Workspace\Ant-Test\docs [delete] Deleting directory C:\Workspace\Ant-Test\dist makedir: [mkdir] Created dir: C:\Workspace\Ant-Test\build [mkdir] Created dir: C:\Workspace\Ant-Test\docs [mkdir] Created dir: C:\Workspace\Ant-Test\dist compile: [javac] Compiling 4 source files to C:\Workspace\Ant-Test\build [javac] Creating empty C:\Workspace\Ant-Test\build\math\package-info.class jar: [jar] Building jar: C:\Workspace\Ant-Test\dist\ant-test.jar docs: [javadoc] Generating Javadoc [javadoc] Javadoc execution [javadoc] Loading source file C:\Workspace\Ant-Test\src\math\MyMath.java... [javadoc] Loading source file C:\Workspace\Ant-Test\src\math\Sums.java... [javadoc] Loading source file C:\Workspace\Ant-Test\src\math\package-info.java... [javadoc] Loading source file C:\Workspace\Ant-Test\src\test\Main.java... [javadoc] Constructing Javadoc information... [javadoc] Standard Doclet version 1.6.0_30 [javadoc] Building tree for all the packages and classes... [javadoc] Building index for all the packages and classes... [javadoc] Building index for all classes... main: BUILD SUCCESSFUL Total time: 2 seconds 13

Häufig genutzte Tasks Dateisystem-Tasks mkdir, copy, move, delete, zip, unzip, tar, untar Java-Tasks javac, java, jar, javadoc Versionsmanagement-Systeme Testen cvs, perforce, Für Subversion gibt es eine Erweiterung: svnant junit, junitreport Ausführen externer Programme exec Weitere mail, ftp 14

Continuous Integration - Prinzipien Nur ein Sourcecode-Repository im Projekt, mit dem alle arbeiten Automatisierter Build Automatisierte Tests Jeder Entwickler sollte mindestens einmal täglich seine Änderungen in das Repository committen Der Build sollte schnell ablaufen, so dass häufige Builds möglich sind Z. B. nur geänderte Sourcen kompilieren Automatisiertes Deployment Der Build sollte wenigstens einmal täglich auf einem neutralen Rechner automatisiert ausgeführt werden Neutraler Rechner: Kein Entwicklungsrechner, entspricht dem Zielsystem Die Build- und Testergebnisse werden z. B. auf einer generierten Intranetseite dem gesamten Projekt zur Verfügung gestellt Nach: Schatten et al, Best Practice Software Engineering. Spektrum Akademischer Verlag 2010 und http://martinfowler.com/articles/continuousintegration.html 16

Dokumentation mit Javadoc Nutzen Sie die Möglichkeiten von Dokumentationstools wie Javadoc Verwendung von Doc Comments im Quelltext /** * Hier steht der Kommentar, der * mehrere Zeilen überspannen kann. */ /** Einzeiliger Kommentar */ 17

Berücksichtigte Dateien Javadoc erstellt Dokumentationen aus Quellcodedateien Package-Beschreibungen Overview-Dateien ( overview.html ) Diverse weitere Dateien Erzeugt eine strukturierte HTML-Dokumentation, wie sie von der Java API-Dokumentation bekannt ist. 18

Quellcodedateien Doc Comments können vor Klassen Attributen Konstruktoren Methoden stehen Sie müssen aber direkt vor der jeweiligen Deklaration stehen 19

Dokumentation von packages In einer Datei package-info.java (oder package.html) Beispiel: Nutzung von HTML-Tags Inline-Tag Tag-Section mit Block Tags /** * Provides the classes necessary to create an * applet and the classes an applet uses * to communicate with its applet context. * <p> * The applet framework involves two entities: * the applet and the applet context. * An applet is an embeddable window (see the * {@link java.awt.panel} class) with a few extra * methods that the applet context can use to * initialize, start, and stop the applet. * * @since 1.0 * @see java.awt */ package java.lang.applet; Ein Doc Kommentar besteht aus einer Beschreibung gefolgt von einer Tag- Section. Beide sind optional, können aber nur einmal und nur in dieser Reihenfolge vorkommen. Der erste Satz der Beschreibung ist wichtig. Er erscheint in der Übersichtsdarstellung- Package-Deklaration Quelle: http://docs.oracle.com/javase/7/ docs/technotes/tools/windows/javadoc.html 20

Dokumentation von Klassen /** * A class representing a window on the screen. * For example: * <pre> * Window win = new Window(parent); * win.show(); * </pre> * * @author Sami Shaio * @version 1.15, 13 Dec 2006 * @see java.awt.basewindow * @see java.awt.button */ class Window extends BaseWindow {... } Quelle: http://docs.oracle.com/javase/7/ docs/technotes/tools/windows/javadoc.html 21

Dokumentation von Methoden Wichtig ist die Dokumentation von öffentlichen Methoden, die von anderen Entwicklern genutzt werden sollen. Sie sollten anhand der Beschreibung erkennen können, was man der Methode übergeben muss, was sie tut, und was sie zurückgibt. Für jeden Parameter: Name und Beschreibung Beschreibung der Rückgabe Welche Exceptions werden unter welchen Bedingungen geworfen? /** * Returns the character at the specified index. An index * ranges from <code>0</code> to <code>length() - 1</code>. * * @param index the index of the desired character. * @return the desired character. * @exception StringIndexOutOfRangeException * if the index is not in the range <code>0</code> * to <code>length()-1</code>. * @see java.lang.character#charvalue() */ public char charat(int index) {... } Quelle: http://docs.oracle.com/javase/7/ docs/technotes/tools/windows/javadoc.html 22

Dokumentation von Attributen /** * The X-coordinate of the component. * * @see #getlocation() */ int x = 1263732; Quelle: http://docs.oracle.com/javase/7/ docs/technotes/tools/windows/javadoc.html 23

Javadoc Tags (Auswahl) @author name @deprecated text @exception klassenname beschreibung @param name beschreibung @return beschreibung @see reference @since versions-bezeichnung @throws klassenname beschreibung @version versions-bezeichnung {@link package.class#member label} Autor(en) Das Element ist veraltet und sollte nicht mehr benutzt werden Exception und unter welchen Bedingungen sie geworfen wird Parameter mit Name und Beschreibung der Bedeutung und erlaubter Werte Rückgabewert mit Beschreibung der Bedeutung und möglicher Werte Verweis. Mögliche Angaben: String, url, package.class#methode Seit dieser Version ist das Element in der Software enthalten Synonym zu exception Version der Software, zu der der Code gehört Ähnlich @see, aber inline-link im Text 24

Javadoc-Unterstützung in Eclipse Automatisch generierte Kommentar- Gerüste /** * @author allweyer * */ public class Sums { } /** * @param n1 * @param n2 * @return */ public int add(int n1, int n2){ return n1 + n2; } Kommentar- Templates unter Preferences > Java > Code Style > Code Templates > Comments Erzeugen von Attribut- oder Methoden- Kommentar-Gerüsten über das Kontext- Menü Source > Generate Element Comment (Alt Shift-J) 25

Javadoc-Generierung in Eclipse 26

Javadoc Java API Dokumentation Selbst generiertes Javadoc 27

Wie kann man die Dokumentation automatisch erzeugen? <javadoc destdir="docs/api" author="true" version="true" use="true" windowtitle="test API"> <packageset dir="src" defaultexcludes="yes"> <include name="com/dummy/test/**"/> <exclude name="com/dummy/test/doc-files/**"/> </packageset> <doctitle><![cdata[<h1>test</h1>]]></doctitle> <bottom><![cdata[<i>copyright 2000 Dummy Corp. All Rights Reserved.</i>]]></bottom> <tag name="todo" scope="all" description="to do:"/> </javadoc> 28

Aufgabe Überlegen Sie fünf Aspekte, die schlechten Code ausmachen, d. h. Code der schlecht verständlich ist schlecht wartbar ist schlecht wiederverwendbar ist schlecht testbar ist fehleranfällig ist wenig performant ist 29

Hinweise zur Aufgabe Allgemein auf Code-Konventionen hinweisen Benennungen Verständlichkeit Englisch / Deutsch Einheitliche Benennungen, Einrückungen, Klammerung etc. Reihenfolgen Nutzung von Exceptions Kommentierung Strukturierung (kleine, übersichtliche Methoden, lose Kopplung etc.) Keine Duplizierung Maßnahmen Konventionen aufstellen Einhaltung überprüfen (Tools) Code Reviews / Pair Programming 30