background image

1

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów

Bła

Ŝ

ej Pietrzak

Blazej.Pietrzak@cs.put.poznan.pl

Testowanie wymaga du

Ŝ

ego wysiłku ze strony zespołu testuj

ą

cego. 

Mimo to przetestowany system nadal zawiera bł

ę

dy. Rzadko kiedy starcza 

zasobów i czasu na jego adekwatne sprawdzenie. Czy istniej

ą

 zatem techniki 

umo

Ŝ

liwiaj

ą

ce dokładniejsze testowanie? Jedn

ą

 z nich jest technika b

ę

d

ą

ca w 

tytule tego wykładu – automatyzacja wykonywania testów. Zapraszam Pa

ń

stwa 

na wykład.

background image

2

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (2) 

Plan wykładów

Zasady skutecznego działania
Specyfikacja wymagań (przypadki uŜycia)
Przeglądy artefaktów (inspekcje Fagana)
Język UML, cz. I
Język UML, cz. II
Metody formalne (sieci Petriego)
Wzorce projektowe
Zarządzanie konfiguracją (CVS)
Wprowadzenie do testowania
Automatyzacja wykonywania testów
Programowanie Ekstremalne
Ewolucja oprogramowania i refaktoryzacja

Omówiony tutaj materiał b

ę

dzie punktem odniesienia dla

pozostałych wykładów dotycz

ą

cych programowania ekstremalnego i 

refaktoryzacji, gdzie testowanie odgrywa kluczow

ą

rol

ę

podczas

weryfikacji poprawno

ś

ci przekształce

ń

refaktoryzacyjnych.

background image

3

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (3) 

Plan wykładu

• Automatyzacja testowania – wady i zalety

• Automatyzacja poszczególnych

czynno

ś

ci w ramach testowania

• JUnit jako przykład narz

ę

dzia

do automatyzacji testów

• JUnit - dobre praktyki

programistyczne

Plan wykładu wygl

ą

da nast

ę

puj

ą

co. Na pocz

ą

tku spojrzymy ogólnie 

na testowanie i na proces jego automatyzacji. Okre

ś

limy co oznacza dobrej 

jako

ś

ci wariant testu w przypadku r

ę

cznego testowania, oraz w jaki sposób 

opisana jest jako

ść

 dla testów automatycznych. Nast

ę

pnie omówione zostan

ą

 

czynno

ś

ci w ramach testowania. Dla ka

Ŝ

dej z nich podane zostan

ą

 sposoby jej 

automatyzacji. Wytłumaczone zostanie dlaczego wykonywanie i porównywanie 
wyników testów jest bardziej adekwatne do automatyzacji ni

Ŝ

 ich projektowanie. 

Podane zostan

ą

 korzy

ś

ci, problemy i ograniczenia płyn

ą

ce z automatyzacji 

testowania. Wreszcie jako przykład narz

ę

dzia do automatyzacji wykonywania 

testów przedstawiona zostanie biblioteka JUnit. Na koniec podane zostan

ą

 dobre 

praktyki programistyczne zwi

ą

zane z jej wykorzystaniem.

background image

4

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (4) 

Potrzeba szybkich rozwi

ą

za

ń

• Testowanie oprogramowania powinno by

ć

:

– Efektywne

– Wydajne

• Testowanie to ~ 30% - 40% (dla systemów 

krytycznych ~80%) całkowitej pracochłonno

ś

ci

• Przetestowane programy zawieraj

ą

 bł

ę

dy

Oprogramowanie powinno by

ć

 przetestowane by uzyska

ć

 pewno

ść

Ŝ

e b

ę

dzie działa

ć

 prawidłowo w 

ś

rodowisku docelowym. Od testowania wymaga 

si

ę

 by było ono efektywne i wydajne. Przez efektywne rozumie si

ę

skuteczne w 

znajdywaniu bł

ę

dów. Wydajne natomiast oznacza wykonanie testów w sposób 

jak najszybszy i jak najta

ń

szy.

Czas potrzebny na testowanie dla typowych projektów 

informatycznych waha si

ę

 od 30% do 40% całkowitej pracochłonno

ś

ci. W 

przypadku systemów krytycznych wynosi nawet do 80%. Mimo to przetestowane 
programy zawieraj

ą

 bł

ę

dy. Niestety nieprawidłowe działanie programu sporo 

kosztuje szczególnie gdy usterki znalezione zostan

ą

 dopiero po wdro

Ŝ

eniu 

systemu, podczas normalnego u

Ŝ

ytkowania. Powodów wyst

ę

powania bł

ę

dów 

mo

Ŝ

e by

ć

 wiele jednak oznacza to, 

Ŝ

e nie przetestowano dokładnie systemu.

background image

5

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (5) 

Obietnice automatyzacji testowania

• Zwi

ę

kszenie testowania

(przypadki testowe uruchamiane w minutach)

• Zmniejszenie kosztu testowania a

Ŝ

 do 80% 

wysiłku r

ę

cznego testowania

• Lepszej jako

ś

ci oprogramowanie 

wyprodukowane szybciej

Jednym z rozwi

ą

za

ń

 mo

Ŝ

e by

ć

 zwi

ę

kszenie czasu potrzebnego na 

testowanie. Jednak w praktyce jest to cz

ę

sto nieopłacalne. Innym rozwi

ą

zaniem 

jest poprawa sposobu w jaki testowane jest oprogramowanie. Mo

Ŝ

na przeszkoli

ć

 

testerów, by tworzyli skuteczniejsze przypadki testowe. R

ę

czne wykonywanie 

testów zajmuje sporo czasu, szczególnie je

ś

li raz zaprojektowane warianty 

testów wykonywane s

ą

 wiele razy. Automatyzuj

ą

c testowanie mo

Ŝ

na znacznie 

zmniejszy

ć

 koszt zwi

ą

zany z dokładnym testowaniem. W tym samym czasie 

mo

Ŝ

na wykona

ć

 wi

ę

ksz

ą

 liczb

ę

 przypadków testowych, czyli mo

Ŝ

na dokładniej 

sprawdzi

ć

 system. Wykonanie wariantów testu mo

Ŝ

e trwa

ć

 kilka minut, a nie jak 

w przypadku r

ę

cznych testów godziny. Znane s

ą

 przypadki gdzie automatyzacja 

testowania zmniejszyła koszt testowania do 80% wysiłku potrzebnego na jego 
r

ę

czne przeprowadzenie. W ten sposób zaoszcz

ę

dzone pieni

ą

dze mo

Ŝ

na było 

przeznaczy

ć

 na dokładniejsze testowanie i wyprodukowa

ć

 lepszej jako

ś

ci 

oprogramowanie w krótszym czasie.

background image

6

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (6) 

Ocena jako

ś

ci wariantu testu

Ekonomia

Łatwość zmian

Przykładność

Efektywność

Testowanie to umiej

ę

tno

ść

 wyboru, które warianty testów powinny 

by

ć

 zaprojektowane i wykonane. Dla ka

Ŝ

dego systemu wyst

ę

puje astronomiczna 

liczba przypadków testowych. W praktyce jednak jest czas na wykonanie tylko 
niewielkiej cz

ęś

ci z nich. Mimo tego od wybranych wariantów, które maj

ą

 by

ć

 

wykonane oczekuje si

ę

Ŝ

e znajd

ą

 wi

ę

kszo

ść

 bł

ę

dów wyst

ę

puj

ą

cych w 

programie.

Wybór przypadków testowych do wykonania jest wi

ę

c bardzo 

wa

Ŝ

nym zadaniem. Badania pokazały, 

Ŝ

e selekcja wariantów w sposób losowy 

nie jest efektywnym podej

ś

ciem do testowania. Najlepszym podej

ś

ciem jest 

wybranie „najlepszych przypadków testowych” do wykonania. Jak wi

ę

c mo

Ŝ

na 

okre

ś

li

ć

, które warianty testów s

ą

 najlepsze?

W kontek

ś

cie automatyzacji testowania przypadki testowe mo

Ŝ

na 

ocenia

ć

 na podstawie czterech atrybutów:

efektywno

ś

ci (ang. effective), łatwo

ś

ci zmian (ang. evolvable), przykładno

ś

ci 

(ang. exemplary), i ekonomiczno

ś

ci (ang. economic).

background image

7

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (7) 

Ocena jako

ś

ci wariantu testu

Ekonomia

Łatwość zmian

Przykładność

Efektywność

Zdolność testu do 

znajdywania błędów

Najwa

Ŝ

niejszym z atrybutów opisuj

ą

cych jako

ść

 przypadku 

testowego jest efektywno

ść

 (ang. effective). Jest to zdolno

ś

ci testu do 

znajdywania bł

ę

dów. Im wi

ę

ksza jest jego warto

ść

 tym wi

ę

ksze jest 

prawdopodobie

ń

stwo na znalezienie bł

ę

du przez test.

background image

8

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (8) 

Ocena jako

ś

ci wariantu testu

Ekonomia

Łatwość zmian

Przykładność

Efektywność

Zdolność testu do 

sprawdzania więcej niŜ 

jednej rzeczy

Dobry wariant testu powinien tak

Ŝ

e posiada

ć

 zdolno

ść

 do 

testowania wi

ę

cej ni

Ŝ

 jednej rzeczy w ramach przypadku testowego. W ten 

sposób zmniejsza to całkowit

ą

 liczb

ę

 przypadków testowych wymaganych do 

sprawdzenia systemu. Cech

ę

 t

ą

 opisuje atrybut przykładno

ść

 (ang. exemplary). 

Im wi

ę

ksza warto

ść

 tego atrybutu tym wi

ę

cej potrafi przetestowa

ć

dany 

przypadek testowy.

background image

9

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (9) 

Ocena jako

ś

ci wariantu testu

Ekonomia

Łatwość zmian

Przykładność

Efektywność

Koszt modyfikacji przypadku 

testowego

Pozostałe dwa atrybuty bior

ą

 pod uwag

ę

 koszt zwi

ą

zany z 

przypadkiem testowym. Pierwszy z nich, łatwo

ść

 zmian (ang. evolvable) okre

ś

la 

ile kosztuje modyfikacja wariantu testu, w przypadku gdy testowany system uległ 
zmianie. Na ogół wraz z modyfikacjami w systemie konieczne jest te

Ŝ

 

zmodyfikowanie przypadków testowych. Je

ś

li zmieniono zachowanie istniej

ą

cej 

funkcji (nie polegaj

ą

ce oczywi

ś

cie na poprawieniu wykrytego bł

ę

du) to konieczna 

b

ę

dzie aktualizacja przypadków testowych j

ą

 sprawdzaj

ą

cych. Im wi

ę

ksza 

warto

ść

 tego atrybutu tym łatwiej jest wprowadzi

ć

 zmian

ę

 w danym wariancie 

testu za ka

Ŝ

dym razem gdy testowany system ulega zmianie.

background image

10

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (10) 

Ocena jako

ś

ci wariantu testu

Ekonomia

Łatwość zmian

Przykładność

Efektywność

Koszt wykonania, analizy i 

debugowania wariantu testu

Ostatni z atrybutów ekonomiczno

ść

 (ang. Economic) okre

ś

la koszt 

wykonania, analizy i debugowania przypadku testowego. Im wi

ę

ksza jego 

warto

ść

 tym taniej jest dany wariant wykona

ć

 i analizowa

ć

.

W praktyce trzeba cz

ę

sto równowa

Ŝ

y

ć

 wpływ tych czterech 

czynników na siebie. Przykładowo wariant testu, który testuje wiele rzeczy b

ę

dzie 

najcz

ęś

ciej kosztował sporo na etapie wykonania, analizy i ewentualnego 

debugowania tego testu. B

ę

dzie tak

Ŝ

e najprawdopodobniej wymagał sporego 

nakładu pracy na jego piel

ę

gnacj

ę

 w przypadku, gdy testowany system ulegnie 

zmianie. Niestety wysoka warto

ść

 dla atrybutu przykładno

ś

ci powoduje obni

Ŝ

enie 

na skali ekonomiczno

ś

ci i łatwo

ś

ci zmian.

Mo

Ŝ

na wi

ę

c powiedzie

ć

Ŝ

e testowanie to nie tylko zapewnienie, 

Ŝ

warianty testu znajd

ą

 wi

ę

kszo

ść

 bł

ę

dów, ale tak

Ŝ

e zapewnienie, 

Ŝ

e te przypadki 

testowe s

ą

 dobrze zaprojektowane i nie kosztuj

ą

 sporo.

background image

11

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (11) 

Ocena jako

ś

ci automatyzacji

Ekonomia

Łatwość zmian

Przykładność

Efektywność

Automatyzacja testów znacznie ró

Ŝ

ni si

ę

 od testowania. Bywa 

bardzo kosztowna, dro

Ŝ

sza nawet od r

ę

cznego wykonania testów. Bardzo wa

Ŝ

