Sunteți pe pagina 1din 211

Cuprins

1. Introducere ..................................................................................................... 3
2. Procese de clonare ........................................................................................ 9
2.1. Programe, module, proceduri .............................................................................................. 9
2.2. Macrodefiniţii şi proceduri ................................................................................................ 11
2.3. Integrarea de componente reutilizabile ......................................................................... 15
2.4. Redundanţa din programe ................................................................................................... 17
2.5. Reutilizarea de software .................................................................................................... 18
2.6. Caracteristicile clonării ...................................................................................................... 21
3. Ortogonalitatea fişierelor ........................................................................... 25
3.1. Fişiere ...................................................................................................................................... 25
3.2. Diversitatea datelor ............................................................................................................ 28
3.3. Conceptul de ortogonalitate a elementelor .................................................................... 28
3.4. Indicatori ai diferenţelor măsurate dintre proceduri ................................................ 35
3.5. Structura software pentru analiza calitativă a noilor elemente incluse în baze
43
de date ............................................................................................................................................
4. Clonarea software ......................................................................................... 45
4.1. Evidenţierea clonării informatice ..................................................................................... 45
4.2. Copierea de fişiere .............................................................................................................. 47
4.3. Conversia de fişiere ............................................................................................................. 49
4.4. Translatarea fişierelor sursă ............................................................................................ 52
4.5. Transformări pe text sursă ............................................................................................... 54
4.6. Restructurarea programelor ............................................................................................. 62
4.7. Schimbarea structurilor de date utilizate .................................................................... 70
4.8. Omogenizarea tipurilor de funcţii .................................................................................... 72
4.9. Efectele clonării asupra complexităţii programelor .................................................... 75
5. Clonarea datelor ............................................................................................. 79
5.1. Aplicaţii ale bazelor de date .............................................................................................. 79
5.2. Gestiunea contractelor ....................................................................................................... 82
5.3. Clonarea integrală ................................................................................................................ 83
5.4. Clonare structură bază de date ........................................................................................ 85
5.5. Clonare parţială a structurii bazei de date ................................................................... 86
5.6. Clonare bază de date cu adăugare de tabele ................................................................. 88
6. Clonarea interfeţelor om – calculator ....................................................... 91
6.1. Conceptul de interfaţă om – calculator ........................................................................... 91
6.2. Tehnologii pentru dezvoltarea interfeţei om – calculator ......................................... 92
6.3. Diversitatea interfeţei om - calculator .......................................................................... 95
6.4. Orientarea clonării informatice către utilizator .......................................................... 97
6.5. Tehnici şi metode utilizate în clonarea interfeţelor ................................................... 98
6.6. Efectele clonării unor interfeţe ....................................................................................... 101
7. Aspecte juridice ale clonării informatice ................................................ 103
7.1. Protecţia juridică a programelor de calculator şi a bazelor de date ....................... 103
7.2. Căi de creştere a eficienţei în combaterea clonării informatice neautorizate .... 114
7.3. Codul etic al programatorului ............................................................................................ 117
7.4. Codul etic al utilizatorului .................................................................................................. 119
8. Matrici ale clonării ........................................................................................ 131
8.1. Conceptul de metrică utilizat în aplicaţii informatice ................................................. 131
8.2. Metrici ale ortogonalităţii fişierelor sursă C++ ............................................................ 135
8.3. Amprenta programului ......................................................................................................... 159
8.4. Metrici ale ortogonalităţii masivelor bidimensionale ................................................... 169
8.5. Matricea de precedente ..................................................................................................... 172
8.6. Matricea dependeţelor ....................................................................................................... 175
9. Alte aspecte ale clonării informatice ...................................................... 181
9.1. Gestionarea clonelor informatice ..................................................................................... 181
9.2. Efecte economice ale clonării informatice ..................................................................... 183
9.3. Instrumente pentru identificarea clonelor ................................................................... 186
10. Concluzii ......................................................................................................... 195
Anexă – Lista de variabile şi acronime .................................................................................... 197
Bibliografie .................................................................................................................................... 206
1 INTRODUCERE

Dezvoltarea societatii informationale presupune un nou mod de


abordare a productiei si circulatiei 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

3
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 cât si situatiile în care se obtin valori
particulare.
Din multimea indicatorilor se extrag cei mai importanti, obtinându-
se o sublista recunoscuta în continuare sub denumirea de amprenta a
programului.
O amprenta a programului este definita în unul din urmatoarele trei
moduri:
v lista de indicatori formata din reuniunea sublistei indicatorilor de
structura si, respectiv, cu sublista indicatorilor de comportament;
v indicator agregat fara diferentiere a importantei factorilor de
influenta;
v 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 còpii 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. Simplificând 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 atât tehnice, cât si juridice care trebuie cunoscute
pentru a putea gestiona corect circuitul complet al produselor informatice.

4
Stadiul actual al dezvoltarii societatii informationa le [GHIL02]
românesti 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 România 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 frâna
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
5
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 întrucât 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 întâi 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 atât timp cât 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 reprezentând 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.

6
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
vând 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 rând clona, întrucât 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 încât 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
7
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.

8
2 PROCESE DE CLONARE

2.1 Programe, module, proceduri


Programul este o constructie destinata rezolvarii 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 I1 ,
I2 , …, INi. Instructiunile folosite sunt aranjate într-o succesiune logica,

9
formând liniile sursa ale programului. De exemplu, fie programul
PSUM.CPP, care însumeaza elementele unui sir de numere:
#include <stdio.h>
#include <conio.h>
void main()
{
int a[10],s,i,n;
printf(„\n Numarul de elemente:”);
scanf(„%d”,&n);
printf(„\n Valorile elementelor:”);
for(i=0;i<n;i++)
{
printf(„\n a[%d]=”,i+1);
scanf(„%d”,&a[i]);
}
s=0;
for(i=0;i<n;i++)
s+=a[i];
clrscr();
printf(„\n Suma elementelor este:%d”,s);
}

Programul PSUM.CPP are 19 linii sursa si pentru fiecare linie sursa


numarul caracterelor care o compun este dat în tabelul urmator:
Numar caractere pe linie sursa
Tabelul 2.1
Linie sursa Numar de caractere
#include <stdio.h> 18
#include <conio.h> 18
void main() 11
{ 1
int a[10],s,i,n; 16
printf(„\n Numarul de elemente:”); 34
scanf(„%d”,&n); 15
printf(„\n Valorile elementelor:”); 35
for(i=0;i<n;i++) 16
{ 1
printf(„\n a[%d]=”,i+1); 24
scanf(„%d”,&a[i]); 18
} 1
s=0; 4
for(i=0;i<n;i++) 16
s+=a[i]; 8
clrscr(); 9
printf(„\n Suma elementelor este:%d”,s); 39
} 1

10
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:

B C D

E F G H I

Figura 2.1 Structura 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 LM i, ambii indicatori fiind exprimati în numar de linii sursa.
Structurarea programelor în proceduri si module permite lucrul în
echipa.

2.2 Macrodefinitii 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 ocupând, de regula, o singura linie sursa.
Macrodefinitiile au doua forme:
Ø cu parametri;
Ø fara parametri.
11
În general, macrodefinitiile fara parametri sunt folosite pentru a
defini constante. Exemple de macrodefinitii de acest gen:

#define size 512


#define word long
#define bytes sizeof(word)

Utilizând definitiile de mai sus, secventa de cod urmatoare:

word n=size * bytes;

este expandata la urmatoarea secve nta:

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 încât sa fie utilizata de câte ori se doreste. Este o constructie
de sine statatoare formata din:
§ antet;
§ delimitatori formali;
§ corp.

12
Antetul unei proceduri este format, la rândul 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 cuvântul cheie void.

Delimitatorii formali sunt constructii care separa corpul procedurii


de antet si de restul programului. În C++ delimitatorii formali sunt { si }.
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 prelucrarilor prevazute în corp. Apelul consta
în precizarea numelui sau urmata de lista parametrilor separata de operatori.
Când 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, având 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:

int putere(int baza, int exponent)


{
int rezultat=1;
for(int i=0;i<exponent;++i)
rezultat*=baza;
return rezultat;
}

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

#include <iostream.h>
main(void)
{
cout<<”2^8=”<<putere(2,8)<<”\n”;
}

De regula, definirea unei proceduri are loc înainte de a fi folosita.


Definirea dupa apel este permisa numai în masura în care este declarat
antetul procedurii înaintea apelului si definirea propriu- zisa are loc dupa
apel.
Transmiterea parametrilor într-o procedura sau functie se efectueaza
prin doua modalitati:
v prin valoare; valoarea transmisa este copiata, prelucrarile
afecteaza numai aceasta copie, iar la revenirea în apelant
valoarea transmisa procedurii este aceeasi;
v prin referinta; se lucreaza în mod direct asupra valorii
argumentelor transmise, modificarile efectuate regasindu-se la
revenirea în apelant.

Diferenta dintre macrodefinitii si proceduri/functii se reflecta în


lungimea programelor sursa si în modul de executie a instructiunilor ce
formeaza corpurile acestora. Astfel, în cazul macrodefinitiilor, fiecare apel
este înlocuit cu codul sursa corespunzator. Procedura, respectiv functia, sunt
definite o singura data în program, iar la apel instructiunile ce formeaza
corpul lor sunt executate din punctul la care au fost definite.
De asemenea, în cazul macrodefinitiilor se lucreaza întotdeauna pe
originalul parametrilor transmisi, în timp ce procedurile prevad si un
mecanism de transmitere a argumentelor prin valoare, care nu afecteaza
originalul în programul apelant.
Sunt dezvoltate tehnici de realizare a bibliotecilor de macrodefinitii
si proceduri. Ideea este de a utiliza intens aceste biblioteci, facându-se
diferenta între folosirea acestor biblioteci în cadrul programelor si clonarea
macrodefinitiilor si procedurilor incluse în acestea.

14
2.3 Integrarea 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]:
Criterii de clasificare a componentelor
Tabelul 2.2
Criteriul de
Tipuri de componente
clasificare
Aplicabilitate - Elemente de analiza – folosite la reutilizarea modelului
în procesul de sistem;
software - Elemente de proiectare;
- Elemente de implementare – sunt elemente software
executabile, pregatite pentru includerea într-un nou sistem.
Nivelul - Elemente care încapsuleaza o abstractie functionala –
de abstractizare subrutinele si functiile în bibliotecile traditionale;
încapsulat - 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 - Elemente statice – nu sunt înlocuite fara recompilare;
de executie - Elemente substituibile – au variante substituibile dinamic;
- Elemente dinamice - sunt integrate în momentul executiei.
Nivelul - Elemente disponibile doar prin descrierea interfetei;
de accesibilitate - 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.

15
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, utilizând 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.

16
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 programe

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

17
Este modificata, obtinându-se urmatoarea secventa prin aplicarea
tehnicilor de redundanta specificate mai sus:

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

if ( 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 supraîncarcarea 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 când eforturile de reutilizare vizeaza
18
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:
v folosirea mai multor sisteme de operare;
v asigurarea comunicatiei on- line între calculatoare;
v proiectarea, implementarea si utilizarea sistemelor de baze de
date în cadrul solutiilor proiectate;
v utilizarea diferitelor tipuri de retele de calculatoare;
v utilizarea diferitelor tipuri de interfete utilizator;
v 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;

19
• 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:
Criterii de clasificare a reutilizarii software
Tabelul 2.3
Criteriul
Tipuri de reutilizare software
de clasificare
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 familii de aplicatii.
Tipul • Reutilizare interna – în interiorul unei organizatii;
de reutilizator • Reutilizare externa (de piata) – în cadrul unei alte organizatii.
Granularitatea • Reutilizare de componente de granularitate fina – componentele
componentelor (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.
Modul
de adaptare al
• Reutilizare tip cutie neagra – componenta reutilizata nu este
modificata;
componentelor
• 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
• Reutilizare ocazionala – reutilizarea nu este planificata, fiind un
rezultat secundar al proceselor ciclului de viata software;
software
• Reutilizare sistematica - practica reutilizarii se bazeaza pe procese
repetabile, bine definite.

20
Reutilizabilitatea este o caracteristica externa produsului software,
reflectând potentialul de reutilizare al produsului program. Caracteristicile
unei componente reutilizabile sunt [STAN03]:
v generalitate;
v arie larga de aplicare;
v modularitate;
v completitudine si consistenta;
v independenta hardware;
v independenta de implementare;
v robustete;
v încapsulare;
v fiabilitate;
v documentare;
v adaptabilitate/extensibilitate;
v standardizare;
v portabilitate;
v certificare;
v 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, obtinându-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 F1 , F2 ,…, Fn ,
obtinându-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 întrucât 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.

21
Din punct de vedere al diferentelor de comportament în timp,
datorita utilizarilor neomogene, se obtin diferente între entitatile clonate,
aspect absolut natural si obiectiv.
Atât pentru realizarea copiilor, cât 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 când 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 rând 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. Atât fisierele cât si bazele
de date fac obiectul proceselor de copiere, de cele mai multe ori obtinându-
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, obtinându-se prin
copiere, clone perfecte.
În cazul proiectarii unui echipament exista costul CP al proiectului si
costul Cr 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:
CTAI = CS + C BD + M(C SS + C OS ) + R(C SBD + COBD ) (2.2)
unde: CSS – costul suportului de stocare a unei copii software;
COS – costul operatiei de copiere-stocare software;

22
CSBD – costul suportului pentru stocare baze de date;
COBD – costul copierii bazei de date.
În ipoteza în care COS = COBD = 0 si C SS = CSBD, rezulta:

CTAI = CS + C BD + K(M + R)C SS (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.
Cât timp clonarea produselor software este gestionata de compania
care le-a dezvoltat, sunt create si ment inute 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, reducând 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, obtinându-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 atât componente, cât si interactiuni, structura clonei se
departeaza de original, functiile cel mult mentinându-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, cât 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
23
considera o problema complet si corect definita Pcc, folosind o metoda
riguroasa de definire a specificatiilor, echipele Ae1, Ae2,…, Aek realizeaza
independent specificatiile a 1 1 , a 1 2 ,…, a 1k , între care exista diferente
masurabile cu un indicator universal f(a 1 i, a1 j). Elaborarea specificatiilor
reprezinta primul pas în realizarea unei aplicatii informatice.
Se alege:

1
h max = max
i, j
{f (α 1
i , α 1j )} (2.4)

Pentru definirea structurii pe module, pentru stabilirea claselor se


folosesc instrumente de aceeasi generatie, obtinându-se independent
documentatia de design: a 2 1 , a 2 2 ,…, a2 k .
Între rezultatele celor k echipe exista diferente, dintre care cea mai
mare este:

2
hmax
i,j
{(
= max f α i2 , α 2j )} (2.5)

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

3
hmax
i, j
{(
= max f α i3 , α 3j )} (2.6)

unde a3 i si a 3 j 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: h1 max , h2max, …, hxmax. Î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:

x
lim hmax =0 (2.7)
x→p

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

24
3 ORTOGONALITATEA
FISIERELOR

3.1 Fisiere

Fisierul reprezinta 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.

25
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:


v creare;
v scriere;
v citire;
v pozitionare în cadrul fisierului;
v stergere;
v trunchiere;
v cautare pe disc.

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

Tipuri de fisiere
Tabelul 3.1
Tipul fisierului Extensia uzuala Descriere
executabil exe, com, bin sau fara executie a
extensie instructiunilor
specificate în
programul sursa
obiect obj, o fisier compilat, dar
ne- linkeditat
cod sursa c, cc, java, pas, asm, cod sursa în diferite
a limbaje de programare
batch 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, colectii de rutine
mov, rm pentru programatori
tiparire/vizualizare arc, zip, tar fisiere ASCII sau
binare într- un format
destinat tiparirii sau
vizualizarii
arhiva arc, zip, tar grup de fisiere în
forma compresata
multimedia mpeg, mov, rm fisiere binare cu
informatie de tip
audio/video

27
Accesul la datele memorate în fisiere se realizeaza prin urmatoarele
metode:
v acces secvential;
v acces direct;
v acces indexat.

3.2 Diversitatea datelor

Se considera o colectivitate Ac formata din elementele a1 , a2 , …, an,


diferite.
Se pune problema inserarii elementului an+1 în colectivitatea Ac, cu
conditia ca acesta sa fie, de asemenea, diferit de toate elementele a1 , …, an
ale colectivitatii Ac.
În cazul în care acest nou element nu este diferit de toate elementele
colectivitatii Ac se pune problema calcularii gradului în care elementul an+1
este asemanator cu elementele deja existente în colectivitate.
Obiectivele acestei lucrari sunt:
v definirea conceptului de ortogonalitate a datelor;
v construirea unor indicatori pentru evaluarea asemanarii;
v prezentarea structurii software orientata pe evaluarea
ortogonalitatii;
v 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 câte 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 câte 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”).
Extinzând, rezulta ca datele D1 si D2 sunt ortogonale semantic, daca
continutul informational al acestora, sensul lor, difera într-o maniera
28
categorica si semiotic, daca acestea au o formalizare matematica total
diferita.
Se considera vocabularul VT = {v1 ,v2 ,…,vn }, unde v1 ,v2 ,…,vn sunt
cuvinte din vocabular.
Se construiesc frazele:
• Fr1 formata din cuvintele vk1 ,vk2 ,…,vkp ;
• Fr2 formata din cuvintele vl1 ,vl2 ,…, mlm f .

Lungimea ca numar de cuvinte a acestor fraze este:

Lg(F r1 ) = Lg(v k1 v k2 … vkp) = p cuvinte


Lg(F r2 ) = Lg(v l1 v l2 … v lm ) = 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 cuvânt 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 , …, Cmc .
Pentru doua elemente oarecare ai si aj apartinând colectivitatii A se
înregistreaza nivele ale caracteristicilor dupa cum urmeaza:

ai = (ci1 , ci2 , … , cimc )


aj = (cj1 , cj2 , … , c jmc )

unde cik este nivelul caracteristicii Ck pentru elementul ai .

Un element x este ortogonal pe colectivitatea A daca si numai daca


<x, ai> = = 0 , oricare ar fi ai , element al colectivitatii.
În spatiul Rn , pentru elementele x si y ale sale se defineste produsul
scalar dintre cele doua elemente prin <x, y> = x1 *y1 +x2 *y2 +…+xn *yn , daca
x = ( x1 , x2, …, xn ) si y = (y1 , y2 …, yn ).
Se defineste operatia T asa fel încât cik T c jk are valoarea zero daca
pentru caracteristica Ck nu exista valori comune elementelor ai si aj si
valoarea 1 în caz contrar.
Se defineste pseudoprodusul scalar prin <<ai, aj >>.
Elementul ai este ortogonal cu elementul aj daca <<ai, aj>> = 0, adica
daca (ci1 T c j1 + ci2 T c j2 + … + cimc T c jmc ) = 0.

29
În conditiile în care elementele grupului sunt descrise prin
caracteristici vom considera aceasta relatie adevarata daca fiecare termen
este egal cu zero: ci1 T c j1 = 0, ci2 T c j2 = 0, …, cimc T c jmc = 0.
Relatia cik T c jk = 0 , k apartinând multimii {1, 2, …, mc}, 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.
f ij - frecventa de aparitie a cuvântului a i în textul Tj.
gij - frecventa de aparitie a cuvântului nespecific ßi în textul Tj.

30
Frecvente de aparitie a cuvintelor cheie
domeniului
Tabelul 3.2
Cuvinte cheie Frecvente de aparitie
T1 T2
a1 f11 f21
a2 f12 f22
. . .
. . .
. . .
ar f1r f2r

Frecvente de aparitie a cuvintelor nespecifice domeniului


Tabelul 3.3
Cuvinte cheie Frecvente de aparitie
T1 T2
ß1 g11 g21
ß2 g12 g22
. . .
. . .
. . .
ßs g1s g2s

Indicatorul normat Ii se defineste diferentiat pentru cele doua


categorii de cuvinte care alcatuiesc textele.
Pentru cuvintele cheie ale domeniului , indicatorul I1
• ia valoarea I1 = 0 daca frecventele pentru aceleasi cuvinte cheie
din T1 si T2 sunt egale (f1i = f2i, (∀) i = 1, 2, …, r);
• ia valoarea:

r 2

∑ (| f 1i − f 2i |)
I1 = 1 − i =1
(3.1)
r * max(| f 1i − f 2i |) 2

31
Pentru cuvintele nespecifice domeniului , indicatorul I2 :
• ia valoarea I2 = 0 daca frecventele pentru un acelasi cuvânt cheie
din T1 si T2 sunt egale (g1j = g2j, (∀) j = 1, 2, …, s);
• ia valoarea:

r 2

∑ (| g
i =1
1j − g 2 j |)
I 2 = 1− (3.2)
r * max(| g1 j − g 2 j |) 2

Pentru a scoate în evidenta masura în care cele doua texte sunt


asemanatoare are loc o agregare a indicatorilor I1 si I2 , obtinându-se I.
Astfel, Ia = =I1 * I2 , unde Ia ia valori între 0 si 1.

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

if a > b then c=a+b;


if b > a then c=b-a;

si secventa de program SP2 definita prin:

for ( i = 0 ; i < a; i++)


a--;
for ( 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.

32
Frecvente de aparitie a cuvintelor cheie ale
domeniului
Tabelul 3.4
Cuvinte cheie Frecvente de aparitie
T1 T2
if 2 0
then 2 0
for 0 2
= 2 2
- 1 0
+ 1 0
< 0 1
> 2 1
; 2 6
++ 0 2
( 0 2
) 0 2
-- 0 2

Frecvente de aparitie a cuvintelor nespecifice


domeniului
Tabelul 3.5
Cuvinte cheie Frecvente de aparitie
T1 T2
a 4 2
b 4 2
c 2 0
i 0 4

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

I1 = 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)

I2 = 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)

33
Indicatorul agregat Ia, are valoarea:

Ia = I1 * 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,
întrucât macrodefinitiile sunt constructii dedicate, acceptate din start ca fiind
producatoare de secvente clonate.
Exemplu: macrodefinitia

cub x, y
x=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 este
gestionat de un alt program care îl personalizeaza prin procesul de
customizare, maximizând numarul functiilor de prelucrare, în raport cu
datele furnizate la intrare.
Rezultatul customizarii este un sistem de programe generat cu
proceduri adaptate la cerintele utilizatorilor. Contine submultimi ale
produsului software de baza.

34
3.4 Indicatori ai diferentelor masurate 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.

Li
J1 = , daca Li < L j (3.6)
Lj

35
sau
Lj
J1 = , daca L j < Li (3.7)
Li

unde:
Li – 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
i =1
i
J2 = (3.8)
NTC

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 J3 reflecta gradul de asemanare a celor doua


proceduri în functie de un vocabular furnizat de catre utilizator.

NCV

∑ ncv
i =1
i
J3 = (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 cuvânt dat;

36
- ncvi – ia una din valorile:
• 0, daca frecventele pentru cuvântul i sunt diferite sau egale,
dar nule;
• 1, daca frecventele pentru cuvântul 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.

NTCV

∑ ncvf
i =1
i
J4 = (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 cuvântul i sunt diferite sau
cuvântul i nu se regaseste în cealalta procedura;
• 1, daca pentru cuvântul i frecventele sunt identice în cele
doua proceduri.

Al cincilea indicator, J5 , pune în evidenta asemanarea a doua


elemente în functie de structura lor.

NESC
J5 = (3.11)
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.

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

NCIi
J6 = , daca NCI i < NCI j (3.12)
NCI j

sau

NCI j
J6 = , daca NCI j < NCI i (3.13)
NCIi

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.

cmplx i
J7 = , daca cmplx i < cmplx j (3.15)
cmplx j
sau
cmplx j
J7 = , daca cmplx j < cmplx i (3.16)
cmplx i

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,
realizând o omogenizare a acestor indicatori.

7
J =7 ∏J
i =1
i (3.17)

38
În final, pentru un produs software se determina indicatorul agregat
Jn 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 câte doua.

ki
Jn = Cn2
∏J
i =1
i
ni
(3.18)

unde:
- Cn 2 – numarul de combinatii posibile de proceduri luate doua
câte doua;
- Ji – valori indicatori calculate pentru fiecare doua proceduri
considerate;
- ni – frecventa de aparitie a valorii respectivului indicator;
- ki – numarul de valori dis tincte ale indicatorului Ji.
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;
for(int j=0;j<n;j++)
S=S+x[j]*x[j];
return S;
}
Pr2 - destinata calculului produsului scalar a elementelor a doua
masive unidimensionale al carui text sursa este:

int prod_sc(int x[],int y[],int n)


{
int S;
S=0;
for(int j=0;j<n;j++)
S=S+x[j]*y[j];
return S;
}

39
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<b)
max=b;
if(max<c)
max=c;
return max;
}

Textele sursa ale celor patru proceduri conduc la obtinerea


frecventelor fij si gij din tabelele 3.6 si 3.7.

40
Frecventele de aparitie a cuvintelor cheie în procedurile
Pr1, Pr2, Pr3 si Pr4

Tabelul 3.6
Frecvente de aparitie
Cuvinte cheie
Pr1 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 0
; 6 6 5 5
++ 1 1 0 0
return 1 1 1 1
-- 0 0 0 0
for 1 1 0 0
< 0 0 0 2
> 0 0 2 0
if 0 0 2 2
, 1 2 2 2
* 1 1 0 0

41
Frecventele de aparitie a cuvintelor nespecifice din procedurile
Pr1, Pr2, Pr3 si Pr4.
Tabelul 3.7
Cuvinte nespecifice Frecvente de aparitie
Pr1 Pr2 Pr3 Pr4
sume 1 0 0 0
x 3 2 0 0
n 2 2 0 0
S 5 5 0 0
0 2 2 0 0
prod_sc 0 1 0 0
y 0 2 0 0
min 0 0 8 0
a 0 0 2 2
b 0 0 3 3
c 0 0 3 3
max 0 0 0 8

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

Ia = I1 * 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 ortogonalitate


dintre Pr1 si Pr2, respectiv dintre Pr3 si Pr4 sunt foarte scazute.
Se stud iaza ortogonalitatea
- între Pr1 si Pr3 si se obtine:

Ia = I1 * 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)

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

3.5 Structura 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 când 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.

Încarcarea Frecvente
bazei de date cuvinte

Lungime Structura
elemente Analiza calitativa elemente
a elementelor noi
Matrice
Frecvente precedenta
caractere
Complexitate
Frecvente
vocabular Concluzii

Figura 3.1 Structura software pentru indicatori


de ortogonalitate

43
Produsul software destinat implementarii indicatorilor este scris în
limbajul C++ si se caracterizeaza prin:
v vocabular definit de utilizator;
v mecanism de cautare combinatii de fisiere;
v evaluare frecvente;
v calcul indicatori simpli si indicatori agregati;
v afisare rezultate;
v 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.

44
4 CLONAREA
SOFTWARE

4.1 Evidentierea clonarii informatice

Se considera o multime de programe, formate din componentele P1 ,


P2 , ..., Pn . Fiecare program Pi, i = 1, 2, ..., n, este analizat si se efectueaza
diferite masuratori, folosind modelele Mc1, Mc2, ..., Mck de calcul a unor
indicatori. Problemele care apar sunt legate de:
v 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;
v 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;

45
v efortul necesar evidentierii 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 Pi, Pj
este clona celuilalt.

În realitate, nu sunt evaluate decât 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 P1 , 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, obtinându-se versiuni, precum Pi(1),
Pi(2) , ..., Pi(r).
Pentru simplificarea ipotezelor de lucru, se considera un moment de
timp t0 , 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 t0 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
când exista deja constituita o baza de programe si se adauga o noua
componenta, Px . Este necesar mai întâi 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.

46
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,
având aceeasi extensie, figura 4.1.

Fs
Copiere
X 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, Gf, figura 4.2.

Y
Fs
Fs
Copiere
X
Gf
Y

Figura 4.2 Copierea fisierului pe un alt suport

47
Extensiile fisierelor ramân neschimbate.
Sistemul de operare MS-DOS permite copierea fisierelor prin
instructiunea copy definita astfel:

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

unde parametrii au semnificatia urmatoare:


v 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;
v 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;
v /a – indica un fisier text ASCII;
v /b – indica un fisier binar;
v /v - verifica daca noile fisiere sunt scrise corect;
v /n – se foloseste un nume scurt de fisier când copierea are loc
pentru un fisier cu un nume mai mare de opt caractere sau
extensia e mai mare de trei caractere;
v /-y – se cere confirmarea suprascrierii unui fisier;
v /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 stânga al mouse-ului;
• se “plaseaza” fisierul deasupra directorului destinatie;
• se elibereaza butonul stânga 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.

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

Fisierele se copiaza fie unul câte unul, caz în care sunt repetate
operatiile de mai sus pentru fiecare, fie toate o data, acestea selectându-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 lânga faptul ca se copiaza fisierele si
directoarele de pe o unitate de stocare pe alta, având 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;

49
• 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;
• DAT – 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 efectuându-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;
• AVI – fisiere care contin date de tip multimedia: imagini, video,
sunet;
Conversia este procesul prin care un fisier Fs de intrare, având o
extensie data α, este transformat, obtinându-se la iesire un fisier Fs având o
alta extensie β, figura 4.3.

Fs.α Conversie Fs.β

Figura 4.3 Conversia fisierului de la tipul α la tipul β

Trebuie sa existe si operatia de conversie inversa care executa


transformarea de la extensia β la extensia α, figura 4.4.

50
Fs.α Conversie Fs.β Conversie Fs.α
directa inversa

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.

Compilare
Fisiere Modul
sursa obiect

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 Modul
Asamblor
asamblare obiect

Figura 4.6 Obtinerea modulelor obiect prin asamblare

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.

51
4.4 Translatarea 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 integer
float real
struct record
switch case
* char string

Descrierii:

struct nume {
tip1 nume1 ;
tip2 nume2 ;
...
tipn numen ;
};

52
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 val1: { ... break; }
case val2: { ... break;}
...
default : { ... break;}
}

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

case expresie of
begin
val1: begin ... end;
val2: begin ... end;
...
valn: begin ... end;
end;

Programele translatoare au capacitatea de a dezvo lta transformari la


nivel de linie sursa sau instructiune, cât 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 { si }.

53
4.5 Transformari pe text sursa

Se construiesc programe care opereaza pe text sursa, producând


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.

54
Vocabularul este pus în corespondenta cu sirul generat: sir1 , sir2 ,
sir3 , sir4 , sir5 , sir6 , sir7 , sir8 , sir9 , sir10 , sir11 . 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 – sir11

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 * sir10 ;

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

55
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, operând pe text sursa


transforma secventa:

