Softwarearchitektur-Management

Ähnliche Dokumente
...we make the invisible visible...

Werkzeugunterstützte Betrachtungen von Software-Qualität und -Architekturen

Di 5.2. Kontrolle über Architekturerosion und Codequalität bei 40 Mio Java LOC. Harald Doderer Thomas Schoen

Langlebige Softwarearchitekturen

Thomas Schoen hello2morrow GmbH. Six-Sigma für Software Architekten

...we make the invisible visible... Qualitätsanalyse, Code Comprehension und Reengineering

Ziele und Tätigkeiten von Architekten

Continuous Architecture Management

Continuous Architecture Management

Inhalt. Fragestellungen. ...we make the invisible visible... Analysen und deren Anwendung Erfahrungen

Keine technischen Schulden mehr!

Bundling auf Softwaremärkten Eine technische Sicht

Nachhaltigkeit durch regelmäßige Architekturprüfung Software-Architekturen überprüfen und erhalten

Validierung von SW-Architekturen - Erfahrungen beim Einsatz des Sotographen Dr. Carola Lilienthal Carola.Lilienthal@workplace-solutions.

Lehrstuhl für Datenverarbeitung. Technische Universität München. Grundkurs C++ Objektmodellierung. Grundkurs C++

Application Engineering Grundlagen für die objektorientierte Softwareentwicklung mit zahlreichen Beispielen, Aufgaben und Lösungen

15 Unified Modeling Language (UML) 7 UML und Java Informatik 2 (SS 07) 595

Universität Stuttgart Institut für Automatisierungstechnik und Softwaresysteme Prof. Dr.-Ing. M. Weyrich

11. Komponenten Grundlagen der Programmierung 1 (Java)

Vgl. Oestereich Kap 2.4 Seiten

Anwendungsentwicklung mit Java. Grundlagen der OOP, Vererbung, Schnittstellen, Polymorphie

Creational Patterns. Seminar Software-Entwurf. Thomas Liro WS 2004/05.

UML (Unified Modelling Language) von Christian Bartl

Kontinuierliche Architekturanalyse. in 3D

3-Tier-Architecture und J2EE

Software-Refactoring. 29. Mai 2013

Softwaretest von verteilten Echtzeitsystemen im Automobil anhand von Kundenspezifikationen

Erfahrungen mit kontinuierlichem Architektur- und Qualitätsmonitoring in einer großen Anwendungsfamilie im Bankenumfeld

Objektorientierte Programmierung OOP

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Gerüstbeispiel. Vererbungshierarchie: Typ 0

Software-Refactoring. 27. Mai 2015

Vorlesung Informatik II

vii Inhaltsverzeichnis 1 Einleitung 1

Reengineering und Refactoring von Softwarearchitekturen

Softwarequalität: Einführung. 15. April 2015

16 Architekturentwurf Einführung und Überblick

Inhaltsverzeichnis.

Agilität trifft Funktionale Sicherheit

Softwaretechnik 2015/2016

Lehrstuhl für Datenverarbeitung. Technische Universität München. Grundkurs C++ Objektmodellierung

Softwarearchitekten. Basiswissen für. dpunkt.verlag. Foundation Level

Sotographie Code-basierte Analyse, Bewertung und Sanierung komplexer ABAP-Systeme

Systematisches Testen der Funktionalität von Softwaresystemen. 17. Juni 2015

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik

Inhaltsverzeichnis. Teil I Grundlagen 1

Innere Klassen. Innere Klassen. Page 1. Lernziele: innere Klassen, statische geschachtelte Klassen, anonyme Klassen.

Selbstbestimmtes Lernen. Proinformatik III Objektorientierte Programmierung. Format. Inhalt. Buzzwords

Das Softwaresystem BASEMENT

Model-View-Controller

Die Zertifizierungsstelle der TÜV Informationstechnik GmbH bescheinigt hiermit dem Unternehmen

Langlebige Software-Architekturen

Abschlussvortrag Masterarbeit: Operationalizing Architecture in an agile Software Projec

Java kennt neben Klassen und Objekten auch das Konzept von Schnittstellen. (engl. Interfaces).

Einstieg in die Informatik mit Java

Objektorientierte und Funktionale Programmierung SS 2014