n

ą

 

rol

ę

 odgrywa tutaj wybór wariantów testów, które maj

ą

 by

ć

 zautomatyzowane. 

Decyzja ta wpływa na to czy zyskuje si

ę

 na automatyzacji testów czy te

Ŝ

 traci. 

Jako

ść

 automatyzacji nie okre

ś

la si

ę

 tak samo jak jako

ść

 wariantów testów.

To czy dany przypadek testowy jest zautomatyzowany czy 

wykonywany r

ę

cznie nie wpływa na jego zdolno

ść

 znajdywania bł

ę

dów -

efektywno

ść

 (ang. effective), ani na przykładno

ść

 (ang. exemplary). Nie ma 

znaczenia jak dobrze zostanie zautomatyzowany wariant testu, który nie wykrywa 

Ŝ

adnego bł

ę

du. Po automatyzacji nadal nie wykryje bł

ę

du! B

ę

dzie za to 

wykonywany szybciej.

Automatyzacja testów wpływa na dwa atrybuty: ekonomiczno

ść

 

(ang. economic), oraz łatwo

ść

 zmian (ang. evolvable). Po zaimplementowaniu 

zautomatyzowany przypadek testowy jest na ogół bardziej ekonomiczny, 
poniewa

Ŝ

 koszt zwi

ą

zany z jego wykonaniem tego testu jest znacznie mniejszy 

od przeprowadzenia go r

ę

cznie. Niestety zautomatyzowane testy kosztuj

ą

 wi

ę

cej 

je

ś

li chodzi o ich stworzenie i utrzymanie. Im lepsze podej

ś

cie do automatyzacji 

testów, tym ta

ń

sze b

ę

dzie ich tworzenie w dłu

Ŝ

szej perspektywie czasu. Je

ś

li w 

trakcie automatyzacji nie bierze si

ę

 pod uwag

ę

 konieczno

ś

ci przyszłej piel

ę

gnacji 

testów, ich pó

ź

niejsza aktualizacja mo

Ŝ

e kosztowa

ć

 co najmniej tyle samo (je

ś

li 

nie wi

ę

cej) co wykonanie tych testów r

ę

cznie.

background image

12

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (12) 

Ocena jako

ś

ci wariantu testu

Ekonomia

Łatwość zmian

Przykładność

Efektywność

Ręczne 

testowanie

Wpływ automatyzacji na atrybuty opisuj

ą

ce jako

ść

 wariantu testu 

zobrazowane zostan

ą

 na poni

Ŝ

szym diagramie. Załó

Ŝ

my, 

Ŝ

e dla wariantu testu 

wykonanego r

ę

cznie warto

ś

ci atrybutów przyjmuj

ą

 warto

ś

ci pokazane na 

diagramie przy pomocy linii ci

ą

głej.

background image

13

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (13) 

Ocena jako

ś

ci wariantu testu

Ekonomia

Łatwość zmian

Przykładność

Efektywność

Ręczne 

testowanie

Zautomatyzowane 
pierwsze przejście

Po automatyzacji, przypadek testowy traci na łatwo

ś

ci zmian, 

poniewa

Ŝ

 wi

ę

cej pracy trzeba po

ś

wi

ę

ci

ć

 na jego dostosowanie ni

Ŝ

 w przypadku 

jego „r

ę

cznego” odpowiednika. Traci równie

Ŝ

 na ekonomiczno

ś

ci, poniewa

Ŝ

 

zautomatyzowanie go kosztuje wi

ę

cej pracy ni

Ŝ

 wykonanie tego wariantu 

„r

ę

cznie”.

background image

14

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (14) 

Ocena jako

ś

ci wariantu testu

Ekonomia

Łatwość zmian

Przykładność

Efektywność

Ręczne 

testowanie

Zautomatyzowane 
pierwsze przejście

Zautomatyzowane 

po wielu 

przejściach

Dopiero gdy zautomatyzowany przypadek testowy wykonany 

zostanie wiele razy stanie si

ę

 bardziej ekonomiczny od tego samego wariantu 

testu wykonanego r

ę

cznie.

By uzyska

ć

 efektywny i wydajny zbiór zautomatyzowanych testów 

trzeba zbudowa

ć

 zbiór dobrych przypadków testowych, czyli takich które 

maksymalizuj

ą

 cztery omówione wcze

ś

niej kryteria oceny. Z tych wariantów 

nast

ę

pnie wybiera si

ę

 te, które powinny by

ć

 poddane automatyzacji.

background image

15

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (15) 

Kto automatyzuje?

Test automator:

–Tester

–Programista

Osob

ą

, która tworzy i piel

ę

gnuje artefakty zwi

ą

zane ze 

zautomatyzowanymi testami jest test automator. Zadaniem testera natomiast jest 
przygotowanie „dobrych” wariantów testów, które nast

ę

pnie oceniane s

ą

 pod 

k

ą

tem automatyzacji. Test automatorem bywa cz

ę

sto sam tester, cho

ć

 mo

Ŝ

e by

ć

 

nim tak

Ŝ

e osoba spoza zespołu odpowiedzialnego za testowanie. Przykładowo 

je

ś

li w skład zespołu testerów wchodz

ą

 osoby, które s

ą

 u

Ŝ

ytkownikami systemu 

to posiadaj

ą

 oni nieocenion

ą

 wiedz

ę

 biznesow

ą

, ale nie maj

ą

 umiej

ę

tno

ś

ci 

technicznych potrzebnych do automatyzacji tych testów. Do tego celu mo

Ŝ

na 

wykorzysta

ć

 programistów, by wspomogli te osoby w procesie implementacji i 

piel

ę

gnacji zautomatyzowanych testów. W takim przypadku programista jest test 

automatorem.

Podobnie jak mo

Ŝ

liwe jest uzyskanie dobrych lub słabych 

jako

ś

ciowo przypadków testowych, mo

Ŝ

liwe jest uzyskanie ró

Ŝ

nej jako

ś

ci 

zautomatyzowanych wariantów testu. To od umiej

ę

tno

ś

ci test automatora zale

Ŝ

jak łatwo b

ę

dzie doda

ć

 lub poprawi

ć

 istniej

ą

ce zautomatyzowane warianty 

testów, oraz jakie korzy

ś

ci b

ę

d

ą

 płyn

ąć

 z automatyzacji.

background image

16

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (16) 

Zalety

• Testy regresyjne

• Wi

ę

cej testów cz

ęś

ciej

• Wykonanie testów trudnych do wykonania r

ę

cznie

• Lepsze u

Ŝ

ycie zasobów

• Spójno

ść

 i powtarzalno

ść

 testów

• Reu

Ŝ

ywalno

ść

testów

• Szybciej na rynek

• Zwi

ę

kszona pewno

ść

• Testowanie mo

Ŝ

e odbywa

ć

 si

ę

 w nocy

Automatyzacja testowania umo

Ŝ

liwia wykonanie wielu czynno

ś

ci znacznie 

wydajniej ni

Ŝ

 w przypadku gdyby były przeprowadzane r

ę

cznie. Najbardziej oczywist

ą

 korzy

ś

ci

ą

 

płyn

ą

c

ą

 z automatycznego testowania jest wykonanie testów regresyjnych dla nowej wersji 

programu. Wysiłek konieczny na ten typ testowania jest minimalny, pod warunkiem, 

Ŝ

e testy 

zostały zautomatyzowane dla wcze

ś

niejszej wersji aplikacji. W zaledwie kilka minut mo

Ŝ

na wtedy 

wybra

ć

 odpowiednie warianty testów i je wykona

ć

.

Jako zalet

ę

 mo

Ŝ

na zaliczy

ć

 tak

Ŝ

e uruchamianie wi

ę

cej testów cz

ęś

ciej. Dzi

ę

ki 

temu, 

Ŝ

e testy wykonuj

ą

 si

ę

 szybciej mo

Ŝ

na je wykonywa

ć

 cz

ęś

ciej. To prowadzi do wi

ę

kszej 

pewno

ś

ci, 

Ŝ

e tworzony system działa zgodnie z oczekiwaniami klienta.

Niektóre testy bardzo trudno wykona

ć

 r

ę

cznie lub jest to wr

ę

cz niemo

Ŝ

liwe. Do 

tego typu testów nale

Ŝą

 m.in. testy wydajno

ś

ciowe. Próba wykonania testu, w którym 500 osób 

próbuje w tym samym czasie wstawi

ć

 pewn

ą

 informacj

ę

 do bazy mo

Ŝ

e by

ć

 do

ść

 kosztowna i 

trudna do zsynchronizowana w przypadku gdyby miała by

ć

 przeprowadzona przez testerów.

Odci

ąŜ

aj

ą

c testerów od konieczno

ś

ci wykonywania testów i porównywania 

uzyskanego wyj

ś

cia z oczekiwanym, które s

ą

 do

ść

 nudnymi zaj

ę

ciami umo

Ŝ

liwia im skupienie si

ę

 

na projektowaniu lepszych testów.

Na automatyzacji zyskuj

ą

 tak

Ŝ

e same testy. Poprawia si

ę

 ich spójno

ść

 i 

powtarzalno

ść

. Testy, które s

ą

 powtarzane automatycznie b

ę

d

ą

 powtarzane dokładnie tak samo 

(przynajmniej wej

ś

cie, gdy

Ŝ

 wyj

ś

cie mo

Ŝ

e si

ę

 ró

Ŝ

ni

ć

 w zale

Ŝ

no

ś

ci od np. czasu). To daje poziom 

regularno

ś

ci, który jest trudno uzyska

ć

 przez testowanie r

ę

czne. Te same testy mog

ą

 by

ć

 

wykonywane w ró

Ŝ

nych konfiguracjach sprz

ę

towych, na ró

Ŝ

nych systemach operacyjnych z 

wykorzystaniem ró

Ŝ

nych baz danych. To daje spójno

ść

 pomi

ę

dzy platformami dla produktów 

wieloplatformowych, która jest niemo

Ŝ

liwa do osi

ą

gni

ę

cia w przypadku r

ę

cznego testowania. 

Narzucenie dobrego re

Ŝ

imu automatyzacji testów mo

Ŝ

e zapewni

ć

 spójne standardy zarówno dla 

testowania jak i programowania. Przykładowo narz

ę

dzie mo

Ŝ

e sprawdzi

ć

Ŝ

e ten sam typ cechy 

został zaimplementowany w ten sam sposób we wszystkich aplikacjach.

background image

17

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (17) 

Zalety

• Testy regresyjne

• Wi

ę

cej testów cz

ęś

ciej

• Wykonanie testów trudnych do wykonania r

ę

cznie

• Lepsze u

Ŝ

ycie zasobów

• Spójno

ść

 i powtarzalno

ść

 testów

• Reu

Ŝ

ywalno

ść

testów

• Szybciej na rynek

• Zwi

ę

kszona pewno

ść

• Testowanie mo

Ŝ

e odbywa

ć

 si

ę

 w nocy

Dzi

ę

ki temu, 

Ŝ

e automatyczne testy mo

Ŝ

na wykonywa

ć

 szybciej czas potrzebny 

na testowanie mo

Ŝ

e zosta

ć

 skrócony, co oznacza, 

Ŝ

e produkt mo

Ŝ

e zosta

ć

 szybciej wypuszczony 

na rynek.

Testowanie mo

Ŝ

e tak

Ŝ

e odbywa

ć

 si

ę

 w nocy. Testy uruchamiane s

ą

 

gdy testerzy ko

ń

cz

ą

 prac

ę

. Nie trzeba czeka

ć

 na wyniki. B

ę

d

ą

 dost

ę

pne 

nast

ę

pnego dnia rano.

background image

18

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (18) 

Ograniczenia automatyzacji

• „Zautomatyzowane testy znajduj

ą

 tylko 15% bł

ę

dów. 

R

ę

czne testowanie znajduje 85%.”

Bach, 1997

• Automatyzacja testów nie poprawia ich efektywno

ś

ci

„Automatyzacja chaosu daje tylko szybszy chaos”

• Automatyzacja testów mo

Ŝ

e ograniczy

ć

 wytwarzanie 

oprogramowania (wzgl

ę

dy ekonomiczne)

• Du

Ŝ

y koszt wytworzenia automatycznego testu

~2 – 10x (max 30x) wysiłek zwi

ą

zany z r

ę

cznym 

wykonywaniem testów

• Automatyczne testy nie maj

ą

 wyobra

ź

ni

Z automatyzacj

ą

 testowania wi

ąŜ

e si

ę

 wiele problemów i 

ogranicze

ń

. James Bach na podstawie swojego wieloletniego do

ś

wiadczenia 

podaje, 

Ŝ

e wi

ę

kszo

ść

 bł

ę

dów wykrywana jest podczas r

ę

cznego wykonywania 

testowania, bo a

Ŝ

 85% z nich. Tylko 15% bł

ę

dów znajdywanych jest przez 

