Slide 1

Slide 1 text

Wprowadzenie do TDD

Slide 2

Slide 2 text

* proces - Red Green Refactor * korzyści wynikające ze stosowania TDD * code kata - ciągłe doskonalnie * composer - pobieranie bibliotek i zarządzanie ich zależnościami * phpspec - narzędzie do specyfikacji jednostek w kodzie O czym powiemy?

Slide 3

Slide 3 text

* wytwarzanie oprogramowania sterowane testsami * test first * Kent Beck * specyfikacja vs test * London TDD vs Classic TDD TDD

Slide 4

Slide 4 text

Proces TDD

Slide 5

Slide 5 text

1. Nie pisz kodu produkcyjnego bez specyfikacji (testu) 2. Pisz tylko tyle specyfikacji (testów) ile jest potrzebne do ukazania problemów w kodzie produkcyjnym 3. Pisz tylko tyle kodu produkcyjnego ile jest potrzebne do spełnienia specyfikacji 3 prawa wujka Boba

Slide 6

Slide 6 text

1. Mniejszy czas debugowania 2. "Żyjąca" dokumentacja 3. Wymusza tworzenie kodu łatwotestowalnego = słabo powiązanego (low coupling) 4. Testy regresji - odwaga do zmian w projekcie Korzyści ze stosowania TDD

Slide 7

Slide 7 text

1. Specyfikacja powstaje po kodzie – to nie TDD 2. Testowanie i 120% pokrycia testami 3. Testy przywiązane do implementacji utrudniają zmianę (beton) 4. Testy to też kod (czytelność i utrzymanie) Błędy w TDD

Slide 8

Slide 8 text

1. Krótkie, proste zadania programistyczne (~30min) 2. Ciągłe potwarzanie 3. Trenowanie nawyków 4. Bowling game, Prime Factors, String calculator, FizzBuzz Code Kata

Slide 9

Slide 9 text

Rozkład liczby na czynniki pierwsze Przykład 1 -> [] 2 -> [2] 3 -> [3] 4 -> [2,2] 6 -> [2,3] 8 -> [2, 2, 2] 9 -> [3,3] 12 -> [2,2,3] 15 -> [3,5] Przykład – Prime Factors

Slide 10

Slide 10 text

@cocoders Composer ● https://getcomposer.org/down load/ ● https://packagist.org ● Zarządzanie zależnościami ● Autoloading (PSR-0, PSR-4) ● composer.json

Slide 11

Slide 11 text

{ "require-dev": { "phpspec/phpspec": "~2.3" }, "config": { "bin-dir": "bin" }, "autoload": { "psr-0": {"": "src"} } } composer.json

Slide 12

Slide 12 text

php bin/phpspec desc "Moja\NazwaKlasy" php bin/phpspec run it_*, its_* $this jako testowany obiekt phpspec

Slide 13

Slide 13 text

$this->getRating()->shouldBe(5); $this->getTitle()->shouldBeEqualTo("Star Wars"); $this->getReleaseDate()->shouldReturn(233366400); $this->getRating()->shouldBeLike('5'); $this->shouldThrow('\InvalidArgumentException')- >during('setRating', -3); $this->shouldHaveType('Movie'); $this->getTitle()->shouldBeString(); phpspec matchers

Slide 14

Slide 14 text

Code Kata Time!

Slide 15

Slide 15 text

https://goo.gl/T4geV6

Slide 16

Slide 16 text

Dziękujemy! @skowii @karolsojko @l3l0