Programmverstehen 1: Der erste Kontakt mit dem System. Dr. Thorsten Arendt Marburg, 27. November 2014

Ähnliche Dokumente
Programmverstehen 1: Der erste Kontakt mit dem System. Dr. Thorsten Arendt Marburg, 19. November 2015

Agile Vorgehensmodelle in der Softwareentwicklung: Scrum

Konfigurationsmanagement und Evolution: Änderungsverwaltung und Repository-Analyse. Dr. Thorsten Arendt Marburg, 13. November 2014

Konfigurationsmanagement und Evolution: Änderungsverwaltung und Repository-Analyse. Dr. Thorsten Arendt Marburg, 12. November 2015

Software Systems Engineering

Warum sich das Management nicht für agile Softwareentwicklung interessieren sollte - aber für Agilität


Agiles Design. Dr.-Ing. Uwe Doetzkies Gesellschaft für Informatik mail:

DER SELBST-CHECK FÜR IHR PROJEKT

Programmverstehen 2: Wie ist das System-Design? Dr. Thorsten Arendt Marburg, 04. Dezember 2014

Die Bundes-Zentrale für politische Bildung stellt sich vor

Fragebogen ISONORM 9241/110-S

Software Projekt 2 / Gruppe Knauth Lernziele:

16 Architekturentwurf Einführung und Überblick

Gründe für fehlende Vorsorgemaßnahmen gegen Krankheit

Die Wasser App.

Migrationsstrategien. Dr. Thorsten Arendt Marburg, 22. Januar 2015

Software Engineering. Bibliographisches Institut & F. A. Brockhaus AG, Mannheim; Spektrum Akademischer Verlag GmbH, Heidelberg, 2003

2. ERSTELLEN VON APPS MIT DEM ADT PLUGIN VON ECLIPSE

Business-Rule-Management als Instrument des Software-Reengineering

Ein Blick voraus. des Autors von C++: Bjarne Stroustrup Conrad Kobsch

Internet Explorer Version 6

10 Jahre agile Softwareentwicklung Wie erwachsen sind wir geworden?

Agile Softwareentwicklung

Softwaretechnik. Fomuso Ekellem WS 2011/12

Versionsverwaltung mit SVN

Markup-basiertes Spezifikationsund Anforderungsmanagement in agilen Softwareprojekten

Taking RM Agile. Erfahrungen aus dem Übergang von traditioneller Entwicklung zu Scrum

Praktische Erfahrungen beim Einsatz des Vorgehensmodells "SCRUM" bei AGFA HealthCare

Wir erledigen alles sofort. Warum Qualität, Risikomanagement, Gebrauchstauglichkeit und Dokumentation nach jeder Iteration fertig sind.

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

REQUIREMENTS ENGINEERING KONSTRUKTIVE QS REQUIREMENTS ENGINEERING 1

Termin-Umfragen mit Doodle

Wir nehmen Aufgaben und Ideen wahr. Wir suchen Lösungen zu Ideen.

Individuelle Erweiterung des generierten Codes. 16. Januar 2013

Softwarequalität: Zusammenfassung und Ausblick. 17. Juli 2013

Informationsblatt zur Anmeldung Abschlusspräsentation und zum Präsentationsportfolio (WS2015/16)

Übung: Verwendung von Java-Threads

Qualitätserlebnis statt Qualitätssicherung. Eine Mehrfachfallstudie agiler Teams

Agile Software Development

GRS SIGNUM Product-Lifecycle-Management

Übungsklausur vom 7. Dez. 2007

Anleitung Selbststudium

In diesem Tutorial lernen Sie, wie Sie einen Termin erfassen und verschiedene Einstellungen zu einem Termin vornehmen können.

Erstellen eines Formulars

Wir beraten Sie. Wir unterstützen Sie. Wir schaffen Lösungen. Wir bringen Qualität. Wir beraten Sie. Wir unterstützen Sie. Wir schaffen Lösungen

Interview zu Stage

Agile Software-Entwicklung im Kontext der EN50128 Wege zum Erfolg

BPM im Kontext von Unternehmensarchitekturen. Konstantin Gress

