[jug, pl] strategiczna refaktoryzacja

Post on 09-Jul-2015

188 Views

Category:

Software

0 Downloads

Preview:

Click to see full reader

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

www.bnsit.pl

Strategiczna refaktoryzacjaMichał BartyzelMariusz 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ć 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

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

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

www.bnsit.pl

Przeanalizuj metryki kodu

Strategiczna refaktoryzacja 18

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ść

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

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

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

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

}

Refaktoryzacja sposobu myślenia

Strategiczna refaktoryzacja 26

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

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

www.bnsit.pl

Branch by Abstraction

Strategiczna refaktoryzacja 29

www.bnsit.pl

# Segregujemy metody z pomiędzy interfejsy

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

Branch by Abstraction

Strategiczna refaktoryzacja 30

www.bnsit.pl

Feature Porting

Strategiczna refaktoryzacja 31

www.bnsit.pl Strategiczna refaktoryzacja 32

www.bnsit.pl Strategiczna refaktoryzacja 33

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

www.bnsit.pl

A może nie refaktoryzować?

Strategiczna refaktoryzacja 34

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

www.bnsit.pl

Anticoruption Layer

Strategiczna refaktoryzacja 36

www.bnsit.pl Strategiczna refaktoryzacja 37

Strategia Bubble Context

www.bnsit.pl

Open Host Serivce

Strategiczna refaktoryzacja 38

www.bnsit.pl

Zarządzanie ewolucją architektury

www.bnsit.pl

Proces ewolucji architektury

Strategiczna refaktoryzacja 40

Proces rozwoju architektury

Strategiczna refaktoryzacja 41

Wiki

Strategiczna refaktoryzacja 42

Bugtracker

Strategiczna refaktoryzacja 43

Strategiczna refaktoryzacja 44

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

Strategiczna refaktoryzacja 45

Everyday refactoring

Strategic refactoring

www.bnsit.pl

Strategiczna refaktoryzacjaMichał BartyzelMariusz Sieraczkiewicz

top related