background image

 

 

Inżynieria 
oprogramowania

Część 6: Testowanie 

oprogramowania

background image

 

 

Zawartość

Testowanie wytwórcze

Wytwórstwo sterowane testami

Testowanie odbiorcze

Testowanie użytkownika

background image

 

 

Testowanie 
oprogramowania

Testowanie ma  wykazać, że oprogramowanie 
spełnia swoją specyfikację oraz wykryć błędy.

Testowanie polega na uruchomianiu 
oprogramowania przy użyciu sztucznych danych.

Testowanie pozwala wykryć błędy, natomiast 
nigdy nie gwarantuje że błędów nie ma.

Testowanie jest częścią procesu zatwierdzania 
oprogramowanie, które może dodatkowo 
korzystać ze statycznych metod weryfikacji.

background image

 

 

Testowanie weryfikacyjne i 
testowanie defektów

Testowanie weryfikacyjne

Wykazanie, że oprogramowanie spełnia 
swoją specyfikację.

Test uznajemy za udany jeśli pokazuje, że 
system działa w sposób zamierzony.

Testowanie defektów

Znalezienie defektów w oprogramowaniu.

Test uznajemy za udany jeśli pozwala 
wykryć błąd.

 

background image

 

 

Testowanie defektów -- model 
czarnej skrzynki

System

Testowe dane

wejściowe

Wyniki wyjściowe

testów

Dane wejściowe

powodujące

anomalne zachowanie

Dane wyjściowe,
które umożliwiają
wykrycie defektów

background image

 

 

Weryfikacja vs. walidacja

Weryfikacja

 – czy właściwie budujemy 

produkt?

Oprogramowanie powinno być zgodne ze 
swoją specyfikacją.

Walidacja 

– czy budujemy właściwy 

produkt?

Oprogramowanie powinno być zgodne z 
oczekiwaniami klienta.

background image

 

 

Zaufanie do procesu 
weryfikacji i walidacji

Stopień zaufania do procesu weryfikacji i 

walidacji zależy od kilku czynników.

Od rodzaju oprogramowania: systemy 

krytyczne wymagają bardzo rygorystycznego 

standardu weryfikacji i walidacji.

Od oczekiwań klientów: klienci mogą 

akceptować pewne usterki jeśli mimo to 

używanie systemu jest dla nich opłacalne.

Od rynku: jeśli oprogramowanie będzie 

dostępne na wolnym rynku, wytwórca może 

pójść na pewne kompromisy, aby skrócić czas 

wytwarzania lub obniżyć cenę produktu.

background image

 

 

Kontrole oprogramowania vs. 
testowanie

Kontrole oprogramowania 

Mają charakter statyczny. Polegają na analizie 
systemu, często przy użyciu automatycznych 
narzędzi. Pojedyncza kontrola pozwala często 
wykryć wiele defektów.

Testowanie

Ma charakter dynamiczny. Polega na uruchomianiu 
systemu dla wybranych danych. W odróżnieniu od 
kontroli oprogramowania, pojedynczy test pozwala 
na ogół wykryć tylko pojedynczy defekt.

background image

 

 

Kontrole oprogramowania 
vs. testowanie

Kontrole

 oprogramowania

Kontrole

 oprogramowania

Testowanie

Prototyp
systemu

Specyfikacja

wymagań

Architektura

Projekt

System

background image

 

 

Kontrole oprogramowania

Ponieważ nie wymagają wykonywania 
programu, mogą być przeprowadzane przed 
jego ukończeniem.

Mogą dotyczyć różnych bytów związanych z 
oprogramowaniem: specyfikacji wymagań, 
architektury, projektu, kodu źródłowego.

Praktyka pokazała, że kontrole 
oprogramowania są efektywną techniką 
wykrywania błędów.

background image

 

 

Korzyści z kontroli 
oprogramowania

W odróżnieniu od klasycznego testowania, 

kontrola oprogramowania może wykryć 

równocześnie wiele błędów.

Kontrola oprogramowania może dotyczyć 

systemu w trakcie budowy.

Poza zwykłymi błędami, kontrola 

oprogramowania może dotyczyć pewnych 

atrybutów budowanego systemu, takich jak 

