Każdy projekt się starzeje - zmieniają się technologie, standardy, podejścia, logika biznesowa. Często okazuje się, że dziedzictwo kodu kilkuletnich projektów jest wielokrotnie większe niż aktualny (dobry) kod. Zdarza się, że chcemy zmodernizować projekt lub musimy po prostu coś naprawić albo sprawić, że nowy kod dogaduje się ze starym.
W tej prezentacji pokażę Wam przepis na efektywną pracę ze starym kodem i podpowiem jak nie wpaść w spiralę niekończącej się refaktoryzacji.
[4developers] - Codzienność z Legacy Code (Tomek Gramza)
1. Codzienność z Legacy Code
Efektywna praca z zastanym kodem
4Developers 2016 | Tomasz Gramza
2. Tomasz Gramza
4Developers 2016 | Tomasz Gramza
tomasz@gramza.eu
https://www.linkedin.com/in/tomaszgramza
https://github.com/to-masz
3. A. Dziedzictwo kodu
B. Zmiany w oprogramowaniu
C. Pętla informacji zwrotnej (ang. feedback loop)
D. Kod testowalny
E. Konsekwencja w działaniach
Agenda
Efektywna praca z zastanym kodem
4Developers 2016 | Tomasz Gramza
4. A. Dziedzictwo kodu
To me, legacy code is simply code without tests.
Michael C. Feathers
Legacy code. The phrase strikes disgust in the hearts
of programmers. It conjures images of slogging through
a murky swamp of tangled undergrowth with leaches
beneath and stinging flies above. It conjures odors of
murk, slime, stagnancy, and offal. Although our first joy
of programming may have been intense, the misery of
dealing with legacy code is often sufficient to
extinguish that flame.
Robert C. Martin
Code is legacy code as soon as it's written
?
4Developers 2016 | Tomasz Gramza
5. A. Dziedzictwo kodu
Ale nadal ciągle wspierany
(naprawiany)
Stary kod Kod dłużej nie
rozwijany
4Developers 2016 | Tomasz Gramza
6. A. Dziedzictwo kodu
➔ Przestarzałe
◆ rozwiązania, wzorce
◆ technologie
Dlaczego przestajemy rozwijać kod?
4Developers 2016 | Tomasz Gramza
10. A. Dziedzictwo kodu
➔ Przestarzałe
◆ rozwiązania, wzorce
◆ technologie
➔ Kod złej jakości - bez perspektyw
Dlaczego przestajemy rozwijać kod?
A code smell is a surface indication that usually
corresponds to a deeper problem in the system.
Martin Fowler
4Developers 2016 | Tomasz Gramza
13. A. Dziedzictwo kodu
➔ Zbyt trudne podejście
➔ Ryzykowny do zmiany
➔ Ciężki do zrozumienia
Codziennosc z Legacy Code
wzorce + antywzorce
testy automatyczne
KISS, SOLID
4Developers 2016 | Tomasz Gramza
14. A. Dziedzictwo kodu
Od Ciebie zależy, jakie dziedzictwo zostawisz po sobie.
4Developers 2016 | Tomasz Gramza
15. B. Zmiany w oprogramowaniu
Nowa funkcjonalność Naprawa błędu Refaktoryzacja
Logika aplikacji zmiany zmiany zmiany
Aktualna logika biznesowa zmiany
Nowa logika biznesowa zmiany
4Developers 2016 | Tomasz Gramza
16. B. Zmiany w oprogramowaniu
1. Określ punkty zmiany
2. Znajdź miejsca wymagające sprawdzenia
3. Dokonaj zmiany
4. Refaktoryzuj
Algorytm zmiany zastanego kodu
4Developers 2016 | Tomasz Gramza
17. C. Pętla informacji zwrotnej
ryzykowna zmiana
edytuj i módl się pokryj i zmieniajvs.
4Developers 2016 | Tomasz Gramza
19. C. Pętla informacji zwrotnej
Manualne
dni - tygodnie
4Developers 2016 | Tomasz Gramza
20. C. Pętla informacji zwrotnej
Automatyczne
minuty - godziny
4Developers 2016 | Tomasz Gramza
21. C. Pętla informacji zwrotnej
Jednostkowe
sekundy
4Developers 2016 | Tomasz Gramza
22. D. Kod testowalny - narzędzia
https://github.com/SeleniumHQ/docker-selenium
https://github.com/guzzle/guzzle
Guzzle is a PHP HTTP client that makes it easy to send HTTP requests and trivial to integrate with web services.
Selenium automates browsers. That's it! What you do with that power is entirely up to you.
https://github.com/facebook/php-webdriver
Php-webdriver library is PHP language binding for Selenium WebDriver, which allows you to control web browsers from PHP.
4Developers 2016 | Tomasz Gramza
23. D. Kod testowalny - narzędzia
https://github.com/sebastianbergmann/phpunit
PHPUnit is a programmer-oriented testing framework for PHP. It is an instance of the xUnit architecture for unit
testing frameworks.
PHPUnit
4Developers 2016 | Tomasz Gramza
24. D. Kod testowalny
Dylemat Legacy Code
Kiedy zmieniamy kod, powinniśmy mieć testy.
Żeby mieć testy, musimy zmienić kod.
Separacja
4Developers 2016 | Tomasz Gramza
26. E. Konsekwencja w działaniu
wyspy kodu
pokrytego testami
Flustracja i brak
satysfakcji
Nieustanna walka z
problemami
4Developers 2016 | Tomasz Gramza
27. E. Konsekwencja w działaniu
0. Pokryj testami klasę, którą chcesz zmienić
1. Napisz test kończący się niepowodzeniem
2. Spraw, aby był zielony
Staraj sie nie ruszac niepewnego kodu
3. Usuń zduplikowany kod
4. Powtórz
Algorytm zmiany zastanego kodu
4Developers 2016 | Tomasz Gramza
28. Podsumowanie
➔ Zbyt trudne podejście
➔ Ryzykowny do zmiany
➔ Ciężki do zrozumienia
Codziennosc z Legacy Code
wzorce + antywzorce
testy automatyczne
KISS, SOLID
4Developers 2016 | Tomasz Gramza
reverse engineering
+
debugging
TESTY
Zostaw po sobie
dobre dziedzictwo