...
s1 = 0;
for ( i = 0; i < n; i ++)
s1 + = x [i];
s2 = 0;
for ( i = 0; i < n; i ++)
s2 + = x [i] * x [i];
s3 = 0;
for ( i = 0; i < n; i ++)
s4 = 0;
for ( 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;

56
devenind, dupa optimizare:

s1 = s2 = s3 = s4 = 0;
for (i = 0; i < n; i ++)
{
s1 + = x [i];
s2 + = 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 ++;

sau
if (expresie1 )
var = expresie2 ;
else
var = expresie3 ;

cu
(expresie1 ) ? expresie2 : expresie3 ;

57
sau
i = 0; s1 = 0; s2 = 0; s3 = 0;
10: if ( i >= n) goto 20;
s1 = s1 + x [i];
s2 = s2 + x [i] * x [i];
s3 = s3 + x [i] * x [i] * x [i];
i = i + 1;
goto 10;
20: s4 = s1 + s2 + s3;

în secventa:

s1 = s2 = s3 = 0;
for ( i = 0; i < n; i ++)
{
s1 + = x [i];
s2 + = 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;
if ( x > y)
z = x * y;
else
z = x – y;

devine:

if ( x < = y)
z = x - y;
else
z = x * y;
s = a + b + c;

58
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:
if ( a)
{
e1 = a + b;
e2 = a – b;
e3 = a * b;
}
else
{
e1 = b / ( a +1);
e2 = b;
e3 = a;
}

59
devine:
if (!( a))
{
e1 = b / ( a+1);
e2 = b;
e3 = a;
}
else
{
e1 = 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, când programele RP si P
sunt ortogonale din punct de vedere a definirilor si referirilor, figura 4.7.

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

Figura 4.7 Concatenare programe ortogonale

Când ortogonalitatea nu este totala si apar interferente se impune


construirea de secvente în care apar variabile intermediare care asigura
conditia de ortogonalitate.
Când se cloneaza software apar cazuri frecvente în care la programul
initial sunt adaugate secvente sau functii care efectueaza prelucrari de

60
siguranta, editari de rezultate, salvari de fisiere, noi regrupari de date, noi
sortari sau se obtin noi rapoarte. În sistemul de programe din figura 4.8:

CD P1 P2 S1
Fi1

S2

Figura 4.8 Sistem de programe în cascada

Datele de intrare sunt preluate de pe un CD si prelucrate de


programele P1 si P2 . Se obtin situatiile finale Sf1 si Sf2 cu folosirea fisierului
intermediar Fi1 .
Prin clonarea sistemului de programe în cascada la care se adauga
programelor P1 si P2 noi proceduri F1 ( ), F2 ( ), desemnând 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.

P’1 P’2 S1
Fi1

P1 P2 S2
CD

F1 ( ) F2 ( )
S3
Fi2

Figura 4.9 Sistem de programe clonat cu adaugare de proceduri

Includerea unui program copiat într-un sistem de programe este un


mod uzual de ascundere a clonelor.

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

P
Fs1 Fs2

Figura 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:

Sistemul
S

P
Fs1 Fs2

Figura 4.11 Sistem de programe cu clona încorporata

4.6 Restructurarea programelor

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.

62
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;
if (min > b) min = b;
if (min > c) min = c;
return min;
}

int maxim(int a, int b, int c)


{
max = a;
if (max < b) max = b;
if (max < c) max = c;
return max;
}

min = a;
if (min > b) min = b;
if (min > c) min = c;
x = min;

max = a;
if (max < b) max = b;
if (max > c) max = c;
y = max;

min = a;
if (min > b) min = b;
if (min > a) min = c;
z = min;

63
max = b;
if (max > a) max = b;
if (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 având acelasi tip.
Secventa:

tip1 v 1 , v2 , ..., v n ;
tip2 u1 , u2 , ..., um ;
tip1 w1 , w2 , ..., wk;
tip2 y1 , y2 , ..., yr;

devine dupa concatenari:

tip1 v 1 , v2 , ..., v n , w 1 , w 2 , ..., w k;


tip2 u1 , u2 , ..., um , y1 , y2 , ..., yr;

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

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

tip v1 , v 2 , v3 , ..., v n ;

se înlocuieste prin:

tip vn , v n-1 , ..., v 2 , v 1 ;

Sau, în cazul definirii unei functii:

tip nume (tip1 v 1 , tip2 v2 , ..., tipn vn )

este înlocuita prin:

tip nume (tipn v n , tipn-1 vn-1 , ..., tip2 v 2 , tip1 v1 )

si, în mod corespunzator, apelul:

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

este înlocuit cu apelul:

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

Reunirea de proceduri presupune ca într- un program în care se


apeleaza procedurile Pr1, Pr2, ..., P rn, având listele de parametri Lp1 , Lp2 , ...,
Lpn se modifica în sensul apelarii unei singure proceduri Pr având o lista de
parametri Lp = Lp1 ∪ Lp2 ∪ Lp3 ∪ ... ∪ Lpn ∪ L0 , unde L0 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;
for (i = 0; i < n; i ++)
s += x [i];
return s;
}

65
int prod (int x [ ], int y [ ], int n)
{
int p = 0;
for (i = 0; i < n; i ++)
p += x [i] * y [i];
return p;
}

int minim (int x [ ], int n)


{
int min, i;
min = x [0];
for ( i = 1; i < n; i++))
if (min > x [i])
min = x [i];
return min;
}

int max ( int x [ ], int n)


{
int max, i;
max = x [0];
for ( i = 1; i < n; i ++)
if ( 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;
if ( k == 0)
{
s = 0;
for ( i = 0; i < n; i ++)
{

66
s += x [i];
return s;
}
}
else
if (k == 1)
{
p = 0;
for ( i = 0; i < n; i ++)
{
p += x [i] * y [i];
return p;
}
}
else
if (k == 2)
{
min = x [0];
for ( i = 1; i < n; i ++)
{
if (min > x [i])
min = x [i];
return min;
}
}
else
{
max = x [0];
for ( i = 1; i < n; i++)
{
if ( max < n)
max = x [i];
return max;
}
}
}

67
Î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];
for ( i = 0; i < n; i ++)
{
s [0] += x [i];
s [1] += x [i] * y [i];
if ( s [2] > x [i])
s [2] = x [i];
if ( s [3] < x [i])
s [3] = x [i];
}
return s;
}

68
Pentru aceste modalitati se construiesc instrumente care efectueaza
mai întâi o analiza pe matrice de precedenta dupa care, în mod automat,
genereaza secvente în trepte obtinându-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:
float calcul( int a, float b)
{
float d;
d = a + b;
return d;
}

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


float calcul( float b, int a)
{
float 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:


float suma( float x, int y)
{
float z;
z = x + y;
return z;
}

69
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 nr_mat;
char nume[20], prenume[30];
float medie;
...

este transformata în:

...
struct student
{
int nr_mat;
char nume[20];
char prenume[30];
float medie;
}

- utilizare masive bidimensionale;


De exemplu, denumirile de discipline sunt memorate în astfel de
structuri de date:

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

obtinându-se urmatoarea secventa:

...
char discipline[20][20];
...

70
Î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 * stud1;
...

- definire de clase de obiecte.


Prezinta avantajul de a reuni în cadrul aceleiasi structuri atât starea
unui obiect, cât si comportamentul acestuia. Astfel, pentru entitatea student
avem secventa:

...
int nr_mat, note[10];
char nume[20], prenume[30];
float medie;

float calcul_medie ( int note[ ])


{
int i, s;
s = 0;
for ( i = 0; i < 10; i ++)
s = s + note [i];
return s / 10;
}
...
medie = calcul_medie (note);

71
care, transformata în clasa de obiecte, devine:

...
class student
{
int nr_mat, note[10];
char nume[20], prenume[30];
float medie;
void calcul_medie (int note[ ]);
...
};

void student:: calcul_medie ( int note[ ])


{
int i, s;
s = 0;
for ( 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)


{
if ( a > b)
*c = b;
}

72
este adusa la forma urmatoare:

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


{
int vb = 0;
if ( 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;
if ( 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;
if ( (*a) > (*b))
{
*c = *b;
vb = 1;
}
return vb;
}

- utilizarea unei singure instructiuni return.

73
Pentru functia:

int minim (int a, int b)


{
if ( a > b)
return b;
else
return a;
}

efectuarea acestei operatii conduce la urmatoarea secventa:

int minim (int a, int b)


{
int min = a;
if ( 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:

float calcul_medie ( int note[ ])


{
int i, s;
s = 0;
for ( i = 0; i < 10; i ++)
s = s + note [i];
return s / 10;
}

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

float calcul_medie ( int note[ ])


{
int i, s;
s = 0;
i = 0;
while ( i < 10)
{
s = s + note [i];
i + +;
}
return s / 10;
}

4.9 Efectele clonarii asupra complexitatii programelor

Metodele de clonare produc diverse efecte asupra fisierelor sursa.


Exista metode care nu modifica nivelul complexitatii programelor.
Astfel, daca se schimba denumirile de variabile si de etichete cu alti
identificatori, numarul operanzilor si numarul operatorilor nu se schimba,
deci complexitatea ramâne neschimbata.
Secventa:

s = 0;
for (i = 0; i < n; i ++)
S += x [i];

are complexitatea Halstead:

Cps = n1 * log2 n1 + n2 * log2 n2 (4.1)

unde:
- n1 – numarul de operanzi;
- n2 – numarul de operatori.

75
Pentru secventa data, complexitatea este Cps = 10 log2 10 + 7 log2 2.
Secventa:

suma = 0;
for (alfa = 0; alfa < numar; alfa ++)
suma += elem [alfa];

are aceeasi complexitate.


Exista metode care reduc nivelul complexitatii, mai ales atunci când
este vorba de optimizare texte sursa.
Secventa:

s = ( a + b + c + d) * ( a + b + c + d - e) – (a + b + c + d + e) * (a + b +
c + d - - 1);
y = ( a + b + c + d) / ( a + b + c + d – 2);
z = a + b + c + d – y * s;

are complexitatea Cps = 38 * log2 38 + 35 * log2 35.


Prin clonare se genereaza secventa de optimizare:

g = a + b + c + d;
s = g * ( g - e) – ( g + e) * ( g -1);
y = g / ( g -2);
z = g – y * s;

are complexitatea Cps = 21 * log2 21 + 17 * log2 17, fiind mult mai mica
decât a textului sursa initial, înaintea clonarii.
Pentru procedurile Pr1, Pr2, Pr3:

int P1(int x [ ], int n)


{
int s1 = 0, i;
for ( i = 0; i < n; i ++)
s1 + = x [i];
return s1;
}

int P2(int x [ ], int n)


{
int s2 = 0, i;

76
for ( i = 0; i < n; i ++)
s2 + = x [i] * x [i];
return s2;
}

int P3(int x [ ], int n)


{
int s3 = 0, i;
for ( i = 0; i < n; i ++)
s3 + = x [i] * x [i] * x[i];
return s3;
}

complexitatile sunt:

P1 : Cps = 7 * log2 7 + 9 * log2 9;


P2 : Cps = 9 * log2 9 + 10 * log2 10;
P3 : Cps = 11 * log2 11 + 11 * log2 11.

Secventa optimizata este:

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


{
int s [3], i;
s [0] = s [1] = s [2] = 0;
for ( i =0; i < n; i ++)
{
s [0] += x [i];
s [1] += x [i] * x [i];
s [2] += x [i] * x[i] * x [i];
}
return s;
}

complexitatea fiind: Cps = 26 * log2 26 + 18 * log2 18.

77
Unele dintre transformari fac obiectul proceselor automate prin
crearea de instrumente care preiau unele dintre modalitatile de construire a
secventelor echivalente. În cazul în care se dezvolta instrumente care
optimizeaza programele folosind ca intrari texte sursa si oferind la iesire, de
asemenea, texte sursa, se obtin clone cu un nivel de performanta mai bun.
Aceste instrumente evalueaza complexitatea textelor sursa atât la intrare, cât
si la iesire si evidentiaza saltul obtinut prin procesul dezvoltat.

78
5 CLONAREA DATELOR

5.1 Aplicatii ale bazelor de date

Pastrarea si protejarea datelor în vederea unor prelucrari ulterioare


este o activitate vitala în dezvoltarea si utilizarea aplicatiilor software
asemeni procesului de dezvoltare a programelor.
Clonarea unei baze de date, este procesul de obtinere unui exemplar
identic de baza de date, care prezinta aceleasi caracteristici cu originalul în
ceea ce priveste tabelele, datele si legaturile.
Se face distinctie între notiunea de replicare a bazei de date si
notiunea de clonare a bazei de date. Replicarea este un concept atasat
bazelor de date distribuite. El consta în mentinerea acelorasi date pe mai
multe site-uri, acest lucru implicând propagarea la distanta a oricarei
modificari suferite de baza de date, asigurându-se integritatea datelor.
Procesul de clonare prezinta mai multe tipuri si anume: clonarea
integrala, clonarea structurii bazei de date, clonarea partiala a structurii
bazei de date cu mentinerea legaturilor între tabelele clonate, clonare bazei
de date cu adaugare de noi tabele etc.

79
Fiecare tip de clonare se realizeaza dupa un numar finit de pasi dupa
cum urmeaza:
a. se deschide baza de date de clonat; acest pas conditioneaza
continuarea procesului. Daca deschiderea nu se realizeaza corect,
fie baza de date nu exista, fie nu a fost introdusa corect calea
bazei de date, procesul de clonare se opreste;
b. se creeaza baza de date clona; se creeaza o noua baza de date
care nu contine tabele sau alte informatii; este practic o baza de
date vida; daca baza de date nu se creeaza corespunzator
procesul se încheie fara obtinerea rezultatului dorit;
c. urmeaza o serie de pasi specifici fiecarui tip de clonare; dupa
efectuarea acestor pasi se obtine baza de date clona;
d. ultimul pas corespunde închiderii bazei de date. Acest lucru ofera
posibilitatea utilizatorului de a clona în cadrul aplicatiei de
clonare a bazelor de date aceeasi baza de date.
Lucrul pe clone rezolva problema reprezentarii uniforme a datelor,
bazele de date având acelasi format. Reînnoirea datelor centrale se
realizeaza mai rapid, iar comunicarea între departamente este eficace.
Rapiditatea si eficienta procesului de comunicare în ambele sensuri este
sporita, activitatea intermediara de a trece baza de date dintr-un format în
altul fiind complet eliminata. Transformarea unei baze de date prezinta
riscul pierderii de informatie.
Adaugare de noi Adaugare de noi
date date
Prelucrare date Prelucrare date
Stergere date initiale Stergere date initiale

Clona 1 Transferul clonei bazei de Clona 2


Departament periferic date catre departament D e p artament periferic

Reintroducere date în
baza de date centrala
Baza de date
centrala

Clona n … … .
Departament periferic

Adaugare de noi
date
Prelucrare date
Stergere date initiale

Figura 5.1 Transferul de date între departamente prin intermediul


clonelor
80
Clonarea bazelor de date nu implica o rata mare de transfer între
centru si sistemele periferice, lucru care fluidizeaza activitatea. De exemplu,
protectia si securitatea bazei de date centrale sunt doua elemente esentiale
pentru asigurarea desfasurarii normale a activitatii unei firme.
Folosirea clonelor duce la fluidizarea traficului. La dorinta
utilizatorului, clonele sunt create cu proprietatea de accesibilitate rapida care
asigura minimul de resurse informationale, neîncarcând monitorul cu date
nefolositoare.
Aceeasi situatie este analizata prin prisma procesului de
concatenarea a bazelor de date, proces surprins atât la nivel fizic cat si la
nivel logic.
La nivel fizic, daca bazele de date de la nivelul departamentului sunt
realizate pentru o aplicatie cu aceleasi reguli , transferata de la centru, se
creeaza o singura baza de date si toate tranzactiile sunt efectuate prin centru.
La nivel logic, daca exista nBD baze de date cu aceeasi structura si o
aplicatie aferenta, se opereaza în toate cele nBD baze de date. Astfel la nivel
logic exista o singura baza de date, desi fizic exista nBD baze de date.
Ambele concepte utilizeaza clonarea bazelor de date, respecta
principiile amintite mai sus, cu privire la securitate si protectie, si datorita
procesului de clonare implica, cantitati reduse de resurse umane, financiare
si de timp.
Eficienta procesului de clonare este obtinut a prin calcularea
urmatorului indicator:

nrtab
Le = nrleg + ∑ nrcamp ⋅ nrinreg (5.1)
i =1
unde:
- nrleg - numarul de legaturi al bazei de date;
- nrtab - numarul de tabele;
- nrcamp - numarul de câmpuri al tabelei i;
- nrinreg - numarul de înregistrari al tabelei i (ia valori începând
cu 1).
Calculând un indicator pentru baza de date initiala L BD si un
indicator LCLONA pentru baza de date clonata, dupa care se calculeaza
indicatorul agregat:

LCLONA
I CLONARE = (5.2)
L BD
pentru masurarea eficientei procesului de clonare.
81
5.2 Gestiunea contractelor

Se construieste aplicatia „Contracte” pentru exemplificarea


clonarii bazelor de date.
O societate comerciala care are obiect de activitate închirierea de
spatii comerciale doreste sa informatizeze aceasta activitate. Pentru
rezolvarea problemei se cunosc urmatoarele date:
Ø clientii firmei sunt caracterizati prin cod, denumire, cod fiscal,
numar Registrul Comertului (reprezentat în tabele de variabila
NrRegCom).
Ø facturile sunt caracterizate de un numar de factura si data la care
s-a facut.
Ø chiria este definita prin cod chirie, numarul contractului la care se
refera, data scadenta si valoarea chiriei.
Ø contractele ce se încheie între firma si clientii sai, se
caracterizeaza prin numarul contractului, data contractului si
valoare.

Clienti Contracte Chirii


Cod client Nr contract 1,n Cod chirie
Den client Data contract Nr contract
1,n
Cod fiscal Valoare Data scadenta
NrRegCom Cod client Valoare chirie

1,n
Facturi
1,n
Nr factura 1,n
Data factura
Cod client
C o d chirie
Nr contract

Figura 5.2 Modelul relational al datelor pentru aplicatia „Contracte”

Baza de date se creeaza sub Microsoft Access si este conectata la un


server SQL sau alte sisteme de management a bazelor de date, modificarea
aplicatiei nefiind necesara.
Aplicatia care cloneaza baza de date Contracte în functie de
necesitatile utilizatorului, este realizata în Visual C++ folosindu-se
tehnologia MFC.
Codul sursa al programului alaturi de explicatiile aferente sunt
publicate pe Internet la adresa www.clonare-bazededate.ase.ro.

82
5.3 Clonare integrala

Trendul exponential de dezvoltare al societatii informationale


prezinta riscuri majore. Unul dintre acestea este cel referitor la securitatea
informatiei. Securitatea informatiei în cadrul unei retele se confundata de
foarte multe ori cu lupta împotriva accesului neautorizat al piratilor la
informatii confidentiale.
Modificarile cauzate de acesti indivizi sunt iremediabile si de aceea
este indicat ca administratorul de retea sau utilizatorul datelor respective, în
cazul nostru al bazelor de date, sa creeze o copie de siguranta, lucru realizat
prin operatia numita Back-up. Back- up-ul este procesul de copiere a unei
date la o locatie cunoscuta de cel care realizeaza acest proces. În cazul
bazelor de date, baza de date pe care se lucreaza, este copiata integral.
Pe lânga problemele cauzate de accesul nedorit la date confidentiale
exista si riscul aparitiei unor necesitati de ordin fizic. O fluctuatie a tensiunii
curentului electric poate produce urmarii iremediabile datelor si fisierului
care le stocheaza. Neatentia utilizatorului în modul de gestionare a lucrului
cu respectivele date are repercusiuni majore asupra integritatii lor.
Realizarea unei copii de siguranta este utila în asemenea situatii.
Scopul realizarii lor este acela ca în situatiile în care, din motivele obiective
si subiective amintite, integritatea bazei de date este pusa sub semnul
întrebarii, sau accesarea bazei de date nu mai este posibila, sa se utilizeze
respectiva copie de siguranta.

Copiere legaturi
BD 1 vechi si date vechi BD 2

Figura 5.3 Procesul de clonare integrala a unei BD

Baza de date BD1 este practic transferata în baza de date BD2.


Aceasta se realizeaza prin copierea atât a datelor bazei BD1, cât si a
legaturilor acestei baze. Se obtine baza de date BD2 care este o clona a
bazei BD1, si anume o baza de date identica cu BD1.
Se foloseste termenul clonare, si nu cel de copiere, dintr-un motiv
bine determinat. Procesul de copiere în domeniul informatic presupune
existenta unui singur pas, în carul caruia este efectuata copierea obiectului
dorit. Procesul de clonare este un proces care presupune existenta unui
83
numar de pasi. Procesul de clonare nu are drept unic scop obtinerea unei
baze de date identice cu cea clonata. Acesta este scopul clonarii integrale.
Copierea bazei de date într-o alta baza de date este valabil doar în cazul
clonarii integrale si de aceea nu trebuie generalizat la nivelul întregului
proces de clonare, care presupune diferentierea clonarii în functie de
necesitatile imediate.
În concluzie, operatiile aferente pasului C sunt: daca baza de date
clona a fost creata cu succes urmeaza etapa în care sunt obtinute
particularitatile bazei de date clonate, cum ar fi numele si numarul tabelelor,
numarul, numele, tipul câmpurilor, câmpurile indexate, numarul legaturilor
etc. Dupa obtinerea acestor particularitati urmeaza crearea lor propriu- zisa
în baza de date clona.
Astfel este obtinuta baza de date clona. Operatia nu este o simpla
copiere, fiind necesare si informatii suplimentare pentru crearea entitatilor
din cadrul clonei, informatii obtinute prin apelul unor functii specializate
oferite de pachetul Microsoft Visual Studio 6.

Clonare structura tabele

Tabela 1 Tabela 2 ……….. Tabela n Tabela 1 Tabela 2 ……….. Tabela n

Cele n tabele ale bazei de date initiale Cele n tabele ale clonei

Datele aflate
într- o tabela
Clonare structura câmpuri

Câmp 1 Câmp 2 ………. Câmp k


Câmp 1 Câmp 2 ………. Câmp k
Data 11 Data 12 ………. Data 1k
Data 11 Data 12 ………. Data 1k
Dat a 21 Data 22 ………. Data 2k Data 21 Data 22 ………. Data 2k
…… …… …….
Data m1 Data m2 ………. Data mk
Data m1 Data m2 ………. Data mk

Clonare date

Legaturi BD Clonare legaturi Legaturi clona

Figura 5.4 Secventa clonarii integrale a unei baze de date

84
Procesul de clonare integrala a unei baze de date este procesul prin
care se copiaza atât datele, tabelele cât si legaturile tabelelor bazei de date
initiale în conformitate cu particularitatile fiecarei entitati, într-o noua baza
de date numita clona bazei initiale. În urma acestui proces se obtine o baza
de date identica cu cea care s-a dorit a fi clonata.
Pentru baza de date Contracte, considerând ca tabele au în medie
câte 3 înregistrari, indicatorii L BD si LCLONA au valorile LBD = 56 si
LCLONA = 56 , iar indicatorul I CLONARE are valoarea 1, fiind copiata integral in
clona.

5.4 Clonare structura baza de date

Limitarea la simpla copiere a bazei de date într-o alta baza de date


prin obtinerea clonei sale integrale, este o greseala. Aplicabilitatea clonarii
bazelor de date consta tocmai în posibilitatea clonarii bazei de date initiale
în conformitate cu interesele utilizatorului. Crearea unei noi baze de date
care sa contina tabelele si legaturile bazei de date clonata, dar fara date, se
obtine prin clonarea structurii bazei de date.
Procesul de clonare a structurii bazei de date este procesul prin care
se creeaza tabele si legaturile identice cu cele ale bazei de date initiale într-
o noua baza de date.
În figura 5.5. este prezentata imaginea generala a acestui proces .

Copiere tabele
BD 1 vechi si date vechi BD 2

Figura 5.5 Procesul de clonare structura

Se doreste crearea unei baze de date BD2 care contine aceleasi


tabele ca si baza de date BD1. O solutie este crearea manuala a bazei de date
BD2. Aceasta solutie are un mare inconvenient si anume cel al costului
implicat. Crearea bazei de date BD1 a fost suportata cu un cost X. Cum cele
doua baze au aceleasi tabele, se considera ca ele sunt similare.
Se obtine baza de date Contracte Filiala care are tabelele de date
clienti, chirii, contracte, facturi, iar legaturile dintre tabele sunt aceleasi ca
cele din baza de date Contracte.

85
Dupa obtinerea bazei de date prin clonare, urmeaza completarea cu
date a bazei Contracte Filiala.
Procesul este prezentat pe larg în figura 5.6.

Clonare structura tabele

Tabela 1 Tabela 2 ……….. Tabela n Tabela 1 Tabela 2 ……….. Tabela n

Cele n tabele ale bazei de date initiale Cele n tabele ale clonei

Datele aflate
într- o tabela
Clonare structura câmpuri

Câmp 1 Câmp 2 ………. Câmp k Câmp 1 Câmp 2 ………. Câmp k


Data 11 Data 12 ………. Data 1k
Data 21 Data 22 ………. Data 2k
…… …… …….
Data m1 Data m2 ………. Data mk

Legaturi BD Clonare legaturi Legaturi clona

Figura 5.6 Secventa clonarii integrale a unei baze de date


Clonarea structurii este realizata în cadrul celor 4 pasi si conduce la
valorile LBD = 22 si LCLONA = 56 , iar I CLONARE = 0.39 , însemnând ca baza de
date a fost clonata în proportie de 39%.

5.5 Clonare pa rtiala a structurii bazei de date

Procesul de clonare partiala a structurii bazei de date presupune


copierea anumitor tabele, precum si a legaturilor aferente acestor tabele din
cadrul bazei de date initiale, într-o noua baza numita clona partiala, pentru
ca mai apoi în aceasta clona sa se introduca datele necesare lucrului.
Procesul este reprezentat grafic în figura 5.7.

86
Copiere tabele alese si legaturi
BD 1 vechi între tabelele alese BD 2

Figura 5.7 Procesul de clonare partiala a structurii bazei de date

Din figura 5.7 reiese ca se doreste crearea unei noi baze de date, si
anume BD2, care are o structura similara cu baza de date BD1. Datorita
similitudinilor cu baza de date BD1 nu mai este necesara crearea ei prin
metode conventionale. Aceasta ar presupune alocarea de noi resurse, resurse
care sunt utilizate în alte activitati.
Clonarea partiala a structurii se realizeaza în cadrul pasului Cc, si
cuprinde secventa de operatii descrisa în figura 5.8.

Clonare structura tabele alese pentru a fi ate


clon

Tabela 1 …… Tabela i …… Tabela n …… Tabela j ……

Cele n tabele ale bazei de date Cele m tabele ale


initiale clonei

Datele aflate
într- o tabela
Clonare structura
câmpuri

Câmp 1 Câmp 2 ………. Câmp k ……….


Câmp 1 Câmp 2 Câmp k
Data 11 Data 12 ………. Data 1k
Data 21 Data 22 ………. Data 2k
…… …… …….
Data m1 Data m 2 ………. Data mk

Legaturi BD Clonare legaturi Legaturi clona

Figura 5.8 Secventa clonarii partiale a bazei de date

87
Clonarea partiala a bazei de date este realizata în cadrul celor 2 pasi
si conduce la valorile LBD = 17 si LCLONA = 56 , iar I CLONARE = 0.30 ,
însemnând ca baza de date a fost clonata în proportie de 30%.

5.6 Clonare baza de date cu adaugare de tabele

Procesul de clonare a unei baze de date cu adaugare de tabele


presupune copierea bazei de date initiale într-o noua baza numita clona,
pentru ca mai apoi în aceasta clona sa se adauge tabele noi.
Clonarea unei baze de date cu adaugare de tabele noi se utilizeaza
când se doreste crearea unei noi baze de date care contine pe lânga datele si
legaturile din baza de date initiala si alte tabele, deci clona are o structura
similara cu baza de date clonata si crearea unei baze de date prin metode
conventionale ar fi costisitoare. Procesul este reprezentat grafic în
figura 5.9.

Adaugare
Copiere legaturi vechi si tabele noi
BD 1 date vechi si tabele vechi BD 2

Figura 5.9 Procesul de clonare baza de date cu adaugare de tabele noi

Dupa se observa, baza de date BD1 este practic transferata în baza


de date BD2. Aceasta se realizeaza prin copierea atât a datelor si tabelelor
bazei BD1, cât si a legaturilor acestei baze. Se obtine astfel baza de date
BD2 care este o clona a bazei BD1.

88
La baza de date BD2 se adauga tabelele noi dorite de utilizator. Se
obtine astfel cu un cost minim o noua baza de date. Pentru o mai buna
întelegere se exemplifica pe aplicatia „Contracte”. Modelul conceptual al
noii baze de date arata astfel:

Clienti Contracte Chirii


Cod client Nr contract 1,n Cod chirie
Den client Data contract Nr contract
1,n
Cod fiscal Valoare Data scadenta
NrRegCom Cod client V a l o a r e c hirie

1,n
1,n
Facturi Încasari
Nr factura 1,n Nr document
Data factura Data docum
Cod client 1,n
Suma încasata
Cod chirie Nr factura
Nr contract

Figura 5.10 Modelul relational al probleme i dupa ce s-au adaugat


noi tabele

Dupa cum se observa în figura 5.10 complexitatea bazei de date a


crescut, în timp ce efortul de realizare a acestei noi baze de date a fost
minim.

Clon are totala a tabelelor

Tabela 1 Tabela 2 ……….. Tabela n

Cele n tabele ale bazei de date initiale

Tabela 1 Tabela 2 … Tabela n Tabela n+1 … Tabela n+m

Cele n+m tabele ale clonei


Adaugare tabele noi

Tabela 1 ……….. Tabela m


Se creaza legaturi noi

Cele m tabele noi care se adauga la clona

Legaturi BD Clonare legaturi Legaturi clona

Figura 5.11 Secventa clonarii bazei de date cu adaugare de noi tabele

89
Operatiile aferente pasului C, în care se realizeaza procesul propriu-
zis de clonare cu adaugare de tabele noi a bazei de date sunt descrise în
figura 5.11.
Clonarea cu adaugare de tabele bazei de date este realizata în cadrul
celor 4 pasi si conduce la valorile LBD = 61 si LCLONA = 56 , iar
I CLONARE = 1,08 , însemnând ca baza de date a fost clonata în proportie de
30%. Cei 8% in plus reprezinta o noua legatura adaugata si o noua tabela
pentru încasari care are patru câmpuri.

90
CLONAREA

6 INTERFETELOR
OM – CALCULATOR

6.1 Conceptul de interfata om - calculator

Interfata om – calculator a devenit o parte integrata a produsului software si


la fel de importanta ca si acesta. Aceasta situatie se datoreaza în principal
dezvoltarii fara precedent a societatii informationale care se bazeaza pe
interactiunea din ce în ce mai complexa dintre om si calculator. Daca acum
20 - 30 de ani comunicam cu calculatorul prin intermediul cartelelor atât
pentru introducere de date cât si pentru citirea rezultatelor, astazi barierele
sunt de ordin imaginativ.
Datorita resurselor marilor companii producatoare de software
precum si a competitiei acerbe dintre acestea, produsele informatice încep a
fi orientate catre om, iar termeni ca eficacitate, eficienta sau satisfactie a
utilizatorului sunt din ce în ce mai utilizati în descrierea interfetelor. Acest
lucru dovedeste în plus ca interfata nu mai este un simplu element decorativ
al aplicatiei, ci este o caracteristica definitorie a acestuia, influentând major
calitatea întregului produs.
Trebuie facuta diferenta dintre interactiune om – calculator si
interfata om – calculator. Astfel primul termen se refera la întelegerea

91
dialogului dintre om si calculator precum si a implicatiilor asupra fiecaruia,
iar cel de-al doilea termen este o imagine particulara a acestei întelegeri. De
aceea proiectarea interactiunii are ca unelte metode de cercetare, descriere si
modelare a dialogului, iar proiectarea interfetei om – calculator se bazeaza
pe crearea unei structuri, a relatiilor dintre elementele interfetei precum si
pe delimitarea ei de restul produsului software.

6.2 Tehnologii pentru dezvoltarea interfetei om – calculator

A dezvolta o interfata om – calculator este echivalent cu a crea într-


un mediu specific de programare ca Visual Basic, Visual C++, un suport al
dialogului dintre utilizator si calculator. Greutatea nu consta în cunoasterea
limbajului de programare ci mai degraba în varietatea cunostintelor necesare
din domenii ca psihologie, lingvistica, sociologie, design industrial,
management, antropologie sau tipografie, care sa fie folosite pentru a
maximiza avantajele potentiale ale produsului final.
În mare exista doua tehnologii, fiecare cu instrumentele ei, care sunt
aplicate în constructia interfetelor om – calculator. Cele doua sunt:
tehnologia bazata pe software, pe instrumentele puse la dispozitie de diferite
programe si tehnologia orientata pe utilizator care este o parte din stiinta
interactiunii om – calculator si care opereaza mai mult cu concepte. Ele sunt
complementare, software punând la dispozitie mijloacele de a pune în
practica ideile rezultate din interactiunea omului si a masinii de lucru.

Din prima tehnologie, fac parte interfetele de tip grafic numite


ferestre sau, windows, care sunt utilizate în mod frecvent în ziua de azi.
Acestea pot fi descrise pe scurt prin WIMP, adica windows (ferestre), icons
(iconite), menu (meniu) si pointer (cursor). Aceste patru elemente
fundamentale sunt nelipsite dintr-o interfata grafica, fiind caracterizate pe
scurt astfel:
• fereastra reprezinta zona rectangulara a spatiului de lucru curent.
Accepta input din partea utilizatorului (chiar miscarea mouse în
interiorul sau este o actiune de input de date) si afiseaza sub
diferite forme datele de output. Contine o bara de titlu pe care se
gasesc o serie de butoane de actionare (minimizare, maximizare
si închidere), un meniu, o bara de defilare si o margine prin care
fereastra este redimensionata;
• iconita este o imagine de mici dimensiuni ce simbolizeaza un
lucru simplu si familiar din mediul utilizatorului, fiind asociata

92
unui element al mediului de lucru. Este utila deoarece apeleaza la
memoria vizuala a utilizatorului care astfel recunoaste actiunea
sau elementul;
• cursorul este un element de pozitionare în interiorul ferestrei si
care este utilizat cu preponderenta împreuna cu mouse. Pe lânga
indicarea pozitiei, el are si functii de output transmitând
utilizatorului diferite stari ale programului prin intermediul
formei sale. De exemplu forma de clepsidra care este asociata
starii curente a unui software în care acesta prelucreaza datele.
• meniul consta în aranjarea tuturor obiectelor sau functiilor dintr-
o interfata sub forma unor liste vizibile de nume sau descrieri.
Elementele listelor sunt grupate dupa caracteristici asemanatoare,
pentru a fi regasite cu usurinta, ele reprezentând acele
componente pe care utilizatorul le foloseste în mod curent.

Alte obiecte utilizate în mod curent de aceasta tehnologie sunt:


caseta de dialog, butonul (butonul de comanda, butonul radio, butonul de
optiune), caseta text (text box), caseta lista (list box), caseta combo (combo
box) si casuta de verificare (check box).
Alegerea elementelor vizuale, prezentate mai sus, necesare
construirii unei interfete care sa faciliteze dialogul normal dintre om si
calculator nu reprezinta decât o parte din timpul total alocat proiectului.
Restul, care la nivelul anilor 90 reprezenta 50% din total, consta în aranjarea
vizuala a informatiei, în amplasarea si dimensionarea obiectelor alese în
prima etapa, adica pe scurt în crearea structurii prezentarii. Conceptele luate
în considerare sunt:
• structura prezentarii;
• proiectarea ecranelor;
• complexitatea spatiala;
• consistenta prezentarii.

O alta tehnica utilizata de aceasta tehnologie este folosirea


metaforelor, adica a unor simboluri luate din lumea reala care sunt în mod
obisnuit, familiar asociate unor actiuni specifice. Exemple de metafore sunt:
cosul de reciclare (recycle bin), suprafata de lucru a biroului (desktop),
imprimanta. Acestea sunt folosite pentru a reproduce aspectul obiectului
folosit sau pentru a emula modul cum trebuie folosit obiectul interfetei.
Cea de-a doua tehnologie folosita are ca idee centrala reconsiderarea
factorului uman si anume îl integreaza în procesul de construire a unei
interfete om – calculator. Aceasta tehnologie daca este utilizata, o precede

93
pe ce prezentata anterior pentru ca, dupa cum s-a mai zis, prin intermediul ei
gândim interfata, o proiectam, o analizam si apoi o cream fizic.
Astfel, proiectarea interfetei se face în primul rând considerând
elementul uman ca element central al interfetei. Acest lucru necesita initial o
abordare etnografica care sa scoata în evidenta elemente lingvistice si
culturale particulare ale utilizatorului. A doua etapa este caracterizata de
cercetarea factorului social încercându-se sa se scoata în evidenta
elementele mediului social afectate, efectele asupra cadrului de lucru
organizational si chiar impactul social avut, care uneori are repercusiuni
asupra utilizatorului.
Proiectarea în sine este de doua tipuri: iterativa si prototipizare.
Primul tip consta în parcurgerea iterativa a unui numar finit de etape care sa
aiba ca finalitate produsul software. Însa, acest lucru este aproape imposibil
de aplicat în cazul proiectelor mari. Datorita numeroaselor elemente care
influenteaza sistemul este necesara întoarcerea la etape anterioare în vederea
rezolvarii problemelor aparute în proiectare. Totusi, folosirea curenta a
proiectarii iterative are avantajele sale atunci când luam în calcul verificarea
calitatii produselor software, verificare care reprezinta în sine o strategie
iterativa de proiectare.
Daca în cazul primei metode de proiectare este dificila cooptarea în
procesul decizional a utilizatorului final sau a partilor care interactioneaza
într- un mod sau altul cu produsul final, datorita barierelor în comunicatie
(pregatirea tehnica diferita a partilor), cea de-a doua tehnica utilizeaza
instrumente care sa schimbe aceasta stare a lucrurilor. Fiecare instrument
are avantajele si dezavantajele sale. O parte din ele sunt: ajuta la întelegerea
produsului, facilitând astfel adaugarea de cunostinte noi; constituie baza
pentru proiectarile viitoare prin care acesta este îmbunatatit; este mare
consumatoare de resurse, în special de timp, necesar construirii prototipului,
documentarii acestuia. Principalele tipuri de prototipuri utilizate sunt:
• schitele pe hârtie;
• schitele electronice;
• prototipurile orizontale;
• prototipurile verticale.

Din acest punct de vedere se iau în considerare definitiile


utilizabilitatii date de standardele ISO 9126 (1991) si ISO 9241-11 (1994).
În esenta prin utilizabilitatea unui produs software se întelege calitatea
acestuia de a fi utilizabil si în acest sens fiecare din cele doua standarde
numesc o serie de caracteristici care confera în final produsului calitatea
descrisa mai sus.

94
În standardul ISO 9126 (1991) sunt definite caracteristicile pe care
trebuie sa le aiba o interfata om - calculator:
• functionalitate. Se refera la existenta unui set de instrumente care
sa permita satisfacerea directa sau indirecta a cerintelor
utilizatorului.
• fiabilitate. Produsul trebuie sa confere factorului uman un grad
de siguranta în utilizare, acest lucru fiind dovedit cel mai bine
printr-o utilizare îndelungata.
• utilizabilitate. Prin aceasta caracteristica, standardul se refera
implicit la efortul utilizatorului de a recunoaste, întelege
concepte noi precum si de a le învata si apoi de le controla într-
un mod optim.
• eficienta. Aceasta caracteristica scoate în evidenta raportul dintre
efortul depus de utilizator si acuratetea rezultatelor.
• mentenabilitate. Un produs software pentru a fi considerat reusit
trebuie, pe lânga celelalte caracteristici, sa permita
producatorului sa-l corecteze, sa- l testeze sau sa-l actualizeze cu
versiuni mai noi, si toate acestea cu costuri cât mai mici.
• portabilitate. Astazi, este din ce în ce mai necesar ca un produs
software sa se integreze cât mai bine în diversitatea de medii de
lucru, software si hardware, care caracterizeaza lumea
informatica de azi. Acest lucru este echivalent cu capacitatea
acestuia de a se transfera usor între aceste medii si totodata de a
se adapta la ele.

6.3 Diversitatea interfetei om – calculator

O caracteristica a tehnologiei din ziua de azi o constituie


multitudinea facilitatilor puse la dispozitia programatorului pentru a
construi o interfata om – calculator. Astfel avem la dispozitie componente
care au functionalitati input cât si output, cum ar fi casutele de dialog. Daca
mai luam în considerare si faptul ca exista mai multe posibilitati pentru a
realiza aceeasi operatie, de exemplu putem selecta un obiect cu ajutorul
mouse-ului sau prin combinatii de caractere, si ca o interfata include în ea
mai multe tehnologii de realizare, tragem concluzia ca este destul de
anevoios sa descriem dive rsitatea interfetelor om – calculator fara a avea un
instrument pe care sa-l folosim.
În acest sens introducem notiunea de stil de interfata întelegând prin
aceasta caracteristicile dominante ale unei interfete, caracteristici ce sunt

95
determinate atât de modul grafic cât si de tehnica de interactiune. Asadar
diversitatea interfetelor este data de modul în care sunt proiectate
componentele grafice, atât în ceea ce priveste aspectul grafic, cât si în ceea
ce priveste modul cum se interactioneaza cu acestea.
Principalele categorii de stiluri care includ atât componente vizuale
cât si notiuni din interactiunea om – calculator diferite, au fost numite:
• categoria manipularii directe;
• categoria WYSIWYG;
• categoria interfetelor iconice.

În prima categorie sunt incluse acele interfete ale caror elemente


grafice, atribute sau relatii sunt vizibile operându-se direct cu acestea.
Caracteristica definitorie a acestei categorii este data de faptul ca se lucreaza
direct cu obiectele interfetei, vizual, folosind de cele mai multe ori mouse.
Desi acest lucru usureaza dialogul dintre utilizator si masina, în cazul
lucrului mai rapid, se utilizeaza si alte moduri de interactiune cum ar fi
tastatura sau meniurile. O astfel de interfata caracterizeaza mediul de lucru
al unui software de tip chestionar în care utilizatorul bifeaza diferite optiuni.
A doua categorie WYSIWYG, al carei nume este prescurtarea de la
What You See Is What You Get, este caracterizata de ultima fereastra sau
imagine (în cazul software care nu este bazat pe ferestre), adica utilizatorul
are pe ecran ultima imagine pe care programul a creat-o. Cel mai elocvent
exemplu al acestei categorii este interfata unui program de instalare când se
parcurg mai multi pasi, fiecaruia corespunzându- i o fereastra.
Cea de-a treia categorie, poate si cea mai cunoscuta, are ca elemente
definitorii iconitele (icons) care în esenta sunt mici grafice reprezentând
obiecte si actiuni din lumea reala. Usurinta lucrului cu acestea consta în
asocierile pe care ut ilizatorul, chiar si cel neexperimentat, le face în mod
natural permitându- i astfel sa utilizeze obiecte, actiuni sau concepte fara a fi
nevoie sa- i fie explicate sau descrise. O astfel de interfata este bine
cunoscutul desktop al sistemului de operare Mic rosoft Windows.
Dupa cum se observa în lumea aplicatiilor software, nu exista
interfete care sa apartina exclusiv numai unei singure categorii, ele
incluzând în masuri diferite elemente din aproape toate. Însa împartirea
interfetelor pe categorii nu este inutila, deoarece ne ajuta sa le descriem mai
usor.
În descrierea mai exacta a diversitatii de interfete om – calculator
sunt utilizate si urmatoarele criterii de clasificare:
• limbajul al dialogului utilizator - calculator utilizat;
• structura interfetei;

96
• domeniul de utilizare;
• portretul utilizatorului;
• specificatiile echipamentului utilizat;
• nivelul de flexibilitate.
Cu toate ca mai pot fi gasite mult mai multe criterii de clasificare,
ceea ce conteaza este faptul ca ori câte am gasi o interfata satisface simultan
într-o masura mai mare sau mai mica pe fiecare în parte.

6.4 Orientarea clonarii informatice spre utilizator

Clonarea informatica a interfetelor este un nou concept de reutilizare


a produselor software, în cazul de fata interfata. Astfel sunt obtinute entitati
noi care incorporeaza în totalitate sau partial interfata clonata. Din pacate se
face confuzie între produs software si modul de reprezentare vizuala a
interactiunii cu utilizatorul, interfata reprezentând o unitate de sine
statatoare a carei realizare urmareste o serie de pasi distincti de cei ai
produsului software. De aceea, procesul de clonare a interfetelor este
independent de produsul software în care acestea sunt integrate.
Dezvoltarea tehnologiei client – server si în special a Internetului a
sporit viteza de circulatie a informatiei. Domeniul muzical a valorificat la
maxim oportunitatile oferite datorita aparitiei formatului mp3. Astfel a
aparut posibilitatea publicarii produselor media si a instrumentelor adiacente
lor. Unul dintre aceste instrumente îl reprezinta playerul mp3. La început,
diferitele produse software din acest domeniu prezentau aceleasi
caracteristici tehnice. Diferenta majora dintre acestea, care în final s-a
dovedit a fi cheia succesului, a reprezentat-o implementarea conceptului
interactiunii utilizator – calculator. Implementarea acestui concept a avut la
baza strategia orientata utilizator, astfel interfata fiind proiectata dupa
principiul simplitate în complexitate. Numarul ridicat de functiuni a fost
implement at într-un mod care permite utilizarea produsului independent de
nivelul cunostintelor utilizatorului.
O data câstigat segmentul major al pietei, producatorul este nevoit sa
ia în calcul trendul ascendent al evolutiei domeniului respectiv. Pentru
mentinerea si îmbunatatirea pozitiei actuale, producatorul investeste resurse
semnificative în cercetarea si dezvoltarea produsului. Cum în acest domeniu
imaginea produsului este asociata cu reprezentarea sa grafica (interfata),
aceasta nu sufera modificari radicale. Urmatoarele versiuni au un comun un
nucleu de caracteristici definitorii pentru produs, care nu sunt alterate ci sunt
clonate. Astfel prin intermediul procesului de clonare efortul depus este

97
minimizat, fiind reorientat catre dezvoltarea caracteristicilor tehnice ale
produsului.

6.5 Tehnici si metode utilizate în clonarea interfetelor

Interfata ca entitate de sine statatoare este împartita în structura si


continut. Structura este definita de modul cum sunt aranjate si grupate
diferitele componente ale interfetei (ferestre, butoane, toolbar, meniurile
etc.), iar continutul se refera la particularitatile ce le sunt conferite si care le
individualizeaza în ochii utilizatorului. De obicei aceste particularitati
constau în informatiile care sunt percepute atunci când privim la unul din
obiecte.
De exemplu, ceea ce deosebeste cele doua butoane aflate pe interfata
din Figura 1 este pozitia lor în structura acesteia si etichetele de pe ele.
Astfel, un buton este caracterizat din punct de vedere structural (se afla în
stânga) si din punct de vedere al continutului sau (pe el scrie Informatii
impozite). Un alt caz concret este dat de programele Microsoft Word si
Microsoft Excel din pachetul Microsoft Office, care desi au structura
interfetei aproape identica, continutul acesteia este total diferit.

Figura 6.1 Tip de interfata

Acest mod de a privi si descrie o interfata se datoreaza celor doua


concepte fundamentale ale procesului de realizare a dialogului om - masina,
cel dependent de tehnologie si cel al interactiunii om – calculator. Procesul
de clonare trebuie deci, sa tina seama de cele doua parti distincte ale unei
interfete si sa le trateze ca atare. Mai mult chiar, procesul de clonare este
caracterizat în functie de partea clo nata.
Clonare de structura. Clonarea de structura aplicata unei interfete
are ca rezultat o alta interfata cu structura produsului initial. Sa luam de
exemplu interfata simpla din figura 6.1 a unui produs software de informare

98
publica care consta în doua butoane numite : Informatii impozite si
Informatii scutiri impozite.

Figura 6.2 Structura interfetei din Figura 6.1

Crearea unui nou produs software care de data aceasta sa prezinte


copiilor din clasele pregatitoare doua operatii matematice elementare
necesita o interfata asemanatoare primului produs, care sa nu implice costuri
nejustificate. Solutia optima consta în clonarea structurii interfetei din figura
6.1 si adaugarea continutului necesar rezultatul dorit, figura 6.3.

Figura 6.3 Interfata noului program

99
Structura componentei 1 a Structura componentei 1 a
interfetei clonei

Clonare de
Setul 1 de structura
date input
si output
Setul 3 de
date input si
output

Setul 2 de Setul 1 de
date input date input si
si output output

Setul 2 de
date input Structura
si output componentei n a
clonei
Structura
componentei n a
Setul 3 de
interfetei
date input si
Clona
output
obtinuta

Interfata initiala

Figura 6.4 Clonare de structura a interfetei


Asigurarea continuitatii procesului de clonare se realizeaza prin:
• utilizarea acelorasi cerinte cheie pentru comenzi;
• mentinerea pozitiei ;
• realizarea unui produs nou ca extensie a unui produs existent
care îl include pe acesta;

Produs
nou

Produs
vechi

Figura 6.5 Caracteristica de continuitate a procesului de clonare

100
6.6 Efectele clonarii unor interfetei

Dinamica societatii actuale impune producatorilor de software


implementarea strategiei orientate utilizator. Dupa cum se cunoaste piata IT
este dominata de producatorii de echipamente care concura pentru obtinerea
suprematiei pe piata respectiva. Aceste echipame nte, care în acceptiunea
utilizatorilor sunt instrumente de lucru, intra în contact direct cu utilizatorul
prin intermediul interfetei. Indiferent de tipul echipamentului, cum ar fi
computerul personal, telefonul mobil, PDA, pocket PC, table PC, laptop,
simplitatea utilizarii respectivului echipament este cheia viitorului succes.
În paragraful "Orientarea catre utilizator" s-a prezentat exemplul
referitor la player mp3. Acest exemplu subliniaza importanta alocarii
resurselor catre departamente specializate în analiza interactiunii omului cu
calculatorul. Firma respectiva si-a orientat toate resursele spre utilizator,
realizând acest lucru prin metoda cea mai putin costisitoare, si anume,
realizarea unei interfete atractive. Totusi realizarea unei interfete necesita un
anumit cost. Sa presupunem ca piata a fost câstigata de respectiva firma.
În cazul de fata intervine urmatoarea etapa si anume pastrarea si
dezvoltarea segmentului actual din piata respectiva. Astfel producatorul este
nevoit sa aduca îmbunatatiri produsului prin lansarea de noi versiuni sau noi
produse pe piata.
Asadar, producatorul are doua variante pentru reprezentarea vizuala
a produsului:
• pastrarea unor caracteristici semnificative din cadrul interfetei
vechiului produs;
• realizarea unei noi reprezentari vizuale.
Asa cum s-a afirmat mai sus, realizarea unei interfete necesita
anumite costuri. Aici intervine procesul informatic de clonare a interfetelor.
Un produs, indiferent de calitatea lui intrinseca, este asociat de utilizatori
prin intermediul interfetei. De aceea, noile versiuni ale unui produs cu
caracteristice tehnice remarcabile va pastra vechea interfata la care se
adauga noile optiuni. Efectul cel mai semnificativ al clonarii interfetelor îl
reprezinta minimizarea costurilor. Astfel cu ajutorul procesului de clonare
resursele alocate cercetarii domeniului de interactiune, realizarea unui
prototip, testarea si evaluarea sunt redistribuite catre alte locatii.
Deci, cu ajutorul procesului de clonare se obtin noi interfete care
prezinta caracteristicile vechiului produs.

101
Structura componentei 1 Structura componentei 1
a interfetei a interfetei
Clonare
totala

Setul 1 Setul 3 Setul 1 Setul 3


de date de date de date de date
input si input si input si input si
output output output output

Setul 2 Setul 2
de date Setul 1 de de date Setul 1 de
input si date input si input si date input si
output output output output

Setul 2 de Setul 2 de
date input si date input si
output output

Setul 3 de Setul 3 de
da t e i n p u t s i date input si
output output

Structura Structura
componentei n a componentei n a
interfetei interfetei

Interfata Clona
initiala obtinuta

Figura 6.6 Clonarea totala a interfetei

Pâna la un punct clonarea interfetelor conduce la cresterea


productivitatii în procesul de dezvoltare a aplicatiilor informatice complexe.
Daca se produc salturi calitative, trecerea la o generatie la alta de interfete
vizeaza adaptarea la cerintele utilizatorilor. Clonarea interfetelor în cadrul
aceluiasi producator de software asigura înzestrarea produselor program
finale cu caracteristica de continuitate. Utilizând aceleasi simboluri, aceleasi
cuvinte cheie si aceleasi amplasamente ale butoanelor, trecerea de la un
produs program la altul este însotita de un efort redus din partea
utilizatorului si de acceptarea de catre utilizator a produsului program nou,
fara introducerea de noi restrictii ca în cazul în care utilizatorul trebuie sa se
alinieze la o noua tipologie de interfata.

102
ASPECTE JURIDICE

7 ALE CLONARII
INFORMATICE

7.1 Protectia juridica a programelor de calculator


si a bazelor de date

Produsele software si bazele de date întrunesc cerintele unei creatii


intelectuale ce constituie obiect al dreptului de autor pentru ca:
• sunt rezultatul consumului de munca vie, în special sub forma
efortului intelectual depus de analisti, programatori, designeri,
testeri etc.
• folosind resurse de baza (limbaje, instrumente, echipamente,
metodologii) realizeaza structuri software si de baze de date care
sunt susceptibile de a fi exprimate într-o forma concreta
perceptibila simturilor umane si de a fi fixate pe un suport
material, electronic.
• noile structuri obtinute se diferentiaza de alte structuri existente,
în sensul ca poarta amprenta personalitatii autorului,
„caracterizata de un minim de creativitate si un aport de noutate”
[ROSV01], ceea ce le confera caracter de originalitate.

103
• produsele software si bazele de date sunt susceptibile de a fi
aduse la cunostinta publicului.
• procesele generatoare de software si baze de date presupun
fluxuri informationale specifice comunicarii între membrii
echipelor complexe de informaticieni, care realizeaza o opera
unitara, a carei valoare nu este data de suportul material pe care
programul este stocat si nici de munca depusa pentru realizarea
acestor suporturi.

Relatiile sociale create în legatura cu produsele software si bazele de


date, ca rezultate ale muncii creative individuale sau colective depuse de
persoane fizice sau în cadrul unor procese dezvoltate de persoane juridice,
sunt reglementate de normele juridice din domeniul proprietatii intelectuale,
mai exact din domeniul dreptului de autor.
În paralel cu notiunea de drept de autor se mai foloseste si notiunea
de copyright, caracteristica sistemului de drept anglo-saxon. Desi aparent nu
exista nici o diferenta între continutul celor doua notiuni, trebuie subliniat ca
termenul copyright se refera mai ales la dreptul patrimonial, principala
prerogativa constând în producerea de copii ale unei opere numai cu
consimtamântul titularului dreptului de autor. Notiunea drept de autor
vizeaza atât drepturile nepatrimoniale, referindu-se la persoana care este
creatorul operei, cât si aspectele patrimoniale.
Sistemul dreptului de autor a fost creat pe baza conceptiei filosofice
conform careia opera, ca obiect al protectiei, este o reflectare a personalitatii
autorului. Ideea este pe deplin aplicabila în cazul operelor literare si
artistice, unde personalitatea autorului se exprima prin stilul operei. În cazul
programelor pentru calculator si al bazelor de date, care sunt opere tehnice,
complexe, în care se folosesc limbaje si notiuni de specialitate, si care sunt
realizate, de regula, de colective de programatori, creativitatea este mai
limitata, iar personalitatea autorului se reflecta mai putin. Totusi, în prezent,
în majoritatea tarilor, programele pentru calculator sunt protejate prin
sistemul dreptului de autor.
Studiile si cercetarile interdisciplinare ale informaticienilor si
juristilor au contribuit la definirea unui cadru legislativ inovator, care în
acelasi timp stimuleaza dezvoltarea informaticii si protejeaza pe
producatorii si dezvoltatorii de software si baze de date împotriva clonarii
neautorizate.
Protectia juridica a programelor pentru calculator în SUA este
rezultatul productiei si utilizarii deosebit de intense începând cu deceniul
sapte. Astfel, în 1976 a fost adoptata Legea nr.95-553 (intrata în vigoare la 1

104
ianuarie 1978) pentru modificarea legii copyright- ului din 1909. Legea din
1976 consacra legislativ programele de calc ulator ca opere de creatie
intelectuala, protejabile în cadrul drepturilor de autor. Prin modificarea din
12 decembrie 1980, se defineste notiunea de program pentru calculator ca
„un ansamblu de instructiuni destinate a fi utilizate direct sau indirect într-
un calculator pentru a obtine anumite rezultate”. În SUA, legea copyright-
ului apartine mai mult dreptului afacerilor decât dreptului de creatie
intelectuala [ROSV01], punându-se astfel accent pe aspectele patrimoniale.
În 1988 a fost adoptata în SUA o lege de punere în aplicare a
Conventiei de la Berna pentru protectia operelor literare si artistice, din 9
septembrie 1886. România a aderat la aceasta Conventie în forma revizuita
prin Actul de la Paris la 24 iulie 1971 si modificata la 28 septembrie 1979,
prin Legea nr. 77 din 8 aprilie 1998.
Protectia juridica a programelor pentru calculator la nivel
comunitar este reglementata de Directiva Consiliului Comunitatilor
Europene nr. 91/250/C.E.E. din 14 mai 1991 care recomanda masuri pentru
uniformizarea legislatiei în domeniu si protejarea programelor de calculator
„ca opere literare în întelesul Conventiei de la Berna”.
România a aderat la Conventia de la Berna, în forma revizuita prin
Actul de la Paris la 24 iulie 1971 si modificata la 28 septembrie 1979, prin
Legea nr. 77 din 8 aprilie 1998. Scopul acestui tratat international a fost,
asa cum reiese din preambul, de a proteja într-un mod cât mai eficient si mai
uniform cu putinta drepturile autorilor asupra operelor lor literare si
artistice. În art.2 alin.3 din Conventie, este enuntat principiul conform caruia
operele derivate se bucura de aceeasi protectie ca si operele originale.
Aceasta directiva comunitara a stat la baza legii privind dreptul de
autor în România, în privinta programelor pentru calculator, fiind cuprinsa
aproape în totalitate în legea româna.
De asemenea prin Directiva nr.969/11.03.1996, se recomanda
asigurarea protectiei bazelor de date ca obiect al dreptului de autor.
Protectia juridica a programelor pentru calculator în România are
la baza o serie de acte normative adoptate în ultimul deceniu.
Principalul act normativ în acest domeniu este Legea nr. 8 din 14
martie 1996 privind dreptul de autor si drepturile conexe [LDAD96],
publicata în Monitorul Oficial nr. 60 din 26 martie 1996, care face referire
explicita la domeniul informaticii, considerând opere protejate programele
de calculator si bazele de date. În Partea a II-a, Dispozitii speciale, Cap. IX
(art. 72 - 81) sunt cuprinse norme speciale aplicabile programelor de
calculator.

105
Obiectul dreptului de autor: potrivit art. 7 lit. a), programele de
calculator constituie obiect al dreptului de autor, fiind considerate opere
originale de creatie intelectuala, oricare ar fi modalitatea de creatie, modul
sau forma concreta de exprimare si independent de valoarea si destinatia lor.
Art. 72 din lege stabileste continutul notiunii de program pentru calculator
protejat, care include: „orice expresie a unui program, programele de
aplicatie si sistemele de operare, exprimate în orice fel de limbaj, fie în cod-
sursa sau cod-obiect, materialul de conceptie pregatitor, precum si
manualele”. Alin. 2 din acelasi articol stabileste si limitele protectiei prin
dreptul de autor: „ideile, procedeele, metodele de functionare, conceptele
matematice si principiile care stau la baza oricarui element dintr-un
program pentru calculator, inclusiv acelea care stau la baza interfetelor
sale, nu sunt protejate”.
Dreptul de autor protejeaza numai forma de exprimare a ideilor, nu
si ideile [OMPI01]. În acest sens, clonarea unei opere consta în folosirea
formei în care opera originala a fost exprimata.
„Bazele de date reprezinta o multime centralizata de informatii
organizate în scopul prelucrarii si utilizarii de catre beneficiari”
[ROSV01]. Potrivit art. 8 lit. b), bazele de date sunt considerate opere
derivate, create plecând de la una sau mai multe opere preexistente, fiind
protejate, cu conditia de a nu prejudicia drepturile autorilor operei originale.
În acelasi sens, art. 16 prevede ca autorul unei opere are dreptul patrimonial
exclusiv de a autoriza traducerea, adaptarea, precum si orice alta
transformare a operei sale prin care se obtine o opera derivata.
Subiectul dreptului de autor: conform regulii prevazute de art. 3,
autorul operei este persoana care a creat opera. Art. 4 instituie o prezumtie
relativa, pâna la proba contrara, în privinta calitatii de autor, relativ la
persoana sub numele careia opera a fost adusa pentru prima data la
cunostinta publica. Desi nu este o conditie pentru a fi protejata, aducerea
operei la cunostinta publica este importanta pentru recunoasterea autorului.
În art. 74 este prevazuta norma speciala, supletiva, aplicabila în lipsa
unei conventii contrare, conform careia „drepturile patrimoniale de autor
asupra programelor pentru calcula tor, create de unul sau de mai multi
angajati în exercitarea atributiilor de serviciu sau dupa instructiunile celui
care angajeaza, apartin acestuia din urma”.
Continutul dreptului de autor: autorul unei opere beneficiaza de
doua categorii de drepturi: morale si patrimoniale. Autorul unui program
pentru calculator are urmatoarele drepturi morale:
v dreptul de a decide daca, în ce mod si când va fi adusa opera la
cunostinta publica;
v dreptul de a pretinde recunoasterea calitatii de autor al operei;
106
v dreptul de a decide sub ce nume va fi adusa opera la cunostinta
publica;
v dreptul de a pretinde respectarea integritatii operei si de a se
opune oricarei modificari, precum si oricarei atingeri aduse
operei, daca prejudiciaza onoarea sau reputatia sa.

Aceste drepturi nu pot face obiectul vreunei renuntari sau înstrainari.


Conform art. 12, autorul unei opere are dreptul patrimonial exclusiv
de a decide daca, în ce mod si când va fi utilizata sau exploatata opera sa,
inclusiv de a consimti la utilizarea operei de catre altii. Utilizarea sau
exploatarea unui program pentru calculator da nastere, conform art. 73, la
dreptul patrimonial exclusiv al autorului de a realiza si de a autoriza:
Ø reproducerea permanenta sau temporara a unui program, integral
sau partial, prin orice mijloc si sub orice forma, inclusiv în cazul
în care reproducerea este determinata de încarcarea, afisarea,
transmiterea sau stocarea programului pe calculator;
Ø traducerea, adaptarea, aranjarea si orice alte transformari aduse
unui program pentru calculator, precum si reproducerea
rezultatului acestor operatiuni, fara a prejudicia drepturile
persoanei care transforma programul pentru calculator;
Ø difuzarea originalului sau a copiilor unui program pentru
calculator sub orice forma, inclusiv prin închiriere.

De asemenea, potrivit art. 13 lit. m), autorul are dreptul patrimonial


exclusiv de a autoriza accesul public la bazele de date pe calculator, în cazul
în care aceste baze de date contin sau constituie opere protejate.
În art. 14 sunt definite notiunile de reproducere si difuzare, care sunt
folosite de legiuitor pentru a exprima si clonarea informatica. Astfel, prin
reproducere se întelege „realizarea uneia ori a mai multor copii ale unei
opere, în orice forma materiala, inclusiv realizarea oricarei înregistrari
sonore sau vizuale a unei opere, precum si stocarea permanenta ori
temporara a acesteia cu mijloace electronice”. Prin difuzare se întelege
„distribuirea catre public a originalului ori a copiilor unei opere, prin
vânzare, închiriere, împrumut sau prin orice alt mod de transmitere cu titlu
oneros sau cu titlu gratuit”.
Durata protectiei dreptului de autor: momentul nasterii dreptului de
autor asupra unui program de calculator este cel al crearii acestuia. Din
interpretarea sistematica a art. 24 (1) si art. 1 (2) rezulta ca, din momentul
crearii programului, acesta este protejat indiferent de modul sau forma de
exprimare si de aducerea la cunostinta publica.

107
Conform art. 30, drepturile patrimoniale asupra programelor pentru
calculator dureaza tot timpul vietii autorului, iar dupa moartea acestuia se
transmit prin mostenire, potrivit legislatiei civile, pe o perioada de 50 de ani.
Dupa expirarea acestui termen, opera intra în domeniul public, putând fi
utilizata de oricine, fara a mai fi necesara autorizarea titularului dreptului.
Experienta arata ca în domeniul software ritmul uzurii morale este destul de
accentuat si situatia utilizarii libere dupa 50 de ani este extrem de rar
întâlnita în practica.
Cesiunea drepturilor de autor: transmisiunea drepturilor
patrimoniale de autor prin contract este denumita cesiune. Conform art. 39,
aceasta este exclusiva, când însusi titularul dreptului de autor nu mai poate
utiliza opera în modalitatile, pe termenul si pentru teritoriul convenite cu
cesionarul si nici nu ma i poate transmite dreptul respectiv unei alte
persoane. Caracterul exclusiv al cesiunii trebuie sa fie expres prevazut în
contract. Cesiunea este neexclusiva când titularul dreptului de autor poate
utiliza el însusi opera si poate transmite dreptul neexclusiv si altor persoane.
Cesionarul neexclusiv nu poate ceda dreptul sau unei alte persoane decât cu
consimtamântul expres al cedentului. Cesiunea unuia dintre drepturile
patrimoniale ale titularului dreptului de autor nu are nici un efect asupra
celorlalte drepturi ale sale, daca nu s-a convenit altfel. Contractul de cesiune
a drepturilor patrimoniale trebuie încheiat numai în forma scrisa. Aceasta
cerinta este impusa de lege ad probationem, pentru a se dovedi existenta si
continutul contractului.
Conditiile speciale, intrinseci si de validitate, care trebuie sa faca
parte din structura contractului de cesiune a drepturilor patrimoniale de
autor sunt prevazute de art.41 si sunt urmatoarele: drepturile patrimoniale
transmise, modalitatile de exploatare, durata si întinderea cesiunii, precum si
remuneratia titularului dreptului de autor. Lipsa oricareia dintre aceste
clauze este sanctionata cu nulitatea relativa, orice parte interesata având
posibilitatea sa ceara si sa obtina anularea contractului de cesiune.
În cazul programelor de calculator, cesiunea este neexclusiva, art.75.
Norma din acest text legal este supletiva, partile, prin conventia dintre ele,
având posibilitatea sa stabileasca în mod expres alte clauze.
În art. 63 este reglementat contractul de închiriere a unei opere,
aplicabil inclusiv programelor pentru calculator, prin care autorul se
angajeaza sa permita folosinta, pe timp determinat, cel putin a unui
exemplar al operei sale, în original sau în copie. Cesionarul dreptului de
închiriere se angajeaza sa plateasca o remuneratie autorului pe perioada cât
foloseste acel exemplar al operei. Contractul de închiriere a unei opere este
supus dispozitiilor de drept comun privind contractul de locatiune.

108
Autorul pastreaza dreptul de autor asupra operei închiriate, cu
exceptia dreptului de difuzare, daca nu s-a convenit altfel. Daca autorul nu
mai pastreaza dreptul de difuzare a programului de calculator, rezulta ca nici
nu îl mai poate transmite altei persoane. Deci, în privinta dreptului de
difuzare, cont ractul de închiriere a unei opere este o cesiune exclusiva
limitata. Pentru celelalte drepturi patrimoniale, contractul de închiriere este
o cesiune neexclusiva.
Pentru transmiterea prin contract a drepturilor patrimoniale de autor,
legea cadru [LDAD96] foloseste notiunea de licenta izolat, în art. 130,
precizând ca organismele de gestiune colectiva au obligatia de a acorda
utilizatorilor, prin contract, în schimbul unei remuneratii, autorizatii
neexclusive de utilizare a operelor sau prestatiilor titularilor drepturilor, sub
forma de licenta neexclusiva, fara a arata expres întelesul aceste notiuni.
O.G. nr. 124/2000, aprobata si modificata prin Legea nr. 213/2002,
defineste în art. 2 lit. a), licenta programului pentru calculator ca fiind
acordul scris al titularului dreptului de autor privind cesiunea unor drepturi
catre utilizatorul programului si care însoteste programul.
În consecinta, exista doua acceptiuni ale notiunii de licenta: în
primul rând de contract prin care se transmit drepturi patrimoniale de autor,
iar în al doilea rând, de autorizare a autorului pentru ca o persoana sa
utilizeze sau sa exploateze opera sa.
Pentru o buna întelegere a semnificatiei notiunii, aceasta trebuie
analizata în comparatie cu întelesul avut în domeniul proprietatii industriale
(brevete, marci). Astfel, transmiterea prin contract a drepturilor de
proprietate industriala se face sub forma de cesiune sau licenta. Cesiunea
este actul juridic prin care se transmite dreptul de proprietate industriala, si
implicit dreptul de exploatare exclusiva asupra brevetului sau marcii de la
titular catre o alta persoana. Spre deosebire, licenta este actul juridic prin
care se transmite, în întregime sau în anumite limite, dreptul de folosinta
asupra obiectului protectiei, de la titular catre o alta persoana.
În domeniul dreptului de autor, transmiterea drepturilor patrimoniale
este denumita generic – cesiune. Dupa cum am aratat mai sus, cesiunea este
exclusiva – echivalentul unei cesiuni în domeniul proprietatii industriale,
sau neexclusiva – echivalentul unei licente. Normele care reglementeaza
cesiunea, art. 39 si urmatoarele [LDAD96], sunt dispozitii comune,
generale. În mod special, este reglementat contractul de închiriere a unei
opere, care reprezinta o cesiune exclusiva limitata în privinta dreptului de
difuzare, si o cesiune neexclusiva, pentru celelalte drepturi patrimoniale.
Contractul de licenta în domeniul dreptului de autor este o varianta de specie
a cesiunii neexclusive. Un astfel de contract de licenta este contractul numit
de lege în art. 75 – de utilizare a unui program pentru calculator.
109
Prin contractul de licenta se stabilesc si conditiile de
utilizare/exploatare a operei protejate, iar persoana care primeste licenta este
obligata sa utilizeze opera numai în conditiile si limitele prevazute în
contract.
Dispozitii speciale aplicabile protectiei programelor pentru
calculator: titlul I, Cap. VI din lege [LDAD96] – privind limitele exercitarii
dreptului de autor – reglementeaza în art. 33-34, utilizarile permise ale unei
opere, fara a mai fi necesar consimtamântul autorului, exceptii ce sunt
cunoscute în literatura de specialitate sub denumirea fair use.
Conform art. 81 [LDAD96], dispozitiile Cap. VI din Titlul I al legii,
privind limitele exercitarii dreptului de autor, nu se aplica programelor
pentru calculator. Rezulta deci ca nici art. 34 privind dreptul la copia
privata, adica posibilitatea reproducerii unei opere fara consimtamântul
autorului, pentru uzul personal si pentru cercul normal al unei familii, nu se
aplica în cazul programelor pentru calculator. Este însa permis, potrivit art.
77, ca fara autorizarea autorului, utilizatorul autorizat al unui program sa
faca o copie de arhiva sau de siguranta, în masura în care este necesara
pentru utilizarea programului.
Raspunderea juridica pentru încalcarea drepturilor de autor în
domeniul programelor pentru calculator: încalcarea drepturilor recunoscute
si garantate prin prezenta lege atrage raspunderea civila, contraventionala
sau penala. Raspunderea civila este consecinta exercitarii de catre titularii
drepturilor încalcate a unei actiuni civile la instantele judecatoresti, prin care
se solicita recunoasterea drepturilor lor, constatarea încalcarii acestora si
repararea prejudiciului cauzat prin fapta ilicita. Raspunderea civila este
delictuala, întemeiata pe dispozitiile art. 998-999 Cod civil, sau
contractuala, întemeiata pe contractul de cesiune încheiat între titularul
dreptului de autor si utilizatorii de software. De asemenea, conform art. 139
[LDAD96], titularii drepturilor încalcate pot cere instantei de judecata sa
dispuna aplicarea oricareia dintre urmatoarele masuri:
§ remiterea, pentru acoperirea prejudiciilor suferite, a încasarilor
realizate prin actul ilicit sau, daca prejudiciile nu pot fi reparate în
acest mod, remiterea bunurilor rezultate din fapta ilicita, în
vederea valorificarii acestora, pâna la acoperirea integrala a
prejudiciilor cauzate;
§ distrugerea echipamentelor si a mijloacelor aflate în proprietatea
faptuitorului, a caror destinatie unica sau principala a fost aceea
de producere a actului ilicit;
§ scoaterea din circuitul comercial prin confiscarea si distrugerea
còpiilor efectuate ilegal;

110
§ publicarea în mijloacele de comunicare în masa a hotarârii
instantei de judecata, pe cheltuiala celui care a savârsit fapta.

Raspunderea penala intervine ca urmare a încalcarii normei juridice


penale, a savârsirii unei infractiuni. Astfel, potrivit art. 140, constituie
infractiune si se pedepseste cu închisoare de la o luna la 2 ani sau cu amenda
de la 200.000 lei la 3 milioane lei, daca nu constituie o infractiune mai
grava, fapta persoanei care, fara a avea autorizarea sau, dupa caz,
consimtamântul titularului drepturilor recunoscute prin lege:
• aduce o opera la cunostinta publica (lit. a);
• permite accesul public la bazele de date pe calculator, care contin
sau constituie opere protejate (lit. c);
• traduce, publica în culegeri, adapteaza sau transforma o opera,
pentru a obtine o opera derivata (lit. d).

Potrivit art. 141, constituie infractiune si se pedepseste cu închisoare


de la 3 luni la 5 ani sau cu amenda de la 500.000 lei la 10 milioane lei fapta
persoanei care îsi însuseste, fara drept, calitatea de autor al unei opere sau
fapta persoanei care aduce la cunostinta publica o opera sub un alt nume
decât acela decis de autor, daca fapta nu constituie o infractiune mai grava.
Potrivit art. 142, constituie infractiune si se pedepseste cu închisoare
de la 3 luni la 3 ani sau cu amenda de la 700.000 lei la 7 milioane lei, daca
nu constituie o infractiune mai grava, fapta persoanei care, fara a avea
consimtamântul titularului drepturilor recunoscute prin lege:
Ø reproduce integral sau partial o opera (lit. a);
Ø difuzeaza o opera (lit. b);
Ø importa, în vederea comercializarii pe teritoriul României, còpii
de pe o opera (lit.c).

Potrivit art. 143, constituie infractiune si se pedepseste cu închisoare


de la 3 luni la 2 ani sau cu amenda de la 500.000 lei la 5 milioane lei, daca
nu constituie o infractiune mai grava, fapta persoanei care pune la dispozitia
publicului prin vânzare sau prin orice alt mod de transmitere cu titlu oneros
ori cu titlu gratuit mijloace tehnice destinate stergerii neautorizate sau
neutralizarii dispozitivelor tehnice care protejeaza programul pentru
calculator (lit. a).
În cazul infractiunilor prevazute la art. 140, 141 si 142 lit. a), c),
actiunea penala se pune în miscare la plângerea prealabila a persoanei
vatamate în sensul prezentei legi. Cel care savârseste o infractiune dintre

111
cele enumerate anterior nu poate fi tras la raspundere penala decât daca
persoana vatamata îsi manifesta vointa în acest sens.
Potrivit legii, transformarea unui program pentru calculator
reprezinta o opera derivata. Având în vedere specificul obiectului protectiei
în domeniul informaticii, o transformare superficiala a unui program, fisier
nu este totdeauna o opera derivata în întelesul legii, adica o opera de
perfectionare, corectare a erorilor, de dezvoltare a programului originar.
Astfel, transformari de genul: clonarea sub forma conversiei extensiei
fisierului, inclusiv prin compresia de date, clonarea prin translatarea
fisierelor sursa dintr-un limbaj în altul sau clonarea structurii interfetelor,
sunt efectuate de cel care cloneaza, uneori, pentru a ascunde, sub aparenta
unei transformari, o simpla copiere.
Interesul practic al discutiei este ca în functie de calificarea activitatii
de transformare a programului pentru calculator, ca opera derivata sau ca
reproducere, se face încadrarea juridica a unei încalcari a dreptului de autor,
în infractiunea prevazuta de art. 140 lit. d), sau în cea prevazuta de art. 142
lit. a) din lege.
Pentru a solutiona aceasta problema trebuie avuta în vedere intentia
celui ce cloneaza, de a ascunde o simpla copiere sau de a realiza o opera
derivata. Daca se dovedeste intentia faptuitorului de a ascunde o simpla
copiere, prin clonare nu s-a obtinut o opera derivata, întrucât nu este
caracterizata prin originalitate si creativitate. În acest caz, clonarea a
îmbracat forma reproducerii si este sanctionata ca atare potrivit art. 142 lit.
a). Se observa astfel, ca reproducerea se realizeaza, ca exceptie, si prin alte
forme de clonare decât copierea propriu- zisa.
Raspunderea contraventionala potrivit O.G. 124/2000 aprobata si
modificata prin Legea 213/2002 [ORGV00], pentru completarea cadrului
juridic privind dreptul de autor si drepturile conexe, prin adoptarea de
masuri pentru combaterea pirateriei în domeniile audio si video, precum si a
programelor pentru calculator, este reglementata în art. 8.
În art. 1 este aratat scopul actului normativ: stabilirea unor masuri în
vederea combaterii producerii, distribuirii sau comercializarii neautorizate a
programelor pentru calculator. Art. 2 lit. c) si f) defineste termenii de
comercializare sau închiriere neautorizata, respectiv producere si
reproducere neautorizata, referindu-se la încalcarea obligatiilor prevazute de
prezenta ordonanta. Spre deosebire de legea cadru privind dreptul de autor
nr. 8/1996, conform cu care prin comercializare, închiriere sau reproducere
neautorizata se întelege efectuarea acestor activitati fara consimtamântul
autorului operei, în ordonanta [ORGV00] notiunea neautorizat are un
înteles diferit, iar acest fapt trebuie avut în vedere pentru interpretarea si
aplicarea corecta a dispozitiilor privind raspunderea contraventionala.
112
Potrivit art. 8, constituie contraventii urmatoarele fapte, daca nu sunt
savârsite în astfel de conditii încât sa fie considerate, potrivit legii penale,
infractiuni, si se sanctioneaza dupa cum urmeaza:
v detinerea de programe de calculator, coperte de programe de
calculator, contrafacute sau pirat, în spatiile comerciale, în
anexele acestora si în mijloacele de transport utilizate la
transportul sau depozitarea produselor susmentionate, cu amenda
de la 20.000.000 lei la 100.000.000 lei si confiscarea
programe lor pentru calculator si a copertelor, lit. a;
v distribuirea, comercializarea sau închiriarea neautorizata a
programelor pentru calculator cu amenda de la 25.000.000 la
250.000.000 lei, lit. b;
v detinerea de programe de calculator sau coperte, fara acte
justificative, ori de aparatura ce ar permite realizarea
programelor de calculator sau a copertelor, în scopul producerii
sau reproducerii neautorizate a acestora, cu amenda de la
30.000.000 la 150.000.000 lei si confiscarea suporturilor,
materialelor si a aparatelor, lit. c;
v neîndeplinirea obligatiilor prevazute la art.3 alin.1, cu amenda de
la 20.000.000 la 40.000.000 lei, lit. f. Aceste obligatii se refera la
comunicarea catre Oficiul Român pentru Drepturile de Autor a
urmatoarelor: - acordul titularului dreptului de autor pentru
activitatile de distribuire, comercializare sau închiriere, si -
informatii referitoare la modul de acordare a licentei si modelul
licentei acordate utilizatorilor de programe pentru calculator.

