oose. Abhängigkeiten: Die Wurzel allen Übels im Softwareentwurf. Und wie Sie sie in der Java-Entwicklung behandeln...



Ähnliche Dokumente
Stefan Zörner: Beziehungskiste: Abhängigkeiten im Softwareentwurf planen und überwachen

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

teischl.com Software Design & Services e.u. office@teischl.com

Softwarearchitekturen dokumentieren - voll unagil? Stefan Zörner, oose Innovative Informatik GmbH Stefan.Zoerner@oose.de

Konzept Projekt Lisa

Übungen zur Softwaretechnik

RT Request Tracker. Benutzerhandbuch V2.0. Inhalte

Wann ist eine Software in Medizinprodukte- Aufbereitungsabteilungen ein Medizinprodukt?

(1) Mit dem Administrator Modul werden die Datenbank, Gruppen, Benutzer, Projekte und sonstige Aufgaben verwaltet.

Agile Vorgehensmodelle in der Softwareentwicklung: Scrum

Übungsklausur vom 7. Dez. 2007

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

16 Architekturentwurf Einführung und Überblick

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

Installation OMNIKEY 3121 USB

StuPro-Seminar Dokumentation in der Software-Wartung. StuPro-Seminar Probleme und Schwierigkeiten in der Software-Wartung.

robotron*e count robotron*e sales robotron*e collect Anmeldung Webkomponente Anwenderdokumentation Version: 2.0 Stand:

Risikogetriebene Softwarearchitektur. STEFAN TOTH Agile Bodensee

1 Einleitung. Lernziele. automatische Antworten bei Abwesenheit senden. Einstellungen für automatische Antworten Lerndauer. 4 Minuten.

Ist Excel das richtige Tool für FMEA? Steve Murphy, Marc Schaeffers

Fassade. Objektbasiertes Strukturmuster. C. Restorff & M. Rohlfing

Prozessbewertung und -verbesserung nach ITIL im Kontext des betrieblichen Informationsmanagements. von Stephanie Wilke am

Stellvertretenden Genehmiger verwalten. Tipps & Tricks

Mediumwechsel - VR-NetWorld Software

Java Script für die Nutzung unseres Online-Bestellsystems

BIF/SWE - Übungsbeispiel

ZENITY - Die Software für Ihre Unternehmens-Releaseplanung

Übung: Verwendung von Java-Threads

Free your work. Free your work. Wir wollen Ihnen die Freiheit geben, sich auf Ihr Geschäft zu konzentrieren.

Schnittstelle DIGI-Zeiterfassung

Internet Explorer Version 6

15 Social-Media-Richtlinien für Unternehmen!

SMART Newsletter Education Solutions April 2015

Autoformat während der Eingabe

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

SDD System Design Document

Die nachfolgende Anleitung zeigt die Vorgehensweise unter Microsoft Windows Vista.

Bauteilattribute als Sachdaten anzeigen

DELFI. Benutzeranleitung Dateiversand für unsere Kunden. Grontmij GmbH. Postfach Bremen. Friedrich-Mißler-Straße Bremen

Bernadette Büsgen HR-Consulting

Konzentration auf das. Wesentliche.

Installation von NetBeans inkl. Glassfish Anwendungs-Server

Fragebogen zur Diplomarbeit von Thomas Friedrich

Nachricht der Kundenbetreuung

Inhalt. 3.1 Der inkrementelle Entwurf im Überblick Flache Aufwandskurve Qualitätskriterien für den inkrementellen Entwurf...

Stapelverarbeitung Teil 1

Erweiterung AE WWS Lite Win: AES Security Verschlüsselung

Leichte-Sprache-Bilder

Programmieren in Java

Objektorientierte Programmierung. Kapitel 12: Interfaces

Übung 6: Feinentwurf. Prof. Dr. Dr. h.c. Manfred Broy Dr. Herbert Ehler, Martin Feilkas 6. Juli 2006 Bernd Spanfelner, Sebastian Winter

Software modular bauen

Einrichten des Elektronischen Postfachs

Seite 1 von 14. Cookie-Einstellungen verschiedener Browser

Die Orgadata AG ist ein stark expandierendes Software-Unternehmen aus Leer. Mit unserem System LogiKal

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

