Sunteți pe pagina 1din 12

Proiect individual

Cerinta : Se da un nr n intre 0-20, un vector v de n elemente, un nr x intre 10-30 si un parametru p/i


(par/ impar). Sa se afiseze cati divizori pari sau impari de-ai lui x se afla in vectorul v.
1. (a) partiționare în clase de echivalenţă

Domeniul de intrari:
Exista 4 intrari:
 un intreg pozitiv n
 un vector de intregi v
 numarul pentru care caut divizori: x
 optiune de a cauta divizori pari sau impari: p

 n trebuie sa fie intre 1 si 20, deci se disting 3 clase de echivalenta:

N_1 = 1..20
N_2 = { n | n < 1 }
N_3 = { n | n > 20 }

 intregul n determina lungimea vectorului, deci nu determina clase suplimentare

 x trebuie sa fie intre 10 si 30, deci se disting 3 clase de echivalenta:

X_1 = 10..30
X_2 = { x | x < 10 }
X_3 = { x | x > 30 }

 optiunea de a cauta divizori pari sau impari este binara, deci se distring 2 clase de echivalenta

P_1 = { p }
P_2 = { i }

Clasele de echivalenta pentru intregul program se pot obtine ca o combinatie a claselor individuale:

C_111 = { ( n , v , x , p ) | n in N_1, |v| = n, x in X_1, p in P_1 }


C_112 = { ( n , v , x , p ) | n in N_1, |v| = n, x in X_1, p in P_2 }
C_12 = { ( n , v , x , p ) | n in N_1, |v| = n, x in X_2 }
C_13 = { ( n , v , x , p ) | n in N_1, |v| = n, x in X_3 }
C_2 = { ( n , v , x , p ) | n in N_2 }
C_3 = { ( n , v , x , p ) | n in N_3 }
Setul de date de test se alcatuieste alegandu-se o valoare a intrarilor pentru fiecare clasa de echivalenta.
De exemplu:

C_111 : (4 , [1,2,3,4] , 16 , ’p’ )


C_112 : (6 , [1,5,15,45,10,12] , 15 , ’i’ )
C_12 : (5 , [1,2,3,4,5] , 9 ,’p’)
C_13 : (5, [1,2,3,4,5] , 35 , ’p’)
C_2 : (0 , [] , 17 , ’p’)
C_3 : (22, [1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,0,1,2,3], 17, ’i’)

6 clase

Intrari
Rezultat afisat
n v x p
“N trebuie sa fie mai mare decat 0 si mai
0 mic sau egal cu 20”
“N trebuie sa fie mai mare decat 0 si mai
22 mic sau egal cu 20”
4 [1,2,3,4] 16 'p' Afiseaza 2.
6 [1,5,15,45,10,12] 15 'i' Afiseaza 3.
“X trebuie sa fie mai mare decat 10 si mai
5 [1,2,3,4,5] 9 'p' mic sau egal cu 30”
“X trebuie sa fie mai mare decat 10 si mai
5 [1,2,3,4,5] 35 'p' mic sau egal cu 30”

1. (b) analiza valorilor de frontiera

Odata ce au fost identificate clasele, valorile de frontiera sunt usor de identificat:

 Valorile 0, 1, 20, 21 pentru n


 Valorile 9, 10, 30, 31 pentru x
 Valorile 0 si 20 pentru numarul de divizori ce pot fi gasiti pentru x

Deci se vor testa urmatoarele valori:

 N_1 : 1, 20
 N_2 : 0
 N_3 : 21

 X_1 : 10, 30
 X_2 : 9
 X_3: 31
 C_1 : c_11 are 0 divizori, c_12 are 20 divizori

 Pentru restul claselor se ia cate o valoare (arbitrara)

C_111:

(1 , [4] , 10 , ’p’ ) ,

(1 , [4] , 30 , ’p’) ,

(20 , [3,5,7,9,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41,43] , 10 ‚’p’) ,

(20, [2,10,2,10,2,10,2,10,2,10,2,10,2,10,2,10,2,10,2,10] , 10 , ’p’) ,

(20 , [1,7,17,13,1,7,17,13,1,7,17,13,1,7,17,13,1,7,17,13] , 30 , ’p’),

