Clonarea informatica

192
INTRODUCERE Dezvoltarea societatii informaţionale presupune un nou mod de abordare a producţiei si circulaţiei de software. Obiectivul acestui studiu este definirea conceptelor de clonare informatica, a proceselor specifice clonarii. Este introdus un sistem riguros de indicatori care masoara elementele de structura si de comportament ale programelor pentru a evidentia situatiile în care un produs program este clona. Necesitatea clonelor este impusa de dezvoltarea produselor program prin reutilizare si prin lucrul în echipa, cu trecerea de la o versiune la alta sau de la o generatie la alta de software. Procesele de clonare influenteaza dinamica dezvoltarii de tehnici si metode de analiza - proiectare - codificare - testare - implementare software atât timp cât sunt mentinute în limite normale si se deruleaza în companiile producatoare de software. Fiecare produs program este definit prin caracteristici constructive la producator si, respectiv, prin mod de comportament la utilizator. În lucrare sunt definiti indicatori cu ajutorul carora se masoara atât caracteristicile constructive cât si cele de comportament, precizându-se prin

description

Problema obtinerii clonelor informatice este complexa siîmbraca o serie de aspecte atât tehnice, cât si juridice care trebuie cunoscutepentru a putea gestiona corect circuitul complet al produselor informatice.