przestrzeganie wymaganych standardów, czy 

łatwość pielęgnacji. Ponadto kontrola może 

wykryć takie własności jak nieefektywność, czy 

słaby styl programowania.

background image

 

 

Testowanie vs. kontrole 
oprogramowania

Testowanie i kontrole oprogramowania to techniki 

uzupełniające się, a nie konkurujące ze sobą.

Obie te techniki powinny być używane w procesie 

weryfikacji i walidacji oprogramowania.

Kontrola może stwierdzić niezgodność 

oprogramowania z jego specyfikacją; nie może 

stwierdzić zgodności budowanego systemu z 

oczekiwaniami użytkownika.

Kontrole oprogramowania nie nadają się do 

zweryfikowania wymagań niefunkcjonalnych, np. 

łatwości użycia systemu.

background image

 

 

Tradycyjny model 
testowania

Zaprojektuj

przypadki

 testowe

Przypad
ki
 
testowe

Przygotuj

dane

testowe

Dane

testowe

Wykonaj program
z danymi testowymi

Wyniki
testów

Porównaj z
przypadkami
testowymi

Raport z

testów

background image

 

 

Rodzaje testowania

Testowanie wytwórcze

Testowanie w trakcie budowy systemu.

Testowanie odbiorcze

Zespół nie tworzący oprogramowania testuje cały 
system przed oddaniem go do użycia.

Testowanie produkcyjne

Testowanie systemu w jego środowisku produkcyjnym 
na rzeczywistych danych. (Środowisko produkcyjne -- 
sprzęt i oprogramowanie zainstalowane w siedzibie 
użytkownika lub klienta, w którym system będzie  
działał.)

background image

 

 

Testowanie wytwórcze

Testowanie wytwórcze dotyczy wszystkich 
czynności związanych z testowaniem 
oprogramowania przez zespół wytwórczy.

Testowanie jednostek

 -- testowanie pojedynczych 

jednostek programu lub klas obiektów. Testowanie to 
powinno koncentrować się na wykrywaniu defektów danej 
jednostki lub klasy.

Testowanie komponentów 

 

kilka (kilkanaście) jednostek 

łączy się w większe komponenty. Testowanie komponentów 
koncentruje się na interfejsach komponentów.

Testowanie integracyjne

 – Wszystkie lub niektóre 

komponenty łączy się w całość. Testowanie integracyjne  
koncentruje się na interakcji między komponentami.

background image

 

 

Testowanie jednostek

Jednostki programowe testuje się w izolacji.

Celem jest wykrywanie błędów w 
pojedynczych jednostkach.

Jednostką może być:

Pojedyncza funkcja (procedura) lub metoda w klasie 
obiektów.

Klasa obiektów ze swoimi atrybutami i metodami.

Złożone komponenty realizujące jakąś 
funkcjonalność.

background image

 

 

Testowanie obiektów

Pełne testowanie obiektów obejmuje:

Oddzielne testowanie wszystkich operacji 
związanych z obiektem.

Odczytywanie i ustalanie wszystkich atrybutów 
obiektu.

Badanie obiektu  we wszystkich możliwych stanach, 
co oznacza, że należy zasymulować wszystkie 
zdarzenia powodujące zmianę stanu obiektu.

Mechanizm dziedziczenia komplikuje proces 
testowania obiektów, ponieważ informacje 
podlegające testowaniu są rozproszone.

background image

 

 

Interfejs obiektu stacja 
meteorologiczna

Stacja meteorologiczna

Identyfikator

raport_pogodowy()
dostrój(przyrządy)
testuj()
uruchom(przyrządy)
wyłącz(przyrządy)

• Identyfikator to nazwa stacji. Należy sprawdzić, 
  czy został nadany.

• Należy sprawdzić przypadki testowe dla metod. 
  Najlepiej testować je w izolacji, ale czasami trzeba 
  niektóre z nich łącznie. Przetestowanie metody
  wyłącz(przyrządy) wymaga przykładowo wcześniejszego
  wykonania metody uruchom(przyrządy).

• Do testowania stanów stacji meteorologicznej można
  wykorzystać diagram stanu.

background image

 

 

Diagram stanu dla obiektu 
stacja meteorologiczna