(20, [2,6,10,2,6,10,2,6,10,2,6,10,2,6,10,2,6,10,2,6] , 30 , ’p’)

C_112:

(1 , [4] , 10 , ’i’ ) ,

(1 , [4] , 30 , ’i’) ,

(20 , [3,8,7,9,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41,4] , 10 ‚’i’) ,

(20, [1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5] , 10 , ’i’) ,

(20 , [2,4,6,8,10,12,14,16,18,20,2,4,6,8,10,12,14,16,18,20}] , 30 , ’i’),

(20 , [1,5,15,1,5,15,1,5,15,1,5,15,1,5,15,1,5,15,1,5] , 30 , ’i’)

C_12:

(1 , [4] , 9 , ’p’ ) ,

(20 , [1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,1,2] , 9 , ’p’ ) ,

C_13:

(1 , [4] , 31 , ’p’ ),

(20 , [1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,1,2] , 31 , ’p’ )


C_2:

(0 , [] , 12 , ’p’ )

C_3:

(21 , [1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,1,2,3] , 12 , ’p’ )

Intrari
n v x p
1 [4] 10 'p'
1 [4] 30 'p'
20 [3,5,7,9,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41,43] 10 'p'
20 [2,10,2,10,2,10,2,10,2,10,2,10,2,10,2,10,2,10,2,10] 10 'p'
20 [1,7,17,13,1,7,17,13,1,7,17,13,1,7,17,13,1,7,17,13] 30 'p'
20 [2,6,10,2,6,10,2,6,10,2,6,10,2,6,10,2,6,10,2,6] 30 'p'
1 [4] 10 'i'
1 [4] 30 'i'
20 [3,8,7,9,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41,4] 10 'i'
20 [1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5] 10 'i'
20 [2,4,6,8,10,12,14,16,18,20,2,4,6,8,10,12,14,16,18,20] 30 'i'
20 [1,5,15,1,5,15,1,5,15,1,5,15,1,5,15,1,5,15,1,5] 30 'i'
1 [4] 9 'p'
20 [1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,1,2] 9 'p'
1 [4] 31 'p'
20 [1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,1,2] 31 'p'
0 [] 12 'p'
21 [1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,1,2] 12 'p'

1. (c) partitionarea in categorii

Pasi:
1. Descompune specificatia functionala in unitati ( programe, functii etc.) care pot fi testate separat : avem o
singura unitate
2. Identifica parametrii: n, v, x, p
3. Gaseste categorii:
 n: daca este in intervalul valid 1..20
 v: daca este de lungime minima, medie sau intermediara
 x: daca este in intervalul valid: 10..30
 p: daca este ’p’ sau ’i’

4. Partitioneaza fiecare categorie in alternative:

 n: <0, 0, 1, 2..19, 20, 21, >21


 v: lungime minima, maxima sau intermediara
 x: <9, 9, 10, 11..29, 30, 31, >31
 p: p,i

5. Scrie specificatia de testare

 n
1) {n|n<0}
2) 0
3) 1 [ok, lungime1]
4) 2..19 [ok, lungime_medie]
5) 20 [ok, lungime20]
6) 21
7) { n | n > 21 }

 v

1) { v | |v| = 1} [if ok and lungime1]


2) { v| 1 < |v| < 1} [if ok and lungime_medie]
3) { v | |v| = 20} [if ok and lungime20]

 x
1) {x|x<9}
2) 9
3) 10 [ok, lungime1]
4) 11..09 [ok, lungime_medie]
5) 30 [ok, lungime20]
6) 31
7) { x | x > 31 }
Din specificatia de testare ar trebui sa rezulte 7 * 3 * 7 * 2 = 294 de cazuri de testare. Pe de alta parte, unele
combinatii de alternative nu au sens si pot fi eliminate. Acest lucru se poate face adaugand constrangeri acestor
alternative. Constrangerile pot fi fie proprietati ale alternativelor fie conditii de selectie bazate pe aceste proprietati. In
acest caz, alternativele vor fi combinate doar daca conditiile de selectie sunt satisfacute. Folosind acest procedeu, in
exemplul nostru vom reduce numarul cazurilor de testare la 34.

6. Creeaza cazuri de testare

