Io 11 Automatyzacja wykonywania testów

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

ą

ę

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

ą

ę

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

ść

ę

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,

ż

e

warianty testu znajd

ą

wi

ę

kszo

ść

ę

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

ż

y

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

ę

ż

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

ść

ę

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

ż

e

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

ę

k

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

ż

e

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

ż

e

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

ż

e

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

ć

ą

d

(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

ć

ż

nic mi

ę

dzy tym co

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

ę

zachowywa

ć

. W przeciwnym przypadku zgłoszone zostan

ą

ż

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

ą

ż

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

ć

,

ż

e

ś

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

ą

ż

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 < 0) throw 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

ę

TestCase. TestRunner biblioteki JUnit tak naprawd

ę

nie rozró

ż

nia obiektów

TestCase od TestSuite. Odwołuje si

ę

do nich przez interfejs Test wywołuj

ą

c

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 a

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

ą

c

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

ć

,

ż

e

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

ż

e

zdarzy

ć

si

ę

konieczno

ść

przetestowania metody prywatnej ze wzgl

ę

du na jej nie

trywialne zachowanie. W takim przypadku nale

ż

y zastanowi

ć

si

ę

czy nie nale

ż

y

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.


Wyszukiwarka

Podobne podstrony:

więcej podobnych podstron