Test-Driven Development

Podobne dokumenty
METODY PROGRAMOWANIA

Program szkolenia: Test Driven Development (TDD) using Spock or JUnit 5

Testowanie mutacyjne

Techniki efektywnego testowania kodu dla programistów Java (Spock

Całościowe podejście do testowania automatycznego dla programistów. (TDD, BDD, Spec. by Example, wzorce, narzędzia)

Test-driven development na przykładzie funkcji matematycznej

szkolenia pod drzewem Wybrane Techniki XP bnd 2008 Tomasz Włodarek. Materiał udostępniany na podstawie licencji Creative Commons (by-nc-nd) 1.00.

Testowanie aplikacji mobilnych na platformie Android - architektura, wzorce, praktyki i narzędzia

X-DRIVEN DESIGN, Y-DRIVEN DEVELOPMENT NICZEGO NIE ZMIENIĄ

Całościowe podejście do testowania automatycznego dla programistów. /C#/PHP (TDD, BDD, Spec. by Example, wzorce, narzędzia)

Podstawy programowania III WYKŁAD 6

Programowanie Zespołowe

Michał Sierzputowski. Zautomatyzuj swoje testy automatyczne oparte o Selenium

NAJLEPSZE STRATEGIE SKUTECZNYCH PROGRAMISTÓW. TECHNIKI PRACY Z KODEM KOD: NSKOD

Ćwiczenie 1. Kolejki IBM Message Queue (MQ)

Sexy unit testy. czyli o kilku praktykach w testach jednostkowych

Weryfikacja i walidacja. Metody testowania systemów informatycznych

Bezpieczeństwo frameworków WEBowych Java na przykładzie ataku CSRF

Quality in Clouds. Michał Dec

JUnit TESTY JEDNOSTKOWE. Waldemar Korłub. Platformy Technologiczne KASK ETI Politechnika Gdańska

Aplikacje w środowisku Java

Testowanie według modelu (MBT) Stowarzyszenie Inżynierii Wymagań wymagania.org.pl

Programowanie poprzez testy z wykorzystaniem JUnit

Budowa aplikacji webowej w oparciu o Maven2 oraz przykłady testów jednostkowych. Wykonał Marcin Gadamer

Wprowadzenie do Behaviordriven

Behavior Driven Development (BDD)

Wywoływanie metod zdalnych

Testowy dokument raz dwa trzy

Programowanie zespołowe

SubVersion. Piotr Mikulski. SubVersion. P. Mikulski. Co to jest subversion? Zalety SubVersion. Wady SubVersion. Inne różnice SubVersion i CVS

Platformy programistyczne:.net i Java L ABORATORIUM 7,8: HACKATHON - JTTT

2) W wyświetlonym oknie należy zaznaczyć chęć utworzenia nowej aplikacji (wygląd okna może się różnić od powyższego); kliknąć OK

Testowanie aplikacji Java Servlets

Instrukcja konfiguracji usługi Wirtualnej Sieci Prywatnej w systemie Mac OSX

Receptury - niezbędnik projektanta i architekta

Produktywne tworzenie aplikacji webowych z wykorzystaniem Groovy i

Program szkolenia: Receptury testowania automatycznego - problemy, strategie, taktyki, techniki, narzędzia

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Wojewodztwo Koszalinskie: Obiekty i walory krajoznawcze (Inwentaryzacja krajoznawcza Polski) (Polish Edition)

Podstawy i języki programowania

Programowanie zespołowe

ANKIETA ŚWIAT BAJEK MOJEGO DZIECKA

Automatyczne generowanie testów z modeli. Bogdan Bereza Automatyczne generowanie testów z modeli

Tworzenie rozwiązań informatycznych w oparciu o Customer Driven Development

Remote Method Invocation 17 listopada 2010

Systemy kontroli wersji

Specyfikacja testów akceptacyjnych Radosław Iglantowicz, Tomasz Bruździński,

Podejście obiektowe do budowy systemów rozproszonych

Zmiana sposobu dostarczania aplikacji wspierających funkcje państwa

Programming with Invariants through Targeted Synthesis. John Sarracino

Automatyczne testowanie aplikacji Android

DM-ML, DM-FL. Auxiliary Equipment and Accessories. Damper Drives. Dimensions. Descritpion

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

Testy automatyczne. Korzystające z junit

Open Source w służbie developerom

Uniwersytet dziecięcy jako laboratorium

Wywoływanie metod zdalnych

Programowanie warstwy klienta w aplikacji JavaEE

Katowice, plan miasta: Skala 1: = City map = Stadtplan (Polish Edition)

Tworzenie oprogramowania

Spring Framework - wprowadzenie i zagadnienia zaawansowane

