background image

Inżynieria oprogramowania

 

Testowanie, weryfikacja i 

walidacja oprogramowania

background image

Slajd 2 

Plan wykładu

• Podstawowe pojęcia
• Co testujemy?
• Rodzaje testów
          Testy statystyczne
          Testy dynamiczne
          Testy statyczne
• Narzędzia wykorzystywane podczas 

testowania

• Testy systemu
• Audyt
• Inspekcie oprogramowania

background image

Slajd 3 

Podstawowe pojęcia

Testowanie

Testowanie

 - polega na przeprowadzeniu 

eksperymentów z pewnymi częściami systemu (lub jego 

całością), wykorzystujące specjalnie dobrane dane 

testowe i porównaniu wyników uzyskanych z 

oczekiwanymi. Tak postępując można w sposób 

kontrolowany i systematyczny, zademonstrować 

obecność określonej funkcjonalności systemu oraz badać 

obecność niepożądanych efektów

Weryfikacja 

Weryfikacja 

 jest to testowanie oprogramowania pod 

względem wymagań zdefiniowanych w fazie analizy.

Walidacja

Walidacja

 

(ang. validation) - ocena systemu podczas 

lub na końcu procesu jego rozwoju na zgodność z 

rzeczywistymi wymaganiami użytkownika

background image

Slajd 4 

Typowe błędy

Klasa błędu Możliwy błąd

Funkcjonalny

zła lub brakująca funkcja

Systemowy

pomylone interfejsy, nieprawidłowe zarządzanie zasobami

Przetwarzania

niewłaściwe przetwarzanie danych

Danych

błędna specyfikacja, projekt, rozmieszczenie lub inicjalizacja

struktur danych

Kodowania

niewłaściwe użycie języka programowania

Dokumentacyjny niepełna lub błędna treść dokumentu

background image

Slajd 5 

Co testujemy?

background image

Slajd 6 

 

Co testujemy? 1/4

Kompletność i jakość

Kompletność i jakość założonych funkcji 
systemu

Wydajność

Wydajność systemu i poszczególnych jego 
funkcji 

Zabezpieczenie systemu

Zabezpieczenie systemu - odporność systemu 
na naruszenia prywatności, tajności, 
integralności, spójności i dostępności

• Własności operacyjne systemu, np. 

wymagania organizacyjne, jakość komunikatów 
systemu, jakość informacji o błędach, jakość 
pomocy

background image

Slajd 7 

  

Co testujemy? 2/4

Przenoszalność oprogramowania

Przenoszalność oprogramowania - poprawność 
działania w zróżnicowanym środowisku, różnych 
rozmiarach zasobów i rodzajach sprzętu

Odtwarzalność oprogramowania

Odtwarzalność oprogramowania (ang. 
maintainability) - mierzoną zwykle średnim czasem 
doprowadzenia do sprawnego działania po 
wystąpieniu awarii (od zgłoszenia awarii do 
ponownego działania)

Bezpieczeństwo oprogramowania

Bezpieczeństwo oprogramowania - stopień 
minimalizacji katastrofalnych skutków wynikających 
z niesprawnego działania (standardowy przykład - 
awaria zasilania)

background image

Slajd 8 

 

Co testujemy? 3/4

Obciążalność systemu

Obciążalność systemu - zdolność do 
poprawnej pracy przy dużych obciążeniach; np. 
maksymalnej liczbie użytkowników, bardzo 
dużych rozmiarach danych; w tych testach czas 
nie odgrywa najistotniejszej roli, chodzi 
wyłącznie o to, czy system poradzi sobie w 
ekstremalnych warunkach)

Skalowalność systemu

Skalowalność systemu - spełnienie warunków 
(m.in. czasowych) przy znacznym wzroście 
obciążenia

Niezawodność oprogramowania

Niezawodność oprogramowania - zwykle 
mierzoną średnim czasem pomiędzy błędami 

background image

Slajd 9 

  

Co testujemy? 4/4

• Modyfikowalność oprogramowania -  zdolność do 

zmiany przy zmieniających się założeniach lub 
wymaganiach

• Jakość dokumentacji, pomocy, materiałów 

szkoleniowych

• Wykorzystanie zasobów - np. czas jednostki 

centralnej, pamięć operacyjna, przestrzeń dyskowa, ...

• Spełnianie ograniczeń - np. na zajmowaną pamięć, 

obciążenia procesora, ...

• Interfejsy systemu na zgodność z wymaganiami 
• Akceptowalność systemu, tj. stopień 

usatysfakcjonowania użytkowników. 

background image

Slajd 10 

Rodzaje 

testów

background image

Slajd 11 

Rodzaje testów

Główne cele testowania:

• wykrycie i usunięcie błędów w systemie
• ocena niezawodności systemu