Suporturile, materialele sau copertele confiscate potrivit art. 8 alin.


1-3 vor fi distruse, dupa data expirarii termenului legal de atacare a
procesului- verbal de constatare a contraventiei ori dupa data ramânerii
definitive a hotarârii judecatoresti prin care s-a respins plângerea împotriva
procesului- verbal de constatare a contraventiei, dupa caz.

113
7.2 Cai de crestere a eficientei în combaterea
clonarii informatice neautorizate

Amploarea realizarii neutorizate a clonelor informatice are ca efect


direct stagnarea sau diminuarea productie i de software original. Progresul
tehnicii a condus la crearea unor mijloace cu ajutorul carora se pot produce
cu usurinta còpii ilegale ale unei opere originale. Cel ce cloneaza nu suporta
costurile unei investitii în producerea operei originale, astfel încât clonele
neautorizate sunt vândute la preturi mici, subminând posibilitatea autorului
si a investitorului original de a obtine recompensa morala si economica justa
pentru munca si investitia lor [OMPI01].
Atât în literatura de specialitate cât si în le gislatie, se foloseste
notiunea de piraterie, ca fiind copierea neautorizata a operei protejate prin
drept de autor, în scopuri comerciale, ca si comercializarea neautorizata de
còpii de pe o opera [OMPI01]. Acest termen este folosit de legiuitor în O.G.
nr. 124/2000, aprobata si modificata prin Legea nr. 213/2002, prin care se
stabilesc masuri pentru combaterea pirateriei în domeniul audio si video,
precum si a programelor pentru calculator. Se observa ca notiunea de
piraterie este folosita într- un înteles larg, acoperind si alte domenii de
protectie prin dreptul de autor decât cel al programelor pentru calculator. De
asemenea, Legea nr. 202/2000, privind unele masuri pentru asigurarea
respectarii drepturilor de proprietate intelectuala în cadrul operatiunilor de
vamuire, în art. 1, pct. 14, defineste notiunea de marfuri pirat : toate copiile
fabricate fara consimtamântul titularului dreptului sau al persoanei legal
autorizate de acesta în tara de producere si care sunt executate, direct sau
indirect, dupa un produs purtator al dreptului de autor, daca realizarea de
astfel de copii constituie o încalcare a dreptului de proprietate intelectuala
respectiv, în baza legislatiei tarii de import.
Având în vedere ca fenomenul clonarii neautorizate prejudiciaza
interesele economice ale titularilor drepturilor de autor, dar este si în
detrimentul societatii, pentru ca descurajeaza interesul creatorilor de a
produce opere de succes si pentru ca deterioreaza renumele international al
statului ce permite dezvoltarea acestui fenomen, se impune luarea unor
masuri care sa-l limiteze:
Ø se impune cunoasterea mediului românesc pentru a identifica
motivatia orientarii spre utilizarea neautorizata a programelor
pentru calculator si bazelor de date clonate, si pentru a identifica
categoriile de persoane care cloneaza si care comercializeaza
neautorizat clone.
Ø una dintre cauzele clonarii neautorizate este caracterul prohibitiv
al achizitionarii de licente coroborat cu puterea de cumparare
114
scazuta a populatiei. Prin recunoasterea unor categorii distincte de
utilizatori, si respectiv prin adoptarea unor preturi diferentiate ale
licentelor se creaza premisele utilizarii legale de programe pentru
calculator si baze de date.
Ø prin includerea în pretul calculatoarelor la vânzare si a pretului
unor licente de componente software se asigura utilizarea legala
pe calculatoare de software minimal. Astfel sunt licentele OEM,
programul fiind livrat împreuna cu un calculator nou sau
componente hardware.
Ø introducerea sistemului de plata în rate, crearea de facilitati pentru
cei care reînnoiesc licente si diferentierea pretului în functie de
numarul de licente achizitionate, în sensul invers proportional cu
numarul de licente.
Ø livrarea gratuita pentru o perioada limitata de timp (o luna) a
produsului în vederea testarii, dupa care, în cazul ca se doreste
utilizarea în continuare, trebuie achizitionata licenta.
Ø acordarea de licente educationale institutiilor de învatamânt care
vor avea software licentiat la nivel maximal. De asemenea,
distribuirea la pretur i modice sau în sistem de licenta gratuita a
software de utilitate publica precum: software pentru evidenta
situatiilor scolare, pentru gestionarea bibliotecilor, pentru bilantul
contabil, pentru posta electronica, genereaza efecte secundare care
conduc la recuperarea costurilor.
Ø impunerea obligatiei în sarcina agentilor economici de a evidentia
în contabilitate, într-un registru special, asemanator inventarului
mijloacelor fixe, software utilizat de întreprindere.
Ø crearea Registrului utilizatorilor de software permite o evidenta a
celor care utilizeaza legal pe categorii de produse si directionarea
controalelor spre agenti economici care nu poseda licente.
Ø crearea Registrului programelor pentru calculator ofera un
instrument sigur autorilor de programe recunoscute oficial ca
originale si protejate prin dreptul de autor de a-si asigura
opozabilitatea fata de utilizatorii acestor programe, care sunt
obligati sa achizitioneze licente pentru programele înregistrate.
Prin O.G. nr. 124/2000 a fost înfiintat Registrul programelor
pentru calculator, administrat de Oficiul Român pentru Drepturile
de Autor. În art. 3 din actul normativ susmentionat, sunt
prevazute anumite documente care vor fi înscrise în Registrul
programelor pentru calculator: - acordul titularului dreptului de
autor pentru activitatile de distribuire, comercializare sau
închiriere, si - informatii referitoare la modul de acordare a
115
licentei si modelul licentei acordate utilizatorilor de programe
pentru calculator. Scopul înfiintarii acestui Registru a fost acela
de a crea o baza de date cu privire la titularii care doresc sa se
înscrie, utila O.R.D.A., altor autoritati sau persoane interesate.
Prin Decizia O.R.D.A. nr.5 din 30 octombrie 2000, s-au adoptat
Normele metodologice privind administrarea Registrului
programelor pentru calculator.
Ø pe baza experientei acumulate, folosind si aquis- ul comunitar în
domeniu, se procedeaza la perfectionarea legislatiei prin
includerea de masuri cât mai eficiente: sanctiuni penale, care
trebuie sa aiba atât o functie represiva cât si una compensatorie,
sa asigure posibilitati reale si eficiente titularilor drepturilor de
autor de a obtine compensatii pentru prejudiciul material cât si
moral cauzat prin încalcarea drepturilor. Uneori este dificila
stabilirea cu exactitate a cuantumului despagubirilor, astfel ca
sunt necesare prevederi legale speciale care sa stabileasca criterii
si modele de evaluare a unei compensatii echitabile. Alte masuri,
de natura civila sau administrativa, privesc: confiscarea si
eventual, distrugerea còpiilor software neautorizate si a
instrumentelor folosite la realizarea lor, sigilarea locurilor unde se
desfasoara activitatea de clonare neautorizata, ordonarea încetarii
activitatii de clonare prin care se încalca drepturi de autor
[OMPI01].
Ø este evidenta necesitatea implementarii prevederilor legale în
domeniu, prin crearea de unitati specializate în cadrul politiei, în
ministerele de resort si în cadrul organelor vamale, unitati care sa
efectueze mai eficient controale la persoane fizice si juridice
pentru a identifica eventuale clone neautorizate software si de
baze de date. Astfel, prin Legea nr. 202/2000 au fost initiate unele
masuri pentru asigurarea respectarii drepturilor de proprietate
intelectuala în cadrul operatiunilor de vamuire, una dintre
masurile ce se ia de organele vamale, la cerere sau din oficiu,
fiind suspendarea operatiunilor de vamuire si retinerea marfurilor
suspectate a aduce atingere unui drept de proprietate intelectuala.
De aseme nea, prin art. 9, alin. 2 din O.G. 142/2000 s-a prevazut
posibilitatea implicarii reprezentantilor autorizati ai titularilor
drepturilor de autor, de a însoti organele abilitate ale statului la
constatarea si sanctionarea contraventiilor prevazute de acest act
normativ.