Nützliche Tipps für Einsteiger

Java Enterprise Architekturen Willkommen in der Realität

Erstellen einer digitalen Signatur für Adobe-Formulare

Der Wunschkunden- Test

PRESman. Presentation Manager. Reduzieren Sie nachhaltig die Kosten für das. Erstellen, Verwalten und Verteilen Ihrer

Sichere Anleitung Zertifikate / Schlüssel für Kunden der Sparkasse Germersheim-Kandel. Sichere . der

Einfach wie noch nie. Der mypackage-ansatz. Ihre Lösung zur automatisierten Client-Bereitstellung. mypackage im Überblick

TREND SEARCH VISUALISIERUNG. von Ricardo Gantschew btk Berlin Dozent / Till Nagel

etax.schwyz: Suche nach Steuerfalldateien

Qualität und Verlässlichkeit Das verstehen die Deutschen unter Geschäftsmoral!

Ihre Fragen unsere Antworten rund um die Fusion der Sparkassen Wesel und Dinslaken-Voerde-Hünxe. Mehrwert der Fusion. Das Wichtigste vorab:

Grundsätze für das Online-Marketing der TMB

Agiles Testen. Gedankensammlung. 17. November Patrick Koglin

oose. Was (noch) klassische Projekte von Scrum & Co lernen können eine empirische Studie

Software zur Anbindung Ihrer Maschinen über Wireless- (GPRS/EDGE) und Breitbandanbindungen (DSL, LAN)

SEMINAR Modifikation für die Nutzung des Community Builders

1. Loggen Sie sich mit Ihrem Benutzernamen in den Hosting-Manager (Confixx) auf Ihrer entsprechenden AREA ein.

DOKUMENTATION VOGELZUCHT 2015 PLUS

Arcavis Backend - Invoice Baldegger+Sortec AG

Einrichten des IIS für VDF WebApp. Einrichten des IIS (Internet Information Server) zur Verwendung von Visual DataFlex Web Applications

Flyer, Sharepics usw. mit LibreOffice oder OpenOffice erstellen

macs Support Ticket System

SCHRITT 1: Öffnen des Bildes und Auswahl der Option»Drucken«im Menü»Datei«...2. SCHRITT 2: Angeben des Papierformat im Dialog»Drucklayout«...

Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress.

Das System sollte den Benutzer immer auf dem Laufenden halten, indem es angemessenes Feedback in einer angemessenen Zeit liefert.

Fragebogen zur Anforderungsanalyse

Wo finde ich die Software? - Jedem ProLiant Server liegt eine Management CD bei. - Über die Internetseite

Handbuch. timecard Connector Version: REINER SCT Kartengeräte GmbH & Co. KG Goethestr Furtwangen

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Dokumentation Schedulingverfahren

Skript Pilotphase für Arbeitsgelegenheiten

Stand: Adressnummern ändern Modulbeschreibung

Programmieren einer Lüftungsanlage mit DDC-Suite Vorlagen Arbeiten mit dem Fupla

Was meinen die Leute eigentlich mit: Grexit?

Design Patterns 2. Model-View-Controller in der Praxis

Outlook Erstellen einer aus einer HTML - Vorlage INHALT

Projektmanagement in der Spieleentwicklung

Das Leitbild vom Verein WIR

Willkommen im Online-Shop der Emser Therme GmbH

Dokumentation für die software für zahnärzte der procedia GmbH Onlinedokumentation

Generelle Einstellungen

SSI WHITE PAPER Design einer mobilen App in wenigen Stunden

Transkript:

Abhängigkeiten: Die Wurzel allen Übels im Softwareentwurf. Und wie Sie sie in der Java-Entwicklung behandeln... Stefan Zörner (sz@de) Wien, den 16. Jänner 2013 Software Quality Days Stefan Zörner: Abhängigkeiten: Die Wurzel allen Übels im Softwareentwurf. Und wie Sie sie in der Java-Entwicklung behandeln... Das Planen von Abhängigkeiten ist zentraler Bestandteil der Strukturierung eines Softwaresystems. Hier werden grundlegenden Entscheidungen getroffen, die auf Qualitätsmerkmale wie Wartbarkeit und Portierbarkeit signifikante Auswirkung haben können. Leider oft negative. In vielen Fällen wird das Abhängigkeitsmanagement nicht bewusst betrieben, oder das Einhalten der Architektur nicht überwacht. In diesem Vortrag stelle ich diesen Problemraum speziell für die Java-Welt vor. Welche Auswirkungen hat hier der Einsatz von Komponentenmodellen (z.b. OSGi) oder Dependency Injection Frameworks (z.b. Spring oder CDI)? Ich diskutiere die Aufgaben beim Planen und Verwalten von Abhängigkeiten, zeige die in diesem Zusammenhang vorherrschenden Probleme bei Entwurf und Umsetzung, und wie Sie ihnen Herr werden Als Hilfsmittel kommen dabei Methodik aus der Softwarearchitektur zum Einsatz, und aktuelle, frei verfügbare Tools, die es Ihnen auch im Team und ohne zentrale Architektenrolle ermöglichen, entscheidende Ziele zu erreichen. 1

Stefan Zörner :: sz@de seit 2006 Berater und Trainer bei oose Vorher IBM, Mummert + Partner, Bayer AG, Schwerpunkte: Softwarearchitektur (Entwurf, Bewertung, Dokumentation) Java Technologien sz@de ::@StefanZoerner :: szoerner@apache.org Agenda 1 Warum Abhängigkeiten planen? 2 Abhängigkeiten in Java 3 Werkzeuge 4 Fazit 2

Agenda 1 Warum Abhängigkeiten planen? 2 Abhängigkeiten in Java 3 Werkzeuge 4 Fazit Beispiel: Ein Schach-Programm Zentrale Features Text-basiertes UI (reine Schach-Engine) Spiel gegen menschliche und Computergegner Vollständige Umsetzung der FIDE- Schachregeln Beherrscht taktische Elemente wie Gabel und Spieß Anbindung von Eröffnungsbibliotheken Implementierung in Java 3

Das Schach-Programm in Aktion Schach-Programm, Systemkontext 4

Nehmen wir mal an Sie wollen, dass die Engine auch nach anderen als den Standardregeln spielen kann, z.b. Schach 960 Räuber-Schach Atom-Schach Nehmen wir mal an Sie wollen das textbasierte Frontend durch ein grafisches ersetzen, zum Beispiel realisiert mit JavaFX 5

Nehmen wir mal an Sie wollen die Überprüfung auf gültige Züge in einer in Java realisierten graphischen Oberfläche zur Visualisierung von Hilfen wiederverwenden Nehmen wir mal an Sie wollen effizientere Datenstrukturen benutzen, um die Ermittlung des besten Zuges zu beschleunigen, oder in gleicher Zeit weiter vorausschauen zu können 6

Nehmen wir mal an Sie wollen das Schach-Programm oder Teile davon auf Android portieren Geforderte Qualitätsmerkmale 7

All diese konkreten Anforderungen sind die mit der aktuellen Lösung leicht möglich?? DokChess als Blackbox. 8

Das hängt vor allem hiervon ab: Wie ist die Lösung intern strukturiert? Das hängt vor allem hiervon ab: Welche Funktionalität wird wie angeboten? 9

Das hängt vor allem hiervon ab: Und wie hängen die Teile zusammen? Abhängigkeiten planen als Schlüssel. 21 Warum Abhängigkeiten planen? Agenda 2 Abhängigkeiten in Java 3 Werkzeuge 4 Fazit 10

Elemente des Java-Quelltextes Vergleichsweise kleine Teile Klassen, Schnittstellen, Aufzählungen, Annotationen Zwischen diesen entstehen durch jeweilige Verwendung Anhängigkeiten Wie Abhängigkeiten dazwischen entstehen 11