Bezpieczne uruchamianie apletów wg

SQL injection. Metody włamań do systemów komputerowych p. 1/13. Bogusław Kluge, Karina Łuksza, Ewa Makosa

Zwinna współpraca programistów i testerów z wykorzystaniem BDD i. by Example (JBehave/Spock/SpecFlow)

Jak usprawnić tworzenie i zarządzanie stroną na drupalu. Maciej Łukiański

EXCEL PL PROGRAMOWANIE PDF

Programowanie obiektowe

Od Kodera przez Developera do Lidera

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Aplikacje internetowe i rozproszone - laboratorium

Czysta architektura (nawet z Django!) Sebas an PyWaw 72

Zagadnienia. Inżynieria Oprogramowania

Bazy i Systemy Bankowe Sp. z o.o. ul. Kasprzaka 3, Bydgoszcz

Programowanie obiektowe

Testowanie. Ryszard Beczek & Piotr Miłkowski 1 04/11/07

Lesson 46 ZAIMKI. przymiotnik w funkcji dzierżawczej / zaimek dzierżawczy Liczba pojedyncza

Programowanie gier eventy. Dalton & Cartman KNTG Polygon, 21 grudnia 2015 r.

Tworzenie aplikacji w języku Java

Ćwiczenia 2 IBM DB2 Data Studio

Artur Wielogórski.

Bazy danych dla producenta mebli tapicerowanych. Bartosz Janiak Marcin Sikora Wrocław r.

Obsługa błędów za pomocą wyjątków. Paweł Motofa (140746)

Systemy mobilne. Laboratorium. Dostęp do danych GPS w Windows Phone 7

Programowanie kontraktowe w Javie

Weronika Mysliwiec, klasa 8W, rok szkolny 2018/2019

Język JAVA podstawy. wykład 1, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Remote Method Invocation 17 listopada rozproszonych. Dariusz Wawrzyniak (IIPP) 1

TESTOWANIE OPROGRAMOWANIA

Cele. Definiowanie wyzwalaczy

Języki i Techniki Programowania II. Wykład 15. Testowanie

Wątki (Threads) Potrzeby. Przetwarzanie równoległe i współbieŝne. Cechy programowania wątkowego. Concurrent programming is like

Czym są właściwości. Poprawne projektowanie klas

Rok akademicki: 2012/2013 Kod: IET SW-s Punkty ECTS: 3. Kierunek: Elektronika i Telekomunikacja Specjalność: Systemy wbudowane

Formularz dla osób planujących ubiegać się o przyjęcie na studia undergraduate (I stopnia) w USA na rok akademicki



Acceptance Test Driven Development wspierane przez narzędzie ROBOT Framework. Edyta Tomalik Grzegorz Ziemiecki

Testowanie jednostkowe. Jacek Starzyński, ZETiIS PW

Testowanie oprogramowania cz. 1

Transkrypt:

Test-Driven Development droga od podstaw do biegłości w rozwijaniu dużych aplikacji Krzysztof Jelski

O mnie Szkolenia Software

TDD

Odcinek 1 TDD newbie

TDD C#.NET CF

Ciekawość Oczekiwania TDD C#.NET CF Nieznajomość C#

Ciekawość Oczekiwania TDD C#.NET CF Pewność C# level up! Nieznajomość C# Przyjemność z pracy

Postawa Technika Droga Lesson learnt #1 Nie trzeba dużo by zacząć

TDD C#.NET CF

TDD C#.NET CF Moja ocena

TDD C#.NET CF Moja ocena Moja decyzja

TDD C#.NET CF Moja ocena Moja decyzja Moja odpowiedzialność

Postawa Technika Droga Lesson learnt #2 TDD to odpowiedzialność developera

Odcinek 2 TDD zealot

Testy, którym mogę zaufać GUI DB

Testy, którym mogę zaufać GUI DB

Zdalny Pair Programming

RED, GREEN, REFACTOR! WTF? WUT?

Postawa Technika Droga Lesson learnt #3 Nie jest łatwo nauczyć TDD * * - zwłaszcza, gdy ktoś nie chce

Nowy projekt Java Wicket 10 osób 2 z doświadczeniem w TDD

Postawa Technika Droga Lesson learnt #4 Nie narzucaj TDD

Duży test-suite potrafi boleć

Duży test-suite potrafi boleć 621 tests failed

Postawa Technika Droga Lesson learnt #5 Dbaj o kod testowy tak jak o produkcyjny

DEPENDENCY INJECTION

DEPENDENCY INJECTION

Postawa Technika Droga Lesson learnt #6 Constructor Injection zwiększa testowalność

Odcinek 3 TDD practitioner

9,496 tests (+8) Took 3 min 4 sec.

