JDD2014: Strategiczna refaktoryzacja - Michał Bartyzel

Post on 01-Jul-2015

150 views 1 download

description

Techniki, czyli przekształcenia refaktoryzacyjne pomagają transformować fragmenty kodu z jednej postaci w inną. Jednak duże refaktoryzacje to przede wszystkim przedsięwzięcie organizacyjne. Co warto refaktoryzować? Jak zidentyfikować kluczowe problemy? Kiedy nie podejmować działań? Czy w ogóle warto? Jakie heurystyki i strategie wysokopoziomowe możesz wykorzystać? Odpowiedzi na te pytania poznasz podczas prelekcji Strategiczna refaktoryzacja.

Transcript of JDD2014: Strategiczna refaktoryzacja - Michał Bartyzel

www.bnsit.pl

Strategiczna refaktoryzacja Michał Bartyzel Mariusz Sieraczkiewicz

www.bnsit.pl

To przede wszystkim wyzwanie

organizacyjne, a w następnej kolejności techniczne

Po pierwsze zatrzymaj dalsze psucie,

po drugie naprawiaj

Strategiczna refaktoryzacja

www.bnsit.pl

# refactoring.com, refactoring to the patterns, clean code

Przekształcenia kodu to za mało

Strategiczna refaktoryzacja 3

www.bnsit.pl

MegaSoftwareCraftshmanshipper

Strategiczna refaktoryzacja 4

http://pl.creepypasta.wikia.com/wiki/Plik:Kibole.jpeg

www.bnsit.pl

Rodzaje refaktoryzacji

Strategiczna refaktoryzacja 5

www.bnsit.pl

# Zidentyfikuj obszary refaktoryzacji • ARCHITECTURE ORIGIN • PROBLEM/BENEFITS/SOLUTIONS • ROOT CAUSE ANALYSIS • ARCHITECTURAL MANTRA • COMPLEXITY ANALYSIS • FEATHER’S QUADRANT • TRIBE KNOWLEDGE

# Zatrzymaj degradację kodu • ORDERING • REFACTORYOUR ORGANIZATION • EXTRACT RESPONSIBILITY OBJECT • WORKAROUNDS • BRANCH BY ABSTRACTION • FEATURE PORTING • ANTICORRUPTION LAYER • BUBBLES

# Utrzymuj architekturę przy życiu • ARCHITECTURE EVOLUTION • NATURAL COURSE OF REFACTORING

Techniki

Strategiczna refaktoryzacja 6

www.bnsit.pl

Kto to napisał?

Kiedy to napisał?

Czym się kierował?

Jakie miał doświadczenie?

W jakich warunkach działał?

Ile miał czasu?

Kto go rozliczał?

Kontekst powstania tego kodu

Strategiczna refaktoryzacja 7

www.bnsit.pl

Ćwiczenie

Strategiczna refaktoryzacja 8

www.bnsit.pl

Problemy Korzyści

Mapa problemy/korzyści/rozwiązanie

Strategiczna refaktoryzacja 9

Co mówią programiści, architekci?

Rozwiązanie

www.bnsit.pl

Nie możemy zmieniać GUI Nie możemy wyjść z hosta serwującego aplikację Nie jesteśmy w stanie pracować w stylu klient-serwer Monolityczny kod, wielki model Brak możliwości selektywnego wyciągania danych. Zawsze trzeba to robić programistycznie

Logika niezależna od GUI Różne kanały dostępu do logiki: web, iPad, client-sever Logika niezależna od GUI Różne kanały dostępu do logiki: web, iPad, client-sever

Chcemy budować złożone, przekrojowe zapytania o dane

Strategiczna refaktoryzacja 10

www.bnsit.pl

Nie możemy zmieniać GUI Nie możemy wyjść z hosta serwującego aplikację Nie jesteśmy w stanie pracować w stylu klient-serwer Monolityczny kod, wielki model Brak możliwości selektywnego wyciągania danych. Zawsze trzeba to robić programistycznie

Logika niezależna od GUI Różne kanały dostępu do logiki: web, telefon, client-sever Różne kanały dostępu do logiki: web, telefon, client-sever

Chcemy budować złożone, przekrojowe zapytania o dane

Strategiczna refaktoryzacja 11

www.bnsit.pl

# BRAK WSPÓLNYCH ZASAD ODNOŚNIE ARCHITEKTURY

# BRAK WSPÓLNYCH ZASAD ODNOŚNIE MECHANIZMÓW W SYSTEMIE:

• jak/gdzie walidować;

• jak/gdzie autoryzować;

• utilsy;

# SKOMPLIKOWANY PROCES PRACY Z REPOZYTORIUM – WIELE ŚRODOWISK, DUŻO MERGE’OWANIA

Analiza – identyfikacja problemów

Strategiczna refaktoryzacja 12

www.bnsit.pl

# BRAK WSPÓLNYCH ZASAD CZYTELNOŚCI KODU ORAZ BRAK ICH KODYFIKACJI;

# BRAK PODZIAŁU NA MODUŁY NA POZIOMIE REPOZYTORIUM – podział techniczny a nie dziedzinowy

# BRAK PROCESU WYMIANY WIEDZY O ARCHITEKTURZE

Analiza – identyfikacja problemów

Strategiczna refaktoryzacja 13

www.bnsit.pl

Root Cause Analysis

Strategiczna refaktoryzacja 14

www.bnsit.pl

Mantra architektoniczna – bloki budujące

Strategiczna refaktoryzacja 15

www.bnsit.pl

Mantra architektoniczna – model i kontekst

Strategiczna refaktoryzacja 16

www.bnsit.pl

Jak powinno być? Co się powinno dziać?

1. Przyjmuje request

2. Dokonuje złożonej walidacji

3. Składa dane do wywołania serwisu

4. Wywołuje serwis

5. Wynik pakuje w JSONa

6. Określa kolejny widok

Czego nie powinno być? # Prostej walidacji (gdyż do tego

celu wykorzystujemy framework webowy)

# Złożonego przetwarzania JSONa (z serwisu nie powinien przychodzić JSON)

# Logiki dziedzinowej np. decydowanie na podstawie danych czy zlecenie ma być wykonane

Blok budujący – View controller

Strategiczna refaktoryzacja 17

www.bnsit.pl

Przeanalizuj metryki kodu

Strategiczna refaktoryzacja 18

www.bnsit.pl

Wysoka złożoność/rzadkie

zmiany Kod którego nie

ruszamy

Wysoka złożoność/częste

zmiany Tu

refaktoryzujemy

Niska złożoność/rzadkie

zmiany Utilsy, dobre do eksperymentów

Niska złożoność/częste

zmiany Heaven

Co refaktoryzować? Kwadrant Feathersa

Strategiczna refaktoryzacja 19

Dodatkowo: • wiedza

plemienna • prognozy

biznesu

Częstość zmian

Złożoność

www.bnsit.pl

Repozytorium i wiedza plemienna

# Co warto wziąć pod uwagę? • najczęściej zmieniające się fragmenty

• fragmenty, na które raportowanych jest najwięcej błędów

• fragmenty, z którymi programiści mają najwięcej problemów

• fragmenty najmniej/najbardziej pokryte testami

# Czy więcej pracujemy w infrastrukturze czy w dziedzinie?

# Gdzie są duże pliki?

# Czy pliki z commitów są rozsiane po całym repozytorium?

Wiedza plemienna

Strategiczna refaktoryzacja 20

www.bnsit.pl

Zatrzymaj degradację kodu

www.bnsit.pl

# Koncepcje wysokiego poziomu są trudne

# Do kiepskiego kodu ludzie się przyzwyczajają

# Kłopot sprawia brak wiedzy biznesowej

Uporządkowanie wystarcza # Nie za dużo kodu w jednym miejscu

# Nie za dużo powiązań między klasami

# Brak cyklicznych powiązań na wyższym poziomie

Kilka kontrowersyjnych wniosków

Strategiczna refaktoryzacja 22

www.bnsit.pl

Strategiczna refaktoryzacja 23

Promień Schwarzschilda

www.bnsit.pl

# Zespoły deweloperskie

# Zespoły testerów

# Zespołu utrzymania

# Zaangażowanie biznesu

# Realność terminów

# Obsługa zmian w wymaganiach

Czemu przyjrzeć się na poziomie organizacyjnym?

Strategiczna refaktoryzacja 24

www.bnsit.pl

Zespół ds. Trudnych i Beznadziejnych

Strategiczna refaktoryzacja 25

www.bnsit.pl

# Segregujemy metody z pomiędzy interfejsy

# Skupiamy się, na zatrzymaniu powstawania nowych zależności

Extract Responsibility Interface/Object

Strategiczna refaktoryzacja 26

www.bnsit.pl

if ( param == 4 ) { //workaround, do not touch!

position.setX( position.getX() + 1 );

}

Refaktoryzacja sposobu myślenia

Strategiczna refaktoryzacja 27

www.bnsit.pl

public InvalidCartesianXPatch extends Position {

private Position patchedPosition ;

public InvalidCartesianXPatch( Position patchedPosition ) {

this.patchedPosition = patchedPosition;

}

@Override

public int getX() {

return param == 4 ? patchedPosition.getX() + 1 : patchedPosition.getX();

}

}

Nazwij problem inaczej - Patch

Strategiczna refaktoryzacja 28

www.bnsit.pl

public Position {

// nowi klienci

public static Position createPosition(int x, int y) {

return new InvalidCartesianXPatch( new Position(x, y) );

}

@Deprecated

public Position(int x, int y) {

//...

}

@Deprecated

public Position( ... ) { }

}

Dostosuj oryginał

Strategiczna refaktoryzacja 29

www.bnsit.pl

Branch by Abstraction

Strategiczna refaktoryzacja 30

www.bnsit.pl

Feature Porting

Strategiczna refaktoryzacja 31

www.bnsit.pl

A może nie refaktoryzować?

Strategiczna refaktoryzacja 32

www.bnsit.pl

# Core domain – to co jest ściśle związane ze strategią firmy

# Support domain – wspiera główną dziedzinę, ale bezpośrednio nie należy do niej

# Generic domain – powszechnie występujące dziedziny

Dziedziny

Strategiczna refaktoryzacja 33

www.bnsit.pl

Anticoruption Layer

Strategiczna refaktoryzacja 34

www.bnsit.pl Strategiczna refaktoryzacja 35

Strategia Bubble Context

www.bnsit.pl

Open Host Serivce

Strategiczna refaktoryzacja 36

www.bnsit.pl

Zarządzanie ewolucją architektury

www.bnsit.pl

Proces ewolucji architektury

Strategiczna refaktoryzacja 38

Proces rozwoju architektury

Strategiczna refaktoryzacja 39

Wiki

Strategiczna refaktoryzacja 40

Bugtracker

Strategiczna refaktoryzacja 41

Strategiczna refaktoryzacja 42

Everyday refactoring

Strategic refactoring

www.bnsit.pl

Strategiczna refaktoryzacja Michał Bartyzel Mariusz Sieraczkiewicz