PW, WEiTI, ZBiUM, 2018.10.29 Test-driven development na przykładzie funkcji matematycznej dr inż. Bartosz Papis
Spis treści 1. Po pisze się testy? 2. Czemu nie pisze się testów? 3. Czym jest Test-Driven Development? 4. Boat kata 5. Podsumowanie Październik, 2018 Page 2
Po co pisze się testy? By się upewnić, że kod robi to, co się wydaje, że robi. Październik, 2018 Page 3
Po co pisze się testy? By się upewnić, że kod robi to, co się wydaje, że robi. Najłatwiejszy sposób na uruchomienie kodu Październik, 2018 Page 4
Po co pisze się testy? By się upewnić, że kod robi to, co się wydaje, że robi. Najłatwiejszy sposób na uruchomienie kodu Najłatwiejszy sposób na weryfikację przypadków brzegowych Październik, 2018 Page 5
Po co pisze się testy? By się upewnić, że kod robi to, co się wydaje, że robi. Najłatwiejszy sposób na uruchomienie kodu Najłatwiejszy sposób na weryfikację przypadków brzegowych Najłatwiejszy sposób na odtworzenie błędu Październik, 2018 Page 6
Po co pisze się testy? By się upewnić, że kod robi to, co się wydaje, że robi. Najłatwiejszy* sposób na uruchomienie kodu Najłatwiejszy* sposób na weryfikację przypadków brzegowych Najłatwiejszy* sposób na odtworzenie błędu (*) zakładając, że kod jest testowalny Październik, 2018 Page 7
Po co pisze się testy? By minimalizować regresje. Październik, 2018 Page 8
Po co pisze się testy? By minimalizować regresje. Nie da się wprowadzić drugi raz tego samego błędu Październik, 2018 Page 9
Po co pisze się testy? By minimalizować regresje. Nie da się* wprowadzić drugi raz tego samego błędu (*) zakładając, że testy są uruchamiane i traktowane poważnie Październik, 2018 Page 10
Po co pisze się testy? By zagwarantować dobrą strukturę kodu. Październik, 2018 Page 11
Po co pisze się testy? By zagwarantować dobrą strukturę kodu. Brak ukrytych zależności Październik, 2018 Page 12
Po co pisze się testy? By zagwarantować dobrą strukturę kodu. Brak ukrytych zależności Spełnienie Single Responsibility Principle Październik, 2018 Page 13
Po co pisze się testy? By zagwarantować dobrą strukturę kodu. Brak ukrytych zależności Spełnienie Single Responsibility Principle ( ) Październik, 2018 Page 14
Po co pisze się testy? By zagwarantować dobrą strukturę kodu. Brak* ukrytych zależności Spełnienie* Single Responsibility Principle ( )* (*) chyba, że ktoś się bardzo napracuje by stworzyć testy do kodu bez tych cech Październik, 2018 Page 15
Po co pisze się testy? By stworzyć zawsze aktualną dokumentację. Październik, 2018 Page 16
Po co pisze się testy? By stworzyć zawsze aktualną dokumentację. Testy się nie przedawniają Październik, 2018 Page 17
Po co pisze się testy? By stworzyć zawsze aktualną dokumentację. Testy się nie* przedawniają (*) chyba że nie są uruchamiane albo są ignorowane Październik, 2018 Page 18
Po co pisze się testy? By się upewnić, że kod robi to, co się wydaje, że robi. By minimalizować regresje. By zagwarantować dobrą strukturę kodu. By stworzyć zawsze aktualną dokumentację. Październik, 2018 Page 19
Po co pisze się testy? By się upewnić, że kod robi to, co się wydaje, że robi.* By minimalizować regresje. By zagwarantować dobrą strukturę kodu.*** By stworzyć zawsze aktualną dokumentację. (*) Bissi et al., The effects of test driven development on internal quality, external quality and productivity: A systematic review, 2016 Elsevier (***) Madeyski, Test-Driven Development: An Empirical Evaluation of Agile Practice, 2010 Springer-Verlag Październik, 2018 Page 20
Po co pisze się testy? (2) By sprzyjać odtwarzalności wyników. Z poczucia odpowiedzialności.* (*) "Uncle" Bob Martin - "The Future of Programming" Październik, 2018 Page 21
Czemu nie pisze się testów? - Postrzegane jako strata czasu. Październik, 2018 Page 22
Czemu nie pisze się testów? - Postrzegane jako strata czasu. - Trudne. Październik, 2018 Page 23
Czym jest Test-driven development? Kent Beck, 2003 r. 1. Failing test 3. Refactor 2. Just enough code to make the test pass Październik, 2018 Page 24
Czemu nie stosuje się Test-driven development? - Postrzegane jako strata czasu. - Jeszcze trudniejsze niż pisanie testów. - Źle rozumiane. Październik, 2018 Page 25
Boat Kata Kata created by Jarosław Karczmarczyk: https://github.com/karczmarczykj/boat-kata https://en.wikipedia.org/wiki/file:boat_-_little_belt_-_02.jpeg (CC 3.0) Październik, 2018 Page 26
Boat Kata Mając daną listę punktów, obliczyć kierunek, w którym płynie łódka względem pozycji początkowej (x 5, y 5 ) (x 3, y 3 ) (x 2, y 2 ) (x 4, y 4 ) (x 1, y 1 ) Październik, 2018 Page 27
Boat Kata Kierunek to Prawo wtedy i tylko wtedy gdy α + β γ + > 0 wpp. Lewo β (x 5, y 5 ) α (x 2, y 2 ) (x 3, y 3 ) (x 4, y 4 ) γ (x 1, y 1 ) Październik, 2018 Page 28
Boat Kata Zły sposób - Kilka godzin na odświeżenie trygonometrii - Kilka godzin obliczeń na kartce - Kilka godzin implementacji β (x 5, y 5 ) α (x 2, y 2 ) (x 3, y 3 ) (x 4, y 4 ) γ (x 1, y 1 ) Październik, 2018 Page 29
Boat Kata Niezły sposób - Kilka godzin na odświeżenie trygonometrii - Kilka godzin obliczeń na kartce - Kilka godzin implementacji - Kilka godzin pisania testów β (x 5, y 5 ) α (x 2, y 2 ) (x 3, y 3 ) (x 4, y 4 ) γ (x 1, y 1 ) Październik, 2018 Page 30
Boat Kata Dobry sposób - Rozwiązywanie problemu małymi, weryfikowalnymi krokami β (x 5, y 5 ) α (x 2, y 2 ) (x 3, y 3 ) (x 4, y 4 ) γ (x 1, y 1 ) Październik, 2018 Page 31
Boat Kata Dobry sposób - Rozwiązywanie problemu małymi, weryfikowalnymi krokami Prezentacja w Visual Studio Październik, 2018 Page 32
Boat Kata Dobry sposób Październik, 2018 Page 33
Boat Kata Dobry sposób Październik, 2018 Page 34
Boat Kata Dobry sposób Październik, 2018 Page 35
Boat Kata Dobry sposób Październik, 2018 Page 36
Boat Kata Dobry sposób May 24, 2018 Page 37
Boat Kata Dobry sposób May 24, 2018 Page 38
Boat Kata Dobry sposób Październik, 2018 Page 39
Boat Kata Dobry sposób Październik, 2018 Page 40
Test-driven development - Metoda naukowa w programowaniu* (*) Mugridge,Test Driven Development and the Scientific Method, 2003 IEEE (Agile Development Conference) Październik, 2018 Page 41
Test-driven development - Metoda naukowa w programowaniu* - Narzędzie pomocne przy trudnych problemach (*) Mugridge,Test Driven Development and the Scientific Method, 2003 IEEE (Agile Development Conference) Październik, 2018 Page 42
Test-driven development - Metoda naukowa w programowaniu* - Narzędzie pomocne przy trudnych problemach - którego można używać efektywnie** (*) Mugridge,Test Driven Development and the Scientific Method, 2003 IEEE (Agile Development Conference) (**) Beck,Test Driven Development: By Example, 2000 Addison-Wesley Professional Październik, 2018 Page 43
Test-driven development - Metoda naukowa w programowaniu* - Narzędzie pomocne przy trudnych problemach - którego można używać efektywnie** - gwarantujące wysokie pokrycie kodu testami (*) Mugridge,Test Driven Development and the Scientific Method, 2003 IEEE (Agile Development Conference) (**) Beck,Test Driven Development: By Example, 2000 Addison-Wesley Professional Październik, 2018 Page 44
Test-driven development Dziękuję za uwagę Październik, 2018 Page 45