Postawa Technika Droga Lesson learnt #7 Dobrze utrzymany zestaw testów daje moc

9,496 tests

9,496 tests

Jakiego rodzaju testu zabrakło?

server = new Server(port); System.setProperty("PORT", String.valueOf(port)); WebAppContext context = new WebAppContext(); context.setconfigurations(new Configuration[]{new WebXmlConfiguration()}); context.setresourcebase(calculateresourcebase()); server.sethandler(context);

server = new Server(port); System.setProperty("PORT", String.valueOf(port)); WebAppContext context = new WebAppContext(); context.setconfigurations(new Configuration[]{new WebXmlConfiguration()}); context.setresourcebase(calculateresourcebase()); server.sethandler(context); @Test @Commit public void...

server = new Server(port); System.setProperty("PORT", String.valueOf(port)); WebAppContext context = new WebAppContext(); context.setconfigurations(new Configuration[]{new WebXmlConfiguration()}); context.setresourcebase(calculateresourcebase()); server.sethandler(context); @Test @Commit public void... @Test public void publisheserroreventon500() throws IOException { server.enqueue( new MockResponse().setStatus("HTTP/1.1 500 Internal Server Error")); OfficeGroupsFetcher officegroupsfetcher = createofficegroupsfetcher(); officegroupsfetcher.fetch(any_id); verify(bus).post(isa(restservererror.class)); }

There is no such thing as untestable code. Robert Uncle Bob Martin

If you have code that you believe cannot be tested, then I suggest that you: Stop, and find a way to test it. Find a way to change it so that it's testable. Robert Uncle Bob Martin

Postawa Technika Droga Lesson learnt #8 Odkrywaj nowe rodzaje testów

Testy są specyfikacją

@Test public void perfect_game() { assertequals(300, frames("xxxxxxxxxxxx")); } @Test public void gutter_game() { assertequals(0, frames("------------------")); } @Test public void bonus_for_spare_is_next_ball_score() { assertequals(18, frames("5/4-")); } @Test public void bonus_for_strike_is_next_frame_score() { assertequals(10 + 9 + 9, frames("x36")); }

@Test public void detects_clash_on_single_day_in_longer_range() throws Exception { Patient patient = createpatient(); given(patient).hasprescriptionfrom(2010, 3, 1).forDays(31).forMedicine("Fluoxetine"); given(patient).hasprescriptionfrom(2010, 3, 15).forDays(1).forMedicine("Codeine"); Collection<LocalDate> clashdates = patient.clash( aslist("fluoxetine", "Codeine")); assertthat(clashdates).containsexactly(localdate.of(2010, 3, 15)); }

Postawa Technika Droga Lesson learnt #9 Inwestuj w testowe DSLe

Odcinek 4 TDD mentor

Postawa Technika Droga Lesson learnt #10 TDD jest możliwe w każdej technologii

Ports and adapters http://www.natpryce.com/articles/000772.html

Postawa Technika Droga Lesson learnt #11 Stosuj DDD oraz Ports & Adapters

Legacy Code Tworzenie obiektów Zależności Dekompozycja Niezależne fragmenty

Postawa Technika Droga Lesson learnt #12 Nie zniechęcaj się trudno testowalnym kodem

Rola nawyków

http://blog.gdinwiddie.com/2012/12/26/tdd-hat/

http://blog.gdinwiddie.com/2012/12/26/tdd-hat/

http://blog.gdinwiddie.com/2012/12/26/tdd-hat/

Postawa Technika Droga Lesson learnt #13 Jeśli mam napisać kod, zaczynam od testu

Postawa Technika Droga Lesson learnt #14 Merciless refactoring

Postawa Technika Droga

Postawa Technika Droga #1 Nie trzeba dużo by zacząć

Postawa Technika Droga #2 TDD to odpowiedzialność developera #1 Nie trzeba dużo by zacząć

Postawa Technika Droga #2 TDD to odpowiedzialność developera #1 Nie trzeba dużo by zacząć #3 Nie jest łatwo nauczyć TDD

Postawa Technika Droga #2 TDD to odpowiedzialność developera #1 Nie trzeba dużo by zacząć #3 Nie jest łatwo nauczyć TDD #4 Nie narzucaj TDD

Postawa Technika Droga #2 TDD to odpowiedzialność developera #5 Dbaj o kod testowy tak jak o produkcyjny #1 Nie trzeba dużo by zacząć #3 Nie jest łatwo nauczyć TDD #4 Nie narzucaj TDD

Postawa Technika Droga #2 TDD to odpowiedzialność developera #5 Dbaj o kod testowy tak jak o produkcyjny #6 Constructor Injection zwiększa testowalność #1 Nie trzeba dużo by zacząć #3 Nie jest łatwo nauczyć TDD #4 Nie narzucaj TDD