automatyczne przypadki testowe. By móc zautomatyzowa

ć

 dany wariantu testu 

trzeba najpierw upewni

ć

 si

ę

Ŝ

e jest prawidłowy. Nie ma sensu tworzy

ć

 automatu 

dla niepoprawnych przypadków testowych. Testowanie wariantu testu polega 
najcz

ęś

ciej na wykonaniu go najpierw r

ę

cznie, a nast

ę

pnie przeanalizowaniu 

uzyskanych wyników. Dopiero tak sprawdzony wariant jest automatyzowany. 
Najwi

ę

ksza szansa na znalezienie bł

ę

du jest podczas pierwszego wykonania 

testu. Raz wykryty i poprawiony bł

ą

d na ogół nie powtarza si

ę

, za wyj

ą

tkiem 

sytuacji, w których testowany fragment programu podlega modyfikacjom. Wtedy 
istnieje szansa na wprowadzenie bł

ę

du podczas zmian w kodzie aplikacji.

Testy poddawane automatyzacji musz

ą

 by

ć

 dobrej jako

ś

ci. 

Narz

ę

dzie wykonuj

ą

ce testy mo

Ŝ

e tylko okre

ś

li

ć

 czy oczekiwane wyj

ś

cie pasuje 

do faktycznie zaobserwowanego. Nie poda czy wariant testu jest prawidłowy. 
Je

ś

li przypadek testowy jest mało efektywny to prawdopodobie

ń

stwo znalezienia 

ę

du dla takiego wariantu po jego automatyzacji b

ę

dzie równie

Ŝ

 niewielkie. 

Automat mo

Ŝ

e najwy

Ŝ

ej zwi

ę

kszy

ć

 wydajno

ść

 takiego testu tzn. zmniejszy

ć

 koszt 

i czas potrzebny do wykonania wariantu testu.

background image

19

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (19) 

Ograniczenia automatyzacji

• „Zautomatyzowane testy znajduj

ą

 tylko 15% bł

ę

dów. 

R

ę

czne testowanie znajduje 85%.”

Bach, 1997

• Automatyzacja testów nie poprawia ich efektywno

ś

ci

„Automatyzacja chaosu daje tylko szybszy chaos”

• Automatyzacja testów mo

Ŝ

e ograniczy

ć

 wytwarzanie 

oprogramowania (wzgl

ę

dy ekonomiczne)

• Du

Ŝ

y koszt wytworzenia automatycznego testu

~2 – 10x (max 30x) wysiłek zwi

ą

zany z r

ę

cznym 

wykonywaniem testów

• Automatyczne testy nie maj

ą

 wyobra

ź

ni

Zautomatyzowane testy s

ą

 mniej podatne na zmiany ni

Ŝ

 testy 

wykonywane r

ę

cznie. Wymagaj

ą

 wi

ę

cej wysiłku na etapie wytworzenia oraz w ich 

ź

niejszej piel

ę

gnacji. Modyfikacje programu wymagaj

ą

 tak

Ŝ

e dostosowania 

zautomatyzowanych testów. Mog

ą

 one nie by

ć

 wprowadzone ze wzgl

ę

dów 

ekonomicznych. Mo

Ŝ

e okaza

ć

 si

ę

Ŝ

e zmiana wariantów testów jest nieopłacalna 

je

ś

li nie pomy

ś

lano o ich piel

ę

gnacji podczas ich automatyzacji.

Koszt wytworzenia automatycznych testów te

Ŝ

 nie jest bez 

znaczenia. 

Ś

rednio wynosi on 2 do 10 razy wysiłku zwi

ą

zanego z r

ę

cznym 

wykonywaniem testów. W niektórych przypadkach koszt ten nawet wzrastał do 
30 razy. W zwi

ą

zku z tym wa

Ŝ

ne jest by automatyzowa

ć

 tylko te testy, dla których 

ma to ekonomiczny sens, czyli takie, które b

ę

d

ą

 wiele razy uruchamiane. Dzi

ę

ki 

temu koszt zwi

ą

zany z ich wytworzeniem si

ę

 zwróci.

Automatyczne testy to tylko program posłusznie wykonuj

ą

cy 

instrukcje. Niestety tylko tester jest w stanie stwierdzi

ć

, czy wykonywany 

przypadek testowy zawiera bł

ą

d. Tak

Ŝ

e tylko on jest w stanie poprawi

ć

 wariant 

testu by sprawdzał dodatkowe rzeczy je

ś

li uzna, 

Ŝ

e ów wariant nie jest 

dostatecznie szczegółowy.

background image

20

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (20) 

Kiedy testowa

ć

 r

ę

cznie?

• Testy s

ą

 wykonywane rzadko

• Testowany program cz

ę

sto ulega zmianom

• Wyniki s

ą

 łatwe do sprawdzenia przez człowieka 

i trudne do zautomatyzowania (np. audio, 
schemat kolorów, układ kontrolek na formatce)

• Test wymaga fizycznej interakcji ze strony 

u

Ŝ

ytkownika

Nie jest mo

Ŝ

liwe ani tak

Ŝ

e oczekiwane by automatyzowa

ć

 wszystkie

czynno

ś

ci zwi

ą

zane z testowaniem jak równie

Ŝ

 same testy. Zawsze znajd

ą

 si

ę

 

takie przypadki, które łatwiej b

ę

dzie wykona

ć

 r

ę

cznie lub te

Ŝ

 takie, których 

automatyzacja jest nieekonomiczna. Testy których najcz

ęś

ciej nie warto 

automatyzowa

ć

 to testy wykonywane rzadko. Je

ś

li test jest wykonywany tylko 

kilka razy to koszt zwi

ą

zany z jego automatyzacj

ą

 mo

Ŝ

e nie zwróci

ć

 si

ę

. To 

wła

ś

nie wielokrotne uruchamianie takiego testu amortyzuje koszt zwi

ą

zany z jego 

automatyzacj

ą

.

W przypadku gdy testowany program cz

ę

sto ulega zmianie mo

Ŝ

okaza

ć

 si

ę

Ŝ

e nie warto automatyzowa

ć

 testów sprawdzaj

ą

cych te jego 

fragmenty, które cz

ę

sto podlegaj

ą

 modyfikacji. Wraz ze zmianami w programie 

wi

ąŜ

e si

ę

 potrzeba dostosowywania testów co zwi

ę

ksza koszt zwi

ą

zany z ich 

utrzymaniem i mo

Ŝ

e okaza

ć

 si

ę

 nieopłacalne.

Równie

Ŝ

 nie warto automatyzowa

ć

 testów, które łatwe s

ą

 do 

zweryfikowania przez człowieka, ale trudne lub niemo

Ŝ

liwe dla automatu. 

Przykładowo sprawdzenie schematu kolorów, czy te

Ŝ

 układu (ang. layout) 

kontrolek w interfejsie u

Ŝ

ytkownika, albo okre

ś

lenie czy prawidłowy d

ź

wi

ę

wydobywa si

ę

 w momencie wywołania okre

ś

lonego zdarzenia w systemie s

ą

 

do

ść

 trudne do sprawdzenia przez program, a nie sprawiaj

ą

 wi

ę

kszych 

problemów testerowi.

Je

ś

li testy wymagaj

ą

 fizycznej interakcji ze strony u

Ŝ

ytkownika 

systemu to tak

Ŝ

e powinny by

ć

 wykonywane r

ę

cznie. Przykładem takiego testu, 

jest sytuacja kiedy by wykona

ć

 test nale

Ŝ

y przeci

ą

gn

ąć

 kart

ę

 przez czytnik kart.

background image

21

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (21) 

Czynno

ś

ci w ramach testowania

1. Identyfikacja warunków testu

2. Zaprojektowanie przypadków testowych

3. Zbudowanie przypadków testowych

4. Uruchomienie przypadków testowych

5. Porównanie uzyskanych wyników

z oczekiwanymi

Na tym slajdzie przedstawiono czynno

ś

ci wykonywane w ramach 

testowania. To s

ą

 czynno

ś

ci, dla których chciałbym omówi

ć

 mo

Ŝ

liwo

ść

 

przeprowadzenia automatyzacji.

background image

22

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (22) 

Czynno

ś

ci w ramach testowania

1. Identyfikacja warunków testu

element lub zdarzenie, które mo

Ŝ

by

ć

 zweryfikowane przez testy

Warunek 1: przelew < 0

Warunek 2: u

Ŝ

ytkownik posiada konto

Pierwsz

ą

 czynno

ś

ci

ą

 jak

ą

 nale

Ŝ

y wykona

ć

 to okre

ś

lenie co b

ę

dzie 

testowane. Przez warunek testu rozumie si

ę

 element lub zdarzenie, które mo

Ŝ

by

ć

 zweryfikowane przez testy. Jest wiele ró

Ŝ

nych warunków testu dla systemu, 

jak równie

Ŝ

 dla ró

Ŝ

nych rodzajów testowania, takich jak testowanie 

wydajno

ś

ciowe, czy te

Ŝ

 testy bezpiecze

ń

stwa itd.

Warunki testu to opisy okoliczno

ś

ci, które mo

Ŝ

na by sprawdzi

ć

Przykładowo: sprawdzenie zachowania si

ę

 systemu gdy wykonywany b

ę

dzie 

przelew na konto o warto

ś

ci ujemnej.

Istnieje wiele ró

Ŝ

nych technik testowania, które ułatwiaj

ą

 testerom 

identyfikacj

ę

 warunków testu w sposób usystematyzowany (przykładowo analiza 

warto

ś

ci granicznych).

background image

23

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (23) 

Czynno

ś

ci w ramach testowania

1.

Identyfikacja warunków testu

2.

Zaprojektowanie przypadków testowych

Stan systemu:

•Zalogowany do systemu

•Baza danych posiada dane testowe

Komunikat pytaj

ą

cy o 

potwierdzenie
Informacja o bł

ę

dnych 

danych

Oczekiwane wyj

ś

cie

Wprowad

ź

 

dane przelewu

Potwierd

ź

Wej

ś

cie

kwota = -1
nr konta = xxx
kwota = -1
nr konta = xxx

1

2

Warunki testu

Krok

Zaprojektowanie przypadków testowych okre

ś

la w jaki sposób 

warunki testu b

ę

d

ą

 sprawdzane. Wariant testu składa si

ę

 z szeregu testów 

przeprowadzanych w sekwencji i powi

ą

zanych z przedmiotem testu, czyli 

powodem/celem testu. Wynikiem projektowania testu jest zbiór testów 
składaj

ą

cych si

ę

 z warto

ś

ci wej

ś

ciowych, oczekiwanego wyj

ś

cia oraz stanu 

systemu koniecznego do przeprowadzenia testu. Oczekiwane wyj

ś

cie zawiera 

informacje, na temat tego co powinno by

ć

 utworzone, czego nie powinno by

ć

 w 

wyniku wykonania testu itd. Zbiór oczekiwanego wyj

ś

cia mo

Ŝ

e by

ć

 całkiem spory.

background image

24

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (24) 

Czynno

ś

ci w ramach testowania

1. Identyfikacja warunków testu

2. Zaprojektowanie przypadków testowych

3. Zbudowanie przypadków testowych

Przygotowanie procedur testowych

Procedura testowa dla testu wprowadzenia ujemnej warto

ś

ci kwoty przelewu:

1. Wci

ś

nij przycisk Tab.

2. Wprowad

ź

 -1.

3. Wci

ś

nij przycisk Tab.

4. Wprowad

ź

 nr konta = xxx

5. Wci

ś

nij Tab.

6. Po pod

ś

wietleniu si

ę

 przycisku Submit wci

ś

nij ENTER.

Zbudowanie przypadków testowych polega na utworzeniu procedur 

testowych, które opisuj

ą

 elementarne kroki konieczne do wykonania 

pojedynczego testu w ramach przypadku testowego. Przykładowo dla testu 
zwi

ą

zanego z wprowadzeniem ujemnej warto

ś

ci kwoty przelewu procedura 

testowa wygl

ą

da nast

ę

puj

ą

co:

1. Wci

ś

nij przycisk Tab.

2. Wprowad

ź

 -1.

3. Wci

ś

nij przycisk Tab.

4. Wprowad

ź

 nr konta = xxx

5. Wci

ś

nij Tab.

6. Po pod

ś

wietleniu si

ę

 przycisku Submit wci

ś

nij ENTER.

Je

ś

li kroki te wykonywane s

ą

 automatycznie to mówi si

ę

 o skryptach testowych.

background image

25

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (25) 

Czynno

ś

ci w ramach testowania

1. Identyfikacja warunków testu

2. Zaprojektowanie przypadków testowych

3. Zbudowanie przypadków testowych

Przygotowanie procedur testowych

Przygotowanie danych wej

ś

ciowych

Przygotowanie oczekiwanego wyj

ś

cia

4. Uruchomienie przypadków testowych

