...

JDD2014: Strategiczna refaktoryzacja - Michał Bartyzel

by proidea

on

Report

Category:

Services

Download: 0

Comment: 0

140

views

Comments

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.
Download JDD2014: Strategiczna refaktoryzacja - Michał Bartyzel

Transcript

  • 1. www.bnsit.plStrategiczna refaktoryzacjaMichał BartyzelMariusz Sieraczkiewicz
  • 2. www.bnsit.plTo przede wszystkim wyzwanie organizacyjne, a w następnej kolejności technicznePo pierwsze zatrzymaj dalsze psucie, po drugie naprawiajStrategiczna refaktoryzacja
  • 3. www.bnsit.pl#refactoring.com, refactoring to the patterns, clean codePrzekształcenia kodu to za małoStrategiczna refaktoryzacja3
  • 4. www.bnsit.plMegaSoftwareCraftshmanshipperStrategiczna refaktoryzacja4http://pl.creepypasta.wikia.com/wiki/Plik:Kibole.jpeg
  • 5. www.bnsit.plRodzaje refaktoryzacjiStrategiczna refaktoryzacja5
  • 6. 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 REFACTORINGTechnikiStrategiczna refaktoryzacja6
  • 7. www.bnsit.plKto 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 koduStrategiczna refaktoryzacja7
  • 8. www.bnsit.plĆwiczenieStrategiczna refaktoryzacja8
  • 9. www.bnsit.plProblemyKorzyściMapa problemy/korzyści/rozwiązanieStrategiczna refaktoryzacja9Co mówią programiści, architekci?Rozwiązanie
  • 10. www.bnsit.plNie 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ć programistycznieLogika 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-severChcemy budować złożone, przekrojowe zapytania o daneStrategiczna refaktoryzacja10
  • 11. www.bnsit.plNie 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ć programistycznieLogika 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-severChcemy budować złożone, przekrojowe zapytania o daneStrategiczna refaktoryzacja11
  • 12. 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’OWANIAAnaliza – identyfikacja problemówStrategiczna refaktoryzacja12
  • 13. 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 ARCHITEKTURZEAnaliza – identyfikacja problemówStrategiczna refaktoryzacja13
  • 14. www.bnsit.plRoot Cause AnalysisStrategiczna refaktoryzacja14
  • 15. www.bnsit.plMantra architektoniczna – bloki budująceStrategiczna refaktoryzacja15
  • 16. www.bnsit.plMantra architektoniczna – model i kontekstStrategiczna refaktoryzacja16
  • 17. www.bnsit.plJak powinno być? Co się powinno dziać?1.Przyjmuje request2.Dokonuje złożonej walidacji3.Składa dane do wywołania serwisu4.Wywołuje serwis5.Wynik pakuje w JSONa6.Określa kolejny widokCzego 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ć wykonaneBlok budujący – View controllerStrategiczna refaktoryzacja17
  • 18. www.bnsit.plPrzeanalizuj metryki koduStrategiczna refaktoryzacja18
  • 19. www.bnsit.plWysoka złożoność/rzadkie zmiany Kod którego nie ruszamyWysoka złożoność/częste zmiany Tu refaktoryzujemyNiska złożoność/rzadkie zmiany Utilsy, dobre do eksperymentówNiska złożoność/częste zmiany HeavenCo refaktoryzować? Kwadrant FeathersaStrategiczna refaktoryzacja19Dodatkowo:•wiedza plemienna•prognozy biznesuCzęstość zmianZłożoność
  • 20. www.bnsit.plRepozytorium 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 plemiennaStrategiczna refaktoryzacja20
  • 21. www.bnsit.plZatrzymaj degradację kodu
  • 22. www.bnsit.pl#Koncepcje wysokiego poziomu są trudne#Do kiepskiego kodu ludzie się przyzwyczajają#Kłopot sprawia brak wiedzy biznesowejUporzą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 poziomieKilka kontrowersyjnych wnioskówStrategiczna refaktoryzacja22
  • 23. www.bnsit.plStrategiczna refaktoryzacja23Promień Schwarzschilda
  • 24. www.bnsit.pl#Zespoły deweloperskie#Zespoły testerów#Zespołu utrzymania#Zaangażowanie biznesu#Realność terminów#Obsługa zmian w wymaganiachCzemu przyjrzeć się na poziomie organizacyjnym?Strategiczna refaktoryzacja24
  • 25. www.bnsit.plZespół ds. Trudnych i BeznadziejnychStrategiczna refaktoryzacja25
  • 26. www.bnsit.pl#Segregujemy metody z pomiędzy interfejsy#Skupiamy się, na zatrzymaniu powstawania nowych zależnościExtract Responsibility Interface/ObjectStrategiczna refaktoryzacja26
  • 27. www.bnsit.plif ( param == 4 ) { //workaround, do not touch!position.setX( position.getX() + 1 );}Refaktoryzacja sposobu myśleniaStrategiczna refaktoryzacja27
  • 28. www.bnsit.plpublic InvalidCartesianXPatch extends Position {private Position patchedPosition ;public InvalidCartesianXPatch( Position patchedPosition ) {this.patchedPosition = patchedPosition;}@Overridepublic int getX() {return param == 4 ? patchedPosition.getX() + 1 : patchedPosition.getX();}}Nazwij problem inaczej - PatchStrategiczna refaktoryzacja28
  • 29. www.bnsit.plpublic Position {// nowi kliencipublic static Position createPosition(int x, int y) {return new InvalidCartesianXPatch( new Position(x, y) );}@Deprecatedpublic Position(int x, int y) {//...}@Deprecatedpublic Position( ... ) { }}Dostosuj oryginałStrategiczna refaktoryzacja29
  • 30. www.bnsit.plBranch by AbstractionStrategiczna refaktoryzacja30
  • 31. www.bnsit.plFeature PortingStrategiczna refaktoryzacja31
  • 32. www.bnsit.plA może nie refaktoryzować?Strategiczna refaktoryzacja32
  • 33. 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 dziedzinyDziedzinyStrategiczna refaktoryzacja33
  • 34. www.bnsit.plAnticoruption LayerStrategiczna refaktoryzacja34
  • 35. www.bnsit.plStrategiczna refaktoryzacja35Strategia Bubble Context
  • 36. www.bnsit.plOpen Host SerivceStrategiczna refaktoryzacja36
  • 37. www.bnsit.plZarządzanie ewolucją architektury
  • 38. www.bnsit.plProces ewolucji architekturyStrategiczna refaktoryzacja38Proces rozwoju architektury
  • 39. Strategiczna refaktoryzacja39
  • 40. WikiStrategiczna refaktoryzacja40
  • 41. BugtrackerStrategiczna refaktoryzacja41
  • 42. Strategiczna refaktoryzacja42Everyday refactoringStrategic refactoring
  • 43. www.bnsit.plStrategiczna refaktoryzacjaMichał BartyzelMariusz Sieraczkiewicz
  • Fly UP