116
Ø se impune definirea unui cod de etica pentru dezvoltatorii de
software si baze de date si un cod de etica pentru utilizatorii de
produse informatice.
Ø trebuie publicate facilitatile oferite pentru ca utilizatorii, având
cunostinta, sa beneficieze de acestea si sa nu procedeze la
achizitionarea la achizitionarea de clone în conditii de risc, mai
ales atunci când costurile licentelor sunt mai reduse.
Ø organismele care gestioneaza drepturile de autor, O.R.D.A., prin
masuri concrete în institutii de învatamânt, sa culturalizeze cu
privire la faptul ca programele de calculator si bazele de date sunt
opere protejate prin dreptul de autor, consecintele încalcarii
acestor drepturi fiind inclusiv de natura penala.
Ø crearea de experti în domeniul juridic si al informaticii care sa
analizeze software si baze de date pentru identificarea
profesionala a clonelor. Acesti experti vor facilita rezolvarea unor
cauze deduse organelor executive sau de justitie.
Ø chiar producatorii de software si baze de date, titularii drepturilor
de autor, folosesc diferite tipuri de protectie împotriva copierii
neautorizate, cum sunt: programe de protectie, coduri, aplicarea
de holograme pe suportul pe care este stocat programul pentru
calculator, certificatul de autenticitate, dispozitive hardware.
Ø pentru eficienta combaterii clonarii neautorizate, trebuie mai întâi
ca toate institutiile publice sa aiba toate posturile de lucru numai
cu software licentiat, oferind astfel un exemplu utilizatorilor
privati. Retelele de calculatoare vor fi livrate numai cu software
licentiat la nivel maximal, pentru a înlatura orice posibilitate de
utilizare fara licenta.

7.3 Codul etic al programatorului

În cadrul desfasurarii activitatilor din domeniul software se


identifica:
• elaboratorii de produs e software;
• utilizatorii de produse program;
• comerciantii de software si de servicii informatice.

Diversitatea persoanelor care îsi desfasoara activitatea, direct sau


indirect, în domenii care utilizeaza calculatoare impune stabilirea unor

117
reguli de comportament unanim acceptate care sa fundamenteze existenta
unui climat propice rezolvarii de probleme cu ajutorul tehnicii de calcul.
Existenta retelelor de calculatoare aduce noi aspecte ce trebuie luate
în considerare privind limitele pe care sistemele de protectie le genereaza.
Oricarui sistem de protectie i se construiesc la intervale scurte de timp
modalitati de acces neautorizat cu efecte negative asupra întregului proces
de informatizare.
Elaborarea codurilor de etica pentru diferitele tipologii de personal
care îsi desfasoara activitatea în sfera informaticii ia in considerare
particularitatile specifice ale acesteia.
Principiile etice care trebuie sa stea la baza activitatii desfasurate de
dezvoltatorii de software au în vedere urmatoarele aspecte:
1. proiectarea si/sau implementarea sistemelor informatice trebuie
sa asigure utilizarea responsabila a produselor informatice, care
raspund nevoilor sociale, nu afecteaza mediul natural si nu au
efecte daunatoare asupra sanatatii si bunastarii;
2. evitarea producerii de efecte negative utilizatorilor, publicului în
general, angajatorilor si angajatilor; efectele negative au în
vedere pierderi nedorite de informatii, pierderi sau distrugeri ale
proprietatii, resurselor umane si financiare, programatorul fiind
obligat de a raporta orice suspiciune a sistemului care ar conduce
la pagube serioase;
3. dezvaluirea limitelor si problemelor sistemului, fara a face
declaratii false sau înselatoare privind proiectarea si realizarea
sa, precum si calificarea personalului care sa conduca la conflicte
de interese;
4. discriminarea de orice natura nu este acceptata, promovându-se
valorile egalitatii, tolerantei, respectului fata de altii date de
utilizarea tehnologiilor informatice;
5. respectarea drepturilor de proprietate asupra produselor software;
6. obligativitatea protejarii proprietatii intelectuale;
7. respectarea intimitatii celorlalti; tehnologia informatica si a
comunicatiilor permit colectarea si schimbul de informatii
personale, crescând astfel posibilitatea violarii intimitatii
indivizilor si grupurilor de persoane;
8. respectarea confidentialitatii informatiilor atunci când se face în
mod explicit promisiunea respectarii acesteia sau când diverse
informatii legate de îndeplinirea datoriei devin accesibile;
9. realizarea unei calitati înalte de calitate, eficienta si prestanta în
activitatile desfasurate si produsele obtinute;

118
10. acumularea si mentinerea competentei profesionale la un nivel
cât mai ridicat prin:
• studiu individual;
• participare la seminarii, conferinte si cursuri;
• implicare în organizatii profesionale.
11. cunoasterea si respectarea legilor locale, nationale si
internationale privind activitatea profesionala; violarea unei legi
este etica atunci când aceasta este nepotrivita cu principiile etice
fundamentale sau contravine unei legi considerata ca fiind mai
importanta, iar persoana respectiva este responsabila de
nerespectarea legii;
12. criticarea în mod profesional a calitatii activitatii desfasurate;
fiecare persoana trebuie sa caute si sa foloseasca criticile
pertinente si sa furnizeze critici asupra muncii altora;
13. furnizarea unor evaluari complete si detaliate a sistemelor si a
impactului lor, luând în considerare posibilele riscuri;
14. onorarea contractelor, întelegerilor si responsabilitatilor care
decurg din acestea;
15. atitudine pozitiva si constructiva fata de beneficiarii informaticii
si a consecintelor ei; programatorii au responsabilitatea
împartasirii cunostintelor tehnice cu publicul, încurajând astfel
întelegerea informaticii si a impactului acesteia asupra societatii;
16. accesarea resurselor de calcul si a comunicatiei doar prin
autorizare; indivizii si organizatiile au dreptul de a restrictiona
accesul la sistemele atât timp cât nu este încalcat principiul
discriminarii;

7.4 Codul etic al utilizatorului

Utilizatorii sunt persoane fizice si juridice care folosesc hardware,


software si beneficiaza de servicii informatice.
Utilizatorii de informatica desfasoara activitati în conformitate cu
principiile etice daca:
1. folosesc software, hardware si alte resurse obtinute prin mijloace
legale;
2. respecta integral conditiile definite în contractele încheiate cu
proprietarii aplicatiilor sau resurselor informatice;
3. folosesc produsul software potrivit destinatiei pentru care a fost
realizat;

119
4. nu folosesc unele facilitati puse la dispozitie de respectivul
produs pentru a evita masurile de securitate sau pentru a sparge
codurile altui produs informatic;
5. îsi procura prin metode legale alte resurse informatice care sunt
necesare utilizarii produsului, conform specificatiilor
distribuitorului;
6. gestioneaza în limitele prevazute de lege numarul de còpii pe
care le fac pentru arhivare si reîncarcare în cazul distrugerii
variantei initiale;
7. nu ies în afara limitelor permise de lege prin vânzarea,
închirierea sau împrumutul produselor software contractate;
8. nu desfasoara activitati menite spargerii codului sau evitarii
masurilor de securitate ale produselor informatice;
9. precizeaza de fiecare data produsul informatic cu ajutorul caruia
au obtinut rezultatele finale pe care le prezinta în carti,
simpozioane, analize sau sinteze;
10. nu modifica în afara limitelor stabilite de comun acord cu cel
care îi ofera produsul respectiv, codul sursa al acestuia;

Conditiile legale trebuie respectate de toti utilizatorii de software,


indiferent daca ceea ce folosesc este soft ware de baza, software de aplicatii
sau este software destinat utilizarii pe un singur calculator sau este destinat
utilizarii în retele sau pe Internet.
În afara acestor reguli care trebuie respectate si care decurg din
legislatia aflata în vigoare, toti utilizatorii de software respecta si un set de
reguli etice în ceea ce priveste utilizarea software:
• folosirea produsului numai în scopurile pentru care acesta a fost
creat, prezentate în documentatia aferenta;
• raportarea distribuitorului sau elaboratorului produsului respectiv
neajunsurile produsului informatic;

Acestea reprezinta doar un set de reguli minimale care trebuie


respectate de toti utilizatorii de produse sau servicii informatice. Diferitelor
categorii de utilizatori li se mai adauga la acestea reguli specifice categoriei
în care se încadreaza.
Tehnologia care sta la baza Internetului a fost dezvoltata de catre
Departamentul de Aparare a Statelor Unite ale Americii pentru a facilita
comunicatiile între calculatoare si retelele de calculatoare din domeniul
militar si laboratoarele din cadrul universitatilor.

120
Exista o serie de aspecte cheie privind structura organizationala a
retelei Internet [WILL97]:
§ reteaua a fost proiectata pentru a fi descentralizata, capabila de a
transmite rapid informatii, fara implicarea si controlul direct a
factorului uman, având abilitatea automata de a redirija
informatia daca una sau mai multe legaturi devin indisponibile.
Acest sistem redundant de calculatoare interconectate a fost
proiectat pentru a permite continuarea comunicatiilor, chiar daca
parti ale retelei au fost afectate.
§ nici o entitate organizationala nu administreaza reteaua Internet.
Internetul exista si functioneaza ca urmare a faptului ca sute si
mii de operatori în informatica si retele de calculatoare
independente au decis sa utilizeze protocoale comune de transfer
a datelor pentru interschimbul de informatie cu alte calculatoare.
Nu exista un loc de stocare centralizat, punct de control sau canal
de comunicatii si nu este fezabil din punct de vedere tehnic
pentru ca o singura entitate sa controleze toate informatiile
transmise în Internet.

Asadar, Internetul este un nou mediu, unic, al comunicatiei umane


universale.
Desi cadrul legislativ national, precum si tratatele internationale
continua sa aiba un rol în activitatile desfasurate pe Internet, metodele
traditionale de guvernare nu vor avea un succes deplin. În cadrul
Internetului se creeaza o anarhie electronica. Exista doua definitii diferite
privind anarhia:
1. o societate utopica, guvernata de indivizi sau grupuri de indivizi;
2. dezordine politica si sociala, confuzie si haos.

Internetul este o noua frontiera care ofera un anumit gen de libertate


care nu este gasita în lumea reala. Este un mediu în care exista nu numai o
mai mare libertate, dar si unul în care legile, regulile si standardele sociale
nu sunt foarte clar delimitate sau atât de bine impuse.
Exista doua curente de opinii cu privire la modul de utilizare a
Internetului:
v mentinerea unei libertati totale si dreptul de utilizare a retelei asa
cum decide fiecare;
v identificarea metodelor, cailor de restrictionare a acestei libertati
pe care Internetul o ofera, prin elaborarea si aplicarea unor reguli
si legi.

