Professional Documents
Culture Documents
2022 Proiect Diploma Ionut Alexandru Manea
2022 Proiect Diploma Ionut Alexandru Manea
DEPARTAMENTUL DE INGINERIA
CALCULATOARELOR SI COMUNICATIILOR
PROIECT DE DIPLOMA
COORDONATOR ȘTIINȚIFIC
Septembrie, 2022
CRAIOVA
1
CRAIOVA
DEPARTAMENTUL DE INGINERIA
CALCULATOARELOR SI COMUNICATIILOR
COORDONATOR ȘTIINȚIFIC
Septembrie, 2022
CRAIOVA
2
DECLARAȚIE DE ORIGINALITATE
reproducerea exactă a cuvintelor unui alt autor, dintr-o altă lucrare, în limba română sau prin traducere dintr-o
altă limbă, dacă se omit ghilimele şi referinţa precisă,
redarea cu alte cuvinte, reformularea prin cuvinte proprii sau rezumarea ideilor din alte lucrări, dacă nu se
indică sursa bibliografică,
prezentarea unor date experimentale obţinute sau a unor aplicaţii realizate de alţi autori fără menţionarea
corectă a acestor surse,
însuşirea totală sau parţială a unei lucrări în care regulile de mai sus sunt respectate, dar care are alt autor.
plasarea între ghilimele a citatelor directe şi indicarea referinţei într-o listă corespunzătoare la sfărşitul lucrării,
indicarea în text a reformulării unei idei, opinii sau teorii şi corespunzător în lista de referinţe a sursei originale
de la care s-a făcut preluarea,
precizarea sursei de la care s-au preluat date experimentale, descrieri tehnice, figuri, imagini, statistici, tabele et
caetera,
precizarea referinţelor poate fi omisă dacă se folosesc informaţii sau teorii arhicunoscute, a căror paternitate
este unanim cunoscută și acceptată.
07.09.2022
3
UNIVERSITATEA DIN CRAIOVA Aprobat la
Facultatea de Automatică, Calculatoare şi data de
Electronică 06.09.2022
PROIECTUL DE DIPLOMĂ
Numele și prenumele
Ionut Alexandru Manea
studentului/-ei:
Datele de pornire:
Dezvoltarea unei aplicatii
Introducere,Scopul,Motivatia,, Arhitecturi,
Conținutul proiectului:
Implementare
Material grafic
obligatoriu:
Consultații: lunare
4
Termenul estimat de
06.09.2022
predare a proiectului:
Data predării
proiectului de către
student și semnătura
acestuia: 06.09.2022
5
6
7
CUPRINS
Introducere ............................................................................................................................................................................. 9
Scopul..................................................................................................................................................................................... 9
Motivația (alegerii) lucrării .................................................................................................................................................... 9
Generalități ............................................................................................................................................................................. 9
Visual Studio Code .............................................................................................................................................................. 10
Node.js ................................................................................................................................................................................. 10
TypeScript ............................................................................................................................................................................ 10
Angular Framework : ........................................................................................................................................................... 11
Ionic ..................................................................................................................................................................................... 11
Server Securizat ................................................................................................................................................................... 11
Modul de realizare................................................................................................................................................................ 13
Arhitectura de servicii: ......................................................................................................................................................... 14
Arhitectura bazei de date:..................................................................................................................................................... 15
Arhitectura Completa: ...................................................................................................................................................... 16
Arhitectura Utilizatorilor .................................................................................................................................................. 17
Arhitectura tabelei pentru produse: .................................................................................................................................. 18
Arhitectura tabelei Orders: ............................................................................................................................................... 18
Inregistrarea utilizatorilor: ................................................................................................................................................... 19
Etape Aplicatie mobile ......................................................................................................................................................... 22
Evaluarea performantelor de sistem: .................................................................................................................................... 29
Performanta de pe front-end................................................................................................................................................. 30
Securitatea: ........................................................................................................................................................................... 31
Testarea: ............................................................................................................................................................................... 31
Concluzii: ............................................................................................................................................................................. 42
Bibliografie .......................................................................................................................................................................... 43
8
Introducere
Pentru realizarea acestui proiect a fost necesară integrarea următoarelor domenii studiate in timpul celor 2 ani de
master si in ciclul de licenta:
Programarea calculatoarelor
Baze de date
Programarea orientată pe obiecte
Rețele de calculatoare
Tehnici de securizare a informației
Arhitecturi de microcalculatoare
Tehnologii pentru servicii web
Testarea si asigurarea calitatii
Tehnologii wireless si retele mobile
Securitatea si protectia datelor
Modelarea si evaluarea performantelor.
Asemenea unui inginer am aplicat pașii principali pentru realizarea oricărui proiect:
1.Conceperea sistemului la nivel de blocuri.
2.Înțelegerea procesului.
3. Alegerea componentelor software pentru front-end, în funcție de necesitate.
4. Alegerea componentelor software pentru back-end, in functie de necessitate.
5.Integrarea acestora într-un sistem.
6.Adaptarea fiecărei componente si evaluarea performantelor.
7.Testarea tuturor pe mici module.
8.Testarea întregului sistem.
Scopul
Acest proiect a fost realizat din dorinta de a realiza a platforma sigura care sa poata fi folosita cu usurinta
si a oferi mai mult timp liber clientilor care aleg sa foloseasca aceasta platforma.
Generalități
Tema propusa este o aplicatie de tip magazin online care permite utilizatorilor inchirierea unor produse
pentru o perioada determinata. Comanda se poate face fie folosind un browser de internet fie descarcand
aplicatia pe telefonul mobil.
Dupa ce clientul decide de ce produs are nevoie, procedura de finalizare comanda este foarte intuitiva si
este nevoie doar de 3 click-uri :
9
Clientul adauga produsul/produse in cos, cosul va aparea ca un cerc in partea din dreapta sus si cu
Daca clientul nu doreste sa se razgandeasca atunci pentru a primi comanda este nevoie de accordul de
optimizarea traseului catre client a unuia dintre curierii disponibili. Algoritmul ia in calcul adresa la care
se afla clientul si adresa/adresele depozitelor din care unul dintre curieri va ridica produsul pentru a-l
Node.js
Node.js (Node) este o platformă de dezvoltare open source pentru executarea codului JavaScript din
partea serverului. Nodul este util pentru crearea aplicațiilor care necesită o conexiune persistentă de la
browser la server. Node.js este destinat să ruleze pe un server HTTP dedicat și să folosească un singur
thread. Aplicațiile Node.js sunt bazate pe evenimente și se execută asincron. React este un framework
utilizat la scrierea aplicațiilor mobile reale pentru iOS și Android. Prezintă un mare avantaj, respectiv
faptul că este compatibil cu ambele sisteme de operare de pe telefoane mobile iOS și Android.
TypeScript
Este un limbaj de programare open-source dezvoltat, de a cărui mentenanță se ocupă Microsoft. Odată cu
digitalizarea globală majoritatea aplicațiilor au migrat către o variantă online. Până acum câțiva ani,
majoritatea acestor aplicații au fost scrise în JavaScript, însă pe măsură ce aplicațiile deveneau din ce în ce
mai mari, din cauza arhitecturii proiectului apăreau dificultăți în dezvoltarea acestora. Cei de la Microsoft
au dezvoltat și lansat în anul 2012 limbajul de programare TypeScript care este un super set de JavaScript.
Prin superset se înțelege că orice program scris în JavaScript poate fi compilat și în TypeScript. De
asemenea, codul scris în TypeScript, la compilare este transformat în cod Java Script putând fi astfel
interpretat cu ușurință de toate web browser-ele. Unul din cele mai populare framework-uri de JavaScript,
Angular, folosește ca limbaj de programare TypeScript, fiind din ce în ce mai utilizat în dezvoltarea de
aplicații web 36
10
Angular Framework :
Angular este un framework open-source de JavaScript dezvoltat Google care permite construirea de
pagini folosind HTML și TypeScript. Acestea se diferențiază de cele rudimentare prin faptul că datele din
interiorul lor sunt încărcate dinamic. Structura unui proiect Angular cuprinde: module, componente,
servicii, pipe-uri, directive, legături. În cadrul proiectului am folosit Angular împreună cu Ionic pentru
realizarea unei aplicații cross-platform (aplicație web și mobile). Faptul că este un framework de
actualitate și compatibil cu Ionic m-au determinat să-l utilizez.
Ionic
Ionic este un SDK, complet open-source, utilizat pentru dezvoltarea aplicațiilor mobile hibride. Cea mai
recentă versiune a fost reconstruită ca un set de Web Components, care permite aleagerea oricărui cadru
de interfață de utilizator, cum ar fi angular, React sau Vue.js. De asemenea, permite integrarea
componentelor ionice, fără niciun cadru de interfață pentru utilizatori. Ionic oferă instrumente și servicii
pentru dezvoltarea de aplicații mobile, desktop și Web progresive bazate pe tehnologii și practici moderne
de dezvoltare, utlizând tehnici Web precum CSS , HTML5 și Sass . În special, aplicațiile mobile pot fi
construite cu aceste tehnologii și apoi distribuite prin magazinele native de aplicații pentru a fi instalate pe
dispozitive folosind Cordova sau Condensator.
Server Securizat
Varianta de server prestabilită este cu protocolul HTTP/1.1 pe portul 80, care necesită foarte multe criptări
și tot nu este o variantă sigură pentru că este nevoie de o cheie și această cheie se trimite într-un mod
nesecurizat pentru prima dată așa că am ales să folosesc protocolul HTTPS, care este varianta securizată
de la HTTP,HTTPS autentifică comunicarea server-client și client-server și oferă confidențialitatea
comunicării. Toată această securitate vine cu ”costuri majore” în latență,memoria folosită la nivel de
microcontroller,puterea de procesare, încalzirea microcontroller-ului față de modul obișnuit și consumul
de energie, dar care este insesizabil. SSL/TLS este un protocol standard pentru a asigura autentificarea și
confidențialitatea datelor transmise prin conexiuni TCP.SSL este o combinație între criptografia simetrică
și cea asimetrică , în felul acesta se face un compromis între performanță și securitatea transmisiei de
date.Cu această cheie simetrică, datele sunt criptate și decriptate cu ajutorul unei chei secrete pe care o
cunosc atât serverul cât și clientul. Cea mai sigură metodă de criptare este cea asimetrică. Aceasta cere
chei criptate care pentru o securitate sporită trebuie sa aibă între 128 și 256 de biți. Orice cheie cu mai
putin de 80 de biți este considerată nesigură. Cheile sunt de două feluri: una publică și una privată. Cu cea
publică se criptează informația iar cu cea privată se decriptează . Cele 2 chei sunt în strânsă legătură și
este foarte dificil să se facă reverse-engineer . Problema cu acest protocol este dacă se dorește criptarea
tuturor informațiilor conexiunea ar pica. Exemplu: Căsuța poștală: Putem să ne imaginăm cheia publică ca
locația unde se află casuța poștală și în acest caz cheia privată va fi cheia de la căsuța poștală. Cei care știu
unde se află casuța poștală pot pune un mesaj în ea, dar numai cel care are cheia poate să citească
mesajele din ea. TLS, care este o variantă înbunatățită de la SSL folosește doar criptografia asimetrică
încă de la începutul conexiunii pentru a cripta conversația dintre server și client. Trebuie să fie de acord cu
o singură cheie pe sesiune pe care amândoi o s-o folosească pentru a cripta pachetele de date de la acel
moment înainte.Criptarea folosind o cheie distribuită se numește criptare simetrică și este mult mai puțin
11
intensivă din punct de vedere al calculului decât criptarea asimetrică. Pe tot restul comunicării dintre
server și același client se va folosi doar o cheie publică. 38 În acest fel comunicarea este foarte sigură.
Procesul prin care se stabilește conexiunea dintre server și client se numește handshake și este momentul
în care TLS ia viață. Handshake: 1.Clientul contacteză serverul și cere o conexiune sigură. Serverul
răspunde cu o listă de algoritmi de criptare pe care o cunoaște. Clientul compară acea listă cu lista proprie
, selectează un algoritm și îi trasmite server-ului decizia. 2.Apoi server-ul oferă certificatul său digital care
este un document electronic ce confirmă identitatea server-ului.În acest certificat se află și cheia publică
pe care o vor folosi cele două părți pentru comunicarea sigură. 3.Folosind cheia publică a server-ului,
clientul și server-ul stabilesc o sesiune a cheii pe care amândoi o vor folosi pentru restul conexiunii. TLS
Vulnerabilități: POODLE(Padding Oracle On Downgraded Legacy Encryction) este o vulnerabilitate de
securitate care forțează trecerea de la TLS la SSL v3,un protocol care are 15 ani vechime și care a fost
înlocuit de TLS. Această forțare are loc prin intreruperea handshake-ului dintre server și client, rezultând
reîncercarea serverului de a lua legatura cu clientul folosind versiunea precedentă a protocolului. Odată ce
trecerea a avut succes, atacatorul poate exploata vulnerabilitățile protocolului mai vechi și poate
compromite (decripta) un byte.Repetând atacul îi permite acestuia sa decripteze mai mulți bytes și poate
avea acces la informații sensibile cum ar fi cookie sau parole. Mai mult acesta poate să intercepteze și să
modifice traficul din rețea. SECURITATEA ȘI BENEFICIILE. Pentru a întelege ce este securitatea și la
ce ne folosește am ales un exemplu: 39 Două persoane comunică la distanță prin canalul “Poștă”. Aceste
persoane tratează probleme delicate care nu trebuiesc interceptate. O a treia persoană știe că aceste
persoane discută și dorește să afle care este subiectul. Pentru a face acest lucru poate intercepta scrisoarea
înainte ca aceasta să ajungă la destinatar, poate sa o citească și să o resigileze sau să o modifice. Principiul
și în cazul Securității cibernetice este aproximativ același. Securitatea cibernetică se referă la urmatoarele
aspecte: 1.Autentificarea Autentificarea presupune asigurarea că entitatea care comunică este cea care
pretinde a fi. Serviciul de autentificare este conceput pentru a se asigura autenticitatea comunicației.
Serviciul de autentificare oferă control de acces pentru sisteme verificând dacă datele de identificare ale
unui utilizator se potrivesc cu cele de acreditare dintr-o bază de date a utilizatorilor autorizați sau dintr-un
server de autentificare a datelor. Pentru a nu fi necesară autentificarea de fiecare dată când se dorește
intrarea in aplicație , sistemele protejate se bazează pe autentificarea bazată pe jeton în care autentificarea
este efectuată o dată la începutul unei sesiuni. Sistemul de autentificare emite un token de autentificare
semnat pentru aplicația utilizatorului final, iar tokenul respectiv este anexat la fiecare solicitare din partea
clientului. 2.Confidențialitatea datelor. Confidențialitatea este măsura de protecție a transmisiei datelor
printr-un canal, în cazul nostru Internet. Confidențialitatea presupune: -Criptarea informațiilor sensibile.
Criptarea este un proces prin care datele devin imposibil de citit tuturor, cu excepția celor care dețin cheia
potrivită sau parola. 3.Integritea datelor: Integritatea precum confidențialitatea se pot aplica pentru un
pachet de mesaje, un singur mesaj sau pe câmpuri selectate, dar cea mai buna metodă de secutizare este
cea totală. O conexiune folosind un serviciu de integritate a datelor se asigură că mesajele sunt transmise
și primite fară ca acestea să fie duplicate, inserate, modificate sau înlocuite.
12
Modul de realizare
Pentru acesta am realizat o aplicatie pentru vanzarea de jocuri de societate folosind rest api-uri integrate in
partea de back-end realizata in ASP.NET care lucreaza foarte usor cu un server-ul mysql. Cateva dintre
aceste servicii sunt: Autentificarea autilizatorilor, inregistrarea conturilor acestora si scrierea informatiilor
in baza de date, crearea , serviciul de creare a jocului de societate, editarea , stergerea si postarea
acestora in interfata utilizatorului, serviciul de like , dislike pentru a obtine si un feed-back din partea
clientului , serviciul de creare order si punerea order-elor in tab-ul de istoric al utilizatorului. Pe langa
toate acestea se mai adauga si serviciul de plata.
Inregistrarea si autentificarea utilzatorilor se va face folosind framework-ul Entity care are anumite
campuri deja gandite pentru inregistrare , precum hash-ul parolei, confirmare cont ,etc . La acestea se vor
mai adauga informatiile de Audit pentru a avea si o evidenta cu privire la data crearii, autentificarii,
modificarii sau stergerii.
Crearea jocurilor se va face dupa un model ,asadar cand administratorul doreste sa creeze un nou joc
acesta trebuie sa respecte toate formatele parametrilor si totodata sa completeze toate campurile
obligatorii. Pentru un update de informatii se va trece doar parametrul care necesita modificat, stergerea se
va face dupa Id.
13
Arhitectura de servicii:
14
Arhitectura bazei de date:
15
Arhitectura Completa:
16
Arhitectura Utilizatorilor
17
Arhitectura tabelei pentru produse:
18
Inregistrarea utilizatorilor:
Se face dupa un model de request si acesta este:
Acest model se aplica functiei “Register” care practic va lua ca parametrii ce se afla in model.
O data ce in request-ul de tip POST sunt introduce aceste date ele vor popula baza de date cu ajutorul
IdentityDbContext avand ca parametru modelul IdentityUser + Informatiile de Audit
19
Ca pas urmator trebuie configurata baza de date , trebuie specificata calea catre unde se va genera baza de
date, apoi se creaza tabele respective.
Partea de documentatie pentru request-ul de POST descrie foarte bune cum se poate realiza inregistrarea
utilizatorilor cu success.
Serviciul de inregistrare arata asa si foloseste libraria de HttpClient pentru a avea acces la functiile de
REST.
Iar acest serviciu este folosit in pagina destinata logarii de unde se apeleaza acest serviciu impreuna cu
parametrii username,userEmail si parola.
20
Practic se verifica daca parolele sunt identice si daca aceasta conditie este adevarata user-ul este directionat
catre pagina de login , dupa care se apeleaza Api-ul si informatiile sunt stocate in baza de date daca statusul
request-ul este 200 OK.
Acesta este principiul pe care functioneaza si restul requesturilor. Mai multe informatii gasiti in codul
sursa pe care il voi atasa la finalul documentului.
21
Etape Aplicatie mobile
2.Instalare Node.js
Deoarece browserul nu înțelege Typescript JS (adică, .ts), a trebuit să le compilez în JavaScript simplu,
adică .js.
Pentru a nu fi nevoit să scriu dependețele pentru aplicație manual, am utilizat comenzi pentru a genera
paginile și serviciile.
22
Un proiect Ionic prezintă o parte de front-end și o parte de back-end. Partea de front-end este scrisă în
HTML5, iar partea de back-end este scrisă în TypeScript.
Pentru autententificarea utilizatorilor este nevoie de înregistrarea acestuia. Crearea contului se face prin
completarea unui formular de tipul celui atașat mai jos.
23
Pagina de login:
24
Tab-ul de localizare:
25
Aplicatia este construita din 3 tab-uri principale :
Acestea sunt :
Profil
Produse
Verifica
26
Tab-ul cu produse:
27
Tab-ul istoricul comenzilor:
28
Evaluarea performantelor de sistem:
Fiabilitatea – Aplicatia multi client – server este una fiabilila care poate rula non-stop cu ajutorul
platformelor oferite de diverse unelte de deploy precum Azure de la Microsoft sau AWS de la Amazon.
In momentul de fata aplicatia ruleaza doar local deoarece perioda subscriptiei gratis a expirat.
Avand in vedere ca dimensiunea necesara in momentul de fata pentru stocarea datelor este una
destul de mica (aproximativ 117 MB ) aplicatia ruleaza foarte bine.
Mai jos se pot vedea indicatorii de performanta cum ar fi CPU,Memory load si numarul de
evenimente in unitatea de timp in care serverul este pornit.
29
Performanta:
Performanta de pe front-end.
Asa cum se poate vedea in partea de jos indicatorii importanti de pe partea de front-end au valori foarte
bune ce determina o funtionare foarte buna .
30
Securitatea:
Inregistrarea , Autentificarea si autorizarea s-a realizat prin intermediul pachetului UserManager pus la
dispozitie de Microsoft.
Dupa autentificare utilizatorul primeste un token de autorizare care expira dupa 10 minute. In tot acest
timp respectivul utilizator poate realiza evenimente in interiorul aplicatiei folosind respectivul token.
Testarea:
Testarea poate fi realizata foarte usor datorita arhitecturii sistemului iar principala unealta folosita a fost
Postman.
Portabilitatea
Aplicatia poate fi portata cu usurinta, singurul impediment in acest fel ramand costul unui
subscriptii.
Integrarea este un indicator care măsoară ușurința cu care sistemul poate fi incorporat într-un
context de aplicații mai larg. De multe ori valoarea unei aplicații poate fi mărită dacă funcționalitatea sau
datele produse de aplicație pot fi folosite în alte moduri decât cele care au fost prevăzute de cel care a
proiectat aplicația. Cele mai folosite strategii de integrare sunt cele la nivelul datelor sau cele realizate
printr-o interfață API. Integrarea la nivelul datelor se poate realiza prin stocarea și manipularea datelor în
așa fel încât alte aplicații să le poată accesa. De exemplu, poate să fie suficient să se folosească o baza de
date relaționată pentru stocarea datelor
Aplicatia realizata integreaza MySql pentru a stoca si reprezenta datele pentru utlizitori.
31
Etapele de realizare ale produselor software
1) Dezvoltarea unui produs software presupune etape de analiză, proiectare, scriere, testare,
debugging și mentenanță a codului sursǎ al programelor. Dezvoltarea unui produs software poate fi
folosită pentru a face referire la programarea calculatoarelor, însa într-un sens mai extins reprezintă
totalitatea activitaților de realizare ale unui produs software (= programarea calculatorarelor) ideal într-un
proces planificat și structurat. Scopul final este de a obține o soluție software eficientă și care poate evolua
în timp.
2.1) Analiza cerințelor Analiza cerințelor este prima etapă a ciclului de realizare a unui produs în
care se stabilesc cerințele aplicației, pornind de la cerințele utilizatorului final, se identifică funcțiile
viitorului produs software precum și datele implicate. Această etapă răspunde la întrebarea ce se va realiza
prin dezvoltarea produsului software.
2.2) Proiectarea arhitecturii software Proiectarea reprezintă acea etapă a ciclului de realizare a
unui produs în care se stabilește modul de realizare a cerințelor identificate în etapa de analiză, adică
trebuie să raspundă la întrebarea cum se vor realiza aceste cerințe atât la nivel global cât și la nivel de
detaliu. Această etapă pornește deci de la cerințele și specificațiile definite anterior și continuă cu
detalierea și transformarea acestora până la definirea structurii unei soluții care să fie reprezentată folosind
un limbaj grafic, textual sau mixt. Proiectul astfel obținut trebuie să poata fi utilizat mai departe la
construirea sau elaborarea produsului software (codificare, testare, integrare).
2.3) Implementarea codului Implementarea codului reprezintă scrierea textului folosind formatul
și sintaxa unui limbaj de programare ales. Codul este special conceput pentru a facilita munca unui
programator, astfel oferin posibilitatea acestuia să specifice operațiile ce vor fi realizate de către
calculator. Odată ce un program a fost realizat el va fi convertit în cod binar numit cod mașină, care poate
apoi fi citit si executat.
Interpretorul reprezintă o metodă prin care mașina convertește codul sursă în cod mașină la
momentul în care acesta este rulat. Interpretorul poate fi un program care fie execută codul sursă direct,
fie transformă codul inițial într-un cod intermediar, iar acesta va fi încărcat pentru execuție, fie
32
interpretează codul care anterior a fost compilat de către un compilator care face parte din sistemul de
interpretare.
Fiecare din cele 2 variante are avantajele si dezavantajele sale. Spre exempul un compilator este
mai rapid în momentul execuției, însa interpretorul folosește principiul mașinii virtuale care oferă
avantajul siguranței datelor.
2.6) Integrarea Integrarea se referă la faptul că un modul poate fi integrat în interiorul unui alt
modul mai complex, sau că un modul mai complex poate fi realizat din mai multe module simple. Prin
integrare, datele sau informațiile oferite la ieșire de primul modul pot fi folosite de către un al doilea
modul ca valori de intrare cu condiția ca ambele module să respecte acelasi format la ieșire, respectiv
intrare.
2.7) Testarea software Testarea software reprezintă o investigatie dirijată în scopul de a obține
informații legate de calitatea produsului software realizat în etapele anterioare.
2.8) Debugging Debugging-ul reprezintă o metodă prin care se detectează și se elimina bug-urile
(erorile) unui program (sau, general vorbind, în orice componentă electronică), în scopul de a-l face să
funcționeze pe măsura așteptărilor. Aparent debug este echivalent cu testarea, însă prin termenul de debug
se intelege testarea, descoperirea cauzelor de eroare și rezolvarea acestor erori.
Debuggingul este puternic dependent de modul în care codul este implementat. Principala
problemă este aceea că orice modificare adusă codului poate să ducă la modificarea funcționalității
întregului program. Astfel este foarte important modul în care codul este realizat pentru a facilita
rezolvarea unor astfel de buguri. De aceea este necesară respectarea unor reguli de scriere a liniilor de cod
cum ar fi: coupling, încapsularea datelor, cohesion.
2.11) Specificarea Specificarea (spec) reprezintă un set explicit de cerințe ce trebuiesc satisfacute
de un material, produs, sau serviciu. Astfel putem spune că specificarea reprezintă un
33
Testarea reprezintă o etapă importantă în procesul de realizare a produselor software. Ponderea
cheltuielilor cu testarea reprezintă între 30% şi 50% din totalul cheltuielilor pentru dezvoltarea unei
aplicaţii software.
Proiectarea aplicaţiilor software de dimensiuni mari, dezvoltată în cadrul unei echipe, nu se face
trecând direct la implementarea programului, ci urmează etape bine stabilite. Procesul de dezvoltare
al aplicaţiilor software este alcătuit din următoarele etape: specificarea cerinţelor, analiză, proiectare,
implementare, testare şi întreţinere. În figura 1 este prezentat grafic modelul clasic de dezvoltare software
.
34
Ce este testarea regresiva?
Ori de câte ori dezvoltatorii își schimbă sau își modifică software-ul, chiar și o mică modificare
poate avea consecințe neașteptate. Testarea regresiva este testarea aplicațiilor software existente pentru a
ne asigura că o modificare sau o adăugare nu a afectat nicio funcționalitate existentă. Scopul său este de a
gasi erori care ar fi putut fi introduse accidental într-o nouă versiune sau de a elibera candidatul și de a se
asigura că erorile eradicate anterior continuă să rămână moarte. Executând din nou scenarii de testare care
au fost inițial scriptate atunci când problemele cunoscute au fost rezolvate pentru prima dată, ne putem
asigura că orice modificări noi aduse unei aplicații nu au dus la o regresie sau au cauzat eșecul
componentelor care funcționau anterior. Astfel de teste pot fi efectuate manual pe proiecte mici, dar în
majoritatea cazurilor repetarea unei suite de teste de fiecare dată când se face o actualizare este prea
consumatoare de timp și complicată pentru a fi luată în considerare, deci este de obicei necesar
un instrument automat de testare .
35
Testarea de regresie este un tip specific de testare software-ului pentru a stabili că o modificare
recentă în software-ul sau setările programului nu afectează în mod negativ funcțiile existente.
Testul complet sau parțial al cazurilor de test efectuate anterior sunt efectuate din nou în timpul
testării de regresie. Astfel putem determina că funcționalitățile aprobate anterior sau cele existente
funcționează încă bine după modificare.
Aceste teste sunt făcute pentru a se asigura că noile modificări nu au efecte secundare negative
asupra funcționalității existente. Scopul este că vechiul cod va funcționa în continuare după ce au fost
făcute schimbări.
Aceasta este una dintre metodele de testare a regresiei, unde toate cazurile de testare din setul de
testare existent trebuie repetate. Acest lucru este foarte scump deoarece costă mult timp și resurse. Dacă
există un proiect, timpul și banii pentru acest lucru probabil că nu sunt chiar calculați în buget.
În loc să executați din nou testul complet, este mai bine să selectați o parte din setul de test care
trebuie rulat.
Cazurile de testare selectate pot fi clasificate ca cazuri de testare reutilizabile sau cazuri de testare
depășite.
36
3. Prioritizarea cazurilor de testare
Acordați prioritate anumitor cazuri de testare. În funcție de impactul asupra proceselor de afaceri,
sunt alese funcțiile critice și frecvent utilizate. Selectarea cazurilor de testare bazate pe prioritate va reduce
considerabil impactul testelor de regresie asupra proiectului.
În practică, un număr mare de erori software raportate se datorează remedierilor de ultim moment.
Aceste remedii provoacă efecte secundare nedorite. De aceea, selectarea cazurilor potrivite de testare
pentru testele de regresie este o artă și nu atât de simplă. Teste eficiente de regresie se pot face prin
selectarea următoarelor cazuri de testare:
Cazurile de testare care reprezintă cele mai importante caracteristici ale software-ului.
Gestionarea configurației în timpul testelor de regresie este necesară într-un mediu Agile, unde
codul este în mod constant schimbat. Luați în considerare următoarele pentru a asigura testarea efectivă a
regresiei:
Trebuie împiedicată implementarea modificărilor software sau ale setărilor în timpul testelor de
regresie. Codul testului de regresie trebuie să fie imun la schimbările de la dezvoltatori.
Baza de date utilizată pentru testele de regresie trebuie izolată. Nu se pot face modificări în baza
de date.
Retestarea înseamnă testarea din nou a funcționalității pentru a se asigura că eroarea a fost
corectată. Dacă nu este rezolvată, dezvoltatorul trebuie să o privească din nou. Dacă este rezolvată,
mesajul de eroare poate fi închis.
37
Testarea prin regresie este mai degrabă o testare a integrării. Aceasta înseamnă că trebuie, de
asemenea, să testați piese personalizate în timpul proiectelor și lansărilor. Stabiliți dacă modificarea nu are
nicio influență asupra acestor părți ale software-ului.
Cu serii de regresie succesive, seturile de teste devin destul de mari. Datorită constrângerilor de
timp și buget, nu este posibilă efectuarea testului de regresie completă.
Determinarea momentului și frecvenței testelor de regresie. Este testat după fiecare modificare
sau la fiecare actualizare de construcție sau după o serie de corecții de erori sau prin lansare?
Concluzie
O strategie eficientă de regresie economisește o organizație atât timp, cât și bani. Conform unui
studiu de caz la bănci, testarea de regresie economisește până la 60% la corecțiile de erori (găsite în
timpul testării de regresie) și 40% la buget.
Testarea de integrare
Procesul de integrare al sistemului implică construirea unui sistem din componentele sale și testarea
sistemului rezultat pentru a releva orice defecte cauzate de interacțiunile între componente. Aceste
componente pot fi componente gata făcute, componente reutilizabile ce au fost adaptate pentru un tip
particular de sistem sau componente nou-dezvoltate. Pentru multe sisteme de mari dimensiuni, toate cele
trei tipuri de componente au șanse mari să fie utilizate. Testarea de integrare verifică faptul că aceste
componente funcționează împreună, sunt apelate corect și transferă datele corecte la momentele de timp
dorite prin interfețele lor.
38
O problemă majoră în cadrul testării de integrare o reprezintă localizarea erorilor. Interacțiunile
între componentele sistemului sunt complexe și atunci când se descoperă rezultate eronate, se poate
dovedi dificilă indentificarea originii defectului. Pentru a ușura localizarea erorilor, este de preferat o
abordare incrementală, pornind de la integrarea unei configurații minimale a sistemului și testarea
acesteia. Se adaugă apoi componente la aceasta configurație și se testează dupa fiecare iterație.
Când se planifică integrarea, trebuie decis între ordinea integrării și ordinea componentelor. În
cazul în care clientul este implicat în procesul de dezvoltare și decide ce funcționalitate trebuie inclusă la
fiecare iterație a sistemului, integrarea sistemului se axează pe prioritățile clientului. În alte abordări ale
dezvoltării, când sunt integrate componente gata făcute și componente dezvoltate special, clientul nu este
implicat și echipa de integrare decide prioritățile.
39
poate schimba tiparul interacțiunilor între componente care au fost deja testate. Pot apărea defecte care nu
au fost expuse în testele efectuate pe configurația mai simplă.
Astfel, la integrarea unei noi iterații, este important să se ruleze și testele din iterațiile anterioare
precum și noile teste necesare pentru a verifica noua funcționalitate a sistemului. Rularea unui set existent
de teste se numește testare de regresie. Daca aceasta expune probleme, trebuie verificat dacă problemele
survin din iterația anterioară și pe care noua iterație le-a expus, sau dacă acestea sunt cauzate de
incrementul de funcționalitate adăugat.
Testarea de regresie este în mod evident un proces costisitor și este impractic fără automatizare. În
combinație cu un framework de testare precum JUnit, testele pot fi rulate în mod automat.
Testarea la lansare este procesul de testarea a unei versiuni a sistemului care va fi distribuită
clienților. Principalul obiectiv al acestui proces este de creștere a încrederii dezvoltatorului în capacitatea
sistemului de a întruni cerințele. Pentru a demonstra faptul că sistemul întrunește cerințele, trebuie arătat
că acesta oferă funcționalitatea, performanța și fiabilitatea specificată și că nu cedează în condiții de
utilizare normală.
Testarea la lansare este de obicei un proces de tip “black-box”, în care testele sunt derivate din
specificațiile sistemului. Sistemul este tratat ca o cutie neagră, al cărei comportament poate fi determinat
numai prin studierea intrărilor și ieșirilor sale. Alt nume folosit este cel de testare funcțională, deoarece
tester-ul urmărește doar funcționalitatea și nu și implementarea software-ului.
40
Fig. 4 ilustrează modelul unui sistem în testarea funcțională. Tester-ul oferă intrări către
componentă sau sistem și examinează ieșirile corespunzătoare. Daca ieșirile nu sunt cele prezise ( ieșirile
sunt în setul Oe), testul a detectat o problema cu produsul.
Atunci când se testează versiuni ale sistemului, trebuie încercat să se “strice” software-ul, alegând
cazuri de test care se află în setul Ie din Fig. 4, adică intrări care au o probabilitate ridicată de a genera
erori de sistem( ieșiri în setul Oe).
Există un set de reguli care crește probabilitatea ca testele de defecte să aibă succes:
41
Se forțează rezultatele calculelelor să fie prea mari sau prea mici
Postman
Swagger
Concluzii:
Aplicația dezvoltată poate fi folosită de către orice persoană având o interfață pentru utilizator intuitivă. Necesită logarea
o singură dată. Adminstratorul deține informații importante despre starea de funcționare a sistemului. Astfel, la cea mai
mică nesincronizare va ști că există o problemă.
Sistemul este gândit la număr nelimitat de utilizatori. Aceștia pot avea configurații diferite în funcție de dorința fiecăruia.
Siguranța datelor utilizatorilor este foarte importantă și de aceea, între client și server se află o conexiune sigură de tipul
TLS. Intrarea în aplicație are reguli foarte stricte. În felul acesta se asigură o securitate sporită în ceea ce privește
integritatea datelor.
Software:
Am avut neclarități în a folosi JSON. Este un format nou pentru mine și mi-a luat mult timp
pentru al înțelege. Am avut probleme în ceea ce privește formatul bazei de date și cum se folosește.
42
Bibliografie
1.[CNS]Cryptography and Network Security ediția a 4-a ,William Stallings.
2.[IF]Ionic Framework
3. [Hur20] – B. Hurezeanu, Rețele de calculatoare, Note de curs, 2020, F.A.C.E.U.C.V.
4.[NC09]- Criptografie, Nicolae Constantinescu ,Editura Academiei Romane,2009
https://github.com/ManeaAlex23/STORE/tree/main Server
https://github.com/ManeaAlex23/BoardGames Client
43