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