121
Nici una din aceste abordari nu ofera atât de mult pe cât promit.
Succesul operatiunilor desfasurate pe Internet depinde de cei care au o
filosofie diferita, care consta în recunoasterea faptului ca libertatea
individuala trebuie sa fie însotita de responsabilitate individuala, respect
pentru altii si interes pentru binele comun.
Atunci când doua persoane comunica prin intermediul calculatorului
tot ceea ce ele vad sunt cuvintele tiparite pe ecran. Expresiile faciale,
gesturile, tonul vocii sunt elemente care nu sunt percepute într- un astfel tip
de comunicare. Regula de aur în mediul virtual este la fel de importanta ca
si în lumea reala: o persoana trebuie sa- i trateze pe ceilalti în acelasi mod în
care doreste sa fie tratata.
Persoanele care folosesc Internetul nu sunt judecate în functie de
înfatisarea fizica, rasa, culoarea parului sau vârsta, ci sunt reprezentate de
ceea ce scriu. Oamenii primesc oferte de joburi, oportunitati privind
efectuarea de diverse studii, contracte etc., în functie de imaginea lor pe
Internet.
Caracteristicile pe care trebuie sa le îndeplineasca un mesaj de e-
mail sau trimiterea unui mesaj la un grup de discutii [WILL97]:
Ø cunoasterea domeniului abordat si asigurarea corectitudinii
mesajului;
Ø asigurarea claritatii si logicii mesajului;
Ø prezentarea celor mai importante informatii în primele fraze;
Ø paragrafe scurte si la obiect;
Ø utilizarea de simboluri si culori pentru a sublinia un aspect
discutat sau de a transmite un sentiment;
Ø utilizarea unui limbaj direct si simplu;
Ø acordarea unei griji mai mari folosirii sarcasmului si a umorului,
deoarece nu are loc o comunicare directa a persoanelor si exista
riscul unei interpretari gresite;
Ø utilizarea unui stil si ton apropiat mediului;
Ø asigurarea politetii, neutilizându-se un limbaj agresiv si cu
conotatii sexuale;
Ø precizarea tuturor referintelor si surselor de informare utilizate;
Ø demonstrarea sensibilitatii culturale în mesaj;
Ø asigurarea corectitudinii gramaticale;
Ø precizarea permanenta a identitatii;
Ø asigurarea ca mesajul este trimis persoanei sau grupului de
persoane la care trebuie sa ajunga.

122
Unul din drepturile cele mai importante al oamenilor priveste
intimitatea acestora. Din pacate, usurinta cu care informatiile personale sunt
culese, stocate si facute public, folosind tehnologia, afecteaza dreptul la
intimitate. Sunt câteva metode de cultivare a aprecierii si respectului pentru
intimitate în activitatile pe Internet:
v nefurnizarea de informatii privind detaliile personale despre viata
si situatia altor persoane într- un mesaj public sau privat;
v tratarea cu respect a ceea ce spun diferite persoane în mesajele
lor private;
v sa nu se citeasca mesajele altor persoane sau sa se invadeze
spatiul de stocare personal a acestora;
v atentie deosebita acordata informatiilor private ale companiei,
numite si secrete comerciale.

O latura aparte în comunicarea pe Internet o constituie discutiile în


contradictoriu, în care apar puncte de vedere divergente privind o anumita
problema. Participarea la astfel de discutii trebuie sa aiba în vedere
urmatoarele aspecte:
Ø trimiterea mesajului provocator în locul în care trebuie;
Ø neangajarea în atacuri la persoana, care atrage pierderea
respectului prietenilor si a colegilor;
Ø neimplicare frecventa în astfel de discutii;
Ø mesajul incitator trebuie sa fie scurt si la obiect;
Ø raspunsul cu mânie la un atac la persoana este o mare pierdere de
timp; este mai potrivit un raspuns motivat, cu o anumita tenta de
umor.

Greselile sunt componente normale în procesul de învatare si este de


asteptat ca ele sa se produca. Câteva modalitati în care un începator este
ajutat atunci când face o greseala:
Ø trecerea cu vederea a greselii si adresarea într-o maniera
corespunzatoare catre începator;
Ø trimiterea unui mesaj politicos persoanei respective, punctând
asupra greselii si sugerând actiunea potrivita.

Declaratiile imorale au o mare tendinta sa gaseasca o cale catre locul


în care se doreste cel mai putin sa ajunga: cadre didactice, angajatori,
administratori de sistem, parinti etc.
Un mesaj în format electronic este cu usurinta dirijat catre alte
destinatii. Nu exista nici un control cu privire la locul în care un mesaj poate
ajunge. Redirectarea unui mesaj de catre o anumita persoana, fara acordul
123
emitentului, constituie o încalcare a dreptului la intimitate. Stergerea unui
mesaj din casuta postala nu are nici un efect daca el este prezent pe un
mediu de stocare sau în casuta postala a altei persoane.
Criptarea mesajului transmis previne citirea lui de catre persoane
neautorizate, dar siguranta absoluta cu privire la pastrarea confidentialitatii
apare doar daca emitentul cunoaste continutul mesajului si nu-l transmite
nimanui.
Fisierele cu date personale sunt accesibile oricarei persoane care are
privilegii de sistem sau sunt invadate de un hacker daca sistemul pe care
sunt stocate nu este unul sigur.
Concluzia este ca nu trebuie inclusa într-un e- mail informatia care nu
se doreste a fi facuta publica.
Regulile care guverneaza utilizarea unui cont Internet sunt denumite
în mod generic politici de utilizare. Furnizorii comerciali tind sa aiba cele
mai putine restrictii privind utilizarea sistemului lor. Politicile variaza de la
furnizor la altul. Furnizorii stabilesc orice politicile pe care le doresc si aleg
serviciile de care beneficiaza un posesor de cont Internet.
Crearea si utilizarea unui cont Internet într-un sistem educational
presupune politici mai restrictive. Institutia educationala limiteaza folosirea
unui cont la activitatile care au un scop educational.
Companiile, agentiile guvernamentale nu au nici o obligatie de a
folosi propriile resurse pentru a oferi un serviciu de acces public angajatilor
sai.
Cheia transmisiunii informatiilor pe Internet este de a mentine un
bun raport „semnal-zgomot”. „Semnalul” se refera la datele viabile care
sunt transmise, iar „zgomotul” este ceea ce opreste ca datele sa fie
transmise, denaturându- le.
Transmiterea unui mesaj electronic ia din timpul de emisie a altui
calculator. Emitentul are responsabilitatea ca ceea ce se transmite sa nu
ocupe inutil cuante de timp alocata. Internetul functioneaza pe baza unor
mesaje supraîncarcate, adica exista mai multe surse care doresc sa emita
date în acelasi timp.
Astfel, se impune luarea unor masuri care sa nu afecteze în mod
inutil transmisiunea datelor în retea [WILL97]:
• trimiterea de mesaje scurte si al obiect;
• raspunsul la un mesaj anterior trebuie sa contine suficient text din
primul mesaj pentru a sti cui i se raspunde;
• neincluderea în mesajul raspuns a întregului text original, iar
corpul mesajului sa fie nesemnificativ;

124
• adresarea unei întrebari catre un grup trebuie sa precizeze modul
în care se doreste ca raspunsul sa fie obtinut: personal sau în
cadrul grupului; dupa primirea raspunsului, se trimite un rezumat
la grupul de discutii;
• netrimiterea unor articole lungi la un grup;
• limitarea semnaturii la patru sau cinci linii, la sfârsitul mesajului;
• netrimiterea unor întrebari stupide si efectuarea de cercetari cu
privire la domeniul abordat, atunci când un expert este cel care
ofera raspunsurile.

Exista limite ale resurselor din reteaua Internet. Internetul este o


retea de retele care permit traficul de date de-a lungul lor. Un trafic mai
mare determina retele congestionate pâna când sistemul cade din punctul de
vedere al functionalitatii.
Un cont Internet are atât limite locale, cât si limite privind mediul de
transmisie.
Limitele locale au în vedere marimea traficului pe care furnizorul îl
manipuleaza, precum si spatiul de stocare a sistemului. Limitele retelei
vizeaza caracteristicile de trafic existente la nivelul întregului Internet.
Reguli ce decurg din caracterul limitat al resurselor:
Ø neîncarcarea retelei cu activitati nefolositoare;
Ø descarcarea de fisiere mari numai atunci când este absolut
necesar;
Ø alegerea unui moment de timp potrivit pentru descarcarea de
fisiere de mari dimensiuni, atunci când resursele sistemului si ale
retelei sunt mai putin solicitate;
Ø responsabilitate în folosirea e- mail- ului: verificare e- mail în mod
regulat, nedepasirea limitei maxime alocate pentru stocarea
mesajelor electronice, subscrierea la un numar rezonabil de liste
de e-mail, anularea subscrierii la liste de e- mail atunci când nu
este posibilia verificarea frecventa a cutiei postale;
Ø neocuparea liniei de dial-up atunci când nu este folosita si
punerea liniei la dispozitia altor persoane;
Ø netrimiterea repetata a unui mesaj în scopul supraîncarcarii
casutei postale.

125
Toti utilizatorii au responsabilitatea de a face tot ceea ce tin de ei
pentru asigurarea securitatii sistemului local si a retelei. Prima
responsabilitate este aceea de a asigura securitatea contului Internet. În acest
sens, trebuie luate toate masurile care sa previna accesarea neautorizata a
contului. Aceste masuri au în vedere:
• alegerea unei parole corespunzatoare, care sa includa atât litere
cât si cifre;
• nefurnizarea datelor privitoare la cont catre alte persoane;
• alegerea de parole diferite pentru site-urile care cer autentificare.

Conectarea unui calculator la o retea implica responsabilitati în plus


pentru a preveni introducerea un virus în retea. Aceasta se realizeaza prin:
§ neimportarea de programe din surse necunoscute sau
compromitatoare;
§ verificarea programelor descarcate cu ajutorul unui program
antivirus.

Este posibil ca utilizatorul loveasca de probleme de securitate.


Comportamentul acestuia trebuie sa aiba în vedere:
Ø notificarea administratorului de sistem atunci când apar suspiciuni
cu privire la o problema de securitate;
Ø problema de securitate este discutata numai cu administratorul de
sistem;
Ø nu trebuie sa se caute probleme de securitate prin încercari de a
sparge sistemul sau de atribuire de noi drepturi de acces.

Întotdeauna trebuie luate în considerare consecintele, pozitive sau


negative, a ceea ce fiecare contribuie la Internet. Exista mai multe elemente
care afecteaza imaginea Internetului:
Ø materiale care descriu abuzuri sexuale sau exploatarea sexuala a
copiilor;
Ø materiale care promoveaza ura fata de alte persoane datorita rasei,
religiei, originii, orientarii sexuale;
Ø limbaj agresiv, profan, nepoliticos, violent, dezagreabil;
Ø atacuri la persoana si provocarea de discutii aprinse pe un anumit
subiect;
Ø farse electronice, lansarea de zvonuri, informatii periculoase.

126
De asemenea, este importanta cunoasterea unui act ilegal în lumea
reala, acesta fiind ilegal si pe Internet.
Hartuirea este definita ca fiind un actiune permanenta desfasurata de
o persoana si derulata într-o maniera care deranjeaza sau supara o alta
persoana. Aspecte care vizeaza hartuirea pe Internet:
• daca o persoana considera un mesaj ofensator primit ca fiind
hartuire atunci acest mesaj este hartuire;
• trimiterea unui mesaj ofensator în mod repetat unei persoane,
atunci acesta se înscrie în categoria de atacuri la persoana.

Nimeni nu are dreptul de a spune orice doreste despre o alta


persoana. Cine face o declaratie publica falsa despre o persoana sau
companie, care aduce prejudicii acelei persoane sau companii, va avea de
suferit din cauza defaimarii propriei persoane.
Principii de baza ale defaimarii [WILL97]:
v declaratia trebuie sa fie falsa;
v declaratia trebuie sa fie una publica;
v declaratia facuta trebuie sa prejudicieze reputatia unei persoane
sau companii si sa cauzeze defaimare;
v declaratia cu privire la o persoana publica despre care se stie ca
este falsa va face raspunzator pe cel care o lanseaza.

Exista o serie de reguli foarte importante pentru asigurarea securitatii


personale:
v nefurnizarea pe Internet a informatiilor personale, cum sunt:
adresa, numarul de telefon, adresa de la locul de munca, precum
si datele persoanelor apropiate;
v o persoana minora nu trebuie sa se întâlneasca cu o alta persoana,
cunoscuta pe Internet, fara acordul parintilor; în cazul obtinerii
acordului parintilor, întâlnirea trebuie sa aiba loc într- un loc
public si cu participarea parintilor;
v relatarea catre o persoana apropiata sau de încredere despre
mesajele primite care au un caracter nepotrivit;
v furnizarea catre autoritati a informatiilor despre persoanele care
desfasoara activitati suspecte pe Internet.

Aparitia tranzactiilor electronice pe Internet a determinat si existenta


celor care doresc sa obtina bani de la potentialii clienti prin mijloace
frauduloase. Astfel de capcane sunt:
Ø solicitarea numarului cartilor de credit;

127
Ø comercializarea unor produse de lux la preturi foarte mici;
Ø jocurile de tip piramidal;
Ø participarea la activitati pentru care se garanteaza aprioric
multiplicarea sumei investite.

Plagiatul a fost întotdeauna considerat ca fiind inacceptabil.


Deoarece Internetul permite operatii de preluare de text din lucrarile altor
persoane, este foarte important de a distinge activitatea de cercetare de cea
privind plagiatul.
Exista o serie de probleme practice în evitarea plagiatului si
desfasurarea unei activitati de cercetare cu ajutorul Internetului. Astfel, în
navigarea pe Internet este foarte simplu de a gasi si concentra idei, concepte
si de a omite notarea, memorarea surselor acestor idei. Revenirea la aceste
surse identificate este o operatie foarte dificila. Este important sa se
anticipeze aceasta dificultate înaintea declansarii unui proiect si sa se
abordeze o maniera eficienta de retine sursele de informare.
În ceea ce priveste activitatea creatoare a oamenilor, acestia au
dreptul de cere si primi compensatii pentru activitatea desfasurata.
Compensarea oamenilor încurajeaza desfasurarea în continuare a acestei
activitati precum si evolutia societatii pe baza contributiei acestora.
Rezultatul unei munci creatoare este automat protejata prin
intermediul drepturilor de autor din momentul în care aceasta este creata.
Nici un preaviz privind drepturile de autor sau înregistrare a rezultatului
desfasurarii activitatii creatoare nu este ceruta.
Domeniul public este starea unei activitati care nu este protejata de
drepturile de autor, fie pentru ca autorul nu este specificat clar sau se
renunta la toate drepturile de autor, fie pentru ca drepturile de autor au
expirat.
Proprietarul unui drept de autor are drepturile exclusive de a copia,
modifica, distribui, afisa, transmite si executa rezultatul muncii sale.
În general, este rezonabila sa se utilizeze [WILL97]:
• copierea unui fragment foarte scurt dintr-o lucrare aflata sub
incidenta drepturilor de autor;
• pasajele în care sunt utilizate copii din alte lucrari trebuie sa fie
foarte scurte;
• utilizarea unei lucrari protejata de drepturi de autor pentru un
scop educational sau social;
• utilizarea unei lucrari protejate nu afecteaza venitul potential al
detinatorului drepturilor de autor.

128
De regula, este bine cererea permisiunii autorului înainte de a folosi
o lucrare.
Anumite persoane considera ca Internetul le ofera libertatea de a face
orice doresc, ignorând drepturile celorlalti. Oricine are dreptul de a folosi
Internetul fara a fi subiectul tratamentului oferit de astfel de persoane. În
Internet, fiecare persoana are dreptul:
§ de a nu primi mesaje e- mail ofensive si hartuitoare;
§ de pastrare a intimitatii;
§ de protejare a activitatii creatoare desfasurate;
§ de a nu avea lucruri neadevarate spuse pe Internet la adresa sa;
§ de a nu fi supus imaginilor cu caracter pornografic, în special
pentru membrii unor grupuri de lucru care activeaza în cadrul
educational;
§ de a nu primi lucruri nedorite prin e- mail si de a proteja copiii de
exploatarea comerciala.

În utilizarea mediului Internet este foarte important sa se stabileasca


anumite limite, care au în vedere urmatoarele aspecte:
• stabilirea unui scop pentru utilizarea retelei Internet;
• participarea la un numar relativ scazut de grupuri de discutii,
pentru a face fata volumului mare de informatii primite;
• stabilirea unui interval orar zilnic strict pentru navigarea pe
Internet;
• evitarea utilizarii Internetului pentru evadarea din problemele
lumii reale;
• neacordarea unei prioritati mai mari Internetului fata de familie,
activitatea educationala si munca de zi cu zi.

Internetul este asociat unui loc în care milioane de oameni îsi aduc
contributia si îsi împart propriile experiente. Aceasta tehnologie ofera
oamenilor oportunitatea de a da în aceeasi masura cu a primi ceva. Exista
mai multe modalitati în care se aduce contributia în Internet:
• raspunsuri si ajutor oferit persoanelor care pun întrebari;
• ajutor si îndrumari oferite începatorilor;
• redactare de rezumate a raspunsurilor date într-o anumita
problema si publicarea acestora în cadrul grupului de discutii;
• mediere în discutiile duse în contradictoriu, fiecare exprimându-
si un punct de vedere diferit de al celorlalti;
• împartire cunostinte dintr-un anumit domeniu cu alte persoane;
• realizare site- uri organizatii nonprofit;

129
• participare la diverse discutii fara ca vârsta sa fie un obstacol în
acest sens.

În prezent are loc o evolutie rapida catre o era în care granitele fizice
vor fi irelevante. O era în care nici o regula sau lege, autoritate sau bariere
de ordin tehnolo gic nu vor avea un succes deplin în controlarea
comportamentului.

130
8 MATRICI
ALE CLONARII

8.1 Conceptul de metrica utilizat în aplicatii informatice

Aprecierea sistemelor de programe este de ordin calitativ (bun,


satisfacator, foarte bun, nesatisfacator) si de ordin cantitativ, exprimat
numeric.
Problematica definirii unui sistem de masurare a calitatii genereaza
diferite abordari, pe text sursa si asupra comportamentului la utilizator al
programelor.
Metricile software înglobeaza modele, indicatori si proprietatile
acestora, precum si modalitati de evaluare si validare. Capitolul îsi propune
sa prezinte concepte de baza, modele si modalitati de utilizare a metricilor
software.
Conceptul de metrica nu este nou. Se considera o multime de puncte
Ma pe care se defineste o aplicatie:

d : Ma x Ma ∩ R (8.1)

131
astfel încât:
1. d ( x1 , y1 ) ≥ 0 si d ( x1 , y1 ) = 0, daca x1 = y1 ;
2. d ( x1 , y1 ) = d ( y1 , x1 ) (axioma simetriei);
3. d ( x1 , y1 ) ≤ d ( x1 , y1 ) + d ( y1 , z1 ) (inegalitatea triunghiului);
Exista conceptul de norma si se poate stabili o legatura între norma
si metrica astfel: norma distantei a doua elemente se defineste ca o functie
de forma:

d ( x 1 , y1 ) = || x 1 – y1 || (8.2)

Se poate spune cã si în domeniul ingineriei programarii utilizarea


conceptului de metrici este acceptabila.
Definirea de metrici software revine la a construi modele, indicatori
care pornesc de la marimi ce se masoara cu obiectivitate (numar linii sursã,
numar erori, numar variabile, numar instructiuni de Intrare/Iesire, numar
functii, numar parametrii transmisi, numar nivele ale arborelui asociat).
Practica arata ca exista o strânsa legatura între comportamentul
efectiv al unui program si structura lui exprimata prin marimi ce se
determina exact, obiectiv.
Indicatorii (metricile software) se construiesc în asa fel încât valorile
obtinute caracterizeaza produsul. Astfel, functia:

f(x) : R ∩ [0,1] (8.3)

este pusa în corespondenta cu aprecieri asupra comportamentului unui


program astfel:
v dacã f(x) = 0 se va spune ca programul este lipsit de calitate si
exista riscuri pentru utilizator în cazul folosirii;
v dacã f(x) = 1 se va spune ca programul are un nivel de calitate
deosebit, deci utilizatorul trebuie sa aiba încredere în rezultatele
obtinute la executia programului;
v dacã α ≤ f(x) < 1, unde α este o valoare numita prag de
acceptare, obtinuta experimental, programul poate fi utilizat,
riscurile de obtinere a rezultatelor eronate fiind minore;
v dacã 0 < f(x) < α, frecventa cu care se obtin rezultate incorecte
este atât de mare încât eforturile de a utiliza un astfel de program
se dovedesc ineficiente.

132
Se observa ca o metrica astfel conceputa are rolul de a pozitiona un
program într-una din doua categorii: program acceptabil a fi în uz curent si
program imposibil de utilizat.
Daca se considera multimea programelor P={P1 ,P2 ,...,P n } si se
construieste un indicator de performanta sau de caracterizare f(x) : P → N,
exista posibilitatea de a compara programele.
O astfel de functie este, de exemplu, lungimea fisierului executabil.
Comparatiile sunt directe.
Daca f(Pi) > f(Pj ) se va spune cã programul Pi este mai mare sau mai
lung sau ca ocupa spatiu de stocare (memorie externa) mai mare decât
programul Pj.
Sunt interesante si comparatiile directe de forma:

f: P x P ∩ N (8.4)

ca de exemplu:

f (P i, Pj) = ( Pi / Pj ) · 100 (8.5)

Daca f(Pi, Pj) > 100 rezulta ca programul Pi este mai lung decât
programul Pj.
Dacã f(Pi, Pj ) < 100 rezulta ca programul Pi este mai scurt decât
programul Pj.
Spre deosebire de multimea Ma definita la început, în care punctele
sunt omogene, este extrem de dificil de construit multimi omogene de
programe, conditie esentiala pentru realizarea de comparatii care sa aiba
sens.
De aceea, metricile software sunt concepute ca programul sã fie
raportat prin el însusi la modele ideale (f(x) = 1 sau f(x) = 0).
Rolul metricilor este de a reduce subiectivitatea aprecierii unui
program. Asemeni unitatilor de masura din sistemul metric international, cei
care îsi propun sã construiasca metrici software trebuie sa parcurga
urmatoarele etape:
Ø definirea marimilor obiective care pot fi masurate fie în textul
sursa al programului, fie pe durata utilizarii programului la
beneficiar;
Ø stabilirea metodologiei de înregistrare a marimilor obiective si de
constituire a bazei de date asociate programului;
Ø elaborarea modelului sau modelelor în care marimile obiective
stabilite figureaza ca variabile independente x1 , x2 , x3 , ....xn si în

133
care yr, variabila rezultativa, va releva comportamentul
programului sau calitatile acestuia;
Ø evaluarea unui nivel y0 pentru valori date x0 1 , x0 2 , .....x0 n din baza
de date a programului;
Ø încadrarea programului în una din cele doua clase (program bun,
acceptabil sau program neacceptabil);
Ø înregistrarea comportamentului în timp al programului si
compararea rezultatelor obtinute cu ceea ce a oferit (prezis)
metrica la momentul initial; în cazul în care se evidentiaza ca
metrica a prezis un comportament care este confirmat de realitate,
are loc validarea metricii.

Metricile software se definesc pentru caracteristici de calitate.


În timp, s-a acordat o atentie deosebita complexitatii software si
fiabilitatii software, modelele asociate acestora constituindu-se si în
veritabile metrici.
Desi initial un program este cotat bun sau nu, în realitate aprecierile
sunt mai nuantate.
Pentru o metrica software definita f : P ∩ [a,b], a, b∈R+ si a ≤ b, se
vor identifica mai multe valori critice (praguri) α 1 , α2 care permit aceasta
nuantare a delimitarii, cu a < α 1 < α2 < b.
Intervalul [a, α 1 ] corespunde zonei de respingere a programului,
dacã f (Pi) ∈ [a, α 1 ]. Intervalul (α 1 , α2 ] corespunde zonei de acceptare cu
rezerve a programului Pi, dacã f (Pi) ∈ (α 1 , α 2 ]. Intervalul (α 2 ,b] corespunde
zonei de acceptare cu încredere a programului Pi, dacã f (Pi) ∈(α 2 ,b].
Metodologiile de clasificare a sistemelor de programe stocate în
biblioteci publice de software atribuie apartenenta, respectiv la clasele de
programe Cf, Bf si Af dupa încadrarea în unul din cele trei subintervale.
Ceea ce este caracteristic unei metrici este generalitatea, adica posibilitatea
de a aplica formula (modelul) oricarui program în mod neambiguu. Adica
marimile obiective trebuie atât de riguros definite încât oricine are la
dispozitie un program Pi si metrica, sa obtina aceleasi rezultate.
De exemplu, daca se considera:
• n1 - numar de operanzi distinct;
• n2 - numar de operatori distinct;
• n3 - numar de definitii tipuri de date;

si o masura a complexitatii:

Ct = n1 log1 n1 + n2 log2 n2 + n3 log3 n3 (8.6)

134
si se precizeaza ca operanzii sunt:
Ø constante definite în program care participa în evaluari de
expresii;
Ø variabile elementare;
Ø variabile de tip derivat,
se obtine un grad de obiectivitate acceptabil.
Nu se includ definirile de tip derivat, ci numai variabilele care sunt
înzestrate cu proprietatile acestor tipuri.
Prin operator se va întelege:
• instructiunile if, for, switch, goto, while, do;
• expresii de atribuire;
• apeluri de functii;
• evaluari de expresii.

Pentru o definire neambigua se iau în considerare toate elementele


unui limbaj de programare si se stabilesc regulile de contorizare la n1 , la n2
sau la n3 a fiecarui element.
Aceasta înseamna ca o metrica este legata de un limbaj de
programare anumit. Este rezonabil ca definirile pentru diferite limbaje de
programare sa urmeze aceleasi reguli. În situatia în care, pentru rezolvarea
aceleiasi probleme, se scriu programe în limbaje diferite de catre
programatori cu acelasi nivel de performanta, trebuie ca diferentele obtinute
pentru aplicarea metricii sã fie nesemnificative. Daca ipotezele de construire
si utilizare a unei metrici sunt judicios concepute exista reale posibilitati de
a utiliza metrica si, mai ales, de a aprecia programele prin prisma nivelelor
date de calculul respectivei metrici. Este important ca marimile obiective
din care deriva metrica sa fie usor de obtinut. O metrica costisitor de evaluat
este abandonata usor.

8.2 Metrici ale ortogonalitatii fisierelor sursa C++

În continuare sunt prezentate mai multe metrici legate de un anumit


limbaj de programare, în particular C++, si care se adauga metricilor
definite în capitolul „Ortogonalitatea fisierelor”.
Frecvente de aparitie paragrafe consta în împartirea textelor sursa în
paragrafe si analiza comparata a acestora dupa criteriile:
• frecvente de aparitie a caracterelor în paragrafe;
• frecvente de aparitie a cuvintelor în paragrafe, prin realizarea
vocabularelor acestora.

135
Împartirea unui text în paragrafe se realizeaza cu ajutorul unui
separator de paragraf.
Indicatorii care reflecta asemanarea fisierelor prin împartirea acestora
în paragrafe sunt:
NTC

∑ ncap i
g1 = i=1
(8.7)
NTC
unde:
- g1 – gradul de asemanare a între doua paragrafe dupa frecventele
de aparitie a caracterelor alfabetice;
- NTC – numarul total de caractere alfabetice (mari si mici);
- ncapi – elementul i din vectorul de stocare a frecventelor de
aparitie a caracterelor si ia una din urmatoarele valori:
• 0, daca pentru caracterul i frecventele de aparitie în cele doua
paragrafe sunt diferite;
• 1, daca pentru caracterul i frecventele de aparitie în cele doua
paragrafe sunt identice.

NTCV

∑ ncvfp i
g2 = i =1
(8.8)
NTCV

unde:
- g2 – gradul de asemanare a paragrafelor dupa vocabularul
fiecaruia dintre acestea;
- NTCV – numarul total de cuvinte al celor doua paragrafe,
cuvinte care sunt distincte;
- ntcvp i – un element al vectorului în care sunt stocate valori
privind identitatea frecventelor de aparitie a diverselor cuvinte si
ia una din urmatoarele valori:
• 0, daca frecventele de aparitie pentru cuvântul i sunt diferite
sau cuvântul i nu se regaseste în celalalt text;
• 1, daca pentru cuvântul i frecventele de aparitie sunt identice.

Paragrafele identificate sunt supuse analizei cantitative doua câte


doua, urmând ca, în final, sa se calculeze un indicator care sa reflecte
asemanarea între doua texte prin împartirea acestora în paragrafe.

136
Gradul de asemanare a doua paragrafe se determina dupa expresia
urmatoare, care este media geometrica:

gi' = g1 ⋅ g 2 (8.9)

unde gi’ este gradul de asemanare între doua paragrafe conform celor doua
criterii definite, frecvente de aparitie a literelor în paragrafe si frecvente de
aparitie a cuvintelor în paragrafe.
Gradul de asemanare între texte, conform acestui criteriu, este:

mp

g =
, mp
∏g
i =1
'
i (8.10)

unde:
- g’ – gradul de asemanare între texte în urma împartirii în
paragrafe a acestora;
- gi’ – gradele de asemanare între paragrafe; sunt luate în
considerare cele doua criterii de analiza: frecvente de aparitie a
caracterelor alfabetice, frecvente de aparitie a cuvintelor din
paragrafe;
- mp – numarul de comparatii care sunt efectuate între paragrafe; m
se determina ca produs între numarul de paragrafe ale celor doua
texte.
Textele sursa contin caractere cu rol neutru în raport cu etapele
prelucrarilor. De aceea este necesara derularea unui proces de normalizare,
în care tot ce este nesemnificativ în raport cu obiectivul urmarit este
eliminat.
Dupa procesul de normalizare se obtin texte sursa apte pentru a fi
supuse unei analize comparate.
Lungimea Ls a fisierului sursa se exprima ca numar de baiti.
Fisierul sursa Fp1 :
int a;
int b;
int c;
a = 1;
b = 2;
c = a + b;
are lungimea Ls = 52 baiti.

137
Fisierul sursa Fp2 :

int a; a = 1;
int b; b = 2;
int c; c = a + b;

are lungimea Ls = 49 baiti.


Dupa normalizare, prin eliminarea unor spatii si a unor caractere de
control, fisierul Fp1 devine:

int a; int b; int c; a=1; b=2; c=a+b;

iar lungimea sa este Ls = 37 baiti.


Aplicând acelasi procedeu fisierului Fp2 , se obtine continutul
normalizat:

int a; int b; int c; a=1; b=2; c=a+b;

iar lungimea noului fisier este Ls = 37 baiti.


Doua fisiere Fp1 si Fp2 cu lungimi diferite, dupa procesul de
normalizare devin fisiere cu aceeasi lungime.
Daca fisierul normalizat Fpi are o lungime Li baiti, iar fisierul
normalizat Fpj are lungimea Lj baiti, indicatorul:

min{Li , L j }
IL = (8.11)
max {Li , L j }

evidentiaza gradul de asemanare a lungimilor a doua fisiere normalizate.


Daca IL = 1 înseamna ca cele doua fisiere au lungimi identice. Cu cât
indicatorul IL este mai apropiat de zero, cu atât gradul de asemanare a
lungimilor celor doua fisiere este mai redus.
Lungimea vocabularului, LV, este data de numarul de cuvinte
distincte identificate într- un text sursa.

138
Secventa de program SP1 :

int a;
int b;
int c;
a=17;
b=17;
c=a+17*b;
C=c+a+111;

are un vocabular format din cuvintele:

int, a, b, c, 17, 111, =, +, *, ;

adica LV=10 cuvinte.


Secventa SP2 :

int a;
float b;
double c;
for(a=0;a<100;a++)
c=c+a;
b=c-1;

are un vocabular format din cuvintele:

int, float, double, a, b, c, for, ( , = , ; , < , 100, +, ++, - , )

iar LV = 16 cuvinte.
Indicatorul:

min{ LVi , LV j }
IV = (8.12)
max{ LVi , LV j }

vizeaza masura în care lungimile vocabularelor celor doua secve nte sunt
diferite.
Daca IV = 1 înseamna ca vocabularele celor doua texte are acelasi
numar de cuvinte, fara sa se specifice daca aceste cuvinte sunt sau nu
identice.

139
Diversitatea vocabularului unui program este data de relatia:

∑f i
⋅ log 2 f i
D v = 1− m
i =1
m
(8.13)
( ∑ fi ) ⋅ log2 (∑ f i )
i =1 i =1

unde fi reprezinta frecventa cu care este utilizat un cuvânt al unui vocabular


în program.
Secventa de program SP3 :

int a=1;
int b=1;
int c=0;
int d=0;

contine vocabularul cu frecventele de utilizare a cuvintelor din tabelul nr. 1.

Frecvente utilizare vocabular


Tabelul 8.1
Cuvânt Frecventa
int 4
= 4
; 4
1 2
0 2
a 1
b 1
c 1
d 1

Diversitatea este:

4log 2 4 + 4log2 4 + 4log2 4+ 2log2 2 + 2log2 2 + 1log2 1+ 1log2 1+ 1log2 1+ 1log2 1


Dv = 1−
20log2 20

4 ⋅ 2 + 4⋅ 2+ 4⋅ 2+ 2⋅ 1+ 2⋅ 1+ 1⋅ 0+ 1⋅ 0+ 1⋅ 0+ 1⋅ 0
Dv =1 − = 0,32
20 ⋅ 4,34