Podsumowywanie

Wyłączony

Oczekiwanie

Gromadzenie

Transmitowanie

Testowanie

Dostrajanie

Działanie

uruchom()

wyłącz()

koniec
gromadzenia

zegar

raport_pogodowy()

podsumowanie gotowe

koniec transmisji

dostrój()

testuj()

koniec testu

Wyłączony-Oczekiwanie-Wyłączony
Oczekiwanie-Dostrajanie-Testowanie-Transmitowanie-Oczekiwanie
Oczekiwanie-Gromadzenie-Oczekiwanie-Podsumowywanie-Transmitowanie-Oczekiwanie

dostrojony

background image

 

 

Testowanie automatyczne

Jeśli jest to tylko możliwe, należy dążyć do 
automatycznego testowania jednostek, aby 
wyeliminować ręczne testy.

Istnieją gotowe systemy wspomagające 
automatyczne testowanie, np. JUnit.

Automatyczne systemy wspomagające testowanie 
zawierają szereg generycznych przypadków 
testowych, które należy dopasować do 
testowanych jednostek.

Główną zaletą automatycznego testowania jest 
jego szybkość.

background image

 

 

Składniki systemu 
wspomagającego automatyczne 
testowanie

Część startowa, w której następuje inicjalizacja 
przypadku testowego poprzez podanie danych 
wejściowych i spodziewanych danych wyjściowych.

Część wywołująca, gdzie definiujemy jednostkę, 
która ma zostać przetestowana.

Asercja, gdzie porównujemy dane wyjściowe testu 
ze spodziewanymi danymi wyjściowymi. Ta część 
może zawierać dodatkowo pewne asercje 
(wyrażenia logiczne), które powinny mieć wartość 
true.

background image

 

 

Efektywność testowania 
jednostek

Przypadki testowe powinny wykazać, że 
testowana jednostka w czasie normalnej pracy 
zachowuje się tak jak powinna.

Jeśli w testowanej jednostce są błędy, powinny 
być wykryte.

To prowadzi do dwóch rodzajów testów jednostek:

Pierwszy  dotyczy normalnego działania jednostki  i ma 
potwierdzić jej zgodność ze specyfikacją. 

Drugi opiera się na doświadczeniu w znajdowaniu 
defektów. W szczególności należy sprawdzić działanie 
jednostki dla niepoprawnych danych.

background image

 

 

Strategie testowania 
jednostek

Dzielenie na klasy równoważności – dzielimy 
dane wejściowe na grupy o wspólnych 
właściwościach i testujemy reprezentanta każdej 
grupy.

Testowanie oparte na regułach (ang. guideline-
based testing) – opracowujemy testy na 
podstawie pewnych reguł opartych na 
doświadczeniu w testowaniu podobnych 
jednostek.

background image

 

 

Przykład dzielenia na klasy 
równoważności

Program pobiera od 4 do 10 danych wejściowych, które są
pięciocyfrowymi liczbami całkowitymi  większymi od 10000.

Liczba wartości wejściowych

Mniej niż 4

Między 4 i 10

Więcej niż 10

3

4

7

10

11

Mniej niż 10 000

Między 10 000 i 99 999 Więcej niż 99 999

Wartości wejściowe

9000

10 000

50 000

99 999

100080

background image

 

 

Przykład testowania 
jednostek

Dla zadanych liczb całkowitych A, B i C znaleźć 
wszystkie pierwiastki równania Ax

2

 + Bx + C = 

0.

A=B=C=0

A=B=0, C≠0

A=0, B≠0, C≠0

A=0, B≠0, C=0

A≠0, B

 ̶  4AC =0

A≠0, B

 ̶  4AC > 0

A≠0, B

 ̶  4AC < 0 

background image

 

 

Reguły dotyczące testowania  
 sekwencji  (tablice, listy)

Przetestuj sekwencje jednoelementowe. 
Programiści często wiążą z sekwencją kilka 
elementów, co może powodować błąd dla 
sekwencji jednoelementowej.

Używaj różnych sekwencji, o różnych długościach 
w różnych testach. To zmiejszy szansę, że dla 
specyficznych danych program z błędami 
wyprodukuje poprawny wynik.