C++11 C++14 Kapitel Doppelseite Übungen Musterlösungen Anhang

Eclipse Plugins für die komfortablere Verwendung von ibatis SQLMaps

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

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

40-Tage-Wunder- Kurs. Umarme, was Du nicht ändern kannst.

Objektorientierter Software-Entwurf Grundlagen 1 1. Analyse Design Implementierung. Frühe Phasen durch Informationssystemanalyse abgedeckt

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

Albert HAYR Linux, IT and Open Source Expert and Solution Architect. Open Source professionell einsetzen

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

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

Softwareentwicklungsprozess im Praktikum. 23. April 2015

Professionelle Seminare im Bereich MS-Office

tentoinfinity Apps 1.0 EINFÜHRUNG

Der Kopf ist rund, damit das Denken die Richtung

Was ist PDF? Portable Document Format, von Adobe Systems entwickelt Multiplattformfähigkeit,

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

Veranstaltungsbelegung in QIS/LSF -- Leitfaden für BW-Studierende --

Anleitung Typo3-Extension - Raumbuchungssystem

Unsere Produkte. Wir automatisieren Ihren Waren- und Informationsfluss. Wir unterstützen Ihren Verkaufsaußendienst.

GeoPilot (Android) die App

Wie gestaltet man Online-Umfragen mit SurveyMonkey?

TTS - TinyTimeSystem. Unterrichtsprojekt BIBI

SMART Newsletter Education Solutions April 2015

Proseminar: Website-Managment-System. NetObjects Fusion. von Christoph Feller

Chancen agiler Softwareentwicklung. Dipl.-Inform. Henning Wolf Geschäftsführer der akquinet agile GmbH

Checkliste zur Planung einer Webseite

Projektmanagement. Vorlesung von Thomas Patzelt 9. Vorlesung

Das System für Ihr Mitarbeitergespräche

MORE Profile. Pass- und Lizenzverwaltungssystem. Stand: MORE Projects GmbH

Carolo Knowledge Base

Agile Softwareentwicklung mit Scrum

Scrum. Übung 3. Grundlagen des Software Engineerings. Asim Abdulkhaleq 20 November 2014

Version smarter mobile(zu finden unter Einstellungen, Siehe Bild) : Gerät/Typ(z.B. Panasonic Toughbook, Ipad Air, Handy Samsung S1):

Requirements-Traceability in der industriellen Praxis Ziele und Einsatz

Erfolgreiche Realisierung von grossen Softwareprojekten

Arbeit zur Lebens-Geschichte mit Menschen mit Behinderung Ein Papier des Bundesverbands evangelische Behindertenhilfe e.v.

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

4D Server v12 64-bit Version BETA VERSION

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

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

Glaube an die Existenz von Regeln für Vergleiche und Kenntnis der Regeln

Blumen-bienen-Bären Academy. Kurzanleitung für Google Keyword Planer + Google Trends

SEP 114. Design by Contract

Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten

Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress.

Tipps und Tricks zu Netop Vision und Vision Pro

Hilfe, mein SCRUM-Team ist nicht agil!

Das Pflichtenheft. Dipl.- Ing. Dipl.-Informatiker Dieter Klapproth Ains A-Systemhaus GmbH Berlin

Catherina Lange, Heimbeiräte und Werkstatträte-Tagung, November

Bauteilattribute als Sachdaten anzeigen

FUTURE NETWORK REQUIREMENTS ENGINEERING

Transkript:

Programmverstehen 1: Der erste Kontakt mit dem System Dr. Thorsten Arendt Marburg, 27. November 2014

Überblick Was ist Forward-, Reverse- und Re-Engineering? Was sind Re-Engineering Patterns? Wie nähere ich mich einem unbekannten Softwaresystem? Die Richtung festlegen Der erste Kontakt Erstes Verstehen Erkennen des Designs Mehr Detailverständnis 2 Software-Evolution WS 2014/2015

