Tuesday, November 21, 2017

Complexitatea software

Complexitatea software este unul dintre cele mai frumoase lucruri din ingineria software pe care le-am cunoscut înainte de 1989. Pe când frecventam Biblioteca Americană, tot înainte de 1989 am identificat acolo în niște reviste ceva despre complexitate și despre HALSTEAD. Am comandat acolo cartea lui Maurice Howard Halstead intitulată Software science. Era prin 1979, iar când am fost anunțat de la Biblioteca Americană să merg s-o ridic, a iscat o mică furtună în Catedra de Cibernetică Economică și multor colegi le-au ieșit ochii din orbite când mi s-a transmis mesajul de la rectorat. Am obținut cartea și după ce am citit-o viața mea despre calitatea software în general și despre complexitatea software în special, s-a schimbat la 180 de grade.
Cartea este referită prin 
  • Maurice Howard HALSTEAD - Elements of software science, Elsevier Printing House, New York, 1977, 127 pg.

Se notează:
  n1 - numărul dististinct de operatori,
  n2 - numărul distinct de operanzi,
   C - complexitatea programului,
atunci se scrie formula:

C = n1 log2 n1 + n2 log2 n2

Tot în carte se mai definesc volumul V, dificultatea și efortul E. Gurile rele vorbesc că formula pleacă de la formula entropiei și probabilitățile au fost înlocuite cu frecvențe, lucru despre care bârfitorii l-ar atribui unui anumit matematician, pe care eu n-am stat să verific că lucrurile chiar așa stau. Ceea ce știu este simplu și anume că formula a fost acceptată de informaticieni și că există deja medii online unde se calculează complexitatea pentru programe PASCAL, C++ sau și pentru alte limbaje.
Ecistă o altă modalitate de calcul a complexității cu formula lui McCABE descrisă în articolul referit prin:
  • Thomas McCABE, Charles BUTLER - Design Complexity Measurement and Testing, Communications of the ACM, vol. 32, nr. 12, 1989, 1415-1425 pg.

Complexitatea în sens McCABE este definită prin relația:

C = m-n+2

unde:
C - complexitatea;
m - numarul arcelor din graf;
n - este numarul nodurilor grafului.
Acum nu există nicio dificultate ca un program să citească un alt program scris în C++ sau PASCAL să identifice nodurile și arcele unui graf asociat programului ++ sau PASCAL și să calculeze acea complexitate, care se mai numește și numărul ciclomatic al grafului.În articolul referit prin: 
  • Ion IVAN,  Doru CAZAN, Paul POCATILU - Evaluarea performantei sistemelor informatice, Revista Informatica Economica, vol. 4, nr. 3, 2000, pg. 57 - 60 sunt tratate cele două modele dar și modelul COCOMO.

Mai sunt și alte modele, dar acestea două sunt mai des folosite, deși achizițiile de adte invită pentru OOP să se construiască alte zeci și zeci de modele de calcul pentru complexitatea de programe. Complexitatea software este o zonă extrem de interesantă ce trebuie explorată căci toate estimările pentru metrici pornesc de la complexitatea programelor. Costurile unor produse software, nivelurile de salarii care se plătesc pentru unele produse software, duratele de realizare ale produselor software se estimează plecând de la complexitatea, de asemenea, estimată a respectivelor produse software.
Pentru expresia:
e=a+b-c/d*f
numărul de operanzi este n2=6, numărul de operatori este n1=5, iar complexitatea este
C = 5 log2 5 + 6 log2 6 = 5 * 2.32 + 6 * 2.58 = 27,8
În textele programelor apar operatori precum IF(), FOR(), THEN, ELSE, DO---UNTIL, WHILE--DO, CALL(), RETURN, GO TO, SWITCH() care intră în calcule normal fa stabilirea de drecvențe pentru varianila n1.







(21 noiembrie 2017)

No comments:

Post a Comment