OPTIMIZARI
Conveptul de optimicare a programelor
Criterii de optim
Optimicari pe text sursa
Maximizarea calitatii
Minimizarea costului
Masurarea efectelor conjugate ale optimizarii
Maximizarea generalitatii programului
Optimizarea bicriteriala
Managementul procesului de optimizare
Conceptul de optimizare a programelor
Programarea calculatoarelor este o activitate deosebit de complexa.
Programele sunt mai bune daca ofera rezultate intr-un timp cat mai scurt, daca rezultatele sunt complete si corecte.
Programele sunt mai slabe daca necesita procese repetate de depanare a erorilor si reluari repetate ale executiilor pentru ca dupa eforturi destul de mari sa se obtina rezultate despre care de fiecare data trebuie sa se faca verificari numeroase sa se vada daca sunt rezultate complete si corecte
A optimiza un program inseamna a-l imbunatati.
Programul este scris.
Asupra lui incep sa se efectueze modificari, programatorul inregistrand ca programul este altceva, adica un program din ce in ce mai bun.
Asa cum nu se poate vorbi de un algoritm optim, nu se poate vorbi nici despre un program optim.
In programare un program este bun sau nu este bun.
Programul este bun in sine sau in raport cu alte cateva programe cu care se compara.
daca exista mai multe programe pentru rezolvarea sistemelor liniare de ecuatii, acestea se compara si dintre ele se conchide ca unul este cel mai bun.
Daca dupa un timp in multimea de programe pentru solutionarea sistemelor liniare de ecuatii se mai adauga alte cateva programe, compararea incepe de la capat si dupa aceea va rezulta ca un anumit program este cel mai bun.
Daca prin exces de limbaj se vorbeste de programul optim, acesta este strict legat de:
- o multime finita de programe, cunoscuta de un programator
- un criteriu unic prin prisma caruia se compara acea multime de programe
- un numar specificat de masuratori ale criteriului de performanta
- o procedura de efectuare a masuratorilor
- un indicator agregat acceptat pe baza carora se ierarhizeaza programele din multimea data.
Asa cum calitatea este un concept si optimizarea este un concept.
Intreaga activitate de dezvoltare software este orientata spre a obtine un produs de calitate.
Atunci cand sunt satisfacute mai multe cerinte, se va concluziona ca au intervenit si procese de optimizare, iar produsul realizat este cel mai bun in raport cu unul sau mai multe criterii de performanta.
Prin abuz de limbaj, se conchide ca respectivul program este unprogram optim. revenire

Criterii de optim
Exista mai multe criterii de optim.
Dupa momentul in care se efectueaza optimizarea, se identifica:
- optimizare in faza de definire a problemei
- optimizare la designul proiectului
- optimizare pe text sursa
- optimizare in testare
- optimizare in exploatare
- optimizare in procesul de mentenanta.
Dupa criteriul efectului urmarit, exista:
- minimizarea duratei de realizare a produsului
- maximizarea dimensiunii problemei de rezolvat
- minimizarea ciclurilor masina
- maximizarea nivelului calitatii
- minimizarea memoriei ocupate de program
- minimizarea complexitatii programului
- maximizarea preciziei rezultatelor
- minimizarea duratei de obtinere a rezultatelor
- minimizarea volumului de date necesar pentru regasirea de date
- maximizarea nivelului de flexibilitate in structurarea cheilor si a rezultatelor.
Criteriile nu au acelasi sens de orientare si sunt situatii in cre urmarind un obiectiv, se obtin efecte contrarii in raport cu alte criterii de performanta.
Cand se elaboreaza un program se urmareste un criteriu de performanta principal.
Realizatorii au criterii de optimizare specifice, iar utilizatorii de programe au alte criterii.
Realizatorii doresc sa utilizeze cat mai putine resurse si sa dezvolte rapid produsul si cu cat mai putine facilitati.
Utilizatorii doresc calitate, doresc un produs cat mai complet si cat mai prietenos.

revenire