Forward-Engineering Forward Engineering is the traditional process of moving from high-level abstractions and logical, implementation-independent designs to the physical implementation of a system. Die traditionelle Softwareentwicklung von den Anforderungen zur Implementierung. Verwendung eines Vorgehensmodells bzw. eines bestimmten Softwareentwicklungsprozesse meist iterativ, z.b. Spiralmodell von Boehm oder V-Modell XT oft (insbesondere in OSS) agil, z.b. Scrum, XP Abnehmendes Abstraktionsniveau [Demeyer et al.] 3 Software-Evolution WS 2014/2015

Reverse Engineering Reverse Engineering is the process of analyzing a subject system to identify the system s components and their interrelationships and create representations of the system in another form or at a higher level of abstraction. Entgegengesetzte Richtung zum Forward Engineering Die Analyse eines Softwaresystems mit dem Ziel, das System- Design zu erkennen. Anwendung von Reverse Engineering beim Versuch, die Arbeitsweise der Software zu verstehen als Vorbereitung eines Re-Engineering, z.b. durch Re-Dokumentieren der Software oder Identifizierung potentieller Probleme Zunehmendes Abstraktionsniveau [Demeyer et al.] 4 Software-Evolution WS 2014/2015

Informationsquellen im Reverse Engineering Lesen der vorhandenen Dokumentation Lesen des Quellcodes Anwendung der Software Interviews mit den Benutzern und/oder Entwicklern Implementieren und Ausführen von Testfällen Erstellen und Analysieren von (Ausführungs-) Traces Benutzung von Werkzeugen zum Erstellen von abstrakteren Ansichten des Quellcodes und bestimmter Traces Verlaufsanalyse der Versionierung der Software 5 Software-Evolution WS 2014/2015

Re-Engineering Reengineering... is the examination and alteration of a subject system to reconstitute it in a new form and the subsequent implementation of the new form. [Demeyer et al.] Transformation einer konkreten Implementierung in eine andere konkrete Implementierung Währenddessen werden abstrakte Artefakte erstellt Re-Engineering ist Reverse Engineering, Evolution und Forward Engineering Fragestellung: Was muss geändert und was muss ersetzt werden? Dabei treten häufig ähnliche technische Probleme auf 6 Software-Evolution WS 2014/2015

Der Weg kann steinig sein Im Großen Unzureichende Dokumentation Keine gute Architektur Zu wenig Modularität Duplizierter Code Duplizierte Funktionalität Im Kleinen Falsche Verwendung von Vererbung Fehlende Vererbung Operationen in falschen Klassen Verletzung von Kapselungen Klassen als Auffanglager 7 Software-Evolution WS 2014/2015

Forward-, Reverse- und Re-Engineering [Demeyer et al.] 8 Software-Evolution WS 2014/2015

Re-Engineering Patterns Patterns wurden ursprünglich in der Architektur eingesetzt, um verschiedene physikalische Strukturen systematisch zu entwickeln Jeder Aspekt wird als wiederkehrendes Muster dargestellt Anwendung einer auf die spezifischen Gegebenheiten zugeschnittenen generellen Lösung Erste Anwendung in der Softwareentwicklung durch Beschreibung wiederkehrender Lösungen für Design-Probleme (Design Patterns) Aber auch: Anwendung in Design- und Entwicklungsprozess Re-Engineering Patterns als wiederkehrende Lösungen für Probleme bei der Änderung bestehender Softwaresysteme 9 Software-Evolution WS 2014/2015

Gruppierung von Re-Engineering Patterns [Demeyer et al.] 10 Software-Evolution WS 2014/2015

Setting Direction: Die Richtung festlegen Probleme Zu viele Details: technische und prozessspezifische Wie sollen die Prioritäten gesetzt werden? Kommunikation mit dem anwesenden bzw. abwesenden Entwicklerteam Schwierige Entscheidungen: Einpacken, Ändern oder Neuschreiben von problematischen Altkomponenten Zu weitreichendes Re-Engineering 11 Software-Evolution WS 2014/2015

