testy jednostokowe

45
Testy jednostowe Hubert Marzec ([email protected]) www.dzbanyit.pl

Upload: hugoamv

Post on 26-May-2015

1.181 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Testy  Jednostokowe

Testy jednostowe

Hubert Marzec ([email protected])

www.dzbanyit.pl

Page 2: Testy  Jednostokowe

AgendaAgenda

Trochę teoriTrochę teori Co testować?Co testować? Frameworki testowe: PHPUnitFrameworki testowe: PHPUnit Programowanie sterowane testamiProgramowanie sterowane testami Jak zapewnić jakość testówJak zapewnić jakość testów

Page 3: Testy  Jednostokowe

Testy jednostkowe def.Testy jednostkowe def.

Test jednostkowyTest jednostkowy jest fragmentem jest fragmentem kodu, sprawdzającym inny fragment kodu, sprawdzającym inny fragment kodu. kodu.

Page 4: Testy  Jednostokowe

Po co pisać testy jednostkowe?Po co pisać testy jednostkowe?

Znajdź błędy nim one znajdą ciebieZnajdź błędy nim one znajdą ciebie Bezproblemowy refactoringBezproblemowy refactoring Praca w grupiePraca w grupie DokumentacjaDokumentacja Redukcja kosztówRedukcja kosztów Wyższa jakość koduWyższa jakość kodu

Page 5: Testy  Jednostokowe

Znajdź błędy nim one znajdą Znajdź błędy nim one znajdą ciebieciebie

Page 6: Testy  Jednostokowe

Bezproblemowy refactoringBezproblemowy refactoring

RefaktoryzacjaRefaktoryzacja - proces wprowadzania - proces wprowadzania zmian w programie, w wyniku którego zmian w programie, w wyniku którego nie zmienia się funkcjonalnośćnie zmienia się funkcjonalność

Page 7: Testy  Jednostokowe

Bezproblemowy refactoringBezproblemowy refactoring

Test: źle Test: dobrze

Napisz test

Napisz kod

Page 8: Testy  Jednostokowe

Praca w grupiePraca w grupie

Page 9: Testy  Jednostokowe

DokumentacjaDokumentacja

testBalanceIsInitiallyZero() testBalanceIsInitiallyZero() testBalanceCannotBecomeNegative() testBalanceCannotBecomeNegative()

Page 10: Testy  Jednostokowe

Redukcja kosztówRedukcja kosztów

FazaFaza KosztKoszt

AnalizaAnaliza 1zł1zł

ProjektProjekt 5zł5zł

KodowanieKodowanie 10zł10zł

Testy jednostkoweTesty jednostkowe 15zł15zł

Testy integracyjneTesty integracyjne 22zł22zł

Testy akceptacyjneTesty akceptacyjne 50zł50zł

Po wdrożeniuPo wdrożeniu >100zł>100zł

Page 11: Testy  Jednostokowe

Redukcja kosztówRedukcja kosztów

FazaFaza KosztKoszt

AnalizaAnaliza 6 min6 min

ProjektProjekt 0,5 h0,5 h

KodowanieKodowanie 1h1h

Testy jednostkoweTesty jednostkowe 1,5h1,5h

Testy integracyjneTesty integracyjne 2,2 h2,2 h

Testy akceptacyjneTesty akceptacyjne 5 h5 h

Po wdrożeniuPo wdrożeniu > 10 h> 10 h

Page 12: Testy  Jednostokowe

Wyższa jakość koduWyższa jakość kodu

If it ain't broke, you'reIf it ain't broke, you're not trying hard enough.not trying hard enough.

googletesting.blogspot.com

Page 13: Testy  Jednostokowe

Co testować?Co testować?

Wartości spodziewane Wartości spodziewane Wartości brzegoweWartości brzegowe Wymusić wystąpienie błęduWymusić wystąpienie błędu

Page 14: Testy  Jednostokowe

CelCel

Automatyzacja testówAutomatyzacja testów Łatwe uruchomianie pewnego Łatwe uruchomianie pewnego

zakresu testówzakresu testów Porządek w testachPorządek w testach Raporty dotyczące wynikówRaporty dotyczące wyników

Page 15: Testy  Jednostokowe

CelCel

Automatyzacja testówAutomatyzacja testów Łatwe uruchomianie pewnego Łatwe uruchomianie pewnego

zakresu testówzakresu testów Porządek w testachPorządek w testach Raporty dotyczące wynikówRaporty dotyczące wyników

Rozwiązanie: Framework

Page 16: Testy  Jednostokowe

PHPUnitPHPUnitFrameworkFramework

Page 17: Testy  Jednostokowe

Frameworki testowe: PHPUnitFrameworki testowe: PHPUnit

Przypadki testowe (test case)Przypadki testowe (test case) setUp() i tearDown()setUp() i tearDown() Zestawy testów (test suite)Zestawy testów (test suite) Niekompletne i opuszczone testyNiekompletne i opuszczone testy Obiekty współpracująceObiekty współpracujące

Page 18: Testy  Jednostokowe

Przypadki testowePrzypadki testowe

