Organizacja Przedsięwzięć Programistycznych Testowanie

Slides:



Advertisements
Podobne prezentacje
Instrukcje - wprowadzenie
Advertisements

C++ wykład 7 ( ) Wyjątki.
Deklaracje i definicje klas w C++ Składowe, pola, metody Konstruktory
Dzisiejszy wykład Wyjątki.
Rodzaje testów oprogramowania
Wzorce.
Bezpieczeństwo wyjątków w C++: OpenGL
Opis metodyki i procesu produkcji oprogramowania
Testowanie oprogramowania
Wydział Zastosowań Informatyki i Matematyki SGGW
Wyszukiwanie błędów Testowanie programów w celu wyszukania błędów.
Nguyen Hung Son Uniwersytet Warszawski
FIT Środowisko Testów Integracyjnych
Projektowanie Aplikacji Komputerowych
Model – View - Controler
Szkolenie dla NaviExpert, Testowanie jednostkowe.
Bartosz Walter Inżynieria oprogramowania Lecture XXX JavaTM – część II Bartosz Walter
Przetwarzanie tekstów i AWK Copyright, 2000 © Jerzy R. Nawrocki Wprowadzenie do.
Organizacja Przedsięwzięć Programistycznych Wykład 7, 27.II.03
Maciej Gabor, SCR 2002 Testowanie eXtremalne i narzędzia xUnit M. Gabor, J. Nawrocki, B. Walter Instytut Informatyki Politechnika Poznańska.
Zarządzanie konfiguracją Doskonalenie Procesów Programowych Wykład 6 Copyright, 2001 © Jerzy.
Copyright © Jerzy R. Nawrocki Kontrola jakości oprogramowania Inżynieria oprogramowania.
J. Nawrocki, Inżynieria oprog. Plan wykładu Praktyki XP Wcześniejsze badania Personal Software Process eXtremme Programming Opis eksperymentu WynikiPodsumowanie.
Czyli jak testować w Eclipsie?
Programowanie imperatywne i język C Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie.
Testowanie oprogramowania
Język C – Część II Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie do informatyki.
Refaktoryzacja czyli odświeżanie kodu
Cykle życia oprogramowania
C++ wykład 7 ( ) Wyjątki. Ogólne spojrzenie na wyjątki Wyjątki zaprojektowano do wspierania obsługi błędów. System wyjątków dotyczy zdarzeń synchronicznych.
TESTOWANIE OPROGRAMOWANIA
Test Doubles Adam Gabryś , v1.1,
Klasy w C++. Deklaracja klasy class NazwaTwojejKlasy { //w tym miejscu piszemy definicje typów, //zmienne i funkcje jakie mają należeć do klasy. }; //tutaj.
Pakiety w Javie Łukasz Smyczyński (132834). Czym są pakiety? Klasy w Javie są grupowane w pewne zbiory zwane pakietami. Pakiety są więc pewnym podzbiorem.
Programowanie urządzeń mobilnych – wykład IV
Java 3 MPDI Programowanie obiektowe W7. import java.io.*; public class X { // kontrukcja throws – określenie jakie wyjątki może dana metoda // sygnalizować
Programowanie obiektowe – zastosowanie języka Java SE
JAVA c.d.. Instrukcji wyboru SWITCH używamy, jeśli chcemy w zależności od wartości pewnego wyrażenia wykonać jeden z kilku fragmentów kodu. Jest to w.
Programowanie obiektowe III rok EiT dr inż. Jerzy Kotowski Wykład IX.
Andrzej Repak Nr albumu
Java – coś na temat Klas Piotr Rosik
Seminarium problemowe
Programowanie obiektowe Wykład 3 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Dariusz Wardowski.
Programowanie obiektowe Wykład 6 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Dariusz Wardowski.
Gramatyki i translatory
TESTOWANIE OPROGRAMOWANIA
ZASADY EFEKTYWNEGO PISANIA TESTÓW
OCPJP Inner classes.
Pomiary procesów programistycznych Copyright, 2002 © Jerzy R. Nawrocki Zarządzanie jakością.
Copyright © Jerzy R. Nawrocki Kontrola jakości oprogramowania Inżynieria oprogramowania.
K URS JĘZYKA C++ – WYKŁAD 7 ( ) Wyjątki.
K URS JĘZYKA C++ – WYKŁAD 10 ( ) Szablony.
Proces tworzenia oprogramowania Proces tworzenia oprogramowania jest zbiorem czynności i związanych z nimi wyników, które prowadzą do powstania produktu.
Copyright © Jerzy R. Nawrocki Team Software Process Inżynieria oprogramowania II Wykład.
Paweł Starzyk Obiektowe metody projektowania systemów
PO13-1 / 19 Wykład 13 Wyjątki i ich zgłaszanie Wyłapywanie wyjątków Obsługa wyjątków Wykorzystanie polimorfizmu Filtrowanie wyjątków Błędy w konstruktorach.
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”
InMoST, Java – przykładowa aplikacja Bartosz.Michalik
Innowacyjne metody zarządzania jakością oprogramowania Przeglądy oprogramowania i standard IEEE 1028 Bartosz Michalik
Programowanie Obiektowe – Wykład 6
Inżynieria oprogramowania
Dzisiejsze zajęcia będą wyjątkowe…
Strumienie, Wczytywanie, Zapisywanie, Operacje na plikach
(według:
Programowanie Obiektowe – Wykład 2
Programowanie obiektowe – zastosowanie języka Java SE
Refaktoryzacja czyli odświeżanie kodu
Tworzenie wątków w Javie
Zapis prezentacji:

Grzegorz Jachimko Grzegorz.Jachimko@cs.put.poznan.pl Organizacja Przedsięwzięć Programistycznych Testowanie Grzegorz Jachimko Grzegorz.Jachimko@cs.put.poznan.pl

Cytat dnia „Kiedy zawiesza się program konkurencji, to jest awaria. Kiedy zawiesza się własny program to jest ‘drobiazg’. Często po awarii pojawia się komunikat typu ID 02. ID to skrót od Idiotyczny drobiazg, a następująca po nim liczba wskazuje, przez ile miesięcy produkt informatyczny powinien być testowany.” - Guy Kawasaki, ‘The Macintosh Way’

Plan wykładu Co to jest błąd? Po co testować? Kiedy testować Jak testować? Testy modułowe – narzędzia Podsumowanie

Słynne (i kosztowne) błędy Co to jest błąd? Słynne (i kosztowne) błędy Lądownik NASA na Marsie – 1999 – koszt: kilkaset milionów $ Błąd dzielenia w procesorach PENTIUM – 1994 – koszt: 400.000.000 $ Błąd roku 2000 – 1974 – koszt: kilkaset miliardów $

Co to jest błąd - definicja Błąd oprogramowania występuje gdy: Oprogramowanie nie wykonuje czegoś, co wg specyfikacji powinno wykonywać; Oprogramowanie robi coś, czego wg specyfikacji robić nie powinno; Oprogramowanie wykonuje coś o czym specyfikacja w ogóle nie wspomina;

Co to jest błąd - definicja Błąd oprogramowania występuje gdy (c.d.): 4. Oprogramowanie nie wykonuje czegoś, o czym specyfikacja wprawdzie nie wspomina, ale powinna 5. Oprogramowanie jest trudne do zrozumienia, trudne do użycia, powolne, albo zdaniem testera – będzie w oczach użytkownika po prostu nieprawidłowe

Projektanci nie chcą aby ich system zawiódł Po co testować? Projektanci nie chcą aby ich system zawiódł Bo to się opłaca – wymiana wadliwego oprogramowania jest droższa (pieniężnie i marketingowo) niż kilkadziesiąt dni pracy testerów Główne cele testowania Usunięcie błędów Określenie niezawodności systemu

Kiedy testować? Im wcześniej, tym lepiej !

Kiedy testować? Im wcześniej, tym lepiej !!

Jak testować? Aksjomaty testowania Programu nie da się przetestować całkowicie 4 instrukcje warunkowe pętla wykonywana do 20 razy kilka poleceń liczba ścieżek: 520 + 519 + ... + 51 = 1014 czas: 1 bln lat przy 5 min. na test!!

Jak testować? Aksjomaty testowania Testowanie jest ryzykowne 1+1,1+2,....1+99, 2+1,.... a co jeśli 1+100 zawiedzie? Test nie udowodni braku błędów Im więcej błędów znaleziono – tym więcej pozostało Nie wszystkie błędy zostaną poprawione Trudno powiedzieć kiedy błąd jest błędem

Jak testować? Testy statyczne dotyczy artefaktów, które nie są wykonywane – np. testowanie specyfikacji, projektu, przeglądy kodu Testy dynamiczne wykonywanie i użytkowanie programu

Jak testować? Metoda czarnej skrzynki Testowanie, które abstrahuje od wewnętrznej struktury programu i jest ukierunkowane na znalezienie warunków, w których program zachowuje się niezgodnie z zadaną specyfikacją

Techniki czarnej skrzynki Jak testować? Techniki czarnej skrzynki wymagana znajomość specyfikacji wartości graniczne testowanie pozytywne/negatywne klasy równoważności głupi użytkownik szukać błędy tam gdzie już je znaleziono słuchać intuicji

Jak testować? Metoda białej skrzynki testowanie, które polega na utworzeniu przypadków testowych na drodze analizy logiki zawartej w kodzie programu (metryki pokrycia)

Techniki białej skrzynki Jak testować? Techniki białej skrzynki formalne przeglądy kontrole koleżeńskie ręczny sprawdzian inspekcje standardy i reguły programowania listy kontrolne

Jak testować? Wymagania Specyfikacja Projekt systemowy Projekt szczegółowy Program Testy akceptacyjne Testy systemowe Testy integracyjne Testy modułowe Wymagania Specyfikacja Projekt systemowy Projekt szczegółowy Program Testy akceptacyjne Testy systemowe Testy integracyjne Testy modułowe Wymagania Specyfikacja Projekt systemowy Projekt szczegółowy Program Testy akceptacyjne Testy systemowe Testy integracyjne Testy modułowe Testy regresyjne

Jak testować? Analiza wyników wymagana jest gruntowna analiza wyników, w p.p. błąd może pozostać niezauważony!! należy zwracać uwagę na efekty uboczne testów

Jak testować? Opis błędu Zawiera stan początkowy i sekwencję kroków Każdy krok ma komentarz: co było OK, czego się spodziewano, co się stało, co było źle Sekwencja jest minimalna Zawiera alternatywne sekwencje Zawiera podobne sekwencje, które działają Specyfikuje specjalne warunki (np. konkretny komputer) Wskazuje na uszkodzone dane NIE zawiera osobistych komentarzy w stronę programistów Zawiera wyjaśnienia dlaczego błąd jest ważny dla użytkownika (przekonywujące i rzeczywiste konsekwencje) Zawiera pytania a nie definitywne twierdzenia (łatwiejsze do akceptacji przez programistów) NIE zawiera prób rozwiązania problemu

Jak testować?

Testy modułowe - narzędzia xUnit x = JAVA, C++, C#, ... autorzy: Erich Gamma i Kent Beck framework testowy interfejs graficzny i tekstowy prostota, łatwość obsługi, automatyzacja

Testy modułowe - narzędzia Przepis na udane testowanie: stwórz klasę, którą chcesz testować class RodzajTrojkata { private int m_krawedzie[]; public RodzajTrojkata(){} public String SprawdzRodzajTrojkata(int kr[]) throws Exception m_krawedzie = kr; if (kr == null) throw new Exception("blad"); if (kr[0] == kr[1] && kr[1] == kr[2]) return "rownoboczny"; if (kr[0]==kr[1] || kr[0]==kr[2] || kr[1]==kr[2]) return "rownoramienny"; return "roznoboczny"; } };

Testy modułowe - narzędzia Przepis na udane testowanie dodaj przypadki testowe public class TrojkatTest extends TestCase { private RodzajTrojkata m_rt; protected void setUp() //tutaj dodaj inicjalizację zmiennych m_rt = new RodzajTrojkata(); } protected void tearDown() //tutaj możesz posprzątać po teście m_rt = null; //funkcja testująca jeden przypadek public void testRownoboczny() throws Exception System.out.print(„sprawdzam czy trójkąt jest równoboczny”); int kr[] = new int[3]; kr[0] = kr[1] = kr[2] = 10; string res = m_rt.SprawdzRodzajTrojkata( kr ); assertEquals(„rownoboczny”, res); //OK. jeśli się zgadza

Testy modułowe - narzędzia Przepis na udane testowanie zbierz przypadki testowe w zbiór public class TrojkatTest extends TestCase { ..... //Klasa TestSuite implementuje interfejs Test public static Test TrojkatSuite() //jako parametr przekaż klasę TrojkatTest return new TestSuite(TrojkatTest.class); }

Testy modułowe - narzędzia Przepis na udane testowanie przekaż zbiór testów ‘testerowi’ public class TrojkatTest extends TestCase { ..... public static Test TrojkatSuite() { ... } public static void main( String[] args ) //stwórz zbiór testów TestSuite suite = new TestSuite(); //dodaj jeden lub więcej zbiorów suite.addTest( TrojkatSuite() ); //wykonaj testy w trybie tekstowym TestResult result = junit.textui.TestRunner.run( suite ); }

Testy modułowe - narzędzia Przepis na udane testowanie TESTUJ! skompiluj: javac –classpath c:\junit\junit.jar; *.java uruchom: java TrojkatTest sprawdź:

Testy modułowe - narzędzia xUnit – najważniejsze metody assertEquals, assertFalse, assertTrue, assertNull, assertNotNull, assertSame, assertNotSame, fail

Testy modułowe - narzędzia Problem - Jak testować funkcje, które generują wyjątki? public testExcpetion() { try int x, y, z; y = 10; z = 0; x = y/z; // dzielenie przez 0 !! fail( „oczekiwano wyjątku” ); } catch (Exception err) // OK., tego oczekiwaliśmy

Podsumowanie Najlepszym sposobem na unikanie błędów jest tworzenie dokładnych i przemyślanych specyfikacji i projektów, a następnie ich częste przeglądy – im wcześniej błąd zostanie wykryty, tym jest to tańsze Dopasować dostępne metody testowania do wymagań organizacyjnych Tworzyć przypadki testowe najwcześniej jak to jest możliwe

Podsumowanie Przygotowanie planu testów ułatwia późniejsze testowanie Znalezione błędy powinny być dokumentowane Korzystaj z narzędzi !!

Literatura, informacje Ron Patton, Testowanie Oprogramowania, Warszawa, czerwiec 2002 Marick B., The Craft of Software Testing, Prentice Hall, 1995 JUnit http://www.junit.org/index.htm

Ocena wykładu 1. Wrażenie ogólne (1 - 6) 2. Za szybko czy za wolno? 3. Czy dowiedziałeś się czegoś ważnego? 4. Co i jak poprawić?