Grundsätze festlegen Prioritäten im Team festlegen Management möchte geringe Re-Engineering-Kosten. Nutzer möchten bessere Funktionalität. Entwickler möchten einen einfachen Job, aber den Job auch nicht verlieren. Wer ist wofür zuständig? Kann bezüglich der Re-Engineering-Aufgaben eventuell am Anfang noch nicht geklärt werden. Aber: Alle sind für die Evaluation (Testen, Debugging, etc.) zuständig. Zumindest ein Teammitglied sollte den Überblick über die Systemarchitektur behalten. 12 Software-Evolution WS 2014/2015

Mit welchen Problemen sollten wir starten? Mit den Problemen, die den Anwendern besonders wichtig sind. Wie erkennen wir, was wichtig ist? Das Geschäftsmodell erkennen Messbare Ziele bestimmen (z.b. bessere Antwortzeiten, schneller mit neuen Features auf dem Markt, etc.) Change Logs erzählen, welche Aktivitäten die wichtigsten waren. Was, wenn das wichtigste Problem zu groß ist? Zerteile es in kleinere, die in kurzer Zeit bearbeitet werden können. 13 Software-Evolution WS 2014/2015

Weitere Richtungs-Patterns Löse Probleme, nicht Symptome Anwender haben ihre eigene Sicht auf das System. Such das Problem hinter den Symptomen. Was nicht kaputt ist, sollte nicht angefasst werden. Kaputt ist, was nicht korrekt funktioniert, oder den Anforderungen nicht gerecht wird. Auch wenn es nicht schön ist Such eine einfache Lösung Besser eine einfache, spezifische Lösung als eine generelle, komplexe Lösung Synchronisiere das Team Kurze regelmäßige Treffen, um Informationen und Probleme auszutauschen sowie die weitere Richtung zu besprechen 14 Software-Evolution WS 2014/2015

Zusammenhang von Richtungs-Patterns [Demeyer et al.] 15 Software-Evolution WS 2014/2015

Gruppierung von Re-Engineering Patterns [Demeyer et al.] 16 Software-Evolution WS 2014/2015

First Contact: Der erste Kontakt Problem Softwaresysteme sind häufig groß und Zeit ist kostbar. Wie nähert man sich einem System möglichst effizient? Über das System reden Diskussion mit den Entwicklern Interview während einer Systemdemonstration Das System anschauen Lies den gesamten Code in einer Stunde! Überflieg die Dokumentation! Kompilation des Systems 17 Software-Evolution WS 2014/2015

Über das System reden: Diskussion mit den Entwicklern In welchem Zustand ist das Projekt? Typische Fragen: Was war der einfachste/schwierigste Bug in letzter Zeit? Wie werden Bugs/Features gesammelt/priorisiert? Wer entscheidet was? Wie funktioniert die Qualitätssicherung? Wer ist seit wann im Team? Wie gut ist der Code/die Dokumentation? 18 Software-Evolution WS 2014/2015

Lies den gesamten Code in einer Stunde! Voraussetzungen: Die Programmiersprache ist bekannt. Die Evolutionsaufgaben sind klar. Begleitende Fragen: Ist das Re-Engineering möglich? Welche Module (Pakete, Klassen) sind wichtig für die gestellten Evolutionsaufgaben? Gibt es Code Smells? Welche Teile sollten weiter untersucht werden? Ergebnis ist ein kurzen Bericht über die gewonnenen Eindrücke. 19 Software-Evolution WS 2014/2015

Checkliste für den ersten Code-Kontakt Was ist die Paketstruktur? Test-Suiten geben über die Funktionalität von Modulen Aufschluss. Abstrakte Klassen und Methoden zeigen Designentscheidungen. Klassen oben in der Hierarchie zeigen Abstraktionen, untere Klassen Variationen Singleton Patterns zeigen Konstanten des Systems Kommentare beschreiben Designentscheidungen, sind aber nicht immer zuverlässig. 20 Software-Evolution WS 2014/2015

Überflieg die Dokumentation! Begleitende Fragen: Welche Teile sind nützlich? Welche nicht? Für wen ist welche Dokumentation geschrieben? Schreib einen kurzen Bericht über die gewonnenen Informationen! Liste der nützlichen Teile (Anforderungsspezifikation, gewünschte Features, wichtige Constraints, Designmodelle, Benutzer- /Entwicklerhandbuch) Wie aktuell sind sie? (Versionsnummer, Datum) 21 Software-Evolution WS 2014/2015

