Testowanie i walidacja oprogramowania



Podobne dokumenty
Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Pętla for. Matematyka dla ciekawych świata -19- Scilab. for i=1:10... end. for k=4:-1:1... end. k=3 k=4. k=1. k=2

Pętla for. Wynik działania programu:

Podstawy programowania Laboratorium. Ćwiczenie 2 Programowanie strukturalne podstawowe rodzaje instrukcji

Informatyka I. Wykład 3. Sterowanie wykonaniem programu. Instrukcje warunkowe Instrukcje pętli. Dr inż. Andrzej Czerepicki

Testowanie oprogramowania. Testowanie oprogramowania 1/34

ALGORYTMY. 1. Podstawowe definicje Schemat blokowy

Język ludzki kod maszynowy

ALGORYTMY. 1. Podstawowe definicje Schemat blokowy

Podstawy programowania skrót z wykładów:

1 Wprowadzenie do algorytmiki

Pętle. Dodał Administrator niedziela, 14 marzec :27

Techniki (automatyzacji) projektowania testów. Adam Roman WarszawQA, 24 II 2016

Testowanie oprogramowania

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

Liczby losowe i pętla while w języku Python

a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10]

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Definicje wyższego poziomu

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Podstawy VBA cz. 1. Programowanie komputerowe

xx + x = 1, to y = Jeśli x = 0, to y = 0 Przykładowy układ Funkcja przykładowego układu Metody poszukiwania testów Porównanie tabel prawdy

Testowanie i walidacja oprogramowania

Języki skryptowe w programie Plans

Kontrola przebiegu programu

Podstawy Programowania C++

ForPascal Interpreter języka Pascal

Instrukcje sterujące. wer. 11 z drobnymi modyfikacjami! Wojciech Myszka :53:

Laboratorium Komputerowego Wspomagania Analizy i Projektowania

Instrukcje sterujące. Programowanie Proceduralne 1

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Podstawy programowania w języku C

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

Algorytmy i struktury danych

I. KARTA PRZEDMIOTU CEL PRZEDMIOTU WYMAGANIA WSTĘPNE W ZAKRESIE WIEDZY, UMIEJĘTNOŚCI I INNYCH KOMPETENCJI EFEKTY KSZTAŁCENIA

Konstrukcje warunkowe Pętle

Bloki anonimowe w PL/SQL

W 5_2 Typy języków programowania sterowników PLC (zdefiniowane w IEC-61131) - języki graficzne (LD, FBD); języki tekstowe (ST, IL).

Tworzenie przypadków testowych

Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania

Laboratorium 2: Pętle i instrukcje warunkowe. mgr inż. Leszek Ciopiński dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Zapis algorytmów: schematy blokowe i pseudokod 1

Podstawy Programowania Podstawowa składnia języka C++

PL/SQL. Część 1 Bloki PL/SQL. Piotr Medoń

Zapisywanie algorytmów w języku programowania

Wstęp do informatyki- wykład 7

Wykład 8. Testowanie w JEE 5.0 (1) Autor: Zofia Kruczkiewicz. Zofia Kruczkiewicz

Wykład z Technologii Informacyjnych. Piotr Mika

ECDL Podstawy programowania Sylabus - wersja 1.0

opracowanie Iteracje Rys.1. Przepływ działań w iteracyjno-rozwojowym procesie powstawiania oprogramowania obiektowego udział testowania

Komentarze w PHP (niewykonywane fragmenty tekstowe, będące informacją dla programisty)

Ćwiczenie 1. Wprowadzenie do programu Octave

Opis zagadnieo 1-3. Iteracja, rekurencja i ich realizacja

Temat zajęć: Tworzenie skryptów powłoki systemu operacyjnego.

Skrypty powłoki Skrypty Najcz ciej u ywane polecenia w skryptach:

Wprowadzenie do Scilab: podstawy języka Scilab

Programowanie w języku Python. Grażyna Koba

Definicje. Algorytm to:

4. Funkcje. Przykłady

Poprawność semantyczna

Przeszukiwanie z nawrotami. Wykład 8. Przeszukiwanie z nawrotami. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 238 / 279

Certyfikowany tester Pytania przykładowe do poziomu podstawowego

Język programowania PASCAL