Uwzględniaj w testach pierwszy, środkowy i 
ostatni element sekwencji. 

Przeprowadzaj testy dla sekwencji o długości 0.

background image

 

 

Ogólne reguły testowania 
jednostek

Uwzględnij dane, które wymuszą od programu 
wszystkie uwzględnione komunikaty o błędach.

Uwzględnij dane, które spowodują 
przepełnienie bufora.

Powtórz niektóre testy.

Spróbuj znaleźć dane, które spowodują, że 
wynik będzie za mały lub za duży.

background image

 

 

Testowanie komponentów

Komponent składa się z kilku lub większej 
liczby współpracujących ze sobą jednostek.

Komponent komunikuje się z innymi 
komponentami poprzez swój interfejs.

Dlatego testowanie komponentu sprowadza się 
do testowania jego interfejsu i ma za zadanie 
wykrycie błędów wynikających z interakcji 
jednostek. Na etapie testowania komponentu 
możemy założyć, że testy jego składowych 
(jednostek) zostały zakończone.

background image

 

 

Testowanie interfejsu

Przypadki

testowe

A

B

C

A, B, C -- jednostki

background image

 

 

Rodzaje interfejsów 

Interfejsy parametryczne.

 Dane lub odwołania do funkcji są 

przekazywane od jednego komponentu do drugiego. 

Interfejsy w pamięci dzielonej.

 Blok pamięci jest dzielony 

między podsystemami. Dane są umieszczane w tym bloku 
przez jeden podsystem i pobierane stamtąd przez inny.

Interfejsy proceduralne.

 Jeden podsystem obudowuje zbiór 

procedur wywoływanych przez inne podsystemy. Interfejsy 
tego rodzaju mają obiekty.

Interfejsy z przekazywaniem komunikatów.

 Jeden podsystem 

żąda usługi od innego wysyłając mu komunikat. Wyniki 
usługi zawiera komunikat zwrotny. Tego typu interfejs mają 
systemy klient-serwer.

background image

 

 

Błędy w interfejsach

Niewłaściwe użycie interfejsu.

Komponent wywołujący inny komponent popełnia błąd 
użycia tego interfejsu. na przykład w interfejsie 
parametrycznym parametry zostały podane w niewłaściwej 
kolejności.

Niezrozumienie interfejsu.

Twórcy komponentu wywołującego źle zrozumieli 
specyfikację komponentu wywoływanego. Na przykład 
podprogram binarnego przeszukiwania jest stosowany dla 
nieuporządkowanej tablicy.

Błędy synchronizacji.

Występują w ystemach współbieżnych i rozproszonych. Na 
przykład konsument pobiera po raz kolejny te same dane 
producenta.

background image

 

 

Reguły dotyczące testowania 
interfejsów

Zanalizuj testowany kod i jawnie wypisz 

wszystkie wywołania zewnętrznych 

komponentów. Opracuj test, w których wartości 

parametrów zewnętrznych komponentów leżą na 

granicach zakresów.

Gdy przez interfejs przekazuje się wskaźniki 

zawsze przetestuj ten interfejs z zerowymi 

wartościami wskaźników.

Jeśli możliwe spróbuj opracować testy, które 

spowodują awarię komponentu. Różniące się 

założenia o awariach są jednym z najczęściej 

występujących nieporozumień co do specyfikacji.

background image

 

 

Reguły dotyczące testowania 
interfejsów

W przypadku interfejsu z przekazywaniem 
komunikatów wykonaj testy obciążeniowe.  
Polegają one na przesyłaniu znacznie większej 
liczby komunikatów niż wystąpi to w praktyce.

W przypadku kiedy występuje interakcja kilku 
komponentów przez pamięć dzieloną, opracuj testy 
różniące się   uruchomiania tych komponentów. 
Testy te mogą doprowadzić do wykrycia 
niejawnych, przyjętych przez programistę założeń 
dotyczących porządku produkcji i konsumpcji 
dzielonych danych.

background image

 

 

Testowanie integracyjne

Po odrębnym przetestowaniu komponentów 

należy je zintegrować w gotowy lub częściowo 

ukończony system.

Testowanie zintegrowanego systemu koncentruje 

