Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software...

55
Sanierung grosser Software Systeme Sibylle Peter, Dr. Dieter Holz Canoo Engineering AG Basel, Switzerland

Transcript of Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software...

Page 1: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

Sanierung grosser !Software Systeme!Sibylle Peter, Dr. Dieter Holz!Canoo Engineering AG!Basel, Switzerland!

Page 2: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com 2

Sibylle Peter Dieter Holz

Page 3: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com

Inhalt

๏  Einführung

๏  Die Fallstudie: Investionsberatung für Kundenberater

๏  Die Sanierung

๏  Wie wir arbeiten

๏  Wie wird ein Sanierungsprojekt ein Erfolg?

Page 4: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

Einführung

Page 5: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com

Sanierungsprojekte

Page 6: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com

Sanierungsprojekte

6

Page 7: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com

Definition (Martin Fowler, Refactoring, pg. 53):

Refactoring (noun): a change made to the internal structure of software to make it easier to understand and cheaper to modify without changing its observable behavior.

Refactor (verb): To restructure software by applying a series of refactorings without changing it‘s observable behavior

Sanierung durch Refactoring

Page 8: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com 8

Page 9: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com

Software Entropie

9

Page 10: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com

Software Entropie

10

Page 11: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com

Software Entropie

11

Page 12: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

Die Fallstudie

Page 13: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com

Page 14: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com

Facts

๏  Produktiv und erfolgreich seit 2004

๏  Kontinuierlich weiterentwickelt

๏  320 JSP Dateien, 1800 Klassen

๏  Ca 70. funktionale Tests

๏  Wenig Unit Tests

๏  Wenig Dokumentation

๏  Hohe Fluktation, hohe Kosten, Change Requests können nicht mehr implementiert werden.

Page 15: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

Start: Erste Analyse

15

Page 16: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com

Abhängigkeiten

16

Page 17: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com

Objekttypen

17

Action

Java Beans

JSP

ServiceInvoker

Service

Worker

Controller Helper

Mapper

Container

HttpServlet

BusinessObject

HttpServlet

Page 18: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com

Masterplan

18

Action

Java Beans

JSP

Container

HttpServlet

BusinessObject

Facade TransferObject

HttpServlet

Util

Service Mapper

Page 19: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com

Masterplan

19

Java Beans

Service Mapper

Validator

Facade TransferObject

Action

JSP HttpServlet

Formatter

Aggregating Facade

Page 20: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

Refactoring Teil 1

20

Page 21: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com

Ziel: Neues Service Layer

21

Page 22: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com

1. Schritt Strukturierung in Fassaden

22

Page 23: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com

2. Schritt: Einführung von Transfer Objekten (TO)

23

Presentation!Layer!

transfer objects!

JSP Java Bean Action HttpRequest

BusinessObject Converter

TransferObject

Facade

Service

Service!Layer!

Page 24: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com 24