5. Porównanie uzyskanych wyników

z oczekiwanymi

Dane wej

ś

ciowe musz

ą

 tak

Ŝ

e zosta

ć

 zbudowane by móc wykona

ć

 

testy. Je

ś

li przykładowo test wykorzystuje jakie

ś

 dane z pliku lub bazy danych, 

plik ten lub baza danych musi by

ć

 zainicjowana by zawierała informacje 

potrzebne do wykonania testu.

background image

26

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (26) 

Czynno

ś

ci w ramach testowania

1. Identyfikacja warunków testu

2. Zaprojektowanie przypadków testowych

3. Zbudowanie przypadków testowych

Przygotowanie procedur testowych

Przygotowanie danych wej

ś

ciowych

Przygotowanie oczekiwanego wyj

ś

cia

4. Uruchomienie przypadków testowych

5. Porównanie uzyskanych wyników

z oczekiwanymi

Procedura testowa dla testu wprowadzenia ujemnej warto

ś

ci kwoty przelewu:


7. Sprawd

ź

 czy system pyta o potwierdzenie wykonania operacji. Je

ś

li nie to 

oznacza to bł

ą

d systemu. Wtedy wykonaj ...

Oczekiwane wyj

ś

cie mo

Ŝ

e by

ć

 zorganizowane w pliki by umo

Ŝ

liwi

ć

 

ich pó

ź

niejsze porównanie w sposób automatyczny np. przy u

Ŝ

yciu narz

ę

dzi 

znajduj

ą

cych ró

Ŝ

nice w plikach. Dla r

ę

cznego testowania oczekiwanym wyj

ś

ciem 

mog

ą

 by

ć

 to opisy zawarte w procedurach testowych. Przygotowywanie 

oczekiwanego wyj

ś

cia dla zautomatyzowanego porównywania mo

Ŝ

e by

ć

o wiele 

bardziej skomplikowane ni

Ŝ

 wariant dla r

ę

cznego testowania w postaci notatek.

background image

27

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (27) 

Czynno

ś

ci w ramach testowania

1. Identyfikacja warunków testu

2. Zaprojektowanie przypadków testowych

3. Zbudowanie przypadków testowych

4. Uruchomienie przypadków testowych

5. Porównanie uzyskanych wyników

z oczekiwanymi

Po zbudowaniu przypadku testowego w postaci procedur testowych 

dla r

ę

cznego testowania lub te

Ŝ

 skryptów w przypadku zautomatyzowanej wersji 

przeprowadzane jest jego wykonanie. Dla wariantu przeprowadzanego r

ę

cznie 

polega to na wykonaniu krok po kroku procedury testowej przez testera. Klika on 
na wybranych ikonach, czy te

Ŝ

 wprowadza dane zgodnie z opisem procedury 

testowej. W przypadku zautomatyzowanego podej

ś

cia skrypty wykonywane s

ą

 

przez narz

ę

dzie słu

Ŝą

ce do testowania. Wykonanie testu mo

Ŝ

e odby

ć

 si

ę

 tylko w 

przypadku gdy testowana aplikacja istnieje. Wcze

ś

niejsze czynno

ś

ci zwi

ą

zane z 

testowaniem mo

Ŝ

na wykona

ć

 zanim zaimplementowany jest testowany system.

background image

28

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (28) 

Czynno

ś

ci w ramach testowania

1. Identyfikacja warunków testu

2. Zaprojektowanie przypadków testowych

3. Zbudowanie przypadków testowych

4. Uruchomienie przypadków testowych

5. Porównanie uzyskanych wyników

z oczekiwanymi

Ostatni

ą

 czynno

ś

ci

ą

 jest porównanie uzyskanego wyj

ś

cia z 

oczekiwanym. Mo

Ŝ

e si

ę

 to odbywa

ć

 w sposób nieformalny przez testera, który 

sprawdza czy to co uzyskał zgadza si

ę

 z tym czego oczekiwał, lub te

Ŝ

 w sposób 

rygorystyczny przez sprawdzenie zaobserwowanego wyj

ś

cia z opisem zawartym 

w procedurze testowej. Porównanie cz

ęś

ci wyników mo

Ŝ

e odbywa

ć

 si

ę

 w trakcie 

wykonywania testów jak np. sprawdzenie czy pojawił si

ę

 komunikat prosz

ą

cy o 

potwierdzenie podczas wykonywania przypadku testowego sprawdzaj

ą

cego czy 

mo

Ŝ

na wykona

ć

 przelew o warto

ś

ci ujemnej. W innym przypadku gdy np. chcemy 

sprawdzi

ć

 czy zawarto

ść

 bazy danych uległa zmianie mo

Ŝ

e okaza

ć

 si

ę

 konieczne 

zaczekanie do ko

ń

ca wykonywania wariantu testu.

W najprostszym przypadku porównanie polega na sprawdzeniu czy 

uzyskane wyj

ś

cie jest takie same jak oczekiwane. Je

ś

li s

ą

 identyczne to 

przypadek testowy nie wykrył bł

ę

du. Jest to oczywi

ś

cie najprostszy wariant. 

Faktyczne dane mog

ą

 nie by

ć

 identyczne, ale podobne do tych oczekiwanych. 

Mo

Ŝ

na powiedzie

ć

Ŝ

e porównanie polega na okre

ś

leniu czy faktyczne wyj

ś

cie 

pasuje (ang. match) do oczekiwanego wyj

ś

cia. Narz

ę

dzia automatyzuj

ą

ce t

ę

 

czynno

ść

 dokonuj

ą

 tylko porównania a nie weryfikacji. W zwi

ą

zku z tym s

ą

 w 

stanie wykry

ć

 tylko ró

Ŝ

nice. Zadaniem testera jest weryfikacja, czy w przypadku 

gdy wykryto niezgodno

ść

 wyj

ść

 jest to akceptowalne, czy te

Ŝ

 powoduje, 

Ŝ

e test 

nie przeszedł.

background image

29

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (29) 

Czynno

ś

ci w ramach testowania

1. Identyfikacja warunków testu

2. Zaprojektowanie przypadków testowych

3. Zbudowanie przypadków testowych

4. Uruchomienie przypadków testowych

5. Porównanie uzyskanych wyników

z oczekiwanymi

Pierwsze dwie aktywno

ś

ci jakimi s

ą

: identyfikacja warunków testu, 

oraz zaprojektowanie przypadków testowych, wymagaj

ą

 pracy twórczej. To od 

nich zale

Ŝ

y jako

ść

 testów. Niestety trudno poddaj

ą

 si

ę

 automatyzacji. Ponadto na 

ogół wykonywane s

ą

 tylko raz na pocz

ą

tku nie uwzgl

ę

dniaj

ą

c oczywi

ś

cie 

przypadków, w których popełniono bł

ą

d na etapie projektowania testów. 

Natomiast uruchomienie przypadków testowych oraz porównanie oczekiwanego 
wyj

ś

cia z faktycznym to typowo odtwórcze czynno

ś

ci, które wymagaj

ą

ce sporo 

wysiłku. Powtarzane s

ą

 one wiele razy w przeciwie

ń

stwie do projektowania, które 

wykonywane jest tylko raz na pocz

ą

tku.

background image

30

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (30) 

Kandydaci do automatyzacji

Czynno

ś

ci w ramach testowania

1. Identyfikacja warunków testu

2. Zaprojektowanie przypadków testowych

3. Zbudowanie przypadków testowych

4. Uruchomienie przypadków testowych

5. Porównanie uzyskanych wyników

z oczekiwanymi

W zwi

ą

zku z tym ostatnie dwie czynno

ś

ci idealnie nadaj

ą

 si

ę

 do 

automatyzacji. Na nast

ę

pnych slajdach zostan

ą

 omówione krótko sposoby 

automatyzacji ka

Ŝ

dej z nich.

background image

31

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (31) 

Automatyzacja projektowania wariantów testu

• Na ogół s

ą

 to generatory danych wej

ś

ciowych

• Generuj

ą

 du

Ŝą

 liczb

ę

 testów

• Nie zidentyfikuj

ą

 brakuj

ą

cych wymaga

ń

Wspomaganie automatyzacji projektowania przypadków testowych 

opiera si

ę

 na narz

ę

dziach, które najcz

ęś

ciej automatycznie generuj

ą

 tylko dane 

wej

ś

ciowe do testów. Nawet w przypadku narz

ę

dzi, które w stanie s

ą

 poda

ć

 

tak

Ŝ

e oczekiwane wyj

ś

cia nie mo

Ŝ

na oczekiwa

ć

 cudownych wyników. Nie 

zast

ą

pi

ą

 one czynno

ś

ci twórczych zwi

ą

zanych z projektowaniem przypadków 

testowych, do których najlepiej nadaje si

ę

 tester. Najwi

ę

kszym problemem 

zwi

ą

zanym z wykorzystaniem tych narz

ę

dzi to fakt, 

Ŝ

e generuj

ą

 du

Ŝą

 liczb

ę

 

testów. Nie potrafi

ą

 rozró

Ŝ

ni

ć

, które z nich s

ą

 wa

Ŝ

ne, co cz

ę

sto skutkuje 

wytworzeniem du

Ŝ

ej liczby mało istotnych testów. Cz

ęść

 z tych narz

ę

dzi ma 

wbudowane algorytmy do minimalizacji ich liczby według kryteriów zadanych 
przez testera, co mimo wszystko w efekcie daje nadal zbyt wiele testów. W 
zwi

ą

zku z tym nale

Ŝ

y korzysta

ć

 z rozwag

ą

 z tego typu rozwi

ą

za

ń

. Kolejn

ą

 

powa

Ŝ

n

ą

 wad

ą

 tych narz

ę

dzi jest fakt, 

Ŝ

e nie wykryj

ą

 brakuj

ą

cych aspektów lub 

wymaga

ń

, ani te

Ŝ

 ich złej specyfikacji. To domena testerów, którzy posiadaj

ą

 

wiedz

ę

 dziedzinow

ą

 i potrafi

ą

 okre

ś

li

ć

 kiedy dana powinno

ść

 jest nie 

wyspecyfikowana lub 

ź

le zdefiniowana.

Narz

ę

dzia te generuj

ą

 dane wej

ś

ciowe na podstawie trzech 

artefaktów: kodu aplikacji, na podstawie interfejsu u

Ŝ

ytkownika, oraz 

wykorzystuj

ą

c specyfikacj

ę

 systemu.

background image

32

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (32) 

Automaty oparte na kodzie aplikacji

• Generuje dane wej

ś

ciowe

• Nie wygeneruje oczekiwanego wyj

ś

cia

• Nie zidentyfikuje brakuj

ą

cych wymaga

ń

if (a > 0) ...

else ...

Wygenerowane dane 

wej

ś

ciowe dla a:

0, 1, 1000, -2

Generowanie danych testowych na podstawie kodu aplikacji oparte 

jest na analizie struktury kodu programu. Narz

ę

dzia znajduj

ą

 instrukcje 

warunkowe i staraj

ą

 si

ę

 okre

ś

li

ć

 dla jakich wej

ść

 poszczególne gał

ę

zie s

ą

 

wykonywane.

To podej

ś

cie jest niekompletne gdy

Ŝ

 w ten sposób generowane s

ą

 

tylko dane wej

ś

ciowe, a test potrzebuje jeszcze oczekiwanego wyj

ś

cia. Tego nie 

uzyska si

ę

 na podstawie analizy kodu aplikacji. T

ą

 informacj

ę

 mo

Ŝ

na znale

źć

 w 

specyfikacji wymaga

ń

. Nie uda si

ę

 tak

Ŝ

e wykry

ć

 tym sposobem złych lub 

brakuj

ą

cych wymaga

ń

.

background image

33

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (33) 

Automaty oparte na interfejsie u

Ŝ

ytkownika

• Generuje dane wej

ś

ciowe

• Oczekiwane wyj

ś

cie jest cz

ęś

ciowo generowane

•Sprawd

ź

 czy dla ka

Ŝ

dej kontrolki istnieje funkcja pomocy

•Sprawd

ź

 czy mo

Ŝ

na edytowa

ć

 pola tylko do odczytu

•Sprawd

Ŝ

wszystkie linki na stronie www

Kolejnym podej

ś

ciem jest generowanie testów na podstawie 

interfejsu u

Ŝ

ytkownika. Generatory potrafi

ą

 analizowa

ć

 interfejs okienkowy 

jak równie

Ŝ

 kod html je

ś

li testowana aplikacja oparta jest na stronach 

www. Narz

ę

dzie takie identyfikuje kontrolki i nast

ę

pnie sprawdza czy dla 

ka

Ŝ

dej z nich istnieje funkcja pomocy. Innym przykładem testu jaki mo

Ŝ

by

ć

 wygenerowany jest sprawdzenie czy mo

Ŝ

na edytowa

ć

 pola 

przeznaczone tylko do odczytu. Dla stron www narz