ISIS. beleuchten, was sich bisher im Dunkeln verbarg verbessern, was bisher im Argen lag

Architektur und Qualität. Tjard Köbberling

Design Pattern. Motivation, Beispiel Definition "Das" Buch der Gang of Four Ausführliches Beispiel: Facade Beispiele. Aufgabe

COPE COuPled Evolution of metamodels and models

Musterlösung zur Vorlesung Modellbasierte Softwareentwicklung Wintersemester 2014/2015 Übungsblatt 9

Ein Erfahrungsbericht beim Einsatz von generierenden Ansätzen im Vergleich zu generischen Lösungen

Einführung in die Programmierung

Innere Klassen. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

Quasar. Seminar "Beiträge zum Software Engineering" Freie Universität t Berlin. von Tichomir Jabarski

Lehrbuch der Objektmodellierung

CARL HANSER VERLAG. Erika Horn, Thomas Reinke. Softwarearchitektur und Softwarebauelemente Eine Einführung für Softwarearchitekten

Übungen Softwaretechnik I

Das Entwicklungsteam im agilen Prozess. Aufgaben der Software Architektur. Best Practices & Scrum Integration. Zusammenfassung & Ausblick

C++ - Variablen: Gültigkeit - Sichtbarkeit

Konzept / Architektur Diagramme

1.4! Einführung. Systemmodellierung. Methoden und Werkzeuge

Software Engineering. Produktivitätsfaktoren! Kapitel 18

Client/Server-Systeme

J. Reinier van Kampenhout Robert Hilbrich Hans-Joachim Goltz. Workshop Echtzeit Fraunhofer FIRST

Informationswirtschaft II Rational Unified Process (RUP)

Informationswirtschaft II

Die OSGi Service Plattform

Refactoring in kleinen und großen Projekten

Vorlesung Programmieren

Mit Legacy-Systemen in die Zukunft. adviion. in die Zukunft. Dr. Roland Schätzle

Quantität für Qualität

Softwarearchitekturen I Softwareentwicklung mit Komponenten

Modellgetriebene Entwicklungsprozesse in der Praxis - eine Bestandsaufnahme. Tillmann Schall, anaptecs GmbH

Motivation Grundlagen Technologien Manipulation Ecore Genmodell Demo Persistenz Notification Ausblick GMF Fazit / Quellen

Cloud Architektur Workshop

Softwarequalität und Softwarealterung. Anne Moormann Benedikt Scholz Michael Herbener

Durchgängiger System-/Software- Entwicklungsprozess in der Luftfahrt

Management von IT-Architekturen

Do 8.3. Schwarzweiss. Peter Hruschka. January 21-25, 2008, Munich, Germany ICM - International Congress Centre Munich

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Informatik II Übung 6 Gruppe 7

Statische Code-Analyse: Software-Metriken Fernstudium Master Wirtschaftsinformatik Formale Methoden

Inhaltsverzeichnis. Vorwort...XIII. Aufbau des Buches...

Anforderungsmanagement und modelbasierte Entwicklung

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

MISRA bzw. Programmierstandards steigern die Softwarequalität! - Ist das überhaupt möglich?

Die SOLID-Prinzipien Fünf Grundsätze für bessere Software

Enterprise JavaBeans Überblick

Die S.O.L.I.D-Prinzipien für C# Entwickler Thomas Claudius

Transkript:

Kontrolle über Architekturerosion durch Softwarearchitektur-Management Thomas Schoen hello2morrow GmbH, Software-Tomography GmbH 1

Innere (technische, strukturelle) Softwarequalität Wie gut ist die Software gebaut? zur Sicherstellung von Verstehbarkeit Änderbarkeit Erweiterbarkeit Wiederverwendbarkeit Testbarkeit Software-Architektur 2

Innere (technische, strukturelle) Softwarequalität Wie gut ist die Software gebaut? Die Antwort steht im Sourcecode! 3

Softwarearchitektur Stimmt der Architekturentwurf (Soll-Architektur) mit den Strukturen der implementierten Software (IST-Architektur) überein? 4

