Documente Academic
Documente Profesional
Documente Cultură
CARACTERISTICILE
DE CALITATE
ALE PRODUSELOR PROGRAM
¾ este ierarhizat;
¾ indiferent de complexitatea sa, reprezintă un subsistem al unui sistem de
calitate mai cuprinzător;
¾ caracteristicile sunt ordonate în funcţie de relaţiile de dependenţă;
¾ este organizat sub forma unei structuri arborescente, figura 4.1.
QCS
CC1
CC2
unde:
nprog – numărul de programe;
ncc – numărul de caracteristici de calitate;
xccj – seria de ncc termeni asociate caracteristicii CCj;
xccij – nivelul caracteristicii CCj, măsurată pentru programul Progj;
⎡ ⎞ ⎤⎡
2
⎞ ⎤
2
2 ⎛ 2 ⎛
nprog nprog nprog nprog
⎢nprog ∑ xccij −⎜ ∑ xccij ⎟ ⎥ ⎢nprog ∑ xccil −⎜ ∑ xccil ⎟ ⎥
⎜ ⎟ ⎜ ⎟
⎢⎣ i =1 ⎝ i =1 ⎠ ⎥⎦ ⎢⎣ i =1 ⎝ i −1 ⎠ ⎥⎦
Tabel 4.2
CC1 CC2 CC3 CC4 CC5 CC6
CC1 0,25 0,31 0,40 0,18 0,55
CC2 0,20 0,65 0,28 0,44
CC3 0,80 0,19 0,33
CC4 0,73 0,41
CC5 0,92
CC6
Metode statistice în analiza software
CC5
CC6
CC4
Mentenabilitate
unde:
IQ – indicator agregat al calităţii;
KCC – numărul caracteristicilor de calitate considerate;
α cc i – ponderea asociată caracteristicii de calitate CCi;
pcci – nivelul calculat al caracteristicii de calitate CCi.
unde:
nivelF – nivelul calculat al fiabilităţii;
nivelP – nivelul calculat pentru portabilităţii;
nivelM – nivelul mentenabilităţii.
Produsele software sunt rezultatul unui proces complex, format din etape
care:
analizează şi proiectează;
urmează scrierii textului sursa, testările, asamblarea de module;
preced intrarea în execuţie.
Acestea alcătuiesc ciclul de dezvoltare, şi se constituie în categoriile:
¾ etapa de proiectare: include iniţierea proiectului de realizare a
produsului software, stabilirea criteriilor de calitate software, stabilirea
metodelor de control şi monitorizare a proiectului, alocarea resurselor şi
realizarea proiectului iniţial;
¾ etapa de dezvoltare: odată cu definirea clară a cerinţelor se realizează
eventual un produs program prototip pe baza căruia se ajunge la
produsul final;
Metode statistice în analiza software
definitivă a informaţiei. Cu toate acestea programul există, putând fi activat din nou,
cu riscul repetării evenimentului.
La definirea solicitării se stabilesc o serie de detalii care vizează:
însuşirile tehnice ale programului;
însuşirile economice ale programului;
însuşirile sociale ale acestuia.
În contextul în care prin calitate se înţelege totalitatea însuşirilor tehnice,
economice si sociale cu care este înzestrat un produs, la proiectarea şi dezvoltarea
de software se urmăreşte înzestrarea cu caracteristici care să determine atingerea
obiectivelor propuse.
Însuşirile economice ale produselor software sunt legate în principal de
capacitatea acestuia de a genera efecte directe asupra reducerii costurilor de
producţie în întreprinderi, în gestiunea resurselor, la reducerea ponderii forţei de
muncă umane în etapele de prelucrare şi interpretare a datelor, respectiv, a
rezultatelor.
Latura economica vizează şi modul de fundamentare a deciziilor, atunci
când sunt luate în considerare soluţii oferite prin implementarea de algoritmi
determinişti sau euristici. Aceştia au capacitatea de selectare a variaţiilor eficiente
dintr-un număr extrem de mare de soluţii considerate realizabile.
Însuşirile tehnice privesc produsul software ca entitate cu comportament
specific bazat pe consumuri de resurse. Produsul este caracterizat prin prisma
structurii, funcţionalităţii şi a instrumentelor cu care este înzestrat. Din aceste
puncte de vedere produsul program este:
` uşor de utilizat, dacă utilizatorul nu necesită un curs prealabil de operare
sau foloseşte foarte rar documentaţia sau ajutorul interactiv;
` uşor de întreţinut, ceea ce înseamnă că duratele de timp necesare
îmbunătăţirii programului prin introducerea de noi facilităţi sau setării
parametrilor de lucru, sunt mici;
` mentenabil; volumul modificărilor în software care să repare
eventualele erori sau sa îmbunătăţească performanţele programului este
redus;
` tolerant la erori şi elimină într-o proporţie ridicată şansele apariţiei
situaţiilor care blochează execuţia aplicaţiei cu sau fără pierderea
datelor;
` cu consum mic de resurse, permiţând instalarea şi rularea produsului pe
o gamă largă de platforme hardware şi software;
Metode statistice în analiza software
¾ funcţionalitate:
` completitudine: se referă la gradul în care produsul program
cuprinde funcţiile necesare şi suficiente pentru a satisface cerinţele
utilizatorului;
` corectitudine: precizează gradul în care rezultatele sunt cât mai
apropiate de cele reale;
` securitate: calitatea de a asigura securitatea datelor împotriva
pierderilor de date şi a accesului neautorizat;
` compatibilitate: gradul în care produsul este implementat fără a
modifica major programele software deja existente;
` interoperabilitate: se referă la capacitatea de a comunica cu alte
produse software.
¾ mentenabilitate
` corectare: se referă la efortul depus pentru a corecta erorile
software, precum şi pentru a îndeplini cerinţele utilizatorului;
` dezvoltare: necesarul de resurse pentru a îmbunătăţi produsul.
¾ portabilitate
` independenţa hardware: gradul în care aplicaţia nu depinde de
anumite medii hardware;
` independenţa software: gradul în care aplicaţia nu depinde de medii
software specifice, de exemplu sisteme de operare;
` reutilizare: gradul în care softul este reutilizat în produse diferite de
cel iniţial.
¾ fiabilitatea
` toleranţa erorilor: gradul în care produsul continuă să opereze în
ciuda erorilor fără a afecta utilizatorul;
` disponibilitatea: gradul în care produsul este operaţional având în
vedere defectarea sistemului hardware sau software.
¾ utilizabilitate
` uşurinţa utilizării: reprezintă efortul depus de utilizator pentru a
înţelege şi utiliza produsul.
Portabilitatea software
nut
∑ (Telab i − Tmodif i )
G utiliz
p = i =1
nut
∑ Telab
i =1
i
unde:
nut – numărul de utilizatori, Uti;
Uti – utilizatorul programului;
Telabi – timpul necesar elaborării programului pentru a satisface
cerinţele utilizatorului Uti;
Tmodifi – timpul necesar elaborării de modificări pentru a face programul
existent portabil pentru utilizatorul Uti.
Programul Prog este n – portabil dacă Tmodifi e mult mai mic decât Telabi
pentru oricare ar fi i =1, 2, …, nut. În cazul în care programul Prog este livrat sub
formă de text sursă, utilizatorul are obligaţia realizării tuturor etapelor necesare
obţinerii formei executabile. Programul P are lungimea LI data ca număr de
instrucţiuni. Pentru asigurarea portabilităţii programatorul efectuează următoarele
operaţii:
adaugă LA instrucţiuni;
modifică LM instrucţiuni;
elimină LE instrucţiuni.
Metode statistice în analiza software
LI − (LA + LM + LE )
G instr
p =
LI
Un program este proiectat să fie portabil dacă se doreşte obţinerea unei arii
foarte mari de utilizare.
Portabilitatea ia în considerare multitudinea de parametrii care definesc
configuraţia unui calculator sau a unei reţele de calculatoare. Dacă nu se creează
componenta de instalare, se impune separarea componentelor vulnerabile în raport
cu variabilitatea parametrilor aşa fel încât problematica propagării de modificări
cerute de portabilitate să fie la un nivel cât mai scăzut.
În condiţiile actuale, când circulă pe Internet numeroase componente
software, problematica portabilităţii este deplasată spre identificarea acelor
componente care să fie adăugate programului în cauză, aşa fel încât toate
obstacolele să fie eliminate. Dacă programul este dat sub forma fişierului
executabil de lungime LP, iar programele care sunt identificate pentru a fi utilizate
au lungime LX, gradul de portabilitate G pfis este dat de relaţia:
LP − LX
G pfis =
LP
24 − 4
G pfis = = 0,83
24
Mentenabilitatea software
expr = a + b + c + d;
Metode statistice în analiza software
4
expr = ∑ α i * xi
i =1
unde:
x1 – este pus în corespondenţă cu a;
x2 – este pus în corespondenţă cu b;
x3 – este pus în corespondenţă cu c;
x4 – este pus în corespondenţă cu d.
Pentru:
α1 = α2 = α3 = α4 = 1 rezultă e = a + b + c + d.
α1 = 1, α2 = -1, α3 = 1, α4 = -1 rezultă e = a - b + c - d.
α1 = 1, α2 = 0, α3 = 0, α4 = -1 rezultă e = a - d.
Tmodif
I ment =
Tdezv
unde:
Tmodif – timpul necesar efectuării modificărilor în produsul software
pentru a-l menţine în uz curent;
Tdezv – timpul necesar dezvoltării produsului (analiză, proiectare,
codificare, testare, implementare).
Experienţa arată că dacă 0,6 > Iment > 0,4 se impune luarea deciziei de
înlocuire în viitorul apropiat a produsului întrucât cerinţele viitoare de mentenanţă
vor presupune costuri foarte ridicate.
Dacă în mod constant Iment > 1 înseamnă că produsul nu a fost proiectat
pentru a face faţă unor cerinţe noi. În condiţiile actuale evaluarea mentenanţei pe
text sursă nu se dovedeşte elocventă datorită modalităţilor variate de asigurare a
mentenanţei, inclusiv prin construirea de translatoare care au rolul de a modifica
textele sursă, aducându-le la cerinţele noi impuse de utilizator.
Produsele software dezvoltate după tehnicile pe componente au procese de
mentenanţă reală, cu efort minim de realizare.
Reutilizabilitatea software
LR
GR =
LT
unde:
LR – lungimea ca număr de instrucţiuni sau Kbytes a componentelor
reutilizate, incluse în produsul software considerat;
LT – lungimea totală ca număr de instrucţiuni sau Kbytes a produsului
software în care au fost reutilizate componentele.
362
GR = = 0,31
1150
LRmax − LR
GS =
LT
Modularitatea programelor
n n n n n
∑x i ∑x *y i i ∑x *y i i ∑x * y ∑w * y
i i i i
I1 = i =1
, I2 = i =1
n
, I3 = i =1
n
, I4 = i =1
n
÷ i =1
n
n
∑x
i =1
i ∑x *z
i =1
i i ∑x *z ∑w *z
i =1
i i
i =1
i i
xi − xmin n
µi = , S = ∑ ( poz ( xi ) − poz _ ord ( xi ))
2
xmax − xmin i =1
Modul rădăcină
I1 I2 I3 I4
M1 M9 M2 M1 M9 M2 M2 M9 M2 M2 M9 M2 M2 M9 M9
M1 M1 M1 M1 M1 M1 M1
Modul rădăcină
I3 ui
M5 M6 M2 M1 M9 M3 M4 M7 M7 M6 M8
nmodule
IM =
mmodule
unde:
nmodule – numărul de modele diferite existente în program;
mmodule – numărul total de module folosite în program.
Fiabilitatea software
rsucces
I Fiab =
rtotal
unde:
rsucces – numărul rulărilor de succes ale programului, în care s-au obţinut
rezultate complete şi corecte;
rtotal – numărul total al rulărilor programului considerat.
În acest fel se obţine programul modificat Prog’. Astfel, dacă fiecare utilizator
primeşte noua variantă, procesul fiabilităţii este studiat în continuare pe versiunea
Prog’. Modificările programului continuă pe toată durata, obţinându-se versiunile
Prog(2), Prog(3), …, Prog(k) la finalul perioadei ∆Tut.
Modelele de fiabilitate ale utilajelor sau a elementelor de iluminat sunt
dezvoltate în ipoteza menţinerii nemodificate a structurii acestora, ceea ce în cazul
produselor software nu este posibil.
În acest context este necesară abordarea fiabilităţii evolutive în condiţiile
modificării produsului program Prog cu trecerea prin versiunile Prog(2), Prog(3), …,
Prog(k).
Se ia în considerare variaţia de complexitate software.
Fie un program Prog, având nivelul de complexitate Cplx(Prog).
Pentru trecerea la programul Prog(1) are loc eliminarea secvenţei Se de
instrucţiuni, modificarea secvenţei Sm de instrucţiuni, inserarea secvenţei Sa de
instrucţiuni.
Variaţia de complexitate ∆Cplx, este dată de relaţia:
aria de cuprindere
Flexibilitate extensibilitate
portabilitate
capacitatea de modificare
Corectitudine completitudine
lipsă contradicţii
consistenţă
conformitate
Fiabilitate
stabilitate
integritate
Mentenabilitate structurabilitate
simplitate
autodescriere
uşurinţa asimilării
Utilizabilitate
comoditate în exploatare
complexitatea funcţională
consum de timp
Eficienţă
resurse utilizate
precizia calculelor
Figura 4.5 Modelul ICI al caracteristicilor de calitate
Metode statistice în analiza software
MENTENABILITATE FUNCŢIONALITATE
PORTABILITATE UZABILITATE
void main ( )
{
Un program este simplu dacă are definite variabile de acelaşi tip şi utilizează un
singur tip de operatori. De exemplu programul:
void main ( )
{
static int a, b, c, d;
a++;
b++;
c++;
d++;
}
int a, b, c;
a = b + c;
a + = b + = c + = d *e;
este tratată tot ca o singură instrucţiune, are loc pierderea gradului de omogenitate
a instrucţiunilor.
Dacă se doreşte menţinerea gradului de omogenitate, expresia de atribuire
multiplă este pusă în corespondenţă cu atâtea instrucţiuni, câţi operatori de atribuire
conţine.
În exemplu considerat, expresia este asociată unui număr de trei
instrucţiuni.
Expresia virgulă:
a++, ++b, c = a + b;
if(a>b)
{
x = y * y;
z = w –2;
}
else
{
x++;
z = w *2;
y = x * y;
}
Caracteristicile de calitate ale produselor program
conţine o instrucţiune if şi două blocuri. Primul bloc conţine două instrucţiuni, iar
al doilea bloc conţine trei instrucţiuni. În total secvenţa conţine şase instrucţiuni.
Secvenţa:
if ( a>b ) if (a>c) vb = a;
else vb = c;
else
if(b>c) vb = b;
else
vb = c;
conţine:
o instrucţiune for( );
patru expresii, din care două expresii de atribuire.
Această secvenţă este formată din 5 instrucţiuni.
Se observă modul de descompunere a instrucţiunilor compuse prin luarea
în considerare a ipotezei conform căreia la numărare se includ atât părţile cât şi
întregul.
Astfel, regulile stabilite aici sunt:
¾ o expresie simplă este o instrucţiune;
¾ apelul funcţiei neinclus într-o expresie este o instrucţiune;
¾ apariţia unui cuvânt cheie precum int, float, char, if, for, switch, while,
do, determină contorizarea unei instrucţiuni.
Secvenţa:
void main()
{
int a,b,i;
char x,y;
float r,s,x[5];
a=b=5;
x='c';
y='d';
r=s=3.14159;
if(a>r) b++
else
b--;
if(++a<b) y--;
else
--y;
for(i=0;i<5;i++)
x[i]=i*i+1;
s=x[0]+x[1]+x[2]+x[3]+x[4];
printf("\n %d %d %d",s,b,y);
}
Se consideră indicatorul:
N tipuri
unde:
Ntipuri – numărul tipurilor de categorii ale structurii;
frecvi – frecvenţa de apariţie a categoriilor.
~
C = 3 log2 3 + 3 log2 3 + 10 log2 10 = 41,98
(
C = η (1) fh log 2 η (1) fh + η ( 2) fh log 2 η ( 2 ) fh
∑f i log 2 f i
IC = i =1
, cu IC ∈ [0,1]
⎛ N ⎞ ⎛ N ⎞
⎜ ∑ f i ⎟ log 2 ⎜ ∑ f i ⎟
⎝ i =1 ⎠ ⎝ i =1 ⎠
Caracteristicile de calitate ale produselor program
3 log 2 3 + 13 log 2 13
IC = = 12,9 cu IC ∈ [0,1].
16 log 2 16
Md
nrmodule nivelj
I ( j)
Complex (Proc ) = α nivejl * ∑ I Complex (Proci )
i =1
în care:
αnivelj – ponderea asociată nivelului j din arbore pe care se află
modulul procedurii Proc;
nrmodulenivelj – numărul de module ale nivelului j;
Proc – modulul pentru care se determină valoarea agregată a
complexităţii subarborelui al cărui rădăcină este;
IComplex(Proc) – complexitatea agregată a subarborelui cu rădăcină în
modulul Proc.
Md
Nivel αnivelj
M1 M2 Mp
………….
⎛ nrmodulenivel 2 ⎛ ⎛ nrmodulenivelpniveluri ⎞⎞
( )⎞⎟⎟...⎟⎟ ⎟⎟
nrmodule nivel 1
I (Md ) = α nivel 1 ∑ ⎜
⎜ ∑ ∑ I MdiN
α nivel 2 ⎜
α niveli3 ....α nive lpniveluri ⎜⎜
⎜
i1 =1
⎝ i2 =1 ⎝ ⎝ i N =1 ⎠ ⎠⎠
Modul M1 Nivel 1
Modul M2 Nivel 2
Se defineşte indicatorul:
NProc = pniveluri –1 + QProc
unde:
NProc – numărul de proceduri, noduri, asociate programului considerat;
pniveluri – numărul de niveluri al grafului de normalizare;
QProc – numărul de module aflate pe ultimul nivel.
Metode statistice în analiza software
M1 Nivel 1
M2 Nivel 2
…………. Nivel 3
A1 A2 A3 A10
în ipoteza:
I(Ai) = 1;
I(M1) = 2*I(M2) = 60.
Complexitatea relativă este:
I (M ) 48
IR = = = 0,8
I (M 1 ) 60
ComplexitateMd = nprm I log 2 nprm I + nprm E log 2 nprm E + nprm S log 2 nprm S
unde:
nprmI – numărul parametrilor de intrare;
nprmE – numărul parametrilor de ieşire;
nprmS – numărul parametrilor de stare, care arată cum s-a făcut
prelucrarea.
Caracteristicile de calitate ale produselor program
I2 Instrucţiune simplă; I1
Instrucţiune simplă; I2
I3 Instrucţiune simplă; I3
while
I2 {
(condiţie) I1
Instrucţiune simplă; I2
}
I3 Instrucţiune simplă; I3
I1
Secvenţă de instrucţiuni Instrucţiune
I2
for
I4 (iniţializare contor; I1
condiţie; I2
I3 modificare contor) I3
Instrucţiune simplă; I4
I5 for
(iniţializare contor; I5
I6 ; I6
modificare contor) I7
I8 If
(condiţie) I8
I9 I7 break; I9
Instrucţiune simplă; I10
I10
a+b
expres =
c*d
void main()
{
int vb;
float a,b,c,d,e;
vb=0;
do
{
scanf("%f,%f",&a,&b);
scanf("%f,%f",&c,&d);
if((c!=0)&&(d!=0))
{
e=(a+b)/(c*d);
printf("Rezultatul este: %f", e);
vb=1;
}
else
printf("\n Nu se poate calcula
expresia !");
} while(vb!=1);
}
I1 – iniţializare vb
I2 – scanf( );
I3 – scanf( );
I4 – verificare c = 0
I5 – verificare d = 0
I6 – calcul e I9 - printf( )
I7 – printf( )
I8 – vb = 1
I10 – verificare vb
Dacă se notează:
nnoduri – numărul de noduri din graf ;
marce – numărul de arce din graf;
Pentru graful dat în figura 4.18, există nnoduri = 10 noduri, şi marce = 11 arce,
iar complexitatea în sens McCabe, CMcCabe are valoarea 3. Indicatorul de
complexitate prezentat în [IVAN99] ia în considerare precedenţele.
Clasificarea indicatorilor utilizaţi pentru a măsura complexitatea se face în
funcţie de mai multe criterii.
Caracteristicile de calitate ale produselor program
4.5 Concluzii