public class User extends CoreObject { private String id; private Employee userIdentity; private RoleBUManager m_roleBUManager = new RoleBUManager(); private boolean isAllowed = false; private String eMailTask; private Timestamp mutTimestamp; private String mutId;

public final class UserTO { private final String fId; private final String fEamCode; private final String fBuCode; private final String fDepartment;

Page 25: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com 25

Presentation!Layer!JSP Java Bean Action HttpRequest

BusinessObject Converter

TransferObject Service!Layer!

ServiceObject

EJB Proxy

simple!

complex!

1:1!

1:n! Mapper

Page 26: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com 26

Presentation!Layer!JSP Java Bean Action HttpRequest

BusinessObject Converter

TransferObject Service!Layer!

ServiceObject

EJB Proxy

simple!

complex!

structural logic m:n!

1:1! Mapper

Page 27: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com

Validierung

27

public final class AARefCurrencyTO { ... public AARefCurrencyTO(UID<AARefCurrencyTO2> uid, String eamCode, final BigDecimal manual, BUCode buCode, MutSeqNr mutSeqNr, BigDecimal sortOrder, Long language, String name) { // Preconditions: if (uid == null) throw new IllegalArgumentException(...); ... if (language > 4) throw new IllegalArgumentException(...);

// Assignments: this.uid = uid; ... }

Page 28: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com

Fassaden Interface

28

public static FrontpageText getFrontpageText (CriteriaToGetFrontpageText criteria)

throws CoreException

public CriteriaToGetFrontpageText(String buCode, User user, int entryFrom)

public static FrontpageTextTO getFrontpageText (String buCode, UserTO user)

throws CoreException

Page 29: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com

3. Schritt: Neues Service Layer

29

inTO! outTO!

Service!

Page 30: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com

Service Interface und AbstractService

30

public interface IService<TOI, TOO> { public TOO execute(TOI toi) throws CoreException; }

public abstract class AbstractService<TOI, SOI, SOO, TOO> implements IService<TOI, TOO> { public final TOO execute(final TOI toi)

throws CoreException { if (toi == null) { throw new IllegalArgumentException(“'toi' must not

be null"); } SOI soi = mapInput(toi); SOO soo = innerExecute(soi); return mapOutput(soo); }

protected abstract SOI mapInput(TOI toi); protected abstract SOO innerExecute(SOI soi)

throws CoreException; protected abstract TOO mapOutput(SOO soo); }

Page 31: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com

Aggregierende Service Klassen

31

inTO! outTO!

Services!

inTO A! outTO A!

Service A!

Service!

inTO B! outTO B!

Service B!

Page 32: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com

4. Schritt: Einführung von Basis Typen

32

// Usage example: BUCode buCode = BUCode.getFlyweight("0012");

Page 33: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com

Fassaden Interface

33

public static FrontpageTextTO getFrontpageText(BUCode buCode, EAMCode eamCode, UserTO user) throws CoreException

public static FrontpageTextTO getFrontpageText(String buCode, String eamCode, UserTO user) throws CoreException

Page 34: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com

Resultat nach Teil 1

34

34

Old Presentationlayer

Converter

New Servicelayer Architecture!

Design Guidelines for - Services

- TransferObjects - Basetypes

New Feature:!

RiskAnalyzer!

Change Request:!CoSa!

Page 35: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

Refactoring von Komponenten

Page 36: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com

Current State

36

New Servicelayer Architecture!

New Business Layer

Old Presentationlayer

Converter Presentation Layer

Domain Layer

Refactored Components New Features

Old GUI Framework

Page 37: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com

Domain Model Adapters

37

public class MonitoredHoldingDO extends AbstractHoldingDO implements IMonitoredHoldingDO {

public MonitoredHoldingDO(final Holding holding) { super(holding); }

@Override protected BOInfo getBOInfo() { return new BOInfo(getHolding().getWorkingTIS(), getAssetsFromHolding (), getSafekeepingAccountsFromHolding()); }

private ImmutableMap<Integer, Asset> getAssetsFromHolding() { return HoldingDOBuilderUtil.getTisIncludedAssetsFromHolding

(getHolding(), getHolding().getWorkingTIS()); } … }

Page 38: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com

Komponente Load Partner

38

Page 39: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com 39

Vorgehen

๏  Code aufräumen ‣  IDE Vorschläge umsetzen (Remove unused code etc)

๏  Überschaubare Einheiten erstellen ‣ Mit Extract Method Refactoring Methoden herausziehen ‣  Abhängigkeiten zu Attributen entfernen (static methods) ‣ Move Refactoring benutzen, um diese Methoden in einer Hilfklasse

zwischenzulagern

Page 40: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com 40

Vorgehen

๏  Analyse der neuen Einheiten und Design gemäss der Zielarchitektur

๏  Akzeptanz Tests definieren und mit BBD Frameworks implementieren

Page 41: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com

Akzeptanztest

41

scenario "DictionaryService can find the word 'Griffon'", { given "an instance of DictionaryService is available", { service = new DictionaryService() }

when "the word 'Griffon' is used as parameter", { result = service.findDefinition('Griffon') }

then "the definition should be found", { assert result == "Grails inspired desktop application development platform.” } }

Page 42: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com

Akzeptanztest mit EasyB

42

Page 43: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com 43

Vorgehen

๏  Refactoring ‣ Wenn noch nötig, Mikado Methode anwenden

๏  Messen der Code Qualität

Page 44: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com

Sonar Dashboard

44

Page 45: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

Voraussetzungen für erfolgreiche Sanierungsprojekte?

Page 46: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com

Wie wir arbeiten

Daily standup meeting!

Regular workshops with the customer‘s lead engineer!

Retrospective in regular

intervalls!

Lightweigth, but intensive testing process with test

team

Monthly meeting with the project manager of the

customer

Weekly reporting with the lead engineer and

architect of the customer

Page 47: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com

Team

Experienced, dedicated developers

motivation

A disciplined approach

team size.

A lead engineer of the customers

side

Page 48: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com

Authorität und Flexibilität

48

Management support

Accepted by the team

The customers trust Flexible,

iterative planning

Involved in system design

Page 49: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com

Weitere Voraussetzungen

49

Continuous Integration

Assessment Master Plan

Automated Integration

Tests

Good Analysis Tools

Page 50: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com

Erkenntnisse oder Best Practices

๏  Entweder technisches oder logisches Refactoring

๏  Analyse – Implementierung – Stabilisation

๏  Früher Wissenstransfer zum Core Team

๏  Investition in automatische Regressionstest

๏  Abhängigkeiten zu anderen Systemen reduzieren

๏  Automatische Qualitätssicherung

๏  Manuelles Testing braucht Zeit – genügend Zeit einplanen

50

Page 51: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com

Nachhaltigkeit

๏  Code verbessern ist nicht genug

๏  Professionelle Ethik einführen

๏  Technische Schulden überwachen und ggf. beseitigen

๏  Continous Improvement: Retrospektiven

๏  Core Team muss unterstützt werden, damit neue Funktionalität in guter Qualität ausgeliefert wird.

51

Page 52: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com

Warum Sanierungsprojekte?

52

Page 53: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com

Bücher und Links

๏  Martin Fowler, Refactoring: Improving the Design of Existing Code

๏  Stephan Ducasse, Oscar Nierstrasz, Object Oriented Reengineering Patterns PDF: http://www.win.ua.ac.be/~sdemey/

๏  Joshua Kerievsky, Refactoring to Patterns

๏  Martin Lippert, Stefan Rook, Refactoring in Large Software Projects

๏  Behaviour Driven Development: ‣ EasyB: http://www.easyb.org/ ‣ Spock: http://code.google.com/p/spock/

๏  Sonar: http://www.sonarsource.org/

๏  Mikado Method: http://pragprog.com/magazines/2010-06/the-mikado-method

53

Page 54: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com

Master Thesis @ Canoo

54

Page 55: Sanierung grosser Software Systeme - UZH00000000-0476-116c... · Sanierung grosser ! Software Systeme! Sibylle Peter, Dr. Dieter Holz! Canoo Engineering AG! Basel, Switzerland!

www.canoo.com

Master Thesis @ Canoo

55