ę

dzie sprawdza 

wszystkie hiperł

ą

cza wyst

ę

puj

ą

ce na stronie. W ten sposób jest w stanie 

zweryfikowa

ć

 czy który

ś

 z nich prowadzi do nieistniej

ą

cej strony. Nie jest 

oczywi

ś

cie w stanie sprawdzi

ć

 czy prowadzi do dobrej strony.

Przy pomocy tego podej

ś

cia mo

Ŝ

na wygenerowa

ć

 dane wej

ś

ciowe i 

cz

ęś

ciowo oczekiwane wyj

ś

cie w do

ść

 ogólnym i negatywnym sensie. Dla 

wcze

ś

niejszego przykładu hiperł

ą

cz na stronie mo

Ŝ

liwe jest 

wygenerowanie sprawdzenia czy hiperł

ą

cze istnieje (co daje prawidłowy 

wynik) oraz czy prowadzi do nieistniej

ą

cej strony (nieprawidłowy wynik). 

Sama informacja, 

Ŝ

e test przechodzi nie gwarantuje, 

Ŝ

e podane hiperł

ą

cze 

jest prawidłowe, natomiast je

ś

li test wykryje martwe ł

ą

cze to jest to 

informacja o bł

ę

dzie.

background image

34

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (34) 

Automaty oparte na specyfikacji

• Specyfikacja musi by

ć

 w formie mo

Ŝ

liwej do 

analizy przez automat

• Generuje dane wej

ś

ciowe

• Czasem generuje oczekiwane wyj

ś

cie

/**

* @pre arg2 != 0

*/

void show(int arg1, double arg2);

Tworzenie testów w oparciu o specyfikacj

ę

 daje mo

Ŝ

liwo

ść

 

wygenerowania zarówno danych wej

ś

ciowych jak równie

Ŝ

 tak

Ŝ

e oczekiwanego 

wyj

ś

cia. Warunkiem jest odpowiednia specyfikacja opisuj

ą

ca działanie systemu. 

Musi by

ć

 stworzona w formie mo

Ŝ

liwej do automatycznej analizy przez generator. 

Najcz

ęś

ciej jednak narz

ę

dzia potrafi

ą

 tylko generowa

ć

 dane wej

ś

ciowe, rzadziej 

zdarza si

ę

 by mo

Ŝ

liwe było wygenerowanie oczekiwanego wyj

ś

cia. W powy

Ŝ

szym 

przykładzie narz

ę

dzie na podstawie specyfikacji zawartej w kodzie programu jest 

w stanie wygenerowa

ć

 wariant testu sprawdzaj

ą

cy zachowanie aplikacji dla 

przypadku kiedy warto

ść

 argumentu wyniesie 0. Oczywi

ś

cie specyfikacja nie 

musi by

ć

 zapisywana tylko i wył

ą

cznie w kodzie programu. Mo

Ŝ

e to by

ć

 

dokument tekstowy, który zawiera tak

Ŝ

e oczekiwane wyj

ś

cie.

background image

35

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (35) 

Automatyzacja porównywania wyników

• Przewid

ź

 oczekiwane wyj

ś

cie

• Reference testing

– Oczekiwanym wyj

ś

ciem jest wyj

ś

cie zaobserwowane 

przy pierwszym wykonaniu testu

• Co powinno by

ć

 porównywane?

• Zautomatyzowane porównanie mo

Ŝ

e ukry

ć

 bł

ą

(je

ś

li jest bł

ą

d w oczekiwanym wyj

ś

ciu)

Dla ka

Ŝ

dego testu okre

ś

lane jest oczekiwane wyj

ś

cie. Najlepszym 

rozwi

ą

zaniem jest sprecyzowanie zawczasu jak ma si

ę

 zachowywa

ć

 system. 

Je

ś

li nie jest ono wyspecyfikowane zanim przypadek testowy zostanie wykonany, 

wtedy w celu sprawdzenia czy program działa prawidłowo faktyczne wyj

ś

cie 

uzyskane z pierwszego wykonania wariantu testu staje si

ę

 oczekiwanym 

wyj

ś

ciem, oczywi

ś

cie po uprzednim dokładnym przeanalizowaniu go przez 

testera. To wymaga wiedzy dziedzinowej od osoby weryfikuj

ą

cej faktyczne 

wyj

ś

cie. Podej

ś

cie, w którym wynik pierwszego wykonania testu jest uznawany 

za oczekiwane wyj

ś

cie nazywa si

ę

 testowaniem referencyjnym (ang. reference 

testing).

Problemem podczas specyfikacji oczekiwanego wyj

ś

cia jest 

zdecydowanie co ma by

ć

 ze sob

ą

 porównane. Je

ś

li wybranych zostanie niewiele 

elementów to mo

Ŝ

e okaza

ć

 si

ę

Ŝ

e wybrano zbyt ogólne oczekiwane wyj

ś

cie. 

Spowoduje, to 

Ŝ

e bł

ą

d mo

Ŝ

e zosta

ć

 nie wykryty, poniewa

Ŝ

 porównywane dane 

wyj

ś

ciowe nie b

ę

d

ą

 zawierały informacji o bł

ę

dnym zachowaniu. Zbyt 

szczegółowe wyj

ś

cie z kolei spowoduje, 

Ŝ

e test automatyczny b

ę

dzie trudniejszy 

do zmodyfikowania oraz bardziej skomplikowany co zwi

ę

ksza ryzyko wyst

ą

pienia 

ę

du w takim wariancie.

background image

36

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (36) 

Proste porównania

Oczekiwane wyj

ś

cie = faktyczne wyj

ś

cie

Faktura nr F1234/2003  

Data: 20-CZE-2003

---------

Lp. | Symbol | Nazwa | Cena |

-----------------------------

1   | P11    | Pióro | 12.50

2   | K32    | Kreda |  3.20

-----------------------------

Razem:  15.70

Płatne do: 30-CZE-2003

Faktura nr F1234/2005

Data: 10-WRZ-2005

---------

Lp. | Symbol | Nazwa | Cena |

-----------------------------

1   | P11    | Pióro | 12.50

-----------------------------

Razem:  12.50

Płatne do: 30-WRZ-2005

Najprostsz

ą

 metod

ą

 porówna

ń

 dost

ę

pn

ą

 w narz

ę

dziach 

automatyzuj

ą

cych wykonanie testów jest tzw. proste porównanie. Dzi

ę

ki tej 

metodzie faktyczne wyj

ś

cie uznawane jest za pasuj

ą

ce do oczekiwanego wyj

ś

cia 

tylko w przypadku je

ś

li s

ą

 one identyczne. Nie mo

Ŝ

e by

ć

 ró

Ŝ

nic mi

ę

dzy tym co 

zaobserwowano w wyniku wykonania programu, a tym jak program powinien si

ę

 

zachowywa

ć

. W przeciwnym przypadku zgłoszone zostan

ą

 ró

Ŝ

nice i test nie 

powiedzie si

ę

.

Je

ś

li wariant testu miałby sprawdzi

ć

 czy generowane przez program 

faktury maj

ą

 prawidłowy układ, nale

Ŝ

ałoby uprzednio przygotowa

ć

 jako 

oczekiwane wyj

ś

cie faktur

ę

 zawieraj

ą

c

ą

 te same dane, które b

ę

d

ą

 podane w 

ramach testu. W przeciwnym wypadku nawet je

ś

li program generuje faktury o 

prawidłowej budowie test nie powiedzie si

ę

 ze wzgl

ę

du na ró

Ŝ

nic

ę

w podanych 

danych.

Innym rozwi

ą

zaniem s

ą

 zło

Ŝ

one porównania polegaj

ą

ce na pomini

ę

ciu informacji 

szczegółowych dotycz

ą

cych niektórych pól faktury. Na rynku jest kilka narz

ę

dzi, które posiadaj

ą

 tak

ą

 

funkcjonalno

ść

. Podawane s

ą

 pola, które maj

ą

 by

ć

 pomini

ę

te, lub dla których ma by

ć

 wykonane 

sprawdzenie typu. Je

ś

li np. pole z dat

ą

 posiada nieprawidłowy format to zgłaszany jest bł

ą

d. Nie jest 

dokonywane sprawdzenie czy data jest identyczna z t

ą

 podan

ą

 w oczekiwanym wyj

ś

ciu. Brak zło

Ŝ

onych 

porówna

ń

 nie przekre

ś

la przydatno

ś

ci narz

ę

dzia. Mo

Ŝ

na w do

ść

 prosty sposób zaimplementowa

ć

 sobie tak

ą

 

funkcjonalno

ść

.

background image

37

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (37) 

Filtry do porówna

ń

Oczekiwane

Zaobserwowane

Przefiltrowane
oczekiwane

Przefiltrowane
zaobserwowane

Filtr

Filtr

Porównanie

RóŜnice

Praktycznie stosowanym rozwi

ą

zaniem dla problemu, w którym nie 

mo

Ŝ

na zastosowa

ć

 zło

Ŝ

onych porówna

ń

 (np. u

Ŝ

ywane narz

ę

dzie nie wspiera tej 

metody) jest zastosowanie filtrów. Zasada działania jest nast

ę

puj

ą

ca. Zanim 

zaobserwowane wyj

ś

cie jest porównane z oczekiwanym, oba wyj

ś

cia przechodz

ą

 

przez filtr, którego zadaniem jest  usuni

ę

cie niepotrzebnych informacji. Po ich 

odfiltrowaniu nast

ę

puje porównanie ze sob

ą

 wyj

ść

 przy pomocy metody prostego 

porównania.

Oczywi

ś

cie filtr mo

Ŝ

e si

ę

 okaza

ć

 tak naprawd

ę

 ła

ń

cuchem filtrów,

gdzie ka

Ŝ

dy z nich usuwa pojedyncz

ą

 informacj

ę

 z danych, które maj

ą

 by

ć

 

porównane. Oprócz usuwania filtr mo

Ŝ

e tak

Ŝ

e sortowa

ć

 dane lub dokonywa

ć

 ich 

zamiany na inn

ą

 posta

ć

.

background image

38

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (38) 

Filtry do porówna

ń

 – c.d.

Faktura nr F1234/2003  

Data: 20-CZE-2006

Lp. | Symbol | Nazwa | Cena |

-----------------------------

1

| K32    | Kreda |  3.20

-----------------------------

Razem:  3.20

Filtr

Faktura nr F1235/2003  

Data: 20-LIP-2006

Lp. | Symbol | Nazwa | Cena |

-----------------------------

1

| P11    | Pióro | 12.50

-----------------------------

Razem:  12.50

Porównanie

Faktura nr <nr>/<rok>

Data: <data>

Lp. | Symbol | Nazwa | Cena |

-----------------------------

<lp>|<symbol>|<nazwa>|<cena>

-----------------------------

Razem:  <cena>

Faktura nr <nr>/<rok>

Data: <data>

Lp. | Symbol | Nazwa | Cena |

-----------------------------

<lp>|<symbol>|<nazwa>|<cena>

-----------------------------

Razem:  <cena>

Brak róŜnic

Dla przykładu z faktur

ą

 zarówno oczekiwane wyj

ś

cie jak i 

zaobserwowane przepuszczono przez zestaw filtrów. Ka

Ŝ

dy z nich odfiltrowywał 

jeden rodzaj pola z dokumentów. Zastosowano filtry odpowiedzialne za wyci

ę

cie 

dat, numerów faktur, symboli, nazw oraz cen towarów. W wyniku uzyskano 
szablony faktur, które nast

ę

pnie porównano ze sob

ą

 przy pomocy prostego 

porównania.

background image

39

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (39) 

Filtry do porówna

ń

 – wady i zalety

Zalety:

• Reu

Ŝ

ywalno

ść

 filtrów

• Praca tylko nad wybranymi fragmentami wyj

ś

cia

• Łatwiejsza implementacja testu

• Mo

Ŝ

liwo

ść

 stosowania prostych porówna

ń

Wady:

• Wymaga umiej

ę

tno

ś

ci programistycznych

• Wymagana jest piel

ę

gnacja filtrów

• Konieczno

ść

 stworzenia dokumentacji

Niew

ą

tpliw

ą

 zalet

ą

 płyn

ą

c

ą

 ze stosowania filtrów jest mo

Ŝ

liwo

ść

 

pracy tylko nad wybranymi fragmentami wyj

ś

cia. Dla przykładu z faktur

ą

 

porównywany był tylko jej układ. Filtry usun

ę

ły szczegółowe informacje dot. nr 

faktury oraz zakupionych towarów.

Dobrze zaimplementowane filtry mo

Ŝ

na ponownie wykorzysta

ć

Usuwanie wybranych typów danych mo

Ŝ

e by

ć

 wielokrotnie u

Ŝ

yte przy okazji 

innych testów.

Poniewa

Ŝ

 ka

Ŝ

dy filtr wykonuje prost