pobierzSaldo() pobierzSaldo() ustalSaldo($saldo) ustalSaldo($saldo) wplataKwoty($kwota)wplataKwoty($kwota) wyplataKwoty($kwota)wyplataKwoty($kwota)

KontoBankowe

Page 19: Testy  Jednostokowe

Przypadki testowePrzypadki testowe

Początkowy stan konta musi być Początkowy stan konta musi być zerowyzerowy

Stan konta nigdy nie może być ujemnyStan konta nigdy nie może być ujemny

Warunki

Page 20: Testy  Jednostokowe

Przypadki testowePrzypadki testowe

Page 21: Testy  Jednostokowe

Asercje w PHPUnitAsercje w PHPUnit

assertEquals($expected, $actual, $message)assertEquals($expected, $actual, $message)

assertNull($object, $message)assertNull($object, $message) assertTrue($condition, $message)assertTrue($condition, $message) assertFlase($condition, $message)assertFlase($condition, $message) assertContains($needle, $haystack, $message)assertContains($needle, $haystack, $message)

Spodziewany wynikDziałania

Wartość będąca wynikiemrzeczywisty, pozyskanym podczas testu

Page 22: Testy  Jednostokowe

Przypadki testowePrzypadki testowe

Page 23: Testy  Jednostokowe

Przypadki testowePrzypadki testowe

Page 24: Testy  Jednostokowe

Przypadki testowePrzypadki testowe

Page 25: Testy  Jednostokowe

Przypadki testowePrzypadki testowe

Page 26: Testy  Jednostokowe

Przypadki testowePrzypadki testowe

Page 27: Testy  Jednostokowe

setUp() i tearDown()setUp() i tearDown()

Page 28: Testy  Jednostokowe

setUp() i tearDown()setUp() i tearDown()

Page 29: Testy  Jednostokowe

Zestawy testów: test suiteZestawy testów: test suite

Page 30: Testy  Jednostokowe

Niekompletne testyNiekompletne testy

Page 31: Testy  Jednostokowe

Niekompletne testyNiekompletne testy

Page 32: Testy  Jednostokowe

Niekompletne testyNiekompletne testy

Test: źleTest: dobrze ??

Page 33: Testy  Jednostokowe

Niekompletne testyNiekompletne testy

Page 34: Testy  Jednostokowe

Opuszczone testyOpuszczone testy

Page 35: Testy  Jednostokowe

Opuszczone testyOpuszczone testy

Page 36: Testy  Jednostokowe

Obiekty współpracująceObiekty współpracujące

potrzebuję tylko żeby ten obiekt pomocniczy istniał (Dummy)

potrzebuję żeby obiekt pomocniczy coś mi dał (Stub)

potrzebuje sprawdzić czy testowany kod wywołuje odpowiednie metody obiektu pomocniczego (Mock)

Page 37: Testy  Jednostokowe

Programowanie sterowane testamiProgramowanie sterowane testami

Pochodzenie: XP, AgilePochodzenie: XP, Agile Najpierw test, potem kodNajpierw test, potem kod Każda linia kodu jest wymuszona, przez Każda linia kodu jest wymuszona, przez

niedziałający testniedziałający test Minimalna ilość potrzebnego koduMinimalna ilość potrzebnego kodu 100% pokrycia kodu (code coverage)100% pokrycia kodu (code coverage)

Page 38: Testy  Jednostokowe

Programowanie sterowane testamiProgramowanie sterowane testami

TEST

CODE

REFACTOR

Page 39: Testy  Jednostokowe

Programowanie sterowane testamiProgramowanie sterowane testami

Page 40: Testy  Jednostokowe

Jak zapewnić jakość testówJak zapewnić jakość testów

Proste testyProste testy fundament i absolutne minimumfundament i absolutne minimum

Code coverageCode coverage proste w użyciuproste w użyciu daje niezłe rozeznanie, choć czasem daje niezłe rozeznanie, choć czasem

kłamiekłamie

Page 41: Testy  Jednostokowe

Code coverageCode coverage

Które fragmentu kodu zostały Które fragmentu kodu zostały wykonane podczas testówwykonane podczas testów

Nie mówi nic o jakości produktu, mówi Nie mówi nic o jakości produktu, mówi o jakości testówo jakości testów

Umożliwia ustalenie minimalnego Umożliwia ustalenie minimalnego wymaganego procentowego pokrycia wymaganego procentowego pokrycia kodukodu

Page 42: Testy  Jednostokowe

Statements/line coverageStatements/line coverage

które linie kodu zostały wykonaneif (warunek) {...}

Nie ważne, że będziemy mieli test tylko dla warunku == true i tak dostaniemy 100% pokrycia

Page 43: Testy  Jednostokowe

Code coverage - PHPUnitCode coverage - PHPUnit

Page 44: Testy  Jednostokowe

Code coverage - PHPUnitCode coverage - PHPUnit

Page 45: Testy  Jednostokowe

Pytania, uwagi ?Pytania, uwagi ?

Hubert Marzec ([email protected])

www.dzbanyit.pl