SlideShare a Scribd company logo
1 of 29
Download to read offline
Codzienność z Legacy Code
Efektywna praca z zastanym kodem
4Developers 2016 | Tomasz Gramza
Tomasz Gramza
4Developers 2016 | Tomasz Gramza
tomasz@gramza.eu
https://www.linkedin.com/in/tomaszgramza
https://github.com/to-masz
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
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
A. Dziedzictwo kodu
Ale nadal ciągle wspierany
(naprawiany)
Stary kod Kod dłużej nie
rozwijany
4Developers 2016 | Tomasz Gramza
A. Dziedzictwo kodu
➔ Przestarzałe
◆ rozwiązania, wzorce
◆ technologie
Dlaczego przestajemy rozwijać kod?
4Developers 2016 | Tomasz Gramza
A. Dziedzictwo kodu
4Developers 2016 | Tomasz Gramza
A. Dziedzictwo kodu
A. Dziedzictwo kodu
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
A. Dziedzictwo kodu
4Developers 2016 | Tomasz Gramza
A. Dziedzictwo kodu
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
A. Dziedzictwo kodu
Od Ciebie zależy, jakie dziedzictwo zostawisz po sobie.
4Developers 2016 | Tomasz Gramza
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
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
C. Pętla informacji zwrotnej
ryzykowna zmiana
edytuj i módl się pokryj i zmieniajvs.
4Developers 2016 | Tomasz Gramza
C. Pętla informacji zwrotnej
4Developers 2016 | Tomasz Gramza
C. Pętla informacji zwrotnej
Manualne
dni - tygodnie
4Developers 2016 | Tomasz Gramza
C. Pętla informacji zwrotnej
Automatyczne
minuty - godziny
4Developers 2016 | Tomasz Gramza
C. Pętla informacji zwrotnej
Jednostkowe
sekundy
4Developers 2016 | Tomasz Gramza
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
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
D. Kod testowalny
Dylemat Legacy Code
Kiedy zmieniamy kod, powinniśmy mieć testy.
Żeby mieć testy, musimy zmienić kod.
Separacja
4Developers 2016 | Tomasz Gramza
D. Kod testowalny
Łamanie zależności
E. Konsekwencja w działaniu
wyspy kodu
pokrytego testami
Flustracja i brak
satysfakcji
Nieustanna walka z
problemami
4Developers 2016 | Tomasz Gramza
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
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
Q & A
4Developers 2016 | Tomasz Gramza

More Related Content

Similar to [4developers] - Codzienność z Legacy Code (Tomek Gramza)

Windows 8 potyczki z kodem - Poznańska Grupa Zawodowa .NET
Windows 8 potyczki z kodem - Poznańska Grupa Zawodowa .NETWindows 8 potyczki z kodem - Poznańska Grupa Zawodowa .NET
Windows 8 potyczki z kodem - Poznańska Grupa Zawodowa .NETWhalla Labs
 
Refactoring - Jak pozostać przy zdrowych zmysłach, redukując dług
Refactoring - Jak pozostać przy zdrowych zmysłach, redukując długRefactoring - Jak pozostać przy zdrowych zmysłach, redukując dług
Refactoring - Jak pozostać przy zdrowych zmysłach, redukując długMax Małecki
 
Invitation on hybrisonuniversity_go-2
Invitation on hybrisonuniversity_go-2Invitation on hybrisonuniversity_go-2
Invitation on hybrisonuniversity_go-2Marek Nawa
 
Responsywność - jak zacząć? - Wiesław Kotecki, Piotr Słowik, Uselab
Responsywność - jak zacząć? - Wiesław Kotecki, Piotr Słowik, UselabResponsywność - jak zacząć? - Wiesław Kotecki, Piotr Słowik, Uselab
Responsywność - jak zacząć? - Wiesław Kotecki, Piotr Słowik, UselabSektor 3.0
 
Programowanie na wiele platform mobilnych - 2012
Programowanie na wiele platform mobilnych - 2012Programowanie na wiele platform mobilnych - 2012
Programowanie na wiele platform mobilnych - 2012Cezary Walenciuk
 
C++. Zaawansowane programowanie
C++. Zaawansowane programowanieC++. Zaawansowane programowanie
C++. Zaawansowane programowanieWydawnictwo Helion
 
C++. Kruczki i fortele w programowaniu
C++. Kruczki i fortele w programowaniuC++. Kruczki i fortele w programowaniu
C++. Kruczki i fortele w programowaniuWydawnictwo Helion
 

Similar to [4developers] - Codzienność z Legacy Code (Tomek Gramza) (12)

Windows 8 potyczki z kodem - Poznańska Grupa Zawodowa .NET
Windows 8 potyczki z kodem - Poznańska Grupa Zawodowa .NETWindows 8 potyczki z kodem - Poznańska Grupa Zawodowa .NET
Windows 8 potyczki z kodem - Poznańska Grupa Zawodowa .NET
 
Refactoring - Jak pozostać przy zdrowych zmysłach, redukując dług
Refactoring - Jak pozostać przy zdrowych zmysłach, redukując długRefactoring - Jak pozostać przy zdrowych zmysłach, redukując dług
Refactoring - Jak pozostać przy zdrowych zmysłach, redukując dług
 
Invitation on hybrisonuniversity_go-2
Invitation on hybrisonuniversity_go-2Invitation on hybrisonuniversity_go-2
Invitation on hybrisonuniversity_go-2
 
Od zera do Automattica
Od zera do AutomatticaOd zera do Automattica
Od zera do Automattica
 
C# i .NET
C# i .NETC# i .NET
C# i .NET
 
Responsywność - jak zacząć? - Wiesław Kotecki, Piotr Słowik, Uselab
Responsywność - jak zacząć? - Wiesław Kotecki, Piotr Słowik, UselabResponsywność - jak zacząć? - Wiesław Kotecki, Piotr Słowik, Uselab
Responsywność - jak zacząć? - Wiesław Kotecki, Piotr Słowik, Uselab
 
C++. Styl programowania
C++. Styl programowaniaC++. Styl programowania
C++. Styl programowania
 
Visual C# .NET. Encyklopedia
Visual C# .NET. EncyklopediaVisual C# .NET. Encyklopedia
Visual C# .NET. Encyklopedia
 
Programowanie na wiele platform mobilnych - 2012
Programowanie na wiele platform mobilnych - 2012Programowanie na wiele platform mobilnych - 2012
Programowanie na wiele platform mobilnych - 2012
 
C++. Zaawansowane programowanie
C++. Zaawansowane programowanieC++. Zaawansowane programowanie
C++. Zaawansowane programowanie
 
C# i ASP.NET. Szybki start
C# i ASP.NET. Szybki startC# i ASP.NET. Szybki start
C# i ASP.NET. Szybki start
 
C++. Kruczki i fortele w programowaniu
C++. Kruczki i fortele w programowaniuC++. Kruczki i fortele w programowaniu
C++. Kruczki i fortele w programowaniu
 

[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
  • 7. A. Dziedzictwo kodu 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
  • 11. A. Dziedzictwo kodu 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
  • 18. C. Pętla informacji zwrotnej 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
  • 29. Q & A 4Developers 2016 | Tomasz Gramza