się na interakcjach między komponentami.

Testy integracyjne systemu opierają się na jego 

specyfikacji.

Testowanie integracyjne należy rozpocząć 

niezwłocznie po zakończeniu testowania 

komponentów.

background image

 

 

Testowanie integracyjne

W trakcie testowania integracyjnego łączy się 
wytworzone komponenty z komponentami 
wielokrotnego użycia (jeśli są wykorzystywane). 

Testowanie integracyjne jest działalnością 
zespołową, ponieważ w przypadku dużych systemów 
poszczególne komponenty podlegające integracji są 
na ogół budowane przez różne zespoły.

W niektórych firmach testowanie integracyjne 
przeprowadza oddzielny zespół testujący.

background image

 

 

Testowanie integracyjne

Największą trudnością testowania integracyjnego jest 

lokalizowanie błędów wykrytych w trakcie tego procesu.

Aby ułatwić lokalizację błędu, należy stosować 

przyrostowe podejście do integracji i testowania 

systemu.

Na początku należy zintegrować pewną minimalną 

konfigurację systemu i ją przetestować. Następnie 

należy dodawać kolejne komponenty i testować po 

każdym dodanym przyroście.

W testowaniu integracyjnym można wykorzystać 

diagramy przypadków użycia.

background image

 

 

Strategie testowania 
integracyjnego

W przypadku dużych systemów pełne 
przetestowanie integracyjne jest niemożliwe. W 
związku z tym firma powinna opracować strategię 
tego typu testowania.

Przykład strategii testowania integracyjnego:

Należy przetestować wszystkie funkcje systemu 
wywoływane z menu.

Należy przetestować wszystkie możliwe kombinacje 
funkcji znajdujących się w pojedynczym menu.

W przypadku kiedy usługa wymaga danych otrzymanych 
od użytkownika, należy przetestować zarówno poprawne 
jak i niepoprawne dane.

background image

 

 

Wytwórstwo sterowane 
testami (ang. test-driven 
development)

Wytwórstwo sterowane testami (WST) jest technologią 
budowy oprogramowania, gdzie testowanie i kodowanie 
przeplatają się.

WST należy do przyrostowego modelu budowy 
oprogramowania. Testy dotyczące kolejnego przyrostu 
definiowane są przez napisaniem kodu realizującego ten 
przyrost. Udane testy są konieczne, aby przejść do 
kolejnego przyrostu.

WST powstało w kontekście programowania zwinnego 
(szczególnie programowania ekstremalnego). Obecnie 
technika ta jest również stosowana w zaplanowanym 
modelu tworzenia oprogramowania.

background image

 

 

Wytwórstwo sterowane 
testami

Zdefiniuj nową
funkcjonalnoś
ć

Przygotuj

testy

Zaimplement

uj

 

funkcjonalnoś

ć

przeprowadź

refaktoryzacj

ę

Wykonaj

 testy

OK?

NIE

background image

 

 

Czynności procesu 
wytwarzania sterowanego 
testami

Zidentyfikuj przyrost funkcjonalności. Powinien być 
mały – kilkanaście linii kodu.

Przygotuj automatyczne testy dla tej 
funkcjonalności.

Zaimplementuj nową funkcjonalność i zintegruj ją z 
dotychczasowym oprogramowaniem. Przeprowadź 
ewentualnie faktoryzację.

Wykonaj testy przygotowane dla implementowanej 
funkcjonalności oraz wszystkie testy zdefiniowane 
wcześniej.

Kiedy wszystkie testy zakończą się powodzeniem, 
identyfikuj następny przyrost funkcjonalności.

background image

 

 

Zalety wytwórstwa 
sterowanego testami.

Pełne pokrycie kodu testami

Z każdym (niewielkim) fragmentem kodu związany jest 
przynajmniej jeden test. Zatem cały kod został wykonany w 
procesie testowania.

Testowanie regresyjne

Zdefiniowane testy są wiele razy wykonywane w celu sprawdzenia, 
że nowy przyrost nie doprowadził do błędów w dotychczasowej 
wersji oprogramowania.

Łatwość lokalizowania błędów

Jeśli nowe testy nie zakończyły się powodzeniem, (a stare tak) 
wiemy, że błąd wystąpił w aktualnym przyroście.