ą

 czynno

ść

 implementacja ich 

nie powinna nastr

ę

czy

ć

 wi

ę

kszych problemów. Zło

Ŝ

one porównanie jest 

podzielone na wiele małych kroków, co tak

Ŝ

e ułatwia automatyzacj

ę

 testu gdy

Ŝ

 

mo

Ŝ

na zastosowa

ć

 proste porównanie.

Niestety stworzenie filtrów wymaga umiej

ę

tno

ś

ci 

programistycznych. Na szcz

ęś

cie raz stworzone filtry mo

Ŝ

na ponownie 

wykorzysta

ć

. Kolejn

ą

 wad

ą

 mo

Ŝ

e by

ć

 konieczno

ść

 ich modyfikacji w przypadku 

gdy format wyj

ś

cia ulegnie zmianie.

By filtry mogły by

ć

 ponownie wykorzystane musz

ą

 by

ć

 dobrze 

udokumentowane. Inaczej nie b

ę

dzie wiadomo w jaki sposób mo

Ŝ

na ich u

Ŝ

y

ć

.

background image

40

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (40) 

Automatyzacja pre- /post-processing

• Pre-processing

– Ustawia stan systemu niezb

ę

dny do wykonania 

wariantu testu

– Wiele wariantów ma ustawia ten sam stan

– Warto zautomatyzowa

ć

 i reu

Ŝ

ywa

ć

• Post-processing

– „Sprz

ą

ta” po wykonaniu wariantu testu

– Wiele wariantów „sprz

ą

ta” w ten sam sposób

– Warto zautomatyzowa

ć

 i reu

Ŝ

ywa

ć

Przed wykonaniem wariantu testu konieczne jest ustawienie 

systemu w odpowiedni stan wyspecyfikowany w przypadku testowym. Angielska 
nazwa tej fazy to pre-processing. Do przykładów zaliczy

ć

 mo

Ŝ

na dodawanie 

krotek do bazy danych, które s

ą

 niezb

ę

dne do wykonania testu, logowanie 

u

Ŝ

ytkownika w systemie itp. Przed wykonaniem ka

Ŝ

dego przypadku testowego 

uruchamiany jest pre-processing. Ró

Ŝ

ne warianty testów maj

ą

 ró

Ŝ

ne stany do 

ustawienia. Cz

ę

sto jednak zdarza si

ę

Ŝ

e wiele przypadków testowych wymaga 

ustawienia systemu w ten sam stan. Warto, wi

ę

c zautomatyzowa

ć

 t

ę

czynno

ść

, a 

powstały w ten sposób skrypt (czy te

Ŝ

 program) wykorzystywa

ć

 ponownie w 

ramach tych przypadków testowych, które wymagaj

ą

 ustawienia tego samego 

stanu systemu.

Po wykonaniu ka

Ŝ

dego wariantu testu wykonywany jest post-

processing, w ramach którego przywracany jest stan systemu sprzed wykonania 
testu. Mo

Ŝ

na powiedzie

ć

Ŝ

e wykonywane jest „sprz

ą

tanie” po testowaniu. 

Podobnie jak w przypadku pre-processing’u wiele wariantów testu sprz

ą

ta w 

podobny sposób czyni

ą

c t

ę

 czynno

ść

 wart

ą

 automatyzacji i do ponownego 

wykorzystania.

background image

41

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (41) 

Automatyzacja – wykonanie testów

Biblioteka JUnit

• Wykonuje testy 

automatycznie

• Pokazuje przebieg 

wykonania
testów

• Proste 

porównania

• Wsparcie dla pre-

/post-processing

• Integracja z IDE

Przedstawione wcze

ś

niej poj

ę

cia zwi

ą

zane z automatyzacj

ą

 

wykonywania testów skonfrontuj

ę

 teraz z popularn

ą

 bibliotek

ą

 JUnit 3.8.x słu

Ŝą

c

ą

 

do tworzenia automatycznych przypadków testowych. W chwili tworzenia 
wykładu dost

ę

pna jest testowa wersja 4.x tej biblioteki. Jednak ze wzgl

ę

du na 

brak dokumentacji do niej oraz fakt, 

Ŝ

e mo

Ŝ

na j

ą

 wykorzysta

ć

 tylko z wersj

ą

 

j

ę

zyka Java 1.5 nie b

ę

dzie omówiona w ramach tego wykładu. Zainteresowani 

mog

ą

 znale

źć

 dodatkowe informacje na stronie http://www.junit.org/ .

Rodzina bibliotek xUnit dost

ę

pna jest na wiele platform 

programistycznych i dla wielu ró

Ŝ

nych j

ę

zyków programowania. JUnit to wariant 

biblioteki przeznaczony dla j

ę

zyka Java. Z jego pomoc

ą

 uprzednio 

zaimplementowane testy mog

ą

 by

ć

 automatycznie uruchamiane. Biblioteka ta 

udost

ę

pnia tak

Ŝ

e szereg klas i metod ułatwiaj

ą

cych tworzenie automatycznych 

testów. Mi

ę

dzy innymi implementuje szereg asercji słu

Ŝą

cych do porówna

ń

 

oczekiwanego wyj

ś

cia z faktycznie zaobserwowanym. S

ą

 to tzw. proste 

porównania. Nale

Ŝ

y wi

ę

c pami

ę

ta

ć

 o konieczno

ś

ci stosowania filtrów w 

przypadkach kiedy chcemy usun

ąć

 pewne informacje z oczekiwanego i 

zaobserwowanego wyj

ś

cia. Ponadto biblioteka wspiera automatyczne

wykonywanie pre- oraz post-processing’u.

background image

42

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (42) 

Automatyzacja – wykonanie testów

Biblioteka JUnit

• Wykonuje testy 

automatycznie

• Pokazuje przebieg 

wykonania
testów

• Proste 

porównania

• Wsparcie dla pre-

/post-processing

• Integracja z IDE

Po wykonaniu testów u

Ŝ

ytkownikowi prezentowane s

ą

 wyniki ich 

wykonania w postaci listy wariantów, które si

ę

 nie powiodły wraz z dodatkow

ą

 

informacj

ą

 o przyczynach ich niepowodzenia. Biblioteka oferuje kilka ró

Ŝ

nych 

interfejsów u

Ŝ

ytkownika m. in. interfejs tekstowy jak równie

Ŝ

 interfejs graficzny 

zaprezentowany na powy

Ŝ

szym slajdzie. Oprócz tego w wielu popularnych 

ś

rodowiskach programistycznych do j

ę

zyka Java interfejs u

Ŝ

ytkownika biblioteki 

jest zintegrowany z interfejsem IDE co 

ś

wiadczy o du

Ŝ

ej popularno

ś

ci biblioteki 

JUnit.

background image

43

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (43) 

Architektura JUnit 3.x

Test

TestResult

TestCase

TestSuite

MoneyTestCase

TestFailure

TestListener

BaseTestRunner

junit.textui.

TestRunner

Biblioteka składa si

ę

 z wielu klas i interfejsów jednak omówione

zostan

ą

 tylko najwa

Ŝ

niejsze z nich. Klas

ą

 bazow

ą

 dla wszystkich przypadków 

testowych jest klasa TestCase. W zamy

ś

le autorów klasa miała reprezentowa

ć

 

pojedynczy przypadek testowy. Cho

ć

 jest to oczywi

ś

cie mo

Ŝ

liwe, w praktyce w 

ramach tej klasy umieszcza si

ę

 zbiór przypadków testowych, które maj

ą

 te same 

metody do pre- i post- processing. Klasa TestCase udost

ę

pnia metody słu

Ŝą

ce 

do prostych porówna

ń

, zwane asercjami, o których mowa b

ę

dzie w dalszej cz

ęś

ci 

wykładu.

Klasy reprezentuj

ą

ce przypadki testowe mog

ą

 by

ć

 grupowane w 

zbiory wariantów testowych reprezentowane przez klas

ę

 TestSuite. Dzi

ę

ki temu 

mo

Ŝ

liwe jest utworzenie hierarchii drzewiastej testów, co daje ich lepsze 

uporz

ą

dkowanie i łatwiejsze zarz

ą

dzanie nimi. Jak wida

ć

 na powy

Ŝ

szym 

diagramie zbiór przypadków testowych mo

Ŝ

e zawiera

ć

 tak

Ŝ

e inny zbiór wariantów 

testów.

Wyniki wykonania testów przechowywane s

ą

 w obiekcie klasy 

TestResult. Pojedynczy bł

ą

d reprezentowany jest przez obiekt klasy TestFailure

Istnieje wiele dodatków do biblioteki JUnit umo

Ŝ

liwiaj

ą

cych prezentowanie 

wyników testów w wielu ró

Ŝ

nych formatach m. in. pdf, html. Z tej mo

Ŝ

liwo

ś

ci 

korzystaj

ą

 równie

Ŝ

 

ś

rodowiska programistyczne (IDE) dopisuj

ą

c własne 

rozszerzenia integruj

ą

ce bibliotek

ę

 ze swoimi interfejsami.

background image

44

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (44) 

Architektura JUnit 3.x

Test

TestResult

TestCase

TestSuite

MoneyTestCase

TestFailure

TestListener

BaseTestRunner

junit.textui.

TestRunner

Kolejnym wa

Ŝ

nym komponentem tej biblioteki jest obiekt klasy 

TestRunner. Jego zadaniem jest wykonanie przypadków testowych. Biblioteka 
udost

ę

pnia wiele klas pochodnych TestRunner. Umo

Ŝ

liwiaj

ą

 one korzystanie z 

biblioteki w trybie tekstowym jak równie

Ŝ

 i graficznym. Nie trzeba chyba mówi

ć

Ŝ

ś

rodowiska programistyczne udost

ę

pniaj

ą

 swoje własne rozszerzenia, które 

integruj

ą

 JUnit z IDE.

background image

45

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (45) 

TestCase – idea działania

...

protected void setUp()

public void testXXX()

protected void tearDown()

protected void setUp()

public void testYYY()

protected void tearDown()

Wariant testu ma pewn

ą

 struktur

ę

. Pojedynczy przypadek testowy 

reprezentowany jest przez klas

ę

 TestCase. W praktyce jednak obiekt tej klasy 

grupuje te warianty testów, dla których wykonywane s

ą

 te same metody pre- jak i 

post-processing. Pojedynczy przypadek testowy prezentowany jest przez metod

ę

 

rozpoczynaj

ą

c

ą

 si

ę

 od nazwy „test”. Metoda pre-processing powinna by

ć

 

zaimplementowana w metodzie setUp, a post-processing w metodzie tearDown.

Warianty testu wykonywane s

ą

 nast

ę

puj

ą

co. Najpierw uruchamiana 

jest metoda setUp. Nast

ę

pnie wykonywany jest jeden przypadek testowy przez 

uruchomienie metody rozpoczynaj

ą

cej si

ę

 od słowa „test”po czym sterowanie 

przechodzi do metody tearDown, która odpowiada za post-processing. Je

ś

li w 

klasie zaimplementowano wi

ę

cej ni

Ŝ

 jeden wariant testu (wyst

ę

puje wi

ę

cej metod 

publicznych rozpoczynaj

ą

cych si

ę

 od słowa „test”) to ponownie wykonywana jest 

metoda setUp, nast

ę

pnie kolejna metoda rozpoczynaj

ą

ca si

ę

 od słowa „test”, i

ponownie tearDown.

background image

46

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (46) 

Proste porównania w klasie TestCase

• void assertEquals([msg], oczekiwane, faktyczne)

• void assert[Not]Same([msg], oczekiwane, 

faktyczne)

• void assertTrue([msg], warunek)

• void assertFalse([msg], warunek)

• void assertNull([msg], obiekt)

• void assertNotNull([msg], obiekt)

• void fail([msg])

Klasa TestCase posiada wiele metod słu

Ŝ

acych do prostych 

porówna

ń

 zwanych asercjami. Dzi

ę

ki nim mo

Ŝ

na łatwo zweryfikowa

ć

 relacje 

mi

ę

dzy oczekiwanym wyj

ś

ciem a faktycznym. Asercje te s

ą

 metodami

polimorficznymi maj

ą

cymi postacie dla wielu typów danych w j

ę

zyku Java. Ka

Ŝ

da 

z asercji posiada wariant, dla którego istnieje mo

Ŝ

liwo

ść

 podania komunikatu 

wy

ś

wietlanego gdy wykryte zostan

ą

 ró

Ŝ

nice pomi

ę

dzy wyj

ś

ciem oczekiwanym a 

zaobserwowanym. Oczywi

ś

cie jest to parametr opcjonalny i mo

Ŝ

e by

ć

 pomini

ę

ty. 

Asercje składaj

ą

 si

ę

 z nast

ę

puj

ą

cych grup metod:

•assertEquals – sprawdza czy obiekty s

ą

 to

Ŝ