140
În cazul în care toate cuvintele au în text câte o singura utilizare,
diversitatea este maxima, egala cu 1.
Lungimea vocabularului comun, LVco, pentru programele Pi, Pj este
data de numarul de cuvinte comune utilizate în ele.
Fie secventa SP4 :

int a;
int b;
int c;
a=7;
b=a+2;
c=a+b;

si secventa SP5 :

int a;
int b;
int y;
a=7;
b=a-2;
y=a-b;

Cele doua secvente au comune cuvintele:

int, a, b, = , 7, 2

Lungimea vocabularului comun LVco = 6 cuvinte, pentru secventele


SP4 si SP5 .
Lungimea vocabularului reuniune, LVre, este data de numarul de
cuvinte distincte utilizate de programe.
În secventa SP6 :

int a;
char x;
a=2;
x=’1’;

141
si secventa SP7 :

float y;
double z;
y=4.;
z=y++;

reuniunea vocabularelor este:

int, char, a, x, = , , , 1, float, double, y, z, 4, ++

Vocabularul reuniune are lungimea LVre = 13 cuvinte.


Indicatorul:

min { LVco , LVre }


I cr = (8.14)
max {LVco , LVre }

evidentiaza masura în care doua programe utilizeaza acelasi fond de cuvinte


al unui vocabular.
Secventele SP8 :

int a;
float b;
a=b=0;
si SP9 :
int x;
float y;
x=0;
y=0;

au vocabular comun format din cuvintele:

int, float, = , 0

are lungimea LVco = 4 cuvinte, si un vocabular reuniune:

a, b, = , 0, x, y
cu LVre = 8 cuvinte, iar Icr = 0,5.

142
Ponderea elementelor identice în doua programe este data de
raportul:

Kr e
If = (8.15)
LVre

unde Kre este numarul cuvintelor din vocabularul reuniune care au aceeasi
frecventa.
Un program Pi are vocabularul:

Vocabular program Pi
Tabelul 8.2
Simbol Frecventa
int 7
float 7
a 15
++ 8
b 5

iar programul Pj are vocabularul urmator:

Vocabular program Pj
Tabelul 8.3
Simbol Frecventa
int 7
float 8
a 15
++ 8
b 5

Se calculeaza If :

4
I f = = 0,8 (8.16)
5

Daca If = 1 rezulta ca programul Pi este clona a programului Pj. Daca


If = 0 rezulta ca programele Pi si Pj nu au frecvente identice de utilizare a
acelorasi cuvinte.

143
Lungimea alfabetului, LA, utilizat este data de numarul caracterelor
diferite utilizate.
În programul:

int a;
int b;
a=0;
b=1;

alfabetul folosit este:

Frecvente de aparitie simboluri


Tabelul 8.4
Simbol Frecventa
i 2
n 2
t 2
a 2
b 2
= 2
0 1
1 1

deci, LA = 8 caractere.

Si în cazul alfabetului, pentru programele Pi si Pj se definesc:


§ lungimea alfabetului comun;
§ lungimea alfabetului reuniune;
§ frecventele de utilizare a simbolurilor alfabetului în program.

Se defineste IA, indicatorul caracterelor cu frecvente identice, dat de


relatia:
Gc
IA = (8.17)
LAre

unde:
- Gc – numarul de caractere comune programelor Pi si Pj, cu
frecvente identice;
- LAre – lungimea alfabetului reuniune.

144
Programul Pi :
int a=1;
int b=1;
int c=1;
int d=1, z=4;
a++;
b++;
c++;
d++;
d=d+a+b+c;
are urmatorul alfabet:

Frecvente de aparitie simboluri în programul Pi


Tabelul 8.5
Simbol Frecventa
i 4
n 4
t 4
a 3
b 3
c 3
d 4
++ 4
+ 3
= 6
1 4
z 1
4 1

Programul Pj :

int a=1;
int b=1;
int c=1;
int d=1, x=2;
a++;
b++;
c++;
d++;
x--;
d=d+a+b+c+x;

145
are urmatorul alfabet:
Frecvente de aparitie simboluri în programul Pi
Tabelul 8.6
Simbol Frecventa
i 4
n 4
t 4
a 3
b 3
c 3
d 4
++ 4
+ 4
= 6
1 4
x 3
-- 1
2 1
Se construieste tabelul:
Frecvente de aparitie simboluri în programele Pi si Pj
Tabelul 8.7
Frecvente
Simboluri
Simbol Frecventa simboluri Simbol Frecventa
comune
comune
i 4
n 4
t 4
a 3
b 3
c 3
d 4
++ 4
= 6
1 4
x 2
-- 1
2 1
z 1
4 1

146
Pentru exemplul considerat, Gc = 10 simboluri, iar LAre = 15
simboluri.
10
IA = = 0, 66
15

39
IA f = = 0,86
45

Fie programul P format din instructiunile I1 , I2 , …, INi. Instructiunea


Ij are un numar de fj caractere. Perechile (Ij, fj), j = 1, 2, …, n se sorteaza
descrescator, obtinându-se programul P’. Se obtine sirul de instructiuni I a1 ,
I a2 , …, I an astfel încât instructiunea Ij cu pozitia j în programul P are
pozitia aj în programul P’.
Se calculeaza indicatorul:

∑| a
j =1
j − j|
kc = (8.18)
n ⋅ max{| ai − j |,1}

În continuare se da o secventa de program împreuna cu lungimile


instructiunilor utilizate, în numar de caractere utilizate:

Lungimea instructiunilor exprimata în numar de caractere


Tabelul 8.8
Pozitie Instructiune Lungime
instructiune
(j)
1 s2=0.; 6
2 s=0; 4
3 P=1.; 5
4 for(i=0;i<n;i++) 16
5 { 1
6 s=s+x[i]; 9
7 P*=x[i]; 8
8 s2+=x[i]*x[i]; 14
9 } 1
10 if(s2>s) a=1; 13
11 else 4
12 a=2; 4

147
Dupa operatia de sortare se obtine secventa S’, care are urmatorul
continut:

Sortare instructiuni în functie de lungime


Tabelul 8.9
Pozitie Pozitie Instructiune Lungime
instructiune instructiune
secventa SP secventa S’
(j) (aj)
4 1 for(i=0;i<n;i++) 16
8 2 s2+=x[i]*x[i]; 14
10 3 if(s2>s) a=1; 13
6 4 s=s+x[i]; 9
7 5 P*=x[i]; 8
1 6 s2=0.; 6
3 7 P=1.; 5
2 8 s=0; 4
11 9 else 4
12 10 a=2; 4
5 11 { 1
9 12 } 1

Când programele au numar mare de instructiuni se procedeaza la


stabilirea frecventelor:
§ se alege frecventa minima fminim = 1 caractere;
§ se alege frecventa maxima fmaxim = 16 caractere;
§ se calculeaza def = fmaxim – fminim = 15 caractere;
def
§ se calculeaza lungimea intervalului: r3 = = 5 caractere.
3
Se construieste tabelul:

Gruparea instructiunilor pe intervale de lungime


Tabelul 8.10
Interval Numar de instructiuni
[1; 6) 6
[6; 11) 3
[11; 16] 3
Total 12

148
| 4 − 1| +|8 − 2 | + |10 − 3 | + | 6 − 4 | + |7 − 5 | + |1 −6 | +| 3 − 7 | + | 2 − 8 | +
kc =
12 ⋅ max{| ai , j |,1}

+ |11 − 9 | + |12 − 10 | + | 5 − 11 | + | 9 − 12 |
=
12 ⋅ max{| ai , j |,1}

3 + 5 + 7 + 2 + 2 + 5 + 4 + 6 + 2 + 2 + 6 + 3 47
= = = 0,55
12 ⋅ 7 84

Pentru datele prezentate în tabelul anterior se calculeaza media si


dispersia acestor valori. Astfel:

∑x i
6 + 3+3
x3 = i =1
= =4
3 3

∑ (x − x ) i
2

4 +1+ 1
σ 32 = i =1
= =2
3 3

Pornind de la valorile indicatorilor de medie si dispersie se


determina coeficientul de variatie:

x3 4
CV3 = = = 2 ,83
σ 3 1,41

Daca se calculeaza r4 = 15 = 3,75 , atunci obtinem valorile sintetizate


4
în urmatorul tabel:

Grupare instructiuni pe intervale de lungime


Tabelul 8.11
Interval Numar de instructiuni
[1; 4,75) 4
[4,75; 8,50) 3
[8,50; 12,25) 3
[12,25; 16] 2
Total 12

149
Pentru calcularea coeficientului de variatie este necesar sa se
determine valorile mediei si a dispersiei:

∑x i
4+ 3+ 3+ 2
x4 = i =1
= =3
4 4

∑( x − x ) i
2

1 +1
σ 42 = i =1
= = 0,66
3 3

Valoarea coeficientului de variatie CV4 este:

x4 4
CV4 = = = 4 ,93
σ 4 0,81

Indicatorul agregat privind variatia este:

CV = CV3 ⋅ CV4 = 2,83⋅ 4,93 = 3, 73

Doua programe cu aceeasi valoare a indicatorului CV sunt identice.


Daca programul RR este:

Pozitii noi ale instructiunilor în ierarhia dupa lungime


Tabelul 8.12
Instructiune Lungime Pozitie Pozitie
veche noua
alfa=200; 9 1 1
beta=20; 8 2 2
gama=2; 7 3 3
eta=1; 6 4 4

150
Fie programul PP:

Pozitia instructiunilor în functie de lungime


Tabelul 8.13
Instructiune Lungime Pozitie
i=0; 4 1
lm=1; 5 2
lmp=2; 6 3
lmr=20; 7 4
lmt=200; 8 5

Dupa sortarea descrescatoare a instructiunilor dupa lungime,


programul PP devine PP’:

Abaterea pozitiilor instructiunilor ierarhizate dupa lungimea lor


Tabelul 8.14
Instructiune Pozitie Pozitie | pozitie veche –
veche noua pozitie noua |
lmt=200; 1 5 4
lmr=20; 2 4 2
lmp=2; 3 3 0
lm=1; 4 2 2
i=0; 5 1 4

În cazul programului RR diferentele calculate dintre pozitiile vechi


si cele noi sunt nule. Ca urmare, valoarea indicatorului kc este nula.
Un program are indicatorul kc nul daca lungimile liniilor sursa sunt
deja descrescatoare.
În cazul programului PP, valoarea indicatorului kc se calculeaza
conform relatiei:

4 + 2 + 0 + 2+ 4
kc = = 0,25
12 ⋅ 4

Fie programul P cu instructiunile I1 , I2 , …, INi, acestea având


pozitiile 1, 2, …, Ni. Se calculeaza L1 , L2 , …, LNi lungimile instructiunilor
ca frecvente de caractere f1 , f2 , …, fNi.

151
Este parcursa urmatoarea succesiune de pasi:
1. se scrie programul:

Instructiunilor unui program si lungimile acestora


Tabelul 8.15
Instructiune Pozitie veche Frecventa
I1 1 f1
I2 2 f2
… … …
In N fn

2. se sorteaza instructiunile descrescator, dupa lungimile fi, i = 1, 2,


…, Ni.

Ierarhia instructiunilor dupa sortarea descrescatoare a lungimilor


Tabelul 8.16
Instructiune Pozitie Pozitie Frecventa
veche noua
I a1 a1 1 g1
Ia a2 2 g2
2

… … … …
I an an n gn

Se calculeaza indicatorul kc, conform relatiei:

∑| a
j =1
j − j|
kc = (8.19)
n ⋅ max{| ai − j |,1}

3. se sorteaza instructiunile crescator, dupa lungimile fi, i = 1, 2, …,


Ni.

152
Ierarhia instructiunilor dupa sortarea crescatoare a lungimilor
Tabelul 8.17
Instructiune Pozitie Pozitie Frecventa
veche noua
Ib b1 1 h1
1

I b2 b2 2 h2
… … … …
I bn bn n hn

Se calculeaza indicatorul La, pe baza relatiei analitice a indicatorului


kc, astfel:
n

∑|b
j =1
j − j|
La = (8.20)
n ⋅ max{bi − j , 1}

Pe baza indicatorilor kc si La se determina indicatorul T, conform


relatiei urmatoare:

min{k , L}
T= (8.21)
max {k , L}

Exemplu: fie programul ST, având codul sursa:

a=1;
c=b++;
if(a>b) c+=x[i];
t=s=0;
for(i=0;i<n;i++)
{
s+=y[i];
t+=y[i]+x[i];
}
a+=s/t;

153
Pentru programul ST se determina frecventele caracterelor ce
alcatuiesc instructiunile:

Frecventele de aparitie ale caracterelor instructiunilor


Tabelul 8.18
Instructiune Frecventa
(fi )
a=1; 4
c=b++; 6
if(a>b) c+=x[i]; 15
t=s=0; 6
for(i=0;i<n;i++) 16
{ 1
s+=y[i]; 8
t+=y[i]+x[i]; 13
} 1
a+=s/t; 7

Dupa identificarea frecventelor caracterelor din instructiuni se


procedeaza la sortarea descrescatoare a acestora.

Abaterile pozitiilor instructiunilor dupa ierarhizare


Tabelul 8.19
Instructiune Frecventa Pozitie Pozitie | pozitie veche
(fi ) veche noua – pozitie noua
|
for(i=0;i<n;i++) 16 5 1 4
if(a>b) c+=x[i]; 15 3 2 1
t+=y[i]+x[i]; 13 8 3 5
s+=y[i]; 8 7 4 3
a+=s/t; 7 10 5 5
c=b++; 6 2 6 4
t=s=0; 6 4 7 3
a=1; 4 1 8 7
{ 1 6 9 3
} 1 9 10 1

154
Valoarea indicatorului kc este:

36 36
kc = = = 0,51
10 ⋅ max{7,1} 70

Valoarea indicatorului La se calculeaza dupa ordonarea crescatoare a


instructiunilor programului în functie de frecventele de aparitie a
caracterelor:

Abaterile pozitiilor instructiunilor în functie de frecventele


de aparitie ale caracterelor
Tabelul 8.20
Instructiune Frecventa Pozitie Pozitie | pozitie veche
(fi ) veche noua – pozitie noua
|
{ 1 6 1 5
} 1 9 2 7
a=1; 4 1 3 2
t=s=0; 6 2 4 2
c=b++; 6 4 5 1
a+=s/t; 7 10 6 4
s+=y[i]; 8 7 7 0
t+=y[i]+x[i]; 13 8 8 0
if(a>b) c+=x[i]; 15 3 9 6
for(i=0;i<n;i++) 16 5 10 5

Valoarea indicatorului La este:

32 32
La = = = 0,45
10 ⋅ max{7,1} 70

Având valorile indicatorilor kc si La, se calculeaza valoarea


indicatorului T:

min {0,51; 0 ,45} 0,45


T= = = 0,88
max {0,51; 0,45} 0 ,51

155
Programele au:
§ secvente de definire operanzi;
§ instructiuni if;
§ instructiuni for;
§ apeluri de functii;
§ evaluari expresii;
§ frecvente de utilizare operanzi;
§ frecvente de utilizare operatori.

Asemenea ADN-ului, programele se individualizeaza prin:


• numar de proceduri;
• numar niveluri;
• complexitate;
• frecvente comune vocabular;
• numar de structuri alternative;
• numar de structuri repetitive;
• numar de niveluri;
• numar de functii cu lista de parametri comuna;
• numar expresii de evaluare;
• numar functii de biblioteca referite.

Selectia vizeaza ce caracteristici de baza sunt analizate, luându-se


combinatii de acestea.
Selectia de proceduri. Se iau k proceduri la întâmplare din produsul
Pi si k proceduri din P care au lungimi similare si se cauta sa se vada care
sunt identice.
Se iau x secvente aleatoare din Pi si se cauta sa se gaseasca în Pj.
Daca sunt gasite aceste secvente identice atunci înseamna ca a avut loc un
proces de clonare.

156
Se considera doua programe PA si PB :

Caracteristici structurale ale programelor PA si PB


Tabelul 8.21
PA PB Comune
Numar module 25 30 20
C1
Numar 300 450 300
instructiuni for
C2
Numar 250 300 240
instructiuni if
C3
Apeluri functii 170 210 165
C4
Evaluari expresii 500 880 490
C5
Numar 200 260 200
instructiuni while
C6
Operatii de I/E 160 150 150
C7

Gkc
Ik = (8.21)
min {GkA , GkB }

unde:
- kp – pozitia caracteristicii BPC;
- Gk c – nivelul caracteristicii k pentru elementele identice în cele
doua programe;
- Gk A – nivelul caracteristicii k în programul PA;
- Gk B – nivelul caracteristicii k în programul PB.

20 20
I1 = = = 0,8
min {25, 30} 25

300 300
I2 = = =1
min {300, 450} 300

157
240 240
I3 = = = 0,96
min {250, 300} 250

165 165
I4 = = = 0,97
min {170, 210} 170

490 490
I5 = = = 0,98
min {500, 880} 500

200 200
I6 = = =1
min {200, 260} 200

150 150
I7 = = =1
min {160,150} 150

BPC = 7 0,8 ⋅1 ⋅ 0,96 ⋅ 0,97 ⋅ 0,98 ⋅1⋅ 1 = 0,95

Rezultatul compararii caracteristicilor de baza BPC = 0,95, ceea ce


arata ca între programele PA si PB este dezvoltat un proces de clonare.
În cazul în care se înregistreaza la una din cele 7 caracteristici un
indicator Ik = 0, atunci:

7
BPC = 7 ∏
k =1, I k ≠ 0
Ik (8.22)

unde k este numarul de indicatori Ik nenuli, indicându-se numarul


caracteristicilor pentru care Ik este diferit de zero.
Daca se ia indicatorul:

7
BPC = 7 ∏ e I k (8.22)
k =1

BPC ∈ [1, e], unde valoarea 1 indica originalitatea, deci programele nu au


nimic în comun si e daca programele sunt identice.
Agregarea indicatorilor. Pentru programele Pi si Pj se face o analiza a
clonarii. Se considera o serie de indicatori I1 , I2 , ..., Im astfel încât Ik ∈ [0, 1],

158
k = 1, 2, ..., m, cu semnificatia Ik = 1 înseamna ca în raport cu o
caracteristica Ck cele doua programe Pi si Pj sunt clone.
Se calculeaza un indicator agregat:

k
Ia = k ∏I
r =1
r (8.23)

al clonarii.
1. daca Ia = 1, programele sunt clone perfecte;
2. daca Ia = 0 programele nu sunt clone;
3. daca Ia ∈ [0,92; 1] programele sunt clone certe;
4. daca Ia ∈ [0,78; 0,92] programele contin elemente de clonare.

8.3 Amprenta programului

Amprenta programului este data de o succesiune de caracteristici


obiectiv masurabile care îl individualizeaza si care determina ca în cazul în
care nivelurile sunt diferite toate pentru programe diferite sau sunt identice
pentru programe identice.
Fie programul care calculeaza norma unei matrice, folosind diferite
forme analitice.
Codul sursa al programului este publicat la adresa www.clonare-
informatica.ase.ro, denumirea fisierului fiind norma.cpp.
În vederea stabilirii amprentei acestui program, se calculeaza
indicatorii:
- lungimea tuturor instructiunilor, exprimata în numar de
caractere;
- lungimile fisierelor sursa, obiect si executabil;
- complexitatea programului, care se calculeaza conform relatiei
Halstead:

Ccp = n1 ⋅ log 2 n1 + n2 ⋅ log 2 n2 (8.24)


unde:
• n1 – numarul de operanzi;
• n2 – numarul de operatori.
- lungimea vocabularului programului, diferentiat pe cuvinte cheie
si cuvinte utilizator;
- lungimea alfabetului, diferentiat pe litere si caractere speciale;
- frecventele de aparitie a instructiunilor;
- frecventele de aparitie a literelor si simbolurilor speciale.

159
Din acestea se retine un numar de indicatori care formeaza amprenta.
Oricine aplica o regula obtine aceleasi valori.
Pentru toate se poate scrie software si se pot obtine valorile
corespunzatoare. Ca urmare, amprenta programului se stabileste conform
succesiunii:

Program Evaluare Amprenta

Figura 8.1 Etapele stabilirii amprentei unui program

Orice program are o astfel de amprenta, indiferent de limbaj.


În vederea stabilirii amprentei unui program se elaboreaza un produs
software prin intermediul caruia sunt implementati indicatorii prezentati în
paragraful anterior.
Aceasta presupune derularea unui proces de normalizare, în care tot
ce este nesemnificativ în raport cu obiectivul urmarit este eliminat.
Un program este format din instructiuni dispuse într-o succesiune Js1 ,
Js2 , Js3 , ..., Jsn . Fiecare limbaj de programare contine:
• instructiuni alternative;
• instructiuni repetitive ;
• expresii de atribuire;
• apeluri de functii;
• operatii de I/E;
• instructiuni de revenire;
• evaluari expresii.

Clasificarea instructiunilor are niveluri diferite de detaliere. Este


important ca o data definite tipurile de instructiuni sa se elaboreze software
care genereaza automat programe sursa normalizate.
Normalizarea programelor se realizeaza prin efectuarea urmatoarelor
operatii:
• eliminarea spatiilor si a altor caractere de control ale editoarelor
de text;
• generarea de nume pentru variabile si pentru constante;
• reordonarea alfabetica dupa nume sau dupa lungimea instructiunii
ca numar de caractere si, în caz de egalitate, se procedeaza la
ordonare alfabetica.

160
Produsul software determina nivelurile indicatorilor de stabilire a
amprentei unui program sursa.
De exemplu, pentru programul sursa care determina valorile
formelor analitice ale normei unei matrice, avem:
- lungimile fisierelor sursa, obiect si executabil:

Lungime fisiere în functie de tip


Tabel 8.22
Tip fisier Lungime fisier
(baiti)
Fisier sursa 1138
Fisier obiect 4063
Fisier executabil 167982

- complexitatea programului este Ccp = 1898,25;


- lungimea vocabularului programului:

Numarul de cuvinte în functie de tip


Tabel 8.23
Tip cuvinte Numar cuvinte
Cuvinte cheie 9
Cuvinte utilizator 9

- lungimea alfabetului:

Numar de caractere în functie de tip


Tabel 8.24
Tip caracter Numar caractere
Litere 17
Caractere speciale 24

- frecvente de aparitie a instructiunilor:

161
Frecvente de aparitie a instructiunilor
Tabel 8.25
Tip instructiune Frecventa de aparitie
Numar module 0
Numar instructiuni for 9
Numar instructiuni if 4
Apeluri functii 0
Evaluari expresii 56
Numar instructiuni while 0
Operatii de intrare 2
Operatii de iesire 3

- frecvente de aparitie litere si simboluri speciale:

Frecventele de aparitie a caracterelor utilizate în program


Tabel 8.26
Simbol Frecventa de aparitie
i 70
n 39
c 6
l 2
u 4
d 11
e 10
s 16
t 11
o 15
m 12
a 24
j 25
f 18
r 16
p 3
h 2
# 2
< 17
> 2
( 23

162
) 23
{ 6
} 6
[ 48
] 48
; 22
, 8
. 2
= 18
++ 10
„ 5
” 5
\ 3
: 1
% 6
& 2
+= 8
* 4
- 2
+ 3

Cu ajutorul indicatorilor prezentati anterior se definesc caracteristici


de baza ale programului cu care se construieste amprenta acestuia.
Indicatorii construiti definesc procesele de clonare pentru a fundamenta
certificarea originalitatii produselor software.
Fie indicatorii A1 , A2 , … Ak n . Acest numar kn trebuie ales astfel încât
oricare ar fi doua programe Pi, Pj diferite, sa existe cel putin un indicator Ar,
pentru ca Air ≠ A rj , astfel încât gradul de asemanare este:

α1
GAij = (8.25)
kn

unde a arata câti indicatori Ai =Aj.

163
Fie programele Pi :

int a=2;
int b=3;
int c=3;
c=a*b;
a++;
b--;
c+=a/(b*b);

si Pj :

int a,b,c;
a=2;
b=c=3;
c+=a*b;
c+=a--+b++;
if(c>1) c++;

Pentru aceste doua programe se calculeaza urmatorii indicatori:


1. lungimea programelor ca numar de caractere, dupa normalizare,
A1 ;

Lungimea programelor Pi si Pj
Tabelul 8.27
Pi Pj
Numar de caractere 49 50
(A1 )

2. lungimea vocabularului ca numar de cuvinte, A2 ;

164
Lungimea vocabularelor programelor Pi si Pj
Tabelul 8.28
Pi Pj
Numar de cuvinte 3 4
(A2 )

3. numarul mediu de caractere pe linie, A3 ;


Numarul de caractere pe fiecare linie este dar în tabelul urmator:

Numarul caracterelor pe fiecare linie în programele Pi si Pj


Tabelul 8.29
Numar linie Pi Pj
1 8 10
2 8 4
3 8 6
4 6 7
5 4 11
6 4 12
7 11 -
Total 49 50

Numarul mediu de caractere pe linie, pentru cele doua programe, Pi si


Pj este evidentiat în tabelul urmator:

Numarul mediu de caractere pe linie în programele Pi si Pj


Tabelul 8.30
Pi Pj
Numar mediu de 7 8,33
caractere pe linie
(A3 )

4. dispersia, A4 ;

∑ (x i
− x)2
A4 = i =1
(8.26)
n

165
Pentru cele doua programe, valoarea dispersei este în tabelul:

Dispersia pentru programele Pi si Pj


Tabelul 8.31
Pi Pj
Dispersia 5,42 8,21
(A4 )

5. complexitatea programelor în sens Halstead, A5 ;

A5 = n1 log1 n1 + n2 log2 n2 (8.27)

unde:
• n1 – numarul de operanzi;
• n2 – numarul de operatori.
Numarul operanzilor si operatorilor din cele doua programe este:

Numarul operanzilor si operatorilor în programele Pi si Pj


Tabelul 8.32
Pi Pj
n1 15 12
n2 18 20

Astfel, pentru programele Pi si Pj, avem valorile:

Complexitatea Halstead pentru programele Pi si Pj


Tabelul 8.32
Pi Pj
Complexitatea 133,89 129,68
Halstead
(A5 )

6. complexitatea McCabe a celor doua programe, A6 ;

A6 = m1 − m2 + 2 (8.27)

166
unde:
- m1 – numarul de arce din graful programului;
- m2 – numarul de noduri din graful programului.
Astfel, cele doua programe au complexitatea McCabe exprimata în
tabelul urmator:

Complexitatea McCabe pentru programele Pi si Pj


Tabelul 8.33
Pi Pj
Complexitatea 1 2
Halstead
(A6 )

7. calculul indicatorului A7 , identic cu indicatorul kc.

∑|a
j =1
j − j|
A7 = (8.28)
n ⋅ max {| ai − j |, 1}

Sortare instructiuni program Pi în functie de lungimea data în numar


de caractere:

Ierarhizarea instructiunilor în functie de numarul de caractere


pentru programul Pi
Tabelul 8.34
Instructiune Pozitie veche Pozitie noua Lungime
c+=a/(b*b); 7 1 11
int a=2; 1 2 8
int b=3; 2 3 8
int c=3; 3 4 8
c=a*b; 4 5 6
a++; 5 6 4
b--; 6 7 4

167
Sortare instructiuni program Pj în functie de lungimea data în numar
de caractere:

Ierarhizarea instructiunilor în functie de numarul de caractere


pentru programul Pi
Tabelul 8.35
Instructiune Pozitie veche Pozitie noua Lungime
if(c>1) c++; 6 1 12
c+=a--+b++; 5 2 11
int a,b,c; 1 3 10
c+=a*b; 4 4 7
b=c=3; 3 5 6
a=2; 2 6 4

Valorile indicatorului A7 pentru Pi si Pj sunt:

Valorile indicatorului A7 pentru programele Pi si Pj


Tabelul 8.36
Pi Pj
A7 0,28 0,53

Valorile acestor indicatori sunt prezentate în tabelul sintetizator


urmator:

Valorile indicatorilor pentru programele Pi si Pj


Tabelul 8.37
Indicator Pi Pj a
A1 49 50 0
A2 3 4 0
A3 7 8,33 0
A4 5,42 8,21 0
A5 133,89 129,68 0
A6 1 2 0
A7 0,28 0,53 0
Total 0

168
Pe baza datelor din tabelul de mai sus, se calculeaza indicatorul
sintetic:

α 0
Gij = = =0
k 7
Amprenta programului P este:
- un sir de valori;
- un indicator agregat.

8.4 Metrici ale ortogonalitatii masivelor bidimensionale

Se defineste un sistem de indicatori pentru evaluarea asemanarii


existente între masive bidimensionale.
Se considera un ansamblu format din mai multe masive
bidimensionale pentru care se cerceteaza masura în care sunt identice sau
asemanatoare. În acest sens se considera criterii precum:
• identitatea valorilor elementelor aflate pe aceeasi pozitie în cadrul
matricelor;
• identitatea ponderilor elementelor în cadrul matricelor; ponderile
se calculeaza atât în functie de totalul pe linii cât si în functie de
totalul pe coloane.

Compararea se efectueaza pentru perechi de matrice, în final gradele


de asemanare obtinute sunt agregate obtinându-se gradul de asemanare a
întregului lot de masive considerat.
Stabilirea asemanarii în functie de valorile elementelor aflate pe
aceeasi pozitie în cadrul masivelor bidimensionale presupune construirea
matricei care ia valorile:
• 0, daca pe aceeasi pozitie din cele doua matrice sunt valori
distincte;
• 1, daca pe o aceeasi pozitie din cele doua masive bidimensionale
se afla elemente cu valori identice.
Pentru a obtine gradul de asemanare a doua matrice în functie de
acest criteriu se însumeaza valorile elementelor matricei rezultate dupa
comparare, iar suma împarte la numarul total de elemente ale masivului.

169
Expresia analitica a acestui indicator, ?1 , are urmatoarea forma:

m +1 n c +1

∑∑
i =1 j =1
bij
γ1 = (8.29)
( m + 1) ⋅ ( nc + 1)

unde:
- b – matricea de stocare a valorilor privind identitatea elementelor
din cadrul matricelor;
- m+1 – numarul de linii al matricelor (inclusiv linia de total);
- nc+1 – numarul de coloane al matricelor (inclusiv coloana de
total).
Compararea matricelor în functie de ponderi presupune:
- calcularea de ponderi ;
- construirea a doua matrice care contin valorile rezultate dupa
comparare:
• 0, daca pe o aceeasi pozitie în cadrul celor doua masive
bidimensionale se afla ponderi cu valori diferite;
• 1, daca pe o aceeasi pozitie se afla ponderi cu aceeasi
valoare.

Indicatorii ?2 si ?3 au expresiile analitice:

m +1 nc

∑ ∑
i =1 j =1
c ij
γ = (8.30)
( m + 1) ⋅ n c
2

unde:
- c – matricea de stocare a elementelor privind identitatea valorilor
ponderilor (calculate în functie de totalul pe linii) aflate pe o
aceeasi pozitie în cadrul matricelor;
- m+1 – numarul de linii pentru care se calculeaza aceste ponderi;
- nc – numarul de coloane pentru care se calculeaza aceste ponderi.
când reperul considerat este totalul pe linii;

170
m nc +1

∑ ∑
i =1 j=1
d ij
γ = (8.31)
m ⋅ ( n c + 1)
3

unde:
- d – matricea de stocare a valorilor elementelor privind identitatea
ponderilor (calculate în functie de totalul pe coloane) aflate pe o
aceeasi pozitie în cadrul matricelor care sunt comparate;
- m – numarul de linii pentru care se calculeaza aceste ponderi;
- nc+1 – numarul de coloane pentru care se calculeaza aceste
ponderi.
când reperul considerat este totalul pe coloane.
Completarea celor doua matrice se efectueaza în functie de reperul
luat în considerare la calculul ponderilor, total pe linii, respectiv, total pe
coloane.
În final, pentru a sintetiza gradele de asemanare ce corespund celor
trei criterii se calculeaza un indicator, ?p , care reflecta gradul de asemanare
mediu al celor doua masive bidimensionale ca medie geometrica între
gradele de asemanare partiale. Acest indicator este utilizat ulterior pentru a
calcula gradul de asemanare a întregului lot de matrice considerat.

γ p = 3 γ1 ⋅ γ 2 ⋅ γ 3 (8.32)

Gradul de asemanare γf a lotului de devize reprezentat ca lot de


matrice se calculeaza ca medie geometrica între gradele de asemanare finale
obtinute în urma compararii masivelor bidimensionale doua câte doua.

C n2
γ f = Cn ∏γ
2

pi (8.33)
i =1
unde:
- C 2n - numarul de comparatii efectuate ;
- γpi - gradul de asemanare mediu al devizului i;

171
8.5 Matricea de precedente

Un program este format din instructiuni dispuse într-o succesiune Js1 ,