Na tej podstawie wyróżniamy:

Wykrywanie błędów

Wykrywanie błędów

 

 - testy, których 

głównym celem jest wykrycie jak 
największej liczby błędów w programie

• Testy 

statystyczne

statystyczne - celem jest wykrycie 

przyczyn najczęstszych błędnych wykonań 
oraz ocena niezawodności systemu

background image

Slajd 12 

Typowe fazy testowania systemu

• Testy 

częściowe

częściowe

 (np. modułów) 

- wykonywane najczęściej 

podczas implementacji, bezpośrednio po zakończeniu 
realizacji poszczególnych modułów

• Testy 

systemu

systemu

 

- wykonywane po zintegrowaniu części 

składowych; testowane są poszczególne podsystemy oraz 
system jako całość

• Testy 

akceptacji

akceptacji

 (ang. acceptance testing

- w 

przypadku oprogramowania realizowanego na zamówienie 
system przekazywany jest klientowi do przetestowania przez 
przyszłych użytkowników (testy takie nazywa się testami 

alfa

alfa

);w przypadku oprogramowania sprzedawanego rynkowo 

testy takie polegają na nieodpłatnym przekazaniu pewnej 
liczby kopii systemu grupie użytkowników (testy 

beta

beta

)

background image

Slajd 13 

Testy statystyczne

background image

Slajd 14 

Testy statystyczne

• Stosowanie testów statystycznych wymaga 

określenia rozkładu prawdopodobieństwa danych 
wejściowych możliwie bliskiemu rozkładowi, który 
pojawi się w rzeczywistości
 (dokładne przewidzenie 
takiego rozkładu jest trudne, w związku z czym wnioski 
wyciągnięte na podstawie takich testów mogą nie być 
wystarczająco wiarygodne)

• Założeniem jest przetestowanie systemu w:
             typowych sytuacjach (pojawiają się znacznie 

częściej);

             sytuacjach skrajnych. 
• Przykład techniki tzw. „brutalnej siły”, która jest 

jednak stosunkowo mało efektywna

background image

Slajd 15 

Techniki analizy produktu

• Techniki analizy dynamicznej

     - testy funkcjonalne
     - testy strukturalne

• Techniki analizy statycznej

     - dowodzenie poprawności programów
     -  interpretacja symboliczna

background image

Slajd 16 

Testy dynamiczne - funkcjonalne

background image

Slajd 17 

Testy funkcjonalne 

(ang. black-box testing)

• Sprawdzanie funkcji oprogramowania bez 

zaglądania do środka programu; testujący 
traktuje sprawdzany moduł jak „czarną 
skrzynkę
”, której wnętrze jest niewidoczne 

• Powinno obejmować cały zakres danych 

wejściowych, co zwykle jest praktycznie 
niemożliwe
 ze względu na olbrzymią liczbę 
dopuszczalnych danych wejściowych (efekt 
eksplozji danych testowych”)

background image

Slajd 18 

Testy funkcjonalne 

(ang. black-box testing)

Funkcje systemu znajdujące się w poprzedniej 

Funkcje systemu znajdujące się w poprzedniej 

wersji są istotniejsze niż nowo wprowadzone

wersji są istotniejsze niż nowo wprowadzone 
(użytkownicy, którzy posługiwali się daną funkcją w 
poprzedniej wersji systemu będą bardzo niezadowoleni 
jeżeli w nowej wersji ta funkcja przestanie działać; poza 
tym błąd w czymś nowym jest stosunkowo łatwo 
wytłumaczalny, natomiast „popsucie” czegoś dobrze 
funkcjonującego dużo trudniej)

Typowe sytuacje są ważniejsze niż wyjątki lub 

Typowe sytuacje są ważniejsze niż wyjątki lub 

sytuacje skrajne

sytuacje skrajne (błąd w funkcji wykonywanej często 
lub dla danych typowych jest znacznie bardziej istotny 
niż błąd w funkcji wykonywanej rzadko dla nietypowych 
danych)

background image

Slajd 19 

Testy funkcjonalne 

(ang. black-box testing)

W praktyce przetestowanie kombinacji danych 

wejściowych nawet zredukowanych do 
“typowych” i “granicznych” jest najczęściej 
niemożliwe; konieczny jest pewien wybór.

Możliwość wykonania funkcji jest 

Możliwość wykonania funkcji jest 

ważniejsza niż jakość jej wykonania

ważniejsza niż jakość jej wykonania

 

 (brak 

możliwości wykonania funkcji jest 
poważniejszym błędem niż np. niezbyt 
poprawne wyświetlenie jej rezultatów na 
ekranie)

background image

Slajd 20 

Testy dynamiczne - 

strukturalne

background image

Slajd 21 

Testy strukturalne

• W celu odróżnienia od testów funkcjonalnych 

nazywane testowaniem na zasadzie białej skrzynki (ang. 
white-box testing)

• Celem jest sprawdzanie wewnętrznej logiki 

oprogramowania poprzez odpowiedni dobór danych 
wejściowych, dzięki czemu można prześledzić wszystkie 
istotne ścieżki przebiegu sterowania programu

• Tradycyjnie programiści wstawiają kod diagnostyczny 

do programu aby śledzić wewnętrzne przetwarzanie; 
debuggery pozwalają programistom obserwować 
wykonanie programu krok po kroku

background image

Slajd 22 

Testy strukturalne

• Zwykle niezbędne jest wcześniejsze 

odpowiednie przygotowanie danych 
testowych lub wykorzystanie specjalnych 
programów
 usprawniających testowanie (np. 
programu wywołującego testowaną procedurę z 
różnymi parametrami)

• Ograniczeniem testów strukturalnych jest 

niemożliwość wykrycia brakujących funkcji 
w programie (wadę tę usuwa testowanie 
funkcjonalne)

background image

Slajd 23 

Testy 

statyczne

background image

Slajd 24 

Testy statyczne

Polegają na analizie kodu bez uruchomienia 

programu, możliwe techniki:

• dowody poprawności (nie są praktycznie 

osiągalne dla rzeczywistych programów);

• sformalizowane przeglądy;

background image

Slajd 25 

Narzędzia 

wykorzystywane

podczas testowania

background image

Slajd 26 

Narzędzia wykorzystywane

podczas testowania

Programy uruchamiające

Programy uruchamiające

 (ang. debuggers

- przydatne dla wewnętrznego testowania jak 
i do testowania przez osoby zewnętrzne 
(zakładają znajomość kodu)

Analizatory przykrycia kodu

Analizatory przykrycia kodu

 

 (ang. coverage 

analysers) - umożliwiają ustalenie obszarów 
kodu źródłowego
; umożliwiają wykrycie 
martwego kodu, kodu uruchamianego przy 
bardzo specyficznych danych
 wejściowych 
oraz kodu wykonywanego bardzo często (co 
może być przyczyną wąskiego gardła w 
programie)

background image

Slajd 27 

Narzędzia wykorzystywane

podczas testowania

Programy porównujące

Programy porównujące

 (ang. comparators) - 

narzędzia programistyczne umożliwiające 
porównanie dwóch programów, plików lub 
zbiorów danych celem wykrycia cech 
wspólnych i różnic
; wygodne do porównania 
wyników testów z wynikami oczekiwanymi; 

• Różnorodne inne narzędzia

 np. do 

planowania testów, automatycznego 
zarządzania danymi wyjściowymi, 
automatyczna generacja raportów z testów, 
generowanie statystyk jakości i niezawodności, 
wspomaganie powtarzalności testów, ...

background image

Slajd 28 

Testy systemu

background image

Slajd 29 

Testy systemu

Testowanie wstępujące

Testowanie wstępujące: najpierw testowane są 
pojedyncze moduły, następnie moduły coraz wyższego 
poziomu, aż do osiągnięcia poziomu całego systemu; nie 
zawsze jest to możliwe
, zwłaszcza gdy moduły są od 
siebie zależne;  niekiedy moduły współpracujące 
można zastąpić implementacjami szkieletowymi

Testowanie zstępujące

Testowanie zstępujące: rozpoczyna się od testowania 
modułów wyższego poziomu; moduły niższego poziomu 
zastępuje się implementacjami szkieletowymi
; po 
przetestowaniu modułów wyższego poziomu dołączane są 
moduły niższego poziomu; proces ten jest kontynuowany 
aż do zintegrowania i przetestowania całego systemu

background image

Slajd 30 

Testy systemu

Testy obciążeniowe

Testy obciążeniowe (ang. stress testing) - zbadanie 
wydajności i niezawodności systemu podczas pracy 
pod pełnym lub nawet nadmiernym obciążeniem
dotyczy to szczególnie systemów wielodostępnych i 
sieciowych
; polegają na wymuszeniu obciążenia 
równego lub większego od maksymalnego

Testy odporności

Testy odporności (ang. robustness testing
-sprawdzenie działania w przypadku zajścia 
niepożądanych zdarzeń
, np. awarii sprzętu, 
wprowadzenia niepoprawnych danych czy wydania 
sekwencji niepoprawnych poleceń

background image

Slajd 31 

Audyt

background image

Slajd 32 

Audyt

Audyt

 - niezależny przegląd i ocena jakości oprogramowania, 

która zapewnia zgodność z wymaganiami na 
oprogramowanie, a także ze specyfikacją, generalnymi 
założeniami, standardami, procedurami, instrukcjami, 
kodami oraz kontraktowymi i licencyjnymi wymaganiami

Celem audytu

 projektu informatycznego jest 

dostarczenie odbiorcy
    i dostawcy obiektywnych, aktualnych i syntetycznych 
informacji 
    o stanie całego projektu

Przedmioty audytu:

   *procesy projektu informatycznego - celem jest 
sprawdzenie
     prawidłowości wykonywanych prac jak i sposobu ich 
wykonywania
   *produkty (cząstkowe) projektu informatycznego - 
celem jest
     sprawdzenie czy rezultaty poszczególnych prac 
odpowiadają
     zakładanym wymaganiom

background image

Slajd 33 

Audyt projektu informatycznego

• Aby zapewnić obiektywność, audyt powinien być 

przeprowadzony przez osoby niezależne od 
zespołu projektowego (np. odpowiednią organizacje 
audytu lub przez osoby posiadające 
uprawnienia/licencję audytorów)

• Reguły i zasady audytu są określone w normie 

ANSI/IEEE Std 1028-1988 „IEEE Standard for 
Reviews and Audits”

background image

Slajd 34 

Inspekcje 

oprogramowania

background image

Slajd 35 

Inspekcje oprogramowania

• „

Inspekcja

Inspekcja to 

formalna technika

 oceny, 

w której wymagania na 
oprogramowanie, 

projekt lub kod są 

szczegółowo badane przez osobę lub 
grupę osób nie będących autorami

, w 

celu identyfikacji błędów, naruszenia 
standardów i innych problemów

background image

Slajd 36 

Inspekcje oprogramowania

• Technika o (potencjalnie) dużej 

skuteczności (średnia 60%).

• Stosowana dla najważniejszych 

systemów, bądź ich najbardziej istotnych 
części. 

• Dlaczego nie są powszechne?

-  nie potrzeba w zasadzie specjalnych 

narzędzi, ale potrzeba planowania i 
kompetentnych ludzi

-  analiza kosztów i zysków nie jest prosta

background image

Slajd 37 

Cele oraz cechy inspekcji

Cele inspekcji:

doraźne:

wykrywanie defektów w produktach procesu 
wytwarzania oprogramowania a następnie ich usunięcie

formalne potwierdzenie jakości produktu

strategiczne:

doskonalenie procesu wytwórczego w oparciu o analizę 
przyczyn znalezionych defektów

obniżenie kosztów wytwarzania

poprawa jakości produktów

doskonalenie samych inspekcji i rozwój kultury jakości w 
organizacji

background image

Slajd 38 

Cele oraz cechy inspekcji

Pożądane cechy inspekcji:
• Sesje są zaplanowane i przygotowane
• Błędy i problemy są notowane
• Wykonywana przez techników dla 

techników (bez udziału kierownictwa)

• Dane nie są wykorzystywane do oceny 

pracowników

• Błędy są wykorzystywane w poprawie 

procesu programowego (prewencja)

background image

Slajd 39 

Schemat inspekcji

Inicjowanie i dopuszczenie do inspekcji

Organizacja i zaplanowanie przebiegu

Spotkanie inicjujące

Spotkanie kontrolne (burza mózgów)

Redakcja dokumentu inspekcji

Kontrola indywidualna

Kontrola indywidualna

Dystrybucja wniosków z inspekcji

Kontrola indywidualna ...

background image

Slajd 40 

Korzyści inspekcji

• wzrost produktywności (od 30% do 100%)
• skrócenie czasu projektu (od 10% do 30%)
• skrócenie czasu wykonywania testów (5x-10x) a 

przez to i ich kosztu 

• mniejsze koszty pielęgnacji naprawczej
• większy komfort pracy (brak presji czasu i 

nadgodzin) oraz większa pewność dostarczania na 

czas (bo wcześnie wiemy o problemach)

• zwiększenie motywacji pracowników:

– świadomość, że produkt będzie oceniany 
– nauka przez znajdowanie błędów

background image

Slajd 41 

Zagrożenia inspekcji

• Ocena osób na podstawie zebranych metryk
• Złe prowadzenie inspekcji - mała efektywność i 

skuteczność

• Słabi kontrolerzy
• Kontrola indywidualna niewystarczająca (jakość i 

ilość)

• Skłonność autorów do lekceważenia defektów na 

etapie opracowywania dokumentów (“inspekcja 
wskaże błędy...”)

• Poczucie zagrożenia u autora - nieuzasadniona 

obrona własnych rozwiązań

• Krytyczne nastawienie do autora

background image

Slajd 42 

O czym był wykład?

• Podstawowe pojęcia
• Co testujemy?
• Rodzaje testów
          Testy statystyczne
          Testy dynamiczne
          Testy statyczne
• Narzędzia wykorzystywane podczas 

testowania

• Testy systemu
• Audyt
• Inspekcie oprogramowania


Document Outline