Dokumentacja systemu

Zbiór testów można traktować jako rodzaj dokumentacji systemu.

background image

 

 

Testowanie regresyjne

Testowanie regresyjne pozwala stwierdzić, że 
nowe zmiany nie wprowadziły błędów we 
wcześniej napisanym kodzie.

Przy testowaniu ręcznym testowanie regresyjne 
jest uciążliwe. W przypadku testowania 
automatycznego nie ma problemu. Każda zmiana 
kodu powoduje wykonanie wszystkich testów.

Wszystkie testy muszą wykonać się pozytywnie 
zanim oprogramowanie będzie dalej rozszerzane.

background image

 

 

Testowanie odbiorcze

Testowanie odbiorcze polega na ostatecznym 
przetestowaniu systemu przed ostatecznym oddaniem 
go do eksploatacji.

Na ogół produkt programistyczny oddawany jest 
klientowi, który produkt zamówił. Czasami jednak, w 
przypadku kiedy nasze oprogramowanie jest częścią 
wielkiego systemu,  odbiorcą być inny zespół wytwórczy.

W przypadku oprogramowania otwartego odbiorcą jest 
na ogół kierownictwo firmy wytwórczej, które 
przygotowuje produkt do sprzedaży na wolnym rynku.

background image

 

 

Testowanie odbiorcze

Podstawowym celem testowania odbiorczego jest 
przekonanie wytwórcy, że zbudowany produkt 
nadaje się do eksploatacji.

Testowanie odbiorcze ma zatem pokazać, że system 
realizuje swoją funkcjonalność, zachowuje się w 
spodziewany sposób oraz spełnia wymogi niezawodności.

Testowanie odbiorcze jest realizowane przy użyciu 
modelu czarnej skrzynki, czyli testy przygotowuje 
się na podstawie specyfikacji testowanego 
systemu.

background image

 

 

Testowanie odbiorcze i 
testowanie integracyjne

Testowanie odbiorcze jest podobne do 
testowania integracyjnego.

Istotne różnice:

Za testowanie odbiorcze powinien odpowiadać 
zewnętrzny zespół, który nie tworzył testowanego 
oprogramowania.

Testowanie integracyjne powinno koncentrować się 
na znajdowaniu błędów. Celem testowania 
odbiorczego jest wykazanie, że system dziła zgodnie 
ze swoją specyfikacją i nadaje się do eksploatacji.

background image

 

 

Testowanie odbiorcze 
sterowane wymaganiami

Testowanie sterowane wymaganiami polega na 
wykonaniu testu dla  każdego wymagania 
związanego z testowanym oprogramowaniem.

Celem tego testowania jest wykazanie, że 
system spełnia wszystkie wymagania.

System wspomagający kliniki:

Jeśli pacjent ma alergię na dane lekarstwo, 
przepisanie go powinno skutkować odpowiednim 
komunikatem.

Jeśli lekarz zignoruje ostrzeżenie, musi podać 
uzasadnienie tego kroku.

background image

 

 

Przykłady testów 
wymaganiowych

Stwórz kartę pacjenta, o którym nie wiadomo, że ma alergię. 
Przepisz lekarstwo, które może powodować alergię. Nie 
powinien pojawić się komunikat o alergii.

Stwórz kartę pacjenta, o którym wiadomo, że ma alergię. 
Przepisz lekarstwo, na które pacjent jest uczulony. Sprawdź, że 
pojawi się komunikat.

Stwórz kartę pacjenta uczulonego na dwa leki. Sprawdź, że 
przepisanie każdego z nich prowadzi do odpowiedniego 
komunikatu.

Jak poprzednio, ale zapisz oba leki jednocześnie. Powinny 
pojawić się dwa komunikaty.

Stwórz kartę pacjenta i przepisz lek na który jest uczulony. 
Zignoruj ostrzeżenie. Sprawdź, że system zażąda napisania 
uzasadnienia tego kroku.

background image

 

 

Testowanie  na podstawie 
scenariusza

Jest to rodzaj testowania odbiorczego. Polega 
na zdefiniowaniu scenariuszy opisujących 
użycie systemu i przygotowania testów dla 
każdego z tych scenariuszy.

