Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

JDD2014: Strategiczna refaktoryzacja - Michał Bartyzel

382 views

Published on

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.

Published in: Services
  • Be the first to comment

  • Be the first to like this

JDD2014: Strategiczna refaktoryzacja - Michał Bartyzel

  1. 1. www.bnsit.pl Strategiczna refaktoryzacja Michał Bartyzel Mariusz Sieraczkiewicz
  2. 2. 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
  3. 3. www.bnsit.pl #refactoring.com, refactoring to the patterns, clean code Przekształcenia kodu to za mało Strategiczna refaktoryzacja 3
  4. 4. www.bnsit.pl MegaSoftwareCraftshmanshipper Strategiczna refaktoryzacja 4 http://pl.creepypasta.wikia.com/wiki/Plik:Kibole.jpeg
  5. 5. www.bnsit.pl Rodzaje refaktoryzacji Strategiczna refaktoryzacja 5
  6. 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 REFACTORING Techniki Strategiczna refaktoryzacja 6
  7. 7. 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
  8. 8. www.bnsit.pl Ćwiczenie Strategiczna refaktoryzacja 8
  9. 9. www.bnsit.pl Problemy Korzyści Mapa problemy/korzyści/rozwiązanie Strategiczna refaktoryzacja 9 Co mówią programiści, architekci? Rozwiązanie
  10. 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, 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
  11. 11. 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
  12. 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’OWANIA Analiza – identyfikacja problemów Strategiczna refaktoryzacja 12
  13. 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 ARCHITEKTURZE Analiza – identyfikacja problemów Strategiczna refaktoryzacja 13
  14. 14. www.bnsit.pl Root Cause Analysis Strategiczna refaktoryzacja 14
  15. 15. www.bnsit.pl Mantra architektoniczna – bloki budujące Strategiczna refaktoryzacja 15
  16. 16. www.bnsit.pl Mantra architektoniczna – model i kontekst Strategiczna refaktoryzacja 16
  17. 17. 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
  18. 18. www.bnsit.pl Przeanalizuj metryki kodu Strategiczna refaktoryzacja 18
  19. 19. 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ść
  20. 20. 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
  21. 21. www.bnsit.pl Zatrzymaj degradację kodu
  22. 22. 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
  23. 23. www.bnsit.pl Strategiczna refaktoryzacja 23 Promień Schwarzschilda
  24. 24. 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
  25. 25. www.bnsit.pl Zespół ds. Trudnych i Beznadziejnych Strategiczna refaktoryzacja 25
  26. 26. 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
  27. 27. www.bnsit.pl if ( param == 4 ) { //workaround, do not touch! position.setX( position.getX() + 1 ); } Refaktoryzacja sposobu myślenia Strategiczna refaktoryzacja 27
  28. 28. 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
  29. 29. 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
  30. 30. www.bnsit.pl Branch by Abstraction Strategiczna refaktoryzacja 30
  31. 31. www.bnsit.pl Feature Porting Strategiczna refaktoryzacja 31
  32. 32. www.bnsit.pl A może nie refaktoryzować? Strategiczna refaktoryzacja 32
  33. 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 dziedziny Dziedziny Strategiczna refaktoryzacja 33
  34. 34. www.bnsit.pl Anticoruption Layer Strategiczna refaktoryzacja 34
  35. 35. www.bnsit.pl Strategiczna refaktoryzacja 35 Strategia Bubble Context
  36. 36. www.bnsit.pl Open Host Serivce Strategiczna refaktoryzacja 36
  37. 37. www.bnsit.pl Zarządzanie ewolucją architektury
  38. 38. www.bnsit.pl Proces ewolucji architektury Strategiczna refaktoryzacja 38 Proces rozwoju architektury
  39. 39. Strategiczna refaktoryzacja 39
  40. 40. Wiki Strategiczna refaktoryzacja 40
  41. 41. Bugtracker Strategiczna refaktoryzacja 41
  42. 42. Strategiczna refaktoryzacja 42 Everyday refactoring Strategic refactoring
  43. 43. www.bnsit.pl Strategiczna refaktoryzacja Michał Bartyzel Mariusz Sieraczkiewicz

×