Postawa Technika Droga #2 TDD to odpowiedzialność developera #5 Dbaj o kod testowy tak jak o produkcyjny #6 Constructor Injection zwiększa testowalność #1 Nie trzeba dużo by zacząć #3 Nie jest łatwo nauczyć TDD #4 Nie narzucaj TDD #7 Dobrze utrzymany zestaw testów daje moc

Postawa Technika Droga #2 TDD to odpowiedzialność developera #5 Dbaj o kod testowy tak jak o produkcyjny #6 Constructor Injection zwiększa testowalność #1 Nie trzeba dużo by zacząć #3 Nie jest łatwo nauczyć TDD #4 Nie narzucaj TDD #7 Dobrze utrzymany zestaw testów daje moc #8 Odkrywaj nowe rodzaje testów

Postawa Technika Droga #2 TDD to odpowiedzialność developera #5 Dbaj o kod testowy tak jak o produkcyjny #9 Inwestuj w testowe DSLe #6 Constructor Injection zwiększa testowalność #1 Nie trzeba dużo by zacząć #3 Nie jest łatwo nauczyć TDD #4 Nie narzucaj TDD #7 Dobrze utrzymany zestaw testów daje moc #8 Odkrywaj nowe rodzaje testów

Postawa Technika Droga #2 TDD to odpowiedzialność developera #5 Dbaj o kod testowy tak jak o produkcyjny #10 TDD jest możliwe w każdej technologii #9 Inwestuj w testowe DSLe #6 Constructor Injection zwiększa testowalność #1 Nie trzeba dużo by zacząć #3 Nie jest łatwo nauczyć TDD #4 Nie narzucaj TDD #7 Dobrze utrzymany zestaw testów daje moc #8 Odkrywaj nowe rodzaje testów

Postawa Technika Droga #2 TDD to odpowiedzialność developera #5 Dbaj o kod testowy tak jak o produkcyjny #10 TDD jest możliwe w każdej technologii #9 Inwestuj w testowe DSLe #6 Constructor Injection zwiększa testowalność #11 Stosuj DDD oraz Ports & Adapters #1 Nie trzeba dużo by zacząć #3 Nie jest łatwo nauczyć TDD #4 Nie narzucaj TDD #7 Dobrze utrzymany zestaw testów daje moc #8 Odkrywaj nowe rodzaje testów

Postawa Technika Droga #2 TDD to odpowiedzialność developera #5 Dbaj o kod testowy tak jak o produkcyjny #10 TDD jest możliwe w każdej technologii #12 Nie zniechęcaj się trudno testowalnym kodem #9 Inwestuj w testowe DSLe #6 Constructor Injection zwiększa testowalność #11 Stosuj DDD oraz Ports & Adapters #1 Nie trzeba dużo by zacząć #3 Nie jest łatwo nauczyć TDD #4 Nie narzucaj TDD #7 Dobrze utrzymany zestaw testów daje moc #8 Odkrywaj nowe rodzaje testów

Postawa Technika Droga #2 TDD to odpowiedzialność developera #5 Dbaj o kod testowy tak jak o produkcyjny #10 TDD jest możliwe w każdej technologii #12 Nie zniechęcaj się trudno testowalnym kodem #13 Jeśli mam napisać kod, zaczynam od testu #9 Inwestuj w testowe DSLe #6 Constructor Injection zwiększa testowalność #11 Stosuj DDD oraz Ports & Adapters #1 Nie trzeba dużo by zacząć #3 Nie jest łatwo nauczyć TDD #4 Nie narzucaj TDD #7 Dobrze utrzymany zestaw testów daje moc #8 Odkrywaj nowe rodzaje testów

Postawa Technika Droga #2 TDD to odpowiedzialność developera #5 Dbaj o kod testowy tak jak o produkcyjny #10 TDD jest możliwe w każdej technologii #12 Nie zniechęcaj się trudno testowalnym kodem #13 Jeśli mam napisać kod, zaczynam od testu #14 Merciless refactoring #9 Inwestuj w testowe DSLe #6 Constructor Injection zwiększa testowalność #11 Stosuj DDD oraz Ports & Adapters #1 Nie trzeba dużo by zacząć #3 Nie jest łatwo nauczyć TDD #4 Nie narzucaj TDD #7 Dobrze utrzymany zestaw testów daje moc #8 Odkrywaj nowe rodzaje testów

Korzyści z TDD Bezpieczeństwo Mniej defektów Lepszy design Mniej debugowania Mniej czy to zadziała?

Dziękuję! krzysztof.jelski@pragmatists.pl @krzysztofjelski Icons made by Freepik from www.flaticon.com CC 3.0 BY