Testowanie oprogramowania

background image

Testowanie

Testowanie

Oprogramowania

Oprogramowania

Wykład

Zakład Modelowania i Grafiki

Komputerowej

background image

Pojęcie testowania

systemu / programu

Testowanie nie jest procesem potwierdzającym
poprawność programu i polegającym na wykazaniu,
że program nie ma błędów,

lecz

Testowanie

polega

na

wykonywaniu

programu w taki sposób, aby wykryć jak
najwięcej błędów.

 

Wykazanie obecności błędów, a nie
nieobecności błędów

background image

Testowanie

oprogramowania

Jest integralną częścią wszystkich metodyk jego wytwarzania

•Pojęcia, strategie oraz techniki testowania

powinny być określone jako pojedynczy
kontrolowany proces.

•Takie podejście wspiera i ułatwia prace zespołu

testującego na każdym etapie, począwszy od
planowania testów aż do momentu oceny
wyników procesu testowania

background image

Poziomy

Testowania

Testowanie oprogramowania wykonywane

jest zwykle na różnych poziomach podczas
procesu jego rozwijania i utrzymywania.

Test zgodnie z założeniami może się zmieniać

i może dotyczyć (zgodnie ze standardem
IEEE/EIA 12207.0):

jednostek,

pojedynczego modułu,

grupy takich modułów (odpowiednio do celu,

wykorzystania, zachowywania się lub
struktury), lub

całego systemu.

background image

Cele – odniesienia

testowania

Pojęciowo mogą być rozważane trzy duże

etapy, mianowicie: grupa, integracja, i system.

Żaden model procesu nie jest sugerowany,

ani żaden z trzech procesów nie zakłada, iż jest
ważniejszy od dwóch pozostałych.

Istotne jest zarządzanie testami; szczególną

uwagę przywiązywać należy do: polityki
testowania firmy, użytych narzędzi oraz ludzi
.

background image

Testowanie jednostek

... polega na dowiedzeniu, iż poszczególne
komponenty działają poprawnie.

Na tym etapie jednostka testowana jest
niezależnie

background image

Poziomy Testowania

Testowanie

grupy(modułu)

Test modułu weryfikuje w izolacji

funkcjonowanie kawałków oprogramowania,
testowane oddzielnie. W zależności od
kontekstu, mogą to być indywidualne
(oddzielne) podprogramy, lub większe
komponenty wykonane z ściśle powiązanych
jednostek (modułów).

background image

Testowanie modułu –

grupy modułów

Test modułu jest definiowany bardziej

precyzyjnie w standardzie IEEE dla
Testowania modułu oprogramowania
(Software Unit Testing – IEEE1008-87),
który
także opisuje zintegrowane podejście do
systematycznego dokumentowanego testowania
modułów.

Testowanie modułu następuje wraz z

dostępem do testowanego kodu i ze
wspomaganiem narzędzi debagujących, a
także może obejmować programistów, którzy
tworzyli kod.

background image

Poziomy Testowania

Testowanie integrujące

Testowanie integrujące jest procesem
weryfikującym oddziaływanie
pomiędzy komponentami
oprogramowania. Klasyczne strategie
testowania integrującego, takie jak
„top-down” i „bottom_up”, stosowane
w tradycyjnym, hierarchicznie
skomponowanym oprogramowaniu.

background image

Testowanie integrujące –

metody

testowanie wstępujące; jedynymi modułami

testowanymi osobno są moduły terminalne (nie
wywołujące innych modułów); program jest
łączony i testowany od dołu do góry;

testowanie zstępujące (czyli analityczne);

program jest łączony i testowany z góry na dół;
jedynym modułem testowanym osobno jest moduł
zajmujący szczytową pozycję w strukturze
programu;

zmodyfikowane testowanie zstępujące;

wymaga się, aby przed włączeniem do programu
każdy moduł był przetestowany osobno – wymaga
sporządzenia modułów sterujących oraz
namiastek każdego modułu;

background image

Testowanie integrujące –

metody