Pakete in Java Elemente zusammenfassen Jede Klasse etc. gehört zu genau einem Paket (Angabe via Schlüsselwort package, sonst default -Paket) Schutz bzgl. Sichtbarkeit ( package visible ) Zwischen Paketen gibt keine (direkten) Abhängigkeiten Sie entstehen durch Verwendung von Elementen aus unterschiedlichen Paketen Pakete lassen sich nicht schachteln Die Punktnotation (org.apache.) suggeriert das lediglich org.projectx.a und org.projectx.b haben nichts miteinander zu tun, auch nichts mit org.projcctx (. Teil des Namens) Module jar-files (+ Varianten, z.b. aus Java EE) Um Meta-Informationen angereichertes ZIP-File Verwendung als Deployment-Unit / Artefakt Keine Grenze bzgl. Sichtbarkeiten, keine expliziten Abhängigkeiten OSGi ( Bundles ) Echtes Modulkonzept, ausgereift, kein Java-Standard Sichtbarkeiten, explizites Deklarieren von Abhängigkeiten Project Jigsaw Modulkonzept für Java, Teil des OpenJDK-Projektes Sichtbarkeiten, explizites Deklarieren von Abhängigkeiten 12

Jigsaw frühestens in Java 9 Beispiel für Prinzipien: SOLID S O L I D Single Responsibility Principle (SRP) (Verantwortlichkeitsprinzip) Open/Closed Principle (OCP) (Offen/Geschlossen Prinzip) Liskov Substitution Principle (Liskov sches Substitutionsprinzip) Interface Segregation Principle (ISP) (Prinzip der Schnittstellentrennung) Dependency Inversion Principle (DIP) (Prinzip der Abhängigkeitsumkehrung) 13

Single Responsibility Principle Beispiel Zerlegung von DokChess nach Verantwortlichkeiten: Paketstruktur von DokChess 14

Open Closed Principle Beispiel offen für Erweiterungen, geschlossen gegen Änderungen Anforderung: Leicht um andere Spielregeln ergänzen können Ausgangssituation: Einführen einer Abstraktion (Strategy Pattern) Verwender nutzen nur noch das Interface Konkrete Spielregeln als Implementierungen Fragestellung: Wie kommen Verwender an eine konkrete Implementierung? Optionen: Fabrik, Dependency Injection 15

Fragestellungen Entwurfsalternativen Erhalten beide Verwender das selbe Interface? (vgl. Interface Segregation Principle) Wo platzieren wir das Interface? Bestehendes Paket? Neues Paket? Dependency Inversion Principle 16

Dependency Inversion Principle Entwurfsmuster Beispiel Anforderung Datenstrukturen leicht durch effizientere austauschen können Ausgangssituation: Alle Subsysteme sind vom Paket spiel mit den Klassen Figur, Zug, Feld, Stellung abhängig. 17

Abstract Factory (Ausschnitt) Einführen abstrakter Produkte und abstrakter Fabrik Verwender nutzen wieder nur Abstraktionen Fragestellungen Entwurfsalternativen In welche Pakte werden Abstraktionen und Standardimplementierungen der Produkte platziert? Bestehende Pakete? Neues Paket für Schnittstellen? Wie erhalten Verwender eine konkrete Fabrik? Fabrikfabrik? Dependency Injection? Auch hier: Antworten haben Einfluss auf die Abhängigkeiten auf Paketebene 18

Beispiel Architekturmuster: Schichten Anforderungen: Text UI leicht durch grafisches UI ersetzen können. Portierung auf Android Ausgangssituation (als Schichten): UI Logik Sieht grundsätzlich gut aus Was ist mit dem spiel-paket? Andere Pakete? Zusammenfassend: Aktivitäten Verantwortlichkeiten identifizieren (SRP) Klassen, Pakete Verwendung festlegen Abhängigkeiten Abstraktionen herausarbeiten (OCP) Schnittstellen definieren (ISP) Schnittstellen platzieren (DIP) Auffinden konkreter Implementierungen Schichten planen Richtung von Abhängigkeiten steuern (DIP) 19

31 Warum Abhängigkeiten planen? Agenda 2 Abhängigkeiten in Java 3 Werkzeuge 4 Fazit Planung Tools unterstützen beim Treffen der Entscheidungen (Entwurf) Festhalten der Entscheidungen (Struktur, Beziehungen) Visualisieren und Kommunizieren im Team Analoge Tools Einsatz ohne Hürden, z.b. in Workshops Festhalten von Entscheidungen in Bildern Digitale Tools Große Bandbreite von Zeichenprogramm bis UML-Tool Möglich: Modelle, Diagrammen als Sichten aufs Modell 20