Js2 , Js3 , ..., Jsn . Fiecare limbaj de programare contine:
v instructiuni alternative;
v instructiuni repetitive;
v expresii de atribuire;
v apeluri de functii;
v operatii de I/E;
v instructiuni de revenire;
v evaluari expresii.

Clasificarea instructiunilor are niveluri diferite de detaliere. Este


important ca o data definite tipurile de instructiuni sa se elaboreze software
care genereaza automat matricele de precedente. În continuare se noteaza:
- a1 – instructiuni de salt conditionat;
- a2 – instructiuni repetitive;
- a3 – evaluari de expresii;
- a4 – apeluri de functii;
- a5 – operatii de I/E.

Matricea Aa contine elemente aij care indica frecventa instructiunilor


de tip ai care urmeaza instructiunilor de tip aj. Programului:

a=1;
b=7;
c=5;
for(...) c++;
for(...) a++;
for(...) b++;
c++;
if(...) printf(...);
if(...) printf(...);
max(...);

i se asociaza matricea de precedente:

172
Matricea de precedente a programului
Tabelul 8.38
a1 a2 a3 a4 a5
a1 1 1
a2 2 1
a3 1 2
a4 1
a5 1

Doua programe clone au matrice de precedente egale. Un program P


este format din instructiunile I1 , I2 , …, INi.
Metrica McCabe ia în considerare graful Gr(Vn , Aa), unde Vn este
multimea nodurilor si Aa este multimea arcelor. Se considera programul
urmator:

void main ()
{ I1
int a, b, c, d, e, x;
a= 3; I2
b = 5; I3
c =8; I4
b = 7; I5
scanf(“%d”, &x); I6
if (x>0) I7
e = a + b; I8
else
e = c + d; I9
printf(“%d”,e); I10
}
I11
Programului i se asociaza graful Gr din figura 8.2.

173
Start

a=3

b=5

c=8

d=7

scanf( )
if

e=c+d e=a+b

printf( )

Stop

Figura 8.2 Graful asociat programului.


Precedenta este rezultatul dispunerii instructiunilor în program în asa
fel încât acestea sa conduca la obtinerea de rezultate corecte. O problema se
obtine prin scrierea a N programe diferite, care însa implementeaza acelasi
algoritm. Diferentele care apar sunt determinate de: limbajul utilizat,
structurile de date definite si referite, structurile de control folosite, gradul
de generalitate, dimensiunea problemelor care se rezolva, precizia
rezultatelor, optiunile privind datele de intrare si structura rezultatelor
obtinute, nivelul de reutilizabilitate a procedurilor, a tipurilor de date, a
claselor.
Matricele de precedenta difera de la program la program, chiar daca
este vorba de rezolvarea aceleiasi probleme. Pentru ca instructiunile,
succesiunea lor determina grafuri diferite. În [IVAN99] este definita metrica
bazata pe matricea de precedenta, cu luarea în considerare a lungimilor
arcelor, determinate de diferenta în modul a pozitiei instructiunilor executate
consecutiv. Astfel metrica LIL1 se defineste prin:

LIL1 = ∑∑ i − j , i ≠ j si (i , j ) ∈ A (8.34)
ii j

174
iar metrica LIL2 se defineste prin:

LIL 2 = ∑ ∑ (i − j ) , i ≠ j si (i , j ) ∈ A
2
(8.35)
ii j

Experimentele evidentiaza diferentele care apar între programele în


care lungimea ar-celor este mare, ceea ce metrica McCabe nu reflecta.
Software elaborat pentru implementarea metricilor LIL1, LIL2
precum si a formelor normate: LIL1N = LIL1 / max (LIL1), LIL2N = LIL2 /
max (LIL2), conduce la evaluarea coeficientilor de corelatie ale caror
niveluri sunt cuprinse între 0.70 si 0.90, ceea ce exprima posibilitatea
utilizarii oricarei dintre metrici, rezultatele fiind asemanatoare.

8.6 Matricea dependentelor

Se considera programul P, format din instructiunile I1, I2, …, INi.


Instructiunea Ik depinde de instructiunile Ik -1, Ik-2, …., Ik-r daca variabilele
initializate sau modificate de acestea intervin activ în expresii sau determina
controlul executiei Ik .
Matricea B, având nm linii si nm coloane, a dependentelor are
elementele:

0, daca instr. i nu depinde de instr. j


bij =
1, daca instr. i depinde de instr. j

Se considera bii = 1, instructiunea depinzând de ea însasi.


Se considera programul P1 :

void main( )
{
int a, b, c, d;
a = 1; // I1
b = 2; // I2
c = 7; // I3
d = 114; // I4
}

175
Programului P1 i se asociaza matricea dependentelor:

I1 I2 I3 I4
I1 1 0 0 0
I2 0 1 0 0
I3 0 0 1 0
I4 0 0 0 1

Se observa ca instructiunile programului P1 sunt independente una


de celelalte si li se asociaza matricea unitate a dependentelor. Programului
P2 :

void main( )
{
int a, b, c, d;,e
a = 4; // I1
b = a+5; // I2
c = b+120; // I3
d = b+a+c; // I4
e = c+d; // I5
printf (“ \n %d %d %d %d %d”, a, b, c, d, e); // I6
}

i se asociaza matricea dependentelor:

I1 I2 I3 I4 I5 I6
I1 1 0 0 0 0 0
I2 1 1 0 0 0 0
I3 0 1 1 0 0 0
I4 1 1 1 1 0 0
I5 0 0 1 1 1 0
I6 1 1 1 1 1 1

Programului P3 :

void main ( )
{
int a,b,c,d,e,i;
scanf( “%d”,&a); // I1
if (a>5) { // I2

176
scanf(“%d”,&b); // I3
d = a+b; // I4
}
else {
scanf(“%d”,&c); // I5
d=a+c; // I6
}
e = d ++; // I7
for(i =0 ;i<7;i++) // I8
e += a; // I9
printf(“%d”,e); // I10
}

i se asociaza matricea dependentelor:

I1 I2 I3 I4 I5 I6 I7 I8 I9 I10
I1 1 0 0 0 0 0 0 0 0 0
I2 1 1 0 0 0 0 0 0 0 0
I3 0 1 1 0 0 0 0 0 0 0
I4 0 1 1 1 0 0 0 0 0 0
I5 0 1 0 0 1 0 0 0 0 0
I6 1 1 0 0 1 1 0 0 0 0
I7 0 0 0 1 0 1 1 0 0 0
I8 0 0 0 0 0 0 0 1 0 0
I9 1 0 0 0 0 0 1 1 1 0
I10 0 0 0 0 0 0 0 0 1 1

Indicatorul de dependente. Se considera matricea dependentelor B


având elementele bij ∈ {0,1}. Se calculeaza complexitatea:

nm nm nm
Cd = ∑ (( ∑ bij )log 2 (∑ bij )) (8.36)
i =1 j =1 j =1
n
bazata pe dependente. Cd apartine intervalului [0, θ ] unde θ = ∑ i log 2 i
i =1
pentru ca se lucreaza cu matricea inferior triunghiulara.

177
Normarea indicatorului bazat pe dependente se va realiza astfel:

nm nm nm

∑ (∑ b
i =1 j =1
ij log 2 ( ∑ bij ))
j =1
Cd = nm
(8.37)
∑ i log
i =1
2 i

Matricea dependentelor maxime pentru un program cu 5 instructiuni


este:

I1 I2 I3 I4 I5
I1 1 0 0 0 0
I2 1 1 0 0 0
I3 1 1 1 0 0
I4 1 1 1 1 0
I5 1 1 1 1 1

Daca programul are toate instructiunile de atribuire independente


între ele sau contin exclusiv afisarea unor texte, atunci matricea
dependentelor este o matrice unitate si Cd,Cd sunt 0.
Instructiunile se grupeaza în doua categorii în functie de dependenta:
instructiuni slab dependente si instructiuni puternic dependente.
nm
Se noteaza bi = ∑ bij . Se alege elementul maxim din sirul b1 , b2, …,
j =1

bn :

bmax = max {bi } (8.38)


i =1, n

Se calculeaza valoarea ∆ = (bmax –1 )/2 .


Fie:

nm
Mp =
i =1
∑ bi
1≤bi ≤∆+1
nm
(8.38, 8.39)
N=
i =1
∑ bi
∆ +1<bi ≤bmax

178
Complexitatea gradata a programului este data de relatia :

Cg = M p log 2 M p + N log 2 N (8.40)

M p log2 M p + N log 2 N
Cg = (8.41)
( M p + N )log2 ( M p + N )

Se considera un program P4 având matricea dependentelor:

1
1 1
1 0 1
0 1 1 1
1 0 0 1 1
1 0 1 1 1 1
0 1 0 0 1 1 1

Sirul bi este format din elementele: {1, 2, 2, 3, 3, 5, 4}, bmax = 5, ∆ =


2, Mp =1+2+2+3+3 = 11, N = 5 + 4 = 9.

C g = 11log 2 11 + 9 log 2 9 = 66.58

11 log 2 11 + 9 log 2 9
Cg = = 0.77025
20 log 2 20

Complexitatea calitativa Ca opereaza cu numarul de componente


apartinând intervalelor [1, ∆+1] si (∆+1, bmax].
Fie M1 numarul de elemente din sirul b1 , b2 , ..., bn pentru care bi ∈
[1, ∆+1] si N1 numarul de elemente din sirul bi ∈ (∆+1, bmax].

Astfel:
Ca = M 1log 2 M 1 + N1log 2 N1 (8.42)

M 1 log 2 M 1 + N1 log 2 N1
Ca = (8.43)
n log 2 n

179
Pentru programul P4 , M1 = 5, numarul de elemente din sirul b1 , b2, …,
bn pentru care bi ∈ [1, ∆+1], iar N1 = 2, numarul de elemente din sirul
bi∈(∆+1, bmax].

Ca = 5 log 2 5 + 2 log 2 2 = 13,6

5 log 2 5 + 2 log 2 2
Ca = =0,69
7(lg 2 7 − 1)

În cazul în care sunt luati în considerare coeficienti de importanta si


sunt utilizate modele neliniare se dezvolta noi metrici ale clonarii software.
Este deosebit de important sa se ia în considerare ca orice model care se
construieste sa includa printre factorii de influenta carora le corespund
variabilele exogene elemente ce rezulta din masuratori pe texte sursa
efectuate automat. În cazul în care se construiesc metrici ce presupun alte
modalitati de colectare a datelor, apar dificultati de încarcare baze de date,
de validare a metricilor si de implementare în vederea folosirii curente.

180
ALTE ASPECTE

9 ALE CLONARII
INFORMATICE

9.1 Gestionarea clonelor informatice

Lansarea unui produs informatic pe piata este înregistrata într- un


Registru al produselor software. Problema care se pune este de stabili daca
noul produs este sau nu o clona a produselor înscrise deja în acest registru.
Este evident faptul ca indicatorul care reflecta gradul de asemanare între
aplicatiile informatice trebuie sa tinda spre 1 pentru a concluziona ca este o
clona a unui produs program deja existent. Produsele software care se
adreseaza aceluiasi segment de piata au caracteristici si functionalitati
apropiate, dar nu sunt absolut identice.
Gestionarea clonelor informatice consta, în principal, în stabilirea
caracterului original al unui software si actiunile care se impun a fi luate în
cazul identificarii de clone informatice. Clonele informatice sunt forme
concrete de manifestare a fenomenului de piraterie software.
Managementul informational reprezinta un control sistematic la
informatiei înregistrate, asigurând suport în luarea deciziilor, reducerea
costurilor si atingerea obiectivelor propuse în cadrul organizatiei.

181
Orice tip informatie, fie în format electronic, fie în alt format de
reprezentare si stocare, trebuie sa fie administrata într-o maniera eficienta si
consistenta. Aspectul esential al managementului informational consta în
asigurarea accesului la înregistrarile dorite în orice moment din ciclul lor de
viata.
Informatia reprezentata si stocata în format electronic prezinta
caracteristici specifice datorita varietatii de formate, suporturi si sisteme
aflate în uz curent. Resursele informationale create în mediul electronic
trebuie sa fie gestionate într-o maniera care asigura identificarea lor
efectiva, organizarea, regasirea si mentenanta acestora.
Produsele program sunt colectii de coduri sursa, date si alte
informatii furnizate în format digital. Introducerea acestora în Registrul
produselor software se efectueaza sub forma de înregistrari într-o baza de
date. Aceste înregistrari electronice sunt obiecte de management în
concordanta cu regulile legale specifice fiecarei tari.
O aplicatie de management automat al înregistrarilor cu privire la
produsele software lansate pe piata nu numai ca le administreaza electronic,
dar face posibila si gestionarea acestora pe alte medii de stocare (hârtie,
film, casete audio/video, fotografii, microfilme, discuri optice si casete
magnetice).
Aplicatia de management automat trebuie sa:
• ofere o baza de date centrala cu diverse tipuri de aplicatii
informatice;
• control fizic al înregistrarilor ele ctronice si stabilirea locatiei si
dispunerii documentelor non-electronice;
• identificare automata a fiecarei înregistrari electronice sau non-
electronice.

Se impune ca aplicatia de gestiune automata a înregistrarilor din


Registrul produselor software sa ofere protectia informatiilor continute în
acesta împotriva:
§ accesul neautorizat;
§ modificarilor necorespunzatoare;
§ pierderi fizice de informatie.

Procedurile de securitate pentru documentele stocate în format


electronic trebuie sa includa controlul accesului la calculatoare si
dispozitivele de stocare electronica a datelor.

182
De asemenea, sunt necesare copii ale înregistrarilor esentiale.
Software sau documentatia ceruta pentru regasirea si accesul la acestea
trebuie sa fie plasate într-o locatie separata unde sunt gestionate aceste copii.
Aplicatia de gestiune automata a înregistrarilor trebuie sa ofere
facilitati de vizualizare, copiere, tiparire pe durata existentei acestora.
Acestea presupun ca aplicatia sa dispuna de operatii:
• mentinerea în bune conditii de functionare a dispozitivelor
hardware si modulelor software ale sistemului;
• realizarea de copii de siguranta a înregistrarilor importante din
baza de date;
• asigurarea, prin intermediul dispozitivelor hardware si software,
a vizualizarii înregistrarilor în formatul nativ;
• asigurarea compatibilitatii între diferitele versiuni hardware si
software;
• trecerea la noi formate de reprezentare si stocare a informatiei
atunci când vechile formate nu mai sunt utilizate pe scara larga.

Înregistrarea în baza de date a unei noi aplicatii software trebuie sa


se realizeze conform unor reguli:
v stabilirea denumirii produsului;
v clasificarea produsului – se asigura descrierea prin intermediul
unui profil al produsului;
v stabilirea regulilor de regasire si acces la înregistrarea creata;
v asigurarea controlului versiunii produsului;
v detalii privind mentinerea sau eliminarea înregistrarii.

9.2 Efecte economice ale clonarii informatice

Diversele modalitati de masurare a pierderilor datorate utilizarii


neautorizate a clonelor informatice sunt discutabile datorita metodologiilor
de aplicare a lor. În acest context, se ridica o serie de probleme:
Descresterea volumului de vânzari a copiilor legale. Numarul de
copii autorizate suplimentare care ar putea fi vândute nu este identic cu
numarul de duplicate realizate în mod ilegal. Copiile neautorizate sunt
vândute la un pret substantial inferior celui al produselor autorizate.
Efectele pirateriei software asupra preturilor de desfacere.
Preturile de desfacere al produselor software sunt afectate de extinderea
comertului cu copii software neautorizate. Copiile ilegale, având un nivel
ridicat de calitate, determina reducerea cererii pentru copiile legale,

183
autorizate si cresterea numarului de utilizatori care cumpara copii ilegale în
locul celor autorizate. Efectul asupra pretului de desfacere al produselor
program legale este fie pozitiv, fie negativ.
Efectul pozitiv apare deoarece pretul creste daca cei mai multi
consumatori sensibili la pret se îndreapta spre produsele neautorizate, în
timp ce cea mai mare parte a consumatorilor nesenzitivi la pret ramân fideli
pietei legale. Ca urmare, are loc o cerere mai putin senzitiva la pret, ceea ce
permite producatorilor o crestere a pretului.
Efectul negativ se manifesta atunci când consumatorii nu difera
foarte mult în senzitivitatea la pret, acesta înregistrând o scadere. În acest
caz, toti consumatorii prefera sa achizitioneze produse program piratate.
Astfel, efectul pirateriei software consta într-o cerere mai elastica în functie
de pret a copiilor autorizate.
Estimarea nivelului pirateriei software. Presupunând ca
dezvoltarea practicilor de realizare a copiilor în mod neautorizat poate fi
estimata în limite rezonabile, nu se poate presupune ca toate copiile
neautorizate sunt ilegale si reprezinta piraterie.
Definitia exacta cu privire la copiile legale face obiectul unor
controverse. Opiniile diferite exprimate cu privire la legalitatea copiilor au
condus la realizarea unor statistici diverse asupra consecintelor economice
ale dezvoltarii pirateriei.
Anticiparea pirateriei. Anticiparea procesului de copiere ilegala de
software determina ca anumite produse sa nu fie niciodata lansate pe piata
deoarece producatorul nu considera ca vânzarile de pe piata autorizata sunt
suficiente pentru a acoperi costurile de productie si distributie.
În acest caz, pierderile producatorului sunt reprezentate de profitul si
alte drepturi banesti care decurg din vânzarea produsului. De asemenea,
consumatorii sufera si ei un cost egal cu diferenta între valoarea pe care ar fi
obtinut-o cu ajutorul produsului si pretul de achizitie al acestuia.
Pierderi non-profit. Exista pierderi cauzate de pirateria software
care nu sunt direct legate de profit. Reputatia unui producator de software
are de suferit daca pe piata circula copii neautorizate, de o foarte slaba
calitate, în scopul degradarii reputatiei în fata potentialilor clienti.
Pentru a face fata provocarilor lansate de pirateria software,
eforturile s-au îndreptat în directia protejarii produse program. Exista mai
multe modalitati de a combate pirateria. Una dintre principalele metode
consta în oferirea unei protectii chiar de software însusi prin intermediul
unui numar de identificare „serial number”. Aceasta tehnica de protectie
consta doar în introducerea unui „serial number” valid si nimic altceva.
În general, „serial number” este independent de numele de utilizator,
dar exista produse la care acesta este derivat din numele utilizatorului. În
184
aceasta situatie, utilizatorul este mai putin tentat de a da altcuiva cheia de
activare a produsului sau de a face-o publica pe Internet.
Scheme mai avansate prevad generarea numarului pe baza
componentelor hardware din sistem. Se genereaza un unic „computer id”
specific fiecarui computer.
O alta forma de protectie consta în atasarea unui dispozitiv la unul
din porturile calculatorului. La lansarea aplicatiei se verifica existenta
acestui dispozitiv, programul nefunctionând daca lipseste. O protectie
suplimentara este oferita de încriptarea cu ajutorul unui algoritm care nu
poate fi spart a comunicatiei între aplicatia software si dispozitiv. Aceste
dispozitive sunt utilizate în principal pentru aplicatii specializate si au un
pret ridicat.
Exista o tehnica de protectie a copierii si pe mediile de stocare de tip
CD. Solutia este una bazata pe software si consta în includerea unei
semnaturi digitale pe suportul CD.
Pirateria software distruge fluxul de venituri al companiilor mici
care au gasit nise pe piata. Fara acest flux de venituri companiile mici ramân
fara sursa de dezvoltare de noi inovatii software, reducându-se astfel
posibilitatea de a face profit.
În plus, includerea unei modalitati de protectie la copiere a
produsului software realizat este foarte scumpa pentru anumite companii.
De exemplu, dispozitivul hardware mentionat mai sus aduce un pret
suplimentar de 5$ pâna la 20$ pentru fiecare copie a programului. Totodata,
acesta nu faciliteaza distribuirea produsului prin Internet si, deci, o piata
potentiala mai restrânsa pentru producator.
Pirateria software afecteaza si consumatorul. Adesea, ca urmare a
folosirii unei copii neautorizate acesta beneficiaza de un produs incomplet
sau deteriorat. De asemenea, nu se obtine acces la suportul producatorului,
materiale de instruire sau noi versiuni la un pret scazut. În plus, expertii
spun ca de multe ori produsul software piratat contine virusi care distrug
datele utilizatorilor stocate pe disc, iar tehnicile de protectie nu sunt agreate
de utilizatori datorita complexitatii acestora de instalare si utilizare.
În concluzie, pirateria software este un fenomen negativ atât pentru
industrie, cât si pentru utilizatori. Protectia copierii de software pare a fi mai
rea decât fenomenul de piraterie în sine. În multe cazuri, tot ceea ce face
protectia la copiere a produselor program este de a îngradi accesul
utilizatorilor legali la software.

185
9.3 Instrumente pentru identificarea clonelor

Instrumentele pentru identificarea clonelor informatice actioneaza


asupra urmatoarelor elemente supuse analizei:
v texte;
v cod sursa scris în limbajul de programare C++;
v devize de cheltuieli, care însotesc diverse documente.

Analiza gradului de asemanare între texte se realizeaza prin


intermediul programului Texte.exe [POPA02]. Acest program determina o
serie de indicatori prezentati în capitolele anterioare, si anume:
Ø gradul de asemanare al textelor în functie de lungimea acestora;
Ø gradul de asemanare al textelor în functie de frecventele de
aparitie a caracterelor alfabetice;
Ø gradul de asemanare al textelor pe baza vocabularului utilizator;
Ø gradul de asemanare al textelor pe baza vocabularelor textelor;
Ø gradul de asemanare al textelor în functie de frecventele minime
si maxime ale vocabularului comun;
Ø gradul de asemanare al textelor prin împartirea textului în
paragrafe.

Sistemul de fisiere utilizat de aceasta aplicatie cuprinde urmatoarele


elemente:
§ fisierul care contine numele fisierelor care formeaza lotul supus
analizei comparative; acest fisier este memorat pe discul
magnetic sub numele de fisiere.dat;
§ textele care se compara la un moment dat; sunt memorate în
doua variabile globale ale aplicatiei date prin variabilele de tip
vector de caractere cu numele: numef1, numef2;
§ fisierul care memoreaza cuvintele vocabularului definit de
utilizator; este folosit prin intermediul unei variabile globale a
sistemului, având denumirea de numef3; acesta este un fisier text,
care memoreaza pe prima linie numarul de cuvinte ale
vocabularului, iar pe rândurile urmatoare fiecare cuvânt în parte;
§ fisierul care stocheaza gradele de asemanare între texte; este
format din articole ce contin fiecare câte o variabila ce reflecta
gradul de asemanare între doua texte; este memorat pe disc sub
numele de grade_txt.dat ;
§ fisierele care memoreaza vocabularele textelor care se compara
la un moment dat, date prin numef1 si numef2; continutul
acestora se modifica, fiind suprascrise atunci când se compara
186
alte texte, date de asemenea prin numef1 si numef2; primul
articol al vocabularelor fisierelor care se compara contine
numarul de cuvinte ce formeaza vocabularul; celelalte articole au
structura:
• nume variabila; este un sir de caractere care memoreaza
denumirile variabilelor utilizate în program;
• frecvente de aparitie în text a cuvântului corespunzator
identificat;
Fisierele sunt memorate pe disc sub numele de voc_f1.dat si
voc_f2.dat;
v fisierele care contin denumirile fisierelor paragraf; fisierele
paragraf sunt formate fiecare din câte un paragraf al unui text,
acestea fiind memorate pe discul magnetic sub numele de fis*.dat,
respectiv gis*.dat, unde * ia valorile 0,1,2,... în functie de
numarul de paragrafe identificate în textele care sunt comparate;
fisierele care memoreaza aceste nume de fisier-paragraf sunt
denumite si stocate pe suport extern sub numele de para_f1.dat,
pentru numef1, si, respectiv, para_f2.dat, pentru numef2.
v fisiere care sunt formate din vocabularele fisierelor-paragraf;
structura acestor fisiere este identica cu cea a fisierelor care
memoreaza vocabularul textelor; sunt stocate pe disc sub numele
de voc_pf1.dat si voc_pf2.dat, continutul acestora schimbându-se
atunci când sunt comparate alte texte;
v fisierul care memoreaza gradele de asemanare între paragrafe
pentru doua texte comparate la un moment dat; acesta este stocat
si utilizat sub numele de grade_para.dat; structura sa cuprinde
articole de tip double, dimensiunea în articole fiind egala cu
produsul între numarul de paragrafe al textelor care se compara.

Aplicatia furnizeaza valoarea sintetica a gradului de asemanare a


unor texte pe baza urmatoarelor operatii de introducere a datelor:
- deschidere fisiere de lucru. Sunt introduse date cu privire la
lotul de fisiere care sunt supuse analizei. Datele introduse
vizeaza urmatoarele elemente:
• numarul de fisiere supuse analizei;
• denumirile de fisier care formeaza lotul textelor supuse
analizei.
- construire vocabular definit prin utilizare . Consta în
crearea unui vocabular de catre utilizator pentru contorizarea

187
frecventelor de aparitie a cuvintelor din acesta. Datele pe care
utilizatorul trebuie sa le introduca sunt:
• numarul de cuvinte al vocabularului utilizator;
• numele fisierului în care este memorat vocabularul
utilizator;
• cuvintele vocabularului utilizator.

Analiza gradului de asemanare între programele sursa scrise în


limbajul de programare C++ se realizeaza cu ajutorul aplicatiei Orto.exe
[POPA02]. Valorile calculate de aplicatie pe fisiere sursa C++ vizeaza
urmatorii indicatori:
• gradul de asemanare în functie de lungime exprimata în numarul
de octeti ocupati pe suportul de stocare;
• gradul de asemanare în functie de frecventele de aparitie a
caracterelor alfabetice;
• gradul de asemanare în functie de frecventele de aparitie a
cuvintelor din vocabularul utilizator;
• gradul de asemanare în functie de frecventele de aparitie a
cuvintelor din vocabularul acestora;
• gradul de asemanare în functie de frecventele de aparitie a
caracterelor alfabetice si frecventele de aparitie a cuvintelor din
vocabularul paragrafelor;
• gradul de asemanare în functie de frecventele de aparitie a
variabilelor definite în cadrul programelor sursa;
• gradul de asemanare în functie de pozitia variabilelor în
programele sursa;
• gradul de asemanare în functie de frecventele de aparitie, minime
si maxime, a cuvintelor din vocabularele fisierelor;
• grade de asemanare în functie de matricele de precedenta ale
instructiunilor din fisierele comparate.

Sistemul de fisiere utilizat de aplicatie cuprinde urmatoarele


elemente:
- fisierul care memoreaza gradele generale de asemanare între
programele sursa C++, care sunt determinate pe baza criteriilor
definite; numele sub care este memorat pe disc acest fisier este
grade_text.dat;
- fisierul care memoreaza gradele partiale de asemanare pentru
fiecare pereche de fisiere care se compara; denumirea acestui
fisier este grade_ptxt.dat ; articolele acestui fisier sunt vectori,

188
numarul de articole fiind dat de numarul de comparatii, iar
dimensiunea articolului este egala cu numarul de criterii definite;
- fisierul care retine vocabularul definit de utilizator; este un fisier
text care memoreaza pe fiecare linie câte un cuvânt din
vocabular; prima linie este ocupata de dimensiunea
vocabularului exprimata în cuvinte; articolele acestui fisier sunt
siruri de caractere, fiecare sir memorându-se pe câte un rând;
este utilizat prin intermediul unei variabile globala a aplicatiei
sub denumirea numef3;
- fisiere care sunt utilizate pentru retinerea numelor fisierelor care
se compara la un moment dat; acestea sunt folosite în aplicatie
sub forma variabilelor globale care sunt de tip sir de caractere si
au denumirile numef1 si numef2;
- fisierul care memoreaza denumirile tuturor fisierelor care
formeaza lotul supus analizei comparative; este un fisier de date
binar, iar denumirea sa este fisiere.dat;
- fisiere utilizate pentru stocarea tipurilor de date utilizate în
programele sursa C++; articolele au urmatoarea structura:
• cheie tip - este un câmp al articolului prin care se identifica în
mod unic un tip de date în cadrul fisierului;
• denumire tip - este un câmp care memoreaza denumirea
tipului de date care corespunde codului specificat în celalalt
câmp.
Denumirea acestora fisiere are forma tipuri_*.dat, unde *
reprezinta denumirea unui fisier care se compara la un moment
dat;
- fisierele care memoreaza variabilele identificate în cadrul
codurilor sursa; articolele au urmatoarea structura:
• codul tipului de date al variabilei;
• tipul variabilei: simpla, pointer, masiv;
• dimensiunea tipului variabilei;
• denumirea variabilei;
• frecventa de aparitie a acesteia în cadrul programului.
Denumirea fisierelor are forma variab_*.dat, unde * reprezinta
numele unui fisier care se compara al un moment dat;
- fisierele care retin frecventele de aparitie a variabilelor dupa
instructiuni; structura articolelor acestor fisiere este:
• denumire instructiune;
• frecventele de aparitie a variabilelor dupa instructiune.

189
Denumirea acestor fisiere are forma instr_var_*.dat, unde *
reprezinta numele fisierului care se compara la un anumit
moment.
- fisierele care memoreaza instructiunile de atribuire; utilizate în
vederea construirii matricelor de precedenta a fisierelor care se
compara; denumirea acestor fisiere are forma instr_atrib_*.dat,
unde * reprezinta numele fisierului care se compara la un
moment dat; articolele acestor fisiere sunt siruri de caractere;
- fisierele care stocheaza matricele de precedenta; articolele sunt
variabile de tip int; forma denumirii acestor fisiere este
mat_prec_*.dat, unde * este numele unui fisier care se compara
la un moment dat;
- fisierele care memoreaza lungimile în octeti a fisierelor;
denumirile acestora au forma lung_*.dat, unde * este numele
unui fisier care se compara la un moment dat, iar articolele sunt
variabile de tip long;
- fisierele care memoreaza frecventele de aparitie a caracterelor
alfabetice din fiecare fisier din lotul considerat; articolele acestor
fisiere sunt vectori, iar denumirea lor este de tipul frecv_*.dat,
unde * reprezinta numele unui fisier care se compara la un
moment dat;
- fisierele care memoreaza frecventele de aparitie a cuvintelor care
formeaza vocabularul fisierelor care sunt supuse analizei; primul
articol a acestor fisiere reprezinta numarul de cuvinte al
vocabularului care este memorat prin intermediul unei variabile
de tip long; celelalte articole au urmatoarea structura:
• denumire cuvânt;
• frecventa de aparitie a cuvântului
Denumirile acestor fisiere au forma vocf_*.dat, unde * reprezinta
numele unui fisier care se compara la un moment dat;
- fisierele care stocheaza frecventele de aparitie a cuvintelor din
vocabularul definit de utilizator; articolele acestor fisiere sunt
vectori; denumirile acestor fisiere au forma voc_*.dat, unde *
este numele unui fisier sursa C++ care se analizeaza la un
moment dat;
- fisierele care memoreaza sumele minime si maxime ale
frecventelor de aparitie a cuvintelor care formeaza vocabularele
fisierelor care se compara; articolele acestor fisiere sunt de tip
long; denumirile lor sunt sumamin_*.dat, pentru suma
frecventelor minime, respectiv, sumamax_*.dat, pentru suma

190
frecventelor maxime; * reprezinta un sir de caractere format prin
concatenarea numelor celor doua fisiere care se compara la un
moment dat;
- fisierele care retin gradele de asemanare între paragrafele
identificate în cadrul fisierelor sursa care se compara la un
moment dat; articolele acestor fisiere sunt de tip double, iar
denumirea lor are forma grade_para_*.dat, unde * este un sir de
caractere obtinut prin concatenarea numelor fisie relor sursa care
se compara la un moment dat;
- fisierele care memoreaza frecventele de aparitie a caracterelor
alfabetice dintr-un paragraf al unui fisier sursa C++ care este
supus analizei comparative la un anumit moment; articolele
acestor fisiere sunt vectori de elemente de tip int, iar denumirea
lor este frecv_para_*.dat; * reprezinta un sir de caractere format
prin concatenarea numelor fisierelor care se compara si
succesiunea data de numarul paragrafelor în cadrul fisierelor.
Obtinerea valorii indicatorului sintetic de asemanare a fisierelor
sursa dintr-un set de asemenea elemente are loc pe baza urmatoarelor
operatii de introducere a datelor:
- deschidere fisiere de lucru. Sunt introduse informatii privind
lotul de fisiere care sunt supuse analizei. Datele furnizate sunt:
• numarul de fisiere supuse analizei;
• denumirile de fisier care formeaza lotul de texte sursa supus
analizei.
- construire vocabula definit prin utilizare . Consta în furnizarea
unui vocabular de catre utilizator pentru contorizarea
frecvent elor de aparitie a cuvintelor din vocabularul dat. Aceasta
operatie presupune introducerea urmatoarelor date:
• numarul de cuvinte ale vocabularului utilizator; numarul
maxim de cuvinte pe care utilizatorul le poate introduce este
de 60000 de cuvinte;
• introducerea numelui fisierului în care se vor memora
numarul de cuvinte si cuvintele propriu-zise;
• introducerea cuvintelor vocabularului.

