Christian Dietrich – Realisierung umfangreicher Softwareprojekte unter Linux
LIT 2007
Realisierung umfangreicher Softwareprojekte unter Linux
Dr. Christian [email protected]
Linux-Infotag – 24.03.07 – FH-Augsburg
Christian Dietrich – Realisierung umfangreicher Softwareprojekte unter Linux
LIT 2007
Wie gut eignet sich Linux für die Realisierung
umfangreicher Softwareprojekte?
Christian Dietrich – Realisierung umfangreicher Softwareprojekte unter Linux
LIT 2007
Inhalt➲ Einleitung
➲ SW-Entwurf / Design➔ UML➔ Entwurfsmuster (Design patterns)➔ Tools
➲ Implementierung / Dokumentation➔ Entwicklungsumgebungen➔ Compiler➔ Build Tools➔ C++ Libraries➔ Datenbankanbindung➔ Versionsverwaltungssysteme➔ Cruise Control➔ Statische Codeanalyse
➲ Fazit
Christian Dietrich – Realisierung umfangreicher Softwareprojekte unter Linux
LIT 2007
Aufgaben im SW-Lifecyle
➲ Anforderungsanalsye➲ Entwurf / Design➲ Implementierung / Dokumentation➲ Test (Unit Tests, Component Tests, ...)➲ Wartung und Pflege
Die Internen Abläufe eines Unternehmens müssen mit den Aufgaben im SW-Lifecycleharmonieren (Automotive SPICE, ...)!
Christian Dietrich – Realisierung umfangreicher Softwareprojekte unter Linux
LIT 2007
SW-Entwurf / Design
Christian Dietrich – Realisierung umfangreicher Softwareprojekte unter Linux
LIT 2007
UML
➲ Unified Modeling Language (UML) ist eine von der Object Management Group (OMG) entwickelte und standardisierte Sprache für die Modellierung von Software und anderen Systemen.
➲ Die UML definiert weiter grafische Notationen für diese Begriffe und für Modelle von statischen Strukturen und von dynamischen Abläufen
Christian Dietrich – Realisierung umfangreicher Softwareprojekte unter Linux
LIT 2007
Diagrammarten der UML➲ Strukturdiagramme
➔ Klassendiagramm➔ Kompositionsstrukturdiagramm➔ Komponentendiagramm➔ Verteilungsdiagramm➔ Objektdiagramm➔ Paketdiagramm
➲ Verhaltensdiagramme
➔ Anwendungsfalldiagramm (Use-Case o. Nutzfalldiagramm)➔ Aktivitätsdiagramm➔ Sequenzdiagramm➔ Kommunikationsdiagramm➔ Interaktionsübersichtsdiagramm➔ Zeitverlaufsdiagramm➔ Zustandsdiagramm
Christian Dietrich – Realisierung umfangreicher Softwareprojekte unter Linux
LIT 2007
UML Klassendiagramm
Christian Dietrich – Realisierung umfangreicher Softwareprojekte unter Linux
LIT 2007
Beispiel: MagicDraw
Christian Dietrich – Realisierung umfangreicher Softwareprojekte unter Linux
LIT 2007
UML-Tools
Sowohl freie als auch kommerzielle UML-Tools stehen unter Linux zur Verfügung.
➲ Umbrello➲ Eclipse UML➲ ArgoUML➲ ...
Einige unterstützen sogar die automatische Source-codegenerierung von Entwurfsmustern.
Bitte beachten:In den Folien werden immer nur die freien Tools aufgelistet.
Christian Dietrich – Realisierung umfangreicher Softwareprojekte unter Linux
LIT 2007
Entwurfsmuster (Design patterns)➲ Ein Entwurfsmuster (engl. design pattern)
beschreibt eine bewährte Schablone für ein Entwurfsproblem.
➲ Aus einem Entwurfsmuster kann direkt Code erzeugt werden.
➲ Objektorientierte Entwurfsmuster beschreiben allgemein Beziehungen und Interaktionen zwi-schen Klassen und Objekten.
Christian Dietrich – Realisierung umfangreicher Softwareprojekte unter Linux
LIT 2007
Entwurfsmuster (Design patterns)
➲ Vorteile:➔ Zeitersparnis (Anfangs zeitaufwendig, später jedoch
äußerst hilfreich).➔ Erhöhte Flexibilität.➔ Bessere Wiederverwendbarkeit des Codes.➔ Große UML-Diagramme (insbesondere Klassendia-
gramme) sind viel besser und schnelle lesbar.➔ Ähnliche Strukturen in der Softwarearchitektur
können direkt einem Pattern zugeordnet werden.
➲ Bitte beachten➔ Gutes SW-Design mit Entwurfsmustern ist keine
leichte Aufgabe und wird häufig nicht richtig umgesetzt!
Christian Dietrich – Realisierung umfangreicher Softwareprojekte unter Linux
LIT 2007
Typen von Entwurfsmustern
➲ Erzeugermuster (Creational patterns)➔ Fabrikmethode (Factory method)➔ Einzelstück (Singleton)
➲ Strukturmuster (Structural patterns)➔ Fassade (Facade)➔ Stellvertreter (Proxy)
➲ Verhaltensmuster (Behavioral patterns)➔ Befehl (Command)➔ Beobachter (Observer)➔ Vermittler (Mediator)
Christian Dietrich – Realisierung umfangreicher Softwareprojekte unter Linux
LIT 2007
Beispiel Vermittler (Mediator)
➲ Der Vermittler steuert die Kommunikation und das kooperative Verhaltens von Objekten (Kollegen).
➲ Der Vermittler wird verwendet wenn:➔ Gruppen von Objekte miteinander kooperieren und die
Objekte die miteinander kooperieren sich nicht kennen sollen oder können.
➲ Vorteile:➔ Die Koordination des kooperativen Verhaltens wird
zentral verwaltet.➔ Das Muster unterstützt eine lose Kopplung
zwischen den Kollegen.➔ Das Protokoll der Kollegen wird vereinfacht.
Christian Dietrich – Realisierung umfangreicher Softwareprojekte unter Linux
LIT 2007
Beispiel Vermittler (Mediator)
Christian Dietrich – Realisierung umfangreicher Softwareprojekte unter Linux
LIT 2007
Implementierung / Dokumentation
Christian Dietrich – Realisierung umfangreicher Softwareprojekte unter Linux
LIT 2007
Entwicklungsumgebungen
Viele freie als auch kommerzielle Entwicklungsum-gebungen stehen zur Verfügung:
➲ KDevelop➲ Eclipse (sehr flexibel)➲ Mono➲ ...
Entwicklungsumgebungen unter Linux nutzen meistkeinen eigenen Compiler und Debugger, sondern verwenden den GNU Compiler / Debugger.
Christian Dietrich – Realisierung umfangreicher Softwareprojekte unter Linux
LIT 2007
Christian Dietrich – Realisierung umfangreicher Softwareprojekte unter Linux
LIT 2007
GNU-Compiler➲ Standard Compiler vieler Systeme: Linux, BSD, Mac OS X,
NextStep, BeOS, ZETA, ...➲ Der GNU-Compiler besitzt einen leistungsfähigen Code-
optimierer. Dieser reduziert die Größe des Binärcodes und optimiert die Performanz.
➲ Durch das Frontend/Backend-Konzept eignet sich der GNU Compiler insbesondere für die Codeerstellung zahlreicher Hard-ware-Plattformen.
➔ Frontends sind sprachabhängig und erzeugen einen abstrak-ten Syntaxbaum. Fast alle modernen kompilierbaren Sprachen stehen bereit (C/C++, D, Objective-C, ADA, Fortran, Java).
➔ Backends implementieren die Schnittstellezur verwendeten Prozessor-Architektur.
➲ Nebenbei: Viele Codeoptimierungsverfahren optimierenden abstrakten Syntax-Baum. Dieser Teil des Compilers wird als Middleend bezeichnet.
Christian Dietrich – Realisierung umfangreicher Softwareprojekte unter Linux
LIT 2007
GNU-Compiler➲ Der GNU-Compiler unterstützt die plattformübergreifende SW-
Entwicklung:
➔ Häufig bei C/C++-Programmen für LINUX/UNIX.
➔ Quellcode enthält Anweisungen, die es erlauben, die Betriebssyste-munterschiede auszugleichen.
➔ Zahlreiche Hilfsmittel, z.B. GNU autoconf, automake
➔ Viele im Quellcode portable Programme stehen bereits in vorgefertig-ten Versionen für mehrere Plattformen bereit. Beispiele: Mozilla, Firefox, Thunderbird, GIMP, OpenOffice.
➔ Cross Compiler: Bei der Softwareentwicklung für Embedded Syste-me tritt häufig das Problem auf, dass das Embedded System nicht über genügend Ressourcen für das Entwicklungssystem (Compiler, Debugger, Profiler, ...) verfügt. Hier wird auf dem Entwicklungssystem ein Cross Compiler eingesetzt, der die Binaries für das Zielsystem (das Embedded System) erzeugt.
Christian Dietrich – Realisierung umfangreicher Softwareprojekte unter Linux
LIT 2007
GNU-Compiler / Standards➲ ANSI-C
Relativ einheitliche Implementierung auf verschiedenen Plattformen. Zusätzlich wird je-doch eine „Standard C Library“ benötigt.
➲ POSIX (Portable Operating System Interface for UNIX) Ein gemeinsam von der IEEE und der Open Group für Unix entwickeltes stan-dardisiertes Applikationsebeneninterface, das die Schnittstelle zwischen Ap-plikation und dem Betriebssystem darstellt.
➔ Basis-Definitionen (POSIX.1/IEEE 1003.1-2001): Eine Liste der im Standard benutzten Konventionen und Definitionen, zusätzlich noch eine Liste der bereitzu-stellenden C-Headerdateien
➔ Shell und Hilfsprogramme (POSIX.2/IEEE 1003.1-2001): Eine Liste der Hilfspro-gramme und der Shell
➔ Echtzeit-Erweiterungen (POSIX.4/IEEE 1003.1b-1993/IEEE 1003.1d-1999)➔ Thread-Erweiterungen (POSIX.4a/IEEE 1003.1c-1994)➔ System-Schnittstelle: Eine Liste der C-Systemaufrufe, die unterstützt
werden müssen
Christian Dietrich – Realisierung umfangreicher Softwareprojekte unter Linux
LIT 2007
GNU-Toolchain
➲ Die GNU-Toolchain stellt eine Sammlung von Entwicklungstools zur Verfügung:
➔ Compiler (gcc, g++)➔ Linker (ld)➔ Debugger (gdb)➔ Assembler (as)➔ Profiler (gprof)➔ ar, nm, objcopy, objdump, ranlib, strip, ...
Christian Dietrich – Realisierung umfangreicher Softwareprojekte unter Linux
LIT 2007
Optimierter Code➲ Der GNU Compiler unterstützt Optimierungsstrategien verschiedener Pro-
zessoren. ACHTUNG: Diese müssen auch vom Betriebssystem unterstützt werden, da dieses beim Wechsel zwischen Prozessen den Zustand der Register spei-chern muss.
➲ SIMD-Erweiterungen (Single Instruction, Multiple Data) wie MMX, SSE, SSE2, SSE3 und 3DNow erlauben, dass durch einen einzelnen Befehl, meh-rere Berechnungen, parallel ausgeführt werden.
➲ Durch Intrinsics-Funktionen können diese Erweiterungen auch ohne Inline-Assembler verwendet werden.
Ein Beispiel:
➲ Übersetzen mit SSE2 (ab Pentium 4)> g++ -msse2 -DUSE_INTRINSICS multiply.cpp -o multiply.sse2
➲ Übersetzen ohne Optimierung> g++ multiply.cpp -o multiply.std
Christian Dietrich – Realisierung umfangreicher Softwareprojekte unter Linux
LIT 2007
➲ Der Präprozessor übernimmt die beding-te Ersetzung des SSE2 optimierten Co-des.
Der optimierte Code wird durch den define USE_INTRINSICS eingeschaltet.
Christian Dietrich – Realisierung umfangreicher Softwareprojekte unter Linux
LIT 2007
Build Tools➲ Makefiles sind für viele Entwickler im C/C++-
Kontext ein ungeliebtes Stiefkind.
➲ Build Tools erleichtern das Erstellen von Make-files und lösen Abhängigkeiten selbstständig auf.
Statische als auch dynamische Bibliotheken werden in den Beschreibungsdateien definiert.
➲ JAM➲ QMake➲ GNU automake
Christian Dietrich – Realisierung umfangreicher Softwareprojekte unter Linux
LIT 2007
Build Tools
➲ Der Makefilegenerator qmake erzeugt aus einer plattformunabhängigen Projektdatei durch einen simplen Aufruf von qmake auf der Kommandozeile das plattformspezifische Makefiles.
Christian Dietrich – Realisierung umfangreicher Softwareprojekte unter Linux
LIT 2007
Build Tools
➲ Makefiles sollten in umfangreichen Projekten nicht automatisch von der Entwicklungsumgebung erzeugt werden.
➲ Der Build sollte unabhängig von der Entwick-lungsumgebung sein.
Christian Dietrich – Realisierung umfangreicher Softwareprojekte unter Linux
LIT 2007
Die GNU libc (glib-2, auch bekannt als libc-6)
➔ Ist sehr umfangreich, da sie mit der Intention entwickelt wurde, möglichst viele Standards für C-Libraries zu erfüllen.
➔ Ihre Verwendung in Anwendungsprogrammen führt daher zu einer hohen Maß an Portabilität.
➔ Die glibc erfüllt die folgenden Standards:● ANSI C● POSIX.1● Viele Funktionen von POSIX.2● Aufwärts kompatibel zu BSD 4.3 und 4.4● Viele Funktionen von System V (SVID)● GNU-eigene Erweiterungen
Libraries und Frameworks
Christian Dietrich – Realisierung umfangreicher Softwareprojekte unter Linux
LIT 2007
Libraries und Frameworks➲ C Bibliotheken
➔ GNU libc (existiert auch für Windows und Mac)➔ uClibc (für Embedded Systeme)➔ newLib (für Embedded Systeme)➔ Diet-libc (für Embedded Systeme)
➲ C++ Frameworks zur plattformunabhängigen Entwicklung➔ Qt (Windows, Linux, Mac)➔ Qt Embedded (für Embedded Systeme)➔ WxWidgets (Windows, Linux, Mac, Embedded)
➲ Grafiklibraries➔ PicoGUI (für Embedded Systeme)➔ MiniGUI (für Embedded Systeme)➔ MicroWindows (für Embedded Systeme)➔ FLTK (für Embedded Systeme)
Christian Dietrich – Realisierung umfangreicher Softwareprojekte unter Linux
LIT 2007
Libraries und Frameworks
Plattformunabhängigkeit durch Qt● Qt basiert auf C++ und ist vollständig objektorientiert● Qt unterliegt der GPL● Eine Closed Source Lizenz kann erworben werden.● Die grafische Benutzeroberfläche KDE basiert auf Qt!● Systemabhängige Bibliotheken zum Ausgleich der BS-
Unterschiede:➢ Qt/X11 für Linux/Unix (unterstützt viele Derivate)➢ Qt/Embedded (Qtopia) für embedded Linux➢ Qt/Windows für Microsoft Windows➢ Qt/Mac für Apple Macintosh
Christian Dietrich – Realisierung umfangreicher Softwareprojekte unter Linux
LIT 2007
Christian Dietrich – Realisierung umfangreicher Softwareprojekte unter Linux
LIT 2007
Christian Dietrich – Realisierung umfangreicher Softwareprojekte unter Linux
LIT 2007
Datenbankanbindung
➲ Fast alle gängigen Datenbanken stehen unter Linux zur Verfügung.
➲ Berkley DB (nicht SQL fähig)➲ Sybase➲ Firebird➲ PostgreSQL➲ mSQL➲ MySQL➲ SQLite➲ MaxDB➲ ...
Christian Dietrich – Realisierung umfangreicher Softwareprojekte unter Linux
LIT 2007
Datenbankanbindung
➲ ODBC (Open Database Connectivity) ist eine Standard-API für die Anbindung einer Anwendung an eine Datenbank.
➲ Die meisten DMS (Datenbank Management Systeme) unter-stützen die Anbindung durch einen ODBC-Treiber.
➲ Nebenbei: Qt stellt ein ODBC Plugin bereit.
Vorteile:➲ Typische Windows Anwendungen (beispielsweise Access)
können die Datenbank auf einem Linux-Server zugreifen.➲ Die Anwendung ist unabhängig von der Datenbank eines be-
stimmten Herstellers.
Christian Dietrich – Realisierung umfangreicher Softwareprojekte unter Linux
LIT 2007
Versionsverwaltungssysteme
➲ Der Quellcode wird auf einem Server durch das Versionsver-waltungssystem verwaltet.
➲ Alle Entwickler eines Projekts können einen aktuellen Sourcecode-Stand von Server holen (auschecken).
➲ Jeder Entwickler übertragt seine Änderungen in Form von Changelisten (mehrere Dateien) auf den Server (einchecken)
➲ Änderungen können zu einem späteren Zeitpunkt nach-vollzogen werden (diff).
Beispiele:
➲ Subversion➲ CVS➲ GIT➲ ...
Christian Dietrich – Realisierung umfangreicher Softwareprojekte unter Linux
LIT 2007
VersionsverwaltungssystemeHauptaufgaben eines Versionsverwaltungssystems:
➲ Protokollierungen der Änderungen: Es kann jederzeit nachvollzo-gen werden, wer wann was geändert hat.
➲ Wiederherstellung von alten Ständen einzelner Dateien: Somit können versehentliche Änderungen jederzeit wieder rückgängig gemacht werden.
➲ Archivierung der einzelnen Release-Stände eines Projektes: Da-durch ist es jederzeit möglich auf alle ausgelieferten Versionen zu-zugreifen.
➲ Koordinierung des gemeinsamen Zugriffs von mehreren Entwick-lern auf die Dateien.
➲ Gleichzeitige Entwicklung mehrerer Entwicklungszweige (engl. Branches) eines Projektes (z. B. stabile Release-Version und Entwicklerversion mit größeren, nicht getesteten Änderungen).
Christian Dietrich – Realisierung umfangreicher Softwareprojekte unter Linux
LIT 2007
Christian Dietrich – Realisierung umfangreicher Softwareprojekte unter Linux
LIT 2007
Christian Dietrich – Realisierung umfangreicher Softwareprojekte unter Linux
LIT 2007
Cruise Control Systeme➲ Werden auf einem eigenen Server installiert.
➲ Überwachen den Build des Projekts indem die ak-tuellen Sourcen kompiliert werden.
➲ Informieren die Entwickler über syntaktische Feh-ler via E-Mail.
Christian Dietrich – Realisierung umfangreicher Softwareprojekte unter Linux
LIT 2007
Statische Codeanalyse
➲ Der Quelltext wird einer Reihe formaler Prüfungen un-terzogen, bei denen bestimmte Sorten von Fehlern ent-deckt und behoben werden können.
➲ Erkennen von unsicherem Konstrukten bei der Verwendung von Programmiersprachen.
Beispiele:➲ Die Benutzung von Variablen bevor die Variablen zuge-
wiesen werden.➲ Bedingungen welche immer wahr/falsch sind.➲ Unbenutzte Rückgabewerte von Funktionen.
Tools:➲ Lint / SPLint (Secure Programming Lint)➲ ...
Christian Dietrich – Realisierung umfangreicher Softwareprojekte unter Linux
LIT 2007
Fazit➲ Der Vortrag hat aktuelle Methoden und Tools für
typische Arbeitsschritte in umfangreichen Soft-wareprojekten vorgestellt:
➔ Linux eignet sich hervorragend als Entwicklungssystem für komplexe Softwaresysteme.
➔ Für alle Tätigkeiten des Entwicklungsprozesses stehen komfortable Tools (meist sogar Open Source Tools) zur Verfügung.
➔ Das Herzstück (der GNU Compiler) ist äußerst flexibel und skalierbar einsetzbar, insbesondere bei der Entwicklung plattformunabhängiger Software.
➔ Weitere Flexibilität bringt die Entkopplung der Entwick-lungsumgebung vom Compiler, Debugger, Versionsverwaltungssystem, ... mit sich.