Każdy scenariusz powinien opisywać konkretne 
użycie systemu przez konkretnego 
użytkownika.

Jeśli scenariusze były używane w procesie 
definiowania wymagań, mogą być użyte w 
procesie testowania.

background image

 

 

Scenariusz (sieć klinik)

Anna jest pielęgniarką pracującą w klinice dla pacjentów z 
problemami psychicznymi. Jednym z jej obowiązków jest 
odwiedzanie pacjentów w domu, aby sprawdzić skuteczność 
terapii  oraz czy zapisane lekarstwa nie powodują u pacjenta 
skutków ubocznych.

W dniu wizyt domowych Anna loguje się do systemu i 
drukuje plan wizyt na ten dzień. W swoim laptopie 
umieszcza historie chorób odwiedzanych pacjentów. 
Ponieważ informacje te są poufne, muszą  zostać 
zaszyfrowane. W tym celu Anna musi podać swój klucz 
szyfrujący.

background image

 

 

Scenariusz (sieć klinik)

Jednym z pacjentów odwiedzanych przez Annę jest Jan, który 
cierpi na depresję. Jan narzeka, że lekarstwo, które bierze 
powoduje trudności ze snem. Anna sprawdza informację o 
Janie na swoim laptopie. Aby ją odszyfrować musi podać swój 
klucz szyfrujący. Okazuje się, że lekarstwo, które bierze Jan 
może mieć efekt uboczny powodujący bezsenność. Zapisuje 
ten fakt w karcie chorobowej Jana i sugeruje wizytę w klinice, 
aby zmienić lekarstwo. Jan się zgadza i  Anna zapisuje w jego 
karcie, aby umówić termin wizyty z lekarzem. System szyfruje 
kartę chorobową Jana.

Po zakończeniu wizyt Anna wraca do kliniki i umieszcza 
zmodyfikowane karty chorób odwiedzanych pacjentów w 
ogólnej bazie danych. System generuje listę pacjentów, dla 
których należy zamówić wizyty w klinice.

background image

 

 

Funkcjonalności wynikające 
ze scenariusza 

Autoryzacja na podstawie logowania do systemu.

Pobieranie z systemu do laptopa i wysyłanie z 

lptopa do systemu informacji o pacjentach.

Szyfrowanie i deszyfrowanie informacji o 

pacjentach.

Kalendarz wizyt domowych.

Obsługa informacji o pacjentach na laptopie.

Obsługa bazy danych zawierającej informacje o 

efektach ubocznych leków.

Obsługa telefonicznego przypominania o 

wizytach w klinice.

background image

 

 

Testy wydajnościowe

Częścią testowania odbiorczego może być 
testowanie wydajnościowe.

Testy wydajnościowe powinny symulować profil 
używania systemu.

Testowanie wydajnościowe polega na serii 
testów, z których kolejne coraz bardziej obciążają 
system. Sprawdza się przy jakim obciążeniu 
zachowanie systemu staje się nieakceptowalne.

Testowanie przewyższające znacznie obciążenie 
systemu nazywa się testowaniem stresowym.

background image

 

 

Testowanie produkcyjne

Testowanie produkcyjne polega na testowaniu 
systemu w jego środowisku produkcyjnym na 
rzeczywistych danych.

Testowanie produkcyjne jest kluczowe nawet jeśli 
testowanie wytwórcze i odbiorcze zostały bardzo 
solidnie przeprowadzone.

Wynika to z faktu, że praca systemu w rzeczywistym 
środowisku pozwala właściwie ocenić jego niezawodność, 
wydajność, odporność na błędy, czy łatwość użycia. Tych 
własności nie da się dobrze ocenić w środowisku 
testowym.

background image

 

 

Rodzaje testowanie 
produkcyjnego

Testowanie alfa

Użytkownicy oprogramowania razem z zespołem 
wytwórczym testuję system na terenie firmy wytwórczej.

Testowanie beta

Wstępne wydanie systemu udostępnione zostaje 
użytkownikom, od których oczekuje się opinii na temat  
systemu.

Testowanie akceptacyjne

Testowanie przeprowadzane przez przedstawicieli klienta, 
którego celem jest podjęcie decyzji, czy zaakceptować 
system.