testowanie „big-bang”; pierwszy krok

przetestowanie każdego modułu w izolacji od
pozostałych; następnie wszystkie moduły scala
się naraz;

testowanie mieszane; zastosowanie

częściowego testowania zstępującego i
wstępującego;

zmodyfikowane testowanie mieszane – patrz

testowanie zstępujące zmodyfikowane;

integracja komponentów oprogramowania

lub podsystemów bazująca na
identyfikowanych funkcjonalnie wątkach
;

metoda ciągłej integracji (patrz ewolucyjne

metody projektowania)

background image

Testowanie integrujące

Nowoczesne strategie systematycznej integracji

są raczej sterowane architekturą, które stosują
integrację komponentów oprogramowania lub
podsystemów bazujące na identyfikowanych
funkcjonalnie wątkach.

Integracyjne testowanie jest działalnością ciągłą

na każdym kroku, na którym inżynierowie
oprogramowania muszą abstrahować od
perspektyw niższego poziomu i równocześnie
koncentrować się na poziomie ich integracji.

Z wyjątkiem małych, prostych programów,

strategie systematycznego ciągłego testowania
integrującego są zwykle preferowane w odróżnieniu
od łączenia komponentów w całość jednocześnie,
zwanego testowaniem „big-bang”.

background image

Testowanie systemu

Testowanie systemu wiąże się z zachowaniem

się całego systemu. Większość błędów
funkcjonalnych powinno zostać
zidentyfikowanych (rozpoznanych) podczas
testowania modułów i testowania integrującego.

Testowanie systemu zwykle rozpatrywane jest

stosownie dla porównania systemu do wymagań
systemu nie-funkcjonalnego, w tym
zabezpieczenie, prędkość, dokładność, i
niezawodność.

Na tym poziomie oceniane są interfejsy do

innych aplikacji, użyteczność, urządzenia
peryferyjne, lub inne otoczenie operacyjne.

background image

Cele testowania

Testowanie jest połączone ze spojrzeniem na

specyficzne cele, stawiane bardziej lub mniej
otwarcie, i z różnym stopniem precyzji.

Stawiając precyzyjnie cele, wyrażenie

ilościowe pozwala sterować dla zapanowania nad
procesem testowania.

background image

Cele testowania

Testowanie może zmierzać do weryfikacji różnych

właściwości.

Testowanie przypadków może zmierzać do

sprawdzenia czy specyfikacja funkcjonalna została
poprawnie zaimplementowana, co jest różnie
opisywane w literaturze jako conformance testing
(testowanie „dostosowawcze”), correctness
testing
(testowanie „poprawności”), lub testowanie
funcjonalne (functional).

Jakkolwiek, różne inne nie-funkcjonalne

właściwości także mogą być testowane, włączając w
to osiągi (charakterystyki), niezawodność,
użyteczność, i wiele innych.

background image

Cele testowania

Inne ważne cele (bez ograniczenia się tylko do

nich) obejmują niezawodność, wymiarowanie,
oszacowanie użyteczności, i akceptacji, dla których
zaproponowano różne podejścia.

Należy zwrócić uwagę, że cele testowania

zmieniają się z testowaniem celem odniesienia.

Ogólnie, różne cele są stawiane na różnych

poziomach testowania.

Niektóre rodzaje testowania są bardziej stosowne

do zestawu wykonywanego na zamówienie, na
przykład test instalacyjny, inne dla produktów
seryjnych podobne do testowania typu beta.

background image

Cele testowania –

podział

1. testowanie akceptacyjne/kwalifikacyjne

zestawienie zachowania się oprogramowania z
oczekiwaniami klienta;

2. testowanie instalacyjne – test jakości instalacji

w danym środowisku; testowane są również
wskazane procedury instalacyjne;

3. alpha and beta testing; trial testowany jest

przez grupę wewnętrznych użytkowników (alfa-
testing) lub zewnętrznych (beta-testing);

4. testowanie funkcjonalne (conformance

testing/correctness testing); porównanie
zachowania się systemu z zapisem specyfikacji;