Optimizari pe codul sursa
Au loc pe un program deja existent cu intentia de a-l imbunatati.
daca programatorii stapanesc regulile de imbunatatire a textului sursa, cand scriu cod executa aplicarea acestor reguli.
Nu va mai fi nevoie sa se procedeze la optimizarea unui text, care a fost construit respectand cerintele de realizare a secventelor performante.
Eliminarea codului mort este o cerinta de a scoate din program acele secvente care nu se executa niciodata.
Eliminarea subexpresiilor comune are ca efect reducerea ciclurilor masina.
In secventa de program:
e= (a*a+b*b+c*c+d*d+h*h) * (a*a+b*b+c*c+d*d+h*h-1)+ 1./(a*a+b*b+c*c+d*d+h*h);
f=(a*a+b*b+c*c+d*d+h*h-1)/(a*a+b*b+c*c+d*d+h*h+1)+3/(a*a+b*b+c*c+d*d+h*h);
g=1./(a*a+b*b)+1./(a*a+b*b+c*c+)+1./(a*a+b*b+c*c+d*d)+1/(a*a+b*b+c*c+d*d+h*h);
se observa existenta unor subexpresii comune.
Daca se efectueaza mai intai calculele:
temp1=a*a+b*b;
temp2=temp1+c*c;
temp3=temp2+d*d;
temp4=temp3+h*h;
temp5=1./temp4;
dupa care expresiile includ aceste rezultate intermediare corespunzatoare subexpresiilor, secventa de evaluare devine:
e=temp4*(temp4-1)+temp5;
f=(temp4-1)/(temp4+1)+3*temp4;
g=1./temp1+1./temp2+1./temp3+temp5;
Eliminarea invariantilor din secventele care se repeta reduce sever volumul de prelucrari.
In secventa:
for(i=0;i {
s=0;
t=0;
y[1]=i;
s+=x[i];
}
exista si invariantii:
s=0;
t=0;
y[1]=i;
Prin efectuarea de corectii si prin eliminarea invariantilor se obtine secventa optimizata:
s=0;
t=0;
for(i=0;i {
y[i]=i;
s+=x[i];
}
Eliminarea invariantilor aduce corectii programului.
Regruparea intr-o singura structura repetitiva mai multe secvente, reduce volumul de prelucrari.
Secventa:
s1=0;
for(i=0;i s1+=x[i];
s2=0;
for(i=0;i s2+=x[i]*x[i];
s3=0;
for(i=0;i s3+=x[i]*x[i]+x[i;
sxy=0;
for(i=0;i sxy+=x[i]*y[i];
prin regruparea intr-o singura structura repetitiva, devine:
s1=0;
s2=0;
s3=0;
sxy=0;
for(i=0;i {
s1+=x[i];
s2+=x[i]*x[i];
s3+=x[i]*x[i]+x[i;
sxy+=x[i]*y[i];
}
Restrangerea numarului de repetari reduce volumul de prelucrari din program.
revenire

Maximizarea calitatii
Calitatea programului se traduce prin:
- complexitate redusa
- fiabilitate cat mai ridicata
- portabilitate maxima
- mentenabilitate cat mai simpla
- caracter foarte prietenos in exploatare
- obtinerea unui grad inalt de reutilizabilitate a componentelor
- flexibilitate in obtinerea structurilor de rezultate dorite
- cuprinderea unui numar cat mai mare de variante
- asigurarea solutionarii de probleme cat mai generale
- solutionarea de probleme cu dimensiuni foarte mari
- obtinerea unor durate de executie care in comparatie cu programe similare sa fie cat mai mici
- asigurarea unei foarte bune lizibilitati a codului sursa
- dezvoltarea unui cod sursa cat mai liniar posibil
- respectarea cu strictete a specificatiilor astfel incat programul sa conduca la obtinerea de rezultate complete si mai ales corecte.
Procesul de optimizare are la baza un criteriu care trebuie sa fie in concordanta cu cerintele ca programul sa ramana un program cu un nivel de calitate foarte ridicat.
Fiabilitatea se majoreaza prin includerea in program a procedurilor foarte restrictive de validare corelata, pentru a nu permite lansarea in executie a procedurilor decat atunci cand datele de intrare sunt complete, corecte, comparabile si garanteaza obtinerea de rezultate, de asemenea, corecte, complete si comparabile.
Calitatea este garantata daca si numai daca procesul de testare software are un nivel de profunzime maxim.
revenire

Minimizarea costului
Costul unui program este mare pentru ca:
- in structura sa peste 80% sunt salarii, iar in informatica salariile sunt consistente
- resursele incorporate, dintre care inteligenta umana este deosebit de importanta, sunt cu un volum foarte ridicat
- efectele pe care le genereaza utilizarea unui program antreneaza beneficii carora le corespund recuperari de costuri pe masura
- durata de elaborare este impusa sa fie foarte scurta si intensitatea muncii programatorilor este mare, ceea ce implica salarii majorate
- durata de recuperare a costurilor implicate de elaborare unui program la nivelul elaboratorului este mare mai ales atunci cand programul se adreseaza mai multor utilizatori, dintre care cei mai multi sunt utilizatori potentiali
- nivelul pirateriei este inca ridicat si recuperarea cheltuielilor cu un program aflat pe piata este greoaie
- mentinerea personalului la un nivel de calificare corespunzator avand in vedere avalansa de limbaje, instrumente si tehnici care se dezvolta si care trebuie implementate, impune cheltuieli de achizitionare software, de instruire personal si de achizitionare documentatie, de participare la manifestari lansare si de prezentare a noutatilor.
Toate costurile trebuie sa conduca la un produs cat mai bun, incat prin performante sa-l ajute pe realizator sa faca programul vandabil dar si pe utilizator sa considere programul atractiv.
Reducerea costului unui program se obtine prin:
- cresterea gradului de reutilizare a componentelor performante deja probate in practica
- eliminarea consumurilor de resurse inutile generate de abordarea neeficienta a solutiilor date in fiecare etapa a ciclului de dezvoltare
- considerarea procesului de elaborare ca proces de alocare si nivelare de resurse, ceea ce implica alegerea celor mai potrivite structuri de date si a celor mai potrivite instructiuni
- testarea comportamentului programului si efectuarea de calcule de eficienta la fiecare moment.
revenire

Masurarea efectelor conjugate
Pentru fiecare caracteristica se defineste un indicator.
Se stabilesc coeficienti de importanta.
Se construieste un model agregat al performantei produsului program.
La fiecare proces de optimizare dezvoltat pe un program:
- se calculeaza nivelul indicatorilor
- se agrega
- se compara cu nivelul agregat anterior
- daca nivelul este mai bun se adanceste procesul de optimizare
- daca nivelul este inferior, este cautata o alta directie de optimizare.
Este important ca metoda de masurare sa fie aplicata cu consecventa.
daca este perfectionata metoda de masurare, se reiau masuratori di urma pentru a obtine o comparabilitaqte reala a rezultatelor optimizarii actuale cu efectele obtinute in timp.
revenire

Maximizarea generalitatii programului
Generalitatea este caracteristica pe care o percepe utilizatorul atunci cand s-a familiarizat cu programul si cand doreste ceva mai mult de la acesta.
Un program este general atuci cand:
- acopera cat mai multe variante ale problemei de rezolvat
- nu are restrictii privind dimensiunea problemei de rezolvat
- ofera si solutii la problemele pe care utilizatorul nu le-a specificat dar care apartin clasei de probleme pe care le rezolva programul
- necesita introducerea de parametri pentru a adapta solutionarea de noi aspecte, fara a umbla pe textul sursa.
Programul pentru calculul mediei aritmetice simple pentru un sir de 100 de componente este un program simplu.
El devine mai general atunci cand dispare restrictia privind numarul de componente pentru care se poate calcula media.
Eliminarea restrictiei presupune definirea unui masiv unidimensional de 100o de componente.
Daca se doreste ca in documentatie sa apara textul programul calculeaza media aritmetica pentru oricat de multi termeni, atunci programatorul va memora datele intr-un fisier.
Daca se doreste selectarea anumitor elemente din sir pentru includerea in calculul sumei, se va defini inca un vector vb[],ale carui elemente sunt 1 daca elementele sirului de date intra in calculul medie, deci sunt active.
daca se initializeaza cu zero, elementele sirului vb[] devin inactive si nu intra in calculul mediei aritmetice simple.
Cresterea generalitatii acestui program se obtine atunci cand se redefineste obiectivul programului si anume, programul calculeaza media aritmetica ponderata.
Vor fi citite perechi de date, nivelul variabilei pentru care se calculeaza media si, respectiv, frecventa lui.
Daca se considera medie aritmetica simple, aceste frecvente sunt egale cu 1 si de la tastatura nu vor mai fi introduse.
Utilizatorul va avea optiunea privind tipul de medie aritmetica.
Generalitatea va creste atunci cand obiectivul programului devine mai cuprinzator.
Programul trebuie sa calculeze mediile aritmetice, geometrice si armonice simple sau ponderate.
Programatorul trebuie sa gandeasca programul deschis ca sa accepte noi secvente, noi definiri de date si noi proceduri.
daca este necesar, programul trebuie gandit incat sa accepte oricat de multe noi optiuni.
O solutie este de a da fiecarei optiuni un cod.
Se definesc M optiuni.>,br> Intr-o instructiune switch() se preiau in M secvente case cele M coduri si in acest fel se dirijaza executia catre M directii distincte.
daca programatorul are nevoie de a suplimenta optiunile, va adauga noi coduri si deci noi secvente case si tot atatea referiri de noi secvente corespunzatoare noilor prelucrari.
Cresterea generalitatii determina cresterea complexitatii.
Trebuie sa existe un moment al opririi cresterii generalitatii intrucat programul devine ineficient datorita cresterii extensive a lui.
Este asemenea situatiei in care prin adaugarea de etaje unei cladiri aceasta se prabuseste datorita propriei sale greutati.
revenire

Optimizarea bicriteriala
Programul ideal este acela in care:
- dimensiunea problemelor de rezolvat este maxima
- complexitatea programului este minima
- durata medie atranzatiilor este minima
- este cel mai prietenos
- este cel mai fiabil
- mentenanta se efectueaza cu cel mai redus cost
- costul de vanzare este cel mai mic in comparatie cu produse similare.
In realitate un asemenea program nu exista.
De aceea se aleg doua criterii de optim, considerate cele mai importante.
Cand se optimizeaza porgramul se urmaste atingerea simultana a celor doua obiective.
Programatorul se antreneaza si defineste variante pentru care masoara nivelirule celor doua criterii de performanta.
Le agrega dupa o formula cu ponderi si compara ceea ce avea cu ceea ce s-a obtinut.
Se retine varianta cea mai buna in raport cu cele doua criterii satisfacute simultam.
revenire

Managementul procesului de optimizare
Managementul presupune:
- stabilirea criteriului de optim care trebuie atins
- adoptarea din aproape in aproape a masurilor ca procesul de optimizare sa devina vizibil in toate etapele ciclului de dezvoltare software
- construirea de variante si preluarea celei mai bune dupa ce s-au efectuat masuratori, fie a resurselor hardware consumate, fie dupa masurarea duratelor pe care le implica fiecare varianta
- corelarea nivelului de optimalitate cu durata de elaborare a programului si cu costurile, astfel incat programul sa fie bun dar si cu costuri acceptabile si mai ales, sa fie realizat la timpul cerut de beneficiar
- compararea performantelor obtinute in procesul de optimizare, cu performantele altor programe similare
- prezentarea echipei de programatori din companie a solutiilor implementate care au condus la imbunatatirea produsului software
- impunerea obligativitatii ca proceduri sau secvente care sunt considerate performante sa fie preluate in toate programele care se elaboreaza si care executa prelucrari identice sau asemanatoare.
revenire

revenire