Tema - Referat Laborator Testare Si Verificare

15
Testare și verificare BADEA VALENTINA INGINERIE SOFTWARE GRUPA 506

description

Tema pentru laboratorul cursului Testare si Verificare, anul 2 Master IS

Transcript of Tema - Referat Laborator Testare Si Verificare

  • Testare i verificare

    BADEA VALENTINAINGINERIE SOFTWARE

    GRUPA 506

  • 1. Specificaiile problemei

    S se implementeze un program care primete la intrare:

    un numr ntreg size, nenul

    un vector v de lungime size, cu numere ntregi nenule

    o numr ntreg key, nenul Programul returneaz true dac toate elementele vectorului v sunt mai mari

    dect valoarea key (key >= 0) sau false n caz contrar.

    2. Testare Funcional

    Partiionare de echivalen

    Domeniul de intrri

    Exist 3 intrari: - un intreg size - un vector de intregi vector cu size elemente - un intreg key Pentru size, dimensiunea lui vector, se disting 4 clase de echivalenta:

    S_1 = {size | size == 0 } S_2 = {size | size > 0 & size != vector.length} S_3 = {size | size > 0 & size == vector.length} Pentru vectorul vector, se disting 2 clase de echivalenta:

    V_1 = {vector | vector nu este sortat } V_2 = {vector | vector este sortat }

  • Domeniul de iesiri

    Exista doua raspunsuri posibile :

    false (niciun element al vectorului nu e mai mare decat key ) true (toate elementele vectorului sunt mai mari decat key ) Astfel, domeniul de iesiri se imparte in doua clase de echivalenta :

    K_1(key) = { key | key e mai mare decat toate elementele lui vector } K_2(key) = { key | exista elemente in vector care sunt mai mari decat key}

    Clase de echivalenta globale : C_1 = {(vector , size, key) | size in S_1} C_2 = {(vector , size, key) | size in S_2}C_131 = { (vector , size, key) | vector in V_1, size in S_3, key in K_1 }C_132 = { (vector , size, key) | vector in V_1, size in S_3, key in K_2 }C_231 = { (vector , size, key) | vector in V_2, size in S_3, key in K_1 }C_232 = { (vector , size, key) | vector in V_2, size in S_3, key in K_2 }

  • Date de test: T_1 = {{31, 8, 45, 90}, 0, 80} T_2 = {{31, 8, 45, 90}, 8, 80} T_131 = {{31, 8, 45, 90}, 4, 91} T_132 = {{31, 8, 45, 90}, 4, 80} T_231 = {{31, 31, 45, 90}, 4, 91} T_232 = {{31, 31, 45, 90}, 4, 80}

    Analiza valorilor de frontiera

    Valorile de frontiera valoarea parametrului size este 0 valoarea parametrului size e diferit de numarul elementelor din vector vectorul este sortat (in acest caz nu este nevoie sa parcurgem vectorul

    pentru a lua o decizie)

    Date de intrare Raspuns

    T_1 Conditions not met. Parameter size should be greater than 0.

    T_2 Conditions not met. Parameter size is not equal to vector length.

    T_131 Value 91 is greater than any vector element.T_132 Conditions not met. At least one vector element

    is equal or greater than 80T_231 Value 91 is greater than any vector element.T_232 Conditions not met. At least one vector element

    is equal or greater than 80

  • Partitionarea in categorii Descompunerea in unitati:

    public boolean checkIfSorted(int[] vector) public boolean ascending(int[] vector) public boolean descending(int[] vector) public boolean solve()

    checkIfSorted(int[] vector)

    1. Categorii: vector sortat sau nesortat

    2. Alternative: vector sortat vector nesortat

    Urmatoarele date pentru testare se folosesc pentru aceasta unitate:

    T_1 = {1,3,5,7}

    T_2 = {41,52,15,7}

    ascending(int[] vector)

    1. Categorii: vector sortat sau nesortat

    2. Alternative: vector sortat crescator vector sortat descrescator vector nesortat

    Urmatoarele date pentru testare se folosesc pentru aceasta unitate:

    T_1 ={1,3,5,7}

    T_2 = {32, 27, 25, 25, 3, 3, 1}

    Date de test Raspuns

    T_1 TRUE

    T_2 FALSE

  • T_3 = {1,52,5,7}

    descending(int[] vector)

    1. Categorii: vector sortat sau nesortat

    2. Alternative: vector sortat descrescator vector sortat crescator vector nesortat

    Urmatoarele date pentru testare se folosesc pentru aceasta unitate:

    T_1 = {41,32,15,7}

    T_2 = {1,3,5,7}

    T_3 = {1,52,5,7}

    solve()

    1. Categorii: vector sortat sau nesortat size egal cu lungimea vectorului sau nu key mai mare decat toate elementele vectorului sau nu

    2. Alternative: 1. vector sortat crescator 2. vector sortat descrescator 3. vector nesortat

    Date de test Raspuns

    T_1 TRUE

    T_2 FALSE

    T_3 FALSE

    Date de test Raspuns

    T_1 TRUE

    T_2 FALSE

    T_3 FALSE

  • 1. size = 0 2. size > 0 & size != vector.length 3. size > 0 & size == vector.length

    1. key: mai mare decat toate elementele vectorului 2. key: mai mic sau egal decat cel putin un element al vectorului

    Rezulta 2 * 4 * 2 = 16 teste, dar putem elimita unele dintre ele (de exemplu in cazul in care size = 0 un singur test este de ajuns).

    T_1 = {{31, 8, 45, 90}, 0, 80} T_2 = {{31, 8, 45, 90}, 8, 80} T_131 = {{31, 31, 45, 90}, 4, 91} T_132 = {{31, 31, 45, 90}, 4, 80} T_231 = {{31, 31, 25, 9}, 4, 80} T_232 = {{31, 31, 25, 9}, 4, 9} T_331 = {{31, 8, 45, 90}, 4, 91} T_332 = {{31, 8, 45, 90}, 4, 80}

    Date de test Raspuns

    T_1 Conditions not met. Parameter size should be greater than 0.

    T_2 Conditions not met. Parameter size is not equal to vector length.

    T_131 Value 91 is greater than any vector element.

    T_132 Conditions not met. At least one vector element is equal or greater than 80

    T_231 Value 80 is greater than any vector element.

    T_232 Conditions not met. At least one vector element is equal or greater than 9

    T_331 Value 91 is greater than any vector element.

    T_332 Conditions not met. At least one vector element is equal or greater than 80

  • 3. Testare structurala

    Programul

    public boolean solve(){ 1: int size = this.size; 2: int key = this.key; 3: int[] vector = new int[size]; 4: if (size = key){ 14: setMessage("Conditions not met. At least one vector element is equal or greater than " + key); 15: return false; } } 16: setMessage("Value " + key + " is greater than any vector element."); 17: return true; } 18: if (ascending(vector) == true){ 19: if (vector[size - 1] >= key){ 20: setMessage("Conditions not met. At least one vector element is equal or greater than " + key); 21: return false; } 22: setMessage("Value " + key + " is greater than any vector element."); 23: return true; } 24: if (descending(vector) == true) { 25: if (vector[0] >= key){

  • 26: setMessage("Conditions not met. At least one vector element is equal or greater than " + key); 27: return false; } } 28: setMessage("Value " + key + " is greater than any vector element."); 29: return true; } Graful pentru program:

    Acoperirea la nivel de instructiune: Pentru a parcurge toate instructiunile cel putin o data e necesara rularea de teste cu datele urmatoare:

    T_1 = {{31, 8, 45, 90}, 0, 80} T_2 = {{31, 8, 45, 90}, 8, 80} T_131 = {{31, 31, 45, 90}, 4, 91} T_132 = {{31, 31, 45, 90}, 4, 80} T_231 = {{31, 31, 25, 9}, 4, 80} T_232 = {{31, 31, 25, 9}, 4, 9} T_331 = {{31, 8, 45, 90}, 4, 91} T_332 = {{31, 8, 45, 90}, 4, 80}

  • Acoperirea la nivel de ramuri:

    Instructiuni care duc la crearea de ramuri:

    Acoperirea la nivel de conditii:

    Date de test Raspuns

    T_1 Conditions not met. Parameter size should be greater than 0.

    T_2 Conditions not met. Parameter size is not equal to vector length.

    T_131 Value 91 is greater than any vector element.

    T_132 Conditions not met. At least one vector element is equal or greater than 80

    T_231 Value 80 is greater than any vector element.

    T_232 Conditions not met. At least one vector element is equal or greater than 9

    T_331 Value 91 is greater than any vector element.

    T_332 Conditions not met. At least one vector element is equal or greater than 80

    if (size = key)if (ascending(vector) == true)if (vector[size - 1] >= key)if (descending(vector) == true)if (vector[0] >= key)

  • 4. Complexitatea programului

    Complexitatea ciclomatica (calculata folosing formula lui McCabe): Initial graful are 28 de muchii. Deoarece graful nu este complet conectat trebuie sa adaugam urmatoarele arcuri: 6 -> 1 9 -> 1 15 -> 1 17 -> 1 21 -> 1 23 -> 1 27 -> 1 19 -> 1 V(G) = E - N + 1 unde, E = numarul de muchii, N = numarul de noduri V(G) = (28 + 8) - 27 + 1 = 10 Circuite independente:

    1,4,5,6,1

    if (size = keyif (ascending(vector) == true) ascending(vector) == trueif (vector[size - 1] >= key) vector[size - 1] >= keyif(descending(vector) == true) descending(vector) == trueif (vector[0] >= key) vector[0] >= key

  • 1,4,7,8,9,1

    1,4,7,10,11,12,16,17,1

    1,4,7,10,11,12,13,12,16,17,1

    1,4,7,10,11,12,13,14,15,1

    1,4,7,10,11,18,19,20,21,1

    1,4,7,10,11,18,19,22,23,1

    1,4,7,10,11,18,24,25,26,27,1

    1,4,7,10,11,18,24,25,28,29,1

    1,4,7,10,11,18,24,28,29,1

    5. Set de teste pentru acoperirea la nivel de cale

    Pentru a testa la nivel de cale se poate folosi tehnica care descrie nodurile grafului folosind o expresie regulata. Pentru acest graf se obtine urmatoarea expresie: 1.2.3.4.(5.6 + 7.(8.9 + 10.11.(((12.13)(plus).(12.16.17 + 14.15)) + 18.(19.(20.21 + 22.23 ) + 24.(25.(26.27 + 28.29 ) + 28.29)))))

    Numarul de cai posibile: 1: 1.4.5.6 2: 1.4.7.8.9

  • 3: 1.4.7.10.11.(12.13)(plus).12.16.17 4: 1.4.7.10.11.(12.13)(plus).14.15 5: 1.4.7.10.11.18.19.20.21 6: 1.4.7.10.11.18.19.22.23 7: 1.4.7.10.11.18.24.25.26.27 8: 1.4.7.10.11.18.24.25.28.29

    Date de Test: T_1 = {{2 ,4,6,7}, 0, 90} T_2 = {{2 ,4,6,7}, 8, 90} T_3 = {{2 ,41, 16, 7}, 4, 90} T_4 = {{2 ,41, 16, 7}, 4, 9} T_5 = {{2 ,41, 64, 70}, 4, 10} T_6 = {{2 ,41, 64, 70}, 4, 90} T_7 ={{29 ,14, 6, 2}, 4, 9} T_8 = {{29 ,14, 6, 2}, 4, 90}

    Date de test Raspuns

    T_1 Conditions not met. Parameter size should be greater than 0.

    T_2 Conditions not met. Parameter size is not equal to vector length.

    T_3 Value 90 is greater than any vector element.

    T_4 Conditions not met. At least one vector element is equal or greater than 9

    T_5 Conditions not met. At least one vector element is equal or greater than 10

    T_6 Value 90 is greater than any vector element.

    T_7 Conditions not met. At least one vector element is equal or greater than 9

    T_8 Value 90 is greater than any vector element.

  • 6. Generator de mutanti (Pit pentru Eclipse)

    S-a folosit plugin-ul Pitclipse pentru eclipse:

    S-au generat 67 de mutanti dintre care testele existente au omorat 54. Am ales doi dintre mutantii care au supravietuit pentru a crea teste care sa ii omoare: - un mutant care schimba if (vector[i-1] - vector[i] > 0) in if (vector[i-1] - vector[i] >= 0)

    (conditional boundary) - un mutant care schimba if (vector[i-1] < vector[i]) in if (vector[i-1]

  • Cei doi mutanti au fost omorati prin adaugarea de teste si la urmatarea rulare a utilitarului Pit s-au obtinut urmatoarele rezultate: