ZASADY EFEKTYWNEGO PISANIA TESTÓW

Slides:



Advertisements
Podobne prezentacje
Agile w praktyce, czyli jak to robimy naprawdę
Advertisements

Programowanie w PMC.
Rodzaje testów oprogramowania
PL/SQL kompilacja warunkowa
Obiektowe metody projektowania systemów Design Patterns STRATEGY.
Opis metodyki i procesu produkcji oprogramowania
Bezpieczeństwo aplikacji WWW
PROGRAMOWANIE STRUKTURALNE
Badania operacyjne. Wykład 1
Inżynieria Oprogramowania 9. Testowanie oprogramowania
Wydział Zastosowań Informatyki i Matematyki SGGW
FIT Środowisko Testów Integracyjnych
XML Schema XML Schema2 Definiowanie języków XML, SGML – metajęzyki. Definiowanie języków (zastosowań, typów dokumentów, schematów): –określanie.
Projektowanie Aplikacji Komputerowych
EXtreme Programming » Magdalena Tchorzewska.
Tomasz Smieszkoł - 15 stycznia
Czyli jak testować w Eclipsie?
Refaktoryzacja czyli odświeżanie kodu
Biblioteki i przestrzenie nazw
Inżynieria Oprogramowania dla Fizyków
Agile Programming a jakość
Wymagania jakości w Agile Programming
Metodyki Lekkie Agile Methodologies
Wzorce projektowe w J2EE
Wstęp do programowania obiektowego
Systemy zarządzania treścią CMS
Dalsze elementy metodologii projektowania. Naszym celem jest...
Narzędzia do testowania
Projekt i implementacja aplikacji wspomagającej testowanie oprogramowania, zgodne z metodologią Unified Software Development Process (RUP). Włodzimierz.
Projekt i implementacja aplikacji wspomagającej testowanie
SZPIF – Harmonogram, Opis narzędzi, Schemat bazy danych
Projekt i implementacja aplikacji wspomagającej testowanie oprogramowania, zgodne z metodologią Unified Software Development Process (RUP). Włodzimierz.
Projekt i implementacja aplikacji wspomagającej testowanie
czyli (anty)wzorzec Singleton
Cechy dobrej, udanej strony. NET-ETYKIETA Net-etykieta- jest to tzw. sieciowy Savoir-Vivre. Zawiera on kilka podstawowych zasad Internetowego dobrego.
Test Doubles Adam Gabryś , v1.1,
Adam Gabryś , v1.1,
Podstawy programowania II
Rozwój aplikacji przy wykorzystaniu ASP.NET
Realizacja aplikacji internetowych
Continuous Integration
Badania operacyjne Wykład 5.
Technologie tworzenia aplikacji internetowych Wykład 3
Prezentacja funkcjonalności dziennika e-klasa
Refaktoryzacja Robert Pająk.
JAVA.
Komponentowe systemy rozproszone Wprowadzenie. Komponent... jest to podstawowa jednostka oprogramowania z kontraktowo (deklaratywnie) opisanymi interfejsami,
Koncepcja procesu Zadanie i proces. Definicja procesu Process – to program w trakcie wykonywania; wykonanie procesu musi przebiegać w sposób sekwencyjny.
Farseer Physics Engine. Farseer Physics Engine jest silnikiem fizycznym napisanym dla platformy.NET. Został on zainspirowany przez silnik Box2D znany.
Obsługa procesów biznesowych w MOSS 2007 Na przykładzie procesu obsługi zleceń Paweł Wróbel.
Tworzenie Aplikacji Internetowych
TESTOWANIE OPROGRAMOWANIA
Testy jednostkowe Visual Studio NUnit.
Zaawansowane techniki obiektowe
KOCHAĆ TO ZNACZY WYMAGAĆ - WYCHOWUJ MĄDRZE
Bazy i Systemy Bankowe Sp. z o.o. ul. Kasprzaka 3, 85 – 321 Bydgoszcz
XML i nowoczesne technologie zarządzania treścią Wykład monograficzny Semestr zimowy 2008/09 Szymon ZiołoPatryk Czarnik
Proces tworzenia oprogramowania Proces tworzenia oprogramowania jest zbiorem czynności i związanych z nimi wyników, które prowadzą do powstania produktu.
Projektowanie Aplikacji Internetowych Artur Niewiarowski Wydział Fizyki, Matematyki i Informatyki Politechnika Krakowska.
Podstawy języka skryptów
Android - cykl życia aplikacji, przykład prostej aplikacji
Temat: Porównanie technologii php,c# oraz javascript na przykładzie webaplikacji typu społecznościowy agregator treści Autor: Wojciech Ślawski.
T ESTY JEDNOSTKOWE W C# Alicja Majka, A GENDA Wprowadzenie do środowiska Czym są testy jednostkowe i po co je stosować? XUnit, NUnit Pokrycie.
Testy jednostkowe. „Test jednostkowy (unit test) to fragment kodu, który sprawdza inny fragment kodu”
Od (web)aplikacji biznesowych po (web)game dev Testowanie i spełnianie oczekiwań.
Agile Programming a jakość
LUDZIE POPEŁNIAJĄ BŁĘDY
Klasy, pola, obiekty, metody. Modyfikatory dostępu, hermetyzacja
Refaktoryzacja czyli odświeżanie kodu
Zapis prezentacji:

ZASADY EFEKTYWNEGO PISANIA TESTÓW Janusz Marchewa

Plan prelekcji Przyczyny występowania problemów Problem 1: zależności pomiędzy testowanymi klasami Problem 2: niskie pokrycie kodu przez testy Inne problemy

Przyczyny występowania problemów

Przyczyny występowania problemów “Kod aplikacji musi być dobrze napisany, testy mają tylko go przetestować” “Nie mam czasu, żeby przyłożyć się do pisania testów – terminy gonią” “O co chodzi? Przecież umiem pisać testy” “Skąd miałem wiedzieć, że takie rozwiązanie może powodować problemy?”

Problem 1

Zależności pomiędzy testowanymi klasami

Moki (mock objects) Specjalnie przygotowane na potrzeby testów implementacje interfejsów (lub w przypadku jego braku – dziedziczące z klasy konkretnej) Ułatwiają pisanie testów jednostkowych Nie trzeba martwić się o zależności testowanej klasy Zawsze zachowają się zgodnie z naszymi oczekiwaniami

Moki statyczne

Moki dynamiczne Powstają w pamięci i nie obciążają projektu dziesiątkami dodatkowych klas Umożliwiają proste definiowanie właściwie dowolnych zachowań Oferują szerokie możliwości weryfikacji rzeczywistych interakcji z testowaną klasą Najpopularniejsze biblioteki:

Moki dynamiczne (sposób wykorzystania) 1. Tworzymy moka i definiujemy nasze oczekiwania. 2. Podstawiamy go do testowanej klasy. 3. Wywołujemy testowaną metodę. 4. Weryfikujemy interakcje testowanej klasy z mokiem.

Więcej informacji Andrew Hunt & David Thomas, Pragmatic Testing in Java with JUnit, The Pragmatic Programmers 2003 http://tap.testautomationpatterns.com:8080/ Hard%20to%20Test%20Code.html http://www.mockobjects.com http://jmock.codehaus.org http://www.easymock.org

Problem 2

Niskie pokrycie kodu przez testy

Niskie pokrycie kodu przez testy Odpowiednio długi login i adres email mogą spowodować przepełnienie typu long Kod został poprawiony i testy nadal działały Ponowne uruchomienie aplikacji ujawniło inny błąd, wprowadzony przypadkowo w trakcie poprawiania kodu Wniosek: test był niewystarczający, ponieważ nie sprawdzał, czy wykryty błąd został zlikwidowany

Pokrycie kodu przez testy (code coverage) Określa, jaka część kodu aplikacji jest wykonywana w wyniku uruchomienia testów Możemy odpowiednio zareagować i dopisać testy tam, gdzie ich brakuje Najczęściej wykorzystywane rodzaje: Statement coverage (czy wszystkie instrukcje zostały wykonane) Branch coverage (czy wszystkie możliwe ścieżki zostały prześledzone)

Narzędzia do badania pokrycia kodu przez testy Clover (http://www.cenqua.com/clover) Cobertura (http://cobertura.sourceforge.net) JBlanket (http://csdl.ics.hawaii.edu/Tools/JBlanket) NoUnit (http://nounit.sourceforge.net) Coverlipse (http://coverlipse.sourceforge.net) ...

Programowanie sterowane testami (TDD) Najpierw piszemy test, a potem kod, który ten test spełnia Zalety: wysokie pokrycie kodu przez testy mniejszy stopień skomplikowania modułów łatwe odnajdywanie błędów pełna automatyzacja testów Żaden kod nie może powstać, dopóki nie istnieje niedziałający test!

Red-green-refactor

Efekty zastosowania TDD W każdym momencie mamy pewność, że zmierzamy we właściwym kierunku Gdy pojawia się błąd, od razu wiemy, gdzie go szukać Uzyskujemy kod bardzo dobrze pokryty przez testy, ponieważ test jest zawsze punktem wyjścia do napisania kodu System staje się prostszy, ponieważ nie ma w nim niepotrzebnego kodu

Zasady, o których warto pamiętać Najpierw test, potem kod, ale w podejściu iteracyjnym (pojedynczy przypadek testowy, kod, przypadek testowy, kod, ...) Dobre nazewnictwo klas, zmiennych, metod Prosty i czytelny kod Częsty refaktoring Regularne uruchamianie potrzebnych testów

Więcej informacji Kent Beck, Test Driven Development: By Example, Addison Wesley 2002 David Astels, Test Driven Development: A Practical Guide, Prentice Hall PTR 2003 http://tap.testautomationpatterns.com:8080/ Missing%20Test.html http://www.testdriven.com http://www.agiledata.org/essays/tdd.html

Inne problemy

Inne problemy Kod trudny do przetestowania Zależności pomiędzy metodami testującymi Zbyt złożone metody testujące ... http://tap.testautomationpatterns.com:8080/Test%20Smells.html

Więcej informacji Rod Johnson & Juergen Hoeller, Expert One- on-One J2EE Development without EJB, Wiley 2004 Michael Feathers, Working Effectively with Legacy Code, Prentice Hall PTR 2004 http://tap.testautomationpatterns.com:8080 http://www.cwi.nl/~leon/papers/xp2001/ http://www.agilealliance.com/articles/smithshaunmeszarosger

Dziękujemy za uwagę!