n1
n2
n3v1x1
n3v1x2
n3v1x3p1
n3v1x3p2
n3v1x4p1
n3v1x4p2
n3v1x5p1
n3v1x5p2
n3v1x6
n3v1x7
n4v2x1
n4v2x2
n4v2x3p1
n4v2x3p2
n4v2x4p1
n4v2x4p2
n4v2x5p1
n4v2x5p2
n4v2x6
n4v2x7
n5v3x1
n5v3x2
n5v3x3p1
n5v3x3p2
n5v3x4p1
n5v3x4p2
n5v3x5p1
n5v3x5p2
n5v3x6
n5v3x7
n6
n7
7. Creeaza date de test

Intrari
n v x p
-1
0
21
23
1 [4] 5 'p'
1 [4] 9 'p'
1 [5] 10 'p'
1 [2] 10 'i'
1 [5] 16 'p'
1 [5] 16 'i'
1 [5] 30 'p'
1 [2] 30 'i'
1 [4] 31 'p'
1 [4] 37 'p'
4 [4,5,6,7] 5 'p'
4 [4,5,6,7] 9 'p'
4 [5,7,9,11] 10 'p'
4 [2,7,9,11] 10 'i'
4 [5,7,9,11] 16 'p'
4 [5,6,7,11] 16 'i'
4 [5,7,8,11] 30 'p'
4 [2,6,7,11] 30 'i'
4 [4,5,6,7] 31 'p'
4 [4,5,6,7] 37 'p'
20 [18,36,54,72,90,18,36,54,72,90,18,36,54,72,90,18,36,54,72,90] 5 'p'
20 [18,36,54,72,90,18,36,54,72,90,18,36,54,72,90,18,36,54,72,90] 9 'p'
20 [1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5] 10 'p'
20 [1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5] 10 'i'
20 [18,36,54,72,90,18,36,54,72,90,18,36,54,72,90,18,36,54,72,90] 17 'p'
20 [18,36,54,72,90,18,36,54,72,90,18,36,54,72,90,18,36,54,72,90] 17 'i'
20 [18,36,54,72,90,18,36,54,72,90,18,36,54,72,90,18,36,54,72,90] 30 'p'
20 [18,36,54,72,90,18,36,54,72,90,18,36,54,72,90,18,36,54,72,90] 30 'i'
20 [18,36,54,72,90,18,36,54,72,90,18,36,54,72,90,18,36,54,72,90] 31 'p'
20 [18,36,54,72,90,18,36,54,72,90,18,36,54,72,90,18,36,54,72,90] 37 'p'
Nota: O alta categorie poate fi considerata numarul de divizori pe care ii are numarul x in vectorul v. Aceasta
categorie poate fi adaugata celor existente.

2.