5. spełnienie (poprawa) i wyznaczenie

niezawodności;

background image

Cele testowania –

podział c.d.

6. testowanie regresji; selektywne re-testowanie

systemu lub podprogramu (modułu) dla
sprawdzenia, czy dokonane modyfikacje nie
spowodowały nieoczekiwanych efektów;
dokonywane najczęściej podczas integracji
systemu;

7. testowanie osiągów;

8. testowanie stresu;

9. back-to-back testing (testowanie

symetryczne); porównanie wyników testów
zrealizowanych na dwóch różnych
implementacjach programów;

background image

Cele testowania –

podział c.d.

10.recovery testing (test odzyskiwania);

odzyskanie sprawności przez system po
„klęsce”;

11.test konfiguracji; testowanie programu przy

różnych konfiguracjach systemu;

12.test użyteczności;

13.test-driven development; testy nie dla

samego testowania, lecz dla kierowania
procesem projektowania;

background image

Techniki

testowania

Jednym z celów testowania jest odsłonięcie, tak

wiele jak to możliwe, potencjalnych defektów,

Opracowano – rozwinięto wiele technik dla

tego celu, które usiłują przerwać („break”)
program podczas uruchomienia jednego lub
więcej przebiegów testowych odpowiadających
identyfikacji klas wykonań domniemanego
odpowiednika.

Wiodąca zasada podkreślająca takie techniki,

to być systematycznym jak to możliwe w
identyfikacji reprezentatywnego zbioru zachowań
programu;

– na przykład, rozpatrując podklasy dziedziny

wejściowej, scenariuszy, stanów, i przepływu
danych.

background image

Techniki

testowania

Znalezienie jednorodnych podstaw dla

klasyfikacji wszystkich technik, – użyty tutaj jest
kompromisem.

Klasyfikacja jest oparta: na tym, jak testy są

generowane:

•z intuicji inżyniera oprogramowania,

•doświadczenia,

•specyfikacji,

•struktury kodu, dla wykrycia (rzeczywistych

lub sztucznych) błędów,

•obszaru wykorzystania, a w końcu, natury

aplikacji.

background image

Techniki

testowania

Czasami te techniki są klasyfikowane jak biała

skrzynka, zwana także szklaną skrzynką, jeżeli
testy polegają na informacji na tym jak program
był projektowany lub kodowany, lub jak czarna
skrzynka
jeżeli przypadki testu opierają się tylko
na zachowaniu wejście/wyjście (testowanie
funkcjonalne).

Ostatnia kategoria dotyczy użycia kombinacji

dwóch lub więcej technik. Oczywiście te techniki
nie są użyte dokładnie tak samo przez wszystkich
praktyków. Zawarte na poniższej liście powinny
być znane inżynierom oprogramowania.

background image

Techniki oparte na

intuicji i doświadczeniu

inżynierów

oprogramowania

background image

Testowanie Ad hoc

Może najszerzej praktykowaną

technika pozostaje testowanie ad hoc:
testy są dostarczane polegające na
umiejętności inżyniera oprogramowania,
intuicji, doświadczeniu w podobnych
programach.

Ad hoc testing może być użyteczny w

identyfikacji testów specjalnych, które
nie łatwo dają się uchwycić przez
techniki formalne.

background image

Testowanie poszukujące

(exploratory testing)

Testowanie poszukujące definiowane jest jako

równoczesne uczenie, projektowanie testu i
wykonywanie testu;

•Testy nie są definiowane z góry (z wyprzedzeniem)

z założonym planie testowania, lecz są dynamicznie
projektowane, wykonywane i modyfikowane.

•Efektywność testowania poszukującego opiera się

na wiedzy inżyniera oprogramowania, która może
być dostarczana z różnych źródeł:

obserwacji zachowania się produktu podczas
testowania

, zaznajomienia się z aplikacją,

platformą, procesem defektu

, typami

możliwych błędów i defektów,

ryzyko związane

z poszczególnym produktem

, oraz podobne.