background image

 

 

Proces testowania 
akceptacyjnego

Zdefiniuj
kryteria
akceptacji

Zaplanuj 

testy

akceptacyjn

e

Zdefiniuj

testy

akceptacyjn

e

Wykonaj 

testy

akceptacyjn

e

Negocjuj

wyniki 

testu

Akceptuj

lub

odrzuć

Kryteria

testu

Plan

testu

Test

Wyniki

testu

Raport

z testu

background image

 

 

Etapy testowania 
akceptacyjnego

Zdefiniuj kryteria akceptacji.

Kryteria akceptacji powinny być zdefiniowane jak 
najwcześniej. Idealnie, jeśli są częścią kontraktu. W 
praktyce jest to trudne, ponieważ szczegółowe wymagania 
mogą jeszcze nie być ustalone i ponadto mogą się zmienić 
w trakcie budowy systemu.

Zaplanuj testy akceptacyjne

Należy przede wszystkim zaplanować harmonogram testów 
i przeznaczony na nie budżet. Plan powinien również 
określić wymagane pokrycie wymagań przez testy oraz 
kolejność w jakiej wymagania są testowane.

background image

 

 

Etapy testowania 
akceptacyjnego

Zdefiniuj testy akceptacyjne

Testy akceptacyjne definiuje się na podstawie 
kryteriów akceptacji. Testy powinny obejmować 
zarówno wymagania funkcjonalne, jak i 
niefunkcjonalne. Idealnie jeśli testy pokrywają 
wszystkie wymagania, chociaż w praktyce może to 
być bardzo trudne.

Wykonaj testy akceptacyjne

Wykonywane są wcześniej zdefiniowane testy. Jeśli 
tylko możliwe, testy te powinny być wykonane w 
rzeczywistym środowisku na rzeczywistych danych.

background image

 

 

Etapy testowania 
akceptacyjnego

Negocjuj wyniki testu

W praktyce test akceptacyjny wykaże pewne usterki 
systemu. W takiej systuacji klient i wytwórca muszą 
negocjować, czy mimo to system można 
zaakceptować.

Akceptuj/odrzuć system

Klient podejmuje ostateczną decyzję, czy system jest 
akceptowalny. Jeśli nie, system musi zostać 
poprawiony.

background image

 

 

Testy akceptacyjne w 
wytwórstwie zwinnym

W programowaniu zwinnym przedstawiciel klienta 
członkiem zespołu wytwórczego i odpowiada za 
podejmowanie decyzji związanych z 
akceptowalnością produktu.

Dlatego w programowaniu zwinnym nie ma 
oddzielnego testowania akceptującego.

Głównym problemem związanym z testowaniem w 
wytwórstwie zwinnym jest reprezentatywność 
przedstawiciela klienta, jeśli  produktu jest 
faktycznie tworzony dla kilku klientów.

background image

 

 

Podsumowanie

Testowanie pomaga wykryć błędy. Nigdy nie 

gwarantuje, że błędów nie ma.

Testowanie wytwórcze realizuje zespół budujący 

system. Inny zespół powinien odpowiadać za 

testowanie odbiorcze, czyli testowanie całego 

oprogramowania przed oddaniem go do eksploatacji.

Testowanie wytwórcze zawiera testowanie jednostek, 

gdzie testuje się niewielkie jednostki programowe, 

testowanie komponentów, gdzie testuje się kilka 

(kilkanaście) powiązanych jednostek, oraz testowanie 

systemu, gdzie testuje się częściowy lub cały system.

background image

 

 

Podsumowanie

Ważną rolę w testowaniu odgrywają reguły 

tworzenia przypadków testowych oparte na 

doświadczeniu.

Jeśli możliwe, należy tworzyć testy automatyczne. 

Mogą być one efektywnie powtarzane po 

zdefiniowaniu kolejnego przyrostu.

Wytwórstwo sterowane testami polega na 

opracowaniu testów przed projektem i 

implementacją.

Testowanie akceptacyjne jest to testowanie 

wykonywane przez odbiorcę oprogramowania w 

celu podjęcia ostatecznej decyzji o jego akceptacji.


Document Outline