same (lub warto

ś

ci liczbowe s

ą

 

równe). W przypadku liczb zmiennoprzecinkowych wymagane jest jeszcze 
podanie przedziału, dla którego liczba uznawana jest za to

Ŝ

sam

ą

. Dla liczb 

porównanie odbywa si

ę

 z wykorzystaniem operatora ==, natomiast obiekty 

porównywane s

ą

 przez wywołanie metody equals.

•assertSame – sprawdza identyczno

ść

 obu parametrów, czyli dla ka

Ŝ

dego 

przypadku stosuje operator ==.

•assertNotSame – analogicznie co dla assertSame, z tym

Ŝ

e odwrotnie –

sprawdza czy podane obiekty to ró

Ŝ

ne instancje (wykorzystuje operator !=).

•assertTrue – bada prawdziwo

ść

 podanego warunku

•assertFalse – bada fałszywo

ść

 podanego warunku

•assertNull – sprawdza czy argument jest warto

ś

ci

ą

 null

•assertNotNull – weryfikuje czy argument jest obiektem ró

Ŝ

nym od null

•fail – powoduje bezwarunkowe zgłoszenie nieprawdziwo

ś

ci asercji.

background image

47

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (47) 

TestCase – przykład

class Pieniadze {

private int kwota;

public Pieniadze(int kwota) {

if (kwota < 0throw new Exception(„kwota < 0”);

this.kwota = kwota;

}

public boolean equals(Object obj) {

return ((Pieniadze) obj).kwota == kwota;

}

public Pieniadze dodaj(Pieniadze p) {

return new Pieniadze(kwota + p.kwota);

}

public Pieniadze odejmij(Pieniadze p) {

return new Pieniadze(kwota - p.kwota);

}

}

Na dwóch kolejnych slajdach przedstawiony zostanie przykład 

implementacji wariantów testuj

ą

cych klas

ę

 Pieniadze. Klasa ta reprezentuje 

kwot

ę

 pieni

ęŜ

n

ą

 i udost

ę

pnia dwie metody: dodawania i odejmowania obiektów 

klasy Pieni

ą

dze. Wynikiem ich wykonania s

ą

 obiekty klasy Pieni

ą

dze

Udost

ę

pniana jest równie

Ŝ

 metoda equals, która podaje czy dany obiekt jest 

to

Ŝ

samy obiektowi klasy Pieni

ą

dze. Obiekty uznawane s

ą

 za to

Ŝ

same je

ś

li 

reprezentuj

ą

 t

ą

 sam

ą

 kwot

ę

 pieni

ęŜ

n

ą

.

background image

48

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (48) 

TestCase – przykład

public class PieniadzeTest extends TestCase {

private Pieniadze pieniadze;

public PieniadzeTest(String nazwa) { super(nazwa); }

protected void setUp() throws Exception {

pieniadze = new Pieniadze(4);

}

protected tearDown() throws Exception {

pieniadze = null;

}

public void testDodaj() {

assertEquals(pieniadze.dodaj(8), new Pieniadze(12));

}

public void testOdejmij() {

assertEquals(pieniadze.odejmij(3), new Pieniadze(1));

}

}

Dla klasy Pieni

ą

dze przygotowano dwa warianty testów po jednym 

dla ka

Ŝ

dej z metod: testDodaj oraz testOdejmij. Metoda setUp przygotowuje 

obiekt do testów. Jak wida

ć

 przygotowanie to polega na utworzeniu instancji 

klasy. Metoda tearDown implementuje post-processing, czyli „sprz

ą

tanie” po 

testach. Jak wida

ć

 zwalniana jest pami

ęć

 przydzielona dla obiektu klasy 

Pieni

ą

dze, a dokładniej Garbage Collector dostaje informacj

ę

Ŝ

e obiekt klasy 

Pieni

ą

dze nie jest ju

Ŝ

 wykorzystywany i mo

Ŝ

na zwolni

ć

 pami

ęć

 przez niego 

zajmowan

ą

.

Metoda testDodaj implementuje wariant testu sprawdzaj

ą

cy 

działanie metody dodaj w klasie Pieni

ą

dze. Wykonywane jest proste porównanie 

polegaj

ą

ce na sprawdzeniu czy w wyniku dodawania dwóch kwot pieni

ęŜ

nych 4 

oraz 8 uzyska si

ę

 w wyniku obiekt klasy Pieni

ą

dze o warto

ś

ci 12.

Analogicznie zaimplementowany jest przypadek dla odejmowania –

metoda testOdejmij. Tutaj sprawdzane jest czy w wyniku odejmowania 4 od 3 
otrzyma si

ę

 obiekt klasy Pieniadze o warto

ś

ci 1.

background image

49

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (49) 

TestCase – przykład

protected void setUp()

public void testDodaj()

protected void tearDown()

protected void setUp()

public void testOdejmij()

protected void tearDown()

Wykonanie przez obiekt klasy TestRunner wariantów testów 

zaimplementowanych w klasie PieniadzeTest obrazuje powy

Ŝ

szy slajd. Najpierw 

wykonywana jest metoda setUp ustawiaj

ą

ca obiekt klasy Pieni

ą

dze na kwot

ę

 4. 

Nast

ę

pnie wykonywany jest pierwszy przypadek testowy zaimplementowany w 

metodzie testDodaj. Po wykonaniu przypadku testowego wykonywana jest 
metoda tearDown, która „sprz

ą

ta” po testach. Poniewa

Ŝ

 w klasie s

ą

