Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Refaktoryzacja czyli odświeżanie kodu Łukasz Olek Dzięki uprzejmości Bartka Waltera.

Podobne prezentacje


Prezentacja na temat: "Refaktoryzacja czyli odświeżanie kodu Łukasz Olek Dzięki uprzejmości Bartka Waltera."— Zapis prezentacji:

1 Refaktoryzacja czyli odświeżanie kodu Łukasz Olek Dzięki uprzejmości Bartka Waltera

2 Motto Any fool can write code that a computer can understand. Good programmers write code that humans can understand. Martin Fowler

3 Więcej funkcji!

4 Przykre zapachy If it stinks, change it babcia Kenta Becka o strategii zmiany pieluch u niemowląt

5 Kod, który cuchnie.... Przykłady zapachów duplikaty w kodzie długie metody duże klasy długie listy parametrów złożone instrukcje warunkowe i wiele innych...

6 Refaktoryzacja zmiana wewnętrznej struktury kodu void doSth() która czyni go czytelniejszym i łatwiejszym w modyfikacji jednak nie zmienia jego obserwowalnego zachowania Refaktoryzacja to:

7 Przykłady refaktoryzacji Extract Method void obliczINapisz() { // oblicz X // oblicz Y... // wyświetl X // wyświetl Y... // zapisz X // zapisz Y } void oblicz () { // oblicz X // oblicz Y wyswietl(X, Y); // zapisz X // zapisz Y } void wyswietl(X,Y) { // wyświetl X // wyświetl Y } Jedna metoda – jedna funkcja Jedna metoda – jedna funkcja Lokalizacja potencjalnych błędów Lokalizacja potencjalnych błędów

8 Szablon refaktoryzacji wg Fowlera Nazwa Podsumowanie Cel Mechanika Przykłady

9 Szablon refaktoryzacji wg Fowlera Nazwa Extract Method Podsumowanie Utworzenie z fragmentu kodu nowej metody Cel Wyłączenie tego fragmentu i utworzenie metody Mechanika utwórz nową metodę i skopiuj do niej fragment kodu sprawdź, czy zmienne lokalne są modyfikowane przekaż zmienne lokalne do nowej metody zastąp kod wywołaniem nowej metody skompiluj i przetestuj Przykłady...

10 Najważniejszy podział refaktoryzacji Weryfikacja automatyczna Zaimplementowane w wielu IDE Weryfikacja wymaga testów Ręczne... PROSTETRUDNE

11 Refaktoryzacje proste... void doSth() Jeżeli przed.... Weryfikacja warunków wstępnych i końcowych Analiza statyczna kodu Jeżeli po....

12 ... i refaktoryzacje trudne Analiza statyczna kodu, warunki wstępne i końcowe Testowanie void doSth() Jeżeli przed.... Jeżeli po....

13 Refaktoryzacje proste Weryfikacja warunków wstępnych i końcowych Analiza statyczna kodu Extract Method Inline Method Rename Class/ Method/ Field Encapsulate Downcast Self Encapsulate Field

14 Refaktoryzacje trudne Weryfikacja warunków wstępnych i końcowych Testowanie Move Method/Field Decompose Conditional Replace Conditional with Polymorphism Introduce Null Object

15 Testy regresyjne void doSth() PRZED ZMIANĄPO ZMIANIE

16 1.Wyłącz sam warunek do osobnej metody 2.Wyłącz każdą gałąź warunku do osobnej metody, korzystając z Extract Method Przykład: Decompose Conditional Krótszy kod warunkowy Niezależna obsługa każdej gałęzi warunku Możliwość pokrywania w podklasach int liczba = uczen.getPrzedmioty(); if (liczba == 0) { // nie ma przedmiotów } else if (liczba = 1) { // jeden przedmiot } else { // Wiele przedmiotów } int liczba = uczen.getPrzedmioty(); if (liczba == 0) { zeroPrzedmiotów(); } else if (liczba = 1) { jedenPrzedmiot(); } else { wielePrzedmiotów(); }

17 1.Utwórz podklasy rozważanego obiektu 2.Wybierz podklasę; utwórz w niej metodę i skopiuj do niej ciało jednej z gałęzi warunku int liczba = uczen.getLiczbaPrzedmiotów(); if (liczba == 0) { // nie ma przedmiotów } else if (liczba = 1) { // jeden przedmiot } else { // Wiele przedmiotów } Przykład: Replace Conditional with Polymorphism Pełna elastyczność Prosty, czytelny kod Łatwa skalowalność Uczen uczen = Uczen.forLiczba(liczba); uczen.obsłuż(); Uczen + obsłuż() Uczen0 + obsłuż() Uczen1 + obsłuż() UczenN + obsłuż() 3.Skompiluj i przetestuj4.Zastąp gałąź odwołaniem do metody utworzonego obiektu 5.Skompiluj i przetestuj6.Powtarzaj dla każdej podklasy, aż wszystkie gałęzie warunku zostaną zastąpione 7.Uczyń metodę w nadklasie abstrakcyjną

18 Kiedy refaktoryzować? Zasada trzech razy Zasada trzech razy Przy dodawaniu nowych funkcji Przy dodawaniu nowych funkcji Usuwając błąd Usuwając błąd Podczas przeglądu kodu Podczas przeglądu kodu Przy naglących terminach Przy naglących terminach Przedwczesne definiowanie interfejsów Przedwczesne definiowanie interfejsów Niestabliny, bałaganiarski kod Niestabliny, bałaganiarski kod Niedokończona refaktoryzacja to zadłużenie, które trzeba kiedyś spłacić Ward Cunningham

19 Podsumowanie Refaktoryzacja pomaga usuwać przykre zapachy w kodzie Refaktoryzacja pomaga usuwać przykre zapachy w kodzie Łatwiejsza pielęgnacja kodu Łatwiejsza pielęgnacja kodu Elegantsze rozwiązania, prostszy projekt Elegantsze rozwiązania, prostszy projekt Wspomaganie ze strony IDE Wspomaganie ze strony IDE Rola testów regresyjnych Rola testów regresyjnych

20 Pytania?


Pobierz ppt "Refaktoryzacja czyli odświeżanie kodu Łukasz Olek Dzięki uprzejmości Bartka Waltera."

Podobne prezentacje


Reklamy Google