De asemenea, exista posibilitatea vizualizarii indicatorilor de


ortogonalitate ce corespund diferitelor criterii luate în considerare, precum si
elementele pe baza carora acestia au fost determinati.

191
Ortogonalitatea în cadrul unei multimi de devize de cheltuieli este
surprinsa cu ajutorul programului Devize.exe [POPA02]. Programul ofera
utilizatorului mai multe modalitati de lucru:
• încarcarea unor devize preluate din fisiere existente pe disc, care
sunt supuse ulterior analizei cantitative;
• introducerea devize a caror structura este specificata de utilizator;
• completarea unui set de devize cu structura predefinita care sunt
analizate pentru a stabili gradul de ortogonalitate.

Indicatorii de ortogonalitate care se calculeaza sunt:


§ gradul de asemanare între valorile aflate pe aceleasi pozitii în
matricea asociata devizului;
§ gradul de asemanare a ponderilor valorilor în totalul pe linii al
matricei;
§ gradul de asemanare a ponderilor valorilor în totalul pe coloane al
matricei.

Fisierele utilizate în acest modul sunt:


- devize preluate din fisiere existente pe discul magnetic:
• fisierul care contine valorile devizelor; încarcat si folosit
printr-o variabila globala a aplicatiei, si anume nume_dprel;
• fisierul care contine structura devizelor; numele este preluat,
de asemenea, de la tastatura si este încarcat si folosit printr-o
variabila globala a aplicatiei numef_dsprel;
• fisierul care stocheaza, în urma efectuarii analizei, gradele de
asemanare între devizele preluate din fisiere preluate de la
tastatura; se identifica pe disc sub numele grade_prel.dat;
este format din articole de tip double.
- devize create de utilizator:
• fisierul care stocheaza structura devizelor; este memorat pe
discul magnetic sub numele struct_dev.dat;
• fisierul care memoreaza valorile devizelor; este stocat pe
discul magnetic sub numele de devize.dat;
• fisierul care memoreaza gradele de asemanare între devize;
stocat si utilizat sub numele de devize.dat.
- devize cu structura predefinita:
• fisierul care contine structura predefinita a devizului; este
utilizat prin variabila globala a aplicatiei numef;
• fisierul care memoreaza valorile devizelor cu structura
predefinita; se identifica pe disc prin numele devize_pdef.dat;
192
• fisierul care stocheaza gradele de asemanare între devizele cu
structura predefinita; articolele acestui fisier sunt de tip
double, iar numele sub care este regasit pe disc este
grade_pdef.dat.

Operatiile de introducere a datelor necesare determinarii gradului de


asemanare a devizelor de cheltuieli sunt grupate astfel:
Definirea devizelor utilizator presupune efectuarea urmatoarelor
operatii:
- stabilirea structurii si continutului devizelor – presupune
introducerea urmatoarelor elemente:
• numarul de devize;
• numarul de categorii de cheltuieli ale devizului;
• numarul de perioade de timp pentru care se construieste
devizul.
- introducerea datelor în devize – consta în completarea devizului
cu informatiile propriu- zise urmatoare:
• denumirea categoriilor de cheltuieli ale devizului;
• specificarea intervalelor de timp pentru care se realizeaza
devizul;
• introducerea valorilor privind cheltuielile efectuate;
• specificarea seriei devizului;
• introducerea denumirii devizului.

Preluarea devizelor din fisiere consta în introducerea urmatoarelor


date:
• denumirea fisierului încarcat cu valorile de cheltuieli;
• denumirea fisierului încarcat cu structura devizului.

Analiza cantitativa a unui set de devize cu structura predefinita


presupune efectuarea urmatoarelor operatii:
- initializarea structurilor de date în care se memoreaza
informatii despre devize (structura, valori, grade de
asemanare). Sunt introduse urmatoarele date:
• denumire fisier în care se memoreaza structura
predefinita a devizului;
• specificarea modalitatii de deschidere a fisierului
(pentru creare sau pentru actualizare).

193
- introducerea valorilor elementelor devizelor – presupune
introducerea de date cu privire la:
• numarul de devize care se introduc în setul de analiza;
• valorile propriu-zise ale devizelor;
• seria devizului.

O operatie aparte efectuata asupra devizelor consta în selectarea


devizului dupa serie. Datele care trebuie introduse în vederea identificarii
unui deviz sunt:
Ø seria devizului;
Ø tipul devizului (utilizator, preluat de pe suportul extern de
memorie).

194
10 CONCLUZII
De regula, clonarea informatica produce rezultate negative datorita
celor care o efectueaza.
Când o companie livreaza un produs realizabil cu de zece ori
numarul sau de programatori, evident nu are capacitatea de a gestiona
calitatea produsului software care va fi clonat. Mai mult, prin preturile
promotionale se creeaza dependenta clientilor de un produs software
incomplet cunoscut vânzatorului si de cele mai multe ori imposibil de
depanat.
Introducerea studiului sistematic asupra clonelor are menirea
obtinerii unei delimitari exacte unde începe productia reala de software si
unde conduce lipsa de control asupra clonelor software.
În cazul dezvoltarii unui laborator pentru identificarea clonelor
informatice se creeaza cadrul propice stimularii echipelor care proiecteaza
produse program si baze de date pentru a solutiona probleme, cu eforturi
proportionale cu complexitatea problemelor de rezolvat.
Procesele de clonare creeaza disproportii între efortul de obtinere a
produsului software în raport cu complexitatea, bineînteles în defavoarea
producatorilor reali.
Clonarea este un subiect cu mult mai larg decât clonarea din biologie
sau din informatica. Clonarea se regaseste în literatura si arta, precum si în
toate celelalte ramuri ale stiintei.

195
În competitiile de obtinere a fondurilor participa clone, câte una la
nivelul unui program sau an dupa an în cadrul aceluiasi program.
Lucrari stiintifice publicate, cu autor specificat, se regasesc în altele
aflate în librarii sau biblioteci cu multi ani înainte.
Din când în când, sunt anulate titluri stiintifice daca lucrarile pe baza
carora au fost acordate se dovedesc a fi clone. În cazul în care exista creat
un sistem de analiza a ortogonalitatii fisierelor, deja s-a definit un
instrument de lupta eficienta împotriva clonarii informatice, cu extensie si
spre alte domenii.
Trebuie sa existe instrumente care analizeaza automat continutul
fisierelor si trebuie definite fluxuri de urmat pentru verificarea
ortogonalitatii.
Chiar daca exista instrumente si structuri organizatorice bine
definite, este necesara definirea procedurilor. Fiecare procedura are inputuri
si outputuri, precum si pasi ce trebuie parcursi de toti actorii unui sistem,
subsistem sau microsistem, generator de produse sau servicii purtatoare de
profit.
Pentru o studiere sistematica a proceselor informatice, este necesara
o abordare interdisciplinara. Clonele informatice reprezinta o componenta
importanta în reglarea accelerarii dezvoltarii societatii informationale.
Crearea de clone se efectueaza prin copiere dar si prin acces neautorizat în
sisteme informatice (spargere de cod). Cunoasterea legislatiei în vigoare
permite alocarea corespunzatoare a resurselor pentru protectia proceselor de
dezvoltare software si de baze de date originale. Totodata, interactiunile si
comunicarea dintre specialisti creeaza premise pentru perfectionarea
cadrului juridic. Minimizarea clonarii neautorizate are ca efect cresterea
gradului de atragere a marilor companii producatoare de software pentru a
deveni investitori în acel stat.
Extensiile analizelor de clone presupun crearea unor sisteme de
înregistrare, de verificare a noilor componente în raport cu cele existente si
stabilirea unor modalitati de evidentiere a clonelor, respectiv, de sanctionare
atunci când procesele de clonare contravin legislatiei în vigoare sau
normelor de etica profesionala.
Demersul întreprins de autori reprezinta un început, iar cercetarile
trebuie continuate pentru a obtine expresii cantitative ale limitelor între care
un produs informatic sau un text trebuie acceptat ca nefiind clona. În acest
scop se impune utilizarea retelelor neuronale si a algoritmilor genetici
pentru a fundamenta o noua filosofie asupra proceselor de clonare, în
dinamica lor.

196
Anexă

LISTA DE VARIABILE
ŞI ACRONIME
A program apelant
Aa mulţimea arcelor grafului asociat unui program
Ac colectivitate
Aei echipa i de realizare a specificaţiilor
Af clasă de programe în funcţie de valoarea lui f(Pi)
ai elementul i al colectivităţii A
Ai indicatorul de pe poziţia i dintr-o mulţime de indicatori
Ai indicatorul de pe poziţia i din mulţimea indicatorilor
calculaţi
aj noua poziţie a instrucţiunii j după efectuarea operaţiei de
sortare
Ap program care apelează proceduri
As fişier pe suportul de memorie
b elementul de pe linia i, respectiv coloana j privind
identitatea valorilor din cadrul matricelor comparate
B modul în cadrul unui program
BDi baza de date cu poziţia i în mulţimea colecţiilor de date
organizate sub această formă
Bf clasă de programe în funcţie de valoarea lui f(Pi)
bi suma elementelor pe coloana j
bij elementul de pe linia i, coloana j a unei matrice de
precedenţă
bmax suma maximă a elementelor calculate pe coloane
BPC indicator sintetic al tuturor indicatorilor Ik stabiliţi pentru
fiecare caracteristică
Bs fişier pe suportul de memorie
C procedură în cadrul unui program ,
C1 numărul de module din cadrul unui program sursă
C2 numărul de instrucţiuni for într-un text sursă
C3 numărul de instrucţiuni if
C4 numărul de apeluri de funcţii
C5 numărul evaluărilor de expresii

197
208 Clonarea informatică

C6 numărul de instrucţiuni while


C7 numărul operaţiilor de I/E
Cc pas de clonare parţială a structurii bazei de date
Ccp complexitatea programului
Cd complexitate bazată pe dependenţele instrucţiunilor
Cd complexitate normată bazată pe dependenţele
instrucţiunilor
CD Compact Disc
Cf clasă de programe în funcţie de valoarea lui f(Pi)
Cg complexitate gradată a programului
Cg complexitate gradată normată a programului
Ci caracteristica specifică i a unei colectivităţi
cij elementul de pe linia i, respectiv coloana j privind
identitatea ponderilor elementelor în valorile totale pe
linii
Cik nivelul caracteristicii Ck pentru elementul ai din
colectivitatea A
ck numărul de modele ale indicatorilor de calitate asociaţi
unei mulţimi de programe
cmplxi complexitatea procedurii Pi
COBD costul copierii bazei de date
COS costul operaţiei de copiere-stocare software
CP costul proiectului unui echipament
Cps complexitatea unui program sau a unei secvenţe de
program
Cr costul realizării unui produs
CSBD costul suportului pentru stocare baze de date
CSS costul suportului de stocare a unei copii software
Ct complexitate a programului, luând în considerare şi
tipurile de date
CT costul total la realizării unui echipament
CTAI costul total al aplicaţiei informatice
CV indicator agregat de variaţie
CVi coeficientul de variaţie al colectivităţii ce valori i
d aplicaţie definită pe o mulţime de puncte M
D modul în cadrul unui program
def diferenţa între lungimea minimă şi lungimea maximă a
instrucţiunilor dintr-un program sursă

198
Anexă 209

Di data i utilizată în procesul de analiză a ortogonalităţii


dij elementul de pe linia i, repsectiv coloana j privind
identitatea ponderilor elementelor în valorile toatele pe
coloane
Dv indicatorul de diversitate a progarmului
E procedură în cadrul unui program
EI entitate informatică
Ei entitatea i care este clona entităţii EI
f indicator de performanţă sau de caracterizare a mulţimii
programelor P
F procedură în cadrul unui program
f maxim lungime maximă a instrucţiunilor dintr-un program sursă
Fi funcţia i realizată de entitatea EI
fi frecvenţa cu care este utilizat un cuvânt al unui vocabular
în program
Fi( ) procedura i care se adaugă programului P
Fii fişierul intermediar cu poziţia i din mulţimea tuturor
fişierelor intermediare
fij frecvenţa de apariţie a cuvântului αi în textul Tj
fik numărul de caractere de pe linia sursă Lk din programul Pi
fk numărul de caractere de pe linia sursă k
fminim lungime minimă a instrucţiunilor dintr-un program sursă
Fpi fişierul sursă cu poziţia i în mulţimea tuturor fişierelor
sursă supuse analizei
Fri fraza i dintr-un text
Fs fişier stocat pe un anumit suport
Fsi fişierul cu poziţia i în mulţimea fişierelor utilizate
G procedură în cadrul unui program
g’ indicator agregat de asemănare între două texte prin
structurare în paragrafe
g’i indicator agregat al metricilor gi
GAij gradul de asemănare în funcţie de identitatea valorilor
indicatorilor între programele sursă Pi şi Pj
Gc numărul de caractere comune a două programe care au
frecvenţe de apariţie identice
Gf nume nou pentru fişierul F
Gi procedura i într-un program
gi indicatorul i de asemănare a două paragrafe din două
texte prin structurarea acestuia în paragrafe

199
210 Clonarea informatică

gij frecvenţa de apariţie a cuvântului nespecific βi în textul Tj


A
Gk nivelul caracteristicii k în programul PA
GkB nivelul caracteristicii k în programul PB
Gkc nivelul caracteristicii k pentru elementele identice în cele
două programe
Gr graful asociat unui program
H procedură în cadrul unui program
HDD Hard-Disk – discul hard
himax diferenţa maximă măsurabilă între specificaţiile realizate
de echipa i
I procedură în cadrul unui program
Ia indicator agregat
IA gradul de asemănare a două programe sursă în funcţie de
caracterele comune cu frecvenţe de apariţie identice
ICLONARE indicator pentru măsurarea eficienţei procesului de
clonare
Icr gradul de asemănare a două programe sursă în funcţie de
fondul comun de cuvinte ale vocabularelor
If gradul de asemănare al programelor sursă în funcţie de
numărul cuvintelor din vocabularul reuniune cu aceeaşi
frecvenţă de apariţie
Ii indicatorul i cu valoarea cuprinsă în intervalul [0, 1]
Iij instrucţiunea de pe poziţia j din programul Pi
Ij instrucţiunea cu poziţia j dintr-un program sursă
Ik indicator de comparare a unei caracteristici comune din
două programe cu valoarea minimă a sa
IL gradul de asemănare, în funcţie de lungime, a două fişiere
sursă normalizate
IT Information Technology – tehnologia informaţiei
IV gradul de asemănare a două fişiere sursă
J indicator agregat al asemănării a două texte sursă scrise
într-un limbaj de programare
Ji indicatorul de asemănare i
Jn indicator agregat al asemănării a unui lot de programe
sursă scrise într-un limbaj de programare
Jsi instrucţiunea dintr-un program sursă care se află pe
poziţia i
K numărul de unităţi folosite pentru stocarea de software şi
baze de date
k numărul echipelor de realizare

200
Anexă 211

kc indicator de cuantificare a abaterii poziţiei instrucţiunilor


faţă de cea iniţială prin efectuarea operaţiei de sortare
descrescătoare a lungimii acestora
ki numărul de valori distincte ale indicatorului Ji.
kn numărul de indicatori Ik nenuli
kp poziţia caracteristicii BPC
Kre numărul cuvintelor din vocabularul reuniune care au
aceeaşi frecvenţă
L lista parametrilor procedurii unice P
L0 listă adiţională a variabilelor de stare şi a celor de soluţie
La indicator de cuantificare a abaterii poziţiei instrucţiunii
faţă de poziţia iniţială prin efectuarea operaţiei de sortare
crescătoare a lungimilor acestora
LA lungimea alfabetului exprimată în număr de caractere
diferite utilizate
LBD indicator de cuantificare a caracteristicilor bazei de date
iniţiale
LCLONA indicator de cuantificare a caracteristicilor bazei de date
clonate
Le indicator de cuantificare a eficienţei procesului de clonare
LGi lungime procedură Gi exprimată în număr de linii sursă
Li lungimea fişierului sursă i exprimată în număr de octeţi
Lik linia sursă cu poziţia k din programul Pi
LIL1 metrică bazată pe matricea de precedenţă
LIL1N forma normată a metricii LIL1
LIL2 metrică bazată pe matricea de precedenţă
LIL2N forma normată a metricii LIL2
Lk linia sursă cu poziţia k din programul
Lli limbajul de programare i din mulţimea tuturor limbajelor
de programare
LMi lungime modul M exprimată ca număr de linii sursă
Lpi lista parametrilor procedurii cu poziţia i în mulţimea
procedurilor construite
LVco lungimea vocabularului comun a două programe sursă
LVi lungimea vocabularului text sursă i, exprimată în numărul
de cuvinte distincte identificate
LVre lungimea vocabularului reuniune a două programe sursă
M numărul de copii pentru un produs software
m numărul de linii considerate pentru compararea masivelor
bidimensionale

201
212 Clonarea informatică

M1 numărul de elemente din şirul bi, bi ∈ [1, ∆+1]


m1 numărul de arce din graful programului
m2 numărul de noduri din graful programului
Ma mulţimea de puncte pe care se defineşte aplicaţia d
mc numărul de caracteristici specifice ale unei colectivităţi
Mci modelul cu poziţia i într-un sistem de cuantificare a unor
indicatori
mf numărul de cuvinte dintr-o frază
Mi modul în cadrul unui program
Mp valoarea totală a sumelor calculate pe coloane care se
află sub pragul ∆
mp numărul de comparaţii efectuate între paragrafe
n n – numărul de programe care fac obiectul analizei
procesului de clonare
n dimensiunea matricei de precedenţă a instrucţiunilor
N valoarea totală a sumelor calculate pe coloane care se
află peste pragul ∆
n0 numărul programelor pentru care se construiesc versiuni
N1 numărul de elemente din şirul bi, bi ∈ (∆+1, bmax]
n1 numărul operanzilor dintr-un program sursă
n2 numărul operatorilor dintr-un program sursă
n3 numărul de definiţii de tipuri de date
napi identitate paragrafe în funcţie de frecvenţele de apariţie a
caracterelor identificate
nBD numărul de baze de date
nc numărul de coloane considerate în calculul ponderilor
ncai identitate frecvenţe de apariţie ale caracterului i în două
texte
NCIi numărul de cuvinte interschimbabile într-o procedură
scrisă într-un limbaj de programare
NCV numărul de cuvinte dintr-un text cu frecvenţe de apariţie
diferite şi nenule
ncvi identitate frecvenţe de apariţie a cuvintelor dintr-un text
NESC numărul de elemente structurale comune a două texte
comparate
nf numărul de funcţii realizate de entitatea EI
Ni numărul de instrucţiuni dintr-un program
ni frecvenţa de apariţie a valorii respectivului indicator;
nm dimensiunea matricei de precedenţă

202
Anexă 213

NMES numărul minim de elemente structurale a două texte


Np numărul de entităţi produse
nrcamp numărul de câmpuri ale unei tabele
nrinreg numărul de înregistrări ale unei tabele
nrleg numărul de legături al bazei de date relaţionale
nrtab numărul de tabele
NTC numărul total de caractere alfabetice mici şi mari dintr-un
text
NTCV numărul total de cuvinte distincte din două texte care se
compară
ntcvi semnalează identitatea frecvenţelor de apariţie a
cuvântului i în ambele proceduri
ntcvp identitatea a două paragrafe în funcţie de frecvenţele de
apariţie a cuvintelor identificate
OEM Original Equipment Manufacturer - software livrat
împreună cu un calculator nou sau componente hardware
OG Ordonanţă Guvernamentală
ORDA Oficiul Român pentru Drepturile de Autor
P program supus analizei
p numărul de cuvinte dintr-o frază
P’ programul sursă după sortare
P’i procedura i care este adăugată programului P
PA program sursă
PB program sursă
Pc clonă a programului P
PC Personal Computer - calculator personal
Pcc problemă complet şi corect definită
PDA Personal Digital Assistent – asistent digital personal
Pi programul cu poziţia i dintr-o mulţime de programe
Pi(j) versiunea j a programului Pi
pm numărul de reluări maxim acceptabil
PP program sursă înainte de sortarea descrescătoare a
instrucţiunilor
PP’ program sursă după efectuarea sortării descrescătoare a
instrucţiunilor
Pri procedura cu poziţia i în mulţimea procedurilor definite
Prk procedura k dintr-un program
Pu procedură unică de realizare a prelucrărilor
R numărul de copii al unei baze de date

203
214 Clonarea informatică

r numărul de cuvinte cheie dintr-un anumit domeniu


ri indicator de determinare a lungimii unui subinterval
pentru colectivitatea i
RP alt program decât P
RR program sursă înainte de sortarea descrescătoare a
instrucţiunilor
S produs software
s numărul de cuvinte nespecifice ale unui domeniu
S’ secvenţă de program
Sc produs combinat între programele P şi R
Sfi situaţia finală cu poziţia i din mulţimea tuturor situaţiilor
finale
SGBD Sistem de Gestiune a Bazelor de Date
Si clone ale produsului software S
SP sistem de programe
Sp secvenţă de program
Spi secvenţă de program i
ST program sursă
SUA Statele Unite ale Americii
T gradul de abatere a indicatorilor kc şi La, unul faţă de
celălalt
Tj textul j supus procesului de analiză a ortogonalităţii
UE Uniunea Europeană
V vocabularul programului P
Vi vocabularul programului Pi
vi cuvântul i din vocabularul V
vij cuvântul i din fraza j al unui text
Vn mulţimea nodurilor grafului asociat unui program
VT Vocabularul unui text
WIMP Windows, Icons, Menu, Pointer
WYSIWYG What You See Is What You Get
x element pentru care se desfăşoară procesul de analiză a
ortogonalităţii
X suport de memorare a fişierelor
x0i valoarea i dată din baza de date a programului
x1 punct pentru care se calculează valoarea funcţiei distanţă
xi variabila independentă cu poziţia i în mulţimea mărimilor
obiective
xi media aritmetică a colectivităţii de valori i

204
Anexă 215

y element pentru care se desfăşoară procesul de analiză a


ortogonalităţii
Y suport de memorare a fişierelor
y0 Nivel determinat pe baza valorilor x0i
y1 punct pentru care se calculează valoarea funcţiei distanţă
yr variabilă rezultativă a comportamentului programului sau
a calităţilor acestuia
z1 punct pentru care se calculează valoarea funcţiei distanţă
α extensie a unui fişier
α1 numărul de indicatori cu valori identice
αij specificaţia j pentru echipa i de realizare
β extensie a unui fişier
γf indicator agregat de asemănare a unui lot de masive
bidimensionale
γi indicatorul de pe poziţia i din mulţimea metricilor
aplicate pe masive bidimensionale
γp indicator agregat de asemănare a două masive
bidimensionale, calculat pe baza valorilor indicatorilor γi
∆ valoarea mediană a sumei maxime bmax
σ i2 dispersia unei colectivităţi de valori i
θ limita superioară a intervalului de valori al indicatorului
Cd

205
BIBLIOGRAFIE

[BATE00] Bates J., Tompkins T. - Utilizarea Visual C++ 6 , Editura Teora,


Bucuresti 2000.

[BODE00] Bodea C., Bodea V., Întorsureanu I., Pocatilu P., Lupu R.,
Coman D. - Managementul Proiectelor, Editura Inforec, 2000.

[GARE00] Gareis R. - The Professional Project Star in „The Gower


Handbook of Project Management”, 2000.

[GHIL02] Ghilic-Micu Bogdan, Stoica Marian, E-Activitati, Editura


Economica, Bucuresti, 2002.

[HALS77] Halstead, M.H. - Elements of Software Science Elsevier-North


Holland, Amsterdam, 1977

[IVAN 03a] Ion IVAN, Marius POPA, Paul POCATILU – ”The Fingerprint
– an Unique Way to Identify Programs”, Proceedings of the
International Symposium ”Knowledge Technologies in
Business and Management”, Iasi, June 6th, 2003, pp. 40 – 45

206
[IVAN 03b] Ion IVAN, Marius POPA, Constantin AVRAM – ”Utilizarea
gradului de similaritate în construirea amprentei software”, în
revista ”Studii si Cercetari de Calcul Economic si Cibernetica
Economica”, vol. XXXVII, nr. 2, 2003, pg. 39 – 54

[IVAN02a] Ivan Ion, Niculescu Silviu, Catalin Boja – Clonarea bazelor de


date, Revista Româna de Informatica si Automatica, Bucuresti,
vol. 12, nr. 4, 2002, pg. 46 - 53

[IVAN02b] Ivan Ion, Pocatilu Paul, Popa Marius, Sacala Mihai, Ungureanu
Doru – Information Cloning, Probleme regionale în contextul
procesului de globalizare – Simpozion International, Chisinau,
Republica Moldova, 9 – 10 octombrie 2002, pg. 371 - 375

[IVAN02c] Ivan Ion, Popa Marius, Sacala Mihai – Ortogonalitatea datelor,


Revista Româna de Statistica, Bucuresti, nr. 4, 2002, pg. 30 –45

[IVAN02d] Ivan Ion, Pocatilu Paul, Popa Marius – Analiza cantitativa în


managementul proiectelor, Studii si Cercetari de Calcul
Economic si Informatica Economica, Bucuresti, vol. XXXVI,
nr. 2, 2002, pg. 9 – 22

[IVAN02e] Ion Ivan, Paul Pocatilu, Marius Popa, Mihai Sacala - Clonarea
Informationala, Revista Romana de Informatica si Automatica,
vol 12,nr.2, 2002, pg. 47-51

[IVAN01] Ivan I., Pocatilu P., Ungureanu D. - Project Complexity, Editura


Inforec, Bucuresti, 2001, 46 pag.

[IVAN00] Ion Ivan, Adrian Licuriceanu, Lupu Gheorghe – Substituire de


software, Revista Româna de Informatica, nr. 3, 2000

[IVAN99] Ivan Ion, Adriana Karadimou, Licuriceanu Adrian, Lupu


Gheorghe – Metrici de complexitate software bazate pe
dependentele instructiunilor, Revista de Informatica Economica,
Bucuresti, nr. 11, 1999

[IVAN98] Ivan I., Vernis D. - Compresia de date, Editura CISON,


Bucuresti, 1998.

207
[JENN97] Roger Jennings - Utilizare Acces ’95, Editura Teora, Bucuresti,
1997.

[JENS85] Jensen, H.A., Vairavan, K. - An Experimental Study of Software


Metrics for Real- Time Software IEEE Transaction on Software
Engineering, vol.SE 11, nr.2, 1985 pg. 231-234

[KAFU81] Kafura, D. ,Henry, S. - Software Quality metrics based on


interconectivityJournal of System and Software nr.2, 1981, pg.
121-131

[KERZ98] Kerzner H. - Project Management - a System Approach to


Planning, Scheduling and Controlling, Sixth Edition, John

[LUNG00] Ion LUNGU, Manole VELICANU, Mihaela MUNTEAN –


Teste si probleme de programare în Visual FoxPro si Oracle,
Editura Petrion, Bucuresti, 2000.

[LUNG95] I. Lungu, C. Bodea, G. Badescu - Baze de date. Organizare,


proiectare si implementare, Editura ALL, Bucuresti 1998.

[MATT96] Martin MATTHEWS, Bruce DOBSON - MS-DOS si


Windows, Editura Teora, Bucuresti, 1996.

[MICR99] Microsoft Press. Dictionar de calculatoare. - Editura Teora,


Bucuresti, 1999.

[MILI95] Mili H., Mili F., Mili A. - Reusing Software: Issues and Research
Directions, IEEE Transactions on Software Engineering, vol. 21,
nr. 6, pg. 528-562, iunie 1995.

[MUSL94] Muslea I. - C++ pentru avansati, Editura Microinformatica,


Cluj-Napoca, 1992.

[MUSL92] Muslea I. - Initiere în C++. Programare orientata pe obiecte,


Editura Microinformatica, Cluj-Napoca, 1992.

[NAST00] Pavel Nastase - Baze de date, Microsoft Acces 2000, Editura


Teora, Bucuresti 2000.

208
[POPA96] Popa Gheorghe, Stefanescu A., Tamas I. - S.G.B.D. Fox Pro,
Editura Cison, Bucuresti, 1996.

[POPA02] Popa Marius, Software pentru masurarea gradului de asemanare


a fisierelor arhivate, ASE, Bucuresti, 2002.

[POPE97] Mihai Popescu, Ivan Ion, Panagiotis Sinioros, Felix Simion –


Metrici Software, Editura INFOREC, Bucuresti, 1997

[PRIB99] Costin Pribeanu – Interactiune om – calculator, Editura Didactica


si Pedagogica 1999, Bucuresti

[ROSC99] Zaharie D., Rosca I. - Proiectarea sistemelor informatice de


gestiune, suport de curs, Editura ASE, Bucuresti, 1999.

[ROSV01] Viorel Ros – Dreptul proprietatii intelectuale, Editura Global


Lex, Bucuresti 2001

[SAVU98] Savu C.G. - Ghidul programatorului Visual C++ 5.0, Editura


ALL, Bucuresti, 1998.

[SING86] Singh, R., Schneidewing, N.F. - Concept of software quality


metrics standard COMPCON mars 3-6 1986, A.G. Bell editor,
Los Alamos IEEE Computer Society, pg.362-368

[SMEU98] Smeureanu I., Ivan I., Dârdala M. - Structuri si obiecte în C++,


Editura CISON, Bucuresti, 1998.

[SMEU95] Smeureanu I., Ivan I., Dârdala M. - Limbajul C++ prin exemple,
Editura CISON, Bucuresti, 1995.

[SOMN93] Somnea D., Turturea D. - Initiere în C++, Editura Tehnica,


Bucuresti, 1993.

[STAN03] Stanciu Emilia, Evaluarea nivelului de reutilizare a


componentelor în sisteme de programe, ASE, Bucuresti, 2003.

[STAN00] Stanciu E. - Reutilizarea componentelor program în sisteme


complexe, ASE, Bucuresti, 2000.

209
[STAE00] Stanciu E. - Cai de crestere a gradului de reutilizare a
componentelor software, ASE, Bucuresti, 2000.

[VELI00] Manole VELICANU, Ion LUNGU, Constanta BODEA, Cristina


IONITA, Georgeta BADESCU - Sisteme de gestiune a baze lor
de date, Editura Petrion, Bucuresti, 2000.

[WILL97] Willard Nancy - The Cyberethics Reader, McGrow-Hill,


London, New-York, Sydney, 1997

[WEMP98] F. Wempen - Microsoft Office ’97 professional 6 în 1, Editura


Teora, Bucuresti 1998.

[WYKV88] Wyk V.J.C. - Data Structures and C Programs, Addison-


Wesley Publishing Company, 1988.

[****00] Documentatia Microsoft Acces 2000

[ASE01] Academia de Studii Economice, Asociatia Profesionala


INFOREC, ADSE – Coduri de etica informatica, Editura
INFOREC, Bucuresti, 2001

[CONV00] *** Conventia de la Berna pentru protectia operelor literare si


artistice, din 9 septembrie 1886 revizuita prin Actul de la Paris
la 24 iulie 1971 si modificata la 28 septembrie 1979

[ LDAD96] *** Legea nr 8/1996 privind dreptul de autor si drepturile


conexe, Monitorul Oficial nr.60 din 26 martie 1996

[LUMA00] *** Legea nr. 202/2000 privind unele masuri asigurarea


respectarii drepturilor de proprietate intelectuala în cadrul
operatiunilor de vânzare, Monitorul Oficial nr.588 din
21 noiembrie 2000

[OMPI01] *** Introducere în proprietatea intelectuala - Organizatia


Mondiala a proprietatii intelectuale, Editura Rosetti, Bucuresti,
2001

210
[ORGV00] *** Ordinul Guvernului nr. 124/2000 pentru completarea
cadrului juridic privind dreptul de autor si drepturi conexe, prin
adoptarea unor masuri pentru combaterea pirateriei în domeniul
audio si video precum si a programelor pentru calculatoare,
Monitorul Oficial nr.427 din 02 septembrie 2000, aprobat si
modificarea legii 213/2002, Monitorul Oficial nr. 324 din mai
2002

[WWW1] www.pragsoft.com

[WWW2] http://elite.polito.it/pap/db/ftcs98a.pdf.

211