Metodyki zwinne wytwarzania oprogramowania
Transkrypt
Metodyki zwinne wytwarzania oprogramowania
Metodyki zwinne wytwarzania oprogramowania Wykład 4 Marcin Młotkowski 26 października 2016 Testowanie oprogramowania Testy akceptacyjne Wytwarzanie sterowane testami Wprowadzenie Testy jednostkowe Technologia testowania jednostkowego Plan wykładu 1 Testowanie oprogramowania Wprowadzenie Testy jednostkowe Technologia testowania jednostkowego 2 Testy akceptacyjne 3 Wytwarzanie sterowane testami Fazy TDD Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 2 / 34 Testowanie oprogramowania Testy akceptacyjne Wytwarzanie sterowane testami Wprowadzenie Testy jednostkowe Technologia testowania jednostkowego Najsłynniejsze i najdroższe błędy programistyczne Ariane 5 lot 501 Użycie oprogramowania z Ariane 4 (370 mln USD). Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 3 / 34 Testowanie oprogramowania Testy akceptacyjne Wytwarzanie sterowane testami Wprowadzenie Testy jednostkowe Technologia testowania jednostkowego Najsłynniejsze i najdroższe błędy programistyczne Ariane 5 lot 501 Użycie oprogramowania z Ariane 4 (370 mln USD). Apollo 11 Błąd radaru zbliżeniowego wygenerował serię przerwań komputera nawigacyjnego. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 3 / 34 Testowanie oprogramowania Testy akceptacyjne Wytwarzanie sterowane testami Wprowadzenie Testy jednostkowe Technologia testowania jednostkowego Najsłynniejsze i najdroższe błędy programistyczne Ariane 5 lot 501 Użycie oprogramowania z Ariane 4 (370 mln USD). Apollo 11 Błąd radaru zbliżeniowego wygenerował serię przerwań komputera nawigacyjnego. Błąd w aparacie Therac-25 do radioterapii Wyścigi wątków/procesów spowodowały 200-krotne przekroczenie dawki podczas napromieniania. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 3 / 34 Testowanie oprogramowania Testy akceptacyjne Wytwarzanie sterowane testami Wprowadzenie Testy jednostkowe Technologia testowania jednostkowego Cele testowania Weryfikacja Sprawdzenie, czy oprogramowanie jest zgodne ze specyfikacją. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 4 / 34 Testowanie oprogramowania Testy akceptacyjne Wytwarzanie sterowane testami Wprowadzenie Testy jednostkowe Technologia testowania jednostkowego Cele testowania Weryfikacja Sprawdzenie, czy oprogramowanie jest zgodne ze specyfikacją. Walidacja Sprawdzenie, czy oprogramowanie jest zgodne z oczekiwaniami użytkownika. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 4 / 34 Testowanie oprogramowania Testy akceptacyjne Wytwarzanie sterowane testami Wprowadzenie Testy jednostkowe Technologia testowania jednostkowego Typy testów Testy białej (przezroczystej skrzynki), testy strukturalne Testy, które mają na celu przejście wszystkich możliwych ścieżek w programie. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 5 / 34 Testowanie oprogramowania Testy akceptacyjne Wytwarzanie sterowane testami Wprowadzenie Testy jednostkowe Technologia testowania jednostkowego Typy testów Testy białej (przezroczystej skrzynki), testy strukturalne Testy, które mają na celu przejście wszystkich możliwych ścieżek w programie. Testy czarnej skrzynki (testy funkcjonalne) Testy przygotowane na podstawie specyfikacji. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 5 / 34 Testowanie oprogramowania Testy akceptacyjne Wytwarzanie sterowane testami Wprowadzenie Testy jednostkowe Technologia testowania jednostkowego Hierarchia testów testy jednostkowe testy integracyjne testy akceptacyjne Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 6 / 34 Testowanie oprogramowania Testy akceptacyjne Wytwarzanie sterowane testami Wprowadzenie Testy jednostkowe Technologia testowania jednostkowego Przypadek testowy (test case) Zbiór testów oceniających, czy aplikacja spełnia warunki określone w przypadku użycia. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 7 / 34 Testowanie oprogramowania Testy akceptacyjne Wytwarzanie sterowane testami Wprowadzenie Testy jednostkowe Technologia testowania jednostkowego Test jednostkowy (unit test) Test testujący pojedynczy element programu (procedurę, klasę, moduł). Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 8 / 34 Testowanie oprogramowania Testy akceptacyjne Wytwarzanie sterowane testami Wprowadzenie Testy jednostkowe Technologia testowania jednostkowego Test jednostkowy (unit test) Test testujący pojedynczy element programu (procedurę, klasę, moduł). Sposób testowania sprawdzenie, czy dla przykładowych danych są zwracane właściwe wyniki; sprawdzenie reakcji na błędne dane (np: zwrócenie wyjątku); kontrola stanu aplikacji po wykonaniu operacji (np: operacja wstawienia do bazy danych). Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 8 / 34 Testowanie oprogramowania Testy akceptacyjne Wytwarzanie sterowane testami Wprowadzenie Testy jednostkowe Technologia testowania jednostkowego Schemat działania testu jednostkowego Schemat działania pojedynczego przypadku testowego: 1 2 3 4 utworzenie stanu podstawowego; wykonanie testowanych operacji; weryfikacja wyników; przywrócenie stanu początkowego. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 9 / 34 Testowanie oprogramowania Testy akceptacyjne Wytwarzanie sterowane testami Wprowadzenie Testy jednostkowe Technologia testowania jednostkowego Uwagi Testy jednostkowe (i ich zestawy) to mogą być programy (skrypty etc) lub scenariusze do ręcznego testowania; test jednostkowy może składać się z kilku drobniejszych testów; testy powinne być ”zewnętrzne”w stosunku do testowanej jednostki; zestawy testów umożliwiają prowadzenie testowanie regresyjne, tj. czy drobne modyfikacje nie wprowadziły błędów. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 10 / 34 Testowanie oprogramowania Testy akceptacyjne Wytwarzanie sterowane testami Wprowadzenie Testy jednostkowe Technologia testowania jednostkowego Środowiska xUnit są to środowiska dedykowane dla poszczególnych języków (Java, Python, C#) są to środowiska oparte o obiekty. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 11 / 34 Testowanie oprogramowania Testy akceptacyjne Wytwarzanie sterowane testami Wprowadzenie Testy jednostkowe Technologia testowania jednostkowego Podstawowe elementy środowiska xUnit Przypadek testowy Jest to klasa, pochodna klasy *Unit Testy Pojedyncze testy są implementowane jako metody. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 12 / 34 Testowanie oprogramowania Testy akceptacyjne Wytwarzanie sterowane testami Wprowadzenie Testy jednostkowe Technologia testowania jednostkowego Test fixtures Co to jest Ustalony stan początkowy testu. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 13 / 34 Testowanie oprogramowania Testy akceptacyjne Wytwarzanie sterowane testami Wprowadzenie Testy jednostkowe Technologia testowania jednostkowego Test fixtures Co to jest Ustalony stan początkowy testu. Przykład Pusta (ale istniejąca) baza danych. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 13 / 34 Testowanie oprogramowania Testy akceptacyjne Wytwarzanie sterowane testami Wprowadzenie Testy jednostkowe Technologia testowania jednostkowego Test fixtures Co to jest Ustalony stan początkowy testu. Przykład Pusta (ale istniejąca) baza danych. Realizacja Metody: setup() teardown() Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 13 / 34 Testowanie oprogramowania Testy akceptacyjne Wytwarzanie sterowane testami Wprowadzenie Testy jednostkowe Technologia testowania jednostkowego Kontrola poprawności Asercje Metody, które sprawdzają czy zwracane wyniki są zgodne z oczekiwaniami. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 14 / 34 Testowanie oprogramowania Testy akceptacyjne Wytwarzanie sterowane testami Wprowadzenie Testy jednostkowe Technologia testowania jednostkowego Kontrola poprawności Asercje Metody, które sprawdzają czy zwracane wyniki są zgodne z oczekiwaniami. Asercje robią wiele innych rzeczy: reagują na nieprzewidziane wyjątki, mierzą czas, etc. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 14 / 34 Testowanie oprogramowania Testy akceptacyjne Wytwarzanie sterowane testami Wprowadzenie Testy jednostkowe Technologia testowania jednostkowego Uzupełnienie Kolekcje testów (test suites) Kolekcje testów, które można uruchamiać dla całego istniejącego oprogramowania. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 15 / 34 Testowanie oprogramowania Testy akceptacyjne Wytwarzanie sterowane testami Wprowadzenie Testy jednostkowe Technologia testowania jednostkowego Przykład: NUnit Zadanie Implementacja stosu. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 16 / 34 Testowanie oprogramowania Testy akceptacyjne Wytwarzanie sterowane testami Wprowadzenie Testy jednostkowe Technologia testowania jednostkowego Implementacja public class Stos<T> { public Stos() { ... } public bool isEmpty() { ... } public void push(T val) { ... } public T pop() { ... } } Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 17 / 34 Testowanie oprogramowania Testy akceptacyjne Wytwarzanie sterowane testami Wprowadzenie Testy jednostkowe Technologia testowania jednostkowego [TestFixture()] public class TestowanieStosu { [Test()] public void TestEmpty() { Stos<int> s = new Zwinne.Stos<int>(); Assert.AreEqual(s.isEmpty(), true); } [Test()] public void TestPush() { Stos<int> s = new Zwinne.Stos<int>(); s.push(1024); Assert.AreEqual(s.pop(), 1024); } Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 18 / 34 Testowanie oprogramowania Testy akceptacyjne Wytwarzanie sterowane testami Plan wykładu 1 Testowanie oprogramowania Wprowadzenie Testy jednostkowe Technologia testowania jednostkowego 2 Testy akceptacyjne 3 Wytwarzanie sterowane testami Fazy TDD Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 19 / 34 Testowanie oprogramowania Testy akceptacyjne Wytwarzanie sterowane testami Ogólna definicja Test akceptacyjny Test przygotowany przez klienta/użytkownika. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 20 / 34 Testowanie oprogramowania Testy akceptacyjne Wytwarzanie sterowane testami Ogólna definicja Test akceptacyjny Test przygotowany przez klienta/użytkownika. Test jest wyrażany w języku klienta. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 20 / 34 Testowanie oprogramowania Testy akceptacyjne Wytwarzanie sterowane testami Testy akceptacyjne w praktyce Co może być testem akceptacyjnym To mogą być przykłady podane przez klienta, na przykład w postaci scenariusza określającego stan początkowy, akcję i stan końcowy. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 21 / 34 Testowanie oprogramowania Testy akceptacyjne Wytwarzanie sterowane testami Testy akceptacyjne w praktyce Co może być testem akceptacyjnym To mogą być przykłady podane przez klienta, na przykład w postaci scenariusza określającego stan początkowy, akcję i stan końcowy. Prosta akcja Jeśli użytkownik systemu poda swoje dane i zaakceptuje regulamin, to mu się tworzy profil i widzi on inne profile. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 21 / 34 Testowanie oprogramowania Testy akceptacyjne Wytwarzanie sterowane testami Testy akceptacyjne w praktyce Co może być testem akceptacyjnym To mogą być przykłady podane przez klienta, na przykład w postaci scenariusza określającego stan początkowy, akcję i stan końcowy. Prosta akcja Jeśli użytkownik systemu poda swoje dane i zaakceptuje regulamin, to mu się tworzy profil i widzi on inne profile. Inny przykład: System Zapisy Jeśli użytkownik systemu kliknie na przedmiot, i liczba osób zapisanych na przedmiot jest mniejsza niż limit, to osoba zostaje zapisana na przedmiot. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 21 / 34 Testowanie oprogramowania Testy akceptacyjne Wytwarzanie sterowane testami Fazy TDD Plan wykładu 1 Testowanie oprogramowania Wprowadzenie Testy jednostkowe Technologia testowania jednostkowego 2 Testy akceptacyjne 3 Wytwarzanie sterowane testami Fazy TDD Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 22 / 34 Testowanie oprogramowania Testy akceptacyjne Wytwarzanie sterowane testami Fazy TDD TDD: Test–Driven Development Jedna z koncepcji stosowana w programowaniu ekstremalnym (”najpierw testy”). Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 23 / 34 Testowanie oprogramowania Testy akceptacyjne Wytwarzanie sterowane testami Fazy TDD TDD: Test–Driven Development Jedna z koncepcji stosowana w programowaniu ekstremalnym (”najpierw testy”). albo Samodzielna technika rozwoju oprogramowania. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 23 / 34 Testowanie oprogramowania Testy akceptacyjne Wytwarzanie sterowane testami Fazy TDD Zasady TDD Reguły: Najpiew pisany jest test jednostkowy, potem kod. Tworzone są tylko niezbędne testy. Kodu pisze się tylko tyle, ile jest niezbędne do przejścia testów. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 24 / 34 Testowanie oprogramowania Testy akceptacyjne Wytwarzanie sterowane testami Fazy TDD Cykl pracy Napisanie testu Napisanie kodu Test zawiódł Testowanie kodu Refaktoryzacja Test przeszedł kodu Test przeszedł Marcin Młotkowski Test zawiódł Testowanie kodu Metodyki zwinne wytwarzania oprogramowania 25 / 34 Testowanie oprogramowania Testy akceptacyjne Wytwarzanie sterowane testami Fazy TDD Cykl pracy Zakres prac w ramach cyklu Pojedyncza funkcjonalność/funkcja Czas pracy Kilkanaście minut Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 26 / 34 Testowanie oprogramowania Testy akceptacyjne Wytwarzanie sterowane testami Fazy TDD Faza pierwsza Dodanie testu Utworzenie testu na podstawie opowieści użytkownika lub przypadku użycia. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 27 / 34 Testowanie oprogramowania Testy akceptacyjne Wytwarzanie sterowane testami Fazy TDD Faza pierwsza Dodanie testu Utworzenie testu na podstawie opowieści użytkownika lub przypadku użycia. Napisanie szkicu właściwej klasy/modułu tak, aby test się skompilował. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 27 / 34 Testowanie oprogramowania Testy akceptacyjne Wytwarzanie sterowane testami Fazy TDD Faza pierwsza Dodanie testu Utworzenie testu na podstawie opowieści użytkownika lub przypadku użycia. Napisanie szkicu właściwej klasy/modułu tak, aby test się skompilował. Próba testu. Test powinien zawieść, co sugeruje, że test jest poprawny. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 27 / 34 Testowanie oprogramowania Testy akceptacyjne Wytwarzanie sterowane testami Fazy TDD Faza druga Testowanie testu Uruchmienie wszystkich testów (również utworzonych wcześniej), i sprawdzenie czy nowy test zawiedzie. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 28 / 34 Testowanie oprogramowania Testy akceptacyjne Wytwarzanie sterowane testami Fazy TDD Faza trzecia Pisanie właściwego kodu Kod nie musi być elegancki, ale powinien przechodzić testy. Kod jest poprawiany dopóki nie przejdzie swojego testu. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 29 / 34 Testowanie oprogramowania Testy akceptacyjne Wytwarzanie sterowane testami Fazy TDD Faza czwarta Uruchomienie wszystkich testów Testowany jest cały program/moduł. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 30 / 34 Testowanie oprogramowania Testy akceptacyjne Wytwarzanie sterowane testami Fazy TDD Faza piąta Refaktoryzacja Ulepszanie kodu i jego testowanie. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 31 / 34 Testowanie oprogramowania Testy akceptacyjne Wytwarzanie sterowane testami Fazy TDD Przykład Implementacja stosu Wstępna implementacja stosu [TestFixture()] public class TestowanieStosu { [Test()] public void TestCase() { Stos<int> s = new Stos<int>(); Assert.AreEqual(s.isEmpty(), true); s.push(1024); Assert.AreEqual(s.pop(), 1024); } } Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 32 / 34 Testowanie oprogramowania Testy akceptacyjne Wytwarzanie sterowane testami Fazy TDD Przykład Szkielet implementacji stosu Wstępna implementacja stosu public class Stos<T> { public Stos() { } public bool isEmpty() { return false; } public void push(T val) { } public T pop() { return default(T); } } Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 33 / 34 Testowanie oprogramowania Testy akceptacyjne Wytwarzanie sterowane testami Fazy TDD Red–green–refactor Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 34 / 34