Analoge Werkzeuge Modellierungswerkzeuge 21

Umsetzung Tools unterstützen beim Überprüfen, ob die Struktur eingehalten wird Verhindern von unerwünschten Verwendungen Verhindern von zyklischen Abhängigkeiten Konkrete Vertreter für Java (Auswahl, freie Tools) CheckStyle http://checkstyle.sourceforge.net/ JDepend http://clarkware.com/software/jdepend.html JDepend Out of the box Kommandozeilenwerkzeug, um Berichte zu Metriken und Abhängigkeiten zu generieren (Text, XML) Integration in Ant, Maven, zur automatischen Generierung API, um zum Beispiel JUnit-Tests zu schreiben, die Abhängigkeiten überwachen können 22

Beispiel: Berichte im Text-Format Beispiel: Verwendung der JDepend-API 23

Show-Case zur Verwendung der API Definition erlaubter Abhängigkeiten in einem Textfile JUnit-Test analysiert mit JDepend hält gefundene Abhängigkeiten gegen erlaubte aus Datei schlägt Alarm bei unerlaubter Abhängigkeit Beispiel CheckStyle Checkstyle-Regel für Imports Checkstyle kann auf Verwendung von Imports prüfen zugehöriges Modul wird XML konfiguriert: 24

Integration in Eclipse Analyse Tools unterstützen beim Rekonstruieren von Strukturen Verifizieren von Annahmen bzgl. Abhängigkeiten Planen von Refactorings Konkrete Vertreter für Java (Auswahl, freie Tools) CodePro Analytics (Google) https://developers.google.com/java-dev-tools/ JMove http://www.jmove.org/ 25

Beispiele CodePro Analytics, JMove Überwachung Tools unterstützen beim Automatischen, kontinuierlichen Ausführen der Tests Kommunikation der Ergebnisse im Team Konkrete Werkzeuge in Java (Auswahl, freie Tools) Build Tools (Maven, Gradle, ) Continous Integration Tools (Jenkins, ) Sonar http://www.sonarsource.org/ 26

Beispiel Sonar 41 Warum Abhängigkeiten planen? Agenda 2 Abhängigkeiten in Java 3 Werkzeuge 4 Fazit 27

Fazit Prinzipien und Muster helfen Ihnen dabei, Abhängigkeiten zwischen Softwareteilen zu planen, und Ihr System geeignet zu strukturieren. Tools unterstützen Sie dabei, die geplanten Abhängigkeiten im Java Quelltext umzusetzen und einzuhalten. Entscheidend: Ein gutes Verständnis Ihrer Qualitätsanforderungen Nur so können Sie entscheiden, ob eine Abstraktion oder ein Muster vom Aufwand oder der Komplexität her angemessen überhaupt zielführend ist. 28

Beispiel Schach-Engine Konsequente Anwendung von Entwurfsprinzipien führt zu einer flexiblen, erweiterbaren Lösung. Wartbarkeit Portabilität Effizienz Gleichzeitig: Ausbalancieren mit Anforderungen bzgl. Effizienz erforderlich. Sonst ist die Spielstärke der Engine gefährdet, und damit ggf. der Gesamterfolg. Eine (!) Definition für Softwarearchitektur Softwarearchitektur ist die Menge der Entwurfsentscheidungen, die, wenn falsch getroffen, Dein Projekt zum Scheitern bringen kann. * (Eoin Woods) * Wörtlich: Software architecture is the set of design decisions which, if made incorrectly, may cause your project to be cancelled. 29

Literatur zum Thema Agile Software Development. Principles, Patterns, and Practices von Robert C. Martin Gebundene Ausgabe, 529 Seiten Verlag Prentice Hall Computer (2002) ISBN-13: 978-0135974445 Java Application Architecture. Modularity Patterns with Examples Using OSGi von Kirk Knoernschild Taschenbuch, 384 Seiten Verlag: Addison Wesley (2012) ISBN-13: 978-0321247131 Vielen Dank!?? Ich freue mich auf Ihre Fragen! Stefan.Zoerner@de 30