Zawód tester, czyli na czym polega testowanie. Katarzyna Łabinska Justyna Sacha - Gawlik

W języku C dostępne są trzy instrukcje, umożliwiające tworzenie pętli: for, while oraz do. for (w1;w2;w3) instrukcja

Data Mining Wykład 9. Analiza skupień (grupowanie) Grupowanie hierarchiczne O-Cluster. Plan wykładu. Sformułowanie problemu

Podstawy programowania. Wykład: 4. Instrukcje sterujące, operatory. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Programowanie obiektowe

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Pętle. Programowanie komputerowe

Programowanie w Logice Przykłady programów. Przemysław Kobylański

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Blockly Kodowanie pomoc.

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

Administracja sieciowymi systemami operacyjnymi III Klasa - Linux

Instrukcje wyboru. Tworzenie programu, Schematy blokowe, Instrukcje wyboru, Operatory logiczne

/* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include <aduc834.h>

Digraf. 13 maja 2017

Pascal - wprowadzenie

Porządek dostępu do zasobu: procesory obszary pamięci cykle procesora pliki urządzenia we/wy

Kod doskonały : jak tworzyć oprogramowanie pozbawione błędów / Steve McConnell. Gliwice, cop Spis treści. Wstęp 15.

Program znajduje największa lub najmniejsza z podanych liczb. Liczby podajemy dopóki nam sie nie znudzi.

WYKORZYSTANIE PORTALU DYDAKTYCZNEGO W NAUCE JĘZYKÓW PROGRAMOWANIA

DECLARE VARIABLE zmienna1 typ danych; BEGIN

Wstęp do informatyki. stęp do informatyki Polecenia (cz.2)

Instrukcja wyboru, pętle. 2 wykład. Podstawy programowania - Paskal

Podstawy programowania w języku Visual Basic dla Aplikacji (VBA)

Wykład 2 Składnia języka C# (cz. 1)

Programowanie komputerowe. Zajęcia 3

Metryki. Pomiar złożoności modułowej i międzymodułowej oprogramowania. autor: Zofia Kruczkiewicz

a) 7 b) 19 c) 21 d) 34

Pętle. for, while, do... while, foreach. Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.

Modelowanie procesów współbieżnych

Jak zawsze wyjdziemy od terminologii. While oznacza dopóki, podczas gdy. Pętla while jest

Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych

Algorytmy i struktury danych

Programowanie w języku C++ Grażyna Koba

LibreOffice Calc VBA

Cw.12 JAVAScript w dokumentach HTML

Transkrypt:

Testowanie i walidacja oprogramowania Inżynieria oprogramowania, sem.5 cz. 5 Rok akademicki 2010/2011 Dr inż. Wojciech Koziński Przykład Obliczmy sumę: 0+1+2+...+i, i є [0,100] read(i); if((i < 0)(i > 100)) error(); else {sum = 0; x = 0; while (x < i) { x = x + 1; if ( i == 10) sum = 1; else sum = sum + x;} print (sum) } TIWO cz. 5 2010/2011 2 Przykład test czar-skrzynkowy Kod programu jest niedostępny!! i = -1 i = 0 i = 1 i = 50 i = 99 i = 100 i = 101 jednakże i = 10 => AWARIA (sum = 1) TIWO cz. 5 2010/2011 3 1

Pojęcia podstawowe (1) Analizowane są szczegóły kodu źródłowego, Projekty testów bazują na strukturze kodu. Ścieżka wykonania: określona sekwencja instrukcji programu, która jest wykonywana przy określonym zestawie danych wejściowych (przypadek testowy), Dla różnych przypadków testowych => różne ścieżki wykonań, Testowanie grafu przepływu instrukcji (ang. control-flow testing): bazuje na kolejści wykonania instrukcji, Testowanie grafu przepływu danych (ang. data-flow testing): bazuje na kolejści operacji na wybranych danych. TIWO cz. 5 2010/2011 4 Pojęcia podstawowe (2) Graf przepływu (instrukcji): abstrakcyjne pojęcie przepływu w formie graficznej. Graf przepływu (danych): abstrakcyjne pojęcie przepływu danych, dla wybranych zmiennych w formie graficznej; rozszerzenie grafu przepływu instrukcji. Grafy przepływu instrukcji, grafy przepływu danych powinny być generowane automatycznie na podstawie kodu. Przypadki testowe projektowane są na podstawie grafów. Pokrycie (ang. coverage): względna liczba instrukcji (lub innych elementów grafu) wykonana podczas testowania, wyznaczana z grafu przepływu instrukcji lub danych. TIWO cz. 5 2010/2011 5 Struktury grafów przepływowych (1) s1 s2 lub s1; s2; p sn s1 s2 sn Sekwencja zdań s1; s2; ; sn Instrukcja warunkowa if (p) s1; else s2 TIWO cz. 5 2010/2011 6 2

Struktury grafów przepływowych (2) s p s p pętla (while do) while (p) do s pętla (do - while ) do s while (p) TIWO cz. 5 2010/2011 7 Struktury grafów przepływowych (3) s1 e1 s1 e2 p s e s2 s2 en sn pętla (for) for (s1: p: s2) do s przełącznik (switch - case) swich (e) {case e1:s1; case e2: s2; }; TIWO cz. 5 2010/2011 8 Testowanie przepływu instrukcji (1) Pokrycie: miara jak dobrze program (moduł) został przetestowany przez określony zbiór testów. Względna liczba węzłów (instrukcji) w grafie przepływów wykonana podczas testowania. Względna liczba krawędzi (przejścia do kolejnej instrukcji) w grafie przepływów wykonana podczas testowania. Pokrycie instrukcji: Każdy węzeł (instrukcja) powinien być wykonany przynajmniej jeden raz. Pokrycie gałęzi: Każda gałąź (przejście do kolejnej instrukcji) powinna być wykonana przynajmniej jeden raz. Różna siła skuteczści dla różnych definicji pokrycia. Specjalne procedury dla testowania pętli. TIWO cz. 5 2010/2011 9 3

Testowanie przepływu instrukcji (2) Ścieżka wykonania to sekwencja węzłów (i łączących je gałęzi) od jedynego węzła początkowego grafu do określonego węzła końcowego grafu. 4 1 2 5 3 6 7 8 TIWO cz. 5 2010/2011 10 Testowanie przepływu instrukcji (3) Zbiór P ścieżek wykonania spełnia kryterium pokrycia instrukcji, wtedy i tylko wtedy, gdy dla każdego węzła n w grafie przepływu instrukcji istnieje przynajmniej jedna ścieżka p w zbiorze P, która zawiera węzeł n. Inaczej: każda instrukcja w programie jest wykonana przynajmniej jeden raz w czasie testowania. Spełnione kryterium => 100% pokrycia instrukcji. Niespełnione kryterium => częściowe pokrycie (<100%). Węzeł początkowy, węzeł końcowy, złączenia są wyłączone z kryterium. Pełne pokrycie instrukcji jest trudne do osiągnięcia w praktyce ze względu na nie wykonywalny kod oraz kompilacje warunkowe. TIWO cz. 5 2010/2011 11 Testowanie przepływu instrukcji (4) Zbiór P ścieżek wykonania spełnia kryterium pokrycia gałęzi, wtedy i tylko wtedy, gdy dla każdej gałęzi e w grafie przepływu instrukcji istnieje przynajmniej jedna ścieżka p w zbiorze P, która zawiera gałąź e. Inaczej: każda gałąź / decyzja (prawda / fałsz, tak / nie) w programie jest wykonana przynajmniej jeden raz w czasie testowania. Spełnione kryterium => 100% pokrycia gałęzi. Całkowite pokrycie gałęzi => zapewnia całkowite pokrycie instrukcji. Zwykle jest konieczna większa liczba testów dla całkowitego pokrycia gałęzi niż całkowitego pokrycia instrukcji. Pokrycie gałęzi jest silniejszym testem niż pokrycie instrukcji. Niespełnione kryterium => częściowe pokrycie (<100%). TIWO cz. 5 2010/2011 12 4

Testowanie przepływu instrukcji (5) error() read(i) (i<0) (i>100) sum=0;x=0 i= -1 i= 0 i= 1 i= 50 i= 99 i= 100 i= 101 print(sum) x<i sum=1 x=x+1 i==10 sum=sum+x Pokrycie instrukcji 9 / 10 = 90% Pokrycie gałęzi 13 / 15 = 87% Nie wykona!!! TIWO cz. 5 2010/2011 13 Testowanie przepływu instrukcji (6) read(i) (i<0) i= -1 i= 1 i= 10 (i>100) error() sum=0;x=0 print(sum) x<i sum=1 x=x+1 i==10 sum=sum+x Pokrycie instrukcji 10 / 10 = 100% Pokrycie gałęzi 15 / 15 = 100% TIWO cz. 5 2010/2011 14 pokrycie instrukcji pokrycie gałęzi (1) Obliczmy sumę: 0+1+2+...+i, i є [0,100] read(i); if((i < 0)(i > 100)) error(); else {sum = 0; x = 0; while (x < i) { x = x + 1; if ( i <> 10) sum = sum + x;} // zmiana // if ( i == 10) sum = 1; else sum = sum + x;} print (sum) } TIWO cz. 5 2010/2011 15 5

pokrycie instrukcji pokrycie gałęzi (2) read(i) (i<0) (i>100) i= -1 i= 1 error() sum=0;x=0 print(sum) x<i x=x+1 i==10 sum=sum+x Pokrycie instrukcji 10 / 10 = 100% Pokrycie gałęzi 13 / 14 = 93% Nie wykonane!! TIWO cz. 5 2010/2011 16 pokrycie instrukcji pokrycie gałęzi (3) read(i) i= 10 error() (i<0) (i>100) sum=0;x=0 sum = 0 AWARIA!!! x<i x=x+1 print(sum) i==10 sum=sum+x Teraz wykona! TIWO cz. 5 2010/2011 17 Pokrycie warunkowe Zbiór P ścieżek wykonania spełnia kryterium pokrycia warunków, wtedy i tylko wtedy, gdy dla każdego warunku zawierającego predykaty (c 1, c 2,,c n ), c i przyjmuje wartość true () gdy znajduje się w ścieżce p j w zbiorze P oraz c i przyjmuje wartość false () gdy znajduje się w ścieżce p k w zbiorze P dla i,j,k = 1,2,,n. Wewnętrzna struktura predykatów musi być brana pod uwagę: (i<0)(i>100), {true / false} {true / false} Każdy predykat prosty (atomowy) musi być przetestowany oddzielnie. TIWO cz. 5 2010/2011 18 6

Pokrycie wielo-warunkowe Zbiór P ścieżek wykonania spełnia kryterium pokrycia wielo-warunkowego, wtedy i tylko wtedy, gdy dla każdego warunku zawierającego predykaty (c 1, c 2,,c n ), wszystkie możliwe kombinacje ich wartości są realizowane w jednej ze ścieżek p k w zbiorze P dla k = 1,2,,n. Wymaganie silniejsze niż pokrycie warunków. Dla 2 warunków atomowych 4 kombinacje, Dla 3 warunków atomowych 8 kombinacji. TIWO cz. 5 2010/2011 19 Pokrycie wszystkich ścieżek Każda możliwa ścieżka w programie zostanie wykonana. Jest to najsilniejsze kryterium. Zwykle jest nie możliwe do osiągnięcia. Kryterium słabsze - to pokrycie niezależnych ścieżek. Jest o silniejsze niż pokrycie gałęzi. TIWO cz. 5 2010/2011 20 Porównanie kryteriów (1) Kryterium pokrycia instrukcji Kryterium pokrycia gałęzi Kryterium pokrycia warunków Kryterium pokrycia wielo-warunkowego if ((x <> 0) && (z >= 0)) y = z/x (x <> 0) && (z >= 0) y = z/x TIWO cz. 5 2010/2011 21 7

Porównanie kryteriów (2) Pełne spełnienie kryterium pokrycia instrukcji: {x = 1, z = 0} [1 test], Pełne spełnienie kryterium pokrycia gałęzi: {x = 1, z = 0} dla gałęzi oraz {x = 1, z = -1} dla gałęzi. [2 testy], Pełne spełnienie kryterium warunków: {x = 0, z = 0} dla kombinacji (false, true) oraz {x = 1, z = -1} dla kombinacji (true, false). (gałąź jest nie przetestowana!) [2 testy], Pełne spełnienie kryterium wielo-warunkowości: {x = 1, z = 0} dla kombinacji (true, true), {x = 1, z = -1} dla kombinacji (true, false), {x = 0, z = 0} dla kombinacji (false, true), {x = 0, z = -1} dla kombinacji (false, false). [4 testy] TIWO cz. 5 2010/2011 22 Wybór przypadków testowych Dla wybranego kryterium pokrycia i żądanej wartości kryterium, należy zaprojektować przypadki testowe by spełnić zadane warunki. Zbudować graf badanego modułu (należy użyć narzędzia), Wybrać ścieżki, które spełniają kryterium, Dla każdej z wybranych ścieżek, zaprojektować przypadki testowe (wartości zmiennych wejściowych), które spowodują wykonanie odpowiedniej ścieżki. Wykonać test, z wykorzystaniem narzędzia, które oblicza pokrycie, Jeżeli żądana wartość pokrycia nie została osiągnięta, wówczas należy zaprojektować we przypadki testowe. Heurystyka: należy zacząć od końca ścieżki i posuwać się w górę tując napotkane warunki. Analiza tych warunków może prowadzić do wyboru właściwych wartości zmiennych wejściowych. TIWO cz. 5 2010/2011 23 Testowanie pętli (1) Pętle proste Pętle zagnieżdżone Pętle seryjne TIWO cz. 5 2010/2011 24 8

Testowanie pętli (2) Testowanie pętli prostych: 0 iteracji (pętla nie wykonana), minimalna liczba iteracji, minimalna+1 liczba iteracji, typowa liczba iteracji, maksymalna-1 liczba iteracji, maksymalna liczba iteracji, maksymalna+1 liczba iteracji (może być niemożliwe), Pętle z ustaloną liczba iteracji nie poddają się wszystkim sugerowanym testom przykładowo: for (j=0; j<999; j++) { }. Testowanie pętli seryjnych: Jeżeli nie ma przepływu danych między nimi, to należy testować osob jako pętle proste, Jeżeli występuje przepływ danych, to należy testować jako pętle zagnieżdżone (reguły będą później). Testowanie pętli nieustrukturyzowanych (ze skokami): zmienić kod na kod strukturalny. TIWO cz. 5 2010/2011 25 Testowanie pętli (3) Testowanie pętli zagnieżdżonych: możliwa bardzo duża liczba przypadków testowych więc: Pętla (najbardziej) wewnętrzna jest testowana jak pętla prosta, pętla zewnętrzne testowane są minimalna liczbą iteracji. Ustawienie pętli wewnętrznej by wykonywała typową liczbę iteracji. Przetestować pętlę nadrzędną wykorzystując strategie testowania pętli prostej. Pętle zewnętrzne wykonywane są minimalną liczbę razy. Powtarzać poprzednie dwa etapy, aż osiągnięta zostanie pętla zewnętrzna. Powtórzyć test z maksymalnymi liczbami iteracji dla wszystkich zagnieżdżonych pętli. TIWO cz. 5 2010/2011 26 Testowanie przepływu danych (1) Zdarzenia dotyczące poszczególnych zmiennych: d (defined): zmienna otrzymuje wartość za pomocą instrukcji przypisania, zainicjowania, instrukcji wejścia, k (killed): wartość zmiennej staje się nieokreślona (brak referencji, NaN), u (used) zmienna została użyta w: c (computation) obliczeniach, zwykle po prawej stronie, p (predicate) w warunku sterującym kolejścią wykonywania instrukcji. TIWO cz. 5 2010/2011 27 9

Testowanie przepływu danych (2) Przypadki przepływu danych: ;x:=1; y:=y+10; read(z); z:=x+y+z; d u dd: podejrzane, może być nieszkodliwe x:=1; x:=2; dk: prawdopodobnie błąd. Zmienna zdefiniowana lecz nie użyta. du: przypadek rmalny, zmienna zdefiniowana i użyta, kd: przypadek rmalny, zmienna zniszczona i pownie zdefiniowana, kk: przypadek nieszkodliwy, lecz pewnie błędny po co niszczyć zmienna dwa razy? ku: błąd. Zmienna zniszczona nie może być użyta. TIWO cz. 5 2010/2011 28 Testowanie przepływu danych (3) ud: przypadek rmalny y:=x+1; x:=x+1; uk: przypadek rmalny, uu: przypadek rmalny y:=x+x; -d: przypadek rmalny, -k: prawdopodobnie błąd, zmienna niszczona lecz nie była wcześniej użyta, -u: prawdopodobnie błąd, zmienna użyta bez nadania jej wartości, d-: podejrzane, po co definiować zmienną, która nie została użyta, k-: przypadek rmalny, u-: przypadek rmalny, jednakże dla zmiennych dynamicznych, powinna być zwolniona pamięć. TIWO cz. 5 2010/2011 29 Testowanie przepływu danych (4) Metody testowania Zbudowanie grafu przepływu danych z adtacjami dotyczącymi wybranej zmiennej, Adtacje, umieszczenie przy każdym węźle symboli d, k, c, p, u. Różne sposoby oceny pokrycia, jak sekwencje d, k, c, p, u są wykonywane podczas przebiegów testowych. Testy przepływu danych są silniejsze niż testy przepływów. TIWO cz. 5 2010/2011 30 10

Testowanie przepływu danych (4) Ścieżka bez definicji ze względu na zmienną x, to ścieżka w której nie występuje operacja (d) definiowania wartości zmiennej. Definicja (d) wartości zmiennej x w węźle n osiąga węzeł v z użyciem tej zmiennej (u, c, p), wtedy i tylko wtedy, gdy istnieje ścieżka przez węzły (n,w 1,w 2,,w m,v) od n do v nie zawierająca definicji zmiennej x. = x x = x = x = x d u(p) u(c) u(c) TIWO cz. 5 2010/2011 31 Kryteria przepływu danych (4) Zbiór ścieżek P spełnia kryterium wszystkich definicji (ang. all-definitions criterion) (ze względu na zmienną x), wtedy i tylko wtedy, gdy dla każdej definicji (d) zmiennej x, istnieje przynajmniej jedna ścieżka w zbiorze P, która dociera do użycia (u, c, p) zmiennej x. Zbiór ścieżek P spełnia kryterium wszystkich zastosowań (ang. all-uses criterion) (ze względu na zmienną x), wtedy i tylko wtedy, gdy dla każdej definicji (d) zmiennej x i dla wszystkich użyć zmiennej x, istnieje przynajmniej jedna ścieżka w zbiorze P, która dociera do użycia (u, c, p) zmiennej x wychodząc z definicji d. TIWO cz. 5 2010/2011 32 Przykład (1) Obliczmy sumę: 0+1+2+...+i, i є [0,100] read(i); if((i < 0)(i > 100)) error(); else {sum = 0; x = 0; while (x < i) { x = x + 1; if ( (i==1)(i == 10)) sum = 1; else sum = sum + x;} print (sum) } Wybra zmienną sum do analizy. TIWO cz. 5 2010/2011 33 11

Przykład (2) read(i) (i<0) (i>100) d error() sum=0;x=0 x<i c print(sum) d x=x+1 (i==1) (i==10) cd i= 1 i= 2. 100% pokrycia dla kryterium wszystkich zastosowań sum=1 sum=sum+x TIWO cz. 5 2010/2011 34 Przykład (3) read(i) (i<0) (i>100) d error() sum=0;x=0 x<i c print(sum) d sum=1 x=x+1 (i==1) (i==10) sum=sum+x cd i= 1 i= 2. <100% pokrycia dla kryterium wszystkich zastosowań (użyć) i = 0 TIWO cz. 5 2010/2011 35 Porównanie testów biało- i czar-skrzynkowych Testy biało-skrzynkowe Potencjalnie nieskończenie wielka liczba testów do otrzymania zadowalającego pokrycia, Testowanie tego co zostało napisane, a nie tego co miało być napisane, Nie wykrywa brakujących funkcjonalści. Testy czar-skrzynkowe Kombinatoryczny wybuch liczby testów, Czasem nieczytelna (trudna) diagstyka usterki, Brak możliwości wykrycia dodatkowych ukrytych funkcjonalści. Oba rodzaje testów są niezbędne, Stawią one ekstrema sposobów testowania. Wybór sposobów testowania zależy od: Liczby możliwych, logicznych ścieżek wykonań, Rodzaju danych, Mocy obliczeniowej, Rodzaju i stopnia skomplikowania algorytmów i struktur danych TIWO cz. 5 2010/2011 36 12