background image

Techniki testowania

oparte na specyfikacji.

background image

Ekwiwalentny podział

Dziedzina wejściowa zostaje podzielona na

kolekcję podzbiorów, lub równoważnych klas, które
są domniemanymi odpowiednikami odpowiednio do
specyficznych relacji, i reprezentatywny zbiór testów
(czasami tylko jeden) pobierany jest z każdej klasy.

Testowanie nazywane dzieleniem na klasy

równoważności polega na odnalezieniu wszystkich
wspomnianych klas, które w dalszej kolejności
posłużą do budowy przypadków testowych

Jeżeli istnieją wartości danych, które nie zostały

uwzględnione w żadnej klasie równoważności, mogą
być wykorzystane w tzw. Abnormal tests – testach
dzięki którym można sprawdzić zachowanie
programu dla nieoczekiwanych wartości wejściowych

background image

Analiza wartości

brzegowych

Testowe przypadki są wybierane w oparciu o
bliskość brzegów dziedziny wejściowej
zmiennych, z podkreśleniem racjonalnym, że
wiele błędów skłania się do koncentracji w
pobliżu wartości ekstremalnych wejść.
Rozwinięciem tej techniki jest testowanie
„krzepkości” („robustness”), w którym przypadki
testowe są także wybierane spoza dziedziny
wejściowej zmiennych, dla testowania krzepkości
programu na nieoczekiwane lub błędne dane
wejściowe.

background image

Tabela decyzji

Tabela decyzji przedstawia zależność
pomiędzy warunkami (zgrubnie,
wejściowe) a czynnościami (akcjami)
(zgrubnie, wyjściowe). Przypadki testowe
są systematycznie dostarczane przez
rozpatrywanie każdej możliwej
kombinacji warunków i czynności.
Odpowiednią techniką jest cause-effect
graphing (rysowanie efektu
przyczynowego).

background image

Test oparty na

diagramie stanów

(Finite-state machine-

based)

Podczas modelowania programu jako automatu
stanów skończonych, testy mogą zostać wybrane
by pokryć stany i przejścia między nimi.

background image

Testowanie oparte na

formalnej specyfikacji

Przedstawienie specyfikacji w języku formalnym
pozwala na automatyczne wyznaczanie
funkcjonalnych przypadków testowych, i , w tym
samym czasie, dostarczać odpowiednie wyjście,
wyrokując, dla sprawdzenia wyników testu. Metoda
stosowana w dostarczaniu przypadków testowych z
opartego na modelowaniu lub algebraicznej
specyfikacji.

background image

Testowanie losowe

Testy generowane są w sposób czysto losowy, nie
mieszać z testowaniem statystycznym z
działającego profilu. Ta postać testowania podpada
pod tytuł podejście oparte na specyfikacji,
ponieważ musi być znana przynajmniej dziedzina
wejściowa, by umożliwić wybór losowy punktu
wewnątrz tej dziedziny.


Document Outline


Wyszukiwarka

Podobne podstrony:
BYT 2006 Testowanie oprogramowania
BYT 2003 Testowanie oprogramowania
Projekt plan testowania oprogramowania (2)
BYT 2005 Testowanie oprogramowania
Testowanie oprogramowania
automatyczne testowanie oprogramowania
Sztuka testowania oprogramowania 2
Sztuka testowania oprogramowania
Testowanie oprogramowania Podrecznik dla poczatkujacych szteop 2
Sztuka testowania oprogramowania artteo 2
Sztuka testowania oprogramowania artteo
Testowanie oprogramowania Podrecznik dla poczatkujacych
BYT 2003 Testowanie oprogramowania
Testowanie oprogramowania Podrecznik dla poczatkujacych 2
Sztuka testowania oprogramowania artteo
Sztuka testowania oprogramowania 2
Testowanie oprogramowania Podrecznik dla poczatkujacych
Poradnik Testowanie Oprogramowania Jakub Pakuła Divante
@PSI W12 Testowanie oprogramowania Sacha

więcej podobnych podstron