Was bedeutet "Softwarearchitektur"? Eine Softwarearchitektur definiert die grundlegenden Komponenten und deren Zusammenspiel innerhalb eines Softwaresystems. Diese Komponenten bilden eine Zerlegung des Gesamtsystems. Jedes Code-Artefakt (z.b. Datei) ist einer Architekturkomponente eindeutig zugeordnet. Der Architekturentwurf ist eine wesentliche (kritische und wichtige) Softwaredesign- Entscheidung. Sie wird in einem sehr frühen Projektstadium getroffen und ist später nur mit hohem Aufwand änderbar. Beim Architekturentwurf sind Kriterien entscheidend wie Erweiterbarkeit, Wartbarkeit, Wiederverwendbarkeit aber auch Stabilität, Fehlertoleranz, Performanz. 5

Architektur-Erosion Die IST-Struktur/Architektur des Projektcodes stimmt immer weniger mit der geplanten Architektur (SOLL-Architektur) überein Softwaresysteme erodieren zunehmend über die Projektlebensdauer Ein automatischer Prozess Gründe für Architektur-Erosion Zeitdruck führt zu Abkürzungen, die später nie durch saubere Lösungen ersetzt werden Verständnis/Wissen über das System und Projekterfahrung sind nicht überall im Team in gleicher Weise vorhanden. Verschärftes Problem -> Outsourcing Hacks: Architekturelle Vorgaben werden beim Implementieren ignoriert oder umgangen. Architekturverletzende Abhängigkeiten entstehen oft unbemerkt und bleiben dies auch für längere Zeit. Kopplungsgrad und Komplexität wachsen im Projekt oft schneller als man erwartet. Wenn man es bemerkt und den Überblick verliert, gibt es oft keinen Weg zurück. Dem Projektmanagement ist die innere Softwarequalität oft nicht wichtig: Black Box; wirkt sich erst mit Verzögerung aus; Zusammenhang oft unklar Es ist nicht möglich, alle Architekturverletzungen in einem Softwaresystem manuell zu erkennen. 6

Architektur-Erosion Symptome Symptome Hoher Kopplungsgrad Viele Zyklen 7

Technisch Architektur-Erosion Wieso ist das ein Problem? Systeme werden immer schwerer zu warten Verstehbarkeit Testbarkeit Seiteneffekte bei Änderungen/Erweiterungen Ökonomisch Es wird immer teurer Systeme zu warten, bis es ökonomisch nicht mehr sinnvoll ist. Forderung nach Redesign -> Neuimplementierung Ein Hauptgrund für überzogene Projekt- und Wartungsbudgets 8

Kosten durch Architektur-Erosion Kosten einer Erweiterungsmassnahme Steigen in architekturkonformen Systemen während des Lebenszyklus nur geringfügig. Steigen in erodierten Systemen mit Lebensdauer (und Fortschritt des Erosionsprozesses) kontinuierlich und deutlich an. Erodierte Systeme sind schwerer verstehbar und verursachen viele Seiteneffekte Dadurch dauert die Implementierung einer Erweiterung länger und wird teurer. Dadurch werden bei der Implementierung mehr Fehler eingeschleppt. Diese verursachen zusätzliche Kosten. Die Kosten unterscheiden sich häufig um mehr als den Faktor 2. Kosten für Erweiterung 70 60 50 40 30 20 10 Erweiterungsmassnahme erodiertes System Erweiterungsmassnahme architekturkonformes System 0 Projekt-Lebensdauer 9

Softwarearchitektur-Management Definition SOLL-Architektur Analyse IST-Architektur Abgleich von SOLL / IST- Architektur Anpassung / Erweiterung Architekturentwurf Planung der Code-Restrukturierung Regelmässig: Architekturmonitoring Werkzeugunterstützung Architekturverifikation am Entwicklerarbeitsplatz Implementierung 10

Statische Codeanalyse Welche Informationen kann ein Werkzeug aus dem Code herauslesen? Duplizierte Codeblöcke Verstöße gegen Codierungsregeln Verletzung von Namenskonventionen Entartete Objekte (zu große/kleine Methoden, Klassen, Packages) Besonders komplexe Objekte (zyklomatische Komplexität) Stark gekoppelte Objekte Ungenutzte Codesegmente Verstöße gegen OO-Prinzipien (entartete Vererbung, direkter Class- Member-Zugriff) Zyklische Abhängigkeiten auf Klassen-/Package-/Architekturebene Verletzung von Komponenten-Schnittstellen Architekturverletzungen (Verstöße gegen eine vorgegebene Softwarearchitektur) 11