public class MyClass {

public int divizori(int n, int[] v, int x, char p) {

// the following is just an example

1 if (n <= 0 || n > 20) {

2 throw new IllegalArgumentException("N trebuie sa fie mai mare decat 0 si mai mic sau egal cu 20");

3 if (n != v.length) {

4 throw new IllegalArgumentException("Dimensiunea vectorului trebuie sa fie N.");

5 if (x < 10 || x > 30) {

6 throw new IllegalArgumentException("X trebuie sa fie mai mare decat 10 si mai mic sau egal cu 30");

7 if (p != 'p' && p != 'i') {

8 throw new IllegalArgumentException("P trebuie sa fie p-par sau i-impar");

int num = 0; /**numarul de divizori*/

9 for (int i = 0; i < n; i++) {

10 if (p == 'p') {

11 if (x % v[i] == 0 && v[i] % 2 == 0) /**daca v[i] este divizor par*/

12 num++;

}
13 else

14 if (x % v[i] == 0 && v[i] % 2 == 1) /**daca v[i] este divizor impar*/

15 num++;

16 return num;

}
Statement Coverage
Intrari
Rezultat afisat Instructiuni parcurse
n v x p
0 [] 15 'p' 1,2
1 [3,4] 15 'p' 1,3,4
1 [3] 9 'p' 1,3,5,6
1 [3] 15 's' 1,3,5,7,8
1 [10] 20 'p' 1,3,5,7,9,10,11,12,9,16
1 [9] 18 'i' 1,3,5,7,9,10,13,14,15,9,16

Decision Coverage

Intrari Instructiuni
Rezultat afisat
n v x p parcurse
"N trebuie sa fie mai mare decat 0 si mai mic sau
0 [] 15 'p' egal cu 20"
1 [3,4] 15 'p' "Dimensiunea vectorului trebuie sa fie N."
"X trebuie sa fie mai mare decat 10 si mai mic sau
'p'
1 [3] 9 egal cu 30"
1 [3] 15 's' "P trebuie sa fie p-par sau i-impar"
1 [10] 20 'p' 1
1 [2] 20 'p' 0
1 [9] 18 'i' 1
1 [2] 18 'i' 0

Condition Coverage
Intrari
Rezultat afisat Instructiuni parcurse
n v x p
"N trebuie sa fie mai mare
decat 0 si mai mic sau egal
0 [] 15 'p' cu 20"
[5, 6, 9, 18, 36, 54, 72, 90, 18, 36, "N trebuie sa fie mai mare
54, 72, 90, 18, 36, 54, 72, 90, 18, decat 0 si mai mic sau egal
23 36, 54, 72, 90] 16 'p' cu 20"
4 [2,6,7,11] 30 'i' 0
"Dimensiunea vectorului
'p'
1 [3,4] 15 trebuie sa fie N."
4 [2, 6, 7, 11] 30 'i' 0
"X trebuie sa fie mai mare
decat 10 si mai mic sau egal
1 [3] 9 'p' cu 30"
"X trebuie sa fie mai mare
decat 10 si mai mic sau egal
1 [3] 33 'p' cu 30"
1 [2] 18 'i' 0
4 [2,6,7,11] 30 'i' 0
1 [10] 20 'p' 1
"P trebuie sa fie p-par sau i-
's'
1 [3] 14 impar"
1 [10] 20 'p' 1
1 [10] 20 'p' 1
4 [2, 6, 7, 11] 30 'i' 0
1 [9] 18 'i' 1
1 [4] 18 'p' 0
1 [4] 16 'p' 1
1 [5] 18 'i' 0
1 [4] 16 'p' 1
1 [5] 18 'p' 0
1 [9] 18 'i' 1
1 [4] 18 'p' 0

Decizii Conditii individuale


if(n<=0 || n>20) n<=0, n>20
if(n!= v.length) n!=v.length
if(x<10 || x>30) x<10, x>30
if(p!='p' && p!= 'i') p!='p' , p!='i'
for(int i = 0, i<n , i++) i<n
if(p=='p') p=='p'
if(x%v[i]==0 && v[i]%2==0) x%v[i]==0, v[i]%2==0
if(x%v[i]==0 && v[i]%2==1) x%v[i]==0, v[i]%2==1

3.Formula lui McCabe


V(G) = e – n + 1
e = numarul de muchii = 24
n = numarul de noduri = 16
 V(G) = 24 – 16 +1 = 9
Circuite independente:
1) 1, 2, 3...9, 16, 1
2) 1, 3, 4, 5...9, 16, 1
3) 1, 3, 5, 6, 7, 9, 16, 1
4) 1, 3, 5, 7, 8, 9, 16, 1
5) 1, 3, 5, 7, 9, 16, 1
6) 9, 10, 11, 9
7) 9, 10, 11, 12, 9
8) 9, 10, 13, 14, 9
9) 9, 10, 13, 14, 15, 9

Expresia regulata obtinuta este:


(1.2.3.4.5.6.7.8.9.(10.((11.9)*.12.9)* + ((13.14.9)*.15.9)*)* .16.1)*

Se ia n = 0 si n = 1
(1.1.1.1.1.1.1.1.1.(1.((1.1+null).1.1+null) + ((1.1.1+null).1.1+null) + null).1.1 + null) =
= (1(1(1+1))1)
=2
 Numar de cai = 2

4.Set de test pentru acoperirea la nivel de cale:

Intrari
Rezultat afisat Instructiuni parcurse
n v x p
1 [10] 20 'p' 1 1,3,5,7,9,10,11,12,9,16
1 [9] 18 'i' 1 1,3,5,7,9,10,13,14,15,9,16

5. Folosind generatorul de mutanti, raportul a fost 100%, nu a mai ramas niciun mutant in viata!

S-ar putea să vă placă și