[jug, pl] strategiczna refaktoryzacja

46
www.bnsit.pl Strategiczna refaktoryzacja Michał Bartyzel Mariusz Sieraczkiewicz

Upload: michal-bartyzel

Post on 09-Jul-2015

188 views

Category:

Software


0 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

Page 1: [JUG, PL] Strategiczna refaktoryzacja

www.bnsit.pl

Strategiczna refaktoryzacjaMichał BartyzelMariusz Sieraczkiewicz

Page 2: [JUG, PL] Strategiczna refaktoryzacja

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

Page 3: [JUG, PL] Strategiczna refaktoryzacja

www.bnsit.pl

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

Przekształcenia kodu to za mało

Strategiczna refaktoryzacja 3

Page 4: [JUG, PL] Strategiczna refaktoryzacja

www.bnsit.pl

MegaSoftwareCraftshmanshipper

Strategiczna refaktoryzacja 4

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

Page 5: [JUG, PL] Strategiczna refaktoryzacja

www.bnsit.pl

Rodzaje refaktoryzacji

Strategiczna refaktoryzacja 5

Page 6: [JUG, PL] Strategiczna refaktoryzacja

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

Page 7: [JUG, PL] Strategiczna refaktoryzacja

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

Page 8: [JUG, PL] Strategiczna refaktoryzacja

www.bnsit.pl

Ćwiczenie

Strategiczna refaktoryzacja 8

Page 9: [JUG, PL] Strategiczna refaktoryzacja

www.bnsit.pl

Problemy Korzyści

Mapa problemy/korzyści/rozwiązanie

Strategiczna refaktoryzacja 9

Co mówią programiści, architekci?

Rozwiązanie

Page 10: [JUG, PL] Strategiczna refaktoryzacja

www.bnsit.pl

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

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

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

Strategiczna refaktoryzacja 10

Page 11: [JUG, PL] Strategiczna refaktoryzacja

www.bnsit.pl

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

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

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

Strategiczna refaktoryzacja 11

Page 12: [JUG, PL] Strategiczna refaktoryzacja

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

Page 13: [JUG, PL] Strategiczna refaktoryzacja

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

Page 14: [JUG, PL] Strategiczna refaktoryzacja

www.bnsit.pl

Root Cause Analysis

Strategiczna refaktoryzacja 14

Page 15: [JUG, PL] Strategiczna refaktoryzacja

www.bnsit.pl

Mantra architektoniczna – bloki budujące

Strategiczna refaktoryzacja 15

Page 16: [JUG, PL] Strategiczna refaktoryzacja

www.bnsit.pl

Mantra architektoniczna – model i kontekst

Strategiczna refaktoryzacja 16

Page 17: [JUG, PL] Strategiczna refaktoryzacja

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 frameworkwebowy)

# 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

Page 18: [JUG, PL] Strategiczna refaktoryzacja

www.bnsit.pl

Przeanalizuj metryki kodu

Strategiczna refaktoryzacja 18

Page 19: [JUG, PL] Strategiczna refaktoryzacja

www.bnsit.pl

Wysoka złożoność/rzadkie

zmianyKod którego nie

ruszamy

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

zmianyTu

refaktoryzujemy

Niska złożoność/rzadkie

zmianyUtilsy, dobre do eksperymentów

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

zmianyHeaven

Co refaktoryzować? Kwadrant Feathersa

Strategiczna refaktoryzacja 19

Dodatkowo:• wiedza

plemienna• prognozy

biznesu

Częstość zmian

Złożoność

Page 20: [JUG, PL] Strategiczna refaktoryzacja

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?

Wiedza plemienna

Strategiczna refaktoryzacja 20

Page 21: [JUG, PL] Strategiczna refaktoryzacja

www.bnsit.pl

Zatrzymaj degradację kodu

Page 22: [JUG, PL] Strategiczna refaktoryzacja

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

Page 23: [JUG, PL] Strategiczna refaktoryzacja

www.bnsit.pl Strategiczna refaktoryzacja 23

Promień Schwarzschilda

Page 24: [JUG, PL] Strategiczna refaktoryzacja

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

Page 25: [JUG, PL] Strategiczna refaktoryzacja

www.bnsit.pl

Zespół ds. Trudnych i Beznadziejnych

Strategiczna refaktoryzacja 25

Page 26: [JUG, PL] Strategiczna refaktoryzacja

www.bnsit.pl

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

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

}

Refaktoryzacja sposobu myślenia

Strategiczna refaktoryzacja 26

Page 27: [JUG, PL] Strategiczna refaktoryzacja

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 27

Page 28: [JUG, PL] Strategiczna refaktoryzacja

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 28

Page 29: [JUG, PL] Strategiczna refaktoryzacja

www.bnsit.pl

Branch by Abstraction

Strategiczna refaktoryzacja 29

Page 30: [JUG, PL] Strategiczna refaktoryzacja

www.bnsit.pl

# Segregujemy metody z pomiędzy interfejsy

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

Branch by Abstraction

Strategiczna refaktoryzacja 30

Page 31: [JUG, PL] Strategiczna refaktoryzacja

www.bnsit.pl

Feature Porting

Strategiczna refaktoryzacja 31

Page 32: [JUG, PL] Strategiczna refaktoryzacja

www.bnsit.pl Strategiczna refaktoryzacja 32

Page 33: [JUG, PL] Strategiczna refaktoryzacja

www.bnsit.pl Strategiczna refaktoryzacja 33

http://mbartyzel.blogspot.com/2014/03/presentation-layer-under-control.html

Page 34: [JUG, PL] Strategiczna refaktoryzacja

www.bnsit.pl

A może nie refaktoryzować?

Strategiczna refaktoryzacja 34

Page 35: [JUG, PL] Strategiczna refaktoryzacja

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 35

Page 36: [JUG, PL] Strategiczna refaktoryzacja

www.bnsit.pl

Anticoruption Layer

Strategiczna refaktoryzacja 36

Page 37: [JUG, PL] Strategiczna refaktoryzacja

www.bnsit.pl Strategiczna refaktoryzacja 37

Strategia Bubble Context

Page 38: [JUG, PL] Strategiczna refaktoryzacja

www.bnsit.pl

Open Host Serivce

Strategiczna refaktoryzacja 38

Page 39: [JUG, PL] Strategiczna refaktoryzacja

www.bnsit.pl

Zarządzanie ewolucją architektury

Page 40: [JUG, PL] Strategiczna refaktoryzacja

www.bnsit.pl

Proces ewolucji architektury

Strategiczna refaktoryzacja 40

Proces rozwoju architektury

Page 41: [JUG, PL] Strategiczna refaktoryzacja

Strategiczna refaktoryzacja 41

Page 42: [JUG, PL] Strategiczna refaktoryzacja

Wiki

Strategiczna refaktoryzacja 42

Page 43: [JUG, PL] Strategiczna refaktoryzacja

Bugtracker

Strategiczna refaktoryzacja 43

Page 44: [JUG, PL] Strategiczna refaktoryzacja

Strategiczna refaktoryzacja 44

http://www.infoq.com/articles/natural-course-refactoring

Page 45: [JUG, PL] Strategiczna refaktoryzacja

Strategiczna refaktoryzacja 45

Everyday refactoring

Strategic refactoring

Page 46: [JUG, PL] Strategiczna refaktoryzacja

www.bnsit.pl

Strategiczna refaktoryzacjaMichał BartyzelMariusz Sieraczkiewicz