Loading…

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

Like this presentation? Why not share!

02 - Mechanika TDD

on

  • 536 views

 

Statistics

Views

Total Views
536
Views on SlideShare
536
Embed Views
0

Actions

Likes
0
Downloads
11
Comments
0

0 Embeds 0

No embeds

Accessibility

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-NonCommercial LicenseCC Attribution-NonCommercial License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

02 - Mechanika TDD 02 - Mechanika TDD Presentation Transcript

  • Plan na dziś 1.Powtórzenie 2.Red 3.Green 4.Refactor
  • 3 PRAWA TDD wg UNCLE BOBA 1.Nie pisz żadnego kodu produkcyjnego jeśli nie ma nieprzechodzącego testu 2.Pisz tylko tyle testu, aby zademonstrować, że nie przechodzi 3.Pisz tylko tyle kodu produkcyjnego, aby test przeszedł
  • CYKL TDD spraw aby test przechodził GREEN RED refaktoryzuj napisz nieprzechodzący REFACTOR test
  • RED Clock clock = new Clock(); clock.set(6, 15); wait.minutes(5); assertClockAt(6, 20);
  • RED ✔MYŚLENIE ✔PROJEKTOWANIE Clock clock = new Clock(); clock.set(6, 15); ✔JAKOŚĆ PROJEKTU ✔TESTOWALNOŚĆ wait.minutes(5); ✔JAKOŚĆ TESTU assertClockAt(6, 20); FEEDBACK
  • LISTA TESTÓW ● sprzedaż jednego produktu ● brak kodu kreskowego ● pusty kod kreskowy ● ... ● zła nazwa „Storage” ● duplikacja w CatalogItem
  • DOSTOSUJ SZYBKOŚĆ
  • CO SIĘ STANIE?
  • WIELKOŚĆ KROKU BIEGŁOŚĆ W TDD ZŁOŻONOŚĆ PROBLEMU ZNAJOMOŚĆ DZIEDZINY
  • TESTY JEDNOSTKOWE ● Muszą uruchamiać się szybko ● Test nie jest testem jednostkowym jeśli: ● komunikuje się z bazą danych ● korzysta z sieci ● dotyka systemu plików ● musisz coś zmienić w środowisku aby go uruchomić Michael C. Feathers, Working Effectively with Legacy Code
  • DOBRE TESTY JEDNOSTKOWE ● F ast ● tysiące / sekundę ● I solated ● wskazuje błąd ● R epeatable ● nieważna kolejność ani czas ● S elf-validating ● brak ręcznego sprawdzania ● T imely ● napisane przed kodem
  • GREEN class Clock { … } ? Clock clock = new Clock(); clock.set(6, 15); class Clock wait.minutes(5); { ? … assertClockAt(6, 20); } ? class Clock { … }
  • GREEN ✔ POPRAWNOŚĆ ✔ REGRESJA class Clock { … ✔ WIELKOŚĆ KROKU ? } Clock clock = new Clock(); clock.set(6, 15); wait.minutes(5); class Clock { ? … FEEDBACK assertClockAt(6, 20); } ? class Clock { … }
  • TRIANGULATE FAKE IT OBVIOUS IMPLEMENT ATION
  • FAKE IT public int getSize { return 12; }
  • public static int[] generatePrimes(int maxValue) { if (maxValue >= 2) // the only valid case { // declarations int s = maxValue + 1; // size of array boolean[] f = new boolean[s]; int i; // initialize array to true. for (i = 0; i < s; i++) f[i] = true; // get rid of known non-primes f[0] = f[1] = false; // sieve int j; for (i = 2; i < Math.sqrt(s) + 1; i++) { if (f[i]) // if i is uncrossed, cross its multiples. { for (j = 2 * i; j < s; j += i) f[j] = false; // multiple is not prime } } // how many primes are there? int count = 0; for (i = 0; i < s; i++) { if (f[i]) count++; // bump count. } int[] primes = new int[count]; // move the primes into the result for (i = 0, j = 0; i < s; i++) { if (f[i]) // if prime primes[j++] = i; OBVIOUS } return primes; // return the primes } else IMPLEMENT // maxValue < 2 return new int[0]; // return null array if bad input. } ATION
  • TRIANGULATE integer6ShouldBeDivisibleBy3 public boolean isDivisible(int dividend, int divisor { return true; } integer7ShouldNotBeDivisibleBy3 public boolean isDivisible(int dividend, int divisor { return dividend % divisor == 0; }
  • REFACTOR Clock clock = new Clock(); ? clock.set(6, 15); wait.minutes(5); assertClockAt(6, 20); ? ?
  • REFACTOR ✔ PROJEKT (ŁATWOŚĆ) ✔ TESTY (BEZPIECZEŃSTWO) Clock clock = new Clock(); clock.set(6, 15); ? wait.minutes(5); assertClockAt(6, 20); FEEDBACK ? ?
  • REFAKTORYZACJA ZMIANA WEWNĘTRZNEJ STRUKTURY KODU BEZ ZMIANY ZEWNĘTRZNEGO ZACHOWANIA
  • POZIOMY REFAKTORYZACJI ; e () c P ri e b as r. r de ; a nO 00) = 10 e > r ic ce s eP Pri ba ase e b u bl n ( do tur re ); ce() > 1000 er.basePri (anOrd return
  • 2 NAJWAŻNIEJSZE ZASADY IMPROVE NAMES REMOVE DUPLICATION (DRY)
  • UTRZYMUJ GREEN TESTY REFACTOR ZIELONE
  • DZIĘKUJĘ Zdjęcia: [7,8,9] http://www.flickr.com/photos/thofik/3920097812 [14,16] http://www.flickr.com/photos/29225114@N08/2778223048/ [14] http://www.flickr.com/photos/j-pocztarski/4226650088/ [22] http://www.flickr.com/photos/macca/204553997 [22] http://www.courier-journal.com/blogs/vel05/uploaded_images/baby-names-720609.jpg