 dwie metody 

„test” uruchamiana jest ponownie metoda setUp przygotowuj

ą

ca obiekt klasy 

Pieni

ą

dze dla drugiego wariantu testu. Wykonywany jest nast

ę

pnie przypadek

testowy przez wywołanie metody testOdejmij. Na koniec ponowne wywołanie 
metody tearDown „sprz

ą

ta” system po testach.

background image

50

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (50) 

Tworzenie zbiorów przypadków testowych

Statyczne

TestCase t=new PieniadzeTest(„testy dla dodaj"){ 

public void runTest() { 

testDodaj(); 

}

public static Test suite() {

TestSuite suite = new TestSuite(); 

suite.addTest(new PieniadzeTest("testEquals")); 

suite.addTest(new PieniadzeTest("testDodaj")); 

return suite; 

}

Przypadki testowe mo

Ŝ

na ł

ą

czy

ć

 w zbiory wariantów testów (ang. 

test suite) reprezentowane przez obiekty klasy TestSuite. JUnit umo

Ŝ

liwia 

tworzenie takich zbiorów dwoma metodami: statyczn

ą

 i dynamiczn

ą

.

Metoda statyczna w przeciwie

ń

stwie do metody dynamicznej 

wymaga „r

ę

cznego” podania, które metody reprezentuj

ą

 przypadki testowe. 

Mo

Ŝ

liwe s

ą

 dwa warianty utworzenia zbiorów testów t

ą

 drog

ą

. Pierwszy polega 

na przeci

ąŜ

eniu metody runTest interfejsu Test implementowanego przez klas

ę

 

TestCaseTestRunner biblioteki JUnit tak naprawd

ę

 nie rozró

Ŝ

nia obiektów 

TestCase od TestSuite. Odwołuje si

ę

 do nich przez interfejs Test wywołuj

ą

metod

ę

 runTest. Rozwi

ą

zanie polega na przeci

ąŜ

eniu tej metody i wywołanie w 

niej metod implementuj

ą

cych przypadki testowe wchodz

ą

ce w skład tworzonego 

zbioru. W przykładzie pokazanym na slajdzie tworzony jest zbiór zawieraj

ą

cy 

tylko jeden przypadek testowy jakim jest wariant weryfikuj

ą

cy działanie metody 

dodaj. Drugie rozwi

ą

zanie opiera si

ę

 na wykorzystaniu klasy TestSuite. Do 

obiektu tej klasy dodawane s

ą

 warianty testów przez wywołanie metody addTest

Prosz

ę

 zwróci

ć

 uwag

ę

 w jaki sposób tworzone s

ą

 obiekty reprezentuj

ą

ce 

poszczególne warianty testu. Otó

Ŝ

 tworzone s

ą

 obiekty klasy PieniadzeTest 

jako argument wywołania konstruktora podawana jest nazwa metody 
implementuj

ą

ca wariant testu.

background image

51

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (51) 

Tworzenie zbiorów przypadków testowych

Dynamiczne

public class PieniadzeTests {

public static Test suite() {

TestSuite s = new TestSuite("Testy dla klasy 

Pieniadze");

suite.addTest(PieniadzeTest.class);

return suite;

}

}

Drugim sposobem tworzenia zbiorów przypadków testowych jest 

wykorzystanie mechanizmu refleksji dost

ę

pnego w j

ę

zyku Java. Biblioteka JUnit 

wykorzystuje go w przypadku gdy tworzony jest zbiór testów, gdzie jako 
przypadek testowy podawana jest klasa reprezentuj

ą

ca ten wariant testu. JUnit 

zakłada, 

Ŝ

e przypadki testowe reprezentowane s

ą

 przez metody rozpoczynaj

ą

ce 

si

ę

 od słowa „test”. Dlatego tak wa

Ŝ

ne jest odpowiednie nazewnictwo. Dla 

ka

Ŝ

dego takiego przypadku testowego tworzony jest obiekt implementuj

ą

cy 

interfejs Test, który jest nast

ę

pnie uruchamiany przez odpowiedni TestRunner.

background image

52

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (52) 

JUnit – struktura katalogów 

• Oddzielenie testów od kodu

• Klasy znajduj

ą

 si

ę

 w tym samym pakiecie

src

+---elearning

|

+--- Klasa.java

test

+---elearning

|

+--- KlasaTest.java

Kod 

ź

ródłowy aplikacji, jak równie

Ŝ

 przypadki testowe sprawdzaj

ą

ce 

program powinny by

ć

 umieszczone w dwóch osobnych katalogach. Separacja 

kodu od testów ułatwia zarz

ą

dzanie nim. Prostsze jest na przykład przygotowanie 

dystrybucji aplikacji. U

Ŝ

ytkownik nie potrzebuje mie

ć

 przecie

Ŝ

 w swoim kodzie 

produkcyjnym przypadków testowych. Poniewa

Ŝ

 testowanie wymaga czasem 

dost

ę

pu do metod klasy, które s

ą

 tylko widoczne w ramach pakietu zalecane jest 

by klasy zawieraj

ą

ce przypadki testowe były w tych samych pakietach co klasy 

przez nie testowane. Ułatwia to poza tym znalezienie wariantów testów dla danej 
klasy tworz

ą

c czyteln

ą

 struktur

ę

 projektu.

background image

53

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (53) 

JUnit – dobre praktyki programistyczne

Konstruktor vs setUp

public class PieniadzeTest extends TestCase {

private Pieniadze pieniadze = null;

public Pieniadze(String name) {

super(name);

pieniadze = new Pieniadze(-1);

}

}

Nale

Ŝ

y unika

ć

 implementacji metody pre-process w konstruktorze 

klasy reprezentuj

ą

cej przypadek testowy. Zgodnie ze specyfikacj

ą

j

ę

zyka Java, 

jakikolwiek wyj

ą

tek zgłoszony w konstruktorze przerywa proces tworzenia 

obiektu. Przykład kodu zawieraj

ą

cego taki bł

ą

d przedstawiony jest na powy

Ŝ

szym 

slajdzie. Nast

ę

puje tu próba utworzenia obiektu klasy Pieniadze z warto

ś

ci

ą

 

ujemn

ą

, której ta klasa nie akceptuje. Powoduje to wyrzucenie wyj

ą

tku przez 

konstruktor klasy Pieniadze do konstruktora przypadku testowego, który nie 
zostanie utworzony.

background image

54

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (54) 

JUnit – dobre praktyki programistyczne

Konstruktor vs setUp

public class PieniadzeTest extends TestCase {

private Pieniadze pieniadze = null;

public Pieniadze(String name) {

super(name);

pieniadze = new Pieniadze(-1);

}

}

Junit.framework.AssertionFailedError: Cannot instantiate test case
PieniadzeTest
at junit.framework.Assert.fail(Assert.java:143)
at junit.framework.TestSuite$1.runTest(TestSuite.java:178)
at junit.framework.TestCase.runBare(TestCase.java:129)
at junit.framework.TestResult$1.protect(TestResult.java:100)

...

Je

ś

li w kodzie inicjuj

ą

cym przypadku testowego wyst

ą

pi bł

ą

d, który 

spowoduje wyrzucenie wyj

ą

tku w konstruktorze, a tak si

ę

 dzieje w tym przypadku 

to obiekt wariantu testu nie zostanie utworzony, a TestRunner powiadomi 
u

Ŝ

ytkownika komunikatem o niemo

Ŝ

no

ś

ci utworzenia wariantu testu. Nie poda 

natomiast powodu, dla którego tak si

ę

 stało. To znacznie utrudni debugowanie w 

przypadku gdy kod inicjuj

ą

cy jest rzeczywi

ś

cie skomplikowany.

background image

55

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (55) 

JUnit – dobre praktyki programistyczne

Konstruktor vs setUp

public class PieniadzeTest extends TestCase{

private Pieniadze pieniadze = null;

protected void setUp() throws Exception {

super.setUp();

pieniadze = new Pieniadze(-1);

}

}

Poprawne rozwi

ą

zanie tego problemu prezentuje powy

Ŝ

szy slajd. 

By wszystko było wykonane „zgodnie ze sztuk

ą

” kod inicjuj

ą

cy znajduj

ą

cy si

ę

 w 

konstruktorze wariantu testu powinien zosta

ć

 przeniesiony do metody setUp.

background image

56

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (56) 

JUnit – dobre praktyki programistyczne

Konstruktor vs setUp

public class PieniadzeTest extends TestCase{

private Pieniadze pieniadze = null;

protected void setUp() throws Exception {

super.setUp();

pieniadze = new Pieniadze(-1);

}

}

java.lang.IllegalArgumentException: amount < 0
at elearning.MoneyTest.setUp (MoneyTest:8)
...

Wtedy w przypadku wyst

ą

pienia bł

ę

dy podczas inicjacji, oprócz 

informacji o niemo

Ŝ

no

ś

ci przeprowadzenia testu, wy

ś

wietlona zostanie 

dodatkowa informacja podaj

ą

ca powód, dla którego wariant testu nie mógł zosta

ć

 

wykonany.

background image

57

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (57) 

JUnit – dobre praktyki programistyczne

Unikaj wpisywania „na sztywno” 

ś

cie

Ŝ

ek do 

zasobów

...

new FileInputStream(„C:\testy\plik.txt”)

...

Warianty testów przechowywane s

ą

 wraz z kodem 

ź

ródłowym 

testowanego systemu w repozytorium. Stamt

ą

d s

ą

 pobierane przez testerów 

celem ich wykonania. By warianty testu mogły by

ć

 uruchomione bezproblemowo 

na ró

Ŝ

nych maszynach, w ró

Ŝ

nych systemach operacyjnych (Java jest przecie

Ŝ

 

dost

ę

pna na wiele platform) nale

Ŝ

y unika

ć

 bezwzgl

ę

dnych odwoła

ń

 do zasobów. 

Nie mo

Ŝ

na wymaga

ć

 by na wszystkich maszynach była taka sama struktura 

katalogów i zainstalowany był jedyny słuszny system operacyjny. Je

ś

li tester 

pobieraj

ą

cy warianty testów nie umie

ś

ci ich w katalogu testy na dysku C, tylko na 

dysku D to warianty testu posiadaj

ą

ce bezwzgl

ę

dne odwołanie do zasobu 

zako

ń

cz

ą

 si

ę

 niepowodzeniem.

background image

58

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (58) 

JUnit – dobre praktyki programistyczne

Unikaj wpisywania „na sztywno” 

ś

cie

Ŝ

ek do 

zasobów

...

new FileInputStream(„plik.txt”);

...

...

getClass().getResourceAsStream(

getClass(), „plik.txt”);

...

Dlatego te

Ŝ

 najlepszym rozwi

ą

zaniem jest unikanie wpisywania na 

sztywno 

ś

cie

Ŝ

ek bezwzgl

ę

dnych do zasobów i umieszczanie ich w katalogu 

bie

Ŝą

cym dla wariantów testów lub te

Ŝ

 pobieranie tych plików wykorzystuj

ą

ClassLoader klasy przypadku testowego jak pokazano w drugim przykładzie. Z 
katalogu bie

Ŝą

cego dla klasy reprezentuj

ą

cej przypadek testowy pobrany 

zostanie plik o nazwie „plik.txt”.

background image

59

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (59) 

JUnit – dobre praktyki programistyczne

Uniezale

Ŝ

nij testy od czasu, lokalizacji itd.

...

assertEquals(„07:52:00”, new Date().toString());

...

Podobnie jak w poprzednim przypadku nale

Ŝ

y pami

ę

ta

ć

Ŝ

warianty testów mog

ą

 by

ć

 uruchamiane na ró

Ŝ

nych maszynach, tak

Ŝ

e z ró

Ŝ

nymi 

strefami czasowymi. W zwi

ą

zku z tym nale

Ŝ

y unika

ć

 pisania przypadków 

testowych uzale

Ŝ

nionych od czasu, czy te

Ŝ

 lokalizacji systemu operacyjnego. 

Inaczej mo

Ŝ

na spodziewa

ć

 si

ę

 trudnych do zlokalizowania bł

ę

dów.

background image

60

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (60) 

JUnit – dobre praktyki programistyczne

Obsługa wyj

ą

tków – wyj

ą

tek = test nie przechodzi

public void testException() {

try {

new Money(0);

} catch (IllegalArgumentException ex) {

fail();

}

public void testException() throws

IllegalArgumentException {

new Money(0);

}

Je

ś

li testowana metoda zgłosi wyj

ą

tek, to wyrzucany jest on do 

metody testuj

ą

cej. Wyrzucenie wyj

ą

tku oznacza bł

ą

d w programie. Pojawia si

ę

 

pytanie w jaki sposób powinien by

ć

 zaimplementowany taki przypadek. Cz

ę

sto 

stosowanym cho

ć

 nieeleganckim rozwi

ą

zaniem jest przechwycenie tego wyj

ą

tku i 

wywołanie metody fail, która spowoduje, 

Ŝ

e przypadek testowy nie przejdzie 

podaj

ą

c bł

ą

d wykonania. Poza rzadkimi sytuacjami nie nale

Ŝ

y stosowa

ć

 tego 

rozwi

ą

zania. Biblioteka JUnit potrafi obsłu

Ŝ

y

ć

 wyj

ą

tek i poda

ć

 powód 

niepowodzenia testu. W zwi

ą

zku z tym preferowanym rozwi

ą

zaniem jest to, w 

którym w klauzuli throws metody testuj

ą

cej podawane jest jakie wyj

ą

tki mog

ą

 by

ć

 

wyrzucone przez testowany obiekt.

background image

61

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (61) 

JUnit – dobre praktyki programistyczne

Obsługa wyj

ą

tków – wyj

ą

tek = test przechodzi

public void testException() {

try {

new Money(-1);

fail(„Powinien wyrzuci

ć

 wyj

ą

tek”);

} catch (IllegalArgumentException ex) { }

public void testException() { new Money(-1); }

public static Test suite() {

suite.addTest(new ExceptionTestCase(„testException”,  

IllegalArgumentException.class));

}

Odmienn

ą

 sytuacj

ą

 jest przypadek, kiedy wariant testu sprawdza 

czy dany wyj

ą

tek jest wyrzucany przy okre

ś

lonych danych wej

ś

ciowych. Nie 

wyrzucenie wyj

ą

tku oznacza bł

ą

d w programie. Biblioteka JUnit udost

ę

pnia dwa 

mo

Ŝ

liwe rozwi

ą

zania. Mo

Ŝ

na wykorzysta

ć

 metod

ę

 fail i umie

ś

ci

ć

 j

ą

 zaraz pod 

metod

ą

, która powinna spowodowa

ć

 wyrzucenie okre

ś

lonego wyj

ą

tku. Je

ś

li 

metoda ta nie zrobi tego to fail zako

ń

czy działanie przypadku testowego z 

informacj

ą

 o bł

ę

dzie. Nale

Ŝ

y jeszcze zabezpieczy

ć

 si

ę

 przed ewentualno

ś

ci

ą

 

wyrzucenia nieprawidłowego wyj

ą

tku. Metoda powinna by

ć

 otoczona klauzul

ą

 try 

.. catch .. przechwytuj

ą

c

ą

 tylko dozwolone wyj

ą

tki. Wszystkie pozostałe zostan

ą

 

odebrane przez bibliotek

ę

 JUnit, która poinformuje u

Ŝ

ytkownika o bł

ę

dzie.

Drugim rozwi

ą

zaniem jest zastosowanie klasy ExceptionTestCase 

reprezentuj

ą

cej wariant testu, w którym wyrzucenie wyj

ą

tku spowoduje przej

ś

cie 

testu. Obiekt tej klasy nale

Ŝ

y doda

ć

 do zbioru przypadków testowych, a w 

konstruktorze klasy poda

ć

 nazw

ę

 metody zawieraj

ą

cej implementacj

ę

 wariantu 

testu, oraz wyrzucany wyj

ą

tek.

background image

62

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (62) 

JUnit – dobre praktyki programistyczne

• Zakładaj, 

Ŝ

e przypadki testowe s

ą

 wykonywane 

w dowolnej kolejno

ś

ci

• Unikaj pisania przypadków testowych z efektami 

ubocznymi

• Testowanie prywatnych metod

– Unikaj

– Korzystaj z mechanizmu refleksji j

ę

zyka Java

Cz

ę

sto popełnianym bł

ę

dem jest pisanie przypadków testowych 

zawieraj

ą

cych efekty uboczne lub te

Ŝ

 zakładaj

ą

cych pewn

ą

 kolejno

ść

 

wykonywania si

ę

 wariantów testu. Jednym z zało

Ŝ

e

ń

 przy

ś

wiecaj

ą

cych twórcom 

biblioteki JUnit jest niezale

Ŝ

no

ść

 poszczególnych przypadków testowych. Ka

Ŝ

dy 

z nich jest poprzedzony wywołaniem metody setUp, która ustawia stan 
testowanego systemu, oraz metody tearDown, która przywraca stan jaki był 
przed wykonaniem testu. Wszelkie sposoby ustawienia stanu systemu powinny 
by

ć

 przeniesione z wariantów testu do metody setUp b

ą

d

ź

 tearDown.

Testowane powinny by

ć

 metody bior

ą

ce udział w interakcji z innymi 

obiektami. Do takich zalicza si

ę

 metody publiczne i chronione. Czasem mo

Ŝ

zdarzy

ć

 si

ę

 konieczno

ść

 przetestowania metody prywatnej ze wzgl

ę

du na jej nie 

trywialne zachowanie. W takim przypadku nale

Ŝ

y zastanowi

ć

 si

ę

 czy nie nale

Ŝ

przerobi

ć

 projektu klasy. Mo

Ŝ

e to oznacza

ć

, ze metoda ta powinna mie

ć

 mniej 

restrykcyjny zasi

ę

g. Je

ś

li oczywi

ś

cie taka metoda ma by

ć

 prywatna to jedynym 

rozwi

ą

zaniem jest wykorzystanie mechanizmu refleksji dost

ę

pnego w j

ę

zyku 

Java.

background image

63

In

Ŝ

ynieria oprogramowania I

Automatyzacja wykonywania testów (63) 

Podsumowanie

„Automatyzacja chaosu daje tylko 
szybszy chaos”

Automatyzacja wykonywania testów 
zmniejsza koszt testowania a

Ŝ

 do 

80% wysiłku r

ę

cznego testowania

Opłacalne jest automatyzowanie 
wykonywania testów i porównywania 
uzyskanych wyników z oczekiwanymi

JUnit jako przykład narz

ę

dzia do 

automatyzacji wykonywania testów

Na wykładzie przedstawiono wady i zalety wynikaj

ą

ce z 

automatyzacji testów. Do niew

ą

tpliwych zalet nale

Ŝ

y zaliczy

ć

 zmniejszenie kosztu 

zwi

ą

zanego z testowaniem nawet do 80% wysiłku sp

ę

dzonego na r

ę

cznym 

testowaniu kodu. Oszcz

ę

dno

ść

 ta umo

Ŝ

liwia dokładniejsze sprawdzenie 

programu. Nale

Ŝ

y jednak pami

ę

ta

ć

Ŝ

e testy automatyczne nie daj

ą

efektywniejszych wariantów testu od ich „r

ę

cznych odpowiedników”. Jedynie 

umo

Ŝ

liwiaj

ą

 ich szybsze wykonanie. W zwi

ą

zku z tym warianty testów, poddane 

automatyzacji musz

ą

 by

ć

 dobrej jako

ś

ci.

Na wykładzie przedstawione zostały czynno

ś

ci wchodz

ą

ce w skład 

testowania. Dla ka

Ŝ

dej z nich podano potencjalne mo

Ŝ

liwo

ś

ci automatyzacji. 

Czynno

ś

ciami, które warto automatyzowa

ć

 s

ą

: wykonywanie testów oraz 

porównywanie wyników testów z oczekiwanymi. W przypadku pozostałych 
opłacalno

ść

 automatyzacji jest dyskusyjna.

Jako przykład narz

ę

dzia słu

Ŝą

cego do automatyzacji testów 

przedstawiono bibliotek

ę

 JUnit 3.8.x. Umo

Ŝ

liwia ona wykonywanie testów i 

porównywanie uzyskanych wyników w sposób automatyczny.