Die Software anwenden Problem Welche sind die typischen Benutzungsszenarien? Welche Features sind relevant, welche nicht? Vorgehen Einen Benutzer das System demonstrieren lassen. Ein Video anschauen/ein Tutorial lesen Das System selbst benutzen. 22 Software-Evolution WS 2014/2015

Zusammenhang von Kontakt-Patterns [Demeyer et al.] 23 Software-Evolution WS 2014/2015

Beispiel: Evolutionsaufgabe für EMF Refactor 1. Entferne die Möglichkeit eines Preview bei Ausführung eines Refactorings. Grund: Die baumbasierte Darstellung der Differenzen ist bei grafischen oder textuellen Modellen schwer zu verstehen 2. Füge einem Refactoring eine Beschreibung hinzu. Bisher: Bis auf einen aussagekräftigen Namen bietet ein Refactoring zur Zeit keine Beschreibung seines Zweckes bzw. seiner Funktionsweise an. 3. Ergänze den Generierungsprozess eines Refactorings um die Möglichkeit, die Henshin-Dateien neu anzulegen. Bisher: Die Henshin-Dateien müssen bereits vorhanden sein 24 Software-Evolution WS 2014/2015

Architektur von EMF Refactor (1) Specification Language Generation module Application module metrics, smells, refactorings extension points Eclipse Modeling Framework (EMF) 25 Software-Evolution WS 2014/2015

Architektur von EMF Refactor (2) 26 Software-Evolution WS 2014/2015

Architektur von EMF Refactor (3) 27 Software-Evolution WS 2014/2015

Eclipse Repositories von EMF Refactor Core: allgemeine Dinge, wie z.b. Menus Je ein Repository für die unterstützten Techniken (Metrics, Smells, Refactoring) Examples: Konkrete Techniken für UML 2.5 und Ecore-Modelle 28 Software-Evolution WS 2014/2015

Plugin-Struktur der Refactoring-Komponenten 29 Software-Evolution WS 2014/2015

Pakete von org.eclipse.emf.refactor.refactoring.henshin 30 Software-Evolution WS 2014/2015

Beispiel: Evolutionsaufgabe für EMF Refactor erste Einschätzung der Änderungs-Stellen 1. Entfernung des Preview Plugin: org.eclipse.emf.refactor.refactoring.runtime Klasse: org..runtime.ltk.ui.refactoringpreviewviewer.java 2. Beschreibung des Refactorings Plugin: org.eclipse.emf.refactor.refactoring Extension Point: org.eclipse.emf.refactor.refactorings Klasse: org..refactoring.core.refactoring.java 3. Anlage der Henshin-Dateien Plugin: org.eclipse.emf.refactor.refactoring.henshin Klasse: org..henshin.ui.henshintransformationwizardpage.java Klasse: org..henshin.managers.henshingenerationmanager.java 31 Software-Evolution WS 2014/2015

Zusammenfassung und Literatur Software Evolution funktioniert nur mit Reverse Engineering. Bevor man ein Programm ändern kann, muss man es verstehen. Dazu muss man das Design hinter einem Programm erkennen. Re-Engineering Patterns helfen, ein Programm systematisch und effizient zu verstehen und zu ändern. Literatur: Serge Demeyer, Stephane Ducasse, Oscar Nierstrasz: Object-Oriented Reengineering Patterns, 2013, Kap. 1 3, online verfügbar unter http://scg.unibe.ch/download/oorp/ 32 Software-Evolution WS 2014/2015

Werkzeuge und Quellen im WWW EMF Refactor Website: http://www.eclipse.org/emf-refactor/ EMF Refactor Tutorial: http://wiki.eclipse.org/refactor EMF Refactor Architecture: http://wiki.eclipse.org/emf_refactor_architecture EMF Refactor Repositories: http://projects.eclipse.org/projects/modeling.emft.refactor/developer Henshin Website: http://www.eclipse.org/henshin/ Eclipse Metrics2 Project: http://metrics2.sourceforge.net/ 33 Software-Evolution WS 2014/2015