Transcript of Clonarea informatica

  • INTRODUCERE

    Dezvoltarea societatii informaionale presupune un nou mod de abordare a produciei si circulaiei de software.

    Obiectivul acestui studiu este definirea conceptelor de clonare informatica, a proceselor specifice clonarii. Este introdus un sistem riguros de indicatori care masoara elementele de structura si de comportament ale programelor pentru a evidentia situatiile n care un produs program este clona.

    Necesitatea clonelor este impusa de dezvoltarea produselor program prin reutilizare si prin lucrul n echipa, cu trecerea de la o versiune la alta sau de la o generatie la alta de software.

    Procesele de clonare influenteaza dinamica dezvoltarii de tehnici si metode de analiza - proiectare - codificare - testare - implementare software att timp ct sunt mentinute n limite normale si se deruleaza n companiile producatoare de software.

    Fiecare produs program este definit prin caracteristici constructive la producator si, respectiv, prin mod de comportament la utilizator.

    n lucrare sunt definiti indicatori cu ajutorul carora se masoara att caracteristicile constructive ct si cele de comportament, precizndu-se prin

  • proceduri riguroase modul n care se culeg datele si se efectueaza calcule. Fiecare indicator este nsotit de exemplificari care evidentiaza cazurile normale de definire a programului ct si situatiile n care se obtin valori particulare.

    Din multimea indicatorilor se extrag cei mai importanti, obtinndu- se o sublista recunoscuta n continuare sub denumirea de amprenta a programului.

    O amprenta a programului este definita n unul din urmatoarele trei moduri:

    lista de indicatori formata din reuniunea sublistei indicatorilor de structura si, respectiv, cu sublista indicatorilor de comportament;

    indicator agregat fara diferentiere a importantei factorilor de influenta;

    indicator agregat dupa o noua procedura cu luarea n considerare a diferentierii factorilor de influenta.

    Problema clonarii informatice capata o noua valenta n contextul dezvoltarii tehnicilor si metodelor de realizare a aplicatiilor distribuite si de crestere spectaculoasa a costurilor de asigurare a protectiei si securitatii tuturor tranzactiilor. De asemenea, realizarea de noi aplicatii cu caracter deschis orientate spre utilizatorul cetatean care are acces la un terminal amplasat ntr-un loc public necesita crearea unor noi tehnologii. Acestea presupun preluarea masiva a componentelor software aflate n uz curent si includerea lor ntr-un produs n care interfetele om - calculator permit derularea de tranzactii de catre cetateni n conditii de maxim confort si de siguranta.

    Copierea unei dischete sau a unui CD se realizeaza cu comenzi ale sistemului de operare si costurile obtinerii unor copii sunt date de costul suportului destinatie. Deci, n urma copierii se obtine clona unui program, unui text, unei baze de date, a unui fisier n general. Simplificnd lucrurile, clona informatica este un fisier de iesire, identic cu fisierul de intrare, obtinuta prin operatia de copiere fisiere.

    Problema obtinerii clonelor informatice este mult mai complexa si mbraca o serie de aspecte att tehnice, ct si juridice care trebuie cunoscute pentru a putea gestiona corect circuitul complet al produselor informatice.

  • Stadiul actual al dezvoltarii societatii informationale [GHIL02] romnesti este caracterizat prin:

    > atingerea unui nivel ridicat al infrastructurii IT;> diversificarea tipologiilor de aplicatii informatice;> crearea de organizatii virtuale orientate pe productie;> realizarea de magazine virtuale, derularea activitatilor de - comert

    si de alte afaceri electronice;> realizarea de noi tipologii de servicii si activitati;> orientarea economiei spre valorificarea de cunostinte;> cresterea numarului de utilizatori permanenti;> orientarea spre rezolvarea problemelor curente (plati, taxe,

    achizitii, comert);> dezvoltarea de licitatii electronice;> crearea de site-uri pentru prezentare structuri organizationale;> crearea de structuri virtuale pentru muzee;> realizarea instruirii la distanta n cadrul universitatilor virtuale cu

    biblioteci virtuale.

    Dezvoltarea infrastructurii si productia de software presupun eforturi financiare considerabile. Literatura de specialitate mentioneaza costuri ce depasesc de multe ori nivelul produsului intern brut pe cap de locuitor, pentru obtinerea unui nivel acceptabil de posturi de lucru si de acces la Internet.

    n SUA, n tarile UE si n Romnia a fost creat un cadru adecvat pentru dezvoltarea tehnologiilor IT si pentru crearea de aplicatii informatice pe care cetatenii sa le foloseasca n mod direct, fara a fi nevoiti sa parcurga stagii prealabile de instruire. Acest cadru este n continua perfectionare pentru a prelua noile realizari tehnologice si pentru a reflecta gradul de accesibilitate a cetatenilor la derularea de e-activitati. Astfel, pentru dezvoltarea tranzactiilor electronice a fost realizata o legislatie adecvata, iar pentru protectia producatorilor de software original au fost create organisme care gestioneaza unitar produsele program si licentele de utilizare a acestora. Sunt specificate conditiile de realizare si circulatie a produselor software si a serviciilor.

    Practica arata ca n paralel cu activitatile de productie si utilizare software si baze de date, au loc si atacuri la acestea, care joaca rol de frna pentru procesele normale de recuperare a investitiilor si de fructificare a efectelor unui act investitional n informatica. Astfel, crearea de virusi are menirea de a dezvolta productia de antivirusi. Fiecarui sistem de protectie si securitate i sunt identificate rapid partile slabe si se declanseaza ofensiva penetrarii lor. Pentru a preveni efectele catastrofale se proiecteaza de fiecare

  • data noi componente si desi exista costuri uriase, se achizitioneaza noi sisteme de protectie si securitate, care au capacitatea sa reduca vulnerabilitatea aplicatiilor informatice pentru o anumita perioada. Asa se explica preocuparile din sistemul bancar, din sistemul de evidenta a populatiei, din sistemul educational pentru protectia si securitatea bazelor de date si pentru derularea tranzactiilor.

    n paralel sunt desfasurate activitati care ocolesc cadrul legal fara a fi reutilizari autorizate de componente program.

    Procesele de clonare se regasesc datorita particularitatilor specifice pentru domeniul informatic.

    Clonarea informatica este un nou domeniu al cercetarii ntruct este importanta dezvoltarea de instrumente care evidentiaza originalitatea sau caracterul de clona al unui produs software lansat pe piata.

    Companiile producatoare de software uziteaza clonarea n mod frecvent. Trecerea de la o versiune la alta a unui produs software necesita mai nti realizarea de clone. Fiecare clona este supusa unei analize privind noi functii care se adauga, functii asupra carora trebuie lucrat daca n timpul exploatarii au produs erori si proceduri care trebuie dezvoltate, n sensul cresterii generalitatii.

    Lucrul pe clone este benefic att timp ct este efectuat de detinatorul legal al produsului software.

    Testarea unui produs software la utilizatori, nainte ca produsul sa fie introdus pe piata, este efectuata cu utilizarea de clone reprezentnd diferite stadii atinse de un produs.

    Clonarea software pentru testare are rolul de a creste productivitatea testerilor. Simultan, pe clone, se aplica seturi diferite de date de test, iar rezultatele obtinute sunt reunite si analizate.

    n cazul n care producatorul de software urmareste obtinerea de avantaje speciale, cloneaza fisierele de texte sursa si le difuzeaza liber.

    Lucrul pe text sursa de foarte buna calitate este generatorul sigur al unei scoli de dezvoltare software. Lucrul pe clone conduce la obtinerea de versiuni locale ale produsului clonat. n acelasi timp, se creeaza un grad de independenta a clientilor fata de producator. Se diminueaza costurile de ntretinere. Producatorul de software si creeaza disponibilitatea de resurse pentru a dezvolta noi produse prin degrevarea de un trecut, deosebit de favorabil.

    Crearea de site-uri cu acces liber se bazeaza pe clone software si clone de date. Clona de date pe site-uri permit dezvoltarea de modele care sunt testate pe aceleasi date, originalitatea si comparabilitatea.

  • Clona software regleaza preturile pe piata de software. Dispunerea pe site a unui produs complet documentat conduce la informarea utilizatorilor. Prin compararea acestor produse de pe site cu cele care se vnd curent l orienteaza pe client spre acel produs care i se potriveste. Comparatiile conduc de la sine la eliminarea de la sine a produselor clonate, ambalate sub alta eticheta.

    n productia de software clona regleaza calitatea proceselor si produselor. Calitatea vizeaza n primul rnd clona, ntruct sunt multiplicate produsele software performante. Nu sunt clonate programe neperformante sau programe nenecesare de dragul de a fi stocate pur si simplu pentru a nu fi lansate niciodata n executie.

    Cine cloneaza software urmareste un scop fie realizarea de profit, fie obtinerea de efecte pozitive.

    Lucrarea de fata este rezultatul activitatii de cercetare stiintifica desfasurata de autori de-a lungul mai multor ani. Sunt abordate probleme de baza ale clonarii software si ale clonarii datelor. Rezultate ale cercetarilor au fost publicate n reviste de specialitate sau au facut obiectul unor comunicari la sesiuni si conferinte stiintifice.

    La structurare s-a avut n vedere necesitatea unei abordari gradate, astfel nct sa fie clarificate principalele aspecte legate de conceptul de clonare, modalitati de obtinere clone n contextul existentei unui cadru juridic operational.

    Sunt propusi indicatori de masurare a gradului de ortogonalitate a software si a bazelor de date, se constituie n elemente de baza pentru definirea de amprente care stau la baza compararii programele si/sau bazelor de date n vederea stabilirii originalitatii lor sau a faptului ca sunt clone.

    Implementarea acestor indicatori presupune elaborarea de software specializat. Unele dintre rezultatele obtinute de autori sunt stocate pe site-ul www.clonare-informatica.ase.ro.

    Preluarea produselor program n mod neautorizat este nsotita de efectuarea unor transformari, de cele mai multe ori mecanice care au rolul de a obtine produse echivalente, greu de recunoscut, n comparatie cu originalul.

    Studiile de caz incluse evidentiaza modul cum tehnicile si metodele de clonare sunt utilizate si cum se identifica un produs clonat prin compunere de efecte ale automatizarii transformarilor.

    Cercetarile n domeniul clonarii informatice sunt la nceput si necesita utilizarea unor noi abordari precum si crearea unor structuri organizationale orientate spre educarea celor care creeaza si utilizeaza direct produse program. Elementele de etica profesionala pentru programatori, pentru dealer-ii de software si pentru utilizatorii produselor program vin sa

  • contureze un nou curent n obtinerea unui climat care stimuleaza dezvoltarea calitativa a componentelor software.

    Autorii sunt recunoscatori tuturor celor care prin sugestiile si propunerile pe care le fac vor contribui la mbunatatirea unei editii viitoare.

  • PROCESE DE CLONARE

    2.1 Program e, module, proceduri

    Programul este o constructie destinata rezolvrii unei probleme, fiind scris ntr-un anumit limbaj de programare. n functie de destinatia sa, un program face parte din una din urmatoarele categorii:

    programe pentru efectuarea de calcule matematice; programe pentru crearea si utilizarea de fisiere; programe pentru crearea formularelor; programe pentru afisarea unui tabel; programe pentru afisarea grafica a unei figuri.

    Programul este rezultatul unei activitati logice, de stabilire a succesiunii instructiunilor unui limbaj n vederea implementarii unui algoritm.

    Programele definesc operanzi, i initializeaza si i folosesc n instructiuni care efectueaza diverse calcule, selectari sau repetari a unor secvente.

    Programul P este o constructie unitara formata din instructiunile Ii, I2, ..., INi. Instructiunile folosite sunt aranjate ntr-o succesiune logica,

  • formnd liniile sursa ale programului. De exemplu, fie programul PSUM.CPP, care nsumeaza elementele unui sir de numere:

    #include #include void main(){int a[10],s,i,n;printf( \n Numarul de elemente:");scanf(%d",&n);printf( \n Valorile elementelor:");for(i=0;i

  • Limbajele evoluate permit structurarea programelor n module si a modulelor n proceduri. Fiecarui program i se asociaza o structura arborescenta. n figura nr. 2.1 este evidentiata structura unui program oarecare:

    Figura 2.1 S tructura unui program oarecare

    Programul are structura sub forma unui arbore cu 3 niveluri. Procedurile E, F, G, H, I, C sunt grupate n modulele B si D, iar apelantul este A. Programul are 2 module sau 6 proceduri.

    Fiecare procedura Gi are o lungime LGi, iar fiecare modul Mi are o lungime LMi, ambii indicatori fiind exprimati n numar de linii sursa.

    Structurarea programelor n proceduri si module permite lucrul nechipa.

    2.2 M acrodefinitii si proceduri

    Macrodefinitia este o multime de prelucrari care nlocuiesc n textul sursa numele macrodefinitiei.

    nlocuirea numelui macrodefinitiei cu instructiunile corespunzatoare este efectuata de preprocesor. Acesta realizeaza o verificare minimala a instructiunilor macrodefinitiei, deoarece se lucreaza la nivel de text, nefiind posibila o verificare a erorilor la nivel de sintaxa a limbajului.

    n limbajul C++ macrodefinitia este definita cu ajutorul directivei de compilare #define, fiecare ocupnd, de regula, o singura linie sursa. Macrodefinitiile au doua forme:

    > cu parametri;> fara parametri.

  • n general, macrodefinitiile fara parametri sunt folosite pentru a defini constante. Exemple de macrodefinitii de acest gen:

    #defne size 512 #defne word long #define bytes sizeof(word)

    Utiliznd definitiile de mai sus, secventa de cod urmatoare:

    wordn=size * bytes;

    este expandata la urmatoarea secventa:

    long n=512 * sizeof(long);

    O macrodefinitie cu parametri presupune efectuarea unui apel, similar celui de la proceduri sau functii, n care sunt furnizate argumentele macrodefinitiei. n secventa urmatoare este data o macrodefinitie de determinare a maximului dintre doua numere:

    #define max(x,y) ((x) > (y) ? ( x ) : (y))

    Se impune specificarea parametrilor x si y ntre paranteze, deoarece x si y pot fi date sub forma unor expresii. Exemplu:

    n=max(n-2 , k+ 6 );

    este expandata n secventa urmatoare:

    n=(n-2 ) > (k+6 ) ? (n-2 ) : (k+6 );

    Procedura ofera un mod convenabil de a mpacheta un ansamblu de prelucrari astfel nct sa fie utilizata de cte ori se doreste. Este o constructie de sine statatoare formata din:

    antet; delimitatori formali; corp.

  • Antetul unei proceduri este format, la rndul sau, din o serie de elemente, si anume:

    numele procedurii; trebuie sa fie un identificator unic n cadrul programului;

    parametrii procedurii sau semnatura acesteia; sunt utilizati n transmiterea sau receptionarea de valori n/din corpul procedurii; exista posibilitatea unei liste vide de parametri;

    tipul rezultatului returnat; n cazul limbajului de programare acesta este dat de cuvntul cheie void.

    Delimitatorii formali sunt constructii care separa corpul procedurii de antet si de restul programului. n C++ delimitatorii formali sunt { s i}.

    Corpul procedurii cuprinde ansamblul instructiunilor incluse ntr-o anumita ordine care realizeaza o multime de prelucrari.

    Folosirea unei proceduri ntr-un program implica si apelul ei n vederea obtinerii rezultatului prelucrailor prevazute n corp. Apelul consta n precizarea numelui sau urmata de lista parametrilor separata de operatori.

    Cnd o procedura este apelata, argumentele sale sunt evaluate, iar rezultatele obtinute sunt transferate operanzilor din corpul functiei. Are loc executia corpului procedurii si obtinerea valorii sau valorilor dorite.

    Exista un caz particular de procedura, avnd aceleasi proprietati, cu diferenta ca returneaza apelantului, aparent, un singur rezultat.

    Definirea functiei care efectueaza ridicarea la o putere ntreaga pozitiva a unui numar ntreg este data mai jos:

    intputere(int baza, int exponent){int rezultat= 1 ; for(int i= 0 ;i

  • Modul n care are loc apelul acestei functii este prezentat n listingul urmator:

    #include main(void){cout

  • 2.3 In tegrarea de componente reutilizabile

    Componenta este o unitate de cod executabil, care ofera o ncapsulare fizica a serviciilor asociate. Componenta se constituie ntr-o evolutie a conceptului de obiect. Ea constituie o parte dintr-un sistem sau o structura mai ampla, fiind combinata cu alte componente n vederea oferirii de servicii specifice n cadrul unei aplicatii software.

    Elementele reutilizabile includ parti software si componente aflate pe diverse nivele de abstractizare si de diferite dimensiuni. Aceste elemente se clasifica dupa mai multe criterii prezentate n tabelul urmator, conform [STAN03]:

    C riterii de clasificare a componentelorTabelul 2.2

    Criteriul de clasificare Tipuri de componente

    Aplicabilitate n procesul software

    - Elemente de analiza - folosite la reutilizarea modeluluide sistem;

    - Elemente de proiectare;- Elemente de implementare - sunt elemente software

    executabile, pregatite pentru includerea ntr-un nou sistem.Nivelulde abstractizare ncapsulat

    - Elemente care ncapsuleaza o abstractie functionala - subrutinele si functiile n bibliotecile traditionale;

    - Elemente care acopera o grupare cazuala de elemente - pachetele si fisierele;

    - Elemente care ncapsuleaza o abstractie de data - clasele de obiecte;

    - Elemente care ncapsuleaza un grup de abstractii (sau cadru de dezvoltare) - C++ STL (Standard Template Library), biblioteci SMALLTALK;

    - Elemente care ncapsuleaza o abstractie de sistem - componente COM, CORBA.

    Nivelul de executie

    - Elemente statice - nu sunt nlocuite fara recompilare;- Elemente substituibile - au variante substituibile dinamic;- Elemente dinamice - sunt integrate n momentul executiei.

    Nivelulde accesibilitate

    - Elemente disponibile doar prin descrierea interfetei;- Elemente disponibile prin sursa - cazul pentru produsele

    software gratuite;- Elemente disponibile prin descrierea interfetei si surse -

    reutilizarea are loc prin interfata, sursele fiind disponibile pentru inspectie, discutii, corectii.

  • Integrarea componentelor reutilizabile reprezinta o etapa n mini- ciclul de viata al consumatorului de reutilizare dezvoltat n faza de planificare a procesului de dezvoltare a noului sistem informatic.

    Dezvoltarea cu reutilizare se refera la dezvoltarea de sisteme cu reutilizarea componentelor. Tehnicile utilizate n cadrul acestui proces sunt [STAN03]:

    selectarea pachetului de aplicatie; selectarea componentelor reutilizabile; verificarea redundantei la nivel de produs software; identificarea componentelor reutilizabile candidate.

    Selectarea pachetului de aplicatie consta n determinarea acelui pachet care ofera solutia optima din punctul de vedere al costului, calitatii si duratei.

    Pachetul de aplicatie presupune reutilizarea ntregului sistem.Selectarea componentelor reutilizabile consta n determinarea

    celei mai bune solutii, utiliznd componente candidate. Optimalitatea componentei este determinata pe baza urmatorilor factori:

    factori economici; calitate; durata; restrictii ale domeniului de aplicatie sau a mediului de dezvoltare; obiective privind reutilizarea viitoare; aspecte juridice; politicile de reutilizare aplicate de catre organizatie.

    Sursele de obtinere a componentelor reutilizabile sunt:> piata de componente;> sisteme aflate n exploatare;> proiecte care se deruleaza n paralel;> bibliotecile de componente;> catalogul de reutilizare;> surse Internet.

    Verificarea redundantei la nivelul produsului software consta n stabilirea identitatii privind functionalitatea, scopul si definirea datelor n cadrul componentelor software. De asemenea, se stabileste, n cadrul ciclului de viata, nivelul la care este prezenta redundanta, precum si dimensiunile de manifestare ale acesteia.

  • Operatia de verificare a redundantei este efectuata pe diferite stadii de dezvoltare ale noului sistem n vederea asigurarii unui grad ridicat de eficienta a produsului program final.

    Identificarea componentelor reutilizabile candidate consta n propunerea componentelor reutilizabile care sunt incluse n produsul software. Este de preferat sa se includa n noul sistem si componente originale care, printr-o modificare ulterioara, sa fie utilizate n noi proiecte.

    Strategia de proiectare a unor astfel de componente are un caracter selectiv, n sensul ca sunt alese ca fiind reutilizabile acele componente care sansele cele mai mari de a fi reutilizate.

    De asemenea, se verifica existenta n biblioteci sau cataloage de reutilizare a componentelor care se creeaza.

    2.4 Redundanta din program e

    Conceptul de redundanta software se refera, n general, la realizarea de copii ale unor sisteme, aplicatii, n vederea prevenirii eventualelor pierderi de date. n acest context, redundanta software este asimilata notiunii de backup.

    n anumite sisteme hardware, redundanta este inacceptabila, n timp ce redundanta software reprezinta unica modalitate de a mbunatati performantele sistemului si toleranta acestuia la erori.

    n anumite situatii, tehnicile de realizare a redundantei software bazate pe modificarea codului sursa si duplicarea datelor au ca scop cresterea robustetei sistemului la posibilele erori hardware care apar n timpul functionarii sistemului.

    Exista doua modalitati de aplicare a tehnicilor de redundanta, privind modificarea codului sursa [WWW2]:

    duplicarea unei parti sau a tuturor variabilelor dintr-un program sursa n vederea introducerii redundantei si modificarea operatorilor care gestioneaza replicile variabilelor;

    introducerea unei verificari de consistenta n cadrul fluxurilor de control pentru a verifica periodic consistenta ntre cele doua copii ale unei variabile.

    De exemplu, secventa:

    e = a + b + c

  • Este modificata, obtinndu-se urmatoarea secventa prin aplicarea tehnicilor de redundanta specificate mai sus:

    f = x + y + z g = t + u + v

    i f ( x != t || y != u || z != v) eroare ();

    n anumite cazuri, aplicatiile critice din punctul de vedere al securitatii au restrictii stricte n termeni de memorie ocupata si performanta a sistemului. Duplicarea ntregului set de variabile si verificarea consistentei naintea fiecarei operatii de citire reprezinta alegerea optima din punctul de vedere al acoperirii erorilor.

    Aplicarea tehnicilor de redundanta (duplicare set de variabile, verificare consistenta) garanteaza total eliminarea erorilor care apar n memorie pe toata durata ciclului de viata al fiecarei variabile [WWW2].

    Pe de alta parte, prin duplicarea unei mici parti ale setului de variabile definit n cadrul unui program se realizeaza un compromis ntre acoperirea erorilor si suprancarcarea unitatii centrale de prelucrare.

    Utilizarea redundantei trebuie sa realizeze un echilibru ntre costuri, exprimate n timp mai mare de executie a unitatii centrale de prelucrare, si avantaje date de eliminarea posibilitatii de aparitie a erorilor n timpul exploatarii produsului program.

    2.5 Reutilizarea de software

    Reutilizarea software consta n fructificarea avantajelor oferite de eforturile de dezvoltare anterioare n vederea realizarii produselor program cu un cost minim.

    Exista mai multe acceptiuni ale conceptului de reutilizare software. Ceea ce este comun acestor definitii se refera la proiectarea si implementarea de componente software care sunt utilizate ntr-un proces de asamblare si combinare care conduce la obtinerea produsului program.

    Reutilizarea este un concept care se aplica asupra reprezentarilor abstracte ale unui sistem, obiectelor software si a componentelor, prototipurilor si sistemelor partiale, datelor si modelelor de date, arhitecturilor de programe si proiectelor de structuri de date, la implementare si rutine de test [STAN03]. Astfel, reutilizarea software ofera beneficii mari pe termen lung, atunci cnd eforturile de reutilizare vizeaza

  • primele activitati desfasurate n cadrul ciclului de viata a realizarii unui produs program.

    Sistemul software este format dintr-un ansamblu de elemente care actioneaza mpreuna n vederea atingerii obiectivelor stabilite la nceputul procesului de dezvoltare.

    n prezent, se constata o crestere a complexitatii sistemelor informatice datorita introducerii de noi caracteristici si functionalitati n arhitectura acestora. Aceste caracteristici constau n:

    folosirea mai multor sisteme de operare; asigurarea comunicatiei on-line ntre calculatoare; proiectarea, implementarea si utilizarea sistemelor de baze de

    date n cadrul solutiilor proiectate; utilizarea diferitelor tipuri de retele de calculatoare; utilizarea diferitelor tipuri de interfete utilizator; posibilitatea utilizarii calculului paralel.Unitatea de reutilizare n procesul de dezvoltare de noi solutii

    informatice este componenta, care se constituie dintr-un ansamblu de obiecte care actioneaza mpreuna n vederea furnizarii unui serviciu pentru utilizator.

    Conceptul de reutilizare software este abordat din doua puncte de vedere, conform [STAN03]:

    dezvoltarea sistematica de componente software; reutilizarea sistematica de componente software si a elementelor

    constitutive ale acestora.Exista mai multe criterii de clasificare a elementelor reutilizabile: stadiul dezvoltarii n care elementele reutilizabile sunt produse

    si/sau utilizate; nivelul de abstractizare; natura elementelor.Clasificarile elementelor reutilizabile se face fie pe baza unuia din

    criteriile mentionate anterior, fie pe o combinatie a acestora.Astfel, n [MILI95] sunt identificate urmatoarele categorii de

    elemente reutilizabile: date; arhitectura; proiect de detaliu; program.De asemenea, a fost propusa o ierarhie a cunostintelor reutilizabile

    astfel: cunostinte specifice domeniului n care are loc reutilizarea;

  • cunostinte externe mediului n care are loc reutilizarea; arhitecturi functionale; structuri logice; fragmente de cod.Exista trei mari clase de sisteme reutilizabile [MILI95]:> tipare de program - utilizat pentru instantierea fragmentelor de

    cod sau a proiectelor specifice;> procesoare - interpretoare pentru specificatii executabile de nivel

    nalt;> sisteme de transformare - includerea anumitor activitati de

    dezvoltare n transformari mai mult sau mai putin formale.n [STAN03] sunt evidentiate mai multe tipuri de reutilizare

    software prezentate n tabelul urmator:

    C riterii de clasificare a reutilizarii softwareTabelul 2.3

    C riteriu l de clasificare

    T ipuri de reutilizare software

    Scop Reutilizare generala (reutilizare orizontala) - este o reutilizare independenta de domeniu;

    Reutilizare n cadrul domeniului (reutilizare verticala) - este specifica unui domeniu;

    Reutilizare n cadrul unei fam ilii de aplicatii.

    Tipulde reutilizator

    Reutilizare interna - n interiorul unei organizatii;

    Reutilizare externa (de piata) - n cadrul unei alte organizatii.Granularitateacomponentelor

    Reutilizare de componente de granularitate fina - componentele (functii I/E, functii de manipulare structuri de date, clase de obiecte) sunt independente de domeniu;

    Reutilizare de componente de granularitate grosiera - componentele sunt subsisteme de aplicatii.

    Modulde adaptare al componentelor

    Reutilizare tip cutie neagra - componenta reutilizata nu este modificata;

    Reutilizare tip cutie gri - componenta reutilizata este modificata ntr-o mica masura;

    Reutilizare tip cutie alba - componenta reutilizata este modificata major.

    Integrarea n ciclul de viata software

    Reutilizare ocazionala - reutilizarea nu este planificata, fiind un rezultat secundar al proceselor ciclului de viata software;

    Reutilizare sistematica - practica reutilizarii se bazeaza pe procese repetabile, bine definite.

  • Reutilizabilitatea este o caracteristica externa produsului software, reflectnd potentialul de reutilizare al produsului program. Caracteristicile unei componente reutilizabile sunt [STAN03]:

    generalitate; arie larga de aplicare; modularitate; completitudine si consistenta; independenta hardware; independenta de implementare; fobustete; fncapsulare; fiabilitate; documentare; adaptabilitate/extensibilitate; standardizare; portabilitate; certificare; mentanabilitate.

    2.6 Caracteristicile clonarii

    Se considera o entitate Ei formata din componente de baza care interactioneaza n vederea realizarii unor functii F1, F2,... , Fnf, percepute direct de mediul n care se gaseste.

    A copia entitatea EI nseamna a realiza unele dintre componente cu sau fara interactiuni, obtinndu-se o noua entitate E1 ce executa sau nu functii din multimea F1, F2,..., Fn. Copia E1 difera mai mult sau mai putin semnificativ de entitatea EI.

    A clona entitatea EI nseamna a dezvolta procese prin care se obtin componente, se genereaza interactiuni si se realizeaza functiile F 1, F2,..., Fn, obtinndu-se noi entitati E1, E2,..., Em, care nu difera cu nimic fata de entitate de baza EI.

    Dupa un tablou se executa copii, dintre care unele sunt perfecte, adica diferentele fata de original sunt insesizabile la suficient de multe niveluri de analiza.

    Dupa un prototip de strung se realizeaza clone ntruct toate strungurile au aceleasi repere, sau au loc aceleasi cuplari, iar operatiile realizabile pe un strung, nu difera n raport cu celelalte. Singurele probleme apar n timp si genereaza diferente de fiabilitate.

  • Din punct de vedere al diferentelor de comportament n timp, datorita utilizarilor neomogene, se obtin diferente ntre entitatile clonate, aspect absolut natural si obiectiv.

    Att pentru realizarea copiilor, ct si pentru realizarea clonelor, sunt necesare eforturi si consumuri care se regasesc la nivelul costurilor asociate noilor entitati. Spre deosebire de alte domenii de activitate, domeniul informaticii este caracterizat prin costuri care tind spre zero atunci cnd sunt copiate baze de date sau produse software. Prin copierea unui produs software S se obtin, cu costuri aproape zero, clonele S1, S2,..., Sm. Entitatea Si, i =1, 2, ..., m, este n primul rnd o copie a entitatii de baza S pentru ca procesul prin care este obtinuta, desi este deosebit de complex, are asociat numele de copiere (copy). Entitatea Si este o clona pentru ca:

    are aceleasi componente pe care le detine entitatea de baza S; componentele lui Si au aceleasi interactiuni pe care le au

    componentele din S; nu exista nici o diferenta ntre functiile pe care le realizeaza cele

    doua entitati.Produsele software sunt stocate pe suport tehnic (CD, discheta,

    HDD), iar copierea acestora este un fapt cotidian. Att fisierele ct si bazele de date fac obiectul proceselor de copiere, de cele mai multe ori obtinndu- se clone.

    n cazul n care fisierele si bazele de date includ elemente de regasire criptate, numai n cazul obtinerii algoritmilor de decriptare si a procedurilor de cautare se vor realiza totalitatea interactiunilor, obtinndu-se prin copiere, clone perfecte.

    n cazul proiectarii unui echipament exista costul CP al proiectului si costul O- al realizarii unui produs. n cazul producerii a Np entitati, costul total CT este:

    Ct = Cp + Np (2 . 1 )

    Se observa ca nivelul costului total CT este proportional cu numarul clonelor.

    Pentru dezvoltarea unei aplicatii informatice, concretizata printr-un produs sofware si printr-o baza de date, sunt necesare costurile CS, respectiv Cbd. Daca se realizeaza M copii pentru produsul software si R copii pentru baze de date, costul total al aplicatiei informatice CTAI este:

    Ct a i = Cs + Cb d + M(C s s + Co s ) + R(Cs b d + Co b d ) (2 .2 )

    unde: Css - costul suportului de stocare a unei copii software;COS - costul operatiei de copiere-stocare software;

  • CSBD - costul suportului pentru stocare baze de date;COBD - costul copierii bazei de date.n ipoteza n care COS = COBD = 0 si CSS = CSBD, rezulta:

    Ct a i = Cs + Cb d + K(M + R)C s s (2.3)

    unde K reprezinta numarul de unitati folosite pentru stocarea de software si baze de date.

    Si n cazul clonarii de software si baze de date costul total este proportional cu numarul clonelor. Costul unei copii este nesemnificativ.

    Ct timp clonarea produselor software este gestionata de compania care le-a dezvoltat, sunt create si mentinute premisele recuperarii cheltuielilor si obtinerii de profit. Clonarea produselor software si a bazelor de date se efectueaza pentru utilizarea directa de catre diferiti beneficiari, n scopul solutionarii problemelor specifice cu costuri nule. De asemenea, clonele sunt integrate n aplicatii informatice noi, reducnd semnificativ costurile.

    n timp au fost dezvoltate instrumente complexe care au ca intrare un produs software sau o baza de date, asupra carora sunt efectuate transformari, obtinndu-se la iesire constructii noi, dar echivalente, care din punct de vedere al functiilor pe care le realizeaza, sunt clone ale intrarilor. Astfel de transformari sunt nlocuirile unor cuvinte, interschimbul unor secvente, efectuarea de optimizari n zona subexpresiilor comune, eliminari ale secventelor neactive sau redundante. n cazul n care procesele de translatare vizeaza att componente, ct si interactiuni, structura clonei se departeaza de original, functiile cel mult mentinndu-se, fiind putin probabil ca n stadiul actual sa fie generate functii noi, exclusiv pe baza entitatilor folosite ca intrari.

    Companiile care dezvolta aplicatii informatice, ct si utilizatorii poseda numeroase mijloace pentru a asigura protectia la copiere neautorizata a produselor software si bazelor de date. Dezvoltarile de tehnici si metode destinate accesului neautorizat la produselor software si baze de date genereaza noi protectii. Acestea din urma impun noi tehnici si metode de acces neautorizat, procesul fiind ca un bulgare de zapada n rostogolire. Uneori costurile de mentinere a protectiei devin insuportabile si companiile care dezvolta software prefera sa ofere n sistem de acces liber unele dintre produse. Recuperarile de costuri provin din consultanta si din customizare.

    n contextul dezvoltarii de tehnici, metode si instrumente pentru asistarea proceselor de analiza, proiectare, codificare si testare software sau baze de date, sunt create premisele obtinerii de clone involuntare. Daca se

  • considera o problema complet si corect definita Pcc, folosind o metoda riguroasa de definire a specificatiilor, echipele Asi, A;2, - - , A k realizeaza independent specificatiile a 11, a 1^ ... , a 1k, ntre care exista diferente masurabile cu un indicator universal f(aii, aij). Elaborarea specificatiilor reprezinta primul pas n realizarea unei aplicatii informatice.

    Se alege:

    h L = m^ { f (a ,1, a 1)} (24)*, 3

    Pentru definirea structurii pe module, pentru stabilirea claselor se folosesc instrumente de aceeasi generatie, obtinndu-se independent documentatia de design: a21, a22,..., a2k.

    ntre rezultatele celor k echipe exista diferente, dintre care cea mai mare este:

    hmax = max { f ( 2^, a 3)} (2.5)1, 3

    Pentru faza de codificare se obtine un nivel maxim al diferentelor:

    hinax = max { f (a f , a 33 )} (1 6)i 3

    unde a3i si a3j sunt textele sursa obtinute de echipele Aei, respectiv Aej. Procesul de testare determina reveniri asupra rezultatelor precedente. Liniarizarea unei structuri repetitive conduce la crearea unui sir al diferentelor maxime: h 1 m a x , h2m a x , ..., hxm a x . n mod normal, daca tehnicile de analiza, design, programare, testare sunt corect utilizate, procesul trebuie sa fie convergent, iar sirul diferentelor maxime este strict descrescator cu:

    lirnhmx = 0 (2.7)x p

    unde pm este numarul de reluari maxim acceptabil, care prin depasire face produsul ineficient. Daca exista doua stadii ari, asj pentru f( ari, asj ) = 0, echipele Ai si Aj au realizat independent clone, numite clone involuntare.

  • ORTOGONALITATEA FIIERELOR

    3.1 Fisiere

    Fiierul reprezint o secventa de octeti organizata ntr-o maniera specifica pe un suport de memorie extern n vederea utilizarii lor ulterioare ntr-un anumit scop.

    Sistemul de fisiere este o componenta a unui sistem de operare care asigura gestionarea informatiei memorate pe disc sub forma fisierelor. Functiile unui sistem de operare sunt:

    stocarea informatiei; regasirea informatiei stocate; asigurarea autorizata la informatie.

    Structura de directoare reprezinta o colectie de noduri care contine informatii cu privire la fisierele stocate pe disc.

    Fisierul constituie o zona de memorie contigua din punct de vedere logic n care este memorata informatia. Tipuri de fisiere:

    > de date: fisiere numerice, de tip text, binare;> de tip program sursa.

  • Diferenta ntre fisier si o structura de date din memoria interna consta n:

    fisierele stocheaza informatia ntr-un mod nevolatil (permanent); fisierele sunt obiect al operatiei de copiere de pe un suport de

    stocare pe altul.

    Structura unui fisier variaza n functie de scopul n care este utilizata informatia stocata, fiind stabilita fie de sistemul de operare, fie de utilizator prin intermediul programului creat de acesta.

    Atributele unui fisier:> nume - retine informatia de identificare a fisierului pe suportul

    extern de memorie;> tip - specifica modul de interpretare si utilizare a informatiei

    stocate;> marime - reflecta dimensiunea fisierului exprimata n numar de

    octeti ocupati pe disc;> locatie - specifica locul pe disc n care se regaseste fisierul;> mod de organizare - evidentiaza modalitatea n care sunt

    organizati octetii pe suportul extern de memorie;> protectie (permisiuni de acces) - contine drepturile utilizatorului

    privind efectuarea anumitor operatii asupra fisierului;> data si timp - specifica data si momentul de timp la care sunt

    efectuate diverse operatii asupra fisierului;> informatii despre fisiere retinute n structura de directoare.

    Operatiile care au loc asupra fisierelor sunt: creare; scriere; citire; pozitionare n cadrul fisierului; stergere; trunchiere; cautare pe disc.

  • Fisierele sunt de mai multe tipuri, acestea fiind prezentate, mpreuna cu extensiile uzuale, n tabelul urmator:

    Tipuri de fisiereTabelul 3.1

    Tipul fisierului Extensia uzuala Descriereexecutabil exe, com, bin sau fara

    extensieexecutie a

    instructiunilor specificate n

    programul sursaobiect oo fisier compilat, dar

    ne-linkeditatcod sursa c, cc, java, pas, asm,

    acod sursa n diferite

    limbaje de programarebatch bat, sh comenzi executate de

    interpretorul de comenzi

    text txt, doc date de tip text, documente

    procesor de text wp, tex, rrf, doc formate diverse ale procesoarelor de text

    biblioteca lib, a, so, dll, mpeg, mov, rm

    colectii de rutine pentru programatori

    tiparire/vizualizare arc, zip, tar fisiere ASCII sau binare ntr-un format destinat tiparirii sau

    vizualizariiarhiva arc, zip, tar grup de fisiere n

    forma compresatamultimedia mpeg, mov, rm fisiere binare cu

    informatie de tip audio/video

  • Accesul la datele memorate n fiiere se realizeaza prin urmatoarele metode:

    acces secvential; acces direct; acces indexat.

    3.2 D iversitatea datelor

    Se considera o colectivitate A c formata din elementele ai, a2, an,diferite.

    Se pune problema inserarii elementului ai+1 n colectivitatea Ac, cu conditia ca acesta sa fie, de asemenea, diferit de toate elementele a1, ..., an ale colectivitatii A c .

    n cazul n care acest nou element nu este diferit de toate elementele colectivitatii A c se pune problema calcularii gradului n care elementul an+1 este asemanator cu elementele deja existente n colectivitate.

    Obiectivele acestei lucrari sunt: definirea conceptului de ortogonalitate a datelor; construirea unor indicatori pentru evaluarea asemanarii; prezentarea structurii software orientata pe evaluarea

    ortogonalitatii; prezentarea de evaluari folosind o baza de texte.

    3.3 Conceptul de ortogonalitate a elementelor

    Doua drepte sunt ortogonale daca unghiul format la intersectia acestora are cosinusul egal cu zero, cu alte cuvinte cele doua drepte sunt perpendiculare. Un ansamblu de drepte este ortogonal daca dreptele ce-l compun sunt perpendiculare doua cte doua .

    Doua plane sunt ortogonale daca unghiul format la intersectia lor are cosinusul egal cu valoarea zero, adica cele doua plane sunt perpendiculare. Un ansamblu format din mai multe plane este ortogonal daca planele ce-l formeaza sunt ortogonale doua cte doua.

    Doi vectori sunt ortogonali daca produsul scalar al acestora este nul.n continuare o data este reprezentata uzual ca un numar (125 sau 0

    sau -400.72 sau +25.3e-4) sau un sir de caractere (masina sau 125 sau Cluj-Napoca-2000).

    Extinznd, rezulta ca datele D1 si D2 sunt ortogonale semantic, daca continutul informational al acestora, sensul lor, difera ntr-o maniera

  • categorica si semiotic, daca acestea au o formalizare matematica total diferita.

    Se considera vocabularul VT = {vi,v2 ,...,vn}, unde M,v2,...,vn sunt cuvinte din vocabular.

    Se construiesc frazele: Fr1 formata din cuvintele vi1,vk2, . , v kp; Fr2 formata din cuvintele v[1,vl2, . , mm .

    Lungimea ca numar de cuvinte a acestor fraze este:

    Lg(Fri) = Lg(vki Vk2 ... vkp) = p cuvinte Lg(Fr2) = Lg(vu V1 2 ... vm) = m f cuvinte

    Frazele Fr1 si Fr2 sunt ortogonale daca ele difera ca lungime precum si din punct de vedere al continutului, adica nu exista nici un cuvnt din fraza Fr1 care sa se regaseasca n fraza Fr2 si invers.

    Pentru colectivitatea A, elementele a1, a2, ..., an, diferite, se descriu printr-un numar de mc caracteristici specifice colectivitatii, C1, C2, ..., Cm .

    Pentru doua elemente oarecare a; si a aparinnd colectivitatii A se nregistreaza nivele ale caracteristicilor dupa cum urmeaza:

    ai = (ci1 , ci2 , , cimc)

    aj = (cj 1 cj 2 , , cjmc)

    unde cik este nivelul caracteristicii Ck pentru elementul ai .

    Un element x este ortogonal pe colectivitatea A daca si numai daca = = 0 , oricare ar fi ai , element al colectivitatii.

    n spatiul R1, pentru elementele x si y ale sale se defineste produsul scalar dintre cele doua elemente prin = x1*y1+x2*y2+ .+ x n*yn , daca x = ( x1 , x2 , . , xn) si y = (y1 , y2 . , yn ).

    Se defineste operatia T asa fel nct ck T cjk are valoarea zero daca pentru caracteristica Ck nu exista valori comune elementelor a si a si valoarea 1 n caz contrar.

    Se defineste pseudoprodusul scalar prin .Elementul ai este ortogonal cu elementul aj daca = 0, adica

    daca (ci1 T cj1 + ci2 T j^2 + . + c^ T cm ) = 0.

  • n conditiile n care elementele grupului sunt descrise prin caracteristici vom considera aceasta relatie adevarata daca fiecare termen este egal cu zero: cu T cj1 = 0, ci2 T cj2 = 0, . , cmc T c]m = 0.

    Relatia cik T cjk = 0 , k apartinnd multimii {1, 2, ..., m^}, reprezinta faptul ca elementele ai si aj ale grupului sunt total diferite dupa caracteristica Ck .

    Se defineste indicatorul care evidentiaza ortogonalitatea dintre doua elemente ale unei colectivitati sau, mai flexibil, care evidentiaza diferentele existente ntre elemente.

    Indicatorul normat Ii, cuprins n intervalul [0, 1] are valorile: Ii = 0, daca elementele sunt ortogonale ( nu au nimic n comun). Ii = 1, elementele sunt identice ( nu difera prin nici o

    caracteristica).

    Daca valorile lui Ii tind catre 0 nseamna ca seturile de date tind catre ortogonalitate, iar daca valorile indicatorului normat Ii sunt apropiate de 1 nseamna ca seturile de date au foarte multe elemente identice.

    Acest indicator se defineste pentru masurarea gradului de ortogonalitate dintre doua seturi de date (texte) si, de asemenea, pentru ortogonalitatea unui numar oarecare de seturi de date (texte).

    Se urmareste maniera n care doua fraze , doua texte, doua programe, doua baze de date sunt ortogonale, adica masura n care ele difera ca forma de prezentare si continut.

    De exemplu, se considera mai multi autori care scriu despre un acelasi domeniu.

    Lucrarile lor vor fi 100% ortogonale daca textele au comune numai cuvintele de specialitate, celelalte cuvinte fiind foarte diferite ca frecvente de aparitie n texte si ca pozitie n propozitii.

    Este mai important ca lucrarile sa fie ortogonale si nu total diferite. Daca lucrarile sunt total diferite nseamna ca nu apartin aceluiasi domeniu.

    La compararea textelor T1 si T2 se calculeaza separat frecventele pentru cuvintele de specialitate si frecventele pentru celelalte cuvinte, tabelele 3.2 si 3.3, unde:

    r - numarul de cuvinte cheie ale domeniului;s - numarul de cuvinte nespecifice ale domeniului.fii - frecventa de aparitie a cuvntului ai n textul Tj.g] - frecventa de aparitie a cuvntului nespecific Bi n textul Tj.

  • Frecvente de aparitie a cuvintelor cheiedomeniului

    Tabelul 3.2Cuvinte cheie Frecvente de aparitie

    T 1 T2a 1 fu f21a 2 f12 f22

    a r f1r f2r

    Frecvente de aparitie a cuvintelor nespecifice domeniuluiTabelul 3.3

    Cuvinte cheie Frecvente de aparitieT 1 T2

    B 1 g11 g21B 2 g12 g22

    B s g1s g2 .s

    Indicatorul normat I; se definete diferentiat pentru cele doua categorii de cuvinte care alcatuiesc textele.

    Pentru cuvintele cheie ale domeniului , indicatorul I1 ia valoarea I1 = 0 daca frecventele pentru aceleai cuvinte cheie

    din T1 si T2 sunt egale (fu = f2i, ( " ) i = 1, 2, ..., r); ia valoarea:

    X (i / - / i ), i=1____________________________

    r *max(| f 1i - f 2i |)(3.1)

    2

    2

  • Pentru cuvintele nespecifice domeniului , indicatorul I2: ia valoarea I2 = 0 daca frecventele pentru un acelasi cuvnt cheie

    din T1 si T2 sunt egale (gij = g j ( " ) j = 1, 2, . , s); ia valoarea:

    r 2

    S ( l g 1 j - g 2 j \)12 = 1 -------^ r (3.2)

    r * m a x ( \ g 1 j - g 2 j \)

    Pentru a scoate n evidenta masura n care cele doua texte sunt asemanatoare are loc o agregare a indicatorilor I si I2, obtinndu-se I.Astfel, Ia = =I1 * I2 , unde Ia ia valori ntre 0 si 1.

    De exemplu, se considera secventa de program SP1 definita prin:

    i f a > b then c=a+b; i f b > a then c=b-a;

    si secventa de program SP2 definita prin:

    fo r ( i = 0 ; i < a; i+ +) a-- ;

    fo r ( i = 0 ; i>b;b--) i++;

    pentru care se nregistreaza frecventele de aparitie a cuvintelor cheie din limbajul de programare C n tabelul 3.4 si frecventele de aparitie a cuvintelor utilizator n tabelul 3.5.

  • Tabelul 3.4

    Frecvente de aparitie a cuvintelor cheie aledomeniului

    Cuvinte cheie Frecvente de aparitieT 1 T2

    if 2 0then 2 0for 0 2= 2 2- 1 0+ 1 0< 0 1> 2 1

    5 2 6++ 0 2( 0 2) 0 2-- 0 2

    Frecvente de aparitie a cuvintelor nespecifice domeniului

    Tabelul 3.5Cuvinte cheie Frecvente de aparitie

    T 1 T2a 4 2b 4 2c 2 0i 0 4

    Se calculeaza indicatorii I1 si I2 si nivelul agregat al indicatorului Ia.

    11 = 1 - [ \2-0\2 + \2-0\2 + \2-2\2 + \0-2\2 + \1-0\2 + \1-0\2 + \0-1 \2 + \2-1\2 + \2-6\2 + \0-2\2 + \0-2\2 + \0-2\2 + \0-2\2 ] / [14 * 16] = 1 - ( 4 + 4 + 0 + 4 + + 1+ 1 + 1 + 1 + + 16 + 4 + 4 + 4 + 4 ) / 224 = 1 - 48 / 224 = 1 - 0,214 =0,786. (3.3)

    12 = 1- [ \4-2\2 + \4-2\2 + \2-0\2 + \0-4\2 ] / [4 * 16] = 1 - ( 4 + 4 + 4 +16 ) / 64 = = 1 - 28 / 64 = 1 - 0,437 = 0,562. (3.4)

  • Indicatorul agregat Ia, are valoarea:

    Ia = I i *I2 = 0,786 * 0,562 = 0,441. (3.5)

    rezulta ca gradul de ortogonalitate al celor doua texte este redus.Reutilizare de software presupune existenta de biblioteci de

    subprograme sau de clase si referirea de componente, fara ca acestea sa fie copiate sau modificate. Reutilizarea prin referire este un procedeu uzual n ingineria software, fara a fi clonare. n cazul n care reutilizarea se efectueaza prin macrogenerare apare conceptul de clonare acceptata, ntruct macrodefinitiile sunt constructii dedicate, acceptate din start ca fiind producatoare de secvente clonate.

    Exemplu: macrodefinitia

    cub x, yx = y * y * y

    prin referirea:

    cub x, y

    genereaza secventa:

    x = y * y * y

    Customizarea este un procedeu uzual prin care se genereaza variante de sisteme software adaptate cerintelor particulare ale utilizatorilor, pornind de la un produs de baza.

    Programul initial se dezvolta n forma cea mai generala si estegestionat de un alt program care l personalizeaza prin procesul decustomizare, maximiznd numarul functiilor de prelucrare, n raport cu datele furnizate la intrare.

    Rezultatul customizarii este un sistem de programe generat cuproceduri adaptate la cerintele utilizatorilor. Contine submultimi aleprodusului software de baza.

  • 3.4 Indicatori ai diferentelor m asurate dintre proceduri

    Procedurile dintr-un program sunt asemanatoare din urmatoarele puncte de vedere:

    al problemei pe care o rezolva; al instrumentelor folosite; al functiilor pe care le realizeaza; al tehnicilor de proiectare ; al performantelor.

    Este preferabil sa se construiasca proceduri si biblioteci de proceduri n scopul reutilizarii acestora pentru a creste productivitatea programatorilor si pentru a reduce volumul de munca vie ncorporata n programele noi care se elaboreaza. n cazul n care pentru o aceeasi tipologie de prelucrari se scriu mai multe proceduri, costurile aplicatiei informatice cresc nejustificat.

    Pentru a controla continutul textelor sursa din produsele software elaborate si utilizate n vederea reducerii ponderii componentelor identice realizate accidental este necesar sa se evalueze permanent ortogonalitatea procedurilor existente n aplicatiile aflate n uz curent sau n curs de elaborare.

    Astfel, se impune definirea unui sistem de indicatori cu scopul de a evalua asemanarea existenta ntre proceduri.

    Se considera doua proceduri Pri si Prj. Gradul de asemanare ntre cele doua componente ale colectivitatii formata din produsele software elaborate, se determina ca o medie geometrica ntre indicatorii ce caracterizeaza asemanarea procedurilor n functie de criteriile considerate (dimensiune ca numar de instructiuni, frecventa de aparitie a caracterelor alfabetice, frecventele de aparitie a cuvintelor unui vocabular dat de catre utilizator, frecventele de aparitie a cuvintelor ce formeaza cele doua proceduri, frecventele de aparitie a diferitelor tipuri de date, complexitate secvente program).

    Primul indicator J1 caracterizeaza asemanarea procedurilor Pri si Prj din punctul de vedere al lungimii acestora si se calculeaza ca raport ntre lungimea procedurii Pri si lungimea procedurii Prj.

    J 1 = , daca Li < L }. (3.6)L i

  • sau

    unde:L; - lungimea in octeti a procedurii Pri;Lj - lungimea in octeti a procedurii Prj;

    Aceasta se realizeaza pentru a determina un grad de asemanare relevant a carui valoare sa fie cuprinsa n intervalul [0, 1].

    Al doilea indicator J2 are n vedere surprinderea asemanarii dintre cele doua proceduri Pri si Prj n functie de frecventele de aparitie a caracterelor alfabetice.

    NTC

    nca .J 2 =

    NTC(3.8)

    unde:- NTC - reprezinta numarul total de caractere alfabetice (mari si

    mici);- ncai - ia una din urmatoarele valori:

    0, daca pentru caracterul i frecventele de aparitie n cele doua proceduri sunt diferite;

    1, daca pentru caracterul i frecventele de aparitie n cele doua proceduri sunt identice.

    Al treilea indicator J reflecta gradul de asemanare a celor doua proceduri n functie de un vocabular furnizat de catre utilizator.

    N C V

    X ncv iJ 3 = ------- (3.9)

    NCV

    unde:- NCV - numarul de cuvinte al vocabularului pentru care

    frecventele de aparitie n cele doua proceduri nu sunt egale si nule pentru un cuvnt dat;

  • - ncvi - ia una din valorile: 0, daca frecventele pentru cuvntul i sunt diferite sau egale,

    dar nule; 1, daca frecventele pentru cuvntul i sunt identice si diferite

    de zero.

    Urmatorul indicator, J4, are n vedere criteriul de comparare a elementelor privind frecventele de aparitie a totalitatii cuvintelor ce compun cele doua proceduri.

    N TC V

    X n cv/J 4 = -------- (3.10)

    NTCV

    unde:- NTCV - numarul total de cuvinte al celor doua elemente, cuvinte

    care sunt distincte;- ntcvi - ia una din urmatoarele valori:

    0, daca frecventele pentru cuvntul i sunt diferite sau cuvntul i nu se regaseste n cealalta procedura;

    1, daca pentru cuvntul i frecventele sunt identice n cele doua proceduri.

    Al cincilea indicator, J5, pune n evidenta asemanarea a doua elemente n functie de structura lor.

    j 5 = NESCC 3 3,1 1 )NMES

    unde:NESC - numarul de elemente structurale comune celor doua proceduri considerate, respectiv Pi si Pj;NMES - numarul minim de elemente structurale a celor doua proceduri Pri si Prj.

  • Urmatorul indicator, J6, determina gradul de asemanare a elementelor prin utilizarea unei matrice de precedenta. Acest grad de asemanare se foloseste pentru analiza gramaticala a elementelor.

    N CIJ 6 = -L , daca NCI, < N C I , (3.12)

    6 N C I , j ' '

    sau

    N C I ,J 6 = -1 , daca N C I , < NCI, (3.13)

    6 NCI, j > ' '

    unde:- NCIi - numarul de cuvinte interschimbabile din procedura Pri;- NCIj - numarul de cuvinte interschimbabile din procedura Prj.

    Aceasta se realizeaza pentru a determina un grad de asemanare relevant a carui valoare sa fie cuprinsa n intervalul [0, 1].

    Ultimul indicator, J7, are n vedere determinarea gradului de asemanare a celor doua elemente din punctul de vedere al complexitatii acestora.

    cmplxiJ 7 = ----------- , daca cmplx, < cmplx, (3.15)

    cmplxj 1sau

    cmplx jJ 7 = ----------- , daca cmplx, < cmplx, (3.16)

    cmplxi

    unde:cmplxi, cmplxj - complexitatile celor doua proceduri Pri si Prj.

    Gradul de asemanare a celor doua proceduri, J, reprezinta, de fapt, o sinteza a gradelor de asemanare calculate dupa cele sapte criterii amintite, realiznd o omogenizare a acestor indicatori.

    j = 7 n j , (3.17)V i=1

  • n final, pentru un produs software se determina indicatorul agregatJn care masoara gradul de asemanare a procedurilor ca medie geometrica ntre gradele de asemanare dintre toate componentele ce formeaza un produs software, componentele fiind luate doua cte doua.

    J = C tlJ (3.18) i =1

    unde:- Cn 2 - numarul de combinatii posibile de proceduri luate doua

    cte doua;- Ji - valori indicatori calculate pentru fiecare doua proceduri

    considerate;- ni - frecventa de aparitie a valorii respectivului indicator;- ki - numarul de valori distincte ale indicatorului J;.De exemplu, se considera procedurile:Pr1 - destinata calculului sumei patratelor elementelor unui masiv

    unidimensional al carui text sursa este:

    int sume(int x[], int n){

    int S;S=0;fo r (int j= 0 ;j

  • Pr3 - alegerea minimului dintre trei elemente ntregi al carui text sursa este:

    int min(int a,int b,int c){

    int min; min=a; if(min>b)

    min=b;if(min>c)

    min=c; return min;

    }

    Pr4 - alegerea maximului dintre trei elemente ntregi al carui text sursa este:

    int max(int a,int b,int c){

    int max;max=a;if(max

  • Frecventele de aparitie a cuvintelor cheie n procedurilePr1, Pr2, Pr3 si Pr4

    Tabelul 3.6

    Cuvinte cheie Frecvente de aparitiePr1 Pr2 Pr3 Pr4

    int 5 6 5 5} 1 1 1 1} 1 1 1 1( 2 2 3 3) 2 2 3 3= 3 3 3 3+ 1 1 0 0- 0 0 0 0[ 3 4 0 0] 3 4 0 05 6 6 5 5

    ++ 1 1 0 0return 1 1 1 1

    -- 0 0 0 0for 1 1 0 0< 0 0 0 2> 0 0 2 0if 0 0 2 2, 1 2 2 2* 1 1 0 0

  • Frecventele de aparitie a cuvintelor nespecifice din procedurilePr1, Pr2, Pr3 si Pr4.

    Tabelul 3.7Cuvinte nespecifice Frecvente de aparitie

    Pr1 Pr2 Pr3 Pr4sume 1 0 0 0

    x 3 2 0 0n 2 2 0 0S 5 5 0 00 2 2 0 0

    prod sc 0 1 0 0y 0 2 0 0

    min 0 0 8 0a 0 0 2 2b 0 0 3 3c 0 0 3 3

    max 0 0 0 8

    Se studiaza ortogonalitatea- ntre Pr1 si Pr2 si se obtine:

    Ia = I i *I2 = 0 . 8 * 0.7916 = 0.6(3) (3.19)

    - ntre Pr3 si Pr4 si se obtine:

    Ia = 0.8(3) * 0.9 = 0.75 (3.20)

    Din aceste doua comparatii rezulta ca gradele de ortogonalitatedintre Pr1 si Pr2, respectiv dintre Pr3 si Pr4 sunt foarte scazute.

    Se studiaza ortogonalitatea- ntre Pr1 si Pr3 si se obtine:

    Ia = I i *I2 = 0.68(3) * 0.6916 = 0.4769 (3.21)

    - ntre Pr2 si Pr4 si se obtine:

    I = 0.75 * 0.6875 = 0.515 (3.22)

  • Din aceste doua comparatii rezulta ca gradele de ortogonalitate dintre Pr1 si Pr3, respectiv dintre Pr2 si Pr4 sunt ridicate.

    3.5 S tructura software pentru analiza calitativa a noilor elemente incluse n baze de date

    Aplicatiile informatice complexe includ module program intercorelate si fisiere independente sau interdependente. n cazul folosirii unor SGBD-uri aplicatiile informatice includ texte sursa de baza, structuri generate si date care fac obiectul prelucrarilor precum si date necesare accelerarii proceselor de selectie si de regasire.

    Este important sa se gestioneze redundanta n bazele de date mai ales atunci cnd se impune ca textele stocate sa fie diferite ntre ele.

    De exemplu, se considera multimea ofertelor pentru obtinerea de fonduri de finantare si se impune ca ntre oferte sa existe diferente semnificative, n sensul nedepunerii aceleiasi oferte pentru doua licitatii sau n sensul depunerii de oferte asemanatoare n cadrul aceluiasi program.

    De asemenea, tezele de doctorat, lucrarile de licenta, articolele si cartile prezentate de autori pentru concursuri trebuie sa fie diferite unele de celelalte.

    n acest sens, este necesara construirea unui produs software care masoara gradul de ortogonalitate n cadrul unui fisier sau a unei baze de date precum si dintre fisiere, respectiv, baze de date.

    Se considera structura data n figura 3.1.

    Figura 3.1 S tructura software pentru indicatori de ortogonalitate

  • Produsul software destinat implementarii indicatorilor este scris n limbajul C++ si se caracterizeaza prin:

    vocabular definit de utilizator; mecanism de cautare combinatii de fisiere; evaluare frecvente; calcul indicatori simpli si indicatori agregati; afisare rezultate; stocari rezultate n vederea constituirii seriilor de date pentru

    analize statistice.

    Modul n care este proiectat permite includerea de noi indicatori si implementarea de noi mecanisme de analiza comparata a datelor.

    Produsul software a fost testat pentru evaluarea ortogonalitatii unui numar de 4 perechi de fisiere.

    n etapele urmatoare vor fi implementati indicatori destinati evaluarii gradului de ortogonalitate pentru n - tuple de fisiere.

  • CLONAREA SOFTWARE

    4.1 Evidenierea clonarii informatice

    Se considera o multime de programe, formate din componentele Pi, P2, ..., Pn. Fiecare program Pi, i = 1, 2, ..., n, este analizat si se efectueaza diferite masuratori, folosind modelele M u M;2, ..., Mck de calcul a unor indicatori. Problemele care apar sunt legate de:

    numarul n al programelor, n sensul colectarii unui numar foarte mare de programe, dintre cele elaborate; acest numar este dat fie de programele nscrise n registrul programelor lansate pe piata de software, fie de capacitatea de colectare a unui organism sau biblioteci specializate;

    extragerea dintr-o multime foarte mare de modele de indicatori asociati caracteristicilor de calitate, a unui numar ck de modele, considerate reprezentative, dar si suficiente pentru a obtine un indicator agregat care sa marcheze caracterul biunivoc al legaturii dintre multimea programelor si multimea valorilor calculate cu acest indicator agregat;

  • efortul necesar evidenierii situatiei n care pentru programele diferite Pi si Pj se obtin valori identice ale indicatorului agregat, se conchide cu o probabilitate de 0,99 ca unul din programele P, Pj este clona celuilalt.

    n realitate, nu sunt evaluate dect programele pe care proprietarii doresc sa le protejeze sau pentru care se fac masuratori n vederea compararii cu alte produse similare existente pe piata, pentru a le marca superioritatea. Desi, initial se defineste o multime de programe P 1, P2, ..., Pn, n realitate aceasta este numai un esantion, probabil, reprezentativ al multimii programelor aflate n uz curent.

    La multimea programelor se adauga noi componente Pn+1, Pn+2, ..., Pn+s. Din aceasta multime sunt retrase programe uzate moral. Structura multimii are o dinamica proprie, iar numarul ei de componente este o functie care depinde de timp, n = g(t). Mai mult, chiar componentele Pi ale multimii sufera n timp transformari, obtinndu-se versiuni, precum P(1),Pi(2), ..., Pi(r).

    Pentru simplificarea ipotezelor de lucru, se considera un moment de timp to, pentru care componentele multimii programelor sunt P1(0), P2(0), ..., Pn0(0), iar n0 = g(t0 ). Se vor utiliza notatiile initiale n0 -> n, Pi(0) -> Pi, t0 -> t1 pentru a simplifica dezvoltarile ulterioare. Trecerea de la momentul 0 la momentul t1 , devine numai o problema de utilizare a multor indici la nivelul variabilelor din modele.

    De asemenea, pe masura aparitiei unei noi versiuni, Pi(k), n multimea programelor noua versiune o nlocuieste pe cea veche, Pi(k-1). Multimea initiala a programelor este formata din componente diferite, realizate independent de echipele de dezvoltatori de software. Problema certificarii originalitatii programelor este definita numai pentru noile programe care se includ n multime. n mod practic, problema se pune n acelasi fel atunci cnd exista deja constituita o baza de programe si se adauga o noua componenta, Px. Este necesar mai nti sa se verifice daca n baza de programe nu exista deja respectiva componenta. n cazul n care n baza de programe se dovedeste ca programul Px deja exista, se deruleaza procesul de certificare a clonei.

    n cazul n care programul de adaugat, P, nu este regasit n baza de programe, se deruleaza procesul de certificare a originalitatii n raport cu ceea ce exista n baza de programe. Dupa aceea se procedeaza la adaugarea componentei n baza de programe.

    Certificarea clonarii se realizeaza prin compararea programului Px cu programele P1, P2, ..., Pn din baza de programe, bucata cu bucata.

  • De fiecare data sunt efectuate evaluari care au rolul de a identifica clone si de a ntrerupe procesul de analiza, respectiv, de a determina neincluderea programului Px n baza de programe.

    n continuare sunt prezentate tehnici de clonare a programelor nsotite de exemplificari. Problema clonarii software se solutioneaza fie manual, fie folosind instrumente de automatizare. Se considera ca programele sunt stocate sub forma de fisiere sursa.

    Tehnicile de clonare a programelor au n vedere copierea propriu- zisa a acestora de pe un suport de stocare pe altul, conversia datelor memorate dintr-un format n altul, translatarea programelor din punctul de vedere al limbajelor utilizate n realizarea acestora, transformari pe textul sursa al programelor, restructurarea codului sursa n vederea optimizarii acestuia, schimbarea structurilor de date utilizate precum si aducerea la o forma comuna a subprogramelor de tip functie si procedura.

    4.2. Copierea de fisiere

    Se considera fisierul Fs cu o extensie data, stocat pe un suport. Copierea fisierului pe acelasi suport X se realizeaza sub un alt nume, Gf, avnd aceeasi extensie, figura 4.1.

    X

    FsCopi e re

    Gf

    Figura 4.1 Copierea fisierului pe acelasi suport

    n cazul n care fisierul Fs aflat pe suportul X este copiat pe suportul Y, fie i se mentine numele, fie i se atribuie un nou nume, G, figura 4.2.

    Y

    Y

    Figura 4.2 Copierea fisierului pe un alt suport

  • Extensiile fisierelor ramn neschimbate.Sistemul de operare MS-DOS permite copierea fisierelor prin

    instructiunea copy definita astfel:

    copy [/a | /b] sursa [/a | /b] [[/a | /b] + sursa [/a 1 /b] [+ ...]] [//] [/n] [/y 1 /-y] [/z] [/a | /b] [destinatie [/a | /b]]

    unde parametrii au semnificatia urmatoare: sursa - specifica locatia si numele unuia sau mai multor fisiere

    de unde se copiaza; locatia este un disc, un director, un fisier sau o combinatie de acestea;

    destinatie - specifica locatia si numele unuia sau mai multor fisiere unde se copiaza; locatia este un disc, un director, un fisier sau o combinatie de acestea;

    /a - indica un fisier text ASCII; d - indica un fisier binar; / / - verifica daca noile fisiere sunt scrise corect; /n - se foloseste un nume scurt de fisier cnd copierea are loc

    pentru un fisier cu un nume mai mare de opt caractere sau extensia e mai mare de trei caractere;

    /-y - se cere confirmarea suprascrierii unui fisier; /z - se copiaza fisiere din retea n mod restartabil, daca n timpul

    copierii se pierde conexiunea.

    Sistemul de operare Windows efectueaza copierea de fisiere prin urmatoarele metode:

    a) tragere si plasare" (drag-and-drop) - sunt efectuate urmatoarele operatii: se selecteaza fisierul care se copiaza; se tine apasat butonul stnga al mouse-ului; se plaseaza fisierul deasupra directorului destinatie; se elibereaza butonul stnga al mouse-ului.

    b) copiere si lipire" - sunt parcurse urmatoarele operatii: se selecteaza fisierul care se copiaza; se copiaza fisierul n Clipboard prin selectare optiune Copy

    din meniul de context, meniul Edit sau bara de instrumente; se selecteaza destinatia unde se copiaza fisierul; se copiaza propriu-zis fisierul prin selectare optiune Paste

    din meniul de context, meniul Edit sau bara de instrumente.

  • c) "trimitere la disc flexibil" - daca se copiaza fisiere pe dischete, atunci din meniul de context se alege optiunea Send To 3 V2 Floppy (A); trimiterea este generalizabila.

    Fisierele se copiaza fie unul cte unul, caz n care sunt repetate operatiile de mai sus pentru fiecare, fie toate o data, acestea selectndu-se cu ajutorul mouse-ului sau a tastelor de directare, pe de o parte, si a tastelor CTRL sau SHIFT, pe de alta parte.

    De exemplu, daca fisierul As este copiat, dupa efectuarea operatiilor descrise anterior, se obtine fisierul Bs. Copierea se realizeaza:

    pe acelasi suport; pe alt suport; n acelasi director; n alt director.

    Copierea fisierelor reprezinta unul din cazurile de clonare perfecta. tiparire fisiere - presupune realizarea imprimarii continutului

    fisierelor text cu sau fara format; stergere fisiere - operatie prin care se realizeaza eliminarea de pe

    suportul magnetic extern a continutului si a datelor de descriere.Problema gestionarii documentelor sub aspectul denumirii, versiunii,

    lungimii, datei crearii si/sau modificarii de fisiere constituie un domeniu distinct deosebit de important, abordat de cercetarile n birotica moderna.

    Exista instrumente care permit clonarea dischetelor, a discurilor optice si a hard-disk-urilor. Pe lnga faptul ca se copiaza fisierele si directoarele de pe o unitate de stocare pe alta, avnd acelasi continut, clona obtinuta are aceeasi structura ca si originalul.

    4.3 Conversia de fisiere

    Fisierul F s are o extensie x, ceea ce nseamna ca n procesul de creare au fost respectate o serie de reguli. Extensiile uzuale sunt:

    CPP - fisierul contine un text sursa construit dupa cerintele limbajului C++;

    PAS - fisierul contine un text sursa scris n conformitate cu cerintele limbajului Pascal;

    TPU - sunt stocate unit-uri pentru programele scrise n limbajul Pascal, fiind construite conform sintaxei limbajului Pascal;

  • ASM - contine secvente de instructiuni ale limbajului de asamblare care sunt reunite sub forma de fisier sursa;

    OBJ - fisierul contine module obiect rezultate n procesul de compilare sau asamblare;

    EXE - contine cod executabil obtinut n urma stabilirii de legaturi ntre modulele obiect continute n fisierele cu extensia OBJ;

    D AT - sunt stocate date care sunt memorate direct n format binar, fara efectuare de conversii n diverse formate si coduri (ASCII, UNICODE);

    DOC - fisiere de tip document rezultate din lucrul cu un procesor de texte;

    TXT - contine date memorate n format ASCII, scrierea datelor pe disc efectundu-se cu conversie;

    XLS - fisiere de tip foaie da calcul tabelar rezultate din lucrul cu o aplicatie de calcul tabelar;

    ZIP - contine fisiere de tipul celor enumerate mai sus asupra carora s-a aplicat un algoritm de compresie de date;

    HTML - fisiere construite conform sintaxei limbajului HTML a caror continut este vizualizat cu ajutorul unui browser web;

    BMP - contine date ce sunt vizualizate sub forma unei imagini; JPEG - fisiere care contin date de tip imagine asupra carora se

    aplica un algoritm de compresie; A V I - fisiere care contin date de tip multimedia: imagini, video,

    sunet;Conversia este procesul prin care un fisier Fs de intrare, avnd o

    extensie data a , este transformat, obtinndu-se la iesire un fisier Fs avnd o alta extensie b , figura 4.3.

    Figura 4.3 Conversia fiierului de la tipul a la tipul b

    Trebuie sa existe si operatia de conversie inversa care executa transformarea de la extensia b la extensia a , figura 4.4.

  • Fs.a Conversie directa

    Fs.b Fs.a

    Figura 4.4 Conversia directa si conversia inversa a fisierelor

    Compilarea programelor scrise n limbajele evaluate C++, COBOL, PASCAL, FORTRAN sunt compilate si sunt construite modulele obiect, figura 4.5.

    Fisieresursa

    Compilarew w Modulobiect

    Figura 4.5 Compilarea fisierelor cu extensia CPP, PAS

    Asamblarea programelor cu extensia ASM determina obtinerea, de asemenea, a modulelor obiect, figura 4.6.

    Program scris n limbaj de asamblare

    AsamblorV wModulobiect

    Figura 4.6 Obtinerea modulelor obiect prin asam blare

    Operatia inversa compilarii este decompilarea. Transformarea inversa a asamblarii este dezasamblarea modulelor obiect.

    Uzual se construiesc programe utilitare pentru conversie, preponderent pentru conversia fisierelor grafice.

  • 4.4 T ranslatarea fisierelor sursa

    Translatarea este un proces prin care un program scris ntr-un limbaj Lli este transformat ntr-un program care realizeaza aceleasi functii pe care le are programul initial, scris n limbajul Llj.

    Translatoarele sunt programe care asigura prin generalitatea lor obtinerea de structuri de programe. Un translator opereaza transformari la nivel de procedura sau functie, dar si la nivel de modul si chiar la nivel de sistem de programe.

    De exemplu, constructiei

    var ++;

    din limbajul C++ i va corespunde n programe Pascal urmatoarea constructie:

    var:= var + 1 ;

    Scrierea n corespondenta a cuvintelor cheie permite realizarea de definiri de operanzi echivalenti n programele C++, pornind de la programele Pascal.

    Exemplu:

    int integerfloat realstruct recordswitch case* char string

    Descrierii:

    struct nume { tip1 nume1 ; tip2 nume2 ;

    tipn numen ;};

  • din programe C++, i va corespunde constructia n limbajul Pascal:

    nume = record nume1 : tip1 ; nume2 : tip2;

    numen : tipn ; end;

    Implementarea structurilor alternative multiple:

    switch (expresie){case vall: {... break;} case val2 : {... break;}

    default: {... break;}}

    din programele C++ i corespunde descrierea urmatoare n limbajul Pascal:

    case expresie o f beginvall: begin... end; val2 : begin... end;

    valn: begin... end; end;

    Programele translatoare au capacitatea de a dezvolta transformari la nivel de linie sursa sau instructiune, ct si la nivel de secventa pentru a oferi solutii complete, proprii limbajului destinatie.

    Blocurile delimitate n programele Pascal de begin si end se delimiteaza n programele C++ prin { s i}.

  • 4.5 T ransform ari pe text sursa

    Se construiesc programe care opereaza pe text sursa, producnd modificari ce determina crearea de diferente ntre textul sursa initial si cel obtinut ulterior. nlocuirea denumirilor de variabile si etichete presupune:

    > traversarea textului sursa si crearea vocabularului de cuvinte generate de programator;

    > se genereaza siruri de caractere cu rol de identificator variabile sau etichete;

    > se pun n corespondenta sirurile generate cu cuvintele vocabularului creat de programator;

    > se nlocuiesc sirurile generate cu sirurile corespondente din textul sursa.

    Pentru exemplificare, se considera secventa:

    vcub = l * l * l;

    vpiramida = (B * b * h) / 3;

    vsfera =( 3.14159 * 4 * R * R * R) / 3;

    vcilindru = 3.14159 * R * R * G;

    vcon = (3.14159 * R * G * G) / 3

    se genereaza vocabularul format din cuvinte utilizator: vcub, l, vpir, B, b, h, vsfera, R, vcil, G, vcon.

  • Vocabularul este pus n corespondenta cu sirul generat: sir1 , sir2 , sir3 , sir4 , sir5 , sir6 , sir7, sir8 , sir9 , sir1 0 , sir1 1 . Se pun n corespondenta:

    vcub - sir1

    l - sir2

    vpiramida - sir3

    B - sir4

    b - sir5

    h - sir6

    vsfera - sir7

    R - sir8

    vcilindru - sir9

    G - sir10

    vcon - sir1 1

    Prin nlocuire se obtine secventa:

    sir1 = sir2 * sir2 * sir2 ;

    sir3 = (sir4 * sir5 * sir6) / 3;

    sir7 =( 3.14159 * 4 * sir8 * sir8 * sir8) / 3;

    sir9 = 3.14159 * sir8 * sir8 * sir1 0 ;

    sir11 = (3.14159 * sir8 * sir1 0 * sir10) / 3

  • Optimizarea automata a programelor presupune efectuarea de operatii pe texte sursa, precum:

    eliminarea subexpresiilor comune; eliminarea invariantilor; eliminarea codului mort; simplificarea prin calcul simbolic; concatenarea de structuri repetitive.

    Un program care optimizeaza programe, opernd pe text sursa transforma secventa:

    s 1 = 0 ;fo r ( i = 0 ; i < n; i ++)

    s 1 + = x [i]; s2 = 0 ;fo r ( i = 0 ; i < n; i ++)

    s 2 + = x [i] * x [i]; s3 = 0;fo r ( i = 0 ; i < n; i ++) s4 = 0;fo r ( i = 0 ; i < n; i++)

    {c = 0 ;s4 + = x [i] * x [ i] * x [i];}

    l = (a * a + b * b + c * c) * ( a * a + b * b + c * c - 1 ) * (a * a + b * b); g = (a * a + b * b + c * c) / (a * a + b * b + c * c) - 1 ;

  • devenind, dupa optimizare:

    s1 = s2 = s3 = s4 = 0; fo r (i = 0 ; i < n; i ++)

    {s 1 + = x [i]; s 2 + = x [i] * x [i]; s3 + = x [i] * x [i] * x[i]; s4 + = x [i] * x [i] * x [i] * x [i]; }

    c = 0 ;alfa = c * c; aux = aa + bb + alfa; l = aux * (aux - 1 ) * (aux - alfa) g = 0 ;

    Programele care genereaza secvente echivalente au menirea de a nlocui constructii de forma:

    var = var + 1 ;

    cu

    var ++;

    saui f (expresie1)

    var = expresie2 ; else

    var = expresie3 ;

    cu(expresie1) ? expresie2 : expresie3;

  • saui = 0; s1 = 0; s2 = 0; s3 = 0; 1 0 : i f ( i >= n) goto 2 0 ; s 1 = s 1 + x [i]; s 2 = s 2 + x [i] * x [i]; s3 = s3 + x [i] * x [i] * x [i]; i = i + 1 ; goto 1 0 ;20: s4 = s1 + s2 + s3;

    n secventa:

    s1 = s2 = s3 = 0; fo r ( i = 0 ; i < n; i ++)

    {s 1 + = x [i];s 2 + = x [i] * x [i];s3 + = x [i] * x [i] * x [i];}

    s4 = s1 + s2 + s3;

    Secventele echivalente se construiesc si prin interschimbul de linii sursa, daca instructiunile sunt independente unele de celelalte. Secventa:

    s = a + b + c;i f ( x > y)

    z = x * y; else

    z = x - y;

    devine:

    i f ( x < = y)z = x - y;

    elsez = x * y;

    s = a + b + c;

  • Schimbarile se produc n cadrul unei unitati, fie ca e vorba de program principal, fie ca este o functie sau o procedura. Inserarea de instructiuni sau de secvente cu caracter neutru au menirea de a transforma un program initial. Secventa:

    e = a + b; g = a - b; h = a * b;

    prin introducerea unor instructiuni distincte cu efect ce va fi anulat ulterior, se obtine o noua secventa:

    e = ( a - 1 ) * ( b -1 ); g = ( a + 1 ) * ( b +1 ); h = ( a+b) * ( a - b); e = a + b; g = a - b; h = a * b;

    Daca instructiunile se insereaza, secventa initiala devine: e = ( a - 1 ) * ( b - 1 ); e = a + b;g = ( a + 1 ) * ( b + 1 ); g = a - b;h = ( a + b) * ( a - b); h = a * b;

    Negarea expresiei conditionale interschimba secventele de instructiuni din structurile alternative. Secventa:

    i f ( a){e 1 = a + b; e2 = a - b; e3 = a * b;}

    else{e 1 = b / ( a +1 ); e2 = b; e3 = a;}

  • devine:i f (!(a))

    {e 1 = b / ( a+ 1 ); e2 = b; e3 = a;}

    else{e 1 = a + b; e2 = a - b; e3 = a * b;}

    Controlul efectului de ondularitate. Toate modificarile induse de procesele de clonare genereaza efecte de ondulanta. n toate situatiile clonarea trebuie sa gestioneze ondulanta si sa asigure stabilitatea prelucrarilor, cel putin la nivelul programului initial.

    n cazul n care unui program P i se asociaza proceduri ale altui program Rp rezulta un produs combinat, notat n continuare Sc. Produsul Sc este rezultatul procesului de concatenare directa, cnd programele R si P sunt ortogonale din punct de vedere a definirilor si referirilor, figura 4.7.

    a, b, x, y,a, b, c

    Figura 4.7 Concatenare program e ortogonale

    Cnd ortogonalitatea nu este totala si apar interferente se impune construirea de secvente n care apar variabile intermediare care asigura conditia de ortogonalitate.

    Cnd se cloneaza software apar cazuri frecvente n care la programul initial sunt adaugate secvente sau functii care efectueaza prelucrari de

  • sigurana, editari de rezultate, salvari de fisiere, noi regrupri de date, noi sortri sau se obtin noi rapoarte. n sistemul de programe din figura 4.8:

    Figura 4.8 Sistem de program e n cascada

    Datele de intrare sunt preluate de pe un CD si prelucrate de programele P1 si P2. Se obtin situatiile finale Sf1 si S f cu folosirea fisierului intermediar Fi1.

    Prin clonarea sistemului de programe n cascada la care se adauga programelor P1 si P2 noi proceduri F1( ), F2( ), desemnnd P 1 si, respectiv, P 2 se va utiliza un nou fisier Fi2 si se obtin noi rapoarte prin adaugarea programului P3 care realizeaza o functie de prelucrare comuna, figura 4.9.

    Figura 4.9 Sistem de program e clonat cu adaugare de proceduri

    Includerea unui program copiat ntr-un sistem de programe este un mod uzual de ascundere a clonelor.

  • Se considera programul P clonat prin copiere mecanica, mpreuna cu fisierele Fs1 si Fs2 atasate, figura 4.10:

    F igura 4.10 Program cu date de intrare/iesire pe disc

    Sistemul de programe SP ncorporeaza clona P prin manipularea fisierelor Fs1 si Fs2, figura 4.11:

    SistemulS

    Figura 4.11 Sistem de program e cu clona ncorporata

    4.6 R estructurarea program elor

    Daca programul este dat sub forma de program principal, se identifica parti apelabile, produsul transformat fiind un program apelat si mai multe proceduri n cazul n care transformarea vizeaza contopirea modulelor ntr-un program fara apeluri, se produce integrarea de secvente ntr-un tot unitar, cu gestionarea parametrilor reali.

  • Programul:

    citeste a, b, c x = minim (a, b, c) y = maxim (a, b, c) z = minim (a, b, a) w = maxim (b, c, c) e = x + y +z + w

    devine:int minim(int a, int b, int c)

    {min = a;i f (min > b) min = b; i f (min > c) min = c; return min;}

    int maxim(int a, int b, int c) {max = a;i f (max < b) max = b; i f (max < c) max = c; return max;}

    min = a;i f (min > b) min = b; i f (min > c) min = c; x = min;

    max = a;i f (max < b) max = b; i f (max > c) max = c; y = max;

    min = a;i f (min > b) min = b; i f (min > a) min = c; z = min;

  • max = b;i f (max > a) max = b; i f (max > c) max = c; w = max;

    e = x + y + z + w;

    Separarea secventelor n proceduri distincte fie este rezultatul analizei repetabilitatii se secvente, fie se efectueaza mecanic.

    Reunirea definirilor de operanzi consta n a concatena liste de variabile avnd acelasi tip.

    Secventa:

    tip1 V1 , V2 , ..., v n ; tip2 u i , u2 , ..., um , tip1 W1 , W2 , ..., Wk ;tip2 y 1, y 2 , ..., y r;

    devine dupa concatenari:

    tip1 V1, V2 , ..., Vn , W1 , W2 , ..., Wk ;tip2 u 1 , u2 , ..., um , y u y 2 , ..., y r;

    Interschimbul de operanzi are la baza comutativitatea operatorilor. Expresia:

    e = a * (b + c + d)

    devine:

    e = (d + c + b) * a

    sau

    e = (c + b + d) * a

  • Interschimbul elementelor din lista omogena de definire sau din liste de parametri formal, respectiv, liste de parametri reali determina aparitia de modificri n texte sursa, fara influente asupra semnificatiei secventelor.

    tip vi, v 2 , V3 , ..., v;

    se nlocuieste prin:

    tip Vn, Vn-1 , ..., V2 , Vi;

    Sau, n cazul definirii unei functii:

    tip nume (tip1 V1, tip2 v2, ..., tipn Vn)

    este nlocuita prin:

    tip nume (tipn Vn, tipn 1 Vn-1, ..., tip2 v2, tip1 V1)

    si, n mod corespunzator, apelul:

    nume (x1, x2, ..., x n)

    este nlocuit cu apelul:

    nume (xn, x.i , ..., x 2, x 1)

    Reunirea de proceduri presupune ca ntr-un program n care se apeleaza procedurile Pri, Pr2, ..., Prn, avnd listele de parametri Lpi, Lp2, ..., Lpn se modifica n sensul apelarii unei singure proceduri Pr avnd o lista de parametri Lp = Lp1 u Lp2 u Lp3 u ... u Lpn u Lo, unde L este o lista aditionala a variabilelor de stare si a celor de solutie.

    Se considera programul Ap care apeleaza procedurile:

    int suma(int x [ ], int n){int s = 0 , i;fo r (i = 0 ; i < n; i ++)

    s += x [i]; return s;}

  • intprod (int x [ ], int y [], int n) {int p = 0;fo r (i = 0; i < n; i + +)

    p + = x [i] * y [i]; return p;}

    int minim (int x [], int n){int min, i; min = x [0]; fo r ( i = 1; i < n; i++))

    i f (min > x [i]) min = x [i];

    return min;}

    int max ( int x [], int n){int max, i; max = x [0]; fo r ( i = 1; i < n; i ++)

    i f ( max < x [i]) max = x [i];

    return max;}

    Prin clonare cu reunire de proceduri se ajunge la constructia: int calcul ( int x [], int y [], int n, int k)

    {int s, p, max, min, i; i f ( k == 0)

    {s = 0;

    fo r ( i = 0; i < n; i ++){

  • s += x [i]; return s;}

    }else

    i f (k == 1){p = 0;

    fo r ( i = 0; i < n; i ++){

    p += x [i] * y [i]; return p;}

    }else

    i f (k == 2){min = x [0]; fo r ( i = 1; i < n; i ++)

    {i f (min > x [i])

    min = x [i]; return min;

    }}

    else{max = x [0];fo r ( i = 1; i < n; i++)

    {i f ( max < n)

    max = x [i]; return max;

    }}

    }

  • n cazul n care cele patru proceduri se afla n programul principal numai n secvente de forma:

    a = suma ( x, n); b = prod ( x, y, n); c = minim (x , n ); d = maxim ( x, n);

    r = suma ( x, n); q = prod ( x, y, n); t = minim ( x , n ); u = maxim ( x, n);

    alfa = suma ( x, n); beta = prod ( x, y, n); gama = minim (x , n );delta = maxim ( x, n);

    cele patru se concateneaza si dupa optimizare rezulta:

    int * calcul ( int x [], int y [] , int n){int s [4], i; s [0] = s [1] = 0; s [2] = s [3] = x [0]; fo r ( i = 0; i < n; i ++)

    {s [0] += x [i]; s [1] += x [i] * y [i];

    i f ( s [2] > x [i]) s [2] = x [i];

    i f ( s [3] < x [i]) s [3] = x [i];

    }return s;}

  • Pentru aceste modalitati se construiesc instrumente care efectueaza mai nti o analiza pe matrice de precedenta dupa care, n mod automat, genereaza secvente n trepte obtinndu-se cresterea gradului de ortogonalitate a fisierelor de texte sursa.

    Daca se opereaza nlocuiri ale numelor de functii si ale numelor de variabile, deja efectele induc un grad de diferentiere majorat ale textului sursa rezultat fata de textul sursa initial.

    De exemplu, functia:

    floa t calcul( int a, floa t b){

    floa t d; d = a + b; return d;}

    Dupa interschimburi n liste si n expresii, se obtine constructia:

    floa t calcul( floa t b, int a){

    floa t d; d = b + a; return d;}

    Daca se opereaza cu nlocuiri de nume:

    calcul -> suma b -> x a -> y d -> z

    atunci noua constructie va fi:

    floa t suma( floa t x, int y){

    floa t z; z = x + y; return z;}

  • 4.7 Schimbarea structurilor de date utilizate

    Prin schimbarea structurilor de date utilizate se urmareste aducerea la o forma comuna a programelor, precum si cresterea gradului de modularitate a acestora. Schimbarea structurilor de date utilizate ntr-un program are n vederea urmatoarele aspecte:

    - utilizare articole n loc de variabile elementare;Secventa:

    int n rm a t;char nume[20], prenume[30]; flo a t medie;

    este transformata n:

    struct student {int nr mat; char nume[20]; char prenume[30]; flo a t medie;}

    - utilizare masive bidimensionale;De exemplu, denumirile de discipline sunt memorate n astfel de

    structuri de date:

    char disciplina1[20], disciplina2[20], disciplina3[20];

    obtinndu-se urmatoarea secventa:

    char discipline[20][20];

  • n masivul bidimensional anterior fiecare disciplina este memorata pe o linie a matricei.

    - folosire de variabile de tip pointer;De exemplu, secventa:

    student stud1;

    este nlocuita de:

    student * studi;

    - definire de clase de obiecte.Prezinta avantajul de a reuni n cadrul aceleiasi structuri att starea

    unui obiect, ct si comportamentul acestuia. Astfel, pentru entitatea student avem secventa:

    int nr_mat, note[10]; char nume[20], prenume[30]; floa t medie;

    floa t calculm edie ( int note[]) {int i, s; s = 0;fo r ( i = 0; i < 10; i ++)

    s = s + note [i]; return s /10;}

    medie = calcul medie (note);

  • care, transformata n clasa de obiecte, devine:

    class student {int nr mat, note[10]; char nume[20], prenume[30]; flo a t medie;void calculm edie (int note[ ]);

    };

    void student:: calcul medie ( int note[]) {int i, s; s = 0;fo r ( i = 0; i < 10; i ++)

    s = s + note [i]; medie = s /10;}

    4.8 Omogenizarea tipurilor de functii

    Are n vedere aducerea la o forma comuna a subprogramelor de tip functie prin efectuarea urmatoarelor operatii:

    - nlocuire void cu int prin introducerea unei variabile de control; De exemplu, functia:

    void minim (int a, int b, int *c){i f ( a > b)

    *c = b;}

  • este adusa la forma urmatoare:

    int minim (int a, int b, int *c){int vb = 0; i f ( a > b)

    {*c = b;Vb = 1;}

    return vb;}

    - mod identic de transmitere a parametrilor pentru toate functiile; De exemplu, transmiterea parametrilor prin adresa pentru toate

    functiile:int minim (int a, int b, int *c)

    {int Vb = 0; i f ( a > b)

    {*c = b;Vb = 1;}

    return vb;}

    Forma functiei minim dupa aceasta operatie este:

    int minim (int *a, int *b, int *c){int Vb = 0;i f ( (*a) > (*b))

    {*c = *b;Vb = 1;}

    return vb;

    utilizarea unei singure instructiuni return.

  • Pentru functia:

    int minim (int a, int b){i f ( a > b)

    return b; else

    return a;}

    efectuarea acestei operatii conduce la urmatoarea secventa:

    int minim (int a, int b){int min = a; i f ( a > b)

    min = b; return min;}

    - utilizare exclusiva a structurii de tip DO-WHILE, nlocuind structurile de tip DO-FOR si DO-UNTIL.

    Fie functia:

    floa t calcul medie ( int note[]){int i, s; s = 0;fo r ( i = 0; i < 10; i + +)

    s = s + note [i]; return s /10 ;}

  • Omogenizarea conform acestei operatii conduce la obtinerea secventei de cod:

    floa t calcul medie ( int note[]){i