Strukturanalyse des Quellcodes Werkzeuggestützte Statische Codeanalyse Im Code identifizierbare Artefakte Typen (Klassen, Interface-Klassen, Structs, Unions) Methoden, Attribute Funktionen, Variabeln Source Dateien, Directories Java Packages, C# Namespaces Code Referenzen 12

Abhängigkeiten / Benutzungsbeziehungen Abhängigkeiten zwischen beliebigen Artefakten: Vererbungsbeziehungen Call-Referenzen (Aufrufbeziehungen); auch polymorphe Lesezugriff auf Attribute/Variabeln Schreibzugriff auf Attribute/Variabeln Typverwendung bei der Definition von Attributen Beliebige andere Benutzung von Typen/Klassen 13

Aggregation auf höhere Abstraktionsebnen: Analyse auf Symbolebene 500.000 LOC 50.000 Symbole 14

Aggregation auf höhere Abstraktionsebnen: Analyse auf Klassen/Dateiebene 4.000 Klassen 15

Aggregation auf höhere Abstraktionsebnen: Analyse auf Paket/Verzeichnisebene 250 Packages 16

Aggregation auf höhere Abstraktionsebnen: Analyse auf Subsystemebene 20 Subsysteme 17

Aggregation auf höhere Abstraktionsebnen: Subsystemschnittstellen 18

Definition einer Softwarearchitektur Beispiel Schichtenmodell Strikte Schichtung durchbrochen (optional) Fachebene 2 Fachebene 1 Allgemeine Funktionen Aufwärtsreferenz zwischen vertikalen Schnitten Oberfläche Verletzung von Schnittstellen Schnittstelle Fachlogik Aufwärtsreferenz Datenhaltung Illegale Benutzungsbeziehungen: 19

Verfolgung illegaler Beziehungen: Zoomen bis in den Code Aufwärts-Referenzen Referenzen zwischen Schichten zwischen Subsystemen zwischen Packages zwischen Klassen/Dateien Bis zum Sprung an die entsprechende Quellcode-Stelle 20

Zyklische Strukturen LEVEL Element A 3 Element A Element B 2 Element B Element C 1 Element C cyclic acyclic 21

Nachteil zyklischer Strukturen LEVEL Element A 3 Element A Element B 2 Element B Element C 1 Element C cyclic acyclic Verstehbarkeit der Funktionalität/Rolle einer einzelnen Komponenten Testbarkeit einzelner Komponenten Wiederverwendbarkeit eingeschränkt Eine Impact Analyse ist problematisch und unsicher Isolierte Fehlerbehebung in einer Komponente nicht möglich 22

Praxisbeispiel: zyklische Struktur Erfahrung in grossen Projekten zeigt dass Zyklen die Wartbarkeit deutlich verschlechtern. erodierte Systeme durch das systematische Aufbrechen von Zyklen wieder wartbar gemacht werden können. 23

Vermeidung von zyklischen Strukturen Large-Scale C++ Software Design, John Lakos,1996: Cyclic physical dependencies in large, low-level subsystems have the greatest capacity to increase the overall cost of maintaining a system Cyclic physical dependencies among components inhibit understanding, testing and reuse Agile Software Development, Robert C. Martin, 2003: The dependencies between packages must not form cycles. Forderung für Software-Architekturmanagement Keine zyklischen Strukturen im Architekturentwurf Zyklen auf Packageebene möglichst vermeiden insbesondere über Subsystemgrenzen hinweg 24

Erfolgsfaktoren für Software-Architekturmanagement Unterstützung durch das Management Einen/mehrere Verantwortliche im Projekt Entwurf einer vollständigen, zyklenfreien Softwarearchitektur vor der Implementierungsphase Konsistenz zwischen Architektur- und physischer Codeebene: Package/Namespace-Strukturen, Namensschema Vernünftige Granularität der Codeeinheiten: Z.B. Packagegrösse Einsatz leistungsfähiger Werkzeuge zur Architekturanalyse Regelmässiges Monitoring der aktuellen Architektur Trendvergleich: Übersicht der Entwicklung der Architekturtreue über verschiedene Versionsstände hinweg Kontinuierliche Reparatur von Architekturverletzungen: Stoppen der Architekturerosion 25

www.software-tomography.ch 26