sistem de recomandare cadouri bazat pe profil...

77
FACULTATEA DE AUTOMATIC ˘ SI CALCULATOARE DEPARTAMENTUL CALCULATOARE SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL SOCIAL LUCRARE DE LICEN ¸ T ˘ A Absolvent: Denisa-Andreea BIRI¸ S Conduc˘ ator ¸ stiin¸ tific: Asist. Prof. Ing. Cosmina IVAN 2018

Upload: others

Post on 08-Sep-2019

12 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

FACULTATEA DE AUTOMATICA SI CALCULATOAREDEPARTAMENTUL CALCULATOARE

SISTEM DE RECOMANDARE CADOURI BAZAT PEPROFIL SOCIAL

LUCRARE DE LICENTA

Absolvent Denisa-Andreea BIRISConducator stiintific Asist Prof Ing Cosmina IVAN

2018

FACULTATEA DE AUTOMATICA SI CALCULATOAREDEPARTAMENTUL CALCULATOARE

DECAN DIRECTOR DEPARTAMENTProf dr ing Liviu MICLEA Prof dr ing Rodica POTOLEA

Absolvent Denisa-Andreea BIRIS

SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL SOCIAL

1 Enuntul temei Proiectul ısi propune realizarea unui sistem de recomandare cadouriSistemul urmareste captarea datelor personale despre utilizator dintr-o aplicatie ex-terna pentru a oferi recomandari de calitate ınca de la prima autentificare

2 Continutul lucrarii Cuprins Introducere Obiectivele Proiectului Studiu Bibli-ografic Analiza si Fundamentare Teoretica Proiectare de Detaliu si ImplementareTestare si Validare Manual de Instalare si Utilizare Concluzii si Dezvoltari Ulte-rioare Bibliografie Anexe

3 Locul documentarii Universitatea Tehnica din Cluj-Napoca Departamentul Cal-culatoare

4 Consultanti Asist Prof Ing Cosmina IVAN

5 Data emiterii temei 1 Noiembrie 2017

6 Data predarii 9 Iulie 2018

Absolvent

Coordonator stiintific

FACULTATEA DE AUTOMATICA SI CALCULATOAREDEPARTAMENTUL CALCULATOARE

Declaratie pe proprie raspundere privindautenticitatea lucrarii de licenta

Subsemnatul(a) legiti-

mat(a) cu seria nrCNP autorul lucrarii

elaborata ın vederea sustinerii examenului de finalizare a studiilor de licenta la Facul-tatea de Automatica si Calculatoare Specializareadin cadrul Universitatii Tehnice din Cluj-Napoca sesiunea a an-ului universitar declar pe proprie raspundere ca aceasta lucrare esterezultatul propriei activitati intelectuale pe baza cercetarilor mele si pe baza informatiilorobtinute din surse care au fost citate ın textul lucrarii si ın bibliografie

Declar ca aceasta lucrare nu contine portiuni plagiate iar sursele bibliografice aufost folosite cu respectarea legislatiei romane si a conventiilor internationale privind drep-turile de autor

Declar de asemenea ca aceasta lucrare nu a mai fost prezentata ın fata unei altecomisii de examen de licenta

In cazul constatarii ulterioare a unor declaratii false voi suporta sanctiunile admin-istrative respectiv anularea examenului de licenta

Data Nume Prenume

Semnatura

Cuprins

Capitolul 1 Introducere 111 Contextul proiectului 112 Motivatia 113 Continutul lucrarii 2

Capitolul 2 Obiectivele Proiectului 321 Obiectivul principal 322 Obiective specifice 3

Capitolul 3 Studiu Bibliografic 531 Modul de functionare al sistemelor de recomandare 532 Tipuri de sisteme de recomandare 633 Abordarea Netflix 834 Sisteme de recomandare cu Neo4j 935 Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor 1036 Solutii similare 11

Capitolul 4 Analiza si Fundamentare Teoretica 1541 Cerinte functionale 1542 Cerinte non-functionale 1643 Cazuri de utilizare 16

431 Recomandare cadouri 18432 Adaugare produs 20433 Modificare rol utilizator 23

44 Perspectiva tehnologica 26441 Neo4j 26442 Cypher 27443 Maven 27444 Spring Boot 28445 Sencha CMD si ExtJS 28446 Facebook API(Graph API) 29447 Git 30

1

45 Arhitectura conceptuala 30

Capitolul 5 Proiectare de Detaliu si Implementare 3351 Arhitectura sistemului 33

511 Arhitectura componentei backend 35512 Arhitectura componentei frontend 40

52 Structura bazei de date 4253 Fluxul pentru diferite operatii 43

531 Fluxul pentru sub-sistemul de creare al unui utilizator si preluareadatelor necesare 44

532 Fluxul pentru sub-sistemul de recomandare 4554 Securitatea sistemului 46

Capitolul 6 Testare si Validare 4961 Testare unitara 4962 Cazuri de testare 5063 Evaluarea sistemului de catre utilizatori 53

Capitolul 7 Manual de Instalare si Utilizare 5571 Resurse necesare 5572 Manualul de instalare 55

721 Instalare si pornire baza de date 55722 Tehnologii necesare si pornirea aplicatiei backend 56723 Tehnologii necesare si pornirea aplicatiei frontend 56724 Configurarea integrarii cu Facebook 57

73 Manualul de utilizare 57

Capitolul 8 Concluzii 6181 Analiza rezultatelor obtinute 6182 Dezvoltari ulterioare 61

Bibliografie 63

Lista tabelelor 65

Lista figurilor 67

Anexa A Glosar de termeni 69

2

Capitolul 1

Introducere

In acest capitol vor fi prezentate notiuni despre contextul proiectului motivatiade la care a venit ideea proiectului si de asemenea se va prezenta continutul lucrarii pecapitole

11 Contextul proiectului

In prezent cele mai mari site-uri ale lumii din punct de vedere al numarului de uti-lizatori au ınceput ın ultimii ani sa aiba o sectiune de recomandari Acestea pot reprezentaproduse pe site-urile de comert online filme pe site-urile de vizionare de filme carti pesite-urile sau aplicatiile pentru citit sau persoane pentru site-urile de socializare

Popularitatea sistemelor de recomandare a crescut foarte mult ın ultimii ani datoritabeneficiilor multiple pe care le aduc Recomandarile aduc avantaje atat celui care vrea savanda ceva cat si celui care vrea sa cumpere deoarece unuia ıi face vanzari mai mariın timp ce celuilalt ıi da sugestii de lucruri de care ar putea avea nevoie si a uitat Iarpopularitatea lor creste tot mai tare cu cat sunt mai utile recomandarile Aceste sistemede recomandare trebuie de fapt sa faca o rdquoprezicererdquo asupra lucrurilor care i-ar placea unuiutilizator

O problema cu care multi oameni se confrunta este cumparatul cadourilor In multesituatii desi acel om ne este foarte apropiat si ıl cunoastem foarte bine tot ne este foartegreu sa gasim un cadou potrivit pentru acesta De aceea o aplicatie care sa recomandecadouri care sa creeze recomandari specializate pentru o anumita persoana ar avea o uti-litate foarte mare pentru oricine

12 Motivatia

Motivatia aplicatiei o reprezinta de fapt lipsa unei aplicatii similare pe piata panaın momentul documentarii si ın acelasi timp utilitatea uneia

1

Toti oamenii se confrunta mai devreme sau mai tarziu cu problema gasirii cadouluiperfect pentru cineva din viata lor In multe cazuri aceasta problema poate fi o adevaratacatastrofa ce consuma energie timp si rabdare pentru cel care trebuie sa cumpere cadoulDe accea scopul aplicatiei este de a usura viata oamenilor prin oferirea unor variante decadouri specifice pentru exact acea persoana

Din toata cercetarea facuta pe aceasta tema nu am gasit nici o aplicatie de acestgen care sa ofere recomandari specializate pentru o anumita persoana

13 Continutul lucrarii

In aceasta sectiune vor fi prezentate capitolele acestui document si vor fi de asemeneasi descrise sumar ca si continut

bull Introducere (Capitolul 1) - ın acest capitol se va prezenta de fapt contextul proiec-tului motivatia de la care s-a pornit cand a fost ınceput si de asemenea e cuprinsaın ea si aceasta descriere a continutului pe capitole

bull Obiectivele Proiectului (Capitolul 2) - ın acest al doilea capitol sunt prezentate obiec-tivele proiectului atat obiectivul principal cat si obiectivele secundare ce doresc a fiındeplinite la final

bull Studiu Bibliografic (Capitolul 3) - cel de-al treilea capitol este reprezentat de studiulbibliografic unde vor fi prezentate diverse concepte teoretice de la care s-a pornit cuproiectul lucrari si articole prezentate de altii pe teme ce au legatura cu aplicatia side asemenea solutiile existente care se apropie de aceasta lucrare

bull Analiza si Fundamentare Teoretica (Capitolul 4) - ın capitolul de analiza si fun-damentare teoretica vor fi prezentate cerintele de la care porneste proiectul atatcele functionale cat si cele non-functionale prezentarea cazurilor de utilizare prin-cipale ale proiectului si de asemenea o analiza asupra tehnologiilor propuse pentruacest proiect De asemenea va contine si o arhitectura conceptuala a sistemului lamomentul de ıncepere al acestuia

bull Proiectare de Detaliu si Implementare (Capitolul 5) - cel de-al cincilea capitol pre-zinta modul de implementare al proiectului Acest lucru presupune schema arhi-tecturii proiectului si de asemenea si o descriere a fluxurilor de baza ale aplicatieiIn plus este descrisa structura dupa care s-a construit baza de date sub forma degraf din ce noduri si ce relatii In ultimul rand este descris modul ın care a fostimplementata securitatea sistemului

bull Testare si Validare (Capitolul 6) - acest capitol descrie modurile ın care aplicatia afost testata atat pe componente cat si validarea finala pe utilizatori reali

bull Manual de Instalare si Utilizare (Capitolul 7) - penultimul capitol prezinta tehnologi-ile ce trebuie instalate pentru a face sistemul sa functioneze De asemenea se vaprezenta modul ın care sistemul poate fi utilizat

bull Concluzii (Capitolul 8) - ın ultimul capitol vor fi analizate rezultatele obtinute si sevor descrie noi extensii ce pot fi implementate pentru a ımbunatati sistemul

2

Capitolul 2

Obiectivele Proiectului

In acest capitol se va prezenta obiectivul principal al lucrarii cel de la care a pornittoata ideea proiectului Apoi ın continuare se vor prezenta obiectivele secundare alepoiectului care au dus la modul ın care a fost acesta implementat

21 Obiectivul principal

Scopul principal al acestui proiect consta ın construirea unui sistem de recomandarecare sa ajute utilizatorii sa poata sa cumpere cadouri pentru cunoscuti ıntr-un mod multmai eficient Sistemul va fi o aplicatie web care va avea utilizatori ce se vor putea auten-tifica si dupa stabilirea unui profil propriu cunoscutii rudele sau prietenii vor putea saprimeasca sugestii de cadouri exact pentru acea persoana Pentru cadouri vor fi introdusede catre producatori diverse obiecte si servicii In felul acesta tot procesul de cumparare alunui cadou devine mult mai usor pentru persoana care ıl cumpara si cadourile devin multmai utile pentru cei care le primesc

22 Obiective specifice

Obiectivele specifice care se va urmari sa fie atinse ın cadrul acestui proiect sunturmatoarele

bull Studierea mai multor tipuri de baze de date de la cele relationale la cele No SQLsi analizarea lor pentru a stabili care este cea mai potrivita pentru un sistem derecomandare de acest gen

bull Studierea despre diferitele tipuri de sisteme de recomandare de la cele de bazaadica filtrare bazata pe continut si filtrare colaborativa la combinatia dintre eleadica sistem de recomandare hibrid pana la cele mai putin folosite adica pe bazademografica bazata pe cunostinte sau bazata pe utilitate Iar dupa aceea alegereacelei mai potrivite metode pentru un sistem de recomandare cadouri

3

bull Intelegerea conceptului de rdquocold startrdquo la sisteme de recomandare ca problema a aces-tora si gasirea unor solutii care ar putea sa ınlature sau cel putin sa ımbunatateascaaceasta problema

bull Documentarea despre diferite metode de construire a unui profil al utilizatorului sidin aceste metode alegerea celei mai potrivite din punct de vedere al timpului care ıitrebuie sistemului pana cand rdquoınvatardquo suficiente lucruri despre utilizator ıncat poateface recomandari corecte

bull Pe baza tuturor cunostintelor acumulate ın urma studiului construirea unei aplicatiiweb ca demonstratie a alegerilor facute

4

Capitolul 3

Studiu Bibliografic

Obiectivul acestui capitol este prezentarea conceptelor teoretice la baza carora staacest proiect Vor fi prezentate concepte precum modul de functionare al sistemelor derecomandare tipurile de sisteme de recomandare abordarea celor de la Netflix asupradomeniului Neo4j ca solutie pentru un sistem de recomandare utilizarea unei retele socialepentru crearea profilului unui utilizator si reteaua Facebook ca exemplu de astfel de reteaiar ın final solutii similare

31 Modul de functionare al sistemelor de recoman-

dare

Un sistem de recomandare este o tehnologie implementata ın situatiile ın care ar-ticole (produse filme evenimente) sunt recomandate utilizatorilor (clienti vizitatori uti-lizatori de aplicatii cititori) sau invers Numarul mare al utilizatorilor acestor aplicatiieste ceea ce face ca problema sa fie dificila si costisitoare de rezolvat

Motoarele de recomandare sunt ın esenta instrumente de filtrare a datelor careutilizeaza algoritmi si date pentru a recomanda cele mai relevante elemente unui anumitutilizator [9] Sau ın termeni simpli nu sunt altceva decat o forma automatizata a unuirdquovanzator ıntr-un magazin de hainerdquo Lui i se cere un produs si el nu numai ca arata acelprodus dar si altele asemanatoare pe care le-am putea cumpara

Un sistem de recomandare are trei faze de baza dupa cum este prezentat si ındiagrama 31 pe baza carora functioneaza Prima faza este cea de colectare a datelorSistemele de recomandare se bazeaza mereu pe date anterioare deci faza de ınceput ıncare acumuleaza informatii este esentiala si de multe ori o problema foarte grea de rezolvatAceasta problema se mai numeste si rdquocold startrdquo Problema este reprezentata de faptul caun utilizator nou al unei aplicatii nu are informatii stocate despre el sau despre activitatealui fiind nou Iar sistemele de recomandare nu pot sa stie de fapt ce ıi place lui decat dupace utilizeaza o perioada aplicatia De multe ori solutia adusa de oameni pentru aceastaproblema este un chestionar de ıntrebari adresat utilizatorului care sa ıl poata face sa se

5

Figura 31 Fazele unui sistem de recomandare1

ıncadreze ıntr-un tipDe fapt din aceasta cauza sistemele de recomandare devin tot mai bune si mai

exacte cu cat sunt folosite mai mult deoarece sunt stocate tot mai multe informatii despreutilizator

Cea de-a doua faza a unui sistem de recomandare este cea de ınvatare Acoloaplicatia trebuie sa stocheze datele despre utilizator si trebuie la urmatoarea recomandaresa se bazeze pe cele dinainte si ın functie de ele sa o faca Acest lucru poate fi realizat fiedirect pe baza setului de date colectat ın faza de colectare a informatiilor care ar puteafi bazat pe memorie sau bazat pe model fie prin activitatile utilizatorului care au fostobservate

A treia faza este cea de recomandare propriu-zisa ın care doar utilizatorul facecererea de recomandari si acestea ıi sunt trimise

32 Tipuri de sisteme de recomandare

In continuare ca studiu bibliografic au fost tipurile sistemelor de recomandare [11]Ca si teorie sunt mai mute tipuri de sisteme de recomandare si o reprezentare graficaa acestor tipuri este prezentata ın figura 32 Cea mai de baza ımpartire este ın douacategorii recomandari bazate pe continut si recomandari bazate pe filtrare colaborativa

Filtrarea bazata pe continut creeaza un profil de utilizator bazat pe o metoda deınvatare pentru a determina elementele pe care un anumit utilizator le-ar dori De exemplusite-ul poate utiliza un sistem de cuvinte cheie care sugereaza articole cu cuvinte cheiesimilare ın descrierea unui element pe care utilizatorul l-a cumparat anterior

Recomandarile bazate pe filtrare colaborativa se inspira din similaritatile cu ceilaltiutilizatori Gasesc utilizatori asemanantori cu cel pentru care se face recomandarea pebaza actiunilor din trecut despre aceia si se recomanda lucruri care le plac celorlalti Acesttip de recomandare se potriveste perfect cu recomandarile de filme Acolo un om cu gusturi

1httpswwwsciencedirectcomsciencearticlepiiS1110866515000341

6

asemanatoare va putea sa recomande cel mai bine un alt film unui prieten Cea mai simplaimplementare pentru asa ceva este sub forma unei matrici cu spatii goale ın locurile undenu se cunoaste informatie

Pe langa aceste tipuri de recomandari mai sunt si altele dar care nu sunt folosite lafel de des

Figura 32 Tipurile sistemelor de recomandare2

In filtrarea bazata pe criterii demografice se fac recomandari catre utilizatori pebaza informatiilor lor demografice Sistemul va sugera elemente care au fost selectate dealti utilizatori care se ıncadreaza ın acelasi profil demografic

Filtrarea bazata pe utilitate se bazeaza pe utilitatea pe care utilizatorul o va obtinede la produs Poate include lucruri precum fiabilitatea si disponibilitatea vanzatoruluipentru a se asigura ca recomanda produse usor de obtinut de catre utilizator

Filtrarea bazata pe cunostinte recomanda selectii pe baza preferintelor si modelelorde cumparare cunoscute despre utilizator Intrucat sistemul va sti ce a cumparat con-sumatorul ın trecut acesta poate face recomandari ın functie de ceea ce ar putea satisfaceaceste nevoi ın viitor

Filtrarea hibrida combina doua sau mai multe tehnici de recomandare diferite pentrua crea un sistem de recomandare mai detaliat

2httpswwwsciencedirectcomsciencearticlepiiS1110866515000341f0005

7

33 Abordarea Netflix

Foarte multa cercetare ın domeniul sistemelor de recomandare a fost influentata decei de la Netflix

Figura 33 Tipuri de recomandari oferite de Netflix3

Netflix este un serviciu de streaming care permite clientilor sa vizioneze o gamalarga de emisiuni TV filme documentare si multe altele pe mii de dispozitive conectatela internet

In figura 33 este o imagine a site-ului cu tipurile diferite de recomandari pe careacestia le ofera

Cheia succesului Netflix consta ın capacitatea lor de a anticipa ceea ce le placeutilizatorilor motiv pentru care fiecare doua din trei ore de vizionare ın Netflix provin dinrecomandari In trecut Netflix au folosit informatii despre sex si varsta pentru a determinace filme sa recomande Acum ei folosesc de exemplu ceea ce utilizatorul a urmaritınainte a cautat cat timp petrece utilizatorul vizionand filme si tipul de dispozitiv utilizatPredictiile din motorul de recomandare Netflix nu se bazeaza doar pe comportamentulutilizatorului ci si pe context (cum ar fi timpul zilei) popularitatea titlurilor noutateadiversitatea si cat de recent a fost scos filmul sunt factori importanti [7]

Premiul Netflix a fost o competitie lansata ın 2006 pentru cel mai bun algoritm defiltrare colaborativa pentru a prezice ratingurile utilizatorilor pentru filme pe baza eva-luarilor anterioare fara alte informatii despre utilizatori sau filme adica fara ca utilizatoriisau filmele sa fie identificate stiind doar numerele atribuite pentru concurs ale acestoraPremiul pentru castigator consta ın 1 milion de dolari Peste 2000 de echipe au depusseturile de predictie si peste 650 de echipe au depasit precizia algoritmului actual al Netflix

3httpstechblogglomexcompostrecommender-systemshtml

8

cu mai mult de 5 [11] Castigatorul a fost echipa BellKors Pragmatic Chaos care adepasit algoritmul Netflix cu 1006

Cei de la Netflix au fost extrem de multumiti de rezultatul obtinut si nu numai caau ıncorporat acel algoritm ın algoritmul lor existent de recomandare dar au initiat si o adoua editie a competitiei

34 Sisteme de recomandare cu Neo4j

Urmatoarea parte a studiului bibliografic s-a axat pe bazele de date de tip grafGraphDB si mai exact Neo4j ın comparatie cu celelalte tipuri de baze de date adica celerelationale In cartea [10] sunt prezentate aceste concepte din punct de vedere teoretic siın lucrarile de master [5] si [1] este prezentata aceasta comparatie ıntre diferite tipuri debaze de date pe o aplicatie reala

Limbajul care se foloseste ın bazele de date Neo4j este Cypher Cu ajutorul acestuiase mapeaza query-urile pe noduri si relatii Din punct de vedere teoretic diferenta ıntrebazele de date relationale si cele sub forma de graf consta ın modul ın care sunt stocatedatele In timp ce ın bazele de date relationale datele sunt stocate ın structuri de datesub forma de tabel ın cele sub forma de graf datele sunt stocate ın noduri Coloaneletabelelor din bazele de date relationale se mapeaza ın bazele de date sub forma de graf peproprietati Pentru a face o legatura ıntre tabelele relationale se foloseau rdquochei strainerdquo pecand la Neo4j exista relatii ıntre noduri Din cauza faptului ca bazele de date sub formade graf s-au inspirat din cele relationale exista o asemanare ıntre ele si toate lucrurile auun corespondent ın cealalta

In lucrarea [12] sunt prezentate avantajele folosirii unei baze de date sub forma degraf cand se lucreaza cu retele sociale La aplicatiile de tipul retelelor soriale relatiile dintrenoduri sunt partea cea mai importanta iar pentru acestea o baza de date sub forma degraf se mapeaza cel mai bine Un avantaj al bazelor de date sub forma de graf din punctulde vedere al programatorilor cu acestea se lucreaza foarte similar ca si cu cele relationaledupa cum se prezinta si ın [4]

Un exemplu de sistem de recomandare construit cu Neo4j este [11] In acesta lucrareeste prezentata construirea unui sistem de recomandare care sa recomande prieteni ıntr-oaplicatie de socializare In lucrare sunt patru abordari pentru construirea unui astfel desistem Prima consta ın recomandarea unor prieteni cu care utilizatorul ar avea prieteniın comun cea de-a doua sunt persoane cu care utilizatorul se afla ın acelasi grup cea de-atreia sunt utilizatori care au mers la aceleasi evenimente ca si utilizatorul si ultima abordareconsta ın recomandarea persoanelor cu cei mai multi prieteni In urma mai multor teste sistatistici s-a decis ca abordarea cea mai buna este prima cea cu prietenii ın comun Toateaceste patru metode de oferire a recomandarilor se mapeaza foarte usor pe o baza de datesub forma de graf si reprezinta doar cate un query destul de simplu ın Cypher O astfelde aplicatie s-ar fi mapat mult mai greu pe o baza de date relationala datorita multiplelorrelatii si legaturi

9

Un alt exemplu de aplicatie unde s-a ales baza de date Neo4j a fost [2] Aicipentru articolele politice pe care sistemul le recomanda se creeaza o combinatie ıntrerecomandarile obtinute din articolele care le plac oamenilor cu care utilizatorul vorbestemult si lucruri care le plac utilizatorilor cu care acesta are lucruri ın comun Si ın acest cazexista o multime de relatii ıntre utilizatori si articole si cel mai usor se obtin recomandarilecu o aplicatie sub forma de graf motiv pentru care au si ales Neo4j

35 Utilizarea retelei Facebook pentru crearea unui

profil utilizatorilor

In continuare ca studiu bibliografic au urmat sisteme asemanatoare cu sistemuldorit si modul ın care acestia au reusit sa creeze profilul utilizatorului [13] Problema ceamai mare este rdquocold startrdquo-ul Adica atunci cand un utilizator este nou ın aplicatie nuse stiu suficiente informatii despre el pentru a putea sa i se ofere recomandari Dupa ceacesta foloseste aplicatia o perioada de timp ar putea sa i se ofere recomandari bazate peactivitatea sa anterioara ın aplicatie Din acest motiv la ınceput recomandarile pot lasade dorit si pot fi nu tocmai corecte

O metoda ın care se poate rezolva aceasta problema se afla ın lucrarea de master[7] ın care la utilizatorii noi se recomanda restaurante pe baza pozitiei lor geograficeAtunci cand doresti sa mergi la un restaurant este foarte importanta distanta la care seafla acel restaurant Din aceasta cauza pentru un utilizator caruia sistemul nu stie ce sa ıirecomande ıi recomanda restaurante la ıntamplare dintre cele care se afla cel mai aproapede el In felul acesta dupa ce merge la unul din restaurante si da feedback sistemul poatedupa aceea sa ıi faca recomandari

In lucrarea [8] recomandarile pentru votare au doua abordari La prima i se reco-manda lucrurile care le-a recomandat persoana cu scorul cel mai bun Si cea de-a douaabordare consta ıntr-un set de ıntrebari la care un utilizator nou trebuie sa raspunda candısi face contul

In acest caz cea mai buna metoda ın care se poate rezolva aceasta problema parea fi sa se ia informatiile de la API-ul de la Facebook Facebook este o aplicatie extremde utilizata si care ofera ca informatii publice exact ce ar fi necesar pentru a recomandacadouri de exemplu data nasterii sau lucruri care ıi plac unui utilizator Cu ajutorulacestora se poate calcula varsta utilizatorului poate sa fie ıncadrat ıntr-un profil si sepoate afla stilul de lucruri care ıi plac

Toate aceste informatii publice de la Facebook pot fi salvate si pot fi utilizate maitarziu pentru a se creea recomandari pe baza lor In articolul [3] despre valoarea datelor dela Facebook se prezinta ca si caz de utilizare pentru un site de comert online Aceasta estefoarte asemanatoare din punct de vedere al recomandarilor cu aplicatia de recomandarecadouri Diferenta dintre cele doua este ca ın cazul uneia trebuie sa recomande produsepentru utilizatorul aplicatiei si cealalta pentru un prieten al acestuia

10

Din punct de vedere al aplicabilitatii Facebook este o retea sociala deci datele salese mapeaza foarte bine pe o baza de date de tip graf cum este prezentat si ın lucrarea [6]

Asadar daca la crearea contului utilizatorului ın aplicatie se iau si informatiile pu-blice despre utilizator se vor putea oferi recomandari mult mai corecte ınca de la ınceput

36 Solutii similare

Ca solutii similare pe piata online nu exista aplicatii folosite pentru a recomandacadouri personalizate specific pentru o persoana anume Multe site-uri considera ca eirecomanda cadouri ınsa acestea reprezinta de fapt o filtrare mai avansata a rezultatelorproduselor de pe site-ul lor

Un site care ofera cadouri personalizate este Giftly 4 prezentat ın figura 34 careofera o modalitate usoara de a oferi cadouri Acest site nu are parte de recomandari cia gasit un mod de a face oamenii sa primeasca mereu ceea ce ısi doresc Cel care oferacadoul nu ıl cumpara ci doar ıl sugereaza dar decizia finala asupra cadoului este la celcare ıl primeste Modul ın care functioneaza este

1 Se ofera un rdquocard cadourdquo prin email sms printat sau ca o felicitare de ınaltacalitate

2 Destinatarul alege cel mai convenabil mod de a primi cadoul rdquocard cadourdquo ınposta sau direct ca bani ın contul bancar sau contul PayPal

3 De fapt utilizatorul ıi sugereaza destinatarului ce ar vrea el sa ofere ca si cadouiar destinatarul trimite ca mesaj modul ın care a cheltuit banii

Figura 34 Site web Giftly

4httpswwwgiftlycom

11

Ofera de asemenea si sugestii de cadouri Un om cand navigheaza pe site poate sase uite la cadouri ın categoriile Popular Holidays Birthdays Drinks Eats Meals BackTo School Get Fresh Health Fitness Going Out Getaway Top Shelf For The HipsterClothes For Her Clothes For Him Congratulations Expecting Activities si Custom

Un alt site cu cadouri este Etsy 5 cu imaginea 35 care arata site-ul Etsy este o piataglobala pentru bunuri unice si creative Pe pietele lor milioane de oameni din ıntreagalume se conecteaza atat online cat si offline pentru a face vinde si cumpara bunuri uniceEtsy ofera de asemenea o gama larga de servicii si instrumente de vanzari care ajutaıntreprinzatorii creativi sa ınceapa sa gestioneze si sa-si masoare afacerile Misiunea loreste sa pastreze comertul uman Deci de fapt acest site sprijina mai mult producatoriinu comerciantii De asemenea este mai mult axat pe bunuri unice si lucruri rdquounicerdquo Ca sicelelalte site-uri de genul acesta are o modalitate de a cauta lucrurile mai inteligent maispecializat pe ceea ce te intereseaza Categoriile de cautare sunt Jewelry AccessoriesClothing Shoes Home Living Wedding Party Toys Entertainment Art CollectablesCraft Supplies Tools si Vintage

Figura 35 Site web Etsy

Cel de-al treilea site care ofera servicii asemanatoare este Gifts 6 prezentat ın figura36 Acesta se focuseaza pe cadouri pentru diverse ocazii cum ar fi zilele de nastereCraciun diverse aniversari si alte evenimente la care se cumpara cadouri Pentru parteade recomandare se ofera posibilitatea de a efectua un test despre acel om caruia dorestisa ıi cumperi cadoul care are ca scop ıncadrarea omului respectiv ıntr-un profil si apoi

5httpswwwetsycom6httpswwwgiftscom

12

alegerea unor sugestii ce s-ar potrivi unei persoane cu acel tip de personalitate O primaıntrebare se refera la genul persoanei si ıntrebarea este daca cadoul este pentru o femeieun barbat o fetita sau un baietel Cea de-a doua ıntrebare se refera la marja de varsta ıncare se ıncadreaza acel om de exemplu pentru barbat optiunile sunt adolescent barbat ınjur de 30 de ani sau barbat ın varsta Cea de-a treia ıntrebare se refera la personalitateaomului Mai exact se fac sugestii pentru tipuri de lucruri ce i-ar putea placea unui omcare are trasaturile descrise ın primele doua ıntrebari De exemplu la barbati ın jur de30 de ani optiunile sunt ıi place sportul ıi place natura e aventurier ıi place golful ıiplace sa faca gratare sa serveasca bauturi sa gateasca sa animeze ıi place sa se ımbraceelegant este sef e entuziasmat de bere sau e un fan al sporturilor Iar ın final ın functiede raspunsurile date la ıntrebari se afiseaza sugestii de cadouri care se potrivesc oamenilorcu acel tip de personalitate

Figura 36 Site web Gifts

Nordstrom 7 care este prezentat ın imaginea 37 are o abordare similara avand pesite o multime de optiuni de filtrare a cadourilor Se pot cauta ın acest site cadouri pentrubebelusi cadouri de Craciun bijuterii pentru femei optiunile sunt multiple Acest lucruofera utilizatorilor sugestii pentru a le fi mai usor sa ıncadreze aceasta persoana ıntr-unanumit tip Iar dupa alegerea categoriei toate sugestiile de cadouri oferite de catre sitese ıncadreaza ın acel tip Ca avantaj al acestui site este ca ei ofera si serviciul de livrareal cadoului dupa cumparare oriunde ın lume Un dezavantaj al multor site-uri de genulacesta este ca ofera livrare doar ın zona sa apropiata

7httpsshopnordstromcomcgifts

13

Figura 37 Site web Nordstrom

14

Capitolul 4

Analiza si Fundamentare Teoretica

In acest capitol vor fi prezentate cerintele functionale ale lucrarii ımpreuna cucerintele non-functionale ale acesteia De asemenea va fi prezentata diagrama cazurilor deutilizare si vor fi prezentate mai ın detaliu cazurile de utilizare principale ale aplicatiei Incontinuare se va prezenta perspectiva tehnologica a proiectului si se vor explica deciziiletehnologice luate In final se va prezenta diagrama conceptuala a aplicatiei

41 Cerinte functionale

bull Posibilitatea autentificarii ın aplicatie si crearii unui profil propriu din care se potutiliza informatii si cu ajutorul caruia utilizatorul poate fi ıncadrat ıntr-un profil

bull Utilizatorii pot crea prietenii ca ıntr-o retea de socializare pentru a putea afla infor-matii despre prieteni si pentru a li se putea recomanda cadouri pentru acestia

bull Cu ajutorul informatiilor de la Facebook un utilizator poate fi notificat dinainte caurmeaza ziua de nastere a unuia din prietenii lui si sa i se ofere mai multe variantede cadouri potrivite pentru acesta Aceasta informatie o primeste cu suficient timpınainte pentru a nu fi surprins fara un cadou De la Facebook pe langa informatiiledespre data zilei de nastere sunt importante si varsta sau lucrurile care ıi plac uti-lizatorului Toate acestea ajuta la crearea profilului utilizatorului pe baza caruia serecomanda dupa aceea cadourile

bull De asemenea sistemul poate recomanda si un cadou pentru alt tip de evenimentdecat zi de nastere de genul cadou de Craciun cadou de nunta cadou pentru unnou-nascut etc

bull In aplicatie vor fi adaugate si diferite produse iar pentru a face mai usoara cumparareade cadouri se va putea face si comanda pe internet In momentul ın care un utilizatorface o noua comanda producatorii produselor comandate sunt ınstiintati de existentaacestei noi comenzi

15

bull Pentru persoanele la care pe profilul de Facebook este insuficient completat saupentru a putea cumpara cadouri pentru o persoana care nu are Facebook sau nuare cont ın aceasta aplicatie si despre care ın acest fel nu se cunosc nici un felde informatii se vor putea filtra cautarile pentru cadou printr-o serie de ıntrebaristandard Aceste ıntrebari vor putea creea un rdquomini-profilrdquo pentru acea persoanapentru ca sistemul sa poata recomanda cadouri

42 Cerinte non-functionale

bull Securitate sistemul nu raspunde cererilor decat atunci cand utilizatorul a fost au-tentificat ın aplicatie si are rolul necesar pentru a face acea cerere

bull Portabilitate aplicatia nu depinde de sistemul de operare pe care ruleaza De aseme-nea nu e dependenta de browserul folosit de utilizator

bull Disponibilitate sistemul ramane stabil ın fata erorilor si functioneaza la fel si dupaaparitia unei erori

bull Extensibilitate sistemul permite adaugarea sau modificarea unor componente atuncicand cerintele aplicatiei se modifica Pe langa asta e flexibila unor dezvoltari ulte-rioare

43 Cazuri de utilizare

In aceasta sectiune se vor prezenta actorii aplicatiei diagrama cazurilor de utilizaresi vor fi descrise cazurile de utilizare de baza ale fiecarui actor

Ca si actori aplicatia are patru tipuri de utilizatori

bull utilizator anonimbull clientbull producatorbull administrator

Aplicatia este conceputa ın asa fel ıncat ıntre actori este o relatie de mostenire Acestlucru presupune ca un actor are posibilitatea de a efectua tot ce putea cel dinaintea lui siceva ın plus Deci utilizatorii anonimi au cele mai putine permisiuni iar administratoriiau permisiuni totale Acest lucru se vede foarte clar si ın diagrama cazurilor de utilizaredin imaginea 41

In continuare vor fi prezentate cazurile de utilizare

1 recomandare cadouri2 adaugare produs3 modificare rol utilizator

16

Figura 41 Digrama cazurilor de utilizare

17

431 Recomandare cadouri

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unutilizator trebuie sa le urmeze pentru a primi recomandari de cadouri pentru un cunoscutsi pentru a efectua o comanda

Actorul principal

Orice utilizator al aplicatiei

Parti interesate si interese

Utilizatorul care doreste sa cumpere un cadou este interesat de a gasi un cadoupotrivit pentru cineva pe care ıl cunoaste

Producatorul care e interesat sa ısi poata vinde produseleUtilizatorul care primeste cadoul fiind interesat sa primeasca un cadou care sa i se

potriveasca si care sa ıi placa

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand utilizatorul porneste aplicatia11 Utilizatorul verifica daca are cont de Facebook si daca are urmeaza pasul 111

daca nu 22111 Utilizatorul se autentifica ın aplicatie cu ajutorul credentialelor de la

Facebook12 Utilizatorul deschide sectiunea de recomandare cadouri13 Utilizatorul completeaza formularul cu datele ce trebuie introduse pentru a primi

recomandari de cadouri pentru un prieten14 Utilizatorul poate fi satisfacut cu recomandarile primite si atunci urmeaza pasul

141 iar daca nu este atunci urmeaza cazul alternativ 23141 Utilizatorul adauga ın cosul de cumparaturi cadouri pe care doreste sa

le cumpere15 Utilizatorul cere sa ısi vada cosul de cumparaturi16 Utilizatorul poate sa se declare multumit de cosul de cumparaturi caz ın care

urmeaza pasul 161 sau poate sa aleaga cazul alternativ 24161 Utilizatorul aproba cosul de cumparaturi si accepta sa se faca comanda

17 Sistemul introduce ın baza de date comanda18 Utilizatorul va putea vedea la sectiunea comenzilor sale noua comanda si statusul

ei19 Sistemul notifica producatorul de aparitia noii comenzi110 Utilizatorul se dezautentifica din aplicatie

18

Use-Case EndUtilizatorul se va deconecta din aplicatie si o va ınchide

Figura 42 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueazaAcest flux poate aparea la orice pas211 Utilizatorul deschide sectiunea de recomandare cadouri212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca utilizatorul nu are cont de Facebook

19

Acest flux poate aparea la pasul 11221 Utilizatorul deschide pagina de Facebook222 Utilizatorul ısi face un cont pe pagina de Facebook si ısi completeaza

date despre el223 Utilizatorul revine la aplicatia de recomandare cadouri si ıncearca din

nou sa se autentifice ın aplicatie224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca utilizatorul nu e multumit de recomandariAcest flux poate aparea la pasul 14231 Utilizatorul sterge din cos cadourile pe care nu le mai doreste si revine

la pagina de recomandari232 Utilizatorul adauga alte cadouri ın cos233 Cazul de utilizare continua de la pasul 141

24 Flux-ul alternativ daca utilizatorul nu e multumit de produsele din cosul decumparaturi

Acest flux poate aparea la pasul 16241 Utilizatorul revine ınapoi la formularul cu introducerea datelor despre

beneficiarul cadoului242 Utilizatorul completeaza din nou datele243 Cazul de utilizare continua de la pasul 13

Preconditii

1 Utilizatorul trebuie sa aiba un cont de Facebook pentru a se putea autentifica ınaplicatie

2 Utilizatorul trebuie sa fie autentificat ın aplicatie pentru a putea face orice actiunedin acest caz de utilizare

3 Utilizatorul trebuie sa deschida sectiunea de recomandare cadouri pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noua comanda este salvata ın baza de date2 Comanda apare ın sectiunea de comenzi a utilizatorului ımpreuna cu statusul ei

curent3 Producatorul este notificat ca are o noua comanda

432 Adaugare produs

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unproducator trebuie sa le urmeze pentru a introduce un nou produs ın aplicatie

20

Actorul principal

Utilizatorii cu rol de producator sau cu rol de administrator

Parti interesate si interese

Producatorul care doreste sa introduca produsul nou ın aplicatie

Utilizatorii simpli care au o mai mare varietate de produse din care sa li se reco-mande cadouri

Figura 43 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo

21

Flux de evenimente

Use-Case Start

Cazul de utilizare ıncepe atunci cand producatorul porneste aplicatia

11 Producatorul verifica daca are cont de Facebook si daca are urmeaza pasul111 daca nu 22

111 Producatorul se autentifica ın aplicatie cu ajutorul credentialelor de laFacebook

12 Producatorul deschide sectiunea de adaugare produs

13 Producatorul completeaza datele necesare despre noul produs ımpreuna cu tipulde persoana si eveniment care i s-ar potrivi

14 Producatorul verifica daca este multumit de datele introduse si daca da urmeazapasul 141 daca nu 23

141 Producatorul efectueaza operatia de adaugare produs

15 Sistemul adauga un nou produs ın baza de date

16 Sistemul notifica producatorul ca noul produs a fost introdus cu succes

17 Producatorul se dezautentifica din aplicatie

Use-Case End

Producatorul se va deconecta din aplicatie si o va ınchide

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Producatorul deschide sectiunea de adaugare produs

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca producatorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Producatorul deschide pagina de Facebook

222 Producatorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Producatorul revine la aplicatia de recomandare cadouri si ıncearca dinnou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca Producatorul nu e multumit de datele introduse despreprodus

Acest flux poate aparea la pasul 14

231 Producatorul sterge datele gresite despre produs

232 Producatorul adauga alte date despre produs

233 Cazul de utilizare continua de la pasul 141

22

Preconditii

1 Producatorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Producatorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Producatorul trebuie sa aiba cont cu rol de rdquoproducatorrdquo sau rdquoadminrdquo pentru aputea face operatia aceasta

4 Producatorul trebuie sa deschida sectiunea de adaugare produs pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noul produs este salvat ın baza de date2 Produsul poate fi adaugat la recomandarile unui utilizator din acel moment

433 Modificare rol utilizator

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unadministrator trebuie sa le urmeze pentru a modifica rolul unui utilizator al aplicatiei

Actorul principal

Un utilizator al aplicatiei care are rol de administrator

Parti interesate si interese

Administratorul care doreste sa modifice rolul unui utilizatorUtilizatorul care doreste sa ısi schimbe rolul

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand administratorul porneste aplicatia11 Administratorul verifica daca are cont de Facebook si daca are urmeaza pasul

111 daca nu 22111 Administratorul se autentifica ın aplicatie cu ajutorul credentialelor de

la Facebook12 Administratorul deschide sectiunea de utilizatori13 Sistemul ıi returneaza administratorului utilizatorii care nu sunt administratori14 Administratorul modifica rolul utilizatorului din utilizator simplu ın producator

sau invers

23

15 Administratorul cere executarea modificarii

16 Sistemul executa modificarea iar ın caz de succes urmeaza pasul 161 si ın cazde eroare pasul 23

161 Sistemul notifica administratorul ca modificarea a fost efectuata cusucces

17 Utilizatorul se dezautentifica din aplicatie

Use-Case End

Administratorul se va deconecta din aplicatie si o va ınchide

Figura 44 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo

24

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Administratorul deschide sectiunea de utilizatori

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca administratorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Administratorul deschide pagina de Facebook

222 Administratorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Administratorul revine la aplicatia de recomandare cadouri si ıncearcadin nou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca sistemul returneaza o eroare la modificarea utilizatorului

Acest flux poate aparea la pasul 16

231 Sistemul returneaza un mesaj de eroare la modificarea utilizatorului

232 Aplicatia afiseaza mesajul de eroare administratorului

233 Cazul de utilizare continua de la pasul 15

Preconditii

1 Administratorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Administratorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Utilizatorul trebuie sa aiba cont cu rol de administrator pentru a putea efectuaorice actiune din acest caz de utilizare

4 Administratorul trebuie sa deschida sectiunea utilizatori pentru a putea ındeplinicerintele din cazul de utilizare

Postconditii

1 Noul rol al utilizatorului este salvat ın baza de date

2 La urmatoarea autentificare a utilizatorului acesta va observa ca interfata si maiprecis meniurile si actiunile care le poate face ıi vor fi diferite

25

44 Perspectiva tehnologica

441 Neo4j

Neo4j 1 este un sistem de gestionare a bazelor de date sub forma de graf dezvoltatde Neo4j Inc Descris de dezvoltatorii sai ca o baza de date tranzactionala compatibilacu ACID Neo4j este cea mai populara baza de date sub forma de graf dupa clasamentulDB-Engines

Baza de date Neo4j (ca si orice alta baza de date sub forma de graf) este foartediferita de o baza de date relationala cum ar fi MS Access SQL Server MySQL etcBazele de date relationale utilizeaza tabele randuri si coloane pentru stocarea datelor

Neo4j nu utilizeaza tabele randuri si coloane pentru stocarea sau prezentarea datelorci noduri si relatii

Neo4j este foarte potrivit pentru stocarea datelor care au multe relatii interconec-tate Acestea sunt de fapt aplicatiile ın care merita sa fie folosite De fapt bazele de datesub forma de graf cum este Neo4j sunt mult mai bune la tratarea datelor interconectatedecat bazele de date relationale

Acest lucru se datoreaza faptului ca modelul sub forma de graf nu necesita de obiceio schema predefinita Nu e nevoie sa se creeze structura bazei de date ınainte de a fiıncarcate datele asa cum se face la o baza de date relationala

Dar principalul motiv pentru care Neo4j este mai bun pentru datele relationalepentru acest tip de aplicatii este modul ın care permite crearea relatiilor Neo4j este con-struit ın jurul relatiilor si atunci nu este nevoie sa se configureze chei primare constrangerichei straine pentru a predetermina nodurile care pot avea o relatie si la ce date Cu Neo4jse poate adauga orice legatura ıntre orice nod ori de cate ori este nevoie

Neo4j are aceste calitati care nu se gasesc nici la celelalte baze de date NoSQLBazele de date non-relationale pe langa cele sub forma de graf sunt cele de tip coloanade tip document de tip cheie-valoare si de tip multi-model Nici unul din aceste tipuri nuau ca principala functionalitate maparea relatiilor si facilitatea interogarilor ıntr-o baza dedate cu multe relatii ıntre entitati

Generarea de recomandari personalizate este unul dintre cele mai frecvente cazuride utilizare a unei baze de date sub forma de graf Unele dintre principalele beneficii aleutilizarii grafurilor pentru a genera recomandari includ

- Performanta Lipsa indexurilor permite calcularea recomandarilor ın timp realasigurand ca recomandarea este ıntotdeauna relevanta si reflecta informatii actualizate

- Model de date Modelul de graf cu proprietati permite combinarea cu usurinta aseturilor de date din mai multe surse

Un alt avantaj al bazelor de date sub forma de graf Neo4j este faptul ca respectatoate principiile din modelul de consistenta ACID

Garantia data de principiile ACID este ca ofera un mediu sigur ın care sa functionezedatele Acronimul ACID reprezinta

1httpsneo4jcomuse-casesreal-time-recommendation-engine

26

bull Atomic Toate operatiile dintr-o tranzactie reusesc sau fiecare operatie este reluatabull Consistent La finalizarea unei tranzactii baza de date este solida din punct de

vedere structuralbull Izolat Tranzactiile nu se lupta una cu cealalta Accesul controversat la date este

moderat de baza de date astfel ıncat tranzactiile par sa se execute succesivbull Durabil Rezultatele aplicarii unei tranzactii sunt permanente chiar si ın cazul unor

defectiuniCand vine vorba de tehnologiile NoSQL cele mai multe baze de date sub forma de

graf (inclusiv Neo4j) utilizeaza un model de consistenta ACID pentru a asigura ca datelesunt stocate ın siguranta si ın mod consecvent

Am ales baza de date sub forma de graf ca optiune pentru stocarea datelor deoarecedin toate lucrarile si articolele citite a fost optiunea cea mai buna pentru un sistem derecomandare Deci acesta se mapeaza perfect pe cerintele functionale ale proiectului Sidin optiunile de baze de date sub forma de graf Noe4j a avut de departe cele mai multeavantaje ea fiind si cea mai utilizata

442 Cypher

Cypher 2 este un limbaj declarativ de interogare pentru bazele de date sub formade graf care permite interogarea si actualizarea rapida a datelor Cypher este un limbajrelativ simplu dar foarte puternic Interogarile foarte complexe ale bazei de date pot fiusor exprimate prin intermediul limbajului Cypher

Este conceput pentru a fi un limbaj de interogare uman Scopul lui principal este dea face interogarile mult mai simple si unele interogari care la bazele de date relationale nuerau posibile le face posibile Constructiile sale se bazeaza pe grafica si pe limba englezalucru care ajuta la scrierea mai intuitiva a interogarilor Este construit pentru a fi maiintuitiv pentru citire si nu neaparat pentru scriere

Cypher se bazeaza pe modelul Graph Property care ın plus fata de elementelegrafice standard ale nodurilor si muchiilor (numite relatii ın Cypher) adauga etichete siproprietati ca si concepte Nodurile pot avea zero sau mai multe etichete ın timp ce fiecarerelatie este de exact un singur tip Nodurile si relatiile au de asemenea zero sau mai multeproprietati

Chypher este limbajul de interogare folosit la bazele de date Neo4j deci este opti-unea implicita atunci cand se alege Neo4j

443 Maven

Maven 3 este un instrument de management software si de ıntelegere a proiectelorsoftware Pe baza conceptului unui model de obiect de proiect (POM) Maven poategestiona construirea raportarea si documentarea unui proiect printr-o informatie centrala

2httpsneo4jcomdevelopercypher-query-language3httpswwwjavatpointcommaven-tutorial

27

Obiectivul principal al lui Maven este acela de a permite unui dezvoltator sa ınte-leaga starea completa a efortului de dezvoltare ın cel mai scurt timp Avantajele Mavensunt

bull instalarea rapida a proiectului fara fisiere buildxml complicate doar un POMbull procesul de construire este standardizat pentru toate proiectelebull usor de ınvatat si de utilizatbull configurarea unui proiect este foarte rapidabull bine documentat

Am ales sa folosesc Maven deoarece este una din cele mai comune optiuni pentru aimporta librariile ıntr-un proiect si este si cel mai documentat Deci mereu cand esti pusın dificultate poti cauta pe internet sugestii

444 Spring Boot

Spring Boot 4 este un framework din cadrul Spring care ofera setari implicite pentruconfigurarea codului si adnotari pentru a lansa rapid proiecte noi ın executie Urmaresteabordarea rdquoConfigurarea defectiunilor vizionaterdquo pentru a evita un numar mare de linii decod pentru configuratii si pentru a ımbunatati procesul de dezvoltare

Avantajele Spring Boot sunt1 Face foarte usoara dezvoltarea de aplicatii bazate pe Spring cu Java sau Groovy2 Reduce timpul de dezvoltare si creste productivitatea3 Evita scrierea multor linii de cod adnotari si configurare XML4 Este foarte usor de integrat cu alte framework-uri din aceasi familie Spring cum ar

fi Spring JDBC Spring ORM Spring Data Spring Security etc5 Urmareste abordarea rdquoConfigurarea implicita a optiunilorrdquo pentru a reduce efortul

pentru dezvoltatori6 Ofera servere HTTP ıncorporate cum ar fi Tomcat Jetty etc pentru a dezvolta si

testa aplicatiile web foarte usor7 Ofera instrumentul CLI (Command Line Interface) pentru a dezvolta si testa apli-

catiile de tip rdquoSpring Bootrdquo (Java sau Groovy) din linia de comanda foarte usor sirapidAm ales ca optiune pentru partea de backend acest framework deoarece simplifica

foarte mult lucrurile Datorita lui un programator poate sa ısi concentreze mai tare energiape a construi proiectul din punctul de vedere al buissness-ului logic nu din punctul devedere al configurarilor necesare

445 Sencha CMD si ExtJS

Sencha CMD 5 este un instrument linie de comanda cross-platform care ofera multesarcini automate ın ciclul complet de viata al unei aplicatii ExtJS de la generarea unui

4httpswwwjavatpointcomspring-boot-tutorial5httpsdocssenchacomcmd

28

nou proiect la lansarea unei aplicatii ın productie

Sencha Cmd ofera o colectie de caracteristici puternice pentru economisirea timpu-lui care functioneaza ımpreuna cu Sencha ExtJS si Sencha Touch

Ext JS 6 este un framework pur JavaScript pentru construirea de aplicatii webinteractive cross-platform utilizand tehnici precum scripting Ajax DHTML si DOM

Avantajele framework-ului ExtJS sunt

1 Documentatia Extjs este foarte cuprinzatoare si bine ıntretinuta2 Aspectul cheie al bibliotecii EXTJS este suportul de tip cross-browser3 Framework-ul ExtJS ofera o multitudine de elemente UI Aceste elemente includ

forme casete de dialog file arbori si tabele4 Framework-ul ExtJS include suport pentru implementarile Ajax5 ExtJS ofera performante excelente Framework-ul este complet orientat spre obiecte

si este extensibil asta pentru ca este scris ın JavaScript

Pentru partea de frontend se foloseste framework-ul ExtJS deoarece are o arhitec-tura ce se mapeaza foarte bine pe proiectele de frontend si anume arhitectura bazata pecomponente Aceasta face ca ın proiect codul sa fie mult mai organizat si procesul dedezvoltare al proiectului sa fie mult mai scurt prin identificarea mai usoara a erorilor

446 Facebook API(Graph API)

Graph API 7 este modul principal de a pune date ın platforma Facebook si de aobtine date din platforma Facebook Este un API bazat pe HTTP pe care aplicatiile ılpot utiliza pentru interogarea datelor pentru a introduce postari noi pentru gestionareaanunturilor sau pentru a ıncarca fotografii

Este denumit Graph API dupa ideea unui rdquograf socialrdquo - o reprezentare sub formade graf a informatiilor de pe Facebook Este compus din

bull noduri - ın esenta obiecte individuale cum ar fi un utilizator o fotografie o paginasau un comentariu

bull muchii - conexiuni ıntre o colectie de obiecte si un singur obiect cum ar fi fotografiilede pe o pagina sau comentariile de la o fotografie

bull campuri - date despre un obiect cum ar fi ziua de nastere a unui utilizator saunumele paginii

De obicei se utilizeaza noduri pentru a obtine date despre un anumit obiect se uti-lizeaza muchii pentru a obtine colectii de obiecte legate de un singur obiect si se utilizeazacampurile pentru a obtine date despre un singur obiect sau mai multe obiecte dintr-ocolectie

Am folosit Facebook API ca solutie pentru a ımbunatati problema de rdquocold startrdquopentru ca este singurul site pe care marea majoritate a oamenilor au cont si salveazalucrurile care le plac Deci se potrivea perfect peste nevoile aplicatiei mele

6httpdocssenchacomextjs6207httpsdevelopersfacebookcomdocsgraph-api

29

447 Git

Git 8 este un sistem de control a versionarii pentru urmarirea modificarilor ın fisierelede pe computer si coordonarea activitatii asupra acestor fisiere ın randul mai multor per-soane Este utilizat ın principal pentru gestionarea codului sursa ın dezvoltarea de softwaredar poate fi folosit pentru a urmari schimbarile ın orice set de fisiere

Avantaje ale Git

bull Modelul distribuit numai ceea ce se doreste se face publicbull Branching-ul si merging-ul sunt usoarebull Fluxul de lucru este flexibilbull Integritatea datelor este asigurata Deoarece GIT utilizeaza arbori SHA1 coruperea

datelor din motive externe poate fi usor detectatabull Rapid Git este foarte rapid chiar si ın comparatie cu alte sisteme de control a

versionarii

Am folosit Git pentru a avea la proiect un back-up ın caz ca se ıntampla ceva cuproiectul salvat pe calculator

45 Arhitectura conceptuala

In figura 45 este prezentata arhitectura conceptuala a sistemului Acesta este ım-partit ın doua mari parti backend-ul si frontend-ul care comunica ıntre ele si ısi trimitinformatii

Se poate observa ca baza de date este de tip graf mai exact Neo4j si comunica cubackend-ul pentru a putea lucra cu datele stocate Backend-ul este structurat pe nivelefiecare cu un diferit rol si care trebuie parcurs pentru a procesa datele din interfata ınbaza de date Cele trei nivele sunt cel de Repository cel de Service si cel ControllerToate interogarile venite din interfata utilizator ajung ın nivelul de Controller Dupa ceinterogarile trec de securitatea sistemului ajung ın nivelul de Service Acolo se proceseazasi se afla partea de logica a aplicatiei Pentru a interactiona cu baza de date din Servicese apeleaza metodele din nivelul de Repository

In continuare backend-ul comunica prin protocolul HTTP cu interfata grafica cucare interactioneaza clientii aplicatiei Interfata este scrisa ın Ext JS si are o parte de Viewsi o parte de Controller care este cea care comunica cu backend-ul

Pentru partea de autentificare sistemul interactioneaza cu API-ul de la Facebookde la care ia dupa autentificare un access token Cu ajutorul acestuia ia dupa aceea datelenecesare pentru a putea crea un profil utilizatorului

8httpsguidesgithubcomintroductiongit-handbook

30

Figura 45 Arhitectura conceptuala

31

Capitolul 5

Proiectare de Detaliu siImplementare

In acest capitol vor fi prezentate detalii de implementare ale sistemului de recoman-dare incluzand o ımpartire al acestuia ın componentele care ıl cuprind

Obiectivul este de a prezenta arhitectura si modul de implementare al aplicatieipe baza datelor descoperite ın studiul bibliografic de la capitolul trei si cu tehnologiilehotarate la capitolul patru Pe langa asta va fi prezentata si structura bazei de date sideciziile luate pentru securitatea aplicatiei

51 Arhitectura sistemului

Din punctul de vedere al arhitecturii aplicatia se poate considera ca este alcatuitadin patru mari componente

1 API-ul de la Facebook2 Aplicatia client care reprezinta interfata grafica a aplicatiei3 Aplicatia server adica backendul aplicatiei si partea ın care se afla partea de rdquobusiness

logicrdquo4 Baza de date

Partea componenta reprezentata de API-ul de la Facebook este doar o componentacu care aplicatia se integreaza si pe care aceasta o foloseste In interactiunea cu ea interfatada o cerere de autentificare apare o fereastra de la Facebook ın care utilizatorul introducecredentialele de la API-ul de Facebook se primeste ınapoi un access token si cu ajutorulacestuia face o cerere pentru a primi datele personale ale utilizatorului pentru creeareaprofilului utilizator

Urmatoarea parte a aplicatiei este interfata utilizator frontend-ul care reprezintapartea cu care utilizatorul interactioneaza si locul unde ıi sunt afisate informatiile

Cererile din interfata ajung ın a treia parte componenta a sistemului partea deserver adica backend-ul aplicatiei Acolo toate cererile sunt citite si procesate iar raspun-

33

sul lor este trimis la interfata utilizator Aceasta este partea care reprezinta rdquogandireardquoaplicatiei Aceea este componenta care face legatura ıntre cererile utilizatorului din inter-fata si datele stocate ın baza de date

Ultima componenta a aplicatiei o reprezinta baza de date care are ca rol sa stochezedatele despre utilizatori produse si comenzi Ea este o baza de date sub forma de grafde tipul Neo4j Acolo se salveaza entitatile aplicatiei sub forma de noduri si dependenteleıntre acestea sub forma de relatii ıntre aceste noduri

Figura 51 Diagrama de rdquodeploymentrdquo

In figura 51 este prezentata diagrama de rdquodeploymentrdquo a sistemului cu cele patrucomponente ale sistemului Aplicatia client comunica cu API-ul de la Facebook prin pro-tocolul securizat HTTPS cu backend-ul prin protocolul HTTP iar backend-ul cu baza dedate prin JDBC

Aplicatia a putut fi ımpartita ın aceste componente separate deoarece fiecare dintreele poate functiona independent de celelalte comunica cu ele doar prin mesaje Din acestmotiv locul unde ruleaza acestea pot sa fie pe servere diferite In plus daca aplicatiaar fi pusa pe servere pentru utilizatori ar putea fi mai multe servere pe care ruleaza ocomponenta si prin rdquoload balancingrdquo sa se trimita cererile ımpartite ıntre ele

Cum astfel componentele nu depind foarte mult unele de altele si pot rula faraa le interesa de unde le sunt trimise cererile este arhitectura cea mai corecta deoarecedefectarea sau o posibila eroare la una din ele nu o influenteaza cu nimic pe o alta Dacatoate ar rula pe acelasi server o eventuala defectiune a acestuia ar ınsemna o defectiune aıntregului sistem Insa daca exista mai multe noduri si se afla pe servere diferite pot doartoate cererile sa fie redirectionate spre un nod care functioneaza si aplicatia sa functionezepentru clienti la fel ca ınainte

34

Un alt avantaj al arhitecturii ar fi faptul ca la o lansare viitoare catre clienti se poatelansa doar componenta la care s-au facut modificari De asemenea aplicatia ar putea aveape viitor si o componenta mobila Iar cum serverul e independent poate fi acelasi serverfolosit de o alta aplicatie client

511 Arhitectura componentei backend

Arhitectura backend-ului este si ea ımpartita ın mai multe pachete pentru o maibuna structura si pentru o cat mai mica dependenta ıntre diversele componente Astfelcuplarea este minima ıntre clase si eventualele modificari ulterioare pot fi mai usor defacut

Serverul a fost implementat ın Java cu ajutorul framework-ului Spring Boot iarmediul de dezvoltare folosit a fost Intellij IDEA

Din punctul de vedere al ımpartirii arhitectura serverului aplicatiei este structurataın patru pachete si o clasa ın afara acestora Acea clasa este rdquomainrdquo-ul aplicatiei este parteacare trebuie rulata pentru a porni serverul Din cauza ca este o aplicatie Spring Boot si nuuna String singura adnotare necesara pentru a sti ca aceea este clasa rdquoradacinardquoa aplicatieieste SpringBootApplication

Cele patru pachete ale serverului sunt1 Cel de domeniu (domain) cu clasele POJO care reprezinta entitatile din baza de

date2 Cel de rdquomagazierdquo (repositories) care este cel care face direct actiunile ın baza de date3 Cel de serviciu (services) ın care se afla partea de logica a ıntregii aplicatii4 Cel de web ın care se afla clasele de rdquocontrollerrdquo

Figura 52 Diagrama de pachete pentru backend

35

Ca si dependente nivelul de web ıl foloseste pe cel de seviciu cel de serviciu ılfoloseste pe cel de rdquomagazierdquo iar clasele din pachetul de domeniu sunt folosite ın toatecelelalte pachete

In continuare voi prezenta pe rand fiecare nivel al serverului adica fiecare pachet

Figura 53 Diagrama de clase pentru pachetul rdquodomainrdquo

36

Nivelul de domeniu (domain) este alcatuit ın primul rand din clasele care suntentitati ın baza de date Acestea sunt reprezentate de toate clasele ce stocheaza informatiidespre utilizatori si despre produse si comenzi Pe langa informatiile personale despre unutilizator de genul numelui email-ului sau data nasterii care sunt salvate ın entitateapersoana se stocheaza despre utilizator ın clase diferite informatii de genul locului undelocuieste locul unde a copilarit locurilor unde a facut scoala locului unde lucreaza sau celmai important pentru aplicatia aceasta lucrurilor care ıi plac In afara acestor informatiidespre utilizatori sunt si clase cu informatiile despre prieteni despre produse sau desprecomenzi

Din cauza faptului ca aplicatia este de tipul unei retele sociale ın care exista prieteniiıntre persoane exista dependente ıntre toate entitatile aplicatiei Acesta este si motivulpentru care am ales baza de date sub forma de graf pe care sa se mapeze toate acesteentitati sub forma de noduri si toate aceste dependente sub forma de relatii

In pachetul de domeniu se afla si trei subpachete Unul dintre ele este pentruclasele folosite pentru a trata erorile aplicatiei In interiorul acestui pachet se afla douaclase pentru eroare si o exceptie cea folosita ın cazul ın care nu se gaseste ceea ce doresteutilizatorul Pe langa asta este clasa care are ca obiect raspunsul dat de sistem ın cazulunei erori la server Aceasta contine ın interiorul sau pe langa codul erorii si detalii despreeroarea trimisa Aceasta lista de detalii e reprezentata de obiectele de tipul celei de-a treiaclase din pachetul acesta

Celelalte doua subpachete aflate ın acest nivel sunt cele care contin clasele specialede cerere sau raspuns care au ajutat la maparea acestora mai bine In multe cazuri nua fost necesara trimiterea la interfata utilizator a tuturor informatiilor stocate despre oentitate si de aceea am ales sa creez ın aceste cazuri un obiect auxiliar care sa fie folositpe post de raspuns

Figura 54 Diagrama de clase pentru pachetul rdquorepositoriesrdquo

37

Cel de-al doilea nivel al aplicatiei backend este cel de rdquomagazierdquo (repositories) carecontine doar interfete de tip rdquoRepositoryrdquo

Aceste interfete sunt cele care fac operatiile directe asupra entitatilor din baza dedate

Unele interfete doar extind interfata care are deja implementate metodele CRUDsi din acest motiv nu au metode suplimentare iar altele au si metode ın plus care au carol sa execute interogari mai complexe asupra bazei de date In acele metode se pot scrieinterogarile ın Cypher pentru a putea primi informatii despre mai multe noduri sau desprerelatiile dintre acestea sau si pentru a returna doar anumite rezultate care ındeplinescanumite conditii In felul acesta a fost implementata si cererea de oferire a recomandarilorIn acel caz sistemul returneaza produsele care au ın descriere unul din lucrurile care se aflaın lista de obiecte sau servicii primite de la Facebook ca ıi plac utilizatorului

Nivelul de rdquoRepositoryrdquo este folosit direct de cel de-al treiea nivel cel de servi-ciu Acesta este nivelul la care se executa logica aplicatiei unde se comanda modul defunctionare al ıntregii aplicatii

Figura 55 Diagrama de clase pentru pachetul rdquoservicesrdquo

Pe acest nivel ajung toate cererile din server dupa ce trec de verificarile de securitateIn acest pachet se afla si clasa de securitate care face verificarile necesare In aceasta clasaexista o metoda ce se apeleaza la prima cerere cea de salvare a datelor de la Facebookdespre utilizator si care codifica id-ul utilizatorului si ıl trimite pe raspuns ınapoi interfeteiPe langa asta ın acea clasa se afla si o metoda care verifica faptul ca id-ul codificat esteal unui utilizator cu rol corespunzator pentru a face acea cerere

In plus ın acest pachet se afla si toate celelalte clase care fac diverse operatii pedatele din baza de date si dau raspunsuri cererilor din interfata Aici se afla logica care

38

comanda actiunile asupra utilizatorilor asupra prietenilor acestora asupra produselor siasupra comenzilor

Ultima clasa a acestui nivel este cea care se ocupa de trimiterea de email-uri Incazul ın care se face o noua comanda de catre un utilizator toti producatorii produselor depe comanda sunt notificati despre produsele lor pe care le doreste utilizatorul Din serviciulde comanda se apeleaza serviciul de email pentru fiecare producator din lista celor care auproduse care se afla pe lista comenzii utilizatorului

Ultimul si cel mai aproape de interfata utilizator este nivelul de web Acolo se aflatoate clasele de rdquoControllerrdquo ale aplicatiei server

Figura 56 Diagrama de clase pentru pachetul rdquowebrdquo

Toate cererile din interfata utilizator ıncearca sa se mapeze pe rutele declarate ınclase pentru a fi procesate ın metoda corespunzatoare Toata aceasta parte este foarteusor de implementat si mai ales foarte lizibil pentru programatori datorita adnotarilor dinJava Cu ajutorul acestora trebuie doar specificat care este numele URL-ului cererii careeste tipul de obiect asteptat si daca se trimite ca rdquoquery stringrdquo pe URL sau ın interiorulcorpului cererii si tipul raspunsului Pentru fiecare cerere care nu este apelata ın parteaneautentificata a utilizatorului primul lucru care se apeleaza este metoda de securitatepentru a verifica rolul si id-ul utilizatorului Daca din punctul de vedere al securitatii totuleste ın regula se apeleaza metoda corespunzatoare din pachetul de serviciu

39

O singura clasa este diferita de restul ın pachetul de controller si aceea este clasa deeroare Acolo se mapeaza erorile aparute ın timpul cererii si se trimite ınapoi ın interfatagrafica un raspuns cu cod de eroare specific nu numai 500 Generic Application Exceptioncum ar trimite fara aceasta clasa si cu detalii despre motivul aparitiei erorii

Datorita folosirii adnotarilor din java nu a fost necesara folosirea unor rdquodesignpatternrdquo-uri ın sistem De exemplu pentru a folosi ın nivelul de web ceva din pachetulde servicii trebuia doar acel obiect sa aiba adnotarea Autowired si se ınlocuieste atatfolosirea rdquodesign patternrdquo-ului Singleton cat si a celui de Factory Acel obiect nu trebuiecreat sau initializat se face asta implicit datorita adnotarii si de asemenea este folositapeste tot aceeasi instanta

In concluzie toate cererile venite din interfata grafica ajung ın nivelul de rdquocontrollerrdquode unde sunt trimise la cel de rdquoservicerdquopentru a fi procesate si facute eventualele modificarinecesare ın baza de date ca apoi raspunsul sa fie trimis ınapoi spre aplicatia client pentruafisare

512 Arhitectura componentei frontend

A doua componenta implementata a sistemului este aplicatia client frontend-ulAceasta a fost scrisa ın Java Script cu ajutorul framework-ului Ext JS compilarea

se face cu ajutorul Sencha CMD si mediul de implementare a fost IntelliJ IdeaCu ajutorul framework-ului Ext JS se scriu componente care apoi se initializeaza

unele pe altele Aplicatia porneste cu fisierul Applicationjs care este un fel de rdquomainrdquopentru aplicatie Aceasta initializeaza alte componente care la randul lor includ altecomponente si tot asa Structura poate fi foarte usor comparata cu una arborescenta dinacest punct de vedere

Framework-ul a fost creat sa functioneze ın felul acesta pentru ca scopul componen-telor este sa fie scrise ın asa fel ıncat sa poata pe viitor sa fie utilizate din nou Una dindorintele majore ın programare tot timpul este de a se scrie cod ıntr-o maniera ın care safie cat mai reutilizabil Iar framework-ul Ext JS exact asta ıncearca

Arhitectura aplicatiei client se gaseste ın figura 57 si este la randul ei ımpartita ınpachete ca si cea de server Similar cu pachetul de rdquodomainrdquo de la aplicatia de backendeste pachetul rdquomodelrdquo al interfetei utilizator Aici sunt rdquoclaserdquo care sunt simple POJO sicare sunt apoi folosite ın nivelele urmatoare Sunt mai putine decat clasele din rdquostorerdquodeoarece daca raspunsul de la server nu trebuie procesat nu sunt necesare se pot mapadirect obiectele din rdquostorerdquo pe componentele interfetei utilizator

Urmatorul nivel este cel pe care se afla clasele de rdquostorerdquo Acestea sunt cele careexecuta cererea spre backend si face legatura ıntre client si server Daca are o clasa derdquomodelrdquodeclarata atunci populeaza acel obiect cu datele primite de la server iar ın cazul ıncare nu este declarat un model se trimit datele exact asa cum s-au primit la nivelul urmatorde rdquoviewrdquo Acest nivel seamana din punct de vedere al functiei cu cel de rdquorepositoryrdquo de laaplicatia server deoarece ambele au rol de legatura Aceea facea legatura ıntre aplicatiesi baza de date si aceasta face legatura ıntre aplicatia client si aplicatia server

40

Figura 57 Diagrama de clase pentru aplicatia web

Cel de-al treilea pachet al aplicatiei este cel de rdquoviewrdquo In acest pachet se afla claselecare alcatuiesc partea vizuala a aplicatiei La randul ei si aceasta este alcatuita tot dincomponente Aplicatia deschide ın primul rand Main-ul care determina aparitia paginii deHome si afisarea ın meniu a optiunilor posibile ın functie de autentificare si rol Clasele deaici se executa de fapt la deschiderea aplicatiei fiind rdquosingle page applicationrdquo si tot atuncise ıncarca pe pagina componentele Ca si arhitectura a pachetului acesta este ımpartit larandul sau ın subpachete Pentru o mai buna organizare exista patru subpachete cateunul pentru fiecare tip de utilizator In felul acesta toate rdquoviewrdquo-urile care sunt specificeunui utilizator cu un anumit rol se afla ın acelasi subpachet

Cele patru subpachete existente ın pachetul rdquoviewrdquo sunt

1 Pachetul rdquomainrdquo care cuprinde rdquoviewrdquo-urile care se afla ın partea neautentificata aaplicatiei

2 Pachetul rdquoclientrdquo continand rdquoviewrdquo-urile pe care le poate accesa un utilizator simplu3 Pachetul rdquoproducerrdquo specific actiunilor unui utilizator care are rol de producator4 Pachetul rdquoadminrdquo care contine toate rdquoviewrdquo-urile care ıi apar unui utilizator care este

administrator al aplicatiei

Ultimul pachet si nivel al aplicatiei client este cel de rdquocontrollerrdquo In acest pachet

41

se afla clasele care fac actiunile din interfata grafica In timp ce pachetul rdquoviewrdquo continedoar partea grafica a aplicatiei adica modul ın care aceasta trebuie sa arate pachetulrdquocontrollerrdquo contine actiunea acestora modul ın care aplicatia trebuie sa functioneze

Ca si arhitectura si acest pachet a fost ımpartit la randul lui tot ın cele patrusubpachete ca si pachetul rdquoviewrdquo adica rdquomainrdquo rdquoclientrdquo rdquoproducerrdquo si rdquoadminrdquo In pluspentru a fi usor de gasit ce clasa de rdquocontrollerrdquo apartine carui rdquoviewrdquo am ales ca cele douasa aiba acelasi nume In felul acesta daca se doreste sa se gaseasca actiunile unui rdquoviewrdquose poate cauta dupa o clasa cu acelasi nume ın pachetul rdquocontrollerrdquo Numarul claselor dinacest pachet este mai mic decat cel al claselor din rdquoviewrdquo deoarece nu toate paginile dininterfata au actiuni suplimentare Daca singura actiune este ıncarcarea paginii cu date dela server adica doar o actiune simpla de GET datele se ıncarca cu ajutorul rdquostorerdquo-ului laıncarcarea paginii si nu este necesara nici o actiune suplimentara Paginile pe care se potface si actiuni de alt gen sau se deschid noi ferestre au nevoie de clase de rdquocontrollerrdquo

In concluzie arhitectura aplicatiei client este una bazata pe componente care ıncearcasa foloseasca cat mai multe clase reutilizabile

52 Structura bazei de date

Baza de date a aplicatiei este de tip graf de tipul Neo4j Pentru utilizare exista unprogram numit Neo4j ce trebuie instalat Acest program are si o interfata grafica ın carese pot vizualiza datele sub forma grafica si ın care se pot scrie de asemenea si interogariın limbajul acestei baze de date adica Cypher

Fiind o baza de date sub forma de graf datele stocate sunt salvate ın structurade date sub forma de noduri si relatii Entitatile din pachetul de domeniu din aplicatiabackend se gasesc ın baza de date sub forma unor noduri iar dependentele dintre nodurise mapeaza ın baza de date sub forma unor relatii Un element diferit fata de alte tipuride baze de date este faptul ca pe relatiile dintre noduri se pot salva atribute cum este ınaplicatie cazul pentru prieteniile dintre persoane In cazul acestora pe relatia dintre nodurise salveaza daca prietenia a fost sau nu acceptata

Pentru fiecare clasa POJO din aplicatia server clasa ce are doar metodele get si setsi se afla ın pachetul domain exista cate un tip de nod diferit ın baza de date cum estesi marcat ın diferite culori ın figura 58 Fiecare tip de nod are atributele proprii care potlua valori sau pot fi nule Iar fiecare obiect din Java reprezinta un nod diferit ın baza dedate

Neo4j a fost cea mai buna optiune pentru baza de date pentru ca aplicatia poate ficonsiderata o retea sociala Acest lucru se datoreaza relatiilor de prietenie dintre persoanesi a multiplelor relatii ıntre noduri Toate nodurile se afla ın acceasi componenta conexadeci nu exista noduri izolate care sa nu aiba nici o legatura cu nici un alt nod

Datorita acestei structuri a bazei de date este posibila implementarea cererii derecomandare ca o simpla interogare ın baza de date aceasta fiind cea mai simpla metodade implementare a unui sistem de genul acesta una mult mai complexa ar fi fost un

42

algoritm de ınvatare care sa ınvete tipare ale utilizatorilor si sa recomande cadouri pe bazaacestor informatii

Figura 58 Diagrama bazei de date pentru doi utilizatori

Un alt avantaj al acestui tip de baza de date este faptul ca datele nu sunt duplicateın baza de date Spre exemplu daca mai multi utilizatori au ca locatie acelasi oras nu secreaza cate un nod cu acea locatie de mai multe ori ci acel unic nod va avea cate o relatiecu fiecare utilizator care are ca locatie acel oras

In concluzie structura bazei de date a fost aleasa ın acest fel datorita tipului apli-catiei adica asemanatoare cu o retea sociala si datorita implementarii simple a unui sistemde recomandare pe o asemenea baza de date

53 Fluxul pentru diferite operatii

Pentru aplicatie cele mai importante cazuri de utilizare sunt salvarea informati-ilor despre utilizator primite de la Facebook pentru crearea unui profil si recomandareacadourilor pentru un utilizator al aplicatiei Din aceasta cauza cele doua cazuri de utilizarevor fi prezentate mai ın detaliu ın continuare

43

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 2: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

FACULTATEA DE AUTOMATICA SI CALCULATOAREDEPARTAMENTUL CALCULATOARE

DECAN DIRECTOR DEPARTAMENTProf dr ing Liviu MICLEA Prof dr ing Rodica POTOLEA

Absolvent Denisa-Andreea BIRIS

SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL SOCIAL

1 Enuntul temei Proiectul ısi propune realizarea unui sistem de recomandare cadouriSistemul urmareste captarea datelor personale despre utilizator dintr-o aplicatie ex-terna pentru a oferi recomandari de calitate ınca de la prima autentificare

2 Continutul lucrarii Cuprins Introducere Obiectivele Proiectului Studiu Bibli-ografic Analiza si Fundamentare Teoretica Proiectare de Detaliu si ImplementareTestare si Validare Manual de Instalare si Utilizare Concluzii si Dezvoltari Ulte-rioare Bibliografie Anexe

3 Locul documentarii Universitatea Tehnica din Cluj-Napoca Departamentul Cal-culatoare

4 Consultanti Asist Prof Ing Cosmina IVAN

5 Data emiterii temei 1 Noiembrie 2017

6 Data predarii 9 Iulie 2018

Absolvent

Coordonator stiintific

FACULTATEA DE AUTOMATICA SI CALCULATOAREDEPARTAMENTUL CALCULATOARE

Declaratie pe proprie raspundere privindautenticitatea lucrarii de licenta

Subsemnatul(a) legiti-

mat(a) cu seria nrCNP autorul lucrarii

elaborata ın vederea sustinerii examenului de finalizare a studiilor de licenta la Facul-tatea de Automatica si Calculatoare Specializareadin cadrul Universitatii Tehnice din Cluj-Napoca sesiunea a an-ului universitar declar pe proprie raspundere ca aceasta lucrare esterezultatul propriei activitati intelectuale pe baza cercetarilor mele si pe baza informatiilorobtinute din surse care au fost citate ın textul lucrarii si ın bibliografie

Declar ca aceasta lucrare nu contine portiuni plagiate iar sursele bibliografice aufost folosite cu respectarea legislatiei romane si a conventiilor internationale privind drep-turile de autor

Declar de asemenea ca aceasta lucrare nu a mai fost prezentata ın fata unei altecomisii de examen de licenta

In cazul constatarii ulterioare a unor declaratii false voi suporta sanctiunile admin-istrative respectiv anularea examenului de licenta

Data Nume Prenume

Semnatura

Cuprins

Capitolul 1 Introducere 111 Contextul proiectului 112 Motivatia 113 Continutul lucrarii 2

Capitolul 2 Obiectivele Proiectului 321 Obiectivul principal 322 Obiective specifice 3

Capitolul 3 Studiu Bibliografic 531 Modul de functionare al sistemelor de recomandare 532 Tipuri de sisteme de recomandare 633 Abordarea Netflix 834 Sisteme de recomandare cu Neo4j 935 Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor 1036 Solutii similare 11

Capitolul 4 Analiza si Fundamentare Teoretica 1541 Cerinte functionale 1542 Cerinte non-functionale 1643 Cazuri de utilizare 16

431 Recomandare cadouri 18432 Adaugare produs 20433 Modificare rol utilizator 23

44 Perspectiva tehnologica 26441 Neo4j 26442 Cypher 27443 Maven 27444 Spring Boot 28445 Sencha CMD si ExtJS 28446 Facebook API(Graph API) 29447 Git 30

1

45 Arhitectura conceptuala 30

Capitolul 5 Proiectare de Detaliu si Implementare 3351 Arhitectura sistemului 33

511 Arhitectura componentei backend 35512 Arhitectura componentei frontend 40

52 Structura bazei de date 4253 Fluxul pentru diferite operatii 43

531 Fluxul pentru sub-sistemul de creare al unui utilizator si preluareadatelor necesare 44

532 Fluxul pentru sub-sistemul de recomandare 4554 Securitatea sistemului 46

Capitolul 6 Testare si Validare 4961 Testare unitara 4962 Cazuri de testare 5063 Evaluarea sistemului de catre utilizatori 53

Capitolul 7 Manual de Instalare si Utilizare 5571 Resurse necesare 5572 Manualul de instalare 55

721 Instalare si pornire baza de date 55722 Tehnologii necesare si pornirea aplicatiei backend 56723 Tehnologii necesare si pornirea aplicatiei frontend 56724 Configurarea integrarii cu Facebook 57

73 Manualul de utilizare 57

Capitolul 8 Concluzii 6181 Analiza rezultatelor obtinute 6182 Dezvoltari ulterioare 61

Bibliografie 63

Lista tabelelor 65

Lista figurilor 67

Anexa A Glosar de termeni 69

2

Capitolul 1

Introducere

In acest capitol vor fi prezentate notiuni despre contextul proiectului motivatiade la care a venit ideea proiectului si de asemenea se va prezenta continutul lucrarii pecapitole

11 Contextul proiectului

In prezent cele mai mari site-uri ale lumii din punct de vedere al numarului de uti-lizatori au ınceput ın ultimii ani sa aiba o sectiune de recomandari Acestea pot reprezentaproduse pe site-urile de comert online filme pe site-urile de vizionare de filme carti pesite-urile sau aplicatiile pentru citit sau persoane pentru site-urile de socializare

Popularitatea sistemelor de recomandare a crescut foarte mult ın ultimii ani datoritabeneficiilor multiple pe care le aduc Recomandarile aduc avantaje atat celui care vrea savanda ceva cat si celui care vrea sa cumpere deoarece unuia ıi face vanzari mai mariın timp ce celuilalt ıi da sugestii de lucruri de care ar putea avea nevoie si a uitat Iarpopularitatea lor creste tot mai tare cu cat sunt mai utile recomandarile Aceste sistemede recomandare trebuie de fapt sa faca o rdquoprezicererdquo asupra lucrurilor care i-ar placea unuiutilizator

O problema cu care multi oameni se confrunta este cumparatul cadourilor In multesituatii desi acel om ne este foarte apropiat si ıl cunoastem foarte bine tot ne este foartegreu sa gasim un cadou potrivit pentru acesta De aceea o aplicatie care sa recomandecadouri care sa creeze recomandari specializate pentru o anumita persoana ar avea o uti-litate foarte mare pentru oricine

12 Motivatia

Motivatia aplicatiei o reprezinta de fapt lipsa unei aplicatii similare pe piata panaın momentul documentarii si ın acelasi timp utilitatea uneia

1

Toti oamenii se confrunta mai devreme sau mai tarziu cu problema gasirii cadouluiperfect pentru cineva din viata lor In multe cazuri aceasta problema poate fi o adevaratacatastrofa ce consuma energie timp si rabdare pentru cel care trebuie sa cumpere cadoulDe accea scopul aplicatiei este de a usura viata oamenilor prin oferirea unor variante decadouri specifice pentru exact acea persoana

Din toata cercetarea facuta pe aceasta tema nu am gasit nici o aplicatie de acestgen care sa ofere recomandari specializate pentru o anumita persoana

13 Continutul lucrarii

In aceasta sectiune vor fi prezentate capitolele acestui document si vor fi de asemeneasi descrise sumar ca si continut

bull Introducere (Capitolul 1) - ın acest capitol se va prezenta de fapt contextul proiec-tului motivatia de la care s-a pornit cand a fost ınceput si de asemenea e cuprinsaın ea si aceasta descriere a continutului pe capitole

bull Obiectivele Proiectului (Capitolul 2) - ın acest al doilea capitol sunt prezentate obiec-tivele proiectului atat obiectivul principal cat si obiectivele secundare ce doresc a fiındeplinite la final

bull Studiu Bibliografic (Capitolul 3) - cel de-al treilea capitol este reprezentat de studiulbibliografic unde vor fi prezentate diverse concepte teoretice de la care s-a pornit cuproiectul lucrari si articole prezentate de altii pe teme ce au legatura cu aplicatia side asemenea solutiile existente care se apropie de aceasta lucrare

bull Analiza si Fundamentare Teoretica (Capitolul 4) - ın capitolul de analiza si fun-damentare teoretica vor fi prezentate cerintele de la care porneste proiectul atatcele functionale cat si cele non-functionale prezentarea cazurilor de utilizare prin-cipale ale proiectului si de asemenea o analiza asupra tehnologiilor propuse pentruacest proiect De asemenea va contine si o arhitectura conceptuala a sistemului lamomentul de ıncepere al acestuia

bull Proiectare de Detaliu si Implementare (Capitolul 5) - cel de-al cincilea capitol pre-zinta modul de implementare al proiectului Acest lucru presupune schema arhi-tecturii proiectului si de asemenea si o descriere a fluxurilor de baza ale aplicatieiIn plus este descrisa structura dupa care s-a construit baza de date sub forma degraf din ce noduri si ce relatii In ultimul rand este descris modul ın care a fostimplementata securitatea sistemului

bull Testare si Validare (Capitolul 6) - acest capitol descrie modurile ın care aplicatia afost testata atat pe componente cat si validarea finala pe utilizatori reali

bull Manual de Instalare si Utilizare (Capitolul 7) - penultimul capitol prezinta tehnologi-ile ce trebuie instalate pentru a face sistemul sa functioneze De asemenea se vaprezenta modul ın care sistemul poate fi utilizat

bull Concluzii (Capitolul 8) - ın ultimul capitol vor fi analizate rezultatele obtinute si sevor descrie noi extensii ce pot fi implementate pentru a ımbunatati sistemul

2

Capitolul 2

Obiectivele Proiectului

In acest capitol se va prezenta obiectivul principal al lucrarii cel de la care a pornittoata ideea proiectului Apoi ın continuare se vor prezenta obiectivele secundare alepoiectului care au dus la modul ın care a fost acesta implementat

21 Obiectivul principal

Scopul principal al acestui proiect consta ın construirea unui sistem de recomandarecare sa ajute utilizatorii sa poata sa cumpere cadouri pentru cunoscuti ıntr-un mod multmai eficient Sistemul va fi o aplicatie web care va avea utilizatori ce se vor putea auten-tifica si dupa stabilirea unui profil propriu cunoscutii rudele sau prietenii vor putea saprimeasca sugestii de cadouri exact pentru acea persoana Pentru cadouri vor fi introdusede catre producatori diverse obiecte si servicii In felul acesta tot procesul de cumparare alunui cadou devine mult mai usor pentru persoana care ıl cumpara si cadourile devin multmai utile pentru cei care le primesc

22 Obiective specifice

Obiectivele specifice care se va urmari sa fie atinse ın cadrul acestui proiect sunturmatoarele

bull Studierea mai multor tipuri de baze de date de la cele relationale la cele No SQLsi analizarea lor pentru a stabili care este cea mai potrivita pentru un sistem derecomandare de acest gen

bull Studierea despre diferitele tipuri de sisteme de recomandare de la cele de bazaadica filtrare bazata pe continut si filtrare colaborativa la combinatia dintre eleadica sistem de recomandare hibrid pana la cele mai putin folosite adica pe bazademografica bazata pe cunostinte sau bazata pe utilitate Iar dupa aceea alegereacelei mai potrivite metode pentru un sistem de recomandare cadouri

3

bull Intelegerea conceptului de rdquocold startrdquo la sisteme de recomandare ca problema a aces-tora si gasirea unor solutii care ar putea sa ınlature sau cel putin sa ımbunatateascaaceasta problema

bull Documentarea despre diferite metode de construire a unui profil al utilizatorului sidin aceste metode alegerea celei mai potrivite din punct de vedere al timpului care ıitrebuie sistemului pana cand rdquoınvatardquo suficiente lucruri despre utilizator ıncat poateface recomandari corecte

bull Pe baza tuturor cunostintelor acumulate ın urma studiului construirea unei aplicatiiweb ca demonstratie a alegerilor facute

4

Capitolul 3

Studiu Bibliografic

Obiectivul acestui capitol este prezentarea conceptelor teoretice la baza carora staacest proiect Vor fi prezentate concepte precum modul de functionare al sistemelor derecomandare tipurile de sisteme de recomandare abordarea celor de la Netflix asupradomeniului Neo4j ca solutie pentru un sistem de recomandare utilizarea unei retele socialepentru crearea profilului unui utilizator si reteaua Facebook ca exemplu de astfel de reteaiar ın final solutii similare

31 Modul de functionare al sistemelor de recoman-

dare

Un sistem de recomandare este o tehnologie implementata ın situatiile ın care ar-ticole (produse filme evenimente) sunt recomandate utilizatorilor (clienti vizitatori uti-lizatori de aplicatii cititori) sau invers Numarul mare al utilizatorilor acestor aplicatiieste ceea ce face ca problema sa fie dificila si costisitoare de rezolvat

Motoarele de recomandare sunt ın esenta instrumente de filtrare a datelor careutilizeaza algoritmi si date pentru a recomanda cele mai relevante elemente unui anumitutilizator [9] Sau ın termeni simpli nu sunt altceva decat o forma automatizata a unuirdquovanzator ıntr-un magazin de hainerdquo Lui i se cere un produs si el nu numai ca arata acelprodus dar si altele asemanatoare pe care le-am putea cumpara

Un sistem de recomandare are trei faze de baza dupa cum este prezentat si ındiagrama 31 pe baza carora functioneaza Prima faza este cea de colectare a datelorSistemele de recomandare se bazeaza mereu pe date anterioare deci faza de ınceput ıncare acumuleaza informatii este esentiala si de multe ori o problema foarte grea de rezolvatAceasta problema se mai numeste si rdquocold startrdquo Problema este reprezentata de faptul caun utilizator nou al unei aplicatii nu are informatii stocate despre el sau despre activitatealui fiind nou Iar sistemele de recomandare nu pot sa stie de fapt ce ıi place lui decat dupace utilizeaza o perioada aplicatia De multe ori solutia adusa de oameni pentru aceastaproblema este un chestionar de ıntrebari adresat utilizatorului care sa ıl poata face sa se

5

Figura 31 Fazele unui sistem de recomandare1

ıncadreze ıntr-un tipDe fapt din aceasta cauza sistemele de recomandare devin tot mai bune si mai

exacte cu cat sunt folosite mai mult deoarece sunt stocate tot mai multe informatii despreutilizator

Cea de-a doua faza a unui sistem de recomandare este cea de ınvatare Acoloaplicatia trebuie sa stocheze datele despre utilizator si trebuie la urmatoarea recomandaresa se bazeze pe cele dinainte si ın functie de ele sa o faca Acest lucru poate fi realizat fiedirect pe baza setului de date colectat ın faza de colectare a informatiilor care ar puteafi bazat pe memorie sau bazat pe model fie prin activitatile utilizatorului care au fostobservate

A treia faza este cea de recomandare propriu-zisa ın care doar utilizatorul facecererea de recomandari si acestea ıi sunt trimise

32 Tipuri de sisteme de recomandare

In continuare ca studiu bibliografic au fost tipurile sistemelor de recomandare [11]Ca si teorie sunt mai mute tipuri de sisteme de recomandare si o reprezentare graficaa acestor tipuri este prezentata ın figura 32 Cea mai de baza ımpartire este ın douacategorii recomandari bazate pe continut si recomandari bazate pe filtrare colaborativa

Filtrarea bazata pe continut creeaza un profil de utilizator bazat pe o metoda deınvatare pentru a determina elementele pe care un anumit utilizator le-ar dori De exemplusite-ul poate utiliza un sistem de cuvinte cheie care sugereaza articole cu cuvinte cheiesimilare ın descrierea unui element pe care utilizatorul l-a cumparat anterior

Recomandarile bazate pe filtrare colaborativa se inspira din similaritatile cu ceilaltiutilizatori Gasesc utilizatori asemanantori cu cel pentru care se face recomandarea pebaza actiunilor din trecut despre aceia si se recomanda lucruri care le plac celorlalti Acesttip de recomandare se potriveste perfect cu recomandarile de filme Acolo un om cu gusturi

1httpswwwsciencedirectcomsciencearticlepiiS1110866515000341

6

asemanatoare va putea sa recomande cel mai bine un alt film unui prieten Cea mai simplaimplementare pentru asa ceva este sub forma unei matrici cu spatii goale ın locurile undenu se cunoaste informatie

Pe langa aceste tipuri de recomandari mai sunt si altele dar care nu sunt folosite lafel de des

Figura 32 Tipurile sistemelor de recomandare2

In filtrarea bazata pe criterii demografice se fac recomandari catre utilizatori pebaza informatiilor lor demografice Sistemul va sugera elemente care au fost selectate dealti utilizatori care se ıncadreaza ın acelasi profil demografic

Filtrarea bazata pe utilitate se bazeaza pe utilitatea pe care utilizatorul o va obtinede la produs Poate include lucruri precum fiabilitatea si disponibilitatea vanzatoruluipentru a se asigura ca recomanda produse usor de obtinut de catre utilizator

Filtrarea bazata pe cunostinte recomanda selectii pe baza preferintelor si modelelorde cumparare cunoscute despre utilizator Intrucat sistemul va sti ce a cumparat con-sumatorul ın trecut acesta poate face recomandari ın functie de ceea ce ar putea satisfaceaceste nevoi ın viitor

Filtrarea hibrida combina doua sau mai multe tehnici de recomandare diferite pentrua crea un sistem de recomandare mai detaliat

2httpswwwsciencedirectcomsciencearticlepiiS1110866515000341f0005

7

33 Abordarea Netflix

Foarte multa cercetare ın domeniul sistemelor de recomandare a fost influentata decei de la Netflix

Figura 33 Tipuri de recomandari oferite de Netflix3

Netflix este un serviciu de streaming care permite clientilor sa vizioneze o gamalarga de emisiuni TV filme documentare si multe altele pe mii de dispozitive conectatela internet

In figura 33 este o imagine a site-ului cu tipurile diferite de recomandari pe careacestia le ofera

Cheia succesului Netflix consta ın capacitatea lor de a anticipa ceea ce le placeutilizatorilor motiv pentru care fiecare doua din trei ore de vizionare ın Netflix provin dinrecomandari In trecut Netflix au folosit informatii despre sex si varsta pentru a determinace filme sa recomande Acum ei folosesc de exemplu ceea ce utilizatorul a urmaritınainte a cautat cat timp petrece utilizatorul vizionand filme si tipul de dispozitiv utilizatPredictiile din motorul de recomandare Netflix nu se bazeaza doar pe comportamentulutilizatorului ci si pe context (cum ar fi timpul zilei) popularitatea titlurilor noutateadiversitatea si cat de recent a fost scos filmul sunt factori importanti [7]

Premiul Netflix a fost o competitie lansata ın 2006 pentru cel mai bun algoritm defiltrare colaborativa pentru a prezice ratingurile utilizatorilor pentru filme pe baza eva-luarilor anterioare fara alte informatii despre utilizatori sau filme adica fara ca utilizatoriisau filmele sa fie identificate stiind doar numerele atribuite pentru concurs ale acestoraPremiul pentru castigator consta ın 1 milion de dolari Peste 2000 de echipe au depusseturile de predictie si peste 650 de echipe au depasit precizia algoritmului actual al Netflix

3httpstechblogglomexcompostrecommender-systemshtml

8

cu mai mult de 5 [11] Castigatorul a fost echipa BellKors Pragmatic Chaos care adepasit algoritmul Netflix cu 1006

Cei de la Netflix au fost extrem de multumiti de rezultatul obtinut si nu numai caau ıncorporat acel algoritm ın algoritmul lor existent de recomandare dar au initiat si o adoua editie a competitiei

34 Sisteme de recomandare cu Neo4j

Urmatoarea parte a studiului bibliografic s-a axat pe bazele de date de tip grafGraphDB si mai exact Neo4j ın comparatie cu celelalte tipuri de baze de date adica celerelationale In cartea [10] sunt prezentate aceste concepte din punct de vedere teoretic siın lucrarile de master [5] si [1] este prezentata aceasta comparatie ıntre diferite tipuri debaze de date pe o aplicatie reala

Limbajul care se foloseste ın bazele de date Neo4j este Cypher Cu ajutorul acestuiase mapeaza query-urile pe noduri si relatii Din punct de vedere teoretic diferenta ıntrebazele de date relationale si cele sub forma de graf consta ın modul ın care sunt stocatedatele In timp ce ın bazele de date relationale datele sunt stocate ın structuri de datesub forma de tabel ın cele sub forma de graf datele sunt stocate ın noduri Coloaneletabelelor din bazele de date relationale se mapeaza ın bazele de date sub forma de graf peproprietati Pentru a face o legatura ıntre tabelele relationale se foloseau rdquochei strainerdquo pecand la Neo4j exista relatii ıntre noduri Din cauza faptului ca bazele de date sub formade graf s-au inspirat din cele relationale exista o asemanare ıntre ele si toate lucrurile auun corespondent ın cealalta

In lucrarea [12] sunt prezentate avantajele folosirii unei baze de date sub forma degraf cand se lucreaza cu retele sociale La aplicatiile de tipul retelelor soriale relatiile dintrenoduri sunt partea cea mai importanta iar pentru acestea o baza de date sub forma degraf se mapeaza cel mai bine Un avantaj al bazelor de date sub forma de graf din punctulde vedere al programatorilor cu acestea se lucreaza foarte similar ca si cu cele relationaledupa cum se prezinta si ın [4]

Un exemplu de sistem de recomandare construit cu Neo4j este [11] In acesta lucrareeste prezentata construirea unui sistem de recomandare care sa recomande prieteni ıntr-oaplicatie de socializare In lucrare sunt patru abordari pentru construirea unui astfel desistem Prima consta ın recomandarea unor prieteni cu care utilizatorul ar avea prieteniın comun cea de-a doua sunt persoane cu care utilizatorul se afla ın acelasi grup cea de-atreia sunt utilizatori care au mers la aceleasi evenimente ca si utilizatorul si ultima abordareconsta ın recomandarea persoanelor cu cei mai multi prieteni In urma mai multor teste sistatistici s-a decis ca abordarea cea mai buna este prima cea cu prietenii ın comun Toateaceste patru metode de oferire a recomandarilor se mapeaza foarte usor pe o baza de datesub forma de graf si reprezinta doar cate un query destul de simplu ın Cypher O astfelde aplicatie s-ar fi mapat mult mai greu pe o baza de date relationala datorita multiplelorrelatii si legaturi

9

Un alt exemplu de aplicatie unde s-a ales baza de date Neo4j a fost [2] Aicipentru articolele politice pe care sistemul le recomanda se creeaza o combinatie ıntrerecomandarile obtinute din articolele care le plac oamenilor cu care utilizatorul vorbestemult si lucruri care le plac utilizatorilor cu care acesta are lucruri ın comun Si ın acest cazexista o multime de relatii ıntre utilizatori si articole si cel mai usor se obtin recomandarilecu o aplicatie sub forma de graf motiv pentru care au si ales Neo4j

35 Utilizarea retelei Facebook pentru crearea unui

profil utilizatorilor

In continuare ca studiu bibliografic au urmat sisteme asemanatoare cu sistemuldorit si modul ın care acestia au reusit sa creeze profilul utilizatorului [13] Problema ceamai mare este rdquocold startrdquo-ul Adica atunci cand un utilizator este nou ın aplicatie nuse stiu suficiente informatii despre el pentru a putea sa i se ofere recomandari Dupa ceacesta foloseste aplicatia o perioada de timp ar putea sa i se ofere recomandari bazate peactivitatea sa anterioara ın aplicatie Din acest motiv la ınceput recomandarile pot lasade dorit si pot fi nu tocmai corecte

O metoda ın care se poate rezolva aceasta problema se afla ın lucrarea de master[7] ın care la utilizatorii noi se recomanda restaurante pe baza pozitiei lor geograficeAtunci cand doresti sa mergi la un restaurant este foarte importanta distanta la care seafla acel restaurant Din aceasta cauza pentru un utilizator caruia sistemul nu stie ce sa ıirecomande ıi recomanda restaurante la ıntamplare dintre cele care se afla cel mai aproapede el In felul acesta dupa ce merge la unul din restaurante si da feedback sistemul poatedupa aceea sa ıi faca recomandari

In lucrarea [8] recomandarile pentru votare au doua abordari La prima i se reco-manda lucrurile care le-a recomandat persoana cu scorul cel mai bun Si cea de-a douaabordare consta ıntr-un set de ıntrebari la care un utilizator nou trebuie sa raspunda candısi face contul

In acest caz cea mai buna metoda ın care se poate rezolva aceasta problema parea fi sa se ia informatiile de la API-ul de la Facebook Facebook este o aplicatie extremde utilizata si care ofera ca informatii publice exact ce ar fi necesar pentru a recomandacadouri de exemplu data nasterii sau lucruri care ıi plac unui utilizator Cu ajutorulacestora se poate calcula varsta utilizatorului poate sa fie ıncadrat ıntr-un profil si sepoate afla stilul de lucruri care ıi plac

Toate aceste informatii publice de la Facebook pot fi salvate si pot fi utilizate maitarziu pentru a se creea recomandari pe baza lor In articolul [3] despre valoarea datelor dela Facebook se prezinta ca si caz de utilizare pentru un site de comert online Aceasta estefoarte asemanatoare din punct de vedere al recomandarilor cu aplicatia de recomandarecadouri Diferenta dintre cele doua este ca ın cazul uneia trebuie sa recomande produsepentru utilizatorul aplicatiei si cealalta pentru un prieten al acestuia

10

Din punct de vedere al aplicabilitatii Facebook este o retea sociala deci datele salese mapeaza foarte bine pe o baza de date de tip graf cum este prezentat si ın lucrarea [6]

Asadar daca la crearea contului utilizatorului ın aplicatie se iau si informatiile pu-blice despre utilizator se vor putea oferi recomandari mult mai corecte ınca de la ınceput

36 Solutii similare

Ca solutii similare pe piata online nu exista aplicatii folosite pentru a recomandacadouri personalizate specific pentru o persoana anume Multe site-uri considera ca eirecomanda cadouri ınsa acestea reprezinta de fapt o filtrare mai avansata a rezultatelorproduselor de pe site-ul lor

Un site care ofera cadouri personalizate este Giftly 4 prezentat ın figura 34 careofera o modalitate usoara de a oferi cadouri Acest site nu are parte de recomandari cia gasit un mod de a face oamenii sa primeasca mereu ceea ce ısi doresc Cel care oferacadoul nu ıl cumpara ci doar ıl sugereaza dar decizia finala asupra cadoului este la celcare ıl primeste Modul ın care functioneaza este

1 Se ofera un rdquocard cadourdquo prin email sms printat sau ca o felicitare de ınaltacalitate

2 Destinatarul alege cel mai convenabil mod de a primi cadoul rdquocard cadourdquo ınposta sau direct ca bani ın contul bancar sau contul PayPal

3 De fapt utilizatorul ıi sugereaza destinatarului ce ar vrea el sa ofere ca si cadouiar destinatarul trimite ca mesaj modul ın care a cheltuit banii

Figura 34 Site web Giftly

4httpswwwgiftlycom

11

Ofera de asemenea si sugestii de cadouri Un om cand navigheaza pe site poate sase uite la cadouri ın categoriile Popular Holidays Birthdays Drinks Eats Meals BackTo School Get Fresh Health Fitness Going Out Getaway Top Shelf For The HipsterClothes For Her Clothes For Him Congratulations Expecting Activities si Custom

Un alt site cu cadouri este Etsy 5 cu imaginea 35 care arata site-ul Etsy este o piataglobala pentru bunuri unice si creative Pe pietele lor milioane de oameni din ıntreagalume se conecteaza atat online cat si offline pentru a face vinde si cumpara bunuri uniceEtsy ofera de asemenea o gama larga de servicii si instrumente de vanzari care ajutaıntreprinzatorii creativi sa ınceapa sa gestioneze si sa-si masoare afacerile Misiunea loreste sa pastreze comertul uman Deci de fapt acest site sprijina mai mult producatoriinu comerciantii De asemenea este mai mult axat pe bunuri unice si lucruri rdquounicerdquo Ca sicelelalte site-uri de genul acesta are o modalitate de a cauta lucrurile mai inteligent maispecializat pe ceea ce te intereseaza Categoriile de cautare sunt Jewelry AccessoriesClothing Shoes Home Living Wedding Party Toys Entertainment Art CollectablesCraft Supplies Tools si Vintage

Figura 35 Site web Etsy

Cel de-al treilea site care ofera servicii asemanatoare este Gifts 6 prezentat ın figura36 Acesta se focuseaza pe cadouri pentru diverse ocazii cum ar fi zilele de nastereCraciun diverse aniversari si alte evenimente la care se cumpara cadouri Pentru parteade recomandare se ofera posibilitatea de a efectua un test despre acel om caruia dorestisa ıi cumperi cadoul care are ca scop ıncadrarea omului respectiv ıntr-un profil si apoi

5httpswwwetsycom6httpswwwgiftscom

12

alegerea unor sugestii ce s-ar potrivi unei persoane cu acel tip de personalitate O primaıntrebare se refera la genul persoanei si ıntrebarea este daca cadoul este pentru o femeieun barbat o fetita sau un baietel Cea de-a doua ıntrebare se refera la marja de varsta ıncare se ıncadreaza acel om de exemplu pentru barbat optiunile sunt adolescent barbat ınjur de 30 de ani sau barbat ın varsta Cea de-a treia ıntrebare se refera la personalitateaomului Mai exact se fac sugestii pentru tipuri de lucruri ce i-ar putea placea unui omcare are trasaturile descrise ın primele doua ıntrebari De exemplu la barbati ın jur de30 de ani optiunile sunt ıi place sportul ıi place natura e aventurier ıi place golful ıiplace sa faca gratare sa serveasca bauturi sa gateasca sa animeze ıi place sa se ımbraceelegant este sef e entuziasmat de bere sau e un fan al sporturilor Iar ın final ın functiede raspunsurile date la ıntrebari se afiseaza sugestii de cadouri care se potrivesc oamenilorcu acel tip de personalitate

Figura 36 Site web Gifts

Nordstrom 7 care este prezentat ın imaginea 37 are o abordare similara avand pesite o multime de optiuni de filtrare a cadourilor Se pot cauta ın acest site cadouri pentrubebelusi cadouri de Craciun bijuterii pentru femei optiunile sunt multiple Acest lucruofera utilizatorilor sugestii pentru a le fi mai usor sa ıncadreze aceasta persoana ıntr-unanumit tip Iar dupa alegerea categoriei toate sugestiile de cadouri oferite de catre sitese ıncadreaza ın acel tip Ca avantaj al acestui site este ca ei ofera si serviciul de livrareal cadoului dupa cumparare oriunde ın lume Un dezavantaj al multor site-uri de genulacesta este ca ofera livrare doar ın zona sa apropiata

7httpsshopnordstromcomcgifts

13

Figura 37 Site web Nordstrom

14

Capitolul 4

Analiza si Fundamentare Teoretica

In acest capitol vor fi prezentate cerintele functionale ale lucrarii ımpreuna cucerintele non-functionale ale acesteia De asemenea va fi prezentata diagrama cazurilor deutilizare si vor fi prezentate mai ın detaliu cazurile de utilizare principale ale aplicatiei Incontinuare se va prezenta perspectiva tehnologica a proiectului si se vor explica deciziiletehnologice luate In final se va prezenta diagrama conceptuala a aplicatiei

41 Cerinte functionale

bull Posibilitatea autentificarii ın aplicatie si crearii unui profil propriu din care se potutiliza informatii si cu ajutorul caruia utilizatorul poate fi ıncadrat ıntr-un profil

bull Utilizatorii pot crea prietenii ca ıntr-o retea de socializare pentru a putea afla infor-matii despre prieteni si pentru a li se putea recomanda cadouri pentru acestia

bull Cu ajutorul informatiilor de la Facebook un utilizator poate fi notificat dinainte caurmeaza ziua de nastere a unuia din prietenii lui si sa i se ofere mai multe variantede cadouri potrivite pentru acesta Aceasta informatie o primeste cu suficient timpınainte pentru a nu fi surprins fara un cadou De la Facebook pe langa informatiiledespre data zilei de nastere sunt importante si varsta sau lucrurile care ıi plac uti-lizatorului Toate acestea ajuta la crearea profilului utilizatorului pe baza caruia serecomanda dupa aceea cadourile

bull De asemenea sistemul poate recomanda si un cadou pentru alt tip de evenimentdecat zi de nastere de genul cadou de Craciun cadou de nunta cadou pentru unnou-nascut etc

bull In aplicatie vor fi adaugate si diferite produse iar pentru a face mai usoara cumparareade cadouri se va putea face si comanda pe internet In momentul ın care un utilizatorface o noua comanda producatorii produselor comandate sunt ınstiintati de existentaacestei noi comenzi

15

bull Pentru persoanele la care pe profilul de Facebook este insuficient completat saupentru a putea cumpara cadouri pentru o persoana care nu are Facebook sau nuare cont ın aceasta aplicatie si despre care ın acest fel nu se cunosc nici un felde informatii se vor putea filtra cautarile pentru cadou printr-o serie de ıntrebaristandard Aceste ıntrebari vor putea creea un rdquomini-profilrdquo pentru acea persoanapentru ca sistemul sa poata recomanda cadouri

42 Cerinte non-functionale

bull Securitate sistemul nu raspunde cererilor decat atunci cand utilizatorul a fost au-tentificat ın aplicatie si are rolul necesar pentru a face acea cerere

bull Portabilitate aplicatia nu depinde de sistemul de operare pe care ruleaza De aseme-nea nu e dependenta de browserul folosit de utilizator

bull Disponibilitate sistemul ramane stabil ın fata erorilor si functioneaza la fel si dupaaparitia unei erori

bull Extensibilitate sistemul permite adaugarea sau modificarea unor componente atuncicand cerintele aplicatiei se modifica Pe langa asta e flexibila unor dezvoltari ulte-rioare

43 Cazuri de utilizare

In aceasta sectiune se vor prezenta actorii aplicatiei diagrama cazurilor de utilizaresi vor fi descrise cazurile de utilizare de baza ale fiecarui actor

Ca si actori aplicatia are patru tipuri de utilizatori

bull utilizator anonimbull clientbull producatorbull administrator

Aplicatia este conceputa ın asa fel ıncat ıntre actori este o relatie de mostenire Acestlucru presupune ca un actor are posibilitatea de a efectua tot ce putea cel dinaintea lui siceva ın plus Deci utilizatorii anonimi au cele mai putine permisiuni iar administratoriiau permisiuni totale Acest lucru se vede foarte clar si ın diagrama cazurilor de utilizaredin imaginea 41

In continuare vor fi prezentate cazurile de utilizare

1 recomandare cadouri2 adaugare produs3 modificare rol utilizator

16

Figura 41 Digrama cazurilor de utilizare

17

431 Recomandare cadouri

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unutilizator trebuie sa le urmeze pentru a primi recomandari de cadouri pentru un cunoscutsi pentru a efectua o comanda

Actorul principal

Orice utilizator al aplicatiei

Parti interesate si interese

Utilizatorul care doreste sa cumpere un cadou este interesat de a gasi un cadoupotrivit pentru cineva pe care ıl cunoaste

Producatorul care e interesat sa ısi poata vinde produseleUtilizatorul care primeste cadoul fiind interesat sa primeasca un cadou care sa i se

potriveasca si care sa ıi placa

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand utilizatorul porneste aplicatia11 Utilizatorul verifica daca are cont de Facebook si daca are urmeaza pasul 111

daca nu 22111 Utilizatorul se autentifica ın aplicatie cu ajutorul credentialelor de la

Facebook12 Utilizatorul deschide sectiunea de recomandare cadouri13 Utilizatorul completeaza formularul cu datele ce trebuie introduse pentru a primi

recomandari de cadouri pentru un prieten14 Utilizatorul poate fi satisfacut cu recomandarile primite si atunci urmeaza pasul

141 iar daca nu este atunci urmeaza cazul alternativ 23141 Utilizatorul adauga ın cosul de cumparaturi cadouri pe care doreste sa

le cumpere15 Utilizatorul cere sa ısi vada cosul de cumparaturi16 Utilizatorul poate sa se declare multumit de cosul de cumparaturi caz ın care

urmeaza pasul 161 sau poate sa aleaga cazul alternativ 24161 Utilizatorul aproba cosul de cumparaturi si accepta sa se faca comanda

17 Sistemul introduce ın baza de date comanda18 Utilizatorul va putea vedea la sectiunea comenzilor sale noua comanda si statusul

ei19 Sistemul notifica producatorul de aparitia noii comenzi110 Utilizatorul se dezautentifica din aplicatie

18

Use-Case EndUtilizatorul se va deconecta din aplicatie si o va ınchide

Figura 42 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueazaAcest flux poate aparea la orice pas211 Utilizatorul deschide sectiunea de recomandare cadouri212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca utilizatorul nu are cont de Facebook

19

Acest flux poate aparea la pasul 11221 Utilizatorul deschide pagina de Facebook222 Utilizatorul ısi face un cont pe pagina de Facebook si ısi completeaza

date despre el223 Utilizatorul revine la aplicatia de recomandare cadouri si ıncearca din

nou sa se autentifice ın aplicatie224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca utilizatorul nu e multumit de recomandariAcest flux poate aparea la pasul 14231 Utilizatorul sterge din cos cadourile pe care nu le mai doreste si revine

la pagina de recomandari232 Utilizatorul adauga alte cadouri ın cos233 Cazul de utilizare continua de la pasul 141

24 Flux-ul alternativ daca utilizatorul nu e multumit de produsele din cosul decumparaturi

Acest flux poate aparea la pasul 16241 Utilizatorul revine ınapoi la formularul cu introducerea datelor despre

beneficiarul cadoului242 Utilizatorul completeaza din nou datele243 Cazul de utilizare continua de la pasul 13

Preconditii

1 Utilizatorul trebuie sa aiba un cont de Facebook pentru a se putea autentifica ınaplicatie

2 Utilizatorul trebuie sa fie autentificat ın aplicatie pentru a putea face orice actiunedin acest caz de utilizare

3 Utilizatorul trebuie sa deschida sectiunea de recomandare cadouri pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noua comanda este salvata ın baza de date2 Comanda apare ın sectiunea de comenzi a utilizatorului ımpreuna cu statusul ei

curent3 Producatorul este notificat ca are o noua comanda

432 Adaugare produs

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unproducator trebuie sa le urmeze pentru a introduce un nou produs ın aplicatie

20

Actorul principal

Utilizatorii cu rol de producator sau cu rol de administrator

Parti interesate si interese

Producatorul care doreste sa introduca produsul nou ın aplicatie

Utilizatorii simpli care au o mai mare varietate de produse din care sa li se reco-mande cadouri

Figura 43 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo

21

Flux de evenimente

Use-Case Start

Cazul de utilizare ıncepe atunci cand producatorul porneste aplicatia

11 Producatorul verifica daca are cont de Facebook si daca are urmeaza pasul111 daca nu 22

111 Producatorul se autentifica ın aplicatie cu ajutorul credentialelor de laFacebook

12 Producatorul deschide sectiunea de adaugare produs

13 Producatorul completeaza datele necesare despre noul produs ımpreuna cu tipulde persoana si eveniment care i s-ar potrivi

14 Producatorul verifica daca este multumit de datele introduse si daca da urmeazapasul 141 daca nu 23

141 Producatorul efectueaza operatia de adaugare produs

15 Sistemul adauga un nou produs ın baza de date

16 Sistemul notifica producatorul ca noul produs a fost introdus cu succes

17 Producatorul se dezautentifica din aplicatie

Use-Case End

Producatorul se va deconecta din aplicatie si o va ınchide

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Producatorul deschide sectiunea de adaugare produs

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca producatorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Producatorul deschide pagina de Facebook

222 Producatorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Producatorul revine la aplicatia de recomandare cadouri si ıncearca dinnou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca Producatorul nu e multumit de datele introduse despreprodus

Acest flux poate aparea la pasul 14

231 Producatorul sterge datele gresite despre produs

232 Producatorul adauga alte date despre produs

233 Cazul de utilizare continua de la pasul 141

22

Preconditii

1 Producatorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Producatorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Producatorul trebuie sa aiba cont cu rol de rdquoproducatorrdquo sau rdquoadminrdquo pentru aputea face operatia aceasta

4 Producatorul trebuie sa deschida sectiunea de adaugare produs pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noul produs este salvat ın baza de date2 Produsul poate fi adaugat la recomandarile unui utilizator din acel moment

433 Modificare rol utilizator

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unadministrator trebuie sa le urmeze pentru a modifica rolul unui utilizator al aplicatiei

Actorul principal

Un utilizator al aplicatiei care are rol de administrator

Parti interesate si interese

Administratorul care doreste sa modifice rolul unui utilizatorUtilizatorul care doreste sa ısi schimbe rolul

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand administratorul porneste aplicatia11 Administratorul verifica daca are cont de Facebook si daca are urmeaza pasul

111 daca nu 22111 Administratorul se autentifica ın aplicatie cu ajutorul credentialelor de

la Facebook12 Administratorul deschide sectiunea de utilizatori13 Sistemul ıi returneaza administratorului utilizatorii care nu sunt administratori14 Administratorul modifica rolul utilizatorului din utilizator simplu ın producator

sau invers

23

15 Administratorul cere executarea modificarii

16 Sistemul executa modificarea iar ın caz de succes urmeaza pasul 161 si ın cazde eroare pasul 23

161 Sistemul notifica administratorul ca modificarea a fost efectuata cusucces

17 Utilizatorul se dezautentifica din aplicatie

Use-Case End

Administratorul se va deconecta din aplicatie si o va ınchide

Figura 44 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo

24

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Administratorul deschide sectiunea de utilizatori

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca administratorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Administratorul deschide pagina de Facebook

222 Administratorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Administratorul revine la aplicatia de recomandare cadouri si ıncearcadin nou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca sistemul returneaza o eroare la modificarea utilizatorului

Acest flux poate aparea la pasul 16

231 Sistemul returneaza un mesaj de eroare la modificarea utilizatorului

232 Aplicatia afiseaza mesajul de eroare administratorului

233 Cazul de utilizare continua de la pasul 15

Preconditii

1 Administratorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Administratorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Utilizatorul trebuie sa aiba cont cu rol de administrator pentru a putea efectuaorice actiune din acest caz de utilizare

4 Administratorul trebuie sa deschida sectiunea utilizatori pentru a putea ındeplinicerintele din cazul de utilizare

Postconditii

1 Noul rol al utilizatorului este salvat ın baza de date

2 La urmatoarea autentificare a utilizatorului acesta va observa ca interfata si maiprecis meniurile si actiunile care le poate face ıi vor fi diferite

25

44 Perspectiva tehnologica

441 Neo4j

Neo4j 1 este un sistem de gestionare a bazelor de date sub forma de graf dezvoltatde Neo4j Inc Descris de dezvoltatorii sai ca o baza de date tranzactionala compatibilacu ACID Neo4j este cea mai populara baza de date sub forma de graf dupa clasamentulDB-Engines

Baza de date Neo4j (ca si orice alta baza de date sub forma de graf) este foartediferita de o baza de date relationala cum ar fi MS Access SQL Server MySQL etcBazele de date relationale utilizeaza tabele randuri si coloane pentru stocarea datelor

Neo4j nu utilizeaza tabele randuri si coloane pentru stocarea sau prezentarea datelorci noduri si relatii

Neo4j este foarte potrivit pentru stocarea datelor care au multe relatii interconec-tate Acestea sunt de fapt aplicatiile ın care merita sa fie folosite De fapt bazele de datesub forma de graf cum este Neo4j sunt mult mai bune la tratarea datelor interconectatedecat bazele de date relationale

Acest lucru se datoreaza faptului ca modelul sub forma de graf nu necesita de obiceio schema predefinita Nu e nevoie sa se creeze structura bazei de date ınainte de a fiıncarcate datele asa cum se face la o baza de date relationala

Dar principalul motiv pentru care Neo4j este mai bun pentru datele relationalepentru acest tip de aplicatii este modul ın care permite crearea relatiilor Neo4j este con-struit ın jurul relatiilor si atunci nu este nevoie sa se configureze chei primare constrangerichei straine pentru a predetermina nodurile care pot avea o relatie si la ce date Cu Neo4jse poate adauga orice legatura ıntre orice nod ori de cate ori este nevoie

Neo4j are aceste calitati care nu se gasesc nici la celelalte baze de date NoSQLBazele de date non-relationale pe langa cele sub forma de graf sunt cele de tip coloanade tip document de tip cheie-valoare si de tip multi-model Nici unul din aceste tipuri nuau ca principala functionalitate maparea relatiilor si facilitatea interogarilor ıntr-o baza dedate cu multe relatii ıntre entitati

Generarea de recomandari personalizate este unul dintre cele mai frecvente cazuride utilizare a unei baze de date sub forma de graf Unele dintre principalele beneficii aleutilizarii grafurilor pentru a genera recomandari includ

- Performanta Lipsa indexurilor permite calcularea recomandarilor ın timp realasigurand ca recomandarea este ıntotdeauna relevanta si reflecta informatii actualizate

- Model de date Modelul de graf cu proprietati permite combinarea cu usurinta aseturilor de date din mai multe surse

Un alt avantaj al bazelor de date sub forma de graf Neo4j este faptul ca respectatoate principiile din modelul de consistenta ACID

Garantia data de principiile ACID este ca ofera un mediu sigur ın care sa functionezedatele Acronimul ACID reprezinta

1httpsneo4jcomuse-casesreal-time-recommendation-engine

26

bull Atomic Toate operatiile dintr-o tranzactie reusesc sau fiecare operatie este reluatabull Consistent La finalizarea unei tranzactii baza de date este solida din punct de

vedere structuralbull Izolat Tranzactiile nu se lupta una cu cealalta Accesul controversat la date este

moderat de baza de date astfel ıncat tranzactiile par sa se execute succesivbull Durabil Rezultatele aplicarii unei tranzactii sunt permanente chiar si ın cazul unor

defectiuniCand vine vorba de tehnologiile NoSQL cele mai multe baze de date sub forma de

graf (inclusiv Neo4j) utilizeaza un model de consistenta ACID pentru a asigura ca datelesunt stocate ın siguranta si ın mod consecvent

Am ales baza de date sub forma de graf ca optiune pentru stocarea datelor deoarecedin toate lucrarile si articolele citite a fost optiunea cea mai buna pentru un sistem derecomandare Deci acesta se mapeaza perfect pe cerintele functionale ale proiectului Sidin optiunile de baze de date sub forma de graf Noe4j a avut de departe cele mai multeavantaje ea fiind si cea mai utilizata

442 Cypher

Cypher 2 este un limbaj declarativ de interogare pentru bazele de date sub formade graf care permite interogarea si actualizarea rapida a datelor Cypher este un limbajrelativ simplu dar foarte puternic Interogarile foarte complexe ale bazei de date pot fiusor exprimate prin intermediul limbajului Cypher

Este conceput pentru a fi un limbaj de interogare uman Scopul lui principal este dea face interogarile mult mai simple si unele interogari care la bazele de date relationale nuerau posibile le face posibile Constructiile sale se bazeaza pe grafica si pe limba englezalucru care ajuta la scrierea mai intuitiva a interogarilor Este construit pentru a fi maiintuitiv pentru citire si nu neaparat pentru scriere

Cypher se bazeaza pe modelul Graph Property care ın plus fata de elementelegrafice standard ale nodurilor si muchiilor (numite relatii ın Cypher) adauga etichete siproprietati ca si concepte Nodurile pot avea zero sau mai multe etichete ın timp ce fiecarerelatie este de exact un singur tip Nodurile si relatiile au de asemenea zero sau mai multeproprietati

Chypher este limbajul de interogare folosit la bazele de date Neo4j deci este opti-unea implicita atunci cand se alege Neo4j

443 Maven

Maven 3 este un instrument de management software si de ıntelegere a proiectelorsoftware Pe baza conceptului unui model de obiect de proiect (POM) Maven poategestiona construirea raportarea si documentarea unui proiect printr-o informatie centrala

2httpsneo4jcomdevelopercypher-query-language3httpswwwjavatpointcommaven-tutorial

27

Obiectivul principal al lui Maven este acela de a permite unui dezvoltator sa ınte-leaga starea completa a efortului de dezvoltare ın cel mai scurt timp Avantajele Mavensunt

bull instalarea rapida a proiectului fara fisiere buildxml complicate doar un POMbull procesul de construire este standardizat pentru toate proiectelebull usor de ınvatat si de utilizatbull configurarea unui proiect este foarte rapidabull bine documentat

Am ales sa folosesc Maven deoarece este una din cele mai comune optiuni pentru aimporta librariile ıntr-un proiect si este si cel mai documentat Deci mereu cand esti pusın dificultate poti cauta pe internet sugestii

444 Spring Boot

Spring Boot 4 este un framework din cadrul Spring care ofera setari implicite pentruconfigurarea codului si adnotari pentru a lansa rapid proiecte noi ın executie Urmaresteabordarea rdquoConfigurarea defectiunilor vizionaterdquo pentru a evita un numar mare de linii decod pentru configuratii si pentru a ımbunatati procesul de dezvoltare

Avantajele Spring Boot sunt1 Face foarte usoara dezvoltarea de aplicatii bazate pe Spring cu Java sau Groovy2 Reduce timpul de dezvoltare si creste productivitatea3 Evita scrierea multor linii de cod adnotari si configurare XML4 Este foarte usor de integrat cu alte framework-uri din aceasi familie Spring cum ar

fi Spring JDBC Spring ORM Spring Data Spring Security etc5 Urmareste abordarea rdquoConfigurarea implicita a optiunilorrdquo pentru a reduce efortul

pentru dezvoltatori6 Ofera servere HTTP ıncorporate cum ar fi Tomcat Jetty etc pentru a dezvolta si

testa aplicatiile web foarte usor7 Ofera instrumentul CLI (Command Line Interface) pentru a dezvolta si testa apli-

catiile de tip rdquoSpring Bootrdquo (Java sau Groovy) din linia de comanda foarte usor sirapidAm ales ca optiune pentru partea de backend acest framework deoarece simplifica

foarte mult lucrurile Datorita lui un programator poate sa ısi concentreze mai tare energiape a construi proiectul din punctul de vedere al buissness-ului logic nu din punctul devedere al configurarilor necesare

445 Sencha CMD si ExtJS

Sencha CMD 5 este un instrument linie de comanda cross-platform care ofera multesarcini automate ın ciclul complet de viata al unei aplicatii ExtJS de la generarea unui

4httpswwwjavatpointcomspring-boot-tutorial5httpsdocssenchacomcmd

28

nou proiect la lansarea unei aplicatii ın productie

Sencha Cmd ofera o colectie de caracteristici puternice pentru economisirea timpu-lui care functioneaza ımpreuna cu Sencha ExtJS si Sencha Touch

Ext JS 6 este un framework pur JavaScript pentru construirea de aplicatii webinteractive cross-platform utilizand tehnici precum scripting Ajax DHTML si DOM

Avantajele framework-ului ExtJS sunt

1 Documentatia Extjs este foarte cuprinzatoare si bine ıntretinuta2 Aspectul cheie al bibliotecii EXTJS este suportul de tip cross-browser3 Framework-ul ExtJS ofera o multitudine de elemente UI Aceste elemente includ

forme casete de dialog file arbori si tabele4 Framework-ul ExtJS include suport pentru implementarile Ajax5 ExtJS ofera performante excelente Framework-ul este complet orientat spre obiecte

si este extensibil asta pentru ca este scris ın JavaScript

Pentru partea de frontend se foloseste framework-ul ExtJS deoarece are o arhitec-tura ce se mapeaza foarte bine pe proiectele de frontend si anume arhitectura bazata pecomponente Aceasta face ca ın proiect codul sa fie mult mai organizat si procesul dedezvoltare al proiectului sa fie mult mai scurt prin identificarea mai usoara a erorilor

446 Facebook API(Graph API)

Graph API 7 este modul principal de a pune date ın platforma Facebook si de aobtine date din platforma Facebook Este un API bazat pe HTTP pe care aplicatiile ılpot utiliza pentru interogarea datelor pentru a introduce postari noi pentru gestionareaanunturilor sau pentru a ıncarca fotografii

Este denumit Graph API dupa ideea unui rdquograf socialrdquo - o reprezentare sub formade graf a informatiilor de pe Facebook Este compus din

bull noduri - ın esenta obiecte individuale cum ar fi un utilizator o fotografie o paginasau un comentariu

bull muchii - conexiuni ıntre o colectie de obiecte si un singur obiect cum ar fi fotografiilede pe o pagina sau comentariile de la o fotografie

bull campuri - date despre un obiect cum ar fi ziua de nastere a unui utilizator saunumele paginii

De obicei se utilizeaza noduri pentru a obtine date despre un anumit obiect se uti-lizeaza muchii pentru a obtine colectii de obiecte legate de un singur obiect si se utilizeazacampurile pentru a obtine date despre un singur obiect sau mai multe obiecte dintr-ocolectie

Am folosit Facebook API ca solutie pentru a ımbunatati problema de rdquocold startrdquopentru ca este singurul site pe care marea majoritate a oamenilor au cont si salveazalucrurile care le plac Deci se potrivea perfect peste nevoile aplicatiei mele

6httpdocssenchacomextjs6207httpsdevelopersfacebookcomdocsgraph-api

29

447 Git

Git 8 este un sistem de control a versionarii pentru urmarirea modificarilor ın fisierelede pe computer si coordonarea activitatii asupra acestor fisiere ın randul mai multor per-soane Este utilizat ın principal pentru gestionarea codului sursa ın dezvoltarea de softwaredar poate fi folosit pentru a urmari schimbarile ın orice set de fisiere

Avantaje ale Git

bull Modelul distribuit numai ceea ce se doreste se face publicbull Branching-ul si merging-ul sunt usoarebull Fluxul de lucru este flexibilbull Integritatea datelor este asigurata Deoarece GIT utilizeaza arbori SHA1 coruperea

datelor din motive externe poate fi usor detectatabull Rapid Git este foarte rapid chiar si ın comparatie cu alte sisteme de control a

versionarii

Am folosit Git pentru a avea la proiect un back-up ın caz ca se ıntampla ceva cuproiectul salvat pe calculator

45 Arhitectura conceptuala

In figura 45 este prezentata arhitectura conceptuala a sistemului Acesta este ım-partit ın doua mari parti backend-ul si frontend-ul care comunica ıntre ele si ısi trimitinformatii

Se poate observa ca baza de date este de tip graf mai exact Neo4j si comunica cubackend-ul pentru a putea lucra cu datele stocate Backend-ul este structurat pe nivelefiecare cu un diferit rol si care trebuie parcurs pentru a procesa datele din interfata ınbaza de date Cele trei nivele sunt cel de Repository cel de Service si cel ControllerToate interogarile venite din interfata utilizator ajung ın nivelul de Controller Dupa ceinterogarile trec de securitatea sistemului ajung ın nivelul de Service Acolo se proceseazasi se afla partea de logica a aplicatiei Pentru a interactiona cu baza de date din Servicese apeleaza metodele din nivelul de Repository

In continuare backend-ul comunica prin protocolul HTTP cu interfata grafica cucare interactioneaza clientii aplicatiei Interfata este scrisa ın Ext JS si are o parte de Viewsi o parte de Controller care este cea care comunica cu backend-ul

Pentru partea de autentificare sistemul interactioneaza cu API-ul de la Facebookde la care ia dupa autentificare un access token Cu ajutorul acestuia ia dupa aceea datelenecesare pentru a putea crea un profil utilizatorului

8httpsguidesgithubcomintroductiongit-handbook

30

Figura 45 Arhitectura conceptuala

31

Capitolul 5

Proiectare de Detaliu siImplementare

In acest capitol vor fi prezentate detalii de implementare ale sistemului de recoman-dare incluzand o ımpartire al acestuia ın componentele care ıl cuprind

Obiectivul este de a prezenta arhitectura si modul de implementare al aplicatieipe baza datelor descoperite ın studiul bibliografic de la capitolul trei si cu tehnologiilehotarate la capitolul patru Pe langa asta va fi prezentata si structura bazei de date sideciziile luate pentru securitatea aplicatiei

51 Arhitectura sistemului

Din punctul de vedere al arhitecturii aplicatia se poate considera ca este alcatuitadin patru mari componente

1 API-ul de la Facebook2 Aplicatia client care reprezinta interfata grafica a aplicatiei3 Aplicatia server adica backendul aplicatiei si partea ın care se afla partea de rdquobusiness

logicrdquo4 Baza de date

Partea componenta reprezentata de API-ul de la Facebook este doar o componentacu care aplicatia se integreaza si pe care aceasta o foloseste In interactiunea cu ea interfatada o cerere de autentificare apare o fereastra de la Facebook ın care utilizatorul introducecredentialele de la API-ul de Facebook se primeste ınapoi un access token si cu ajutorulacestuia face o cerere pentru a primi datele personale ale utilizatorului pentru creeareaprofilului utilizator

Urmatoarea parte a aplicatiei este interfata utilizator frontend-ul care reprezintapartea cu care utilizatorul interactioneaza si locul unde ıi sunt afisate informatiile

Cererile din interfata ajung ın a treia parte componenta a sistemului partea deserver adica backend-ul aplicatiei Acolo toate cererile sunt citite si procesate iar raspun-

33

sul lor este trimis la interfata utilizator Aceasta este partea care reprezinta rdquogandireardquoaplicatiei Aceea este componenta care face legatura ıntre cererile utilizatorului din inter-fata si datele stocate ın baza de date

Ultima componenta a aplicatiei o reprezinta baza de date care are ca rol sa stochezedatele despre utilizatori produse si comenzi Ea este o baza de date sub forma de grafde tipul Neo4j Acolo se salveaza entitatile aplicatiei sub forma de noduri si dependenteleıntre acestea sub forma de relatii ıntre aceste noduri

Figura 51 Diagrama de rdquodeploymentrdquo

In figura 51 este prezentata diagrama de rdquodeploymentrdquo a sistemului cu cele patrucomponente ale sistemului Aplicatia client comunica cu API-ul de la Facebook prin pro-tocolul securizat HTTPS cu backend-ul prin protocolul HTTP iar backend-ul cu baza dedate prin JDBC

Aplicatia a putut fi ımpartita ın aceste componente separate deoarece fiecare dintreele poate functiona independent de celelalte comunica cu ele doar prin mesaje Din acestmotiv locul unde ruleaza acestea pot sa fie pe servere diferite In plus daca aplicatiaar fi pusa pe servere pentru utilizatori ar putea fi mai multe servere pe care ruleaza ocomponenta si prin rdquoload balancingrdquo sa se trimita cererile ımpartite ıntre ele

Cum astfel componentele nu depind foarte mult unele de altele si pot rula faraa le interesa de unde le sunt trimise cererile este arhitectura cea mai corecta deoarecedefectarea sau o posibila eroare la una din ele nu o influenteaza cu nimic pe o alta Dacatoate ar rula pe acelasi server o eventuala defectiune a acestuia ar ınsemna o defectiune aıntregului sistem Insa daca exista mai multe noduri si se afla pe servere diferite pot doartoate cererile sa fie redirectionate spre un nod care functioneaza si aplicatia sa functionezepentru clienti la fel ca ınainte

34

Un alt avantaj al arhitecturii ar fi faptul ca la o lansare viitoare catre clienti se poatelansa doar componenta la care s-au facut modificari De asemenea aplicatia ar putea aveape viitor si o componenta mobila Iar cum serverul e independent poate fi acelasi serverfolosit de o alta aplicatie client

511 Arhitectura componentei backend

Arhitectura backend-ului este si ea ımpartita ın mai multe pachete pentru o maibuna structura si pentru o cat mai mica dependenta ıntre diversele componente Astfelcuplarea este minima ıntre clase si eventualele modificari ulterioare pot fi mai usor defacut

Serverul a fost implementat ın Java cu ajutorul framework-ului Spring Boot iarmediul de dezvoltare folosit a fost Intellij IDEA

Din punctul de vedere al ımpartirii arhitectura serverului aplicatiei este structurataın patru pachete si o clasa ın afara acestora Acea clasa este rdquomainrdquo-ul aplicatiei este parteacare trebuie rulata pentru a porni serverul Din cauza ca este o aplicatie Spring Boot si nuuna String singura adnotare necesara pentru a sti ca aceea este clasa rdquoradacinardquoa aplicatieieste SpringBootApplication

Cele patru pachete ale serverului sunt1 Cel de domeniu (domain) cu clasele POJO care reprezinta entitatile din baza de

date2 Cel de rdquomagazierdquo (repositories) care este cel care face direct actiunile ın baza de date3 Cel de serviciu (services) ın care se afla partea de logica a ıntregii aplicatii4 Cel de web ın care se afla clasele de rdquocontrollerrdquo

Figura 52 Diagrama de pachete pentru backend

35

Ca si dependente nivelul de web ıl foloseste pe cel de seviciu cel de serviciu ılfoloseste pe cel de rdquomagazierdquo iar clasele din pachetul de domeniu sunt folosite ın toatecelelalte pachete

In continuare voi prezenta pe rand fiecare nivel al serverului adica fiecare pachet

Figura 53 Diagrama de clase pentru pachetul rdquodomainrdquo

36

Nivelul de domeniu (domain) este alcatuit ın primul rand din clasele care suntentitati ın baza de date Acestea sunt reprezentate de toate clasele ce stocheaza informatiidespre utilizatori si despre produse si comenzi Pe langa informatiile personale despre unutilizator de genul numelui email-ului sau data nasterii care sunt salvate ın entitateapersoana se stocheaza despre utilizator ın clase diferite informatii de genul locului undelocuieste locul unde a copilarit locurilor unde a facut scoala locului unde lucreaza sau celmai important pentru aplicatia aceasta lucrurilor care ıi plac In afara acestor informatiidespre utilizatori sunt si clase cu informatiile despre prieteni despre produse sau desprecomenzi

Din cauza faptului ca aplicatia este de tipul unei retele sociale ın care exista prieteniiıntre persoane exista dependente ıntre toate entitatile aplicatiei Acesta este si motivulpentru care am ales baza de date sub forma de graf pe care sa se mapeze toate acesteentitati sub forma de noduri si toate aceste dependente sub forma de relatii

In pachetul de domeniu se afla si trei subpachete Unul dintre ele este pentruclasele folosite pentru a trata erorile aplicatiei In interiorul acestui pachet se afla douaclase pentru eroare si o exceptie cea folosita ın cazul ın care nu se gaseste ceea ce doresteutilizatorul Pe langa asta este clasa care are ca obiect raspunsul dat de sistem ın cazulunei erori la server Aceasta contine ın interiorul sau pe langa codul erorii si detalii despreeroarea trimisa Aceasta lista de detalii e reprezentata de obiectele de tipul celei de-a treiaclase din pachetul acesta

Celelalte doua subpachete aflate ın acest nivel sunt cele care contin clasele specialede cerere sau raspuns care au ajutat la maparea acestora mai bine In multe cazuri nua fost necesara trimiterea la interfata utilizator a tuturor informatiilor stocate despre oentitate si de aceea am ales sa creez ın aceste cazuri un obiect auxiliar care sa fie folositpe post de raspuns

Figura 54 Diagrama de clase pentru pachetul rdquorepositoriesrdquo

37

Cel de-al doilea nivel al aplicatiei backend este cel de rdquomagazierdquo (repositories) carecontine doar interfete de tip rdquoRepositoryrdquo

Aceste interfete sunt cele care fac operatiile directe asupra entitatilor din baza dedate

Unele interfete doar extind interfata care are deja implementate metodele CRUDsi din acest motiv nu au metode suplimentare iar altele au si metode ın plus care au carol sa execute interogari mai complexe asupra bazei de date In acele metode se pot scrieinterogarile ın Cypher pentru a putea primi informatii despre mai multe noduri sau desprerelatiile dintre acestea sau si pentru a returna doar anumite rezultate care ındeplinescanumite conditii In felul acesta a fost implementata si cererea de oferire a recomandarilorIn acel caz sistemul returneaza produsele care au ın descriere unul din lucrurile care se aflaın lista de obiecte sau servicii primite de la Facebook ca ıi plac utilizatorului

Nivelul de rdquoRepositoryrdquo este folosit direct de cel de-al treiea nivel cel de servi-ciu Acesta este nivelul la care se executa logica aplicatiei unde se comanda modul defunctionare al ıntregii aplicatii

Figura 55 Diagrama de clase pentru pachetul rdquoservicesrdquo

Pe acest nivel ajung toate cererile din server dupa ce trec de verificarile de securitateIn acest pachet se afla si clasa de securitate care face verificarile necesare In aceasta clasaexista o metoda ce se apeleaza la prima cerere cea de salvare a datelor de la Facebookdespre utilizator si care codifica id-ul utilizatorului si ıl trimite pe raspuns ınapoi interfeteiPe langa asta ın acea clasa se afla si o metoda care verifica faptul ca id-ul codificat esteal unui utilizator cu rol corespunzator pentru a face acea cerere

In plus ın acest pachet se afla si toate celelalte clase care fac diverse operatii pedatele din baza de date si dau raspunsuri cererilor din interfata Aici se afla logica care

38

comanda actiunile asupra utilizatorilor asupra prietenilor acestora asupra produselor siasupra comenzilor

Ultima clasa a acestui nivel este cea care se ocupa de trimiterea de email-uri Incazul ın care se face o noua comanda de catre un utilizator toti producatorii produselor depe comanda sunt notificati despre produsele lor pe care le doreste utilizatorul Din serviciulde comanda se apeleaza serviciul de email pentru fiecare producator din lista celor care auproduse care se afla pe lista comenzii utilizatorului

Ultimul si cel mai aproape de interfata utilizator este nivelul de web Acolo se aflatoate clasele de rdquoControllerrdquo ale aplicatiei server

Figura 56 Diagrama de clase pentru pachetul rdquowebrdquo

Toate cererile din interfata utilizator ıncearca sa se mapeze pe rutele declarate ınclase pentru a fi procesate ın metoda corespunzatoare Toata aceasta parte este foarteusor de implementat si mai ales foarte lizibil pentru programatori datorita adnotarilor dinJava Cu ajutorul acestora trebuie doar specificat care este numele URL-ului cererii careeste tipul de obiect asteptat si daca se trimite ca rdquoquery stringrdquo pe URL sau ın interiorulcorpului cererii si tipul raspunsului Pentru fiecare cerere care nu este apelata ın parteaneautentificata a utilizatorului primul lucru care se apeleaza este metoda de securitatepentru a verifica rolul si id-ul utilizatorului Daca din punctul de vedere al securitatii totuleste ın regula se apeleaza metoda corespunzatoare din pachetul de serviciu

39

O singura clasa este diferita de restul ın pachetul de controller si aceea este clasa deeroare Acolo se mapeaza erorile aparute ın timpul cererii si se trimite ınapoi ın interfatagrafica un raspuns cu cod de eroare specific nu numai 500 Generic Application Exceptioncum ar trimite fara aceasta clasa si cu detalii despre motivul aparitiei erorii

Datorita folosirii adnotarilor din java nu a fost necesara folosirea unor rdquodesignpatternrdquo-uri ın sistem De exemplu pentru a folosi ın nivelul de web ceva din pachetulde servicii trebuia doar acel obiect sa aiba adnotarea Autowired si se ınlocuieste atatfolosirea rdquodesign patternrdquo-ului Singleton cat si a celui de Factory Acel obiect nu trebuiecreat sau initializat se face asta implicit datorita adnotarii si de asemenea este folositapeste tot aceeasi instanta

In concluzie toate cererile venite din interfata grafica ajung ın nivelul de rdquocontrollerrdquode unde sunt trimise la cel de rdquoservicerdquopentru a fi procesate si facute eventualele modificarinecesare ın baza de date ca apoi raspunsul sa fie trimis ınapoi spre aplicatia client pentruafisare

512 Arhitectura componentei frontend

A doua componenta implementata a sistemului este aplicatia client frontend-ulAceasta a fost scrisa ın Java Script cu ajutorul framework-ului Ext JS compilarea

se face cu ajutorul Sencha CMD si mediul de implementare a fost IntelliJ IdeaCu ajutorul framework-ului Ext JS se scriu componente care apoi se initializeaza

unele pe altele Aplicatia porneste cu fisierul Applicationjs care este un fel de rdquomainrdquopentru aplicatie Aceasta initializeaza alte componente care la randul lor includ altecomponente si tot asa Structura poate fi foarte usor comparata cu una arborescenta dinacest punct de vedere

Framework-ul a fost creat sa functioneze ın felul acesta pentru ca scopul componen-telor este sa fie scrise ın asa fel ıncat sa poata pe viitor sa fie utilizate din nou Una dindorintele majore ın programare tot timpul este de a se scrie cod ıntr-o maniera ın care safie cat mai reutilizabil Iar framework-ul Ext JS exact asta ıncearca

Arhitectura aplicatiei client se gaseste ın figura 57 si este la randul ei ımpartita ınpachete ca si cea de server Similar cu pachetul de rdquodomainrdquo de la aplicatia de backendeste pachetul rdquomodelrdquo al interfetei utilizator Aici sunt rdquoclaserdquo care sunt simple POJO sicare sunt apoi folosite ın nivelele urmatoare Sunt mai putine decat clasele din rdquostorerdquodeoarece daca raspunsul de la server nu trebuie procesat nu sunt necesare se pot mapadirect obiectele din rdquostorerdquo pe componentele interfetei utilizator

Urmatorul nivel este cel pe care se afla clasele de rdquostorerdquo Acestea sunt cele careexecuta cererea spre backend si face legatura ıntre client si server Daca are o clasa derdquomodelrdquodeclarata atunci populeaza acel obiect cu datele primite de la server iar ın cazul ıncare nu este declarat un model se trimit datele exact asa cum s-au primit la nivelul urmatorde rdquoviewrdquo Acest nivel seamana din punct de vedere al functiei cu cel de rdquorepositoryrdquo de laaplicatia server deoarece ambele au rol de legatura Aceea facea legatura ıntre aplicatiesi baza de date si aceasta face legatura ıntre aplicatia client si aplicatia server

40

Figura 57 Diagrama de clase pentru aplicatia web

Cel de-al treilea pachet al aplicatiei este cel de rdquoviewrdquo In acest pachet se afla claselecare alcatuiesc partea vizuala a aplicatiei La randul ei si aceasta este alcatuita tot dincomponente Aplicatia deschide ın primul rand Main-ul care determina aparitia paginii deHome si afisarea ın meniu a optiunilor posibile ın functie de autentificare si rol Clasele deaici se executa de fapt la deschiderea aplicatiei fiind rdquosingle page applicationrdquo si tot atuncise ıncarca pe pagina componentele Ca si arhitectura a pachetului acesta este ımpartit larandul sau ın subpachete Pentru o mai buna organizare exista patru subpachete cateunul pentru fiecare tip de utilizator In felul acesta toate rdquoviewrdquo-urile care sunt specificeunui utilizator cu un anumit rol se afla ın acelasi subpachet

Cele patru subpachete existente ın pachetul rdquoviewrdquo sunt

1 Pachetul rdquomainrdquo care cuprinde rdquoviewrdquo-urile care se afla ın partea neautentificata aaplicatiei

2 Pachetul rdquoclientrdquo continand rdquoviewrdquo-urile pe care le poate accesa un utilizator simplu3 Pachetul rdquoproducerrdquo specific actiunilor unui utilizator care are rol de producator4 Pachetul rdquoadminrdquo care contine toate rdquoviewrdquo-urile care ıi apar unui utilizator care este

administrator al aplicatiei

Ultimul pachet si nivel al aplicatiei client este cel de rdquocontrollerrdquo In acest pachet

41

se afla clasele care fac actiunile din interfata grafica In timp ce pachetul rdquoviewrdquo continedoar partea grafica a aplicatiei adica modul ın care aceasta trebuie sa arate pachetulrdquocontrollerrdquo contine actiunea acestora modul ın care aplicatia trebuie sa functioneze

Ca si arhitectura si acest pachet a fost ımpartit la randul lui tot ın cele patrusubpachete ca si pachetul rdquoviewrdquo adica rdquomainrdquo rdquoclientrdquo rdquoproducerrdquo si rdquoadminrdquo In pluspentru a fi usor de gasit ce clasa de rdquocontrollerrdquo apartine carui rdquoviewrdquo am ales ca cele douasa aiba acelasi nume In felul acesta daca se doreste sa se gaseasca actiunile unui rdquoviewrdquose poate cauta dupa o clasa cu acelasi nume ın pachetul rdquocontrollerrdquo Numarul claselor dinacest pachet este mai mic decat cel al claselor din rdquoviewrdquo deoarece nu toate paginile dininterfata au actiuni suplimentare Daca singura actiune este ıncarcarea paginii cu date dela server adica doar o actiune simpla de GET datele se ıncarca cu ajutorul rdquostorerdquo-ului laıncarcarea paginii si nu este necesara nici o actiune suplimentara Paginile pe care se potface si actiuni de alt gen sau se deschid noi ferestre au nevoie de clase de rdquocontrollerrdquo

In concluzie arhitectura aplicatiei client este una bazata pe componente care ıncearcasa foloseasca cat mai multe clase reutilizabile

52 Structura bazei de date

Baza de date a aplicatiei este de tip graf de tipul Neo4j Pentru utilizare exista unprogram numit Neo4j ce trebuie instalat Acest program are si o interfata grafica ın carese pot vizualiza datele sub forma grafica si ın care se pot scrie de asemenea si interogariın limbajul acestei baze de date adica Cypher

Fiind o baza de date sub forma de graf datele stocate sunt salvate ın structurade date sub forma de noduri si relatii Entitatile din pachetul de domeniu din aplicatiabackend se gasesc ın baza de date sub forma unor noduri iar dependentele dintre nodurise mapeaza ın baza de date sub forma unor relatii Un element diferit fata de alte tipuride baze de date este faptul ca pe relatiile dintre noduri se pot salva atribute cum este ınaplicatie cazul pentru prieteniile dintre persoane In cazul acestora pe relatia dintre nodurise salveaza daca prietenia a fost sau nu acceptata

Pentru fiecare clasa POJO din aplicatia server clasa ce are doar metodele get si setsi se afla ın pachetul domain exista cate un tip de nod diferit ın baza de date cum estesi marcat ın diferite culori ın figura 58 Fiecare tip de nod are atributele proprii care potlua valori sau pot fi nule Iar fiecare obiect din Java reprezinta un nod diferit ın baza dedate

Neo4j a fost cea mai buna optiune pentru baza de date pentru ca aplicatia poate ficonsiderata o retea sociala Acest lucru se datoreaza relatiilor de prietenie dintre persoanesi a multiplelor relatii ıntre noduri Toate nodurile se afla ın acceasi componenta conexadeci nu exista noduri izolate care sa nu aiba nici o legatura cu nici un alt nod

Datorita acestei structuri a bazei de date este posibila implementarea cererii derecomandare ca o simpla interogare ın baza de date aceasta fiind cea mai simpla metodade implementare a unui sistem de genul acesta una mult mai complexa ar fi fost un

42

algoritm de ınvatare care sa ınvete tipare ale utilizatorilor si sa recomande cadouri pe bazaacestor informatii

Figura 58 Diagrama bazei de date pentru doi utilizatori

Un alt avantaj al acestui tip de baza de date este faptul ca datele nu sunt duplicateın baza de date Spre exemplu daca mai multi utilizatori au ca locatie acelasi oras nu secreaza cate un nod cu acea locatie de mai multe ori ci acel unic nod va avea cate o relatiecu fiecare utilizator care are ca locatie acel oras

In concluzie structura bazei de date a fost aleasa ın acest fel datorita tipului apli-catiei adica asemanatoare cu o retea sociala si datorita implementarii simple a unui sistemde recomandare pe o asemenea baza de date

53 Fluxul pentru diferite operatii

Pentru aplicatie cele mai importante cazuri de utilizare sunt salvarea informati-ilor despre utilizator primite de la Facebook pentru crearea unui profil si recomandareacadourilor pentru un utilizator al aplicatiei Din aceasta cauza cele doua cazuri de utilizarevor fi prezentate mai ın detaliu ın continuare

43

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 3: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

FACULTATEA DE AUTOMATICA SI CALCULATOAREDEPARTAMENTUL CALCULATOARE

Declaratie pe proprie raspundere privindautenticitatea lucrarii de licenta

Subsemnatul(a) legiti-

mat(a) cu seria nrCNP autorul lucrarii

elaborata ın vederea sustinerii examenului de finalizare a studiilor de licenta la Facul-tatea de Automatica si Calculatoare Specializareadin cadrul Universitatii Tehnice din Cluj-Napoca sesiunea a an-ului universitar declar pe proprie raspundere ca aceasta lucrare esterezultatul propriei activitati intelectuale pe baza cercetarilor mele si pe baza informatiilorobtinute din surse care au fost citate ın textul lucrarii si ın bibliografie

Declar ca aceasta lucrare nu contine portiuni plagiate iar sursele bibliografice aufost folosite cu respectarea legislatiei romane si a conventiilor internationale privind drep-turile de autor

Declar de asemenea ca aceasta lucrare nu a mai fost prezentata ın fata unei altecomisii de examen de licenta

In cazul constatarii ulterioare a unor declaratii false voi suporta sanctiunile admin-istrative respectiv anularea examenului de licenta

Data Nume Prenume

Semnatura

Cuprins

Capitolul 1 Introducere 111 Contextul proiectului 112 Motivatia 113 Continutul lucrarii 2

Capitolul 2 Obiectivele Proiectului 321 Obiectivul principal 322 Obiective specifice 3

Capitolul 3 Studiu Bibliografic 531 Modul de functionare al sistemelor de recomandare 532 Tipuri de sisteme de recomandare 633 Abordarea Netflix 834 Sisteme de recomandare cu Neo4j 935 Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor 1036 Solutii similare 11

Capitolul 4 Analiza si Fundamentare Teoretica 1541 Cerinte functionale 1542 Cerinte non-functionale 1643 Cazuri de utilizare 16

431 Recomandare cadouri 18432 Adaugare produs 20433 Modificare rol utilizator 23

44 Perspectiva tehnologica 26441 Neo4j 26442 Cypher 27443 Maven 27444 Spring Boot 28445 Sencha CMD si ExtJS 28446 Facebook API(Graph API) 29447 Git 30

1

45 Arhitectura conceptuala 30

Capitolul 5 Proiectare de Detaliu si Implementare 3351 Arhitectura sistemului 33

511 Arhitectura componentei backend 35512 Arhitectura componentei frontend 40

52 Structura bazei de date 4253 Fluxul pentru diferite operatii 43

531 Fluxul pentru sub-sistemul de creare al unui utilizator si preluareadatelor necesare 44

532 Fluxul pentru sub-sistemul de recomandare 4554 Securitatea sistemului 46

Capitolul 6 Testare si Validare 4961 Testare unitara 4962 Cazuri de testare 5063 Evaluarea sistemului de catre utilizatori 53

Capitolul 7 Manual de Instalare si Utilizare 5571 Resurse necesare 5572 Manualul de instalare 55

721 Instalare si pornire baza de date 55722 Tehnologii necesare si pornirea aplicatiei backend 56723 Tehnologii necesare si pornirea aplicatiei frontend 56724 Configurarea integrarii cu Facebook 57

73 Manualul de utilizare 57

Capitolul 8 Concluzii 6181 Analiza rezultatelor obtinute 6182 Dezvoltari ulterioare 61

Bibliografie 63

Lista tabelelor 65

Lista figurilor 67

Anexa A Glosar de termeni 69

2

Capitolul 1

Introducere

In acest capitol vor fi prezentate notiuni despre contextul proiectului motivatiade la care a venit ideea proiectului si de asemenea se va prezenta continutul lucrarii pecapitole

11 Contextul proiectului

In prezent cele mai mari site-uri ale lumii din punct de vedere al numarului de uti-lizatori au ınceput ın ultimii ani sa aiba o sectiune de recomandari Acestea pot reprezentaproduse pe site-urile de comert online filme pe site-urile de vizionare de filme carti pesite-urile sau aplicatiile pentru citit sau persoane pentru site-urile de socializare

Popularitatea sistemelor de recomandare a crescut foarte mult ın ultimii ani datoritabeneficiilor multiple pe care le aduc Recomandarile aduc avantaje atat celui care vrea savanda ceva cat si celui care vrea sa cumpere deoarece unuia ıi face vanzari mai mariın timp ce celuilalt ıi da sugestii de lucruri de care ar putea avea nevoie si a uitat Iarpopularitatea lor creste tot mai tare cu cat sunt mai utile recomandarile Aceste sistemede recomandare trebuie de fapt sa faca o rdquoprezicererdquo asupra lucrurilor care i-ar placea unuiutilizator

O problema cu care multi oameni se confrunta este cumparatul cadourilor In multesituatii desi acel om ne este foarte apropiat si ıl cunoastem foarte bine tot ne este foartegreu sa gasim un cadou potrivit pentru acesta De aceea o aplicatie care sa recomandecadouri care sa creeze recomandari specializate pentru o anumita persoana ar avea o uti-litate foarte mare pentru oricine

12 Motivatia

Motivatia aplicatiei o reprezinta de fapt lipsa unei aplicatii similare pe piata panaın momentul documentarii si ın acelasi timp utilitatea uneia

1

Toti oamenii se confrunta mai devreme sau mai tarziu cu problema gasirii cadouluiperfect pentru cineva din viata lor In multe cazuri aceasta problema poate fi o adevaratacatastrofa ce consuma energie timp si rabdare pentru cel care trebuie sa cumpere cadoulDe accea scopul aplicatiei este de a usura viata oamenilor prin oferirea unor variante decadouri specifice pentru exact acea persoana

Din toata cercetarea facuta pe aceasta tema nu am gasit nici o aplicatie de acestgen care sa ofere recomandari specializate pentru o anumita persoana

13 Continutul lucrarii

In aceasta sectiune vor fi prezentate capitolele acestui document si vor fi de asemeneasi descrise sumar ca si continut

bull Introducere (Capitolul 1) - ın acest capitol se va prezenta de fapt contextul proiec-tului motivatia de la care s-a pornit cand a fost ınceput si de asemenea e cuprinsaın ea si aceasta descriere a continutului pe capitole

bull Obiectivele Proiectului (Capitolul 2) - ın acest al doilea capitol sunt prezentate obiec-tivele proiectului atat obiectivul principal cat si obiectivele secundare ce doresc a fiındeplinite la final

bull Studiu Bibliografic (Capitolul 3) - cel de-al treilea capitol este reprezentat de studiulbibliografic unde vor fi prezentate diverse concepte teoretice de la care s-a pornit cuproiectul lucrari si articole prezentate de altii pe teme ce au legatura cu aplicatia side asemenea solutiile existente care se apropie de aceasta lucrare

bull Analiza si Fundamentare Teoretica (Capitolul 4) - ın capitolul de analiza si fun-damentare teoretica vor fi prezentate cerintele de la care porneste proiectul atatcele functionale cat si cele non-functionale prezentarea cazurilor de utilizare prin-cipale ale proiectului si de asemenea o analiza asupra tehnologiilor propuse pentruacest proiect De asemenea va contine si o arhitectura conceptuala a sistemului lamomentul de ıncepere al acestuia

bull Proiectare de Detaliu si Implementare (Capitolul 5) - cel de-al cincilea capitol pre-zinta modul de implementare al proiectului Acest lucru presupune schema arhi-tecturii proiectului si de asemenea si o descriere a fluxurilor de baza ale aplicatieiIn plus este descrisa structura dupa care s-a construit baza de date sub forma degraf din ce noduri si ce relatii In ultimul rand este descris modul ın care a fostimplementata securitatea sistemului

bull Testare si Validare (Capitolul 6) - acest capitol descrie modurile ın care aplicatia afost testata atat pe componente cat si validarea finala pe utilizatori reali

bull Manual de Instalare si Utilizare (Capitolul 7) - penultimul capitol prezinta tehnologi-ile ce trebuie instalate pentru a face sistemul sa functioneze De asemenea se vaprezenta modul ın care sistemul poate fi utilizat

bull Concluzii (Capitolul 8) - ın ultimul capitol vor fi analizate rezultatele obtinute si sevor descrie noi extensii ce pot fi implementate pentru a ımbunatati sistemul

2

Capitolul 2

Obiectivele Proiectului

In acest capitol se va prezenta obiectivul principal al lucrarii cel de la care a pornittoata ideea proiectului Apoi ın continuare se vor prezenta obiectivele secundare alepoiectului care au dus la modul ın care a fost acesta implementat

21 Obiectivul principal

Scopul principal al acestui proiect consta ın construirea unui sistem de recomandarecare sa ajute utilizatorii sa poata sa cumpere cadouri pentru cunoscuti ıntr-un mod multmai eficient Sistemul va fi o aplicatie web care va avea utilizatori ce se vor putea auten-tifica si dupa stabilirea unui profil propriu cunoscutii rudele sau prietenii vor putea saprimeasca sugestii de cadouri exact pentru acea persoana Pentru cadouri vor fi introdusede catre producatori diverse obiecte si servicii In felul acesta tot procesul de cumparare alunui cadou devine mult mai usor pentru persoana care ıl cumpara si cadourile devin multmai utile pentru cei care le primesc

22 Obiective specifice

Obiectivele specifice care se va urmari sa fie atinse ın cadrul acestui proiect sunturmatoarele

bull Studierea mai multor tipuri de baze de date de la cele relationale la cele No SQLsi analizarea lor pentru a stabili care este cea mai potrivita pentru un sistem derecomandare de acest gen

bull Studierea despre diferitele tipuri de sisteme de recomandare de la cele de bazaadica filtrare bazata pe continut si filtrare colaborativa la combinatia dintre eleadica sistem de recomandare hibrid pana la cele mai putin folosite adica pe bazademografica bazata pe cunostinte sau bazata pe utilitate Iar dupa aceea alegereacelei mai potrivite metode pentru un sistem de recomandare cadouri

3

bull Intelegerea conceptului de rdquocold startrdquo la sisteme de recomandare ca problema a aces-tora si gasirea unor solutii care ar putea sa ınlature sau cel putin sa ımbunatateascaaceasta problema

bull Documentarea despre diferite metode de construire a unui profil al utilizatorului sidin aceste metode alegerea celei mai potrivite din punct de vedere al timpului care ıitrebuie sistemului pana cand rdquoınvatardquo suficiente lucruri despre utilizator ıncat poateface recomandari corecte

bull Pe baza tuturor cunostintelor acumulate ın urma studiului construirea unei aplicatiiweb ca demonstratie a alegerilor facute

4

Capitolul 3

Studiu Bibliografic

Obiectivul acestui capitol este prezentarea conceptelor teoretice la baza carora staacest proiect Vor fi prezentate concepte precum modul de functionare al sistemelor derecomandare tipurile de sisteme de recomandare abordarea celor de la Netflix asupradomeniului Neo4j ca solutie pentru un sistem de recomandare utilizarea unei retele socialepentru crearea profilului unui utilizator si reteaua Facebook ca exemplu de astfel de reteaiar ın final solutii similare

31 Modul de functionare al sistemelor de recoman-

dare

Un sistem de recomandare este o tehnologie implementata ın situatiile ın care ar-ticole (produse filme evenimente) sunt recomandate utilizatorilor (clienti vizitatori uti-lizatori de aplicatii cititori) sau invers Numarul mare al utilizatorilor acestor aplicatiieste ceea ce face ca problema sa fie dificila si costisitoare de rezolvat

Motoarele de recomandare sunt ın esenta instrumente de filtrare a datelor careutilizeaza algoritmi si date pentru a recomanda cele mai relevante elemente unui anumitutilizator [9] Sau ın termeni simpli nu sunt altceva decat o forma automatizata a unuirdquovanzator ıntr-un magazin de hainerdquo Lui i se cere un produs si el nu numai ca arata acelprodus dar si altele asemanatoare pe care le-am putea cumpara

Un sistem de recomandare are trei faze de baza dupa cum este prezentat si ındiagrama 31 pe baza carora functioneaza Prima faza este cea de colectare a datelorSistemele de recomandare se bazeaza mereu pe date anterioare deci faza de ınceput ıncare acumuleaza informatii este esentiala si de multe ori o problema foarte grea de rezolvatAceasta problema se mai numeste si rdquocold startrdquo Problema este reprezentata de faptul caun utilizator nou al unei aplicatii nu are informatii stocate despre el sau despre activitatealui fiind nou Iar sistemele de recomandare nu pot sa stie de fapt ce ıi place lui decat dupace utilizeaza o perioada aplicatia De multe ori solutia adusa de oameni pentru aceastaproblema este un chestionar de ıntrebari adresat utilizatorului care sa ıl poata face sa se

5

Figura 31 Fazele unui sistem de recomandare1

ıncadreze ıntr-un tipDe fapt din aceasta cauza sistemele de recomandare devin tot mai bune si mai

exacte cu cat sunt folosite mai mult deoarece sunt stocate tot mai multe informatii despreutilizator

Cea de-a doua faza a unui sistem de recomandare este cea de ınvatare Acoloaplicatia trebuie sa stocheze datele despre utilizator si trebuie la urmatoarea recomandaresa se bazeze pe cele dinainte si ın functie de ele sa o faca Acest lucru poate fi realizat fiedirect pe baza setului de date colectat ın faza de colectare a informatiilor care ar puteafi bazat pe memorie sau bazat pe model fie prin activitatile utilizatorului care au fostobservate

A treia faza este cea de recomandare propriu-zisa ın care doar utilizatorul facecererea de recomandari si acestea ıi sunt trimise

32 Tipuri de sisteme de recomandare

In continuare ca studiu bibliografic au fost tipurile sistemelor de recomandare [11]Ca si teorie sunt mai mute tipuri de sisteme de recomandare si o reprezentare graficaa acestor tipuri este prezentata ın figura 32 Cea mai de baza ımpartire este ın douacategorii recomandari bazate pe continut si recomandari bazate pe filtrare colaborativa

Filtrarea bazata pe continut creeaza un profil de utilizator bazat pe o metoda deınvatare pentru a determina elementele pe care un anumit utilizator le-ar dori De exemplusite-ul poate utiliza un sistem de cuvinte cheie care sugereaza articole cu cuvinte cheiesimilare ın descrierea unui element pe care utilizatorul l-a cumparat anterior

Recomandarile bazate pe filtrare colaborativa se inspira din similaritatile cu ceilaltiutilizatori Gasesc utilizatori asemanantori cu cel pentru care se face recomandarea pebaza actiunilor din trecut despre aceia si se recomanda lucruri care le plac celorlalti Acesttip de recomandare se potriveste perfect cu recomandarile de filme Acolo un om cu gusturi

1httpswwwsciencedirectcomsciencearticlepiiS1110866515000341

6

asemanatoare va putea sa recomande cel mai bine un alt film unui prieten Cea mai simplaimplementare pentru asa ceva este sub forma unei matrici cu spatii goale ın locurile undenu se cunoaste informatie

Pe langa aceste tipuri de recomandari mai sunt si altele dar care nu sunt folosite lafel de des

Figura 32 Tipurile sistemelor de recomandare2

In filtrarea bazata pe criterii demografice se fac recomandari catre utilizatori pebaza informatiilor lor demografice Sistemul va sugera elemente care au fost selectate dealti utilizatori care se ıncadreaza ın acelasi profil demografic

Filtrarea bazata pe utilitate se bazeaza pe utilitatea pe care utilizatorul o va obtinede la produs Poate include lucruri precum fiabilitatea si disponibilitatea vanzatoruluipentru a se asigura ca recomanda produse usor de obtinut de catre utilizator

Filtrarea bazata pe cunostinte recomanda selectii pe baza preferintelor si modelelorde cumparare cunoscute despre utilizator Intrucat sistemul va sti ce a cumparat con-sumatorul ın trecut acesta poate face recomandari ın functie de ceea ce ar putea satisfaceaceste nevoi ın viitor

Filtrarea hibrida combina doua sau mai multe tehnici de recomandare diferite pentrua crea un sistem de recomandare mai detaliat

2httpswwwsciencedirectcomsciencearticlepiiS1110866515000341f0005

7

33 Abordarea Netflix

Foarte multa cercetare ın domeniul sistemelor de recomandare a fost influentata decei de la Netflix

Figura 33 Tipuri de recomandari oferite de Netflix3

Netflix este un serviciu de streaming care permite clientilor sa vizioneze o gamalarga de emisiuni TV filme documentare si multe altele pe mii de dispozitive conectatela internet

In figura 33 este o imagine a site-ului cu tipurile diferite de recomandari pe careacestia le ofera

Cheia succesului Netflix consta ın capacitatea lor de a anticipa ceea ce le placeutilizatorilor motiv pentru care fiecare doua din trei ore de vizionare ın Netflix provin dinrecomandari In trecut Netflix au folosit informatii despre sex si varsta pentru a determinace filme sa recomande Acum ei folosesc de exemplu ceea ce utilizatorul a urmaritınainte a cautat cat timp petrece utilizatorul vizionand filme si tipul de dispozitiv utilizatPredictiile din motorul de recomandare Netflix nu se bazeaza doar pe comportamentulutilizatorului ci si pe context (cum ar fi timpul zilei) popularitatea titlurilor noutateadiversitatea si cat de recent a fost scos filmul sunt factori importanti [7]

Premiul Netflix a fost o competitie lansata ın 2006 pentru cel mai bun algoritm defiltrare colaborativa pentru a prezice ratingurile utilizatorilor pentru filme pe baza eva-luarilor anterioare fara alte informatii despre utilizatori sau filme adica fara ca utilizatoriisau filmele sa fie identificate stiind doar numerele atribuite pentru concurs ale acestoraPremiul pentru castigator consta ın 1 milion de dolari Peste 2000 de echipe au depusseturile de predictie si peste 650 de echipe au depasit precizia algoritmului actual al Netflix

3httpstechblogglomexcompostrecommender-systemshtml

8

cu mai mult de 5 [11] Castigatorul a fost echipa BellKors Pragmatic Chaos care adepasit algoritmul Netflix cu 1006

Cei de la Netflix au fost extrem de multumiti de rezultatul obtinut si nu numai caau ıncorporat acel algoritm ın algoritmul lor existent de recomandare dar au initiat si o adoua editie a competitiei

34 Sisteme de recomandare cu Neo4j

Urmatoarea parte a studiului bibliografic s-a axat pe bazele de date de tip grafGraphDB si mai exact Neo4j ın comparatie cu celelalte tipuri de baze de date adica celerelationale In cartea [10] sunt prezentate aceste concepte din punct de vedere teoretic siın lucrarile de master [5] si [1] este prezentata aceasta comparatie ıntre diferite tipuri debaze de date pe o aplicatie reala

Limbajul care se foloseste ın bazele de date Neo4j este Cypher Cu ajutorul acestuiase mapeaza query-urile pe noduri si relatii Din punct de vedere teoretic diferenta ıntrebazele de date relationale si cele sub forma de graf consta ın modul ın care sunt stocatedatele In timp ce ın bazele de date relationale datele sunt stocate ın structuri de datesub forma de tabel ın cele sub forma de graf datele sunt stocate ın noduri Coloaneletabelelor din bazele de date relationale se mapeaza ın bazele de date sub forma de graf peproprietati Pentru a face o legatura ıntre tabelele relationale se foloseau rdquochei strainerdquo pecand la Neo4j exista relatii ıntre noduri Din cauza faptului ca bazele de date sub formade graf s-au inspirat din cele relationale exista o asemanare ıntre ele si toate lucrurile auun corespondent ın cealalta

In lucrarea [12] sunt prezentate avantajele folosirii unei baze de date sub forma degraf cand se lucreaza cu retele sociale La aplicatiile de tipul retelelor soriale relatiile dintrenoduri sunt partea cea mai importanta iar pentru acestea o baza de date sub forma degraf se mapeaza cel mai bine Un avantaj al bazelor de date sub forma de graf din punctulde vedere al programatorilor cu acestea se lucreaza foarte similar ca si cu cele relationaledupa cum se prezinta si ın [4]

Un exemplu de sistem de recomandare construit cu Neo4j este [11] In acesta lucrareeste prezentata construirea unui sistem de recomandare care sa recomande prieteni ıntr-oaplicatie de socializare In lucrare sunt patru abordari pentru construirea unui astfel desistem Prima consta ın recomandarea unor prieteni cu care utilizatorul ar avea prieteniın comun cea de-a doua sunt persoane cu care utilizatorul se afla ın acelasi grup cea de-atreia sunt utilizatori care au mers la aceleasi evenimente ca si utilizatorul si ultima abordareconsta ın recomandarea persoanelor cu cei mai multi prieteni In urma mai multor teste sistatistici s-a decis ca abordarea cea mai buna este prima cea cu prietenii ın comun Toateaceste patru metode de oferire a recomandarilor se mapeaza foarte usor pe o baza de datesub forma de graf si reprezinta doar cate un query destul de simplu ın Cypher O astfelde aplicatie s-ar fi mapat mult mai greu pe o baza de date relationala datorita multiplelorrelatii si legaturi

9

Un alt exemplu de aplicatie unde s-a ales baza de date Neo4j a fost [2] Aicipentru articolele politice pe care sistemul le recomanda se creeaza o combinatie ıntrerecomandarile obtinute din articolele care le plac oamenilor cu care utilizatorul vorbestemult si lucruri care le plac utilizatorilor cu care acesta are lucruri ın comun Si ın acest cazexista o multime de relatii ıntre utilizatori si articole si cel mai usor se obtin recomandarilecu o aplicatie sub forma de graf motiv pentru care au si ales Neo4j

35 Utilizarea retelei Facebook pentru crearea unui

profil utilizatorilor

In continuare ca studiu bibliografic au urmat sisteme asemanatoare cu sistemuldorit si modul ın care acestia au reusit sa creeze profilul utilizatorului [13] Problema ceamai mare este rdquocold startrdquo-ul Adica atunci cand un utilizator este nou ın aplicatie nuse stiu suficiente informatii despre el pentru a putea sa i se ofere recomandari Dupa ceacesta foloseste aplicatia o perioada de timp ar putea sa i se ofere recomandari bazate peactivitatea sa anterioara ın aplicatie Din acest motiv la ınceput recomandarile pot lasade dorit si pot fi nu tocmai corecte

O metoda ın care se poate rezolva aceasta problema se afla ın lucrarea de master[7] ın care la utilizatorii noi se recomanda restaurante pe baza pozitiei lor geograficeAtunci cand doresti sa mergi la un restaurant este foarte importanta distanta la care seafla acel restaurant Din aceasta cauza pentru un utilizator caruia sistemul nu stie ce sa ıirecomande ıi recomanda restaurante la ıntamplare dintre cele care se afla cel mai aproapede el In felul acesta dupa ce merge la unul din restaurante si da feedback sistemul poatedupa aceea sa ıi faca recomandari

In lucrarea [8] recomandarile pentru votare au doua abordari La prima i se reco-manda lucrurile care le-a recomandat persoana cu scorul cel mai bun Si cea de-a douaabordare consta ıntr-un set de ıntrebari la care un utilizator nou trebuie sa raspunda candısi face contul

In acest caz cea mai buna metoda ın care se poate rezolva aceasta problema parea fi sa se ia informatiile de la API-ul de la Facebook Facebook este o aplicatie extremde utilizata si care ofera ca informatii publice exact ce ar fi necesar pentru a recomandacadouri de exemplu data nasterii sau lucruri care ıi plac unui utilizator Cu ajutorulacestora se poate calcula varsta utilizatorului poate sa fie ıncadrat ıntr-un profil si sepoate afla stilul de lucruri care ıi plac

Toate aceste informatii publice de la Facebook pot fi salvate si pot fi utilizate maitarziu pentru a se creea recomandari pe baza lor In articolul [3] despre valoarea datelor dela Facebook se prezinta ca si caz de utilizare pentru un site de comert online Aceasta estefoarte asemanatoare din punct de vedere al recomandarilor cu aplicatia de recomandarecadouri Diferenta dintre cele doua este ca ın cazul uneia trebuie sa recomande produsepentru utilizatorul aplicatiei si cealalta pentru un prieten al acestuia

10

Din punct de vedere al aplicabilitatii Facebook este o retea sociala deci datele salese mapeaza foarte bine pe o baza de date de tip graf cum este prezentat si ın lucrarea [6]

Asadar daca la crearea contului utilizatorului ın aplicatie se iau si informatiile pu-blice despre utilizator se vor putea oferi recomandari mult mai corecte ınca de la ınceput

36 Solutii similare

Ca solutii similare pe piata online nu exista aplicatii folosite pentru a recomandacadouri personalizate specific pentru o persoana anume Multe site-uri considera ca eirecomanda cadouri ınsa acestea reprezinta de fapt o filtrare mai avansata a rezultatelorproduselor de pe site-ul lor

Un site care ofera cadouri personalizate este Giftly 4 prezentat ın figura 34 careofera o modalitate usoara de a oferi cadouri Acest site nu are parte de recomandari cia gasit un mod de a face oamenii sa primeasca mereu ceea ce ısi doresc Cel care oferacadoul nu ıl cumpara ci doar ıl sugereaza dar decizia finala asupra cadoului este la celcare ıl primeste Modul ın care functioneaza este

1 Se ofera un rdquocard cadourdquo prin email sms printat sau ca o felicitare de ınaltacalitate

2 Destinatarul alege cel mai convenabil mod de a primi cadoul rdquocard cadourdquo ınposta sau direct ca bani ın contul bancar sau contul PayPal

3 De fapt utilizatorul ıi sugereaza destinatarului ce ar vrea el sa ofere ca si cadouiar destinatarul trimite ca mesaj modul ın care a cheltuit banii

Figura 34 Site web Giftly

4httpswwwgiftlycom

11

Ofera de asemenea si sugestii de cadouri Un om cand navigheaza pe site poate sase uite la cadouri ın categoriile Popular Holidays Birthdays Drinks Eats Meals BackTo School Get Fresh Health Fitness Going Out Getaway Top Shelf For The HipsterClothes For Her Clothes For Him Congratulations Expecting Activities si Custom

Un alt site cu cadouri este Etsy 5 cu imaginea 35 care arata site-ul Etsy este o piataglobala pentru bunuri unice si creative Pe pietele lor milioane de oameni din ıntreagalume se conecteaza atat online cat si offline pentru a face vinde si cumpara bunuri uniceEtsy ofera de asemenea o gama larga de servicii si instrumente de vanzari care ajutaıntreprinzatorii creativi sa ınceapa sa gestioneze si sa-si masoare afacerile Misiunea loreste sa pastreze comertul uman Deci de fapt acest site sprijina mai mult producatoriinu comerciantii De asemenea este mai mult axat pe bunuri unice si lucruri rdquounicerdquo Ca sicelelalte site-uri de genul acesta are o modalitate de a cauta lucrurile mai inteligent maispecializat pe ceea ce te intereseaza Categoriile de cautare sunt Jewelry AccessoriesClothing Shoes Home Living Wedding Party Toys Entertainment Art CollectablesCraft Supplies Tools si Vintage

Figura 35 Site web Etsy

Cel de-al treilea site care ofera servicii asemanatoare este Gifts 6 prezentat ın figura36 Acesta se focuseaza pe cadouri pentru diverse ocazii cum ar fi zilele de nastereCraciun diverse aniversari si alte evenimente la care se cumpara cadouri Pentru parteade recomandare se ofera posibilitatea de a efectua un test despre acel om caruia dorestisa ıi cumperi cadoul care are ca scop ıncadrarea omului respectiv ıntr-un profil si apoi

5httpswwwetsycom6httpswwwgiftscom

12

alegerea unor sugestii ce s-ar potrivi unei persoane cu acel tip de personalitate O primaıntrebare se refera la genul persoanei si ıntrebarea este daca cadoul este pentru o femeieun barbat o fetita sau un baietel Cea de-a doua ıntrebare se refera la marja de varsta ıncare se ıncadreaza acel om de exemplu pentru barbat optiunile sunt adolescent barbat ınjur de 30 de ani sau barbat ın varsta Cea de-a treia ıntrebare se refera la personalitateaomului Mai exact se fac sugestii pentru tipuri de lucruri ce i-ar putea placea unui omcare are trasaturile descrise ın primele doua ıntrebari De exemplu la barbati ın jur de30 de ani optiunile sunt ıi place sportul ıi place natura e aventurier ıi place golful ıiplace sa faca gratare sa serveasca bauturi sa gateasca sa animeze ıi place sa se ımbraceelegant este sef e entuziasmat de bere sau e un fan al sporturilor Iar ın final ın functiede raspunsurile date la ıntrebari se afiseaza sugestii de cadouri care se potrivesc oamenilorcu acel tip de personalitate

Figura 36 Site web Gifts

Nordstrom 7 care este prezentat ın imaginea 37 are o abordare similara avand pesite o multime de optiuni de filtrare a cadourilor Se pot cauta ın acest site cadouri pentrubebelusi cadouri de Craciun bijuterii pentru femei optiunile sunt multiple Acest lucruofera utilizatorilor sugestii pentru a le fi mai usor sa ıncadreze aceasta persoana ıntr-unanumit tip Iar dupa alegerea categoriei toate sugestiile de cadouri oferite de catre sitese ıncadreaza ın acel tip Ca avantaj al acestui site este ca ei ofera si serviciul de livrareal cadoului dupa cumparare oriunde ın lume Un dezavantaj al multor site-uri de genulacesta este ca ofera livrare doar ın zona sa apropiata

7httpsshopnordstromcomcgifts

13

Figura 37 Site web Nordstrom

14

Capitolul 4

Analiza si Fundamentare Teoretica

In acest capitol vor fi prezentate cerintele functionale ale lucrarii ımpreuna cucerintele non-functionale ale acesteia De asemenea va fi prezentata diagrama cazurilor deutilizare si vor fi prezentate mai ın detaliu cazurile de utilizare principale ale aplicatiei Incontinuare se va prezenta perspectiva tehnologica a proiectului si se vor explica deciziiletehnologice luate In final se va prezenta diagrama conceptuala a aplicatiei

41 Cerinte functionale

bull Posibilitatea autentificarii ın aplicatie si crearii unui profil propriu din care se potutiliza informatii si cu ajutorul caruia utilizatorul poate fi ıncadrat ıntr-un profil

bull Utilizatorii pot crea prietenii ca ıntr-o retea de socializare pentru a putea afla infor-matii despre prieteni si pentru a li se putea recomanda cadouri pentru acestia

bull Cu ajutorul informatiilor de la Facebook un utilizator poate fi notificat dinainte caurmeaza ziua de nastere a unuia din prietenii lui si sa i se ofere mai multe variantede cadouri potrivite pentru acesta Aceasta informatie o primeste cu suficient timpınainte pentru a nu fi surprins fara un cadou De la Facebook pe langa informatiiledespre data zilei de nastere sunt importante si varsta sau lucrurile care ıi plac uti-lizatorului Toate acestea ajuta la crearea profilului utilizatorului pe baza caruia serecomanda dupa aceea cadourile

bull De asemenea sistemul poate recomanda si un cadou pentru alt tip de evenimentdecat zi de nastere de genul cadou de Craciun cadou de nunta cadou pentru unnou-nascut etc

bull In aplicatie vor fi adaugate si diferite produse iar pentru a face mai usoara cumparareade cadouri se va putea face si comanda pe internet In momentul ın care un utilizatorface o noua comanda producatorii produselor comandate sunt ınstiintati de existentaacestei noi comenzi

15

bull Pentru persoanele la care pe profilul de Facebook este insuficient completat saupentru a putea cumpara cadouri pentru o persoana care nu are Facebook sau nuare cont ın aceasta aplicatie si despre care ın acest fel nu se cunosc nici un felde informatii se vor putea filtra cautarile pentru cadou printr-o serie de ıntrebaristandard Aceste ıntrebari vor putea creea un rdquomini-profilrdquo pentru acea persoanapentru ca sistemul sa poata recomanda cadouri

42 Cerinte non-functionale

bull Securitate sistemul nu raspunde cererilor decat atunci cand utilizatorul a fost au-tentificat ın aplicatie si are rolul necesar pentru a face acea cerere

bull Portabilitate aplicatia nu depinde de sistemul de operare pe care ruleaza De aseme-nea nu e dependenta de browserul folosit de utilizator

bull Disponibilitate sistemul ramane stabil ın fata erorilor si functioneaza la fel si dupaaparitia unei erori

bull Extensibilitate sistemul permite adaugarea sau modificarea unor componente atuncicand cerintele aplicatiei se modifica Pe langa asta e flexibila unor dezvoltari ulte-rioare

43 Cazuri de utilizare

In aceasta sectiune se vor prezenta actorii aplicatiei diagrama cazurilor de utilizaresi vor fi descrise cazurile de utilizare de baza ale fiecarui actor

Ca si actori aplicatia are patru tipuri de utilizatori

bull utilizator anonimbull clientbull producatorbull administrator

Aplicatia este conceputa ın asa fel ıncat ıntre actori este o relatie de mostenire Acestlucru presupune ca un actor are posibilitatea de a efectua tot ce putea cel dinaintea lui siceva ın plus Deci utilizatorii anonimi au cele mai putine permisiuni iar administratoriiau permisiuni totale Acest lucru se vede foarte clar si ın diagrama cazurilor de utilizaredin imaginea 41

In continuare vor fi prezentate cazurile de utilizare

1 recomandare cadouri2 adaugare produs3 modificare rol utilizator

16

Figura 41 Digrama cazurilor de utilizare

17

431 Recomandare cadouri

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unutilizator trebuie sa le urmeze pentru a primi recomandari de cadouri pentru un cunoscutsi pentru a efectua o comanda

Actorul principal

Orice utilizator al aplicatiei

Parti interesate si interese

Utilizatorul care doreste sa cumpere un cadou este interesat de a gasi un cadoupotrivit pentru cineva pe care ıl cunoaste

Producatorul care e interesat sa ısi poata vinde produseleUtilizatorul care primeste cadoul fiind interesat sa primeasca un cadou care sa i se

potriveasca si care sa ıi placa

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand utilizatorul porneste aplicatia11 Utilizatorul verifica daca are cont de Facebook si daca are urmeaza pasul 111

daca nu 22111 Utilizatorul se autentifica ın aplicatie cu ajutorul credentialelor de la

Facebook12 Utilizatorul deschide sectiunea de recomandare cadouri13 Utilizatorul completeaza formularul cu datele ce trebuie introduse pentru a primi

recomandari de cadouri pentru un prieten14 Utilizatorul poate fi satisfacut cu recomandarile primite si atunci urmeaza pasul

141 iar daca nu este atunci urmeaza cazul alternativ 23141 Utilizatorul adauga ın cosul de cumparaturi cadouri pe care doreste sa

le cumpere15 Utilizatorul cere sa ısi vada cosul de cumparaturi16 Utilizatorul poate sa se declare multumit de cosul de cumparaturi caz ın care

urmeaza pasul 161 sau poate sa aleaga cazul alternativ 24161 Utilizatorul aproba cosul de cumparaturi si accepta sa se faca comanda

17 Sistemul introduce ın baza de date comanda18 Utilizatorul va putea vedea la sectiunea comenzilor sale noua comanda si statusul

ei19 Sistemul notifica producatorul de aparitia noii comenzi110 Utilizatorul se dezautentifica din aplicatie

18

Use-Case EndUtilizatorul se va deconecta din aplicatie si o va ınchide

Figura 42 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueazaAcest flux poate aparea la orice pas211 Utilizatorul deschide sectiunea de recomandare cadouri212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca utilizatorul nu are cont de Facebook

19

Acest flux poate aparea la pasul 11221 Utilizatorul deschide pagina de Facebook222 Utilizatorul ısi face un cont pe pagina de Facebook si ısi completeaza

date despre el223 Utilizatorul revine la aplicatia de recomandare cadouri si ıncearca din

nou sa se autentifice ın aplicatie224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca utilizatorul nu e multumit de recomandariAcest flux poate aparea la pasul 14231 Utilizatorul sterge din cos cadourile pe care nu le mai doreste si revine

la pagina de recomandari232 Utilizatorul adauga alte cadouri ın cos233 Cazul de utilizare continua de la pasul 141

24 Flux-ul alternativ daca utilizatorul nu e multumit de produsele din cosul decumparaturi

Acest flux poate aparea la pasul 16241 Utilizatorul revine ınapoi la formularul cu introducerea datelor despre

beneficiarul cadoului242 Utilizatorul completeaza din nou datele243 Cazul de utilizare continua de la pasul 13

Preconditii

1 Utilizatorul trebuie sa aiba un cont de Facebook pentru a se putea autentifica ınaplicatie

2 Utilizatorul trebuie sa fie autentificat ın aplicatie pentru a putea face orice actiunedin acest caz de utilizare

3 Utilizatorul trebuie sa deschida sectiunea de recomandare cadouri pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noua comanda este salvata ın baza de date2 Comanda apare ın sectiunea de comenzi a utilizatorului ımpreuna cu statusul ei

curent3 Producatorul este notificat ca are o noua comanda

432 Adaugare produs

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unproducator trebuie sa le urmeze pentru a introduce un nou produs ın aplicatie

20

Actorul principal

Utilizatorii cu rol de producator sau cu rol de administrator

Parti interesate si interese

Producatorul care doreste sa introduca produsul nou ın aplicatie

Utilizatorii simpli care au o mai mare varietate de produse din care sa li se reco-mande cadouri

Figura 43 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo

21

Flux de evenimente

Use-Case Start

Cazul de utilizare ıncepe atunci cand producatorul porneste aplicatia

11 Producatorul verifica daca are cont de Facebook si daca are urmeaza pasul111 daca nu 22

111 Producatorul se autentifica ın aplicatie cu ajutorul credentialelor de laFacebook

12 Producatorul deschide sectiunea de adaugare produs

13 Producatorul completeaza datele necesare despre noul produs ımpreuna cu tipulde persoana si eveniment care i s-ar potrivi

14 Producatorul verifica daca este multumit de datele introduse si daca da urmeazapasul 141 daca nu 23

141 Producatorul efectueaza operatia de adaugare produs

15 Sistemul adauga un nou produs ın baza de date

16 Sistemul notifica producatorul ca noul produs a fost introdus cu succes

17 Producatorul se dezautentifica din aplicatie

Use-Case End

Producatorul se va deconecta din aplicatie si o va ınchide

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Producatorul deschide sectiunea de adaugare produs

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca producatorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Producatorul deschide pagina de Facebook

222 Producatorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Producatorul revine la aplicatia de recomandare cadouri si ıncearca dinnou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca Producatorul nu e multumit de datele introduse despreprodus

Acest flux poate aparea la pasul 14

231 Producatorul sterge datele gresite despre produs

232 Producatorul adauga alte date despre produs

233 Cazul de utilizare continua de la pasul 141

22

Preconditii

1 Producatorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Producatorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Producatorul trebuie sa aiba cont cu rol de rdquoproducatorrdquo sau rdquoadminrdquo pentru aputea face operatia aceasta

4 Producatorul trebuie sa deschida sectiunea de adaugare produs pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noul produs este salvat ın baza de date2 Produsul poate fi adaugat la recomandarile unui utilizator din acel moment

433 Modificare rol utilizator

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unadministrator trebuie sa le urmeze pentru a modifica rolul unui utilizator al aplicatiei

Actorul principal

Un utilizator al aplicatiei care are rol de administrator

Parti interesate si interese

Administratorul care doreste sa modifice rolul unui utilizatorUtilizatorul care doreste sa ısi schimbe rolul

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand administratorul porneste aplicatia11 Administratorul verifica daca are cont de Facebook si daca are urmeaza pasul

111 daca nu 22111 Administratorul se autentifica ın aplicatie cu ajutorul credentialelor de

la Facebook12 Administratorul deschide sectiunea de utilizatori13 Sistemul ıi returneaza administratorului utilizatorii care nu sunt administratori14 Administratorul modifica rolul utilizatorului din utilizator simplu ın producator

sau invers

23

15 Administratorul cere executarea modificarii

16 Sistemul executa modificarea iar ın caz de succes urmeaza pasul 161 si ın cazde eroare pasul 23

161 Sistemul notifica administratorul ca modificarea a fost efectuata cusucces

17 Utilizatorul se dezautentifica din aplicatie

Use-Case End

Administratorul se va deconecta din aplicatie si o va ınchide

Figura 44 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo

24

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Administratorul deschide sectiunea de utilizatori

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca administratorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Administratorul deschide pagina de Facebook

222 Administratorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Administratorul revine la aplicatia de recomandare cadouri si ıncearcadin nou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca sistemul returneaza o eroare la modificarea utilizatorului

Acest flux poate aparea la pasul 16

231 Sistemul returneaza un mesaj de eroare la modificarea utilizatorului

232 Aplicatia afiseaza mesajul de eroare administratorului

233 Cazul de utilizare continua de la pasul 15

Preconditii

1 Administratorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Administratorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Utilizatorul trebuie sa aiba cont cu rol de administrator pentru a putea efectuaorice actiune din acest caz de utilizare

4 Administratorul trebuie sa deschida sectiunea utilizatori pentru a putea ındeplinicerintele din cazul de utilizare

Postconditii

1 Noul rol al utilizatorului este salvat ın baza de date

2 La urmatoarea autentificare a utilizatorului acesta va observa ca interfata si maiprecis meniurile si actiunile care le poate face ıi vor fi diferite

25

44 Perspectiva tehnologica

441 Neo4j

Neo4j 1 este un sistem de gestionare a bazelor de date sub forma de graf dezvoltatde Neo4j Inc Descris de dezvoltatorii sai ca o baza de date tranzactionala compatibilacu ACID Neo4j este cea mai populara baza de date sub forma de graf dupa clasamentulDB-Engines

Baza de date Neo4j (ca si orice alta baza de date sub forma de graf) este foartediferita de o baza de date relationala cum ar fi MS Access SQL Server MySQL etcBazele de date relationale utilizeaza tabele randuri si coloane pentru stocarea datelor

Neo4j nu utilizeaza tabele randuri si coloane pentru stocarea sau prezentarea datelorci noduri si relatii

Neo4j este foarte potrivit pentru stocarea datelor care au multe relatii interconec-tate Acestea sunt de fapt aplicatiile ın care merita sa fie folosite De fapt bazele de datesub forma de graf cum este Neo4j sunt mult mai bune la tratarea datelor interconectatedecat bazele de date relationale

Acest lucru se datoreaza faptului ca modelul sub forma de graf nu necesita de obiceio schema predefinita Nu e nevoie sa se creeze structura bazei de date ınainte de a fiıncarcate datele asa cum se face la o baza de date relationala

Dar principalul motiv pentru care Neo4j este mai bun pentru datele relationalepentru acest tip de aplicatii este modul ın care permite crearea relatiilor Neo4j este con-struit ın jurul relatiilor si atunci nu este nevoie sa se configureze chei primare constrangerichei straine pentru a predetermina nodurile care pot avea o relatie si la ce date Cu Neo4jse poate adauga orice legatura ıntre orice nod ori de cate ori este nevoie

Neo4j are aceste calitati care nu se gasesc nici la celelalte baze de date NoSQLBazele de date non-relationale pe langa cele sub forma de graf sunt cele de tip coloanade tip document de tip cheie-valoare si de tip multi-model Nici unul din aceste tipuri nuau ca principala functionalitate maparea relatiilor si facilitatea interogarilor ıntr-o baza dedate cu multe relatii ıntre entitati

Generarea de recomandari personalizate este unul dintre cele mai frecvente cazuride utilizare a unei baze de date sub forma de graf Unele dintre principalele beneficii aleutilizarii grafurilor pentru a genera recomandari includ

- Performanta Lipsa indexurilor permite calcularea recomandarilor ın timp realasigurand ca recomandarea este ıntotdeauna relevanta si reflecta informatii actualizate

- Model de date Modelul de graf cu proprietati permite combinarea cu usurinta aseturilor de date din mai multe surse

Un alt avantaj al bazelor de date sub forma de graf Neo4j este faptul ca respectatoate principiile din modelul de consistenta ACID

Garantia data de principiile ACID este ca ofera un mediu sigur ın care sa functionezedatele Acronimul ACID reprezinta

1httpsneo4jcomuse-casesreal-time-recommendation-engine

26

bull Atomic Toate operatiile dintr-o tranzactie reusesc sau fiecare operatie este reluatabull Consistent La finalizarea unei tranzactii baza de date este solida din punct de

vedere structuralbull Izolat Tranzactiile nu se lupta una cu cealalta Accesul controversat la date este

moderat de baza de date astfel ıncat tranzactiile par sa se execute succesivbull Durabil Rezultatele aplicarii unei tranzactii sunt permanente chiar si ın cazul unor

defectiuniCand vine vorba de tehnologiile NoSQL cele mai multe baze de date sub forma de

graf (inclusiv Neo4j) utilizeaza un model de consistenta ACID pentru a asigura ca datelesunt stocate ın siguranta si ın mod consecvent

Am ales baza de date sub forma de graf ca optiune pentru stocarea datelor deoarecedin toate lucrarile si articolele citite a fost optiunea cea mai buna pentru un sistem derecomandare Deci acesta se mapeaza perfect pe cerintele functionale ale proiectului Sidin optiunile de baze de date sub forma de graf Noe4j a avut de departe cele mai multeavantaje ea fiind si cea mai utilizata

442 Cypher

Cypher 2 este un limbaj declarativ de interogare pentru bazele de date sub formade graf care permite interogarea si actualizarea rapida a datelor Cypher este un limbajrelativ simplu dar foarte puternic Interogarile foarte complexe ale bazei de date pot fiusor exprimate prin intermediul limbajului Cypher

Este conceput pentru a fi un limbaj de interogare uman Scopul lui principal este dea face interogarile mult mai simple si unele interogari care la bazele de date relationale nuerau posibile le face posibile Constructiile sale se bazeaza pe grafica si pe limba englezalucru care ajuta la scrierea mai intuitiva a interogarilor Este construit pentru a fi maiintuitiv pentru citire si nu neaparat pentru scriere

Cypher se bazeaza pe modelul Graph Property care ın plus fata de elementelegrafice standard ale nodurilor si muchiilor (numite relatii ın Cypher) adauga etichete siproprietati ca si concepte Nodurile pot avea zero sau mai multe etichete ın timp ce fiecarerelatie este de exact un singur tip Nodurile si relatiile au de asemenea zero sau mai multeproprietati

Chypher este limbajul de interogare folosit la bazele de date Neo4j deci este opti-unea implicita atunci cand se alege Neo4j

443 Maven

Maven 3 este un instrument de management software si de ıntelegere a proiectelorsoftware Pe baza conceptului unui model de obiect de proiect (POM) Maven poategestiona construirea raportarea si documentarea unui proiect printr-o informatie centrala

2httpsneo4jcomdevelopercypher-query-language3httpswwwjavatpointcommaven-tutorial

27

Obiectivul principal al lui Maven este acela de a permite unui dezvoltator sa ınte-leaga starea completa a efortului de dezvoltare ın cel mai scurt timp Avantajele Mavensunt

bull instalarea rapida a proiectului fara fisiere buildxml complicate doar un POMbull procesul de construire este standardizat pentru toate proiectelebull usor de ınvatat si de utilizatbull configurarea unui proiect este foarte rapidabull bine documentat

Am ales sa folosesc Maven deoarece este una din cele mai comune optiuni pentru aimporta librariile ıntr-un proiect si este si cel mai documentat Deci mereu cand esti pusın dificultate poti cauta pe internet sugestii

444 Spring Boot

Spring Boot 4 este un framework din cadrul Spring care ofera setari implicite pentruconfigurarea codului si adnotari pentru a lansa rapid proiecte noi ın executie Urmaresteabordarea rdquoConfigurarea defectiunilor vizionaterdquo pentru a evita un numar mare de linii decod pentru configuratii si pentru a ımbunatati procesul de dezvoltare

Avantajele Spring Boot sunt1 Face foarte usoara dezvoltarea de aplicatii bazate pe Spring cu Java sau Groovy2 Reduce timpul de dezvoltare si creste productivitatea3 Evita scrierea multor linii de cod adnotari si configurare XML4 Este foarte usor de integrat cu alte framework-uri din aceasi familie Spring cum ar

fi Spring JDBC Spring ORM Spring Data Spring Security etc5 Urmareste abordarea rdquoConfigurarea implicita a optiunilorrdquo pentru a reduce efortul

pentru dezvoltatori6 Ofera servere HTTP ıncorporate cum ar fi Tomcat Jetty etc pentru a dezvolta si

testa aplicatiile web foarte usor7 Ofera instrumentul CLI (Command Line Interface) pentru a dezvolta si testa apli-

catiile de tip rdquoSpring Bootrdquo (Java sau Groovy) din linia de comanda foarte usor sirapidAm ales ca optiune pentru partea de backend acest framework deoarece simplifica

foarte mult lucrurile Datorita lui un programator poate sa ısi concentreze mai tare energiape a construi proiectul din punctul de vedere al buissness-ului logic nu din punctul devedere al configurarilor necesare

445 Sencha CMD si ExtJS

Sencha CMD 5 este un instrument linie de comanda cross-platform care ofera multesarcini automate ın ciclul complet de viata al unei aplicatii ExtJS de la generarea unui

4httpswwwjavatpointcomspring-boot-tutorial5httpsdocssenchacomcmd

28

nou proiect la lansarea unei aplicatii ın productie

Sencha Cmd ofera o colectie de caracteristici puternice pentru economisirea timpu-lui care functioneaza ımpreuna cu Sencha ExtJS si Sencha Touch

Ext JS 6 este un framework pur JavaScript pentru construirea de aplicatii webinteractive cross-platform utilizand tehnici precum scripting Ajax DHTML si DOM

Avantajele framework-ului ExtJS sunt

1 Documentatia Extjs este foarte cuprinzatoare si bine ıntretinuta2 Aspectul cheie al bibliotecii EXTJS este suportul de tip cross-browser3 Framework-ul ExtJS ofera o multitudine de elemente UI Aceste elemente includ

forme casete de dialog file arbori si tabele4 Framework-ul ExtJS include suport pentru implementarile Ajax5 ExtJS ofera performante excelente Framework-ul este complet orientat spre obiecte

si este extensibil asta pentru ca este scris ın JavaScript

Pentru partea de frontend se foloseste framework-ul ExtJS deoarece are o arhitec-tura ce se mapeaza foarte bine pe proiectele de frontend si anume arhitectura bazata pecomponente Aceasta face ca ın proiect codul sa fie mult mai organizat si procesul dedezvoltare al proiectului sa fie mult mai scurt prin identificarea mai usoara a erorilor

446 Facebook API(Graph API)

Graph API 7 este modul principal de a pune date ın platforma Facebook si de aobtine date din platforma Facebook Este un API bazat pe HTTP pe care aplicatiile ılpot utiliza pentru interogarea datelor pentru a introduce postari noi pentru gestionareaanunturilor sau pentru a ıncarca fotografii

Este denumit Graph API dupa ideea unui rdquograf socialrdquo - o reprezentare sub formade graf a informatiilor de pe Facebook Este compus din

bull noduri - ın esenta obiecte individuale cum ar fi un utilizator o fotografie o paginasau un comentariu

bull muchii - conexiuni ıntre o colectie de obiecte si un singur obiect cum ar fi fotografiilede pe o pagina sau comentariile de la o fotografie

bull campuri - date despre un obiect cum ar fi ziua de nastere a unui utilizator saunumele paginii

De obicei se utilizeaza noduri pentru a obtine date despre un anumit obiect se uti-lizeaza muchii pentru a obtine colectii de obiecte legate de un singur obiect si se utilizeazacampurile pentru a obtine date despre un singur obiect sau mai multe obiecte dintr-ocolectie

Am folosit Facebook API ca solutie pentru a ımbunatati problema de rdquocold startrdquopentru ca este singurul site pe care marea majoritate a oamenilor au cont si salveazalucrurile care le plac Deci se potrivea perfect peste nevoile aplicatiei mele

6httpdocssenchacomextjs6207httpsdevelopersfacebookcomdocsgraph-api

29

447 Git

Git 8 este un sistem de control a versionarii pentru urmarirea modificarilor ın fisierelede pe computer si coordonarea activitatii asupra acestor fisiere ın randul mai multor per-soane Este utilizat ın principal pentru gestionarea codului sursa ın dezvoltarea de softwaredar poate fi folosit pentru a urmari schimbarile ın orice set de fisiere

Avantaje ale Git

bull Modelul distribuit numai ceea ce se doreste se face publicbull Branching-ul si merging-ul sunt usoarebull Fluxul de lucru este flexibilbull Integritatea datelor este asigurata Deoarece GIT utilizeaza arbori SHA1 coruperea

datelor din motive externe poate fi usor detectatabull Rapid Git este foarte rapid chiar si ın comparatie cu alte sisteme de control a

versionarii

Am folosit Git pentru a avea la proiect un back-up ın caz ca se ıntampla ceva cuproiectul salvat pe calculator

45 Arhitectura conceptuala

In figura 45 este prezentata arhitectura conceptuala a sistemului Acesta este ım-partit ın doua mari parti backend-ul si frontend-ul care comunica ıntre ele si ısi trimitinformatii

Se poate observa ca baza de date este de tip graf mai exact Neo4j si comunica cubackend-ul pentru a putea lucra cu datele stocate Backend-ul este structurat pe nivelefiecare cu un diferit rol si care trebuie parcurs pentru a procesa datele din interfata ınbaza de date Cele trei nivele sunt cel de Repository cel de Service si cel ControllerToate interogarile venite din interfata utilizator ajung ın nivelul de Controller Dupa ceinterogarile trec de securitatea sistemului ajung ın nivelul de Service Acolo se proceseazasi se afla partea de logica a aplicatiei Pentru a interactiona cu baza de date din Servicese apeleaza metodele din nivelul de Repository

In continuare backend-ul comunica prin protocolul HTTP cu interfata grafica cucare interactioneaza clientii aplicatiei Interfata este scrisa ın Ext JS si are o parte de Viewsi o parte de Controller care este cea care comunica cu backend-ul

Pentru partea de autentificare sistemul interactioneaza cu API-ul de la Facebookde la care ia dupa autentificare un access token Cu ajutorul acestuia ia dupa aceea datelenecesare pentru a putea crea un profil utilizatorului

8httpsguidesgithubcomintroductiongit-handbook

30

Figura 45 Arhitectura conceptuala

31

Capitolul 5

Proiectare de Detaliu siImplementare

In acest capitol vor fi prezentate detalii de implementare ale sistemului de recoman-dare incluzand o ımpartire al acestuia ın componentele care ıl cuprind

Obiectivul este de a prezenta arhitectura si modul de implementare al aplicatieipe baza datelor descoperite ın studiul bibliografic de la capitolul trei si cu tehnologiilehotarate la capitolul patru Pe langa asta va fi prezentata si structura bazei de date sideciziile luate pentru securitatea aplicatiei

51 Arhitectura sistemului

Din punctul de vedere al arhitecturii aplicatia se poate considera ca este alcatuitadin patru mari componente

1 API-ul de la Facebook2 Aplicatia client care reprezinta interfata grafica a aplicatiei3 Aplicatia server adica backendul aplicatiei si partea ın care se afla partea de rdquobusiness

logicrdquo4 Baza de date

Partea componenta reprezentata de API-ul de la Facebook este doar o componentacu care aplicatia se integreaza si pe care aceasta o foloseste In interactiunea cu ea interfatada o cerere de autentificare apare o fereastra de la Facebook ın care utilizatorul introducecredentialele de la API-ul de Facebook se primeste ınapoi un access token si cu ajutorulacestuia face o cerere pentru a primi datele personale ale utilizatorului pentru creeareaprofilului utilizator

Urmatoarea parte a aplicatiei este interfata utilizator frontend-ul care reprezintapartea cu care utilizatorul interactioneaza si locul unde ıi sunt afisate informatiile

Cererile din interfata ajung ın a treia parte componenta a sistemului partea deserver adica backend-ul aplicatiei Acolo toate cererile sunt citite si procesate iar raspun-

33

sul lor este trimis la interfata utilizator Aceasta este partea care reprezinta rdquogandireardquoaplicatiei Aceea este componenta care face legatura ıntre cererile utilizatorului din inter-fata si datele stocate ın baza de date

Ultima componenta a aplicatiei o reprezinta baza de date care are ca rol sa stochezedatele despre utilizatori produse si comenzi Ea este o baza de date sub forma de grafde tipul Neo4j Acolo se salveaza entitatile aplicatiei sub forma de noduri si dependenteleıntre acestea sub forma de relatii ıntre aceste noduri

Figura 51 Diagrama de rdquodeploymentrdquo

In figura 51 este prezentata diagrama de rdquodeploymentrdquo a sistemului cu cele patrucomponente ale sistemului Aplicatia client comunica cu API-ul de la Facebook prin pro-tocolul securizat HTTPS cu backend-ul prin protocolul HTTP iar backend-ul cu baza dedate prin JDBC

Aplicatia a putut fi ımpartita ın aceste componente separate deoarece fiecare dintreele poate functiona independent de celelalte comunica cu ele doar prin mesaje Din acestmotiv locul unde ruleaza acestea pot sa fie pe servere diferite In plus daca aplicatiaar fi pusa pe servere pentru utilizatori ar putea fi mai multe servere pe care ruleaza ocomponenta si prin rdquoload balancingrdquo sa se trimita cererile ımpartite ıntre ele

Cum astfel componentele nu depind foarte mult unele de altele si pot rula faraa le interesa de unde le sunt trimise cererile este arhitectura cea mai corecta deoarecedefectarea sau o posibila eroare la una din ele nu o influenteaza cu nimic pe o alta Dacatoate ar rula pe acelasi server o eventuala defectiune a acestuia ar ınsemna o defectiune aıntregului sistem Insa daca exista mai multe noduri si se afla pe servere diferite pot doartoate cererile sa fie redirectionate spre un nod care functioneaza si aplicatia sa functionezepentru clienti la fel ca ınainte

34

Un alt avantaj al arhitecturii ar fi faptul ca la o lansare viitoare catre clienti se poatelansa doar componenta la care s-au facut modificari De asemenea aplicatia ar putea aveape viitor si o componenta mobila Iar cum serverul e independent poate fi acelasi serverfolosit de o alta aplicatie client

511 Arhitectura componentei backend

Arhitectura backend-ului este si ea ımpartita ın mai multe pachete pentru o maibuna structura si pentru o cat mai mica dependenta ıntre diversele componente Astfelcuplarea este minima ıntre clase si eventualele modificari ulterioare pot fi mai usor defacut

Serverul a fost implementat ın Java cu ajutorul framework-ului Spring Boot iarmediul de dezvoltare folosit a fost Intellij IDEA

Din punctul de vedere al ımpartirii arhitectura serverului aplicatiei este structurataın patru pachete si o clasa ın afara acestora Acea clasa este rdquomainrdquo-ul aplicatiei este parteacare trebuie rulata pentru a porni serverul Din cauza ca este o aplicatie Spring Boot si nuuna String singura adnotare necesara pentru a sti ca aceea este clasa rdquoradacinardquoa aplicatieieste SpringBootApplication

Cele patru pachete ale serverului sunt1 Cel de domeniu (domain) cu clasele POJO care reprezinta entitatile din baza de

date2 Cel de rdquomagazierdquo (repositories) care este cel care face direct actiunile ın baza de date3 Cel de serviciu (services) ın care se afla partea de logica a ıntregii aplicatii4 Cel de web ın care se afla clasele de rdquocontrollerrdquo

Figura 52 Diagrama de pachete pentru backend

35

Ca si dependente nivelul de web ıl foloseste pe cel de seviciu cel de serviciu ılfoloseste pe cel de rdquomagazierdquo iar clasele din pachetul de domeniu sunt folosite ın toatecelelalte pachete

In continuare voi prezenta pe rand fiecare nivel al serverului adica fiecare pachet

Figura 53 Diagrama de clase pentru pachetul rdquodomainrdquo

36

Nivelul de domeniu (domain) este alcatuit ın primul rand din clasele care suntentitati ın baza de date Acestea sunt reprezentate de toate clasele ce stocheaza informatiidespre utilizatori si despre produse si comenzi Pe langa informatiile personale despre unutilizator de genul numelui email-ului sau data nasterii care sunt salvate ın entitateapersoana se stocheaza despre utilizator ın clase diferite informatii de genul locului undelocuieste locul unde a copilarit locurilor unde a facut scoala locului unde lucreaza sau celmai important pentru aplicatia aceasta lucrurilor care ıi plac In afara acestor informatiidespre utilizatori sunt si clase cu informatiile despre prieteni despre produse sau desprecomenzi

Din cauza faptului ca aplicatia este de tipul unei retele sociale ın care exista prieteniiıntre persoane exista dependente ıntre toate entitatile aplicatiei Acesta este si motivulpentru care am ales baza de date sub forma de graf pe care sa se mapeze toate acesteentitati sub forma de noduri si toate aceste dependente sub forma de relatii

In pachetul de domeniu se afla si trei subpachete Unul dintre ele este pentruclasele folosite pentru a trata erorile aplicatiei In interiorul acestui pachet se afla douaclase pentru eroare si o exceptie cea folosita ın cazul ın care nu se gaseste ceea ce doresteutilizatorul Pe langa asta este clasa care are ca obiect raspunsul dat de sistem ın cazulunei erori la server Aceasta contine ın interiorul sau pe langa codul erorii si detalii despreeroarea trimisa Aceasta lista de detalii e reprezentata de obiectele de tipul celei de-a treiaclase din pachetul acesta

Celelalte doua subpachete aflate ın acest nivel sunt cele care contin clasele specialede cerere sau raspuns care au ajutat la maparea acestora mai bine In multe cazuri nua fost necesara trimiterea la interfata utilizator a tuturor informatiilor stocate despre oentitate si de aceea am ales sa creez ın aceste cazuri un obiect auxiliar care sa fie folositpe post de raspuns

Figura 54 Diagrama de clase pentru pachetul rdquorepositoriesrdquo

37

Cel de-al doilea nivel al aplicatiei backend este cel de rdquomagazierdquo (repositories) carecontine doar interfete de tip rdquoRepositoryrdquo

Aceste interfete sunt cele care fac operatiile directe asupra entitatilor din baza dedate

Unele interfete doar extind interfata care are deja implementate metodele CRUDsi din acest motiv nu au metode suplimentare iar altele au si metode ın plus care au carol sa execute interogari mai complexe asupra bazei de date In acele metode se pot scrieinterogarile ın Cypher pentru a putea primi informatii despre mai multe noduri sau desprerelatiile dintre acestea sau si pentru a returna doar anumite rezultate care ındeplinescanumite conditii In felul acesta a fost implementata si cererea de oferire a recomandarilorIn acel caz sistemul returneaza produsele care au ın descriere unul din lucrurile care se aflaın lista de obiecte sau servicii primite de la Facebook ca ıi plac utilizatorului

Nivelul de rdquoRepositoryrdquo este folosit direct de cel de-al treiea nivel cel de servi-ciu Acesta este nivelul la care se executa logica aplicatiei unde se comanda modul defunctionare al ıntregii aplicatii

Figura 55 Diagrama de clase pentru pachetul rdquoservicesrdquo

Pe acest nivel ajung toate cererile din server dupa ce trec de verificarile de securitateIn acest pachet se afla si clasa de securitate care face verificarile necesare In aceasta clasaexista o metoda ce se apeleaza la prima cerere cea de salvare a datelor de la Facebookdespre utilizator si care codifica id-ul utilizatorului si ıl trimite pe raspuns ınapoi interfeteiPe langa asta ın acea clasa se afla si o metoda care verifica faptul ca id-ul codificat esteal unui utilizator cu rol corespunzator pentru a face acea cerere

In plus ın acest pachet se afla si toate celelalte clase care fac diverse operatii pedatele din baza de date si dau raspunsuri cererilor din interfata Aici se afla logica care

38

comanda actiunile asupra utilizatorilor asupra prietenilor acestora asupra produselor siasupra comenzilor

Ultima clasa a acestui nivel este cea care se ocupa de trimiterea de email-uri Incazul ın care se face o noua comanda de catre un utilizator toti producatorii produselor depe comanda sunt notificati despre produsele lor pe care le doreste utilizatorul Din serviciulde comanda se apeleaza serviciul de email pentru fiecare producator din lista celor care auproduse care se afla pe lista comenzii utilizatorului

Ultimul si cel mai aproape de interfata utilizator este nivelul de web Acolo se aflatoate clasele de rdquoControllerrdquo ale aplicatiei server

Figura 56 Diagrama de clase pentru pachetul rdquowebrdquo

Toate cererile din interfata utilizator ıncearca sa se mapeze pe rutele declarate ınclase pentru a fi procesate ın metoda corespunzatoare Toata aceasta parte este foarteusor de implementat si mai ales foarte lizibil pentru programatori datorita adnotarilor dinJava Cu ajutorul acestora trebuie doar specificat care este numele URL-ului cererii careeste tipul de obiect asteptat si daca se trimite ca rdquoquery stringrdquo pe URL sau ın interiorulcorpului cererii si tipul raspunsului Pentru fiecare cerere care nu este apelata ın parteaneautentificata a utilizatorului primul lucru care se apeleaza este metoda de securitatepentru a verifica rolul si id-ul utilizatorului Daca din punctul de vedere al securitatii totuleste ın regula se apeleaza metoda corespunzatoare din pachetul de serviciu

39

O singura clasa este diferita de restul ın pachetul de controller si aceea este clasa deeroare Acolo se mapeaza erorile aparute ın timpul cererii si se trimite ınapoi ın interfatagrafica un raspuns cu cod de eroare specific nu numai 500 Generic Application Exceptioncum ar trimite fara aceasta clasa si cu detalii despre motivul aparitiei erorii

Datorita folosirii adnotarilor din java nu a fost necesara folosirea unor rdquodesignpatternrdquo-uri ın sistem De exemplu pentru a folosi ın nivelul de web ceva din pachetulde servicii trebuia doar acel obiect sa aiba adnotarea Autowired si se ınlocuieste atatfolosirea rdquodesign patternrdquo-ului Singleton cat si a celui de Factory Acel obiect nu trebuiecreat sau initializat se face asta implicit datorita adnotarii si de asemenea este folositapeste tot aceeasi instanta

In concluzie toate cererile venite din interfata grafica ajung ın nivelul de rdquocontrollerrdquode unde sunt trimise la cel de rdquoservicerdquopentru a fi procesate si facute eventualele modificarinecesare ın baza de date ca apoi raspunsul sa fie trimis ınapoi spre aplicatia client pentruafisare

512 Arhitectura componentei frontend

A doua componenta implementata a sistemului este aplicatia client frontend-ulAceasta a fost scrisa ın Java Script cu ajutorul framework-ului Ext JS compilarea

se face cu ajutorul Sencha CMD si mediul de implementare a fost IntelliJ IdeaCu ajutorul framework-ului Ext JS se scriu componente care apoi se initializeaza

unele pe altele Aplicatia porneste cu fisierul Applicationjs care este un fel de rdquomainrdquopentru aplicatie Aceasta initializeaza alte componente care la randul lor includ altecomponente si tot asa Structura poate fi foarte usor comparata cu una arborescenta dinacest punct de vedere

Framework-ul a fost creat sa functioneze ın felul acesta pentru ca scopul componen-telor este sa fie scrise ın asa fel ıncat sa poata pe viitor sa fie utilizate din nou Una dindorintele majore ın programare tot timpul este de a se scrie cod ıntr-o maniera ın care safie cat mai reutilizabil Iar framework-ul Ext JS exact asta ıncearca

Arhitectura aplicatiei client se gaseste ın figura 57 si este la randul ei ımpartita ınpachete ca si cea de server Similar cu pachetul de rdquodomainrdquo de la aplicatia de backendeste pachetul rdquomodelrdquo al interfetei utilizator Aici sunt rdquoclaserdquo care sunt simple POJO sicare sunt apoi folosite ın nivelele urmatoare Sunt mai putine decat clasele din rdquostorerdquodeoarece daca raspunsul de la server nu trebuie procesat nu sunt necesare se pot mapadirect obiectele din rdquostorerdquo pe componentele interfetei utilizator

Urmatorul nivel este cel pe care se afla clasele de rdquostorerdquo Acestea sunt cele careexecuta cererea spre backend si face legatura ıntre client si server Daca are o clasa derdquomodelrdquodeclarata atunci populeaza acel obiect cu datele primite de la server iar ın cazul ıncare nu este declarat un model se trimit datele exact asa cum s-au primit la nivelul urmatorde rdquoviewrdquo Acest nivel seamana din punct de vedere al functiei cu cel de rdquorepositoryrdquo de laaplicatia server deoarece ambele au rol de legatura Aceea facea legatura ıntre aplicatiesi baza de date si aceasta face legatura ıntre aplicatia client si aplicatia server

40

Figura 57 Diagrama de clase pentru aplicatia web

Cel de-al treilea pachet al aplicatiei este cel de rdquoviewrdquo In acest pachet se afla claselecare alcatuiesc partea vizuala a aplicatiei La randul ei si aceasta este alcatuita tot dincomponente Aplicatia deschide ın primul rand Main-ul care determina aparitia paginii deHome si afisarea ın meniu a optiunilor posibile ın functie de autentificare si rol Clasele deaici se executa de fapt la deschiderea aplicatiei fiind rdquosingle page applicationrdquo si tot atuncise ıncarca pe pagina componentele Ca si arhitectura a pachetului acesta este ımpartit larandul sau ın subpachete Pentru o mai buna organizare exista patru subpachete cateunul pentru fiecare tip de utilizator In felul acesta toate rdquoviewrdquo-urile care sunt specificeunui utilizator cu un anumit rol se afla ın acelasi subpachet

Cele patru subpachete existente ın pachetul rdquoviewrdquo sunt

1 Pachetul rdquomainrdquo care cuprinde rdquoviewrdquo-urile care se afla ın partea neautentificata aaplicatiei

2 Pachetul rdquoclientrdquo continand rdquoviewrdquo-urile pe care le poate accesa un utilizator simplu3 Pachetul rdquoproducerrdquo specific actiunilor unui utilizator care are rol de producator4 Pachetul rdquoadminrdquo care contine toate rdquoviewrdquo-urile care ıi apar unui utilizator care este

administrator al aplicatiei

Ultimul pachet si nivel al aplicatiei client este cel de rdquocontrollerrdquo In acest pachet

41

se afla clasele care fac actiunile din interfata grafica In timp ce pachetul rdquoviewrdquo continedoar partea grafica a aplicatiei adica modul ın care aceasta trebuie sa arate pachetulrdquocontrollerrdquo contine actiunea acestora modul ın care aplicatia trebuie sa functioneze

Ca si arhitectura si acest pachet a fost ımpartit la randul lui tot ın cele patrusubpachete ca si pachetul rdquoviewrdquo adica rdquomainrdquo rdquoclientrdquo rdquoproducerrdquo si rdquoadminrdquo In pluspentru a fi usor de gasit ce clasa de rdquocontrollerrdquo apartine carui rdquoviewrdquo am ales ca cele douasa aiba acelasi nume In felul acesta daca se doreste sa se gaseasca actiunile unui rdquoviewrdquose poate cauta dupa o clasa cu acelasi nume ın pachetul rdquocontrollerrdquo Numarul claselor dinacest pachet este mai mic decat cel al claselor din rdquoviewrdquo deoarece nu toate paginile dininterfata au actiuni suplimentare Daca singura actiune este ıncarcarea paginii cu date dela server adica doar o actiune simpla de GET datele se ıncarca cu ajutorul rdquostorerdquo-ului laıncarcarea paginii si nu este necesara nici o actiune suplimentara Paginile pe care se potface si actiuni de alt gen sau se deschid noi ferestre au nevoie de clase de rdquocontrollerrdquo

In concluzie arhitectura aplicatiei client este una bazata pe componente care ıncearcasa foloseasca cat mai multe clase reutilizabile

52 Structura bazei de date

Baza de date a aplicatiei este de tip graf de tipul Neo4j Pentru utilizare exista unprogram numit Neo4j ce trebuie instalat Acest program are si o interfata grafica ın carese pot vizualiza datele sub forma grafica si ın care se pot scrie de asemenea si interogariın limbajul acestei baze de date adica Cypher

Fiind o baza de date sub forma de graf datele stocate sunt salvate ın structurade date sub forma de noduri si relatii Entitatile din pachetul de domeniu din aplicatiabackend se gasesc ın baza de date sub forma unor noduri iar dependentele dintre nodurise mapeaza ın baza de date sub forma unor relatii Un element diferit fata de alte tipuride baze de date este faptul ca pe relatiile dintre noduri se pot salva atribute cum este ınaplicatie cazul pentru prieteniile dintre persoane In cazul acestora pe relatia dintre nodurise salveaza daca prietenia a fost sau nu acceptata

Pentru fiecare clasa POJO din aplicatia server clasa ce are doar metodele get si setsi se afla ın pachetul domain exista cate un tip de nod diferit ın baza de date cum estesi marcat ın diferite culori ın figura 58 Fiecare tip de nod are atributele proprii care potlua valori sau pot fi nule Iar fiecare obiect din Java reprezinta un nod diferit ın baza dedate

Neo4j a fost cea mai buna optiune pentru baza de date pentru ca aplicatia poate ficonsiderata o retea sociala Acest lucru se datoreaza relatiilor de prietenie dintre persoanesi a multiplelor relatii ıntre noduri Toate nodurile se afla ın acceasi componenta conexadeci nu exista noduri izolate care sa nu aiba nici o legatura cu nici un alt nod

Datorita acestei structuri a bazei de date este posibila implementarea cererii derecomandare ca o simpla interogare ın baza de date aceasta fiind cea mai simpla metodade implementare a unui sistem de genul acesta una mult mai complexa ar fi fost un

42

algoritm de ınvatare care sa ınvete tipare ale utilizatorilor si sa recomande cadouri pe bazaacestor informatii

Figura 58 Diagrama bazei de date pentru doi utilizatori

Un alt avantaj al acestui tip de baza de date este faptul ca datele nu sunt duplicateın baza de date Spre exemplu daca mai multi utilizatori au ca locatie acelasi oras nu secreaza cate un nod cu acea locatie de mai multe ori ci acel unic nod va avea cate o relatiecu fiecare utilizator care are ca locatie acel oras

In concluzie structura bazei de date a fost aleasa ın acest fel datorita tipului apli-catiei adica asemanatoare cu o retea sociala si datorita implementarii simple a unui sistemde recomandare pe o asemenea baza de date

53 Fluxul pentru diferite operatii

Pentru aplicatie cele mai importante cazuri de utilizare sunt salvarea informati-ilor despre utilizator primite de la Facebook pentru crearea unui profil si recomandareacadourilor pentru un utilizator al aplicatiei Din aceasta cauza cele doua cazuri de utilizarevor fi prezentate mai ın detaliu ın continuare

43

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 4: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

Cuprins

Capitolul 1 Introducere 111 Contextul proiectului 112 Motivatia 113 Continutul lucrarii 2

Capitolul 2 Obiectivele Proiectului 321 Obiectivul principal 322 Obiective specifice 3

Capitolul 3 Studiu Bibliografic 531 Modul de functionare al sistemelor de recomandare 532 Tipuri de sisteme de recomandare 633 Abordarea Netflix 834 Sisteme de recomandare cu Neo4j 935 Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor 1036 Solutii similare 11

Capitolul 4 Analiza si Fundamentare Teoretica 1541 Cerinte functionale 1542 Cerinte non-functionale 1643 Cazuri de utilizare 16

431 Recomandare cadouri 18432 Adaugare produs 20433 Modificare rol utilizator 23

44 Perspectiva tehnologica 26441 Neo4j 26442 Cypher 27443 Maven 27444 Spring Boot 28445 Sencha CMD si ExtJS 28446 Facebook API(Graph API) 29447 Git 30

1

45 Arhitectura conceptuala 30

Capitolul 5 Proiectare de Detaliu si Implementare 3351 Arhitectura sistemului 33

511 Arhitectura componentei backend 35512 Arhitectura componentei frontend 40

52 Structura bazei de date 4253 Fluxul pentru diferite operatii 43

531 Fluxul pentru sub-sistemul de creare al unui utilizator si preluareadatelor necesare 44

532 Fluxul pentru sub-sistemul de recomandare 4554 Securitatea sistemului 46

Capitolul 6 Testare si Validare 4961 Testare unitara 4962 Cazuri de testare 5063 Evaluarea sistemului de catre utilizatori 53

Capitolul 7 Manual de Instalare si Utilizare 5571 Resurse necesare 5572 Manualul de instalare 55

721 Instalare si pornire baza de date 55722 Tehnologii necesare si pornirea aplicatiei backend 56723 Tehnologii necesare si pornirea aplicatiei frontend 56724 Configurarea integrarii cu Facebook 57

73 Manualul de utilizare 57

Capitolul 8 Concluzii 6181 Analiza rezultatelor obtinute 6182 Dezvoltari ulterioare 61

Bibliografie 63

Lista tabelelor 65

Lista figurilor 67

Anexa A Glosar de termeni 69

2

Capitolul 1

Introducere

In acest capitol vor fi prezentate notiuni despre contextul proiectului motivatiade la care a venit ideea proiectului si de asemenea se va prezenta continutul lucrarii pecapitole

11 Contextul proiectului

In prezent cele mai mari site-uri ale lumii din punct de vedere al numarului de uti-lizatori au ınceput ın ultimii ani sa aiba o sectiune de recomandari Acestea pot reprezentaproduse pe site-urile de comert online filme pe site-urile de vizionare de filme carti pesite-urile sau aplicatiile pentru citit sau persoane pentru site-urile de socializare

Popularitatea sistemelor de recomandare a crescut foarte mult ın ultimii ani datoritabeneficiilor multiple pe care le aduc Recomandarile aduc avantaje atat celui care vrea savanda ceva cat si celui care vrea sa cumpere deoarece unuia ıi face vanzari mai mariın timp ce celuilalt ıi da sugestii de lucruri de care ar putea avea nevoie si a uitat Iarpopularitatea lor creste tot mai tare cu cat sunt mai utile recomandarile Aceste sistemede recomandare trebuie de fapt sa faca o rdquoprezicererdquo asupra lucrurilor care i-ar placea unuiutilizator

O problema cu care multi oameni se confrunta este cumparatul cadourilor In multesituatii desi acel om ne este foarte apropiat si ıl cunoastem foarte bine tot ne este foartegreu sa gasim un cadou potrivit pentru acesta De aceea o aplicatie care sa recomandecadouri care sa creeze recomandari specializate pentru o anumita persoana ar avea o uti-litate foarte mare pentru oricine

12 Motivatia

Motivatia aplicatiei o reprezinta de fapt lipsa unei aplicatii similare pe piata panaın momentul documentarii si ın acelasi timp utilitatea uneia

1

Toti oamenii se confrunta mai devreme sau mai tarziu cu problema gasirii cadouluiperfect pentru cineva din viata lor In multe cazuri aceasta problema poate fi o adevaratacatastrofa ce consuma energie timp si rabdare pentru cel care trebuie sa cumpere cadoulDe accea scopul aplicatiei este de a usura viata oamenilor prin oferirea unor variante decadouri specifice pentru exact acea persoana

Din toata cercetarea facuta pe aceasta tema nu am gasit nici o aplicatie de acestgen care sa ofere recomandari specializate pentru o anumita persoana

13 Continutul lucrarii

In aceasta sectiune vor fi prezentate capitolele acestui document si vor fi de asemeneasi descrise sumar ca si continut

bull Introducere (Capitolul 1) - ın acest capitol se va prezenta de fapt contextul proiec-tului motivatia de la care s-a pornit cand a fost ınceput si de asemenea e cuprinsaın ea si aceasta descriere a continutului pe capitole

bull Obiectivele Proiectului (Capitolul 2) - ın acest al doilea capitol sunt prezentate obiec-tivele proiectului atat obiectivul principal cat si obiectivele secundare ce doresc a fiındeplinite la final

bull Studiu Bibliografic (Capitolul 3) - cel de-al treilea capitol este reprezentat de studiulbibliografic unde vor fi prezentate diverse concepte teoretice de la care s-a pornit cuproiectul lucrari si articole prezentate de altii pe teme ce au legatura cu aplicatia side asemenea solutiile existente care se apropie de aceasta lucrare

bull Analiza si Fundamentare Teoretica (Capitolul 4) - ın capitolul de analiza si fun-damentare teoretica vor fi prezentate cerintele de la care porneste proiectul atatcele functionale cat si cele non-functionale prezentarea cazurilor de utilizare prin-cipale ale proiectului si de asemenea o analiza asupra tehnologiilor propuse pentruacest proiect De asemenea va contine si o arhitectura conceptuala a sistemului lamomentul de ıncepere al acestuia

bull Proiectare de Detaliu si Implementare (Capitolul 5) - cel de-al cincilea capitol pre-zinta modul de implementare al proiectului Acest lucru presupune schema arhi-tecturii proiectului si de asemenea si o descriere a fluxurilor de baza ale aplicatieiIn plus este descrisa structura dupa care s-a construit baza de date sub forma degraf din ce noduri si ce relatii In ultimul rand este descris modul ın care a fostimplementata securitatea sistemului

bull Testare si Validare (Capitolul 6) - acest capitol descrie modurile ın care aplicatia afost testata atat pe componente cat si validarea finala pe utilizatori reali

bull Manual de Instalare si Utilizare (Capitolul 7) - penultimul capitol prezinta tehnologi-ile ce trebuie instalate pentru a face sistemul sa functioneze De asemenea se vaprezenta modul ın care sistemul poate fi utilizat

bull Concluzii (Capitolul 8) - ın ultimul capitol vor fi analizate rezultatele obtinute si sevor descrie noi extensii ce pot fi implementate pentru a ımbunatati sistemul

2

Capitolul 2

Obiectivele Proiectului

In acest capitol se va prezenta obiectivul principal al lucrarii cel de la care a pornittoata ideea proiectului Apoi ın continuare se vor prezenta obiectivele secundare alepoiectului care au dus la modul ın care a fost acesta implementat

21 Obiectivul principal

Scopul principal al acestui proiect consta ın construirea unui sistem de recomandarecare sa ajute utilizatorii sa poata sa cumpere cadouri pentru cunoscuti ıntr-un mod multmai eficient Sistemul va fi o aplicatie web care va avea utilizatori ce se vor putea auten-tifica si dupa stabilirea unui profil propriu cunoscutii rudele sau prietenii vor putea saprimeasca sugestii de cadouri exact pentru acea persoana Pentru cadouri vor fi introdusede catre producatori diverse obiecte si servicii In felul acesta tot procesul de cumparare alunui cadou devine mult mai usor pentru persoana care ıl cumpara si cadourile devin multmai utile pentru cei care le primesc

22 Obiective specifice

Obiectivele specifice care se va urmari sa fie atinse ın cadrul acestui proiect sunturmatoarele

bull Studierea mai multor tipuri de baze de date de la cele relationale la cele No SQLsi analizarea lor pentru a stabili care este cea mai potrivita pentru un sistem derecomandare de acest gen

bull Studierea despre diferitele tipuri de sisteme de recomandare de la cele de bazaadica filtrare bazata pe continut si filtrare colaborativa la combinatia dintre eleadica sistem de recomandare hibrid pana la cele mai putin folosite adica pe bazademografica bazata pe cunostinte sau bazata pe utilitate Iar dupa aceea alegereacelei mai potrivite metode pentru un sistem de recomandare cadouri

3

bull Intelegerea conceptului de rdquocold startrdquo la sisteme de recomandare ca problema a aces-tora si gasirea unor solutii care ar putea sa ınlature sau cel putin sa ımbunatateascaaceasta problema

bull Documentarea despre diferite metode de construire a unui profil al utilizatorului sidin aceste metode alegerea celei mai potrivite din punct de vedere al timpului care ıitrebuie sistemului pana cand rdquoınvatardquo suficiente lucruri despre utilizator ıncat poateface recomandari corecte

bull Pe baza tuturor cunostintelor acumulate ın urma studiului construirea unei aplicatiiweb ca demonstratie a alegerilor facute

4

Capitolul 3

Studiu Bibliografic

Obiectivul acestui capitol este prezentarea conceptelor teoretice la baza carora staacest proiect Vor fi prezentate concepte precum modul de functionare al sistemelor derecomandare tipurile de sisteme de recomandare abordarea celor de la Netflix asupradomeniului Neo4j ca solutie pentru un sistem de recomandare utilizarea unei retele socialepentru crearea profilului unui utilizator si reteaua Facebook ca exemplu de astfel de reteaiar ın final solutii similare

31 Modul de functionare al sistemelor de recoman-

dare

Un sistem de recomandare este o tehnologie implementata ın situatiile ın care ar-ticole (produse filme evenimente) sunt recomandate utilizatorilor (clienti vizitatori uti-lizatori de aplicatii cititori) sau invers Numarul mare al utilizatorilor acestor aplicatiieste ceea ce face ca problema sa fie dificila si costisitoare de rezolvat

Motoarele de recomandare sunt ın esenta instrumente de filtrare a datelor careutilizeaza algoritmi si date pentru a recomanda cele mai relevante elemente unui anumitutilizator [9] Sau ın termeni simpli nu sunt altceva decat o forma automatizata a unuirdquovanzator ıntr-un magazin de hainerdquo Lui i se cere un produs si el nu numai ca arata acelprodus dar si altele asemanatoare pe care le-am putea cumpara

Un sistem de recomandare are trei faze de baza dupa cum este prezentat si ındiagrama 31 pe baza carora functioneaza Prima faza este cea de colectare a datelorSistemele de recomandare se bazeaza mereu pe date anterioare deci faza de ınceput ıncare acumuleaza informatii este esentiala si de multe ori o problema foarte grea de rezolvatAceasta problema se mai numeste si rdquocold startrdquo Problema este reprezentata de faptul caun utilizator nou al unei aplicatii nu are informatii stocate despre el sau despre activitatealui fiind nou Iar sistemele de recomandare nu pot sa stie de fapt ce ıi place lui decat dupace utilizeaza o perioada aplicatia De multe ori solutia adusa de oameni pentru aceastaproblema este un chestionar de ıntrebari adresat utilizatorului care sa ıl poata face sa se

5

Figura 31 Fazele unui sistem de recomandare1

ıncadreze ıntr-un tipDe fapt din aceasta cauza sistemele de recomandare devin tot mai bune si mai

exacte cu cat sunt folosite mai mult deoarece sunt stocate tot mai multe informatii despreutilizator

Cea de-a doua faza a unui sistem de recomandare este cea de ınvatare Acoloaplicatia trebuie sa stocheze datele despre utilizator si trebuie la urmatoarea recomandaresa se bazeze pe cele dinainte si ın functie de ele sa o faca Acest lucru poate fi realizat fiedirect pe baza setului de date colectat ın faza de colectare a informatiilor care ar puteafi bazat pe memorie sau bazat pe model fie prin activitatile utilizatorului care au fostobservate

A treia faza este cea de recomandare propriu-zisa ın care doar utilizatorul facecererea de recomandari si acestea ıi sunt trimise

32 Tipuri de sisteme de recomandare

In continuare ca studiu bibliografic au fost tipurile sistemelor de recomandare [11]Ca si teorie sunt mai mute tipuri de sisteme de recomandare si o reprezentare graficaa acestor tipuri este prezentata ın figura 32 Cea mai de baza ımpartire este ın douacategorii recomandari bazate pe continut si recomandari bazate pe filtrare colaborativa

Filtrarea bazata pe continut creeaza un profil de utilizator bazat pe o metoda deınvatare pentru a determina elementele pe care un anumit utilizator le-ar dori De exemplusite-ul poate utiliza un sistem de cuvinte cheie care sugereaza articole cu cuvinte cheiesimilare ın descrierea unui element pe care utilizatorul l-a cumparat anterior

Recomandarile bazate pe filtrare colaborativa se inspira din similaritatile cu ceilaltiutilizatori Gasesc utilizatori asemanantori cu cel pentru care se face recomandarea pebaza actiunilor din trecut despre aceia si se recomanda lucruri care le plac celorlalti Acesttip de recomandare se potriveste perfect cu recomandarile de filme Acolo un om cu gusturi

1httpswwwsciencedirectcomsciencearticlepiiS1110866515000341

6

asemanatoare va putea sa recomande cel mai bine un alt film unui prieten Cea mai simplaimplementare pentru asa ceva este sub forma unei matrici cu spatii goale ın locurile undenu se cunoaste informatie

Pe langa aceste tipuri de recomandari mai sunt si altele dar care nu sunt folosite lafel de des

Figura 32 Tipurile sistemelor de recomandare2

In filtrarea bazata pe criterii demografice se fac recomandari catre utilizatori pebaza informatiilor lor demografice Sistemul va sugera elemente care au fost selectate dealti utilizatori care se ıncadreaza ın acelasi profil demografic

Filtrarea bazata pe utilitate se bazeaza pe utilitatea pe care utilizatorul o va obtinede la produs Poate include lucruri precum fiabilitatea si disponibilitatea vanzatoruluipentru a se asigura ca recomanda produse usor de obtinut de catre utilizator

Filtrarea bazata pe cunostinte recomanda selectii pe baza preferintelor si modelelorde cumparare cunoscute despre utilizator Intrucat sistemul va sti ce a cumparat con-sumatorul ın trecut acesta poate face recomandari ın functie de ceea ce ar putea satisfaceaceste nevoi ın viitor

Filtrarea hibrida combina doua sau mai multe tehnici de recomandare diferite pentrua crea un sistem de recomandare mai detaliat

2httpswwwsciencedirectcomsciencearticlepiiS1110866515000341f0005

7

33 Abordarea Netflix

Foarte multa cercetare ın domeniul sistemelor de recomandare a fost influentata decei de la Netflix

Figura 33 Tipuri de recomandari oferite de Netflix3

Netflix este un serviciu de streaming care permite clientilor sa vizioneze o gamalarga de emisiuni TV filme documentare si multe altele pe mii de dispozitive conectatela internet

In figura 33 este o imagine a site-ului cu tipurile diferite de recomandari pe careacestia le ofera

Cheia succesului Netflix consta ın capacitatea lor de a anticipa ceea ce le placeutilizatorilor motiv pentru care fiecare doua din trei ore de vizionare ın Netflix provin dinrecomandari In trecut Netflix au folosit informatii despre sex si varsta pentru a determinace filme sa recomande Acum ei folosesc de exemplu ceea ce utilizatorul a urmaritınainte a cautat cat timp petrece utilizatorul vizionand filme si tipul de dispozitiv utilizatPredictiile din motorul de recomandare Netflix nu se bazeaza doar pe comportamentulutilizatorului ci si pe context (cum ar fi timpul zilei) popularitatea titlurilor noutateadiversitatea si cat de recent a fost scos filmul sunt factori importanti [7]

Premiul Netflix a fost o competitie lansata ın 2006 pentru cel mai bun algoritm defiltrare colaborativa pentru a prezice ratingurile utilizatorilor pentru filme pe baza eva-luarilor anterioare fara alte informatii despre utilizatori sau filme adica fara ca utilizatoriisau filmele sa fie identificate stiind doar numerele atribuite pentru concurs ale acestoraPremiul pentru castigator consta ın 1 milion de dolari Peste 2000 de echipe au depusseturile de predictie si peste 650 de echipe au depasit precizia algoritmului actual al Netflix

3httpstechblogglomexcompostrecommender-systemshtml

8

cu mai mult de 5 [11] Castigatorul a fost echipa BellKors Pragmatic Chaos care adepasit algoritmul Netflix cu 1006

Cei de la Netflix au fost extrem de multumiti de rezultatul obtinut si nu numai caau ıncorporat acel algoritm ın algoritmul lor existent de recomandare dar au initiat si o adoua editie a competitiei

34 Sisteme de recomandare cu Neo4j

Urmatoarea parte a studiului bibliografic s-a axat pe bazele de date de tip grafGraphDB si mai exact Neo4j ın comparatie cu celelalte tipuri de baze de date adica celerelationale In cartea [10] sunt prezentate aceste concepte din punct de vedere teoretic siın lucrarile de master [5] si [1] este prezentata aceasta comparatie ıntre diferite tipuri debaze de date pe o aplicatie reala

Limbajul care se foloseste ın bazele de date Neo4j este Cypher Cu ajutorul acestuiase mapeaza query-urile pe noduri si relatii Din punct de vedere teoretic diferenta ıntrebazele de date relationale si cele sub forma de graf consta ın modul ın care sunt stocatedatele In timp ce ın bazele de date relationale datele sunt stocate ın structuri de datesub forma de tabel ın cele sub forma de graf datele sunt stocate ın noduri Coloaneletabelelor din bazele de date relationale se mapeaza ın bazele de date sub forma de graf peproprietati Pentru a face o legatura ıntre tabelele relationale se foloseau rdquochei strainerdquo pecand la Neo4j exista relatii ıntre noduri Din cauza faptului ca bazele de date sub formade graf s-au inspirat din cele relationale exista o asemanare ıntre ele si toate lucrurile auun corespondent ın cealalta

In lucrarea [12] sunt prezentate avantajele folosirii unei baze de date sub forma degraf cand se lucreaza cu retele sociale La aplicatiile de tipul retelelor soriale relatiile dintrenoduri sunt partea cea mai importanta iar pentru acestea o baza de date sub forma degraf se mapeaza cel mai bine Un avantaj al bazelor de date sub forma de graf din punctulde vedere al programatorilor cu acestea se lucreaza foarte similar ca si cu cele relationaledupa cum se prezinta si ın [4]

Un exemplu de sistem de recomandare construit cu Neo4j este [11] In acesta lucrareeste prezentata construirea unui sistem de recomandare care sa recomande prieteni ıntr-oaplicatie de socializare In lucrare sunt patru abordari pentru construirea unui astfel desistem Prima consta ın recomandarea unor prieteni cu care utilizatorul ar avea prieteniın comun cea de-a doua sunt persoane cu care utilizatorul se afla ın acelasi grup cea de-atreia sunt utilizatori care au mers la aceleasi evenimente ca si utilizatorul si ultima abordareconsta ın recomandarea persoanelor cu cei mai multi prieteni In urma mai multor teste sistatistici s-a decis ca abordarea cea mai buna este prima cea cu prietenii ın comun Toateaceste patru metode de oferire a recomandarilor se mapeaza foarte usor pe o baza de datesub forma de graf si reprezinta doar cate un query destul de simplu ın Cypher O astfelde aplicatie s-ar fi mapat mult mai greu pe o baza de date relationala datorita multiplelorrelatii si legaturi

9

Un alt exemplu de aplicatie unde s-a ales baza de date Neo4j a fost [2] Aicipentru articolele politice pe care sistemul le recomanda se creeaza o combinatie ıntrerecomandarile obtinute din articolele care le plac oamenilor cu care utilizatorul vorbestemult si lucruri care le plac utilizatorilor cu care acesta are lucruri ın comun Si ın acest cazexista o multime de relatii ıntre utilizatori si articole si cel mai usor se obtin recomandarilecu o aplicatie sub forma de graf motiv pentru care au si ales Neo4j

35 Utilizarea retelei Facebook pentru crearea unui

profil utilizatorilor

In continuare ca studiu bibliografic au urmat sisteme asemanatoare cu sistemuldorit si modul ın care acestia au reusit sa creeze profilul utilizatorului [13] Problema ceamai mare este rdquocold startrdquo-ul Adica atunci cand un utilizator este nou ın aplicatie nuse stiu suficiente informatii despre el pentru a putea sa i se ofere recomandari Dupa ceacesta foloseste aplicatia o perioada de timp ar putea sa i se ofere recomandari bazate peactivitatea sa anterioara ın aplicatie Din acest motiv la ınceput recomandarile pot lasade dorit si pot fi nu tocmai corecte

O metoda ın care se poate rezolva aceasta problema se afla ın lucrarea de master[7] ın care la utilizatorii noi se recomanda restaurante pe baza pozitiei lor geograficeAtunci cand doresti sa mergi la un restaurant este foarte importanta distanta la care seafla acel restaurant Din aceasta cauza pentru un utilizator caruia sistemul nu stie ce sa ıirecomande ıi recomanda restaurante la ıntamplare dintre cele care se afla cel mai aproapede el In felul acesta dupa ce merge la unul din restaurante si da feedback sistemul poatedupa aceea sa ıi faca recomandari

In lucrarea [8] recomandarile pentru votare au doua abordari La prima i se reco-manda lucrurile care le-a recomandat persoana cu scorul cel mai bun Si cea de-a douaabordare consta ıntr-un set de ıntrebari la care un utilizator nou trebuie sa raspunda candısi face contul

In acest caz cea mai buna metoda ın care se poate rezolva aceasta problema parea fi sa se ia informatiile de la API-ul de la Facebook Facebook este o aplicatie extremde utilizata si care ofera ca informatii publice exact ce ar fi necesar pentru a recomandacadouri de exemplu data nasterii sau lucruri care ıi plac unui utilizator Cu ajutorulacestora se poate calcula varsta utilizatorului poate sa fie ıncadrat ıntr-un profil si sepoate afla stilul de lucruri care ıi plac

Toate aceste informatii publice de la Facebook pot fi salvate si pot fi utilizate maitarziu pentru a se creea recomandari pe baza lor In articolul [3] despre valoarea datelor dela Facebook se prezinta ca si caz de utilizare pentru un site de comert online Aceasta estefoarte asemanatoare din punct de vedere al recomandarilor cu aplicatia de recomandarecadouri Diferenta dintre cele doua este ca ın cazul uneia trebuie sa recomande produsepentru utilizatorul aplicatiei si cealalta pentru un prieten al acestuia

10

Din punct de vedere al aplicabilitatii Facebook este o retea sociala deci datele salese mapeaza foarte bine pe o baza de date de tip graf cum este prezentat si ın lucrarea [6]

Asadar daca la crearea contului utilizatorului ın aplicatie se iau si informatiile pu-blice despre utilizator se vor putea oferi recomandari mult mai corecte ınca de la ınceput

36 Solutii similare

Ca solutii similare pe piata online nu exista aplicatii folosite pentru a recomandacadouri personalizate specific pentru o persoana anume Multe site-uri considera ca eirecomanda cadouri ınsa acestea reprezinta de fapt o filtrare mai avansata a rezultatelorproduselor de pe site-ul lor

Un site care ofera cadouri personalizate este Giftly 4 prezentat ın figura 34 careofera o modalitate usoara de a oferi cadouri Acest site nu are parte de recomandari cia gasit un mod de a face oamenii sa primeasca mereu ceea ce ısi doresc Cel care oferacadoul nu ıl cumpara ci doar ıl sugereaza dar decizia finala asupra cadoului este la celcare ıl primeste Modul ın care functioneaza este

1 Se ofera un rdquocard cadourdquo prin email sms printat sau ca o felicitare de ınaltacalitate

2 Destinatarul alege cel mai convenabil mod de a primi cadoul rdquocard cadourdquo ınposta sau direct ca bani ın contul bancar sau contul PayPal

3 De fapt utilizatorul ıi sugereaza destinatarului ce ar vrea el sa ofere ca si cadouiar destinatarul trimite ca mesaj modul ın care a cheltuit banii

Figura 34 Site web Giftly

4httpswwwgiftlycom

11

Ofera de asemenea si sugestii de cadouri Un om cand navigheaza pe site poate sase uite la cadouri ın categoriile Popular Holidays Birthdays Drinks Eats Meals BackTo School Get Fresh Health Fitness Going Out Getaway Top Shelf For The HipsterClothes For Her Clothes For Him Congratulations Expecting Activities si Custom

Un alt site cu cadouri este Etsy 5 cu imaginea 35 care arata site-ul Etsy este o piataglobala pentru bunuri unice si creative Pe pietele lor milioane de oameni din ıntreagalume se conecteaza atat online cat si offline pentru a face vinde si cumpara bunuri uniceEtsy ofera de asemenea o gama larga de servicii si instrumente de vanzari care ajutaıntreprinzatorii creativi sa ınceapa sa gestioneze si sa-si masoare afacerile Misiunea loreste sa pastreze comertul uman Deci de fapt acest site sprijina mai mult producatoriinu comerciantii De asemenea este mai mult axat pe bunuri unice si lucruri rdquounicerdquo Ca sicelelalte site-uri de genul acesta are o modalitate de a cauta lucrurile mai inteligent maispecializat pe ceea ce te intereseaza Categoriile de cautare sunt Jewelry AccessoriesClothing Shoes Home Living Wedding Party Toys Entertainment Art CollectablesCraft Supplies Tools si Vintage

Figura 35 Site web Etsy

Cel de-al treilea site care ofera servicii asemanatoare este Gifts 6 prezentat ın figura36 Acesta se focuseaza pe cadouri pentru diverse ocazii cum ar fi zilele de nastereCraciun diverse aniversari si alte evenimente la care se cumpara cadouri Pentru parteade recomandare se ofera posibilitatea de a efectua un test despre acel om caruia dorestisa ıi cumperi cadoul care are ca scop ıncadrarea omului respectiv ıntr-un profil si apoi

5httpswwwetsycom6httpswwwgiftscom

12

alegerea unor sugestii ce s-ar potrivi unei persoane cu acel tip de personalitate O primaıntrebare se refera la genul persoanei si ıntrebarea este daca cadoul este pentru o femeieun barbat o fetita sau un baietel Cea de-a doua ıntrebare se refera la marja de varsta ıncare se ıncadreaza acel om de exemplu pentru barbat optiunile sunt adolescent barbat ınjur de 30 de ani sau barbat ın varsta Cea de-a treia ıntrebare se refera la personalitateaomului Mai exact se fac sugestii pentru tipuri de lucruri ce i-ar putea placea unui omcare are trasaturile descrise ın primele doua ıntrebari De exemplu la barbati ın jur de30 de ani optiunile sunt ıi place sportul ıi place natura e aventurier ıi place golful ıiplace sa faca gratare sa serveasca bauturi sa gateasca sa animeze ıi place sa se ımbraceelegant este sef e entuziasmat de bere sau e un fan al sporturilor Iar ın final ın functiede raspunsurile date la ıntrebari se afiseaza sugestii de cadouri care se potrivesc oamenilorcu acel tip de personalitate

Figura 36 Site web Gifts

Nordstrom 7 care este prezentat ın imaginea 37 are o abordare similara avand pesite o multime de optiuni de filtrare a cadourilor Se pot cauta ın acest site cadouri pentrubebelusi cadouri de Craciun bijuterii pentru femei optiunile sunt multiple Acest lucruofera utilizatorilor sugestii pentru a le fi mai usor sa ıncadreze aceasta persoana ıntr-unanumit tip Iar dupa alegerea categoriei toate sugestiile de cadouri oferite de catre sitese ıncadreaza ın acel tip Ca avantaj al acestui site este ca ei ofera si serviciul de livrareal cadoului dupa cumparare oriunde ın lume Un dezavantaj al multor site-uri de genulacesta este ca ofera livrare doar ın zona sa apropiata

7httpsshopnordstromcomcgifts

13

Figura 37 Site web Nordstrom

14

Capitolul 4

Analiza si Fundamentare Teoretica

In acest capitol vor fi prezentate cerintele functionale ale lucrarii ımpreuna cucerintele non-functionale ale acesteia De asemenea va fi prezentata diagrama cazurilor deutilizare si vor fi prezentate mai ın detaliu cazurile de utilizare principale ale aplicatiei Incontinuare se va prezenta perspectiva tehnologica a proiectului si se vor explica deciziiletehnologice luate In final se va prezenta diagrama conceptuala a aplicatiei

41 Cerinte functionale

bull Posibilitatea autentificarii ın aplicatie si crearii unui profil propriu din care se potutiliza informatii si cu ajutorul caruia utilizatorul poate fi ıncadrat ıntr-un profil

bull Utilizatorii pot crea prietenii ca ıntr-o retea de socializare pentru a putea afla infor-matii despre prieteni si pentru a li se putea recomanda cadouri pentru acestia

bull Cu ajutorul informatiilor de la Facebook un utilizator poate fi notificat dinainte caurmeaza ziua de nastere a unuia din prietenii lui si sa i se ofere mai multe variantede cadouri potrivite pentru acesta Aceasta informatie o primeste cu suficient timpınainte pentru a nu fi surprins fara un cadou De la Facebook pe langa informatiiledespre data zilei de nastere sunt importante si varsta sau lucrurile care ıi plac uti-lizatorului Toate acestea ajuta la crearea profilului utilizatorului pe baza caruia serecomanda dupa aceea cadourile

bull De asemenea sistemul poate recomanda si un cadou pentru alt tip de evenimentdecat zi de nastere de genul cadou de Craciun cadou de nunta cadou pentru unnou-nascut etc

bull In aplicatie vor fi adaugate si diferite produse iar pentru a face mai usoara cumparareade cadouri se va putea face si comanda pe internet In momentul ın care un utilizatorface o noua comanda producatorii produselor comandate sunt ınstiintati de existentaacestei noi comenzi

15

bull Pentru persoanele la care pe profilul de Facebook este insuficient completat saupentru a putea cumpara cadouri pentru o persoana care nu are Facebook sau nuare cont ın aceasta aplicatie si despre care ın acest fel nu se cunosc nici un felde informatii se vor putea filtra cautarile pentru cadou printr-o serie de ıntrebaristandard Aceste ıntrebari vor putea creea un rdquomini-profilrdquo pentru acea persoanapentru ca sistemul sa poata recomanda cadouri

42 Cerinte non-functionale

bull Securitate sistemul nu raspunde cererilor decat atunci cand utilizatorul a fost au-tentificat ın aplicatie si are rolul necesar pentru a face acea cerere

bull Portabilitate aplicatia nu depinde de sistemul de operare pe care ruleaza De aseme-nea nu e dependenta de browserul folosit de utilizator

bull Disponibilitate sistemul ramane stabil ın fata erorilor si functioneaza la fel si dupaaparitia unei erori

bull Extensibilitate sistemul permite adaugarea sau modificarea unor componente atuncicand cerintele aplicatiei se modifica Pe langa asta e flexibila unor dezvoltari ulte-rioare

43 Cazuri de utilizare

In aceasta sectiune se vor prezenta actorii aplicatiei diagrama cazurilor de utilizaresi vor fi descrise cazurile de utilizare de baza ale fiecarui actor

Ca si actori aplicatia are patru tipuri de utilizatori

bull utilizator anonimbull clientbull producatorbull administrator

Aplicatia este conceputa ın asa fel ıncat ıntre actori este o relatie de mostenire Acestlucru presupune ca un actor are posibilitatea de a efectua tot ce putea cel dinaintea lui siceva ın plus Deci utilizatorii anonimi au cele mai putine permisiuni iar administratoriiau permisiuni totale Acest lucru se vede foarte clar si ın diagrama cazurilor de utilizaredin imaginea 41

In continuare vor fi prezentate cazurile de utilizare

1 recomandare cadouri2 adaugare produs3 modificare rol utilizator

16

Figura 41 Digrama cazurilor de utilizare

17

431 Recomandare cadouri

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unutilizator trebuie sa le urmeze pentru a primi recomandari de cadouri pentru un cunoscutsi pentru a efectua o comanda

Actorul principal

Orice utilizator al aplicatiei

Parti interesate si interese

Utilizatorul care doreste sa cumpere un cadou este interesat de a gasi un cadoupotrivit pentru cineva pe care ıl cunoaste

Producatorul care e interesat sa ısi poata vinde produseleUtilizatorul care primeste cadoul fiind interesat sa primeasca un cadou care sa i se

potriveasca si care sa ıi placa

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand utilizatorul porneste aplicatia11 Utilizatorul verifica daca are cont de Facebook si daca are urmeaza pasul 111

daca nu 22111 Utilizatorul se autentifica ın aplicatie cu ajutorul credentialelor de la

Facebook12 Utilizatorul deschide sectiunea de recomandare cadouri13 Utilizatorul completeaza formularul cu datele ce trebuie introduse pentru a primi

recomandari de cadouri pentru un prieten14 Utilizatorul poate fi satisfacut cu recomandarile primite si atunci urmeaza pasul

141 iar daca nu este atunci urmeaza cazul alternativ 23141 Utilizatorul adauga ın cosul de cumparaturi cadouri pe care doreste sa

le cumpere15 Utilizatorul cere sa ısi vada cosul de cumparaturi16 Utilizatorul poate sa se declare multumit de cosul de cumparaturi caz ın care

urmeaza pasul 161 sau poate sa aleaga cazul alternativ 24161 Utilizatorul aproba cosul de cumparaturi si accepta sa se faca comanda

17 Sistemul introduce ın baza de date comanda18 Utilizatorul va putea vedea la sectiunea comenzilor sale noua comanda si statusul

ei19 Sistemul notifica producatorul de aparitia noii comenzi110 Utilizatorul se dezautentifica din aplicatie

18

Use-Case EndUtilizatorul se va deconecta din aplicatie si o va ınchide

Figura 42 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueazaAcest flux poate aparea la orice pas211 Utilizatorul deschide sectiunea de recomandare cadouri212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca utilizatorul nu are cont de Facebook

19

Acest flux poate aparea la pasul 11221 Utilizatorul deschide pagina de Facebook222 Utilizatorul ısi face un cont pe pagina de Facebook si ısi completeaza

date despre el223 Utilizatorul revine la aplicatia de recomandare cadouri si ıncearca din

nou sa se autentifice ın aplicatie224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca utilizatorul nu e multumit de recomandariAcest flux poate aparea la pasul 14231 Utilizatorul sterge din cos cadourile pe care nu le mai doreste si revine

la pagina de recomandari232 Utilizatorul adauga alte cadouri ın cos233 Cazul de utilizare continua de la pasul 141

24 Flux-ul alternativ daca utilizatorul nu e multumit de produsele din cosul decumparaturi

Acest flux poate aparea la pasul 16241 Utilizatorul revine ınapoi la formularul cu introducerea datelor despre

beneficiarul cadoului242 Utilizatorul completeaza din nou datele243 Cazul de utilizare continua de la pasul 13

Preconditii

1 Utilizatorul trebuie sa aiba un cont de Facebook pentru a se putea autentifica ınaplicatie

2 Utilizatorul trebuie sa fie autentificat ın aplicatie pentru a putea face orice actiunedin acest caz de utilizare

3 Utilizatorul trebuie sa deschida sectiunea de recomandare cadouri pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noua comanda este salvata ın baza de date2 Comanda apare ın sectiunea de comenzi a utilizatorului ımpreuna cu statusul ei

curent3 Producatorul este notificat ca are o noua comanda

432 Adaugare produs

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unproducator trebuie sa le urmeze pentru a introduce un nou produs ın aplicatie

20

Actorul principal

Utilizatorii cu rol de producator sau cu rol de administrator

Parti interesate si interese

Producatorul care doreste sa introduca produsul nou ın aplicatie

Utilizatorii simpli care au o mai mare varietate de produse din care sa li se reco-mande cadouri

Figura 43 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo

21

Flux de evenimente

Use-Case Start

Cazul de utilizare ıncepe atunci cand producatorul porneste aplicatia

11 Producatorul verifica daca are cont de Facebook si daca are urmeaza pasul111 daca nu 22

111 Producatorul se autentifica ın aplicatie cu ajutorul credentialelor de laFacebook

12 Producatorul deschide sectiunea de adaugare produs

13 Producatorul completeaza datele necesare despre noul produs ımpreuna cu tipulde persoana si eveniment care i s-ar potrivi

14 Producatorul verifica daca este multumit de datele introduse si daca da urmeazapasul 141 daca nu 23

141 Producatorul efectueaza operatia de adaugare produs

15 Sistemul adauga un nou produs ın baza de date

16 Sistemul notifica producatorul ca noul produs a fost introdus cu succes

17 Producatorul se dezautentifica din aplicatie

Use-Case End

Producatorul se va deconecta din aplicatie si o va ınchide

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Producatorul deschide sectiunea de adaugare produs

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca producatorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Producatorul deschide pagina de Facebook

222 Producatorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Producatorul revine la aplicatia de recomandare cadouri si ıncearca dinnou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca Producatorul nu e multumit de datele introduse despreprodus

Acest flux poate aparea la pasul 14

231 Producatorul sterge datele gresite despre produs

232 Producatorul adauga alte date despre produs

233 Cazul de utilizare continua de la pasul 141

22

Preconditii

1 Producatorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Producatorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Producatorul trebuie sa aiba cont cu rol de rdquoproducatorrdquo sau rdquoadminrdquo pentru aputea face operatia aceasta

4 Producatorul trebuie sa deschida sectiunea de adaugare produs pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noul produs este salvat ın baza de date2 Produsul poate fi adaugat la recomandarile unui utilizator din acel moment

433 Modificare rol utilizator

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unadministrator trebuie sa le urmeze pentru a modifica rolul unui utilizator al aplicatiei

Actorul principal

Un utilizator al aplicatiei care are rol de administrator

Parti interesate si interese

Administratorul care doreste sa modifice rolul unui utilizatorUtilizatorul care doreste sa ısi schimbe rolul

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand administratorul porneste aplicatia11 Administratorul verifica daca are cont de Facebook si daca are urmeaza pasul

111 daca nu 22111 Administratorul se autentifica ın aplicatie cu ajutorul credentialelor de

la Facebook12 Administratorul deschide sectiunea de utilizatori13 Sistemul ıi returneaza administratorului utilizatorii care nu sunt administratori14 Administratorul modifica rolul utilizatorului din utilizator simplu ın producator

sau invers

23

15 Administratorul cere executarea modificarii

16 Sistemul executa modificarea iar ın caz de succes urmeaza pasul 161 si ın cazde eroare pasul 23

161 Sistemul notifica administratorul ca modificarea a fost efectuata cusucces

17 Utilizatorul se dezautentifica din aplicatie

Use-Case End

Administratorul se va deconecta din aplicatie si o va ınchide

Figura 44 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo

24

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Administratorul deschide sectiunea de utilizatori

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca administratorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Administratorul deschide pagina de Facebook

222 Administratorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Administratorul revine la aplicatia de recomandare cadouri si ıncearcadin nou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca sistemul returneaza o eroare la modificarea utilizatorului

Acest flux poate aparea la pasul 16

231 Sistemul returneaza un mesaj de eroare la modificarea utilizatorului

232 Aplicatia afiseaza mesajul de eroare administratorului

233 Cazul de utilizare continua de la pasul 15

Preconditii

1 Administratorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Administratorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Utilizatorul trebuie sa aiba cont cu rol de administrator pentru a putea efectuaorice actiune din acest caz de utilizare

4 Administratorul trebuie sa deschida sectiunea utilizatori pentru a putea ındeplinicerintele din cazul de utilizare

Postconditii

1 Noul rol al utilizatorului este salvat ın baza de date

2 La urmatoarea autentificare a utilizatorului acesta va observa ca interfata si maiprecis meniurile si actiunile care le poate face ıi vor fi diferite

25

44 Perspectiva tehnologica

441 Neo4j

Neo4j 1 este un sistem de gestionare a bazelor de date sub forma de graf dezvoltatde Neo4j Inc Descris de dezvoltatorii sai ca o baza de date tranzactionala compatibilacu ACID Neo4j este cea mai populara baza de date sub forma de graf dupa clasamentulDB-Engines

Baza de date Neo4j (ca si orice alta baza de date sub forma de graf) este foartediferita de o baza de date relationala cum ar fi MS Access SQL Server MySQL etcBazele de date relationale utilizeaza tabele randuri si coloane pentru stocarea datelor

Neo4j nu utilizeaza tabele randuri si coloane pentru stocarea sau prezentarea datelorci noduri si relatii

Neo4j este foarte potrivit pentru stocarea datelor care au multe relatii interconec-tate Acestea sunt de fapt aplicatiile ın care merita sa fie folosite De fapt bazele de datesub forma de graf cum este Neo4j sunt mult mai bune la tratarea datelor interconectatedecat bazele de date relationale

Acest lucru se datoreaza faptului ca modelul sub forma de graf nu necesita de obiceio schema predefinita Nu e nevoie sa se creeze structura bazei de date ınainte de a fiıncarcate datele asa cum se face la o baza de date relationala

Dar principalul motiv pentru care Neo4j este mai bun pentru datele relationalepentru acest tip de aplicatii este modul ın care permite crearea relatiilor Neo4j este con-struit ın jurul relatiilor si atunci nu este nevoie sa se configureze chei primare constrangerichei straine pentru a predetermina nodurile care pot avea o relatie si la ce date Cu Neo4jse poate adauga orice legatura ıntre orice nod ori de cate ori este nevoie

Neo4j are aceste calitati care nu se gasesc nici la celelalte baze de date NoSQLBazele de date non-relationale pe langa cele sub forma de graf sunt cele de tip coloanade tip document de tip cheie-valoare si de tip multi-model Nici unul din aceste tipuri nuau ca principala functionalitate maparea relatiilor si facilitatea interogarilor ıntr-o baza dedate cu multe relatii ıntre entitati

Generarea de recomandari personalizate este unul dintre cele mai frecvente cazuride utilizare a unei baze de date sub forma de graf Unele dintre principalele beneficii aleutilizarii grafurilor pentru a genera recomandari includ

- Performanta Lipsa indexurilor permite calcularea recomandarilor ın timp realasigurand ca recomandarea este ıntotdeauna relevanta si reflecta informatii actualizate

- Model de date Modelul de graf cu proprietati permite combinarea cu usurinta aseturilor de date din mai multe surse

Un alt avantaj al bazelor de date sub forma de graf Neo4j este faptul ca respectatoate principiile din modelul de consistenta ACID

Garantia data de principiile ACID este ca ofera un mediu sigur ın care sa functionezedatele Acronimul ACID reprezinta

1httpsneo4jcomuse-casesreal-time-recommendation-engine

26

bull Atomic Toate operatiile dintr-o tranzactie reusesc sau fiecare operatie este reluatabull Consistent La finalizarea unei tranzactii baza de date este solida din punct de

vedere structuralbull Izolat Tranzactiile nu se lupta una cu cealalta Accesul controversat la date este

moderat de baza de date astfel ıncat tranzactiile par sa se execute succesivbull Durabil Rezultatele aplicarii unei tranzactii sunt permanente chiar si ın cazul unor

defectiuniCand vine vorba de tehnologiile NoSQL cele mai multe baze de date sub forma de

graf (inclusiv Neo4j) utilizeaza un model de consistenta ACID pentru a asigura ca datelesunt stocate ın siguranta si ın mod consecvent

Am ales baza de date sub forma de graf ca optiune pentru stocarea datelor deoarecedin toate lucrarile si articolele citite a fost optiunea cea mai buna pentru un sistem derecomandare Deci acesta se mapeaza perfect pe cerintele functionale ale proiectului Sidin optiunile de baze de date sub forma de graf Noe4j a avut de departe cele mai multeavantaje ea fiind si cea mai utilizata

442 Cypher

Cypher 2 este un limbaj declarativ de interogare pentru bazele de date sub formade graf care permite interogarea si actualizarea rapida a datelor Cypher este un limbajrelativ simplu dar foarte puternic Interogarile foarte complexe ale bazei de date pot fiusor exprimate prin intermediul limbajului Cypher

Este conceput pentru a fi un limbaj de interogare uman Scopul lui principal este dea face interogarile mult mai simple si unele interogari care la bazele de date relationale nuerau posibile le face posibile Constructiile sale se bazeaza pe grafica si pe limba englezalucru care ajuta la scrierea mai intuitiva a interogarilor Este construit pentru a fi maiintuitiv pentru citire si nu neaparat pentru scriere

Cypher se bazeaza pe modelul Graph Property care ın plus fata de elementelegrafice standard ale nodurilor si muchiilor (numite relatii ın Cypher) adauga etichete siproprietati ca si concepte Nodurile pot avea zero sau mai multe etichete ın timp ce fiecarerelatie este de exact un singur tip Nodurile si relatiile au de asemenea zero sau mai multeproprietati

Chypher este limbajul de interogare folosit la bazele de date Neo4j deci este opti-unea implicita atunci cand se alege Neo4j

443 Maven

Maven 3 este un instrument de management software si de ıntelegere a proiectelorsoftware Pe baza conceptului unui model de obiect de proiect (POM) Maven poategestiona construirea raportarea si documentarea unui proiect printr-o informatie centrala

2httpsneo4jcomdevelopercypher-query-language3httpswwwjavatpointcommaven-tutorial

27

Obiectivul principal al lui Maven este acela de a permite unui dezvoltator sa ınte-leaga starea completa a efortului de dezvoltare ın cel mai scurt timp Avantajele Mavensunt

bull instalarea rapida a proiectului fara fisiere buildxml complicate doar un POMbull procesul de construire este standardizat pentru toate proiectelebull usor de ınvatat si de utilizatbull configurarea unui proiect este foarte rapidabull bine documentat

Am ales sa folosesc Maven deoarece este una din cele mai comune optiuni pentru aimporta librariile ıntr-un proiect si este si cel mai documentat Deci mereu cand esti pusın dificultate poti cauta pe internet sugestii

444 Spring Boot

Spring Boot 4 este un framework din cadrul Spring care ofera setari implicite pentruconfigurarea codului si adnotari pentru a lansa rapid proiecte noi ın executie Urmaresteabordarea rdquoConfigurarea defectiunilor vizionaterdquo pentru a evita un numar mare de linii decod pentru configuratii si pentru a ımbunatati procesul de dezvoltare

Avantajele Spring Boot sunt1 Face foarte usoara dezvoltarea de aplicatii bazate pe Spring cu Java sau Groovy2 Reduce timpul de dezvoltare si creste productivitatea3 Evita scrierea multor linii de cod adnotari si configurare XML4 Este foarte usor de integrat cu alte framework-uri din aceasi familie Spring cum ar

fi Spring JDBC Spring ORM Spring Data Spring Security etc5 Urmareste abordarea rdquoConfigurarea implicita a optiunilorrdquo pentru a reduce efortul

pentru dezvoltatori6 Ofera servere HTTP ıncorporate cum ar fi Tomcat Jetty etc pentru a dezvolta si

testa aplicatiile web foarte usor7 Ofera instrumentul CLI (Command Line Interface) pentru a dezvolta si testa apli-

catiile de tip rdquoSpring Bootrdquo (Java sau Groovy) din linia de comanda foarte usor sirapidAm ales ca optiune pentru partea de backend acest framework deoarece simplifica

foarte mult lucrurile Datorita lui un programator poate sa ısi concentreze mai tare energiape a construi proiectul din punctul de vedere al buissness-ului logic nu din punctul devedere al configurarilor necesare

445 Sencha CMD si ExtJS

Sencha CMD 5 este un instrument linie de comanda cross-platform care ofera multesarcini automate ın ciclul complet de viata al unei aplicatii ExtJS de la generarea unui

4httpswwwjavatpointcomspring-boot-tutorial5httpsdocssenchacomcmd

28

nou proiect la lansarea unei aplicatii ın productie

Sencha Cmd ofera o colectie de caracteristici puternice pentru economisirea timpu-lui care functioneaza ımpreuna cu Sencha ExtJS si Sencha Touch

Ext JS 6 este un framework pur JavaScript pentru construirea de aplicatii webinteractive cross-platform utilizand tehnici precum scripting Ajax DHTML si DOM

Avantajele framework-ului ExtJS sunt

1 Documentatia Extjs este foarte cuprinzatoare si bine ıntretinuta2 Aspectul cheie al bibliotecii EXTJS este suportul de tip cross-browser3 Framework-ul ExtJS ofera o multitudine de elemente UI Aceste elemente includ

forme casete de dialog file arbori si tabele4 Framework-ul ExtJS include suport pentru implementarile Ajax5 ExtJS ofera performante excelente Framework-ul este complet orientat spre obiecte

si este extensibil asta pentru ca este scris ın JavaScript

Pentru partea de frontend se foloseste framework-ul ExtJS deoarece are o arhitec-tura ce se mapeaza foarte bine pe proiectele de frontend si anume arhitectura bazata pecomponente Aceasta face ca ın proiect codul sa fie mult mai organizat si procesul dedezvoltare al proiectului sa fie mult mai scurt prin identificarea mai usoara a erorilor

446 Facebook API(Graph API)

Graph API 7 este modul principal de a pune date ın platforma Facebook si de aobtine date din platforma Facebook Este un API bazat pe HTTP pe care aplicatiile ılpot utiliza pentru interogarea datelor pentru a introduce postari noi pentru gestionareaanunturilor sau pentru a ıncarca fotografii

Este denumit Graph API dupa ideea unui rdquograf socialrdquo - o reprezentare sub formade graf a informatiilor de pe Facebook Este compus din

bull noduri - ın esenta obiecte individuale cum ar fi un utilizator o fotografie o paginasau un comentariu

bull muchii - conexiuni ıntre o colectie de obiecte si un singur obiect cum ar fi fotografiilede pe o pagina sau comentariile de la o fotografie

bull campuri - date despre un obiect cum ar fi ziua de nastere a unui utilizator saunumele paginii

De obicei se utilizeaza noduri pentru a obtine date despre un anumit obiect se uti-lizeaza muchii pentru a obtine colectii de obiecte legate de un singur obiect si se utilizeazacampurile pentru a obtine date despre un singur obiect sau mai multe obiecte dintr-ocolectie

Am folosit Facebook API ca solutie pentru a ımbunatati problema de rdquocold startrdquopentru ca este singurul site pe care marea majoritate a oamenilor au cont si salveazalucrurile care le plac Deci se potrivea perfect peste nevoile aplicatiei mele

6httpdocssenchacomextjs6207httpsdevelopersfacebookcomdocsgraph-api

29

447 Git

Git 8 este un sistem de control a versionarii pentru urmarirea modificarilor ın fisierelede pe computer si coordonarea activitatii asupra acestor fisiere ın randul mai multor per-soane Este utilizat ın principal pentru gestionarea codului sursa ın dezvoltarea de softwaredar poate fi folosit pentru a urmari schimbarile ın orice set de fisiere

Avantaje ale Git

bull Modelul distribuit numai ceea ce se doreste se face publicbull Branching-ul si merging-ul sunt usoarebull Fluxul de lucru este flexibilbull Integritatea datelor este asigurata Deoarece GIT utilizeaza arbori SHA1 coruperea

datelor din motive externe poate fi usor detectatabull Rapid Git este foarte rapid chiar si ın comparatie cu alte sisteme de control a

versionarii

Am folosit Git pentru a avea la proiect un back-up ın caz ca se ıntampla ceva cuproiectul salvat pe calculator

45 Arhitectura conceptuala

In figura 45 este prezentata arhitectura conceptuala a sistemului Acesta este ım-partit ın doua mari parti backend-ul si frontend-ul care comunica ıntre ele si ısi trimitinformatii

Se poate observa ca baza de date este de tip graf mai exact Neo4j si comunica cubackend-ul pentru a putea lucra cu datele stocate Backend-ul este structurat pe nivelefiecare cu un diferit rol si care trebuie parcurs pentru a procesa datele din interfata ınbaza de date Cele trei nivele sunt cel de Repository cel de Service si cel ControllerToate interogarile venite din interfata utilizator ajung ın nivelul de Controller Dupa ceinterogarile trec de securitatea sistemului ajung ın nivelul de Service Acolo se proceseazasi se afla partea de logica a aplicatiei Pentru a interactiona cu baza de date din Servicese apeleaza metodele din nivelul de Repository

In continuare backend-ul comunica prin protocolul HTTP cu interfata grafica cucare interactioneaza clientii aplicatiei Interfata este scrisa ın Ext JS si are o parte de Viewsi o parte de Controller care este cea care comunica cu backend-ul

Pentru partea de autentificare sistemul interactioneaza cu API-ul de la Facebookde la care ia dupa autentificare un access token Cu ajutorul acestuia ia dupa aceea datelenecesare pentru a putea crea un profil utilizatorului

8httpsguidesgithubcomintroductiongit-handbook

30

Figura 45 Arhitectura conceptuala

31

Capitolul 5

Proiectare de Detaliu siImplementare

In acest capitol vor fi prezentate detalii de implementare ale sistemului de recoman-dare incluzand o ımpartire al acestuia ın componentele care ıl cuprind

Obiectivul este de a prezenta arhitectura si modul de implementare al aplicatieipe baza datelor descoperite ın studiul bibliografic de la capitolul trei si cu tehnologiilehotarate la capitolul patru Pe langa asta va fi prezentata si structura bazei de date sideciziile luate pentru securitatea aplicatiei

51 Arhitectura sistemului

Din punctul de vedere al arhitecturii aplicatia se poate considera ca este alcatuitadin patru mari componente

1 API-ul de la Facebook2 Aplicatia client care reprezinta interfata grafica a aplicatiei3 Aplicatia server adica backendul aplicatiei si partea ın care se afla partea de rdquobusiness

logicrdquo4 Baza de date

Partea componenta reprezentata de API-ul de la Facebook este doar o componentacu care aplicatia se integreaza si pe care aceasta o foloseste In interactiunea cu ea interfatada o cerere de autentificare apare o fereastra de la Facebook ın care utilizatorul introducecredentialele de la API-ul de Facebook se primeste ınapoi un access token si cu ajutorulacestuia face o cerere pentru a primi datele personale ale utilizatorului pentru creeareaprofilului utilizator

Urmatoarea parte a aplicatiei este interfata utilizator frontend-ul care reprezintapartea cu care utilizatorul interactioneaza si locul unde ıi sunt afisate informatiile

Cererile din interfata ajung ın a treia parte componenta a sistemului partea deserver adica backend-ul aplicatiei Acolo toate cererile sunt citite si procesate iar raspun-

33

sul lor este trimis la interfata utilizator Aceasta este partea care reprezinta rdquogandireardquoaplicatiei Aceea este componenta care face legatura ıntre cererile utilizatorului din inter-fata si datele stocate ın baza de date

Ultima componenta a aplicatiei o reprezinta baza de date care are ca rol sa stochezedatele despre utilizatori produse si comenzi Ea este o baza de date sub forma de grafde tipul Neo4j Acolo se salveaza entitatile aplicatiei sub forma de noduri si dependenteleıntre acestea sub forma de relatii ıntre aceste noduri

Figura 51 Diagrama de rdquodeploymentrdquo

In figura 51 este prezentata diagrama de rdquodeploymentrdquo a sistemului cu cele patrucomponente ale sistemului Aplicatia client comunica cu API-ul de la Facebook prin pro-tocolul securizat HTTPS cu backend-ul prin protocolul HTTP iar backend-ul cu baza dedate prin JDBC

Aplicatia a putut fi ımpartita ın aceste componente separate deoarece fiecare dintreele poate functiona independent de celelalte comunica cu ele doar prin mesaje Din acestmotiv locul unde ruleaza acestea pot sa fie pe servere diferite In plus daca aplicatiaar fi pusa pe servere pentru utilizatori ar putea fi mai multe servere pe care ruleaza ocomponenta si prin rdquoload balancingrdquo sa se trimita cererile ımpartite ıntre ele

Cum astfel componentele nu depind foarte mult unele de altele si pot rula faraa le interesa de unde le sunt trimise cererile este arhitectura cea mai corecta deoarecedefectarea sau o posibila eroare la una din ele nu o influenteaza cu nimic pe o alta Dacatoate ar rula pe acelasi server o eventuala defectiune a acestuia ar ınsemna o defectiune aıntregului sistem Insa daca exista mai multe noduri si se afla pe servere diferite pot doartoate cererile sa fie redirectionate spre un nod care functioneaza si aplicatia sa functionezepentru clienti la fel ca ınainte

34

Un alt avantaj al arhitecturii ar fi faptul ca la o lansare viitoare catre clienti se poatelansa doar componenta la care s-au facut modificari De asemenea aplicatia ar putea aveape viitor si o componenta mobila Iar cum serverul e independent poate fi acelasi serverfolosit de o alta aplicatie client

511 Arhitectura componentei backend

Arhitectura backend-ului este si ea ımpartita ın mai multe pachete pentru o maibuna structura si pentru o cat mai mica dependenta ıntre diversele componente Astfelcuplarea este minima ıntre clase si eventualele modificari ulterioare pot fi mai usor defacut

Serverul a fost implementat ın Java cu ajutorul framework-ului Spring Boot iarmediul de dezvoltare folosit a fost Intellij IDEA

Din punctul de vedere al ımpartirii arhitectura serverului aplicatiei este structurataın patru pachete si o clasa ın afara acestora Acea clasa este rdquomainrdquo-ul aplicatiei este parteacare trebuie rulata pentru a porni serverul Din cauza ca este o aplicatie Spring Boot si nuuna String singura adnotare necesara pentru a sti ca aceea este clasa rdquoradacinardquoa aplicatieieste SpringBootApplication

Cele patru pachete ale serverului sunt1 Cel de domeniu (domain) cu clasele POJO care reprezinta entitatile din baza de

date2 Cel de rdquomagazierdquo (repositories) care este cel care face direct actiunile ın baza de date3 Cel de serviciu (services) ın care se afla partea de logica a ıntregii aplicatii4 Cel de web ın care se afla clasele de rdquocontrollerrdquo

Figura 52 Diagrama de pachete pentru backend

35

Ca si dependente nivelul de web ıl foloseste pe cel de seviciu cel de serviciu ılfoloseste pe cel de rdquomagazierdquo iar clasele din pachetul de domeniu sunt folosite ın toatecelelalte pachete

In continuare voi prezenta pe rand fiecare nivel al serverului adica fiecare pachet

Figura 53 Diagrama de clase pentru pachetul rdquodomainrdquo

36

Nivelul de domeniu (domain) este alcatuit ın primul rand din clasele care suntentitati ın baza de date Acestea sunt reprezentate de toate clasele ce stocheaza informatiidespre utilizatori si despre produse si comenzi Pe langa informatiile personale despre unutilizator de genul numelui email-ului sau data nasterii care sunt salvate ın entitateapersoana se stocheaza despre utilizator ın clase diferite informatii de genul locului undelocuieste locul unde a copilarit locurilor unde a facut scoala locului unde lucreaza sau celmai important pentru aplicatia aceasta lucrurilor care ıi plac In afara acestor informatiidespre utilizatori sunt si clase cu informatiile despre prieteni despre produse sau desprecomenzi

Din cauza faptului ca aplicatia este de tipul unei retele sociale ın care exista prieteniiıntre persoane exista dependente ıntre toate entitatile aplicatiei Acesta este si motivulpentru care am ales baza de date sub forma de graf pe care sa se mapeze toate acesteentitati sub forma de noduri si toate aceste dependente sub forma de relatii

In pachetul de domeniu se afla si trei subpachete Unul dintre ele este pentruclasele folosite pentru a trata erorile aplicatiei In interiorul acestui pachet se afla douaclase pentru eroare si o exceptie cea folosita ın cazul ın care nu se gaseste ceea ce doresteutilizatorul Pe langa asta este clasa care are ca obiect raspunsul dat de sistem ın cazulunei erori la server Aceasta contine ın interiorul sau pe langa codul erorii si detalii despreeroarea trimisa Aceasta lista de detalii e reprezentata de obiectele de tipul celei de-a treiaclase din pachetul acesta

Celelalte doua subpachete aflate ın acest nivel sunt cele care contin clasele specialede cerere sau raspuns care au ajutat la maparea acestora mai bine In multe cazuri nua fost necesara trimiterea la interfata utilizator a tuturor informatiilor stocate despre oentitate si de aceea am ales sa creez ın aceste cazuri un obiect auxiliar care sa fie folositpe post de raspuns

Figura 54 Diagrama de clase pentru pachetul rdquorepositoriesrdquo

37

Cel de-al doilea nivel al aplicatiei backend este cel de rdquomagazierdquo (repositories) carecontine doar interfete de tip rdquoRepositoryrdquo

Aceste interfete sunt cele care fac operatiile directe asupra entitatilor din baza dedate

Unele interfete doar extind interfata care are deja implementate metodele CRUDsi din acest motiv nu au metode suplimentare iar altele au si metode ın plus care au carol sa execute interogari mai complexe asupra bazei de date In acele metode se pot scrieinterogarile ın Cypher pentru a putea primi informatii despre mai multe noduri sau desprerelatiile dintre acestea sau si pentru a returna doar anumite rezultate care ındeplinescanumite conditii In felul acesta a fost implementata si cererea de oferire a recomandarilorIn acel caz sistemul returneaza produsele care au ın descriere unul din lucrurile care se aflaın lista de obiecte sau servicii primite de la Facebook ca ıi plac utilizatorului

Nivelul de rdquoRepositoryrdquo este folosit direct de cel de-al treiea nivel cel de servi-ciu Acesta este nivelul la care se executa logica aplicatiei unde se comanda modul defunctionare al ıntregii aplicatii

Figura 55 Diagrama de clase pentru pachetul rdquoservicesrdquo

Pe acest nivel ajung toate cererile din server dupa ce trec de verificarile de securitateIn acest pachet se afla si clasa de securitate care face verificarile necesare In aceasta clasaexista o metoda ce se apeleaza la prima cerere cea de salvare a datelor de la Facebookdespre utilizator si care codifica id-ul utilizatorului si ıl trimite pe raspuns ınapoi interfeteiPe langa asta ın acea clasa se afla si o metoda care verifica faptul ca id-ul codificat esteal unui utilizator cu rol corespunzator pentru a face acea cerere

In plus ın acest pachet se afla si toate celelalte clase care fac diverse operatii pedatele din baza de date si dau raspunsuri cererilor din interfata Aici se afla logica care

38

comanda actiunile asupra utilizatorilor asupra prietenilor acestora asupra produselor siasupra comenzilor

Ultima clasa a acestui nivel este cea care se ocupa de trimiterea de email-uri Incazul ın care se face o noua comanda de catre un utilizator toti producatorii produselor depe comanda sunt notificati despre produsele lor pe care le doreste utilizatorul Din serviciulde comanda se apeleaza serviciul de email pentru fiecare producator din lista celor care auproduse care se afla pe lista comenzii utilizatorului

Ultimul si cel mai aproape de interfata utilizator este nivelul de web Acolo se aflatoate clasele de rdquoControllerrdquo ale aplicatiei server

Figura 56 Diagrama de clase pentru pachetul rdquowebrdquo

Toate cererile din interfata utilizator ıncearca sa se mapeze pe rutele declarate ınclase pentru a fi procesate ın metoda corespunzatoare Toata aceasta parte este foarteusor de implementat si mai ales foarte lizibil pentru programatori datorita adnotarilor dinJava Cu ajutorul acestora trebuie doar specificat care este numele URL-ului cererii careeste tipul de obiect asteptat si daca se trimite ca rdquoquery stringrdquo pe URL sau ın interiorulcorpului cererii si tipul raspunsului Pentru fiecare cerere care nu este apelata ın parteaneautentificata a utilizatorului primul lucru care se apeleaza este metoda de securitatepentru a verifica rolul si id-ul utilizatorului Daca din punctul de vedere al securitatii totuleste ın regula se apeleaza metoda corespunzatoare din pachetul de serviciu

39

O singura clasa este diferita de restul ın pachetul de controller si aceea este clasa deeroare Acolo se mapeaza erorile aparute ın timpul cererii si se trimite ınapoi ın interfatagrafica un raspuns cu cod de eroare specific nu numai 500 Generic Application Exceptioncum ar trimite fara aceasta clasa si cu detalii despre motivul aparitiei erorii

Datorita folosirii adnotarilor din java nu a fost necesara folosirea unor rdquodesignpatternrdquo-uri ın sistem De exemplu pentru a folosi ın nivelul de web ceva din pachetulde servicii trebuia doar acel obiect sa aiba adnotarea Autowired si se ınlocuieste atatfolosirea rdquodesign patternrdquo-ului Singleton cat si a celui de Factory Acel obiect nu trebuiecreat sau initializat se face asta implicit datorita adnotarii si de asemenea este folositapeste tot aceeasi instanta

In concluzie toate cererile venite din interfata grafica ajung ın nivelul de rdquocontrollerrdquode unde sunt trimise la cel de rdquoservicerdquopentru a fi procesate si facute eventualele modificarinecesare ın baza de date ca apoi raspunsul sa fie trimis ınapoi spre aplicatia client pentruafisare

512 Arhitectura componentei frontend

A doua componenta implementata a sistemului este aplicatia client frontend-ulAceasta a fost scrisa ın Java Script cu ajutorul framework-ului Ext JS compilarea

se face cu ajutorul Sencha CMD si mediul de implementare a fost IntelliJ IdeaCu ajutorul framework-ului Ext JS se scriu componente care apoi se initializeaza

unele pe altele Aplicatia porneste cu fisierul Applicationjs care este un fel de rdquomainrdquopentru aplicatie Aceasta initializeaza alte componente care la randul lor includ altecomponente si tot asa Structura poate fi foarte usor comparata cu una arborescenta dinacest punct de vedere

Framework-ul a fost creat sa functioneze ın felul acesta pentru ca scopul componen-telor este sa fie scrise ın asa fel ıncat sa poata pe viitor sa fie utilizate din nou Una dindorintele majore ın programare tot timpul este de a se scrie cod ıntr-o maniera ın care safie cat mai reutilizabil Iar framework-ul Ext JS exact asta ıncearca

Arhitectura aplicatiei client se gaseste ın figura 57 si este la randul ei ımpartita ınpachete ca si cea de server Similar cu pachetul de rdquodomainrdquo de la aplicatia de backendeste pachetul rdquomodelrdquo al interfetei utilizator Aici sunt rdquoclaserdquo care sunt simple POJO sicare sunt apoi folosite ın nivelele urmatoare Sunt mai putine decat clasele din rdquostorerdquodeoarece daca raspunsul de la server nu trebuie procesat nu sunt necesare se pot mapadirect obiectele din rdquostorerdquo pe componentele interfetei utilizator

Urmatorul nivel este cel pe care se afla clasele de rdquostorerdquo Acestea sunt cele careexecuta cererea spre backend si face legatura ıntre client si server Daca are o clasa derdquomodelrdquodeclarata atunci populeaza acel obiect cu datele primite de la server iar ın cazul ıncare nu este declarat un model se trimit datele exact asa cum s-au primit la nivelul urmatorde rdquoviewrdquo Acest nivel seamana din punct de vedere al functiei cu cel de rdquorepositoryrdquo de laaplicatia server deoarece ambele au rol de legatura Aceea facea legatura ıntre aplicatiesi baza de date si aceasta face legatura ıntre aplicatia client si aplicatia server

40

Figura 57 Diagrama de clase pentru aplicatia web

Cel de-al treilea pachet al aplicatiei este cel de rdquoviewrdquo In acest pachet se afla claselecare alcatuiesc partea vizuala a aplicatiei La randul ei si aceasta este alcatuita tot dincomponente Aplicatia deschide ın primul rand Main-ul care determina aparitia paginii deHome si afisarea ın meniu a optiunilor posibile ın functie de autentificare si rol Clasele deaici se executa de fapt la deschiderea aplicatiei fiind rdquosingle page applicationrdquo si tot atuncise ıncarca pe pagina componentele Ca si arhitectura a pachetului acesta este ımpartit larandul sau ın subpachete Pentru o mai buna organizare exista patru subpachete cateunul pentru fiecare tip de utilizator In felul acesta toate rdquoviewrdquo-urile care sunt specificeunui utilizator cu un anumit rol se afla ın acelasi subpachet

Cele patru subpachete existente ın pachetul rdquoviewrdquo sunt

1 Pachetul rdquomainrdquo care cuprinde rdquoviewrdquo-urile care se afla ın partea neautentificata aaplicatiei

2 Pachetul rdquoclientrdquo continand rdquoviewrdquo-urile pe care le poate accesa un utilizator simplu3 Pachetul rdquoproducerrdquo specific actiunilor unui utilizator care are rol de producator4 Pachetul rdquoadminrdquo care contine toate rdquoviewrdquo-urile care ıi apar unui utilizator care este

administrator al aplicatiei

Ultimul pachet si nivel al aplicatiei client este cel de rdquocontrollerrdquo In acest pachet

41

se afla clasele care fac actiunile din interfata grafica In timp ce pachetul rdquoviewrdquo continedoar partea grafica a aplicatiei adica modul ın care aceasta trebuie sa arate pachetulrdquocontrollerrdquo contine actiunea acestora modul ın care aplicatia trebuie sa functioneze

Ca si arhitectura si acest pachet a fost ımpartit la randul lui tot ın cele patrusubpachete ca si pachetul rdquoviewrdquo adica rdquomainrdquo rdquoclientrdquo rdquoproducerrdquo si rdquoadminrdquo In pluspentru a fi usor de gasit ce clasa de rdquocontrollerrdquo apartine carui rdquoviewrdquo am ales ca cele douasa aiba acelasi nume In felul acesta daca se doreste sa se gaseasca actiunile unui rdquoviewrdquose poate cauta dupa o clasa cu acelasi nume ın pachetul rdquocontrollerrdquo Numarul claselor dinacest pachet este mai mic decat cel al claselor din rdquoviewrdquo deoarece nu toate paginile dininterfata au actiuni suplimentare Daca singura actiune este ıncarcarea paginii cu date dela server adica doar o actiune simpla de GET datele se ıncarca cu ajutorul rdquostorerdquo-ului laıncarcarea paginii si nu este necesara nici o actiune suplimentara Paginile pe care se potface si actiuni de alt gen sau se deschid noi ferestre au nevoie de clase de rdquocontrollerrdquo

In concluzie arhitectura aplicatiei client este una bazata pe componente care ıncearcasa foloseasca cat mai multe clase reutilizabile

52 Structura bazei de date

Baza de date a aplicatiei este de tip graf de tipul Neo4j Pentru utilizare exista unprogram numit Neo4j ce trebuie instalat Acest program are si o interfata grafica ın carese pot vizualiza datele sub forma grafica si ın care se pot scrie de asemenea si interogariın limbajul acestei baze de date adica Cypher

Fiind o baza de date sub forma de graf datele stocate sunt salvate ın structurade date sub forma de noduri si relatii Entitatile din pachetul de domeniu din aplicatiabackend se gasesc ın baza de date sub forma unor noduri iar dependentele dintre nodurise mapeaza ın baza de date sub forma unor relatii Un element diferit fata de alte tipuride baze de date este faptul ca pe relatiile dintre noduri se pot salva atribute cum este ınaplicatie cazul pentru prieteniile dintre persoane In cazul acestora pe relatia dintre nodurise salveaza daca prietenia a fost sau nu acceptata

Pentru fiecare clasa POJO din aplicatia server clasa ce are doar metodele get si setsi se afla ın pachetul domain exista cate un tip de nod diferit ın baza de date cum estesi marcat ın diferite culori ın figura 58 Fiecare tip de nod are atributele proprii care potlua valori sau pot fi nule Iar fiecare obiect din Java reprezinta un nod diferit ın baza dedate

Neo4j a fost cea mai buna optiune pentru baza de date pentru ca aplicatia poate ficonsiderata o retea sociala Acest lucru se datoreaza relatiilor de prietenie dintre persoanesi a multiplelor relatii ıntre noduri Toate nodurile se afla ın acceasi componenta conexadeci nu exista noduri izolate care sa nu aiba nici o legatura cu nici un alt nod

Datorita acestei structuri a bazei de date este posibila implementarea cererii derecomandare ca o simpla interogare ın baza de date aceasta fiind cea mai simpla metodade implementare a unui sistem de genul acesta una mult mai complexa ar fi fost un

42

algoritm de ınvatare care sa ınvete tipare ale utilizatorilor si sa recomande cadouri pe bazaacestor informatii

Figura 58 Diagrama bazei de date pentru doi utilizatori

Un alt avantaj al acestui tip de baza de date este faptul ca datele nu sunt duplicateın baza de date Spre exemplu daca mai multi utilizatori au ca locatie acelasi oras nu secreaza cate un nod cu acea locatie de mai multe ori ci acel unic nod va avea cate o relatiecu fiecare utilizator care are ca locatie acel oras

In concluzie structura bazei de date a fost aleasa ın acest fel datorita tipului apli-catiei adica asemanatoare cu o retea sociala si datorita implementarii simple a unui sistemde recomandare pe o asemenea baza de date

53 Fluxul pentru diferite operatii

Pentru aplicatie cele mai importante cazuri de utilizare sunt salvarea informati-ilor despre utilizator primite de la Facebook pentru crearea unui profil si recomandareacadourilor pentru un utilizator al aplicatiei Din aceasta cauza cele doua cazuri de utilizarevor fi prezentate mai ın detaliu ın continuare

43

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 5: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

45 Arhitectura conceptuala 30

Capitolul 5 Proiectare de Detaliu si Implementare 3351 Arhitectura sistemului 33

511 Arhitectura componentei backend 35512 Arhitectura componentei frontend 40

52 Structura bazei de date 4253 Fluxul pentru diferite operatii 43

531 Fluxul pentru sub-sistemul de creare al unui utilizator si preluareadatelor necesare 44

532 Fluxul pentru sub-sistemul de recomandare 4554 Securitatea sistemului 46

Capitolul 6 Testare si Validare 4961 Testare unitara 4962 Cazuri de testare 5063 Evaluarea sistemului de catre utilizatori 53

Capitolul 7 Manual de Instalare si Utilizare 5571 Resurse necesare 5572 Manualul de instalare 55

721 Instalare si pornire baza de date 55722 Tehnologii necesare si pornirea aplicatiei backend 56723 Tehnologii necesare si pornirea aplicatiei frontend 56724 Configurarea integrarii cu Facebook 57

73 Manualul de utilizare 57

Capitolul 8 Concluzii 6181 Analiza rezultatelor obtinute 6182 Dezvoltari ulterioare 61

Bibliografie 63

Lista tabelelor 65

Lista figurilor 67

Anexa A Glosar de termeni 69

2

Capitolul 1

Introducere

In acest capitol vor fi prezentate notiuni despre contextul proiectului motivatiade la care a venit ideea proiectului si de asemenea se va prezenta continutul lucrarii pecapitole

11 Contextul proiectului

In prezent cele mai mari site-uri ale lumii din punct de vedere al numarului de uti-lizatori au ınceput ın ultimii ani sa aiba o sectiune de recomandari Acestea pot reprezentaproduse pe site-urile de comert online filme pe site-urile de vizionare de filme carti pesite-urile sau aplicatiile pentru citit sau persoane pentru site-urile de socializare

Popularitatea sistemelor de recomandare a crescut foarte mult ın ultimii ani datoritabeneficiilor multiple pe care le aduc Recomandarile aduc avantaje atat celui care vrea savanda ceva cat si celui care vrea sa cumpere deoarece unuia ıi face vanzari mai mariın timp ce celuilalt ıi da sugestii de lucruri de care ar putea avea nevoie si a uitat Iarpopularitatea lor creste tot mai tare cu cat sunt mai utile recomandarile Aceste sistemede recomandare trebuie de fapt sa faca o rdquoprezicererdquo asupra lucrurilor care i-ar placea unuiutilizator

O problema cu care multi oameni se confrunta este cumparatul cadourilor In multesituatii desi acel om ne este foarte apropiat si ıl cunoastem foarte bine tot ne este foartegreu sa gasim un cadou potrivit pentru acesta De aceea o aplicatie care sa recomandecadouri care sa creeze recomandari specializate pentru o anumita persoana ar avea o uti-litate foarte mare pentru oricine

12 Motivatia

Motivatia aplicatiei o reprezinta de fapt lipsa unei aplicatii similare pe piata panaın momentul documentarii si ın acelasi timp utilitatea uneia

1

Toti oamenii se confrunta mai devreme sau mai tarziu cu problema gasirii cadouluiperfect pentru cineva din viata lor In multe cazuri aceasta problema poate fi o adevaratacatastrofa ce consuma energie timp si rabdare pentru cel care trebuie sa cumpere cadoulDe accea scopul aplicatiei este de a usura viata oamenilor prin oferirea unor variante decadouri specifice pentru exact acea persoana

Din toata cercetarea facuta pe aceasta tema nu am gasit nici o aplicatie de acestgen care sa ofere recomandari specializate pentru o anumita persoana

13 Continutul lucrarii

In aceasta sectiune vor fi prezentate capitolele acestui document si vor fi de asemeneasi descrise sumar ca si continut

bull Introducere (Capitolul 1) - ın acest capitol se va prezenta de fapt contextul proiec-tului motivatia de la care s-a pornit cand a fost ınceput si de asemenea e cuprinsaın ea si aceasta descriere a continutului pe capitole

bull Obiectivele Proiectului (Capitolul 2) - ın acest al doilea capitol sunt prezentate obiec-tivele proiectului atat obiectivul principal cat si obiectivele secundare ce doresc a fiındeplinite la final

bull Studiu Bibliografic (Capitolul 3) - cel de-al treilea capitol este reprezentat de studiulbibliografic unde vor fi prezentate diverse concepte teoretice de la care s-a pornit cuproiectul lucrari si articole prezentate de altii pe teme ce au legatura cu aplicatia side asemenea solutiile existente care se apropie de aceasta lucrare

bull Analiza si Fundamentare Teoretica (Capitolul 4) - ın capitolul de analiza si fun-damentare teoretica vor fi prezentate cerintele de la care porneste proiectul atatcele functionale cat si cele non-functionale prezentarea cazurilor de utilizare prin-cipale ale proiectului si de asemenea o analiza asupra tehnologiilor propuse pentruacest proiect De asemenea va contine si o arhitectura conceptuala a sistemului lamomentul de ıncepere al acestuia

bull Proiectare de Detaliu si Implementare (Capitolul 5) - cel de-al cincilea capitol pre-zinta modul de implementare al proiectului Acest lucru presupune schema arhi-tecturii proiectului si de asemenea si o descriere a fluxurilor de baza ale aplicatieiIn plus este descrisa structura dupa care s-a construit baza de date sub forma degraf din ce noduri si ce relatii In ultimul rand este descris modul ın care a fostimplementata securitatea sistemului

bull Testare si Validare (Capitolul 6) - acest capitol descrie modurile ın care aplicatia afost testata atat pe componente cat si validarea finala pe utilizatori reali

bull Manual de Instalare si Utilizare (Capitolul 7) - penultimul capitol prezinta tehnologi-ile ce trebuie instalate pentru a face sistemul sa functioneze De asemenea se vaprezenta modul ın care sistemul poate fi utilizat

bull Concluzii (Capitolul 8) - ın ultimul capitol vor fi analizate rezultatele obtinute si sevor descrie noi extensii ce pot fi implementate pentru a ımbunatati sistemul

2

Capitolul 2

Obiectivele Proiectului

In acest capitol se va prezenta obiectivul principal al lucrarii cel de la care a pornittoata ideea proiectului Apoi ın continuare se vor prezenta obiectivele secundare alepoiectului care au dus la modul ın care a fost acesta implementat

21 Obiectivul principal

Scopul principal al acestui proiect consta ın construirea unui sistem de recomandarecare sa ajute utilizatorii sa poata sa cumpere cadouri pentru cunoscuti ıntr-un mod multmai eficient Sistemul va fi o aplicatie web care va avea utilizatori ce se vor putea auten-tifica si dupa stabilirea unui profil propriu cunoscutii rudele sau prietenii vor putea saprimeasca sugestii de cadouri exact pentru acea persoana Pentru cadouri vor fi introdusede catre producatori diverse obiecte si servicii In felul acesta tot procesul de cumparare alunui cadou devine mult mai usor pentru persoana care ıl cumpara si cadourile devin multmai utile pentru cei care le primesc

22 Obiective specifice

Obiectivele specifice care se va urmari sa fie atinse ın cadrul acestui proiect sunturmatoarele

bull Studierea mai multor tipuri de baze de date de la cele relationale la cele No SQLsi analizarea lor pentru a stabili care este cea mai potrivita pentru un sistem derecomandare de acest gen

bull Studierea despre diferitele tipuri de sisteme de recomandare de la cele de bazaadica filtrare bazata pe continut si filtrare colaborativa la combinatia dintre eleadica sistem de recomandare hibrid pana la cele mai putin folosite adica pe bazademografica bazata pe cunostinte sau bazata pe utilitate Iar dupa aceea alegereacelei mai potrivite metode pentru un sistem de recomandare cadouri

3

bull Intelegerea conceptului de rdquocold startrdquo la sisteme de recomandare ca problema a aces-tora si gasirea unor solutii care ar putea sa ınlature sau cel putin sa ımbunatateascaaceasta problema

bull Documentarea despre diferite metode de construire a unui profil al utilizatorului sidin aceste metode alegerea celei mai potrivite din punct de vedere al timpului care ıitrebuie sistemului pana cand rdquoınvatardquo suficiente lucruri despre utilizator ıncat poateface recomandari corecte

bull Pe baza tuturor cunostintelor acumulate ın urma studiului construirea unei aplicatiiweb ca demonstratie a alegerilor facute

4

Capitolul 3

Studiu Bibliografic

Obiectivul acestui capitol este prezentarea conceptelor teoretice la baza carora staacest proiect Vor fi prezentate concepte precum modul de functionare al sistemelor derecomandare tipurile de sisteme de recomandare abordarea celor de la Netflix asupradomeniului Neo4j ca solutie pentru un sistem de recomandare utilizarea unei retele socialepentru crearea profilului unui utilizator si reteaua Facebook ca exemplu de astfel de reteaiar ın final solutii similare

31 Modul de functionare al sistemelor de recoman-

dare

Un sistem de recomandare este o tehnologie implementata ın situatiile ın care ar-ticole (produse filme evenimente) sunt recomandate utilizatorilor (clienti vizitatori uti-lizatori de aplicatii cititori) sau invers Numarul mare al utilizatorilor acestor aplicatiieste ceea ce face ca problema sa fie dificila si costisitoare de rezolvat

Motoarele de recomandare sunt ın esenta instrumente de filtrare a datelor careutilizeaza algoritmi si date pentru a recomanda cele mai relevante elemente unui anumitutilizator [9] Sau ın termeni simpli nu sunt altceva decat o forma automatizata a unuirdquovanzator ıntr-un magazin de hainerdquo Lui i se cere un produs si el nu numai ca arata acelprodus dar si altele asemanatoare pe care le-am putea cumpara

Un sistem de recomandare are trei faze de baza dupa cum este prezentat si ındiagrama 31 pe baza carora functioneaza Prima faza este cea de colectare a datelorSistemele de recomandare se bazeaza mereu pe date anterioare deci faza de ınceput ıncare acumuleaza informatii este esentiala si de multe ori o problema foarte grea de rezolvatAceasta problema se mai numeste si rdquocold startrdquo Problema este reprezentata de faptul caun utilizator nou al unei aplicatii nu are informatii stocate despre el sau despre activitatealui fiind nou Iar sistemele de recomandare nu pot sa stie de fapt ce ıi place lui decat dupace utilizeaza o perioada aplicatia De multe ori solutia adusa de oameni pentru aceastaproblema este un chestionar de ıntrebari adresat utilizatorului care sa ıl poata face sa se

5

Figura 31 Fazele unui sistem de recomandare1

ıncadreze ıntr-un tipDe fapt din aceasta cauza sistemele de recomandare devin tot mai bune si mai

exacte cu cat sunt folosite mai mult deoarece sunt stocate tot mai multe informatii despreutilizator

Cea de-a doua faza a unui sistem de recomandare este cea de ınvatare Acoloaplicatia trebuie sa stocheze datele despre utilizator si trebuie la urmatoarea recomandaresa se bazeze pe cele dinainte si ın functie de ele sa o faca Acest lucru poate fi realizat fiedirect pe baza setului de date colectat ın faza de colectare a informatiilor care ar puteafi bazat pe memorie sau bazat pe model fie prin activitatile utilizatorului care au fostobservate

A treia faza este cea de recomandare propriu-zisa ın care doar utilizatorul facecererea de recomandari si acestea ıi sunt trimise

32 Tipuri de sisteme de recomandare

In continuare ca studiu bibliografic au fost tipurile sistemelor de recomandare [11]Ca si teorie sunt mai mute tipuri de sisteme de recomandare si o reprezentare graficaa acestor tipuri este prezentata ın figura 32 Cea mai de baza ımpartire este ın douacategorii recomandari bazate pe continut si recomandari bazate pe filtrare colaborativa

Filtrarea bazata pe continut creeaza un profil de utilizator bazat pe o metoda deınvatare pentru a determina elementele pe care un anumit utilizator le-ar dori De exemplusite-ul poate utiliza un sistem de cuvinte cheie care sugereaza articole cu cuvinte cheiesimilare ın descrierea unui element pe care utilizatorul l-a cumparat anterior

Recomandarile bazate pe filtrare colaborativa se inspira din similaritatile cu ceilaltiutilizatori Gasesc utilizatori asemanantori cu cel pentru care se face recomandarea pebaza actiunilor din trecut despre aceia si se recomanda lucruri care le plac celorlalti Acesttip de recomandare se potriveste perfect cu recomandarile de filme Acolo un om cu gusturi

1httpswwwsciencedirectcomsciencearticlepiiS1110866515000341

6

asemanatoare va putea sa recomande cel mai bine un alt film unui prieten Cea mai simplaimplementare pentru asa ceva este sub forma unei matrici cu spatii goale ın locurile undenu se cunoaste informatie

Pe langa aceste tipuri de recomandari mai sunt si altele dar care nu sunt folosite lafel de des

Figura 32 Tipurile sistemelor de recomandare2

In filtrarea bazata pe criterii demografice se fac recomandari catre utilizatori pebaza informatiilor lor demografice Sistemul va sugera elemente care au fost selectate dealti utilizatori care se ıncadreaza ın acelasi profil demografic

Filtrarea bazata pe utilitate se bazeaza pe utilitatea pe care utilizatorul o va obtinede la produs Poate include lucruri precum fiabilitatea si disponibilitatea vanzatoruluipentru a se asigura ca recomanda produse usor de obtinut de catre utilizator

Filtrarea bazata pe cunostinte recomanda selectii pe baza preferintelor si modelelorde cumparare cunoscute despre utilizator Intrucat sistemul va sti ce a cumparat con-sumatorul ın trecut acesta poate face recomandari ın functie de ceea ce ar putea satisfaceaceste nevoi ın viitor

Filtrarea hibrida combina doua sau mai multe tehnici de recomandare diferite pentrua crea un sistem de recomandare mai detaliat

2httpswwwsciencedirectcomsciencearticlepiiS1110866515000341f0005

7

33 Abordarea Netflix

Foarte multa cercetare ın domeniul sistemelor de recomandare a fost influentata decei de la Netflix

Figura 33 Tipuri de recomandari oferite de Netflix3

Netflix este un serviciu de streaming care permite clientilor sa vizioneze o gamalarga de emisiuni TV filme documentare si multe altele pe mii de dispozitive conectatela internet

In figura 33 este o imagine a site-ului cu tipurile diferite de recomandari pe careacestia le ofera

Cheia succesului Netflix consta ın capacitatea lor de a anticipa ceea ce le placeutilizatorilor motiv pentru care fiecare doua din trei ore de vizionare ın Netflix provin dinrecomandari In trecut Netflix au folosit informatii despre sex si varsta pentru a determinace filme sa recomande Acum ei folosesc de exemplu ceea ce utilizatorul a urmaritınainte a cautat cat timp petrece utilizatorul vizionand filme si tipul de dispozitiv utilizatPredictiile din motorul de recomandare Netflix nu se bazeaza doar pe comportamentulutilizatorului ci si pe context (cum ar fi timpul zilei) popularitatea titlurilor noutateadiversitatea si cat de recent a fost scos filmul sunt factori importanti [7]

Premiul Netflix a fost o competitie lansata ın 2006 pentru cel mai bun algoritm defiltrare colaborativa pentru a prezice ratingurile utilizatorilor pentru filme pe baza eva-luarilor anterioare fara alte informatii despre utilizatori sau filme adica fara ca utilizatoriisau filmele sa fie identificate stiind doar numerele atribuite pentru concurs ale acestoraPremiul pentru castigator consta ın 1 milion de dolari Peste 2000 de echipe au depusseturile de predictie si peste 650 de echipe au depasit precizia algoritmului actual al Netflix

3httpstechblogglomexcompostrecommender-systemshtml

8

cu mai mult de 5 [11] Castigatorul a fost echipa BellKors Pragmatic Chaos care adepasit algoritmul Netflix cu 1006

Cei de la Netflix au fost extrem de multumiti de rezultatul obtinut si nu numai caau ıncorporat acel algoritm ın algoritmul lor existent de recomandare dar au initiat si o adoua editie a competitiei

34 Sisteme de recomandare cu Neo4j

Urmatoarea parte a studiului bibliografic s-a axat pe bazele de date de tip grafGraphDB si mai exact Neo4j ın comparatie cu celelalte tipuri de baze de date adica celerelationale In cartea [10] sunt prezentate aceste concepte din punct de vedere teoretic siın lucrarile de master [5] si [1] este prezentata aceasta comparatie ıntre diferite tipuri debaze de date pe o aplicatie reala

Limbajul care se foloseste ın bazele de date Neo4j este Cypher Cu ajutorul acestuiase mapeaza query-urile pe noduri si relatii Din punct de vedere teoretic diferenta ıntrebazele de date relationale si cele sub forma de graf consta ın modul ın care sunt stocatedatele In timp ce ın bazele de date relationale datele sunt stocate ın structuri de datesub forma de tabel ın cele sub forma de graf datele sunt stocate ın noduri Coloaneletabelelor din bazele de date relationale se mapeaza ın bazele de date sub forma de graf peproprietati Pentru a face o legatura ıntre tabelele relationale se foloseau rdquochei strainerdquo pecand la Neo4j exista relatii ıntre noduri Din cauza faptului ca bazele de date sub formade graf s-au inspirat din cele relationale exista o asemanare ıntre ele si toate lucrurile auun corespondent ın cealalta

In lucrarea [12] sunt prezentate avantajele folosirii unei baze de date sub forma degraf cand se lucreaza cu retele sociale La aplicatiile de tipul retelelor soriale relatiile dintrenoduri sunt partea cea mai importanta iar pentru acestea o baza de date sub forma degraf se mapeaza cel mai bine Un avantaj al bazelor de date sub forma de graf din punctulde vedere al programatorilor cu acestea se lucreaza foarte similar ca si cu cele relationaledupa cum se prezinta si ın [4]

Un exemplu de sistem de recomandare construit cu Neo4j este [11] In acesta lucrareeste prezentata construirea unui sistem de recomandare care sa recomande prieteni ıntr-oaplicatie de socializare In lucrare sunt patru abordari pentru construirea unui astfel desistem Prima consta ın recomandarea unor prieteni cu care utilizatorul ar avea prieteniın comun cea de-a doua sunt persoane cu care utilizatorul se afla ın acelasi grup cea de-atreia sunt utilizatori care au mers la aceleasi evenimente ca si utilizatorul si ultima abordareconsta ın recomandarea persoanelor cu cei mai multi prieteni In urma mai multor teste sistatistici s-a decis ca abordarea cea mai buna este prima cea cu prietenii ın comun Toateaceste patru metode de oferire a recomandarilor se mapeaza foarte usor pe o baza de datesub forma de graf si reprezinta doar cate un query destul de simplu ın Cypher O astfelde aplicatie s-ar fi mapat mult mai greu pe o baza de date relationala datorita multiplelorrelatii si legaturi

9

Un alt exemplu de aplicatie unde s-a ales baza de date Neo4j a fost [2] Aicipentru articolele politice pe care sistemul le recomanda se creeaza o combinatie ıntrerecomandarile obtinute din articolele care le plac oamenilor cu care utilizatorul vorbestemult si lucruri care le plac utilizatorilor cu care acesta are lucruri ın comun Si ın acest cazexista o multime de relatii ıntre utilizatori si articole si cel mai usor se obtin recomandarilecu o aplicatie sub forma de graf motiv pentru care au si ales Neo4j

35 Utilizarea retelei Facebook pentru crearea unui

profil utilizatorilor

In continuare ca studiu bibliografic au urmat sisteme asemanatoare cu sistemuldorit si modul ın care acestia au reusit sa creeze profilul utilizatorului [13] Problema ceamai mare este rdquocold startrdquo-ul Adica atunci cand un utilizator este nou ın aplicatie nuse stiu suficiente informatii despre el pentru a putea sa i se ofere recomandari Dupa ceacesta foloseste aplicatia o perioada de timp ar putea sa i se ofere recomandari bazate peactivitatea sa anterioara ın aplicatie Din acest motiv la ınceput recomandarile pot lasade dorit si pot fi nu tocmai corecte

O metoda ın care se poate rezolva aceasta problema se afla ın lucrarea de master[7] ın care la utilizatorii noi se recomanda restaurante pe baza pozitiei lor geograficeAtunci cand doresti sa mergi la un restaurant este foarte importanta distanta la care seafla acel restaurant Din aceasta cauza pentru un utilizator caruia sistemul nu stie ce sa ıirecomande ıi recomanda restaurante la ıntamplare dintre cele care se afla cel mai aproapede el In felul acesta dupa ce merge la unul din restaurante si da feedback sistemul poatedupa aceea sa ıi faca recomandari

In lucrarea [8] recomandarile pentru votare au doua abordari La prima i se reco-manda lucrurile care le-a recomandat persoana cu scorul cel mai bun Si cea de-a douaabordare consta ıntr-un set de ıntrebari la care un utilizator nou trebuie sa raspunda candısi face contul

In acest caz cea mai buna metoda ın care se poate rezolva aceasta problema parea fi sa se ia informatiile de la API-ul de la Facebook Facebook este o aplicatie extremde utilizata si care ofera ca informatii publice exact ce ar fi necesar pentru a recomandacadouri de exemplu data nasterii sau lucruri care ıi plac unui utilizator Cu ajutorulacestora se poate calcula varsta utilizatorului poate sa fie ıncadrat ıntr-un profil si sepoate afla stilul de lucruri care ıi plac

Toate aceste informatii publice de la Facebook pot fi salvate si pot fi utilizate maitarziu pentru a se creea recomandari pe baza lor In articolul [3] despre valoarea datelor dela Facebook se prezinta ca si caz de utilizare pentru un site de comert online Aceasta estefoarte asemanatoare din punct de vedere al recomandarilor cu aplicatia de recomandarecadouri Diferenta dintre cele doua este ca ın cazul uneia trebuie sa recomande produsepentru utilizatorul aplicatiei si cealalta pentru un prieten al acestuia

10

Din punct de vedere al aplicabilitatii Facebook este o retea sociala deci datele salese mapeaza foarte bine pe o baza de date de tip graf cum este prezentat si ın lucrarea [6]

Asadar daca la crearea contului utilizatorului ın aplicatie se iau si informatiile pu-blice despre utilizator se vor putea oferi recomandari mult mai corecte ınca de la ınceput

36 Solutii similare

Ca solutii similare pe piata online nu exista aplicatii folosite pentru a recomandacadouri personalizate specific pentru o persoana anume Multe site-uri considera ca eirecomanda cadouri ınsa acestea reprezinta de fapt o filtrare mai avansata a rezultatelorproduselor de pe site-ul lor

Un site care ofera cadouri personalizate este Giftly 4 prezentat ın figura 34 careofera o modalitate usoara de a oferi cadouri Acest site nu are parte de recomandari cia gasit un mod de a face oamenii sa primeasca mereu ceea ce ısi doresc Cel care oferacadoul nu ıl cumpara ci doar ıl sugereaza dar decizia finala asupra cadoului este la celcare ıl primeste Modul ın care functioneaza este

1 Se ofera un rdquocard cadourdquo prin email sms printat sau ca o felicitare de ınaltacalitate

2 Destinatarul alege cel mai convenabil mod de a primi cadoul rdquocard cadourdquo ınposta sau direct ca bani ın contul bancar sau contul PayPal

3 De fapt utilizatorul ıi sugereaza destinatarului ce ar vrea el sa ofere ca si cadouiar destinatarul trimite ca mesaj modul ın care a cheltuit banii

Figura 34 Site web Giftly

4httpswwwgiftlycom

11

Ofera de asemenea si sugestii de cadouri Un om cand navigheaza pe site poate sase uite la cadouri ın categoriile Popular Holidays Birthdays Drinks Eats Meals BackTo School Get Fresh Health Fitness Going Out Getaway Top Shelf For The HipsterClothes For Her Clothes For Him Congratulations Expecting Activities si Custom

Un alt site cu cadouri este Etsy 5 cu imaginea 35 care arata site-ul Etsy este o piataglobala pentru bunuri unice si creative Pe pietele lor milioane de oameni din ıntreagalume se conecteaza atat online cat si offline pentru a face vinde si cumpara bunuri uniceEtsy ofera de asemenea o gama larga de servicii si instrumente de vanzari care ajutaıntreprinzatorii creativi sa ınceapa sa gestioneze si sa-si masoare afacerile Misiunea loreste sa pastreze comertul uman Deci de fapt acest site sprijina mai mult producatoriinu comerciantii De asemenea este mai mult axat pe bunuri unice si lucruri rdquounicerdquo Ca sicelelalte site-uri de genul acesta are o modalitate de a cauta lucrurile mai inteligent maispecializat pe ceea ce te intereseaza Categoriile de cautare sunt Jewelry AccessoriesClothing Shoes Home Living Wedding Party Toys Entertainment Art CollectablesCraft Supplies Tools si Vintage

Figura 35 Site web Etsy

Cel de-al treilea site care ofera servicii asemanatoare este Gifts 6 prezentat ın figura36 Acesta se focuseaza pe cadouri pentru diverse ocazii cum ar fi zilele de nastereCraciun diverse aniversari si alte evenimente la care se cumpara cadouri Pentru parteade recomandare se ofera posibilitatea de a efectua un test despre acel om caruia dorestisa ıi cumperi cadoul care are ca scop ıncadrarea omului respectiv ıntr-un profil si apoi

5httpswwwetsycom6httpswwwgiftscom

12

alegerea unor sugestii ce s-ar potrivi unei persoane cu acel tip de personalitate O primaıntrebare se refera la genul persoanei si ıntrebarea este daca cadoul este pentru o femeieun barbat o fetita sau un baietel Cea de-a doua ıntrebare se refera la marja de varsta ıncare se ıncadreaza acel om de exemplu pentru barbat optiunile sunt adolescent barbat ınjur de 30 de ani sau barbat ın varsta Cea de-a treia ıntrebare se refera la personalitateaomului Mai exact se fac sugestii pentru tipuri de lucruri ce i-ar putea placea unui omcare are trasaturile descrise ın primele doua ıntrebari De exemplu la barbati ın jur de30 de ani optiunile sunt ıi place sportul ıi place natura e aventurier ıi place golful ıiplace sa faca gratare sa serveasca bauturi sa gateasca sa animeze ıi place sa se ımbraceelegant este sef e entuziasmat de bere sau e un fan al sporturilor Iar ın final ın functiede raspunsurile date la ıntrebari se afiseaza sugestii de cadouri care se potrivesc oamenilorcu acel tip de personalitate

Figura 36 Site web Gifts

Nordstrom 7 care este prezentat ın imaginea 37 are o abordare similara avand pesite o multime de optiuni de filtrare a cadourilor Se pot cauta ın acest site cadouri pentrubebelusi cadouri de Craciun bijuterii pentru femei optiunile sunt multiple Acest lucruofera utilizatorilor sugestii pentru a le fi mai usor sa ıncadreze aceasta persoana ıntr-unanumit tip Iar dupa alegerea categoriei toate sugestiile de cadouri oferite de catre sitese ıncadreaza ın acel tip Ca avantaj al acestui site este ca ei ofera si serviciul de livrareal cadoului dupa cumparare oriunde ın lume Un dezavantaj al multor site-uri de genulacesta este ca ofera livrare doar ın zona sa apropiata

7httpsshopnordstromcomcgifts

13

Figura 37 Site web Nordstrom

14

Capitolul 4

Analiza si Fundamentare Teoretica

In acest capitol vor fi prezentate cerintele functionale ale lucrarii ımpreuna cucerintele non-functionale ale acesteia De asemenea va fi prezentata diagrama cazurilor deutilizare si vor fi prezentate mai ın detaliu cazurile de utilizare principale ale aplicatiei Incontinuare se va prezenta perspectiva tehnologica a proiectului si se vor explica deciziiletehnologice luate In final se va prezenta diagrama conceptuala a aplicatiei

41 Cerinte functionale

bull Posibilitatea autentificarii ın aplicatie si crearii unui profil propriu din care se potutiliza informatii si cu ajutorul caruia utilizatorul poate fi ıncadrat ıntr-un profil

bull Utilizatorii pot crea prietenii ca ıntr-o retea de socializare pentru a putea afla infor-matii despre prieteni si pentru a li se putea recomanda cadouri pentru acestia

bull Cu ajutorul informatiilor de la Facebook un utilizator poate fi notificat dinainte caurmeaza ziua de nastere a unuia din prietenii lui si sa i se ofere mai multe variantede cadouri potrivite pentru acesta Aceasta informatie o primeste cu suficient timpınainte pentru a nu fi surprins fara un cadou De la Facebook pe langa informatiiledespre data zilei de nastere sunt importante si varsta sau lucrurile care ıi plac uti-lizatorului Toate acestea ajuta la crearea profilului utilizatorului pe baza caruia serecomanda dupa aceea cadourile

bull De asemenea sistemul poate recomanda si un cadou pentru alt tip de evenimentdecat zi de nastere de genul cadou de Craciun cadou de nunta cadou pentru unnou-nascut etc

bull In aplicatie vor fi adaugate si diferite produse iar pentru a face mai usoara cumparareade cadouri se va putea face si comanda pe internet In momentul ın care un utilizatorface o noua comanda producatorii produselor comandate sunt ınstiintati de existentaacestei noi comenzi

15

bull Pentru persoanele la care pe profilul de Facebook este insuficient completat saupentru a putea cumpara cadouri pentru o persoana care nu are Facebook sau nuare cont ın aceasta aplicatie si despre care ın acest fel nu se cunosc nici un felde informatii se vor putea filtra cautarile pentru cadou printr-o serie de ıntrebaristandard Aceste ıntrebari vor putea creea un rdquomini-profilrdquo pentru acea persoanapentru ca sistemul sa poata recomanda cadouri

42 Cerinte non-functionale

bull Securitate sistemul nu raspunde cererilor decat atunci cand utilizatorul a fost au-tentificat ın aplicatie si are rolul necesar pentru a face acea cerere

bull Portabilitate aplicatia nu depinde de sistemul de operare pe care ruleaza De aseme-nea nu e dependenta de browserul folosit de utilizator

bull Disponibilitate sistemul ramane stabil ın fata erorilor si functioneaza la fel si dupaaparitia unei erori

bull Extensibilitate sistemul permite adaugarea sau modificarea unor componente atuncicand cerintele aplicatiei se modifica Pe langa asta e flexibila unor dezvoltari ulte-rioare

43 Cazuri de utilizare

In aceasta sectiune se vor prezenta actorii aplicatiei diagrama cazurilor de utilizaresi vor fi descrise cazurile de utilizare de baza ale fiecarui actor

Ca si actori aplicatia are patru tipuri de utilizatori

bull utilizator anonimbull clientbull producatorbull administrator

Aplicatia este conceputa ın asa fel ıncat ıntre actori este o relatie de mostenire Acestlucru presupune ca un actor are posibilitatea de a efectua tot ce putea cel dinaintea lui siceva ın plus Deci utilizatorii anonimi au cele mai putine permisiuni iar administratoriiau permisiuni totale Acest lucru se vede foarte clar si ın diagrama cazurilor de utilizaredin imaginea 41

In continuare vor fi prezentate cazurile de utilizare

1 recomandare cadouri2 adaugare produs3 modificare rol utilizator

16

Figura 41 Digrama cazurilor de utilizare

17

431 Recomandare cadouri

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unutilizator trebuie sa le urmeze pentru a primi recomandari de cadouri pentru un cunoscutsi pentru a efectua o comanda

Actorul principal

Orice utilizator al aplicatiei

Parti interesate si interese

Utilizatorul care doreste sa cumpere un cadou este interesat de a gasi un cadoupotrivit pentru cineva pe care ıl cunoaste

Producatorul care e interesat sa ısi poata vinde produseleUtilizatorul care primeste cadoul fiind interesat sa primeasca un cadou care sa i se

potriveasca si care sa ıi placa

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand utilizatorul porneste aplicatia11 Utilizatorul verifica daca are cont de Facebook si daca are urmeaza pasul 111

daca nu 22111 Utilizatorul se autentifica ın aplicatie cu ajutorul credentialelor de la

Facebook12 Utilizatorul deschide sectiunea de recomandare cadouri13 Utilizatorul completeaza formularul cu datele ce trebuie introduse pentru a primi

recomandari de cadouri pentru un prieten14 Utilizatorul poate fi satisfacut cu recomandarile primite si atunci urmeaza pasul

141 iar daca nu este atunci urmeaza cazul alternativ 23141 Utilizatorul adauga ın cosul de cumparaturi cadouri pe care doreste sa

le cumpere15 Utilizatorul cere sa ısi vada cosul de cumparaturi16 Utilizatorul poate sa se declare multumit de cosul de cumparaturi caz ın care

urmeaza pasul 161 sau poate sa aleaga cazul alternativ 24161 Utilizatorul aproba cosul de cumparaturi si accepta sa se faca comanda

17 Sistemul introduce ın baza de date comanda18 Utilizatorul va putea vedea la sectiunea comenzilor sale noua comanda si statusul

ei19 Sistemul notifica producatorul de aparitia noii comenzi110 Utilizatorul se dezautentifica din aplicatie

18

Use-Case EndUtilizatorul se va deconecta din aplicatie si o va ınchide

Figura 42 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueazaAcest flux poate aparea la orice pas211 Utilizatorul deschide sectiunea de recomandare cadouri212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca utilizatorul nu are cont de Facebook

19

Acest flux poate aparea la pasul 11221 Utilizatorul deschide pagina de Facebook222 Utilizatorul ısi face un cont pe pagina de Facebook si ısi completeaza

date despre el223 Utilizatorul revine la aplicatia de recomandare cadouri si ıncearca din

nou sa se autentifice ın aplicatie224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca utilizatorul nu e multumit de recomandariAcest flux poate aparea la pasul 14231 Utilizatorul sterge din cos cadourile pe care nu le mai doreste si revine

la pagina de recomandari232 Utilizatorul adauga alte cadouri ın cos233 Cazul de utilizare continua de la pasul 141

24 Flux-ul alternativ daca utilizatorul nu e multumit de produsele din cosul decumparaturi

Acest flux poate aparea la pasul 16241 Utilizatorul revine ınapoi la formularul cu introducerea datelor despre

beneficiarul cadoului242 Utilizatorul completeaza din nou datele243 Cazul de utilizare continua de la pasul 13

Preconditii

1 Utilizatorul trebuie sa aiba un cont de Facebook pentru a se putea autentifica ınaplicatie

2 Utilizatorul trebuie sa fie autentificat ın aplicatie pentru a putea face orice actiunedin acest caz de utilizare

3 Utilizatorul trebuie sa deschida sectiunea de recomandare cadouri pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noua comanda este salvata ın baza de date2 Comanda apare ın sectiunea de comenzi a utilizatorului ımpreuna cu statusul ei

curent3 Producatorul este notificat ca are o noua comanda

432 Adaugare produs

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unproducator trebuie sa le urmeze pentru a introduce un nou produs ın aplicatie

20

Actorul principal

Utilizatorii cu rol de producator sau cu rol de administrator

Parti interesate si interese

Producatorul care doreste sa introduca produsul nou ın aplicatie

Utilizatorii simpli care au o mai mare varietate de produse din care sa li se reco-mande cadouri

Figura 43 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo

21

Flux de evenimente

Use-Case Start

Cazul de utilizare ıncepe atunci cand producatorul porneste aplicatia

11 Producatorul verifica daca are cont de Facebook si daca are urmeaza pasul111 daca nu 22

111 Producatorul se autentifica ın aplicatie cu ajutorul credentialelor de laFacebook

12 Producatorul deschide sectiunea de adaugare produs

13 Producatorul completeaza datele necesare despre noul produs ımpreuna cu tipulde persoana si eveniment care i s-ar potrivi

14 Producatorul verifica daca este multumit de datele introduse si daca da urmeazapasul 141 daca nu 23

141 Producatorul efectueaza operatia de adaugare produs

15 Sistemul adauga un nou produs ın baza de date

16 Sistemul notifica producatorul ca noul produs a fost introdus cu succes

17 Producatorul se dezautentifica din aplicatie

Use-Case End

Producatorul se va deconecta din aplicatie si o va ınchide

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Producatorul deschide sectiunea de adaugare produs

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca producatorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Producatorul deschide pagina de Facebook

222 Producatorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Producatorul revine la aplicatia de recomandare cadouri si ıncearca dinnou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca Producatorul nu e multumit de datele introduse despreprodus

Acest flux poate aparea la pasul 14

231 Producatorul sterge datele gresite despre produs

232 Producatorul adauga alte date despre produs

233 Cazul de utilizare continua de la pasul 141

22

Preconditii

1 Producatorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Producatorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Producatorul trebuie sa aiba cont cu rol de rdquoproducatorrdquo sau rdquoadminrdquo pentru aputea face operatia aceasta

4 Producatorul trebuie sa deschida sectiunea de adaugare produs pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noul produs este salvat ın baza de date2 Produsul poate fi adaugat la recomandarile unui utilizator din acel moment

433 Modificare rol utilizator

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unadministrator trebuie sa le urmeze pentru a modifica rolul unui utilizator al aplicatiei

Actorul principal

Un utilizator al aplicatiei care are rol de administrator

Parti interesate si interese

Administratorul care doreste sa modifice rolul unui utilizatorUtilizatorul care doreste sa ısi schimbe rolul

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand administratorul porneste aplicatia11 Administratorul verifica daca are cont de Facebook si daca are urmeaza pasul

111 daca nu 22111 Administratorul se autentifica ın aplicatie cu ajutorul credentialelor de

la Facebook12 Administratorul deschide sectiunea de utilizatori13 Sistemul ıi returneaza administratorului utilizatorii care nu sunt administratori14 Administratorul modifica rolul utilizatorului din utilizator simplu ın producator

sau invers

23

15 Administratorul cere executarea modificarii

16 Sistemul executa modificarea iar ın caz de succes urmeaza pasul 161 si ın cazde eroare pasul 23

161 Sistemul notifica administratorul ca modificarea a fost efectuata cusucces

17 Utilizatorul se dezautentifica din aplicatie

Use-Case End

Administratorul se va deconecta din aplicatie si o va ınchide

Figura 44 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo

24

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Administratorul deschide sectiunea de utilizatori

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca administratorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Administratorul deschide pagina de Facebook

222 Administratorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Administratorul revine la aplicatia de recomandare cadouri si ıncearcadin nou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca sistemul returneaza o eroare la modificarea utilizatorului

Acest flux poate aparea la pasul 16

231 Sistemul returneaza un mesaj de eroare la modificarea utilizatorului

232 Aplicatia afiseaza mesajul de eroare administratorului

233 Cazul de utilizare continua de la pasul 15

Preconditii

1 Administratorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Administratorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Utilizatorul trebuie sa aiba cont cu rol de administrator pentru a putea efectuaorice actiune din acest caz de utilizare

4 Administratorul trebuie sa deschida sectiunea utilizatori pentru a putea ındeplinicerintele din cazul de utilizare

Postconditii

1 Noul rol al utilizatorului este salvat ın baza de date

2 La urmatoarea autentificare a utilizatorului acesta va observa ca interfata si maiprecis meniurile si actiunile care le poate face ıi vor fi diferite

25

44 Perspectiva tehnologica

441 Neo4j

Neo4j 1 este un sistem de gestionare a bazelor de date sub forma de graf dezvoltatde Neo4j Inc Descris de dezvoltatorii sai ca o baza de date tranzactionala compatibilacu ACID Neo4j este cea mai populara baza de date sub forma de graf dupa clasamentulDB-Engines

Baza de date Neo4j (ca si orice alta baza de date sub forma de graf) este foartediferita de o baza de date relationala cum ar fi MS Access SQL Server MySQL etcBazele de date relationale utilizeaza tabele randuri si coloane pentru stocarea datelor

Neo4j nu utilizeaza tabele randuri si coloane pentru stocarea sau prezentarea datelorci noduri si relatii

Neo4j este foarte potrivit pentru stocarea datelor care au multe relatii interconec-tate Acestea sunt de fapt aplicatiile ın care merita sa fie folosite De fapt bazele de datesub forma de graf cum este Neo4j sunt mult mai bune la tratarea datelor interconectatedecat bazele de date relationale

Acest lucru se datoreaza faptului ca modelul sub forma de graf nu necesita de obiceio schema predefinita Nu e nevoie sa se creeze structura bazei de date ınainte de a fiıncarcate datele asa cum se face la o baza de date relationala

Dar principalul motiv pentru care Neo4j este mai bun pentru datele relationalepentru acest tip de aplicatii este modul ın care permite crearea relatiilor Neo4j este con-struit ın jurul relatiilor si atunci nu este nevoie sa se configureze chei primare constrangerichei straine pentru a predetermina nodurile care pot avea o relatie si la ce date Cu Neo4jse poate adauga orice legatura ıntre orice nod ori de cate ori este nevoie

Neo4j are aceste calitati care nu se gasesc nici la celelalte baze de date NoSQLBazele de date non-relationale pe langa cele sub forma de graf sunt cele de tip coloanade tip document de tip cheie-valoare si de tip multi-model Nici unul din aceste tipuri nuau ca principala functionalitate maparea relatiilor si facilitatea interogarilor ıntr-o baza dedate cu multe relatii ıntre entitati

Generarea de recomandari personalizate este unul dintre cele mai frecvente cazuride utilizare a unei baze de date sub forma de graf Unele dintre principalele beneficii aleutilizarii grafurilor pentru a genera recomandari includ

- Performanta Lipsa indexurilor permite calcularea recomandarilor ın timp realasigurand ca recomandarea este ıntotdeauna relevanta si reflecta informatii actualizate

- Model de date Modelul de graf cu proprietati permite combinarea cu usurinta aseturilor de date din mai multe surse

Un alt avantaj al bazelor de date sub forma de graf Neo4j este faptul ca respectatoate principiile din modelul de consistenta ACID

Garantia data de principiile ACID este ca ofera un mediu sigur ın care sa functionezedatele Acronimul ACID reprezinta

1httpsneo4jcomuse-casesreal-time-recommendation-engine

26

bull Atomic Toate operatiile dintr-o tranzactie reusesc sau fiecare operatie este reluatabull Consistent La finalizarea unei tranzactii baza de date este solida din punct de

vedere structuralbull Izolat Tranzactiile nu se lupta una cu cealalta Accesul controversat la date este

moderat de baza de date astfel ıncat tranzactiile par sa se execute succesivbull Durabil Rezultatele aplicarii unei tranzactii sunt permanente chiar si ın cazul unor

defectiuniCand vine vorba de tehnologiile NoSQL cele mai multe baze de date sub forma de

graf (inclusiv Neo4j) utilizeaza un model de consistenta ACID pentru a asigura ca datelesunt stocate ın siguranta si ın mod consecvent

Am ales baza de date sub forma de graf ca optiune pentru stocarea datelor deoarecedin toate lucrarile si articolele citite a fost optiunea cea mai buna pentru un sistem derecomandare Deci acesta se mapeaza perfect pe cerintele functionale ale proiectului Sidin optiunile de baze de date sub forma de graf Noe4j a avut de departe cele mai multeavantaje ea fiind si cea mai utilizata

442 Cypher

Cypher 2 este un limbaj declarativ de interogare pentru bazele de date sub formade graf care permite interogarea si actualizarea rapida a datelor Cypher este un limbajrelativ simplu dar foarte puternic Interogarile foarte complexe ale bazei de date pot fiusor exprimate prin intermediul limbajului Cypher

Este conceput pentru a fi un limbaj de interogare uman Scopul lui principal este dea face interogarile mult mai simple si unele interogari care la bazele de date relationale nuerau posibile le face posibile Constructiile sale se bazeaza pe grafica si pe limba englezalucru care ajuta la scrierea mai intuitiva a interogarilor Este construit pentru a fi maiintuitiv pentru citire si nu neaparat pentru scriere

Cypher se bazeaza pe modelul Graph Property care ın plus fata de elementelegrafice standard ale nodurilor si muchiilor (numite relatii ın Cypher) adauga etichete siproprietati ca si concepte Nodurile pot avea zero sau mai multe etichete ın timp ce fiecarerelatie este de exact un singur tip Nodurile si relatiile au de asemenea zero sau mai multeproprietati

Chypher este limbajul de interogare folosit la bazele de date Neo4j deci este opti-unea implicita atunci cand se alege Neo4j

443 Maven

Maven 3 este un instrument de management software si de ıntelegere a proiectelorsoftware Pe baza conceptului unui model de obiect de proiect (POM) Maven poategestiona construirea raportarea si documentarea unui proiect printr-o informatie centrala

2httpsneo4jcomdevelopercypher-query-language3httpswwwjavatpointcommaven-tutorial

27

Obiectivul principal al lui Maven este acela de a permite unui dezvoltator sa ınte-leaga starea completa a efortului de dezvoltare ın cel mai scurt timp Avantajele Mavensunt

bull instalarea rapida a proiectului fara fisiere buildxml complicate doar un POMbull procesul de construire este standardizat pentru toate proiectelebull usor de ınvatat si de utilizatbull configurarea unui proiect este foarte rapidabull bine documentat

Am ales sa folosesc Maven deoarece este una din cele mai comune optiuni pentru aimporta librariile ıntr-un proiect si este si cel mai documentat Deci mereu cand esti pusın dificultate poti cauta pe internet sugestii

444 Spring Boot

Spring Boot 4 este un framework din cadrul Spring care ofera setari implicite pentruconfigurarea codului si adnotari pentru a lansa rapid proiecte noi ın executie Urmaresteabordarea rdquoConfigurarea defectiunilor vizionaterdquo pentru a evita un numar mare de linii decod pentru configuratii si pentru a ımbunatati procesul de dezvoltare

Avantajele Spring Boot sunt1 Face foarte usoara dezvoltarea de aplicatii bazate pe Spring cu Java sau Groovy2 Reduce timpul de dezvoltare si creste productivitatea3 Evita scrierea multor linii de cod adnotari si configurare XML4 Este foarte usor de integrat cu alte framework-uri din aceasi familie Spring cum ar

fi Spring JDBC Spring ORM Spring Data Spring Security etc5 Urmareste abordarea rdquoConfigurarea implicita a optiunilorrdquo pentru a reduce efortul

pentru dezvoltatori6 Ofera servere HTTP ıncorporate cum ar fi Tomcat Jetty etc pentru a dezvolta si

testa aplicatiile web foarte usor7 Ofera instrumentul CLI (Command Line Interface) pentru a dezvolta si testa apli-

catiile de tip rdquoSpring Bootrdquo (Java sau Groovy) din linia de comanda foarte usor sirapidAm ales ca optiune pentru partea de backend acest framework deoarece simplifica

foarte mult lucrurile Datorita lui un programator poate sa ısi concentreze mai tare energiape a construi proiectul din punctul de vedere al buissness-ului logic nu din punctul devedere al configurarilor necesare

445 Sencha CMD si ExtJS

Sencha CMD 5 este un instrument linie de comanda cross-platform care ofera multesarcini automate ın ciclul complet de viata al unei aplicatii ExtJS de la generarea unui

4httpswwwjavatpointcomspring-boot-tutorial5httpsdocssenchacomcmd

28

nou proiect la lansarea unei aplicatii ın productie

Sencha Cmd ofera o colectie de caracteristici puternice pentru economisirea timpu-lui care functioneaza ımpreuna cu Sencha ExtJS si Sencha Touch

Ext JS 6 este un framework pur JavaScript pentru construirea de aplicatii webinteractive cross-platform utilizand tehnici precum scripting Ajax DHTML si DOM

Avantajele framework-ului ExtJS sunt

1 Documentatia Extjs este foarte cuprinzatoare si bine ıntretinuta2 Aspectul cheie al bibliotecii EXTJS este suportul de tip cross-browser3 Framework-ul ExtJS ofera o multitudine de elemente UI Aceste elemente includ

forme casete de dialog file arbori si tabele4 Framework-ul ExtJS include suport pentru implementarile Ajax5 ExtJS ofera performante excelente Framework-ul este complet orientat spre obiecte

si este extensibil asta pentru ca este scris ın JavaScript

Pentru partea de frontend se foloseste framework-ul ExtJS deoarece are o arhitec-tura ce se mapeaza foarte bine pe proiectele de frontend si anume arhitectura bazata pecomponente Aceasta face ca ın proiect codul sa fie mult mai organizat si procesul dedezvoltare al proiectului sa fie mult mai scurt prin identificarea mai usoara a erorilor

446 Facebook API(Graph API)

Graph API 7 este modul principal de a pune date ın platforma Facebook si de aobtine date din platforma Facebook Este un API bazat pe HTTP pe care aplicatiile ılpot utiliza pentru interogarea datelor pentru a introduce postari noi pentru gestionareaanunturilor sau pentru a ıncarca fotografii

Este denumit Graph API dupa ideea unui rdquograf socialrdquo - o reprezentare sub formade graf a informatiilor de pe Facebook Este compus din

bull noduri - ın esenta obiecte individuale cum ar fi un utilizator o fotografie o paginasau un comentariu

bull muchii - conexiuni ıntre o colectie de obiecte si un singur obiect cum ar fi fotografiilede pe o pagina sau comentariile de la o fotografie

bull campuri - date despre un obiect cum ar fi ziua de nastere a unui utilizator saunumele paginii

De obicei se utilizeaza noduri pentru a obtine date despre un anumit obiect se uti-lizeaza muchii pentru a obtine colectii de obiecte legate de un singur obiect si se utilizeazacampurile pentru a obtine date despre un singur obiect sau mai multe obiecte dintr-ocolectie

Am folosit Facebook API ca solutie pentru a ımbunatati problema de rdquocold startrdquopentru ca este singurul site pe care marea majoritate a oamenilor au cont si salveazalucrurile care le plac Deci se potrivea perfect peste nevoile aplicatiei mele

6httpdocssenchacomextjs6207httpsdevelopersfacebookcomdocsgraph-api

29

447 Git

Git 8 este un sistem de control a versionarii pentru urmarirea modificarilor ın fisierelede pe computer si coordonarea activitatii asupra acestor fisiere ın randul mai multor per-soane Este utilizat ın principal pentru gestionarea codului sursa ın dezvoltarea de softwaredar poate fi folosit pentru a urmari schimbarile ın orice set de fisiere

Avantaje ale Git

bull Modelul distribuit numai ceea ce se doreste se face publicbull Branching-ul si merging-ul sunt usoarebull Fluxul de lucru este flexibilbull Integritatea datelor este asigurata Deoarece GIT utilizeaza arbori SHA1 coruperea

datelor din motive externe poate fi usor detectatabull Rapid Git este foarte rapid chiar si ın comparatie cu alte sisteme de control a

versionarii

Am folosit Git pentru a avea la proiect un back-up ın caz ca se ıntampla ceva cuproiectul salvat pe calculator

45 Arhitectura conceptuala

In figura 45 este prezentata arhitectura conceptuala a sistemului Acesta este ım-partit ın doua mari parti backend-ul si frontend-ul care comunica ıntre ele si ısi trimitinformatii

Se poate observa ca baza de date este de tip graf mai exact Neo4j si comunica cubackend-ul pentru a putea lucra cu datele stocate Backend-ul este structurat pe nivelefiecare cu un diferit rol si care trebuie parcurs pentru a procesa datele din interfata ınbaza de date Cele trei nivele sunt cel de Repository cel de Service si cel ControllerToate interogarile venite din interfata utilizator ajung ın nivelul de Controller Dupa ceinterogarile trec de securitatea sistemului ajung ın nivelul de Service Acolo se proceseazasi se afla partea de logica a aplicatiei Pentru a interactiona cu baza de date din Servicese apeleaza metodele din nivelul de Repository

In continuare backend-ul comunica prin protocolul HTTP cu interfata grafica cucare interactioneaza clientii aplicatiei Interfata este scrisa ın Ext JS si are o parte de Viewsi o parte de Controller care este cea care comunica cu backend-ul

Pentru partea de autentificare sistemul interactioneaza cu API-ul de la Facebookde la care ia dupa autentificare un access token Cu ajutorul acestuia ia dupa aceea datelenecesare pentru a putea crea un profil utilizatorului

8httpsguidesgithubcomintroductiongit-handbook

30

Figura 45 Arhitectura conceptuala

31

Capitolul 5

Proiectare de Detaliu siImplementare

In acest capitol vor fi prezentate detalii de implementare ale sistemului de recoman-dare incluzand o ımpartire al acestuia ın componentele care ıl cuprind

Obiectivul este de a prezenta arhitectura si modul de implementare al aplicatieipe baza datelor descoperite ın studiul bibliografic de la capitolul trei si cu tehnologiilehotarate la capitolul patru Pe langa asta va fi prezentata si structura bazei de date sideciziile luate pentru securitatea aplicatiei

51 Arhitectura sistemului

Din punctul de vedere al arhitecturii aplicatia se poate considera ca este alcatuitadin patru mari componente

1 API-ul de la Facebook2 Aplicatia client care reprezinta interfata grafica a aplicatiei3 Aplicatia server adica backendul aplicatiei si partea ın care se afla partea de rdquobusiness

logicrdquo4 Baza de date

Partea componenta reprezentata de API-ul de la Facebook este doar o componentacu care aplicatia se integreaza si pe care aceasta o foloseste In interactiunea cu ea interfatada o cerere de autentificare apare o fereastra de la Facebook ın care utilizatorul introducecredentialele de la API-ul de Facebook se primeste ınapoi un access token si cu ajutorulacestuia face o cerere pentru a primi datele personale ale utilizatorului pentru creeareaprofilului utilizator

Urmatoarea parte a aplicatiei este interfata utilizator frontend-ul care reprezintapartea cu care utilizatorul interactioneaza si locul unde ıi sunt afisate informatiile

Cererile din interfata ajung ın a treia parte componenta a sistemului partea deserver adica backend-ul aplicatiei Acolo toate cererile sunt citite si procesate iar raspun-

33

sul lor este trimis la interfata utilizator Aceasta este partea care reprezinta rdquogandireardquoaplicatiei Aceea este componenta care face legatura ıntre cererile utilizatorului din inter-fata si datele stocate ın baza de date

Ultima componenta a aplicatiei o reprezinta baza de date care are ca rol sa stochezedatele despre utilizatori produse si comenzi Ea este o baza de date sub forma de grafde tipul Neo4j Acolo se salveaza entitatile aplicatiei sub forma de noduri si dependenteleıntre acestea sub forma de relatii ıntre aceste noduri

Figura 51 Diagrama de rdquodeploymentrdquo

In figura 51 este prezentata diagrama de rdquodeploymentrdquo a sistemului cu cele patrucomponente ale sistemului Aplicatia client comunica cu API-ul de la Facebook prin pro-tocolul securizat HTTPS cu backend-ul prin protocolul HTTP iar backend-ul cu baza dedate prin JDBC

Aplicatia a putut fi ımpartita ın aceste componente separate deoarece fiecare dintreele poate functiona independent de celelalte comunica cu ele doar prin mesaje Din acestmotiv locul unde ruleaza acestea pot sa fie pe servere diferite In plus daca aplicatiaar fi pusa pe servere pentru utilizatori ar putea fi mai multe servere pe care ruleaza ocomponenta si prin rdquoload balancingrdquo sa se trimita cererile ımpartite ıntre ele

Cum astfel componentele nu depind foarte mult unele de altele si pot rula faraa le interesa de unde le sunt trimise cererile este arhitectura cea mai corecta deoarecedefectarea sau o posibila eroare la una din ele nu o influenteaza cu nimic pe o alta Dacatoate ar rula pe acelasi server o eventuala defectiune a acestuia ar ınsemna o defectiune aıntregului sistem Insa daca exista mai multe noduri si se afla pe servere diferite pot doartoate cererile sa fie redirectionate spre un nod care functioneaza si aplicatia sa functionezepentru clienti la fel ca ınainte

34

Un alt avantaj al arhitecturii ar fi faptul ca la o lansare viitoare catre clienti se poatelansa doar componenta la care s-au facut modificari De asemenea aplicatia ar putea aveape viitor si o componenta mobila Iar cum serverul e independent poate fi acelasi serverfolosit de o alta aplicatie client

511 Arhitectura componentei backend

Arhitectura backend-ului este si ea ımpartita ın mai multe pachete pentru o maibuna structura si pentru o cat mai mica dependenta ıntre diversele componente Astfelcuplarea este minima ıntre clase si eventualele modificari ulterioare pot fi mai usor defacut

Serverul a fost implementat ın Java cu ajutorul framework-ului Spring Boot iarmediul de dezvoltare folosit a fost Intellij IDEA

Din punctul de vedere al ımpartirii arhitectura serverului aplicatiei este structurataın patru pachete si o clasa ın afara acestora Acea clasa este rdquomainrdquo-ul aplicatiei este parteacare trebuie rulata pentru a porni serverul Din cauza ca este o aplicatie Spring Boot si nuuna String singura adnotare necesara pentru a sti ca aceea este clasa rdquoradacinardquoa aplicatieieste SpringBootApplication

Cele patru pachete ale serverului sunt1 Cel de domeniu (domain) cu clasele POJO care reprezinta entitatile din baza de

date2 Cel de rdquomagazierdquo (repositories) care este cel care face direct actiunile ın baza de date3 Cel de serviciu (services) ın care se afla partea de logica a ıntregii aplicatii4 Cel de web ın care se afla clasele de rdquocontrollerrdquo

Figura 52 Diagrama de pachete pentru backend

35

Ca si dependente nivelul de web ıl foloseste pe cel de seviciu cel de serviciu ılfoloseste pe cel de rdquomagazierdquo iar clasele din pachetul de domeniu sunt folosite ın toatecelelalte pachete

In continuare voi prezenta pe rand fiecare nivel al serverului adica fiecare pachet

Figura 53 Diagrama de clase pentru pachetul rdquodomainrdquo

36

Nivelul de domeniu (domain) este alcatuit ın primul rand din clasele care suntentitati ın baza de date Acestea sunt reprezentate de toate clasele ce stocheaza informatiidespre utilizatori si despre produse si comenzi Pe langa informatiile personale despre unutilizator de genul numelui email-ului sau data nasterii care sunt salvate ın entitateapersoana se stocheaza despre utilizator ın clase diferite informatii de genul locului undelocuieste locul unde a copilarit locurilor unde a facut scoala locului unde lucreaza sau celmai important pentru aplicatia aceasta lucrurilor care ıi plac In afara acestor informatiidespre utilizatori sunt si clase cu informatiile despre prieteni despre produse sau desprecomenzi

Din cauza faptului ca aplicatia este de tipul unei retele sociale ın care exista prieteniiıntre persoane exista dependente ıntre toate entitatile aplicatiei Acesta este si motivulpentru care am ales baza de date sub forma de graf pe care sa se mapeze toate acesteentitati sub forma de noduri si toate aceste dependente sub forma de relatii

In pachetul de domeniu se afla si trei subpachete Unul dintre ele este pentruclasele folosite pentru a trata erorile aplicatiei In interiorul acestui pachet se afla douaclase pentru eroare si o exceptie cea folosita ın cazul ın care nu se gaseste ceea ce doresteutilizatorul Pe langa asta este clasa care are ca obiect raspunsul dat de sistem ın cazulunei erori la server Aceasta contine ın interiorul sau pe langa codul erorii si detalii despreeroarea trimisa Aceasta lista de detalii e reprezentata de obiectele de tipul celei de-a treiaclase din pachetul acesta

Celelalte doua subpachete aflate ın acest nivel sunt cele care contin clasele specialede cerere sau raspuns care au ajutat la maparea acestora mai bine In multe cazuri nua fost necesara trimiterea la interfata utilizator a tuturor informatiilor stocate despre oentitate si de aceea am ales sa creez ın aceste cazuri un obiect auxiliar care sa fie folositpe post de raspuns

Figura 54 Diagrama de clase pentru pachetul rdquorepositoriesrdquo

37

Cel de-al doilea nivel al aplicatiei backend este cel de rdquomagazierdquo (repositories) carecontine doar interfete de tip rdquoRepositoryrdquo

Aceste interfete sunt cele care fac operatiile directe asupra entitatilor din baza dedate

Unele interfete doar extind interfata care are deja implementate metodele CRUDsi din acest motiv nu au metode suplimentare iar altele au si metode ın plus care au carol sa execute interogari mai complexe asupra bazei de date In acele metode se pot scrieinterogarile ın Cypher pentru a putea primi informatii despre mai multe noduri sau desprerelatiile dintre acestea sau si pentru a returna doar anumite rezultate care ındeplinescanumite conditii In felul acesta a fost implementata si cererea de oferire a recomandarilorIn acel caz sistemul returneaza produsele care au ın descriere unul din lucrurile care se aflaın lista de obiecte sau servicii primite de la Facebook ca ıi plac utilizatorului

Nivelul de rdquoRepositoryrdquo este folosit direct de cel de-al treiea nivel cel de servi-ciu Acesta este nivelul la care se executa logica aplicatiei unde se comanda modul defunctionare al ıntregii aplicatii

Figura 55 Diagrama de clase pentru pachetul rdquoservicesrdquo

Pe acest nivel ajung toate cererile din server dupa ce trec de verificarile de securitateIn acest pachet se afla si clasa de securitate care face verificarile necesare In aceasta clasaexista o metoda ce se apeleaza la prima cerere cea de salvare a datelor de la Facebookdespre utilizator si care codifica id-ul utilizatorului si ıl trimite pe raspuns ınapoi interfeteiPe langa asta ın acea clasa se afla si o metoda care verifica faptul ca id-ul codificat esteal unui utilizator cu rol corespunzator pentru a face acea cerere

In plus ın acest pachet se afla si toate celelalte clase care fac diverse operatii pedatele din baza de date si dau raspunsuri cererilor din interfata Aici se afla logica care

38

comanda actiunile asupra utilizatorilor asupra prietenilor acestora asupra produselor siasupra comenzilor

Ultima clasa a acestui nivel este cea care se ocupa de trimiterea de email-uri Incazul ın care se face o noua comanda de catre un utilizator toti producatorii produselor depe comanda sunt notificati despre produsele lor pe care le doreste utilizatorul Din serviciulde comanda se apeleaza serviciul de email pentru fiecare producator din lista celor care auproduse care se afla pe lista comenzii utilizatorului

Ultimul si cel mai aproape de interfata utilizator este nivelul de web Acolo se aflatoate clasele de rdquoControllerrdquo ale aplicatiei server

Figura 56 Diagrama de clase pentru pachetul rdquowebrdquo

Toate cererile din interfata utilizator ıncearca sa se mapeze pe rutele declarate ınclase pentru a fi procesate ın metoda corespunzatoare Toata aceasta parte este foarteusor de implementat si mai ales foarte lizibil pentru programatori datorita adnotarilor dinJava Cu ajutorul acestora trebuie doar specificat care este numele URL-ului cererii careeste tipul de obiect asteptat si daca se trimite ca rdquoquery stringrdquo pe URL sau ın interiorulcorpului cererii si tipul raspunsului Pentru fiecare cerere care nu este apelata ın parteaneautentificata a utilizatorului primul lucru care se apeleaza este metoda de securitatepentru a verifica rolul si id-ul utilizatorului Daca din punctul de vedere al securitatii totuleste ın regula se apeleaza metoda corespunzatoare din pachetul de serviciu

39

O singura clasa este diferita de restul ın pachetul de controller si aceea este clasa deeroare Acolo se mapeaza erorile aparute ın timpul cererii si se trimite ınapoi ın interfatagrafica un raspuns cu cod de eroare specific nu numai 500 Generic Application Exceptioncum ar trimite fara aceasta clasa si cu detalii despre motivul aparitiei erorii

Datorita folosirii adnotarilor din java nu a fost necesara folosirea unor rdquodesignpatternrdquo-uri ın sistem De exemplu pentru a folosi ın nivelul de web ceva din pachetulde servicii trebuia doar acel obiect sa aiba adnotarea Autowired si se ınlocuieste atatfolosirea rdquodesign patternrdquo-ului Singleton cat si a celui de Factory Acel obiect nu trebuiecreat sau initializat se face asta implicit datorita adnotarii si de asemenea este folositapeste tot aceeasi instanta

In concluzie toate cererile venite din interfata grafica ajung ın nivelul de rdquocontrollerrdquode unde sunt trimise la cel de rdquoservicerdquopentru a fi procesate si facute eventualele modificarinecesare ın baza de date ca apoi raspunsul sa fie trimis ınapoi spre aplicatia client pentruafisare

512 Arhitectura componentei frontend

A doua componenta implementata a sistemului este aplicatia client frontend-ulAceasta a fost scrisa ın Java Script cu ajutorul framework-ului Ext JS compilarea

se face cu ajutorul Sencha CMD si mediul de implementare a fost IntelliJ IdeaCu ajutorul framework-ului Ext JS se scriu componente care apoi se initializeaza

unele pe altele Aplicatia porneste cu fisierul Applicationjs care este un fel de rdquomainrdquopentru aplicatie Aceasta initializeaza alte componente care la randul lor includ altecomponente si tot asa Structura poate fi foarte usor comparata cu una arborescenta dinacest punct de vedere

Framework-ul a fost creat sa functioneze ın felul acesta pentru ca scopul componen-telor este sa fie scrise ın asa fel ıncat sa poata pe viitor sa fie utilizate din nou Una dindorintele majore ın programare tot timpul este de a se scrie cod ıntr-o maniera ın care safie cat mai reutilizabil Iar framework-ul Ext JS exact asta ıncearca

Arhitectura aplicatiei client se gaseste ın figura 57 si este la randul ei ımpartita ınpachete ca si cea de server Similar cu pachetul de rdquodomainrdquo de la aplicatia de backendeste pachetul rdquomodelrdquo al interfetei utilizator Aici sunt rdquoclaserdquo care sunt simple POJO sicare sunt apoi folosite ın nivelele urmatoare Sunt mai putine decat clasele din rdquostorerdquodeoarece daca raspunsul de la server nu trebuie procesat nu sunt necesare se pot mapadirect obiectele din rdquostorerdquo pe componentele interfetei utilizator

Urmatorul nivel este cel pe care se afla clasele de rdquostorerdquo Acestea sunt cele careexecuta cererea spre backend si face legatura ıntre client si server Daca are o clasa derdquomodelrdquodeclarata atunci populeaza acel obiect cu datele primite de la server iar ın cazul ıncare nu este declarat un model se trimit datele exact asa cum s-au primit la nivelul urmatorde rdquoviewrdquo Acest nivel seamana din punct de vedere al functiei cu cel de rdquorepositoryrdquo de laaplicatia server deoarece ambele au rol de legatura Aceea facea legatura ıntre aplicatiesi baza de date si aceasta face legatura ıntre aplicatia client si aplicatia server

40

Figura 57 Diagrama de clase pentru aplicatia web

Cel de-al treilea pachet al aplicatiei este cel de rdquoviewrdquo In acest pachet se afla claselecare alcatuiesc partea vizuala a aplicatiei La randul ei si aceasta este alcatuita tot dincomponente Aplicatia deschide ın primul rand Main-ul care determina aparitia paginii deHome si afisarea ın meniu a optiunilor posibile ın functie de autentificare si rol Clasele deaici se executa de fapt la deschiderea aplicatiei fiind rdquosingle page applicationrdquo si tot atuncise ıncarca pe pagina componentele Ca si arhitectura a pachetului acesta este ımpartit larandul sau ın subpachete Pentru o mai buna organizare exista patru subpachete cateunul pentru fiecare tip de utilizator In felul acesta toate rdquoviewrdquo-urile care sunt specificeunui utilizator cu un anumit rol se afla ın acelasi subpachet

Cele patru subpachete existente ın pachetul rdquoviewrdquo sunt

1 Pachetul rdquomainrdquo care cuprinde rdquoviewrdquo-urile care se afla ın partea neautentificata aaplicatiei

2 Pachetul rdquoclientrdquo continand rdquoviewrdquo-urile pe care le poate accesa un utilizator simplu3 Pachetul rdquoproducerrdquo specific actiunilor unui utilizator care are rol de producator4 Pachetul rdquoadminrdquo care contine toate rdquoviewrdquo-urile care ıi apar unui utilizator care este

administrator al aplicatiei

Ultimul pachet si nivel al aplicatiei client este cel de rdquocontrollerrdquo In acest pachet

41

se afla clasele care fac actiunile din interfata grafica In timp ce pachetul rdquoviewrdquo continedoar partea grafica a aplicatiei adica modul ın care aceasta trebuie sa arate pachetulrdquocontrollerrdquo contine actiunea acestora modul ın care aplicatia trebuie sa functioneze

Ca si arhitectura si acest pachet a fost ımpartit la randul lui tot ın cele patrusubpachete ca si pachetul rdquoviewrdquo adica rdquomainrdquo rdquoclientrdquo rdquoproducerrdquo si rdquoadminrdquo In pluspentru a fi usor de gasit ce clasa de rdquocontrollerrdquo apartine carui rdquoviewrdquo am ales ca cele douasa aiba acelasi nume In felul acesta daca se doreste sa se gaseasca actiunile unui rdquoviewrdquose poate cauta dupa o clasa cu acelasi nume ın pachetul rdquocontrollerrdquo Numarul claselor dinacest pachet este mai mic decat cel al claselor din rdquoviewrdquo deoarece nu toate paginile dininterfata au actiuni suplimentare Daca singura actiune este ıncarcarea paginii cu date dela server adica doar o actiune simpla de GET datele se ıncarca cu ajutorul rdquostorerdquo-ului laıncarcarea paginii si nu este necesara nici o actiune suplimentara Paginile pe care se potface si actiuni de alt gen sau se deschid noi ferestre au nevoie de clase de rdquocontrollerrdquo

In concluzie arhitectura aplicatiei client este una bazata pe componente care ıncearcasa foloseasca cat mai multe clase reutilizabile

52 Structura bazei de date

Baza de date a aplicatiei este de tip graf de tipul Neo4j Pentru utilizare exista unprogram numit Neo4j ce trebuie instalat Acest program are si o interfata grafica ın carese pot vizualiza datele sub forma grafica si ın care se pot scrie de asemenea si interogariın limbajul acestei baze de date adica Cypher

Fiind o baza de date sub forma de graf datele stocate sunt salvate ın structurade date sub forma de noduri si relatii Entitatile din pachetul de domeniu din aplicatiabackend se gasesc ın baza de date sub forma unor noduri iar dependentele dintre nodurise mapeaza ın baza de date sub forma unor relatii Un element diferit fata de alte tipuride baze de date este faptul ca pe relatiile dintre noduri se pot salva atribute cum este ınaplicatie cazul pentru prieteniile dintre persoane In cazul acestora pe relatia dintre nodurise salveaza daca prietenia a fost sau nu acceptata

Pentru fiecare clasa POJO din aplicatia server clasa ce are doar metodele get si setsi se afla ın pachetul domain exista cate un tip de nod diferit ın baza de date cum estesi marcat ın diferite culori ın figura 58 Fiecare tip de nod are atributele proprii care potlua valori sau pot fi nule Iar fiecare obiect din Java reprezinta un nod diferit ın baza dedate

Neo4j a fost cea mai buna optiune pentru baza de date pentru ca aplicatia poate ficonsiderata o retea sociala Acest lucru se datoreaza relatiilor de prietenie dintre persoanesi a multiplelor relatii ıntre noduri Toate nodurile se afla ın acceasi componenta conexadeci nu exista noduri izolate care sa nu aiba nici o legatura cu nici un alt nod

Datorita acestei structuri a bazei de date este posibila implementarea cererii derecomandare ca o simpla interogare ın baza de date aceasta fiind cea mai simpla metodade implementare a unui sistem de genul acesta una mult mai complexa ar fi fost un

42

algoritm de ınvatare care sa ınvete tipare ale utilizatorilor si sa recomande cadouri pe bazaacestor informatii

Figura 58 Diagrama bazei de date pentru doi utilizatori

Un alt avantaj al acestui tip de baza de date este faptul ca datele nu sunt duplicateın baza de date Spre exemplu daca mai multi utilizatori au ca locatie acelasi oras nu secreaza cate un nod cu acea locatie de mai multe ori ci acel unic nod va avea cate o relatiecu fiecare utilizator care are ca locatie acel oras

In concluzie structura bazei de date a fost aleasa ın acest fel datorita tipului apli-catiei adica asemanatoare cu o retea sociala si datorita implementarii simple a unui sistemde recomandare pe o asemenea baza de date

53 Fluxul pentru diferite operatii

Pentru aplicatie cele mai importante cazuri de utilizare sunt salvarea informati-ilor despre utilizator primite de la Facebook pentru crearea unui profil si recomandareacadourilor pentru un utilizator al aplicatiei Din aceasta cauza cele doua cazuri de utilizarevor fi prezentate mai ın detaliu ın continuare

43

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 6: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

Capitolul 1

Introducere

In acest capitol vor fi prezentate notiuni despre contextul proiectului motivatiade la care a venit ideea proiectului si de asemenea se va prezenta continutul lucrarii pecapitole

11 Contextul proiectului

In prezent cele mai mari site-uri ale lumii din punct de vedere al numarului de uti-lizatori au ınceput ın ultimii ani sa aiba o sectiune de recomandari Acestea pot reprezentaproduse pe site-urile de comert online filme pe site-urile de vizionare de filme carti pesite-urile sau aplicatiile pentru citit sau persoane pentru site-urile de socializare

Popularitatea sistemelor de recomandare a crescut foarte mult ın ultimii ani datoritabeneficiilor multiple pe care le aduc Recomandarile aduc avantaje atat celui care vrea savanda ceva cat si celui care vrea sa cumpere deoarece unuia ıi face vanzari mai mariın timp ce celuilalt ıi da sugestii de lucruri de care ar putea avea nevoie si a uitat Iarpopularitatea lor creste tot mai tare cu cat sunt mai utile recomandarile Aceste sistemede recomandare trebuie de fapt sa faca o rdquoprezicererdquo asupra lucrurilor care i-ar placea unuiutilizator

O problema cu care multi oameni se confrunta este cumparatul cadourilor In multesituatii desi acel om ne este foarte apropiat si ıl cunoastem foarte bine tot ne este foartegreu sa gasim un cadou potrivit pentru acesta De aceea o aplicatie care sa recomandecadouri care sa creeze recomandari specializate pentru o anumita persoana ar avea o uti-litate foarte mare pentru oricine

12 Motivatia

Motivatia aplicatiei o reprezinta de fapt lipsa unei aplicatii similare pe piata panaın momentul documentarii si ın acelasi timp utilitatea uneia

1

Toti oamenii se confrunta mai devreme sau mai tarziu cu problema gasirii cadouluiperfect pentru cineva din viata lor In multe cazuri aceasta problema poate fi o adevaratacatastrofa ce consuma energie timp si rabdare pentru cel care trebuie sa cumpere cadoulDe accea scopul aplicatiei este de a usura viata oamenilor prin oferirea unor variante decadouri specifice pentru exact acea persoana

Din toata cercetarea facuta pe aceasta tema nu am gasit nici o aplicatie de acestgen care sa ofere recomandari specializate pentru o anumita persoana

13 Continutul lucrarii

In aceasta sectiune vor fi prezentate capitolele acestui document si vor fi de asemeneasi descrise sumar ca si continut

bull Introducere (Capitolul 1) - ın acest capitol se va prezenta de fapt contextul proiec-tului motivatia de la care s-a pornit cand a fost ınceput si de asemenea e cuprinsaın ea si aceasta descriere a continutului pe capitole

bull Obiectivele Proiectului (Capitolul 2) - ın acest al doilea capitol sunt prezentate obiec-tivele proiectului atat obiectivul principal cat si obiectivele secundare ce doresc a fiındeplinite la final

bull Studiu Bibliografic (Capitolul 3) - cel de-al treilea capitol este reprezentat de studiulbibliografic unde vor fi prezentate diverse concepte teoretice de la care s-a pornit cuproiectul lucrari si articole prezentate de altii pe teme ce au legatura cu aplicatia side asemenea solutiile existente care se apropie de aceasta lucrare

bull Analiza si Fundamentare Teoretica (Capitolul 4) - ın capitolul de analiza si fun-damentare teoretica vor fi prezentate cerintele de la care porneste proiectul atatcele functionale cat si cele non-functionale prezentarea cazurilor de utilizare prin-cipale ale proiectului si de asemenea o analiza asupra tehnologiilor propuse pentruacest proiect De asemenea va contine si o arhitectura conceptuala a sistemului lamomentul de ıncepere al acestuia

bull Proiectare de Detaliu si Implementare (Capitolul 5) - cel de-al cincilea capitol pre-zinta modul de implementare al proiectului Acest lucru presupune schema arhi-tecturii proiectului si de asemenea si o descriere a fluxurilor de baza ale aplicatieiIn plus este descrisa structura dupa care s-a construit baza de date sub forma degraf din ce noduri si ce relatii In ultimul rand este descris modul ın care a fostimplementata securitatea sistemului

bull Testare si Validare (Capitolul 6) - acest capitol descrie modurile ın care aplicatia afost testata atat pe componente cat si validarea finala pe utilizatori reali

bull Manual de Instalare si Utilizare (Capitolul 7) - penultimul capitol prezinta tehnologi-ile ce trebuie instalate pentru a face sistemul sa functioneze De asemenea se vaprezenta modul ın care sistemul poate fi utilizat

bull Concluzii (Capitolul 8) - ın ultimul capitol vor fi analizate rezultatele obtinute si sevor descrie noi extensii ce pot fi implementate pentru a ımbunatati sistemul

2

Capitolul 2

Obiectivele Proiectului

In acest capitol se va prezenta obiectivul principal al lucrarii cel de la care a pornittoata ideea proiectului Apoi ın continuare se vor prezenta obiectivele secundare alepoiectului care au dus la modul ın care a fost acesta implementat

21 Obiectivul principal

Scopul principal al acestui proiect consta ın construirea unui sistem de recomandarecare sa ajute utilizatorii sa poata sa cumpere cadouri pentru cunoscuti ıntr-un mod multmai eficient Sistemul va fi o aplicatie web care va avea utilizatori ce se vor putea auten-tifica si dupa stabilirea unui profil propriu cunoscutii rudele sau prietenii vor putea saprimeasca sugestii de cadouri exact pentru acea persoana Pentru cadouri vor fi introdusede catre producatori diverse obiecte si servicii In felul acesta tot procesul de cumparare alunui cadou devine mult mai usor pentru persoana care ıl cumpara si cadourile devin multmai utile pentru cei care le primesc

22 Obiective specifice

Obiectivele specifice care se va urmari sa fie atinse ın cadrul acestui proiect sunturmatoarele

bull Studierea mai multor tipuri de baze de date de la cele relationale la cele No SQLsi analizarea lor pentru a stabili care este cea mai potrivita pentru un sistem derecomandare de acest gen

bull Studierea despre diferitele tipuri de sisteme de recomandare de la cele de bazaadica filtrare bazata pe continut si filtrare colaborativa la combinatia dintre eleadica sistem de recomandare hibrid pana la cele mai putin folosite adica pe bazademografica bazata pe cunostinte sau bazata pe utilitate Iar dupa aceea alegereacelei mai potrivite metode pentru un sistem de recomandare cadouri

3

bull Intelegerea conceptului de rdquocold startrdquo la sisteme de recomandare ca problema a aces-tora si gasirea unor solutii care ar putea sa ınlature sau cel putin sa ımbunatateascaaceasta problema

bull Documentarea despre diferite metode de construire a unui profil al utilizatorului sidin aceste metode alegerea celei mai potrivite din punct de vedere al timpului care ıitrebuie sistemului pana cand rdquoınvatardquo suficiente lucruri despre utilizator ıncat poateface recomandari corecte

bull Pe baza tuturor cunostintelor acumulate ın urma studiului construirea unei aplicatiiweb ca demonstratie a alegerilor facute

4

Capitolul 3

Studiu Bibliografic

Obiectivul acestui capitol este prezentarea conceptelor teoretice la baza carora staacest proiect Vor fi prezentate concepte precum modul de functionare al sistemelor derecomandare tipurile de sisteme de recomandare abordarea celor de la Netflix asupradomeniului Neo4j ca solutie pentru un sistem de recomandare utilizarea unei retele socialepentru crearea profilului unui utilizator si reteaua Facebook ca exemplu de astfel de reteaiar ın final solutii similare

31 Modul de functionare al sistemelor de recoman-

dare

Un sistem de recomandare este o tehnologie implementata ın situatiile ın care ar-ticole (produse filme evenimente) sunt recomandate utilizatorilor (clienti vizitatori uti-lizatori de aplicatii cititori) sau invers Numarul mare al utilizatorilor acestor aplicatiieste ceea ce face ca problema sa fie dificila si costisitoare de rezolvat

Motoarele de recomandare sunt ın esenta instrumente de filtrare a datelor careutilizeaza algoritmi si date pentru a recomanda cele mai relevante elemente unui anumitutilizator [9] Sau ın termeni simpli nu sunt altceva decat o forma automatizata a unuirdquovanzator ıntr-un magazin de hainerdquo Lui i se cere un produs si el nu numai ca arata acelprodus dar si altele asemanatoare pe care le-am putea cumpara

Un sistem de recomandare are trei faze de baza dupa cum este prezentat si ındiagrama 31 pe baza carora functioneaza Prima faza este cea de colectare a datelorSistemele de recomandare se bazeaza mereu pe date anterioare deci faza de ınceput ıncare acumuleaza informatii este esentiala si de multe ori o problema foarte grea de rezolvatAceasta problema se mai numeste si rdquocold startrdquo Problema este reprezentata de faptul caun utilizator nou al unei aplicatii nu are informatii stocate despre el sau despre activitatealui fiind nou Iar sistemele de recomandare nu pot sa stie de fapt ce ıi place lui decat dupace utilizeaza o perioada aplicatia De multe ori solutia adusa de oameni pentru aceastaproblema este un chestionar de ıntrebari adresat utilizatorului care sa ıl poata face sa se

5

Figura 31 Fazele unui sistem de recomandare1

ıncadreze ıntr-un tipDe fapt din aceasta cauza sistemele de recomandare devin tot mai bune si mai

exacte cu cat sunt folosite mai mult deoarece sunt stocate tot mai multe informatii despreutilizator

Cea de-a doua faza a unui sistem de recomandare este cea de ınvatare Acoloaplicatia trebuie sa stocheze datele despre utilizator si trebuie la urmatoarea recomandaresa se bazeze pe cele dinainte si ın functie de ele sa o faca Acest lucru poate fi realizat fiedirect pe baza setului de date colectat ın faza de colectare a informatiilor care ar puteafi bazat pe memorie sau bazat pe model fie prin activitatile utilizatorului care au fostobservate

A treia faza este cea de recomandare propriu-zisa ın care doar utilizatorul facecererea de recomandari si acestea ıi sunt trimise

32 Tipuri de sisteme de recomandare

In continuare ca studiu bibliografic au fost tipurile sistemelor de recomandare [11]Ca si teorie sunt mai mute tipuri de sisteme de recomandare si o reprezentare graficaa acestor tipuri este prezentata ın figura 32 Cea mai de baza ımpartire este ın douacategorii recomandari bazate pe continut si recomandari bazate pe filtrare colaborativa

Filtrarea bazata pe continut creeaza un profil de utilizator bazat pe o metoda deınvatare pentru a determina elementele pe care un anumit utilizator le-ar dori De exemplusite-ul poate utiliza un sistem de cuvinte cheie care sugereaza articole cu cuvinte cheiesimilare ın descrierea unui element pe care utilizatorul l-a cumparat anterior

Recomandarile bazate pe filtrare colaborativa se inspira din similaritatile cu ceilaltiutilizatori Gasesc utilizatori asemanantori cu cel pentru care se face recomandarea pebaza actiunilor din trecut despre aceia si se recomanda lucruri care le plac celorlalti Acesttip de recomandare se potriveste perfect cu recomandarile de filme Acolo un om cu gusturi

1httpswwwsciencedirectcomsciencearticlepiiS1110866515000341

6

asemanatoare va putea sa recomande cel mai bine un alt film unui prieten Cea mai simplaimplementare pentru asa ceva este sub forma unei matrici cu spatii goale ın locurile undenu se cunoaste informatie

Pe langa aceste tipuri de recomandari mai sunt si altele dar care nu sunt folosite lafel de des

Figura 32 Tipurile sistemelor de recomandare2

In filtrarea bazata pe criterii demografice se fac recomandari catre utilizatori pebaza informatiilor lor demografice Sistemul va sugera elemente care au fost selectate dealti utilizatori care se ıncadreaza ın acelasi profil demografic

Filtrarea bazata pe utilitate se bazeaza pe utilitatea pe care utilizatorul o va obtinede la produs Poate include lucruri precum fiabilitatea si disponibilitatea vanzatoruluipentru a se asigura ca recomanda produse usor de obtinut de catre utilizator

Filtrarea bazata pe cunostinte recomanda selectii pe baza preferintelor si modelelorde cumparare cunoscute despre utilizator Intrucat sistemul va sti ce a cumparat con-sumatorul ın trecut acesta poate face recomandari ın functie de ceea ce ar putea satisfaceaceste nevoi ın viitor

Filtrarea hibrida combina doua sau mai multe tehnici de recomandare diferite pentrua crea un sistem de recomandare mai detaliat

2httpswwwsciencedirectcomsciencearticlepiiS1110866515000341f0005

7

33 Abordarea Netflix

Foarte multa cercetare ın domeniul sistemelor de recomandare a fost influentata decei de la Netflix

Figura 33 Tipuri de recomandari oferite de Netflix3

Netflix este un serviciu de streaming care permite clientilor sa vizioneze o gamalarga de emisiuni TV filme documentare si multe altele pe mii de dispozitive conectatela internet

In figura 33 este o imagine a site-ului cu tipurile diferite de recomandari pe careacestia le ofera

Cheia succesului Netflix consta ın capacitatea lor de a anticipa ceea ce le placeutilizatorilor motiv pentru care fiecare doua din trei ore de vizionare ın Netflix provin dinrecomandari In trecut Netflix au folosit informatii despre sex si varsta pentru a determinace filme sa recomande Acum ei folosesc de exemplu ceea ce utilizatorul a urmaritınainte a cautat cat timp petrece utilizatorul vizionand filme si tipul de dispozitiv utilizatPredictiile din motorul de recomandare Netflix nu se bazeaza doar pe comportamentulutilizatorului ci si pe context (cum ar fi timpul zilei) popularitatea titlurilor noutateadiversitatea si cat de recent a fost scos filmul sunt factori importanti [7]

Premiul Netflix a fost o competitie lansata ın 2006 pentru cel mai bun algoritm defiltrare colaborativa pentru a prezice ratingurile utilizatorilor pentru filme pe baza eva-luarilor anterioare fara alte informatii despre utilizatori sau filme adica fara ca utilizatoriisau filmele sa fie identificate stiind doar numerele atribuite pentru concurs ale acestoraPremiul pentru castigator consta ın 1 milion de dolari Peste 2000 de echipe au depusseturile de predictie si peste 650 de echipe au depasit precizia algoritmului actual al Netflix

3httpstechblogglomexcompostrecommender-systemshtml

8

cu mai mult de 5 [11] Castigatorul a fost echipa BellKors Pragmatic Chaos care adepasit algoritmul Netflix cu 1006

Cei de la Netflix au fost extrem de multumiti de rezultatul obtinut si nu numai caau ıncorporat acel algoritm ın algoritmul lor existent de recomandare dar au initiat si o adoua editie a competitiei

34 Sisteme de recomandare cu Neo4j

Urmatoarea parte a studiului bibliografic s-a axat pe bazele de date de tip grafGraphDB si mai exact Neo4j ın comparatie cu celelalte tipuri de baze de date adica celerelationale In cartea [10] sunt prezentate aceste concepte din punct de vedere teoretic siın lucrarile de master [5] si [1] este prezentata aceasta comparatie ıntre diferite tipuri debaze de date pe o aplicatie reala

Limbajul care se foloseste ın bazele de date Neo4j este Cypher Cu ajutorul acestuiase mapeaza query-urile pe noduri si relatii Din punct de vedere teoretic diferenta ıntrebazele de date relationale si cele sub forma de graf consta ın modul ın care sunt stocatedatele In timp ce ın bazele de date relationale datele sunt stocate ın structuri de datesub forma de tabel ın cele sub forma de graf datele sunt stocate ın noduri Coloaneletabelelor din bazele de date relationale se mapeaza ın bazele de date sub forma de graf peproprietati Pentru a face o legatura ıntre tabelele relationale se foloseau rdquochei strainerdquo pecand la Neo4j exista relatii ıntre noduri Din cauza faptului ca bazele de date sub formade graf s-au inspirat din cele relationale exista o asemanare ıntre ele si toate lucrurile auun corespondent ın cealalta

In lucrarea [12] sunt prezentate avantajele folosirii unei baze de date sub forma degraf cand se lucreaza cu retele sociale La aplicatiile de tipul retelelor soriale relatiile dintrenoduri sunt partea cea mai importanta iar pentru acestea o baza de date sub forma degraf se mapeaza cel mai bine Un avantaj al bazelor de date sub forma de graf din punctulde vedere al programatorilor cu acestea se lucreaza foarte similar ca si cu cele relationaledupa cum se prezinta si ın [4]

Un exemplu de sistem de recomandare construit cu Neo4j este [11] In acesta lucrareeste prezentata construirea unui sistem de recomandare care sa recomande prieteni ıntr-oaplicatie de socializare In lucrare sunt patru abordari pentru construirea unui astfel desistem Prima consta ın recomandarea unor prieteni cu care utilizatorul ar avea prieteniın comun cea de-a doua sunt persoane cu care utilizatorul se afla ın acelasi grup cea de-atreia sunt utilizatori care au mers la aceleasi evenimente ca si utilizatorul si ultima abordareconsta ın recomandarea persoanelor cu cei mai multi prieteni In urma mai multor teste sistatistici s-a decis ca abordarea cea mai buna este prima cea cu prietenii ın comun Toateaceste patru metode de oferire a recomandarilor se mapeaza foarte usor pe o baza de datesub forma de graf si reprezinta doar cate un query destul de simplu ın Cypher O astfelde aplicatie s-ar fi mapat mult mai greu pe o baza de date relationala datorita multiplelorrelatii si legaturi

9

Un alt exemplu de aplicatie unde s-a ales baza de date Neo4j a fost [2] Aicipentru articolele politice pe care sistemul le recomanda se creeaza o combinatie ıntrerecomandarile obtinute din articolele care le plac oamenilor cu care utilizatorul vorbestemult si lucruri care le plac utilizatorilor cu care acesta are lucruri ın comun Si ın acest cazexista o multime de relatii ıntre utilizatori si articole si cel mai usor se obtin recomandarilecu o aplicatie sub forma de graf motiv pentru care au si ales Neo4j

35 Utilizarea retelei Facebook pentru crearea unui

profil utilizatorilor

In continuare ca studiu bibliografic au urmat sisteme asemanatoare cu sistemuldorit si modul ın care acestia au reusit sa creeze profilul utilizatorului [13] Problema ceamai mare este rdquocold startrdquo-ul Adica atunci cand un utilizator este nou ın aplicatie nuse stiu suficiente informatii despre el pentru a putea sa i se ofere recomandari Dupa ceacesta foloseste aplicatia o perioada de timp ar putea sa i se ofere recomandari bazate peactivitatea sa anterioara ın aplicatie Din acest motiv la ınceput recomandarile pot lasade dorit si pot fi nu tocmai corecte

O metoda ın care se poate rezolva aceasta problema se afla ın lucrarea de master[7] ın care la utilizatorii noi se recomanda restaurante pe baza pozitiei lor geograficeAtunci cand doresti sa mergi la un restaurant este foarte importanta distanta la care seafla acel restaurant Din aceasta cauza pentru un utilizator caruia sistemul nu stie ce sa ıirecomande ıi recomanda restaurante la ıntamplare dintre cele care se afla cel mai aproapede el In felul acesta dupa ce merge la unul din restaurante si da feedback sistemul poatedupa aceea sa ıi faca recomandari

In lucrarea [8] recomandarile pentru votare au doua abordari La prima i se reco-manda lucrurile care le-a recomandat persoana cu scorul cel mai bun Si cea de-a douaabordare consta ıntr-un set de ıntrebari la care un utilizator nou trebuie sa raspunda candısi face contul

In acest caz cea mai buna metoda ın care se poate rezolva aceasta problema parea fi sa se ia informatiile de la API-ul de la Facebook Facebook este o aplicatie extremde utilizata si care ofera ca informatii publice exact ce ar fi necesar pentru a recomandacadouri de exemplu data nasterii sau lucruri care ıi plac unui utilizator Cu ajutorulacestora se poate calcula varsta utilizatorului poate sa fie ıncadrat ıntr-un profil si sepoate afla stilul de lucruri care ıi plac

Toate aceste informatii publice de la Facebook pot fi salvate si pot fi utilizate maitarziu pentru a se creea recomandari pe baza lor In articolul [3] despre valoarea datelor dela Facebook se prezinta ca si caz de utilizare pentru un site de comert online Aceasta estefoarte asemanatoare din punct de vedere al recomandarilor cu aplicatia de recomandarecadouri Diferenta dintre cele doua este ca ın cazul uneia trebuie sa recomande produsepentru utilizatorul aplicatiei si cealalta pentru un prieten al acestuia

10

Din punct de vedere al aplicabilitatii Facebook este o retea sociala deci datele salese mapeaza foarte bine pe o baza de date de tip graf cum este prezentat si ın lucrarea [6]

Asadar daca la crearea contului utilizatorului ın aplicatie se iau si informatiile pu-blice despre utilizator se vor putea oferi recomandari mult mai corecte ınca de la ınceput

36 Solutii similare

Ca solutii similare pe piata online nu exista aplicatii folosite pentru a recomandacadouri personalizate specific pentru o persoana anume Multe site-uri considera ca eirecomanda cadouri ınsa acestea reprezinta de fapt o filtrare mai avansata a rezultatelorproduselor de pe site-ul lor

Un site care ofera cadouri personalizate este Giftly 4 prezentat ın figura 34 careofera o modalitate usoara de a oferi cadouri Acest site nu are parte de recomandari cia gasit un mod de a face oamenii sa primeasca mereu ceea ce ısi doresc Cel care oferacadoul nu ıl cumpara ci doar ıl sugereaza dar decizia finala asupra cadoului este la celcare ıl primeste Modul ın care functioneaza este

1 Se ofera un rdquocard cadourdquo prin email sms printat sau ca o felicitare de ınaltacalitate

2 Destinatarul alege cel mai convenabil mod de a primi cadoul rdquocard cadourdquo ınposta sau direct ca bani ın contul bancar sau contul PayPal

3 De fapt utilizatorul ıi sugereaza destinatarului ce ar vrea el sa ofere ca si cadouiar destinatarul trimite ca mesaj modul ın care a cheltuit banii

Figura 34 Site web Giftly

4httpswwwgiftlycom

11

Ofera de asemenea si sugestii de cadouri Un om cand navigheaza pe site poate sase uite la cadouri ın categoriile Popular Holidays Birthdays Drinks Eats Meals BackTo School Get Fresh Health Fitness Going Out Getaway Top Shelf For The HipsterClothes For Her Clothes For Him Congratulations Expecting Activities si Custom

Un alt site cu cadouri este Etsy 5 cu imaginea 35 care arata site-ul Etsy este o piataglobala pentru bunuri unice si creative Pe pietele lor milioane de oameni din ıntreagalume se conecteaza atat online cat si offline pentru a face vinde si cumpara bunuri uniceEtsy ofera de asemenea o gama larga de servicii si instrumente de vanzari care ajutaıntreprinzatorii creativi sa ınceapa sa gestioneze si sa-si masoare afacerile Misiunea loreste sa pastreze comertul uman Deci de fapt acest site sprijina mai mult producatoriinu comerciantii De asemenea este mai mult axat pe bunuri unice si lucruri rdquounicerdquo Ca sicelelalte site-uri de genul acesta are o modalitate de a cauta lucrurile mai inteligent maispecializat pe ceea ce te intereseaza Categoriile de cautare sunt Jewelry AccessoriesClothing Shoes Home Living Wedding Party Toys Entertainment Art CollectablesCraft Supplies Tools si Vintage

Figura 35 Site web Etsy

Cel de-al treilea site care ofera servicii asemanatoare este Gifts 6 prezentat ın figura36 Acesta se focuseaza pe cadouri pentru diverse ocazii cum ar fi zilele de nastereCraciun diverse aniversari si alte evenimente la care se cumpara cadouri Pentru parteade recomandare se ofera posibilitatea de a efectua un test despre acel om caruia dorestisa ıi cumperi cadoul care are ca scop ıncadrarea omului respectiv ıntr-un profil si apoi

5httpswwwetsycom6httpswwwgiftscom

12

alegerea unor sugestii ce s-ar potrivi unei persoane cu acel tip de personalitate O primaıntrebare se refera la genul persoanei si ıntrebarea este daca cadoul este pentru o femeieun barbat o fetita sau un baietel Cea de-a doua ıntrebare se refera la marja de varsta ıncare se ıncadreaza acel om de exemplu pentru barbat optiunile sunt adolescent barbat ınjur de 30 de ani sau barbat ın varsta Cea de-a treia ıntrebare se refera la personalitateaomului Mai exact se fac sugestii pentru tipuri de lucruri ce i-ar putea placea unui omcare are trasaturile descrise ın primele doua ıntrebari De exemplu la barbati ın jur de30 de ani optiunile sunt ıi place sportul ıi place natura e aventurier ıi place golful ıiplace sa faca gratare sa serveasca bauturi sa gateasca sa animeze ıi place sa se ımbraceelegant este sef e entuziasmat de bere sau e un fan al sporturilor Iar ın final ın functiede raspunsurile date la ıntrebari se afiseaza sugestii de cadouri care se potrivesc oamenilorcu acel tip de personalitate

Figura 36 Site web Gifts

Nordstrom 7 care este prezentat ın imaginea 37 are o abordare similara avand pesite o multime de optiuni de filtrare a cadourilor Se pot cauta ın acest site cadouri pentrubebelusi cadouri de Craciun bijuterii pentru femei optiunile sunt multiple Acest lucruofera utilizatorilor sugestii pentru a le fi mai usor sa ıncadreze aceasta persoana ıntr-unanumit tip Iar dupa alegerea categoriei toate sugestiile de cadouri oferite de catre sitese ıncadreaza ın acel tip Ca avantaj al acestui site este ca ei ofera si serviciul de livrareal cadoului dupa cumparare oriunde ın lume Un dezavantaj al multor site-uri de genulacesta este ca ofera livrare doar ın zona sa apropiata

7httpsshopnordstromcomcgifts

13

Figura 37 Site web Nordstrom

14

Capitolul 4

Analiza si Fundamentare Teoretica

In acest capitol vor fi prezentate cerintele functionale ale lucrarii ımpreuna cucerintele non-functionale ale acesteia De asemenea va fi prezentata diagrama cazurilor deutilizare si vor fi prezentate mai ın detaliu cazurile de utilizare principale ale aplicatiei Incontinuare se va prezenta perspectiva tehnologica a proiectului si se vor explica deciziiletehnologice luate In final se va prezenta diagrama conceptuala a aplicatiei

41 Cerinte functionale

bull Posibilitatea autentificarii ın aplicatie si crearii unui profil propriu din care se potutiliza informatii si cu ajutorul caruia utilizatorul poate fi ıncadrat ıntr-un profil

bull Utilizatorii pot crea prietenii ca ıntr-o retea de socializare pentru a putea afla infor-matii despre prieteni si pentru a li se putea recomanda cadouri pentru acestia

bull Cu ajutorul informatiilor de la Facebook un utilizator poate fi notificat dinainte caurmeaza ziua de nastere a unuia din prietenii lui si sa i se ofere mai multe variantede cadouri potrivite pentru acesta Aceasta informatie o primeste cu suficient timpınainte pentru a nu fi surprins fara un cadou De la Facebook pe langa informatiiledespre data zilei de nastere sunt importante si varsta sau lucrurile care ıi plac uti-lizatorului Toate acestea ajuta la crearea profilului utilizatorului pe baza caruia serecomanda dupa aceea cadourile

bull De asemenea sistemul poate recomanda si un cadou pentru alt tip de evenimentdecat zi de nastere de genul cadou de Craciun cadou de nunta cadou pentru unnou-nascut etc

bull In aplicatie vor fi adaugate si diferite produse iar pentru a face mai usoara cumparareade cadouri se va putea face si comanda pe internet In momentul ın care un utilizatorface o noua comanda producatorii produselor comandate sunt ınstiintati de existentaacestei noi comenzi

15

bull Pentru persoanele la care pe profilul de Facebook este insuficient completat saupentru a putea cumpara cadouri pentru o persoana care nu are Facebook sau nuare cont ın aceasta aplicatie si despre care ın acest fel nu se cunosc nici un felde informatii se vor putea filtra cautarile pentru cadou printr-o serie de ıntrebaristandard Aceste ıntrebari vor putea creea un rdquomini-profilrdquo pentru acea persoanapentru ca sistemul sa poata recomanda cadouri

42 Cerinte non-functionale

bull Securitate sistemul nu raspunde cererilor decat atunci cand utilizatorul a fost au-tentificat ın aplicatie si are rolul necesar pentru a face acea cerere

bull Portabilitate aplicatia nu depinde de sistemul de operare pe care ruleaza De aseme-nea nu e dependenta de browserul folosit de utilizator

bull Disponibilitate sistemul ramane stabil ın fata erorilor si functioneaza la fel si dupaaparitia unei erori

bull Extensibilitate sistemul permite adaugarea sau modificarea unor componente atuncicand cerintele aplicatiei se modifica Pe langa asta e flexibila unor dezvoltari ulte-rioare

43 Cazuri de utilizare

In aceasta sectiune se vor prezenta actorii aplicatiei diagrama cazurilor de utilizaresi vor fi descrise cazurile de utilizare de baza ale fiecarui actor

Ca si actori aplicatia are patru tipuri de utilizatori

bull utilizator anonimbull clientbull producatorbull administrator

Aplicatia este conceputa ın asa fel ıncat ıntre actori este o relatie de mostenire Acestlucru presupune ca un actor are posibilitatea de a efectua tot ce putea cel dinaintea lui siceva ın plus Deci utilizatorii anonimi au cele mai putine permisiuni iar administratoriiau permisiuni totale Acest lucru se vede foarte clar si ın diagrama cazurilor de utilizaredin imaginea 41

In continuare vor fi prezentate cazurile de utilizare

1 recomandare cadouri2 adaugare produs3 modificare rol utilizator

16

Figura 41 Digrama cazurilor de utilizare

17

431 Recomandare cadouri

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unutilizator trebuie sa le urmeze pentru a primi recomandari de cadouri pentru un cunoscutsi pentru a efectua o comanda

Actorul principal

Orice utilizator al aplicatiei

Parti interesate si interese

Utilizatorul care doreste sa cumpere un cadou este interesat de a gasi un cadoupotrivit pentru cineva pe care ıl cunoaste

Producatorul care e interesat sa ısi poata vinde produseleUtilizatorul care primeste cadoul fiind interesat sa primeasca un cadou care sa i se

potriveasca si care sa ıi placa

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand utilizatorul porneste aplicatia11 Utilizatorul verifica daca are cont de Facebook si daca are urmeaza pasul 111

daca nu 22111 Utilizatorul se autentifica ın aplicatie cu ajutorul credentialelor de la

Facebook12 Utilizatorul deschide sectiunea de recomandare cadouri13 Utilizatorul completeaza formularul cu datele ce trebuie introduse pentru a primi

recomandari de cadouri pentru un prieten14 Utilizatorul poate fi satisfacut cu recomandarile primite si atunci urmeaza pasul

141 iar daca nu este atunci urmeaza cazul alternativ 23141 Utilizatorul adauga ın cosul de cumparaturi cadouri pe care doreste sa

le cumpere15 Utilizatorul cere sa ısi vada cosul de cumparaturi16 Utilizatorul poate sa se declare multumit de cosul de cumparaturi caz ın care

urmeaza pasul 161 sau poate sa aleaga cazul alternativ 24161 Utilizatorul aproba cosul de cumparaturi si accepta sa se faca comanda

17 Sistemul introduce ın baza de date comanda18 Utilizatorul va putea vedea la sectiunea comenzilor sale noua comanda si statusul

ei19 Sistemul notifica producatorul de aparitia noii comenzi110 Utilizatorul se dezautentifica din aplicatie

18

Use-Case EndUtilizatorul se va deconecta din aplicatie si o va ınchide

Figura 42 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueazaAcest flux poate aparea la orice pas211 Utilizatorul deschide sectiunea de recomandare cadouri212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca utilizatorul nu are cont de Facebook

19

Acest flux poate aparea la pasul 11221 Utilizatorul deschide pagina de Facebook222 Utilizatorul ısi face un cont pe pagina de Facebook si ısi completeaza

date despre el223 Utilizatorul revine la aplicatia de recomandare cadouri si ıncearca din

nou sa se autentifice ın aplicatie224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca utilizatorul nu e multumit de recomandariAcest flux poate aparea la pasul 14231 Utilizatorul sterge din cos cadourile pe care nu le mai doreste si revine

la pagina de recomandari232 Utilizatorul adauga alte cadouri ın cos233 Cazul de utilizare continua de la pasul 141

24 Flux-ul alternativ daca utilizatorul nu e multumit de produsele din cosul decumparaturi

Acest flux poate aparea la pasul 16241 Utilizatorul revine ınapoi la formularul cu introducerea datelor despre

beneficiarul cadoului242 Utilizatorul completeaza din nou datele243 Cazul de utilizare continua de la pasul 13

Preconditii

1 Utilizatorul trebuie sa aiba un cont de Facebook pentru a se putea autentifica ınaplicatie

2 Utilizatorul trebuie sa fie autentificat ın aplicatie pentru a putea face orice actiunedin acest caz de utilizare

3 Utilizatorul trebuie sa deschida sectiunea de recomandare cadouri pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noua comanda este salvata ın baza de date2 Comanda apare ın sectiunea de comenzi a utilizatorului ımpreuna cu statusul ei

curent3 Producatorul este notificat ca are o noua comanda

432 Adaugare produs

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unproducator trebuie sa le urmeze pentru a introduce un nou produs ın aplicatie

20

Actorul principal

Utilizatorii cu rol de producator sau cu rol de administrator

Parti interesate si interese

Producatorul care doreste sa introduca produsul nou ın aplicatie

Utilizatorii simpli care au o mai mare varietate de produse din care sa li se reco-mande cadouri

Figura 43 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo

21

Flux de evenimente

Use-Case Start

Cazul de utilizare ıncepe atunci cand producatorul porneste aplicatia

11 Producatorul verifica daca are cont de Facebook si daca are urmeaza pasul111 daca nu 22

111 Producatorul se autentifica ın aplicatie cu ajutorul credentialelor de laFacebook

12 Producatorul deschide sectiunea de adaugare produs

13 Producatorul completeaza datele necesare despre noul produs ımpreuna cu tipulde persoana si eveniment care i s-ar potrivi

14 Producatorul verifica daca este multumit de datele introduse si daca da urmeazapasul 141 daca nu 23

141 Producatorul efectueaza operatia de adaugare produs

15 Sistemul adauga un nou produs ın baza de date

16 Sistemul notifica producatorul ca noul produs a fost introdus cu succes

17 Producatorul se dezautentifica din aplicatie

Use-Case End

Producatorul se va deconecta din aplicatie si o va ınchide

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Producatorul deschide sectiunea de adaugare produs

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca producatorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Producatorul deschide pagina de Facebook

222 Producatorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Producatorul revine la aplicatia de recomandare cadouri si ıncearca dinnou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca Producatorul nu e multumit de datele introduse despreprodus

Acest flux poate aparea la pasul 14

231 Producatorul sterge datele gresite despre produs

232 Producatorul adauga alte date despre produs

233 Cazul de utilizare continua de la pasul 141

22

Preconditii

1 Producatorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Producatorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Producatorul trebuie sa aiba cont cu rol de rdquoproducatorrdquo sau rdquoadminrdquo pentru aputea face operatia aceasta

4 Producatorul trebuie sa deschida sectiunea de adaugare produs pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noul produs este salvat ın baza de date2 Produsul poate fi adaugat la recomandarile unui utilizator din acel moment

433 Modificare rol utilizator

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unadministrator trebuie sa le urmeze pentru a modifica rolul unui utilizator al aplicatiei

Actorul principal

Un utilizator al aplicatiei care are rol de administrator

Parti interesate si interese

Administratorul care doreste sa modifice rolul unui utilizatorUtilizatorul care doreste sa ısi schimbe rolul

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand administratorul porneste aplicatia11 Administratorul verifica daca are cont de Facebook si daca are urmeaza pasul

111 daca nu 22111 Administratorul se autentifica ın aplicatie cu ajutorul credentialelor de

la Facebook12 Administratorul deschide sectiunea de utilizatori13 Sistemul ıi returneaza administratorului utilizatorii care nu sunt administratori14 Administratorul modifica rolul utilizatorului din utilizator simplu ın producator

sau invers

23

15 Administratorul cere executarea modificarii

16 Sistemul executa modificarea iar ın caz de succes urmeaza pasul 161 si ın cazde eroare pasul 23

161 Sistemul notifica administratorul ca modificarea a fost efectuata cusucces

17 Utilizatorul se dezautentifica din aplicatie

Use-Case End

Administratorul se va deconecta din aplicatie si o va ınchide

Figura 44 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo

24

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Administratorul deschide sectiunea de utilizatori

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca administratorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Administratorul deschide pagina de Facebook

222 Administratorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Administratorul revine la aplicatia de recomandare cadouri si ıncearcadin nou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca sistemul returneaza o eroare la modificarea utilizatorului

Acest flux poate aparea la pasul 16

231 Sistemul returneaza un mesaj de eroare la modificarea utilizatorului

232 Aplicatia afiseaza mesajul de eroare administratorului

233 Cazul de utilizare continua de la pasul 15

Preconditii

1 Administratorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Administratorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Utilizatorul trebuie sa aiba cont cu rol de administrator pentru a putea efectuaorice actiune din acest caz de utilizare

4 Administratorul trebuie sa deschida sectiunea utilizatori pentru a putea ındeplinicerintele din cazul de utilizare

Postconditii

1 Noul rol al utilizatorului este salvat ın baza de date

2 La urmatoarea autentificare a utilizatorului acesta va observa ca interfata si maiprecis meniurile si actiunile care le poate face ıi vor fi diferite

25

44 Perspectiva tehnologica

441 Neo4j

Neo4j 1 este un sistem de gestionare a bazelor de date sub forma de graf dezvoltatde Neo4j Inc Descris de dezvoltatorii sai ca o baza de date tranzactionala compatibilacu ACID Neo4j este cea mai populara baza de date sub forma de graf dupa clasamentulDB-Engines

Baza de date Neo4j (ca si orice alta baza de date sub forma de graf) este foartediferita de o baza de date relationala cum ar fi MS Access SQL Server MySQL etcBazele de date relationale utilizeaza tabele randuri si coloane pentru stocarea datelor

Neo4j nu utilizeaza tabele randuri si coloane pentru stocarea sau prezentarea datelorci noduri si relatii

Neo4j este foarte potrivit pentru stocarea datelor care au multe relatii interconec-tate Acestea sunt de fapt aplicatiile ın care merita sa fie folosite De fapt bazele de datesub forma de graf cum este Neo4j sunt mult mai bune la tratarea datelor interconectatedecat bazele de date relationale

Acest lucru se datoreaza faptului ca modelul sub forma de graf nu necesita de obiceio schema predefinita Nu e nevoie sa se creeze structura bazei de date ınainte de a fiıncarcate datele asa cum se face la o baza de date relationala

Dar principalul motiv pentru care Neo4j este mai bun pentru datele relationalepentru acest tip de aplicatii este modul ın care permite crearea relatiilor Neo4j este con-struit ın jurul relatiilor si atunci nu este nevoie sa se configureze chei primare constrangerichei straine pentru a predetermina nodurile care pot avea o relatie si la ce date Cu Neo4jse poate adauga orice legatura ıntre orice nod ori de cate ori este nevoie

Neo4j are aceste calitati care nu se gasesc nici la celelalte baze de date NoSQLBazele de date non-relationale pe langa cele sub forma de graf sunt cele de tip coloanade tip document de tip cheie-valoare si de tip multi-model Nici unul din aceste tipuri nuau ca principala functionalitate maparea relatiilor si facilitatea interogarilor ıntr-o baza dedate cu multe relatii ıntre entitati

Generarea de recomandari personalizate este unul dintre cele mai frecvente cazuride utilizare a unei baze de date sub forma de graf Unele dintre principalele beneficii aleutilizarii grafurilor pentru a genera recomandari includ

- Performanta Lipsa indexurilor permite calcularea recomandarilor ın timp realasigurand ca recomandarea este ıntotdeauna relevanta si reflecta informatii actualizate

- Model de date Modelul de graf cu proprietati permite combinarea cu usurinta aseturilor de date din mai multe surse

Un alt avantaj al bazelor de date sub forma de graf Neo4j este faptul ca respectatoate principiile din modelul de consistenta ACID

Garantia data de principiile ACID este ca ofera un mediu sigur ın care sa functionezedatele Acronimul ACID reprezinta

1httpsneo4jcomuse-casesreal-time-recommendation-engine

26

bull Atomic Toate operatiile dintr-o tranzactie reusesc sau fiecare operatie este reluatabull Consistent La finalizarea unei tranzactii baza de date este solida din punct de

vedere structuralbull Izolat Tranzactiile nu se lupta una cu cealalta Accesul controversat la date este

moderat de baza de date astfel ıncat tranzactiile par sa se execute succesivbull Durabil Rezultatele aplicarii unei tranzactii sunt permanente chiar si ın cazul unor

defectiuniCand vine vorba de tehnologiile NoSQL cele mai multe baze de date sub forma de

graf (inclusiv Neo4j) utilizeaza un model de consistenta ACID pentru a asigura ca datelesunt stocate ın siguranta si ın mod consecvent

Am ales baza de date sub forma de graf ca optiune pentru stocarea datelor deoarecedin toate lucrarile si articolele citite a fost optiunea cea mai buna pentru un sistem derecomandare Deci acesta se mapeaza perfect pe cerintele functionale ale proiectului Sidin optiunile de baze de date sub forma de graf Noe4j a avut de departe cele mai multeavantaje ea fiind si cea mai utilizata

442 Cypher

Cypher 2 este un limbaj declarativ de interogare pentru bazele de date sub formade graf care permite interogarea si actualizarea rapida a datelor Cypher este un limbajrelativ simplu dar foarte puternic Interogarile foarte complexe ale bazei de date pot fiusor exprimate prin intermediul limbajului Cypher

Este conceput pentru a fi un limbaj de interogare uman Scopul lui principal este dea face interogarile mult mai simple si unele interogari care la bazele de date relationale nuerau posibile le face posibile Constructiile sale se bazeaza pe grafica si pe limba englezalucru care ajuta la scrierea mai intuitiva a interogarilor Este construit pentru a fi maiintuitiv pentru citire si nu neaparat pentru scriere

Cypher se bazeaza pe modelul Graph Property care ın plus fata de elementelegrafice standard ale nodurilor si muchiilor (numite relatii ın Cypher) adauga etichete siproprietati ca si concepte Nodurile pot avea zero sau mai multe etichete ın timp ce fiecarerelatie este de exact un singur tip Nodurile si relatiile au de asemenea zero sau mai multeproprietati

Chypher este limbajul de interogare folosit la bazele de date Neo4j deci este opti-unea implicita atunci cand se alege Neo4j

443 Maven

Maven 3 este un instrument de management software si de ıntelegere a proiectelorsoftware Pe baza conceptului unui model de obiect de proiect (POM) Maven poategestiona construirea raportarea si documentarea unui proiect printr-o informatie centrala

2httpsneo4jcomdevelopercypher-query-language3httpswwwjavatpointcommaven-tutorial

27

Obiectivul principal al lui Maven este acela de a permite unui dezvoltator sa ınte-leaga starea completa a efortului de dezvoltare ın cel mai scurt timp Avantajele Mavensunt

bull instalarea rapida a proiectului fara fisiere buildxml complicate doar un POMbull procesul de construire este standardizat pentru toate proiectelebull usor de ınvatat si de utilizatbull configurarea unui proiect este foarte rapidabull bine documentat

Am ales sa folosesc Maven deoarece este una din cele mai comune optiuni pentru aimporta librariile ıntr-un proiect si este si cel mai documentat Deci mereu cand esti pusın dificultate poti cauta pe internet sugestii

444 Spring Boot

Spring Boot 4 este un framework din cadrul Spring care ofera setari implicite pentruconfigurarea codului si adnotari pentru a lansa rapid proiecte noi ın executie Urmaresteabordarea rdquoConfigurarea defectiunilor vizionaterdquo pentru a evita un numar mare de linii decod pentru configuratii si pentru a ımbunatati procesul de dezvoltare

Avantajele Spring Boot sunt1 Face foarte usoara dezvoltarea de aplicatii bazate pe Spring cu Java sau Groovy2 Reduce timpul de dezvoltare si creste productivitatea3 Evita scrierea multor linii de cod adnotari si configurare XML4 Este foarte usor de integrat cu alte framework-uri din aceasi familie Spring cum ar

fi Spring JDBC Spring ORM Spring Data Spring Security etc5 Urmareste abordarea rdquoConfigurarea implicita a optiunilorrdquo pentru a reduce efortul

pentru dezvoltatori6 Ofera servere HTTP ıncorporate cum ar fi Tomcat Jetty etc pentru a dezvolta si

testa aplicatiile web foarte usor7 Ofera instrumentul CLI (Command Line Interface) pentru a dezvolta si testa apli-

catiile de tip rdquoSpring Bootrdquo (Java sau Groovy) din linia de comanda foarte usor sirapidAm ales ca optiune pentru partea de backend acest framework deoarece simplifica

foarte mult lucrurile Datorita lui un programator poate sa ısi concentreze mai tare energiape a construi proiectul din punctul de vedere al buissness-ului logic nu din punctul devedere al configurarilor necesare

445 Sencha CMD si ExtJS

Sencha CMD 5 este un instrument linie de comanda cross-platform care ofera multesarcini automate ın ciclul complet de viata al unei aplicatii ExtJS de la generarea unui

4httpswwwjavatpointcomspring-boot-tutorial5httpsdocssenchacomcmd

28

nou proiect la lansarea unei aplicatii ın productie

Sencha Cmd ofera o colectie de caracteristici puternice pentru economisirea timpu-lui care functioneaza ımpreuna cu Sencha ExtJS si Sencha Touch

Ext JS 6 este un framework pur JavaScript pentru construirea de aplicatii webinteractive cross-platform utilizand tehnici precum scripting Ajax DHTML si DOM

Avantajele framework-ului ExtJS sunt

1 Documentatia Extjs este foarte cuprinzatoare si bine ıntretinuta2 Aspectul cheie al bibliotecii EXTJS este suportul de tip cross-browser3 Framework-ul ExtJS ofera o multitudine de elemente UI Aceste elemente includ

forme casete de dialog file arbori si tabele4 Framework-ul ExtJS include suport pentru implementarile Ajax5 ExtJS ofera performante excelente Framework-ul este complet orientat spre obiecte

si este extensibil asta pentru ca este scris ın JavaScript

Pentru partea de frontend se foloseste framework-ul ExtJS deoarece are o arhitec-tura ce se mapeaza foarte bine pe proiectele de frontend si anume arhitectura bazata pecomponente Aceasta face ca ın proiect codul sa fie mult mai organizat si procesul dedezvoltare al proiectului sa fie mult mai scurt prin identificarea mai usoara a erorilor

446 Facebook API(Graph API)

Graph API 7 este modul principal de a pune date ın platforma Facebook si de aobtine date din platforma Facebook Este un API bazat pe HTTP pe care aplicatiile ılpot utiliza pentru interogarea datelor pentru a introduce postari noi pentru gestionareaanunturilor sau pentru a ıncarca fotografii

Este denumit Graph API dupa ideea unui rdquograf socialrdquo - o reprezentare sub formade graf a informatiilor de pe Facebook Este compus din

bull noduri - ın esenta obiecte individuale cum ar fi un utilizator o fotografie o paginasau un comentariu

bull muchii - conexiuni ıntre o colectie de obiecte si un singur obiect cum ar fi fotografiilede pe o pagina sau comentariile de la o fotografie

bull campuri - date despre un obiect cum ar fi ziua de nastere a unui utilizator saunumele paginii

De obicei se utilizeaza noduri pentru a obtine date despre un anumit obiect se uti-lizeaza muchii pentru a obtine colectii de obiecte legate de un singur obiect si se utilizeazacampurile pentru a obtine date despre un singur obiect sau mai multe obiecte dintr-ocolectie

Am folosit Facebook API ca solutie pentru a ımbunatati problema de rdquocold startrdquopentru ca este singurul site pe care marea majoritate a oamenilor au cont si salveazalucrurile care le plac Deci se potrivea perfect peste nevoile aplicatiei mele

6httpdocssenchacomextjs6207httpsdevelopersfacebookcomdocsgraph-api

29

447 Git

Git 8 este un sistem de control a versionarii pentru urmarirea modificarilor ın fisierelede pe computer si coordonarea activitatii asupra acestor fisiere ın randul mai multor per-soane Este utilizat ın principal pentru gestionarea codului sursa ın dezvoltarea de softwaredar poate fi folosit pentru a urmari schimbarile ın orice set de fisiere

Avantaje ale Git

bull Modelul distribuit numai ceea ce se doreste se face publicbull Branching-ul si merging-ul sunt usoarebull Fluxul de lucru este flexibilbull Integritatea datelor este asigurata Deoarece GIT utilizeaza arbori SHA1 coruperea

datelor din motive externe poate fi usor detectatabull Rapid Git este foarte rapid chiar si ın comparatie cu alte sisteme de control a

versionarii

Am folosit Git pentru a avea la proiect un back-up ın caz ca se ıntampla ceva cuproiectul salvat pe calculator

45 Arhitectura conceptuala

In figura 45 este prezentata arhitectura conceptuala a sistemului Acesta este ım-partit ın doua mari parti backend-ul si frontend-ul care comunica ıntre ele si ısi trimitinformatii

Se poate observa ca baza de date este de tip graf mai exact Neo4j si comunica cubackend-ul pentru a putea lucra cu datele stocate Backend-ul este structurat pe nivelefiecare cu un diferit rol si care trebuie parcurs pentru a procesa datele din interfata ınbaza de date Cele trei nivele sunt cel de Repository cel de Service si cel ControllerToate interogarile venite din interfata utilizator ajung ın nivelul de Controller Dupa ceinterogarile trec de securitatea sistemului ajung ın nivelul de Service Acolo se proceseazasi se afla partea de logica a aplicatiei Pentru a interactiona cu baza de date din Servicese apeleaza metodele din nivelul de Repository

In continuare backend-ul comunica prin protocolul HTTP cu interfata grafica cucare interactioneaza clientii aplicatiei Interfata este scrisa ın Ext JS si are o parte de Viewsi o parte de Controller care este cea care comunica cu backend-ul

Pentru partea de autentificare sistemul interactioneaza cu API-ul de la Facebookde la care ia dupa autentificare un access token Cu ajutorul acestuia ia dupa aceea datelenecesare pentru a putea crea un profil utilizatorului

8httpsguidesgithubcomintroductiongit-handbook

30

Figura 45 Arhitectura conceptuala

31

Capitolul 5

Proiectare de Detaliu siImplementare

In acest capitol vor fi prezentate detalii de implementare ale sistemului de recoman-dare incluzand o ımpartire al acestuia ın componentele care ıl cuprind

Obiectivul este de a prezenta arhitectura si modul de implementare al aplicatieipe baza datelor descoperite ın studiul bibliografic de la capitolul trei si cu tehnologiilehotarate la capitolul patru Pe langa asta va fi prezentata si structura bazei de date sideciziile luate pentru securitatea aplicatiei

51 Arhitectura sistemului

Din punctul de vedere al arhitecturii aplicatia se poate considera ca este alcatuitadin patru mari componente

1 API-ul de la Facebook2 Aplicatia client care reprezinta interfata grafica a aplicatiei3 Aplicatia server adica backendul aplicatiei si partea ın care se afla partea de rdquobusiness

logicrdquo4 Baza de date

Partea componenta reprezentata de API-ul de la Facebook este doar o componentacu care aplicatia se integreaza si pe care aceasta o foloseste In interactiunea cu ea interfatada o cerere de autentificare apare o fereastra de la Facebook ın care utilizatorul introducecredentialele de la API-ul de Facebook se primeste ınapoi un access token si cu ajutorulacestuia face o cerere pentru a primi datele personale ale utilizatorului pentru creeareaprofilului utilizator

Urmatoarea parte a aplicatiei este interfata utilizator frontend-ul care reprezintapartea cu care utilizatorul interactioneaza si locul unde ıi sunt afisate informatiile

Cererile din interfata ajung ın a treia parte componenta a sistemului partea deserver adica backend-ul aplicatiei Acolo toate cererile sunt citite si procesate iar raspun-

33

sul lor este trimis la interfata utilizator Aceasta este partea care reprezinta rdquogandireardquoaplicatiei Aceea este componenta care face legatura ıntre cererile utilizatorului din inter-fata si datele stocate ın baza de date

Ultima componenta a aplicatiei o reprezinta baza de date care are ca rol sa stochezedatele despre utilizatori produse si comenzi Ea este o baza de date sub forma de grafde tipul Neo4j Acolo se salveaza entitatile aplicatiei sub forma de noduri si dependenteleıntre acestea sub forma de relatii ıntre aceste noduri

Figura 51 Diagrama de rdquodeploymentrdquo

In figura 51 este prezentata diagrama de rdquodeploymentrdquo a sistemului cu cele patrucomponente ale sistemului Aplicatia client comunica cu API-ul de la Facebook prin pro-tocolul securizat HTTPS cu backend-ul prin protocolul HTTP iar backend-ul cu baza dedate prin JDBC

Aplicatia a putut fi ımpartita ın aceste componente separate deoarece fiecare dintreele poate functiona independent de celelalte comunica cu ele doar prin mesaje Din acestmotiv locul unde ruleaza acestea pot sa fie pe servere diferite In plus daca aplicatiaar fi pusa pe servere pentru utilizatori ar putea fi mai multe servere pe care ruleaza ocomponenta si prin rdquoload balancingrdquo sa se trimita cererile ımpartite ıntre ele

Cum astfel componentele nu depind foarte mult unele de altele si pot rula faraa le interesa de unde le sunt trimise cererile este arhitectura cea mai corecta deoarecedefectarea sau o posibila eroare la una din ele nu o influenteaza cu nimic pe o alta Dacatoate ar rula pe acelasi server o eventuala defectiune a acestuia ar ınsemna o defectiune aıntregului sistem Insa daca exista mai multe noduri si se afla pe servere diferite pot doartoate cererile sa fie redirectionate spre un nod care functioneaza si aplicatia sa functionezepentru clienti la fel ca ınainte

34

Un alt avantaj al arhitecturii ar fi faptul ca la o lansare viitoare catre clienti se poatelansa doar componenta la care s-au facut modificari De asemenea aplicatia ar putea aveape viitor si o componenta mobila Iar cum serverul e independent poate fi acelasi serverfolosit de o alta aplicatie client

511 Arhitectura componentei backend

Arhitectura backend-ului este si ea ımpartita ın mai multe pachete pentru o maibuna structura si pentru o cat mai mica dependenta ıntre diversele componente Astfelcuplarea este minima ıntre clase si eventualele modificari ulterioare pot fi mai usor defacut

Serverul a fost implementat ın Java cu ajutorul framework-ului Spring Boot iarmediul de dezvoltare folosit a fost Intellij IDEA

Din punctul de vedere al ımpartirii arhitectura serverului aplicatiei este structurataın patru pachete si o clasa ın afara acestora Acea clasa este rdquomainrdquo-ul aplicatiei este parteacare trebuie rulata pentru a porni serverul Din cauza ca este o aplicatie Spring Boot si nuuna String singura adnotare necesara pentru a sti ca aceea este clasa rdquoradacinardquoa aplicatieieste SpringBootApplication

Cele patru pachete ale serverului sunt1 Cel de domeniu (domain) cu clasele POJO care reprezinta entitatile din baza de

date2 Cel de rdquomagazierdquo (repositories) care este cel care face direct actiunile ın baza de date3 Cel de serviciu (services) ın care se afla partea de logica a ıntregii aplicatii4 Cel de web ın care se afla clasele de rdquocontrollerrdquo

Figura 52 Diagrama de pachete pentru backend

35

Ca si dependente nivelul de web ıl foloseste pe cel de seviciu cel de serviciu ılfoloseste pe cel de rdquomagazierdquo iar clasele din pachetul de domeniu sunt folosite ın toatecelelalte pachete

In continuare voi prezenta pe rand fiecare nivel al serverului adica fiecare pachet

Figura 53 Diagrama de clase pentru pachetul rdquodomainrdquo

36

Nivelul de domeniu (domain) este alcatuit ın primul rand din clasele care suntentitati ın baza de date Acestea sunt reprezentate de toate clasele ce stocheaza informatiidespre utilizatori si despre produse si comenzi Pe langa informatiile personale despre unutilizator de genul numelui email-ului sau data nasterii care sunt salvate ın entitateapersoana se stocheaza despre utilizator ın clase diferite informatii de genul locului undelocuieste locul unde a copilarit locurilor unde a facut scoala locului unde lucreaza sau celmai important pentru aplicatia aceasta lucrurilor care ıi plac In afara acestor informatiidespre utilizatori sunt si clase cu informatiile despre prieteni despre produse sau desprecomenzi

Din cauza faptului ca aplicatia este de tipul unei retele sociale ın care exista prieteniiıntre persoane exista dependente ıntre toate entitatile aplicatiei Acesta este si motivulpentru care am ales baza de date sub forma de graf pe care sa se mapeze toate acesteentitati sub forma de noduri si toate aceste dependente sub forma de relatii

In pachetul de domeniu se afla si trei subpachete Unul dintre ele este pentruclasele folosite pentru a trata erorile aplicatiei In interiorul acestui pachet se afla douaclase pentru eroare si o exceptie cea folosita ın cazul ın care nu se gaseste ceea ce doresteutilizatorul Pe langa asta este clasa care are ca obiect raspunsul dat de sistem ın cazulunei erori la server Aceasta contine ın interiorul sau pe langa codul erorii si detalii despreeroarea trimisa Aceasta lista de detalii e reprezentata de obiectele de tipul celei de-a treiaclase din pachetul acesta

Celelalte doua subpachete aflate ın acest nivel sunt cele care contin clasele specialede cerere sau raspuns care au ajutat la maparea acestora mai bine In multe cazuri nua fost necesara trimiterea la interfata utilizator a tuturor informatiilor stocate despre oentitate si de aceea am ales sa creez ın aceste cazuri un obiect auxiliar care sa fie folositpe post de raspuns

Figura 54 Diagrama de clase pentru pachetul rdquorepositoriesrdquo

37

Cel de-al doilea nivel al aplicatiei backend este cel de rdquomagazierdquo (repositories) carecontine doar interfete de tip rdquoRepositoryrdquo

Aceste interfete sunt cele care fac operatiile directe asupra entitatilor din baza dedate

Unele interfete doar extind interfata care are deja implementate metodele CRUDsi din acest motiv nu au metode suplimentare iar altele au si metode ın plus care au carol sa execute interogari mai complexe asupra bazei de date In acele metode se pot scrieinterogarile ın Cypher pentru a putea primi informatii despre mai multe noduri sau desprerelatiile dintre acestea sau si pentru a returna doar anumite rezultate care ındeplinescanumite conditii In felul acesta a fost implementata si cererea de oferire a recomandarilorIn acel caz sistemul returneaza produsele care au ın descriere unul din lucrurile care se aflaın lista de obiecte sau servicii primite de la Facebook ca ıi plac utilizatorului

Nivelul de rdquoRepositoryrdquo este folosit direct de cel de-al treiea nivel cel de servi-ciu Acesta este nivelul la care se executa logica aplicatiei unde se comanda modul defunctionare al ıntregii aplicatii

Figura 55 Diagrama de clase pentru pachetul rdquoservicesrdquo

Pe acest nivel ajung toate cererile din server dupa ce trec de verificarile de securitateIn acest pachet se afla si clasa de securitate care face verificarile necesare In aceasta clasaexista o metoda ce se apeleaza la prima cerere cea de salvare a datelor de la Facebookdespre utilizator si care codifica id-ul utilizatorului si ıl trimite pe raspuns ınapoi interfeteiPe langa asta ın acea clasa se afla si o metoda care verifica faptul ca id-ul codificat esteal unui utilizator cu rol corespunzator pentru a face acea cerere

In plus ın acest pachet se afla si toate celelalte clase care fac diverse operatii pedatele din baza de date si dau raspunsuri cererilor din interfata Aici se afla logica care

38

comanda actiunile asupra utilizatorilor asupra prietenilor acestora asupra produselor siasupra comenzilor

Ultima clasa a acestui nivel este cea care se ocupa de trimiterea de email-uri Incazul ın care se face o noua comanda de catre un utilizator toti producatorii produselor depe comanda sunt notificati despre produsele lor pe care le doreste utilizatorul Din serviciulde comanda se apeleaza serviciul de email pentru fiecare producator din lista celor care auproduse care se afla pe lista comenzii utilizatorului

Ultimul si cel mai aproape de interfata utilizator este nivelul de web Acolo se aflatoate clasele de rdquoControllerrdquo ale aplicatiei server

Figura 56 Diagrama de clase pentru pachetul rdquowebrdquo

Toate cererile din interfata utilizator ıncearca sa se mapeze pe rutele declarate ınclase pentru a fi procesate ın metoda corespunzatoare Toata aceasta parte este foarteusor de implementat si mai ales foarte lizibil pentru programatori datorita adnotarilor dinJava Cu ajutorul acestora trebuie doar specificat care este numele URL-ului cererii careeste tipul de obiect asteptat si daca se trimite ca rdquoquery stringrdquo pe URL sau ın interiorulcorpului cererii si tipul raspunsului Pentru fiecare cerere care nu este apelata ın parteaneautentificata a utilizatorului primul lucru care se apeleaza este metoda de securitatepentru a verifica rolul si id-ul utilizatorului Daca din punctul de vedere al securitatii totuleste ın regula se apeleaza metoda corespunzatoare din pachetul de serviciu

39

O singura clasa este diferita de restul ın pachetul de controller si aceea este clasa deeroare Acolo se mapeaza erorile aparute ın timpul cererii si se trimite ınapoi ın interfatagrafica un raspuns cu cod de eroare specific nu numai 500 Generic Application Exceptioncum ar trimite fara aceasta clasa si cu detalii despre motivul aparitiei erorii

Datorita folosirii adnotarilor din java nu a fost necesara folosirea unor rdquodesignpatternrdquo-uri ın sistem De exemplu pentru a folosi ın nivelul de web ceva din pachetulde servicii trebuia doar acel obiect sa aiba adnotarea Autowired si se ınlocuieste atatfolosirea rdquodesign patternrdquo-ului Singleton cat si a celui de Factory Acel obiect nu trebuiecreat sau initializat se face asta implicit datorita adnotarii si de asemenea este folositapeste tot aceeasi instanta

In concluzie toate cererile venite din interfata grafica ajung ın nivelul de rdquocontrollerrdquode unde sunt trimise la cel de rdquoservicerdquopentru a fi procesate si facute eventualele modificarinecesare ın baza de date ca apoi raspunsul sa fie trimis ınapoi spre aplicatia client pentruafisare

512 Arhitectura componentei frontend

A doua componenta implementata a sistemului este aplicatia client frontend-ulAceasta a fost scrisa ın Java Script cu ajutorul framework-ului Ext JS compilarea

se face cu ajutorul Sencha CMD si mediul de implementare a fost IntelliJ IdeaCu ajutorul framework-ului Ext JS se scriu componente care apoi se initializeaza

unele pe altele Aplicatia porneste cu fisierul Applicationjs care este un fel de rdquomainrdquopentru aplicatie Aceasta initializeaza alte componente care la randul lor includ altecomponente si tot asa Structura poate fi foarte usor comparata cu una arborescenta dinacest punct de vedere

Framework-ul a fost creat sa functioneze ın felul acesta pentru ca scopul componen-telor este sa fie scrise ın asa fel ıncat sa poata pe viitor sa fie utilizate din nou Una dindorintele majore ın programare tot timpul este de a se scrie cod ıntr-o maniera ın care safie cat mai reutilizabil Iar framework-ul Ext JS exact asta ıncearca

Arhitectura aplicatiei client se gaseste ın figura 57 si este la randul ei ımpartita ınpachete ca si cea de server Similar cu pachetul de rdquodomainrdquo de la aplicatia de backendeste pachetul rdquomodelrdquo al interfetei utilizator Aici sunt rdquoclaserdquo care sunt simple POJO sicare sunt apoi folosite ın nivelele urmatoare Sunt mai putine decat clasele din rdquostorerdquodeoarece daca raspunsul de la server nu trebuie procesat nu sunt necesare se pot mapadirect obiectele din rdquostorerdquo pe componentele interfetei utilizator

Urmatorul nivel este cel pe care se afla clasele de rdquostorerdquo Acestea sunt cele careexecuta cererea spre backend si face legatura ıntre client si server Daca are o clasa derdquomodelrdquodeclarata atunci populeaza acel obiect cu datele primite de la server iar ın cazul ıncare nu este declarat un model se trimit datele exact asa cum s-au primit la nivelul urmatorde rdquoviewrdquo Acest nivel seamana din punct de vedere al functiei cu cel de rdquorepositoryrdquo de laaplicatia server deoarece ambele au rol de legatura Aceea facea legatura ıntre aplicatiesi baza de date si aceasta face legatura ıntre aplicatia client si aplicatia server

40

Figura 57 Diagrama de clase pentru aplicatia web

Cel de-al treilea pachet al aplicatiei este cel de rdquoviewrdquo In acest pachet se afla claselecare alcatuiesc partea vizuala a aplicatiei La randul ei si aceasta este alcatuita tot dincomponente Aplicatia deschide ın primul rand Main-ul care determina aparitia paginii deHome si afisarea ın meniu a optiunilor posibile ın functie de autentificare si rol Clasele deaici se executa de fapt la deschiderea aplicatiei fiind rdquosingle page applicationrdquo si tot atuncise ıncarca pe pagina componentele Ca si arhitectura a pachetului acesta este ımpartit larandul sau ın subpachete Pentru o mai buna organizare exista patru subpachete cateunul pentru fiecare tip de utilizator In felul acesta toate rdquoviewrdquo-urile care sunt specificeunui utilizator cu un anumit rol se afla ın acelasi subpachet

Cele patru subpachete existente ın pachetul rdquoviewrdquo sunt

1 Pachetul rdquomainrdquo care cuprinde rdquoviewrdquo-urile care se afla ın partea neautentificata aaplicatiei

2 Pachetul rdquoclientrdquo continand rdquoviewrdquo-urile pe care le poate accesa un utilizator simplu3 Pachetul rdquoproducerrdquo specific actiunilor unui utilizator care are rol de producator4 Pachetul rdquoadminrdquo care contine toate rdquoviewrdquo-urile care ıi apar unui utilizator care este

administrator al aplicatiei

Ultimul pachet si nivel al aplicatiei client este cel de rdquocontrollerrdquo In acest pachet

41

se afla clasele care fac actiunile din interfata grafica In timp ce pachetul rdquoviewrdquo continedoar partea grafica a aplicatiei adica modul ın care aceasta trebuie sa arate pachetulrdquocontrollerrdquo contine actiunea acestora modul ın care aplicatia trebuie sa functioneze

Ca si arhitectura si acest pachet a fost ımpartit la randul lui tot ın cele patrusubpachete ca si pachetul rdquoviewrdquo adica rdquomainrdquo rdquoclientrdquo rdquoproducerrdquo si rdquoadminrdquo In pluspentru a fi usor de gasit ce clasa de rdquocontrollerrdquo apartine carui rdquoviewrdquo am ales ca cele douasa aiba acelasi nume In felul acesta daca se doreste sa se gaseasca actiunile unui rdquoviewrdquose poate cauta dupa o clasa cu acelasi nume ın pachetul rdquocontrollerrdquo Numarul claselor dinacest pachet este mai mic decat cel al claselor din rdquoviewrdquo deoarece nu toate paginile dininterfata au actiuni suplimentare Daca singura actiune este ıncarcarea paginii cu date dela server adica doar o actiune simpla de GET datele se ıncarca cu ajutorul rdquostorerdquo-ului laıncarcarea paginii si nu este necesara nici o actiune suplimentara Paginile pe care se potface si actiuni de alt gen sau se deschid noi ferestre au nevoie de clase de rdquocontrollerrdquo

In concluzie arhitectura aplicatiei client este una bazata pe componente care ıncearcasa foloseasca cat mai multe clase reutilizabile

52 Structura bazei de date

Baza de date a aplicatiei este de tip graf de tipul Neo4j Pentru utilizare exista unprogram numit Neo4j ce trebuie instalat Acest program are si o interfata grafica ın carese pot vizualiza datele sub forma grafica si ın care se pot scrie de asemenea si interogariın limbajul acestei baze de date adica Cypher

Fiind o baza de date sub forma de graf datele stocate sunt salvate ın structurade date sub forma de noduri si relatii Entitatile din pachetul de domeniu din aplicatiabackend se gasesc ın baza de date sub forma unor noduri iar dependentele dintre nodurise mapeaza ın baza de date sub forma unor relatii Un element diferit fata de alte tipuride baze de date este faptul ca pe relatiile dintre noduri se pot salva atribute cum este ınaplicatie cazul pentru prieteniile dintre persoane In cazul acestora pe relatia dintre nodurise salveaza daca prietenia a fost sau nu acceptata

Pentru fiecare clasa POJO din aplicatia server clasa ce are doar metodele get si setsi se afla ın pachetul domain exista cate un tip de nod diferit ın baza de date cum estesi marcat ın diferite culori ın figura 58 Fiecare tip de nod are atributele proprii care potlua valori sau pot fi nule Iar fiecare obiect din Java reprezinta un nod diferit ın baza dedate

Neo4j a fost cea mai buna optiune pentru baza de date pentru ca aplicatia poate ficonsiderata o retea sociala Acest lucru se datoreaza relatiilor de prietenie dintre persoanesi a multiplelor relatii ıntre noduri Toate nodurile se afla ın acceasi componenta conexadeci nu exista noduri izolate care sa nu aiba nici o legatura cu nici un alt nod

Datorita acestei structuri a bazei de date este posibila implementarea cererii derecomandare ca o simpla interogare ın baza de date aceasta fiind cea mai simpla metodade implementare a unui sistem de genul acesta una mult mai complexa ar fi fost un

42

algoritm de ınvatare care sa ınvete tipare ale utilizatorilor si sa recomande cadouri pe bazaacestor informatii

Figura 58 Diagrama bazei de date pentru doi utilizatori

Un alt avantaj al acestui tip de baza de date este faptul ca datele nu sunt duplicateın baza de date Spre exemplu daca mai multi utilizatori au ca locatie acelasi oras nu secreaza cate un nod cu acea locatie de mai multe ori ci acel unic nod va avea cate o relatiecu fiecare utilizator care are ca locatie acel oras

In concluzie structura bazei de date a fost aleasa ın acest fel datorita tipului apli-catiei adica asemanatoare cu o retea sociala si datorita implementarii simple a unui sistemde recomandare pe o asemenea baza de date

53 Fluxul pentru diferite operatii

Pentru aplicatie cele mai importante cazuri de utilizare sunt salvarea informati-ilor despre utilizator primite de la Facebook pentru crearea unui profil si recomandareacadourilor pentru un utilizator al aplicatiei Din aceasta cauza cele doua cazuri de utilizarevor fi prezentate mai ın detaliu ın continuare

43

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 7: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

Toti oamenii se confrunta mai devreme sau mai tarziu cu problema gasirii cadouluiperfect pentru cineva din viata lor In multe cazuri aceasta problema poate fi o adevaratacatastrofa ce consuma energie timp si rabdare pentru cel care trebuie sa cumpere cadoulDe accea scopul aplicatiei este de a usura viata oamenilor prin oferirea unor variante decadouri specifice pentru exact acea persoana

Din toata cercetarea facuta pe aceasta tema nu am gasit nici o aplicatie de acestgen care sa ofere recomandari specializate pentru o anumita persoana

13 Continutul lucrarii

In aceasta sectiune vor fi prezentate capitolele acestui document si vor fi de asemeneasi descrise sumar ca si continut

bull Introducere (Capitolul 1) - ın acest capitol se va prezenta de fapt contextul proiec-tului motivatia de la care s-a pornit cand a fost ınceput si de asemenea e cuprinsaın ea si aceasta descriere a continutului pe capitole

bull Obiectivele Proiectului (Capitolul 2) - ın acest al doilea capitol sunt prezentate obiec-tivele proiectului atat obiectivul principal cat si obiectivele secundare ce doresc a fiındeplinite la final

bull Studiu Bibliografic (Capitolul 3) - cel de-al treilea capitol este reprezentat de studiulbibliografic unde vor fi prezentate diverse concepte teoretice de la care s-a pornit cuproiectul lucrari si articole prezentate de altii pe teme ce au legatura cu aplicatia side asemenea solutiile existente care se apropie de aceasta lucrare

bull Analiza si Fundamentare Teoretica (Capitolul 4) - ın capitolul de analiza si fun-damentare teoretica vor fi prezentate cerintele de la care porneste proiectul atatcele functionale cat si cele non-functionale prezentarea cazurilor de utilizare prin-cipale ale proiectului si de asemenea o analiza asupra tehnologiilor propuse pentruacest proiect De asemenea va contine si o arhitectura conceptuala a sistemului lamomentul de ıncepere al acestuia

bull Proiectare de Detaliu si Implementare (Capitolul 5) - cel de-al cincilea capitol pre-zinta modul de implementare al proiectului Acest lucru presupune schema arhi-tecturii proiectului si de asemenea si o descriere a fluxurilor de baza ale aplicatieiIn plus este descrisa structura dupa care s-a construit baza de date sub forma degraf din ce noduri si ce relatii In ultimul rand este descris modul ın care a fostimplementata securitatea sistemului

bull Testare si Validare (Capitolul 6) - acest capitol descrie modurile ın care aplicatia afost testata atat pe componente cat si validarea finala pe utilizatori reali

bull Manual de Instalare si Utilizare (Capitolul 7) - penultimul capitol prezinta tehnologi-ile ce trebuie instalate pentru a face sistemul sa functioneze De asemenea se vaprezenta modul ın care sistemul poate fi utilizat

bull Concluzii (Capitolul 8) - ın ultimul capitol vor fi analizate rezultatele obtinute si sevor descrie noi extensii ce pot fi implementate pentru a ımbunatati sistemul

2

Capitolul 2

Obiectivele Proiectului

In acest capitol se va prezenta obiectivul principal al lucrarii cel de la care a pornittoata ideea proiectului Apoi ın continuare se vor prezenta obiectivele secundare alepoiectului care au dus la modul ın care a fost acesta implementat

21 Obiectivul principal

Scopul principal al acestui proiect consta ın construirea unui sistem de recomandarecare sa ajute utilizatorii sa poata sa cumpere cadouri pentru cunoscuti ıntr-un mod multmai eficient Sistemul va fi o aplicatie web care va avea utilizatori ce se vor putea auten-tifica si dupa stabilirea unui profil propriu cunoscutii rudele sau prietenii vor putea saprimeasca sugestii de cadouri exact pentru acea persoana Pentru cadouri vor fi introdusede catre producatori diverse obiecte si servicii In felul acesta tot procesul de cumparare alunui cadou devine mult mai usor pentru persoana care ıl cumpara si cadourile devin multmai utile pentru cei care le primesc

22 Obiective specifice

Obiectivele specifice care se va urmari sa fie atinse ın cadrul acestui proiect sunturmatoarele

bull Studierea mai multor tipuri de baze de date de la cele relationale la cele No SQLsi analizarea lor pentru a stabili care este cea mai potrivita pentru un sistem derecomandare de acest gen

bull Studierea despre diferitele tipuri de sisteme de recomandare de la cele de bazaadica filtrare bazata pe continut si filtrare colaborativa la combinatia dintre eleadica sistem de recomandare hibrid pana la cele mai putin folosite adica pe bazademografica bazata pe cunostinte sau bazata pe utilitate Iar dupa aceea alegereacelei mai potrivite metode pentru un sistem de recomandare cadouri

3

bull Intelegerea conceptului de rdquocold startrdquo la sisteme de recomandare ca problema a aces-tora si gasirea unor solutii care ar putea sa ınlature sau cel putin sa ımbunatateascaaceasta problema

bull Documentarea despre diferite metode de construire a unui profil al utilizatorului sidin aceste metode alegerea celei mai potrivite din punct de vedere al timpului care ıitrebuie sistemului pana cand rdquoınvatardquo suficiente lucruri despre utilizator ıncat poateface recomandari corecte

bull Pe baza tuturor cunostintelor acumulate ın urma studiului construirea unei aplicatiiweb ca demonstratie a alegerilor facute

4

Capitolul 3

Studiu Bibliografic

Obiectivul acestui capitol este prezentarea conceptelor teoretice la baza carora staacest proiect Vor fi prezentate concepte precum modul de functionare al sistemelor derecomandare tipurile de sisteme de recomandare abordarea celor de la Netflix asupradomeniului Neo4j ca solutie pentru un sistem de recomandare utilizarea unei retele socialepentru crearea profilului unui utilizator si reteaua Facebook ca exemplu de astfel de reteaiar ın final solutii similare

31 Modul de functionare al sistemelor de recoman-

dare

Un sistem de recomandare este o tehnologie implementata ın situatiile ın care ar-ticole (produse filme evenimente) sunt recomandate utilizatorilor (clienti vizitatori uti-lizatori de aplicatii cititori) sau invers Numarul mare al utilizatorilor acestor aplicatiieste ceea ce face ca problema sa fie dificila si costisitoare de rezolvat

Motoarele de recomandare sunt ın esenta instrumente de filtrare a datelor careutilizeaza algoritmi si date pentru a recomanda cele mai relevante elemente unui anumitutilizator [9] Sau ın termeni simpli nu sunt altceva decat o forma automatizata a unuirdquovanzator ıntr-un magazin de hainerdquo Lui i se cere un produs si el nu numai ca arata acelprodus dar si altele asemanatoare pe care le-am putea cumpara

Un sistem de recomandare are trei faze de baza dupa cum este prezentat si ındiagrama 31 pe baza carora functioneaza Prima faza este cea de colectare a datelorSistemele de recomandare se bazeaza mereu pe date anterioare deci faza de ınceput ıncare acumuleaza informatii este esentiala si de multe ori o problema foarte grea de rezolvatAceasta problema se mai numeste si rdquocold startrdquo Problema este reprezentata de faptul caun utilizator nou al unei aplicatii nu are informatii stocate despre el sau despre activitatealui fiind nou Iar sistemele de recomandare nu pot sa stie de fapt ce ıi place lui decat dupace utilizeaza o perioada aplicatia De multe ori solutia adusa de oameni pentru aceastaproblema este un chestionar de ıntrebari adresat utilizatorului care sa ıl poata face sa se

5

Figura 31 Fazele unui sistem de recomandare1

ıncadreze ıntr-un tipDe fapt din aceasta cauza sistemele de recomandare devin tot mai bune si mai

exacte cu cat sunt folosite mai mult deoarece sunt stocate tot mai multe informatii despreutilizator

Cea de-a doua faza a unui sistem de recomandare este cea de ınvatare Acoloaplicatia trebuie sa stocheze datele despre utilizator si trebuie la urmatoarea recomandaresa se bazeze pe cele dinainte si ın functie de ele sa o faca Acest lucru poate fi realizat fiedirect pe baza setului de date colectat ın faza de colectare a informatiilor care ar puteafi bazat pe memorie sau bazat pe model fie prin activitatile utilizatorului care au fostobservate

A treia faza este cea de recomandare propriu-zisa ın care doar utilizatorul facecererea de recomandari si acestea ıi sunt trimise

32 Tipuri de sisteme de recomandare

In continuare ca studiu bibliografic au fost tipurile sistemelor de recomandare [11]Ca si teorie sunt mai mute tipuri de sisteme de recomandare si o reprezentare graficaa acestor tipuri este prezentata ın figura 32 Cea mai de baza ımpartire este ın douacategorii recomandari bazate pe continut si recomandari bazate pe filtrare colaborativa

Filtrarea bazata pe continut creeaza un profil de utilizator bazat pe o metoda deınvatare pentru a determina elementele pe care un anumit utilizator le-ar dori De exemplusite-ul poate utiliza un sistem de cuvinte cheie care sugereaza articole cu cuvinte cheiesimilare ın descrierea unui element pe care utilizatorul l-a cumparat anterior

Recomandarile bazate pe filtrare colaborativa se inspira din similaritatile cu ceilaltiutilizatori Gasesc utilizatori asemanantori cu cel pentru care se face recomandarea pebaza actiunilor din trecut despre aceia si se recomanda lucruri care le plac celorlalti Acesttip de recomandare se potriveste perfect cu recomandarile de filme Acolo un om cu gusturi

1httpswwwsciencedirectcomsciencearticlepiiS1110866515000341

6

asemanatoare va putea sa recomande cel mai bine un alt film unui prieten Cea mai simplaimplementare pentru asa ceva este sub forma unei matrici cu spatii goale ın locurile undenu se cunoaste informatie

Pe langa aceste tipuri de recomandari mai sunt si altele dar care nu sunt folosite lafel de des

Figura 32 Tipurile sistemelor de recomandare2

In filtrarea bazata pe criterii demografice se fac recomandari catre utilizatori pebaza informatiilor lor demografice Sistemul va sugera elemente care au fost selectate dealti utilizatori care se ıncadreaza ın acelasi profil demografic

Filtrarea bazata pe utilitate se bazeaza pe utilitatea pe care utilizatorul o va obtinede la produs Poate include lucruri precum fiabilitatea si disponibilitatea vanzatoruluipentru a se asigura ca recomanda produse usor de obtinut de catre utilizator

Filtrarea bazata pe cunostinte recomanda selectii pe baza preferintelor si modelelorde cumparare cunoscute despre utilizator Intrucat sistemul va sti ce a cumparat con-sumatorul ın trecut acesta poate face recomandari ın functie de ceea ce ar putea satisfaceaceste nevoi ın viitor

Filtrarea hibrida combina doua sau mai multe tehnici de recomandare diferite pentrua crea un sistem de recomandare mai detaliat

2httpswwwsciencedirectcomsciencearticlepiiS1110866515000341f0005

7

33 Abordarea Netflix

Foarte multa cercetare ın domeniul sistemelor de recomandare a fost influentata decei de la Netflix

Figura 33 Tipuri de recomandari oferite de Netflix3

Netflix este un serviciu de streaming care permite clientilor sa vizioneze o gamalarga de emisiuni TV filme documentare si multe altele pe mii de dispozitive conectatela internet

In figura 33 este o imagine a site-ului cu tipurile diferite de recomandari pe careacestia le ofera

Cheia succesului Netflix consta ın capacitatea lor de a anticipa ceea ce le placeutilizatorilor motiv pentru care fiecare doua din trei ore de vizionare ın Netflix provin dinrecomandari In trecut Netflix au folosit informatii despre sex si varsta pentru a determinace filme sa recomande Acum ei folosesc de exemplu ceea ce utilizatorul a urmaritınainte a cautat cat timp petrece utilizatorul vizionand filme si tipul de dispozitiv utilizatPredictiile din motorul de recomandare Netflix nu se bazeaza doar pe comportamentulutilizatorului ci si pe context (cum ar fi timpul zilei) popularitatea titlurilor noutateadiversitatea si cat de recent a fost scos filmul sunt factori importanti [7]

Premiul Netflix a fost o competitie lansata ın 2006 pentru cel mai bun algoritm defiltrare colaborativa pentru a prezice ratingurile utilizatorilor pentru filme pe baza eva-luarilor anterioare fara alte informatii despre utilizatori sau filme adica fara ca utilizatoriisau filmele sa fie identificate stiind doar numerele atribuite pentru concurs ale acestoraPremiul pentru castigator consta ın 1 milion de dolari Peste 2000 de echipe au depusseturile de predictie si peste 650 de echipe au depasit precizia algoritmului actual al Netflix

3httpstechblogglomexcompostrecommender-systemshtml

8

cu mai mult de 5 [11] Castigatorul a fost echipa BellKors Pragmatic Chaos care adepasit algoritmul Netflix cu 1006

Cei de la Netflix au fost extrem de multumiti de rezultatul obtinut si nu numai caau ıncorporat acel algoritm ın algoritmul lor existent de recomandare dar au initiat si o adoua editie a competitiei

34 Sisteme de recomandare cu Neo4j

Urmatoarea parte a studiului bibliografic s-a axat pe bazele de date de tip grafGraphDB si mai exact Neo4j ın comparatie cu celelalte tipuri de baze de date adica celerelationale In cartea [10] sunt prezentate aceste concepte din punct de vedere teoretic siın lucrarile de master [5] si [1] este prezentata aceasta comparatie ıntre diferite tipuri debaze de date pe o aplicatie reala

Limbajul care se foloseste ın bazele de date Neo4j este Cypher Cu ajutorul acestuiase mapeaza query-urile pe noduri si relatii Din punct de vedere teoretic diferenta ıntrebazele de date relationale si cele sub forma de graf consta ın modul ın care sunt stocatedatele In timp ce ın bazele de date relationale datele sunt stocate ın structuri de datesub forma de tabel ın cele sub forma de graf datele sunt stocate ın noduri Coloaneletabelelor din bazele de date relationale se mapeaza ın bazele de date sub forma de graf peproprietati Pentru a face o legatura ıntre tabelele relationale se foloseau rdquochei strainerdquo pecand la Neo4j exista relatii ıntre noduri Din cauza faptului ca bazele de date sub formade graf s-au inspirat din cele relationale exista o asemanare ıntre ele si toate lucrurile auun corespondent ın cealalta

In lucrarea [12] sunt prezentate avantajele folosirii unei baze de date sub forma degraf cand se lucreaza cu retele sociale La aplicatiile de tipul retelelor soriale relatiile dintrenoduri sunt partea cea mai importanta iar pentru acestea o baza de date sub forma degraf se mapeaza cel mai bine Un avantaj al bazelor de date sub forma de graf din punctulde vedere al programatorilor cu acestea se lucreaza foarte similar ca si cu cele relationaledupa cum se prezinta si ın [4]

Un exemplu de sistem de recomandare construit cu Neo4j este [11] In acesta lucrareeste prezentata construirea unui sistem de recomandare care sa recomande prieteni ıntr-oaplicatie de socializare In lucrare sunt patru abordari pentru construirea unui astfel desistem Prima consta ın recomandarea unor prieteni cu care utilizatorul ar avea prieteniın comun cea de-a doua sunt persoane cu care utilizatorul se afla ın acelasi grup cea de-atreia sunt utilizatori care au mers la aceleasi evenimente ca si utilizatorul si ultima abordareconsta ın recomandarea persoanelor cu cei mai multi prieteni In urma mai multor teste sistatistici s-a decis ca abordarea cea mai buna este prima cea cu prietenii ın comun Toateaceste patru metode de oferire a recomandarilor se mapeaza foarte usor pe o baza de datesub forma de graf si reprezinta doar cate un query destul de simplu ın Cypher O astfelde aplicatie s-ar fi mapat mult mai greu pe o baza de date relationala datorita multiplelorrelatii si legaturi

9

Un alt exemplu de aplicatie unde s-a ales baza de date Neo4j a fost [2] Aicipentru articolele politice pe care sistemul le recomanda se creeaza o combinatie ıntrerecomandarile obtinute din articolele care le plac oamenilor cu care utilizatorul vorbestemult si lucruri care le plac utilizatorilor cu care acesta are lucruri ın comun Si ın acest cazexista o multime de relatii ıntre utilizatori si articole si cel mai usor se obtin recomandarilecu o aplicatie sub forma de graf motiv pentru care au si ales Neo4j

35 Utilizarea retelei Facebook pentru crearea unui

profil utilizatorilor

In continuare ca studiu bibliografic au urmat sisteme asemanatoare cu sistemuldorit si modul ın care acestia au reusit sa creeze profilul utilizatorului [13] Problema ceamai mare este rdquocold startrdquo-ul Adica atunci cand un utilizator este nou ın aplicatie nuse stiu suficiente informatii despre el pentru a putea sa i se ofere recomandari Dupa ceacesta foloseste aplicatia o perioada de timp ar putea sa i se ofere recomandari bazate peactivitatea sa anterioara ın aplicatie Din acest motiv la ınceput recomandarile pot lasade dorit si pot fi nu tocmai corecte

O metoda ın care se poate rezolva aceasta problema se afla ın lucrarea de master[7] ın care la utilizatorii noi se recomanda restaurante pe baza pozitiei lor geograficeAtunci cand doresti sa mergi la un restaurant este foarte importanta distanta la care seafla acel restaurant Din aceasta cauza pentru un utilizator caruia sistemul nu stie ce sa ıirecomande ıi recomanda restaurante la ıntamplare dintre cele care se afla cel mai aproapede el In felul acesta dupa ce merge la unul din restaurante si da feedback sistemul poatedupa aceea sa ıi faca recomandari

In lucrarea [8] recomandarile pentru votare au doua abordari La prima i se reco-manda lucrurile care le-a recomandat persoana cu scorul cel mai bun Si cea de-a douaabordare consta ıntr-un set de ıntrebari la care un utilizator nou trebuie sa raspunda candısi face contul

In acest caz cea mai buna metoda ın care se poate rezolva aceasta problema parea fi sa se ia informatiile de la API-ul de la Facebook Facebook este o aplicatie extremde utilizata si care ofera ca informatii publice exact ce ar fi necesar pentru a recomandacadouri de exemplu data nasterii sau lucruri care ıi plac unui utilizator Cu ajutorulacestora se poate calcula varsta utilizatorului poate sa fie ıncadrat ıntr-un profil si sepoate afla stilul de lucruri care ıi plac

Toate aceste informatii publice de la Facebook pot fi salvate si pot fi utilizate maitarziu pentru a se creea recomandari pe baza lor In articolul [3] despre valoarea datelor dela Facebook se prezinta ca si caz de utilizare pentru un site de comert online Aceasta estefoarte asemanatoare din punct de vedere al recomandarilor cu aplicatia de recomandarecadouri Diferenta dintre cele doua este ca ın cazul uneia trebuie sa recomande produsepentru utilizatorul aplicatiei si cealalta pentru un prieten al acestuia

10

Din punct de vedere al aplicabilitatii Facebook este o retea sociala deci datele salese mapeaza foarte bine pe o baza de date de tip graf cum este prezentat si ın lucrarea [6]

Asadar daca la crearea contului utilizatorului ın aplicatie se iau si informatiile pu-blice despre utilizator se vor putea oferi recomandari mult mai corecte ınca de la ınceput

36 Solutii similare

Ca solutii similare pe piata online nu exista aplicatii folosite pentru a recomandacadouri personalizate specific pentru o persoana anume Multe site-uri considera ca eirecomanda cadouri ınsa acestea reprezinta de fapt o filtrare mai avansata a rezultatelorproduselor de pe site-ul lor

Un site care ofera cadouri personalizate este Giftly 4 prezentat ın figura 34 careofera o modalitate usoara de a oferi cadouri Acest site nu are parte de recomandari cia gasit un mod de a face oamenii sa primeasca mereu ceea ce ısi doresc Cel care oferacadoul nu ıl cumpara ci doar ıl sugereaza dar decizia finala asupra cadoului este la celcare ıl primeste Modul ın care functioneaza este

1 Se ofera un rdquocard cadourdquo prin email sms printat sau ca o felicitare de ınaltacalitate

2 Destinatarul alege cel mai convenabil mod de a primi cadoul rdquocard cadourdquo ınposta sau direct ca bani ın contul bancar sau contul PayPal

3 De fapt utilizatorul ıi sugereaza destinatarului ce ar vrea el sa ofere ca si cadouiar destinatarul trimite ca mesaj modul ın care a cheltuit banii

Figura 34 Site web Giftly

4httpswwwgiftlycom

11

Ofera de asemenea si sugestii de cadouri Un om cand navigheaza pe site poate sase uite la cadouri ın categoriile Popular Holidays Birthdays Drinks Eats Meals BackTo School Get Fresh Health Fitness Going Out Getaway Top Shelf For The HipsterClothes For Her Clothes For Him Congratulations Expecting Activities si Custom

Un alt site cu cadouri este Etsy 5 cu imaginea 35 care arata site-ul Etsy este o piataglobala pentru bunuri unice si creative Pe pietele lor milioane de oameni din ıntreagalume se conecteaza atat online cat si offline pentru a face vinde si cumpara bunuri uniceEtsy ofera de asemenea o gama larga de servicii si instrumente de vanzari care ajutaıntreprinzatorii creativi sa ınceapa sa gestioneze si sa-si masoare afacerile Misiunea loreste sa pastreze comertul uman Deci de fapt acest site sprijina mai mult producatoriinu comerciantii De asemenea este mai mult axat pe bunuri unice si lucruri rdquounicerdquo Ca sicelelalte site-uri de genul acesta are o modalitate de a cauta lucrurile mai inteligent maispecializat pe ceea ce te intereseaza Categoriile de cautare sunt Jewelry AccessoriesClothing Shoes Home Living Wedding Party Toys Entertainment Art CollectablesCraft Supplies Tools si Vintage

Figura 35 Site web Etsy

Cel de-al treilea site care ofera servicii asemanatoare este Gifts 6 prezentat ın figura36 Acesta se focuseaza pe cadouri pentru diverse ocazii cum ar fi zilele de nastereCraciun diverse aniversari si alte evenimente la care se cumpara cadouri Pentru parteade recomandare se ofera posibilitatea de a efectua un test despre acel om caruia dorestisa ıi cumperi cadoul care are ca scop ıncadrarea omului respectiv ıntr-un profil si apoi

5httpswwwetsycom6httpswwwgiftscom

12

alegerea unor sugestii ce s-ar potrivi unei persoane cu acel tip de personalitate O primaıntrebare se refera la genul persoanei si ıntrebarea este daca cadoul este pentru o femeieun barbat o fetita sau un baietel Cea de-a doua ıntrebare se refera la marja de varsta ıncare se ıncadreaza acel om de exemplu pentru barbat optiunile sunt adolescent barbat ınjur de 30 de ani sau barbat ın varsta Cea de-a treia ıntrebare se refera la personalitateaomului Mai exact se fac sugestii pentru tipuri de lucruri ce i-ar putea placea unui omcare are trasaturile descrise ın primele doua ıntrebari De exemplu la barbati ın jur de30 de ani optiunile sunt ıi place sportul ıi place natura e aventurier ıi place golful ıiplace sa faca gratare sa serveasca bauturi sa gateasca sa animeze ıi place sa se ımbraceelegant este sef e entuziasmat de bere sau e un fan al sporturilor Iar ın final ın functiede raspunsurile date la ıntrebari se afiseaza sugestii de cadouri care se potrivesc oamenilorcu acel tip de personalitate

Figura 36 Site web Gifts

Nordstrom 7 care este prezentat ın imaginea 37 are o abordare similara avand pesite o multime de optiuni de filtrare a cadourilor Se pot cauta ın acest site cadouri pentrubebelusi cadouri de Craciun bijuterii pentru femei optiunile sunt multiple Acest lucruofera utilizatorilor sugestii pentru a le fi mai usor sa ıncadreze aceasta persoana ıntr-unanumit tip Iar dupa alegerea categoriei toate sugestiile de cadouri oferite de catre sitese ıncadreaza ın acel tip Ca avantaj al acestui site este ca ei ofera si serviciul de livrareal cadoului dupa cumparare oriunde ın lume Un dezavantaj al multor site-uri de genulacesta este ca ofera livrare doar ın zona sa apropiata

7httpsshopnordstromcomcgifts

13

Figura 37 Site web Nordstrom

14

Capitolul 4

Analiza si Fundamentare Teoretica

In acest capitol vor fi prezentate cerintele functionale ale lucrarii ımpreuna cucerintele non-functionale ale acesteia De asemenea va fi prezentata diagrama cazurilor deutilizare si vor fi prezentate mai ın detaliu cazurile de utilizare principale ale aplicatiei Incontinuare se va prezenta perspectiva tehnologica a proiectului si se vor explica deciziiletehnologice luate In final se va prezenta diagrama conceptuala a aplicatiei

41 Cerinte functionale

bull Posibilitatea autentificarii ın aplicatie si crearii unui profil propriu din care se potutiliza informatii si cu ajutorul caruia utilizatorul poate fi ıncadrat ıntr-un profil

bull Utilizatorii pot crea prietenii ca ıntr-o retea de socializare pentru a putea afla infor-matii despre prieteni si pentru a li se putea recomanda cadouri pentru acestia

bull Cu ajutorul informatiilor de la Facebook un utilizator poate fi notificat dinainte caurmeaza ziua de nastere a unuia din prietenii lui si sa i se ofere mai multe variantede cadouri potrivite pentru acesta Aceasta informatie o primeste cu suficient timpınainte pentru a nu fi surprins fara un cadou De la Facebook pe langa informatiiledespre data zilei de nastere sunt importante si varsta sau lucrurile care ıi plac uti-lizatorului Toate acestea ajuta la crearea profilului utilizatorului pe baza caruia serecomanda dupa aceea cadourile

bull De asemenea sistemul poate recomanda si un cadou pentru alt tip de evenimentdecat zi de nastere de genul cadou de Craciun cadou de nunta cadou pentru unnou-nascut etc

bull In aplicatie vor fi adaugate si diferite produse iar pentru a face mai usoara cumparareade cadouri se va putea face si comanda pe internet In momentul ın care un utilizatorface o noua comanda producatorii produselor comandate sunt ınstiintati de existentaacestei noi comenzi

15

bull Pentru persoanele la care pe profilul de Facebook este insuficient completat saupentru a putea cumpara cadouri pentru o persoana care nu are Facebook sau nuare cont ın aceasta aplicatie si despre care ın acest fel nu se cunosc nici un felde informatii se vor putea filtra cautarile pentru cadou printr-o serie de ıntrebaristandard Aceste ıntrebari vor putea creea un rdquomini-profilrdquo pentru acea persoanapentru ca sistemul sa poata recomanda cadouri

42 Cerinte non-functionale

bull Securitate sistemul nu raspunde cererilor decat atunci cand utilizatorul a fost au-tentificat ın aplicatie si are rolul necesar pentru a face acea cerere

bull Portabilitate aplicatia nu depinde de sistemul de operare pe care ruleaza De aseme-nea nu e dependenta de browserul folosit de utilizator

bull Disponibilitate sistemul ramane stabil ın fata erorilor si functioneaza la fel si dupaaparitia unei erori

bull Extensibilitate sistemul permite adaugarea sau modificarea unor componente atuncicand cerintele aplicatiei se modifica Pe langa asta e flexibila unor dezvoltari ulte-rioare

43 Cazuri de utilizare

In aceasta sectiune se vor prezenta actorii aplicatiei diagrama cazurilor de utilizaresi vor fi descrise cazurile de utilizare de baza ale fiecarui actor

Ca si actori aplicatia are patru tipuri de utilizatori

bull utilizator anonimbull clientbull producatorbull administrator

Aplicatia este conceputa ın asa fel ıncat ıntre actori este o relatie de mostenire Acestlucru presupune ca un actor are posibilitatea de a efectua tot ce putea cel dinaintea lui siceva ın plus Deci utilizatorii anonimi au cele mai putine permisiuni iar administratoriiau permisiuni totale Acest lucru se vede foarte clar si ın diagrama cazurilor de utilizaredin imaginea 41

In continuare vor fi prezentate cazurile de utilizare

1 recomandare cadouri2 adaugare produs3 modificare rol utilizator

16

Figura 41 Digrama cazurilor de utilizare

17

431 Recomandare cadouri

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unutilizator trebuie sa le urmeze pentru a primi recomandari de cadouri pentru un cunoscutsi pentru a efectua o comanda

Actorul principal

Orice utilizator al aplicatiei

Parti interesate si interese

Utilizatorul care doreste sa cumpere un cadou este interesat de a gasi un cadoupotrivit pentru cineva pe care ıl cunoaste

Producatorul care e interesat sa ısi poata vinde produseleUtilizatorul care primeste cadoul fiind interesat sa primeasca un cadou care sa i se

potriveasca si care sa ıi placa

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand utilizatorul porneste aplicatia11 Utilizatorul verifica daca are cont de Facebook si daca are urmeaza pasul 111

daca nu 22111 Utilizatorul se autentifica ın aplicatie cu ajutorul credentialelor de la

Facebook12 Utilizatorul deschide sectiunea de recomandare cadouri13 Utilizatorul completeaza formularul cu datele ce trebuie introduse pentru a primi

recomandari de cadouri pentru un prieten14 Utilizatorul poate fi satisfacut cu recomandarile primite si atunci urmeaza pasul

141 iar daca nu este atunci urmeaza cazul alternativ 23141 Utilizatorul adauga ın cosul de cumparaturi cadouri pe care doreste sa

le cumpere15 Utilizatorul cere sa ısi vada cosul de cumparaturi16 Utilizatorul poate sa se declare multumit de cosul de cumparaturi caz ın care

urmeaza pasul 161 sau poate sa aleaga cazul alternativ 24161 Utilizatorul aproba cosul de cumparaturi si accepta sa se faca comanda

17 Sistemul introduce ın baza de date comanda18 Utilizatorul va putea vedea la sectiunea comenzilor sale noua comanda si statusul

ei19 Sistemul notifica producatorul de aparitia noii comenzi110 Utilizatorul se dezautentifica din aplicatie

18

Use-Case EndUtilizatorul se va deconecta din aplicatie si o va ınchide

Figura 42 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueazaAcest flux poate aparea la orice pas211 Utilizatorul deschide sectiunea de recomandare cadouri212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca utilizatorul nu are cont de Facebook

19

Acest flux poate aparea la pasul 11221 Utilizatorul deschide pagina de Facebook222 Utilizatorul ısi face un cont pe pagina de Facebook si ısi completeaza

date despre el223 Utilizatorul revine la aplicatia de recomandare cadouri si ıncearca din

nou sa se autentifice ın aplicatie224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca utilizatorul nu e multumit de recomandariAcest flux poate aparea la pasul 14231 Utilizatorul sterge din cos cadourile pe care nu le mai doreste si revine

la pagina de recomandari232 Utilizatorul adauga alte cadouri ın cos233 Cazul de utilizare continua de la pasul 141

24 Flux-ul alternativ daca utilizatorul nu e multumit de produsele din cosul decumparaturi

Acest flux poate aparea la pasul 16241 Utilizatorul revine ınapoi la formularul cu introducerea datelor despre

beneficiarul cadoului242 Utilizatorul completeaza din nou datele243 Cazul de utilizare continua de la pasul 13

Preconditii

1 Utilizatorul trebuie sa aiba un cont de Facebook pentru a se putea autentifica ınaplicatie

2 Utilizatorul trebuie sa fie autentificat ın aplicatie pentru a putea face orice actiunedin acest caz de utilizare

3 Utilizatorul trebuie sa deschida sectiunea de recomandare cadouri pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noua comanda este salvata ın baza de date2 Comanda apare ın sectiunea de comenzi a utilizatorului ımpreuna cu statusul ei

curent3 Producatorul este notificat ca are o noua comanda

432 Adaugare produs

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unproducator trebuie sa le urmeze pentru a introduce un nou produs ın aplicatie

20

Actorul principal

Utilizatorii cu rol de producator sau cu rol de administrator

Parti interesate si interese

Producatorul care doreste sa introduca produsul nou ın aplicatie

Utilizatorii simpli care au o mai mare varietate de produse din care sa li se reco-mande cadouri

Figura 43 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo

21

Flux de evenimente

Use-Case Start

Cazul de utilizare ıncepe atunci cand producatorul porneste aplicatia

11 Producatorul verifica daca are cont de Facebook si daca are urmeaza pasul111 daca nu 22

111 Producatorul se autentifica ın aplicatie cu ajutorul credentialelor de laFacebook

12 Producatorul deschide sectiunea de adaugare produs

13 Producatorul completeaza datele necesare despre noul produs ımpreuna cu tipulde persoana si eveniment care i s-ar potrivi

14 Producatorul verifica daca este multumit de datele introduse si daca da urmeazapasul 141 daca nu 23

141 Producatorul efectueaza operatia de adaugare produs

15 Sistemul adauga un nou produs ın baza de date

16 Sistemul notifica producatorul ca noul produs a fost introdus cu succes

17 Producatorul se dezautentifica din aplicatie

Use-Case End

Producatorul se va deconecta din aplicatie si o va ınchide

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Producatorul deschide sectiunea de adaugare produs

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca producatorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Producatorul deschide pagina de Facebook

222 Producatorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Producatorul revine la aplicatia de recomandare cadouri si ıncearca dinnou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca Producatorul nu e multumit de datele introduse despreprodus

Acest flux poate aparea la pasul 14

231 Producatorul sterge datele gresite despre produs

232 Producatorul adauga alte date despre produs

233 Cazul de utilizare continua de la pasul 141

22

Preconditii

1 Producatorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Producatorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Producatorul trebuie sa aiba cont cu rol de rdquoproducatorrdquo sau rdquoadminrdquo pentru aputea face operatia aceasta

4 Producatorul trebuie sa deschida sectiunea de adaugare produs pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noul produs este salvat ın baza de date2 Produsul poate fi adaugat la recomandarile unui utilizator din acel moment

433 Modificare rol utilizator

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unadministrator trebuie sa le urmeze pentru a modifica rolul unui utilizator al aplicatiei

Actorul principal

Un utilizator al aplicatiei care are rol de administrator

Parti interesate si interese

Administratorul care doreste sa modifice rolul unui utilizatorUtilizatorul care doreste sa ısi schimbe rolul

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand administratorul porneste aplicatia11 Administratorul verifica daca are cont de Facebook si daca are urmeaza pasul

111 daca nu 22111 Administratorul se autentifica ın aplicatie cu ajutorul credentialelor de

la Facebook12 Administratorul deschide sectiunea de utilizatori13 Sistemul ıi returneaza administratorului utilizatorii care nu sunt administratori14 Administratorul modifica rolul utilizatorului din utilizator simplu ın producator

sau invers

23

15 Administratorul cere executarea modificarii

16 Sistemul executa modificarea iar ın caz de succes urmeaza pasul 161 si ın cazde eroare pasul 23

161 Sistemul notifica administratorul ca modificarea a fost efectuata cusucces

17 Utilizatorul se dezautentifica din aplicatie

Use-Case End

Administratorul se va deconecta din aplicatie si o va ınchide

Figura 44 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo

24

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Administratorul deschide sectiunea de utilizatori

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca administratorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Administratorul deschide pagina de Facebook

222 Administratorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Administratorul revine la aplicatia de recomandare cadouri si ıncearcadin nou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca sistemul returneaza o eroare la modificarea utilizatorului

Acest flux poate aparea la pasul 16

231 Sistemul returneaza un mesaj de eroare la modificarea utilizatorului

232 Aplicatia afiseaza mesajul de eroare administratorului

233 Cazul de utilizare continua de la pasul 15

Preconditii

1 Administratorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Administratorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Utilizatorul trebuie sa aiba cont cu rol de administrator pentru a putea efectuaorice actiune din acest caz de utilizare

4 Administratorul trebuie sa deschida sectiunea utilizatori pentru a putea ındeplinicerintele din cazul de utilizare

Postconditii

1 Noul rol al utilizatorului este salvat ın baza de date

2 La urmatoarea autentificare a utilizatorului acesta va observa ca interfata si maiprecis meniurile si actiunile care le poate face ıi vor fi diferite

25

44 Perspectiva tehnologica

441 Neo4j

Neo4j 1 este un sistem de gestionare a bazelor de date sub forma de graf dezvoltatde Neo4j Inc Descris de dezvoltatorii sai ca o baza de date tranzactionala compatibilacu ACID Neo4j este cea mai populara baza de date sub forma de graf dupa clasamentulDB-Engines

Baza de date Neo4j (ca si orice alta baza de date sub forma de graf) este foartediferita de o baza de date relationala cum ar fi MS Access SQL Server MySQL etcBazele de date relationale utilizeaza tabele randuri si coloane pentru stocarea datelor

Neo4j nu utilizeaza tabele randuri si coloane pentru stocarea sau prezentarea datelorci noduri si relatii

Neo4j este foarte potrivit pentru stocarea datelor care au multe relatii interconec-tate Acestea sunt de fapt aplicatiile ın care merita sa fie folosite De fapt bazele de datesub forma de graf cum este Neo4j sunt mult mai bune la tratarea datelor interconectatedecat bazele de date relationale

Acest lucru se datoreaza faptului ca modelul sub forma de graf nu necesita de obiceio schema predefinita Nu e nevoie sa se creeze structura bazei de date ınainte de a fiıncarcate datele asa cum se face la o baza de date relationala

Dar principalul motiv pentru care Neo4j este mai bun pentru datele relationalepentru acest tip de aplicatii este modul ın care permite crearea relatiilor Neo4j este con-struit ın jurul relatiilor si atunci nu este nevoie sa se configureze chei primare constrangerichei straine pentru a predetermina nodurile care pot avea o relatie si la ce date Cu Neo4jse poate adauga orice legatura ıntre orice nod ori de cate ori este nevoie

Neo4j are aceste calitati care nu se gasesc nici la celelalte baze de date NoSQLBazele de date non-relationale pe langa cele sub forma de graf sunt cele de tip coloanade tip document de tip cheie-valoare si de tip multi-model Nici unul din aceste tipuri nuau ca principala functionalitate maparea relatiilor si facilitatea interogarilor ıntr-o baza dedate cu multe relatii ıntre entitati

Generarea de recomandari personalizate este unul dintre cele mai frecvente cazuride utilizare a unei baze de date sub forma de graf Unele dintre principalele beneficii aleutilizarii grafurilor pentru a genera recomandari includ

- Performanta Lipsa indexurilor permite calcularea recomandarilor ın timp realasigurand ca recomandarea este ıntotdeauna relevanta si reflecta informatii actualizate

- Model de date Modelul de graf cu proprietati permite combinarea cu usurinta aseturilor de date din mai multe surse

Un alt avantaj al bazelor de date sub forma de graf Neo4j este faptul ca respectatoate principiile din modelul de consistenta ACID

Garantia data de principiile ACID este ca ofera un mediu sigur ın care sa functionezedatele Acronimul ACID reprezinta

1httpsneo4jcomuse-casesreal-time-recommendation-engine

26

bull Atomic Toate operatiile dintr-o tranzactie reusesc sau fiecare operatie este reluatabull Consistent La finalizarea unei tranzactii baza de date este solida din punct de

vedere structuralbull Izolat Tranzactiile nu se lupta una cu cealalta Accesul controversat la date este

moderat de baza de date astfel ıncat tranzactiile par sa se execute succesivbull Durabil Rezultatele aplicarii unei tranzactii sunt permanente chiar si ın cazul unor

defectiuniCand vine vorba de tehnologiile NoSQL cele mai multe baze de date sub forma de

graf (inclusiv Neo4j) utilizeaza un model de consistenta ACID pentru a asigura ca datelesunt stocate ın siguranta si ın mod consecvent

Am ales baza de date sub forma de graf ca optiune pentru stocarea datelor deoarecedin toate lucrarile si articolele citite a fost optiunea cea mai buna pentru un sistem derecomandare Deci acesta se mapeaza perfect pe cerintele functionale ale proiectului Sidin optiunile de baze de date sub forma de graf Noe4j a avut de departe cele mai multeavantaje ea fiind si cea mai utilizata

442 Cypher

Cypher 2 este un limbaj declarativ de interogare pentru bazele de date sub formade graf care permite interogarea si actualizarea rapida a datelor Cypher este un limbajrelativ simplu dar foarte puternic Interogarile foarte complexe ale bazei de date pot fiusor exprimate prin intermediul limbajului Cypher

Este conceput pentru a fi un limbaj de interogare uman Scopul lui principal este dea face interogarile mult mai simple si unele interogari care la bazele de date relationale nuerau posibile le face posibile Constructiile sale se bazeaza pe grafica si pe limba englezalucru care ajuta la scrierea mai intuitiva a interogarilor Este construit pentru a fi maiintuitiv pentru citire si nu neaparat pentru scriere

Cypher se bazeaza pe modelul Graph Property care ın plus fata de elementelegrafice standard ale nodurilor si muchiilor (numite relatii ın Cypher) adauga etichete siproprietati ca si concepte Nodurile pot avea zero sau mai multe etichete ın timp ce fiecarerelatie este de exact un singur tip Nodurile si relatiile au de asemenea zero sau mai multeproprietati

Chypher este limbajul de interogare folosit la bazele de date Neo4j deci este opti-unea implicita atunci cand se alege Neo4j

443 Maven

Maven 3 este un instrument de management software si de ıntelegere a proiectelorsoftware Pe baza conceptului unui model de obiect de proiect (POM) Maven poategestiona construirea raportarea si documentarea unui proiect printr-o informatie centrala

2httpsneo4jcomdevelopercypher-query-language3httpswwwjavatpointcommaven-tutorial

27

Obiectivul principal al lui Maven este acela de a permite unui dezvoltator sa ınte-leaga starea completa a efortului de dezvoltare ın cel mai scurt timp Avantajele Mavensunt

bull instalarea rapida a proiectului fara fisiere buildxml complicate doar un POMbull procesul de construire este standardizat pentru toate proiectelebull usor de ınvatat si de utilizatbull configurarea unui proiect este foarte rapidabull bine documentat

Am ales sa folosesc Maven deoarece este una din cele mai comune optiuni pentru aimporta librariile ıntr-un proiect si este si cel mai documentat Deci mereu cand esti pusın dificultate poti cauta pe internet sugestii

444 Spring Boot

Spring Boot 4 este un framework din cadrul Spring care ofera setari implicite pentruconfigurarea codului si adnotari pentru a lansa rapid proiecte noi ın executie Urmaresteabordarea rdquoConfigurarea defectiunilor vizionaterdquo pentru a evita un numar mare de linii decod pentru configuratii si pentru a ımbunatati procesul de dezvoltare

Avantajele Spring Boot sunt1 Face foarte usoara dezvoltarea de aplicatii bazate pe Spring cu Java sau Groovy2 Reduce timpul de dezvoltare si creste productivitatea3 Evita scrierea multor linii de cod adnotari si configurare XML4 Este foarte usor de integrat cu alte framework-uri din aceasi familie Spring cum ar

fi Spring JDBC Spring ORM Spring Data Spring Security etc5 Urmareste abordarea rdquoConfigurarea implicita a optiunilorrdquo pentru a reduce efortul

pentru dezvoltatori6 Ofera servere HTTP ıncorporate cum ar fi Tomcat Jetty etc pentru a dezvolta si

testa aplicatiile web foarte usor7 Ofera instrumentul CLI (Command Line Interface) pentru a dezvolta si testa apli-

catiile de tip rdquoSpring Bootrdquo (Java sau Groovy) din linia de comanda foarte usor sirapidAm ales ca optiune pentru partea de backend acest framework deoarece simplifica

foarte mult lucrurile Datorita lui un programator poate sa ısi concentreze mai tare energiape a construi proiectul din punctul de vedere al buissness-ului logic nu din punctul devedere al configurarilor necesare

445 Sencha CMD si ExtJS

Sencha CMD 5 este un instrument linie de comanda cross-platform care ofera multesarcini automate ın ciclul complet de viata al unei aplicatii ExtJS de la generarea unui

4httpswwwjavatpointcomspring-boot-tutorial5httpsdocssenchacomcmd

28

nou proiect la lansarea unei aplicatii ın productie

Sencha Cmd ofera o colectie de caracteristici puternice pentru economisirea timpu-lui care functioneaza ımpreuna cu Sencha ExtJS si Sencha Touch

Ext JS 6 este un framework pur JavaScript pentru construirea de aplicatii webinteractive cross-platform utilizand tehnici precum scripting Ajax DHTML si DOM

Avantajele framework-ului ExtJS sunt

1 Documentatia Extjs este foarte cuprinzatoare si bine ıntretinuta2 Aspectul cheie al bibliotecii EXTJS este suportul de tip cross-browser3 Framework-ul ExtJS ofera o multitudine de elemente UI Aceste elemente includ

forme casete de dialog file arbori si tabele4 Framework-ul ExtJS include suport pentru implementarile Ajax5 ExtJS ofera performante excelente Framework-ul este complet orientat spre obiecte

si este extensibil asta pentru ca este scris ın JavaScript

Pentru partea de frontend se foloseste framework-ul ExtJS deoarece are o arhitec-tura ce se mapeaza foarte bine pe proiectele de frontend si anume arhitectura bazata pecomponente Aceasta face ca ın proiect codul sa fie mult mai organizat si procesul dedezvoltare al proiectului sa fie mult mai scurt prin identificarea mai usoara a erorilor

446 Facebook API(Graph API)

Graph API 7 este modul principal de a pune date ın platforma Facebook si de aobtine date din platforma Facebook Este un API bazat pe HTTP pe care aplicatiile ılpot utiliza pentru interogarea datelor pentru a introduce postari noi pentru gestionareaanunturilor sau pentru a ıncarca fotografii

Este denumit Graph API dupa ideea unui rdquograf socialrdquo - o reprezentare sub formade graf a informatiilor de pe Facebook Este compus din

bull noduri - ın esenta obiecte individuale cum ar fi un utilizator o fotografie o paginasau un comentariu

bull muchii - conexiuni ıntre o colectie de obiecte si un singur obiect cum ar fi fotografiilede pe o pagina sau comentariile de la o fotografie

bull campuri - date despre un obiect cum ar fi ziua de nastere a unui utilizator saunumele paginii

De obicei se utilizeaza noduri pentru a obtine date despre un anumit obiect se uti-lizeaza muchii pentru a obtine colectii de obiecte legate de un singur obiect si se utilizeazacampurile pentru a obtine date despre un singur obiect sau mai multe obiecte dintr-ocolectie

Am folosit Facebook API ca solutie pentru a ımbunatati problema de rdquocold startrdquopentru ca este singurul site pe care marea majoritate a oamenilor au cont si salveazalucrurile care le plac Deci se potrivea perfect peste nevoile aplicatiei mele

6httpdocssenchacomextjs6207httpsdevelopersfacebookcomdocsgraph-api

29

447 Git

Git 8 este un sistem de control a versionarii pentru urmarirea modificarilor ın fisierelede pe computer si coordonarea activitatii asupra acestor fisiere ın randul mai multor per-soane Este utilizat ın principal pentru gestionarea codului sursa ın dezvoltarea de softwaredar poate fi folosit pentru a urmari schimbarile ın orice set de fisiere

Avantaje ale Git

bull Modelul distribuit numai ceea ce se doreste se face publicbull Branching-ul si merging-ul sunt usoarebull Fluxul de lucru este flexibilbull Integritatea datelor este asigurata Deoarece GIT utilizeaza arbori SHA1 coruperea

datelor din motive externe poate fi usor detectatabull Rapid Git este foarte rapid chiar si ın comparatie cu alte sisteme de control a

versionarii

Am folosit Git pentru a avea la proiect un back-up ın caz ca se ıntampla ceva cuproiectul salvat pe calculator

45 Arhitectura conceptuala

In figura 45 este prezentata arhitectura conceptuala a sistemului Acesta este ım-partit ın doua mari parti backend-ul si frontend-ul care comunica ıntre ele si ısi trimitinformatii

Se poate observa ca baza de date este de tip graf mai exact Neo4j si comunica cubackend-ul pentru a putea lucra cu datele stocate Backend-ul este structurat pe nivelefiecare cu un diferit rol si care trebuie parcurs pentru a procesa datele din interfata ınbaza de date Cele trei nivele sunt cel de Repository cel de Service si cel ControllerToate interogarile venite din interfata utilizator ajung ın nivelul de Controller Dupa ceinterogarile trec de securitatea sistemului ajung ın nivelul de Service Acolo se proceseazasi se afla partea de logica a aplicatiei Pentru a interactiona cu baza de date din Servicese apeleaza metodele din nivelul de Repository

In continuare backend-ul comunica prin protocolul HTTP cu interfata grafica cucare interactioneaza clientii aplicatiei Interfata este scrisa ın Ext JS si are o parte de Viewsi o parte de Controller care este cea care comunica cu backend-ul

Pentru partea de autentificare sistemul interactioneaza cu API-ul de la Facebookde la care ia dupa autentificare un access token Cu ajutorul acestuia ia dupa aceea datelenecesare pentru a putea crea un profil utilizatorului

8httpsguidesgithubcomintroductiongit-handbook

30

Figura 45 Arhitectura conceptuala

31

Capitolul 5

Proiectare de Detaliu siImplementare

In acest capitol vor fi prezentate detalii de implementare ale sistemului de recoman-dare incluzand o ımpartire al acestuia ın componentele care ıl cuprind

Obiectivul este de a prezenta arhitectura si modul de implementare al aplicatieipe baza datelor descoperite ın studiul bibliografic de la capitolul trei si cu tehnologiilehotarate la capitolul patru Pe langa asta va fi prezentata si structura bazei de date sideciziile luate pentru securitatea aplicatiei

51 Arhitectura sistemului

Din punctul de vedere al arhitecturii aplicatia se poate considera ca este alcatuitadin patru mari componente

1 API-ul de la Facebook2 Aplicatia client care reprezinta interfata grafica a aplicatiei3 Aplicatia server adica backendul aplicatiei si partea ın care se afla partea de rdquobusiness

logicrdquo4 Baza de date

Partea componenta reprezentata de API-ul de la Facebook este doar o componentacu care aplicatia se integreaza si pe care aceasta o foloseste In interactiunea cu ea interfatada o cerere de autentificare apare o fereastra de la Facebook ın care utilizatorul introducecredentialele de la API-ul de Facebook se primeste ınapoi un access token si cu ajutorulacestuia face o cerere pentru a primi datele personale ale utilizatorului pentru creeareaprofilului utilizator

Urmatoarea parte a aplicatiei este interfata utilizator frontend-ul care reprezintapartea cu care utilizatorul interactioneaza si locul unde ıi sunt afisate informatiile

Cererile din interfata ajung ın a treia parte componenta a sistemului partea deserver adica backend-ul aplicatiei Acolo toate cererile sunt citite si procesate iar raspun-

33

sul lor este trimis la interfata utilizator Aceasta este partea care reprezinta rdquogandireardquoaplicatiei Aceea este componenta care face legatura ıntre cererile utilizatorului din inter-fata si datele stocate ın baza de date

Ultima componenta a aplicatiei o reprezinta baza de date care are ca rol sa stochezedatele despre utilizatori produse si comenzi Ea este o baza de date sub forma de grafde tipul Neo4j Acolo se salveaza entitatile aplicatiei sub forma de noduri si dependenteleıntre acestea sub forma de relatii ıntre aceste noduri

Figura 51 Diagrama de rdquodeploymentrdquo

In figura 51 este prezentata diagrama de rdquodeploymentrdquo a sistemului cu cele patrucomponente ale sistemului Aplicatia client comunica cu API-ul de la Facebook prin pro-tocolul securizat HTTPS cu backend-ul prin protocolul HTTP iar backend-ul cu baza dedate prin JDBC

Aplicatia a putut fi ımpartita ın aceste componente separate deoarece fiecare dintreele poate functiona independent de celelalte comunica cu ele doar prin mesaje Din acestmotiv locul unde ruleaza acestea pot sa fie pe servere diferite In plus daca aplicatiaar fi pusa pe servere pentru utilizatori ar putea fi mai multe servere pe care ruleaza ocomponenta si prin rdquoload balancingrdquo sa se trimita cererile ımpartite ıntre ele

Cum astfel componentele nu depind foarte mult unele de altele si pot rula faraa le interesa de unde le sunt trimise cererile este arhitectura cea mai corecta deoarecedefectarea sau o posibila eroare la una din ele nu o influenteaza cu nimic pe o alta Dacatoate ar rula pe acelasi server o eventuala defectiune a acestuia ar ınsemna o defectiune aıntregului sistem Insa daca exista mai multe noduri si se afla pe servere diferite pot doartoate cererile sa fie redirectionate spre un nod care functioneaza si aplicatia sa functionezepentru clienti la fel ca ınainte

34

Un alt avantaj al arhitecturii ar fi faptul ca la o lansare viitoare catre clienti se poatelansa doar componenta la care s-au facut modificari De asemenea aplicatia ar putea aveape viitor si o componenta mobila Iar cum serverul e independent poate fi acelasi serverfolosit de o alta aplicatie client

511 Arhitectura componentei backend

Arhitectura backend-ului este si ea ımpartita ın mai multe pachete pentru o maibuna structura si pentru o cat mai mica dependenta ıntre diversele componente Astfelcuplarea este minima ıntre clase si eventualele modificari ulterioare pot fi mai usor defacut

Serverul a fost implementat ın Java cu ajutorul framework-ului Spring Boot iarmediul de dezvoltare folosit a fost Intellij IDEA

Din punctul de vedere al ımpartirii arhitectura serverului aplicatiei este structurataın patru pachete si o clasa ın afara acestora Acea clasa este rdquomainrdquo-ul aplicatiei este parteacare trebuie rulata pentru a porni serverul Din cauza ca este o aplicatie Spring Boot si nuuna String singura adnotare necesara pentru a sti ca aceea este clasa rdquoradacinardquoa aplicatieieste SpringBootApplication

Cele patru pachete ale serverului sunt1 Cel de domeniu (domain) cu clasele POJO care reprezinta entitatile din baza de

date2 Cel de rdquomagazierdquo (repositories) care este cel care face direct actiunile ın baza de date3 Cel de serviciu (services) ın care se afla partea de logica a ıntregii aplicatii4 Cel de web ın care se afla clasele de rdquocontrollerrdquo

Figura 52 Diagrama de pachete pentru backend

35

Ca si dependente nivelul de web ıl foloseste pe cel de seviciu cel de serviciu ılfoloseste pe cel de rdquomagazierdquo iar clasele din pachetul de domeniu sunt folosite ın toatecelelalte pachete

In continuare voi prezenta pe rand fiecare nivel al serverului adica fiecare pachet

Figura 53 Diagrama de clase pentru pachetul rdquodomainrdquo

36

Nivelul de domeniu (domain) este alcatuit ın primul rand din clasele care suntentitati ın baza de date Acestea sunt reprezentate de toate clasele ce stocheaza informatiidespre utilizatori si despre produse si comenzi Pe langa informatiile personale despre unutilizator de genul numelui email-ului sau data nasterii care sunt salvate ın entitateapersoana se stocheaza despre utilizator ın clase diferite informatii de genul locului undelocuieste locul unde a copilarit locurilor unde a facut scoala locului unde lucreaza sau celmai important pentru aplicatia aceasta lucrurilor care ıi plac In afara acestor informatiidespre utilizatori sunt si clase cu informatiile despre prieteni despre produse sau desprecomenzi

Din cauza faptului ca aplicatia este de tipul unei retele sociale ın care exista prieteniiıntre persoane exista dependente ıntre toate entitatile aplicatiei Acesta este si motivulpentru care am ales baza de date sub forma de graf pe care sa se mapeze toate acesteentitati sub forma de noduri si toate aceste dependente sub forma de relatii

In pachetul de domeniu se afla si trei subpachete Unul dintre ele este pentruclasele folosite pentru a trata erorile aplicatiei In interiorul acestui pachet se afla douaclase pentru eroare si o exceptie cea folosita ın cazul ın care nu se gaseste ceea ce doresteutilizatorul Pe langa asta este clasa care are ca obiect raspunsul dat de sistem ın cazulunei erori la server Aceasta contine ın interiorul sau pe langa codul erorii si detalii despreeroarea trimisa Aceasta lista de detalii e reprezentata de obiectele de tipul celei de-a treiaclase din pachetul acesta

Celelalte doua subpachete aflate ın acest nivel sunt cele care contin clasele specialede cerere sau raspuns care au ajutat la maparea acestora mai bine In multe cazuri nua fost necesara trimiterea la interfata utilizator a tuturor informatiilor stocate despre oentitate si de aceea am ales sa creez ın aceste cazuri un obiect auxiliar care sa fie folositpe post de raspuns

Figura 54 Diagrama de clase pentru pachetul rdquorepositoriesrdquo

37

Cel de-al doilea nivel al aplicatiei backend este cel de rdquomagazierdquo (repositories) carecontine doar interfete de tip rdquoRepositoryrdquo

Aceste interfete sunt cele care fac operatiile directe asupra entitatilor din baza dedate

Unele interfete doar extind interfata care are deja implementate metodele CRUDsi din acest motiv nu au metode suplimentare iar altele au si metode ın plus care au carol sa execute interogari mai complexe asupra bazei de date In acele metode se pot scrieinterogarile ın Cypher pentru a putea primi informatii despre mai multe noduri sau desprerelatiile dintre acestea sau si pentru a returna doar anumite rezultate care ındeplinescanumite conditii In felul acesta a fost implementata si cererea de oferire a recomandarilorIn acel caz sistemul returneaza produsele care au ın descriere unul din lucrurile care se aflaın lista de obiecte sau servicii primite de la Facebook ca ıi plac utilizatorului

Nivelul de rdquoRepositoryrdquo este folosit direct de cel de-al treiea nivel cel de servi-ciu Acesta este nivelul la care se executa logica aplicatiei unde se comanda modul defunctionare al ıntregii aplicatii

Figura 55 Diagrama de clase pentru pachetul rdquoservicesrdquo

Pe acest nivel ajung toate cererile din server dupa ce trec de verificarile de securitateIn acest pachet se afla si clasa de securitate care face verificarile necesare In aceasta clasaexista o metoda ce se apeleaza la prima cerere cea de salvare a datelor de la Facebookdespre utilizator si care codifica id-ul utilizatorului si ıl trimite pe raspuns ınapoi interfeteiPe langa asta ın acea clasa se afla si o metoda care verifica faptul ca id-ul codificat esteal unui utilizator cu rol corespunzator pentru a face acea cerere

In plus ın acest pachet se afla si toate celelalte clase care fac diverse operatii pedatele din baza de date si dau raspunsuri cererilor din interfata Aici se afla logica care

38

comanda actiunile asupra utilizatorilor asupra prietenilor acestora asupra produselor siasupra comenzilor

Ultima clasa a acestui nivel este cea care se ocupa de trimiterea de email-uri Incazul ın care se face o noua comanda de catre un utilizator toti producatorii produselor depe comanda sunt notificati despre produsele lor pe care le doreste utilizatorul Din serviciulde comanda se apeleaza serviciul de email pentru fiecare producator din lista celor care auproduse care se afla pe lista comenzii utilizatorului

Ultimul si cel mai aproape de interfata utilizator este nivelul de web Acolo se aflatoate clasele de rdquoControllerrdquo ale aplicatiei server

Figura 56 Diagrama de clase pentru pachetul rdquowebrdquo

Toate cererile din interfata utilizator ıncearca sa se mapeze pe rutele declarate ınclase pentru a fi procesate ın metoda corespunzatoare Toata aceasta parte este foarteusor de implementat si mai ales foarte lizibil pentru programatori datorita adnotarilor dinJava Cu ajutorul acestora trebuie doar specificat care este numele URL-ului cererii careeste tipul de obiect asteptat si daca se trimite ca rdquoquery stringrdquo pe URL sau ın interiorulcorpului cererii si tipul raspunsului Pentru fiecare cerere care nu este apelata ın parteaneautentificata a utilizatorului primul lucru care se apeleaza este metoda de securitatepentru a verifica rolul si id-ul utilizatorului Daca din punctul de vedere al securitatii totuleste ın regula se apeleaza metoda corespunzatoare din pachetul de serviciu

39

O singura clasa este diferita de restul ın pachetul de controller si aceea este clasa deeroare Acolo se mapeaza erorile aparute ın timpul cererii si se trimite ınapoi ın interfatagrafica un raspuns cu cod de eroare specific nu numai 500 Generic Application Exceptioncum ar trimite fara aceasta clasa si cu detalii despre motivul aparitiei erorii

Datorita folosirii adnotarilor din java nu a fost necesara folosirea unor rdquodesignpatternrdquo-uri ın sistem De exemplu pentru a folosi ın nivelul de web ceva din pachetulde servicii trebuia doar acel obiect sa aiba adnotarea Autowired si se ınlocuieste atatfolosirea rdquodesign patternrdquo-ului Singleton cat si a celui de Factory Acel obiect nu trebuiecreat sau initializat se face asta implicit datorita adnotarii si de asemenea este folositapeste tot aceeasi instanta

In concluzie toate cererile venite din interfata grafica ajung ın nivelul de rdquocontrollerrdquode unde sunt trimise la cel de rdquoservicerdquopentru a fi procesate si facute eventualele modificarinecesare ın baza de date ca apoi raspunsul sa fie trimis ınapoi spre aplicatia client pentruafisare

512 Arhitectura componentei frontend

A doua componenta implementata a sistemului este aplicatia client frontend-ulAceasta a fost scrisa ın Java Script cu ajutorul framework-ului Ext JS compilarea

se face cu ajutorul Sencha CMD si mediul de implementare a fost IntelliJ IdeaCu ajutorul framework-ului Ext JS se scriu componente care apoi se initializeaza

unele pe altele Aplicatia porneste cu fisierul Applicationjs care este un fel de rdquomainrdquopentru aplicatie Aceasta initializeaza alte componente care la randul lor includ altecomponente si tot asa Structura poate fi foarte usor comparata cu una arborescenta dinacest punct de vedere

Framework-ul a fost creat sa functioneze ın felul acesta pentru ca scopul componen-telor este sa fie scrise ın asa fel ıncat sa poata pe viitor sa fie utilizate din nou Una dindorintele majore ın programare tot timpul este de a se scrie cod ıntr-o maniera ın care safie cat mai reutilizabil Iar framework-ul Ext JS exact asta ıncearca

Arhitectura aplicatiei client se gaseste ın figura 57 si este la randul ei ımpartita ınpachete ca si cea de server Similar cu pachetul de rdquodomainrdquo de la aplicatia de backendeste pachetul rdquomodelrdquo al interfetei utilizator Aici sunt rdquoclaserdquo care sunt simple POJO sicare sunt apoi folosite ın nivelele urmatoare Sunt mai putine decat clasele din rdquostorerdquodeoarece daca raspunsul de la server nu trebuie procesat nu sunt necesare se pot mapadirect obiectele din rdquostorerdquo pe componentele interfetei utilizator

Urmatorul nivel este cel pe care se afla clasele de rdquostorerdquo Acestea sunt cele careexecuta cererea spre backend si face legatura ıntre client si server Daca are o clasa derdquomodelrdquodeclarata atunci populeaza acel obiect cu datele primite de la server iar ın cazul ıncare nu este declarat un model se trimit datele exact asa cum s-au primit la nivelul urmatorde rdquoviewrdquo Acest nivel seamana din punct de vedere al functiei cu cel de rdquorepositoryrdquo de laaplicatia server deoarece ambele au rol de legatura Aceea facea legatura ıntre aplicatiesi baza de date si aceasta face legatura ıntre aplicatia client si aplicatia server

40

Figura 57 Diagrama de clase pentru aplicatia web

Cel de-al treilea pachet al aplicatiei este cel de rdquoviewrdquo In acest pachet se afla claselecare alcatuiesc partea vizuala a aplicatiei La randul ei si aceasta este alcatuita tot dincomponente Aplicatia deschide ın primul rand Main-ul care determina aparitia paginii deHome si afisarea ın meniu a optiunilor posibile ın functie de autentificare si rol Clasele deaici se executa de fapt la deschiderea aplicatiei fiind rdquosingle page applicationrdquo si tot atuncise ıncarca pe pagina componentele Ca si arhitectura a pachetului acesta este ımpartit larandul sau ın subpachete Pentru o mai buna organizare exista patru subpachete cateunul pentru fiecare tip de utilizator In felul acesta toate rdquoviewrdquo-urile care sunt specificeunui utilizator cu un anumit rol se afla ın acelasi subpachet

Cele patru subpachete existente ın pachetul rdquoviewrdquo sunt

1 Pachetul rdquomainrdquo care cuprinde rdquoviewrdquo-urile care se afla ın partea neautentificata aaplicatiei

2 Pachetul rdquoclientrdquo continand rdquoviewrdquo-urile pe care le poate accesa un utilizator simplu3 Pachetul rdquoproducerrdquo specific actiunilor unui utilizator care are rol de producator4 Pachetul rdquoadminrdquo care contine toate rdquoviewrdquo-urile care ıi apar unui utilizator care este

administrator al aplicatiei

Ultimul pachet si nivel al aplicatiei client este cel de rdquocontrollerrdquo In acest pachet

41

se afla clasele care fac actiunile din interfata grafica In timp ce pachetul rdquoviewrdquo continedoar partea grafica a aplicatiei adica modul ın care aceasta trebuie sa arate pachetulrdquocontrollerrdquo contine actiunea acestora modul ın care aplicatia trebuie sa functioneze

Ca si arhitectura si acest pachet a fost ımpartit la randul lui tot ın cele patrusubpachete ca si pachetul rdquoviewrdquo adica rdquomainrdquo rdquoclientrdquo rdquoproducerrdquo si rdquoadminrdquo In pluspentru a fi usor de gasit ce clasa de rdquocontrollerrdquo apartine carui rdquoviewrdquo am ales ca cele douasa aiba acelasi nume In felul acesta daca se doreste sa se gaseasca actiunile unui rdquoviewrdquose poate cauta dupa o clasa cu acelasi nume ın pachetul rdquocontrollerrdquo Numarul claselor dinacest pachet este mai mic decat cel al claselor din rdquoviewrdquo deoarece nu toate paginile dininterfata au actiuni suplimentare Daca singura actiune este ıncarcarea paginii cu date dela server adica doar o actiune simpla de GET datele se ıncarca cu ajutorul rdquostorerdquo-ului laıncarcarea paginii si nu este necesara nici o actiune suplimentara Paginile pe care se potface si actiuni de alt gen sau se deschid noi ferestre au nevoie de clase de rdquocontrollerrdquo

In concluzie arhitectura aplicatiei client este una bazata pe componente care ıncearcasa foloseasca cat mai multe clase reutilizabile

52 Structura bazei de date

Baza de date a aplicatiei este de tip graf de tipul Neo4j Pentru utilizare exista unprogram numit Neo4j ce trebuie instalat Acest program are si o interfata grafica ın carese pot vizualiza datele sub forma grafica si ın care se pot scrie de asemenea si interogariın limbajul acestei baze de date adica Cypher

Fiind o baza de date sub forma de graf datele stocate sunt salvate ın structurade date sub forma de noduri si relatii Entitatile din pachetul de domeniu din aplicatiabackend se gasesc ın baza de date sub forma unor noduri iar dependentele dintre nodurise mapeaza ın baza de date sub forma unor relatii Un element diferit fata de alte tipuride baze de date este faptul ca pe relatiile dintre noduri se pot salva atribute cum este ınaplicatie cazul pentru prieteniile dintre persoane In cazul acestora pe relatia dintre nodurise salveaza daca prietenia a fost sau nu acceptata

Pentru fiecare clasa POJO din aplicatia server clasa ce are doar metodele get si setsi se afla ın pachetul domain exista cate un tip de nod diferit ın baza de date cum estesi marcat ın diferite culori ın figura 58 Fiecare tip de nod are atributele proprii care potlua valori sau pot fi nule Iar fiecare obiect din Java reprezinta un nod diferit ın baza dedate

Neo4j a fost cea mai buna optiune pentru baza de date pentru ca aplicatia poate ficonsiderata o retea sociala Acest lucru se datoreaza relatiilor de prietenie dintre persoanesi a multiplelor relatii ıntre noduri Toate nodurile se afla ın acceasi componenta conexadeci nu exista noduri izolate care sa nu aiba nici o legatura cu nici un alt nod

Datorita acestei structuri a bazei de date este posibila implementarea cererii derecomandare ca o simpla interogare ın baza de date aceasta fiind cea mai simpla metodade implementare a unui sistem de genul acesta una mult mai complexa ar fi fost un

42

algoritm de ınvatare care sa ınvete tipare ale utilizatorilor si sa recomande cadouri pe bazaacestor informatii

Figura 58 Diagrama bazei de date pentru doi utilizatori

Un alt avantaj al acestui tip de baza de date este faptul ca datele nu sunt duplicateın baza de date Spre exemplu daca mai multi utilizatori au ca locatie acelasi oras nu secreaza cate un nod cu acea locatie de mai multe ori ci acel unic nod va avea cate o relatiecu fiecare utilizator care are ca locatie acel oras

In concluzie structura bazei de date a fost aleasa ın acest fel datorita tipului apli-catiei adica asemanatoare cu o retea sociala si datorita implementarii simple a unui sistemde recomandare pe o asemenea baza de date

53 Fluxul pentru diferite operatii

Pentru aplicatie cele mai importante cazuri de utilizare sunt salvarea informati-ilor despre utilizator primite de la Facebook pentru crearea unui profil si recomandareacadourilor pentru un utilizator al aplicatiei Din aceasta cauza cele doua cazuri de utilizarevor fi prezentate mai ın detaliu ın continuare

43

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 8: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

Capitolul 2

Obiectivele Proiectului

In acest capitol se va prezenta obiectivul principal al lucrarii cel de la care a pornittoata ideea proiectului Apoi ın continuare se vor prezenta obiectivele secundare alepoiectului care au dus la modul ın care a fost acesta implementat

21 Obiectivul principal

Scopul principal al acestui proiect consta ın construirea unui sistem de recomandarecare sa ajute utilizatorii sa poata sa cumpere cadouri pentru cunoscuti ıntr-un mod multmai eficient Sistemul va fi o aplicatie web care va avea utilizatori ce se vor putea auten-tifica si dupa stabilirea unui profil propriu cunoscutii rudele sau prietenii vor putea saprimeasca sugestii de cadouri exact pentru acea persoana Pentru cadouri vor fi introdusede catre producatori diverse obiecte si servicii In felul acesta tot procesul de cumparare alunui cadou devine mult mai usor pentru persoana care ıl cumpara si cadourile devin multmai utile pentru cei care le primesc

22 Obiective specifice

Obiectivele specifice care se va urmari sa fie atinse ın cadrul acestui proiect sunturmatoarele

bull Studierea mai multor tipuri de baze de date de la cele relationale la cele No SQLsi analizarea lor pentru a stabili care este cea mai potrivita pentru un sistem derecomandare de acest gen

bull Studierea despre diferitele tipuri de sisteme de recomandare de la cele de bazaadica filtrare bazata pe continut si filtrare colaborativa la combinatia dintre eleadica sistem de recomandare hibrid pana la cele mai putin folosite adica pe bazademografica bazata pe cunostinte sau bazata pe utilitate Iar dupa aceea alegereacelei mai potrivite metode pentru un sistem de recomandare cadouri

3

bull Intelegerea conceptului de rdquocold startrdquo la sisteme de recomandare ca problema a aces-tora si gasirea unor solutii care ar putea sa ınlature sau cel putin sa ımbunatateascaaceasta problema

bull Documentarea despre diferite metode de construire a unui profil al utilizatorului sidin aceste metode alegerea celei mai potrivite din punct de vedere al timpului care ıitrebuie sistemului pana cand rdquoınvatardquo suficiente lucruri despre utilizator ıncat poateface recomandari corecte

bull Pe baza tuturor cunostintelor acumulate ın urma studiului construirea unei aplicatiiweb ca demonstratie a alegerilor facute

4

Capitolul 3

Studiu Bibliografic

Obiectivul acestui capitol este prezentarea conceptelor teoretice la baza carora staacest proiect Vor fi prezentate concepte precum modul de functionare al sistemelor derecomandare tipurile de sisteme de recomandare abordarea celor de la Netflix asupradomeniului Neo4j ca solutie pentru un sistem de recomandare utilizarea unei retele socialepentru crearea profilului unui utilizator si reteaua Facebook ca exemplu de astfel de reteaiar ın final solutii similare

31 Modul de functionare al sistemelor de recoman-

dare

Un sistem de recomandare este o tehnologie implementata ın situatiile ın care ar-ticole (produse filme evenimente) sunt recomandate utilizatorilor (clienti vizitatori uti-lizatori de aplicatii cititori) sau invers Numarul mare al utilizatorilor acestor aplicatiieste ceea ce face ca problema sa fie dificila si costisitoare de rezolvat

Motoarele de recomandare sunt ın esenta instrumente de filtrare a datelor careutilizeaza algoritmi si date pentru a recomanda cele mai relevante elemente unui anumitutilizator [9] Sau ın termeni simpli nu sunt altceva decat o forma automatizata a unuirdquovanzator ıntr-un magazin de hainerdquo Lui i se cere un produs si el nu numai ca arata acelprodus dar si altele asemanatoare pe care le-am putea cumpara

Un sistem de recomandare are trei faze de baza dupa cum este prezentat si ındiagrama 31 pe baza carora functioneaza Prima faza este cea de colectare a datelorSistemele de recomandare se bazeaza mereu pe date anterioare deci faza de ınceput ıncare acumuleaza informatii este esentiala si de multe ori o problema foarte grea de rezolvatAceasta problema se mai numeste si rdquocold startrdquo Problema este reprezentata de faptul caun utilizator nou al unei aplicatii nu are informatii stocate despre el sau despre activitatealui fiind nou Iar sistemele de recomandare nu pot sa stie de fapt ce ıi place lui decat dupace utilizeaza o perioada aplicatia De multe ori solutia adusa de oameni pentru aceastaproblema este un chestionar de ıntrebari adresat utilizatorului care sa ıl poata face sa se

5

Figura 31 Fazele unui sistem de recomandare1

ıncadreze ıntr-un tipDe fapt din aceasta cauza sistemele de recomandare devin tot mai bune si mai

exacte cu cat sunt folosite mai mult deoarece sunt stocate tot mai multe informatii despreutilizator

Cea de-a doua faza a unui sistem de recomandare este cea de ınvatare Acoloaplicatia trebuie sa stocheze datele despre utilizator si trebuie la urmatoarea recomandaresa se bazeze pe cele dinainte si ın functie de ele sa o faca Acest lucru poate fi realizat fiedirect pe baza setului de date colectat ın faza de colectare a informatiilor care ar puteafi bazat pe memorie sau bazat pe model fie prin activitatile utilizatorului care au fostobservate

A treia faza este cea de recomandare propriu-zisa ın care doar utilizatorul facecererea de recomandari si acestea ıi sunt trimise

32 Tipuri de sisteme de recomandare

In continuare ca studiu bibliografic au fost tipurile sistemelor de recomandare [11]Ca si teorie sunt mai mute tipuri de sisteme de recomandare si o reprezentare graficaa acestor tipuri este prezentata ın figura 32 Cea mai de baza ımpartire este ın douacategorii recomandari bazate pe continut si recomandari bazate pe filtrare colaborativa

Filtrarea bazata pe continut creeaza un profil de utilizator bazat pe o metoda deınvatare pentru a determina elementele pe care un anumit utilizator le-ar dori De exemplusite-ul poate utiliza un sistem de cuvinte cheie care sugereaza articole cu cuvinte cheiesimilare ın descrierea unui element pe care utilizatorul l-a cumparat anterior

Recomandarile bazate pe filtrare colaborativa se inspira din similaritatile cu ceilaltiutilizatori Gasesc utilizatori asemanantori cu cel pentru care se face recomandarea pebaza actiunilor din trecut despre aceia si se recomanda lucruri care le plac celorlalti Acesttip de recomandare se potriveste perfect cu recomandarile de filme Acolo un om cu gusturi

1httpswwwsciencedirectcomsciencearticlepiiS1110866515000341

6

asemanatoare va putea sa recomande cel mai bine un alt film unui prieten Cea mai simplaimplementare pentru asa ceva este sub forma unei matrici cu spatii goale ın locurile undenu se cunoaste informatie

Pe langa aceste tipuri de recomandari mai sunt si altele dar care nu sunt folosite lafel de des

Figura 32 Tipurile sistemelor de recomandare2

In filtrarea bazata pe criterii demografice se fac recomandari catre utilizatori pebaza informatiilor lor demografice Sistemul va sugera elemente care au fost selectate dealti utilizatori care se ıncadreaza ın acelasi profil demografic

Filtrarea bazata pe utilitate se bazeaza pe utilitatea pe care utilizatorul o va obtinede la produs Poate include lucruri precum fiabilitatea si disponibilitatea vanzatoruluipentru a se asigura ca recomanda produse usor de obtinut de catre utilizator

Filtrarea bazata pe cunostinte recomanda selectii pe baza preferintelor si modelelorde cumparare cunoscute despre utilizator Intrucat sistemul va sti ce a cumparat con-sumatorul ın trecut acesta poate face recomandari ın functie de ceea ce ar putea satisfaceaceste nevoi ın viitor

Filtrarea hibrida combina doua sau mai multe tehnici de recomandare diferite pentrua crea un sistem de recomandare mai detaliat

2httpswwwsciencedirectcomsciencearticlepiiS1110866515000341f0005

7

33 Abordarea Netflix

Foarte multa cercetare ın domeniul sistemelor de recomandare a fost influentata decei de la Netflix

Figura 33 Tipuri de recomandari oferite de Netflix3

Netflix este un serviciu de streaming care permite clientilor sa vizioneze o gamalarga de emisiuni TV filme documentare si multe altele pe mii de dispozitive conectatela internet

In figura 33 este o imagine a site-ului cu tipurile diferite de recomandari pe careacestia le ofera

Cheia succesului Netflix consta ın capacitatea lor de a anticipa ceea ce le placeutilizatorilor motiv pentru care fiecare doua din trei ore de vizionare ın Netflix provin dinrecomandari In trecut Netflix au folosit informatii despre sex si varsta pentru a determinace filme sa recomande Acum ei folosesc de exemplu ceea ce utilizatorul a urmaritınainte a cautat cat timp petrece utilizatorul vizionand filme si tipul de dispozitiv utilizatPredictiile din motorul de recomandare Netflix nu se bazeaza doar pe comportamentulutilizatorului ci si pe context (cum ar fi timpul zilei) popularitatea titlurilor noutateadiversitatea si cat de recent a fost scos filmul sunt factori importanti [7]

Premiul Netflix a fost o competitie lansata ın 2006 pentru cel mai bun algoritm defiltrare colaborativa pentru a prezice ratingurile utilizatorilor pentru filme pe baza eva-luarilor anterioare fara alte informatii despre utilizatori sau filme adica fara ca utilizatoriisau filmele sa fie identificate stiind doar numerele atribuite pentru concurs ale acestoraPremiul pentru castigator consta ın 1 milion de dolari Peste 2000 de echipe au depusseturile de predictie si peste 650 de echipe au depasit precizia algoritmului actual al Netflix

3httpstechblogglomexcompostrecommender-systemshtml

8

cu mai mult de 5 [11] Castigatorul a fost echipa BellKors Pragmatic Chaos care adepasit algoritmul Netflix cu 1006

Cei de la Netflix au fost extrem de multumiti de rezultatul obtinut si nu numai caau ıncorporat acel algoritm ın algoritmul lor existent de recomandare dar au initiat si o adoua editie a competitiei

34 Sisteme de recomandare cu Neo4j

Urmatoarea parte a studiului bibliografic s-a axat pe bazele de date de tip grafGraphDB si mai exact Neo4j ın comparatie cu celelalte tipuri de baze de date adica celerelationale In cartea [10] sunt prezentate aceste concepte din punct de vedere teoretic siın lucrarile de master [5] si [1] este prezentata aceasta comparatie ıntre diferite tipuri debaze de date pe o aplicatie reala

Limbajul care se foloseste ın bazele de date Neo4j este Cypher Cu ajutorul acestuiase mapeaza query-urile pe noduri si relatii Din punct de vedere teoretic diferenta ıntrebazele de date relationale si cele sub forma de graf consta ın modul ın care sunt stocatedatele In timp ce ın bazele de date relationale datele sunt stocate ın structuri de datesub forma de tabel ın cele sub forma de graf datele sunt stocate ın noduri Coloaneletabelelor din bazele de date relationale se mapeaza ın bazele de date sub forma de graf peproprietati Pentru a face o legatura ıntre tabelele relationale se foloseau rdquochei strainerdquo pecand la Neo4j exista relatii ıntre noduri Din cauza faptului ca bazele de date sub formade graf s-au inspirat din cele relationale exista o asemanare ıntre ele si toate lucrurile auun corespondent ın cealalta

In lucrarea [12] sunt prezentate avantajele folosirii unei baze de date sub forma degraf cand se lucreaza cu retele sociale La aplicatiile de tipul retelelor soriale relatiile dintrenoduri sunt partea cea mai importanta iar pentru acestea o baza de date sub forma degraf se mapeaza cel mai bine Un avantaj al bazelor de date sub forma de graf din punctulde vedere al programatorilor cu acestea se lucreaza foarte similar ca si cu cele relationaledupa cum se prezinta si ın [4]

Un exemplu de sistem de recomandare construit cu Neo4j este [11] In acesta lucrareeste prezentata construirea unui sistem de recomandare care sa recomande prieteni ıntr-oaplicatie de socializare In lucrare sunt patru abordari pentru construirea unui astfel desistem Prima consta ın recomandarea unor prieteni cu care utilizatorul ar avea prieteniın comun cea de-a doua sunt persoane cu care utilizatorul se afla ın acelasi grup cea de-atreia sunt utilizatori care au mers la aceleasi evenimente ca si utilizatorul si ultima abordareconsta ın recomandarea persoanelor cu cei mai multi prieteni In urma mai multor teste sistatistici s-a decis ca abordarea cea mai buna este prima cea cu prietenii ın comun Toateaceste patru metode de oferire a recomandarilor se mapeaza foarte usor pe o baza de datesub forma de graf si reprezinta doar cate un query destul de simplu ın Cypher O astfelde aplicatie s-ar fi mapat mult mai greu pe o baza de date relationala datorita multiplelorrelatii si legaturi

9

Un alt exemplu de aplicatie unde s-a ales baza de date Neo4j a fost [2] Aicipentru articolele politice pe care sistemul le recomanda se creeaza o combinatie ıntrerecomandarile obtinute din articolele care le plac oamenilor cu care utilizatorul vorbestemult si lucruri care le plac utilizatorilor cu care acesta are lucruri ın comun Si ın acest cazexista o multime de relatii ıntre utilizatori si articole si cel mai usor se obtin recomandarilecu o aplicatie sub forma de graf motiv pentru care au si ales Neo4j

35 Utilizarea retelei Facebook pentru crearea unui

profil utilizatorilor

In continuare ca studiu bibliografic au urmat sisteme asemanatoare cu sistemuldorit si modul ın care acestia au reusit sa creeze profilul utilizatorului [13] Problema ceamai mare este rdquocold startrdquo-ul Adica atunci cand un utilizator este nou ın aplicatie nuse stiu suficiente informatii despre el pentru a putea sa i se ofere recomandari Dupa ceacesta foloseste aplicatia o perioada de timp ar putea sa i se ofere recomandari bazate peactivitatea sa anterioara ın aplicatie Din acest motiv la ınceput recomandarile pot lasade dorit si pot fi nu tocmai corecte

O metoda ın care se poate rezolva aceasta problema se afla ın lucrarea de master[7] ın care la utilizatorii noi se recomanda restaurante pe baza pozitiei lor geograficeAtunci cand doresti sa mergi la un restaurant este foarte importanta distanta la care seafla acel restaurant Din aceasta cauza pentru un utilizator caruia sistemul nu stie ce sa ıirecomande ıi recomanda restaurante la ıntamplare dintre cele care se afla cel mai aproapede el In felul acesta dupa ce merge la unul din restaurante si da feedback sistemul poatedupa aceea sa ıi faca recomandari

In lucrarea [8] recomandarile pentru votare au doua abordari La prima i se reco-manda lucrurile care le-a recomandat persoana cu scorul cel mai bun Si cea de-a douaabordare consta ıntr-un set de ıntrebari la care un utilizator nou trebuie sa raspunda candısi face contul

In acest caz cea mai buna metoda ın care se poate rezolva aceasta problema parea fi sa se ia informatiile de la API-ul de la Facebook Facebook este o aplicatie extremde utilizata si care ofera ca informatii publice exact ce ar fi necesar pentru a recomandacadouri de exemplu data nasterii sau lucruri care ıi plac unui utilizator Cu ajutorulacestora se poate calcula varsta utilizatorului poate sa fie ıncadrat ıntr-un profil si sepoate afla stilul de lucruri care ıi plac

Toate aceste informatii publice de la Facebook pot fi salvate si pot fi utilizate maitarziu pentru a se creea recomandari pe baza lor In articolul [3] despre valoarea datelor dela Facebook se prezinta ca si caz de utilizare pentru un site de comert online Aceasta estefoarte asemanatoare din punct de vedere al recomandarilor cu aplicatia de recomandarecadouri Diferenta dintre cele doua este ca ın cazul uneia trebuie sa recomande produsepentru utilizatorul aplicatiei si cealalta pentru un prieten al acestuia

10

Din punct de vedere al aplicabilitatii Facebook este o retea sociala deci datele salese mapeaza foarte bine pe o baza de date de tip graf cum este prezentat si ın lucrarea [6]

Asadar daca la crearea contului utilizatorului ın aplicatie se iau si informatiile pu-blice despre utilizator se vor putea oferi recomandari mult mai corecte ınca de la ınceput

36 Solutii similare

Ca solutii similare pe piata online nu exista aplicatii folosite pentru a recomandacadouri personalizate specific pentru o persoana anume Multe site-uri considera ca eirecomanda cadouri ınsa acestea reprezinta de fapt o filtrare mai avansata a rezultatelorproduselor de pe site-ul lor

Un site care ofera cadouri personalizate este Giftly 4 prezentat ın figura 34 careofera o modalitate usoara de a oferi cadouri Acest site nu are parte de recomandari cia gasit un mod de a face oamenii sa primeasca mereu ceea ce ısi doresc Cel care oferacadoul nu ıl cumpara ci doar ıl sugereaza dar decizia finala asupra cadoului este la celcare ıl primeste Modul ın care functioneaza este

1 Se ofera un rdquocard cadourdquo prin email sms printat sau ca o felicitare de ınaltacalitate

2 Destinatarul alege cel mai convenabil mod de a primi cadoul rdquocard cadourdquo ınposta sau direct ca bani ın contul bancar sau contul PayPal

3 De fapt utilizatorul ıi sugereaza destinatarului ce ar vrea el sa ofere ca si cadouiar destinatarul trimite ca mesaj modul ın care a cheltuit banii

Figura 34 Site web Giftly

4httpswwwgiftlycom

11

Ofera de asemenea si sugestii de cadouri Un om cand navigheaza pe site poate sase uite la cadouri ın categoriile Popular Holidays Birthdays Drinks Eats Meals BackTo School Get Fresh Health Fitness Going Out Getaway Top Shelf For The HipsterClothes For Her Clothes For Him Congratulations Expecting Activities si Custom

Un alt site cu cadouri este Etsy 5 cu imaginea 35 care arata site-ul Etsy este o piataglobala pentru bunuri unice si creative Pe pietele lor milioane de oameni din ıntreagalume se conecteaza atat online cat si offline pentru a face vinde si cumpara bunuri uniceEtsy ofera de asemenea o gama larga de servicii si instrumente de vanzari care ajutaıntreprinzatorii creativi sa ınceapa sa gestioneze si sa-si masoare afacerile Misiunea loreste sa pastreze comertul uman Deci de fapt acest site sprijina mai mult producatoriinu comerciantii De asemenea este mai mult axat pe bunuri unice si lucruri rdquounicerdquo Ca sicelelalte site-uri de genul acesta are o modalitate de a cauta lucrurile mai inteligent maispecializat pe ceea ce te intereseaza Categoriile de cautare sunt Jewelry AccessoriesClothing Shoes Home Living Wedding Party Toys Entertainment Art CollectablesCraft Supplies Tools si Vintage

Figura 35 Site web Etsy

Cel de-al treilea site care ofera servicii asemanatoare este Gifts 6 prezentat ın figura36 Acesta se focuseaza pe cadouri pentru diverse ocazii cum ar fi zilele de nastereCraciun diverse aniversari si alte evenimente la care se cumpara cadouri Pentru parteade recomandare se ofera posibilitatea de a efectua un test despre acel om caruia dorestisa ıi cumperi cadoul care are ca scop ıncadrarea omului respectiv ıntr-un profil si apoi

5httpswwwetsycom6httpswwwgiftscom

12

alegerea unor sugestii ce s-ar potrivi unei persoane cu acel tip de personalitate O primaıntrebare se refera la genul persoanei si ıntrebarea este daca cadoul este pentru o femeieun barbat o fetita sau un baietel Cea de-a doua ıntrebare se refera la marja de varsta ıncare se ıncadreaza acel om de exemplu pentru barbat optiunile sunt adolescent barbat ınjur de 30 de ani sau barbat ın varsta Cea de-a treia ıntrebare se refera la personalitateaomului Mai exact se fac sugestii pentru tipuri de lucruri ce i-ar putea placea unui omcare are trasaturile descrise ın primele doua ıntrebari De exemplu la barbati ın jur de30 de ani optiunile sunt ıi place sportul ıi place natura e aventurier ıi place golful ıiplace sa faca gratare sa serveasca bauturi sa gateasca sa animeze ıi place sa se ımbraceelegant este sef e entuziasmat de bere sau e un fan al sporturilor Iar ın final ın functiede raspunsurile date la ıntrebari se afiseaza sugestii de cadouri care se potrivesc oamenilorcu acel tip de personalitate

Figura 36 Site web Gifts

Nordstrom 7 care este prezentat ın imaginea 37 are o abordare similara avand pesite o multime de optiuni de filtrare a cadourilor Se pot cauta ın acest site cadouri pentrubebelusi cadouri de Craciun bijuterii pentru femei optiunile sunt multiple Acest lucruofera utilizatorilor sugestii pentru a le fi mai usor sa ıncadreze aceasta persoana ıntr-unanumit tip Iar dupa alegerea categoriei toate sugestiile de cadouri oferite de catre sitese ıncadreaza ın acel tip Ca avantaj al acestui site este ca ei ofera si serviciul de livrareal cadoului dupa cumparare oriunde ın lume Un dezavantaj al multor site-uri de genulacesta este ca ofera livrare doar ın zona sa apropiata

7httpsshopnordstromcomcgifts

13

Figura 37 Site web Nordstrom

14

Capitolul 4

Analiza si Fundamentare Teoretica

In acest capitol vor fi prezentate cerintele functionale ale lucrarii ımpreuna cucerintele non-functionale ale acesteia De asemenea va fi prezentata diagrama cazurilor deutilizare si vor fi prezentate mai ın detaliu cazurile de utilizare principale ale aplicatiei Incontinuare se va prezenta perspectiva tehnologica a proiectului si se vor explica deciziiletehnologice luate In final se va prezenta diagrama conceptuala a aplicatiei

41 Cerinte functionale

bull Posibilitatea autentificarii ın aplicatie si crearii unui profil propriu din care se potutiliza informatii si cu ajutorul caruia utilizatorul poate fi ıncadrat ıntr-un profil

bull Utilizatorii pot crea prietenii ca ıntr-o retea de socializare pentru a putea afla infor-matii despre prieteni si pentru a li se putea recomanda cadouri pentru acestia

bull Cu ajutorul informatiilor de la Facebook un utilizator poate fi notificat dinainte caurmeaza ziua de nastere a unuia din prietenii lui si sa i se ofere mai multe variantede cadouri potrivite pentru acesta Aceasta informatie o primeste cu suficient timpınainte pentru a nu fi surprins fara un cadou De la Facebook pe langa informatiiledespre data zilei de nastere sunt importante si varsta sau lucrurile care ıi plac uti-lizatorului Toate acestea ajuta la crearea profilului utilizatorului pe baza caruia serecomanda dupa aceea cadourile

bull De asemenea sistemul poate recomanda si un cadou pentru alt tip de evenimentdecat zi de nastere de genul cadou de Craciun cadou de nunta cadou pentru unnou-nascut etc

bull In aplicatie vor fi adaugate si diferite produse iar pentru a face mai usoara cumparareade cadouri se va putea face si comanda pe internet In momentul ın care un utilizatorface o noua comanda producatorii produselor comandate sunt ınstiintati de existentaacestei noi comenzi

15

bull Pentru persoanele la care pe profilul de Facebook este insuficient completat saupentru a putea cumpara cadouri pentru o persoana care nu are Facebook sau nuare cont ın aceasta aplicatie si despre care ın acest fel nu se cunosc nici un felde informatii se vor putea filtra cautarile pentru cadou printr-o serie de ıntrebaristandard Aceste ıntrebari vor putea creea un rdquomini-profilrdquo pentru acea persoanapentru ca sistemul sa poata recomanda cadouri

42 Cerinte non-functionale

bull Securitate sistemul nu raspunde cererilor decat atunci cand utilizatorul a fost au-tentificat ın aplicatie si are rolul necesar pentru a face acea cerere

bull Portabilitate aplicatia nu depinde de sistemul de operare pe care ruleaza De aseme-nea nu e dependenta de browserul folosit de utilizator

bull Disponibilitate sistemul ramane stabil ın fata erorilor si functioneaza la fel si dupaaparitia unei erori

bull Extensibilitate sistemul permite adaugarea sau modificarea unor componente atuncicand cerintele aplicatiei se modifica Pe langa asta e flexibila unor dezvoltari ulte-rioare

43 Cazuri de utilizare

In aceasta sectiune se vor prezenta actorii aplicatiei diagrama cazurilor de utilizaresi vor fi descrise cazurile de utilizare de baza ale fiecarui actor

Ca si actori aplicatia are patru tipuri de utilizatori

bull utilizator anonimbull clientbull producatorbull administrator

Aplicatia este conceputa ın asa fel ıncat ıntre actori este o relatie de mostenire Acestlucru presupune ca un actor are posibilitatea de a efectua tot ce putea cel dinaintea lui siceva ın plus Deci utilizatorii anonimi au cele mai putine permisiuni iar administratoriiau permisiuni totale Acest lucru se vede foarte clar si ın diagrama cazurilor de utilizaredin imaginea 41

In continuare vor fi prezentate cazurile de utilizare

1 recomandare cadouri2 adaugare produs3 modificare rol utilizator

16

Figura 41 Digrama cazurilor de utilizare

17

431 Recomandare cadouri

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unutilizator trebuie sa le urmeze pentru a primi recomandari de cadouri pentru un cunoscutsi pentru a efectua o comanda

Actorul principal

Orice utilizator al aplicatiei

Parti interesate si interese

Utilizatorul care doreste sa cumpere un cadou este interesat de a gasi un cadoupotrivit pentru cineva pe care ıl cunoaste

Producatorul care e interesat sa ısi poata vinde produseleUtilizatorul care primeste cadoul fiind interesat sa primeasca un cadou care sa i se

potriveasca si care sa ıi placa

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand utilizatorul porneste aplicatia11 Utilizatorul verifica daca are cont de Facebook si daca are urmeaza pasul 111

daca nu 22111 Utilizatorul se autentifica ın aplicatie cu ajutorul credentialelor de la

Facebook12 Utilizatorul deschide sectiunea de recomandare cadouri13 Utilizatorul completeaza formularul cu datele ce trebuie introduse pentru a primi

recomandari de cadouri pentru un prieten14 Utilizatorul poate fi satisfacut cu recomandarile primite si atunci urmeaza pasul

141 iar daca nu este atunci urmeaza cazul alternativ 23141 Utilizatorul adauga ın cosul de cumparaturi cadouri pe care doreste sa

le cumpere15 Utilizatorul cere sa ısi vada cosul de cumparaturi16 Utilizatorul poate sa se declare multumit de cosul de cumparaturi caz ın care

urmeaza pasul 161 sau poate sa aleaga cazul alternativ 24161 Utilizatorul aproba cosul de cumparaturi si accepta sa se faca comanda

17 Sistemul introduce ın baza de date comanda18 Utilizatorul va putea vedea la sectiunea comenzilor sale noua comanda si statusul

ei19 Sistemul notifica producatorul de aparitia noii comenzi110 Utilizatorul se dezautentifica din aplicatie

18

Use-Case EndUtilizatorul se va deconecta din aplicatie si o va ınchide

Figura 42 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueazaAcest flux poate aparea la orice pas211 Utilizatorul deschide sectiunea de recomandare cadouri212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca utilizatorul nu are cont de Facebook

19

Acest flux poate aparea la pasul 11221 Utilizatorul deschide pagina de Facebook222 Utilizatorul ısi face un cont pe pagina de Facebook si ısi completeaza

date despre el223 Utilizatorul revine la aplicatia de recomandare cadouri si ıncearca din

nou sa se autentifice ın aplicatie224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca utilizatorul nu e multumit de recomandariAcest flux poate aparea la pasul 14231 Utilizatorul sterge din cos cadourile pe care nu le mai doreste si revine

la pagina de recomandari232 Utilizatorul adauga alte cadouri ın cos233 Cazul de utilizare continua de la pasul 141

24 Flux-ul alternativ daca utilizatorul nu e multumit de produsele din cosul decumparaturi

Acest flux poate aparea la pasul 16241 Utilizatorul revine ınapoi la formularul cu introducerea datelor despre

beneficiarul cadoului242 Utilizatorul completeaza din nou datele243 Cazul de utilizare continua de la pasul 13

Preconditii

1 Utilizatorul trebuie sa aiba un cont de Facebook pentru a se putea autentifica ınaplicatie

2 Utilizatorul trebuie sa fie autentificat ın aplicatie pentru a putea face orice actiunedin acest caz de utilizare

3 Utilizatorul trebuie sa deschida sectiunea de recomandare cadouri pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noua comanda este salvata ın baza de date2 Comanda apare ın sectiunea de comenzi a utilizatorului ımpreuna cu statusul ei

curent3 Producatorul este notificat ca are o noua comanda

432 Adaugare produs

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unproducator trebuie sa le urmeze pentru a introduce un nou produs ın aplicatie

20

Actorul principal

Utilizatorii cu rol de producator sau cu rol de administrator

Parti interesate si interese

Producatorul care doreste sa introduca produsul nou ın aplicatie

Utilizatorii simpli care au o mai mare varietate de produse din care sa li se reco-mande cadouri

Figura 43 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo

21

Flux de evenimente

Use-Case Start

Cazul de utilizare ıncepe atunci cand producatorul porneste aplicatia

11 Producatorul verifica daca are cont de Facebook si daca are urmeaza pasul111 daca nu 22

111 Producatorul se autentifica ın aplicatie cu ajutorul credentialelor de laFacebook

12 Producatorul deschide sectiunea de adaugare produs

13 Producatorul completeaza datele necesare despre noul produs ımpreuna cu tipulde persoana si eveniment care i s-ar potrivi

14 Producatorul verifica daca este multumit de datele introduse si daca da urmeazapasul 141 daca nu 23

141 Producatorul efectueaza operatia de adaugare produs

15 Sistemul adauga un nou produs ın baza de date

16 Sistemul notifica producatorul ca noul produs a fost introdus cu succes

17 Producatorul se dezautentifica din aplicatie

Use-Case End

Producatorul se va deconecta din aplicatie si o va ınchide

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Producatorul deschide sectiunea de adaugare produs

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca producatorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Producatorul deschide pagina de Facebook

222 Producatorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Producatorul revine la aplicatia de recomandare cadouri si ıncearca dinnou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca Producatorul nu e multumit de datele introduse despreprodus

Acest flux poate aparea la pasul 14

231 Producatorul sterge datele gresite despre produs

232 Producatorul adauga alte date despre produs

233 Cazul de utilizare continua de la pasul 141

22

Preconditii

1 Producatorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Producatorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Producatorul trebuie sa aiba cont cu rol de rdquoproducatorrdquo sau rdquoadminrdquo pentru aputea face operatia aceasta

4 Producatorul trebuie sa deschida sectiunea de adaugare produs pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noul produs este salvat ın baza de date2 Produsul poate fi adaugat la recomandarile unui utilizator din acel moment

433 Modificare rol utilizator

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unadministrator trebuie sa le urmeze pentru a modifica rolul unui utilizator al aplicatiei

Actorul principal

Un utilizator al aplicatiei care are rol de administrator

Parti interesate si interese

Administratorul care doreste sa modifice rolul unui utilizatorUtilizatorul care doreste sa ısi schimbe rolul

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand administratorul porneste aplicatia11 Administratorul verifica daca are cont de Facebook si daca are urmeaza pasul

111 daca nu 22111 Administratorul se autentifica ın aplicatie cu ajutorul credentialelor de

la Facebook12 Administratorul deschide sectiunea de utilizatori13 Sistemul ıi returneaza administratorului utilizatorii care nu sunt administratori14 Administratorul modifica rolul utilizatorului din utilizator simplu ın producator

sau invers

23

15 Administratorul cere executarea modificarii

16 Sistemul executa modificarea iar ın caz de succes urmeaza pasul 161 si ın cazde eroare pasul 23

161 Sistemul notifica administratorul ca modificarea a fost efectuata cusucces

17 Utilizatorul se dezautentifica din aplicatie

Use-Case End

Administratorul se va deconecta din aplicatie si o va ınchide

Figura 44 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo

24

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Administratorul deschide sectiunea de utilizatori

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca administratorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Administratorul deschide pagina de Facebook

222 Administratorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Administratorul revine la aplicatia de recomandare cadouri si ıncearcadin nou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca sistemul returneaza o eroare la modificarea utilizatorului

Acest flux poate aparea la pasul 16

231 Sistemul returneaza un mesaj de eroare la modificarea utilizatorului

232 Aplicatia afiseaza mesajul de eroare administratorului

233 Cazul de utilizare continua de la pasul 15

Preconditii

1 Administratorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Administratorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Utilizatorul trebuie sa aiba cont cu rol de administrator pentru a putea efectuaorice actiune din acest caz de utilizare

4 Administratorul trebuie sa deschida sectiunea utilizatori pentru a putea ındeplinicerintele din cazul de utilizare

Postconditii

1 Noul rol al utilizatorului este salvat ın baza de date

2 La urmatoarea autentificare a utilizatorului acesta va observa ca interfata si maiprecis meniurile si actiunile care le poate face ıi vor fi diferite

25

44 Perspectiva tehnologica

441 Neo4j

Neo4j 1 este un sistem de gestionare a bazelor de date sub forma de graf dezvoltatde Neo4j Inc Descris de dezvoltatorii sai ca o baza de date tranzactionala compatibilacu ACID Neo4j este cea mai populara baza de date sub forma de graf dupa clasamentulDB-Engines

Baza de date Neo4j (ca si orice alta baza de date sub forma de graf) este foartediferita de o baza de date relationala cum ar fi MS Access SQL Server MySQL etcBazele de date relationale utilizeaza tabele randuri si coloane pentru stocarea datelor

Neo4j nu utilizeaza tabele randuri si coloane pentru stocarea sau prezentarea datelorci noduri si relatii

Neo4j este foarte potrivit pentru stocarea datelor care au multe relatii interconec-tate Acestea sunt de fapt aplicatiile ın care merita sa fie folosite De fapt bazele de datesub forma de graf cum este Neo4j sunt mult mai bune la tratarea datelor interconectatedecat bazele de date relationale

Acest lucru se datoreaza faptului ca modelul sub forma de graf nu necesita de obiceio schema predefinita Nu e nevoie sa se creeze structura bazei de date ınainte de a fiıncarcate datele asa cum se face la o baza de date relationala

Dar principalul motiv pentru care Neo4j este mai bun pentru datele relationalepentru acest tip de aplicatii este modul ın care permite crearea relatiilor Neo4j este con-struit ın jurul relatiilor si atunci nu este nevoie sa se configureze chei primare constrangerichei straine pentru a predetermina nodurile care pot avea o relatie si la ce date Cu Neo4jse poate adauga orice legatura ıntre orice nod ori de cate ori este nevoie

Neo4j are aceste calitati care nu se gasesc nici la celelalte baze de date NoSQLBazele de date non-relationale pe langa cele sub forma de graf sunt cele de tip coloanade tip document de tip cheie-valoare si de tip multi-model Nici unul din aceste tipuri nuau ca principala functionalitate maparea relatiilor si facilitatea interogarilor ıntr-o baza dedate cu multe relatii ıntre entitati

Generarea de recomandari personalizate este unul dintre cele mai frecvente cazuride utilizare a unei baze de date sub forma de graf Unele dintre principalele beneficii aleutilizarii grafurilor pentru a genera recomandari includ

- Performanta Lipsa indexurilor permite calcularea recomandarilor ın timp realasigurand ca recomandarea este ıntotdeauna relevanta si reflecta informatii actualizate

- Model de date Modelul de graf cu proprietati permite combinarea cu usurinta aseturilor de date din mai multe surse

Un alt avantaj al bazelor de date sub forma de graf Neo4j este faptul ca respectatoate principiile din modelul de consistenta ACID

Garantia data de principiile ACID este ca ofera un mediu sigur ın care sa functionezedatele Acronimul ACID reprezinta

1httpsneo4jcomuse-casesreal-time-recommendation-engine

26

bull Atomic Toate operatiile dintr-o tranzactie reusesc sau fiecare operatie este reluatabull Consistent La finalizarea unei tranzactii baza de date este solida din punct de

vedere structuralbull Izolat Tranzactiile nu se lupta una cu cealalta Accesul controversat la date este

moderat de baza de date astfel ıncat tranzactiile par sa se execute succesivbull Durabil Rezultatele aplicarii unei tranzactii sunt permanente chiar si ın cazul unor

defectiuniCand vine vorba de tehnologiile NoSQL cele mai multe baze de date sub forma de

graf (inclusiv Neo4j) utilizeaza un model de consistenta ACID pentru a asigura ca datelesunt stocate ın siguranta si ın mod consecvent

Am ales baza de date sub forma de graf ca optiune pentru stocarea datelor deoarecedin toate lucrarile si articolele citite a fost optiunea cea mai buna pentru un sistem derecomandare Deci acesta se mapeaza perfect pe cerintele functionale ale proiectului Sidin optiunile de baze de date sub forma de graf Noe4j a avut de departe cele mai multeavantaje ea fiind si cea mai utilizata

442 Cypher

Cypher 2 este un limbaj declarativ de interogare pentru bazele de date sub formade graf care permite interogarea si actualizarea rapida a datelor Cypher este un limbajrelativ simplu dar foarte puternic Interogarile foarte complexe ale bazei de date pot fiusor exprimate prin intermediul limbajului Cypher

Este conceput pentru a fi un limbaj de interogare uman Scopul lui principal este dea face interogarile mult mai simple si unele interogari care la bazele de date relationale nuerau posibile le face posibile Constructiile sale se bazeaza pe grafica si pe limba englezalucru care ajuta la scrierea mai intuitiva a interogarilor Este construit pentru a fi maiintuitiv pentru citire si nu neaparat pentru scriere

Cypher se bazeaza pe modelul Graph Property care ın plus fata de elementelegrafice standard ale nodurilor si muchiilor (numite relatii ın Cypher) adauga etichete siproprietati ca si concepte Nodurile pot avea zero sau mai multe etichete ın timp ce fiecarerelatie este de exact un singur tip Nodurile si relatiile au de asemenea zero sau mai multeproprietati

Chypher este limbajul de interogare folosit la bazele de date Neo4j deci este opti-unea implicita atunci cand se alege Neo4j

443 Maven

Maven 3 este un instrument de management software si de ıntelegere a proiectelorsoftware Pe baza conceptului unui model de obiect de proiect (POM) Maven poategestiona construirea raportarea si documentarea unui proiect printr-o informatie centrala

2httpsneo4jcomdevelopercypher-query-language3httpswwwjavatpointcommaven-tutorial

27

Obiectivul principal al lui Maven este acela de a permite unui dezvoltator sa ınte-leaga starea completa a efortului de dezvoltare ın cel mai scurt timp Avantajele Mavensunt

bull instalarea rapida a proiectului fara fisiere buildxml complicate doar un POMbull procesul de construire este standardizat pentru toate proiectelebull usor de ınvatat si de utilizatbull configurarea unui proiect este foarte rapidabull bine documentat

Am ales sa folosesc Maven deoarece este una din cele mai comune optiuni pentru aimporta librariile ıntr-un proiect si este si cel mai documentat Deci mereu cand esti pusın dificultate poti cauta pe internet sugestii

444 Spring Boot

Spring Boot 4 este un framework din cadrul Spring care ofera setari implicite pentruconfigurarea codului si adnotari pentru a lansa rapid proiecte noi ın executie Urmaresteabordarea rdquoConfigurarea defectiunilor vizionaterdquo pentru a evita un numar mare de linii decod pentru configuratii si pentru a ımbunatati procesul de dezvoltare

Avantajele Spring Boot sunt1 Face foarte usoara dezvoltarea de aplicatii bazate pe Spring cu Java sau Groovy2 Reduce timpul de dezvoltare si creste productivitatea3 Evita scrierea multor linii de cod adnotari si configurare XML4 Este foarte usor de integrat cu alte framework-uri din aceasi familie Spring cum ar

fi Spring JDBC Spring ORM Spring Data Spring Security etc5 Urmareste abordarea rdquoConfigurarea implicita a optiunilorrdquo pentru a reduce efortul

pentru dezvoltatori6 Ofera servere HTTP ıncorporate cum ar fi Tomcat Jetty etc pentru a dezvolta si

testa aplicatiile web foarte usor7 Ofera instrumentul CLI (Command Line Interface) pentru a dezvolta si testa apli-

catiile de tip rdquoSpring Bootrdquo (Java sau Groovy) din linia de comanda foarte usor sirapidAm ales ca optiune pentru partea de backend acest framework deoarece simplifica

foarte mult lucrurile Datorita lui un programator poate sa ısi concentreze mai tare energiape a construi proiectul din punctul de vedere al buissness-ului logic nu din punctul devedere al configurarilor necesare

445 Sencha CMD si ExtJS

Sencha CMD 5 este un instrument linie de comanda cross-platform care ofera multesarcini automate ın ciclul complet de viata al unei aplicatii ExtJS de la generarea unui

4httpswwwjavatpointcomspring-boot-tutorial5httpsdocssenchacomcmd

28

nou proiect la lansarea unei aplicatii ın productie

Sencha Cmd ofera o colectie de caracteristici puternice pentru economisirea timpu-lui care functioneaza ımpreuna cu Sencha ExtJS si Sencha Touch

Ext JS 6 este un framework pur JavaScript pentru construirea de aplicatii webinteractive cross-platform utilizand tehnici precum scripting Ajax DHTML si DOM

Avantajele framework-ului ExtJS sunt

1 Documentatia Extjs este foarte cuprinzatoare si bine ıntretinuta2 Aspectul cheie al bibliotecii EXTJS este suportul de tip cross-browser3 Framework-ul ExtJS ofera o multitudine de elemente UI Aceste elemente includ

forme casete de dialog file arbori si tabele4 Framework-ul ExtJS include suport pentru implementarile Ajax5 ExtJS ofera performante excelente Framework-ul este complet orientat spre obiecte

si este extensibil asta pentru ca este scris ın JavaScript

Pentru partea de frontend se foloseste framework-ul ExtJS deoarece are o arhitec-tura ce se mapeaza foarte bine pe proiectele de frontend si anume arhitectura bazata pecomponente Aceasta face ca ın proiect codul sa fie mult mai organizat si procesul dedezvoltare al proiectului sa fie mult mai scurt prin identificarea mai usoara a erorilor

446 Facebook API(Graph API)

Graph API 7 este modul principal de a pune date ın platforma Facebook si de aobtine date din platforma Facebook Este un API bazat pe HTTP pe care aplicatiile ılpot utiliza pentru interogarea datelor pentru a introduce postari noi pentru gestionareaanunturilor sau pentru a ıncarca fotografii

Este denumit Graph API dupa ideea unui rdquograf socialrdquo - o reprezentare sub formade graf a informatiilor de pe Facebook Este compus din

bull noduri - ın esenta obiecte individuale cum ar fi un utilizator o fotografie o paginasau un comentariu

bull muchii - conexiuni ıntre o colectie de obiecte si un singur obiect cum ar fi fotografiilede pe o pagina sau comentariile de la o fotografie

bull campuri - date despre un obiect cum ar fi ziua de nastere a unui utilizator saunumele paginii

De obicei se utilizeaza noduri pentru a obtine date despre un anumit obiect se uti-lizeaza muchii pentru a obtine colectii de obiecte legate de un singur obiect si se utilizeazacampurile pentru a obtine date despre un singur obiect sau mai multe obiecte dintr-ocolectie

Am folosit Facebook API ca solutie pentru a ımbunatati problema de rdquocold startrdquopentru ca este singurul site pe care marea majoritate a oamenilor au cont si salveazalucrurile care le plac Deci se potrivea perfect peste nevoile aplicatiei mele

6httpdocssenchacomextjs6207httpsdevelopersfacebookcomdocsgraph-api

29

447 Git

Git 8 este un sistem de control a versionarii pentru urmarirea modificarilor ın fisierelede pe computer si coordonarea activitatii asupra acestor fisiere ın randul mai multor per-soane Este utilizat ın principal pentru gestionarea codului sursa ın dezvoltarea de softwaredar poate fi folosit pentru a urmari schimbarile ın orice set de fisiere

Avantaje ale Git

bull Modelul distribuit numai ceea ce se doreste se face publicbull Branching-ul si merging-ul sunt usoarebull Fluxul de lucru este flexibilbull Integritatea datelor este asigurata Deoarece GIT utilizeaza arbori SHA1 coruperea

datelor din motive externe poate fi usor detectatabull Rapid Git este foarte rapid chiar si ın comparatie cu alte sisteme de control a

versionarii

Am folosit Git pentru a avea la proiect un back-up ın caz ca se ıntampla ceva cuproiectul salvat pe calculator

45 Arhitectura conceptuala

In figura 45 este prezentata arhitectura conceptuala a sistemului Acesta este ım-partit ın doua mari parti backend-ul si frontend-ul care comunica ıntre ele si ısi trimitinformatii

Se poate observa ca baza de date este de tip graf mai exact Neo4j si comunica cubackend-ul pentru a putea lucra cu datele stocate Backend-ul este structurat pe nivelefiecare cu un diferit rol si care trebuie parcurs pentru a procesa datele din interfata ınbaza de date Cele trei nivele sunt cel de Repository cel de Service si cel ControllerToate interogarile venite din interfata utilizator ajung ın nivelul de Controller Dupa ceinterogarile trec de securitatea sistemului ajung ın nivelul de Service Acolo se proceseazasi se afla partea de logica a aplicatiei Pentru a interactiona cu baza de date din Servicese apeleaza metodele din nivelul de Repository

In continuare backend-ul comunica prin protocolul HTTP cu interfata grafica cucare interactioneaza clientii aplicatiei Interfata este scrisa ın Ext JS si are o parte de Viewsi o parte de Controller care este cea care comunica cu backend-ul

Pentru partea de autentificare sistemul interactioneaza cu API-ul de la Facebookde la care ia dupa autentificare un access token Cu ajutorul acestuia ia dupa aceea datelenecesare pentru a putea crea un profil utilizatorului

8httpsguidesgithubcomintroductiongit-handbook

30

Figura 45 Arhitectura conceptuala

31

Capitolul 5

Proiectare de Detaliu siImplementare

In acest capitol vor fi prezentate detalii de implementare ale sistemului de recoman-dare incluzand o ımpartire al acestuia ın componentele care ıl cuprind

Obiectivul este de a prezenta arhitectura si modul de implementare al aplicatieipe baza datelor descoperite ın studiul bibliografic de la capitolul trei si cu tehnologiilehotarate la capitolul patru Pe langa asta va fi prezentata si structura bazei de date sideciziile luate pentru securitatea aplicatiei

51 Arhitectura sistemului

Din punctul de vedere al arhitecturii aplicatia se poate considera ca este alcatuitadin patru mari componente

1 API-ul de la Facebook2 Aplicatia client care reprezinta interfata grafica a aplicatiei3 Aplicatia server adica backendul aplicatiei si partea ın care se afla partea de rdquobusiness

logicrdquo4 Baza de date

Partea componenta reprezentata de API-ul de la Facebook este doar o componentacu care aplicatia se integreaza si pe care aceasta o foloseste In interactiunea cu ea interfatada o cerere de autentificare apare o fereastra de la Facebook ın care utilizatorul introducecredentialele de la API-ul de Facebook se primeste ınapoi un access token si cu ajutorulacestuia face o cerere pentru a primi datele personale ale utilizatorului pentru creeareaprofilului utilizator

Urmatoarea parte a aplicatiei este interfata utilizator frontend-ul care reprezintapartea cu care utilizatorul interactioneaza si locul unde ıi sunt afisate informatiile

Cererile din interfata ajung ın a treia parte componenta a sistemului partea deserver adica backend-ul aplicatiei Acolo toate cererile sunt citite si procesate iar raspun-

33

sul lor este trimis la interfata utilizator Aceasta este partea care reprezinta rdquogandireardquoaplicatiei Aceea este componenta care face legatura ıntre cererile utilizatorului din inter-fata si datele stocate ın baza de date

Ultima componenta a aplicatiei o reprezinta baza de date care are ca rol sa stochezedatele despre utilizatori produse si comenzi Ea este o baza de date sub forma de grafde tipul Neo4j Acolo se salveaza entitatile aplicatiei sub forma de noduri si dependenteleıntre acestea sub forma de relatii ıntre aceste noduri

Figura 51 Diagrama de rdquodeploymentrdquo

In figura 51 este prezentata diagrama de rdquodeploymentrdquo a sistemului cu cele patrucomponente ale sistemului Aplicatia client comunica cu API-ul de la Facebook prin pro-tocolul securizat HTTPS cu backend-ul prin protocolul HTTP iar backend-ul cu baza dedate prin JDBC

Aplicatia a putut fi ımpartita ın aceste componente separate deoarece fiecare dintreele poate functiona independent de celelalte comunica cu ele doar prin mesaje Din acestmotiv locul unde ruleaza acestea pot sa fie pe servere diferite In plus daca aplicatiaar fi pusa pe servere pentru utilizatori ar putea fi mai multe servere pe care ruleaza ocomponenta si prin rdquoload balancingrdquo sa se trimita cererile ımpartite ıntre ele

Cum astfel componentele nu depind foarte mult unele de altele si pot rula faraa le interesa de unde le sunt trimise cererile este arhitectura cea mai corecta deoarecedefectarea sau o posibila eroare la una din ele nu o influenteaza cu nimic pe o alta Dacatoate ar rula pe acelasi server o eventuala defectiune a acestuia ar ınsemna o defectiune aıntregului sistem Insa daca exista mai multe noduri si se afla pe servere diferite pot doartoate cererile sa fie redirectionate spre un nod care functioneaza si aplicatia sa functionezepentru clienti la fel ca ınainte

34

Un alt avantaj al arhitecturii ar fi faptul ca la o lansare viitoare catre clienti se poatelansa doar componenta la care s-au facut modificari De asemenea aplicatia ar putea aveape viitor si o componenta mobila Iar cum serverul e independent poate fi acelasi serverfolosit de o alta aplicatie client

511 Arhitectura componentei backend

Arhitectura backend-ului este si ea ımpartita ın mai multe pachete pentru o maibuna structura si pentru o cat mai mica dependenta ıntre diversele componente Astfelcuplarea este minima ıntre clase si eventualele modificari ulterioare pot fi mai usor defacut

Serverul a fost implementat ın Java cu ajutorul framework-ului Spring Boot iarmediul de dezvoltare folosit a fost Intellij IDEA

Din punctul de vedere al ımpartirii arhitectura serverului aplicatiei este structurataın patru pachete si o clasa ın afara acestora Acea clasa este rdquomainrdquo-ul aplicatiei este parteacare trebuie rulata pentru a porni serverul Din cauza ca este o aplicatie Spring Boot si nuuna String singura adnotare necesara pentru a sti ca aceea este clasa rdquoradacinardquoa aplicatieieste SpringBootApplication

Cele patru pachete ale serverului sunt1 Cel de domeniu (domain) cu clasele POJO care reprezinta entitatile din baza de

date2 Cel de rdquomagazierdquo (repositories) care este cel care face direct actiunile ın baza de date3 Cel de serviciu (services) ın care se afla partea de logica a ıntregii aplicatii4 Cel de web ın care se afla clasele de rdquocontrollerrdquo

Figura 52 Diagrama de pachete pentru backend

35

Ca si dependente nivelul de web ıl foloseste pe cel de seviciu cel de serviciu ılfoloseste pe cel de rdquomagazierdquo iar clasele din pachetul de domeniu sunt folosite ın toatecelelalte pachete

In continuare voi prezenta pe rand fiecare nivel al serverului adica fiecare pachet

Figura 53 Diagrama de clase pentru pachetul rdquodomainrdquo

36

Nivelul de domeniu (domain) este alcatuit ın primul rand din clasele care suntentitati ın baza de date Acestea sunt reprezentate de toate clasele ce stocheaza informatiidespre utilizatori si despre produse si comenzi Pe langa informatiile personale despre unutilizator de genul numelui email-ului sau data nasterii care sunt salvate ın entitateapersoana se stocheaza despre utilizator ın clase diferite informatii de genul locului undelocuieste locul unde a copilarit locurilor unde a facut scoala locului unde lucreaza sau celmai important pentru aplicatia aceasta lucrurilor care ıi plac In afara acestor informatiidespre utilizatori sunt si clase cu informatiile despre prieteni despre produse sau desprecomenzi

Din cauza faptului ca aplicatia este de tipul unei retele sociale ın care exista prieteniiıntre persoane exista dependente ıntre toate entitatile aplicatiei Acesta este si motivulpentru care am ales baza de date sub forma de graf pe care sa se mapeze toate acesteentitati sub forma de noduri si toate aceste dependente sub forma de relatii

In pachetul de domeniu se afla si trei subpachete Unul dintre ele este pentruclasele folosite pentru a trata erorile aplicatiei In interiorul acestui pachet se afla douaclase pentru eroare si o exceptie cea folosita ın cazul ın care nu se gaseste ceea ce doresteutilizatorul Pe langa asta este clasa care are ca obiect raspunsul dat de sistem ın cazulunei erori la server Aceasta contine ın interiorul sau pe langa codul erorii si detalii despreeroarea trimisa Aceasta lista de detalii e reprezentata de obiectele de tipul celei de-a treiaclase din pachetul acesta

Celelalte doua subpachete aflate ın acest nivel sunt cele care contin clasele specialede cerere sau raspuns care au ajutat la maparea acestora mai bine In multe cazuri nua fost necesara trimiterea la interfata utilizator a tuturor informatiilor stocate despre oentitate si de aceea am ales sa creez ın aceste cazuri un obiect auxiliar care sa fie folositpe post de raspuns

Figura 54 Diagrama de clase pentru pachetul rdquorepositoriesrdquo

37

Cel de-al doilea nivel al aplicatiei backend este cel de rdquomagazierdquo (repositories) carecontine doar interfete de tip rdquoRepositoryrdquo

Aceste interfete sunt cele care fac operatiile directe asupra entitatilor din baza dedate

Unele interfete doar extind interfata care are deja implementate metodele CRUDsi din acest motiv nu au metode suplimentare iar altele au si metode ın plus care au carol sa execute interogari mai complexe asupra bazei de date In acele metode se pot scrieinterogarile ın Cypher pentru a putea primi informatii despre mai multe noduri sau desprerelatiile dintre acestea sau si pentru a returna doar anumite rezultate care ındeplinescanumite conditii In felul acesta a fost implementata si cererea de oferire a recomandarilorIn acel caz sistemul returneaza produsele care au ın descriere unul din lucrurile care se aflaın lista de obiecte sau servicii primite de la Facebook ca ıi plac utilizatorului

Nivelul de rdquoRepositoryrdquo este folosit direct de cel de-al treiea nivel cel de servi-ciu Acesta este nivelul la care se executa logica aplicatiei unde se comanda modul defunctionare al ıntregii aplicatii

Figura 55 Diagrama de clase pentru pachetul rdquoservicesrdquo

Pe acest nivel ajung toate cererile din server dupa ce trec de verificarile de securitateIn acest pachet se afla si clasa de securitate care face verificarile necesare In aceasta clasaexista o metoda ce se apeleaza la prima cerere cea de salvare a datelor de la Facebookdespre utilizator si care codifica id-ul utilizatorului si ıl trimite pe raspuns ınapoi interfeteiPe langa asta ın acea clasa se afla si o metoda care verifica faptul ca id-ul codificat esteal unui utilizator cu rol corespunzator pentru a face acea cerere

In plus ın acest pachet se afla si toate celelalte clase care fac diverse operatii pedatele din baza de date si dau raspunsuri cererilor din interfata Aici se afla logica care

38

comanda actiunile asupra utilizatorilor asupra prietenilor acestora asupra produselor siasupra comenzilor

Ultima clasa a acestui nivel este cea care se ocupa de trimiterea de email-uri Incazul ın care se face o noua comanda de catre un utilizator toti producatorii produselor depe comanda sunt notificati despre produsele lor pe care le doreste utilizatorul Din serviciulde comanda se apeleaza serviciul de email pentru fiecare producator din lista celor care auproduse care se afla pe lista comenzii utilizatorului

Ultimul si cel mai aproape de interfata utilizator este nivelul de web Acolo se aflatoate clasele de rdquoControllerrdquo ale aplicatiei server

Figura 56 Diagrama de clase pentru pachetul rdquowebrdquo

Toate cererile din interfata utilizator ıncearca sa se mapeze pe rutele declarate ınclase pentru a fi procesate ın metoda corespunzatoare Toata aceasta parte este foarteusor de implementat si mai ales foarte lizibil pentru programatori datorita adnotarilor dinJava Cu ajutorul acestora trebuie doar specificat care este numele URL-ului cererii careeste tipul de obiect asteptat si daca se trimite ca rdquoquery stringrdquo pe URL sau ın interiorulcorpului cererii si tipul raspunsului Pentru fiecare cerere care nu este apelata ın parteaneautentificata a utilizatorului primul lucru care se apeleaza este metoda de securitatepentru a verifica rolul si id-ul utilizatorului Daca din punctul de vedere al securitatii totuleste ın regula se apeleaza metoda corespunzatoare din pachetul de serviciu

39

O singura clasa este diferita de restul ın pachetul de controller si aceea este clasa deeroare Acolo se mapeaza erorile aparute ın timpul cererii si se trimite ınapoi ın interfatagrafica un raspuns cu cod de eroare specific nu numai 500 Generic Application Exceptioncum ar trimite fara aceasta clasa si cu detalii despre motivul aparitiei erorii

Datorita folosirii adnotarilor din java nu a fost necesara folosirea unor rdquodesignpatternrdquo-uri ın sistem De exemplu pentru a folosi ın nivelul de web ceva din pachetulde servicii trebuia doar acel obiect sa aiba adnotarea Autowired si se ınlocuieste atatfolosirea rdquodesign patternrdquo-ului Singleton cat si a celui de Factory Acel obiect nu trebuiecreat sau initializat se face asta implicit datorita adnotarii si de asemenea este folositapeste tot aceeasi instanta

In concluzie toate cererile venite din interfata grafica ajung ın nivelul de rdquocontrollerrdquode unde sunt trimise la cel de rdquoservicerdquopentru a fi procesate si facute eventualele modificarinecesare ın baza de date ca apoi raspunsul sa fie trimis ınapoi spre aplicatia client pentruafisare

512 Arhitectura componentei frontend

A doua componenta implementata a sistemului este aplicatia client frontend-ulAceasta a fost scrisa ın Java Script cu ajutorul framework-ului Ext JS compilarea

se face cu ajutorul Sencha CMD si mediul de implementare a fost IntelliJ IdeaCu ajutorul framework-ului Ext JS se scriu componente care apoi se initializeaza

unele pe altele Aplicatia porneste cu fisierul Applicationjs care este un fel de rdquomainrdquopentru aplicatie Aceasta initializeaza alte componente care la randul lor includ altecomponente si tot asa Structura poate fi foarte usor comparata cu una arborescenta dinacest punct de vedere

Framework-ul a fost creat sa functioneze ın felul acesta pentru ca scopul componen-telor este sa fie scrise ın asa fel ıncat sa poata pe viitor sa fie utilizate din nou Una dindorintele majore ın programare tot timpul este de a se scrie cod ıntr-o maniera ın care safie cat mai reutilizabil Iar framework-ul Ext JS exact asta ıncearca

Arhitectura aplicatiei client se gaseste ın figura 57 si este la randul ei ımpartita ınpachete ca si cea de server Similar cu pachetul de rdquodomainrdquo de la aplicatia de backendeste pachetul rdquomodelrdquo al interfetei utilizator Aici sunt rdquoclaserdquo care sunt simple POJO sicare sunt apoi folosite ın nivelele urmatoare Sunt mai putine decat clasele din rdquostorerdquodeoarece daca raspunsul de la server nu trebuie procesat nu sunt necesare se pot mapadirect obiectele din rdquostorerdquo pe componentele interfetei utilizator

Urmatorul nivel este cel pe care se afla clasele de rdquostorerdquo Acestea sunt cele careexecuta cererea spre backend si face legatura ıntre client si server Daca are o clasa derdquomodelrdquodeclarata atunci populeaza acel obiect cu datele primite de la server iar ın cazul ıncare nu este declarat un model se trimit datele exact asa cum s-au primit la nivelul urmatorde rdquoviewrdquo Acest nivel seamana din punct de vedere al functiei cu cel de rdquorepositoryrdquo de laaplicatia server deoarece ambele au rol de legatura Aceea facea legatura ıntre aplicatiesi baza de date si aceasta face legatura ıntre aplicatia client si aplicatia server

40

Figura 57 Diagrama de clase pentru aplicatia web

Cel de-al treilea pachet al aplicatiei este cel de rdquoviewrdquo In acest pachet se afla claselecare alcatuiesc partea vizuala a aplicatiei La randul ei si aceasta este alcatuita tot dincomponente Aplicatia deschide ın primul rand Main-ul care determina aparitia paginii deHome si afisarea ın meniu a optiunilor posibile ın functie de autentificare si rol Clasele deaici se executa de fapt la deschiderea aplicatiei fiind rdquosingle page applicationrdquo si tot atuncise ıncarca pe pagina componentele Ca si arhitectura a pachetului acesta este ımpartit larandul sau ın subpachete Pentru o mai buna organizare exista patru subpachete cateunul pentru fiecare tip de utilizator In felul acesta toate rdquoviewrdquo-urile care sunt specificeunui utilizator cu un anumit rol se afla ın acelasi subpachet

Cele patru subpachete existente ın pachetul rdquoviewrdquo sunt

1 Pachetul rdquomainrdquo care cuprinde rdquoviewrdquo-urile care se afla ın partea neautentificata aaplicatiei

2 Pachetul rdquoclientrdquo continand rdquoviewrdquo-urile pe care le poate accesa un utilizator simplu3 Pachetul rdquoproducerrdquo specific actiunilor unui utilizator care are rol de producator4 Pachetul rdquoadminrdquo care contine toate rdquoviewrdquo-urile care ıi apar unui utilizator care este

administrator al aplicatiei

Ultimul pachet si nivel al aplicatiei client este cel de rdquocontrollerrdquo In acest pachet

41

se afla clasele care fac actiunile din interfata grafica In timp ce pachetul rdquoviewrdquo continedoar partea grafica a aplicatiei adica modul ın care aceasta trebuie sa arate pachetulrdquocontrollerrdquo contine actiunea acestora modul ın care aplicatia trebuie sa functioneze

Ca si arhitectura si acest pachet a fost ımpartit la randul lui tot ın cele patrusubpachete ca si pachetul rdquoviewrdquo adica rdquomainrdquo rdquoclientrdquo rdquoproducerrdquo si rdquoadminrdquo In pluspentru a fi usor de gasit ce clasa de rdquocontrollerrdquo apartine carui rdquoviewrdquo am ales ca cele douasa aiba acelasi nume In felul acesta daca se doreste sa se gaseasca actiunile unui rdquoviewrdquose poate cauta dupa o clasa cu acelasi nume ın pachetul rdquocontrollerrdquo Numarul claselor dinacest pachet este mai mic decat cel al claselor din rdquoviewrdquo deoarece nu toate paginile dininterfata au actiuni suplimentare Daca singura actiune este ıncarcarea paginii cu date dela server adica doar o actiune simpla de GET datele se ıncarca cu ajutorul rdquostorerdquo-ului laıncarcarea paginii si nu este necesara nici o actiune suplimentara Paginile pe care se potface si actiuni de alt gen sau se deschid noi ferestre au nevoie de clase de rdquocontrollerrdquo

In concluzie arhitectura aplicatiei client este una bazata pe componente care ıncearcasa foloseasca cat mai multe clase reutilizabile

52 Structura bazei de date

Baza de date a aplicatiei este de tip graf de tipul Neo4j Pentru utilizare exista unprogram numit Neo4j ce trebuie instalat Acest program are si o interfata grafica ın carese pot vizualiza datele sub forma grafica si ın care se pot scrie de asemenea si interogariın limbajul acestei baze de date adica Cypher

Fiind o baza de date sub forma de graf datele stocate sunt salvate ın structurade date sub forma de noduri si relatii Entitatile din pachetul de domeniu din aplicatiabackend se gasesc ın baza de date sub forma unor noduri iar dependentele dintre nodurise mapeaza ın baza de date sub forma unor relatii Un element diferit fata de alte tipuride baze de date este faptul ca pe relatiile dintre noduri se pot salva atribute cum este ınaplicatie cazul pentru prieteniile dintre persoane In cazul acestora pe relatia dintre nodurise salveaza daca prietenia a fost sau nu acceptata

Pentru fiecare clasa POJO din aplicatia server clasa ce are doar metodele get si setsi se afla ın pachetul domain exista cate un tip de nod diferit ın baza de date cum estesi marcat ın diferite culori ın figura 58 Fiecare tip de nod are atributele proprii care potlua valori sau pot fi nule Iar fiecare obiect din Java reprezinta un nod diferit ın baza dedate

Neo4j a fost cea mai buna optiune pentru baza de date pentru ca aplicatia poate ficonsiderata o retea sociala Acest lucru se datoreaza relatiilor de prietenie dintre persoanesi a multiplelor relatii ıntre noduri Toate nodurile se afla ın acceasi componenta conexadeci nu exista noduri izolate care sa nu aiba nici o legatura cu nici un alt nod

Datorita acestei structuri a bazei de date este posibila implementarea cererii derecomandare ca o simpla interogare ın baza de date aceasta fiind cea mai simpla metodade implementare a unui sistem de genul acesta una mult mai complexa ar fi fost un

42

algoritm de ınvatare care sa ınvete tipare ale utilizatorilor si sa recomande cadouri pe bazaacestor informatii

Figura 58 Diagrama bazei de date pentru doi utilizatori

Un alt avantaj al acestui tip de baza de date este faptul ca datele nu sunt duplicateın baza de date Spre exemplu daca mai multi utilizatori au ca locatie acelasi oras nu secreaza cate un nod cu acea locatie de mai multe ori ci acel unic nod va avea cate o relatiecu fiecare utilizator care are ca locatie acel oras

In concluzie structura bazei de date a fost aleasa ın acest fel datorita tipului apli-catiei adica asemanatoare cu o retea sociala si datorita implementarii simple a unui sistemde recomandare pe o asemenea baza de date

53 Fluxul pentru diferite operatii

Pentru aplicatie cele mai importante cazuri de utilizare sunt salvarea informati-ilor despre utilizator primite de la Facebook pentru crearea unui profil si recomandareacadourilor pentru un utilizator al aplicatiei Din aceasta cauza cele doua cazuri de utilizarevor fi prezentate mai ın detaliu ın continuare

43

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 9: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

bull Intelegerea conceptului de rdquocold startrdquo la sisteme de recomandare ca problema a aces-tora si gasirea unor solutii care ar putea sa ınlature sau cel putin sa ımbunatateascaaceasta problema

bull Documentarea despre diferite metode de construire a unui profil al utilizatorului sidin aceste metode alegerea celei mai potrivite din punct de vedere al timpului care ıitrebuie sistemului pana cand rdquoınvatardquo suficiente lucruri despre utilizator ıncat poateface recomandari corecte

bull Pe baza tuturor cunostintelor acumulate ın urma studiului construirea unei aplicatiiweb ca demonstratie a alegerilor facute

4

Capitolul 3

Studiu Bibliografic

Obiectivul acestui capitol este prezentarea conceptelor teoretice la baza carora staacest proiect Vor fi prezentate concepte precum modul de functionare al sistemelor derecomandare tipurile de sisteme de recomandare abordarea celor de la Netflix asupradomeniului Neo4j ca solutie pentru un sistem de recomandare utilizarea unei retele socialepentru crearea profilului unui utilizator si reteaua Facebook ca exemplu de astfel de reteaiar ın final solutii similare

31 Modul de functionare al sistemelor de recoman-

dare

Un sistem de recomandare este o tehnologie implementata ın situatiile ın care ar-ticole (produse filme evenimente) sunt recomandate utilizatorilor (clienti vizitatori uti-lizatori de aplicatii cititori) sau invers Numarul mare al utilizatorilor acestor aplicatiieste ceea ce face ca problema sa fie dificila si costisitoare de rezolvat

Motoarele de recomandare sunt ın esenta instrumente de filtrare a datelor careutilizeaza algoritmi si date pentru a recomanda cele mai relevante elemente unui anumitutilizator [9] Sau ın termeni simpli nu sunt altceva decat o forma automatizata a unuirdquovanzator ıntr-un magazin de hainerdquo Lui i se cere un produs si el nu numai ca arata acelprodus dar si altele asemanatoare pe care le-am putea cumpara

Un sistem de recomandare are trei faze de baza dupa cum este prezentat si ındiagrama 31 pe baza carora functioneaza Prima faza este cea de colectare a datelorSistemele de recomandare se bazeaza mereu pe date anterioare deci faza de ınceput ıncare acumuleaza informatii este esentiala si de multe ori o problema foarte grea de rezolvatAceasta problema se mai numeste si rdquocold startrdquo Problema este reprezentata de faptul caun utilizator nou al unei aplicatii nu are informatii stocate despre el sau despre activitatealui fiind nou Iar sistemele de recomandare nu pot sa stie de fapt ce ıi place lui decat dupace utilizeaza o perioada aplicatia De multe ori solutia adusa de oameni pentru aceastaproblema este un chestionar de ıntrebari adresat utilizatorului care sa ıl poata face sa se

5

Figura 31 Fazele unui sistem de recomandare1

ıncadreze ıntr-un tipDe fapt din aceasta cauza sistemele de recomandare devin tot mai bune si mai

exacte cu cat sunt folosite mai mult deoarece sunt stocate tot mai multe informatii despreutilizator

Cea de-a doua faza a unui sistem de recomandare este cea de ınvatare Acoloaplicatia trebuie sa stocheze datele despre utilizator si trebuie la urmatoarea recomandaresa se bazeze pe cele dinainte si ın functie de ele sa o faca Acest lucru poate fi realizat fiedirect pe baza setului de date colectat ın faza de colectare a informatiilor care ar puteafi bazat pe memorie sau bazat pe model fie prin activitatile utilizatorului care au fostobservate

A treia faza este cea de recomandare propriu-zisa ın care doar utilizatorul facecererea de recomandari si acestea ıi sunt trimise

32 Tipuri de sisteme de recomandare

In continuare ca studiu bibliografic au fost tipurile sistemelor de recomandare [11]Ca si teorie sunt mai mute tipuri de sisteme de recomandare si o reprezentare graficaa acestor tipuri este prezentata ın figura 32 Cea mai de baza ımpartire este ın douacategorii recomandari bazate pe continut si recomandari bazate pe filtrare colaborativa

Filtrarea bazata pe continut creeaza un profil de utilizator bazat pe o metoda deınvatare pentru a determina elementele pe care un anumit utilizator le-ar dori De exemplusite-ul poate utiliza un sistem de cuvinte cheie care sugereaza articole cu cuvinte cheiesimilare ın descrierea unui element pe care utilizatorul l-a cumparat anterior

Recomandarile bazate pe filtrare colaborativa se inspira din similaritatile cu ceilaltiutilizatori Gasesc utilizatori asemanantori cu cel pentru care se face recomandarea pebaza actiunilor din trecut despre aceia si se recomanda lucruri care le plac celorlalti Acesttip de recomandare se potriveste perfect cu recomandarile de filme Acolo un om cu gusturi

1httpswwwsciencedirectcomsciencearticlepiiS1110866515000341

6

asemanatoare va putea sa recomande cel mai bine un alt film unui prieten Cea mai simplaimplementare pentru asa ceva este sub forma unei matrici cu spatii goale ın locurile undenu se cunoaste informatie

Pe langa aceste tipuri de recomandari mai sunt si altele dar care nu sunt folosite lafel de des

Figura 32 Tipurile sistemelor de recomandare2

In filtrarea bazata pe criterii demografice se fac recomandari catre utilizatori pebaza informatiilor lor demografice Sistemul va sugera elemente care au fost selectate dealti utilizatori care se ıncadreaza ın acelasi profil demografic

Filtrarea bazata pe utilitate se bazeaza pe utilitatea pe care utilizatorul o va obtinede la produs Poate include lucruri precum fiabilitatea si disponibilitatea vanzatoruluipentru a se asigura ca recomanda produse usor de obtinut de catre utilizator

Filtrarea bazata pe cunostinte recomanda selectii pe baza preferintelor si modelelorde cumparare cunoscute despre utilizator Intrucat sistemul va sti ce a cumparat con-sumatorul ın trecut acesta poate face recomandari ın functie de ceea ce ar putea satisfaceaceste nevoi ın viitor

Filtrarea hibrida combina doua sau mai multe tehnici de recomandare diferite pentrua crea un sistem de recomandare mai detaliat

2httpswwwsciencedirectcomsciencearticlepiiS1110866515000341f0005

7

33 Abordarea Netflix

Foarte multa cercetare ın domeniul sistemelor de recomandare a fost influentata decei de la Netflix

Figura 33 Tipuri de recomandari oferite de Netflix3

Netflix este un serviciu de streaming care permite clientilor sa vizioneze o gamalarga de emisiuni TV filme documentare si multe altele pe mii de dispozitive conectatela internet

In figura 33 este o imagine a site-ului cu tipurile diferite de recomandari pe careacestia le ofera

Cheia succesului Netflix consta ın capacitatea lor de a anticipa ceea ce le placeutilizatorilor motiv pentru care fiecare doua din trei ore de vizionare ın Netflix provin dinrecomandari In trecut Netflix au folosit informatii despre sex si varsta pentru a determinace filme sa recomande Acum ei folosesc de exemplu ceea ce utilizatorul a urmaritınainte a cautat cat timp petrece utilizatorul vizionand filme si tipul de dispozitiv utilizatPredictiile din motorul de recomandare Netflix nu se bazeaza doar pe comportamentulutilizatorului ci si pe context (cum ar fi timpul zilei) popularitatea titlurilor noutateadiversitatea si cat de recent a fost scos filmul sunt factori importanti [7]

Premiul Netflix a fost o competitie lansata ın 2006 pentru cel mai bun algoritm defiltrare colaborativa pentru a prezice ratingurile utilizatorilor pentru filme pe baza eva-luarilor anterioare fara alte informatii despre utilizatori sau filme adica fara ca utilizatoriisau filmele sa fie identificate stiind doar numerele atribuite pentru concurs ale acestoraPremiul pentru castigator consta ın 1 milion de dolari Peste 2000 de echipe au depusseturile de predictie si peste 650 de echipe au depasit precizia algoritmului actual al Netflix

3httpstechblogglomexcompostrecommender-systemshtml

8

cu mai mult de 5 [11] Castigatorul a fost echipa BellKors Pragmatic Chaos care adepasit algoritmul Netflix cu 1006

Cei de la Netflix au fost extrem de multumiti de rezultatul obtinut si nu numai caau ıncorporat acel algoritm ın algoritmul lor existent de recomandare dar au initiat si o adoua editie a competitiei

34 Sisteme de recomandare cu Neo4j

Urmatoarea parte a studiului bibliografic s-a axat pe bazele de date de tip grafGraphDB si mai exact Neo4j ın comparatie cu celelalte tipuri de baze de date adica celerelationale In cartea [10] sunt prezentate aceste concepte din punct de vedere teoretic siın lucrarile de master [5] si [1] este prezentata aceasta comparatie ıntre diferite tipuri debaze de date pe o aplicatie reala

Limbajul care se foloseste ın bazele de date Neo4j este Cypher Cu ajutorul acestuiase mapeaza query-urile pe noduri si relatii Din punct de vedere teoretic diferenta ıntrebazele de date relationale si cele sub forma de graf consta ın modul ın care sunt stocatedatele In timp ce ın bazele de date relationale datele sunt stocate ın structuri de datesub forma de tabel ın cele sub forma de graf datele sunt stocate ın noduri Coloaneletabelelor din bazele de date relationale se mapeaza ın bazele de date sub forma de graf peproprietati Pentru a face o legatura ıntre tabelele relationale se foloseau rdquochei strainerdquo pecand la Neo4j exista relatii ıntre noduri Din cauza faptului ca bazele de date sub formade graf s-au inspirat din cele relationale exista o asemanare ıntre ele si toate lucrurile auun corespondent ın cealalta

In lucrarea [12] sunt prezentate avantajele folosirii unei baze de date sub forma degraf cand se lucreaza cu retele sociale La aplicatiile de tipul retelelor soriale relatiile dintrenoduri sunt partea cea mai importanta iar pentru acestea o baza de date sub forma degraf se mapeaza cel mai bine Un avantaj al bazelor de date sub forma de graf din punctulde vedere al programatorilor cu acestea se lucreaza foarte similar ca si cu cele relationaledupa cum se prezinta si ın [4]

Un exemplu de sistem de recomandare construit cu Neo4j este [11] In acesta lucrareeste prezentata construirea unui sistem de recomandare care sa recomande prieteni ıntr-oaplicatie de socializare In lucrare sunt patru abordari pentru construirea unui astfel desistem Prima consta ın recomandarea unor prieteni cu care utilizatorul ar avea prieteniın comun cea de-a doua sunt persoane cu care utilizatorul se afla ın acelasi grup cea de-atreia sunt utilizatori care au mers la aceleasi evenimente ca si utilizatorul si ultima abordareconsta ın recomandarea persoanelor cu cei mai multi prieteni In urma mai multor teste sistatistici s-a decis ca abordarea cea mai buna este prima cea cu prietenii ın comun Toateaceste patru metode de oferire a recomandarilor se mapeaza foarte usor pe o baza de datesub forma de graf si reprezinta doar cate un query destul de simplu ın Cypher O astfelde aplicatie s-ar fi mapat mult mai greu pe o baza de date relationala datorita multiplelorrelatii si legaturi

9

Un alt exemplu de aplicatie unde s-a ales baza de date Neo4j a fost [2] Aicipentru articolele politice pe care sistemul le recomanda se creeaza o combinatie ıntrerecomandarile obtinute din articolele care le plac oamenilor cu care utilizatorul vorbestemult si lucruri care le plac utilizatorilor cu care acesta are lucruri ın comun Si ın acest cazexista o multime de relatii ıntre utilizatori si articole si cel mai usor se obtin recomandarilecu o aplicatie sub forma de graf motiv pentru care au si ales Neo4j

35 Utilizarea retelei Facebook pentru crearea unui

profil utilizatorilor

In continuare ca studiu bibliografic au urmat sisteme asemanatoare cu sistemuldorit si modul ın care acestia au reusit sa creeze profilul utilizatorului [13] Problema ceamai mare este rdquocold startrdquo-ul Adica atunci cand un utilizator este nou ın aplicatie nuse stiu suficiente informatii despre el pentru a putea sa i se ofere recomandari Dupa ceacesta foloseste aplicatia o perioada de timp ar putea sa i se ofere recomandari bazate peactivitatea sa anterioara ın aplicatie Din acest motiv la ınceput recomandarile pot lasade dorit si pot fi nu tocmai corecte

O metoda ın care se poate rezolva aceasta problema se afla ın lucrarea de master[7] ın care la utilizatorii noi se recomanda restaurante pe baza pozitiei lor geograficeAtunci cand doresti sa mergi la un restaurant este foarte importanta distanta la care seafla acel restaurant Din aceasta cauza pentru un utilizator caruia sistemul nu stie ce sa ıirecomande ıi recomanda restaurante la ıntamplare dintre cele care se afla cel mai aproapede el In felul acesta dupa ce merge la unul din restaurante si da feedback sistemul poatedupa aceea sa ıi faca recomandari

In lucrarea [8] recomandarile pentru votare au doua abordari La prima i se reco-manda lucrurile care le-a recomandat persoana cu scorul cel mai bun Si cea de-a douaabordare consta ıntr-un set de ıntrebari la care un utilizator nou trebuie sa raspunda candısi face contul

In acest caz cea mai buna metoda ın care se poate rezolva aceasta problema parea fi sa se ia informatiile de la API-ul de la Facebook Facebook este o aplicatie extremde utilizata si care ofera ca informatii publice exact ce ar fi necesar pentru a recomandacadouri de exemplu data nasterii sau lucruri care ıi plac unui utilizator Cu ajutorulacestora se poate calcula varsta utilizatorului poate sa fie ıncadrat ıntr-un profil si sepoate afla stilul de lucruri care ıi plac

Toate aceste informatii publice de la Facebook pot fi salvate si pot fi utilizate maitarziu pentru a se creea recomandari pe baza lor In articolul [3] despre valoarea datelor dela Facebook se prezinta ca si caz de utilizare pentru un site de comert online Aceasta estefoarte asemanatoare din punct de vedere al recomandarilor cu aplicatia de recomandarecadouri Diferenta dintre cele doua este ca ın cazul uneia trebuie sa recomande produsepentru utilizatorul aplicatiei si cealalta pentru un prieten al acestuia

10

Din punct de vedere al aplicabilitatii Facebook este o retea sociala deci datele salese mapeaza foarte bine pe o baza de date de tip graf cum este prezentat si ın lucrarea [6]

Asadar daca la crearea contului utilizatorului ın aplicatie se iau si informatiile pu-blice despre utilizator se vor putea oferi recomandari mult mai corecte ınca de la ınceput

36 Solutii similare

Ca solutii similare pe piata online nu exista aplicatii folosite pentru a recomandacadouri personalizate specific pentru o persoana anume Multe site-uri considera ca eirecomanda cadouri ınsa acestea reprezinta de fapt o filtrare mai avansata a rezultatelorproduselor de pe site-ul lor

Un site care ofera cadouri personalizate este Giftly 4 prezentat ın figura 34 careofera o modalitate usoara de a oferi cadouri Acest site nu are parte de recomandari cia gasit un mod de a face oamenii sa primeasca mereu ceea ce ısi doresc Cel care oferacadoul nu ıl cumpara ci doar ıl sugereaza dar decizia finala asupra cadoului este la celcare ıl primeste Modul ın care functioneaza este

1 Se ofera un rdquocard cadourdquo prin email sms printat sau ca o felicitare de ınaltacalitate

2 Destinatarul alege cel mai convenabil mod de a primi cadoul rdquocard cadourdquo ınposta sau direct ca bani ın contul bancar sau contul PayPal

3 De fapt utilizatorul ıi sugereaza destinatarului ce ar vrea el sa ofere ca si cadouiar destinatarul trimite ca mesaj modul ın care a cheltuit banii

Figura 34 Site web Giftly

4httpswwwgiftlycom

11

Ofera de asemenea si sugestii de cadouri Un om cand navigheaza pe site poate sase uite la cadouri ın categoriile Popular Holidays Birthdays Drinks Eats Meals BackTo School Get Fresh Health Fitness Going Out Getaway Top Shelf For The HipsterClothes For Her Clothes For Him Congratulations Expecting Activities si Custom

Un alt site cu cadouri este Etsy 5 cu imaginea 35 care arata site-ul Etsy este o piataglobala pentru bunuri unice si creative Pe pietele lor milioane de oameni din ıntreagalume se conecteaza atat online cat si offline pentru a face vinde si cumpara bunuri uniceEtsy ofera de asemenea o gama larga de servicii si instrumente de vanzari care ajutaıntreprinzatorii creativi sa ınceapa sa gestioneze si sa-si masoare afacerile Misiunea loreste sa pastreze comertul uman Deci de fapt acest site sprijina mai mult producatoriinu comerciantii De asemenea este mai mult axat pe bunuri unice si lucruri rdquounicerdquo Ca sicelelalte site-uri de genul acesta are o modalitate de a cauta lucrurile mai inteligent maispecializat pe ceea ce te intereseaza Categoriile de cautare sunt Jewelry AccessoriesClothing Shoes Home Living Wedding Party Toys Entertainment Art CollectablesCraft Supplies Tools si Vintage

Figura 35 Site web Etsy

Cel de-al treilea site care ofera servicii asemanatoare este Gifts 6 prezentat ın figura36 Acesta se focuseaza pe cadouri pentru diverse ocazii cum ar fi zilele de nastereCraciun diverse aniversari si alte evenimente la care se cumpara cadouri Pentru parteade recomandare se ofera posibilitatea de a efectua un test despre acel om caruia dorestisa ıi cumperi cadoul care are ca scop ıncadrarea omului respectiv ıntr-un profil si apoi

5httpswwwetsycom6httpswwwgiftscom

12

alegerea unor sugestii ce s-ar potrivi unei persoane cu acel tip de personalitate O primaıntrebare se refera la genul persoanei si ıntrebarea este daca cadoul este pentru o femeieun barbat o fetita sau un baietel Cea de-a doua ıntrebare se refera la marja de varsta ıncare se ıncadreaza acel om de exemplu pentru barbat optiunile sunt adolescent barbat ınjur de 30 de ani sau barbat ın varsta Cea de-a treia ıntrebare se refera la personalitateaomului Mai exact se fac sugestii pentru tipuri de lucruri ce i-ar putea placea unui omcare are trasaturile descrise ın primele doua ıntrebari De exemplu la barbati ın jur de30 de ani optiunile sunt ıi place sportul ıi place natura e aventurier ıi place golful ıiplace sa faca gratare sa serveasca bauturi sa gateasca sa animeze ıi place sa se ımbraceelegant este sef e entuziasmat de bere sau e un fan al sporturilor Iar ın final ın functiede raspunsurile date la ıntrebari se afiseaza sugestii de cadouri care se potrivesc oamenilorcu acel tip de personalitate

Figura 36 Site web Gifts

Nordstrom 7 care este prezentat ın imaginea 37 are o abordare similara avand pesite o multime de optiuni de filtrare a cadourilor Se pot cauta ın acest site cadouri pentrubebelusi cadouri de Craciun bijuterii pentru femei optiunile sunt multiple Acest lucruofera utilizatorilor sugestii pentru a le fi mai usor sa ıncadreze aceasta persoana ıntr-unanumit tip Iar dupa alegerea categoriei toate sugestiile de cadouri oferite de catre sitese ıncadreaza ın acel tip Ca avantaj al acestui site este ca ei ofera si serviciul de livrareal cadoului dupa cumparare oriunde ın lume Un dezavantaj al multor site-uri de genulacesta este ca ofera livrare doar ın zona sa apropiata

7httpsshopnordstromcomcgifts

13

Figura 37 Site web Nordstrom

14

Capitolul 4

Analiza si Fundamentare Teoretica

In acest capitol vor fi prezentate cerintele functionale ale lucrarii ımpreuna cucerintele non-functionale ale acesteia De asemenea va fi prezentata diagrama cazurilor deutilizare si vor fi prezentate mai ın detaliu cazurile de utilizare principale ale aplicatiei Incontinuare se va prezenta perspectiva tehnologica a proiectului si se vor explica deciziiletehnologice luate In final se va prezenta diagrama conceptuala a aplicatiei

41 Cerinte functionale

bull Posibilitatea autentificarii ın aplicatie si crearii unui profil propriu din care se potutiliza informatii si cu ajutorul caruia utilizatorul poate fi ıncadrat ıntr-un profil

bull Utilizatorii pot crea prietenii ca ıntr-o retea de socializare pentru a putea afla infor-matii despre prieteni si pentru a li se putea recomanda cadouri pentru acestia

bull Cu ajutorul informatiilor de la Facebook un utilizator poate fi notificat dinainte caurmeaza ziua de nastere a unuia din prietenii lui si sa i se ofere mai multe variantede cadouri potrivite pentru acesta Aceasta informatie o primeste cu suficient timpınainte pentru a nu fi surprins fara un cadou De la Facebook pe langa informatiiledespre data zilei de nastere sunt importante si varsta sau lucrurile care ıi plac uti-lizatorului Toate acestea ajuta la crearea profilului utilizatorului pe baza caruia serecomanda dupa aceea cadourile

bull De asemenea sistemul poate recomanda si un cadou pentru alt tip de evenimentdecat zi de nastere de genul cadou de Craciun cadou de nunta cadou pentru unnou-nascut etc

bull In aplicatie vor fi adaugate si diferite produse iar pentru a face mai usoara cumparareade cadouri se va putea face si comanda pe internet In momentul ın care un utilizatorface o noua comanda producatorii produselor comandate sunt ınstiintati de existentaacestei noi comenzi

15

bull Pentru persoanele la care pe profilul de Facebook este insuficient completat saupentru a putea cumpara cadouri pentru o persoana care nu are Facebook sau nuare cont ın aceasta aplicatie si despre care ın acest fel nu se cunosc nici un felde informatii se vor putea filtra cautarile pentru cadou printr-o serie de ıntrebaristandard Aceste ıntrebari vor putea creea un rdquomini-profilrdquo pentru acea persoanapentru ca sistemul sa poata recomanda cadouri

42 Cerinte non-functionale

bull Securitate sistemul nu raspunde cererilor decat atunci cand utilizatorul a fost au-tentificat ın aplicatie si are rolul necesar pentru a face acea cerere

bull Portabilitate aplicatia nu depinde de sistemul de operare pe care ruleaza De aseme-nea nu e dependenta de browserul folosit de utilizator

bull Disponibilitate sistemul ramane stabil ın fata erorilor si functioneaza la fel si dupaaparitia unei erori

bull Extensibilitate sistemul permite adaugarea sau modificarea unor componente atuncicand cerintele aplicatiei se modifica Pe langa asta e flexibila unor dezvoltari ulte-rioare

43 Cazuri de utilizare

In aceasta sectiune se vor prezenta actorii aplicatiei diagrama cazurilor de utilizaresi vor fi descrise cazurile de utilizare de baza ale fiecarui actor

Ca si actori aplicatia are patru tipuri de utilizatori

bull utilizator anonimbull clientbull producatorbull administrator

Aplicatia este conceputa ın asa fel ıncat ıntre actori este o relatie de mostenire Acestlucru presupune ca un actor are posibilitatea de a efectua tot ce putea cel dinaintea lui siceva ın plus Deci utilizatorii anonimi au cele mai putine permisiuni iar administratoriiau permisiuni totale Acest lucru se vede foarte clar si ın diagrama cazurilor de utilizaredin imaginea 41

In continuare vor fi prezentate cazurile de utilizare

1 recomandare cadouri2 adaugare produs3 modificare rol utilizator

16

Figura 41 Digrama cazurilor de utilizare

17

431 Recomandare cadouri

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unutilizator trebuie sa le urmeze pentru a primi recomandari de cadouri pentru un cunoscutsi pentru a efectua o comanda

Actorul principal

Orice utilizator al aplicatiei

Parti interesate si interese

Utilizatorul care doreste sa cumpere un cadou este interesat de a gasi un cadoupotrivit pentru cineva pe care ıl cunoaste

Producatorul care e interesat sa ısi poata vinde produseleUtilizatorul care primeste cadoul fiind interesat sa primeasca un cadou care sa i se

potriveasca si care sa ıi placa

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand utilizatorul porneste aplicatia11 Utilizatorul verifica daca are cont de Facebook si daca are urmeaza pasul 111

daca nu 22111 Utilizatorul se autentifica ın aplicatie cu ajutorul credentialelor de la

Facebook12 Utilizatorul deschide sectiunea de recomandare cadouri13 Utilizatorul completeaza formularul cu datele ce trebuie introduse pentru a primi

recomandari de cadouri pentru un prieten14 Utilizatorul poate fi satisfacut cu recomandarile primite si atunci urmeaza pasul

141 iar daca nu este atunci urmeaza cazul alternativ 23141 Utilizatorul adauga ın cosul de cumparaturi cadouri pe care doreste sa

le cumpere15 Utilizatorul cere sa ısi vada cosul de cumparaturi16 Utilizatorul poate sa se declare multumit de cosul de cumparaturi caz ın care

urmeaza pasul 161 sau poate sa aleaga cazul alternativ 24161 Utilizatorul aproba cosul de cumparaturi si accepta sa se faca comanda

17 Sistemul introduce ın baza de date comanda18 Utilizatorul va putea vedea la sectiunea comenzilor sale noua comanda si statusul

ei19 Sistemul notifica producatorul de aparitia noii comenzi110 Utilizatorul se dezautentifica din aplicatie

18

Use-Case EndUtilizatorul se va deconecta din aplicatie si o va ınchide

Figura 42 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueazaAcest flux poate aparea la orice pas211 Utilizatorul deschide sectiunea de recomandare cadouri212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca utilizatorul nu are cont de Facebook

19

Acest flux poate aparea la pasul 11221 Utilizatorul deschide pagina de Facebook222 Utilizatorul ısi face un cont pe pagina de Facebook si ısi completeaza

date despre el223 Utilizatorul revine la aplicatia de recomandare cadouri si ıncearca din

nou sa se autentifice ın aplicatie224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca utilizatorul nu e multumit de recomandariAcest flux poate aparea la pasul 14231 Utilizatorul sterge din cos cadourile pe care nu le mai doreste si revine

la pagina de recomandari232 Utilizatorul adauga alte cadouri ın cos233 Cazul de utilizare continua de la pasul 141

24 Flux-ul alternativ daca utilizatorul nu e multumit de produsele din cosul decumparaturi

Acest flux poate aparea la pasul 16241 Utilizatorul revine ınapoi la formularul cu introducerea datelor despre

beneficiarul cadoului242 Utilizatorul completeaza din nou datele243 Cazul de utilizare continua de la pasul 13

Preconditii

1 Utilizatorul trebuie sa aiba un cont de Facebook pentru a se putea autentifica ınaplicatie

2 Utilizatorul trebuie sa fie autentificat ın aplicatie pentru a putea face orice actiunedin acest caz de utilizare

3 Utilizatorul trebuie sa deschida sectiunea de recomandare cadouri pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noua comanda este salvata ın baza de date2 Comanda apare ın sectiunea de comenzi a utilizatorului ımpreuna cu statusul ei

curent3 Producatorul este notificat ca are o noua comanda

432 Adaugare produs

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unproducator trebuie sa le urmeze pentru a introduce un nou produs ın aplicatie

20

Actorul principal

Utilizatorii cu rol de producator sau cu rol de administrator

Parti interesate si interese

Producatorul care doreste sa introduca produsul nou ın aplicatie

Utilizatorii simpli care au o mai mare varietate de produse din care sa li se reco-mande cadouri

Figura 43 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo

21

Flux de evenimente

Use-Case Start

Cazul de utilizare ıncepe atunci cand producatorul porneste aplicatia

11 Producatorul verifica daca are cont de Facebook si daca are urmeaza pasul111 daca nu 22

111 Producatorul se autentifica ın aplicatie cu ajutorul credentialelor de laFacebook

12 Producatorul deschide sectiunea de adaugare produs

13 Producatorul completeaza datele necesare despre noul produs ımpreuna cu tipulde persoana si eveniment care i s-ar potrivi

14 Producatorul verifica daca este multumit de datele introduse si daca da urmeazapasul 141 daca nu 23

141 Producatorul efectueaza operatia de adaugare produs

15 Sistemul adauga un nou produs ın baza de date

16 Sistemul notifica producatorul ca noul produs a fost introdus cu succes

17 Producatorul se dezautentifica din aplicatie

Use-Case End

Producatorul se va deconecta din aplicatie si o va ınchide

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Producatorul deschide sectiunea de adaugare produs

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca producatorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Producatorul deschide pagina de Facebook

222 Producatorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Producatorul revine la aplicatia de recomandare cadouri si ıncearca dinnou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca Producatorul nu e multumit de datele introduse despreprodus

Acest flux poate aparea la pasul 14

231 Producatorul sterge datele gresite despre produs

232 Producatorul adauga alte date despre produs

233 Cazul de utilizare continua de la pasul 141

22

Preconditii

1 Producatorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Producatorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Producatorul trebuie sa aiba cont cu rol de rdquoproducatorrdquo sau rdquoadminrdquo pentru aputea face operatia aceasta

4 Producatorul trebuie sa deschida sectiunea de adaugare produs pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noul produs este salvat ın baza de date2 Produsul poate fi adaugat la recomandarile unui utilizator din acel moment

433 Modificare rol utilizator

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unadministrator trebuie sa le urmeze pentru a modifica rolul unui utilizator al aplicatiei

Actorul principal

Un utilizator al aplicatiei care are rol de administrator

Parti interesate si interese

Administratorul care doreste sa modifice rolul unui utilizatorUtilizatorul care doreste sa ısi schimbe rolul

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand administratorul porneste aplicatia11 Administratorul verifica daca are cont de Facebook si daca are urmeaza pasul

111 daca nu 22111 Administratorul se autentifica ın aplicatie cu ajutorul credentialelor de

la Facebook12 Administratorul deschide sectiunea de utilizatori13 Sistemul ıi returneaza administratorului utilizatorii care nu sunt administratori14 Administratorul modifica rolul utilizatorului din utilizator simplu ın producator

sau invers

23

15 Administratorul cere executarea modificarii

16 Sistemul executa modificarea iar ın caz de succes urmeaza pasul 161 si ın cazde eroare pasul 23

161 Sistemul notifica administratorul ca modificarea a fost efectuata cusucces

17 Utilizatorul se dezautentifica din aplicatie

Use-Case End

Administratorul se va deconecta din aplicatie si o va ınchide

Figura 44 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo

24

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Administratorul deschide sectiunea de utilizatori

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca administratorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Administratorul deschide pagina de Facebook

222 Administratorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Administratorul revine la aplicatia de recomandare cadouri si ıncearcadin nou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca sistemul returneaza o eroare la modificarea utilizatorului

Acest flux poate aparea la pasul 16

231 Sistemul returneaza un mesaj de eroare la modificarea utilizatorului

232 Aplicatia afiseaza mesajul de eroare administratorului

233 Cazul de utilizare continua de la pasul 15

Preconditii

1 Administratorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Administratorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Utilizatorul trebuie sa aiba cont cu rol de administrator pentru a putea efectuaorice actiune din acest caz de utilizare

4 Administratorul trebuie sa deschida sectiunea utilizatori pentru a putea ındeplinicerintele din cazul de utilizare

Postconditii

1 Noul rol al utilizatorului este salvat ın baza de date

2 La urmatoarea autentificare a utilizatorului acesta va observa ca interfata si maiprecis meniurile si actiunile care le poate face ıi vor fi diferite

25

44 Perspectiva tehnologica

441 Neo4j

Neo4j 1 este un sistem de gestionare a bazelor de date sub forma de graf dezvoltatde Neo4j Inc Descris de dezvoltatorii sai ca o baza de date tranzactionala compatibilacu ACID Neo4j este cea mai populara baza de date sub forma de graf dupa clasamentulDB-Engines

Baza de date Neo4j (ca si orice alta baza de date sub forma de graf) este foartediferita de o baza de date relationala cum ar fi MS Access SQL Server MySQL etcBazele de date relationale utilizeaza tabele randuri si coloane pentru stocarea datelor

Neo4j nu utilizeaza tabele randuri si coloane pentru stocarea sau prezentarea datelorci noduri si relatii

Neo4j este foarte potrivit pentru stocarea datelor care au multe relatii interconec-tate Acestea sunt de fapt aplicatiile ın care merita sa fie folosite De fapt bazele de datesub forma de graf cum este Neo4j sunt mult mai bune la tratarea datelor interconectatedecat bazele de date relationale

Acest lucru se datoreaza faptului ca modelul sub forma de graf nu necesita de obiceio schema predefinita Nu e nevoie sa se creeze structura bazei de date ınainte de a fiıncarcate datele asa cum se face la o baza de date relationala

Dar principalul motiv pentru care Neo4j este mai bun pentru datele relationalepentru acest tip de aplicatii este modul ın care permite crearea relatiilor Neo4j este con-struit ın jurul relatiilor si atunci nu este nevoie sa se configureze chei primare constrangerichei straine pentru a predetermina nodurile care pot avea o relatie si la ce date Cu Neo4jse poate adauga orice legatura ıntre orice nod ori de cate ori este nevoie

Neo4j are aceste calitati care nu se gasesc nici la celelalte baze de date NoSQLBazele de date non-relationale pe langa cele sub forma de graf sunt cele de tip coloanade tip document de tip cheie-valoare si de tip multi-model Nici unul din aceste tipuri nuau ca principala functionalitate maparea relatiilor si facilitatea interogarilor ıntr-o baza dedate cu multe relatii ıntre entitati

Generarea de recomandari personalizate este unul dintre cele mai frecvente cazuride utilizare a unei baze de date sub forma de graf Unele dintre principalele beneficii aleutilizarii grafurilor pentru a genera recomandari includ

- Performanta Lipsa indexurilor permite calcularea recomandarilor ın timp realasigurand ca recomandarea este ıntotdeauna relevanta si reflecta informatii actualizate

- Model de date Modelul de graf cu proprietati permite combinarea cu usurinta aseturilor de date din mai multe surse

Un alt avantaj al bazelor de date sub forma de graf Neo4j este faptul ca respectatoate principiile din modelul de consistenta ACID

Garantia data de principiile ACID este ca ofera un mediu sigur ın care sa functionezedatele Acronimul ACID reprezinta

1httpsneo4jcomuse-casesreal-time-recommendation-engine

26

bull Atomic Toate operatiile dintr-o tranzactie reusesc sau fiecare operatie este reluatabull Consistent La finalizarea unei tranzactii baza de date este solida din punct de

vedere structuralbull Izolat Tranzactiile nu se lupta una cu cealalta Accesul controversat la date este

moderat de baza de date astfel ıncat tranzactiile par sa se execute succesivbull Durabil Rezultatele aplicarii unei tranzactii sunt permanente chiar si ın cazul unor

defectiuniCand vine vorba de tehnologiile NoSQL cele mai multe baze de date sub forma de

graf (inclusiv Neo4j) utilizeaza un model de consistenta ACID pentru a asigura ca datelesunt stocate ın siguranta si ın mod consecvent

Am ales baza de date sub forma de graf ca optiune pentru stocarea datelor deoarecedin toate lucrarile si articolele citite a fost optiunea cea mai buna pentru un sistem derecomandare Deci acesta se mapeaza perfect pe cerintele functionale ale proiectului Sidin optiunile de baze de date sub forma de graf Noe4j a avut de departe cele mai multeavantaje ea fiind si cea mai utilizata

442 Cypher

Cypher 2 este un limbaj declarativ de interogare pentru bazele de date sub formade graf care permite interogarea si actualizarea rapida a datelor Cypher este un limbajrelativ simplu dar foarte puternic Interogarile foarte complexe ale bazei de date pot fiusor exprimate prin intermediul limbajului Cypher

Este conceput pentru a fi un limbaj de interogare uman Scopul lui principal este dea face interogarile mult mai simple si unele interogari care la bazele de date relationale nuerau posibile le face posibile Constructiile sale se bazeaza pe grafica si pe limba englezalucru care ajuta la scrierea mai intuitiva a interogarilor Este construit pentru a fi maiintuitiv pentru citire si nu neaparat pentru scriere

Cypher se bazeaza pe modelul Graph Property care ın plus fata de elementelegrafice standard ale nodurilor si muchiilor (numite relatii ın Cypher) adauga etichete siproprietati ca si concepte Nodurile pot avea zero sau mai multe etichete ın timp ce fiecarerelatie este de exact un singur tip Nodurile si relatiile au de asemenea zero sau mai multeproprietati

Chypher este limbajul de interogare folosit la bazele de date Neo4j deci este opti-unea implicita atunci cand se alege Neo4j

443 Maven

Maven 3 este un instrument de management software si de ıntelegere a proiectelorsoftware Pe baza conceptului unui model de obiect de proiect (POM) Maven poategestiona construirea raportarea si documentarea unui proiect printr-o informatie centrala

2httpsneo4jcomdevelopercypher-query-language3httpswwwjavatpointcommaven-tutorial

27

Obiectivul principal al lui Maven este acela de a permite unui dezvoltator sa ınte-leaga starea completa a efortului de dezvoltare ın cel mai scurt timp Avantajele Mavensunt

bull instalarea rapida a proiectului fara fisiere buildxml complicate doar un POMbull procesul de construire este standardizat pentru toate proiectelebull usor de ınvatat si de utilizatbull configurarea unui proiect este foarte rapidabull bine documentat

Am ales sa folosesc Maven deoarece este una din cele mai comune optiuni pentru aimporta librariile ıntr-un proiect si este si cel mai documentat Deci mereu cand esti pusın dificultate poti cauta pe internet sugestii

444 Spring Boot

Spring Boot 4 este un framework din cadrul Spring care ofera setari implicite pentruconfigurarea codului si adnotari pentru a lansa rapid proiecte noi ın executie Urmaresteabordarea rdquoConfigurarea defectiunilor vizionaterdquo pentru a evita un numar mare de linii decod pentru configuratii si pentru a ımbunatati procesul de dezvoltare

Avantajele Spring Boot sunt1 Face foarte usoara dezvoltarea de aplicatii bazate pe Spring cu Java sau Groovy2 Reduce timpul de dezvoltare si creste productivitatea3 Evita scrierea multor linii de cod adnotari si configurare XML4 Este foarte usor de integrat cu alte framework-uri din aceasi familie Spring cum ar

fi Spring JDBC Spring ORM Spring Data Spring Security etc5 Urmareste abordarea rdquoConfigurarea implicita a optiunilorrdquo pentru a reduce efortul

pentru dezvoltatori6 Ofera servere HTTP ıncorporate cum ar fi Tomcat Jetty etc pentru a dezvolta si

testa aplicatiile web foarte usor7 Ofera instrumentul CLI (Command Line Interface) pentru a dezvolta si testa apli-

catiile de tip rdquoSpring Bootrdquo (Java sau Groovy) din linia de comanda foarte usor sirapidAm ales ca optiune pentru partea de backend acest framework deoarece simplifica

foarte mult lucrurile Datorita lui un programator poate sa ısi concentreze mai tare energiape a construi proiectul din punctul de vedere al buissness-ului logic nu din punctul devedere al configurarilor necesare

445 Sencha CMD si ExtJS

Sencha CMD 5 este un instrument linie de comanda cross-platform care ofera multesarcini automate ın ciclul complet de viata al unei aplicatii ExtJS de la generarea unui

4httpswwwjavatpointcomspring-boot-tutorial5httpsdocssenchacomcmd

28

nou proiect la lansarea unei aplicatii ın productie

Sencha Cmd ofera o colectie de caracteristici puternice pentru economisirea timpu-lui care functioneaza ımpreuna cu Sencha ExtJS si Sencha Touch

Ext JS 6 este un framework pur JavaScript pentru construirea de aplicatii webinteractive cross-platform utilizand tehnici precum scripting Ajax DHTML si DOM

Avantajele framework-ului ExtJS sunt

1 Documentatia Extjs este foarte cuprinzatoare si bine ıntretinuta2 Aspectul cheie al bibliotecii EXTJS este suportul de tip cross-browser3 Framework-ul ExtJS ofera o multitudine de elemente UI Aceste elemente includ

forme casete de dialog file arbori si tabele4 Framework-ul ExtJS include suport pentru implementarile Ajax5 ExtJS ofera performante excelente Framework-ul este complet orientat spre obiecte

si este extensibil asta pentru ca este scris ın JavaScript

Pentru partea de frontend se foloseste framework-ul ExtJS deoarece are o arhitec-tura ce se mapeaza foarte bine pe proiectele de frontend si anume arhitectura bazata pecomponente Aceasta face ca ın proiect codul sa fie mult mai organizat si procesul dedezvoltare al proiectului sa fie mult mai scurt prin identificarea mai usoara a erorilor

446 Facebook API(Graph API)

Graph API 7 este modul principal de a pune date ın platforma Facebook si de aobtine date din platforma Facebook Este un API bazat pe HTTP pe care aplicatiile ılpot utiliza pentru interogarea datelor pentru a introduce postari noi pentru gestionareaanunturilor sau pentru a ıncarca fotografii

Este denumit Graph API dupa ideea unui rdquograf socialrdquo - o reprezentare sub formade graf a informatiilor de pe Facebook Este compus din

bull noduri - ın esenta obiecte individuale cum ar fi un utilizator o fotografie o paginasau un comentariu

bull muchii - conexiuni ıntre o colectie de obiecte si un singur obiect cum ar fi fotografiilede pe o pagina sau comentariile de la o fotografie

bull campuri - date despre un obiect cum ar fi ziua de nastere a unui utilizator saunumele paginii

De obicei se utilizeaza noduri pentru a obtine date despre un anumit obiect se uti-lizeaza muchii pentru a obtine colectii de obiecte legate de un singur obiect si se utilizeazacampurile pentru a obtine date despre un singur obiect sau mai multe obiecte dintr-ocolectie

Am folosit Facebook API ca solutie pentru a ımbunatati problema de rdquocold startrdquopentru ca este singurul site pe care marea majoritate a oamenilor au cont si salveazalucrurile care le plac Deci se potrivea perfect peste nevoile aplicatiei mele

6httpdocssenchacomextjs6207httpsdevelopersfacebookcomdocsgraph-api

29

447 Git

Git 8 este un sistem de control a versionarii pentru urmarirea modificarilor ın fisierelede pe computer si coordonarea activitatii asupra acestor fisiere ın randul mai multor per-soane Este utilizat ın principal pentru gestionarea codului sursa ın dezvoltarea de softwaredar poate fi folosit pentru a urmari schimbarile ın orice set de fisiere

Avantaje ale Git

bull Modelul distribuit numai ceea ce se doreste se face publicbull Branching-ul si merging-ul sunt usoarebull Fluxul de lucru este flexibilbull Integritatea datelor este asigurata Deoarece GIT utilizeaza arbori SHA1 coruperea

datelor din motive externe poate fi usor detectatabull Rapid Git este foarte rapid chiar si ın comparatie cu alte sisteme de control a

versionarii

Am folosit Git pentru a avea la proiect un back-up ın caz ca se ıntampla ceva cuproiectul salvat pe calculator

45 Arhitectura conceptuala

In figura 45 este prezentata arhitectura conceptuala a sistemului Acesta este ım-partit ın doua mari parti backend-ul si frontend-ul care comunica ıntre ele si ısi trimitinformatii

Se poate observa ca baza de date este de tip graf mai exact Neo4j si comunica cubackend-ul pentru a putea lucra cu datele stocate Backend-ul este structurat pe nivelefiecare cu un diferit rol si care trebuie parcurs pentru a procesa datele din interfata ınbaza de date Cele trei nivele sunt cel de Repository cel de Service si cel ControllerToate interogarile venite din interfata utilizator ajung ın nivelul de Controller Dupa ceinterogarile trec de securitatea sistemului ajung ın nivelul de Service Acolo se proceseazasi se afla partea de logica a aplicatiei Pentru a interactiona cu baza de date din Servicese apeleaza metodele din nivelul de Repository

In continuare backend-ul comunica prin protocolul HTTP cu interfata grafica cucare interactioneaza clientii aplicatiei Interfata este scrisa ın Ext JS si are o parte de Viewsi o parte de Controller care este cea care comunica cu backend-ul

Pentru partea de autentificare sistemul interactioneaza cu API-ul de la Facebookde la care ia dupa autentificare un access token Cu ajutorul acestuia ia dupa aceea datelenecesare pentru a putea crea un profil utilizatorului

8httpsguidesgithubcomintroductiongit-handbook

30

Figura 45 Arhitectura conceptuala

31

Capitolul 5

Proiectare de Detaliu siImplementare

In acest capitol vor fi prezentate detalii de implementare ale sistemului de recoman-dare incluzand o ımpartire al acestuia ın componentele care ıl cuprind

Obiectivul este de a prezenta arhitectura si modul de implementare al aplicatieipe baza datelor descoperite ın studiul bibliografic de la capitolul trei si cu tehnologiilehotarate la capitolul patru Pe langa asta va fi prezentata si structura bazei de date sideciziile luate pentru securitatea aplicatiei

51 Arhitectura sistemului

Din punctul de vedere al arhitecturii aplicatia se poate considera ca este alcatuitadin patru mari componente

1 API-ul de la Facebook2 Aplicatia client care reprezinta interfata grafica a aplicatiei3 Aplicatia server adica backendul aplicatiei si partea ın care se afla partea de rdquobusiness

logicrdquo4 Baza de date

Partea componenta reprezentata de API-ul de la Facebook este doar o componentacu care aplicatia se integreaza si pe care aceasta o foloseste In interactiunea cu ea interfatada o cerere de autentificare apare o fereastra de la Facebook ın care utilizatorul introducecredentialele de la API-ul de Facebook se primeste ınapoi un access token si cu ajutorulacestuia face o cerere pentru a primi datele personale ale utilizatorului pentru creeareaprofilului utilizator

Urmatoarea parte a aplicatiei este interfata utilizator frontend-ul care reprezintapartea cu care utilizatorul interactioneaza si locul unde ıi sunt afisate informatiile

Cererile din interfata ajung ın a treia parte componenta a sistemului partea deserver adica backend-ul aplicatiei Acolo toate cererile sunt citite si procesate iar raspun-

33

sul lor este trimis la interfata utilizator Aceasta este partea care reprezinta rdquogandireardquoaplicatiei Aceea este componenta care face legatura ıntre cererile utilizatorului din inter-fata si datele stocate ın baza de date

Ultima componenta a aplicatiei o reprezinta baza de date care are ca rol sa stochezedatele despre utilizatori produse si comenzi Ea este o baza de date sub forma de grafde tipul Neo4j Acolo se salveaza entitatile aplicatiei sub forma de noduri si dependenteleıntre acestea sub forma de relatii ıntre aceste noduri

Figura 51 Diagrama de rdquodeploymentrdquo

In figura 51 este prezentata diagrama de rdquodeploymentrdquo a sistemului cu cele patrucomponente ale sistemului Aplicatia client comunica cu API-ul de la Facebook prin pro-tocolul securizat HTTPS cu backend-ul prin protocolul HTTP iar backend-ul cu baza dedate prin JDBC

Aplicatia a putut fi ımpartita ın aceste componente separate deoarece fiecare dintreele poate functiona independent de celelalte comunica cu ele doar prin mesaje Din acestmotiv locul unde ruleaza acestea pot sa fie pe servere diferite In plus daca aplicatiaar fi pusa pe servere pentru utilizatori ar putea fi mai multe servere pe care ruleaza ocomponenta si prin rdquoload balancingrdquo sa se trimita cererile ımpartite ıntre ele

Cum astfel componentele nu depind foarte mult unele de altele si pot rula faraa le interesa de unde le sunt trimise cererile este arhitectura cea mai corecta deoarecedefectarea sau o posibila eroare la una din ele nu o influenteaza cu nimic pe o alta Dacatoate ar rula pe acelasi server o eventuala defectiune a acestuia ar ınsemna o defectiune aıntregului sistem Insa daca exista mai multe noduri si se afla pe servere diferite pot doartoate cererile sa fie redirectionate spre un nod care functioneaza si aplicatia sa functionezepentru clienti la fel ca ınainte

34

Un alt avantaj al arhitecturii ar fi faptul ca la o lansare viitoare catre clienti se poatelansa doar componenta la care s-au facut modificari De asemenea aplicatia ar putea aveape viitor si o componenta mobila Iar cum serverul e independent poate fi acelasi serverfolosit de o alta aplicatie client

511 Arhitectura componentei backend

Arhitectura backend-ului este si ea ımpartita ın mai multe pachete pentru o maibuna structura si pentru o cat mai mica dependenta ıntre diversele componente Astfelcuplarea este minima ıntre clase si eventualele modificari ulterioare pot fi mai usor defacut

Serverul a fost implementat ın Java cu ajutorul framework-ului Spring Boot iarmediul de dezvoltare folosit a fost Intellij IDEA

Din punctul de vedere al ımpartirii arhitectura serverului aplicatiei este structurataın patru pachete si o clasa ın afara acestora Acea clasa este rdquomainrdquo-ul aplicatiei este parteacare trebuie rulata pentru a porni serverul Din cauza ca este o aplicatie Spring Boot si nuuna String singura adnotare necesara pentru a sti ca aceea este clasa rdquoradacinardquoa aplicatieieste SpringBootApplication

Cele patru pachete ale serverului sunt1 Cel de domeniu (domain) cu clasele POJO care reprezinta entitatile din baza de

date2 Cel de rdquomagazierdquo (repositories) care este cel care face direct actiunile ın baza de date3 Cel de serviciu (services) ın care se afla partea de logica a ıntregii aplicatii4 Cel de web ın care se afla clasele de rdquocontrollerrdquo

Figura 52 Diagrama de pachete pentru backend

35

Ca si dependente nivelul de web ıl foloseste pe cel de seviciu cel de serviciu ılfoloseste pe cel de rdquomagazierdquo iar clasele din pachetul de domeniu sunt folosite ın toatecelelalte pachete

In continuare voi prezenta pe rand fiecare nivel al serverului adica fiecare pachet

Figura 53 Diagrama de clase pentru pachetul rdquodomainrdquo

36

Nivelul de domeniu (domain) este alcatuit ın primul rand din clasele care suntentitati ın baza de date Acestea sunt reprezentate de toate clasele ce stocheaza informatiidespre utilizatori si despre produse si comenzi Pe langa informatiile personale despre unutilizator de genul numelui email-ului sau data nasterii care sunt salvate ın entitateapersoana se stocheaza despre utilizator ın clase diferite informatii de genul locului undelocuieste locul unde a copilarit locurilor unde a facut scoala locului unde lucreaza sau celmai important pentru aplicatia aceasta lucrurilor care ıi plac In afara acestor informatiidespre utilizatori sunt si clase cu informatiile despre prieteni despre produse sau desprecomenzi

Din cauza faptului ca aplicatia este de tipul unei retele sociale ın care exista prieteniiıntre persoane exista dependente ıntre toate entitatile aplicatiei Acesta este si motivulpentru care am ales baza de date sub forma de graf pe care sa se mapeze toate acesteentitati sub forma de noduri si toate aceste dependente sub forma de relatii

In pachetul de domeniu se afla si trei subpachete Unul dintre ele este pentruclasele folosite pentru a trata erorile aplicatiei In interiorul acestui pachet se afla douaclase pentru eroare si o exceptie cea folosita ın cazul ın care nu se gaseste ceea ce doresteutilizatorul Pe langa asta este clasa care are ca obiect raspunsul dat de sistem ın cazulunei erori la server Aceasta contine ın interiorul sau pe langa codul erorii si detalii despreeroarea trimisa Aceasta lista de detalii e reprezentata de obiectele de tipul celei de-a treiaclase din pachetul acesta

Celelalte doua subpachete aflate ın acest nivel sunt cele care contin clasele specialede cerere sau raspuns care au ajutat la maparea acestora mai bine In multe cazuri nua fost necesara trimiterea la interfata utilizator a tuturor informatiilor stocate despre oentitate si de aceea am ales sa creez ın aceste cazuri un obiect auxiliar care sa fie folositpe post de raspuns

Figura 54 Diagrama de clase pentru pachetul rdquorepositoriesrdquo

37

Cel de-al doilea nivel al aplicatiei backend este cel de rdquomagazierdquo (repositories) carecontine doar interfete de tip rdquoRepositoryrdquo

Aceste interfete sunt cele care fac operatiile directe asupra entitatilor din baza dedate

Unele interfete doar extind interfata care are deja implementate metodele CRUDsi din acest motiv nu au metode suplimentare iar altele au si metode ın plus care au carol sa execute interogari mai complexe asupra bazei de date In acele metode se pot scrieinterogarile ın Cypher pentru a putea primi informatii despre mai multe noduri sau desprerelatiile dintre acestea sau si pentru a returna doar anumite rezultate care ındeplinescanumite conditii In felul acesta a fost implementata si cererea de oferire a recomandarilorIn acel caz sistemul returneaza produsele care au ın descriere unul din lucrurile care se aflaın lista de obiecte sau servicii primite de la Facebook ca ıi plac utilizatorului

Nivelul de rdquoRepositoryrdquo este folosit direct de cel de-al treiea nivel cel de servi-ciu Acesta este nivelul la care se executa logica aplicatiei unde se comanda modul defunctionare al ıntregii aplicatii

Figura 55 Diagrama de clase pentru pachetul rdquoservicesrdquo

Pe acest nivel ajung toate cererile din server dupa ce trec de verificarile de securitateIn acest pachet se afla si clasa de securitate care face verificarile necesare In aceasta clasaexista o metoda ce se apeleaza la prima cerere cea de salvare a datelor de la Facebookdespre utilizator si care codifica id-ul utilizatorului si ıl trimite pe raspuns ınapoi interfeteiPe langa asta ın acea clasa se afla si o metoda care verifica faptul ca id-ul codificat esteal unui utilizator cu rol corespunzator pentru a face acea cerere

In plus ın acest pachet se afla si toate celelalte clase care fac diverse operatii pedatele din baza de date si dau raspunsuri cererilor din interfata Aici se afla logica care

38

comanda actiunile asupra utilizatorilor asupra prietenilor acestora asupra produselor siasupra comenzilor

Ultima clasa a acestui nivel este cea care se ocupa de trimiterea de email-uri Incazul ın care se face o noua comanda de catre un utilizator toti producatorii produselor depe comanda sunt notificati despre produsele lor pe care le doreste utilizatorul Din serviciulde comanda se apeleaza serviciul de email pentru fiecare producator din lista celor care auproduse care se afla pe lista comenzii utilizatorului

Ultimul si cel mai aproape de interfata utilizator este nivelul de web Acolo se aflatoate clasele de rdquoControllerrdquo ale aplicatiei server

Figura 56 Diagrama de clase pentru pachetul rdquowebrdquo

Toate cererile din interfata utilizator ıncearca sa se mapeze pe rutele declarate ınclase pentru a fi procesate ın metoda corespunzatoare Toata aceasta parte este foarteusor de implementat si mai ales foarte lizibil pentru programatori datorita adnotarilor dinJava Cu ajutorul acestora trebuie doar specificat care este numele URL-ului cererii careeste tipul de obiect asteptat si daca se trimite ca rdquoquery stringrdquo pe URL sau ın interiorulcorpului cererii si tipul raspunsului Pentru fiecare cerere care nu este apelata ın parteaneautentificata a utilizatorului primul lucru care se apeleaza este metoda de securitatepentru a verifica rolul si id-ul utilizatorului Daca din punctul de vedere al securitatii totuleste ın regula se apeleaza metoda corespunzatoare din pachetul de serviciu

39

O singura clasa este diferita de restul ın pachetul de controller si aceea este clasa deeroare Acolo se mapeaza erorile aparute ın timpul cererii si se trimite ınapoi ın interfatagrafica un raspuns cu cod de eroare specific nu numai 500 Generic Application Exceptioncum ar trimite fara aceasta clasa si cu detalii despre motivul aparitiei erorii

Datorita folosirii adnotarilor din java nu a fost necesara folosirea unor rdquodesignpatternrdquo-uri ın sistem De exemplu pentru a folosi ın nivelul de web ceva din pachetulde servicii trebuia doar acel obiect sa aiba adnotarea Autowired si se ınlocuieste atatfolosirea rdquodesign patternrdquo-ului Singleton cat si a celui de Factory Acel obiect nu trebuiecreat sau initializat se face asta implicit datorita adnotarii si de asemenea este folositapeste tot aceeasi instanta

In concluzie toate cererile venite din interfata grafica ajung ın nivelul de rdquocontrollerrdquode unde sunt trimise la cel de rdquoservicerdquopentru a fi procesate si facute eventualele modificarinecesare ın baza de date ca apoi raspunsul sa fie trimis ınapoi spre aplicatia client pentruafisare

512 Arhitectura componentei frontend

A doua componenta implementata a sistemului este aplicatia client frontend-ulAceasta a fost scrisa ın Java Script cu ajutorul framework-ului Ext JS compilarea

se face cu ajutorul Sencha CMD si mediul de implementare a fost IntelliJ IdeaCu ajutorul framework-ului Ext JS se scriu componente care apoi se initializeaza

unele pe altele Aplicatia porneste cu fisierul Applicationjs care este un fel de rdquomainrdquopentru aplicatie Aceasta initializeaza alte componente care la randul lor includ altecomponente si tot asa Structura poate fi foarte usor comparata cu una arborescenta dinacest punct de vedere

Framework-ul a fost creat sa functioneze ın felul acesta pentru ca scopul componen-telor este sa fie scrise ın asa fel ıncat sa poata pe viitor sa fie utilizate din nou Una dindorintele majore ın programare tot timpul este de a se scrie cod ıntr-o maniera ın care safie cat mai reutilizabil Iar framework-ul Ext JS exact asta ıncearca

Arhitectura aplicatiei client se gaseste ın figura 57 si este la randul ei ımpartita ınpachete ca si cea de server Similar cu pachetul de rdquodomainrdquo de la aplicatia de backendeste pachetul rdquomodelrdquo al interfetei utilizator Aici sunt rdquoclaserdquo care sunt simple POJO sicare sunt apoi folosite ın nivelele urmatoare Sunt mai putine decat clasele din rdquostorerdquodeoarece daca raspunsul de la server nu trebuie procesat nu sunt necesare se pot mapadirect obiectele din rdquostorerdquo pe componentele interfetei utilizator

Urmatorul nivel este cel pe care se afla clasele de rdquostorerdquo Acestea sunt cele careexecuta cererea spre backend si face legatura ıntre client si server Daca are o clasa derdquomodelrdquodeclarata atunci populeaza acel obiect cu datele primite de la server iar ın cazul ıncare nu este declarat un model se trimit datele exact asa cum s-au primit la nivelul urmatorde rdquoviewrdquo Acest nivel seamana din punct de vedere al functiei cu cel de rdquorepositoryrdquo de laaplicatia server deoarece ambele au rol de legatura Aceea facea legatura ıntre aplicatiesi baza de date si aceasta face legatura ıntre aplicatia client si aplicatia server

40

Figura 57 Diagrama de clase pentru aplicatia web

Cel de-al treilea pachet al aplicatiei este cel de rdquoviewrdquo In acest pachet se afla claselecare alcatuiesc partea vizuala a aplicatiei La randul ei si aceasta este alcatuita tot dincomponente Aplicatia deschide ın primul rand Main-ul care determina aparitia paginii deHome si afisarea ın meniu a optiunilor posibile ın functie de autentificare si rol Clasele deaici se executa de fapt la deschiderea aplicatiei fiind rdquosingle page applicationrdquo si tot atuncise ıncarca pe pagina componentele Ca si arhitectura a pachetului acesta este ımpartit larandul sau ın subpachete Pentru o mai buna organizare exista patru subpachete cateunul pentru fiecare tip de utilizator In felul acesta toate rdquoviewrdquo-urile care sunt specificeunui utilizator cu un anumit rol se afla ın acelasi subpachet

Cele patru subpachete existente ın pachetul rdquoviewrdquo sunt

1 Pachetul rdquomainrdquo care cuprinde rdquoviewrdquo-urile care se afla ın partea neautentificata aaplicatiei

2 Pachetul rdquoclientrdquo continand rdquoviewrdquo-urile pe care le poate accesa un utilizator simplu3 Pachetul rdquoproducerrdquo specific actiunilor unui utilizator care are rol de producator4 Pachetul rdquoadminrdquo care contine toate rdquoviewrdquo-urile care ıi apar unui utilizator care este

administrator al aplicatiei

Ultimul pachet si nivel al aplicatiei client este cel de rdquocontrollerrdquo In acest pachet

41

se afla clasele care fac actiunile din interfata grafica In timp ce pachetul rdquoviewrdquo continedoar partea grafica a aplicatiei adica modul ın care aceasta trebuie sa arate pachetulrdquocontrollerrdquo contine actiunea acestora modul ın care aplicatia trebuie sa functioneze

Ca si arhitectura si acest pachet a fost ımpartit la randul lui tot ın cele patrusubpachete ca si pachetul rdquoviewrdquo adica rdquomainrdquo rdquoclientrdquo rdquoproducerrdquo si rdquoadminrdquo In pluspentru a fi usor de gasit ce clasa de rdquocontrollerrdquo apartine carui rdquoviewrdquo am ales ca cele douasa aiba acelasi nume In felul acesta daca se doreste sa se gaseasca actiunile unui rdquoviewrdquose poate cauta dupa o clasa cu acelasi nume ın pachetul rdquocontrollerrdquo Numarul claselor dinacest pachet este mai mic decat cel al claselor din rdquoviewrdquo deoarece nu toate paginile dininterfata au actiuni suplimentare Daca singura actiune este ıncarcarea paginii cu date dela server adica doar o actiune simpla de GET datele se ıncarca cu ajutorul rdquostorerdquo-ului laıncarcarea paginii si nu este necesara nici o actiune suplimentara Paginile pe care se potface si actiuni de alt gen sau se deschid noi ferestre au nevoie de clase de rdquocontrollerrdquo

In concluzie arhitectura aplicatiei client este una bazata pe componente care ıncearcasa foloseasca cat mai multe clase reutilizabile

52 Structura bazei de date

Baza de date a aplicatiei este de tip graf de tipul Neo4j Pentru utilizare exista unprogram numit Neo4j ce trebuie instalat Acest program are si o interfata grafica ın carese pot vizualiza datele sub forma grafica si ın care se pot scrie de asemenea si interogariın limbajul acestei baze de date adica Cypher

Fiind o baza de date sub forma de graf datele stocate sunt salvate ın structurade date sub forma de noduri si relatii Entitatile din pachetul de domeniu din aplicatiabackend se gasesc ın baza de date sub forma unor noduri iar dependentele dintre nodurise mapeaza ın baza de date sub forma unor relatii Un element diferit fata de alte tipuride baze de date este faptul ca pe relatiile dintre noduri se pot salva atribute cum este ınaplicatie cazul pentru prieteniile dintre persoane In cazul acestora pe relatia dintre nodurise salveaza daca prietenia a fost sau nu acceptata

Pentru fiecare clasa POJO din aplicatia server clasa ce are doar metodele get si setsi se afla ın pachetul domain exista cate un tip de nod diferit ın baza de date cum estesi marcat ın diferite culori ın figura 58 Fiecare tip de nod are atributele proprii care potlua valori sau pot fi nule Iar fiecare obiect din Java reprezinta un nod diferit ın baza dedate

Neo4j a fost cea mai buna optiune pentru baza de date pentru ca aplicatia poate ficonsiderata o retea sociala Acest lucru se datoreaza relatiilor de prietenie dintre persoanesi a multiplelor relatii ıntre noduri Toate nodurile se afla ın acceasi componenta conexadeci nu exista noduri izolate care sa nu aiba nici o legatura cu nici un alt nod

Datorita acestei structuri a bazei de date este posibila implementarea cererii derecomandare ca o simpla interogare ın baza de date aceasta fiind cea mai simpla metodade implementare a unui sistem de genul acesta una mult mai complexa ar fi fost un

42

algoritm de ınvatare care sa ınvete tipare ale utilizatorilor si sa recomande cadouri pe bazaacestor informatii

Figura 58 Diagrama bazei de date pentru doi utilizatori

Un alt avantaj al acestui tip de baza de date este faptul ca datele nu sunt duplicateın baza de date Spre exemplu daca mai multi utilizatori au ca locatie acelasi oras nu secreaza cate un nod cu acea locatie de mai multe ori ci acel unic nod va avea cate o relatiecu fiecare utilizator care are ca locatie acel oras

In concluzie structura bazei de date a fost aleasa ın acest fel datorita tipului apli-catiei adica asemanatoare cu o retea sociala si datorita implementarii simple a unui sistemde recomandare pe o asemenea baza de date

53 Fluxul pentru diferite operatii

Pentru aplicatie cele mai importante cazuri de utilizare sunt salvarea informati-ilor despre utilizator primite de la Facebook pentru crearea unui profil si recomandareacadourilor pentru un utilizator al aplicatiei Din aceasta cauza cele doua cazuri de utilizarevor fi prezentate mai ın detaliu ın continuare

43

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 10: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

Capitolul 3

Studiu Bibliografic

Obiectivul acestui capitol este prezentarea conceptelor teoretice la baza carora staacest proiect Vor fi prezentate concepte precum modul de functionare al sistemelor derecomandare tipurile de sisteme de recomandare abordarea celor de la Netflix asupradomeniului Neo4j ca solutie pentru un sistem de recomandare utilizarea unei retele socialepentru crearea profilului unui utilizator si reteaua Facebook ca exemplu de astfel de reteaiar ın final solutii similare

31 Modul de functionare al sistemelor de recoman-

dare

Un sistem de recomandare este o tehnologie implementata ın situatiile ın care ar-ticole (produse filme evenimente) sunt recomandate utilizatorilor (clienti vizitatori uti-lizatori de aplicatii cititori) sau invers Numarul mare al utilizatorilor acestor aplicatiieste ceea ce face ca problema sa fie dificila si costisitoare de rezolvat

Motoarele de recomandare sunt ın esenta instrumente de filtrare a datelor careutilizeaza algoritmi si date pentru a recomanda cele mai relevante elemente unui anumitutilizator [9] Sau ın termeni simpli nu sunt altceva decat o forma automatizata a unuirdquovanzator ıntr-un magazin de hainerdquo Lui i se cere un produs si el nu numai ca arata acelprodus dar si altele asemanatoare pe care le-am putea cumpara

Un sistem de recomandare are trei faze de baza dupa cum este prezentat si ındiagrama 31 pe baza carora functioneaza Prima faza este cea de colectare a datelorSistemele de recomandare se bazeaza mereu pe date anterioare deci faza de ınceput ıncare acumuleaza informatii este esentiala si de multe ori o problema foarte grea de rezolvatAceasta problema se mai numeste si rdquocold startrdquo Problema este reprezentata de faptul caun utilizator nou al unei aplicatii nu are informatii stocate despre el sau despre activitatealui fiind nou Iar sistemele de recomandare nu pot sa stie de fapt ce ıi place lui decat dupace utilizeaza o perioada aplicatia De multe ori solutia adusa de oameni pentru aceastaproblema este un chestionar de ıntrebari adresat utilizatorului care sa ıl poata face sa se

5

Figura 31 Fazele unui sistem de recomandare1

ıncadreze ıntr-un tipDe fapt din aceasta cauza sistemele de recomandare devin tot mai bune si mai

exacte cu cat sunt folosite mai mult deoarece sunt stocate tot mai multe informatii despreutilizator

Cea de-a doua faza a unui sistem de recomandare este cea de ınvatare Acoloaplicatia trebuie sa stocheze datele despre utilizator si trebuie la urmatoarea recomandaresa se bazeze pe cele dinainte si ın functie de ele sa o faca Acest lucru poate fi realizat fiedirect pe baza setului de date colectat ın faza de colectare a informatiilor care ar puteafi bazat pe memorie sau bazat pe model fie prin activitatile utilizatorului care au fostobservate

A treia faza este cea de recomandare propriu-zisa ın care doar utilizatorul facecererea de recomandari si acestea ıi sunt trimise

32 Tipuri de sisteme de recomandare

In continuare ca studiu bibliografic au fost tipurile sistemelor de recomandare [11]Ca si teorie sunt mai mute tipuri de sisteme de recomandare si o reprezentare graficaa acestor tipuri este prezentata ın figura 32 Cea mai de baza ımpartire este ın douacategorii recomandari bazate pe continut si recomandari bazate pe filtrare colaborativa

Filtrarea bazata pe continut creeaza un profil de utilizator bazat pe o metoda deınvatare pentru a determina elementele pe care un anumit utilizator le-ar dori De exemplusite-ul poate utiliza un sistem de cuvinte cheie care sugereaza articole cu cuvinte cheiesimilare ın descrierea unui element pe care utilizatorul l-a cumparat anterior

Recomandarile bazate pe filtrare colaborativa se inspira din similaritatile cu ceilaltiutilizatori Gasesc utilizatori asemanantori cu cel pentru care se face recomandarea pebaza actiunilor din trecut despre aceia si se recomanda lucruri care le plac celorlalti Acesttip de recomandare se potriveste perfect cu recomandarile de filme Acolo un om cu gusturi

1httpswwwsciencedirectcomsciencearticlepiiS1110866515000341

6

asemanatoare va putea sa recomande cel mai bine un alt film unui prieten Cea mai simplaimplementare pentru asa ceva este sub forma unei matrici cu spatii goale ın locurile undenu se cunoaste informatie

Pe langa aceste tipuri de recomandari mai sunt si altele dar care nu sunt folosite lafel de des

Figura 32 Tipurile sistemelor de recomandare2

In filtrarea bazata pe criterii demografice se fac recomandari catre utilizatori pebaza informatiilor lor demografice Sistemul va sugera elemente care au fost selectate dealti utilizatori care se ıncadreaza ın acelasi profil demografic

Filtrarea bazata pe utilitate se bazeaza pe utilitatea pe care utilizatorul o va obtinede la produs Poate include lucruri precum fiabilitatea si disponibilitatea vanzatoruluipentru a se asigura ca recomanda produse usor de obtinut de catre utilizator

Filtrarea bazata pe cunostinte recomanda selectii pe baza preferintelor si modelelorde cumparare cunoscute despre utilizator Intrucat sistemul va sti ce a cumparat con-sumatorul ın trecut acesta poate face recomandari ın functie de ceea ce ar putea satisfaceaceste nevoi ın viitor

Filtrarea hibrida combina doua sau mai multe tehnici de recomandare diferite pentrua crea un sistem de recomandare mai detaliat

2httpswwwsciencedirectcomsciencearticlepiiS1110866515000341f0005

7

33 Abordarea Netflix

Foarte multa cercetare ın domeniul sistemelor de recomandare a fost influentata decei de la Netflix

Figura 33 Tipuri de recomandari oferite de Netflix3

Netflix este un serviciu de streaming care permite clientilor sa vizioneze o gamalarga de emisiuni TV filme documentare si multe altele pe mii de dispozitive conectatela internet

In figura 33 este o imagine a site-ului cu tipurile diferite de recomandari pe careacestia le ofera

Cheia succesului Netflix consta ın capacitatea lor de a anticipa ceea ce le placeutilizatorilor motiv pentru care fiecare doua din trei ore de vizionare ın Netflix provin dinrecomandari In trecut Netflix au folosit informatii despre sex si varsta pentru a determinace filme sa recomande Acum ei folosesc de exemplu ceea ce utilizatorul a urmaritınainte a cautat cat timp petrece utilizatorul vizionand filme si tipul de dispozitiv utilizatPredictiile din motorul de recomandare Netflix nu se bazeaza doar pe comportamentulutilizatorului ci si pe context (cum ar fi timpul zilei) popularitatea titlurilor noutateadiversitatea si cat de recent a fost scos filmul sunt factori importanti [7]

Premiul Netflix a fost o competitie lansata ın 2006 pentru cel mai bun algoritm defiltrare colaborativa pentru a prezice ratingurile utilizatorilor pentru filme pe baza eva-luarilor anterioare fara alte informatii despre utilizatori sau filme adica fara ca utilizatoriisau filmele sa fie identificate stiind doar numerele atribuite pentru concurs ale acestoraPremiul pentru castigator consta ın 1 milion de dolari Peste 2000 de echipe au depusseturile de predictie si peste 650 de echipe au depasit precizia algoritmului actual al Netflix

3httpstechblogglomexcompostrecommender-systemshtml

8

cu mai mult de 5 [11] Castigatorul a fost echipa BellKors Pragmatic Chaos care adepasit algoritmul Netflix cu 1006

Cei de la Netflix au fost extrem de multumiti de rezultatul obtinut si nu numai caau ıncorporat acel algoritm ın algoritmul lor existent de recomandare dar au initiat si o adoua editie a competitiei

34 Sisteme de recomandare cu Neo4j

Urmatoarea parte a studiului bibliografic s-a axat pe bazele de date de tip grafGraphDB si mai exact Neo4j ın comparatie cu celelalte tipuri de baze de date adica celerelationale In cartea [10] sunt prezentate aceste concepte din punct de vedere teoretic siın lucrarile de master [5] si [1] este prezentata aceasta comparatie ıntre diferite tipuri debaze de date pe o aplicatie reala

Limbajul care se foloseste ın bazele de date Neo4j este Cypher Cu ajutorul acestuiase mapeaza query-urile pe noduri si relatii Din punct de vedere teoretic diferenta ıntrebazele de date relationale si cele sub forma de graf consta ın modul ın care sunt stocatedatele In timp ce ın bazele de date relationale datele sunt stocate ın structuri de datesub forma de tabel ın cele sub forma de graf datele sunt stocate ın noduri Coloaneletabelelor din bazele de date relationale se mapeaza ın bazele de date sub forma de graf peproprietati Pentru a face o legatura ıntre tabelele relationale se foloseau rdquochei strainerdquo pecand la Neo4j exista relatii ıntre noduri Din cauza faptului ca bazele de date sub formade graf s-au inspirat din cele relationale exista o asemanare ıntre ele si toate lucrurile auun corespondent ın cealalta

In lucrarea [12] sunt prezentate avantajele folosirii unei baze de date sub forma degraf cand se lucreaza cu retele sociale La aplicatiile de tipul retelelor soriale relatiile dintrenoduri sunt partea cea mai importanta iar pentru acestea o baza de date sub forma degraf se mapeaza cel mai bine Un avantaj al bazelor de date sub forma de graf din punctulde vedere al programatorilor cu acestea se lucreaza foarte similar ca si cu cele relationaledupa cum se prezinta si ın [4]

Un exemplu de sistem de recomandare construit cu Neo4j este [11] In acesta lucrareeste prezentata construirea unui sistem de recomandare care sa recomande prieteni ıntr-oaplicatie de socializare In lucrare sunt patru abordari pentru construirea unui astfel desistem Prima consta ın recomandarea unor prieteni cu care utilizatorul ar avea prieteniın comun cea de-a doua sunt persoane cu care utilizatorul se afla ın acelasi grup cea de-atreia sunt utilizatori care au mers la aceleasi evenimente ca si utilizatorul si ultima abordareconsta ın recomandarea persoanelor cu cei mai multi prieteni In urma mai multor teste sistatistici s-a decis ca abordarea cea mai buna este prima cea cu prietenii ın comun Toateaceste patru metode de oferire a recomandarilor se mapeaza foarte usor pe o baza de datesub forma de graf si reprezinta doar cate un query destul de simplu ın Cypher O astfelde aplicatie s-ar fi mapat mult mai greu pe o baza de date relationala datorita multiplelorrelatii si legaturi

9

Un alt exemplu de aplicatie unde s-a ales baza de date Neo4j a fost [2] Aicipentru articolele politice pe care sistemul le recomanda se creeaza o combinatie ıntrerecomandarile obtinute din articolele care le plac oamenilor cu care utilizatorul vorbestemult si lucruri care le plac utilizatorilor cu care acesta are lucruri ın comun Si ın acest cazexista o multime de relatii ıntre utilizatori si articole si cel mai usor se obtin recomandarilecu o aplicatie sub forma de graf motiv pentru care au si ales Neo4j

35 Utilizarea retelei Facebook pentru crearea unui

profil utilizatorilor

In continuare ca studiu bibliografic au urmat sisteme asemanatoare cu sistemuldorit si modul ın care acestia au reusit sa creeze profilul utilizatorului [13] Problema ceamai mare este rdquocold startrdquo-ul Adica atunci cand un utilizator este nou ın aplicatie nuse stiu suficiente informatii despre el pentru a putea sa i se ofere recomandari Dupa ceacesta foloseste aplicatia o perioada de timp ar putea sa i se ofere recomandari bazate peactivitatea sa anterioara ın aplicatie Din acest motiv la ınceput recomandarile pot lasade dorit si pot fi nu tocmai corecte

O metoda ın care se poate rezolva aceasta problema se afla ın lucrarea de master[7] ın care la utilizatorii noi se recomanda restaurante pe baza pozitiei lor geograficeAtunci cand doresti sa mergi la un restaurant este foarte importanta distanta la care seafla acel restaurant Din aceasta cauza pentru un utilizator caruia sistemul nu stie ce sa ıirecomande ıi recomanda restaurante la ıntamplare dintre cele care se afla cel mai aproapede el In felul acesta dupa ce merge la unul din restaurante si da feedback sistemul poatedupa aceea sa ıi faca recomandari

In lucrarea [8] recomandarile pentru votare au doua abordari La prima i se reco-manda lucrurile care le-a recomandat persoana cu scorul cel mai bun Si cea de-a douaabordare consta ıntr-un set de ıntrebari la care un utilizator nou trebuie sa raspunda candısi face contul

In acest caz cea mai buna metoda ın care se poate rezolva aceasta problema parea fi sa se ia informatiile de la API-ul de la Facebook Facebook este o aplicatie extremde utilizata si care ofera ca informatii publice exact ce ar fi necesar pentru a recomandacadouri de exemplu data nasterii sau lucruri care ıi plac unui utilizator Cu ajutorulacestora se poate calcula varsta utilizatorului poate sa fie ıncadrat ıntr-un profil si sepoate afla stilul de lucruri care ıi plac

Toate aceste informatii publice de la Facebook pot fi salvate si pot fi utilizate maitarziu pentru a se creea recomandari pe baza lor In articolul [3] despre valoarea datelor dela Facebook se prezinta ca si caz de utilizare pentru un site de comert online Aceasta estefoarte asemanatoare din punct de vedere al recomandarilor cu aplicatia de recomandarecadouri Diferenta dintre cele doua este ca ın cazul uneia trebuie sa recomande produsepentru utilizatorul aplicatiei si cealalta pentru un prieten al acestuia

10

Din punct de vedere al aplicabilitatii Facebook este o retea sociala deci datele salese mapeaza foarte bine pe o baza de date de tip graf cum este prezentat si ın lucrarea [6]

Asadar daca la crearea contului utilizatorului ın aplicatie se iau si informatiile pu-blice despre utilizator se vor putea oferi recomandari mult mai corecte ınca de la ınceput

36 Solutii similare

Ca solutii similare pe piata online nu exista aplicatii folosite pentru a recomandacadouri personalizate specific pentru o persoana anume Multe site-uri considera ca eirecomanda cadouri ınsa acestea reprezinta de fapt o filtrare mai avansata a rezultatelorproduselor de pe site-ul lor

Un site care ofera cadouri personalizate este Giftly 4 prezentat ın figura 34 careofera o modalitate usoara de a oferi cadouri Acest site nu are parte de recomandari cia gasit un mod de a face oamenii sa primeasca mereu ceea ce ısi doresc Cel care oferacadoul nu ıl cumpara ci doar ıl sugereaza dar decizia finala asupra cadoului este la celcare ıl primeste Modul ın care functioneaza este

1 Se ofera un rdquocard cadourdquo prin email sms printat sau ca o felicitare de ınaltacalitate

2 Destinatarul alege cel mai convenabil mod de a primi cadoul rdquocard cadourdquo ınposta sau direct ca bani ın contul bancar sau contul PayPal

3 De fapt utilizatorul ıi sugereaza destinatarului ce ar vrea el sa ofere ca si cadouiar destinatarul trimite ca mesaj modul ın care a cheltuit banii

Figura 34 Site web Giftly

4httpswwwgiftlycom

11

Ofera de asemenea si sugestii de cadouri Un om cand navigheaza pe site poate sase uite la cadouri ın categoriile Popular Holidays Birthdays Drinks Eats Meals BackTo School Get Fresh Health Fitness Going Out Getaway Top Shelf For The HipsterClothes For Her Clothes For Him Congratulations Expecting Activities si Custom

Un alt site cu cadouri este Etsy 5 cu imaginea 35 care arata site-ul Etsy este o piataglobala pentru bunuri unice si creative Pe pietele lor milioane de oameni din ıntreagalume se conecteaza atat online cat si offline pentru a face vinde si cumpara bunuri uniceEtsy ofera de asemenea o gama larga de servicii si instrumente de vanzari care ajutaıntreprinzatorii creativi sa ınceapa sa gestioneze si sa-si masoare afacerile Misiunea loreste sa pastreze comertul uman Deci de fapt acest site sprijina mai mult producatoriinu comerciantii De asemenea este mai mult axat pe bunuri unice si lucruri rdquounicerdquo Ca sicelelalte site-uri de genul acesta are o modalitate de a cauta lucrurile mai inteligent maispecializat pe ceea ce te intereseaza Categoriile de cautare sunt Jewelry AccessoriesClothing Shoes Home Living Wedding Party Toys Entertainment Art CollectablesCraft Supplies Tools si Vintage

Figura 35 Site web Etsy

Cel de-al treilea site care ofera servicii asemanatoare este Gifts 6 prezentat ın figura36 Acesta se focuseaza pe cadouri pentru diverse ocazii cum ar fi zilele de nastereCraciun diverse aniversari si alte evenimente la care se cumpara cadouri Pentru parteade recomandare se ofera posibilitatea de a efectua un test despre acel om caruia dorestisa ıi cumperi cadoul care are ca scop ıncadrarea omului respectiv ıntr-un profil si apoi

5httpswwwetsycom6httpswwwgiftscom

12

alegerea unor sugestii ce s-ar potrivi unei persoane cu acel tip de personalitate O primaıntrebare se refera la genul persoanei si ıntrebarea este daca cadoul este pentru o femeieun barbat o fetita sau un baietel Cea de-a doua ıntrebare se refera la marja de varsta ıncare se ıncadreaza acel om de exemplu pentru barbat optiunile sunt adolescent barbat ınjur de 30 de ani sau barbat ın varsta Cea de-a treia ıntrebare se refera la personalitateaomului Mai exact se fac sugestii pentru tipuri de lucruri ce i-ar putea placea unui omcare are trasaturile descrise ın primele doua ıntrebari De exemplu la barbati ın jur de30 de ani optiunile sunt ıi place sportul ıi place natura e aventurier ıi place golful ıiplace sa faca gratare sa serveasca bauturi sa gateasca sa animeze ıi place sa se ımbraceelegant este sef e entuziasmat de bere sau e un fan al sporturilor Iar ın final ın functiede raspunsurile date la ıntrebari se afiseaza sugestii de cadouri care se potrivesc oamenilorcu acel tip de personalitate

Figura 36 Site web Gifts

Nordstrom 7 care este prezentat ın imaginea 37 are o abordare similara avand pesite o multime de optiuni de filtrare a cadourilor Se pot cauta ın acest site cadouri pentrubebelusi cadouri de Craciun bijuterii pentru femei optiunile sunt multiple Acest lucruofera utilizatorilor sugestii pentru a le fi mai usor sa ıncadreze aceasta persoana ıntr-unanumit tip Iar dupa alegerea categoriei toate sugestiile de cadouri oferite de catre sitese ıncadreaza ın acel tip Ca avantaj al acestui site este ca ei ofera si serviciul de livrareal cadoului dupa cumparare oriunde ın lume Un dezavantaj al multor site-uri de genulacesta este ca ofera livrare doar ın zona sa apropiata

7httpsshopnordstromcomcgifts

13

Figura 37 Site web Nordstrom

14

Capitolul 4

Analiza si Fundamentare Teoretica

In acest capitol vor fi prezentate cerintele functionale ale lucrarii ımpreuna cucerintele non-functionale ale acesteia De asemenea va fi prezentata diagrama cazurilor deutilizare si vor fi prezentate mai ın detaliu cazurile de utilizare principale ale aplicatiei Incontinuare se va prezenta perspectiva tehnologica a proiectului si se vor explica deciziiletehnologice luate In final se va prezenta diagrama conceptuala a aplicatiei

41 Cerinte functionale

bull Posibilitatea autentificarii ın aplicatie si crearii unui profil propriu din care se potutiliza informatii si cu ajutorul caruia utilizatorul poate fi ıncadrat ıntr-un profil

bull Utilizatorii pot crea prietenii ca ıntr-o retea de socializare pentru a putea afla infor-matii despre prieteni si pentru a li se putea recomanda cadouri pentru acestia

bull Cu ajutorul informatiilor de la Facebook un utilizator poate fi notificat dinainte caurmeaza ziua de nastere a unuia din prietenii lui si sa i se ofere mai multe variantede cadouri potrivite pentru acesta Aceasta informatie o primeste cu suficient timpınainte pentru a nu fi surprins fara un cadou De la Facebook pe langa informatiiledespre data zilei de nastere sunt importante si varsta sau lucrurile care ıi plac uti-lizatorului Toate acestea ajuta la crearea profilului utilizatorului pe baza caruia serecomanda dupa aceea cadourile

bull De asemenea sistemul poate recomanda si un cadou pentru alt tip de evenimentdecat zi de nastere de genul cadou de Craciun cadou de nunta cadou pentru unnou-nascut etc

bull In aplicatie vor fi adaugate si diferite produse iar pentru a face mai usoara cumparareade cadouri se va putea face si comanda pe internet In momentul ın care un utilizatorface o noua comanda producatorii produselor comandate sunt ınstiintati de existentaacestei noi comenzi

15

bull Pentru persoanele la care pe profilul de Facebook este insuficient completat saupentru a putea cumpara cadouri pentru o persoana care nu are Facebook sau nuare cont ın aceasta aplicatie si despre care ın acest fel nu se cunosc nici un felde informatii se vor putea filtra cautarile pentru cadou printr-o serie de ıntrebaristandard Aceste ıntrebari vor putea creea un rdquomini-profilrdquo pentru acea persoanapentru ca sistemul sa poata recomanda cadouri

42 Cerinte non-functionale

bull Securitate sistemul nu raspunde cererilor decat atunci cand utilizatorul a fost au-tentificat ın aplicatie si are rolul necesar pentru a face acea cerere

bull Portabilitate aplicatia nu depinde de sistemul de operare pe care ruleaza De aseme-nea nu e dependenta de browserul folosit de utilizator

bull Disponibilitate sistemul ramane stabil ın fata erorilor si functioneaza la fel si dupaaparitia unei erori

bull Extensibilitate sistemul permite adaugarea sau modificarea unor componente atuncicand cerintele aplicatiei se modifica Pe langa asta e flexibila unor dezvoltari ulte-rioare

43 Cazuri de utilizare

In aceasta sectiune se vor prezenta actorii aplicatiei diagrama cazurilor de utilizaresi vor fi descrise cazurile de utilizare de baza ale fiecarui actor

Ca si actori aplicatia are patru tipuri de utilizatori

bull utilizator anonimbull clientbull producatorbull administrator

Aplicatia este conceputa ın asa fel ıncat ıntre actori este o relatie de mostenire Acestlucru presupune ca un actor are posibilitatea de a efectua tot ce putea cel dinaintea lui siceva ın plus Deci utilizatorii anonimi au cele mai putine permisiuni iar administratoriiau permisiuni totale Acest lucru se vede foarte clar si ın diagrama cazurilor de utilizaredin imaginea 41

In continuare vor fi prezentate cazurile de utilizare

1 recomandare cadouri2 adaugare produs3 modificare rol utilizator

16

Figura 41 Digrama cazurilor de utilizare

17

431 Recomandare cadouri

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unutilizator trebuie sa le urmeze pentru a primi recomandari de cadouri pentru un cunoscutsi pentru a efectua o comanda

Actorul principal

Orice utilizator al aplicatiei

Parti interesate si interese

Utilizatorul care doreste sa cumpere un cadou este interesat de a gasi un cadoupotrivit pentru cineva pe care ıl cunoaste

Producatorul care e interesat sa ısi poata vinde produseleUtilizatorul care primeste cadoul fiind interesat sa primeasca un cadou care sa i se

potriveasca si care sa ıi placa

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand utilizatorul porneste aplicatia11 Utilizatorul verifica daca are cont de Facebook si daca are urmeaza pasul 111

daca nu 22111 Utilizatorul se autentifica ın aplicatie cu ajutorul credentialelor de la

Facebook12 Utilizatorul deschide sectiunea de recomandare cadouri13 Utilizatorul completeaza formularul cu datele ce trebuie introduse pentru a primi

recomandari de cadouri pentru un prieten14 Utilizatorul poate fi satisfacut cu recomandarile primite si atunci urmeaza pasul

141 iar daca nu este atunci urmeaza cazul alternativ 23141 Utilizatorul adauga ın cosul de cumparaturi cadouri pe care doreste sa

le cumpere15 Utilizatorul cere sa ısi vada cosul de cumparaturi16 Utilizatorul poate sa se declare multumit de cosul de cumparaturi caz ın care

urmeaza pasul 161 sau poate sa aleaga cazul alternativ 24161 Utilizatorul aproba cosul de cumparaturi si accepta sa se faca comanda

17 Sistemul introduce ın baza de date comanda18 Utilizatorul va putea vedea la sectiunea comenzilor sale noua comanda si statusul

ei19 Sistemul notifica producatorul de aparitia noii comenzi110 Utilizatorul se dezautentifica din aplicatie

18

Use-Case EndUtilizatorul se va deconecta din aplicatie si o va ınchide

Figura 42 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueazaAcest flux poate aparea la orice pas211 Utilizatorul deschide sectiunea de recomandare cadouri212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca utilizatorul nu are cont de Facebook

19

Acest flux poate aparea la pasul 11221 Utilizatorul deschide pagina de Facebook222 Utilizatorul ısi face un cont pe pagina de Facebook si ısi completeaza

date despre el223 Utilizatorul revine la aplicatia de recomandare cadouri si ıncearca din

nou sa se autentifice ın aplicatie224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca utilizatorul nu e multumit de recomandariAcest flux poate aparea la pasul 14231 Utilizatorul sterge din cos cadourile pe care nu le mai doreste si revine

la pagina de recomandari232 Utilizatorul adauga alte cadouri ın cos233 Cazul de utilizare continua de la pasul 141

24 Flux-ul alternativ daca utilizatorul nu e multumit de produsele din cosul decumparaturi

Acest flux poate aparea la pasul 16241 Utilizatorul revine ınapoi la formularul cu introducerea datelor despre

beneficiarul cadoului242 Utilizatorul completeaza din nou datele243 Cazul de utilizare continua de la pasul 13

Preconditii

1 Utilizatorul trebuie sa aiba un cont de Facebook pentru a se putea autentifica ınaplicatie

2 Utilizatorul trebuie sa fie autentificat ın aplicatie pentru a putea face orice actiunedin acest caz de utilizare

3 Utilizatorul trebuie sa deschida sectiunea de recomandare cadouri pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noua comanda este salvata ın baza de date2 Comanda apare ın sectiunea de comenzi a utilizatorului ımpreuna cu statusul ei

curent3 Producatorul este notificat ca are o noua comanda

432 Adaugare produs

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unproducator trebuie sa le urmeze pentru a introduce un nou produs ın aplicatie

20

Actorul principal

Utilizatorii cu rol de producator sau cu rol de administrator

Parti interesate si interese

Producatorul care doreste sa introduca produsul nou ın aplicatie

Utilizatorii simpli care au o mai mare varietate de produse din care sa li se reco-mande cadouri

Figura 43 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo

21

Flux de evenimente

Use-Case Start

Cazul de utilizare ıncepe atunci cand producatorul porneste aplicatia

11 Producatorul verifica daca are cont de Facebook si daca are urmeaza pasul111 daca nu 22

111 Producatorul se autentifica ın aplicatie cu ajutorul credentialelor de laFacebook

12 Producatorul deschide sectiunea de adaugare produs

13 Producatorul completeaza datele necesare despre noul produs ımpreuna cu tipulde persoana si eveniment care i s-ar potrivi

14 Producatorul verifica daca este multumit de datele introduse si daca da urmeazapasul 141 daca nu 23

141 Producatorul efectueaza operatia de adaugare produs

15 Sistemul adauga un nou produs ın baza de date

16 Sistemul notifica producatorul ca noul produs a fost introdus cu succes

17 Producatorul se dezautentifica din aplicatie

Use-Case End

Producatorul se va deconecta din aplicatie si o va ınchide

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Producatorul deschide sectiunea de adaugare produs

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca producatorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Producatorul deschide pagina de Facebook

222 Producatorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Producatorul revine la aplicatia de recomandare cadouri si ıncearca dinnou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca Producatorul nu e multumit de datele introduse despreprodus

Acest flux poate aparea la pasul 14

231 Producatorul sterge datele gresite despre produs

232 Producatorul adauga alte date despre produs

233 Cazul de utilizare continua de la pasul 141

22

Preconditii

1 Producatorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Producatorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Producatorul trebuie sa aiba cont cu rol de rdquoproducatorrdquo sau rdquoadminrdquo pentru aputea face operatia aceasta

4 Producatorul trebuie sa deschida sectiunea de adaugare produs pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noul produs este salvat ın baza de date2 Produsul poate fi adaugat la recomandarile unui utilizator din acel moment

433 Modificare rol utilizator

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unadministrator trebuie sa le urmeze pentru a modifica rolul unui utilizator al aplicatiei

Actorul principal

Un utilizator al aplicatiei care are rol de administrator

Parti interesate si interese

Administratorul care doreste sa modifice rolul unui utilizatorUtilizatorul care doreste sa ısi schimbe rolul

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand administratorul porneste aplicatia11 Administratorul verifica daca are cont de Facebook si daca are urmeaza pasul

111 daca nu 22111 Administratorul se autentifica ın aplicatie cu ajutorul credentialelor de

la Facebook12 Administratorul deschide sectiunea de utilizatori13 Sistemul ıi returneaza administratorului utilizatorii care nu sunt administratori14 Administratorul modifica rolul utilizatorului din utilizator simplu ın producator

sau invers

23

15 Administratorul cere executarea modificarii

16 Sistemul executa modificarea iar ın caz de succes urmeaza pasul 161 si ın cazde eroare pasul 23

161 Sistemul notifica administratorul ca modificarea a fost efectuata cusucces

17 Utilizatorul se dezautentifica din aplicatie

Use-Case End

Administratorul se va deconecta din aplicatie si o va ınchide

Figura 44 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo

24

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Administratorul deschide sectiunea de utilizatori

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca administratorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Administratorul deschide pagina de Facebook

222 Administratorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Administratorul revine la aplicatia de recomandare cadouri si ıncearcadin nou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca sistemul returneaza o eroare la modificarea utilizatorului

Acest flux poate aparea la pasul 16

231 Sistemul returneaza un mesaj de eroare la modificarea utilizatorului

232 Aplicatia afiseaza mesajul de eroare administratorului

233 Cazul de utilizare continua de la pasul 15

Preconditii

1 Administratorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Administratorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Utilizatorul trebuie sa aiba cont cu rol de administrator pentru a putea efectuaorice actiune din acest caz de utilizare

4 Administratorul trebuie sa deschida sectiunea utilizatori pentru a putea ındeplinicerintele din cazul de utilizare

Postconditii

1 Noul rol al utilizatorului este salvat ın baza de date

2 La urmatoarea autentificare a utilizatorului acesta va observa ca interfata si maiprecis meniurile si actiunile care le poate face ıi vor fi diferite

25

44 Perspectiva tehnologica

441 Neo4j

Neo4j 1 este un sistem de gestionare a bazelor de date sub forma de graf dezvoltatde Neo4j Inc Descris de dezvoltatorii sai ca o baza de date tranzactionala compatibilacu ACID Neo4j este cea mai populara baza de date sub forma de graf dupa clasamentulDB-Engines

Baza de date Neo4j (ca si orice alta baza de date sub forma de graf) este foartediferita de o baza de date relationala cum ar fi MS Access SQL Server MySQL etcBazele de date relationale utilizeaza tabele randuri si coloane pentru stocarea datelor

Neo4j nu utilizeaza tabele randuri si coloane pentru stocarea sau prezentarea datelorci noduri si relatii

Neo4j este foarte potrivit pentru stocarea datelor care au multe relatii interconec-tate Acestea sunt de fapt aplicatiile ın care merita sa fie folosite De fapt bazele de datesub forma de graf cum este Neo4j sunt mult mai bune la tratarea datelor interconectatedecat bazele de date relationale

Acest lucru se datoreaza faptului ca modelul sub forma de graf nu necesita de obiceio schema predefinita Nu e nevoie sa se creeze structura bazei de date ınainte de a fiıncarcate datele asa cum se face la o baza de date relationala

Dar principalul motiv pentru care Neo4j este mai bun pentru datele relationalepentru acest tip de aplicatii este modul ın care permite crearea relatiilor Neo4j este con-struit ın jurul relatiilor si atunci nu este nevoie sa se configureze chei primare constrangerichei straine pentru a predetermina nodurile care pot avea o relatie si la ce date Cu Neo4jse poate adauga orice legatura ıntre orice nod ori de cate ori este nevoie

Neo4j are aceste calitati care nu se gasesc nici la celelalte baze de date NoSQLBazele de date non-relationale pe langa cele sub forma de graf sunt cele de tip coloanade tip document de tip cheie-valoare si de tip multi-model Nici unul din aceste tipuri nuau ca principala functionalitate maparea relatiilor si facilitatea interogarilor ıntr-o baza dedate cu multe relatii ıntre entitati

Generarea de recomandari personalizate este unul dintre cele mai frecvente cazuride utilizare a unei baze de date sub forma de graf Unele dintre principalele beneficii aleutilizarii grafurilor pentru a genera recomandari includ

- Performanta Lipsa indexurilor permite calcularea recomandarilor ın timp realasigurand ca recomandarea este ıntotdeauna relevanta si reflecta informatii actualizate

- Model de date Modelul de graf cu proprietati permite combinarea cu usurinta aseturilor de date din mai multe surse

Un alt avantaj al bazelor de date sub forma de graf Neo4j este faptul ca respectatoate principiile din modelul de consistenta ACID

Garantia data de principiile ACID este ca ofera un mediu sigur ın care sa functionezedatele Acronimul ACID reprezinta

1httpsneo4jcomuse-casesreal-time-recommendation-engine

26

bull Atomic Toate operatiile dintr-o tranzactie reusesc sau fiecare operatie este reluatabull Consistent La finalizarea unei tranzactii baza de date este solida din punct de

vedere structuralbull Izolat Tranzactiile nu se lupta una cu cealalta Accesul controversat la date este

moderat de baza de date astfel ıncat tranzactiile par sa se execute succesivbull Durabil Rezultatele aplicarii unei tranzactii sunt permanente chiar si ın cazul unor

defectiuniCand vine vorba de tehnologiile NoSQL cele mai multe baze de date sub forma de

graf (inclusiv Neo4j) utilizeaza un model de consistenta ACID pentru a asigura ca datelesunt stocate ın siguranta si ın mod consecvent

Am ales baza de date sub forma de graf ca optiune pentru stocarea datelor deoarecedin toate lucrarile si articolele citite a fost optiunea cea mai buna pentru un sistem derecomandare Deci acesta se mapeaza perfect pe cerintele functionale ale proiectului Sidin optiunile de baze de date sub forma de graf Noe4j a avut de departe cele mai multeavantaje ea fiind si cea mai utilizata

442 Cypher

Cypher 2 este un limbaj declarativ de interogare pentru bazele de date sub formade graf care permite interogarea si actualizarea rapida a datelor Cypher este un limbajrelativ simplu dar foarte puternic Interogarile foarte complexe ale bazei de date pot fiusor exprimate prin intermediul limbajului Cypher

Este conceput pentru a fi un limbaj de interogare uman Scopul lui principal este dea face interogarile mult mai simple si unele interogari care la bazele de date relationale nuerau posibile le face posibile Constructiile sale se bazeaza pe grafica si pe limba englezalucru care ajuta la scrierea mai intuitiva a interogarilor Este construit pentru a fi maiintuitiv pentru citire si nu neaparat pentru scriere

Cypher se bazeaza pe modelul Graph Property care ın plus fata de elementelegrafice standard ale nodurilor si muchiilor (numite relatii ın Cypher) adauga etichete siproprietati ca si concepte Nodurile pot avea zero sau mai multe etichete ın timp ce fiecarerelatie este de exact un singur tip Nodurile si relatiile au de asemenea zero sau mai multeproprietati

Chypher este limbajul de interogare folosit la bazele de date Neo4j deci este opti-unea implicita atunci cand se alege Neo4j

443 Maven

Maven 3 este un instrument de management software si de ıntelegere a proiectelorsoftware Pe baza conceptului unui model de obiect de proiect (POM) Maven poategestiona construirea raportarea si documentarea unui proiect printr-o informatie centrala

2httpsneo4jcomdevelopercypher-query-language3httpswwwjavatpointcommaven-tutorial

27

Obiectivul principal al lui Maven este acela de a permite unui dezvoltator sa ınte-leaga starea completa a efortului de dezvoltare ın cel mai scurt timp Avantajele Mavensunt

bull instalarea rapida a proiectului fara fisiere buildxml complicate doar un POMbull procesul de construire este standardizat pentru toate proiectelebull usor de ınvatat si de utilizatbull configurarea unui proiect este foarte rapidabull bine documentat

Am ales sa folosesc Maven deoarece este una din cele mai comune optiuni pentru aimporta librariile ıntr-un proiect si este si cel mai documentat Deci mereu cand esti pusın dificultate poti cauta pe internet sugestii

444 Spring Boot

Spring Boot 4 este un framework din cadrul Spring care ofera setari implicite pentruconfigurarea codului si adnotari pentru a lansa rapid proiecte noi ın executie Urmaresteabordarea rdquoConfigurarea defectiunilor vizionaterdquo pentru a evita un numar mare de linii decod pentru configuratii si pentru a ımbunatati procesul de dezvoltare

Avantajele Spring Boot sunt1 Face foarte usoara dezvoltarea de aplicatii bazate pe Spring cu Java sau Groovy2 Reduce timpul de dezvoltare si creste productivitatea3 Evita scrierea multor linii de cod adnotari si configurare XML4 Este foarte usor de integrat cu alte framework-uri din aceasi familie Spring cum ar

fi Spring JDBC Spring ORM Spring Data Spring Security etc5 Urmareste abordarea rdquoConfigurarea implicita a optiunilorrdquo pentru a reduce efortul

pentru dezvoltatori6 Ofera servere HTTP ıncorporate cum ar fi Tomcat Jetty etc pentru a dezvolta si

testa aplicatiile web foarte usor7 Ofera instrumentul CLI (Command Line Interface) pentru a dezvolta si testa apli-

catiile de tip rdquoSpring Bootrdquo (Java sau Groovy) din linia de comanda foarte usor sirapidAm ales ca optiune pentru partea de backend acest framework deoarece simplifica

foarte mult lucrurile Datorita lui un programator poate sa ısi concentreze mai tare energiape a construi proiectul din punctul de vedere al buissness-ului logic nu din punctul devedere al configurarilor necesare

445 Sencha CMD si ExtJS

Sencha CMD 5 este un instrument linie de comanda cross-platform care ofera multesarcini automate ın ciclul complet de viata al unei aplicatii ExtJS de la generarea unui

4httpswwwjavatpointcomspring-boot-tutorial5httpsdocssenchacomcmd

28

nou proiect la lansarea unei aplicatii ın productie

Sencha Cmd ofera o colectie de caracteristici puternice pentru economisirea timpu-lui care functioneaza ımpreuna cu Sencha ExtJS si Sencha Touch

Ext JS 6 este un framework pur JavaScript pentru construirea de aplicatii webinteractive cross-platform utilizand tehnici precum scripting Ajax DHTML si DOM

Avantajele framework-ului ExtJS sunt

1 Documentatia Extjs este foarte cuprinzatoare si bine ıntretinuta2 Aspectul cheie al bibliotecii EXTJS este suportul de tip cross-browser3 Framework-ul ExtJS ofera o multitudine de elemente UI Aceste elemente includ

forme casete de dialog file arbori si tabele4 Framework-ul ExtJS include suport pentru implementarile Ajax5 ExtJS ofera performante excelente Framework-ul este complet orientat spre obiecte

si este extensibil asta pentru ca este scris ın JavaScript

Pentru partea de frontend se foloseste framework-ul ExtJS deoarece are o arhitec-tura ce se mapeaza foarte bine pe proiectele de frontend si anume arhitectura bazata pecomponente Aceasta face ca ın proiect codul sa fie mult mai organizat si procesul dedezvoltare al proiectului sa fie mult mai scurt prin identificarea mai usoara a erorilor

446 Facebook API(Graph API)

Graph API 7 este modul principal de a pune date ın platforma Facebook si de aobtine date din platforma Facebook Este un API bazat pe HTTP pe care aplicatiile ılpot utiliza pentru interogarea datelor pentru a introduce postari noi pentru gestionareaanunturilor sau pentru a ıncarca fotografii

Este denumit Graph API dupa ideea unui rdquograf socialrdquo - o reprezentare sub formade graf a informatiilor de pe Facebook Este compus din

bull noduri - ın esenta obiecte individuale cum ar fi un utilizator o fotografie o paginasau un comentariu

bull muchii - conexiuni ıntre o colectie de obiecte si un singur obiect cum ar fi fotografiilede pe o pagina sau comentariile de la o fotografie

bull campuri - date despre un obiect cum ar fi ziua de nastere a unui utilizator saunumele paginii

De obicei se utilizeaza noduri pentru a obtine date despre un anumit obiect se uti-lizeaza muchii pentru a obtine colectii de obiecte legate de un singur obiect si se utilizeazacampurile pentru a obtine date despre un singur obiect sau mai multe obiecte dintr-ocolectie

Am folosit Facebook API ca solutie pentru a ımbunatati problema de rdquocold startrdquopentru ca este singurul site pe care marea majoritate a oamenilor au cont si salveazalucrurile care le plac Deci se potrivea perfect peste nevoile aplicatiei mele

6httpdocssenchacomextjs6207httpsdevelopersfacebookcomdocsgraph-api

29

447 Git

Git 8 este un sistem de control a versionarii pentru urmarirea modificarilor ın fisierelede pe computer si coordonarea activitatii asupra acestor fisiere ın randul mai multor per-soane Este utilizat ın principal pentru gestionarea codului sursa ın dezvoltarea de softwaredar poate fi folosit pentru a urmari schimbarile ın orice set de fisiere

Avantaje ale Git

bull Modelul distribuit numai ceea ce se doreste se face publicbull Branching-ul si merging-ul sunt usoarebull Fluxul de lucru este flexibilbull Integritatea datelor este asigurata Deoarece GIT utilizeaza arbori SHA1 coruperea

datelor din motive externe poate fi usor detectatabull Rapid Git este foarte rapid chiar si ın comparatie cu alte sisteme de control a

versionarii

Am folosit Git pentru a avea la proiect un back-up ın caz ca se ıntampla ceva cuproiectul salvat pe calculator

45 Arhitectura conceptuala

In figura 45 este prezentata arhitectura conceptuala a sistemului Acesta este ım-partit ın doua mari parti backend-ul si frontend-ul care comunica ıntre ele si ısi trimitinformatii

Se poate observa ca baza de date este de tip graf mai exact Neo4j si comunica cubackend-ul pentru a putea lucra cu datele stocate Backend-ul este structurat pe nivelefiecare cu un diferit rol si care trebuie parcurs pentru a procesa datele din interfata ınbaza de date Cele trei nivele sunt cel de Repository cel de Service si cel ControllerToate interogarile venite din interfata utilizator ajung ın nivelul de Controller Dupa ceinterogarile trec de securitatea sistemului ajung ın nivelul de Service Acolo se proceseazasi se afla partea de logica a aplicatiei Pentru a interactiona cu baza de date din Servicese apeleaza metodele din nivelul de Repository

In continuare backend-ul comunica prin protocolul HTTP cu interfata grafica cucare interactioneaza clientii aplicatiei Interfata este scrisa ın Ext JS si are o parte de Viewsi o parte de Controller care este cea care comunica cu backend-ul

Pentru partea de autentificare sistemul interactioneaza cu API-ul de la Facebookde la care ia dupa autentificare un access token Cu ajutorul acestuia ia dupa aceea datelenecesare pentru a putea crea un profil utilizatorului

8httpsguidesgithubcomintroductiongit-handbook

30

Figura 45 Arhitectura conceptuala

31

Capitolul 5

Proiectare de Detaliu siImplementare

In acest capitol vor fi prezentate detalii de implementare ale sistemului de recoman-dare incluzand o ımpartire al acestuia ın componentele care ıl cuprind

Obiectivul este de a prezenta arhitectura si modul de implementare al aplicatieipe baza datelor descoperite ın studiul bibliografic de la capitolul trei si cu tehnologiilehotarate la capitolul patru Pe langa asta va fi prezentata si structura bazei de date sideciziile luate pentru securitatea aplicatiei

51 Arhitectura sistemului

Din punctul de vedere al arhitecturii aplicatia se poate considera ca este alcatuitadin patru mari componente

1 API-ul de la Facebook2 Aplicatia client care reprezinta interfata grafica a aplicatiei3 Aplicatia server adica backendul aplicatiei si partea ın care se afla partea de rdquobusiness

logicrdquo4 Baza de date

Partea componenta reprezentata de API-ul de la Facebook este doar o componentacu care aplicatia se integreaza si pe care aceasta o foloseste In interactiunea cu ea interfatada o cerere de autentificare apare o fereastra de la Facebook ın care utilizatorul introducecredentialele de la API-ul de Facebook se primeste ınapoi un access token si cu ajutorulacestuia face o cerere pentru a primi datele personale ale utilizatorului pentru creeareaprofilului utilizator

Urmatoarea parte a aplicatiei este interfata utilizator frontend-ul care reprezintapartea cu care utilizatorul interactioneaza si locul unde ıi sunt afisate informatiile

Cererile din interfata ajung ın a treia parte componenta a sistemului partea deserver adica backend-ul aplicatiei Acolo toate cererile sunt citite si procesate iar raspun-

33

sul lor este trimis la interfata utilizator Aceasta este partea care reprezinta rdquogandireardquoaplicatiei Aceea este componenta care face legatura ıntre cererile utilizatorului din inter-fata si datele stocate ın baza de date

Ultima componenta a aplicatiei o reprezinta baza de date care are ca rol sa stochezedatele despre utilizatori produse si comenzi Ea este o baza de date sub forma de grafde tipul Neo4j Acolo se salveaza entitatile aplicatiei sub forma de noduri si dependenteleıntre acestea sub forma de relatii ıntre aceste noduri

Figura 51 Diagrama de rdquodeploymentrdquo

In figura 51 este prezentata diagrama de rdquodeploymentrdquo a sistemului cu cele patrucomponente ale sistemului Aplicatia client comunica cu API-ul de la Facebook prin pro-tocolul securizat HTTPS cu backend-ul prin protocolul HTTP iar backend-ul cu baza dedate prin JDBC

Aplicatia a putut fi ımpartita ın aceste componente separate deoarece fiecare dintreele poate functiona independent de celelalte comunica cu ele doar prin mesaje Din acestmotiv locul unde ruleaza acestea pot sa fie pe servere diferite In plus daca aplicatiaar fi pusa pe servere pentru utilizatori ar putea fi mai multe servere pe care ruleaza ocomponenta si prin rdquoload balancingrdquo sa se trimita cererile ımpartite ıntre ele

Cum astfel componentele nu depind foarte mult unele de altele si pot rula faraa le interesa de unde le sunt trimise cererile este arhitectura cea mai corecta deoarecedefectarea sau o posibila eroare la una din ele nu o influenteaza cu nimic pe o alta Dacatoate ar rula pe acelasi server o eventuala defectiune a acestuia ar ınsemna o defectiune aıntregului sistem Insa daca exista mai multe noduri si se afla pe servere diferite pot doartoate cererile sa fie redirectionate spre un nod care functioneaza si aplicatia sa functionezepentru clienti la fel ca ınainte

34

Un alt avantaj al arhitecturii ar fi faptul ca la o lansare viitoare catre clienti se poatelansa doar componenta la care s-au facut modificari De asemenea aplicatia ar putea aveape viitor si o componenta mobila Iar cum serverul e independent poate fi acelasi serverfolosit de o alta aplicatie client

511 Arhitectura componentei backend

Arhitectura backend-ului este si ea ımpartita ın mai multe pachete pentru o maibuna structura si pentru o cat mai mica dependenta ıntre diversele componente Astfelcuplarea este minima ıntre clase si eventualele modificari ulterioare pot fi mai usor defacut

Serverul a fost implementat ın Java cu ajutorul framework-ului Spring Boot iarmediul de dezvoltare folosit a fost Intellij IDEA

Din punctul de vedere al ımpartirii arhitectura serverului aplicatiei este structurataın patru pachete si o clasa ın afara acestora Acea clasa este rdquomainrdquo-ul aplicatiei este parteacare trebuie rulata pentru a porni serverul Din cauza ca este o aplicatie Spring Boot si nuuna String singura adnotare necesara pentru a sti ca aceea este clasa rdquoradacinardquoa aplicatieieste SpringBootApplication

Cele patru pachete ale serverului sunt1 Cel de domeniu (domain) cu clasele POJO care reprezinta entitatile din baza de

date2 Cel de rdquomagazierdquo (repositories) care este cel care face direct actiunile ın baza de date3 Cel de serviciu (services) ın care se afla partea de logica a ıntregii aplicatii4 Cel de web ın care se afla clasele de rdquocontrollerrdquo

Figura 52 Diagrama de pachete pentru backend

35

Ca si dependente nivelul de web ıl foloseste pe cel de seviciu cel de serviciu ılfoloseste pe cel de rdquomagazierdquo iar clasele din pachetul de domeniu sunt folosite ın toatecelelalte pachete

In continuare voi prezenta pe rand fiecare nivel al serverului adica fiecare pachet

Figura 53 Diagrama de clase pentru pachetul rdquodomainrdquo

36

Nivelul de domeniu (domain) este alcatuit ın primul rand din clasele care suntentitati ın baza de date Acestea sunt reprezentate de toate clasele ce stocheaza informatiidespre utilizatori si despre produse si comenzi Pe langa informatiile personale despre unutilizator de genul numelui email-ului sau data nasterii care sunt salvate ın entitateapersoana se stocheaza despre utilizator ın clase diferite informatii de genul locului undelocuieste locul unde a copilarit locurilor unde a facut scoala locului unde lucreaza sau celmai important pentru aplicatia aceasta lucrurilor care ıi plac In afara acestor informatiidespre utilizatori sunt si clase cu informatiile despre prieteni despre produse sau desprecomenzi

Din cauza faptului ca aplicatia este de tipul unei retele sociale ın care exista prieteniiıntre persoane exista dependente ıntre toate entitatile aplicatiei Acesta este si motivulpentru care am ales baza de date sub forma de graf pe care sa se mapeze toate acesteentitati sub forma de noduri si toate aceste dependente sub forma de relatii

In pachetul de domeniu se afla si trei subpachete Unul dintre ele este pentruclasele folosite pentru a trata erorile aplicatiei In interiorul acestui pachet se afla douaclase pentru eroare si o exceptie cea folosita ın cazul ın care nu se gaseste ceea ce doresteutilizatorul Pe langa asta este clasa care are ca obiect raspunsul dat de sistem ın cazulunei erori la server Aceasta contine ın interiorul sau pe langa codul erorii si detalii despreeroarea trimisa Aceasta lista de detalii e reprezentata de obiectele de tipul celei de-a treiaclase din pachetul acesta

Celelalte doua subpachete aflate ın acest nivel sunt cele care contin clasele specialede cerere sau raspuns care au ajutat la maparea acestora mai bine In multe cazuri nua fost necesara trimiterea la interfata utilizator a tuturor informatiilor stocate despre oentitate si de aceea am ales sa creez ın aceste cazuri un obiect auxiliar care sa fie folositpe post de raspuns

Figura 54 Diagrama de clase pentru pachetul rdquorepositoriesrdquo

37

Cel de-al doilea nivel al aplicatiei backend este cel de rdquomagazierdquo (repositories) carecontine doar interfete de tip rdquoRepositoryrdquo

Aceste interfete sunt cele care fac operatiile directe asupra entitatilor din baza dedate

Unele interfete doar extind interfata care are deja implementate metodele CRUDsi din acest motiv nu au metode suplimentare iar altele au si metode ın plus care au carol sa execute interogari mai complexe asupra bazei de date In acele metode se pot scrieinterogarile ın Cypher pentru a putea primi informatii despre mai multe noduri sau desprerelatiile dintre acestea sau si pentru a returna doar anumite rezultate care ındeplinescanumite conditii In felul acesta a fost implementata si cererea de oferire a recomandarilorIn acel caz sistemul returneaza produsele care au ın descriere unul din lucrurile care se aflaın lista de obiecte sau servicii primite de la Facebook ca ıi plac utilizatorului

Nivelul de rdquoRepositoryrdquo este folosit direct de cel de-al treiea nivel cel de servi-ciu Acesta este nivelul la care se executa logica aplicatiei unde se comanda modul defunctionare al ıntregii aplicatii

Figura 55 Diagrama de clase pentru pachetul rdquoservicesrdquo

Pe acest nivel ajung toate cererile din server dupa ce trec de verificarile de securitateIn acest pachet se afla si clasa de securitate care face verificarile necesare In aceasta clasaexista o metoda ce se apeleaza la prima cerere cea de salvare a datelor de la Facebookdespre utilizator si care codifica id-ul utilizatorului si ıl trimite pe raspuns ınapoi interfeteiPe langa asta ın acea clasa se afla si o metoda care verifica faptul ca id-ul codificat esteal unui utilizator cu rol corespunzator pentru a face acea cerere

In plus ın acest pachet se afla si toate celelalte clase care fac diverse operatii pedatele din baza de date si dau raspunsuri cererilor din interfata Aici se afla logica care

38

comanda actiunile asupra utilizatorilor asupra prietenilor acestora asupra produselor siasupra comenzilor

Ultima clasa a acestui nivel este cea care se ocupa de trimiterea de email-uri Incazul ın care se face o noua comanda de catre un utilizator toti producatorii produselor depe comanda sunt notificati despre produsele lor pe care le doreste utilizatorul Din serviciulde comanda se apeleaza serviciul de email pentru fiecare producator din lista celor care auproduse care se afla pe lista comenzii utilizatorului

Ultimul si cel mai aproape de interfata utilizator este nivelul de web Acolo se aflatoate clasele de rdquoControllerrdquo ale aplicatiei server

Figura 56 Diagrama de clase pentru pachetul rdquowebrdquo

Toate cererile din interfata utilizator ıncearca sa se mapeze pe rutele declarate ınclase pentru a fi procesate ın metoda corespunzatoare Toata aceasta parte este foarteusor de implementat si mai ales foarte lizibil pentru programatori datorita adnotarilor dinJava Cu ajutorul acestora trebuie doar specificat care este numele URL-ului cererii careeste tipul de obiect asteptat si daca se trimite ca rdquoquery stringrdquo pe URL sau ın interiorulcorpului cererii si tipul raspunsului Pentru fiecare cerere care nu este apelata ın parteaneautentificata a utilizatorului primul lucru care se apeleaza este metoda de securitatepentru a verifica rolul si id-ul utilizatorului Daca din punctul de vedere al securitatii totuleste ın regula se apeleaza metoda corespunzatoare din pachetul de serviciu

39

O singura clasa este diferita de restul ın pachetul de controller si aceea este clasa deeroare Acolo se mapeaza erorile aparute ın timpul cererii si se trimite ınapoi ın interfatagrafica un raspuns cu cod de eroare specific nu numai 500 Generic Application Exceptioncum ar trimite fara aceasta clasa si cu detalii despre motivul aparitiei erorii

Datorita folosirii adnotarilor din java nu a fost necesara folosirea unor rdquodesignpatternrdquo-uri ın sistem De exemplu pentru a folosi ın nivelul de web ceva din pachetulde servicii trebuia doar acel obiect sa aiba adnotarea Autowired si se ınlocuieste atatfolosirea rdquodesign patternrdquo-ului Singleton cat si a celui de Factory Acel obiect nu trebuiecreat sau initializat se face asta implicit datorita adnotarii si de asemenea este folositapeste tot aceeasi instanta

In concluzie toate cererile venite din interfata grafica ajung ın nivelul de rdquocontrollerrdquode unde sunt trimise la cel de rdquoservicerdquopentru a fi procesate si facute eventualele modificarinecesare ın baza de date ca apoi raspunsul sa fie trimis ınapoi spre aplicatia client pentruafisare

512 Arhitectura componentei frontend

A doua componenta implementata a sistemului este aplicatia client frontend-ulAceasta a fost scrisa ın Java Script cu ajutorul framework-ului Ext JS compilarea

se face cu ajutorul Sencha CMD si mediul de implementare a fost IntelliJ IdeaCu ajutorul framework-ului Ext JS se scriu componente care apoi se initializeaza

unele pe altele Aplicatia porneste cu fisierul Applicationjs care este un fel de rdquomainrdquopentru aplicatie Aceasta initializeaza alte componente care la randul lor includ altecomponente si tot asa Structura poate fi foarte usor comparata cu una arborescenta dinacest punct de vedere

Framework-ul a fost creat sa functioneze ın felul acesta pentru ca scopul componen-telor este sa fie scrise ın asa fel ıncat sa poata pe viitor sa fie utilizate din nou Una dindorintele majore ın programare tot timpul este de a se scrie cod ıntr-o maniera ın care safie cat mai reutilizabil Iar framework-ul Ext JS exact asta ıncearca

Arhitectura aplicatiei client se gaseste ın figura 57 si este la randul ei ımpartita ınpachete ca si cea de server Similar cu pachetul de rdquodomainrdquo de la aplicatia de backendeste pachetul rdquomodelrdquo al interfetei utilizator Aici sunt rdquoclaserdquo care sunt simple POJO sicare sunt apoi folosite ın nivelele urmatoare Sunt mai putine decat clasele din rdquostorerdquodeoarece daca raspunsul de la server nu trebuie procesat nu sunt necesare se pot mapadirect obiectele din rdquostorerdquo pe componentele interfetei utilizator

Urmatorul nivel este cel pe care se afla clasele de rdquostorerdquo Acestea sunt cele careexecuta cererea spre backend si face legatura ıntre client si server Daca are o clasa derdquomodelrdquodeclarata atunci populeaza acel obiect cu datele primite de la server iar ın cazul ıncare nu este declarat un model se trimit datele exact asa cum s-au primit la nivelul urmatorde rdquoviewrdquo Acest nivel seamana din punct de vedere al functiei cu cel de rdquorepositoryrdquo de laaplicatia server deoarece ambele au rol de legatura Aceea facea legatura ıntre aplicatiesi baza de date si aceasta face legatura ıntre aplicatia client si aplicatia server

40

Figura 57 Diagrama de clase pentru aplicatia web

Cel de-al treilea pachet al aplicatiei este cel de rdquoviewrdquo In acest pachet se afla claselecare alcatuiesc partea vizuala a aplicatiei La randul ei si aceasta este alcatuita tot dincomponente Aplicatia deschide ın primul rand Main-ul care determina aparitia paginii deHome si afisarea ın meniu a optiunilor posibile ın functie de autentificare si rol Clasele deaici se executa de fapt la deschiderea aplicatiei fiind rdquosingle page applicationrdquo si tot atuncise ıncarca pe pagina componentele Ca si arhitectura a pachetului acesta este ımpartit larandul sau ın subpachete Pentru o mai buna organizare exista patru subpachete cateunul pentru fiecare tip de utilizator In felul acesta toate rdquoviewrdquo-urile care sunt specificeunui utilizator cu un anumit rol se afla ın acelasi subpachet

Cele patru subpachete existente ın pachetul rdquoviewrdquo sunt

1 Pachetul rdquomainrdquo care cuprinde rdquoviewrdquo-urile care se afla ın partea neautentificata aaplicatiei

2 Pachetul rdquoclientrdquo continand rdquoviewrdquo-urile pe care le poate accesa un utilizator simplu3 Pachetul rdquoproducerrdquo specific actiunilor unui utilizator care are rol de producator4 Pachetul rdquoadminrdquo care contine toate rdquoviewrdquo-urile care ıi apar unui utilizator care este

administrator al aplicatiei

Ultimul pachet si nivel al aplicatiei client este cel de rdquocontrollerrdquo In acest pachet

41

se afla clasele care fac actiunile din interfata grafica In timp ce pachetul rdquoviewrdquo continedoar partea grafica a aplicatiei adica modul ın care aceasta trebuie sa arate pachetulrdquocontrollerrdquo contine actiunea acestora modul ın care aplicatia trebuie sa functioneze

Ca si arhitectura si acest pachet a fost ımpartit la randul lui tot ın cele patrusubpachete ca si pachetul rdquoviewrdquo adica rdquomainrdquo rdquoclientrdquo rdquoproducerrdquo si rdquoadminrdquo In pluspentru a fi usor de gasit ce clasa de rdquocontrollerrdquo apartine carui rdquoviewrdquo am ales ca cele douasa aiba acelasi nume In felul acesta daca se doreste sa se gaseasca actiunile unui rdquoviewrdquose poate cauta dupa o clasa cu acelasi nume ın pachetul rdquocontrollerrdquo Numarul claselor dinacest pachet este mai mic decat cel al claselor din rdquoviewrdquo deoarece nu toate paginile dininterfata au actiuni suplimentare Daca singura actiune este ıncarcarea paginii cu date dela server adica doar o actiune simpla de GET datele se ıncarca cu ajutorul rdquostorerdquo-ului laıncarcarea paginii si nu este necesara nici o actiune suplimentara Paginile pe care se potface si actiuni de alt gen sau se deschid noi ferestre au nevoie de clase de rdquocontrollerrdquo

In concluzie arhitectura aplicatiei client este una bazata pe componente care ıncearcasa foloseasca cat mai multe clase reutilizabile

52 Structura bazei de date

Baza de date a aplicatiei este de tip graf de tipul Neo4j Pentru utilizare exista unprogram numit Neo4j ce trebuie instalat Acest program are si o interfata grafica ın carese pot vizualiza datele sub forma grafica si ın care se pot scrie de asemenea si interogariın limbajul acestei baze de date adica Cypher

Fiind o baza de date sub forma de graf datele stocate sunt salvate ın structurade date sub forma de noduri si relatii Entitatile din pachetul de domeniu din aplicatiabackend se gasesc ın baza de date sub forma unor noduri iar dependentele dintre nodurise mapeaza ın baza de date sub forma unor relatii Un element diferit fata de alte tipuride baze de date este faptul ca pe relatiile dintre noduri se pot salva atribute cum este ınaplicatie cazul pentru prieteniile dintre persoane In cazul acestora pe relatia dintre nodurise salveaza daca prietenia a fost sau nu acceptata

Pentru fiecare clasa POJO din aplicatia server clasa ce are doar metodele get si setsi se afla ın pachetul domain exista cate un tip de nod diferit ın baza de date cum estesi marcat ın diferite culori ın figura 58 Fiecare tip de nod are atributele proprii care potlua valori sau pot fi nule Iar fiecare obiect din Java reprezinta un nod diferit ın baza dedate

Neo4j a fost cea mai buna optiune pentru baza de date pentru ca aplicatia poate ficonsiderata o retea sociala Acest lucru se datoreaza relatiilor de prietenie dintre persoanesi a multiplelor relatii ıntre noduri Toate nodurile se afla ın acceasi componenta conexadeci nu exista noduri izolate care sa nu aiba nici o legatura cu nici un alt nod

Datorita acestei structuri a bazei de date este posibila implementarea cererii derecomandare ca o simpla interogare ın baza de date aceasta fiind cea mai simpla metodade implementare a unui sistem de genul acesta una mult mai complexa ar fi fost un

42

algoritm de ınvatare care sa ınvete tipare ale utilizatorilor si sa recomande cadouri pe bazaacestor informatii

Figura 58 Diagrama bazei de date pentru doi utilizatori

Un alt avantaj al acestui tip de baza de date este faptul ca datele nu sunt duplicateın baza de date Spre exemplu daca mai multi utilizatori au ca locatie acelasi oras nu secreaza cate un nod cu acea locatie de mai multe ori ci acel unic nod va avea cate o relatiecu fiecare utilizator care are ca locatie acel oras

In concluzie structura bazei de date a fost aleasa ın acest fel datorita tipului apli-catiei adica asemanatoare cu o retea sociala si datorita implementarii simple a unui sistemde recomandare pe o asemenea baza de date

53 Fluxul pentru diferite operatii

Pentru aplicatie cele mai importante cazuri de utilizare sunt salvarea informati-ilor despre utilizator primite de la Facebook pentru crearea unui profil si recomandareacadourilor pentru un utilizator al aplicatiei Din aceasta cauza cele doua cazuri de utilizarevor fi prezentate mai ın detaliu ın continuare

43

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 11: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

Figura 31 Fazele unui sistem de recomandare1

ıncadreze ıntr-un tipDe fapt din aceasta cauza sistemele de recomandare devin tot mai bune si mai

exacte cu cat sunt folosite mai mult deoarece sunt stocate tot mai multe informatii despreutilizator

Cea de-a doua faza a unui sistem de recomandare este cea de ınvatare Acoloaplicatia trebuie sa stocheze datele despre utilizator si trebuie la urmatoarea recomandaresa se bazeze pe cele dinainte si ın functie de ele sa o faca Acest lucru poate fi realizat fiedirect pe baza setului de date colectat ın faza de colectare a informatiilor care ar puteafi bazat pe memorie sau bazat pe model fie prin activitatile utilizatorului care au fostobservate

A treia faza este cea de recomandare propriu-zisa ın care doar utilizatorul facecererea de recomandari si acestea ıi sunt trimise

32 Tipuri de sisteme de recomandare

In continuare ca studiu bibliografic au fost tipurile sistemelor de recomandare [11]Ca si teorie sunt mai mute tipuri de sisteme de recomandare si o reprezentare graficaa acestor tipuri este prezentata ın figura 32 Cea mai de baza ımpartire este ın douacategorii recomandari bazate pe continut si recomandari bazate pe filtrare colaborativa

Filtrarea bazata pe continut creeaza un profil de utilizator bazat pe o metoda deınvatare pentru a determina elementele pe care un anumit utilizator le-ar dori De exemplusite-ul poate utiliza un sistem de cuvinte cheie care sugereaza articole cu cuvinte cheiesimilare ın descrierea unui element pe care utilizatorul l-a cumparat anterior

Recomandarile bazate pe filtrare colaborativa se inspira din similaritatile cu ceilaltiutilizatori Gasesc utilizatori asemanantori cu cel pentru care se face recomandarea pebaza actiunilor din trecut despre aceia si se recomanda lucruri care le plac celorlalti Acesttip de recomandare se potriveste perfect cu recomandarile de filme Acolo un om cu gusturi

1httpswwwsciencedirectcomsciencearticlepiiS1110866515000341

6

asemanatoare va putea sa recomande cel mai bine un alt film unui prieten Cea mai simplaimplementare pentru asa ceva este sub forma unei matrici cu spatii goale ın locurile undenu se cunoaste informatie

Pe langa aceste tipuri de recomandari mai sunt si altele dar care nu sunt folosite lafel de des

Figura 32 Tipurile sistemelor de recomandare2

In filtrarea bazata pe criterii demografice se fac recomandari catre utilizatori pebaza informatiilor lor demografice Sistemul va sugera elemente care au fost selectate dealti utilizatori care se ıncadreaza ın acelasi profil demografic

Filtrarea bazata pe utilitate se bazeaza pe utilitatea pe care utilizatorul o va obtinede la produs Poate include lucruri precum fiabilitatea si disponibilitatea vanzatoruluipentru a se asigura ca recomanda produse usor de obtinut de catre utilizator

Filtrarea bazata pe cunostinte recomanda selectii pe baza preferintelor si modelelorde cumparare cunoscute despre utilizator Intrucat sistemul va sti ce a cumparat con-sumatorul ın trecut acesta poate face recomandari ın functie de ceea ce ar putea satisfaceaceste nevoi ın viitor

Filtrarea hibrida combina doua sau mai multe tehnici de recomandare diferite pentrua crea un sistem de recomandare mai detaliat

2httpswwwsciencedirectcomsciencearticlepiiS1110866515000341f0005

7

33 Abordarea Netflix

Foarte multa cercetare ın domeniul sistemelor de recomandare a fost influentata decei de la Netflix

Figura 33 Tipuri de recomandari oferite de Netflix3

Netflix este un serviciu de streaming care permite clientilor sa vizioneze o gamalarga de emisiuni TV filme documentare si multe altele pe mii de dispozitive conectatela internet

In figura 33 este o imagine a site-ului cu tipurile diferite de recomandari pe careacestia le ofera

Cheia succesului Netflix consta ın capacitatea lor de a anticipa ceea ce le placeutilizatorilor motiv pentru care fiecare doua din trei ore de vizionare ın Netflix provin dinrecomandari In trecut Netflix au folosit informatii despre sex si varsta pentru a determinace filme sa recomande Acum ei folosesc de exemplu ceea ce utilizatorul a urmaritınainte a cautat cat timp petrece utilizatorul vizionand filme si tipul de dispozitiv utilizatPredictiile din motorul de recomandare Netflix nu se bazeaza doar pe comportamentulutilizatorului ci si pe context (cum ar fi timpul zilei) popularitatea titlurilor noutateadiversitatea si cat de recent a fost scos filmul sunt factori importanti [7]

Premiul Netflix a fost o competitie lansata ın 2006 pentru cel mai bun algoritm defiltrare colaborativa pentru a prezice ratingurile utilizatorilor pentru filme pe baza eva-luarilor anterioare fara alte informatii despre utilizatori sau filme adica fara ca utilizatoriisau filmele sa fie identificate stiind doar numerele atribuite pentru concurs ale acestoraPremiul pentru castigator consta ın 1 milion de dolari Peste 2000 de echipe au depusseturile de predictie si peste 650 de echipe au depasit precizia algoritmului actual al Netflix

3httpstechblogglomexcompostrecommender-systemshtml

8

cu mai mult de 5 [11] Castigatorul a fost echipa BellKors Pragmatic Chaos care adepasit algoritmul Netflix cu 1006

Cei de la Netflix au fost extrem de multumiti de rezultatul obtinut si nu numai caau ıncorporat acel algoritm ın algoritmul lor existent de recomandare dar au initiat si o adoua editie a competitiei

34 Sisteme de recomandare cu Neo4j

Urmatoarea parte a studiului bibliografic s-a axat pe bazele de date de tip grafGraphDB si mai exact Neo4j ın comparatie cu celelalte tipuri de baze de date adica celerelationale In cartea [10] sunt prezentate aceste concepte din punct de vedere teoretic siın lucrarile de master [5] si [1] este prezentata aceasta comparatie ıntre diferite tipuri debaze de date pe o aplicatie reala

Limbajul care se foloseste ın bazele de date Neo4j este Cypher Cu ajutorul acestuiase mapeaza query-urile pe noduri si relatii Din punct de vedere teoretic diferenta ıntrebazele de date relationale si cele sub forma de graf consta ın modul ın care sunt stocatedatele In timp ce ın bazele de date relationale datele sunt stocate ın structuri de datesub forma de tabel ın cele sub forma de graf datele sunt stocate ın noduri Coloaneletabelelor din bazele de date relationale se mapeaza ın bazele de date sub forma de graf peproprietati Pentru a face o legatura ıntre tabelele relationale se foloseau rdquochei strainerdquo pecand la Neo4j exista relatii ıntre noduri Din cauza faptului ca bazele de date sub formade graf s-au inspirat din cele relationale exista o asemanare ıntre ele si toate lucrurile auun corespondent ın cealalta

In lucrarea [12] sunt prezentate avantajele folosirii unei baze de date sub forma degraf cand se lucreaza cu retele sociale La aplicatiile de tipul retelelor soriale relatiile dintrenoduri sunt partea cea mai importanta iar pentru acestea o baza de date sub forma degraf se mapeaza cel mai bine Un avantaj al bazelor de date sub forma de graf din punctulde vedere al programatorilor cu acestea se lucreaza foarte similar ca si cu cele relationaledupa cum se prezinta si ın [4]

Un exemplu de sistem de recomandare construit cu Neo4j este [11] In acesta lucrareeste prezentata construirea unui sistem de recomandare care sa recomande prieteni ıntr-oaplicatie de socializare In lucrare sunt patru abordari pentru construirea unui astfel desistem Prima consta ın recomandarea unor prieteni cu care utilizatorul ar avea prieteniın comun cea de-a doua sunt persoane cu care utilizatorul se afla ın acelasi grup cea de-atreia sunt utilizatori care au mers la aceleasi evenimente ca si utilizatorul si ultima abordareconsta ın recomandarea persoanelor cu cei mai multi prieteni In urma mai multor teste sistatistici s-a decis ca abordarea cea mai buna este prima cea cu prietenii ın comun Toateaceste patru metode de oferire a recomandarilor se mapeaza foarte usor pe o baza de datesub forma de graf si reprezinta doar cate un query destul de simplu ın Cypher O astfelde aplicatie s-ar fi mapat mult mai greu pe o baza de date relationala datorita multiplelorrelatii si legaturi

9

Un alt exemplu de aplicatie unde s-a ales baza de date Neo4j a fost [2] Aicipentru articolele politice pe care sistemul le recomanda se creeaza o combinatie ıntrerecomandarile obtinute din articolele care le plac oamenilor cu care utilizatorul vorbestemult si lucruri care le plac utilizatorilor cu care acesta are lucruri ın comun Si ın acest cazexista o multime de relatii ıntre utilizatori si articole si cel mai usor se obtin recomandarilecu o aplicatie sub forma de graf motiv pentru care au si ales Neo4j

35 Utilizarea retelei Facebook pentru crearea unui

profil utilizatorilor

In continuare ca studiu bibliografic au urmat sisteme asemanatoare cu sistemuldorit si modul ın care acestia au reusit sa creeze profilul utilizatorului [13] Problema ceamai mare este rdquocold startrdquo-ul Adica atunci cand un utilizator este nou ın aplicatie nuse stiu suficiente informatii despre el pentru a putea sa i se ofere recomandari Dupa ceacesta foloseste aplicatia o perioada de timp ar putea sa i se ofere recomandari bazate peactivitatea sa anterioara ın aplicatie Din acest motiv la ınceput recomandarile pot lasade dorit si pot fi nu tocmai corecte

O metoda ın care se poate rezolva aceasta problema se afla ın lucrarea de master[7] ın care la utilizatorii noi se recomanda restaurante pe baza pozitiei lor geograficeAtunci cand doresti sa mergi la un restaurant este foarte importanta distanta la care seafla acel restaurant Din aceasta cauza pentru un utilizator caruia sistemul nu stie ce sa ıirecomande ıi recomanda restaurante la ıntamplare dintre cele care se afla cel mai aproapede el In felul acesta dupa ce merge la unul din restaurante si da feedback sistemul poatedupa aceea sa ıi faca recomandari

In lucrarea [8] recomandarile pentru votare au doua abordari La prima i se reco-manda lucrurile care le-a recomandat persoana cu scorul cel mai bun Si cea de-a douaabordare consta ıntr-un set de ıntrebari la care un utilizator nou trebuie sa raspunda candısi face contul

In acest caz cea mai buna metoda ın care se poate rezolva aceasta problema parea fi sa se ia informatiile de la API-ul de la Facebook Facebook este o aplicatie extremde utilizata si care ofera ca informatii publice exact ce ar fi necesar pentru a recomandacadouri de exemplu data nasterii sau lucruri care ıi plac unui utilizator Cu ajutorulacestora se poate calcula varsta utilizatorului poate sa fie ıncadrat ıntr-un profil si sepoate afla stilul de lucruri care ıi plac

Toate aceste informatii publice de la Facebook pot fi salvate si pot fi utilizate maitarziu pentru a se creea recomandari pe baza lor In articolul [3] despre valoarea datelor dela Facebook se prezinta ca si caz de utilizare pentru un site de comert online Aceasta estefoarte asemanatoare din punct de vedere al recomandarilor cu aplicatia de recomandarecadouri Diferenta dintre cele doua este ca ın cazul uneia trebuie sa recomande produsepentru utilizatorul aplicatiei si cealalta pentru un prieten al acestuia

10

Din punct de vedere al aplicabilitatii Facebook este o retea sociala deci datele salese mapeaza foarte bine pe o baza de date de tip graf cum este prezentat si ın lucrarea [6]

Asadar daca la crearea contului utilizatorului ın aplicatie se iau si informatiile pu-blice despre utilizator se vor putea oferi recomandari mult mai corecte ınca de la ınceput

36 Solutii similare

Ca solutii similare pe piata online nu exista aplicatii folosite pentru a recomandacadouri personalizate specific pentru o persoana anume Multe site-uri considera ca eirecomanda cadouri ınsa acestea reprezinta de fapt o filtrare mai avansata a rezultatelorproduselor de pe site-ul lor

Un site care ofera cadouri personalizate este Giftly 4 prezentat ın figura 34 careofera o modalitate usoara de a oferi cadouri Acest site nu are parte de recomandari cia gasit un mod de a face oamenii sa primeasca mereu ceea ce ısi doresc Cel care oferacadoul nu ıl cumpara ci doar ıl sugereaza dar decizia finala asupra cadoului este la celcare ıl primeste Modul ın care functioneaza este

1 Se ofera un rdquocard cadourdquo prin email sms printat sau ca o felicitare de ınaltacalitate

2 Destinatarul alege cel mai convenabil mod de a primi cadoul rdquocard cadourdquo ınposta sau direct ca bani ın contul bancar sau contul PayPal

3 De fapt utilizatorul ıi sugereaza destinatarului ce ar vrea el sa ofere ca si cadouiar destinatarul trimite ca mesaj modul ın care a cheltuit banii

Figura 34 Site web Giftly

4httpswwwgiftlycom

11

Ofera de asemenea si sugestii de cadouri Un om cand navigheaza pe site poate sase uite la cadouri ın categoriile Popular Holidays Birthdays Drinks Eats Meals BackTo School Get Fresh Health Fitness Going Out Getaway Top Shelf For The HipsterClothes For Her Clothes For Him Congratulations Expecting Activities si Custom

Un alt site cu cadouri este Etsy 5 cu imaginea 35 care arata site-ul Etsy este o piataglobala pentru bunuri unice si creative Pe pietele lor milioane de oameni din ıntreagalume se conecteaza atat online cat si offline pentru a face vinde si cumpara bunuri uniceEtsy ofera de asemenea o gama larga de servicii si instrumente de vanzari care ajutaıntreprinzatorii creativi sa ınceapa sa gestioneze si sa-si masoare afacerile Misiunea loreste sa pastreze comertul uman Deci de fapt acest site sprijina mai mult producatoriinu comerciantii De asemenea este mai mult axat pe bunuri unice si lucruri rdquounicerdquo Ca sicelelalte site-uri de genul acesta are o modalitate de a cauta lucrurile mai inteligent maispecializat pe ceea ce te intereseaza Categoriile de cautare sunt Jewelry AccessoriesClothing Shoes Home Living Wedding Party Toys Entertainment Art CollectablesCraft Supplies Tools si Vintage

Figura 35 Site web Etsy

Cel de-al treilea site care ofera servicii asemanatoare este Gifts 6 prezentat ın figura36 Acesta se focuseaza pe cadouri pentru diverse ocazii cum ar fi zilele de nastereCraciun diverse aniversari si alte evenimente la care se cumpara cadouri Pentru parteade recomandare se ofera posibilitatea de a efectua un test despre acel om caruia dorestisa ıi cumperi cadoul care are ca scop ıncadrarea omului respectiv ıntr-un profil si apoi

5httpswwwetsycom6httpswwwgiftscom

12

alegerea unor sugestii ce s-ar potrivi unei persoane cu acel tip de personalitate O primaıntrebare se refera la genul persoanei si ıntrebarea este daca cadoul este pentru o femeieun barbat o fetita sau un baietel Cea de-a doua ıntrebare se refera la marja de varsta ıncare se ıncadreaza acel om de exemplu pentru barbat optiunile sunt adolescent barbat ınjur de 30 de ani sau barbat ın varsta Cea de-a treia ıntrebare se refera la personalitateaomului Mai exact se fac sugestii pentru tipuri de lucruri ce i-ar putea placea unui omcare are trasaturile descrise ın primele doua ıntrebari De exemplu la barbati ın jur de30 de ani optiunile sunt ıi place sportul ıi place natura e aventurier ıi place golful ıiplace sa faca gratare sa serveasca bauturi sa gateasca sa animeze ıi place sa se ımbraceelegant este sef e entuziasmat de bere sau e un fan al sporturilor Iar ın final ın functiede raspunsurile date la ıntrebari se afiseaza sugestii de cadouri care se potrivesc oamenilorcu acel tip de personalitate

Figura 36 Site web Gifts

Nordstrom 7 care este prezentat ın imaginea 37 are o abordare similara avand pesite o multime de optiuni de filtrare a cadourilor Se pot cauta ın acest site cadouri pentrubebelusi cadouri de Craciun bijuterii pentru femei optiunile sunt multiple Acest lucruofera utilizatorilor sugestii pentru a le fi mai usor sa ıncadreze aceasta persoana ıntr-unanumit tip Iar dupa alegerea categoriei toate sugestiile de cadouri oferite de catre sitese ıncadreaza ın acel tip Ca avantaj al acestui site este ca ei ofera si serviciul de livrareal cadoului dupa cumparare oriunde ın lume Un dezavantaj al multor site-uri de genulacesta este ca ofera livrare doar ın zona sa apropiata

7httpsshopnordstromcomcgifts

13

Figura 37 Site web Nordstrom

14

Capitolul 4

Analiza si Fundamentare Teoretica

In acest capitol vor fi prezentate cerintele functionale ale lucrarii ımpreuna cucerintele non-functionale ale acesteia De asemenea va fi prezentata diagrama cazurilor deutilizare si vor fi prezentate mai ın detaliu cazurile de utilizare principale ale aplicatiei Incontinuare se va prezenta perspectiva tehnologica a proiectului si se vor explica deciziiletehnologice luate In final se va prezenta diagrama conceptuala a aplicatiei

41 Cerinte functionale

bull Posibilitatea autentificarii ın aplicatie si crearii unui profil propriu din care se potutiliza informatii si cu ajutorul caruia utilizatorul poate fi ıncadrat ıntr-un profil

bull Utilizatorii pot crea prietenii ca ıntr-o retea de socializare pentru a putea afla infor-matii despre prieteni si pentru a li se putea recomanda cadouri pentru acestia

bull Cu ajutorul informatiilor de la Facebook un utilizator poate fi notificat dinainte caurmeaza ziua de nastere a unuia din prietenii lui si sa i se ofere mai multe variantede cadouri potrivite pentru acesta Aceasta informatie o primeste cu suficient timpınainte pentru a nu fi surprins fara un cadou De la Facebook pe langa informatiiledespre data zilei de nastere sunt importante si varsta sau lucrurile care ıi plac uti-lizatorului Toate acestea ajuta la crearea profilului utilizatorului pe baza caruia serecomanda dupa aceea cadourile

bull De asemenea sistemul poate recomanda si un cadou pentru alt tip de evenimentdecat zi de nastere de genul cadou de Craciun cadou de nunta cadou pentru unnou-nascut etc

bull In aplicatie vor fi adaugate si diferite produse iar pentru a face mai usoara cumparareade cadouri se va putea face si comanda pe internet In momentul ın care un utilizatorface o noua comanda producatorii produselor comandate sunt ınstiintati de existentaacestei noi comenzi

15

bull Pentru persoanele la care pe profilul de Facebook este insuficient completat saupentru a putea cumpara cadouri pentru o persoana care nu are Facebook sau nuare cont ın aceasta aplicatie si despre care ın acest fel nu se cunosc nici un felde informatii se vor putea filtra cautarile pentru cadou printr-o serie de ıntrebaristandard Aceste ıntrebari vor putea creea un rdquomini-profilrdquo pentru acea persoanapentru ca sistemul sa poata recomanda cadouri

42 Cerinte non-functionale

bull Securitate sistemul nu raspunde cererilor decat atunci cand utilizatorul a fost au-tentificat ın aplicatie si are rolul necesar pentru a face acea cerere

bull Portabilitate aplicatia nu depinde de sistemul de operare pe care ruleaza De aseme-nea nu e dependenta de browserul folosit de utilizator

bull Disponibilitate sistemul ramane stabil ın fata erorilor si functioneaza la fel si dupaaparitia unei erori

bull Extensibilitate sistemul permite adaugarea sau modificarea unor componente atuncicand cerintele aplicatiei se modifica Pe langa asta e flexibila unor dezvoltari ulte-rioare

43 Cazuri de utilizare

In aceasta sectiune se vor prezenta actorii aplicatiei diagrama cazurilor de utilizaresi vor fi descrise cazurile de utilizare de baza ale fiecarui actor

Ca si actori aplicatia are patru tipuri de utilizatori

bull utilizator anonimbull clientbull producatorbull administrator

Aplicatia este conceputa ın asa fel ıncat ıntre actori este o relatie de mostenire Acestlucru presupune ca un actor are posibilitatea de a efectua tot ce putea cel dinaintea lui siceva ın plus Deci utilizatorii anonimi au cele mai putine permisiuni iar administratoriiau permisiuni totale Acest lucru se vede foarte clar si ın diagrama cazurilor de utilizaredin imaginea 41

In continuare vor fi prezentate cazurile de utilizare

1 recomandare cadouri2 adaugare produs3 modificare rol utilizator

16

Figura 41 Digrama cazurilor de utilizare

17

431 Recomandare cadouri

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unutilizator trebuie sa le urmeze pentru a primi recomandari de cadouri pentru un cunoscutsi pentru a efectua o comanda

Actorul principal

Orice utilizator al aplicatiei

Parti interesate si interese

Utilizatorul care doreste sa cumpere un cadou este interesat de a gasi un cadoupotrivit pentru cineva pe care ıl cunoaste

Producatorul care e interesat sa ısi poata vinde produseleUtilizatorul care primeste cadoul fiind interesat sa primeasca un cadou care sa i se

potriveasca si care sa ıi placa

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand utilizatorul porneste aplicatia11 Utilizatorul verifica daca are cont de Facebook si daca are urmeaza pasul 111

daca nu 22111 Utilizatorul se autentifica ın aplicatie cu ajutorul credentialelor de la

Facebook12 Utilizatorul deschide sectiunea de recomandare cadouri13 Utilizatorul completeaza formularul cu datele ce trebuie introduse pentru a primi

recomandari de cadouri pentru un prieten14 Utilizatorul poate fi satisfacut cu recomandarile primite si atunci urmeaza pasul

141 iar daca nu este atunci urmeaza cazul alternativ 23141 Utilizatorul adauga ın cosul de cumparaturi cadouri pe care doreste sa

le cumpere15 Utilizatorul cere sa ısi vada cosul de cumparaturi16 Utilizatorul poate sa se declare multumit de cosul de cumparaturi caz ın care

urmeaza pasul 161 sau poate sa aleaga cazul alternativ 24161 Utilizatorul aproba cosul de cumparaturi si accepta sa se faca comanda

17 Sistemul introduce ın baza de date comanda18 Utilizatorul va putea vedea la sectiunea comenzilor sale noua comanda si statusul

ei19 Sistemul notifica producatorul de aparitia noii comenzi110 Utilizatorul se dezautentifica din aplicatie

18

Use-Case EndUtilizatorul se va deconecta din aplicatie si o va ınchide

Figura 42 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueazaAcest flux poate aparea la orice pas211 Utilizatorul deschide sectiunea de recomandare cadouri212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca utilizatorul nu are cont de Facebook

19

Acest flux poate aparea la pasul 11221 Utilizatorul deschide pagina de Facebook222 Utilizatorul ısi face un cont pe pagina de Facebook si ısi completeaza

date despre el223 Utilizatorul revine la aplicatia de recomandare cadouri si ıncearca din

nou sa se autentifice ın aplicatie224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca utilizatorul nu e multumit de recomandariAcest flux poate aparea la pasul 14231 Utilizatorul sterge din cos cadourile pe care nu le mai doreste si revine

la pagina de recomandari232 Utilizatorul adauga alte cadouri ın cos233 Cazul de utilizare continua de la pasul 141

24 Flux-ul alternativ daca utilizatorul nu e multumit de produsele din cosul decumparaturi

Acest flux poate aparea la pasul 16241 Utilizatorul revine ınapoi la formularul cu introducerea datelor despre

beneficiarul cadoului242 Utilizatorul completeaza din nou datele243 Cazul de utilizare continua de la pasul 13

Preconditii

1 Utilizatorul trebuie sa aiba un cont de Facebook pentru a se putea autentifica ınaplicatie

2 Utilizatorul trebuie sa fie autentificat ın aplicatie pentru a putea face orice actiunedin acest caz de utilizare

3 Utilizatorul trebuie sa deschida sectiunea de recomandare cadouri pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noua comanda este salvata ın baza de date2 Comanda apare ın sectiunea de comenzi a utilizatorului ımpreuna cu statusul ei

curent3 Producatorul este notificat ca are o noua comanda

432 Adaugare produs

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unproducator trebuie sa le urmeze pentru a introduce un nou produs ın aplicatie

20

Actorul principal

Utilizatorii cu rol de producator sau cu rol de administrator

Parti interesate si interese

Producatorul care doreste sa introduca produsul nou ın aplicatie

Utilizatorii simpli care au o mai mare varietate de produse din care sa li se reco-mande cadouri

Figura 43 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo

21

Flux de evenimente

Use-Case Start

Cazul de utilizare ıncepe atunci cand producatorul porneste aplicatia

11 Producatorul verifica daca are cont de Facebook si daca are urmeaza pasul111 daca nu 22

111 Producatorul se autentifica ın aplicatie cu ajutorul credentialelor de laFacebook

12 Producatorul deschide sectiunea de adaugare produs

13 Producatorul completeaza datele necesare despre noul produs ımpreuna cu tipulde persoana si eveniment care i s-ar potrivi

14 Producatorul verifica daca este multumit de datele introduse si daca da urmeazapasul 141 daca nu 23

141 Producatorul efectueaza operatia de adaugare produs

15 Sistemul adauga un nou produs ın baza de date

16 Sistemul notifica producatorul ca noul produs a fost introdus cu succes

17 Producatorul se dezautentifica din aplicatie

Use-Case End

Producatorul se va deconecta din aplicatie si o va ınchide

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Producatorul deschide sectiunea de adaugare produs

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca producatorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Producatorul deschide pagina de Facebook

222 Producatorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Producatorul revine la aplicatia de recomandare cadouri si ıncearca dinnou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca Producatorul nu e multumit de datele introduse despreprodus

Acest flux poate aparea la pasul 14

231 Producatorul sterge datele gresite despre produs

232 Producatorul adauga alte date despre produs

233 Cazul de utilizare continua de la pasul 141

22

Preconditii

1 Producatorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Producatorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Producatorul trebuie sa aiba cont cu rol de rdquoproducatorrdquo sau rdquoadminrdquo pentru aputea face operatia aceasta

4 Producatorul trebuie sa deschida sectiunea de adaugare produs pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noul produs este salvat ın baza de date2 Produsul poate fi adaugat la recomandarile unui utilizator din acel moment

433 Modificare rol utilizator

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unadministrator trebuie sa le urmeze pentru a modifica rolul unui utilizator al aplicatiei

Actorul principal

Un utilizator al aplicatiei care are rol de administrator

Parti interesate si interese

Administratorul care doreste sa modifice rolul unui utilizatorUtilizatorul care doreste sa ısi schimbe rolul

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand administratorul porneste aplicatia11 Administratorul verifica daca are cont de Facebook si daca are urmeaza pasul

111 daca nu 22111 Administratorul se autentifica ın aplicatie cu ajutorul credentialelor de

la Facebook12 Administratorul deschide sectiunea de utilizatori13 Sistemul ıi returneaza administratorului utilizatorii care nu sunt administratori14 Administratorul modifica rolul utilizatorului din utilizator simplu ın producator

sau invers

23

15 Administratorul cere executarea modificarii

16 Sistemul executa modificarea iar ın caz de succes urmeaza pasul 161 si ın cazde eroare pasul 23

161 Sistemul notifica administratorul ca modificarea a fost efectuata cusucces

17 Utilizatorul se dezautentifica din aplicatie

Use-Case End

Administratorul se va deconecta din aplicatie si o va ınchide

Figura 44 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo

24

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Administratorul deschide sectiunea de utilizatori

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca administratorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Administratorul deschide pagina de Facebook

222 Administratorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Administratorul revine la aplicatia de recomandare cadouri si ıncearcadin nou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca sistemul returneaza o eroare la modificarea utilizatorului

Acest flux poate aparea la pasul 16

231 Sistemul returneaza un mesaj de eroare la modificarea utilizatorului

232 Aplicatia afiseaza mesajul de eroare administratorului

233 Cazul de utilizare continua de la pasul 15

Preconditii

1 Administratorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Administratorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Utilizatorul trebuie sa aiba cont cu rol de administrator pentru a putea efectuaorice actiune din acest caz de utilizare

4 Administratorul trebuie sa deschida sectiunea utilizatori pentru a putea ındeplinicerintele din cazul de utilizare

Postconditii

1 Noul rol al utilizatorului este salvat ın baza de date

2 La urmatoarea autentificare a utilizatorului acesta va observa ca interfata si maiprecis meniurile si actiunile care le poate face ıi vor fi diferite

25

44 Perspectiva tehnologica

441 Neo4j

Neo4j 1 este un sistem de gestionare a bazelor de date sub forma de graf dezvoltatde Neo4j Inc Descris de dezvoltatorii sai ca o baza de date tranzactionala compatibilacu ACID Neo4j este cea mai populara baza de date sub forma de graf dupa clasamentulDB-Engines

Baza de date Neo4j (ca si orice alta baza de date sub forma de graf) este foartediferita de o baza de date relationala cum ar fi MS Access SQL Server MySQL etcBazele de date relationale utilizeaza tabele randuri si coloane pentru stocarea datelor

Neo4j nu utilizeaza tabele randuri si coloane pentru stocarea sau prezentarea datelorci noduri si relatii

Neo4j este foarte potrivit pentru stocarea datelor care au multe relatii interconec-tate Acestea sunt de fapt aplicatiile ın care merita sa fie folosite De fapt bazele de datesub forma de graf cum este Neo4j sunt mult mai bune la tratarea datelor interconectatedecat bazele de date relationale

Acest lucru se datoreaza faptului ca modelul sub forma de graf nu necesita de obiceio schema predefinita Nu e nevoie sa se creeze structura bazei de date ınainte de a fiıncarcate datele asa cum se face la o baza de date relationala

Dar principalul motiv pentru care Neo4j este mai bun pentru datele relationalepentru acest tip de aplicatii este modul ın care permite crearea relatiilor Neo4j este con-struit ın jurul relatiilor si atunci nu este nevoie sa se configureze chei primare constrangerichei straine pentru a predetermina nodurile care pot avea o relatie si la ce date Cu Neo4jse poate adauga orice legatura ıntre orice nod ori de cate ori este nevoie

Neo4j are aceste calitati care nu se gasesc nici la celelalte baze de date NoSQLBazele de date non-relationale pe langa cele sub forma de graf sunt cele de tip coloanade tip document de tip cheie-valoare si de tip multi-model Nici unul din aceste tipuri nuau ca principala functionalitate maparea relatiilor si facilitatea interogarilor ıntr-o baza dedate cu multe relatii ıntre entitati

Generarea de recomandari personalizate este unul dintre cele mai frecvente cazuride utilizare a unei baze de date sub forma de graf Unele dintre principalele beneficii aleutilizarii grafurilor pentru a genera recomandari includ

- Performanta Lipsa indexurilor permite calcularea recomandarilor ın timp realasigurand ca recomandarea este ıntotdeauna relevanta si reflecta informatii actualizate

- Model de date Modelul de graf cu proprietati permite combinarea cu usurinta aseturilor de date din mai multe surse

Un alt avantaj al bazelor de date sub forma de graf Neo4j este faptul ca respectatoate principiile din modelul de consistenta ACID

Garantia data de principiile ACID este ca ofera un mediu sigur ın care sa functionezedatele Acronimul ACID reprezinta

1httpsneo4jcomuse-casesreal-time-recommendation-engine

26

bull Atomic Toate operatiile dintr-o tranzactie reusesc sau fiecare operatie este reluatabull Consistent La finalizarea unei tranzactii baza de date este solida din punct de

vedere structuralbull Izolat Tranzactiile nu se lupta una cu cealalta Accesul controversat la date este

moderat de baza de date astfel ıncat tranzactiile par sa se execute succesivbull Durabil Rezultatele aplicarii unei tranzactii sunt permanente chiar si ın cazul unor

defectiuniCand vine vorba de tehnologiile NoSQL cele mai multe baze de date sub forma de

graf (inclusiv Neo4j) utilizeaza un model de consistenta ACID pentru a asigura ca datelesunt stocate ın siguranta si ın mod consecvent

Am ales baza de date sub forma de graf ca optiune pentru stocarea datelor deoarecedin toate lucrarile si articolele citite a fost optiunea cea mai buna pentru un sistem derecomandare Deci acesta se mapeaza perfect pe cerintele functionale ale proiectului Sidin optiunile de baze de date sub forma de graf Noe4j a avut de departe cele mai multeavantaje ea fiind si cea mai utilizata

442 Cypher

Cypher 2 este un limbaj declarativ de interogare pentru bazele de date sub formade graf care permite interogarea si actualizarea rapida a datelor Cypher este un limbajrelativ simplu dar foarte puternic Interogarile foarte complexe ale bazei de date pot fiusor exprimate prin intermediul limbajului Cypher

Este conceput pentru a fi un limbaj de interogare uman Scopul lui principal este dea face interogarile mult mai simple si unele interogari care la bazele de date relationale nuerau posibile le face posibile Constructiile sale se bazeaza pe grafica si pe limba englezalucru care ajuta la scrierea mai intuitiva a interogarilor Este construit pentru a fi maiintuitiv pentru citire si nu neaparat pentru scriere

Cypher se bazeaza pe modelul Graph Property care ın plus fata de elementelegrafice standard ale nodurilor si muchiilor (numite relatii ın Cypher) adauga etichete siproprietati ca si concepte Nodurile pot avea zero sau mai multe etichete ın timp ce fiecarerelatie este de exact un singur tip Nodurile si relatiile au de asemenea zero sau mai multeproprietati

Chypher este limbajul de interogare folosit la bazele de date Neo4j deci este opti-unea implicita atunci cand se alege Neo4j

443 Maven

Maven 3 este un instrument de management software si de ıntelegere a proiectelorsoftware Pe baza conceptului unui model de obiect de proiect (POM) Maven poategestiona construirea raportarea si documentarea unui proiect printr-o informatie centrala

2httpsneo4jcomdevelopercypher-query-language3httpswwwjavatpointcommaven-tutorial

27

Obiectivul principal al lui Maven este acela de a permite unui dezvoltator sa ınte-leaga starea completa a efortului de dezvoltare ın cel mai scurt timp Avantajele Mavensunt

bull instalarea rapida a proiectului fara fisiere buildxml complicate doar un POMbull procesul de construire este standardizat pentru toate proiectelebull usor de ınvatat si de utilizatbull configurarea unui proiect este foarte rapidabull bine documentat

Am ales sa folosesc Maven deoarece este una din cele mai comune optiuni pentru aimporta librariile ıntr-un proiect si este si cel mai documentat Deci mereu cand esti pusın dificultate poti cauta pe internet sugestii

444 Spring Boot

Spring Boot 4 este un framework din cadrul Spring care ofera setari implicite pentruconfigurarea codului si adnotari pentru a lansa rapid proiecte noi ın executie Urmaresteabordarea rdquoConfigurarea defectiunilor vizionaterdquo pentru a evita un numar mare de linii decod pentru configuratii si pentru a ımbunatati procesul de dezvoltare

Avantajele Spring Boot sunt1 Face foarte usoara dezvoltarea de aplicatii bazate pe Spring cu Java sau Groovy2 Reduce timpul de dezvoltare si creste productivitatea3 Evita scrierea multor linii de cod adnotari si configurare XML4 Este foarte usor de integrat cu alte framework-uri din aceasi familie Spring cum ar

fi Spring JDBC Spring ORM Spring Data Spring Security etc5 Urmareste abordarea rdquoConfigurarea implicita a optiunilorrdquo pentru a reduce efortul

pentru dezvoltatori6 Ofera servere HTTP ıncorporate cum ar fi Tomcat Jetty etc pentru a dezvolta si

testa aplicatiile web foarte usor7 Ofera instrumentul CLI (Command Line Interface) pentru a dezvolta si testa apli-

catiile de tip rdquoSpring Bootrdquo (Java sau Groovy) din linia de comanda foarte usor sirapidAm ales ca optiune pentru partea de backend acest framework deoarece simplifica

foarte mult lucrurile Datorita lui un programator poate sa ısi concentreze mai tare energiape a construi proiectul din punctul de vedere al buissness-ului logic nu din punctul devedere al configurarilor necesare

445 Sencha CMD si ExtJS

Sencha CMD 5 este un instrument linie de comanda cross-platform care ofera multesarcini automate ın ciclul complet de viata al unei aplicatii ExtJS de la generarea unui

4httpswwwjavatpointcomspring-boot-tutorial5httpsdocssenchacomcmd

28

nou proiect la lansarea unei aplicatii ın productie

Sencha Cmd ofera o colectie de caracteristici puternice pentru economisirea timpu-lui care functioneaza ımpreuna cu Sencha ExtJS si Sencha Touch

Ext JS 6 este un framework pur JavaScript pentru construirea de aplicatii webinteractive cross-platform utilizand tehnici precum scripting Ajax DHTML si DOM

Avantajele framework-ului ExtJS sunt

1 Documentatia Extjs este foarte cuprinzatoare si bine ıntretinuta2 Aspectul cheie al bibliotecii EXTJS este suportul de tip cross-browser3 Framework-ul ExtJS ofera o multitudine de elemente UI Aceste elemente includ

forme casete de dialog file arbori si tabele4 Framework-ul ExtJS include suport pentru implementarile Ajax5 ExtJS ofera performante excelente Framework-ul este complet orientat spre obiecte

si este extensibil asta pentru ca este scris ın JavaScript

Pentru partea de frontend se foloseste framework-ul ExtJS deoarece are o arhitec-tura ce se mapeaza foarte bine pe proiectele de frontend si anume arhitectura bazata pecomponente Aceasta face ca ın proiect codul sa fie mult mai organizat si procesul dedezvoltare al proiectului sa fie mult mai scurt prin identificarea mai usoara a erorilor

446 Facebook API(Graph API)

Graph API 7 este modul principal de a pune date ın platforma Facebook si de aobtine date din platforma Facebook Este un API bazat pe HTTP pe care aplicatiile ılpot utiliza pentru interogarea datelor pentru a introduce postari noi pentru gestionareaanunturilor sau pentru a ıncarca fotografii

Este denumit Graph API dupa ideea unui rdquograf socialrdquo - o reprezentare sub formade graf a informatiilor de pe Facebook Este compus din

bull noduri - ın esenta obiecte individuale cum ar fi un utilizator o fotografie o paginasau un comentariu

bull muchii - conexiuni ıntre o colectie de obiecte si un singur obiect cum ar fi fotografiilede pe o pagina sau comentariile de la o fotografie

bull campuri - date despre un obiect cum ar fi ziua de nastere a unui utilizator saunumele paginii

De obicei se utilizeaza noduri pentru a obtine date despre un anumit obiect se uti-lizeaza muchii pentru a obtine colectii de obiecte legate de un singur obiect si se utilizeazacampurile pentru a obtine date despre un singur obiect sau mai multe obiecte dintr-ocolectie

Am folosit Facebook API ca solutie pentru a ımbunatati problema de rdquocold startrdquopentru ca este singurul site pe care marea majoritate a oamenilor au cont si salveazalucrurile care le plac Deci se potrivea perfect peste nevoile aplicatiei mele

6httpdocssenchacomextjs6207httpsdevelopersfacebookcomdocsgraph-api

29

447 Git

Git 8 este un sistem de control a versionarii pentru urmarirea modificarilor ın fisierelede pe computer si coordonarea activitatii asupra acestor fisiere ın randul mai multor per-soane Este utilizat ın principal pentru gestionarea codului sursa ın dezvoltarea de softwaredar poate fi folosit pentru a urmari schimbarile ın orice set de fisiere

Avantaje ale Git

bull Modelul distribuit numai ceea ce se doreste se face publicbull Branching-ul si merging-ul sunt usoarebull Fluxul de lucru este flexibilbull Integritatea datelor este asigurata Deoarece GIT utilizeaza arbori SHA1 coruperea

datelor din motive externe poate fi usor detectatabull Rapid Git este foarte rapid chiar si ın comparatie cu alte sisteme de control a

versionarii

Am folosit Git pentru a avea la proiect un back-up ın caz ca se ıntampla ceva cuproiectul salvat pe calculator

45 Arhitectura conceptuala

In figura 45 este prezentata arhitectura conceptuala a sistemului Acesta este ım-partit ın doua mari parti backend-ul si frontend-ul care comunica ıntre ele si ısi trimitinformatii

Se poate observa ca baza de date este de tip graf mai exact Neo4j si comunica cubackend-ul pentru a putea lucra cu datele stocate Backend-ul este structurat pe nivelefiecare cu un diferit rol si care trebuie parcurs pentru a procesa datele din interfata ınbaza de date Cele trei nivele sunt cel de Repository cel de Service si cel ControllerToate interogarile venite din interfata utilizator ajung ın nivelul de Controller Dupa ceinterogarile trec de securitatea sistemului ajung ın nivelul de Service Acolo se proceseazasi se afla partea de logica a aplicatiei Pentru a interactiona cu baza de date din Servicese apeleaza metodele din nivelul de Repository

In continuare backend-ul comunica prin protocolul HTTP cu interfata grafica cucare interactioneaza clientii aplicatiei Interfata este scrisa ın Ext JS si are o parte de Viewsi o parte de Controller care este cea care comunica cu backend-ul

Pentru partea de autentificare sistemul interactioneaza cu API-ul de la Facebookde la care ia dupa autentificare un access token Cu ajutorul acestuia ia dupa aceea datelenecesare pentru a putea crea un profil utilizatorului

8httpsguidesgithubcomintroductiongit-handbook

30

Figura 45 Arhitectura conceptuala

31

Capitolul 5

Proiectare de Detaliu siImplementare

In acest capitol vor fi prezentate detalii de implementare ale sistemului de recoman-dare incluzand o ımpartire al acestuia ın componentele care ıl cuprind

Obiectivul este de a prezenta arhitectura si modul de implementare al aplicatieipe baza datelor descoperite ın studiul bibliografic de la capitolul trei si cu tehnologiilehotarate la capitolul patru Pe langa asta va fi prezentata si structura bazei de date sideciziile luate pentru securitatea aplicatiei

51 Arhitectura sistemului

Din punctul de vedere al arhitecturii aplicatia se poate considera ca este alcatuitadin patru mari componente

1 API-ul de la Facebook2 Aplicatia client care reprezinta interfata grafica a aplicatiei3 Aplicatia server adica backendul aplicatiei si partea ın care se afla partea de rdquobusiness

logicrdquo4 Baza de date

Partea componenta reprezentata de API-ul de la Facebook este doar o componentacu care aplicatia se integreaza si pe care aceasta o foloseste In interactiunea cu ea interfatada o cerere de autentificare apare o fereastra de la Facebook ın care utilizatorul introducecredentialele de la API-ul de Facebook se primeste ınapoi un access token si cu ajutorulacestuia face o cerere pentru a primi datele personale ale utilizatorului pentru creeareaprofilului utilizator

Urmatoarea parte a aplicatiei este interfata utilizator frontend-ul care reprezintapartea cu care utilizatorul interactioneaza si locul unde ıi sunt afisate informatiile

Cererile din interfata ajung ın a treia parte componenta a sistemului partea deserver adica backend-ul aplicatiei Acolo toate cererile sunt citite si procesate iar raspun-

33

sul lor este trimis la interfata utilizator Aceasta este partea care reprezinta rdquogandireardquoaplicatiei Aceea este componenta care face legatura ıntre cererile utilizatorului din inter-fata si datele stocate ın baza de date

Ultima componenta a aplicatiei o reprezinta baza de date care are ca rol sa stochezedatele despre utilizatori produse si comenzi Ea este o baza de date sub forma de grafde tipul Neo4j Acolo se salveaza entitatile aplicatiei sub forma de noduri si dependenteleıntre acestea sub forma de relatii ıntre aceste noduri

Figura 51 Diagrama de rdquodeploymentrdquo

In figura 51 este prezentata diagrama de rdquodeploymentrdquo a sistemului cu cele patrucomponente ale sistemului Aplicatia client comunica cu API-ul de la Facebook prin pro-tocolul securizat HTTPS cu backend-ul prin protocolul HTTP iar backend-ul cu baza dedate prin JDBC

Aplicatia a putut fi ımpartita ın aceste componente separate deoarece fiecare dintreele poate functiona independent de celelalte comunica cu ele doar prin mesaje Din acestmotiv locul unde ruleaza acestea pot sa fie pe servere diferite In plus daca aplicatiaar fi pusa pe servere pentru utilizatori ar putea fi mai multe servere pe care ruleaza ocomponenta si prin rdquoload balancingrdquo sa se trimita cererile ımpartite ıntre ele

Cum astfel componentele nu depind foarte mult unele de altele si pot rula faraa le interesa de unde le sunt trimise cererile este arhitectura cea mai corecta deoarecedefectarea sau o posibila eroare la una din ele nu o influenteaza cu nimic pe o alta Dacatoate ar rula pe acelasi server o eventuala defectiune a acestuia ar ınsemna o defectiune aıntregului sistem Insa daca exista mai multe noduri si se afla pe servere diferite pot doartoate cererile sa fie redirectionate spre un nod care functioneaza si aplicatia sa functionezepentru clienti la fel ca ınainte

34

Un alt avantaj al arhitecturii ar fi faptul ca la o lansare viitoare catre clienti se poatelansa doar componenta la care s-au facut modificari De asemenea aplicatia ar putea aveape viitor si o componenta mobila Iar cum serverul e independent poate fi acelasi serverfolosit de o alta aplicatie client

511 Arhitectura componentei backend

Arhitectura backend-ului este si ea ımpartita ın mai multe pachete pentru o maibuna structura si pentru o cat mai mica dependenta ıntre diversele componente Astfelcuplarea este minima ıntre clase si eventualele modificari ulterioare pot fi mai usor defacut

Serverul a fost implementat ın Java cu ajutorul framework-ului Spring Boot iarmediul de dezvoltare folosit a fost Intellij IDEA

Din punctul de vedere al ımpartirii arhitectura serverului aplicatiei este structurataın patru pachete si o clasa ın afara acestora Acea clasa este rdquomainrdquo-ul aplicatiei este parteacare trebuie rulata pentru a porni serverul Din cauza ca este o aplicatie Spring Boot si nuuna String singura adnotare necesara pentru a sti ca aceea este clasa rdquoradacinardquoa aplicatieieste SpringBootApplication

Cele patru pachete ale serverului sunt1 Cel de domeniu (domain) cu clasele POJO care reprezinta entitatile din baza de

date2 Cel de rdquomagazierdquo (repositories) care este cel care face direct actiunile ın baza de date3 Cel de serviciu (services) ın care se afla partea de logica a ıntregii aplicatii4 Cel de web ın care se afla clasele de rdquocontrollerrdquo

Figura 52 Diagrama de pachete pentru backend

35

Ca si dependente nivelul de web ıl foloseste pe cel de seviciu cel de serviciu ılfoloseste pe cel de rdquomagazierdquo iar clasele din pachetul de domeniu sunt folosite ın toatecelelalte pachete

In continuare voi prezenta pe rand fiecare nivel al serverului adica fiecare pachet

Figura 53 Diagrama de clase pentru pachetul rdquodomainrdquo

36

Nivelul de domeniu (domain) este alcatuit ın primul rand din clasele care suntentitati ın baza de date Acestea sunt reprezentate de toate clasele ce stocheaza informatiidespre utilizatori si despre produse si comenzi Pe langa informatiile personale despre unutilizator de genul numelui email-ului sau data nasterii care sunt salvate ın entitateapersoana se stocheaza despre utilizator ın clase diferite informatii de genul locului undelocuieste locul unde a copilarit locurilor unde a facut scoala locului unde lucreaza sau celmai important pentru aplicatia aceasta lucrurilor care ıi plac In afara acestor informatiidespre utilizatori sunt si clase cu informatiile despre prieteni despre produse sau desprecomenzi

Din cauza faptului ca aplicatia este de tipul unei retele sociale ın care exista prieteniiıntre persoane exista dependente ıntre toate entitatile aplicatiei Acesta este si motivulpentru care am ales baza de date sub forma de graf pe care sa se mapeze toate acesteentitati sub forma de noduri si toate aceste dependente sub forma de relatii

In pachetul de domeniu se afla si trei subpachete Unul dintre ele este pentruclasele folosite pentru a trata erorile aplicatiei In interiorul acestui pachet se afla douaclase pentru eroare si o exceptie cea folosita ın cazul ın care nu se gaseste ceea ce doresteutilizatorul Pe langa asta este clasa care are ca obiect raspunsul dat de sistem ın cazulunei erori la server Aceasta contine ın interiorul sau pe langa codul erorii si detalii despreeroarea trimisa Aceasta lista de detalii e reprezentata de obiectele de tipul celei de-a treiaclase din pachetul acesta

Celelalte doua subpachete aflate ın acest nivel sunt cele care contin clasele specialede cerere sau raspuns care au ajutat la maparea acestora mai bine In multe cazuri nua fost necesara trimiterea la interfata utilizator a tuturor informatiilor stocate despre oentitate si de aceea am ales sa creez ın aceste cazuri un obiect auxiliar care sa fie folositpe post de raspuns

Figura 54 Diagrama de clase pentru pachetul rdquorepositoriesrdquo

37

Cel de-al doilea nivel al aplicatiei backend este cel de rdquomagazierdquo (repositories) carecontine doar interfete de tip rdquoRepositoryrdquo

Aceste interfete sunt cele care fac operatiile directe asupra entitatilor din baza dedate

Unele interfete doar extind interfata care are deja implementate metodele CRUDsi din acest motiv nu au metode suplimentare iar altele au si metode ın plus care au carol sa execute interogari mai complexe asupra bazei de date In acele metode se pot scrieinterogarile ın Cypher pentru a putea primi informatii despre mai multe noduri sau desprerelatiile dintre acestea sau si pentru a returna doar anumite rezultate care ındeplinescanumite conditii In felul acesta a fost implementata si cererea de oferire a recomandarilorIn acel caz sistemul returneaza produsele care au ın descriere unul din lucrurile care se aflaın lista de obiecte sau servicii primite de la Facebook ca ıi plac utilizatorului

Nivelul de rdquoRepositoryrdquo este folosit direct de cel de-al treiea nivel cel de servi-ciu Acesta este nivelul la care se executa logica aplicatiei unde se comanda modul defunctionare al ıntregii aplicatii

Figura 55 Diagrama de clase pentru pachetul rdquoservicesrdquo

Pe acest nivel ajung toate cererile din server dupa ce trec de verificarile de securitateIn acest pachet se afla si clasa de securitate care face verificarile necesare In aceasta clasaexista o metoda ce se apeleaza la prima cerere cea de salvare a datelor de la Facebookdespre utilizator si care codifica id-ul utilizatorului si ıl trimite pe raspuns ınapoi interfeteiPe langa asta ın acea clasa se afla si o metoda care verifica faptul ca id-ul codificat esteal unui utilizator cu rol corespunzator pentru a face acea cerere

In plus ın acest pachet se afla si toate celelalte clase care fac diverse operatii pedatele din baza de date si dau raspunsuri cererilor din interfata Aici se afla logica care

38

comanda actiunile asupra utilizatorilor asupra prietenilor acestora asupra produselor siasupra comenzilor

Ultima clasa a acestui nivel este cea care se ocupa de trimiterea de email-uri Incazul ın care se face o noua comanda de catre un utilizator toti producatorii produselor depe comanda sunt notificati despre produsele lor pe care le doreste utilizatorul Din serviciulde comanda se apeleaza serviciul de email pentru fiecare producator din lista celor care auproduse care se afla pe lista comenzii utilizatorului

Ultimul si cel mai aproape de interfata utilizator este nivelul de web Acolo se aflatoate clasele de rdquoControllerrdquo ale aplicatiei server

Figura 56 Diagrama de clase pentru pachetul rdquowebrdquo

Toate cererile din interfata utilizator ıncearca sa se mapeze pe rutele declarate ınclase pentru a fi procesate ın metoda corespunzatoare Toata aceasta parte este foarteusor de implementat si mai ales foarte lizibil pentru programatori datorita adnotarilor dinJava Cu ajutorul acestora trebuie doar specificat care este numele URL-ului cererii careeste tipul de obiect asteptat si daca se trimite ca rdquoquery stringrdquo pe URL sau ın interiorulcorpului cererii si tipul raspunsului Pentru fiecare cerere care nu este apelata ın parteaneautentificata a utilizatorului primul lucru care se apeleaza este metoda de securitatepentru a verifica rolul si id-ul utilizatorului Daca din punctul de vedere al securitatii totuleste ın regula se apeleaza metoda corespunzatoare din pachetul de serviciu

39

O singura clasa este diferita de restul ın pachetul de controller si aceea este clasa deeroare Acolo se mapeaza erorile aparute ın timpul cererii si se trimite ınapoi ın interfatagrafica un raspuns cu cod de eroare specific nu numai 500 Generic Application Exceptioncum ar trimite fara aceasta clasa si cu detalii despre motivul aparitiei erorii

Datorita folosirii adnotarilor din java nu a fost necesara folosirea unor rdquodesignpatternrdquo-uri ın sistem De exemplu pentru a folosi ın nivelul de web ceva din pachetulde servicii trebuia doar acel obiect sa aiba adnotarea Autowired si se ınlocuieste atatfolosirea rdquodesign patternrdquo-ului Singleton cat si a celui de Factory Acel obiect nu trebuiecreat sau initializat se face asta implicit datorita adnotarii si de asemenea este folositapeste tot aceeasi instanta

In concluzie toate cererile venite din interfata grafica ajung ın nivelul de rdquocontrollerrdquode unde sunt trimise la cel de rdquoservicerdquopentru a fi procesate si facute eventualele modificarinecesare ın baza de date ca apoi raspunsul sa fie trimis ınapoi spre aplicatia client pentruafisare

512 Arhitectura componentei frontend

A doua componenta implementata a sistemului este aplicatia client frontend-ulAceasta a fost scrisa ın Java Script cu ajutorul framework-ului Ext JS compilarea

se face cu ajutorul Sencha CMD si mediul de implementare a fost IntelliJ IdeaCu ajutorul framework-ului Ext JS se scriu componente care apoi se initializeaza

unele pe altele Aplicatia porneste cu fisierul Applicationjs care este un fel de rdquomainrdquopentru aplicatie Aceasta initializeaza alte componente care la randul lor includ altecomponente si tot asa Structura poate fi foarte usor comparata cu una arborescenta dinacest punct de vedere

Framework-ul a fost creat sa functioneze ın felul acesta pentru ca scopul componen-telor este sa fie scrise ın asa fel ıncat sa poata pe viitor sa fie utilizate din nou Una dindorintele majore ın programare tot timpul este de a se scrie cod ıntr-o maniera ın care safie cat mai reutilizabil Iar framework-ul Ext JS exact asta ıncearca

Arhitectura aplicatiei client se gaseste ın figura 57 si este la randul ei ımpartita ınpachete ca si cea de server Similar cu pachetul de rdquodomainrdquo de la aplicatia de backendeste pachetul rdquomodelrdquo al interfetei utilizator Aici sunt rdquoclaserdquo care sunt simple POJO sicare sunt apoi folosite ın nivelele urmatoare Sunt mai putine decat clasele din rdquostorerdquodeoarece daca raspunsul de la server nu trebuie procesat nu sunt necesare se pot mapadirect obiectele din rdquostorerdquo pe componentele interfetei utilizator

Urmatorul nivel este cel pe care se afla clasele de rdquostorerdquo Acestea sunt cele careexecuta cererea spre backend si face legatura ıntre client si server Daca are o clasa derdquomodelrdquodeclarata atunci populeaza acel obiect cu datele primite de la server iar ın cazul ıncare nu este declarat un model se trimit datele exact asa cum s-au primit la nivelul urmatorde rdquoviewrdquo Acest nivel seamana din punct de vedere al functiei cu cel de rdquorepositoryrdquo de laaplicatia server deoarece ambele au rol de legatura Aceea facea legatura ıntre aplicatiesi baza de date si aceasta face legatura ıntre aplicatia client si aplicatia server

40

Figura 57 Diagrama de clase pentru aplicatia web

Cel de-al treilea pachet al aplicatiei este cel de rdquoviewrdquo In acest pachet se afla claselecare alcatuiesc partea vizuala a aplicatiei La randul ei si aceasta este alcatuita tot dincomponente Aplicatia deschide ın primul rand Main-ul care determina aparitia paginii deHome si afisarea ın meniu a optiunilor posibile ın functie de autentificare si rol Clasele deaici se executa de fapt la deschiderea aplicatiei fiind rdquosingle page applicationrdquo si tot atuncise ıncarca pe pagina componentele Ca si arhitectura a pachetului acesta este ımpartit larandul sau ın subpachete Pentru o mai buna organizare exista patru subpachete cateunul pentru fiecare tip de utilizator In felul acesta toate rdquoviewrdquo-urile care sunt specificeunui utilizator cu un anumit rol se afla ın acelasi subpachet

Cele patru subpachete existente ın pachetul rdquoviewrdquo sunt

1 Pachetul rdquomainrdquo care cuprinde rdquoviewrdquo-urile care se afla ın partea neautentificata aaplicatiei

2 Pachetul rdquoclientrdquo continand rdquoviewrdquo-urile pe care le poate accesa un utilizator simplu3 Pachetul rdquoproducerrdquo specific actiunilor unui utilizator care are rol de producator4 Pachetul rdquoadminrdquo care contine toate rdquoviewrdquo-urile care ıi apar unui utilizator care este

administrator al aplicatiei

Ultimul pachet si nivel al aplicatiei client este cel de rdquocontrollerrdquo In acest pachet

41

se afla clasele care fac actiunile din interfata grafica In timp ce pachetul rdquoviewrdquo continedoar partea grafica a aplicatiei adica modul ın care aceasta trebuie sa arate pachetulrdquocontrollerrdquo contine actiunea acestora modul ın care aplicatia trebuie sa functioneze

Ca si arhitectura si acest pachet a fost ımpartit la randul lui tot ın cele patrusubpachete ca si pachetul rdquoviewrdquo adica rdquomainrdquo rdquoclientrdquo rdquoproducerrdquo si rdquoadminrdquo In pluspentru a fi usor de gasit ce clasa de rdquocontrollerrdquo apartine carui rdquoviewrdquo am ales ca cele douasa aiba acelasi nume In felul acesta daca se doreste sa se gaseasca actiunile unui rdquoviewrdquose poate cauta dupa o clasa cu acelasi nume ın pachetul rdquocontrollerrdquo Numarul claselor dinacest pachet este mai mic decat cel al claselor din rdquoviewrdquo deoarece nu toate paginile dininterfata au actiuni suplimentare Daca singura actiune este ıncarcarea paginii cu date dela server adica doar o actiune simpla de GET datele se ıncarca cu ajutorul rdquostorerdquo-ului laıncarcarea paginii si nu este necesara nici o actiune suplimentara Paginile pe care se potface si actiuni de alt gen sau se deschid noi ferestre au nevoie de clase de rdquocontrollerrdquo

In concluzie arhitectura aplicatiei client este una bazata pe componente care ıncearcasa foloseasca cat mai multe clase reutilizabile

52 Structura bazei de date

Baza de date a aplicatiei este de tip graf de tipul Neo4j Pentru utilizare exista unprogram numit Neo4j ce trebuie instalat Acest program are si o interfata grafica ın carese pot vizualiza datele sub forma grafica si ın care se pot scrie de asemenea si interogariın limbajul acestei baze de date adica Cypher

Fiind o baza de date sub forma de graf datele stocate sunt salvate ın structurade date sub forma de noduri si relatii Entitatile din pachetul de domeniu din aplicatiabackend se gasesc ın baza de date sub forma unor noduri iar dependentele dintre nodurise mapeaza ın baza de date sub forma unor relatii Un element diferit fata de alte tipuride baze de date este faptul ca pe relatiile dintre noduri se pot salva atribute cum este ınaplicatie cazul pentru prieteniile dintre persoane In cazul acestora pe relatia dintre nodurise salveaza daca prietenia a fost sau nu acceptata

Pentru fiecare clasa POJO din aplicatia server clasa ce are doar metodele get si setsi se afla ın pachetul domain exista cate un tip de nod diferit ın baza de date cum estesi marcat ın diferite culori ın figura 58 Fiecare tip de nod are atributele proprii care potlua valori sau pot fi nule Iar fiecare obiect din Java reprezinta un nod diferit ın baza dedate

Neo4j a fost cea mai buna optiune pentru baza de date pentru ca aplicatia poate ficonsiderata o retea sociala Acest lucru se datoreaza relatiilor de prietenie dintre persoanesi a multiplelor relatii ıntre noduri Toate nodurile se afla ın acceasi componenta conexadeci nu exista noduri izolate care sa nu aiba nici o legatura cu nici un alt nod

Datorita acestei structuri a bazei de date este posibila implementarea cererii derecomandare ca o simpla interogare ın baza de date aceasta fiind cea mai simpla metodade implementare a unui sistem de genul acesta una mult mai complexa ar fi fost un

42

algoritm de ınvatare care sa ınvete tipare ale utilizatorilor si sa recomande cadouri pe bazaacestor informatii

Figura 58 Diagrama bazei de date pentru doi utilizatori

Un alt avantaj al acestui tip de baza de date este faptul ca datele nu sunt duplicateın baza de date Spre exemplu daca mai multi utilizatori au ca locatie acelasi oras nu secreaza cate un nod cu acea locatie de mai multe ori ci acel unic nod va avea cate o relatiecu fiecare utilizator care are ca locatie acel oras

In concluzie structura bazei de date a fost aleasa ın acest fel datorita tipului apli-catiei adica asemanatoare cu o retea sociala si datorita implementarii simple a unui sistemde recomandare pe o asemenea baza de date

53 Fluxul pentru diferite operatii

Pentru aplicatie cele mai importante cazuri de utilizare sunt salvarea informati-ilor despre utilizator primite de la Facebook pentru crearea unui profil si recomandareacadourilor pentru un utilizator al aplicatiei Din aceasta cauza cele doua cazuri de utilizarevor fi prezentate mai ın detaliu ın continuare

43

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 12: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

asemanatoare va putea sa recomande cel mai bine un alt film unui prieten Cea mai simplaimplementare pentru asa ceva este sub forma unei matrici cu spatii goale ın locurile undenu se cunoaste informatie

Pe langa aceste tipuri de recomandari mai sunt si altele dar care nu sunt folosite lafel de des

Figura 32 Tipurile sistemelor de recomandare2

In filtrarea bazata pe criterii demografice se fac recomandari catre utilizatori pebaza informatiilor lor demografice Sistemul va sugera elemente care au fost selectate dealti utilizatori care se ıncadreaza ın acelasi profil demografic

Filtrarea bazata pe utilitate se bazeaza pe utilitatea pe care utilizatorul o va obtinede la produs Poate include lucruri precum fiabilitatea si disponibilitatea vanzatoruluipentru a se asigura ca recomanda produse usor de obtinut de catre utilizator

Filtrarea bazata pe cunostinte recomanda selectii pe baza preferintelor si modelelorde cumparare cunoscute despre utilizator Intrucat sistemul va sti ce a cumparat con-sumatorul ın trecut acesta poate face recomandari ın functie de ceea ce ar putea satisfaceaceste nevoi ın viitor

Filtrarea hibrida combina doua sau mai multe tehnici de recomandare diferite pentrua crea un sistem de recomandare mai detaliat

2httpswwwsciencedirectcomsciencearticlepiiS1110866515000341f0005

7

33 Abordarea Netflix

Foarte multa cercetare ın domeniul sistemelor de recomandare a fost influentata decei de la Netflix

Figura 33 Tipuri de recomandari oferite de Netflix3

Netflix este un serviciu de streaming care permite clientilor sa vizioneze o gamalarga de emisiuni TV filme documentare si multe altele pe mii de dispozitive conectatela internet

In figura 33 este o imagine a site-ului cu tipurile diferite de recomandari pe careacestia le ofera

Cheia succesului Netflix consta ın capacitatea lor de a anticipa ceea ce le placeutilizatorilor motiv pentru care fiecare doua din trei ore de vizionare ın Netflix provin dinrecomandari In trecut Netflix au folosit informatii despre sex si varsta pentru a determinace filme sa recomande Acum ei folosesc de exemplu ceea ce utilizatorul a urmaritınainte a cautat cat timp petrece utilizatorul vizionand filme si tipul de dispozitiv utilizatPredictiile din motorul de recomandare Netflix nu se bazeaza doar pe comportamentulutilizatorului ci si pe context (cum ar fi timpul zilei) popularitatea titlurilor noutateadiversitatea si cat de recent a fost scos filmul sunt factori importanti [7]

Premiul Netflix a fost o competitie lansata ın 2006 pentru cel mai bun algoritm defiltrare colaborativa pentru a prezice ratingurile utilizatorilor pentru filme pe baza eva-luarilor anterioare fara alte informatii despre utilizatori sau filme adica fara ca utilizatoriisau filmele sa fie identificate stiind doar numerele atribuite pentru concurs ale acestoraPremiul pentru castigator consta ın 1 milion de dolari Peste 2000 de echipe au depusseturile de predictie si peste 650 de echipe au depasit precizia algoritmului actual al Netflix

3httpstechblogglomexcompostrecommender-systemshtml

8

cu mai mult de 5 [11] Castigatorul a fost echipa BellKors Pragmatic Chaos care adepasit algoritmul Netflix cu 1006

Cei de la Netflix au fost extrem de multumiti de rezultatul obtinut si nu numai caau ıncorporat acel algoritm ın algoritmul lor existent de recomandare dar au initiat si o adoua editie a competitiei

34 Sisteme de recomandare cu Neo4j

Urmatoarea parte a studiului bibliografic s-a axat pe bazele de date de tip grafGraphDB si mai exact Neo4j ın comparatie cu celelalte tipuri de baze de date adica celerelationale In cartea [10] sunt prezentate aceste concepte din punct de vedere teoretic siın lucrarile de master [5] si [1] este prezentata aceasta comparatie ıntre diferite tipuri debaze de date pe o aplicatie reala

Limbajul care se foloseste ın bazele de date Neo4j este Cypher Cu ajutorul acestuiase mapeaza query-urile pe noduri si relatii Din punct de vedere teoretic diferenta ıntrebazele de date relationale si cele sub forma de graf consta ın modul ın care sunt stocatedatele In timp ce ın bazele de date relationale datele sunt stocate ın structuri de datesub forma de tabel ın cele sub forma de graf datele sunt stocate ın noduri Coloaneletabelelor din bazele de date relationale se mapeaza ın bazele de date sub forma de graf peproprietati Pentru a face o legatura ıntre tabelele relationale se foloseau rdquochei strainerdquo pecand la Neo4j exista relatii ıntre noduri Din cauza faptului ca bazele de date sub formade graf s-au inspirat din cele relationale exista o asemanare ıntre ele si toate lucrurile auun corespondent ın cealalta

In lucrarea [12] sunt prezentate avantajele folosirii unei baze de date sub forma degraf cand se lucreaza cu retele sociale La aplicatiile de tipul retelelor soriale relatiile dintrenoduri sunt partea cea mai importanta iar pentru acestea o baza de date sub forma degraf se mapeaza cel mai bine Un avantaj al bazelor de date sub forma de graf din punctulde vedere al programatorilor cu acestea se lucreaza foarte similar ca si cu cele relationaledupa cum se prezinta si ın [4]

Un exemplu de sistem de recomandare construit cu Neo4j este [11] In acesta lucrareeste prezentata construirea unui sistem de recomandare care sa recomande prieteni ıntr-oaplicatie de socializare In lucrare sunt patru abordari pentru construirea unui astfel desistem Prima consta ın recomandarea unor prieteni cu care utilizatorul ar avea prieteniın comun cea de-a doua sunt persoane cu care utilizatorul se afla ın acelasi grup cea de-atreia sunt utilizatori care au mers la aceleasi evenimente ca si utilizatorul si ultima abordareconsta ın recomandarea persoanelor cu cei mai multi prieteni In urma mai multor teste sistatistici s-a decis ca abordarea cea mai buna este prima cea cu prietenii ın comun Toateaceste patru metode de oferire a recomandarilor se mapeaza foarte usor pe o baza de datesub forma de graf si reprezinta doar cate un query destul de simplu ın Cypher O astfelde aplicatie s-ar fi mapat mult mai greu pe o baza de date relationala datorita multiplelorrelatii si legaturi

9

Un alt exemplu de aplicatie unde s-a ales baza de date Neo4j a fost [2] Aicipentru articolele politice pe care sistemul le recomanda se creeaza o combinatie ıntrerecomandarile obtinute din articolele care le plac oamenilor cu care utilizatorul vorbestemult si lucruri care le plac utilizatorilor cu care acesta are lucruri ın comun Si ın acest cazexista o multime de relatii ıntre utilizatori si articole si cel mai usor se obtin recomandarilecu o aplicatie sub forma de graf motiv pentru care au si ales Neo4j

35 Utilizarea retelei Facebook pentru crearea unui

profil utilizatorilor

In continuare ca studiu bibliografic au urmat sisteme asemanatoare cu sistemuldorit si modul ın care acestia au reusit sa creeze profilul utilizatorului [13] Problema ceamai mare este rdquocold startrdquo-ul Adica atunci cand un utilizator este nou ın aplicatie nuse stiu suficiente informatii despre el pentru a putea sa i se ofere recomandari Dupa ceacesta foloseste aplicatia o perioada de timp ar putea sa i se ofere recomandari bazate peactivitatea sa anterioara ın aplicatie Din acest motiv la ınceput recomandarile pot lasade dorit si pot fi nu tocmai corecte

O metoda ın care se poate rezolva aceasta problema se afla ın lucrarea de master[7] ın care la utilizatorii noi se recomanda restaurante pe baza pozitiei lor geograficeAtunci cand doresti sa mergi la un restaurant este foarte importanta distanta la care seafla acel restaurant Din aceasta cauza pentru un utilizator caruia sistemul nu stie ce sa ıirecomande ıi recomanda restaurante la ıntamplare dintre cele care se afla cel mai aproapede el In felul acesta dupa ce merge la unul din restaurante si da feedback sistemul poatedupa aceea sa ıi faca recomandari

In lucrarea [8] recomandarile pentru votare au doua abordari La prima i se reco-manda lucrurile care le-a recomandat persoana cu scorul cel mai bun Si cea de-a douaabordare consta ıntr-un set de ıntrebari la care un utilizator nou trebuie sa raspunda candısi face contul

In acest caz cea mai buna metoda ın care se poate rezolva aceasta problema parea fi sa se ia informatiile de la API-ul de la Facebook Facebook este o aplicatie extremde utilizata si care ofera ca informatii publice exact ce ar fi necesar pentru a recomandacadouri de exemplu data nasterii sau lucruri care ıi plac unui utilizator Cu ajutorulacestora se poate calcula varsta utilizatorului poate sa fie ıncadrat ıntr-un profil si sepoate afla stilul de lucruri care ıi plac

Toate aceste informatii publice de la Facebook pot fi salvate si pot fi utilizate maitarziu pentru a se creea recomandari pe baza lor In articolul [3] despre valoarea datelor dela Facebook se prezinta ca si caz de utilizare pentru un site de comert online Aceasta estefoarte asemanatoare din punct de vedere al recomandarilor cu aplicatia de recomandarecadouri Diferenta dintre cele doua este ca ın cazul uneia trebuie sa recomande produsepentru utilizatorul aplicatiei si cealalta pentru un prieten al acestuia

10

Din punct de vedere al aplicabilitatii Facebook este o retea sociala deci datele salese mapeaza foarte bine pe o baza de date de tip graf cum este prezentat si ın lucrarea [6]

Asadar daca la crearea contului utilizatorului ın aplicatie se iau si informatiile pu-blice despre utilizator se vor putea oferi recomandari mult mai corecte ınca de la ınceput

36 Solutii similare

Ca solutii similare pe piata online nu exista aplicatii folosite pentru a recomandacadouri personalizate specific pentru o persoana anume Multe site-uri considera ca eirecomanda cadouri ınsa acestea reprezinta de fapt o filtrare mai avansata a rezultatelorproduselor de pe site-ul lor

Un site care ofera cadouri personalizate este Giftly 4 prezentat ın figura 34 careofera o modalitate usoara de a oferi cadouri Acest site nu are parte de recomandari cia gasit un mod de a face oamenii sa primeasca mereu ceea ce ısi doresc Cel care oferacadoul nu ıl cumpara ci doar ıl sugereaza dar decizia finala asupra cadoului este la celcare ıl primeste Modul ın care functioneaza este

1 Se ofera un rdquocard cadourdquo prin email sms printat sau ca o felicitare de ınaltacalitate

2 Destinatarul alege cel mai convenabil mod de a primi cadoul rdquocard cadourdquo ınposta sau direct ca bani ın contul bancar sau contul PayPal

3 De fapt utilizatorul ıi sugereaza destinatarului ce ar vrea el sa ofere ca si cadouiar destinatarul trimite ca mesaj modul ın care a cheltuit banii

Figura 34 Site web Giftly

4httpswwwgiftlycom

11

Ofera de asemenea si sugestii de cadouri Un om cand navigheaza pe site poate sase uite la cadouri ın categoriile Popular Holidays Birthdays Drinks Eats Meals BackTo School Get Fresh Health Fitness Going Out Getaway Top Shelf For The HipsterClothes For Her Clothes For Him Congratulations Expecting Activities si Custom

Un alt site cu cadouri este Etsy 5 cu imaginea 35 care arata site-ul Etsy este o piataglobala pentru bunuri unice si creative Pe pietele lor milioane de oameni din ıntreagalume se conecteaza atat online cat si offline pentru a face vinde si cumpara bunuri uniceEtsy ofera de asemenea o gama larga de servicii si instrumente de vanzari care ajutaıntreprinzatorii creativi sa ınceapa sa gestioneze si sa-si masoare afacerile Misiunea loreste sa pastreze comertul uman Deci de fapt acest site sprijina mai mult producatoriinu comerciantii De asemenea este mai mult axat pe bunuri unice si lucruri rdquounicerdquo Ca sicelelalte site-uri de genul acesta are o modalitate de a cauta lucrurile mai inteligent maispecializat pe ceea ce te intereseaza Categoriile de cautare sunt Jewelry AccessoriesClothing Shoes Home Living Wedding Party Toys Entertainment Art CollectablesCraft Supplies Tools si Vintage

Figura 35 Site web Etsy

Cel de-al treilea site care ofera servicii asemanatoare este Gifts 6 prezentat ın figura36 Acesta se focuseaza pe cadouri pentru diverse ocazii cum ar fi zilele de nastereCraciun diverse aniversari si alte evenimente la care se cumpara cadouri Pentru parteade recomandare se ofera posibilitatea de a efectua un test despre acel om caruia dorestisa ıi cumperi cadoul care are ca scop ıncadrarea omului respectiv ıntr-un profil si apoi

5httpswwwetsycom6httpswwwgiftscom

12

alegerea unor sugestii ce s-ar potrivi unei persoane cu acel tip de personalitate O primaıntrebare se refera la genul persoanei si ıntrebarea este daca cadoul este pentru o femeieun barbat o fetita sau un baietel Cea de-a doua ıntrebare se refera la marja de varsta ıncare se ıncadreaza acel om de exemplu pentru barbat optiunile sunt adolescent barbat ınjur de 30 de ani sau barbat ın varsta Cea de-a treia ıntrebare se refera la personalitateaomului Mai exact se fac sugestii pentru tipuri de lucruri ce i-ar putea placea unui omcare are trasaturile descrise ın primele doua ıntrebari De exemplu la barbati ın jur de30 de ani optiunile sunt ıi place sportul ıi place natura e aventurier ıi place golful ıiplace sa faca gratare sa serveasca bauturi sa gateasca sa animeze ıi place sa se ımbraceelegant este sef e entuziasmat de bere sau e un fan al sporturilor Iar ın final ın functiede raspunsurile date la ıntrebari se afiseaza sugestii de cadouri care se potrivesc oamenilorcu acel tip de personalitate

Figura 36 Site web Gifts

Nordstrom 7 care este prezentat ın imaginea 37 are o abordare similara avand pesite o multime de optiuni de filtrare a cadourilor Se pot cauta ın acest site cadouri pentrubebelusi cadouri de Craciun bijuterii pentru femei optiunile sunt multiple Acest lucruofera utilizatorilor sugestii pentru a le fi mai usor sa ıncadreze aceasta persoana ıntr-unanumit tip Iar dupa alegerea categoriei toate sugestiile de cadouri oferite de catre sitese ıncadreaza ın acel tip Ca avantaj al acestui site este ca ei ofera si serviciul de livrareal cadoului dupa cumparare oriunde ın lume Un dezavantaj al multor site-uri de genulacesta este ca ofera livrare doar ın zona sa apropiata

7httpsshopnordstromcomcgifts

13

Figura 37 Site web Nordstrom

14

Capitolul 4

Analiza si Fundamentare Teoretica

In acest capitol vor fi prezentate cerintele functionale ale lucrarii ımpreuna cucerintele non-functionale ale acesteia De asemenea va fi prezentata diagrama cazurilor deutilizare si vor fi prezentate mai ın detaliu cazurile de utilizare principale ale aplicatiei Incontinuare se va prezenta perspectiva tehnologica a proiectului si se vor explica deciziiletehnologice luate In final se va prezenta diagrama conceptuala a aplicatiei

41 Cerinte functionale

bull Posibilitatea autentificarii ın aplicatie si crearii unui profil propriu din care se potutiliza informatii si cu ajutorul caruia utilizatorul poate fi ıncadrat ıntr-un profil

bull Utilizatorii pot crea prietenii ca ıntr-o retea de socializare pentru a putea afla infor-matii despre prieteni si pentru a li se putea recomanda cadouri pentru acestia

bull Cu ajutorul informatiilor de la Facebook un utilizator poate fi notificat dinainte caurmeaza ziua de nastere a unuia din prietenii lui si sa i se ofere mai multe variantede cadouri potrivite pentru acesta Aceasta informatie o primeste cu suficient timpınainte pentru a nu fi surprins fara un cadou De la Facebook pe langa informatiiledespre data zilei de nastere sunt importante si varsta sau lucrurile care ıi plac uti-lizatorului Toate acestea ajuta la crearea profilului utilizatorului pe baza caruia serecomanda dupa aceea cadourile

bull De asemenea sistemul poate recomanda si un cadou pentru alt tip de evenimentdecat zi de nastere de genul cadou de Craciun cadou de nunta cadou pentru unnou-nascut etc

bull In aplicatie vor fi adaugate si diferite produse iar pentru a face mai usoara cumparareade cadouri se va putea face si comanda pe internet In momentul ın care un utilizatorface o noua comanda producatorii produselor comandate sunt ınstiintati de existentaacestei noi comenzi

15

bull Pentru persoanele la care pe profilul de Facebook este insuficient completat saupentru a putea cumpara cadouri pentru o persoana care nu are Facebook sau nuare cont ın aceasta aplicatie si despre care ın acest fel nu se cunosc nici un felde informatii se vor putea filtra cautarile pentru cadou printr-o serie de ıntrebaristandard Aceste ıntrebari vor putea creea un rdquomini-profilrdquo pentru acea persoanapentru ca sistemul sa poata recomanda cadouri

42 Cerinte non-functionale

bull Securitate sistemul nu raspunde cererilor decat atunci cand utilizatorul a fost au-tentificat ın aplicatie si are rolul necesar pentru a face acea cerere

bull Portabilitate aplicatia nu depinde de sistemul de operare pe care ruleaza De aseme-nea nu e dependenta de browserul folosit de utilizator

bull Disponibilitate sistemul ramane stabil ın fata erorilor si functioneaza la fel si dupaaparitia unei erori

bull Extensibilitate sistemul permite adaugarea sau modificarea unor componente atuncicand cerintele aplicatiei se modifica Pe langa asta e flexibila unor dezvoltari ulte-rioare

43 Cazuri de utilizare

In aceasta sectiune se vor prezenta actorii aplicatiei diagrama cazurilor de utilizaresi vor fi descrise cazurile de utilizare de baza ale fiecarui actor

Ca si actori aplicatia are patru tipuri de utilizatori

bull utilizator anonimbull clientbull producatorbull administrator

Aplicatia este conceputa ın asa fel ıncat ıntre actori este o relatie de mostenire Acestlucru presupune ca un actor are posibilitatea de a efectua tot ce putea cel dinaintea lui siceva ın plus Deci utilizatorii anonimi au cele mai putine permisiuni iar administratoriiau permisiuni totale Acest lucru se vede foarte clar si ın diagrama cazurilor de utilizaredin imaginea 41

In continuare vor fi prezentate cazurile de utilizare

1 recomandare cadouri2 adaugare produs3 modificare rol utilizator

16

Figura 41 Digrama cazurilor de utilizare

17

431 Recomandare cadouri

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unutilizator trebuie sa le urmeze pentru a primi recomandari de cadouri pentru un cunoscutsi pentru a efectua o comanda

Actorul principal

Orice utilizator al aplicatiei

Parti interesate si interese

Utilizatorul care doreste sa cumpere un cadou este interesat de a gasi un cadoupotrivit pentru cineva pe care ıl cunoaste

Producatorul care e interesat sa ısi poata vinde produseleUtilizatorul care primeste cadoul fiind interesat sa primeasca un cadou care sa i se

potriveasca si care sa ıi placa

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand utilizatorul porneste aplicatia11 Utilizatorul verifica daca are cont de Facebook si daca are urmeaza pasul 111

daca nu 22111 Utilizatorul se autentifica ın aplicatie cu ajutorul credentialelor de la

Facebook12 Utilizatorul deschide sectiunea de recomandare cadouri13 Utilizatorul completeaza formularul cu datele ce trebuie introduse pentru a primi

recomandari de cadouri pentru un prieten14 Utilizatorul poate fi satisfacut cu recomandarile primite si atunci urmeaza pasul

141 iar daca nu este atunci urmeaza cazul alternativ 23141 Utilizatorul adauga ın cosul de cumparaturi cadouri pe care doreste sa

le cumpere15 Utilizatorul cere sa ısi vada cosul de cumparaturi16 Utilizatorul poate sa se declare multumit de cosul de cumparaturi caz ın care

urmeaza pasul 161 sau poate sa aleaga cazul alternativ 24161 Utilizatorul aproba cosul de cumparaturi si accepta sa se faca comanda

17 Sistemul introduce ın baza de date comanda18 Utilizatorul va putea vedea la sectiunea comenzilor sale noua comanda si statusul

ei19 Sistemul notifica producatorul de aparitia noii comenzi110 Utilizatorul se dezautentifica din aplicatie

18

Use-Case EndUtilizatorul se va deconecta din aplicatie si o va ınchide

Figura 42 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueazaAcest flux poate aparea la orice pas211 Utilizatorul deschide sectiunea de recomandare cadouri212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca utilizatorul nu are cont de Facebook

19

Acest flux poate aparea la pasul 11221 Utilizatorul deschide pagina de Facebook222 Utilizatorul ısi face un cont pe pagina de Facebook si ısi completeaza

date despre el223 Utilizatorul revine la aplicatia de recomandare cadouri si ıncearca din

nou sa se autentifice ın aplicatie224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca utilizatorul nu e multumit de recomandariAcest flux poate aparea la pasul 14231 Utilizatorul sterge din cos cadourile pe care nu le mai doreste si revine

la pagina de recomandari232 Utilizatorul adauga alte cadouri ın cos233 Cazul de utilizare continua de la pasul 141

24 Flux-ul alternativ daca utilizatorul nu e multumit de produsele din cosul decumparaturi

Acest flux poate aparea la pasul 16241 Utilizatorul revine ınapoi la formularul cu introducerea datelor despre

beneficiarul cadoului242 Utilizatorul completeaza din nou datele243 Cazul de utilizare continua de la pasul 13

Preconditii

1 Utilizatorul trebuie sa aiba un cont de Facebook pentru a se putea autentifica ınaplicatie

2 Utilizatorul trebuie sa fie autentificat ın aplicatie pentru a putea face orice actiunedin acest caz de utilizare

3 Utilizatorul trebuie sa deschida sectiunea de recomandare cadouri pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noua comanda este salvata ın baza de date2 Comanda apare ın sectiunea de comenzi a utilizatorului ımpreuna cu statusul ei

curent3 Producatorul este notificat ca are o noua comanda

432 Adaugare produs

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unproducator trebuie sa le urmeze pentru a introduce un nou produs ın aplicatie

20

Actorul principal

Utilizatorii cu rol de producator sau cu rol de administrator

Parti interesate si interese

Producatorul care doreste sa introduca produsul nou ın aplicatie

Utilizatorii simpli care au o mai mare varietate de produse din care sa li se reco-mande cadouri

Figura 43 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo

21

Flux de evenimente

Use-Case Start

Cazul de utilizare ıncepe atunci cand producatorul porneste aplicatia

11 Producatorul verifica daca are cont de Facebook si daca are urmeaza pasul111 daca nu 22

111 Producatorul se autentifica ın aplicatie cu ajutorul credentialelor de laFacebook

12 Producatorul deschide sectiunea de adaugare produs

13 Producatorul completeaza datele necesare despre noul produs ımpreuna cu tipulde persoana si eveniment care i s-ar potrivi

14 Producatorul verifica daca este multumit de datele introduse si daca da urmeazapasul 141 daca nu 23

141 Producatorul efectueaza operatia de adaugare produs

15 Sistemul adauga un nou produs ın baza de date

16 Sistemul notifica producatorul ca noul produs a fost introdus cu succes

17 Producatorul se dezautentifica din aplicatie

Use-Case End

Producatorul se va deconecta din aplicatie si o va ınchide

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Producatorul deschide sectiunea de adaugare produs

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca producatorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Producatorul deschide pagina de Facebook

222 Producatorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Producatorul revine la aplicatia de recomandare cadouri si ıncearca dinnou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca Producatorul nu e multumit de datele introduse despreprodus

Acest flux poate aparea la pasul 14

231 Producatorul sterge datele gresite despre produs

232 Producatorul adauga alte date despre produs

233 Cazul de utilizare continua de la pasul 141

22

Preconditii

1 Producatorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Producatorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Producatorul trebuie sa aiba cont cu rol de rdquoproducatorrdquo sau rdquoadminrdquo pentru aputea face operatia aceasta

4 Producatorul trebuie sa deschida sectiunea de adaugare produs pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noul produs este salvat ın baza de date2 Produsul poate fi adaugat la recomandarile unui utilizator din acel moment

433 Modificare rol utilizator

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unadministrator trebuie sa le urmeze pentru a modifica rolul unui utilizator al aplicatiei

Actorul principal

Un utilizator al aplicatiei care are rol de administrator

Parti interesate si interese

Administratorul care doreste sa modifice rolul unui utilizatorUtilizatorul care doreste sa ısi schimbe rolul

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand administratorul porneste aplicatia11 Administratorul verifica daca are cont de Facebook si daca are urmeaza pasul

111 daca nu 22111 Administratorul se autentifica ın aplicatie cu ajutorul credentialelor de

la Facebook12 Administratorul deschide sectiunea de utilizatori13 Sistemul ıi returneaza administratorului utilizatorii care nu sunt administratori14 Administratorul modifica rolul utilizatorului din utilizator simplu ın producator

sau invers

23

15 Administratorul cere executarea modificarii

16 Sistemul executa modificarea iar ın caz de succes urmeaza pasul 161 si ın cazde eroare pasul 23

161 Sistemul notifica administratorul ca modificarea a fost efectuata cusucces

17 Utilizatorul se dezautentifica din aplicatie

Use-Case End

Administratorul se va deconecta din aplicatie si o va ınchide

Figura 44 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo

24

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Administratorul deschide sectiunea de utilizatori

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca administratorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Administratorul deschide pagina de Facebook

222 Administratorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Administratorul revine la aplicatia de recomandare cadouri si ıncearcadin nou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca sistemul returneaza o eroare la modificarea utilizatorului

Acest flux poate aparea la pasul 16

231 Sistemul returneaza un mesaj de eroare la modificarea utilizatorului

232 Aplicatia afiseaza mesajul de eroare administratorului

233 Cazul de utilizare continua de la pasul 15

Preconditii

1 Administratorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Administratorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Utilizatorul trebuie sa aiba cont cu rol de administrator pentru a putea efectuaorice actiune din acest caz de utilizare

4 Administratorul trebuie sa deschida sectiunea utilizatori pentru a putea ındeplinicerintele din cazul de utilizare

Postconditii

1 Noul rol al utilizatorului este salvat ın baza de date

2 La urmatoarea autentificare a utilizatorului acesta va observa ca interfata si maiprecis meniurile si actiunile care le poate face ıi vor fi diferite

25

44 Perspectiva tehnologica

441 Neo4j

Neo4j 1 este un sistem de gestionare a bazelor de date sub forma de graf dezvoltatde Neo4j Inc Descris de dezvoltatorii sai ca o baza de date tranzactionala compatibilacu ACID Neo4j este cea mai populara baza de date sub forma de graf dupa clasamentulDB-Engines

Baza de date Neo4j (ca si orice alta baza de date sub forma de graf) este foartediferita de o baza de date relationala cum ar fi MS Access SQL Server MySQL etcBazele de date relationale utilizeaza tabele randuri si coloane pentru stocarea datelor

Neo4j nu utilizeaza tabele randuri si coloane pentru stocarea sau prezentarea datelorci noduri si relatii

Neo4j este foarte potrivit pentru stocarea datelor care au multe relatii interconec-tate Acestea sunt de fapt aplicatiile ın care merita sa fie folosite De fapt bazele de datesub forma de graf cum este Neo4j sunt mult mai bune la tratarea datelor interconectatedecat bazele de date relationale

Acest lucru se datoreaza faptului ca modelul sub forma de graf nu necesita de obiceio schema predefinita Nu e nevoie sa se creeze structura bazei de date ınainte de a fiıncarcate datele asa cum se face la o baza de date relationala

Dar principalul motiv pentru care Neo4j este mai bun pentru datele relationalepentru acest tip de aplicatii este modul ın care permite crearea relatiilor Neo4j este con-struit ın jurul relatiilor si atunci nu este nevoie sa se configureze chei primare constrangerichei straine pentru a predetermina nodurile care pot avea o relatie si la ce date Cu Neo4jse poate adauga orice legatura ıntre orice nod ori de cate ori este nevoie

Neo4j are aceste calitati care nu se gasesc nici la celelalte baze de date NoSQLBazele de date non-relationale pe langa cele sub forma de graf sunt cele de tip coloanade tip document de tip cheie-valoare si de tip multi-model Nici unul din aceste tipuri nuau ca principala functionalitate maparea relatiilor si facilitatea interogarilor ıntr-o baza dedate cu multe relatii ıntre entitati

Generarea de recomandari personalizate este unul dintre cele mai frecvente cazuride utilizare a unei baze de date sub forma de graf Unele dintre principalele beneficii aleutilizarii grafurilor pentru a genera recomandari includ

- Performanta Lipsa indexurilor permite calcularea recomandarilor ın timp realasigurand ca recomandarea este ıntotdeauna relevanta si reflecta informatii actualizate

- Model de date Modelul de graf cu proprietati permite combinarea cu usurinta aseturilor de date din mai multe surse

Un alt avantaj al bazelor de date sub forma de graf Neo4j este faptul ca respectatoate principiile din modelul de consistenta ACID

Garantia data de principiile ACID este ca ofera un mediu sigur ın care sa functionezedatele Acronimul ACID reprezinta

1httpsneo4jcomuse-casesreal-time-recommendation-engine

26

bull Atomic Toate operatiile dintr-o tranzactie reusesc sau fiecare operatie este reluatabull Consistent La finalizarea unei tranzactii baza de date este solida din punct de

vedere structuralbull Izolat Tranzactiile nu se lupta una cu cealalta Accesul controversat la date este

moderat de baza de date astfel ıncat tranzactiile par sa se execute succesivbull Durabil Rezultatele aplicarii unei tranzactii sunt permanente chiar si ın cazul unor

defectiuniCand vine vorba de tehnologiile NoSQL cele mai multe baze de date sub forma de

graf (inclusiv Neo4j) utilizeaza un model de consistenta ACID pentru a asigura ca datelesunt stocate ın siguranta si ın mod consecvent

Am ales baza de date sub forma de graf ca optiune pentru stocarea datelor deoarecedin toate lucrarile si articolele citite a fost optiunea cea mai buna pentru un sistem derecomandare Deci acesta se mapeaza perfect pe cerintele functionale ale proiectului Sidin optiunile de baze de date sub forma de graf Noe4j a avut de departe cele mai multeavantaje ea fiind si cea mai utilizata

442 Cypher

Cypher 2 este un limbaj declarativ de interogare pentru bazele de date sub formade graf care permite interogarea si actualizarea rapida a datelor Cypher este un limbajrelativ simplu dar foarte puternic Interogarile foarte complexe ale bazei de date pot fiusor exprimate prin intermediul limbajului Cypher

Este conceput pentru a fi un limbaj de interogare uman Scopul lui principal este dea face interogarile mult mai simple si unele interogari care la bazele de date relationale nuerau posibile le face posibile Constructiile sale se bazeaza pe grafica si pe limba englezalucru care ajuta la scrierea mai intuitiva a interogarilor Este construit pentru a fi maiintuitiv pentru citire si nu neaparat pentru scriere

Cypher se bazeaza pe modelul Graph Property care ın plus fata de elementelegrafice standard ale nodurilor si muchiilor (numite relatii ın Cypher) adauga etichete siproprietati ca si concepte Nodurile pot avea zero sau mai multe etichete ın timp ce fiecarerelatie este de exact un singur tip Nodurile si relatiile au de asemenea zero sau mai multeproprietati

Chypher este limbajul de interogare folosit la bazele de date Neo4j deci este opti-unea implicita atunci cand se alege Neo4j

443 Maven

Maven 3 este un instrument de management software si de ıntelegere a proiectelorsoftware Pe baza conceptului unui model de obiect de proiect (POM) Maven poategestiona construirea raportarea si documentarea unui proiect printr-o informatie centrala

2httpsneo4jcomdevelopercypher-query-language3httpswwwjavatpointcommaven-tutorial

27

Obiectivul principal al lui Maven este acela de a permite unui dezvoltator sa ınte-leaga starea completa a efortului de dezvoltare ın cel mai scurt timp Avantajele Mavensunt

bull instalarea rapida a proiectului fara fisiere buildxml complicate doar un POMbull procesul de construire este standardizat pentru toate proiectelebull usor de ınvatat si de utilizatbull configurarea unui proiect este foarte rapidabull bine documentat

Am ales sa folosesc Maven deoarece este una din cele mai comune optiuni pentru aimporta librariile ıntr-un proiect si este si cel mai documentat Deci mereu cand esti pusın dificultate poti cauta pe internet sugestii

444 Spring Boot

Spring Boot 4 este un framework din cadrul Spring care ofera setari implicite pentruconfigurarea codului si adnotari pentru a lansa rapid proiecte noi ın executie Urmaresteabordarea rdquoConfigurarea defectiunilor vizionaterdquo pentru a evita un numar mare de linii decod pentru configuratii si pentru a ımbunatati procesul de dezvoltare

Avantajele Spring Boot sunt1 Face foarte usoara dezvoltarea de aplicatii bazate pe Spring cu Java sau Groovy2 Reduce timpul de dezvoltare si creste productivitatea3 Evita scrierea multor linii de cod adnotari si configurare XML4 Este foarte usor de integrat cu alte framework-uri din aceasi familie Spring cum ar

fi Spring JDBC Spring ORM Spring Data Spring Security etc5 Urmareste abordarea rdquoConfigurarea implicita a optiunilorrdquo pentru a reduce efortul

pentru dezvoltatori6 Ofera servere HTTP ıncorporate cum ar fi Tomcat Jetty etc pentru a dezvolta si

testa aplicatiile web foarte usor7 Ofera instrumentul CLI (Command Line Interface) pentru a dezvolta si testa apli-

catiile de tip rdquoSpring Bootrdquo (Java sau Groovy) din linia de comanda foarte usor sirapidAm ales ca optiune pentru partea de backend acest framework deoarece simplifica

foarte mult lucrurile Datorita lui un programator poate sa ısi concentreze mai tare energiape a construi proiectul din punctul de vedere al buissness-ului logic nu din punctul devedere al configurarilor necesare

445 Sencha CMD si ExtJS

Sencha CMD 5 este un instrument linie de comanda cross-platform care ofera multesarcini automate ın ciclul complet de viata al unei aplicatii ExtJS de la generarea unui

4httpswwwjavatpointcomspring-boot-tutorial5httpsdocssenchacomcmd

28

nou proiect la lansarea unei aplicatii ın productie

Sencha Cmd ofera o colectie de caracteristici puternice pentru economisirea timpu-lui care functioneaza ımpreuna cu Sencha ExtJS si Sencha Touch

Ext JS 6 este un framework pur JavaScript pentru construirea de aplicatii webinteractive cross-platform utilizand tehnici precum scripting Ajax DHTML si DOM

Avantajele framework-ului ExtJS sunt

1 Documentatia Extjs este foarte cuprinzatoare si bine ıntretinuta2 Aspectul cheie al bibliotecii EXTJS este suportul de tip cross-browser3 Framework-ul ExtJS ofera o multitudine de elemente UI Aceste elemente includ

forme casete de dialog file arbori si tabele4 Framework-ul ExtJS include suport pentru implementarile Ajax5 ExtJS ofera performante excelente Framework-ul este complet orientat spre obiecte

si este extensibil asta pentru ca este scris ın JavaScript

Pentru partea de frontend se foloseste framework-ul ExtJS deoarece are o arhitec-tura ce se mapeaza foarte bine pe proiectele de frontend si anume arhitectura bazata pecomponente Aceasta face ca ın proiect codul sa fie mult mai organizat si procesul dedezvoltare al proiectului sa fie mult mai scurt prin identificarea mai usoara a erorilor

446 Facebook API(Graph API)

Graph API 7 este modul principal de a pune date ın platforma Facebook si de aobtine date din platforma Facebook Este un API bazat pe HTTP pe care aplicatiile ılpot utiliza pentru interogarea datelor pentru a introduce postari noi pentru gestionareaanunturilor sau pentru a ıncarca fotografii

Este denumit Graph API dupa ideea unui rdquograf socialrdquo - o reprezentare sub formade graf a informatiilor de pe Facebook Este compus din

bull noduri - ın esenta obiecte individuale cum ar fi un utilizator o fotografie o paginasau un comentariu

bull muchii - conexiuni ıntre o colectie de obiecte si un singur obiect cum ar fi fotografiilede pe o pagina sau comentariile de la o fotografie

bull campuri - date despre un obiect cum ar fi ziua de nastere a unui utilizator saunumele paginii

De obicei se utilizeaza noduri pentru a obtine date despre un anumit obiect se uti-lizeaza muchii pentru a obtine colectii de obiecte legate de un singur obiect si se utilizeazacampurile pentru a obtine date despre un singur obiect sau mai multe obiecte dintr-ocolectie

Am folosit Facebook API ca solutie pentru a ımbunatati problema de rdquocold startrdquopentru ca este singurul site pe care marea majoritate a oamenilor au cont si salveazalucrurile care le plac Deci se potrivea perfect peste nevoile aplicatiei mele

6httpdocssenchacomextjs6207httpsdevelopersfacebookcomdocsgraph-api

29

447 Git

Git 8 este un sistem de control a versionarii pentru urmarirea modificarilor ın fisierelede pe computer si coordonarea activitatii asupra acestor fisiere ın randul mai multor per-soane Este utilizat ın principal pentru gestionarea codului sursa ın dezvoltarea de softwaredar poate fi folosit pentru a urmari schimbarile ın orice set de fisiere

Avantaje ale Git

bull Modelul distribuit numai ceea ce se doreste se face publicbull Branching-ul si merging-ul sunt usoarebull Fluxul de lucru este flexibilbull Integritatea datelor este asigurata Deoarece GIT utilizeaza arbori SHA1 coruperea

datelor din motive externe poate fi usor detectatabull Rapid Git este foarte rapid chiar si ın comparatie cu alte sisteme de control a

versionarii

Am folosit Git pentru a avea la proiect un back-up ın caz ca se ıntampla ceva cuproiectul salvat pe calculator

45 Arhitectura conceptuala

In figura 45 este prezentata arhitectura conceptuala a sistemului Acesta este ım-partit ın doua mari parti backend-ul si frontend-ul care comunica ıntre ele si ısi trimitinformatii

Se poate observa ca baza de date este de tip graf mai exact Neo4j si comunica cubackend-ul pentru a putea lucra cu datele stocate Backend-ul este structurat pe nivelefiecare cu un diferit rol si care trebuie parcurs pentru a procesa datele din interfata ınbaza de date Cele trei nivele sunt cel de Repository cel de Service si cel ControllerToate interogarile venite din interfata utilizator ajung ın nivelul de Controller Dupa ceinterogarile trec de securitatea sistemului ajung ın nivelul de Service Acolo se proceseazasi se afla partea de logica a aplicatiei Pentru a interactiona cu baza de date din Servicese apeleaza metodele din nivelul de Repository

In continuare backend-ul comunica prin protocolul HTTP cu interfata grafica cucare interactioneaza clientii aplicatiei Interfata este scrisa ın Ext JS si are o parte de Viewsi o parte de Controller care este cea care comunica cu backend-ul

Pentru partea de autentificare sistemul interactioneaza cu API-ul de la Facebookde la care ia dupa autentificare un access token Cu ajutorul acestuia ia dupa aceea datelenecesare pentru a putea crea un profil utilizatorului

8httpsguidesgithubcomintroductiongit-handbook

30

Figura 45 Arhitectura conceptuala

31

Capitolul 5

Proiectare de Detaliu siImplementare

In acest capitol vor fi prezentate detalii de implementare ale sistemului de recoman-dare incluzand o ımpartire al acestuia ın componentele care ıl cuprind

Obiectivul este de a prezenta arhitectura si modul de implementare al aplicatieipe baza datelor descoperite ın studiul bibliografic de la capitolul trei si cu tehnologiilehotarate la capitolul patru Pe langa asta va fi prezentata si structura bazei de date sideciziile luate pentru securitatea aplicatiei

51 Arhitectura sistemului

Din punctul de vedere al arhitecturii aplicatia se poate considera ca este alcatuitadin patru mari componente

1 API-ul de la Facebook2 Aplicatia client care reprezinta interfata grafica a aplicatiei3 Aplicatia server adica backendul aplicatiei si partea ın care se afla partea de rdquobusiness

logicrdquo4 Baza de date

Partea componenta reprezentata de API-ul de la Facebook este doar o componentacu care aplicatia se integreaza si pe care aceasta o foloseste In interactiunea cu ea interfatada o cerere de autentificare apare o fereastra de la Facebook ın care utilizatorul introducecredentialele de la API-ul de Facebook se primeste ınapoi un access token si cu ajutorulacestuia face o cerere pentru a primi datele personale ale utilizatorului pentru creeareaprofilului utilizator

Urmatoarea parte a aplicatiei este interfata utilizator frontend-ul care reprezintapartea cu care utilizatorul interactioneaza si locul unde ıi sunt afisate informatiile

Cererile din interfata ajung ın a treia parte componenta a sistemului partea deserver adica backend-ul aplicatiei Acolo toate cererile sunt citite si procesate iar raspun-

33

sul lor este trimis la interfata utilizator Aceasta este partea care reprezinta rdquogandireardquoaplicatiei Aceea este componenta care face legatura ıntre cererile utilizatorului din inter-fata si datele stocate ın baza de date

Ultima componenta a aplicatiei o reprezinta baza de date care are ca rol sa stochezedatele despre utilizatori produse si comenzi Ea este o baza de date sub forma de grafde tipul Neo4j Acolo se salveaza entitatile aplicatiei sub forma de noduri si dependenteleıntre acestea sub forma de relatii ıntre aceste noduri

Figura 51 Diagrama de rdquodeploymentrdquo

In figura 51 este prezentata diagrama de rdquodeploymentrdquo a sistemului cu cele patrucomponente ale sistemului Aplicatia client comunica cu API-ul de la Facebook prin pro-tocolul securizat HTTPS cu backend-ul prin protocolul HTTP iar backend-ul cu baza dedate prin JDBC

Aplicatia a putut fi ımpartita ın aceste componente separate deoarece fiecare dintreele poate functiona independent de celelalte comunica cu ele doar prin mesaje Din acestmotiv locul unde ruleaza acestea pot sa fie pe servere diferite In plus daca aplicatiaar fi pusa pe servere pentru utilizatori ar putea fi mai multe servere pe care ruleaza ocomponenta si prin rdquoload balancingrdquo sa se trimita cererile ımpartite ıntre ele

Cum astfel componentele nu depind foarte mult unele de altele si pot rula faraa le interesa de unde le sunt trimise cererile este arhitectura cea mai corecta deoarecedefectarea sau o posibila eroare la una din ele nu o influenteaza cu nimic pe o alta Dacatoate ar rula pe acelasi server o eventuala defectiune a acestuia ar ınsemna o defectiune aıntregului sistem Insa daca exista mai multe noduri si se afla pe servere diferite pot doartoate cererile sa fie redirectionate spre un nod care functioneaza si aplicatia sa functionezepentru clienti la fel ca ınainte

34

Un alt avantaj al arhitecturii ar fi faptul ca la o lansare viitoare catre clienti se poatelansa doar componenta la care s-au facut modificari De asemenea aplicatia ar putea aveape viitor si o componenta mobila Iar cum serverul e independent poate fi acelasi serverfolosit de o alta aplicatie client

511 Arhitectura componentei backend

Arhitectura backend-ului este si ea ımpartita ın mai multe pachete pentru o maibuna structura si pentru o cat mai mica dependenta ıntre diversele componente Astfelcuplarea este minima ıntre clase si eventualele modificari ulterioare pot fi mai usor defacut

Serverul a fost implementat ın Java cu ajutorul framework-ului Spring Boot iarmediul de dezvoltare folosit a fost Intellij IDEA

Din punctul de vedere al ımpartirii arhitectura serverului aplicatiei este structurataın patru pachete si o clasa ın afara acestora Acea clasa este rdquomainrdquo-ul aplicatiei este parteacare trebuie rulata pentru a porni serverul Din cauza ca este o aplicatie Spring Boot si nuuna String singura adnotare necesara pentru a sti ca aceea este clasa rdquoradacinardquoa aplicatieieste SpringBootApplication

Cele patru pachete ale serverului sunt1 Cel de domeniu (domain) cu clasele POJO care reprezinta entitatile din baza de

date2 Cel de rdquomagazierdquo (repositories) care este cel care face direct actiunile ın baza de date3 Cel de serviciu (services) ın care se afla partea de logica a ıntregii aplicatii4 Cel de web ın care se afla clasele de rdquocontrollerrdquo

Figura 52 Diagrama de pachete pentru backend

35

Ca si dependente nivelul de web ıl foloseste pe cel de seviciu cel de serviciu ılfoloseste pe cel de rdquomagazierdquo iar clasele din pachetul de domeniu sunt folosite ın toatecelelalte pachete

In continuare voi prezenta pe rand fiecare nivel al serverului adica fiecare pachet

Figura 53 Diagrama de clase pentru pachetul rdquodomainrdquo

36

Nivelul de domeniu (domain) este alcatuit ın primul rand din clasele care suntentitati ın baza de date Acestea sunt reprezentate de toate clasele ce stocheaza informatiidespre utilizatori si despre produse si comenzi Pe langa informatiile personale despre unutilizator de genul numelui email-ului sau data nasterii care sunt salvate ın entitateapersoana se stocheaza despre utilizator ın clase diferite informatii de genul locului undelocuieste locul unde a copilarit locurilor unde a facut scoala locului unde lucreaza sau celmai important pentru aplicatia aceasta lucrurilor care ıi plac In afara acestor informatiidespre utilizatori sunt si clase cu informatiile despre prieteni despre produse sau desprecomenzi

Din cauza faptului ca aplicatia este de tipul unei retele sociale ın care exista prieteniiıntre persoane exista dependente ıntre toate entitatile aplicatiei Acesta este si motivulpentru care am ales baza de date sub forma de graf pe care sa se mapeze toate acesteentitati sub forma de noduri si toate aceste dependente sub forma de relatii

In pachetul de domeniu se afla si trei subpachete Unul dintre ele este pentruclasele folosite pentru a trata erorile aplicatiei In interiorul acestui pachet se afla douaclase pentru eroare si o exceptie cea folosita ın cazul ın care nu se gaseste ceea ce doresteutilizatorul Pe langa asta este clasa care are ca obiect raspunsul dat de sistem ın cazulunei erori la server Aceasta contine ın interiorul sau pe langa codul erorii si detalii despreeroarea trimisa Aceasta lista de detalii e reprezentata de obiectele de tipul celei de-a treiaclase din pachetul acesta

Celelalte doua subpachete aflate ın acest nivel sunt cele care contin clasele specialede cerere sau raspuns care au ajutat la maparea acestora mai bine In multe cazuri nua fost necesara trimiterea la interfata utilizator a tuturor informatiilor stocate despre oentitate si de aceea am ales sa creez ın aceste cazuri un obiect auxiliar care sa fie folositpe post de raspuns

Figura 54 Diagrama de clase pentru pachetul rdquorepositoriesrdquo

37

Cel de-al doilea nivel al aplicatiei backend este cel de rdquomagazierdquo (repositories) carecontine doar interfete de tip rdquoRepositoryrdquo

Aceste interfete sunt cele care fac operatiile directe asupra entitatilor din baza dedate

Unele interfete doar extind interfata care are deja implementate metodele CRUDsi din acest motiv nu au metode suplimentare iar altele au si metode ın plus care au carol sa execute interogari mai complexe asupra bazei de date In acele metode se pot scrieinterogarile ın Cypher pentru a putea primi informatii despre mai multe noduri sau desprerelatiile dintre acestea sau si pentru a returna doar anumite rezultate care ındeplinescanumite conditii In felul acesta a fost implementata si cererea de oferire a recomandarilorIn acel caz sistemul returneaza produsele care au ın descriere unul din lucrurile care se aflaın lista de obiecte sau servicii primite de la Facebook ca ıi plac utilizatorului

Nivelul de rdquoRepositoryrdquo este folosit direct de cel de-al treiea nivel cel de servi-ciu Acesta este nivelul la care se executa logica aplicatiei unde se comanda modul defunctionare al ıntregii aplicatii

Figura 55 Diagrama de clase pentru pachetul rdquoservicesrdquo

Pe acest nivel ajung toate cererile din server dupa ce trec de verificarile de securitateIn acest pachet se afla si clasa de securitate care face verificarile necesare In aceasta clasaexista o metoda ce se apeleaza la prima cerere cea de salvare a datelor de la Facebookdespre utilizator si care codifica id-ul utilizatorului si ıl trimite pe raspuns ınapoi interfeteiPe langa asta ın acea clasa se afla si o metoda care verifica faptul ca id-ul codificat esteal unui utilizator cu rol corespunzator pentru a face acea cerere

In plus ın acest pachet se afla si toate celelalte clase care fac diverse operatii pedatele din baza de date si dau raspunsuri cererilor din interfata Aici se afla logica care

38

comanda actiunile asupra utilizatorilor asupra prietenilor acestora asupra produselor siasupra comenzilor

Ultima clasa a acestui nivel este cea care se ocupa de trimiterea de email-uri Incazul ın care se face o noua comanda de catre un utilizator toti producatorii produselor depe comanda sunt notificati despre produsele lor pe care le doreste utilizatorul Din serviciulde comanda se apeleaza serviciul de email pentru fiecare producator din lista celor care auproduse care se afla pe lista comenzii utilizatorului

Ultimul si cel mai aproape de interfata utilizator este nivelul de web Acolo se aflatoate clasele de rdquoControllerrdquo ale aplicatiei server

Figura 56 Diagrama de clase pentru pachetul rdquowebrdquo

Toate cererile din interfata utilizator ıncearca sa se mapeze pe rutele declarate ınclase pentru a fi procesate ın metoda corespunzatoare Toata aceasta parte este foarteusor de implementat si mai ales foarte lizibil pentru programatori datorita adnotarilor dinJava Cu ajutorul acestora trebuie doar specificat care este numele URL-ului cererii careeste tipul de obiect asteptat si daca se trimite ca rdquoquery stringrdquo pe URL sau ın interiorulcorpului cererii si tipul raspunsului Pentru fiecare cerere care nu este apelata ın parteaneautentificata a utilizatorului primul lucru care se apeleaza este metoda de securitatepentru a verifica rolul si id-ul utilizatorului Daca din punctul de vedere al securitatii totuleste ın regula se apeleaza metoda corespunzatoare din pachetul de serviciu

39

O singura clasa este diferita de restul ın pachetul de controller si aceea este clasa deeroare Acolo se mapeaza erorile aparute ın timpul cererii si se trimite ınapoi ın interfatagrafica un raspuns cu cod de eroare specific nu numai 500 Generic Application Exceptioncum ar trimite fara aceasta clasa si cu detalii despre motivul aparitiei erorii

Datorita folosirii adnotarilor din java nu a fost necesara folosirea unor rdquodesignpatternrdquo-uri ın sistem De exemplu pentru a folosi ın nivelul de web ceva din pachetulde servicii trebuia doar acel obiect sa aiba adnotarea Autowired si se ınlocuieste atatfolosirea rdquodesign patternrdquo-ului Singleton cat si a celui de Factory Acel obiect nu trebuiecreat sau initializat se face asta implicit datorita adnotarii si de asemenea este folositapeste tot aceeasi instanta

In concluzie toate cererile venite din interfata grafica ajung ın nivelul de rdquocontrollerrdquode unde sunt trimise la cel de rdquoservicerdquopentru a fi procesate si facute eventualele modificarinecesare ın baza de date ca apoi raspunsul sa fie trimis ınapoi spre aplicatia client pentruafisare

512 Arhitectura componentei frontend

A doua componenta implementata a sistemului este aplicatia client frontend-ulAceasta a fost scrisa ın Java Script cu ajutorul framework-ului Ext JS compilarea

se face cu ajutorul Sencha CMD si mediul de implementare a fost IntelliJ IdeaCu ajutorul framework-ului Ext JS se scriu componente care apoi se initializeaza

unele pe altele Aplicatia porneste cu fisierul Applicationjs care este un fel de rdquomainrdquopentru aplicatie Aceasta initializeaza alte componente care la randul lor includ altecomponente si tot asa Structura poate fi foarte usor comparata cu una arborescenta dinacest punct de vedere

Framework-ul a fost creat sa functioneze ın felul acesta pentru ca scopul componen-telor este sa fie scrise ın asa fel ıncat sa poata pe viitor sa fie utilizate din nou Una dindorintele majore ın programare tot timpul este de a se scrie cod ıntr-o maniera ın care safie cat mai reutilizabil Iar framework-ul Ext JS exact asta ıncearca

Arhitectura aplicatiei client se gaseste ın figura 57 si este la randul ei ımpartita ınpachete ca si cea de server Similar cu pachetul de rdquodomainrdquo de la aplicatia de backendeste pachetul rdquomodelrdquo al interfetei utilizator Aici sunt rdquoclaserdquo care sunt simple POJO sicare sunt apoi folosite ın nivelele urmatoare Sunt mai putine decat clasele din rdquostorerdquodeoarece daca raspunsul de la server nu trebuie procesat nu sunt necesare se pot mapadirect obiectele din rdquostorerdquo pe componentele interfetei utilizator

Urmatorul nivel este cel pe care se afla clasele de rdquostorerdquo Acestea sunt cele careexecuta cererea spre backend si face legatura ıntre client si server Daca are o clasa derdquomodelrdquodeclarata atunci populeaza acel obiect cu datele primite de la server iar ın cazul ıncare nu este declarat un model se trimit datele exact asa cum s-au primit la nivelul urmatorde rdquoviewrdquo Acest nivel seamana din punct de vedere al functiei cu cel de rdquorepositoryrdquo de laaplicatia server deoarece ambele au rol de legatura Aceea facea legatura ıntre aplicatiesi baza de date si aceasta face legatura ıntre aplicatia client si aplicatia server

40

Figura 57 Diagrama de clase pentru aplicatia web

Cel de-al treilea pachet al aplicatiei este cel de rdquoviewrdquo In acest pachet se afla claselecare alcatuiesc partea vizuala a aplicatiei La randul ei si aceasta este alcatuita tot dincomponente Aplicatia deschide ın primul rand Main-ul care determina aparitia paginii deHome si afisarea ın meniu a optiunilor posibile ın functie de autentificare si rol Clasele deaici se executa de fapt la deschiderea aplicatiei fiind rdquosingle page applicationrdquo si tot atuncise ıncarca pe pagina componentele Ca si arhitectura a pachetului acesta este ımpartit larandul sau ın subpachete Pentru o mai buna organizare exista patru subpachete cateunul pentru fiecare tip de utilizator In felul acesta toate rdquoviewrdquo-urile care sunt specificeunui utilizator cu un anumit rol se afla ın acelasi subpachet

Cele patru subpachete existente ın pachetul rdquoviewrdquo sunt

1 Pachetul rdquomainrdquo care cuprinde rdquoviewrdquo-urile care se afla ın partea neautentificata aaplicatiei

2 Pachetul rdquoclientrdquo continand rdquoviewrdquo-urile pe care le poate accesa un utilizator simplu3 Pachetul rdquoproducerrdquo specific actiunilor unui utilizator care are rol de producator4 Pachetul rdquoadminrdquo care contine toate rdquoviewrdquo-urile care ıi apar unui utilizator care este

administrator al aplicatiei

Ultimul pachet si nivel al aplicatiei client este cel de rdquocontrollerrdquo In acest pachet

41

se afla clasele care fac actiunile din interfata grafica In timp ce pachetul rdquoviewrdquo continedoar partea grafica a aplicatiei adica modul ın care aceasta trebuie sa arate pachetulrdquocontrollerrdquo contine actiunea acestora modul ın care aplicatia trebuie sa functioneze

Ca si arhitectura si acest pachet a fost ımpartit la randul lui tot ın cele patrusubpachete ca si pachetul rdquoviewrdquo adica rdquomainrdquo rdquoclientrdquo rdquoproducerrdquo si rdquoadminrdquo In pluspentru a fi usor de gasit ce clasa de rdquocontrollerrdquo apartine carui rdquoviewrdquo am ales ca cele douasa aiba acelasi nume In felul acesta daca se doreste sa se gaseasca actiunile unui rdquoviewrdquose poate cauta dupa o clasa cu acelasi nume ın pachetul rdquocontrollerrdquo Numarul claselor dinacest pachet este mai mic decat cel al claselor din rdquoviewrdquo deoarece nu toate paginile dininterfata au actiuni suplimentare Daca singura actiune este ıncarcarea paginii cu date dela server adica doar o actiune simpla de GET datele se ıncarca cu ajutorul rdquostorerdquo-ului laıncarcarea paginii si nu este necesara nici o actiune suplimentara Paginile pe care se potface si actiuni de alt gen sau se deschid noi ferestre au nevoie de clase de rdquocontrollerrdquo

In concluzie arhitectura aplicatiei client este una bazata pe componente care ıncearcasa foloseasca cat mai multe clase reutilizabile

52 Structura bazei de date

Baza de date a aplicatiei este de tip graf de tipul Neo4j Pentru utilizare exista unprogram numit Neo4j ce trebuie instalat Acest program are si o interfata grafica ın carese pot vizualiza datele sub forma grafica si ın care se pot scrie de asemenea si interogariın limbajul acestei baze de date adica Cypher

Fiind o baza de date sub forma de graf datele stocate sunt salvate ın structurade date sub forma de noduri si relatii Entitatile din pachetul de domeniu din aplicatiabackend se gasesc ın baza de date sub forma unor noduri iar dependentele dintre nodurise mapeaza ın baza de date sub forma unor relatii Un element diferit fata de alte tipuride baze de date este faptul ca pe relatiile dintre noduri se pot salva atribute cum este ınaplicatie cazul pentru prieteniile dintre persoane In cazul acestora pe relatia dintre nodurise salveaza daca prietenia a fost sau nu acceptata

Pentru fiecare clasa POJO din aplicatia server clasa ce are doar metodele get si setsi se afla ın pachetul domain exista cate un tip de nod diferit ın baza de date cum estesi marcat ın diferite culori ın figura 58 Fiecare tip de nod are atributele proprii care potlua valori sau pot fi nule Iar fiecare obiect din Java reprezinta un nod diferit ın baza dedate

Neo4j a fost cea mai buna optiune pentru baza de date pentru ca aplicatia poate ficonsiderata o retea sociala Acest lucru se datoreaza relatiilor de prietenie dintre persoanesi a multiplelor relatii ıntre noduri Toate nodurile se afla ın acceasi componenta conexadeci nu exista noduri izolate care sa nu aiba nici o legatura cu nici un alt nod

Datorita acestei structuri a bazei de date este posibila implementarea cererii derecomandare ca o simpla interogare ın baza de date aceasta fiind cea mai simpla metodade implementare a unui sistem de genul acesta una mult mai complexa ar fi fost un

42

algoritm de ınvatare care sa ınvete tipare ale utilizatorilor si sa recomande cadouri pe bazaacestor informatii

Figura 58 Diagrama bazei de date pentru doi utilizatori

Un alt avantaj al acestui tip de baza de date este faptul ca datele nu sunt duplicateın baza de date Spre exemplu daca mai multi utilizatori au ca locatie acelasi oras nu secreaza cate un nod cu acea locatie de mai multe ori ci acel unic nod va avea cate o relatiecu fiecare utilizator care are ca locatie acel oras

In concluzie structura bazei de date a fost aleasa ın acest fel datorita tipului apli-catiei adica asemanatoare cu o retea sociala si datorita implementarii simple a unui sistemde recomandare pe o asemenea baza de date

53 Fluxul pentru diferite operatii

Pentru aplicatie cele mai importante cazuri de utilizare sunt salvarea informati-ilor despre utilizator primite de la Facebook pentru crearea unui profil si recomandareacadourilor pentru un utilizator al aplicatiei Din aceasta cauza cele doua cazuri de utilizarevor fi prezentate mai ın detaliu ın continuare

43

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 13: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

33 Abordarea Netflix

Foarte multa cercetare ın domeniul sistemelor de recomandare a fost influentata decei de la Netflix

Figura 33 Tipuri de recomandari oferite de Netflix3

Netflix este un serviciu de streaming care permite clientilor sa vizioneze o gamalarga de emisiuni TV filme documentare si multe altele pe mii de dispozitive conectatela internet

In figura 33 este o imagine a site-ului cu tipurile diferite de recomandari pe careacestia le ofera

Cheia succesului Netflix consta ın capacitatea lor de a anticipa ceea ce le placeutilizatorilor motiv pentru care fiecare doua din trei ore de vizionare ın Netflix provin dinrecomandari In trecut Netflix au folosit informatii despre sex si varsta pentru a determinace filme sa recomande Acum ei folosesc de exemplu ceea ce utilizatorul a urmaritınainte a cautat cat timp petrece utilizatorul vizionand filme si tipul de dispozitiv utilizatPredictiile din motorul de recomandare Netflix nu se bazeaza doar pe comportamentulutilizatorului ci si pe context (cum ar fi timpul zilei) popularitatea titlurilor noutateadiversitatea si cat de recent a fost scos filmul sunt factori importanti [7]

Premiul Netflix a fost o competitie lansata ın 2006 pentru cel mai bun algoritm defiltrare colaborativa pentru a prezice ratingurile utilizatorilor pentru filme pe baza eva-luarilor anterioare fara alte informatii despre utilizatori sau filme adica fara ca utilizatoriisau filmele sa fie identificate stiind doar numerele atribuite pentru concurs ale acestoraPremiul pentru castigator consta ın 1 milion de dolari Peste 2000 de echipe au depusseturile de predictie si peste 650 de echipe au depasit precizia algoritmului actual al Netflix

3httpstechblogglomexcompostrecommender-systemshtml

8

cu mai mult de 5 [11] Castigatorul a fost echipa BellKors Pragmatic Chaos care adepasit algoritmul Netflix cu 1006

Cei de la Netflix au fost extrem de multumiti de rezultatul obtinut si nu numai caau ıncorporat acel algoritm ın algoritmul lor existent de recomandare dar au initiat si o adoua editie a competitiei

34 Sisteme de recomandare cu Neo4j

Urmatoarea parte a studiului bibliografic s-a axat pe bazele de date de tip grafGraphDB si mai exact Neo4j ın comparatie cu celelalte tipuri de baze de date adica celerelationale In cartea [10] sunt prezentate aceste concepte din punct de vedere teoretic siın lucrarile de master [5] si [1] este prezentata aceasta comparatie ıntre diferite tipuri debaze de date pe o aplicatie reala

Limbajul care se foloseste ın bazele de date Neo4j este Cypher Cu ajutorul acestuiase mapeaza query-urile pe noduri si relatii Din punct de vedere teoretic diferenta ıntrebazele de date relationale si cele sub forma de graf consta ın modul ın care sunt stocatedatele In timp ce ın bazele de date relationale datele sunt stocate ın structuri de datesub forma de tabel ın cele sub forma de graf datele sunt stocate ın noduri Coloaneletabelelor din bazele de date relationale se mapeaza ın bazele de date sub forma de graf peproprietati Pentru a face o legatura ıntre tabelele relationale se foloseau rdquochei strainerdquo pecand la Neo4j exista relatii ıntre noduri Din cauza faptului ca bazele de date sub formade graf s-au inspirat din cele relationale exista o asemanare ıntre ele si toate lucrurile auun corespondent ın cealalta

In lucrarea [12] sunt prezentate avantajele folosirii unei baze de date sub forma degraf cand se lucreaza cu retele sociale La aplicatiile de tipul retelelor soriale relatiile dintrenoduri sunt partea cea mai importanta iar pentru acestea o baza de date sub forma degraf se mapeaza cel mai bine Un avantaj al bazelor de date sub forma de graf din punctulde vedere al programatorilor cu acestea se lucreaza foarte similar ca si cu cele relationaledupa cum se prezinta si ın [4]

Un exemplu de sistem de recomandare construit cu Neo4j este [11] In acesta lucrareeste prezentata construirea unui sistem de recomandare care sa recomande prieteni ıntr-oaplicatie de socializare In lucrare sunt patru abordari pentru construirea unui astfel desistem Prima consta ın recomandarea unor prieteni cu care utilizatorul ar avea prieteniın comun cea de-a doua sunt persoane cu care utilizatorul se afla ın acelasi grup cea de-atreia sunt utilizatori care au mers la aceleasi evenimente ca si utilizatorul si ultima abordareconsta ın recomandarea persoanelor cu cei mai multi prieteni In urma mai multor teste sistatistici s-a decis ca abordarea cea mai buna este prima cea cu prietenii ın comun Toateaceste patru metode de oferire a recomandarilor se mapeaza foarte usor pe o baza de datesub forma de graf si reprezinta doar cate un query destul de simplu ın Cypher O astfelde aplicatie s-ar fi mapat mult mai greu pe o baza de date relationala datorita multiplelorrelatii si legaturi

9

Un alt exemplu de aplicatie unde s-a ales baza de date Neo4j a fost [2] Aicipentru articolele politice pe care sistemul le recomanda se creeaza o combinatie ıntrerecomandarile obtinute din articolele care le plac oamenilor cu care utilizatorul vorbestemult si lucruri care le plac utilizatorilor cu care acesta are lucruri ın comun Si ın acest cazexista o multime de relatii ıntre utilizatori si articole si cel mai usor se obtin recomandarilecu o aplicatie sub forma de graf motiv pentru care au si ales Neo4j

35 Utilizarea retelei Facebook pentru crearea unui

profil utilizatorilor

In continuare ca studiu bibliografic au urmat sisteme asemanatoare cu sistemuldorit si modul ın care acestia au reusit sa creeze profilul utilizatorului [13] Problema ceamai mare este rdquocold startrdquo-ul Adica atunci cand un utilizator este nou ın aplicatie nuse stiu suficiente informatii despre el pentru a putea sa i se ofere recomandari Dupa ceacesta foloseste aplicatia o perioada de timp ar putea sa i se ofere recomandari bazate peactivitatea sa anterioara ın aplicatie Din acest motiv la ınceput recomandarile pot lasade dorit si pot fi nu tocmai corecte

O metoda ın care se poate rezolva aceasta problema se afla ın lucrarea de master[7] ın care la utilizatorii noi se recomanda restaurante pe baza pozitiei lor geograficeAtunci cand doresti sa mergi la un restaurant este foarte importanta distanta la care seafla acel restaurant Din aceasta cauza pentru un utilizator caruia sistemul nu stie ce sa ıirecomande ıi recomanda restaurante la ıntamplare dintre cele care se afla cel mai aproapede el In felul acesta dupa ce merge la unul din restaurante si da feedback sistemul poatedupa aceea sa ıi faca recomandari

In lucrarea [8] recomandarile pentru votare au doua abordari La prima i se reco-manda lucrurile care le-a recomandat persoana cu scorul cel mai bun Si cea de-a douaabordare consta ıntr-un set de ıntrebari la care un utilizator nou trebuie sa raspunda candısi face contul

In acest caz cea mai buna metoda ın care se poate rezolva aceasta problema parea fi sa se ia informatiile de la API-ul de la Facebook Facebook este o aplicatie extremde utilizata si care ofera ca informatii publice exact ce ar fi necesar pentru a recomandacadouri de exemplu data nasterii sau lucruri care ıi plac unui utilizator Cu ajutorulacestora se poate calcula varsta utilizatorului poate sa fie ıncadrat ıntr-un profil si sepoate afla stilul de lucruri care ıi plac

Toate aceste informatii publice de la Facebook pot fi salvate si pot fi utilizate maitarziu pentru a se creea recomandari pe baza lor In articolul [3] despre valoarea datelor dela Facebook se prezinta ca si caz de utilizare pentru un site de comert online Aceasta estefoarte asemanatoare din punct de vedere al recomandarilor cu aplicatia de recomandarecadouri Diferenta dintre cele doua este ca ın cazul uneia trebuie sa recomande produsepentru utilizatorul aplicatiei si cealalta pentru un prieten al acestuia

10

Din punct de vedere al aplicabilitatii Facebook este o retea sociala deci datele salese mapeaza foarte bine pe o baza de date de tip graf cum este prezentat si ın lucrarea [6]

Asadar daca la crearea contului utilizatorului ın aplicatie se iau si informatiile pu-blice despre utilizator se vor putea oferi recomandari mult mai corecte ınca de la ınceput

36 Solutii similare

Ca solutii similare pe piata online nu exista aplicatii folosite pentru a recomandacadouri personalizate specific pentru o persoana anume Multe site-uri considera ca eirecomanda cadouri ınsa acestea reprezinta de fapt o filtrare mai avansata a rezultatelorproduselor de pe site-ul lor

Un site care ofera cadouri personalizate este Giftly 4 prezentat ın figura 34 careofera o modalitate usoara de a oferi cadouri Acest site nu are parte de recomandari cia gasit un mod de a face oamenii sa primeasca mereu ceea ce ısi doresc Cel care oferacadoul nu ıl cumpara ci doar ıl sugereaza dar decizia finala asupra cadoului este la celcare ıl primeste Modul ın care functioneaza este

1 Se ofera un rdquocard cadourdquo prin email sms printat sau ca o felicitare de ınaltacalitate

2 Destinatarul alege cel mai convenabil mod de a primi cadoul rdquocard cadourdquo ınposta sau direct ca bani ın contul bancar sau contul PayPal

3 De fapt utilizatorul ıi sugereaza destinatarului ce ar vrea el sa ofere ca si cadouiar destinatarul trimite ca mesaj modul ın care a cheltuit banii

Figura 34 Site web Giftly

4httpswwwgiftlycom

11

Ofera de asemenea si sugestii de cadouri Un om cand navigheaza pe site poate sase uite la cadouri ın categoriile Popular Holidays Birthdays Drinks Eats Meals BackTo School Get Fresh Health Fitness Going Out Getaway Top Shelf For The HipsterClothes For Her Clothes For Him Congratulations Expecting Activities si Custom

Un alt site cu cadouri este Etsy 5 cu imaginea 35 care arata site-ul Etsy este o piataglobala pentru bunuri unice si creative Pe pietele lor milioane de oameni din ıntreagalume se conecteaza atat online cat si offline pentru a face vinde si cumpara bunuri uniceEtsy ofera de asemenea o gama larga de servicii si instrumente de vanzari care ajutaıntreprinzatorii creativi sa ınceapa sa gestioneze si sa-si masoare afacerile Misiunea loreste sa pastreze comertul uman Deci de fapt acest site sprijina mai mult producatoriinu comerciantii De asemenea este mai mult axat pe bunuri unice si lucruri rdquounicerdquo Ca sicelelalte site-uri de genul acesta are o modalitate de a cauta lucrurile mai inteligent maispecializat pe ceea ce te intereseaza Categoriile de cautare sunt Jewelry AccessoriesClothing Shoes Home Living Wedding Party Toys Entertainment Art CollectablesCraft Supplies Tools si Vintage

Figura 35 Site web Etsy

Cel de-al treilea site care ofera servicii asemanatoare este Gifts 6 prezentat ın figura36 Acesta se focuseaza pe cadouri pentru diverse ocazii cum ar fi zilele de nastereCraciun diverse aniversari si alte evenimente la care se cumpara cadouri Pentru parteade recomandare se ofera posibilitatea de a efectua un test despre acel om caruia dorestisa ıi cumperi cadoul care are ca scop ıncadrarea omului respectiv ıntr-un profil si apoi

5httpswwwetsycom6httpswwwgiftscom

12

alegerea unor sugestii ce s-ar potrivi unei persoane cu acel tip de personalitate O primaıntrebare se refera la genul persoanei si ıntrebarea este daca cadoul este pentru o femeieun barbat o fetita sau un baietel Cea de-a doua ıntrebare se refera la marja de varsta ıncare se ıncadreaza acel om de exemplu pentru barbat optiunile sunt adolescent barbat ınjur de 30 de ani sau barbat ın varsta Cea de-a treia ıntrebare se refera la personalitateaomului Mai exact se fac sugestii pentru tipuri de lucruri ce i-ar putea placea unui omcare are trasaturile descrise ın primele doua ıntrebari De exemplu la barbati ın jur de30 de ani optiunile sunt ıi place sportul ıi place natura e aventurier ıi place golful ıiplace sa faca gratare sa serveasca bauturi sa gateasca sa animeze ıi place sa se ımbraceelegant este sef e entuziasmat de bere sau e un fan al sporturilor Iar ın final ın functiede raspunsurile date la ıntrebari se afiseaza sugestii de cadouri care se potrivesc oamenilorcu acel tip de personalitate

Figura 36 Site web Gifts

Nordstrom 7 care este prezentat ın imaginea 37 are o abordare similara avand pesite o multime de optiuni de filtrare a cadourilor Se pot cauta ın acest site cadouri pentrubebelusi cadouri de Craciun bijuterii pentru femei optiunile sunt multiple Acest lucruofera utilizatorilor sugestii pentru a le fi mai usor sa ıncadreze aceasta persoana ıntr-unanumit tip Iar dupa alegerea categoriei toate sugestiile de cadouri oferite de catre sitese ıncadreaza ın acel tip Ca avantaj al acestui site este ca ei ofera si serviciul de livrareal cadoului dupa cumparare oriunde ın lume Un dezavantaj al multor site-uri de genulacesta este ca ofera livrare doar ın zona sa apropiata

7httpsshopnordstromcomcgifts

13

Figura 37 Site web Nordstrom

14

Capitolul 4

Analiza si Fundamentare Teoretica

In acest capitol vor fi prezentate cerintele functionale ale lucrarii ımpreuna cucerintele non-functionale ale acesteia De asemenea va fi prezentata diagrama cazurilor deutilizare si vor fi prezentate mai ın detaliu cazurile de utilizare principale ale aplicatiei Incontinuare se va prezenta perspectiva tehnologica a proiectului si se vor explica deciziiletehnologice luate In final se va prezenta diagrama conceptuala a aplicatiei

41 Cerinte functionale

bull Posibilitatea autentificarii ın aplicatie si crearii unui profil propriu din care se potutiliza informatii si cu ajutorul caruia utilizatorul poate fi ıncadrat ıntr-un profil

bull Utilizatorii pot crea prietenii ca ıntr-o retea de socializare pentru a putea afla infor-matii despre prieteni si pentru a li se putea recomanda cadouri pentru acestia

bull Cu ajutorul informatiilor de la Facebook un utilizator poate fi notificat dinainte caurmeaza ziua de nastere a unuia din prietenii lui si sa i se ofere mai multe variantede cadouri potrivite pentru acesta Aceasta informatie o primeste cu suficient timpınainte pentru a nu fi surprins fara un cadou De la Facebook pe langa informatiiledespre data zilei de nastere sunt importante si varsta sau lucrurile care ıi plac uti-lizatorului Toate acestea ajuta la crearea profilului utilizatorului pe baza caruia serecomanda dupa aceea cadourile

bull De asemenea sistemul poate recomanda si un cadou pentru alt tip de evenimentdecat zi de nastere de genul cadou de Craciun cadou de nunta cadou pentru unnou-nascut etc

bull In aplicatie vor fi adaugate si diferite produse iar pentru a face mai usoara cumparareade cadouri se va putea face si comanda pe internet In momentul ın care un utilizatorface o noua comanda producatorii produselor comandate sunt ınstiintati de existentaacestei noi comenzi

15

bull Pentru persoanele la care pe profilul de Facebook este insuficient completat saupentru a putea cumpara cadouri pentru o persoana care nu are Facebook sau nuare cont ın aceasta aplicatie si despre care ın acest fel nu se cunosc nici un felde informatii se vor putea filtra cautarile pentru cadou printr-o serie de ıntrebaristandard Aceste ıntrebari vor putea creea un rdquomini-profilrdquo pentru acea persoanapentru ca sistemul sa poata recomanda cadouri

42 Cerinte non-functionale

bull Securitate sistemul nu raspunde cererilor decat atunci cand utilizatorul a fost au-tentificat ın aplicatie si are rolul necesar pentru a face acea cerere

bull Portabilitate aplicatia nu depinde de sistemul de operare pe care ruleaza De aseme-nea nu e dependenta de browserul folosit de utilizator

bull Disponibilitate sistemul ramane stabil ın fata erorilor si functioneaza la fel si dupaaparitia unei erori

bull Extensibilitate sistemul permite adaugarea sau modificarea unor componente atuncicand cerintele aplicatiei se modifica Pe langa asta e flexibila unor dezvoltari ulte-rioare

43 Cazuri de utilizare

In aceasta sectiune se vor prezenta actorii aplicatiei diagrama cazurilor de utilizaresi vor fi descrise cazurile de utilizare de baza ale fiecarui actor

Ca si actori aplicatia are patru tipuri de utilizatori

bull utilizator anonimbull clientbull producatorbull administrator

Aplicatia este conceputa ın asa fel ıncat ıntre actori este o relatie de mostenire Acestlucru presupune ca un actor are posibilitatea de a efectua tot ce putea cel dinaintea lui siceva ın plus Deci utilizatorii anonimi au cele mai putine permisiuni iar administratoriiau permisiuni totale Acest lucru se vede foarte clar si ın diagrama cazurilor de utilizaredin imaginea 41

In continuare vor fi prezentate cazurile de utilizare

1 recomandare cadouri2 adaugare produs3 modificare rol utilizator

16

Figura 41 Digrama cazurilor de utilizare

17

431 Recomandare cadouri

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unutilizator trebuie sa le urmeze pentru a primi recomandari de cadouri pentru un cunoscutsi pentru a efectua o comanda

Actorul principal

Orice utilizator al aplicatiei

Parti interesate si interese

Utilizatorul care doreste sa cumpere un cadou este interesat de a gasi un cadoupotrivit pentru cineva pe care ıl cunoaste

Producatorul care e interesat sa ısi poata vinde produseleUtilizatorul care primeste cadoul fiind interesat sa primeasca un cadou care sa i se

potriveasca si care sa ıi placa

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand utilizatorul porneste aplicatia11 Utilizatorul verifica daca are cont de Facebook si daca are urmeaza pasul 111

daca nu 22111 Utilizatorul se autentifica ın aplicatie cu ajutorul credentialelor de la

Facebook12 Utilizatorul deschide sectiunea de recomandare cadouri13 Utilizatorul completeaza formularul cu datele ce trebuie introduse pentru a primi

recomandari de cadouri pentru un prieten14 Utilizatorul poate fi satisfacut cu recomandarile primite si atunci urmeaza pasul

141 iar daca nu este atunci urmeaza cazul alternativ 23141 Utilizatorul adauga ın cosul de cumparaturi cadouri pe care doreste sa

le cumpere15 Utilizatorul cere sa ısi vada cosul de cumparaturi16 Utilizatorul poate sa se declare multumit de cosul de cumparaturi caz ın care

urmeaza pasul 161 sau poate sa aleaga cazul alternativ 24161 Utilizatorul aproba cosul de cumparaturi si accepta sa se faca comanda

17 Sistemul introduce ın baza de date comanda18 Utilizatorul va putea vedea la sectiunea comenzilor sale noua comanda si statusul

ei19 Sistemul notifica producatorul de aparitia noii comenzi110 Utilizatorul se dezautentifica din aplicatie

18

Use-Case EndUtilizatorul se va deconecta din aplicatie si o va ınchide

Figura 42 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueazaAcest flux poate aparea la orice pas211 Utilizatorul deschide sectiunea de recomandare cadouri212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca utilizatorul nu are cont de Facebook

19

Acest flux poate aparea la pasul 11221 Utilizatorul deschide pagina de Facebook222 Utilizatorul ısi face un cont pe pagina de Facebook si ısi completeaza

date despre el223 Utilizatorul revine la aplicatia de recomandare cadouri si ıncearca din

nou sa se autentifice ın aplicatie224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca utilizatorul nu e multumit de recomandariAcest flux poate aparea la pasul 14231 Utilizatorul sterge din cos cadourile pe care nu le mai doreste si revine

la pagina de recomandari232 Utilizatorul adauga alte cadouri ın cos233 Cazul de utilizare continua de la pasul 141

24 Flux-ul alternativ daca utilizatorul nu e multumit de produsele din cosul decumparaturi

Acest flux poate aparea la pasul 16241 Utilizatorul revine ınapoi la formularul cu introducerea datelor despre

beneficiarul cadoului242 Utilizatorul completeaza din nou datele243 Cazul de utilizare continua de la pasul 13

Preconditii

1 Utilizatorul trebuie sa aiba un cont de Facebook pentru a se putea autentifica ınaplicatie

2 Utilizatorul trebuie sa fie autentificat ın aplicatie pentru a putea face orice actiunedin acest caz de utilizare

3 Utilizatorul trebuie sa deschida sectiunea de recomandare cadouri pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noua comanda este salvata ın baza de date2 Comanda apare ın sectiunea de comenzi a utilizatorului ımpreuna cu statusul ei

curent3 Producatorul este notificat ca are o noua comanda

432 Adaugare produs

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unproducator trebuie sa le urmeze pentru a introduce un nou produs ın aplicatie

20

Actorul principal

Utilizatorii cu rol de producator sau cu rol de administrator

Parti interesate si interese

Producatorul care doreste sa introduca produsul nou ın aplicatie

Utilizatorii simpli care au o mai mare varietate de produse din care sa li se reco-mande cadouri

Figura 43 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo

21

Flux de evenimente

Use-Case Start

Cazul de utilizare ıncepe atunci cand producatorul porneste aplicatia

11 Producatorul verifica daca are cont de Facebook si daca are urmeaza pasul111 daca nu 22

111 Producatorul se autentifica ın aplicatie cu ajutorul credentialelor de laFacebook

12 Producatorul deschide sectiunea de adaugare produs

13 Producatorul completeaza datele necesare despre noul produs ımpreuna cu tipulde persoana si eveniment care i s-ar potrivi

14 Producatorul verifica daca este multumit de datele introduse si daca da urmeazapasul 141 daca nu 23

141 Producatorul efectueaza operatia de adaugare produs

15 Sistemul adauga un nou produs ın baza de date

16 Sistemul notifica producatorul ca noul produs a fost introdus cu succes

17 Producatorul se dezautentifica din aplicatie

Use-Case End

Producatorul se va deconecta din aplicatie si o va ınchide

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Producatorul deschide sectiunea de adaugare produs

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca producatorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Producatorul deschide pagina de Facebook

222 Producatorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Producatorul revine la aplicatia de recomandare cadouri si ıncearca dinnou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca Producatorul nu e multumit de datele introduse despreprodus

Acest flux poate aparea la pasul 14

231 Producatorul sterge datele gresite despre produs

232 Producatorul adauga alte date despre produs

233 Cazul de utilizare continua de la pasul 141

22

Preconditii

1 Producatorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Producatorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Producatorul trebuie sa aiba cont cu rol de rdquoproducatorrdquo sau rdquoadminrdquo pentru aputea face operatia aceasta

4 Producatorul trebuie sa deschida sectiunea de adaugare produs pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noul produs este salvat ın baza de date2 Produsul poate fi adaugat la recomandarile unui utilizator din acel moment

433 Modificare rol utilizator

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unadministrator trebuie sa le urmeze pentru a modifica rolul unui utilizator al aplicatiei

Actorul principal

Un utilizator al aplicatiei care are rol de administrator

Parti interesate si interese

Administratorul care doreste sa modifice rolul unui utilizatorUtilizatorul care doreste sa ısi schimbe rolul

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand administratorul porneste aplicatia11 Administratorul verifica daca are cont de Facebook si daca are urmeaza pasul

111 daca nu 22111 Administratorul se autentifica ın aplicatie cu ajutorul credentialelor de

la Facebook12 Administratorul deschide sectiunea de utilizatori13 Sistemul ıi returneaza administratorului utilizatorii care nu sunt administratori14 Administratorul modifica rolul utilizatorului din utilizator simplu ın producator

sau invers

23

15 Administratorul cere executarea modificarii

16 Sistemul executa modificarea iar ın caz de succes urmeaza pasul 161 si ın cazde eroare pasul 23

161 Sistemul notifica administratorul ca modificarea a fost efectuata cusucces

17 Utilizatorul se dezautentifica din aplicatie

Use-Case End

Administratorul se va deconecta din aplicatie si o va ınchide

Figura 44 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo

24

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Administratorul deschide sectiunea de utilizatori

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca administratorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Administratorul deschide pagina de Facebook

222 Administratorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Administratorul revine la aplicatia de recomandare cadouri si ıncearcadin nou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca sistemul returneaza o eroare la modificarea utilizatorului

Acest flux poate aparea la pasul 16

231 Sistemul returneaza un mesaj de eroare la modificarea utilizatorului

232 Aplicatia afiseaza mesajul de eroare administratorului

233 Cazul de utilizare continua de la pasul 15

Preconditii

1 Administratorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Administratorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Utilizatorul trebuie sa aiba cont cu rol de administrator pentru a putea efectuaorice actiune din acest caz de utilizare

4 Administratorul trebuie sa deschida sectiunea utilizatori pentru a putea ındeplinicerintele din cazul de utilizare

Postconditii

1 Noul rol al utilizatorului este salvat ın baza de date

2 La urmatoarea autentificare a utilizatorului acesta va observa ca interfata si maiprecis meniurile si actiunile care le poate face ıi vor fi diferite

25

44 Perspectiva tehnologica

441 Neo4j

Neo4j 1 este un sistem de gestionare a bazelor de date sub forma de graf dezvoltatde Neo4j Inc Descris de dezvoltatorii sai ca o baza de date tranzactionala compatibilacu ACID Neo4j este cea mai populara baza de date sub forma de graf dupa clasamentulDB-Engines

Baza de date Neo4j (ca si orice alta baza de date sub forma de graf) este foartediferita de o baza de date relationala cum ar fi MS Access SQL Server MySQL etcBazele de date relationale utilizeaza tabele randuri si coloane pentru stocarea datelor

Neo4j nu utilizeaza tabele randuri si coloane pentru stocarea sau prezentarea datelorci noduri si relatii

Neo4j este foarte potrivit pentru stocarea datelor care au multe relatii interconec-tate Acestea sunt de fapt aplicatiile ın care merita sa fie folosite De fapt bazele de datesub forma de graf cum este Neo4j sunt mult mai bune la tratarea datelor interconectatedecat bazele de date relationale

Acest lucru se datoreaza faptului ca modelul sub forma de graf nu necesita de obiceio schema predefinita Nu e nevoie sa se creeze structura bazei de date ınainte de a fiıncarcate datele asa cum se face la o baza de date relationala

Dar principalul motiv pentru care Neo4j este mai bun pentru datele relationalepentru acest tip de aplicatii este modul ın care permite crearea relatiilor Neo4j este con-struit ın jurul relatiilor si atunci nu este nevoie sa se configureze chei primare constrangerichei straine pentru a predetermina nodurile care pot avea o relatie si la ce date Cu Neo4jse poate adauga orice legatura ıntre orice nod ori de cate ori este nevoie

Neo4j are aceste calitati care nu se gasesc nici la celelalte baze de date NoSQLBazele de date non-relationale pe langa cele sub forma de graf sunt cele de tip coloanade tip document de tip cheie-valoare si de tip multi-model Nici unul din aceste tipuri nuau ca principala functionalitate maparea relatiilor si facilitatea interogarilor ıntr-o baza dedate cu multe relatii ıntre entitati

Generarea de recomandari personalizate este unul dintre cele mai frecvente cazuride utilizare a unei baze de date sub forma de graf Unele dintre principalele beneficii aleutilizarii grafurilor pentru a genera recomandari includ

- Performanta Lipsa indexurilor permite calcularea recomandarilor ın timp realasigurand ca recomandarea este ıntotdeauna relevanta si reflecta informatii actualizate

- Model de date Modelul de graf cu proprietati permite combinarea cu usurinta aseturilor de date din mai multe surse

Un alt avantaj al bazelor de date sub forma de graf Neo4j este faptul ca respectatoate principiile din modelul de consistenta ACID

Garantia data de principiile ACID este ca ofera un mediu sigur ın care sa functionezedatele Acronimul ACID reprezinta

1httpsneo4jcomuse-casesreal-time-recommendation-engine

26

bull Atomic Toate operatiile dintr-o tranzactie reusesc sau fiecare operatie este reluatabull Consistent La finalizarea unei tranzactii baza de date este solida din punct de

vedere structuralbull Izolat Tranzactiile nu se lupta una cu cealalta Accesul controversat la date este

moderat de baza de date astfel ıncat tranzactiile par sa se execute succesivbull Durabil Rezultatele aplicarii unei tranzactii sunt permanente chiar si ın cazul unor

defectiuniCand vine vorba de tehnologiile NoSQL cele mai multe baze de date sub forma de

graf (inclusiv Neo4j) utilizeaza un model de consistenta ACID pentru a asigura ca datelesunt stocate ın siguranta si ın mod consecvent

Am ales baza de date sub forma de graf ca optiune pentru stocarea datelor deoarecedin toate lucrarile si articolele citite a fost optiunea cea mai buna pentru un sistem derecomandare Deci acesta se mapeaza perfect pe cerintele functionale ale proiectului Sidin optiunile de baze de date sub forma de graf Noe4j a avut de departe cele mai multeavantaje ea fiind si cea mai utilizata

442 Cypher

Cypher 2 este un limbaj declarativ de interogare pentru bazele de date sub formade graf care permite interogarea si actualizarea rapida a datelor Cypher este un limbajrelativ simplu dar foarte puternic Interogarile foarte complexe ale bazei de date pot fiusor exprimate prin intermediul limbajului Cypher

Este conceput pentru a fi un limbaj de interogare uman Scopul lui principal este dea face interogarile mult mai simple si unele interogari care la bazele de date relationale nuerau posibile le face posibile Constructiile sale se bazeaza pe grafica si pe limba englezalucru care ajuta la scrierea mai intuitiva a interogarilor Este construit pentru a fi maiintuitiv pentru citire si nu neaparat pentru scriere

Cypher se bazeaza pe modelul Graph Property care ın plus fata de elementelegrafice standard ale nodurilor si muchiilor (numite relatii ın Cypher) adauga etichete siproprietati ca si concepte Nodurile pot avea zero sau mai multe etichete ın timp ce fiecarerelatie este de exact un singur tip Nodurile si relatiile au de asemenea zero sau mai multeproprietati

Chypher este limbajul de interogare folosit la bazele de date Neo4j deci este opti-unea implicita atunci cand se alege Neo4j

443 Maven

Maven 3 este un instrument de management software si de ıntelegere a proiectelorsoftware Pe baza conceptului unui model de obiect de proiect (POM) Maven poategestiona construirea raportarea si documentarea unui proiect printr-o informatie centrala

2httpsneo4jcomdevelopercypher-query-language3httpswwwjavatpointcommaven-tutorial

27

Obiectivul principal al lui Maven este acela de a permite unui dezvoltator sa ınte-leaga starea completa a efortului de dezvoltare ın cel mai scurt timp Avantajele Mavensunt

bull instalarea rapida a proiectului fara fisiere buildxml complicate doar un POMbull procesul de construire este standardizat pentru toate proiectelebull usor de ınvatat si de utilizatbull configurarea unui proiect este foarte rapidabull bine documentat

Am ales sa folosesc Maven deoarece este una din cele mai comune optiuni pentru aimporta librariile ıntr-un proiect si este si cel mai documentat Deci mereu cand esti pusın dificultate poti cauta pe internet sugestii

444 Spring Boot

Spring Boot 4 este un framework din cadrul Spring care ofera setari implicite pentruconfigurarea codului si adnotari pentru a lansa rapid proiecte noi ın executie Urmaresteabordarea rdquoConfigurarea defectiunilor vizionaterdquo pentru a evita un numar mare de linii decod pentru configuratii si pentru a ımbunatati procesul de dezvoltare

Avantajele Spring Boot sunt1 Face foarte usoara dezvoltarea de aplicatii bazate pe Spring cu Java sau Groovy2 Reduce timpul de dezvoltare si creste productivitatea3 Evita scrierea multor linii de cod adnotari si configurare XML4 Este foarte usor de integrat cu alte framework-uri din aceasi familie Spring cum ar

fi Spring JDBC Spring ORM Spring Data Spring Security etc5 Urmareste abordarea rdquoConfigurarea implicita a optiunilorrdquo pentru a reduce efortul

pentru dezvoltatori6 Ofera servere HTTP ıncorporate cum ar fi Tomcat Jetty etc pentru a dezvolta si

testa aplicatiile web foarte usor7 Ofera instrumentul CLI (Command Line Interface) pentru a dezvolta si testa apli-

catiile de tip rdquoSpring Bootrdquo (Java sau Groovy) din linia de comanda foarte usor sirapidAm ales ca optiune pentru partea de backend acest framework deoarece simplifica

foarte mult lucrurile Datorita lui un programator poate sa ısi concentreze mai tare energiape a construi proiectul din punctul de vedere al buissness-ului logic nu din punctul devedere al configurarilor necesare

445 Sencha CMD si ExtJS

Sencha CMD 5 este un instrument linie de comanda cross-platform care ofera multesarcini automate ın ciclul complet de viata al unei aplicatii ExtJS de la generarea unui

4httpswwwjavatpointcomspring-boot-tutorial5httpsdocssenchacomcmd

28

nou proiect la lansarea unei aplicatii ın productie

Sencha Cmd ofera o colectie de caracteristici puternice pentru economisirea timpu-lui care functioneaza ımpreuna cu Sencha ExtJS si Sencha Touch

Ext JS 6 este un framework pur JavaScript pentru construirea de aplicatii webinteractive cross-platform utilizand tehnici precum scripting Ajax DHTML si DOM

Avantajele framework-ului ExtJS sunt

1 Documentatia Extjs este foarte cuprinzatoare si bine ıntretinuta2 Aspectul cheie al bibliotecii EXTJS este suportul de tip cross-browser3 Framework-ul ExtJS ofera o multitudine de elemente UI Aceste elemente includ

forme casete de dialog file arbori si tabele4 Framework-ul ExtJS include suport pentru implementarile Ajax5 ExtJS ofera performante excelente Framework-ul este complet orientat spre obiecte

si este extensibil asta pentru ca este scris ın JavaScript

Pentru partea de frontend se foloseste framework-ul ExtJS deoarece are o arhitec-tura ce se mapeaza foarte bine pe proiectele de frontend si anume arhitectura bazata pecomponente Aceasta face ca ın proiect codul sa fie mult mai organizat si procesul dedezvoltare al proiectului sa fie mult mai scurt prin identificarea mai usoara a erorilor

446 Facebook API(Graph API)

Graph API 7 este modul principal de a pune date ın platforma Facebook si de aobtine date din platforma Facebook Este un API bazat pe HTTP pe care aplicatiile ılpot utiliza pentru interogarea datelor pentru a introduce postari noi pentru gestionareaanunturilor sau pentru a ıncarca fotografii

Este denumit Graph API dupa ideea unui rdquograf socialrdquo - o reprezentare sub formade graf a informatiilor de pe Facebook Este compus din

bull noduri - ın esenta obiecte individuale cum ar fi un utilizator o fotografie o paginasau un comentariu

bull muchii - conexiuni ıntre o colectie de obiecte si un singur obiect cum ar fi fotografiilede pe o pagina sau comentariile de la o fotografie

bull campuri - date despre un obiect cum ar fi ziua de nastere a unui utilizator saunumele paginii

De obicei se utilizeaza noduri pentru a obtine date despre un anumit obiect se uti-lizeaza muchii pentru a obtine colectii de obiecte legate de un singur obiect si se utilizeazacampurile pentru a obtine date despre un singur obiect sau mai multe obiecte dintr-ocolectie

Am folosit Facebook API ca solutie pentru a ımbunatati problema de rdquocold startrdquopentru ca este singurul site pe care marea majoritate a oamenilor au cont si salveazalucrurile care le plac Deci se potrivea perfect peste nevoile aplicatiei mele

6httpdocssenchacomextjs6207httpsdevelopersfacebookcomdocsgraph-api

29

447 Git

Git 8 este un sistem de control a versionarii pentru urmarirea modificarilor ın fisierelede pe computer si coordonarea activitatii asupra acestor fisiere ın randul mai multor per-soane Este utilizat ın principal pentru gestionarea codului sursa ın dezvoltarea de softwaredar poate fi folosit pentru a urmari schimbarile ın orice set de fisiere

Avantaje ale Git

bull Modelul distribuit numai ceea ce se doreste se face publicbull Branching-ul si merging-ul sunt usoarebull Fluxul de lucru este flexibilbull Integritatea datelor este asigurata Deoarece GIT utilizeaza arbori SHA1 coruperea

datelor din motive externe poate fi usor detectatabull Rapid Git este foarte rapid chiar si ın comparatie cu alte sisteme de control a

versionarii

Am folosit Git pentru a avea la proiect un back-up ın caz ca se ıntampla ceva cuproiectul salvat pe calculator

45 Arhitectura conceptuala

In figura 45 este prezentata arhitectura conceptuala a sistemului Acesta este ım-partit ın doua mari parti backend-ul si frontend-ul care comunica ıntre ele si ısi trimitinformatii

Se poate observa ca baza de date este de tip graf mai exact Neo4j si comunica cubackend-ul pentru a putea lucra cu datele stocate Backend-ul este structurat pe nivelefiecare cu un diferit rol si care trebuie parcurs pentru a procesa datele din interfata ınbaza de date Cele trei nivele sunt cel de Repository cel de Service si cel ControllerToate interogarile venite din interfata utilizator ajung ın nivelul de Controller Dupa ceinterogarile trec de securitatea sistemului ajung ın nivelul de Service Acolo se proceseazasi se afla partea de logica a aplicatiei Pentru a interactiona cu baza de date din Servicese apeleaza metodele din nivelul de Repository

In continuare backend-ul comunica prin protocolul HTTP cu interfata grafica cucare interactioneaza clientii aplicatiei Interfata este scrisa ın Ext JS si are o parte de Viewsi o parte de Controller care este cea care comunica cu backend-ul

Pentru partea de autentificare sistemul interactioneaza cu API-ul de la Facebookde la care ia dupa autentificare un access token Cu ajutorul acestuia ia dupa aceea datelenecesare pentru a putea crea un profil utilizatorului

8httpsguidesgithubcomintroductiongit-handbook

30

Figura 45 Arhitectura conceptuala

31

Capitolul 5

Proiectare de Detaliu siImplementare

In acest capitol vor fi prezentate detalii de implementare ale sistemului de recoman-dare incluzand o ımpartire al acestuia ın componentele care ıl cuprind

Obiectivul este de a prezenta arhitectura si modul de implementare al aplicatieipe baza datelor descoperite ın studiul bibliografic de la capitolul trei si cu tehnologiilehotarate la capitolul patru Pe langa asta va fi prezentata si structura bazei de date sideciziile luate pentru securitatea aplicatiei

51 Arhitectura sistemului

Din punctul de vedere al arhitecturii aplicatia se poate considera ca este alcatuitadin patru mari componente

1 API-ul de la Facebook2 Aplicatia client care reprezinta interfata grafica a aplicatiei3 Aplicatia server adica backendul aplicatiei si partea ın care se afla partea de rdquobusiness

logicrdquo4 Baza de date

Partea componenta reprezentata de API-ul de la Facebook este doar o componentacu care aplicatia se integreaza si pe care aceasta o foloseste In interactiunea cu ea interfatada o cerere de autentificare apare o fereastra de la Facebook ın care utilizatorul introducecredentialele de la API-ul de Facebook se primeste ınapoi un access token si cu ajutorulacestuia face o cerere pentru a primi datele personale ale utilizatorului pentru creeareaprofilului utilizator

Urmatoarea parte a aplicatiei este interfata utilizator frontend-ul care reprezintapartea cu care utilizatorul interactioneaza si locul unde ıi sunt afisate informatiile

Cererile din interfata ajung ın a treia parte componenta a sistemului partea deserver adica backend-ul aplicatiei Acolo toate cererile sunt citite si procesate iar raspun-

33

sul lor este trimis la interfata utilizator Aceasta este partea care reprezinta rdquogandireardquoaplicatiei Aceea este componenta care face legatura ıntre cererile utilizatorului din inter-fata si datele stocate ın baza de date

Ultima componenta a aplicatiei o reprezinta baza de date care are ca rol sa stochezedatele despre utilizatori produse si comenzi Ea este o baza de date sub forma de grafde tipul Neo4j Acolo se salveaza entitatile aplicatiei sub forma de noduri si dependenteleıntre acestea sub forma de relatii ıntre aceste noduri

Figura 51 Diagrama de rdquodeploymentrdquo

In figura 51 este prezentata diagrama de rdquodeploymentrdquo a sistemului cu cele patrucomponente ale sistemului Aplicatia client comunica cu API-ul de la Facebook prin pro-tocolul securizat HTTPS cu backend-ul prin protocolul HTTP iar backend-ul cu baza dedate prin JDBC

Aplicatia a putut fi ımpartita ın aceste componente separate deoarece fiecare dintreele poate functiona independent de celelalte comunica cu ele doar prin mesaje Din acestmotiv locul unde ruleaza acestea pot sa fie pe servere diferite In plus daca aplicatiaar fi pusa pe servere pentru utilizatori ar putea fi mai multe servere pe care ruleaza ocomponenta si prin rdquoload balancingrdquo sa se trimita cererile ımpartite ıntre ele

Cum astfel componentele nu depind foarte mult unele de altele si pot rula faraa le interesa de unde le sunt trimise cererile este arhitectura cea mai corecta deoarecedefectarea sau o posibila eroare la una din ele nu o influenteaza cu nimic pe o alta Dacatoate ar rula pe acelasi server o eventuala defectiune a acestuia ar ınsemna o defectiune aıntregului sistem Insa daca exista mai multe noduri si se afla pe servere diferite pot doartoate cererile sa fie redirectionate spre un nod care functioneaza si aplicatia sa functionezepentru clienti la fel ca ınainte

34

Un alt avantaj al arhitecturii ar fi faptul ca la o lansare viitoare catre clienti se poatelansa doar componenta la care s-au facut modificari De asemenea aplicatia ar putea aveape viitor si o componenta mobila Iar cum serverul e independent poate fi acelasi serverfolosit de o alta aplicatie client

511 Arhitectura componentei backend

Arhitectura backend-ului este si ea ımpartita ın mai multe pachete pentru o maibuna structura si pentru o cat mai mica dependenta ıntre diversele componente Astfelcuplarea este minima ıntre clase si eventualele modificari ulterioare pot fi mai usor defacut

Serverul a fost implementat ın Java cu ajutorul framework-ului Spring Boot iarmediul de dezvoltare folosit a fost Intellij IDEA

Din punctul de vedere al ımpartirii arhitectura serverului aplicatiei este structurataın patru pachete si o clasa ın afara acestora Acea clasa este rdquomainrdquo-ul aplicatiei este parteacare trebuie rulata pentru a porni serverul Din cauza ca este o aplicatie Spring Boot si nuuna String singura adnotare necesara pentru a sti ca aceea este clasa rdquoradacinardquoa aplicatieieste SpringBootApplication

Cele patru pachete ale serverului sunt1 Cel de domeniu (domain) cu clasele POJO care reprezinta entitatile din baza de

date2 Cel de rdquomagazierdquo (repositories) care este cel care face direct actiunile ın baza de date3 Cel de serviciu (services) ın care se afla partea de logica a ıntregii aplicatii4 Cel de web ın care se afla clasele de rdquocontrollerrdquo

Figura 52 Diagrama de pachete pentru backend

35

Ca si dependente nivelul de web ıl foloseste pe cel de seviciu cel de serviciu ılfoloseste pe cel de rdquomagazierdquo iar clasele din pachetul de domeniu sunt folosite ın toatecelelalte pachete

In continuare voi prezenta pe rand fiecare nivel al serverului adica fiecare pachet

Figura 53 Diagrama de clase pentru pachetul rdquodomainrdquo

36

Nivelul de domeniu (domain) este alcatuit ın primul rand din clasele care suntentitati ın baza de date Acestea sunt reprezentate de toate clasele ce stocheaza informatiidespre utilizatori si despre produse si comenzi Pe langa informatiile personale despre unutilizator de genul numelui email-ului sau data nasterii care sunt salvate ın entitateapersoana se stocheaza despre utilizator ın clase diferite informatii de genul locului undelocuieste locul unde a copilarit locurilor unde a facut scoala locului unde lucreaza sau celmai important pentru aplicatia aceasta lucrurilor care ıi plac In afara acestor informatiidespre utilizatori sunt si clase cu informatiile despre prieteni despre produse sau desprecomenzi

Din cauza faptului ca aplicatia este de tipul unei retele sociale ın care exista prieteniiıntre persoane exista dependente ıntre toate entitatile aplicatiei Acesta este si motivulpentru care am ales baza de date sub forma de graf pe care sa se mapeze toate acesteentitati sub forma de noduri si toate aceste dependente sub forma de relatii

In pachetul de domeniu se afla si trei subpachete Unul dintre ele este pentruclasele folosite pentru a trata erorile aplicatiei In interiorul acestui pachet se afla douaclase pentru eroare si o exceptie cea folosita ın cazul ın care nu se gaseste ceea ce doresteutilizatorul Pe langa asta este clasa care are ca obiect raspunsul dat de sistem ın cazulunei erori la server Aceasta contine ın interiorul sau pe langa codul erorii si detalii despreeroarea trimisa Aceasta lista de detalii e reprezentata de obiectele de tipul celei de-a treiaclase din pachetul acesta

Celelalte doua subpachete aflate ın acest nivel sunt cele care contin clasele specialede cerere sau raspuns care au ajutat la maparea acestora mai bine In multe cazuri nua fost necesara trimiterea la interfata utilizator a tuturor informatiilor stocate despre oentitate si de aceea am ales sa creez ın aceste cazuri un obiect auxiliar care sa fie folositpe post de raspuns

Figura 54 Diagrama de clase pentru pachetul rdquorepositoriesrdquo

37

Cel de-al doilea nivel al aplicatiei backend este cel de rdquomagazierdquo (repositories) carecontine doar interfete de tip rdquoRepositoryrdquo

Aceste interfete sunt cele care fac operatiile directe asupra entitatilor din baza dedate

Unele interfete doar extind interfata care are deja implementate metodele CRUDsi din acest motiv nu au metode suplimentare iar altele au si metode ın plus care au carol sa execute interogari mai complexe asupra bazei de date In acele metode se pot scrieinterogarile ın Cypher pentru a putea primi informatii despre mai multe noduri sau desprerelatiile dintre acestea sau si pentru a returna doar anumite rezultate care ındeplinescanumite conditii In felul acesta a fost implementata si cererea de oferire a recomandarilorIn acel caz sistemul returneaza produsele care au ın descriere unul din lucrurile care se aflaın lista de obiecte sau servicii primite de la Facebook ca ıi plac utilizatorului

Nivelul de rdquoRepositoryrdquo este folosit direct de cel de-al treiea nivel cel de servi-ciu Acesta este nivelul la care se executa logica aplicatiei unde se comanda modul defunctionare al ıntregii aplicatii

Figura 55 Diagrama de clase pentru pachetul rdquoservicesrdquo

Pe acest nivel ajung toate cererile din server dupa ce trec de verificarile de securitateIn acest pachet se afla si clasa de securitate care face verificarile necesare In aceasta clasaexista o metoda ce se apeleaza la prima cerere cea de salvare a datelor de la Facebookdespre utilizator si care codifica id-ul utilizatorului si ıl trimite pe raspuns ınapoi interfeteiPe langa asta ın acea clasa se afla si o metoda care verifica faptul ca id-ul codificat esteal unui utilizator cu rol corespunzator pentru a face acea cerere

In plus ın acest pachet se afla si toate celelalte clase care fac diverse operatii pedatele din baza de date si dau raspunsuri cererilor din interfata Aici se afla logica care

38

comanda actiunile asupra utilizatorilor asupra prietenilor acestora asupra produselor siasupra comenzilor

Ultima clasa a acestui nivel este cea care se ocupa de trimiterea de email-uri Incazul ın care se face o noua comanda de catre un utilizator toti producatorii produselor depe comanda sunt notificati despre produsele lor pe care le doreste utilizatorul Din serviciulde comanda se apeleaza serviciul de email pentru fiecare producator din lista celor care auproduse care se afla pe lista comenzii utilizatorului

Ultimul si cel mai aproape de interfata utilizator este nivelul de web Acolo se aflatoate clasele de rdquoControllerrdquo ale aplicatiei server

Figura 56 Diagrama de clase pentru pachetul rdquowebrdquo

Toate cererile din interfata utilizator ıncearca sa se mapeze pe rutele declarate ınclase pentru a fi procesate ın metoda corespunzatoare Toata aceasta parte este foarteusor de implementat si mai ales foarte lizibil pentru programatori datorita adnotarilor dinJava Cu ajutorul acestora trebuie doar specificat care este numele URL-ului cererii careeste tipul de obiect asteptat si daca se trimite ca rdquoquery stringrdquo pe URL sau ın interiorulcorpului cererii si tipul raspunsului Pentru fiecare cerere care nu este apelata ın parteaneautentificata a utilizatorului primul lucru care se apeleaza este metoda de securitatepentru a verifica rolul si id-ul utilizatorului Daca din punctul de vedere al securitatii totuleste ın regula se apeleaza metoda corespunzatoare din pachetul de serviciu

39

O singura clasa este diferita de restul ın pachetul de controller si aceea este clasa deeroare Acolo se mapeaza erorile aparute ın timpul cererii si se trimite ınapoi ın interfatagrafica un raspuns cu cod de eroare specific nu numai 500 Generic Application Exceptioncum ar trimite fara aceasta clasa si cu detalii despre motivul aparitiei erorii

Datorita folosirii adnotarilor din java nu a fost necesara folosirea unor rdquodesignpatternrdquo-uri ın sistem De exemplu pentru a folosi ın nivelul de web ceva din pachetulde servicii trebuia doar acel obiect sa aiba adnotarea Autowired si se ınlocuieste atatfolosirea rdquodesign patternrdquo-ului Singleton cat si a celui de Factory Acel obiect nu trebuiecreat sau initializat se face asta implicit datorita adnotarii si de asemenea este folositapeste tot aceeasi instanta

In concluzie toate cererile venite din interfata grafica ajung ın nivelul de rdquocontrollerrdquode unde sunt trimise la cel de rdquoservicerdquopentru a fi procesate si facute eventualele modificarinecesare ın baza de date ca apoi raspunsul sa fie trimis ınapoi spre aplicatia client pentruafisare

512 Arhitectura componentei frontend

A doua componenta implementata a sistemului este aplicatia client frontend-ulAceasta a fost scrisa ın Java Script cu ajutorul framework-ului Ext JS compilarea

se face cu ajutorul Sencha CMD si mediul de implementare a fost IntelliJ IdeaCu ajutorul framework-ului Ext JS se scriu componente care apoi se initializeaza

unele pe altele Aplicatia porneste cu fisierul Applicationjs care este un fel de rdquomainrdquopentru aplicatie Aceasta initializeaza alte componente care la randul lor includ altecomponente si tot asa Structura poate fi foarte usor comparata cu una arborescenta dinacest punct de vedere

Framework-ul a fost creat sa functioneze ın felul acesta pentru ca scopul componen-telor este sa fie scrise ın asa fel ıncat sa poata pe viitor sa fie utilizate din nou Una dindorintele majore ın programare tot timpul este de a se scrie cod ıntr-o maniera ın care safie cat mai reutilizabil Iar framework-ul Ext JS exact asta ıncearca

Arhitectura aplicatiei client se gaseste ın figura 57 si este la randul ei ımpartita ınpachete ca si cea de server Similar cu pachetul de rdquodomainrdquo de la aplicatia de backendeste pachetul rdquomodelrdquo al interfetei utilizator Aici sunt rdquoclaserdquo care sunt simple POJO sicare sunt apoi folosite ın nivelele urmatoare Sunt mai putine decat clasele din rdquostorerdquodeoarece daca raspunsul de la server nu trebuie procesat nu sunt necesare se pot mapadirect obiectele din rdquostorerdquo pe componentele interfetei utilizator

Urmatorul nivel este cel pe care se afla clasele de rdquostorerdquo Acestea sunt cele careexecuta cererea spre backend si face legatura ıntre client si server Daca are o clasa derdquomodelrdquodeclarata atunci populeaza acel obiect cu datele primite de la server iar ın cazul ıncare nu este declarat un model se trimit datele exact asa cum s-au primit la nivelul urmatorde rdquoviewrdquo Acest nivel seamana din punct de vedere al functiei cu cel de rdquorepositoryrdquo de laaplicatia server deoarece ambele au rol de legatura Aceea facea legatura ıntre aplicatiesi baza de date si aceasta face legatura ıntre aplicatia client si aplicatia server

40

Figura 57 Diagrama de clase pentru aplicatia web

Cel de-al treilea pachet al aplicatiei este cel de rdquoviewrdquo In acest pachet se afla claselecare alcatuiesc partea vizuala a aplicatiei La randul ei si aceasta este alcatuita tot dincomponente Aplicatia deschide ın primul rand Main-ul care determina aparitia paginii deHome si afisarea ın meniu a optiunilor posibile ın functie de autentificare si rol Clasele deaici se executa de fapt la deschiderea aplicatiei fiind rdquosingle page applicationrdquo si tot atuncise ıncarca pe pagina componentele Ca si arhitectura a pachetului acesta este ımpartit larandul sau ın subpachete Pentru o mai buna organizare exista patru subpachete cateunul pentru fiecare tip de utilizator In felul acesta toate rdquoviewrdquo-urile care sunt specificeunui utilizator cu un anumit rol se afla ın acelasi subpachet

Cele patru subpachete existente ın pachetul rdquoviewrdquo sunt

1 Pachetul rdquomainrdquo care cuprinde rdquoviewrdquo-urile care se afla ın partea neautentificata aaplicatiei

2 Pachetul rdquoclientrdquo continand rdquoviewrdquo-urile pe care le poate accesa un utilizator simplu3 Pachetul rdquoproducerrdquo specific actiunilor unui utilizator care are rol de producator4 Pachetul rdquoadminrdquo care contine toate rdquoviewrdquo-urile care ıi apar unui utilizator care este

administrator al aplicatiei

Ultimul pachet si nivel al aplicatiei client este cel de rdquocontrollerrdquo In acest pachet

41

se afla clasele care fac actiunile din interfata grafica In timp ce pachetul rdquoviewrdquo continedoar partea grafica a aplicatiei adica modul ın care aceasta trebuie sa arate pachetulrdquocontrollerrdquo contine actiunea acestora modul ın care aplicatia trebuie sa functioneze

Ca si arhitectura si acest pachet a fost ımpartit la randul lui tot ın cele patrusubpachete ca si pachetul rdquoviewrdquo adica rdquomainrdquo rdquoclientrdquo rdquoproducerrdquo si rdquoadminrdquo In pluspentru a fi usor de gasit ce clasa de rdquocontrollerrdquo apartine carui rdquoviewrdquo am ales ca cele douasa aiba acelasi nume In felul acesta daca se doreste sa se gaseasca actiunile unui rdquoviewrdquose poate cauta dupa o clasa cu acelasi nume ın pachetul rdquocontrollerrdquo Numarul claselor dinacest pachet este mai mic decat cel al claselor din rdquoviewrdquo deoarece nu toate paginile dininterfata au actiuni suplimentare Daca singura actiune este ıncarcarea paginii cu date dela server adica doar o actiune simpla de GET datele se ıncarca cu ajutorul rdquostorerdquo-ului laıncarcarea paginii si nu este necesara nici o actiune suplimentara Paginile pe care se potface si actiuni de alt gen sau se deschid noi ferestre au nevoie de clase de rdquocontrollerrdquo

In concluzie arhitectura aplicatiei client este una bazata pe componente care ıncearcasa foloseasca cat mai multe clase reutilizabile

52 Structura bazei de date

Baza de date a aplicatiei este de tip graf de tipul Neo4j Pentru utilizare exista unprogram numit Neo4j ce trebuie instalat Acest program are si o interfata grafica ın carese pot vizualiza datele sub forma grafica si ın care se pot scrie de asemenea si interogariın limbajul acestei baze de date adica Cypher

Fiind o baza de date sub forma de graf datele stocate sunt salvate ın structurade date sub forma de noduri si relatii Entitatile din pachetul de domeniu din aplicatiabackend se gasesc ın baza de date sub forma unor noduri iar dependentele dintre nodurise mapeaza ın baza de date sub forma unor relatii Un element diferit fata de alte tipuride baze de date este faptul ca pe relatiile dintre noduri se pot salva atribute cum este ınaplicatie cazul pentru prieteniile dintre persoane In cazul acestora pe relatia dintre nodurise salveaza daca prietenia a fost sau nu acceptata

Pentru fiecare clasa POJO din aplicatia server clasa ce are doar metodele get si setsi se afla ın pachetul domain exista cate un tip de nod diferit ın baza de date cum estesi marcat ın diferite culori ın figura 58 Fiecare tip de nod are atributele proprii care potlua valori sau pot fi nule Iar fiecare obiect din Java reprezinta un nod diferit ın baza dedate

Neo4j a fost cea mai buna optiune pentru baza de date pentru ca aplicatia poate ficonsiderata o retea sociala Acest lucru se datoreaza relatiilor de prietenie dintre persoanesi a multiplelor relatii ıntre noduri Toate nodurile se afla ın acceasi componenta conexadeci nu exista noduri izolate care sa nu aiba nici o legatura cu nici un alt nod

Datorita acestei structuri a bazei de date este posibila implementarea cererii derecomandare ca o simpla interogare ın baza de date aceasta fiind cea mai simpla metodade implementare a unui sistem de genul acesta una mult mai complexa ar fi fost un

42

algoritm de ınvatare care sa ınvete tipare ale utilizatorilor si sa recomande cadouri pe bazaacestor informatii

Figura 58 Diagrama bazei de date pentru doi utilizatori

Un alt avantaj al acestui tip de baza de date este faptul ca datele nu sunt duplicateın baza de date Spre exemplu daca mai multi utilizatori au ca locatie acelasi oras nu secreaza cate un nod cu acea locatie de mai multe ori ci acel unic nod va avea cate o relatiecu fiecare utilizator care are ca locatie acel oras

In concluzie structura bazei de date a fost aleasa ın acest fel datorita tipului apli-catiei adica asemanatoare cu o retea sociala si datorita implementarii simple a unui sistemde recomandare pe o asemenea baza de date

53 Fluxul pentru diferite operatii

Pentru aplicatie cele mai importante cazuri de utilizare sunt salvarea informati-ilor despre utilizator primite de la Facebook pentru crearea unui profil si recomandareacadourilor pentru un utilizator al aplicatiei Din aceasta cauza cele doua cazuri de utilizarevor fi prezentate mai ın detaliu ın continuare

43

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 14: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

cu mai mult de 5 [11] Castigatorul a fost echipa BellKors Pragmatic Chaos care adepasit algoritmul Netflix cu 1006

Cei de la Netflix au fost extrem de multumiti de rezultatul obtinut si nu numai caau ıncorporat acel algoritm ın algoritmul lor existent de recomandare dar au initiat si o adoua editie a competitiei

34 Sisteme de recomandare cu Neo4j

Urmatoarea parte a studiului bibliografic s-a axat pe bazele de date de tip grafGraphDB si mai exact Neo4j ın comparatie cu celelalte tipuri de baze de date adica celerelationale In cartea [10] sunt prezentate aceste concepte din punct de vedere teoretic siın lucrarile de master [5] si [1] este prezentata aceasta comparatie ıntre diferite tipuri debaze de date pe o aplicatie reala

Limbajul care se foloseste ın bazele de date Neo4j este Cypher Cu ajutorul acestuiase mapeaza query-urile pe noduri si relatii Din punct de vedere teoretic diferenta ıntrebazele de date relationale si cele sub forma de graf consta ın modul ın care sunt stocatedatele In timp ce ın bazele de date relationale datele sunt stocate ın structuri de datesub forma de tabel ın cele sub forma de graf datele sunt stocate ın noduri Coloaneletabelelor din bazele de date relationale se mapeaza ın bazele de date sub forma de graf peproprietati Pentru a face o legatura ıntre tabelele relationale se foloseau rdquochei strainerdquo pecand la Neo4j exista relatii ıntre noduri Din cauza faptului ca bazele de date sub formade graf s-au inspirat din cele relationale exista o asemanare ıntre ele si toate lucrurile auun corespondent ın cealalta

In lucrarea [12] sunt prezentate avantajele folosirii unei baze de date sub forma degraf cand se lucreaza cu retele sociale La aplicatiile de tipul retelelor soriale relatiile dintrenoduri sunt partea cea mai importanta iar pentru acestea o baza de date sub forma degraf se mapeaza cel mai bine Un avantaj al bazelor de date sub forma de graf din punctulde vedere al programatorilor cu acestea se lucreaza foarte similar ca si cu cele relationaledupa cum se prezinta si ın [4]

Un exemplu de sistem de recomandare construit cu Neo4j este [11] In acesta lucrareeste prezentata construirea unui sistem de recomandare care sa recomande prieteni ıntr-oaplicatie de socializare In lucrare sunt patru abordari pentru construirea unui astfel desistem Prima consta ın recomandarea unor prieteni cu care utilizatorul ar avea prieteniın comun cea de-a doua sunt persoane cu care utilizatorul se afla ın acelasi grup cea de-atreia sunt utilizatori care au mers la aceleasi evenimente ca si utilizatorul si ultima abordareconsta ın recomandarea persoanelor cu cei mai multi prieteni In urma mai multor teste sistatistici s-a decis ca abordarea cea mai buna este prima cea cu prietenii ın comun Toateaceste patru metode de oferire a recomandarilor se mapeaza foarte usor pe o baza de datesub forma de graf si reprezinta doar cate un query destul de simplu ın Cypher O astfelde aplicatie s-ar fi mapat mult mai greu pe o baza de date relationala datorita multiplelorrelatii si legaturi

9

Un alt exemplu de aplicatie unde s-a ales baza de date Neo4j a fost [2] Aicipentru articolele politice pe care sistemul le recomanda se creeaza o combinatie ıntrerecomandarile obtinute din articolele care le plac oamenilor cu care utilizatorul vorbestemult si lucruri care le plac utilizatorilor cu care acesta are lucruri ın comun Si ın acest cazexista o multime de relatii ıntre utilizatori si articole si cel mai usor se obtin recomandarilecu o aplicatie sub forma de graf motiv pentru care au si ales Neo4j

35 Utilizarea retelei Facebook pentru crearea unui

profil utilizatorilor

In continuare ca studiu bibliografic au urmat sisteme asemanatoare cu sistemuldorit si modul ın care acestia au reusit sa creeze profilul utilizatorului [13] Problema ceamai mare este rdquocold startrdquo-ul Adica atunci cand un utilizator este nou ın aplicatie nuse stiu suficiente informatii despre el pentru a putea sa i se ofere recomandari Dupa ceacesta foloseste aplicatia o perioada de timp ar putea sa i se ofere recomandari bazate peactivitatea sa anterioara ın aplicatie Din acest motiv la ınceput recomandarile pot lasade dorit si pot fi nu tocmai corecte

O metoda ın care se poate rezolva aceasta problema se afla ın lucrarea de master[7] ın care la utilizatorii noi se recomanda restaurante pe baza pozitiei lor geograficeAtunci cand doresti sa mergi la un restaurant este foarte importanta distanta la care seafla acel restaurant Din aceasta cauza pentru un utilizator caruia sistemul nu stie ce sa ıirecomande ıi recomanda restaurante la ıntamplare dintre cele care se afla cel mai aproapede el In felul acesta dupa ce merge la unul din restaurante si da feedback sistemul poatedupa aceea sa ıi faca recomandari

In lucrarea [8] recomandarile pentru votare au doua abordari La prima i se reco-manda lucrurile care le-a recomandat persoana cu scorul cel mai bun Si cea de-a douaabordare consta ıntr-un set de ıntrebari la care un utilizator nou trebuie sa raspunda candısi face contul

In acest caz cea mai buna metoda ın care se poate rezolva aceasta problema parea fi sa se ia informatiile de la API-ul de la Facebook Facebook este o aplicatie extremde utilizata si care ofera ca informatii publice exact ce ar fi necesar pentru a recomandacadouri de exemplu data nasterii sau lucruri care ıi plac unui utilizator Cu ajutorulacestora se poate calcula varsta utilizatorului poate sa fie ıncadrat ıntr-un profil si sepoate afla stilul de lucruri care ıi plac

Toate aceste informatii publice de la Facebook pot fi salvate si pot fi utilizate maitarziu pentru a se creea recomandari pe baza lor In articolul [3] despre valoarea datelor dela Facebook se prezinta ca si caz de utilizare pentru un site de comert online Aceasta estefoarte asemanatoare din punct de vedere al recomandarilor cu aplicatia de recomandarecadouri Diferenta dintre cele doua este ca ın cazul uneia trebuie sa recomande produsepentru utilizatorul aplicatiei si cealalta pentru un prieten al acestuia

10

Din punct de vedere al aplicabilitatii Facebook este o retea sociala deci datele salese mapeaza foarte bine pe o baza de date de tip graf cum este prezentat si ın lucrarea [6]

Asadar daca la crearea contului utilizatorului ın aplicatie se iau si informatiile pu-blice despre utilizator se vor putea oferi recomandari mult mai corecte ınca de la ınceput

36 Solutii similare

Ca solutii similare pe piata online nu exista aplicatii folosite pentru a recomandacadouri personalizate specific pentru o persoana anume Multe site-uri considera ca eirecomanda cadouri ınsa acestea reprezinta de fapt o filtrare mai avansata a rezultatelorproduselor de pe site-ul lor

Un site care ofera cadouri personalizate este Giftly 4 prezentat ın figura 34 careofera o modalitate usoara de a oferi cadouri Acest site nu are parte de recomandari cia gasit un mod de a face oamenii sa primeasca mereu ceea ce ısi doresc Cel care oferacadoul nu ıl cumpara ci doar ıl sugereaza dar decizia finala asupra cadoului este la celcare ıl primeste Modul ın care functioneaza este

1 Se ofera un rdquocard cadourdquo prin email sms printat sau ca o felicitare de ınaltacalitate

2 Destinatarul alege cel mai convenabil mod de a primi cadoul rdquocard cadourdquo ınposta sau direct ca bani ın contul bancar sau contul PayPal

3 De fapt utilizatorul ıi sugereaza destinatarului ce ar vrea el sa ofere ca si cadouiar destinatarul trimite ca mesaj modul ın care a cheltuit banii

Figura 34 Site web Giftly

4httpswwwgiftlycom

11

Ofera de asemenea si sugestii de cadouri Un om cand navigheaza pe site poate sase uite la cadouri ın categoriile Popular Holidays Birthdays Drinks Eats Meals BackTo School Get Fresh Health Fitness Going Out Getaway Top Shelf For The HipsterClothes For Her Clothes For Him Congratulations Expecting Activities si Custom

Un alt site cu cadouri este Etsy 5 cu imaginea 35 care arata site-ul Etsy este o piataglobala pentru bunuri unice si creative Pe pietele lor milioane de oameni din ıntreagalume se conecteaza atat online cat si offline pentru a face vinde si cumpara bunuri uniceEtsy ofera de asemenea o gama larga de servicii si instrumente de vanzari care ajutaıntreprinzatorii creativi sa ınceapa sa gestioneze si sa-si masoare afacerile Misiunea loreste sa pastreze comertul uman Deci de fapt acest site sprijina mai mult producatoriinu comerciantii De asemenea este mai mult axat pe bunuri unice si lucruri rdquounicerdquo Ca sicelelalte site-uri de genul acesta are o modalitate de a cauta lucrurile mai inteligent maispecializat pe ceea ce te intereseaza Categoriile de cautare sunt Jewelry AccessoriesClothing Shoes Home Living Wedding Party Toys Entertainment Art CollectablesCraft Supplies Tools si Vintage

Figura 35 Site web Etsy

Cel de-al treilea site care ofera servicii asemanatoare este Gifts 6 prezentat ın figura36 Acesta se focuseaza pe cadouri pentru diverse ocazii cum ar fi zilele de nastereCraciun diverse aniversari si alte evenimente la care se cumpara cadouri Pentru parteade recomandare se ofera posibilitatea de a efectua un test despre acel om caruia dorestisa ıi cumperi cadoul care are ca scop ıncadrarea omului respectiv ıntr-un profil si apoi

5httpswwwetsycom6httpswwwgiftscom

12

alegerea unor sugestii ce s-ar potrivi unei persoane cu acel tip de personalitate O primaıntrebare se refera la genul persoanei si ıntrebarea este daca cadoul este pentru o femeieun barbat o fetita sau un baietel Cea de-a doua ıntrebare se refera la marja de varsta ıncare se ıncadreaza acel om de exemplu pentru barbat optiunile sunt adolescent barbat ınjur de 30 de ani sau barbat ın varsta Cea de-a treia ıntrebare se refera la personalitateaomului Mai exact se fac sugestii pentru tipuri de lucruri ce i-ar putea placea unui omcare are trasaturile descrise ın primele doua ıntrebari De exemplu la barbati ın jur de30 de ani optiunile sunt ıi place sportul ıi place natura e aventurier ıi place golful ıiplace sa faca gratare sa serveasca bauturi sa gateasca sa animeze ıi place sa se ımbraceelegant este sef e entuziasmat de bere sau e un fan al sporturilor Iar ın final ın functiede raspunsurile date la ıntrebari se afiseaza sugestii de cadouri care se potrivesc oamenilorcu acel tip de personalitate

Figura 36 Site web Gifts

Nordstrom 7 care este prezentat ın imaginea 37 are o abordare similara avand pesite o multime de optiuni de filtrare a cadourilor Se pot cauta ın acest site cadouri pentrubebelusi cadouri de Craciun bijuterii pentru femei optiunile sunt multiple Acest lucruofera utilizatorilor sugestii pentru a le fi mai usor sa ıncadreze aceasta persoana ıntr-unanumit tip Iar dupa alegerea categoriei toate sugestiile de cadouri oferite de catre sitese ıncadreaza ın acel tip Ca avantaj al acestui site este ca ei ofera si serviciul de livrareal cadoului dupa cumparare oriunde ın lume Un dezavantaj al multor site-uri de genulacesta este ca ofera livrare doar ın zona sa apropiata

7httpsshopnordstromcomcgifts

13

Figura 37 Site web Nordstrom

14

Capitolul 4

Analiza si Fundamentare Teoretica

In acest capitol vor fi prezentate cerintele functionale ale lucrarii ımpreuna cucerintele non-functionale ale acesteia De asemenea va fi prezentata diagrama cazurilor deutilizare si vor fi prezentate mai ın detaliu cazurile de utilizare principale ale aplicatiei Incontinuare se va prezenta perspectiva tehnologica a proiectului si se vor explica deciziiletehnologice luate In final se va prezenta diagrama conceptuala a aplicatiei

41 Cerinte functionale

bull Posibilitatea autentificarii ın aplicatie si crearii unui profil propriu din care se potutiliza informatii si cu ajutorul caruia utilizatorul poate fi ıncadrat ıntr-un profil

bull Utilizatorii pot crea prietenii ca ıntr-o retea de socializare pentru a putea afla infor-matii despre prieteni si pentru a li se putea recomanda cadouri pentru acestia

bull Cu ajutorul informatiilor de la Facebook un utilizator poate fi notificat dinainte caurmeaza ziua de nastere a unuia din prietenii lui si sa i se ofere mai multe variantede cadouri potrivite pentru acesta Aceasta informatie o primeste cu suficient timpınainte pentru a nu fi surprins fara un cadou De la Facebook pe langa informatiiledespre data zilei de nastere sunt importante si varsta sau lucrurile care ıi plac uti-lizatorului Toate acestea ajuta la crearea profilului utilizatorului pe baza caruia serecomanda dupa aceea cadourile

bull De asemenea sistemul poate recomanda si un cadou pentru alt tip de evenimentdecat zi de nastere de genul cadou de Craciun cadou de nunta cadou pentru unnou-nascut etc

bull In aplicatie vor fi adaugate si diferite produse iar pentru a face mai usoara cumparareade cadouri se va putea face si comanda pe internet In momentul ın care un utilizatorface o noua comanda producatorii produselor comandate sunt ınstiintati de existentaacestei noi comenzi

15

bull Pentru persoanele la care pe profilul de Facebook este insuficient completat saupentru a putea cumpara cadouri pentru o persoana care nu are Facebook sau nuare cont ın aceasta aplicatie si despre care ın acest fel nu se cunosc nici un felde informatii se vor putea filtra cautarile pentru cadou printr-o serie de ıntrebaristandard Aceste ıntrebari vor putea creea un rdquomini-profilrdquo pentru acea persoanapentru ca sistemul sa poata recomanda cadouri

42 Cerinte non-functionale

bull Securitate sistemul nu raspunde cererilor decat atunci cand utilizatorul a fost au-tentificat ın aplicatie si are rolul necesar pentru a face acea cerere

bull Portabilitate aplicatia nu depinde de sistemul de operare pe care ruleaza De aseme-nea nu e dependenta de browserul folosit de utilizator

bull Disponibilitate sistemul ramane stabil ın fata erorilor si functioneaza la fel si dupaaparitia unei erori

bull Extensibilitate sistemul permite adaugarea sau modificarea unor componente atuncicand cerintele aplicatiei se modifica Pe langa asta e flexibila unor dezvoltari ulte-rioare

43 Cazuri de utilizare

In aceasta sectiune se vor prezenta actorii aplicatiei diagrama cazurilor de utilizaresi vor fi descrise cazurile de utilizare de baza ale fiecarui actor

Ca si actori aplicatia are patru tipuri de utilizatori

bull utilizator anonimbull clientbull producatorbull administrator

Aplicatia este conceputa ın asa fel ıncat ıntre actori este o relatie de mostenire Acestlucru presupune ca un actor are posibilitatea de a efectua tot ce putea cel dinaintea lui siceva ın plus Deci utilizatorii anonimi au cele mai putine permisiuni iar administratoriiau permisiuni totale Acest lucru se vede foarte clar si ın diagrama cazurilor de utilizaredin imaginea 41

In continuare vor fi prezentate cazurile de utilizare

1 recomandare cadouri2 adaugare produs3 modificare rol utilizator

16

Figura 41 Digrama cazurilor de utilizare

17

431 Recomandare cadouri

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unutilizator trebuie sa le urmeze pentru a primi recomandari de cadouri pentru un cunoscutsi pentru a efectua o comanda

Actorul principal

Orice utilizator al aplicatiei

Parti interesate si interese

Utilizatorul care doreste sa cumpere un cadou este interesat de a gasi un cadoupotrivit pentru cineva pe care ıl cunoaste

Producatorul care e interesat sa ısi poata vinde produseleUtilizatorul care primeste cadoul fiind interesat sa primeasca un cadou care sa i se

potriveasca si care sa ıi placa

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand utilizatorul porneste aplicatia11 Utilizatorul verifica daca are cont de Facebook si daca are urmeaza pasul 111

daca nu 22111 Utilizatorul se autentifica ın aplicatie cu ajutorul credentialelor de la

Facebook12 Utilizatorul deschide sectiunea de recomandare cadouri13 Utilizatorul completeaza formularul cu datele ce trebuie introduse pentru a primi

recomandari de cadouri pentru un prieten14 Utilizatorul poate fi satisfacut cu recomandarile primite si atunci urmeaza pasul

141 iar daca nu este atunci urmeaza cazul alternativ 23141 Utilizatorul adauga ın cosul de cumparaturi cadouri pe care doreste sa

le cumpere15 Utilizatorul cere sa ısi vada cosul de cumparaturi16 Utilizatorul poate sa se declare multumit de cosul de cumparaturi caz ın care

urmeaza pasul 161 sau poate sa aleaga cazul alternativ 24161 Utilizatorul aproba cosul de cumparaturi si accepta sa se faca comanda

17 Sistemul introduce ın baza de date comanda18 Utilizatorul va putea vedea la sectiunea comenzilor sale noua comanda si statusul

ei19 Sistemul notifica producatorul de aparitia noii comenzi110 Utilizatorul se dezautentifica din aplicatie

18

Use-Case EndUtilizatorul se va deconecta din aplicatie si o va ınchide

Figura 42 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueazaAcest flux poate aparea la orice pas211 Utilizatorul deschide sectiunea de recomandare cadouri212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca utilizatorul nu are cont de Facebook

19

Acest flux poate aparea la pasul 11221 Utilizatorul deschide pagina de Facebook222 Utilizatorul ısi face un cont pe pagina de Facebook si ısi completeaza

date despre el223 Utilizatorul revine la aplicatia de recomandare cadouri si ıncearca din

nou sa se autentifice ın aplicatie224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca utilizatorul nu e multumit de recomandariAcest flux poate aparea la pasul 14231 Utilizatorul sterge din cos cadourile pe care nu le mai doreste si revine

la pagina de recomandari232 Utilizatorul adauga alte cadouri ın cos233 Cazul de utilizare continua de la pasul 141

24 Flux-ul alternativ daca utilizatorul nu e multumit de produsele din cosul decumparaturi

Acest flux poate aparea la pasul 16241 Utilizatorul revine ınapoi la formularul cu introducerea datelor despre

beneficiarul cadoului242 Utilizatorul completeaza din nou datele243 Cazul de utilizare continua de la pasul 13

Preconditii

1 Utilizatorul trebuie sa aiba un cont de Facebook pentru a se putea autentifica ınaplicatie

2 Utilizatorul trebuie sa fie autentificat ın aplicatie pentru a putea face orice actiunedin acest caz de utilizare

3 Utilizatorul trebuie sa deschida sectiunea de recomandare cadouri pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noua comanda este salvata ın baza de date2 Comanda apare ın sectiunea de comenzi a utilizatorului ımpreuna cu statusul ei

curent3 Producatorul este notificat ca are o noua comanda

432 Adaugare produs

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unproducator trebuie sa le urmeze pentru a introduce un nou produs ın aplicatie

20

Actorul principal

Utilizatorii cu rol de producator sau cu rol de administrator

Parti interesate si interese

Producatorul care doreste sa introduca produsul nou ın aplicatie

Utilizatorii simpli care au o mai mare varietate de produse din care sa li se reco-mande cadouri

Figura 43 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo

21

Flux de evenimente

Use-Case Start

Cazul de utilizare ıncepe atunci cand producatorul porneste aplicatia

11 Producatorul verifica daca are cont de Facebook si daca are urmeaza pasul111 daca nu 22

111 Producatorul se autentifica ın aplicatie cu ajutorul credentialelor de laFacebook

12 Producatorul deschide sectiunea de adaugare produs

13 Producatorul completeaza datele necesare despre noul produs ımpreuna cu tipulde persoana si eveniment care i s-ar potrivi

14 Producatorul verifica daca este multumit de datele introduse si daca da urmeazapasul 141 daca nu 23

141 Producatorul efectueaza operatia de adaugare produs

15 Sistemul adauga un nou produs ın baza de date

16 Sistemul notifica producatorul ca noul produs a fost introdus cu succes

17 Producatorul se dezautentifica din aplicatie

Use-Case End

Producatorul se va deconecta din aplicatie si o va ınchide

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Producatorul deschide sectiunea de adaugare produs

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca producatorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Producatorul deschide pagina de Facebook

222 Producatorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Producatorul revine la aplicatia de recomandare cadouri si ıncearca dinnou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca Producatorul nu e multumit de datele introduse despreprodus

Acest flux poate aparea la pasul 14

231 Producatorul sterge datele gresite despre produs

232 Producatorul adauga alte date despre produs

233 Cazul de utilizare continua de la pasul 141

22

Preconditii

1 Producatorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Producatorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Producatorul trebuie sa aiba cont cu rol de rdquoproducatorrdquo sau rdquoadminrdquo pentru aputea face operatia aceasta

4 Producatorul trebuie sa deschida sectiunea de adaugare produs pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noul produs este salvat ın baza de date2 Produsul poate fi adaugat la recomandarile unui utilizator din acel moment

433 Modificare rol utilizator

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unadministrator trebuie sa le urmeze pentru a modifica rolul unui utilizator al aplicatiei

Actorul principal

Un utilizator al aplicatiei care are rol de administrator

Parti interesate si interese

Administratorul care doreste sa modifice rolul unui utilizatorUtilizatorul care doreste sa ısi schimbe rolul

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand administratorul porneste aplicatia11 Administratorul verifica daca are cont de Facebook si daca are urmeaza pasul

111 daca nu 22111 Administratorul se autentifica ın aplicatie cu ajutorul credentialelor de

la Facebook12 Administratorul deschide sectiunea de utilizatori13 Sistemul ıi returneaza administratorului utilizatorii care nu sunt administratori14 Administratorul modifica rolul utilizatorului din utilizator simplu ın producator

sau invers

23

15 Administratorul cere executarea modificarii

16 Sistemul executa modificarea iar ın caz de succes urmeaza pasul 161 si ın cazde eroare pasul 23

161 Sistemul notifica administratorul ca modificarea a fost efectuata cusucces

17 Utilizatorul se dezautentifica din aplicatie

Use-Case End

Administratorul se va deconecta din aplicatie si o va ınchide

Figura 44 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo

24

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Administratorul deschide sectiunea de utilizatori

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca administratorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Administratorul deschide pagina de Facebook

222 Administratorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Administratorul revine la aplicatia de recomandare cadouri si ıncearcadin nou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca sistemul returneaza o eroare la modificarea utilizatorului

Acest flux poate aparea la pasul 16

231 Sistemul returneaza un mesaj de eroare la modificarea utilizatorului

232 Aplicatia afiseaza mesajul de eroare administratorului

233 Cazul de utilizare continua de la pasul 15

Preconditii

1 Administratorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Administratorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Utilizatorul trebuie sa aiba cont cu rol de administrator pentru a putea efectuaorice actiune din acest caz de utilizare

4 Administratorul trebuie sa deschida sectiunea utilizatori pentru a putea ındeplinicerintele din cazul de utilizare

Postconditii

1 Noul rol al utilizatorului este salvat ın baza de date

2 La urmatoarea autentificare a utilizatorului acesta va observa ca interfata si maiprecis meniurile si actiunile care le poate face ıi vor fi diferite

25

44 Perspectiva tehnologica

441 Neo4j

Neo4j 1 este un sistem de gestionare a bazelor de date sub forma de graf dezvoltatde Neo4j Inc Descris de dezvoltatorii sai ca o baza de date tranzactionala compatibilacu ACID Neo4j este cea mai populara baza de date sub forma de graf dupa clasamentulDB-Engines

Baza de date Neo4j (ca si orice alta baza de date sub forma de graf) este foartediferita de o baza de date relationala cum ar fi MS Access SQL Server MySQL etcBazele de date relationale utilizeaza tabele randuri si coloane pentru stocarea datelor

Neo4j nu utilizeaza tabele randuri si coloane pentru stocarea sau prezentarea datelorci noduri si relatii

Neo4j este foarte potrivit pentru stocarea datelor care au multe relatii interconec-tate Acestea sunt de fapt aplicatiile ın care merita sa fie folosite De fapt bazele de datesub forma de graf cum este Neo4j sunt mult mai bune la tratarea datelor interconectatedecat bazele de date relationale

Acest lucru se datoreaza faptului ca modelul sub forma de graf nu necesita de obiceio schema predefinita Nu e nevoie sa se creeze structura bazei de date ınainte de a fiıncarcate datele asa cum se face la o baza de date relationala

Dar principalul motiv pentru care Neo4j este mai bun pentru datele relationalepentru acest tip de aplicatii este modul ın care permite crearea relatiilor Neo4j este con-struit ın jurul relatiilor si atunci nu este nevoie sa se configureze chei primare constrangerichei straine pentru a predetermina nodurile care pot avea o relatie si la ce date Cu Neo4jse poate adauga orice legatura ıntre orice nod ori de cate ori este nevoie

Neo4j are aceste calitati care nu se gasesc nici la celelalte baze de date NoSQLBazele de date non-relationale pe langa cele sub forma de graf sunt cele de tip coloanade tip document de tip cheie-valoare si de tip multi-model Nici unul din aceste tipuri nuau ca principala functionalitate maparea relatiilor si facilitatea interogarilor ıntr-o baza dedate cu multe relatii ıntre entitati

Generarea de recomandari personalizate este unul dintre cele mai frecvente cazuride utilizare a unei baze de date sub forma de graf Unele dintre principalele beneficii aleutilizarii grafurilor pentru a genera recomandari includ

- Performanta Lipsa indexurilor permite calcularea recomandarilor ın timp realasigurand ca recomandarea este ıntotdeauna relevanta si reflecta informatii actualizate

- Model de date Modelul de graf cu proprietati permite combinarea cu usurinta aseturilor de date din mai multe surse

Un alt avantaj al bazelor de date sub forma de graf Neo4j este faptul ca respectatoate principiile din modelul de consistenta ACID

Garantia data de principiile ACID este ca ofera un mediu sigur ın care sa functionezedatele Acronimul ACID reprezinta

1httpsneo4jcomuse-casesreal-time-recommendation-engine

26

bull Atomic Toate operatiile dintr-o tranzactie reusesc sau fiecare operatie este reluatabull Consistent La finalizarea unei tranzactii baza de date este solida din punct de

vedere structuralbull Izolat Tranzactiile nu se lupta una cu cealalta Accesul controversat la date este

moderat de baza de date astfel ıncat tranzactiile par sa se execute succesivbull Durabil Rezultatele aplicarii unei tranzactii sunt permanente chiar si ın cazul unor

defectiuniCand vine vorba de tehnologiile NoSQL cele mai multe baze de date sub forma de

graf (inclusiv Neo4j) utilizeaza un model de consistenta ACID pentru a asigura ca datelesunt stocate ın siguranta si ın mod consecvent

Am ales baza de date sub forma de graf ca optiune pentru stocarea datelor deoarecedin toate lucrarile si articolele citite a fost optiunea cea mai buna pentru un sistem derecomandare Deci acesta se mapeaza perfect pe cerintele functionale ale proiectului Sidin optiunile de baze de date sub forma de graf Noe4j a avut de departe cele mai multeavantaje ea fiind si cea mai utilizata

442 Cypher

Cypher 2 este un limbaj declarativ de interogare pentru bazele de date sub formade graf care permite interogarea si actualizarea rapida a datelor Cypher este un limbajrelativ simplu dar foarte puternic Interogarile foarte complexe ale bazei de date pot fiusor exprimate prin intermediul limbajului Cypher

Este conceput pentru a fi un limbaj de interogare uman Scopul lui principal este dea face interogarile mult mai simple si unele interogari care la bazele de date relationale nuerau posibile le face posibile Constructiile sale se bazeaza pe grafica si pe limba englezalucru care ajuta la scrierea mai intuitiva a interogarilor Este construit pentru a fi maiintuitiv pentru citire si nu neaparat pentru scriere

Cypher se bazeaza pe modelul Graph Property care ın plus fata de elementelegrafice standard ale nodurilor si muchiilor (numite relatii ın Cypher) adauga etichete siproprietati ca si concepte Nodurile pot avea zero sau mai multe etichete ın timp ce fiecarerelatie este de exact un singur tip Nodurile si relatiile au de asemenea zero sau mai multeproprietati

Chypher este limbajul de interogare folosit la bazele de date Neo4j deci este opti-unea implicita atunci cand se alege Neo4j

443 Maven

Maven 3 este un instrument de management software si de ıntelegere a proiectelorsoftware Pe baza conceptului unui model de obiect de proiect (POM) Maven poategestiona construirea raportarea si documentarea unui proiect printr-o informatie centrala

2httpsneo4jcomdevelopercypher-query-language3httpswwwjavatpointcommaven-tutorial

27

Obiectivul principal al lui Maven este acela de a permite unui dezvoltator sa ınte-leaga starea completa a efortului de dezvoltare ın cel mai scurt timp Avantajele Mavensunt

bull instalarea rapida a proiectului fara fisiere buildxml complicate doar un POMbull procesul de construire este standardizat pentru toate proiectelebull usor de ınvatat si de utilizatbull configurarea unui proiect este foarte rapidabull bine documentat

Am ales sa folosesc Maven deoarece este una din cele mai comune optiuni pentru aimporta librariile ıntr-un proiect si este si cel mai documentat Deci mereu cand esti pusın dificultate poti cauta pe internet sugestii

444 Spring Boot

Spring Boot 4 este un framework din cadrul Spring care ofera setari implicite pentruconfigurarea codului si adnotari pentru a lansa rapid proiecte noi ın executie Urmaresteabordarea rdquoConfigurarea defectiunilor vizionaterdquo pentru a evita un numar mare de linii decod pentru configuratii si pentru a ımbunatati procesul de dezvoltare

Avantajele Spring Boot sunt1 Face foarte usoara dezvoltarea de aplicatii bazate pe Spring cu Java sau Groovy2 Reduce timpul de dezvoltare si creste productivitatea3 Evita scrierea multor linii de cod adnotari si configurare XML4 Este foarte usor de integrat cu alte framework-uri din aceasi familie Spring cum ar

fi Spring JDBC Spring ORM Spring Data Spring Security etc5 Urmareste abordarea rdquoConfigurarea implicita a optiunilorrdquo pentru a reduce efortul

pentru dezvoltatori6 Ofera servere HTTP ıncorporate cum ar fi Tomcat Jetty etc pentru a dezvolta si

testa aplicatiile web foarte usor7 Ofera instrumentul CLI (Command Line Interface) pentru a dezvolta si testa apli-

catiile de tip rdquoSpring Bootrdquo (Java sau Groovy) din linia de comanda foarte usor sirapidAm ales ca optiune pentru partea de backend acest framework deoarece simplifica

foarte mult lucrurile Datorita lui un programator poate sa ısi concentreze mai tare energiape a construi proiectul din punctul de vedere al buissness-ului logic nu din punctul devedere al configurarilor necesare

445 Sencha CMD si ExtJS

Sencha CMD 5 este un instrument linie de comanda cross-platform care ofera multesarcini automate ın ciclul complet de viata al unei aplicatii ExtJS de la generarea unui

4httpswwwjavatpointcomspring-boot-tutorial5httpsdocssenchacomcmd

28

nou proiect la lansarea unei aplicatii ın productie

Sencha Cmd ofera o colectie de caracteristici puternice pentru economisirea timpu-lui care functioneaza ımpreuna cu Sencha ExtJS si Sencha Touch

Ext JS 6 este un framework pur JavaScript pentru construirea de aplicatii webinteractive cross-platform utilizand tehnici precum scripting Ajax DHTML si DOM

Avantajele framework-ului ExtJS sunt

1 Documentatia Extjs este foarte cuprinzatoare si bine ıntretinuta2 Aspectul cheie al bibliotecii EXTJS este suportul de tip cross-browser3 Framework-ul ExtJS ofera o multitudine de elemente UI Aceste elemente includ

forme casete de dialog file arbori si tabele4 Framework-ul ExtJS include suport pentru implementarile Ajax5 ExtJS ofera performante excelente Framework-ul este complet orientat spre obiecte

si este extensibil asta pentru ca este scris ın JavaScript

Pentru partea de frontend se foloseste framework-ul ExtJS deoarece are o arhitec-tura ce se mapeaza foarte bine pe proiectele de frontend si anume arhitectura bazata pecomponente Aceasta face ca ın proiect codul sa fie mult mai organizat si procesul dedezvoltare al proiectului sa fie mult mai scurt prin identificarea mai usoara a erorilor

446 Facebook API(Graph API)

Graph API 7 este modul principal de a pune date ın platforma Facebook si de aobtine date din platforma Facebook Este un API bazat pe HTTP pe care aplicatiile ılpot utiliza pentru interogarea datelor pentru a introduce postari noi pentru gestionareaanunturilor sau pentru a ıncarca fotografii

Este denumit Graph API dupa ideea unui rdquograf socialrdquo - o reprezentare sub formade graf a informatiilor de pe Facebook Este compus din

bull noduri - ın esenta obiecte individuale cum ar fi un utilizator o fotografie o paginasau un comentariu

bull muchii - conexiuni ıntre o colectie de obiecte si un singur obiect cum ar fi fotografiilede pe o pagina sau comentariile de la o fotografie

bull campuri - date despre un obiect cum ar fi ziua de nastere a unui utilizator saunumele paginii

De obicei se utilizeaza noduri pentru a obtine date despre un anumit obiect se uti-lizeaza muchii pentru a obtine colectii de obiecte legate de un singur obiect si se utilizeazacampurile pentru a obtine date despre un singur obiect sau mai multe obiecte dintr-ocolectie

Am folosit Facebook API ca solutie pentru a ımbunatati problema de rdquocold startrdquopentru ca este singurul site pe care marea majoritate a oamenilor au cont si salveazalucrurile care le plac Deci se potrivea perfect peste nevoile aplicatiei mele

6httpdocssenchacomextjs6207httpsdevelopersfacebookcomdocsgraph-api

29

447 Git

Git 8 este un sistem de control a versionarii pentru urmarirea modificarilor ın fisierelede pe computer si coordonarea activitatii asupra acestor fisiere ın randul mai multor per-soane Este utilizat ın principal pentru gestionarea codului sursa ın dezvoltarea de softwaredar poate fi folosit pentru a urmari schimbarile ın orice set de fisiere

Avantaje ale Git

bull Modelul distribuit numai ceea ce se doreste se face publicbull Branching-ul si merging-ul sunt usoarebull Fluxul de lucru este flexibilbull Integritatea datelor este asigurata Deoarece GIT utilizeaza arbori SHA1 coruperea

datelor din motive externe poate fi usor detectatabull Rapid Git este foarte rapid chiar si ın comparatie cu alte sisteme de control a

versionarii

Am folosit Git pentru a avea la proiect un back-up ın caz ca se ıntampla ceva cuproiectul salvat pe calculator

45 Arhitectura conceptuala

In figura 45 este prezentata arhitectura conceptuala a sistemului Acesta este ım-partit ın doua mari parti backend-ul si frontend-ul care comunica ıntre ele si ısi trimitinformatii

Se poate observa ca baza de date este de tip graf mai exact Neo4j si comunica cubackend-ul pentru a putea lucra cu datele stocate Backend-ul este structurat pe nivelefiecare cu un diferit rol si care trebuie parcurs pentru a procesa datele din interfata ınbaza de date Cele trei nivele sunt cel de Repository cel de Service si cel ControllerToate interogarile venite din interfata utilizator ajung ın nivelul de Controller Dupa ceinterogarile trec de securitatea sistemului ajung ın nivelul de Service Acolo se proceseazasi se afla partea de logica a aplicatiei Pentru a interactiona cu baza de date din Servicese apeleaza metodele din nivelul de Repository

In continuare backend-ul comunica prin protocolul HTTP cu interfata grafica cucare interactioneaza clientii aplicatiei Interfata este scrisa ın Ext JS si are o parte de Viewsi o parte de Controller care este cea care comunica cu backend-ul

Pentru partea de autentificare sistemul interactioneaza cu API-ul de la Facebookde la care ia dupa autentificare un access token Cu ajutorul acestuia ia dupa aceea datelenecesare pentru a putea crea un profil utilizatorului

8httpsguidesgithubcomintroductiongit-handbook

30

Figura 45 Arhitectura conceptuala

31

Capitolul 5

Proiectare de Detaliu siImplementare

In acest capitol vor fi prezentate detalii de implementare ale sistemului de recoman-dare incluzand o ımpartire al acestuia ın componentele care ıl cuprind

Obiectivul este de a prezenta arhitectura si modul de implementare al aplicatieipe baza datelor descoperite ın studiul bibliografic de la capitolul trei si cu tehnologiilehotarate la capitolul patru Pe langa asta va fi prezentata si structura bazei de date sideciziile luate pentru securitatea aplicatiei

51 Arhitectura sistemului

Din punctul de vedere al arhitecturii aplicatia se poate considera ca este alcatuitadin patru mari componente

1 API-ul de la Facebook2 Aplicatia client care reprezinta interfata grafica a aplicatiei3 Aplicatia server adica backendul aplicatiei si partea ın care se afla partea de rdquobusiness

logicrdquo4 Baza de date

Partea componenta reprezentata de API-ul de la Facebook este doar o componentacu care aplicatia se integreaza si pe care aceasta o foloseste In interactiunea cu ea interfatada o cerere de autentificare apare o fereastra de la Facebook ın care utilizatorul introducecredentialele de la API-ul de Facebook se primeste ınapoi un access token si cu ajutorulacestuia face o cerere pentru a primi datele personale ale utilizatorului pentru creeareaprofilului utilizator

Urmatoarea parte a aplicatiei este interfata utilizator frontend-ul care reprezintapartea cu care utilizatorul interactioneaza si locul unde ıi sunt afisate informatiile

Cererile din interfata ajung ın a treia parte componenta a sistemului partea deserver adica backend-ul aplicatiei Acolo toate cererile sunt citite si procesate iar raspun-

33

sul lor este trimis la interfata utilizator Aceasta este partea care reprezinta rdquogandireardquoaplicatiei Aceea este componenta care face legatura ıntre cererile utilizatorului din inter-fata si datele stocate ın baza de date

Ultima componenta a aplicatiei o reprezinta baza de date care are ca rol sa stochezedatele despre utilizatori produse si comenzi Ea este o baza de date sub forma de grafde tipul Neo4j Acolo se salveaza entitatile aplicatiei sub forma de noduri si dependenteleıntre acestea sub forma de relatii ıntre aceste noduri

Figura 51 Diagrama de rdquodeploymentrdquo

In figura 51 este prezentata diagrama de rdquodeploymentrdquo a sistemului cu cele patrucomponente ale sistemului Aplicatia client comunica cu API-ul de la Facebook prin pro-tocolul securizat HTTPS cu backend-ul prin protocolul HTTP iar backend-ul cu baza dedate prin JDBC

Aplicatia a putut fi ımpartita ın aceste componente separate deoarece fiecare dintreele poate functiona independent de celelalte comunica cu ele doar prin mesaje Din acestmotiv locul unde ruleaza acestea pot sa fie pe servere diferite In plus daca aplicatiaar fi pusa pe servere pentru utilizatori ar putea fi mai multe servere pe care ruleaza ocomponenta si prin rdquoload balancingrdquo sa se trimita cererile ımpartite ıntre ele

Cum astfel componentele nu depind foarte mult unele de altele si pot rula faraa le interesa de unde le sunt trimise cererile este arhitectura cea mai corecta deoarecedefectarea sau o posibila eroare la una din ele nu o influenteaza cu nimic pe o alta Dacatoate ar rula pe acelasi server o eventuala defectiune a acestuia ar ınsemna o defectiune aıntregului sistem Insa daca exista mai multe noduri si se afla pe servere diferite pot doartoate cererile sa fie redirectionate spre un nod care functioneaza si aplicatia sa functionezepentru clienti la fel ca ınainte

34

Un alt avantaj al arhitecturii ar fi faptul ca la o lansare viitoare catre clienti se poatelansa doar componenta la care s-au facut modificari De asemenea aplicatia ar putea aveape viitor si o componenta mobila Iar cum serverul e independent poate fi acelasi serverfolosit de o alta aplicatie client

511 Arhitectura componentei backend

Arhitectura backend-ului este si ea ımpartita ın mai multe pachete pentru o maibuna structura si pentru o cat mai mica dependenta ıntre diversele componente Astfelcuplarea este minima ıntre clase si eventualele modificari ulterioare pot fi mai usor defacut

Serverul a fost implementat ın Java cu ajutorul framework-ului Spring Boot iarmediul de dezvoltare folosit a fost Intellij IDEA

Din punctul de vedere al ımpartirii arhitectura serverului aplicatiei este structurataın patru pachete si o clasa ın afara acestora Acea clasa este rdquomainrdquo-ul aplicatiei este parteacare trebuie rulata pentru a porni serverul Din cauza ca este o aplicatie Spring Boot si nuuna String singura adnotare necesara pentru a sti ca aceea este clasa rdquoradacinardquoa aplicatieieste SpringBootApplication

Cele patru pachete ale serverului sunt1 Cel de domeniu (domain) cu clasele POJO care reprezinta entitatile din baza de

date2 Cel de rdquomagazierdquo (repositories) care este cel care face direct actiunile ın baza de date3 Cel de serviciu (services) ın care se afla partea de logica a ıntregii aplicatii4 Cel de web ın care se afla clasele de rdquocontrollerrdquo

Figura 52 Diagrama de pachete pentru backend

35

Ca si dependente nivelul de web ıl foloseste pe cel de seviciu cel de serviciu ılfoloseste pe cel de rdquomagazierdquo iar clasele din pachetul de domeniu sunt folosite ın toatecelelalte pachete

In continuare voi prezenta pe rand fiecare nivel al serverului adica fiecare pachet

Figura 53 Diagrama de clase pentru pachetul rdquodomainrdquo

36

Nivelul de domeniu (domain) este alcatuit ın primul rand din clasele care suntentitati ın baza de date Acestea sunt reprezentate de toate clasele ce stocheaza informatiidespre utilizatori si despre produse si comenzi Pe langa informatiile personale despre unutilizator de genul numelui email-ului sau data nasterii care sunt salvate ın entitateapersoana se stocheaza despre utilizator ın clase diferite informatii de genul locului undelocuieste locul unde a copilarit locurilor unde a facut scoala locului unde lucreaza sau celmai important pentru aplicatia aceasta lucrurilor care ıi plac In afara acestor informatiidespre utilizatori sunt si clase cu informatiile despre prieteni despre produse sau desprecomenzi

Din cauza faptului ca aplicatia este de tipul unei retele sociale ın care exista prieteniiıntre persoane exista dependente ıntre toate entitatile aplicatiei Acesta este si motivulpentru care am ales baza de date sub forma de graf pe care sa se mapeze toate acesteentitati sub forma de noduri si toate aceste dependente sub forma de relatii

In pachetul de domeniu se afla si trei subpachete Unul dintre ele este pentruclasele folosite pentru a trata erorile aplicatiei In interiorul acestui pachet se afla douaclase pentru eroare si o exceptie cea folosita ın cazul ın care nu se gaseste ceea ce doresteutilizatorul Pe langa asta este clasa care are ca obiect raspunsul dat de sistem ın cazulunei erori la server Aceasta contine ın interiorul sau pe langa codul erorii si detalii despreeroarea trimisa Aceasta lista de detalii e reprezentata de obiectele de tipul celei de-a treiaclase din pachetul acesta

Celelalte doua subpachete aflate ın acest nivel sunt cele care contin clasele specialede cerere sau raspuns care au ajutat la maparea acestora mai bine In multe cazuri nua fost necesara trimiterea la interfata utilizator a tuturor informatiilor stocate despre oentitate si de aceea am ales sa creez ın aceste cazuri un obiect auxiliar care sa fie folositpe post de raspuns

Figura 54 Diagrama de clase pentru pachetul rdquorepositoriesrdquo

37

Cel de-al doilea nivel al aplicatiei backend este cel de rdquomagazierdquo (repositories) carecontine doar interfete de tip rdquoRepositoryrdquo

Aceste interfete sunt cele care fac operatiile directe asupra entitatilor din baza dedate

Unele interfete doar extind interfata care are deja implementate metodele CRUDsi din acest motiv nu au metode suplimentare iar altele au si metode ın plus care au carol sa execute interogari mai complexe asupra bazei de date In acele metode se pot scrieinterogarile ın Cypher pentru a putea primi informatii despre mai multe noduri sau desprerelatiile dintre acestea sau si pentru a returna doar anumite rezultate care ındeplinescanumite conditii In felul acesta a fost implementata si cererea de oferire a recomandarilorIn acel caz sistemul returneaza produsele care au ın descriere unul din lucrurile care se aflaın lista de obiecte sau servicii primite de la Facebook ca ıi plac utilizatorului

Nivelul de rdquoRepositoryrdquo este folosit direct de cel de-al treiea nivel cel de servi-ciu Acesta este nivelul la care se executa logica aplicatiei unde se comanda modul defunctionare al ıntregii aplicatii

Figura 55 Diagrama de clase pentru pachetul rdquoservicesrdquo

Pe acest nivel ajung toate cererile din server dupa ce trec de verificarile de securitateIn acest pachet se afla si clasa de securitate care face verificarile necesare In aceasta clasaexista o metoda ce se apeleaza la prima cerere cea de salvare a datelor de la Facebookdespre utilizator si care codifica id-ul utilizatorului si ıl trimite pe raspuns ınapoi interfeteiPe langa asta ın acea clasa se afla si o metoda care verifica faptul ca id-ul codificat esteal unui utilizator cu rol corespunzator pentru a face acea cerere

In plus ın acest pachet se afla si toate celelalte clase care fac diverse operatii pedatele din baza de date si dau raspunsuri cererilor din interfata Aici se afla logica care

38

comanda actiunile asupra utilizatorilor asupra prietenilor acestora asupra produselor siasupra comenzilor

Ultima clasa a acestui nivel este cea care se ocupa de trimiterea de email-uri Incazul ın care se face o noua comanda de catre un utilizator toti producatorii produselor depe comanda sunt notificati despre produsele lor pe care le doreste utilizatorul Din serviciulde comanda se apeleaza serviciul de email pentru fiecare producator din lista celor care auproduse care se afla pe lista comenzii utilizatorului

Ultimul si cel mai aproape de interfata utilizator este nivelul de web Acolo se aflatoate clasele de rdquoControllerrdquo ale aplicatiei server

Figura 56 Diagrama de clase pentru pachetul rdquowebrdquo

Toate cererile din interfata utilizator ıncearca sa se mapeze pe rutele declarate ınclase pentru a fi procesate ın metoda corespunzatoare Toata aceasta parte este foarteusor de implementat si mai ales foarte lizibil pentru programatori datorita adnotarilor dinJava Cu ajutorul acestora trebuie doar specificat care este numele URL-ului cererii careeste tipul de obiect asteptat si daca se trimite ca rdquoquery stringrdquo pe URL sau ın interiorulcorpului cererii si tipul raspunsului Pentru fiecare cerere care nu este apelata ın parteaneautentificata a utilizatorului primul lucru care se apeleaza este metoda de securitatepentru a verifica rolul si id-ul utilizatorului Daca din punctul de vedere al securitatii totuleste ın regula se apeleaza metoda corespunzatoare din pachetul de serviciu

39

O singura clasa este diferita de restul ın pachetul de controller si aceea este clasa deeroare Acolo se mapeaza erorile aparute ın timpul cererii si se trimite ınapoi ın interfatagrafica un raspuns cu cod de eroare specific nu numai 500 Generic Application Exceptioncum ar trimite fara aceasta clasa si cu detalii despre motivul aparitiei erorii

Datorita folosirii adnotarilor din java nu a fost necesara folosirea unor rdquodesignpatternrdquo-uri ın sistem De exemplu pentru a folosi ın nivelul de web ceva din pachetulde servicii trebuia doar acel obiect sa aiba adnotarea Autowired si se ınlocuieste atatfolosirea rdquodesign patternrdquo-ului Singleton cat si a celui de Factory Acel obiect nu trebuiecreat sau initializat se face asta implicit datorita adnotarii si de asemenea este folositapeste tot aceeasi instanta

In concluzie toate cererile venite din interfata grafica ajung ın nivelul de rdquocontrollerrdquode unde sunt trimise la cel de rdquoservicerdquopentru a fi procesate si facute eventualele modificarinecesare ın baza de date ca apoi raspunsul sa fie trimis ınapoi spre aplicatia client pentruafisare

512 Arhitectura componentei frontend

A doua componenta implementata a sistemului este aplicatia client frontend-ulAceasta a fost scrisa ın Java Script cu ajutorul framework-ului Ext JS compilarea

se face cu ajutorul Sencha CMD si mediul de implementare a fost IntelliJ IdeaCu ajutorul framework-ului Ext JS se scriu componente care apoi se initializeaza

unele pe altele Aplicatia porneste cu fisierul Applicationjs care este un fel de rdquomainrdquopentru aplicatie Aceasta initializeaza alte componente care la randul lor includ altecomponente si tot asa Structura poate fi foarte usor comparata cu una arborescenta dinacest punct de vedere

Framework-ul a fost creat sa functioneze ın felul acesta pentru ca scopul componen-telor este sa fie scrise ın asa fel ıncat sa poata pe viitor sa fie utilizate din nou Una dindorintele majore ın programare tot timpul este de a se scrie cod ıntr-o maniera ın care safie cat mai reutilizabil Iar framework-ul Ext JS exact asta ıncearca

Arhitectura aplicatiei client se gaseste ın figura 57 si este la randul ei ımpartita ınpachete ca si cea de server Similar cu pachetul de rdquodomainrdquo de la aplicatia de backendeste pachetul rdquomodelrdquo al interfetei utilizator Aici sunt rdquoclaserdquo care sunt simple POJO sicare sunt apoi folosite ın nivelele urmatoare Sunt mai putine decat clasele din rdquostorerdquodeoarece daca raspunsul de la server nu trebuie procesat nu sunt necesare se pot mapadirect obiectele din rdquostorerdquo pe componentele interfetei utilizator

Urmatorul nivel este cel pe care se afla clasele de rdquostorerdquo Acestea sunt cele careexecuta cererea spre backend si face legatura ıntre client si server Daca are o clasa derdquomodelrdquodeclarata atunci populeaza acel obiect cu datele primite de la server iar ın cazul ıncare nu este declarat un model se trimit datele exact asa cum s-au primit la nivelul urmatorde rdquoviewrdquo Acest nivel seamana din punct de vedere al functiei cu cel de rdquorepositoryrdquo de laaplicatia server deoarece ambele au rol de legatura Aceea facea legatura ıntre aplicatiesi baza de date si aceasta face legatura ıntre aplicatia client si aplicatia server

40

Figura 57 Diagrama de clase pentru aplicatia web

Cel de-al treilea pachet al aplicatiei este cel de rdquoviewrdquo In acest pachet se afla claselecare alcatuiesc partea vizuala a aplicatiei La randul ei si aceasta este alcatuita tot dincomponente Aplicatia deschide ın primul rand Main-ul care determina aparitia paginii deHome si afisarea ın meniu a optiunilor posibile ın functie de autentificare si rol Clasele deaici se executa de fapt la deschiderea aplicatiei fiind rdquosingle page applicationrdquo si tot atuncise ıncarca pe pagina componentele Ca si arhitectura a pachetului acesta este ımpartit larandul sau ın subpachete Pentru o mai buna organizare exista patru subpachete cateunul pentru fiecare tip de utilizator In felul acesta toate rdquoviewrdquo-urile care sunt specificeunui utilizator cu un anumit rol se afla ın acelasi subpachet

Cele patru subpachete existente ın pachetul rdquoviewrdquo sunt

1 Pachetul rdquomainrdquo care cuprinde rdquoviewrdquo-urile care se afla ın partea neautentificata aaplicatiei

2 Pachetul rdquoclientrdquo continand rdquoviewrdquo-urile pe care le poate accesa un utilizator simplu3 Pachetul rdquoproducerrdquo specific actiunilor unui utilizator care are rol de producator4 Pachetul rdquoadminrdquo care contine toate rdquoviewrdquo-urile care ıi apar unui utilizator care este

administrator al aplicatiei

Ultimul pachet si nivel al aplicatiei client este cel de rdquocontrollerrdquo In acest pachet

41

se afla clasele care fac actiunile din interfata grafica In timp ce pachetul rdquoviewrdquo continedoar partea grafica a aplicatiei adica modul ın care aceasta trebuie sa arate pachetulrdquocontrollerrdquo contine actiunea acestora modul ın care aplicatia trebuie sa functioneze

Ca si arhitectura si acest pachet a fost ımpartit la randul lui tot ın cele patrusubpachete ca si pachetul rdquoviewrdquo adica rdquomainrdquo rdquoclientrdquo rdquoproducerrdquo si rdquoadminrdquo In pluspentru a fi usor de gasit ce clasa de rdquocontrollerrdquo apartine carui rdquoviewrdquo am ales ca cele douasa aiba acelasi nume In felul acesta daca se doreste sa se gaseasca actiunile unui rdquoviewrdquose poate cauta dupa o clasa cu acelasi nume ın pachetul rdquocontrollerrdquo Numarul claselor dinacest pachet este mai mic decat cel al claselor din rdquoviewrdquo deoarece nu toate paginile dininterfata au actiuni suplimentare Daca singura actiune este ıncarcarea paginii cu date dela server adica doar o actiune simpla de GET datele se ıncarca cu ajutorul rdquostorerdquo-ului laıncarcarea paginii si nu este necesara nici o actiune suplimentara Paginile pe care se potface si actiuni de alt gen sau se deschid noi ferestre au nevoie de clase de rdquocontrollerrdquo

In concluzie arhitectura aplicatiei client este una bazata pe componente care ıncearcasa foloseasca cat mai multe clase reutilizabile

52 Structura bazei de date

Baza de date a aplicatiei este de tip graf de tipul Neo4j Pentru utilizare exista unprogram numit Neo4j ce trebuie instalat Acest program are si o interfata grafica ın carese pot vizualiza datele sub forma grafica si ın care se pot scrie de asemenea si interogariın limbajul acestei baze de date adica Cypher

Fiind o baza de date sub forma de graf datele stocate sunt salvate ın structurade date sub forma de noduri si relatii Entitatile din pachetul de domeniu din aplicatiabackend se gasesc ın baza de date sub forma unor noduri iar dependentele dintre nodurise mapeaza ın baza de date sub forma unor relatii Un element diferit fata de alte tipuride baze de date este faptul ca pe relatiile dintre noduri se pot salva atribute cum este ınaplicatie cazul pentru prieteniile dintre persoane In cazul acestora pe relatia dintre nodurise salveaza daca prietenia a fost sau nu acceptata

Pentru fiecare clasa POJO din aplicatia server clasa ce are doar metodele get si setsi se afla ın pachetul domain exista cate un tip de nod diferit ın baza de date cum estesi marcat ın diferite culori ın figura 58 Fiecare tip de nod are atributele proprii care potlua valori sau pot fi nule Iar fiecare obiect din Java reprezinta un nod diferit ın baza dedate

Neo4j a fost cea mai buna optiune pentru baza de date pentru ca aplicatia poate ficonsiderata o retea sociala Acest lucru se datoreaza relatiilor de prietenie dintre persoanesi a multiplelor relatii ıntre noduri Toate nodurile se afla ın acceasi componenta conexadeci nu exista noduri izolate care sa nu aiba nici o legatura cu nici un alt nod

Datorita acestei structuri a bazei de date este posibila implementarea cererii derecomandare ca o simpla interogare ın baza de date aceasta fiind cea mai simpla metodade implementare a unui sistem de genul acesta una mult mai complexa ar fi fost un

42

algoritm de ınvatare care sa ınvete tipare ale utilizatorilor si sa recomande cadouri pe bazaacestor informatii

Figura 58 Diagrama bazei de date pentru doi utilizatori

Un alt avantaj al acestui tip de baza de date este faptul ca datele nu sunt duplicateın baza de date Spre exemplu daca mai multi utilizatori au ca locatie acelasi oras nu secreaza cate un nod cu acea locatie de mai multe ori ci acel unic nod va avea cate o relatiecu fiecare utilizator care are ca locatie acel oras

In concluzie structura bazei de date a fost aleasa ın acest fel datorita tipului apli-catiei adica asemanatoare cu o retea sociala si datorita implementarii simple a unui sistemde recomandare pe o asemenea baza de date

53 Fluxul pentru diferite operatii

Pentru aplicatie cele mai importante cazuri de utilizare sunt salvarea informati-ilor despre utilizator primite de la Facebook pentru crearea unui profil si recomandareacadourilor pentru un utilizator al aplicatiei Din aceasta cauza cele doua cazuri de utilizarevor fi prezentate mai ın detaliu ın continuare

43

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 15: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

Un alt exemplu de aplicatie unde s-a ales baza de date Neo4j a fost [2] Aicipentru articolele politice pe care sistemul le recomanda se creeaza o combinatie ıntrerecomandarile obtinute din articolele care le plac oamenilor cu care utilizatorul vorbestemult si lucruri care le plac utilizatorilor cu care acesta are lucruri ın comun Si ın acest cazexista o multime de relatii ıntre utilizatori si articole si cel mai usor se obtin recomandarilecu o aplicatie sub forma de graf motiv pentru care au si ales Neo4j

35 Utilizarea retelei Facebook pentru crearea unui

profil utilizatorilor

In continuare ca studiu bibliografic au urmat sisteme asemanatoare cu sistemuldorit si modul ın care acestia au reusit sa creeze profilul utilizatorului [13] Problema ceamai mare este rdquocold startrdquo-ul Adica atunci cand un utilizator este nou ın aplicatie nuse stiu suficiente informatii despre el pentru a putea sa i se ofere recomandari Dupa ceacesta foloseste aplicatia o perioada de timp ar putea sa i se ofere recomandari bazate peactivitatea sa anterioara ın aplicatie Din acest motiv la ınceput recomandarile pot lasade dorit si pot fi nu tocmai corecte

O metoda ın care se poate rezolva aceasta problema se afla ın lucrarea de master[7] ın care la utilizatorii noi se recomanda restaurante pe baza pozitiei lor geograficeAtunci cand doresti sa mergi la un restaurant este foarte importanta distanta la care seafla acel restaurant Din aceasta cauza pentru un utilizator caruia sistemul nu stie ce sa ıirecomande ıi recomanda restaurante la ıntamplare dintre cele care se afla cel mai aproapede el In felul acesta dupa ce merge la unul din restaurante si da feedback sistemul poatedupa aceea sa ıi faca recomandari

In lucrarea [8] recomandarile pentru votare au doua abordari La prima i se reco-manda lucrurile care le-a recomandat persoana cu scorul cel mai bun Si cea de-a douaabordare consta ıntr-un set de ıntrebari la care un utilizator nou trebuie sa raspunda candısi face contul

In acest caz cea mai buna metoda ın care se poate rezolva aceasta problema parea fi sa se ia informatiile de la API-ul de la Facebook Facebook este o aplicatie extremde utilizata si care ofera ca informatii publice exact ce ar fi necesar pentru a recomandacadouri de exemplu data nasterii sau lucruri care ıi plac unui utilizator Cu ajutorulacestora se poate calcula varsta utilizatorului poate sa fie ıncadrat ıntr-un profil si sepoate afla stilul de lucruri care ıi plac

Toate aceste informatii publice de la Facebook pot fi salvate si pot fi utilizate maitarziu pentru a se creea recomandari pe baza lor In articolul [3] despre valoarea datelor dela Facebook se prezinta ca si caz de utilizare pentru un site de comert online Aceasta estefoarte asemanatoare din punct de vedere al recomandarilor cu aplicatia de recomandarecadouri Diferenta dintre cele doua este ca ın cazul uneia trebuie sa recomande produsepentru utilizatorul aplicatiei si cealalta pentru un prieten al acestuia

10

Din punct de vedere al aplicabilitatii Facebook este o retea sociala deci datele salese mapeaza foarte bine pe o baza de date de tip graf cum este prezentat si ın lucrarea [6]

Asadar daca la crearea contului utilizatorului ın aplicatie se iau si informatiile pu-blice despre utilizator se vor putea oferi recomandari mult mai corecte ınca de la ınceput

36 Solutii similare

Ca solutii similare pe piata online nu exista aplicatii folosite pentru a recomandacadouri personalizate specific pentru o persoana anume Multe site-uri considera ca eirecomanda cadouri ınsa acestea reprezinta de fapt o filtrare mai avansata a rezultatelorproduselor de pe site-ul lor

Un site care ofera cadouri personalizate este Giftly 4 prezentat ın figura 34 careofera o modalitate usoara de a oferi cadouri Acest site nu are parte de recomandari cia gasit un mod de a face oamenii sa primeasca mereu ceea ce ısi doresc Cel care oferacadoul nu ıl cumpara ci doar ıl sugereaza dar decizia finala asupra cadoului este la celcare ıl primeste Modul ın care functioneaza este

1 Se ofera un rdquocard cadourdquo prin email sms printat sau ca o felicitare de ınaltacalitate

2 Destinatarul alege cel mai convenabil mod de a primi cadoul rdquocard cadourdquo ınposta sau direct ca bani ın contul bancar sau contul PayPal

3 De fapt utilizatorul ıi sugereaza destinatarului ce ar vrea el sa ofere ca si cadouiar destinatarul trimite ca mesaj modul ın care a cheltuit banii

Figura 34 Site web Giftly

4httpswwwgiftlycom

11

Ofera de asemenea si sugestii de cadouri Un om cand navigheaza pe site poate sase uite la cadouri ın categoriile Popular Holidays Birthdays Drinks Eats Meals BackTo School Get Fresh Health Fitness Going Out Getaway Top Shelf For The HipsterClothes For Her Clothes For Him Congratulations Expecting Activities si Custom

Un alt site cu cadouri este Etsy 5 cu imaginea 35 care arata site-ul Etsy este o piataglobala pentru bunuri unice si creative Pe pietele lor milioane de oameni din ıntreagalume se conecteaza atat online cat si offline pentru a face vinde si cumpara bunuri uniceEtsy ofera de asemenea o gama larga de servicii si instrumente de vanzari care ajutaıntreprinzatorii creativi sa ınceapa sa gestioneze si sa-si masoare afacerile Misiunea loreste sa pastreze comertul uman Deci de fapt acest site sprijina mai mult producatoriinu comerciantii De asemenea este mai mult axat pe bunuri unice si lucruri rdquounicerdquo Ca sicelelalte site-uri de genul acesta are o modalitate de a cauta lucrurile mai inteligent maispecializat pe ceea ce te intereseaza Categoriile de cautare sunt Jewelry AccessoriesClothing Shoes Home Living Wedding Party Toys Entertainment Art CollectablesCraft Supplies Tools si Vintage

Figura 35 Site web Etsy

Cel de-al treilea site care ofera servicii asemanatoare este Gifts 6 prezentat ın figura36 Acesta se focuseaza pe cadouri pentru diverse ocazii cum ar fi zilele de nastereCraciun diverse aniversari si alte evenimente la care se cumpara cadouri Pentru parteade recomandare se ofera posibilitatea de a efectua un test despre acel om caruia dorestisa ıi cumperi cadoul care are ca scop ıncadrarea omului respectiv ıntr-un profil si apoi

5httpswwwetsycom6httpswwwgiftscom

12

alegerea unor sugestii ce s-ar potrivi unei persoane cu acel tip de personalitate O primaıntrebare se refera la genul persoanei si ıntrebarea este daca cadoul este pentru o femeieun barbat o fetita sau un baietel Cea de-a doua ıntrebare se refera la marja de varsta ıncare se ıncadreaza acel om de exemplu pentru barbat optiunile sunt adolescent barbat ınjur de 30 de ani sau barbat ın varsta Cea de-a treia ıntrebare se refera la personalitateaomului Mai exact se fac sugestii pentru tipuri de lucruri ce i-ar putea placea unui omcare are trasaturile descrise ın primele doua ıntrebari De exemplu la barbati ın jur de30 de ani optiunile sunt ıi place sportul ıi place natura e aventurier ıi place golful ıiplace sa faca gratare sa serveasca bauturi sa gateasca sa animeze ıi place sa se ımbraceelegant este sef e entuziasmat de bere sau e un fan al sporturilor Iar ın final ın functiede raspunsurile date la ıntrebari se afiseaza sugestii de cadouri care se potrivesc oamenilorcu acel tip de personalitate

Figura 36 Site web Gifts

Nordstrom 7 care este prezentat ın imaginea 37 are o abordare similara avand pesite o multime de optiuni de filtrare a cadourilor Se pot cauta ın acest site cadouri pentrubebelusi cadouri de Craciun bijuterii pentru femei optiunile sunt multiple Acest lucruofera utilizatorilor sugestii pentru a le fi mai usor sa ıncadreze aceasta persoana ıntr-unanumit tip Iar dupa alegerea categoriei toate sugestiile de cadouri oferite de catre sitese ıncadreaza ın acel tip Ca avantaj al acestui site este ca ei ofera si serviciul de livrareal cadoului dupa cumparare oriunde ın lume Un dezavantaj al multor site-uri de genulacesta este ca ofera livrare doar ın zona sa apropiata

7httpsshopnordstromcomcgifts

13

Figura 37 Site web Nordstrom

14

Capitolul 4

Analiza si Fundamentare Teoretica

In acest capitol vor fi prezentate cerintele functionale ale lucrarii ımpreuna cucerintele non-functionale ale acesteia De asemenea va fi prezentata diagrama cazurilor deutilizare si vor fi prezentate mai ın detaliu cazurile de utilizare principale ale aplicatiei Incontinuare se va prezenta perspectiva tehnologica a proiectului si se vor explica deciziiletehnologice luate In final se va prezenta diagrama conceptuala a aplicatiei

41 Cerinte functionale

bull Posibilitatea autentificarii ın aplicatie si crearii unui profil propriu din care se potutiliza informatii si cu ajutorul caruia utilizatorul poate fi ıncadrat ıntr-un profil

bull Utilizatorii pot crea prietenii ca ıntr-o retea de socializare pentru a putea afla infor-matii despre prieteni si pentru a li se putea recomanda cadouri pentru acestia

bull Cu ajutorul informatiilor de la Facebook un utilizator poate fi notificat dinainte caurmeaza ziua de nastere a unuia din prietenii lui si sa i se ofere mai multe variantede cadouri potrivite pentru acesta Aceasta informatie o primeste cu suficient timpınainte pentru a nu fi surprins fara un cadou De la Facebook pe langa informatiiledespre data zilei de nastere sunt importante si varsta sau lucrurile care ıi plac uti-lizatorului Toate acestea ajuta la crearea profilului utilizatorului pe baza caruia serecomanda dupa aceea cadourile

bull De asemenea sistemul poate recomanda si un cadou pentru alt tip de evenimentdecat zi de nastere de genul cadou de Craciun cadou de nunta cadou pentru unnou-nascut etc

bull In aplicatie vor fi adaugate si diferite produse iar pentru a face mai usoara cumparareade cadouri se va putea face si comanda pe internet In momentul ın care un utilizatorface o noua comanda producatorii produselor comandate sunt ınstiintati de existentaacestei noi comenzi

15

bull Pentru persoanele la care pe profilul de Facebook este insuficient completat saupentru a putea cumpara cadouri pentru o persoana care nu are Facebook sau nuare cont ın aceasta aplicatie si despre care ın acest fel nu se cunosc nici un felde informatii se vor putea filtra cautarile pentru cadou printr-o serie de ıntrebaristandard Aceste ıntrebari vor putea creea un rdquomini-profilrdquo pentru acea persoanapentru ca sistemul sa poata recomanda cadouri

42 Cerinte non-functionale

bull Securitate sistemul nu raspunde cererilor decat atunci cand utilizatorul a fost au-tentificat ın aplicatie si are rolul necesar pentru a face acea cerere

bull Portabilitate aplicatia nu depinde de sistemul de operare pe care ruleaza De aseme-nea nu e dependenta de browserul folosit de utilizator

bull Disponibilitate sistemul ramane stabil ın fata erorilor si functioneaza la fel si dupaaparitia unei erori

bull Extensibilitate sistemul permite adaugarea sau modificarea unor componente atuncicand cerintele aplicatiei se modifica Pe langa asta e flexibila unor dezvoltari ulte-rioare

43 Cazuri de utilizare

In aceasta sectiune se vor prezenta actorii aplicatiei diagrama cazurilor de utilizaresi vor fi descrise cazurile de utilizare de baza ale fiecarui actor

Ca si actori aplicatia are patru tipuri de utilizatori

bull utilizator anonimbull clientbull producatorbull administrator

Aplicatia este conceputa ın asa fel ıncat ıntre actori este o relatie de mostenire Acestlucru presupune ca un actor are posibilitatea de a efectua tot ce putea cel dinaintea lui siceva ın plus Deci utilizatorii anonimi au cele mai putine permisiuni iar administratoriiau permisiuni totale Acest lucru se vede foarte clar si ın diagrama cazurilor de utilizaredin imaginea 41

In continuare vor fi prezentate cazurile de utilizare

1 recomandare cadouri2 adaugare produs3 modificare rol utilizator

16

Figura 41 Digrama cazurilor de utilizare

17

431 Recomandare cadouri

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unutilizator trebuie sa le urmeze pentru a primi recomandari de cadouri pentru un cunoscutsi pentru a efectua o comanda

Actorul principal

Orice utilizator al aplicatiei

Parti interesate si interese

Utilizatorul care doreste sa cumpere un cadou este interesat de a gasi un cadoupotrivit pentru cineva pe care ıl cunoaste

Producatorul care e interesat sa ısi poata vinde produseleUtilizatorul care primeste cadoul fiind interesat sa primeasca un cadou care sa i se

potriveasca si care sa ıi placa

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand utilizatorul porneste aplicatia11 Utilizatorul verifica daca are cont de Facebook si daca are urmeaza pasul 111

daca nu 22111 Utilizatorul se autentifica ın aplicatie cu ajutorul credentialelor de la

Facebook12 Utilizatorul deschide sectiunea de recomandare cadouri13 Utilizatorul completeaza formularul cu datele ce trebuie introduse pentru a primi

recomandari de cadouri pentru un prieten14 Utilizatorul poate fi satisfacut cu recomandarile primite si atunci urmeaza pasul

141 iar daca nu este atunci urmeaza cazul alternativ 23141 Utilizatorul adauga ın cosul de cumparaturi cadouri pe care doreste sa

le cumpere15 Utilizatorul cere sa ısi vada cosul de cumparaturi16 Utilizatorul poate sa se declare multumit de cosul de cumparaturi caz ın care

urmeaza pasul 161 sau poate sa aleaga cazul alternativ 24161 Utilizatorul aproba cosul de cumparaturi si accepta sa se faca comanda

17 Sistemul introduce ın baza de date comanda18 Utilizatorul va putea vedea la sectiunea comenzilor sale noua comanda si statusul

ei19 Sistemul notifica producatorul de aparitia noii comenzi110 Utilizatorul se dezautentifica din aplicatie

18

Use-Case EndUtilizatorul se va deconecta din aplicatie si o va ınchide

Figura 42 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueazaAcest flux poate aparea la orice pas211 Utilizatorul deschide sectiunea de recomandare cadouri212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca utilizatorul nu are cont de Facebook

19

Acest flux poate aparea la pasul 11221 Utilizatorul deschide pagina de Facebook222 Utilizatorul ısi face un cont pe pagina de Facebook si ısi completeaza

date despre el223 Utilizatorul revine la aplicatia de recomandare cadouri si ıncearca din

nou sa se autentifice ın aplicatie224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca utilizatorul nu e multumit de recomandariAcest flux poate aparea la pasul 14231 Utilizatorul sterge din cos cadourile pe care nu le mai doreste si revine

la pagina de recomandari232 Utilizatorul adauga alte cadouri ın cos233 Cazul de utilizare continua de la pasul 141

24 Flux-ul alternativ daca utilizatorul nu e multumit de produsele din cosul decumparaturi

Acest flux poate aparea la pasul 16241 Utilizatorul revine ınapoi la formularul cu introducerea datelor despre

beneficiarul cadoului242 Utilizatorul completeaza din nou datele243 Cazul de utilizare continua de la pasul 13

Preconditii

1 Utilizatorul trebuie sa aiba un cont de Facebook pentru a se putea autentifica ınaplicatie

2 Utilizatorul trebuie sa fie autentificat ın aplicatie pentru a putea face orice actiunedin acest caz de utilizare

3 Utilizatorul trebuie sa deschida sectiunea de recomandare cadouri pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noua comanda este salvata ın baza de date2 Comanda apare ın sectiunea de comenzi a utilizatorului ımpreuna cu statusul ei

curent3 Producatorul este notificat ca are o noua comanda

432 Adaugare produs

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unproducator trebuie sa le urmeze pentru a introduce un nou produs ın aplicatie

20

Actorul principal

Utilizatorii cu rol de producator sau cu rol de administrator

Parti interesate si interese

Producatorul care doreste sa introduca produsul nou ın aplicatie

Utilizatorii simpli care au o mai mare varietate de produse din care sa li se reco-mande cadouri

Figura 43 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo

21

Flux de evenimente

Use-Case Start

Cazul de utilizare ıncepe atunci cand producatorul porneste aplicatia

11 Producatorul verifica daca are cont de Facebook si daca are urmeaza pasul111 daca nu 22

111 Producatorul se autentifica ın aplicatie cu ajutorul credentialelor de laFacebook

12 Producatorul deschide sectiunea de adaugare produs

13 Producatorul completeaza datele necesare despre noul produs ımpreuna cu tipulde persoana si eveniment care i s-ar potrivi

14 Producatorul verifica daca este multumit de datele introduse si daca da urmeazapasul 141 daca nu 23

141 Producatorul efectueaza operatia de adaugare produs

15 Sistemul adauga un nou produs ın baza de date

16 Sistemul notifica producatorul ca noul produs a fost introdus cu succes

17 Producatorul se dezautentifica din aplicatie

Use-Case End

Producatorul se va deconecta din aplicatie si o va ınchide

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Producatorul deschide sectiunea de adaugare produs

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca producatorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Producatorul deschide pagina de Facebook

222 Producatorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Producatorul revine la aplicatia de recomandare cadouri si ıncearca dinnou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca Producatorul nu e multumit de datele introduse despreprodus

Acest flux poate aparea la pasul 14

231 Producatorul sterge datele gresite despre produs

232 Producatorul adauga alte date despre produs

233 Cazul de utilizare continua de la pasul 141

22

Preconditii

1 Producatorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Producatorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Producatorul trebuie sa aiba cont cu rol de rdquoproducatorrdquo sau rdquoadminrdquo pentru aputea face operatia aceasta

4 Producatorul trebuie sa deschida sectiunea de adaugare produs pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noul produs este salvat ın baza de date2 Produsul poate fi adaugat la recomandarile unui utilizator din acel moment

433 Modificare rol utilizator

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unadministrator trebuie sa le urmeze pentru a modifica rolul unui utilizator al aplicatiei

Actorul principal

Un utilizator al aplicatiei care are rol de administrator

Parti interesate si interese

Administratorul care doreste sa modifice rolul unui utilizatorUtilizatorul care doreste sa ısi schimbe rolul

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand administratorul porneste aplicatia11 Administratorul verifica daca are cont de Facebook si daca are urmeaza pasul

111 daca nu 22111 Administratorul se autentifica ın aplicatie cu ajutorul credentialelor de

la Facebook12 Administratorul deschide sectiunea de utilizatori13 Sistemul ıi returneaza administratorului utilizatorii care nu sunt administratori14 Administratorul modifica rolul utilizatorului din utilizator simplu ın producator

sau invers

23

15 Administratorul cere executarea modificarii

16 Sistemul executa modificarea iar ın caz de succes urmeaza pasul 161 si ın cazde eroare pasul 23

161 Sistemul notifica administratorul ca modificarea a fost efectuata cusucces

17 Utilizatorul se dezautentifica din aplicatie

Use-Case End

Administratorul se va deconecta din aplicatie si o va ınchide

Figura 44 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo

24

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Administratorul deschide sectiunea de utilizatori

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca administratorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Administratorul deschide pagina de Facebook

222 Administratorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Administratorul revine la aplicatia de recomandare cadouri si ıncearcadin nou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca sistemul returneaza o eroare la modificarea utilizatorului

Acest flux poate aparea la pasul 16

231 Sistemul returneaza un mesaj de eroare la modificarea utilizatorului

232 Aplicatia afiseaza mesajul de eroare administratorului

233 Cazul de utilizare continua de la pasul 15

Preconditii

1 Administratorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Administratorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Utilizatorul trebuie sa aiba cont cu rol de administrator pentru a putea efectuaorice actiune din acest caz de utilizare

4 Administratorul trebuie sa deschida sectiunea utilizatori pentru a putea ındeplinicerintele din cazul de utilizare

Postconditii

1 Noul rol al utilizatorului este salvat ın baza de date

2 La urmatoarea autentificare a utilizatorului acesta va observa ca interfata si maiprecis meniurile si actiunile care le poate face ıi vor fi diferite

25

44 Perspectiva tehnologica

441 Neo4j

Neo4j 1 este un sistem de gestionare a bazelor de date sub forma de graf dezvoltatde Neo4j Inc Descris de dezvoltatorii sai ca o baza de date tranzactionala compatibilacu ACID Neo4j este cea mai populara baza de date sub forma de graf dupa clasamentulDB-Engines

Baza de date Neo4j (ca si orice alta baza de date sub forma de graf) este foartediferita de o baza de date relationala cum ar fi MS Access SQL Server MySQL etcBazele de date relationale utilizeaza tabele randuri si coloane pentru stocarea datelor

Neo4j nu utilizeaza tabele randuri si coloane pentru stocarea sau prezentarea datelorci noduri si relatii

Neo4j este foarte potrivit pentru stocarea datelor care au multe relatii interconec-tate Acestea sunt de fapt aplicatiile ın care merita sa fie folosite De fapt bazele de datesub forma de graf cum este Neo4j sunt mult mai bune la tratarea datelor interconectatedecat bazele de date relationale

Acest lucru se datoreaza faptului ca modelul sub forma de graf nu necesita de obiceio schema predefinita Nu e nevoie sa se creeze structura bazei de date ınainte de a fiıncarcate datele asa cum se face la o baza de date relationala

Dar principalul motiv pentru care Neo4j este mai bun pentru datele relationalepentru acest tip de aplicatii este modul ın care permite crearea relatiilor Neo4j este con-struit ın jurul relatiilor si atunci nu este nevoie sa se configureze chei primare constrangerichei straine pentru a predetermina nodurile care pot avea o relatie si la ce date Cu Neo4jse poate adauga orice legatura ıntre orice nod ori de cate ori este nevoie

Neo4j are aceste calitati care nu se gasesc nici la celelalte baze de date NoSQLBazele de date non-relationale pe langa cele sub forma de graf sunt cele de tip coloanade tip document de tip cheie-valoare si de tip multi-model Nici unul din aceste tipuri nuau ca principala functionalitate maparea relatiilor si facilitatea interogarilor ıntr-o baza dedate cu multe relatii ıntre entitati

Generarea de recomandari personalizate este unul dintre cele mai frecvente cazuride utilizare a unei baze de date sub forma de graf Unele dintre principalele beneficii aleutilizarii grafurilor pentru a genera recomandari includ

- Performanta Lipsa indexurilor permite calcularea recomandarilor ın timp realasigurand ca recomandarea este ıntotdeauna relevanta si reflecta informatii actualizate

- Model de date Modelul de graf cu proprietati permite combinarea cu usurinta aseturilor de date din mai multe surse

Un alt avantaj al bazelor de date sub forma de graf Neo4j este faptul ca respectatoate principiile din modelul de consistenta ACID

Garantia data de principiile ACID este ca ofera un mediu sigur ın care sa functionezedatele Acronimul ACID reprezinta

1httpsneo4jcomuse-casesreal-time-recommendation-engine

26

bull Atomic Toate operatiile dintr-o tranzactie reusesc sau fiecare operatie este reluatabull Consistent La finalizarea unei tranzactii baza de date este solida din punct de

vedere structuralbull Izolat Tranzactiile nu se lupta una cu cealalta Accesul controversat la date este

moderat de baza de date astfel ıncat tranzactiile par sa se execute succesivbull Durabil Rezultatele aplicarii unei tranzactii sunt permanente chiar si ın cazul unor

defectiuniCand vine vorba de tehnologiile NoSQL cele mai multe baze de date sub forma de

graf (inclusiv Neo4j) utilizeaza un model de consistenta ACID pentru a asigura ca datelesunt stocate ın siguranta si ın mod consecvent

Am ales baza de date sub forma de graf ca optiune pentru stocarea datelor deoarecedin toate lucrarile si articolele citite a fost optiunea cea mai buna pentru un sistem derecomandare Deci acesta se mapeaza perfect pe cerintele functionale ale proiectului Sidin optiunile de baze de date sub forma de graf Noe4j a avut de departe cele mai multeavantaje ea fiind si cea mai utilizata

442 Cypher

Cypher 2 este un limbaj declarativ de interogare pentru bazele de date sub formade graf care permite interogarea si actualizarea rapida a datelor Cypher este un limbajrelativ simplu dar foarte puternic Interogarile foarte complexe ale bazei de date pot fiusor exprimate prin intermediul limbajului Cypher

Este conceput pentru a fi un limbaj de interogare uman Scopul lui principal este dea face interogarile mult mai simple si unele interogari care la bazele de date relationale nuerau posibile le face posibile Constructiile sale se bazeaza pe grafica si pe limba englezalucru care ajuta la scrierea mai intuitiva a interogarilor Este construit pentru a fi maiintuitiv pentru citire si nu neaparat pentru scriere

Cypher se bazeaza pe modelul Graph Property care ın plus fata de elementelegrafice standard ale nodurilor si muchiilor (numite relatii ın Cypher) adauga etichete siproprietati ca si concepte Nodurile pot avea zero sau mai multe etichete ın timp ce fiecarerelatie este de exact un singur tip Nodurile si relatiile au de asemenea zero sau mai multeproprietati

Chypher este limbajul de interogare folosit la bazele de date Neo4j deci este opti-unea implicita atunci cand se alege Neo4j

443 Maven

Maven 3 este un instrument de management software si de ıntelegere a proiectelorsoftware Pe baza conceptului unui model de obiect de proiect (POM) Maven poategestiona construirea raportarea si documentarea unui proiect printr-o informatie centrala

2httpsneo4jcomdevelopercypher-query-language3httpswwwjavatpointcommaven-tutorial

27

Obiectivul principal al lui Maven este acela de a permite unui dezvoltator sa ınte-leaga starea completa a efortului de dezvoltare ın cel mai scurt timp Avantajele Mavensunt

bull instalarea rapida a proiectului fara fisiere buildxml complicate doar un POMbull procesul de construire este standardizat pentru toate proiectelebull usor de ınvatat si de utilizatbull configurarea unui proiect este foarte rapidabull bine documentat

Am ales sa folosesc Maven deoarece este una din cele mai comune optiuni pentru aimporta librariile ıntr-un proiect si este si cel mai documentat Deci mereu cand esti pusın dificultate poti cauta pe internet sugestii

444 Spring Boot

Spring Boot 4 este un framework din cadrul Spring care ofera setari implicite pentruconfigurarea codului si adnotari pentru a lansa rapid proiecte noi ın executie Urmaresteabordarea rdquoConfigurarea defectiunilor vizionaterdquo pentru a evita un numar mare de linii decod pentru configuratii si pentru a ımbunatati procesul de dezvoltare

Avantajele Spring Boot sunt1 Face foarte usoara dezvoltarea de aplicatii bazate pe Spring cu Java sau Groovy2 Reduce timpul de dezvoltare si creste productivitatea3 Evita scrierea multor linii de cod adnotari si configurare XML4 Este foarte usor de integrat cu alte framework-uri din aceasi familie Spring cum ar

fi Spring JDBC Spring ORM Spring Data Spring Security etc5 Urmareste abordarea rdquoConfigurarea implicita a optiunilorrdquo pentru a reduce efortul

pentru dezvoltatori6 Ofera servere HTTP ıncorporate cum ar fi Tomcat Jetty etc pentru a dezvolta si

testa aplicatiile web foarte usor7 Ofera instrumentul CLI (Command Line Interface) pentru a dezvolta si testa apli-

catiile de tip rdquoSpring Bootrdquo (Java sau Groovy) din linia de comanda foarte usor sirapidAm ales ca optiune pentru partea de backend acest framework deoarece simplifica

foarte mult lucrurile Datorita lui un programator poate sa ısi concentreze mai tare energiape a construi proiectul din punctul de vedere al buissness-ului logic nu din punctul devedere al configurarilor necesare

445 Sencha CMD si ExtJS

Sencha CMD 5 este un instrument linie de comanda cross-platform care ofera multesarcini automate ın ciclul complet de viata al unei aplicatii ExtJS de la generarea unui

4httpswwwjavatpointcomspring-boot-tutorial5httpsdocssenchacomcmd

28

nou proiect la lansarea unei aplicatii ın productie

Sencha Cmd ofera o colectie de caracteristici puternice pentru economisirea timpu-lui care functioneaza ımpreuna cu Sencha ExtJS si Sencha Touch

Ext JS 6 este un framework pur JavaScript pentru construirea de aplicatii webinteractive cross-platform utilizand tehnici precum scripting Ajax DHTML si DOM

Avantajele framework-ului ExtJS sunt

1 Documentatia Extjs este foarte cuprinzatoare si bine ıntretinuta2 Aspectul cheie al bibliotecii EXTJS este suportul de tip cross-browser3 Framework-ul ExtJS ofera o multitudine de elemente UI Aceste elemente includ

forme casete de dialog file arbori si tabele4 Framework-ul ExtJS include suport pentru implementarile Ajax5 ExtJS ofera performante excelente Framework-ul este complet orientat spre obiecte

si este extensibil asta pentru ca este scris ın JavaScript

Pentru partea de frontend se foloseste framework-ul ExtJS deoarece are o arhitec-tura ce se mapeaza foarte bine pe proiectele de frontend si anume arhitectura bazata pecomponente Aceasta face ca ın proiect codul sa fie mult mai organizat si procesul dedezvoltare al proiectului sa fie mult mai scurt prin identificarea mai usoara a erorilor

446 Facebook API(Graph API)

Graph API 7 este modul principal de a pune date ın platforma Facebook si de aobtine date din platforma Facebook Este un API bazat pe HTTP pe care aplicatiile ılpot utiliza pentru interogarea datelor pentru a introduce postari noi pentru gestionareaanunturilor sau pentru a ıncarca fotografii

Este denumit Graph API dupa ideea unui rdquograf socialrdquo - o reprezentare sub formade graf a informatiilor de pe Facebook Este compus din

bull noduri - ın esenta obiecte individuale cum ar fi un utilizator o fotografie o paginasau un comentariu

bull muchii - conexiuni ıntre o colectie de obiecte si un singur obiect cum ar fi fotografiilede pe o pagina sau comentariile de la o fotografie

bull campuri - date despre un obiect cum ar fi ziua de nastere a unui utilizator saunumele paginii

De obicei se utilizeaza noduri pentru a obtine date despre un anumit obiect se uti-lizeaza muchii pentru a obtine colectii de obiecte legate de un singur obiect si se utilizeazacampurile pentru a obtine date despre un singur obiect sau mai multe obiecte dintr-ocolectie

Am folosit Facebook API ca solutie pentru a ımbunatati problema de rdquocold startrdquopentru ca este singurul site pe care marea majoritate a oamenilor au cont si salveazalucrurile care le plac Deci se potrivea perfect peste nevoile aplicatiei mele

6httpdocssenchacomextjs6207httpsdevelopersfacebookcomdocsgraph-api

29

447 Git

Git 8 este un sistem de control a versionarii pentru urmarirea modificarilor ın fisierelede pe computer si coordonarea activitatii asupra acestor fisiere ın randul mai multor per-soane Este utilizat ın principal pentru gestionarea codului sursa ın dezvoltarea de softwaredar poate fi folosit pentru a urmari schimbarile ın orice set de fisiere

Avantaje ale Git

bull Modelul distribuit numai ceea ce se doreste se face publicbull Branching-ul si merging-ul sunt usoarebull Fluxul de lucru este flexibilbull Integritatea datelor este asigurata Deoarece GIT utilizeaza arbori SHA1 coruperea

datelor din motive externe poate fi usor detectatabull Rapid Git este foarte rapid chiar si ın comparatie cu alte sisteme de control a

versionarii

Am folosit Git pentru a avea la proiect un back-up ın caz ca se ıntampla ceva cuproiectul salvat pe calculator

45 Arhitectura conceptuala

In figura 45 este prezentata arhitectura conceptuala a sistemului Acesta este ım-partit ın doua mari parti backend-ul si frontend-ul care comunica ıntre ele si ısi trimitinformatii

Se poate observa ca baza de date este de tip graf mai exact Neo4j si comunica cubackend-ul pentru a putea lucra cu datele stocate Backend-ul este structurat pe nivelefiecare cu un diferit rol si care trebuie parcurs pentru a procesa datele din interfata ınbaza de date Cele trei nivele sunt cel de Repository cel de Service si cel ControllerToate interogarile venite din interfata utilizator ajung ın nivelul de Controller Dupa ceinterogarile trec de securitatea sistemului ajung ın nivelul de Service Acolo se proceseazasi se afla partea de logica a aplicatiei Pentru a interactiona cu baza de date din Servicese apeleaza metodele din nivelul de Repository

In continuare backend-ul comunica prin protocolul HTTP cu interfata grafica cucare interactioneaza clientii aplicatiei Interfata este scrisa ın Ext JS si are o parte de Viewsi o parte de Controller care este cea care comunica cu backend-ul

Pentru partea de autentificare sistemul interactioneaza cu API-ul de la Facebookde la care ia dupa autentificare un access token Cu ajutorul acestuia ia dupa aceea datelenecesare pentru a putea crea un profil utilizatorului

8httpsguidesgithubcomintroductiongit-handbook

30

Figura 45 Arhitectura conceptuala

31

Capitolul 5

Proiectare de Detaliu siImplementare

In acest capitol vor fi prezentate detalii de implementare ale sistemului de recoman-dare incluzand o ımpartire al acestuia ın componentele care ıl cuprind

Obiectivul este de a prezenta arhitectura si modul de implementare al aplicatieipe baza datelor descoperite ın studiul bibliografic de la capitolul trei si cu tehnologiilehotarate la capitolul patru Pe langa asta va fi prezentata si structura bazei de date sideciziile luate pentru securitatea aplicatiei

51 Arhitectura sistemului

Din punctul de vedere al arhitecturii aplicatia se poate considera ca este alcatuitadin patru mari componente

1 API-ul de la Facebook2 Aplicatia client care reprezinta interfata grafica a aplicatiei3 Aplicatia server adica backendul aplicatiei si partea ın care se afla partea de rdquobusiness

logicrdquo4 Baza de date

Partea componenta reprezentata de API-ul de la Facebook este doar o componentacu care aplicatia se integreaza si pe care aceasta o foloseste In interactiunea cu ea interfatada o cerere de autentificare apare o fereastra de la Facebook ın care utilizatorul introducecredentialele de la API-ul de Facebook se primeste ınapoi un access token si cu ajutorulacestuia face o cerere pentru a primi datele personale ale utilizatorului pentru creeareaprofilului utilizator

Urmatoarea parte a aplicatiei este interfata utilizator frontend-ul care reprezintapartea cu care utilizatorul interactioneaza si locul unde ıi sunt afisate informatiile

Cererile din interfata ajung ın a treia parte componenta a sistemului partea deserver adica backend-ul aplicatiei Acolo toate cererile sunt citite si procesate iar raspun-

33

sul lor este trimis la interfata utilizator Aceasta este partea care reprezinta rdquogandireardquoaplicatiei Aceea este componenta care face legatura ıntre cererile utilizatorului din inter-fata si datele stocate ın baza de date

Ultima componenta a aplicatiei o reprezinta baza de date care are ca rol sa stochezedatele despre utilizatori produse si comenzi Ea este o baza de date sub forma de grafde tipul Neo4j Acolo se salveaza entitatile aplicatiei sub forma de noduri si dependenteleıntre acestea sub forma de relatii ıntre aceste noduri

Figura 51 Diagrama de rdquodeploymentrdquo

In figura 51 este prezentata diagrama de rdquodeploymentrdquo a sistemului cu cele patrucomponente ale sistemului Aplicatia client comunica cu API-ul de la Facebook prin pro-tocolul securizat HTTPS cu backend-ul prin protocolul HTTP iar backend-ul cu baza dedate prin JDBC

Aplicatia a putut fi ımpartita ın aceste componente separate deoarece fiecare dintreele poate functiona independent de celelalte comunica cu ele doar prin mesaje Din acestmotiv locul unde ruleaza acestea pot sa fie pe servere diferite In plus daca aplicatiaar fi pusa pe servere pentru utilizatori ar putea fi mai multe servere pe care ruleaza ocomponenta si prin rdquoload balancingrdquo sa se trimita cererile ımpartite ıntre ele

Cum astfel componentele nu depind foarte mult unele de altele si pot rula faraa le interesa de unde le sunt trimise cererile este arhitectura cea mai corecta deoarecedefectarea sau o posibila eroare la una din ele nu o influenteaza cu nimic pe o alta Dacatoate ar rula pe acelasi server o eventuala defectiune a acestuia ar ınsemna o defectiune aıntregului sistem Insa daca exista mai multe noduri si se afla pe servere diferite pot doartoate cererile sa fie redirectionate spre un nod care functioneaza si aplicatia sa functionezepentru clienti la fel ca ınainte

34

Un alt avantaj al arhitecturii ar fi faptul ca la o lansare viitoare catre clienti se poatelansa doar componenta la care s-au facut modificari De asemenea aplicatia ar putea aveape viitor si o componenta mobila Iar cum serverul e independent poate fi acelasi serverfolosit de o alta aplicatie client

511 Arhitectura componentei backend

Arhitectura backend-ului este si ea ımpartita ın mai multe pachete pentru o maibuna structura si pentru o cat mai mica dependenta ıntre diversele componente Astfelcuplarea este minima ıntre clase si eventualele modificari ulterioare pot fi mai usor defacut

Serverul a fost implementat ın Java cu ajutorul framework-ului Spring Boot iarmediul de dezvoltare folosit a fost Intellij IDEA

Din punctul de vedere al ımpartirii arhitectura serverului aplicatiei este structurataın patru pachete si o clasa ın afara acestora Acea clasa este rdquomainrdquo-ul aplicatiei este parteacare trebuie rulata pentru a porni serverul Din cauza ca este o aplicatie Spring Boot si nuuna String singura adnotare necesara pentru a sti ca aceea este clasa rdquoradacinardquoa aplicatieieste SpringBootApplication

Cele patru pachete ale serverului sunt1 Cel de domeniu (domain) cu clasele POJO care reprezinta entitatile din baza de

date2 Cel de rdquomagazierdquo (repositories) care este cel care face direct actiunile ın baza de date3 Cel de serviciu (services) ın care se afla partea de logica a ıntregii aplicatii4 Cel de web ın care se afla clasele de rdquocontrollerrdquo

Figura 52 Diagrama de pachete pentru backend

35

Ca si dependente nivelul de web ıl foloseste pe cel de seviciu cel de serviciu ılfoloseste pe cel de rdquomagazierdquo iar clasele din pachetul de domeniu sunt folosite ın toatecelelalte pachete

In continuare voi prezenta pe rand fiecare nivel al serverului adica fiecare pachet

Figura 53 Diagrama de clase pentru pachetul rdquodomainrdquo

36

Nivelul de domeniu (domain) este alcatuit ın primul rand din clasele care suntentitati ın baza de date Acestea sunt reprezentate de toate clasele ce stocheaza informatiidespre utilizatori si despre produse si comenzi Pe langa informatiile personale despre unutilizator de genul numelui email-ului sau data nasterii care sunt salvate ın entitateapersoana se stocheaza despre utilizator ın clase diferite informatii de genul locului undelocuieste locul unde a copilarit locurilor unde a facut scoala locului unde lucreaza sau celmai important pentru aplicatia aceasta lucrurilor care ıi plac In afara acestor informatiidespre utilizatori sunt si clase cu informatiile despre prieteni despre produse sau desprecomenzi

Din cauza faptului ca aplicatia este de tipul unei retele sociale ın care exista prieteniiıntre persoane exista dependente ıntre toate entitatile aplicatiei Acesta este si motivulpentru care am ales baza de date sub forma de graf pe care sa se mapeze toate acesteentitati sub forma de noduri si toate aceste dependente sub forma de relatii

In pachetul de domeniu se afla si trei subpachete Unul dintre ele este pentruclasele folosite pentru a trata erorile aplicatiei In interiorul acestui pachet se afla douaclase pentru eroare si o exceptie cea folosita ın cazul ın care nu se gaseste ceea ce doresteutilizatorul Pe langa asta este clasa care are ca obiect raspunsul dat de sistem ın cazulunei erori la server Aceasta contine ın interiorul sau pe langa codul erorii si detalii despreeroarea trimisa Aceasta lista de detalii e reprezentata de obiectele de tipul celei de-a treiaclase din pachetul acesta

Celelalte doua subpachete aflate ın acest nivel sunt cele care contin clasele specialede cerere sau raspuns care au ajutat la maparea acestora mai bine In multe cazuri nua fost necesara trimiterea la interfata utilizator a tuturor informatiilor stocate despre oentitate si de aceea am ales sa creez ın aceste cazuri un obiect auxiliar care sa fie folositpe post de raspuns

Figura 54 Diagrama de clase pentru pachetul rdquorepositoriesrdquo

37

Cel de-al doilea nivel al aplicatiei backend este cel de rdquomagazierdquo (repositories) carecontine doar interfete de tip rdquoRepositoryrdquo

Aceste interfete sunt cele care fac operatiile directe asupra entitatilor din baza dedate

Unele interfete doar extind interfata care are deja implementate metodele CRUDsi din acest motiv nu au metode suplimentare iar altele au si metode ın plus care au carol sa execute interogari mai complexe asupra bazei de date In acele metode se pot scrieinterogarile ın Cypher pentru a putea primi informatii despre mai multe noduri sau desprerelatiile dintre acestea sau si pentru a returna doar anumite rezultate care ındeplinescanumite conditii In felul acesta a fost implementata si cererea de oferire a recomandarilorIn acel caz sistemul returneaza produsele care au ın descriere unul din lucrurile care se aflaın lista de obiecte sau servicii primite de la Facebook ca ıi plac utilizatorului

Nivelul de rdquoRepositoryrdquo este folosit direct de cel de-al treiea nivel cel de servi-ciu Acesta este nivelul la care se executa logica aplicatiei unde se comanda modul defunctionare al ıntregii aplicatii

Figura 55 Diagrama de clase pentru pachetul rdquoservicesrdquo

Pe acest nivel ajung toate cererile din server dupa ce trec de verificarile de securitateIn acest pachet se afla si clasa de securitate care face verificarile necesare In aceasta clasaexista o metoda ce se apeleaza la prima cerere cea de salvare a datelor de la Facebookdespre utilizator si care codifica id-ul utilizatorului si ıl trimite pe raspuns ınapoi interfeteiPe langa asta ın acea clasa se afla si o metoda care verifica faptul ca id-ul codificat esteal unui utilizator cu rol corespunzator pentru a face acea cerere

In plus ın acest pachet se afla si toate celelalte clase care fac diverse operatii pedatele din baza de date si dau raspunsuri cererilor din interfata Aici se afla logica care

38

comanda actiunile asupra utilizatorilor asupra prietenilor acestora asupra produselor siasupra comenzilor

Ultima clasa a acestui nivel este cea care se ocupa de trimiterea de email-uri Incazul ın care se face o noua comanda de catre un utilizator toti producatorii produselor depe comanda sunt notificati despre produsele lor pe care le doreste utilizatorul Din serviciulde comanda se apeleaza serviciul de email pentru fiecare producator din lista celor care auproduse care se afla pe lista comenzii utilizatorului

Ultimul si cel mai aproape de interfata utilizator este nivelul de web Acolo se aflatoate clasele de rdquoControllerrdquo ale aplicatiei server

Figura 56 Diagrama de clase pentru pachetul rdquowebrdquo

Toate cererile din interfata utilizator ıncearca sa se mapeze pe rutele declarate ınclase pentru a fi procesate ın metoda corespunzatoare Toata aceasta parte este foarteusor de implementat si mai ales foarte lizibil pentru programatori datorita adnotarilor dinJava Cu ajutorul acestora trebuie doar specificat care este numele URL-ului cererii careeste tipul de obiect asteptat si daca se trimite ca rdquoquery stringrdquo pe URL sau ın interiorulcorpului cererii si tipul raspunsului Pentru fiecare cerere care nu este apelata ın parteaneautentificata a utilizatorului primul lucru care se apeleaza este metoda de securitatepentru a verifica rolul si id-ul utilizatorului Daca din punctul de vedere al securitatii totuleste ın regula se apeleaza metoda corespunzatoare din pachetul de serviciu

39

O singura clasa este diferita de restul ın pachetul de controller si aceea este clasa deeroare Acolo se mapeaza erorile aparute ın timpul cererii si se trimite ınapoi ın interfatagrafica un raspuns cu cod de eroare specific nu numai 500 Generic Application Exceptioncum ar trimite fara aceasta clasa si cu detalii despre motivul aparitiei erorii

Datorita folosirii adnotarilor din java nu a fost necesara folosirea unor rdquodesignpatternrdquo-uri ın sistem De exemplu pentru a folosi ın nivelul de web ceva din pachetulde servicii trebuia doar acel obiect sa aiba adnotarea Autowired si se ınlocuieste atatfolosirea rdquodesign patternrdquo-ului Singleton cat si a celui de Factory Acel obiect nu trebuiecreat sau initializat se face asta implicit datorita adnotarii si de asemenea este folositapeste tot aceeasi instanta

In concluzie toate cererile venite din interfata grafica ajung ın nivelul de rdquocontrollerrdquode unde sunt trimise la cel de rdquoservicerdquopentru a fi procesate si facute eventualele modificarinecesare ın baza de date ca apoi raspunsul sa fie trimis ınapoi spre aplicatia client pentruafisare

512 Arhitectura componentei frontend

A doua componenta implementata a sistemului este aplicatia client frontend-ulAceasta a fost scrisa ın Java Script cu ajutorul framework-ului Ext JS compilarea

se face cu ajutorul Sencha CMD si mediul de implementare a fost IntelliJ IdeaCu ajutorul framework-ului Ext JS se scriu componente care apoi se initializeaza

unele pe altele Aplicatia porneste cu fisierul Applicationjs care este un fel de rdquomainrdquopentru aplicatie Aceasta initializeaza alte componente care la randul lor includ altecomponente si tot asa Structura poate fi foarte usor comparata cu una arborescenta dinacest punct de vedere

Framework-ul a fost creat sa functioneze ın felul acesta pentru ca scopul componen-telor este sa fie scrise ın asa fel ıncat sa poata pe viitor sa fie utilizate din nou Una dindorintele majore ın programare tot timpul este de a se scrie cod ıntr-o maniera ın care safie cat mai reutilizabil Iar framework-ul Ext JS exact asta ıncearca

Arhitectura aplicatiei client se gaseste ın figura 57 si este la randul ei ımpartita ınpachete ca si cea de server Similar cu pachetul de rdquodomainrdquo de la aplicatia de backendeste pachetul rdquomodelrdquo al interfetei utilizator Aici sunt rdquoclaserdquo care sunt simple POJO sicare sunt apoi folosite ın nivelele urmatoare Sunt mai putine decat clasele din rdquostorerdquodeoarece daca raspunsul de la server nu trebuie procesat nu sunt necesare se pot mapadirect obiectele din rdquostorerdquo pe componentele interfetei utilizator

Urmatorul nivel este cel pe care se afla clasele de rdquostorerdquo Acestea sunt cele careexecuta cererea spre backend si face legatura ıntre client si server Daca are o clasa derdquomodelrdquodeclarata atunci populeaza acel obiect cu datele primite de la server iar ın cazul ıncare nu este declarat un model se trimit datele exact asa cum s-au primit la nivelul urmatorde rdquoviewrdquo Acest nivel seamana din punct de vedere al functiei cu cel de rdquorepositoryrdquo de laaplicatia server deoarece ambele au rol de legatura Aceea facea legatura ıntre aplicatiesi baza de date si aceasta face legatura ıntre aplicatia client si aplicatia server

40

Figura 57 Diagrama de clase pentru aplicatia web

Cel de-al treilea pachet al aplicatiei este cel de rdquoviewrdquo In acest pachet se afla claselecare alcatuiesc partea vizuala a aplicatiei La randul ei si aceasta este alcatuita tot dincomponente Aplicatia deschide ın primul rand Main-ul care determina aparitia paginii deHome si afisarea ın meniu a optiunilor posibile ın functie de autentificare si rol Clasele deaici se executa de fapt la deschiderea aplicatiei fiind rdquosingle page applicationrdquo si tot atuncise ıncarca pe pagina componentele Ca si arhitectura a pachetului acesta este ımpartit larandul sau ın subpachete Pentru o mai buna organizare exista patru subpachete cateunul pentru fiecare tip de utilizator In felul acesta toate rdquoviewrdquo-urile care sunt specificeunui utilizator cu un anumit rol se afla ın acelasi subpachet

Cele patru subpachete existente ın pachetul rdquoviewrdquo sunt

1 Pachetul rdquomainrdquo care cuprinde rdquoviewrdquo-urile care se afla ın partea neautentificata aaplicatiei

2 Pachetul rdquoclientrdquo continand rdquoviewrdquo-urile pe care le poate accesa un utilizator simplu3 Pachetul rdquoproducerrdquo specific actiunilor unui utilizator care are rol de producator4 Pachetul rdquoadminrdquo care contine toate rdquoviewrdquo-urile care ıi apar unui utilizator care este

administrator al aplicatiei

Ultimul pachet si nivel al aplicatiei client este cel de rdquocontrollerrdquo In acest pachet

41

se afla clasele care fac actiunile din interfata grafica In timp ce pachetul rdquoviewrdquo continedoar partea grafica a aplicatiei adica modul ın care aceasta trebuie sa arate pachetulrdquocontrollerrdquo contine actiunea acestora modul ın care aplicatia trebuie sa functioneze

Ca si arhitectura si acest pachet a fost ımpartit la randul lui tot ın cele patrusubpachete ca si pachetul rdquoviewrdquo adica rdquomainrdquo rdquoclientrdquo rdquoproducerrdquo si rdquoadminrdquo In pluspentru a fi usor de gasit ce clasa de rdquocontrollerrdquo apartine carui rdquoviewrdquo am ales ca cele douasa aiba acelasi nume In felul acesta daca se doreste sa se gaseasca actiunile unui rdquoviewrdquose poate cauta dupa o clasa cu acelasi nume ın pachetul rdquocontrollerrdquo Numarul claselor dinacest pachet este mai mic decat cel al claselor din rdquoviewrdquo deoarece nu toate paginile dininterfata au actiuni suplimentare Daca singura actiune este ıncarcarea paginii cu date dela server adica doar o actiune simpla de GET datele se ıncarca cu ajutorul rdquostorerdquo-ului laıncarcarea paginii si nu este necesara nici o actiune suplimentara Paginile pe care se potface si actiuni de alt gen sau se deschid noi ferestre au nevoie de clase de rdquocontrollerrdquo

In concluzie arhitectura aplicatiei client este una bazata pe componente care ıncearcasa foloseasca cat mai multe clase reutilizabile

52 Structura bazei de date

Baza de date a aplicatiei este de tip graf de tipul Neo4j Pentru utilizare exista unprogram numit Neo4j ce trebuie instalat Acest program are si o interfata grafica ın carese pot vizualiza datele sub forma grafica si ın care se pot scrie de asemenea si interogariın limbajul acestei baze de date adica Cypher

Fiind o baza de date sub forma de graf datele stocate sunt salvate ın structurade date sub forma de noduri si relatii Entitatile din pachetul de domeniu din aplicatiabackend se gasesc ın baza de date sub forma unor noduri iar dependentele dintre nodurise mapeaza ın baza de date sub forma unor relatii Un element diferit fata de alte tipuride baze de date este faptul ca pe relatiile dintre noduri se pot salva atribute cum este ınaplicatie cazul pentru prieteniile dintre persoane In cazul acestora pe relatia dintre nodurise salveaza daca prietenia a fost sau nu acceptata

Pentru fiecare clasa POJO din aplicatia server clasa ce are doar metodele get si setsi se afla ın pachetul domain exista cate un tip de nod diferit ın baza de date cum estesi marcat ın diferite culori ın figura 58 Fiecare tip de nod are atributele proprii care potlua valori sau pot fi nule Iar fiecare obiect din Java reprezinta un nod diferit ın baza dedate

Neo4j a fost cea mai buna optiune pentru baza de date pentru ca aplicatia poate ficonsiderata o retea sociala Acest lucru se datoreaza relatiilor de prietenie dintre persoanesi a multiplelor relatii ıntre noduri Toate nodurile se afla ın acceasi componenta conexadeci nu exista noduri izolate care sa nu aiba nici o legatura cu nici un alt nod

Datorita acestei structuri a bazei de date este posibila implementarea cererii derecomandare ca o simpla interogare ın baza de date aceasta fiind cea mai simpla metodade implementare a unui sistem de genul acesta una mult mai complexa ar fi fost un

42

algoritm de ınvatare care sa ınvete tipare ale utilizatorilor si sa recomande cadouri pe bazaacestor informatii

Figura 58 Diagrama bazei de date pentru doi utilizatori

Un alt avantaj al acestui tip de baza de date este faptul ca datele nu sunt duplicateın baza de date Spre exemplu daca mai multi utilizatori au ca locatie acelasi oras nu secreaza cate un nod cu acea locatie de mai multe ori ci acel unic nod va avea cate o relatiecu fiecare utilizator care are ca locatie acel oras

In concluzie structura bazei de date a fost aleasa ın acest fel datorita tipului apli-catiei adica asemanatoare cu o retea sociala si datorita implementarii simple a unui sistemde recomandare pe o asemenea baza de date

53 Fluxul pentru diferite operatii

Pentru aplicatie cele mai importante cazuri de utilizare sunt salvarea informati-ilor despre utilizator primite de la Facebook pentru crearea unui profil si recomandareacadourilor pentru un utilizator al aplicatiei Din aceasta cauza cele doua cazuri de utilizarevor fi prezentate mai ın detaliu ın continuare

43

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 16: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

Din punct de vedere al aplicabilitatii Facebook este o retea sociala deci datele salese mapeaza foarte bine pe o baza de date de tip graf cum este prezentat si ın lucrarea [6]

Asadar daca la crearea contului utilizatorului ın aplicatie se iau si informatiile pu-blice despre utilizator se vor putea oferi recomandari mult mai corecte ınca de la ınceput

36 Solutii similare

Ca solutii similare pe piata online nu exista aplicatii folosite pentru a recomandacadouri personalizate specific pentru o persoana anume Multe site-uri considera ca eirecomanda cadouri ınsa acestea reprezinta de fapt o filtrare mai avansata a rezultatelorproduselor de pe site-ul lor

Un site care ofera cadouri personalizate este Giftly 4 prezentat ın figura 34 careofera o modalitate usoara de a oferi cadouri Acest site nu are parte de recomandari cia gasit un mod de a face oamenii sa primeasca mereu ceea ce ısi doresc Cel care oferacadoul nu ıl cumpara ci doar ıl sugereaza dar decizia finala asupra cadoului este la celcare ıl primeste Modul ın care functioneaza este

1 Se ofera un rdquocard cadourdquo prin email sms printat sau ca o felicitare de ınaltacalitate

2 Destinatarul alege cel mai convenabil mod de a primi cadoul rdquocard cadourdquo ınposta sau direct ca bani ın contul bancar sau contul PayPal

3 De fapt utilizatorul ıi sugereaza destinatarului ce ar vrea el sa ofere ca si cadouiar destinatarul trimite ca mesaj modul ın care a cheltuit banii

Figura 34 Site web Giftly

4httpswwwgiftlycom

11

Ofera de asemenea si sugestii de cadouri Un om cand navigheaza pe site poate sase uite la cadouri ın categoriile Popular Holidays Birthdays Drinks Eats Meals BackTo School Get Fresh Health Fitness Going Out Getaway Top Shelf For The HipsterClothes For Her Clothes For Him Congratulations Expecting Activities si Custom

Un alt site cu cadouri este Etsy 5 cu imaginea 35 care arata site-ul Etsy este o piataglobala pentru bunuri unice si creative Pe pietele lor milioane de oameni din ıntreagalume se conecteaza atat online cat si offline pentru a face vinde si cumpara bunuri uniceEtsy ofera de asemenea o gama larga de servicii si instrumente de vanzari care ajutaıntreprinzatorii creativi sa ınceapa sa gestioneze si sa-si masoare afacerile Misiunea loreste sa pastreze comertul uman Deci de fapt acest site sprijina mai mult producatoriinu comerciantii De asemenea este mai mult axat pe bunuri unice si lucruri rdquounicerdquo Ca sicelelalte site-uri de genul acesta are o modalitate de a cauta lucrurile mai inteligent maispecializat pe ceea ce te intereseaza Categoriile de cautare sunt Jewelry AccessoriesClothing Shoes Home Living Wedding Party Toys Entertainment Art CollectablesCraft Supplies Tools si Vintage

Figura 35 Site web Etsy

Cel de-al treilea site care ofera servicii asemanatoare este Gifts 6 prezentat ın figura36 Acesta se focuseaza pe cadouri pentru diverse ocazii cum ar fi zilele de nastereCraciun diverse aniversari si alte evenimente la care se cumpara cadouri Pentru parteade recomandare se ofera posibilitatea de a efectua un test despre acel om caruia dorestisa ıi cumperi cadoul care are ca scop ıncadrarea omului respectiv ıntr-un profil si apoi

5httpswwwetsycom6httpswwwgiftscom

12

alegerea unor sugestii ce s-ar potrivi unei persoane cu acel tip de personalitate O primaıntrebare se refera la genul persoanei si ıntrebarea este daca cadoul este pentru o femeieun barbat o fetita sau un baietel Cea de-a doua ıntrebare se refera la marja de varsta ıncare se ıncadreaza acel om de exemplu pentru barbat optiunile sunt adolescent barbat ınjur de 30 de ani sau barbat ın varsta Cea de-a treia ıntrebare se refera la personalitateaomului Mai exact se fac sugestii pentru tipuri de lucruri ce i-ar putea placea unui omcare are trasaturile descrise ın primele doua ıntrebari De exemplu la barbati ın jur de30 de ani optiunile sunt ıi place sportul ıi place natura e aventurier ıi place golful ıiplace sa faca gratare sa serveasca bauturi sa gateasca sa animeze ıi place sa se ımbraceelegant este sef e entuziasmat de bere sau e un fan al sporturilor Iar ın final ın functiede raspunsurile date la ıntrebari se afiseaza sugestii de cadouri care se potrivesc oamenilorcu acel tip de personalitate

Figura 36 Site web Gifts

Nordstrom 7 care este prezentat ın imaginea 37 are o abordare similara avand pesite o multime de optiuni de filtrare a cadourilor Se pot cauta ın acest site cadouri pentrubebelusi cadouri de Craciun bijuterii pentru femei optiunile sunt multiple Acest lucruofera utilizatorilor sugestii pentru a le fi mai usor sa ıncadreze aceasta persoana ıntr-unanumit tip Iar dupa alegerea categoriei toate sugestiile de cadouri oferite de catre sitese ıncadreaza ın acel tip Ca avantaj al acestui site este ca ei ofera si serviciul de livrareal cadoului dupa cumparare oriunde ın lume Un dezavantaj al multor site-uri de genulacesta este ca ofera livrare doar ın zona sa apropiata

7httpsshopnordstromcomcgifts

13

Figura 37 Site web Nordstrom

14

Capitolul 4

Analiza si Fundamentare Teoretica

In acest capitol vor fi prezentate cerintele functionale ale lucrarii ımpreuna cucerintele non-functionale ale acesteia De asemenea va fi prezentata diagrama cazurilor deutilizare si vor fi prezentate mai ın detaliu cazurile de utilizare principale ale aplicatiei Incontinuare se va prezenta perspectiva tehnologica a proiectului si se vor explica deciziiletehnologice luate In final se va prezenta diagrama conceptuala a aplicatiei

41 Cerinte functionale

bull Posibilitatea autentificarii ın aplicatie si crearii unui profil propriu din care se potutiliza informatii si cu ajutorul caruia utilizatorul poate fi ıncadrat ıntr-un profil

bull Utilizatorii pot crea prietenii ca ıntr-o retea de socializare pentru a putea afla infor-matii despre prieteni si pentru a li se putea recomanda cadouri pentru acestia

bull Cu ajutorul informatiilor de la Facebook un utilizator poate fi notificat dinainte caurmeaza ziua de nastere a unuia din prietenii lui si sa i se ofere mai multe variantede cadouri potrivite pentru acesta Aceasta informatie o primeste cu suficient timpınainte pentru a nu fi surprins fara un cadou De la Facebook pe langa informatiiledespre data zilei de nastere sunt importante si varsta sau lucrurile care ıi plac uti-lizatorului Toate acestea ajuta la crearea profilului utilizatorului pe baza caruia serecomanda dupa aceea cadourile

bull De asemenea sistemul poate recomanda si un cadou pentru alt tip de evenimentdecat zi de nastere de genul cadou de Craciun cadou de nunta cadou pentru unnou-nascut etc

bull In aplicatie vor fi adaugate si diferite produse iar pentru a face mai usoara cumparareade cadouri se va putea face si comanda pe internet In momentul ın care un utilizatorface o noua comanda producatorii produselor comandate sunt ınstiintati de existentaacestei noi comenzi

15

bull Pentru persoanele la care pe profilul de Facebook este insuficient completat saupentru a putea cumpara cadouri pentru o persoana care nu are Facebook sau nuare cont ın aceasta aplicatie si despre care ın acest fel nu se cunosc nici un felde informatii se vor putea filtra cautarile pentru cadou printr-o serie de ıntrebaristandard Aceste ıntrebari vor putea creea un rdquomini-profilrdquo pentru acea persoanapentru ca sistemul sa poata recomanda cadouri

42 Cerinte non-functionale

bull Securitate sistemul nu raspunde cererilor decat atunci cand utilizatorul a fost au-tentificat ın aplicatie si are rolul necesar pentru a face acea cerere

bull Portabilitate aplicatia nu depinde de sistemul de operare pe care ruleaza De aseme-nea nu e dependenta de browserul folosit de utilizator

bull Disponibilitate sistemul ramane stabil ın fata erorilor si functioneaza la fel si dupaaparitia unei erori

bull Extensibilitate sistemul permite adaugarea sau modificarea unor componente atuncicand cerintele aplicatiei se modifica Pe langa asta e flexibila unor dezvoltari ulte-rioare

43 Cazuri de utilizare

In aceasta sectiune se vor prezenta actorii aplicatiei diagrama cazurilor de utilizaresi vor fi descrise cazurile de utilizare de baza ale fiecarui actor

Ca si actori aplicatia are patru tipuri de utilizatori

bull utilizator anonimbull clientbull producatorbull administrator

Aplicatia este conceputa ın asa fel ıncat ıntre actori este o relatie de mostenire Acestlucru presupune ca un actor are posibilitatea de a efectua tot ce putea cel dinaintea lui siceva ın plus Deci utilizatorii anonimi au cele mai putine permisiuni iar administratoriiau permisiuni totale Acest lucru se vede foarte clar si ın diagrama cazurilor de utilizaredin imaginea 41

In continuare vor fi prezentate cazurile de utilizare

1 recomandare cadouri2 adaugare produs3 modificare rol utilizator

16

Figura 41 Digrama cazurilor de utilizare

17

431 Recomandare cadouri

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unutilizator trebuie sa le urmeze pentru a primi recomandari de cadouri pentru un cunoscutsi pentru a efectua o comanda

Actorul principal

Orice utilizator al aplicatiei

Parti interesate si interese

Utilizatorul care doreste sa cumpere un cadou este interesat de a gasi un cadoupotrivit pentru cineva pe care ıl cunoaste

Producatorul care e interesat sa ısi poata vinde produseleUtilizatorul care primeste cadoul fiind interesat sa primeasca un cadou care sa i se

potriveasca si care sa ıi placa

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand utilizatorul porneste aplicatia11 Utilizatorul verifica daca are cont de Facebook si daca are urmeaza pasul 111

daca nu 22111 Utilizatorul se autentifica ın aplicatie cu ajutorul credentialelor de la

Facebook12 Utilizatorul deschide sectiunea de recomandare cadouri13 Utilizatorul completeaza formularul cu datele ce trebuie introduse pentru a primi

recomandari de cadouri pentru un prieten14 Utilizatorul poate fi satisfacut cu recomandarile primite si atunci urmeaza pasul

141 iar daca nu este atunci urmeaza cazul alternativ 23141 Utilizatorul adauga ın cosul de cumparaturi cadouri pe care doreste sa

le cumpere15 Utilizatorul cere sa ısi vada cosul de cumparaturi16 Utilizatorul poate sa se declare multumit de cosul de cumparaturi caz ın care

urmeaza pasul 161 sau poate sa aleaga cazul alternativ 24161 Utilizatorul aproba cosul de cumparaturi si accepta sa se faca comanda

17 Sistemul introduce ın baza de date comanda18 Utilizatorul va putea vedea la sectiunea comenzilor sale noua comanda si statusul

ei19 Sistemul notifica producatorul de aparitia noii comenzi110 Utilizatorul se dezautentifica din aplicatie

18

Use-Case EndUtilizatorul se va deconecta din aplicatie si o va ınchide

Figura 42 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueazaAcest flux poate aparea la orice pas211 Utilizatorul deschide sectiunea de recomandare cadouri212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca utilizatorul nu are cont de Facebook

19

Acest flux poate aparea la pasul 11221 Utilizatorul deschide pagina de Facebook222 Utilizatorul ısi face un cont pe pagina de Facebook si ısi completeaza

date despre el223 Utilizatorul revine la aplicatia de recomandare cadouri si ıncearca din

nou sa se autentifice ın aplicatie224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca utilizatorul nu e multumit de recomandariAcest flux poate aparea la pasul 14231 Utilizatorul sterge din cos cadourile pe care nu le mai doreste si revine

la pagina de recomandari232 Utilizatorul adauga alte cadouri ın cos233 Cazul de utilizare continua de la pasul 141

24 Flux-ul alternativ daca utilizatorul nu e multumit de produsele din cosul decumparaturi

Acest flux poate aparea la pasul 16241 Utilizatorul revine ınapoi la formularul cu introducerea datelor despre

beneficiarul cadoului242 Utilizatorul completeaza din nou datele243 Cazul de utilizare continua de la pasul 13

Preconditii

1 Utilizatorul trebuie sa aiba un cont de Facebook pentru a se putea autentifica ınaplicatie

2 Utilizatorul trebuie sa fie autentificat ın aplicatie pentru a putea face orice actiunedin acest caz de utilizare

3 Utilizatorul trebuie sa deschida sectiunea de recomandare cadouri pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noua comanda este salvata ın baza de date2 Comanda apare ın sectiunea de comenzi a utilizatorului ımpreuna cu statusul ei

curent3 Producatorul este notificat ca are o noua comanda

432 Adaugare produs

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unproducator trebuie sa le urmeze pentru a introduce un nou produs ın aplicatie

20

Actorul principal

Utilizatorii cu rol de producator sau cu rol de administrator

Parti interesate si interese

Producatorul care doreste sa introduca produsul nou ın aplicatie

Utilizatorii simpli care au o mai mare varietate de produse din care sa li se reco-mande cadouri

Figura 43 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo

21

Flux de evenimente

Use-Case Start

Cazul de utilizare ıncepe atunci cand producatorul porneste aplicatia

11 Producatorul verifica daca are cont de Facebook si daca are urmeaza pasul111 daca nu 22

111 Producatorul se autentifica ın aplicatie cu ajutorul credentialelor de laFacebook

12 Producatorul deschide sectiunea de adaugare produs

13 Producatorul completeaza datele necesare despre noul produs ımpreuna cu tipulde persoana si eveniment care i s-ar potrivi

14 Producatorul verifica daca este multumit de datele introduse si daca da urmeazapasul 141 daca nu 23

141 Producatorul efectueaza operatia de adaugare produs

15 Sistemul adauga un nou produs ın baza de date

16 Sistemul notifica producatorul ca noul produs a fost introdus cu succes

17 Producatorul se dezautentifica din aplicatie

Use-Case End

Producatorul se va deconecta din aplicatie si o va ınchide

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Producatorul deschide sectiunea de adaugare produs

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca producatorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Producatorul deschide pagina de Facebook

222 Producatorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Producatorul revine la aplicatia de recomandare cadouri si ıncearca dinnou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca Producatorul nu e multumit de datele introduse despreprodus

Acest flux poate aparea la pasul 14

231 Producatorul sterge datele gresite despre produs

232 Producatorul adauga alte date despre produs

233 Cazul de utilizare continua de la pasul 141

22

Preconditii

1 Producatorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Producatorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Producatorul trebuie sa aiba cont cu rol de rdquoproducatorrdquo sau rdquoadminrdquo pentru aputea face operatia aceasta

4 Producatorul trebuie sa deschida sectiunea de adaugare produs pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noul produs este salvat ın baza de date2 Produsul poate fi adaugat la recomandarile unui utilizator din acel moment

433 Modificare rol utilizator

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unadministrator trebuie sa le urmeze pentru a modifica rolul unui utilizator al aplicatiei

Actorul principal

Un utilizator al aplicatiei care are rol de administrator

Parti interesate si interese

Administratorul care doreste sa modifice rolul unui utilizatorUtilizatorul care doreste sa ısi schimbe rolul

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand administratorul porneste aplicatia11 Administratorul verifica daca are cont de Facebook si daca are urmeaza pasul

111 daca nu 22111 Administratorul se autentifica ın aplicatie cu ajutorul credentialelor de

la Facebook12 Administratorul deschide sectiunea de utilizatori13 Sistemul ıi returneaza administratorului utilizatorii care nu sunt administratori14 Administratorul modifica rolul utilizatorului din utilizator simplu ın producator

sau invers

23

15 Administratorul cere executarea modificarii

16 Sistemul executa modificarea iar ın caz de succes urmeaza pasul 161 si ın cazde eroare pasul 23

161 Sistemul notifica administratorul ca modificarea a fost efectuata cusucces

17 Utilizatorul se dezautentifica din aplicatie

Use-Case End

Administratorul se va deconecta din aplicatie si o va ınchide

Figura 44 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo

24

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Administratorul deschide sectiunea de utilizatori

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca administratorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Administratorul deschide pagina de Facebook

222 Administratorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Administratorul revine la aplicatia de recomandare cadouri si ıncearcadin nou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca sistemul returneaza o eroare la modificarea utilizatorului

Acest flux poate aparea la pasul 16

231 Sistemul returneaza un mesaj de eroare la modificarea utilizatorului

232 Aplicatia afiseaza mesajul de eroare administratorului

233 Cazul de utilizare continua de la pasul 15

Preconditii

1 Administratorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Administratorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Utilizatorul trebuie sa aiba cont cu rol de administrator pentru a putea efectuaorice actiune din acest caz de utilizare

4 Administratorul trebuie sa deschida sectiunea utilizatori pentru a putea ındeplinicerintele din cazul de utilizare

Postconditii

1 Noul rol al utilizatorului este salvat ın baza de date

2 La urmatoarea autentificare a utilizatorului acesta va observa ca interfata si maiprecis meniurile si actiunile care le poate face ıi vor fi diferite

25

44 Perspectiva tehnologica

441 Neo4j

Neo4j 1 este un sistem de gestionare a bazelor de date sub forma de graf dezvoltatde Neo4j Inc Descris de dezvoltatorii sai ca o baza de date tranzactionala compatibilacu ACID Neo4j este cea mai populara baza de date sub forma de graf dupa clasamentulDB-Engines

Baza de date Neo4j (ca si orice alta baza de date sub forma de graf) este foartediferita de o baza de date relationala cum ar fi MS Access SQL Server MySQL etcBazele de date relationale utilizeaza tabele randuri si coloane pentru stocarea datelor

Neo4j nu utilizeaza tabele randuri si coloane pentru stocarea sau prezentarea datelorci noduri si relatii

Neo4j este foarte potrivit pentru stocarea datelor care au multe relatii interconec-tate Acestea sunt de fapt aplicatiile ın care merita sa fie folosite De fapt bazele de datesub forma de graf cum este Neo4j sunt mult mai bune la tratarea datelor interconectatedecat bazele de date relationale

Acest lucru se datoreaza faptului ca modelul sub forma de graf nu necesita de obiceio schema predefinita Nu e nevoie sa se creeze structura bazei de date ınainte de a fiıncarcate datele asa cum se face la o baza de date relationala

Dar principalul motiv pentru care Neo4j este mai bun pentru datele relationalepentru acest tip de aplicatii este modul ın care permite crearea relatiilor Neo4j este con-struit ın jurul relatiilor si atunci nu este nevoie sa se configureze chei primare constrangerichei straine pentru a predetermina nodurile care pot avea o relatie si la ce date Cu Neo4jse poate adauga orice legatura ıntre orice nod ori de cate ori este nevoie

Neo4j are aceste calitati care nu se gasesc nici la celelalte baze de date NoSQLBazele de date non-relationale pe langa cele sub forma de graf sunt cele de tip coloanade tip document de tip cheie-valoare si de tip multi-model Nici unul din aceste tipuri nuau ca principala functionalitate maparea relatiilor si facilitatea interogarilor ıntr-o baza dedate cu multe relatii ıntre entitati

Generarea de recomandari personalizate este unul dintre cele mai frecvente cazuride utilizare a unei baze de date sub forma de graf Unele dintre principalele beneficii aleutilizarii grafurilor pentru a genera recomandari includ

- Performanta Lipsa indexurilor permite calcularea recomandarilor ın timp realasigurand ca recomandarea este ıntotdeauna relevanta si reflecta informatii actualizate

- Model de date Modelul de graf cu proprietati permite combinarea cu usurinta aseturilor de date din mai multe surse

Un alt avantaj al bazelor de date sub forma de graf Neo4j este faptul ca respectatoate principiile din modelul de consistenta ACID

Garantia data de principiile ACID este ca ofera un mediu sigur ın care sa functionezedatele Acronimul ACID reprezinta

1httpsneo4jcomuse-casesreal-time-recommendation-engine

26

bull Atomic Toate operatiile dintr-o tranzactie reusesc sau fiecare operatie este reluatabull Consistent La finalizarea unei tranzactii baza de date este solida din punct de

vedere structuralbull Izolat Tranzactiile nu se lupta una cu cealalta Accesul controversat la date este

moderat de baza de date astfel ıncat tranzactiile par sa se execute succesivbull Durabil Rezultatele aplicarii unei tranzactii sunt permanente chiar si ın cazul unor

defectiuniCand vine vorba de tehnologiile NoSQL cele mai multe baze de date sub forma de

graf (inclusiv Neo4j) utilizeaza un model de consistenta ACID pentru a asigura ca datelesunt stocate ın siguranta si ın mod consecvent

Am ales baza de date sub forma de graf ca optiune pentru stocarea datelor deoarecedin toate lucrarile si articolele citite a fost optiunea cea mai buna pentru un sistem derecomandare Deci acesta se mapeaza perfect pe cerintele functionale ale proiectului Sidin optiunile de baze de date sub forma de graf Noe4j a avut de departe cele mai multeavantaje ea fiind si cea mai utilizata

442 Cypher

Cypher 2 este un limbaj declarativ de interogare pentru bazele de date sub formade graf care permite interogarea si actualizarea rapida a datelor Cypher este un limbajrelativ simplu dar foarte puternic Interogarile foarte complexe ale bazei de date pot fiusor exprimate prin intermediul limbajului Cypher

Este conceput pentru a fi un limbaj de interogare uman Scopul lui principal este dea face interogarile mult mai simple si unele interogari care la bazele de date relationale nuerau posibile le face posibile Constructiile sale se bazeaza pe grafica si pe limba englezalucru care ajuta la scrierea mai intuitiva a interogarilor Este construit pentru a fi maiintuitiv pentru citire si nu neaparat pentru scriere

Cypher se bazeaza pe modelul Graph Property care ın plus fata de elementelegrafice standard ale nodurilor si muchiilor (numite relatii ın Cypher) adauga etichete siproprietati ca si concepte Nodurile pot avea zero sau mai multe etichete ın timp ce fiecarerelatie este de exact un singur tip Nodurile si relatiile au de asemenea zero sau mai multeproprietati

Chypher este limbajul de interogare folosit la bazele de date Neo4j deci este opti-unea implicita atunci cand se alege Neo4j

443 Maven

Maven 3 este un instrument de management software si de ıntelegere a proiectelorsoftware Pe baza conceptului unui model de obiect de proiect (POM) Maven poategestiona construirea raportarea si documentarea unui proiect printr-o informatie centrala

2httpsneo4jcomdevelopercypher-query-language3httpswwwjavatpointcommaven-tutorial

27

Obiectivul principal al lui Maven este acela de a permite unui dezvoltator sa ınte-leaga starea completa a efortului de dezvoltare ın cel mai scurt timp Avantajele Mavensunt

bull instalarea rapida a proiectului fara fisiere buildxml complicate doar un POMbull procesul de construire este standardizat pentru toate proiectelebull usor de ınvatat si de utilizatbull configurarea unui proiect este foarte rapidabull bine documentat

Am ales sa folosesc Maven deoarece este una din cele mai comune optiuni pentru aimporta librariile ıntr-un proiect si este si cel mai documentat Deci mereu cand esti pusın dificultate poti cauta pe internet sugestii

444 Spring Boot

Spring Boot 4 este un framework din cadrul Spring care ofera setari implicite pentruconfigurarea codului si adnotari pentru a lansa rapid proiecte noi ın executie Urmaresteabordarea rdquoConfigurarea defectiunilor vizionaterdquo pentru a evita un numar mare de linii decod pentru configuratii si pentru a ımbunatati procesul de dezvoltare

Avantajele Spring Boot sunt1 Face foarte usoara dezvoltarea de aplicatii bazate pe Spring cu Java sau Groovy2 Reduce timpul de dezvoltare si creste productivitatea3 Evita scrierea multor linii de cod adnotari si configurare XML4 Este foarte usor de integrat cu alte framework-uri din aceasi familie Spring cum ar

fi Spring JDBC Spring ORM Spring Data Spring Security etc5 Urmareste abordarea rdquoConfigurarea implicita a optiunilorrdquo pentru a reduce efortul

pentru dezvoltatori6 Ofera servere HTTP ıncorporate cum ar fi Tomcat Jetty etc pentru a dezvolta si

testa aplicatiile web foarte usor7 Ofera instrumentul CLI (Command Line Interface) pentru a dezvolta si testa apli-

catiile de tip rdquoSpring Bootrdquo (Java sau Groovy) din linia de comanda foarte usor sirapidAm ales ca optiune pentru partea de backend acest framework deoarece simplifica

foarte mult lucrurile Datorita lui un programator poate sa ısi concentreze mai tare energiape a construi proiectul din punctul de vedere al buissness-ului logic nu din punctul devedere al configurarilor necesare

445 Sencha CMD si ExtJS

Sencha CMD 5 este un instrument linie de comanda cross-platform care ofera multesarcini automate ın ciclul complet de viata al unei aplicatii ExtJS de la generarea unui

4httpswwwjavatpointcomspring-boot-tutorial5httpsdocssenchacomcmd

28

nou proiect la lansarea unei aplicatii ın productie

Sencha Cmd ofera o colectie de caracteristici puternice pentru economisirea timpu-lui care functioneaza ımpreuna cu Sencha ExtJS si Sencha Touch

Ext JS 6 este un framework pur JavaScript pentru construirea de aplicatii webinteractive cross-platform utilizand tehnici precum scripting Ajax DHTML si DOM

Avantajele framework-ului ExtJS sunt

1 Documentatia Extjs este foarte cuprinzatoare si bine ıntretinuta2 Aspectul cheie al bibliotecii EXTJS este suportul de tip cross-browser3 Framework-ul ExtJS ofera o multitudine de elemente UI Aceste elemente includ

forme casete de dialog file arbori si tabele4 Framework-ul ExtJS include suport pentru implementarile Ajax5 ExtJS ofera performante excelente Framework-ul este complet orientat spre obiecte

si este extensibil asta pentru ca este scris ın JavaScript

Pentru partea de frontend se foloseste framework-ul ExtJS deoarece are o arhitec-tura ce se mapeaza foarte bine pe proiectele de frontend si anume arhitectura bazata pecomponente Aceasta face ca ın proiect codul sa fie mult mai organizat si procesul dedezvoltare al proiectului sa fie mult mai scurt prin identificarea mai usoara a erorilor

446 Facebook API(Graph API)

Graph API 7 este modul principal de a pune date ın platforma Facebook si de aobtine date din platforma Facebook Este un API bazat pe HTTP pe care aplicatiile ılpot utiliza pentru interogarea datelor pentru a introduce postari noi pentru gestionareaanunturilor sau pentru a ıncarca fotografii

Este denumit Graph API dupa ideea unui rdquograf socialrdquo - o reprezentare sub formade graf a informatiilor de pe Facebook Este compus din

bull noduri - ın esenta obiecte individuale cum ar fi un utilizator o fotografie o paginasau un comentariu

bull muchii - conexiuni ıntre o colectie de obiecte si un singur obiect cum ar fi fotografiilede pe o pagina sau comentariile de la o fotografie

bull campuri - date despre un obiect cum ar fi ziua de nastere a unui utilizator saunumele paginii

De obicei se utilizeaza noduri pentru a obtine date despre un anumit obiect se uti-lizeaza muchii pentru a obtine colectii de obiecte legate de un singur obiect si se utilizeazacampurile pentru a obtine date despre un singur obiect sau mai multe obiecte dintr-ocolectie

Am folosit Facebook API ca solutie pentru a ımbunatati problema de rdquocold startrdquopentru ca este singurul site pe care marea majoritate a oamenilor au cont si salveazalucrurile care le plac Deci se potrivea perfect peste nevoile aplicatiei mele

6httpdocssenchacomextjs6207httpsdevelopersfacebookcomdocsgraph-api

29

447 Git

Git 8 este un sistem de control a versionarii pentru urmarirea modificarilor ın fisierelede pe computer si coordonarea activitatii asupra acestor fisiere ın randul mai multor per-soane Este utilizat ın principal pentru gestionarea codului sursa ın dezvoltarea de softwaredar poate fi folosit pentru a urmari schimbarile ın orice set de fisiere

Avantaje ale Git

bull Modelul distribuit numai ceea ce se doreste se face publicbull Branching-ul si merging-ul sunt usoarebull Fluxul de lucru este flexibilbull Integritatea datelor este asigurata Deoarece GIT utilizeaza arbori SHA1 coruperea

datelor din motive externe poate fi usor detectatabull Rapid Git este foarte rapid chiar si ın comparatie cu alte sisteme de control a

versionarii

Am folosit Git pentru a avea la proiect un back-up ın caz ca se ıntampla ceva cuproiectul salvat pe calculator

45 Arhitectura conceptuala

In figura 45 este prezentata arhitectura conceptuala a sistemului Acesta este ım-partit ın doua mari parti backend-ul si frontend-ul care comunica ıntre ele si ısi trimitinformatii

Se poate observa ca baza de date este de tip graf mai exact Neo4j si comunica cubackend-ul pentru a putea lucra cu datele stocate Backend-ul este structurat pe nivelefiecare cu un diferit rol si care trebuie parcurs pentru a procesa datele din interfata ınbaza de date Cele trei nivele sunt cel de Repository cel de Service si cel ControllerToate interogarile venite din interfata utilizator ajung ın nivelul de Controller Dupa ceinterogarile trec de securitatea sistemului ajung ın nivelul de Service Acolo se proceseazasi se afla partea de logica a aplicatiei Pentru a interactiona cu baza de date din Servicese apeleaza metodele din nivelul de Repository

In continuare backend-ul comunica prin protocolul HTTP cu interfata grafica cucare interactioneaza clientii aplicatiei Interfata este scrisa ın Ext JS si are o parte de Viewsi o parte de Controller care este cea care comunica cu backend-ul

Pentru partea de autentificare sistemul interactioneaza cu API-ul de la Facebookde la care ia dupa autentificare un access token Cu ajutorul acestuia ia dupa aceea datelenecesare pentru a putea crea un profil utilizatorului

8httpsguidesgithubcomintroductiongit-handbook

30

Figura 45 Arhitectura conceptuala

31

Capitolul 5

Proiectare de Detaliu siImplementare

In acest capitol vor fi prezentate detalii de implementare ale sistemului de recoman-dare incluzand o ımpartire al acestuia ın componentele care ıl cuprind

Obiectivul este de a prezenta arhitectura si modul de implementare al aplicatieipe baza datelor descoperite ın studiul bibliografic de la capitolul trei si cu tehnologiilehotarate la capitolul patru Pe langa asta va fi prezentata si structura bazei de date sideciziile luate pentru securitatea aplicatiei

51 Arhitectura sistemului

Din punctul de vedere al arhitecturii aplicatia se poate considera ca este alcatuitadin patru mari componente

1 API-ul de la Facebook2 Aplicatia client care reprezinta interfata grafica a aplicatiei3 Aplicatia server adica backendul aplicatiei si partea ın care se afla partea de rdquobusiness

logicrdquo4 Baza de date

Partea componenta reprezentata de API-ul de la Facebook este doar o componentacu care aplicatia se integreaza si pe care aceasta o foloseste In interactiunea cu ea interfatada o cerere de autentificare apare o fereastra de la Facebook ın care utilizatorul introducecredentialele de la API-ul de Facebook se primeste ınapoi un access token si cu ajutorulacestuia face o cerere pentru a primi datele personale ale utilizatorului pentru creeareaprofilului utilizator

Urmatoarea parte a aplicatiei este interfata utilizator frontend-ul care reprezintapartea cu care utilizatorul interactioneaza si locul unde ıi sunt afisate informatiile

Cererile din interfata ajung ın a treia parte componenta a sistemului partea deserver adica backend-ul aplicatiei Acolo toate cererile sunt citite si procesate iar raspun-

33

sul lor este trimis la interfata utilizator Aceasta este partea care reprezinta rdquogandireardquoaplicatiei Aceea este componenta care face legatura ıntre cererile utilizatorului din inter-fata si datele stocate ın baza de date

Ultima componenta a aplicatiei o reprezinta baza de date care are ca rol sa stochezedatele despre utilizatori produse si comenzi Ea este o baza de date sub forma de grafde tipul Neo4j Acolo se salveaza entitatile aplicatiei sub forma de noduri si dependenteleıntre acestea sub forma de relatii ıntre aceste noduri

Figura 51 Diagrama de rdquodeploymentrdquo

In figura 51 este prezentata diagrama de rdquodeploymentrdquo a sistemului cu cele patrucomponente ale sistemului Aplicatia client comunica cu API-ul de la Facebook prin pro-tocolul securizat HTTPS cu backend-ul prin protocolul HTTP iar backend-ul cu baza dedate prin JDBC

Aplicatia a putut fi ımpartita ın aceste componente separate deoarece fiecare dintreele poate functiona independent de celelalte comunica cu ele doar prin mesaje Din acestmotiv locul unde ruleaza acestea pot sa fie pe servere diferite In plus daca aplicatiaar fi pusa pe servere pentru utilizatori ar putea fi mai multe servere pe care ruleaza ocomponenta si prin rdquoload balancingrdquo sa se trimita cererile ımpartite ıntre ele

Cum astfel componentele nu depind foarte mult unele de altele si pot rula faraa le interesa de unde le sunt trimise cererile este arhitectura cea mai corecta deoarecedefectarea sau o posibila eroare la una din ele nu o influenteaza cu nimic pe o alta Dacatoate ar rula pe acelasi server o eventuala defectiune a acestuia ar ınsemna o defectiune aıntregului sistem Insa daca exista mai multe noduri si se afla pe servere diferite pot doartoate cererile sa fie redirectionate spre un nod care functioneaza si aplicatia sa functionezepentru clienti la fel ca ınainte

34

Un alt avantaj al arhitecturii ar fi faptul ca la o lansare viitoare catre clienti se poatelansa doar componenta la care s-au facut modificari De asemenea aplicatia ar putea aveape viitor si o componenta mobila Iar cum serverul e independent poate fi acelasi serverfolosit de o alta aplicatie client

511 Arhitectura componentei backend

Arhitectura backend-ului este si ea ımpartita ın mai multe pachete pentru o maibuna structura si pentru o cat mai mica dependenta ıntre diversele componente Astfelcuplarea este minima ıntre clase si eventualele modificari ulterioare pot fi mai usor defacut

Serverul a fost implementat ın Java cu ajutorul framework-ului Spring Boot iarmediul de dezvoltare folosit a fost Intellij IDEA

Din punctul de vedere al ımpartirii arhitectura serverului aplicatiei este structurataın patru pachete si o clasa ın afara acestora Acea clasa este rdquomainrdquo-ul aplicatiei este parteacare trebuie rulata pentru a porni serverul Din cauza ca este o aplicatie Spring Boot si nuuna String singura adnotare necesara pentru a sti ca aceea este clasa rdquoradacinardquoa aplicatieieste SpringBootApplication

Cele patru pachete ale serverului sunt1 Cel de domeniu (domain) cu clasele POJO care reprezinta entitatile din baza de

date2 Cel de rdquomagazierdquo (repositories) care este cel care face direct actiunile ın baza de date3 Cel de serviciu (services) ın care se afla partea de logica a ıntregii aplicatii4 Cel de web ın care se afla clasele de rdquocontrollerrdquo

Figura 52 Diagrama de pachete pentru backend

35

Ca si dependente nivelul de web ıl foloseste pe cel de seviciu cel de serviciu ılfoloseste pe cel de rdquomagazierdquo iar clasele din pachetul de domeniu sunt folosite ın toatecelelalte pachete

In continuare voi prezenta pe rand fiecare nivel al serverului adica fiecare pachet

Figura 53 Diagrama de clase pentru pachetul rdquodomainrdquo

36

Nivelul de domeniu (domain) este alcatuit ın primul rand din clasele care suntentitati ın baza de date Acestea sunt reprezentate de toate clasele ce stocheaza informatiidespre utilizatori si despre produse si comenzi Pe langa informatiile personale despre unutilizator de genul numelui email-ului sau data nasterii care sunt salvate ın entitateapersoana se stocheaza despre utilizator ın clase diferite informatii de genul locului undelocuieste locul unde a copilarit locurilor unde a facut scoala locului unde lucreaza sau celmai important pentru aplicatia aceasta lucrurilor care ıi plac In afara acestor informatiidespre utilizatori sunt si clase cu informatiile despre prieteni despre produse sau desprecomenzi

Din cauza faptului ca aplicatia este de tipul unei retele sociale ın care exista prieteniiıntre persoane exista dependente ıntre toate entitatile aplicatiei Acesta este si motivulpentru care am ales baza de date sub forma de graf pe care sa se mapeze toate acesteentitati sub forma de noduri si toate aceste dependente sub forma de relatii

In pachetul de domeniu se afla si trei subpachete Unul dintre ele este pentruclasele folosite pentru a trata erorile aplicatiei In interiorul acestui pachet se afla douaclase pentru eroare si o exceptie cea folosita ın cazul ın care nu se gaseste ceea ce doresteutilizatorul Pe langa asta este clasa care are ca obiect raspunsul dat de sistem ın cazulunei erori la server Aceasta contine ın interiorul sau pe langa codul erorii si detalii despreeroarea trimisa Aceasta lista de detalii e reprezentata de obiectele de tipul celei de-a treiaclase din pachetul acesta

Celelalte doua subpachete aflate ın acest nivel sunt cele care contin clasele specialede cerere sau raspuns care au ajutat la maparea acestora mai bine In multe cazuri nua fost necesara trimiterea la interfata utilizator a tuturor informatiilor stocate despre oentitate si de aceea am ales sa creez ın aceste cazuri un obiect auxiliar care sa fie folositpe post de raspuns

Figura 54 Diagrama de clase pentru pachetul rdquorepositoriesrdquo

37

Cel de-al doilea nivel al aplicatiei backend este cel de rdquomagazierdquo (repositories) carecontine doar interfete de tip rdquoRepositoryrdquo

Aceste interfete sunt cele care fac operatiile directe asupra entitatilor din baza dedate

Unele interfete doar extind interfata care are deja implementate metodele CRUDsi din acest motiv nu au metode suplimentare iar altele au si metode ın plus care au carol sa execute interogari mai complexe asupra bazei de date In acele metode se pot scrieinterogarile ın Cypher pentru a putea primi informatii despre mai multe noduri sau desprerelatiile dintre acestea sau si pentru a returna doar anumite rezultate care ındeplinescanumite conditii In felul acesta a fost implementata si cererea de oferire a recomandarilorIn acel caz sistemul returneaza produsele care au ın descriere unul din lucrurile care se aflaın lista de obiecte sau servicii primite de la Facebook ca ıi plac utilizatorului

Nivelul de rdquoRepositoryrdquo este folosit direct de cel de-al treiea nivel cel de servi-ciu Acesta este nivelul la care se executa logica aplicatiei unde se comanda modul defunctionare al ıntregii aplicatii

Figura 55 Diagrama de clase pentru pachetul rdquoservicesrdquo

Pe acest nivel ajung toate cererile din server dupa ce trec de verificarile de securitateIn acest pachet se afla si clasa de securitate care face verificarile necesare In aceasta clasaexista o metoda ce se apeleaza la prima cerere cea de salvare a datelor de la Facebookdespre utilizator si care codifica id-ul utilizatorului si ıl trimite pe raspuns ınapoi interfeteiPe langa asta ın acea clasa se afla si o metoda care verifica faptul ca id-ul codificat esteal unui utilizator cu rol corespunzator pentru a face acea cerere

In plus ın acest pachet se afla si toate celelalte clase care fac diverse operatii pedatele din baza de date si dau raspunsuri cererilor din interfata Aici se afla logica care

38

comanda actiunile asupra utilizatorilor asupra prietenilor acestora asupra produselor siasupra comenzilor

Ultima clasa a acestui nivel este cea care se ocupa de trimiterea de email-uri Incazul ın care se face o noua comanda de catre un utilizator toti producatorii produselor depe comanda sunt notificati despre produsele lor pe care le doreste utilizatorul Din serviciulde comanda se apeleaza serviciul de email pentru fiecare producator din lista celor care auproduse care se afla pe lista comenzii utilizatorului

Ultimul si cel mai aproape de interfata utilizator este nivelul de web Acolo se aflatoate clasele de rdquoControllerrdquo ale aplicatiei server

Figura 56 Diagrama de clase pentru pachetul rdquowebrdquo

Toate cererile din interfata utilizator ıncearca sa se mapeze pe rutele declarate ınclase pentru a fi procesate ın metoda corespunzatoare Toata aceasta parte este foarteusor de implementat si mai ales foarte lizibil pentru programatori datorita adnotarilor dinJava Cu ajutorul acestora trebuie doar specificat care este numele URL-ului cererii careeste tipul de obiect asteptat si daca se trimite ca rdquoquery stringrdquo pe URL sau ın interiorulcorpului cererii si tipul raspunsului Pentru fiecare cerere care nu este apelata ın parteaneautentificata a utilizatorului primul lucru care se apeleaza este metoda de securitatepentru a verifica rolul si id-ul utilizatorului Daca din punctul de vedere al securitatii totuleste ın regula se apeleaza metoda corespunzatoare din pachetul de serviciu

39

O singura clasa este diferita de restul ın pachetul de controller si aceea este clasa deeroare Acolo se mapeaza erorile aparute ın timpul cererii si se trimite ınapoi ın interfatagrafica un raspuns cu cod de eroare specific nu numai 500 Generic Application Exceptioncum ar trimite fara aceasta clasa si cu detalii despre motivul aparitiei erorii

Datorita folosirii adnotarilor din java nu a fost necesara folosirea unor rdquodesignpatternrdquo-uri ın sistem De exemplu pentru a folosi ın nivelul de web ceva din pachetulde servicii trebuia doar acel obiect sa aiba adnotarea Autowired si se ınlocuieste atatfolosirea rdquodesign patternrdquo-ului Singleton cat si a celui de Factory Acel obiect nu trebuiecreat sau initializat se face asta implicit datorita adnotarii si de asemenea este folositapeste tot aceeasi instanta

In concluzie toate cererile venite din interfata grafica ajung ın nivelul de rdquocontrollerrdquode unde sunt trimise la cel de rdquoservicerdquopentru a fi procesate si facute eventualele modificarinecesare ın baza de date ca apoi raspunsul sa fie trimis ınapoi spre aplicatia client pentruafisare

512 Arhitectura componentei frontend

A doua componenta implementata a sistemului este aplicatia client frontend-ulAceasta a fost scrisa ın Java Script cu ajutorul framework-ului Ext JS compilarea

se face cu ajutorul Sencha CMD si mediul de implementare a fost IntelliJ IdeaCu ajutorul framework-ului Ext JS se scriu componente care apoi se initializeaza

unele pe altele Aplicatia porneste cu fisierul Applicationjs care este un fel de rdquomainrdquopentru aplicatie Aceasta initializeaza alte componente care la randul lor includ altecomponente si tot asa Structura poate fi foarte usor comparata cu una arborescenta dinacest punct de vedere

Framework-ul a fost creat sa functioneze ın felul acesta pentru ca scopul componen-telor este sa fie scrise ın asa fel ıncat sa poata pe viitor sa fie utilizate din nou Una dindorintele majore ın programare tot timpul este de a se scrie cod ıntr-o maniera ın care safie cat mai reutilizabil Iar framework-ul Ext JS exact asta ıncearca

Arhitectura aplicatiei client se gaseste ın figura 57 si este la randul ei ımpartita ınpachete ca si cea de server Similar cu pachetul de rdquodomainrdquo de la aplicatia de backendeste pachetul rdquomodelrdquo al interfetei utilizator Aici sunt rdquoclaserdquo care sunt simple POJO sicare sunt apoi folosite ın nivelele urmatoare Sunt mai putine decat clasele din rdquostorerdquodeoarece daca raspunsul de la server nu trebuie procesat nu sunt necesare se pot mapadirect obiectele din rdquostorerdquo pe componentele interfetei utilizator

Urmatorul nivel este cel pe care se afla clasele de rdquostorerdquo Acestea sunt cele careexecuta cererea spre backend si face legatura ıntre client si server Daca are o clasa derdquomodelrdquodeclarata atunci populeaza acel obiect cu datele primite de la server iar ın cazul ıncare nu este declarat un model se trimit datele exact asa cum s-au primit la nivelul urmatorde rdquoviewrdquo Acest nivel seamana din punct de vedere al functiei cu cel de rdquorepositoryrdquo de laaplicatia server deoarece ambele au rol de legatura Aceea facea legatura ıntre aplicatiesi baza de date si aceasta face legatura ıntre aplicatia client si aplicatia server

40

Figura 57 Diagrama de clase pentru aplicatia web

Cel de-al treilea pachet al aplicatiei este cel de rdquoviewrdquo In acest pachet se afla claselecare alcatuiesc partea vizuala a aplicatiei La randul ei si aceasta este alcatuita tot dincomponente Aplicatia deschide ın primul rand Main-ul care determina aparitia paginii deHome si afisarea ın meniu a optiunilor posibile ın functie de autentificare si rol Clasele deaici se executa de fapt la deschiderea aplicatiei fiind rdquosingle page applicationrdquo si tot atuncise ıncarca pe pagina componentele Ca si arhitectura a pachetului acesta este ımpartit larandul sau ın subpachete Pentru o mai buna organizare exista patru subpachete cateunul pentru fiecare tip de utilizator In felul acesta toate rdquoviewrdquo-urile care sunt specificeunui utilizator cu un anumit rol se afla ın acelasi subpachet

Cele patru subpachete existente ın pachetul rdquoviewrdquo sunt

1 Pachetul rdquomainrdquo care cuprinde rdquoviewrdquo-urile care se afla ın partea neautentificata aaplicatiei

2 Pachetul rdquoclientrdquo continand rdquoviewrdquo-urile pe care le poate accesa un utilizator simplu3 Pachetul rdquoproducerrdquo specific actiunilor unui utilizator care are rol de producator4 Pachetul rdquoadminrdquo care contine toate rdquoviewrdquo-urile care ıi apar unui utilizator care este

administrator al aplicatiei

Ultimul pachet si nivel al aplicatiei client este cel de rdquocontrollerrdquo In acest pachet

41

se afla clasele care fac actiunile din interfata grafica In timp ce pachetul rdquoviewrdquo continedoar partea grafica a aplicatiei adica modul ın care aceasta trebuie sa arate pachetulrdquocontrollerrdquo contine actiunea acestora modul ın care aplicatia trebuie sa functioneze

Ca si arhitectura si acest pachet a fost ımpartit la randul lui tot ın cele patrusubpachete ca si pachetul rdquoviewrdquo adica rdquomainrdquo rdquoclientrdquo rdquoproducerrdquo si rdquoadminrdquo In pluspentru a fi usor de gasit ce clasa de rdquocontrollerrdquo apartine carui rdquoviewrdquo am ales ca cele douasa aiba acelasi nume In felul acesta daca se doreste sa se gaseasca actiunile unui rdquoviewrdquose poate cauta dupa o clasa cu acelasi nume ın pachetul rdquocontrollerrdquo Numarul claselor dinacest pachet este mai mic decat cel al claselor din rdquoviewrdquo deoarece nu toate paginile dininterfata au actiuni suplimentare Daca singura actiune este ıncarcarea paginii cu date dela server adica doar o actiune simpla de GET datele se ıncarca cu ajutorul rdquostorerdquo-ului laıncarcarea paginii si nu este necesara nici o actiune suplimentara Paginile pe care se potface si actiuni de alt gen sau se deschid noi ferestre au nevoie de clase de rdquocontrollerrdquo

In concluzie arhitectura aplicatiei client este una bazata pe componente care ıncearcasa foloseasca cat mai multe clase reutilizabile

52 Structura bazei de date

Baza de date a aplicatiei este de tip graf de tipul Neo4j Pentru utilizare exista unprogram numit Neo4j ce trebuie instalat Acest program are si o interfata grafica ın carese pot vizualiza datele sub forma grafica si ın care se pot scrie de asemenea si interogariın limbajul acestei baze de date adica Cypher

Fiind o baza de date sub forma de graf datele stocate sunt salvate ın structurade date sub forma de noduri si relatii Entitatile din pachetul de domeniu din aplicatiabackend se gasesc ın baza de date sub forma unor noduri iar dependentele dintre nodurise mapeaza ın baza de date sub forma unor relatii Un element diferit fata de alte tipuride baze de date este faptul ca pe relatiile dintre noduri se pot salva atribute cum este ınaplicatie cazul pentru prieteniile dintre persoane In cazul acestora pe relatia dintre nodurise salveaza daca prietenia a fost sau nu acceptata

Pentru fiecare clasa POJO din aplicatia server clasa ce are doar metodele get si setsi se afla ın pachetul domain exista cate un tip de nod diferit ın baza de date cum estesi marcat ın diferite culori ın figura 58 Fiecare tip de nod are atributele proprii care potlua valori sau pot fi nule Iar fiecare obiect din Java reprezinta un nod diferit ın baza dedate

Neo4j a fost cea mai buna optiune pentru baza de date pentru ca aplicatia poate ficonsiderata o retea sociala Acest lucru se datoreaza relatiilor de prietenie dintre persoanesi a multiplelor relatii ıntre noduri Toate nodurile se afla ın acceasi componenta conexadeci nu exista noduri izolate care sa nu aiba nici o legatura cu nici un alt nod

Datorita acestei structuri a bazei de date este posibila implementarea cererii derecomandare ca o simpla interogare ın baza de date aceasta fiind cea mai simpla metodade implementare a unui sistem de genul acesta una mult mai complexa ar fi fost un

42

algoritm de ınvatare care sa ınvete tipare ale utilizatorilor si sa recomande cadouri pe bazaacestor informatii

Figura 58 Diagrama bazei de date pentru doi utilizatori

Un alt avantaj al acestui tip de baza de date este faptul ca datele nu sunt duplicateın baza de date Spre exemplu daca mai multi utilizatori au ca locatie acelasi oras nu secreaza cate un nod cu acea locatie de mai multe ori ci acel unic nod va avea cate o relatiecu fiecare utilizator care are ca locatie acel oras

In concluzie structura bazei de date a fost aleasa ın acest fel datorita tipului apli-catiei adica asemanatoare cu o retea sociala si datorita implementarii simple a unui sistemde recomandare pe o asemenea baza de date

53 Fluxul pentru diferite operatii

Pentru aplicatie cele mai importante cazuri de utilizare sunt salvarea informati-ilor despre utilizator primite de la Facebook pentru crearea unui profil si recomandareacadourilor pentru un utilizator al aplicatiei Din aceasta cauza cele doua cazuri de utilizarevor fi prezentate mai ın detaliu ın continuare

43

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 17: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

Ofera de asemenea si sugestii de cadouri Un om cand navigheaza pe site poate sase uite la cadouri ın categoriile Popular Holidays Birthdays Drinks Eats Meals BackTo School Get Fresh Health Fitness Going Out Getaway Top Shelf For The HipsterClothes For Her Clothes For Him Congratulations Expecting Activities si Custom

Un alt site cu cadouri este Etsy 5 cu imaginea 35 care arata site-ul Etsy este o piataglobala pentru bunuri unice si creative Pe pietele lor milioane de oameni din ıntreagalume se conecteaza atat online cat si offline pentru a face vinde si cumpara bunuri uniceEtsy ofera de asemenea o gama larga de servicii si instrumente de vanzari care ajutaıntreprinzatorii creativi sa ınceapa sa gestioneze si sa-si masoare afacerile Misiunea loreste sa pastreze comertul uman Deci de fapt acest site sprijina mai mult producatoriinu comerciantii De asemenea este mai mult axat pe bunuri unice si lucruri rdquounicerdquo Ca sicelelalte site-uri de genul acesta are o modalitate de a cauta lucrurile mai inteligent maispecializat pe ceea ce te intereseaza Categoriile de cautare sunt Jewelry AccessoriesClothing Shoes Home Living Wedding Party Toys Entertainment Art CollectablesCraft Supplies Tools si Vintage

Figura 35 Site web Etsy

Cel de-al treilea site care ofera servicii asemanatoare este Gifts 6 prezentat ın figura36 Acesta se focuseaza pe cadouri pentru diverse ocazii cum ar fi zilele de nastereCraciun diverse aniversari si alte evenimente la care se cumpara cadouri Pentru parteade recomandare se ofera posibilitatea de a efectua un test despre acel om caruia dorestisa ıi cumperi cadoul care are ca scop ıncadrarea omului respectiv ıntr-un profil si apoi

5httpswwwetsycom6httpswwwgiftscom

12

alegerea unor sugestii ce s-ar potrivi unei persoane cu acel tip de personalitate O primaıntrebare se refera la genul persoanei si ıntrebarea este daca cadoul este pentru o femeieun barbat o fetita sau un baietel Cea de-a doua ıntrebare se refera la marja de varsta ıncare se ıncadreaza acel om de exemplu pentru barbat optiunile sunt adolescent barbat ınjur de 30 de ani sau barbat ın varsta Cea de-a treia ıntrebare se refera la personalitateaomului Mai exact se fac sugestii pentru tipuri de lucruri ce i-ar putea placea unui omcare are trasaturile descrise ın primele doua ıntrebari De exemplu la barbati ın jur de30 de ani optiunile sunt ıi place sportul ıi place natura e aventurier ıi place golful ıiplace sa faca gratare sa serveasca bauturi sa gateasca sa animeze ıi place sa se ımbraceelegant este sef e entuziasmat de bere sau e un fan al sporturilor Iar ın final ın functiede raspunsurile date la ıntrebari se afiseaza sugestii de cadouri care se potrivesc oamenilorcu acel tip de personalitate

Figura 36 Site web Gifts

Nordstrom 7 care este prezentat ın imaginea 37 are o abordare similara avand pesite o multime de optiuni de filtrare a cadourilor Se pot cauta ın acest site cadouri pentrubebelusi cadouri de Craciun bijuterii pentru femei optiunile sunt multiple Acest lucruofera utilizatorilor sugestii pentru a le fi mai usor sa ıncadreze aceasta persoana ıntr-unanumit tip Iar dupa alegerea categoriei toate sugestiile de cadouri oferite de catre sitese ıncadreaza ın acel tip Ca avantaj al acestui site este ca ei ofera si serviciul de livrareal cadoului dupa cumparare oriunde ın lume Un dezavantaj al multor site-uri de genulacesta este ca ofera livrare doar ın zona sa apropiata

7httpsshopnordstromcomcgifts

13

Figura 37 Site web Nordstrom

14

Capitolul 4

Analiza si Fundamentare Teoretica

In acest capitol vor fi prezentate cerintele functionale ale lucrarii ımpreuna cucerintele non-functionale ale acesteia De asemenea va fi prezentata diagrama cazurilor deutilizare si vor fi prezentate mai ın detaliu cazurile de utilizare principale ale aplicatiei Incontinuare se va prezenta perspectiva tehnologica a proiectului si se vor explica deciziiletehnologice luate In final se va prezenta diagrama conceptuala a aplicatiei

41 Cerinte functionale

bull Posibilitatea autentificarii ın aplicatie si crearii unui profil propriu din care se potutiliza informatii si cu ajutorul caruia utilizatorul poate fi ıncadrat ıntr-un profil

bull Utilizatorii pot crea prietenii ca ıntr-o retea de socializare pentru a putea afla infor-matii despre prieteni si pentru a li se putea recomanda cadouri pentru acestia

bull Cu ajutorul informatiilor de la Facebook un utilizator poate fi notificat dinainte caurmeaza ziua de nastere a unuia din prietenii lui si sa i se ofere mai multe variantede cadouri potrivite pentru acesta Aceasta informatie o primeste cu suficient timpınainte pentru a nu fi surprins fara un cadou De la Facebook pe langa informatiiledespre data zilei de nastere sunt importante si varsta sau lucrurile care ıi plac uti-lizatorului Toate acestea ajuta la crearea profilului utilizatorului pe baza caruia serecomanda dupa aceea cadourile

bull De asemenea sistemul poate recomanda si un cadou pentru alt tip de evenimentdecat zi de nastere de genul cadou de Craciun cadou de nunta cadou pentru unnou-nascut etc

bull In aplicatie vor fi adaugate si diferite produse iar pentru a face mai usoara cumparareade cadouri se va putea face si comanda pe internet In momentul ın care un utilizatorface o noua comanda producatorii produselor comandate sunt ınstiintati de existentaacestei noi comenzi

15

bull Pentru persoanele la care pe profilul de Facebook este insuficient completat saupentru a putea cumpara cadouri pentru o persoana care nu are Facebook sau nuare cont ın aceasta aplicatie si despre care ın acest fel nu se cunosc nici un felde informatii se vor putea filtra cautarile pentru cadou printr-o serie de ıntrebaristandard Aceste ıntrebari vor putea creea un rdquomini-profilrdquo pentru acea persoanapentru ca sistemul sa poata recomanda cadouri

42 Cerinte non-functionale

bull Securitate sistemul nu raspunde cererilor decat atunci cand utilizatorul a fost au-tentificat ın aplicatie si are rolul necesar pentru a face acea cerere

bull Portabilitate aplicatia nu depinde de sistemul de operare pe care ruleaza De aseme-nea nu e dependenta de browserul folosit de utilizator

bull Disponibilitate sistemul ramane stabil ın fata erorilor si functioneaza la fel si dupaaparitia unei erori

bull Extensibilitate sistemul permite adaugarea sau modificarea unor componente atuncicand cerintele aplicatiei se modifica Pe langa asta e flexibila unor dezvoltari ulte-rioare

43 Cazuri de utilizare

In aceasta sectiune se vor prezenta actorii aplicatiei diagrama cazurilor de utilizaresi vor fi descrise cazurile de utilizare de baza ale fiecarui actor

Ca si actori aplicatia are patru tipuri de utilizatori

bull utilizator anonimbull clientbull producatorbull administrator

Aplicatia este conceputa ın asa fel ıncat ıntre actori este o relatie de mostenire Acestlucru presupune ca un actor are posibilitatea de a efectua tot ce putea cel dinaintea lui siceva ın plus Deci utilizatorii anonimi au cele mai putine permisiuni iar administratoriiau permisiuni totale Acest lucru se vede foarte clar si ın diagrama cazurilor de utilizaredin imaginea 41

In continuare vor fi prezentate cazurile de utilizare

1 recomandare cadouri2 adaugare produs3 modificare rol utilizator

16

Figura 41 Digrama cazurilor de utilizare

17

431 Recomandare cadouri

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unutilizator trebuie sa le urmeze pentru a primi recomandari de cadouri pentru un cunoscutsi pentru a efectua o comanda

Actorul principal

Orice utilizator al aplicatiei

Parti interesate si interese

Utilizatorul care doreste sa cumpere un cadou este interesat de a gasi un cadoupotrivit pentru cineva pe care ıl cunoaste

Producatorul care e interesat sa ısi poata vinde produseleUtilizatorul care primeste cadoul fiind interesat sa primeasca un cadou care sa i se

potriveasca si care sa ıi placa

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand utilizatorul porneste aplicatia11 Utilizatorul verifica daca are cont de Facebook si daca are urmeaza pasul 111

daca nu 22111 Utilizatorul se autentifica ın aplicatie cu ajutorul credentialelor de la

Facebook12 Utilizatorul deschide sectiunea de recomandare cadouri13 Utilizatorul completeaza formularul cu datele ce trebuie introduse pentru a primi

recomandari de cadouri pentru un prieten14 Utilizatorul poate fi satisfacut cu recomandarile primite si atunci urmeaza pasul

141 iar daca nu este atunci urmeaza cazul alternativ 23141 Utilizatorul adauga ın cosul de cumparaturi cadouri pe care doreste sa

le cumpere15 Utilizatorul cere sa ısi vada cosul de cumparaturi16 Utilizatorul poate sa se declare multumit de cosul de cumparaturi caz ın care

urmeaza pasul 161 sau poate sa aleaga cazul alternativ 24161 Utilizatorul aproba cosul de cumparaturi si accepta sa se faca comanda

17 Sistemul introduce ın baza de date comanda18 Utilizatorul va putea vedea la sectiunea comenzilor sale noua comanda si statusul

ei19 Sistemul notifica producatorul de aparitia noii comenzi110 Utilizatorul se dezautentifica din aplicatie

18

Use-Case EndUtilizatorul se va deconecta din aplicatie si o va ınchide

Figura 42 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueazaAcest flux poate aparea la orice pas211 Utilizatorul deschide sectiunea de recomandare cadouri212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca utilizatorul nu are cont de Facebook

19

Acest flux poate aparea la pasul 11221 Utilizatorul deschide pagina de Facebook222 Utilizatorul ısi face un cont pe pagina de Facebook si ısi completeaza

date despre el223 Utilizatorul revine la aplicatia de recomandare cadouri si ıncearca din

nou sa se autentifice ın aplicatie224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca utilizatorul nu e multumit de recomandariAcest flux poate aparea la pasul 14231 Utilizatorul sterge din cos cadourile pe care nu le mai doreste si revine

la pagina de recomandari232 Utilizatorul adauga alte cadouri ın cos233 Cazul de utilizare continua de la pasul 141

24 Flux-ul alternativ daca utilizatorul nu e multumit de produsele din cosul decumparaturi

Acest flux poate aparea la pasul 16241 Utilizatorul revine ınapoi la formularul cu introducerea datelor despre

beneficiarul cadoului242 Utilizatorul completeaza din nou datele243 Cazul de utilizare continua de la pasul 13

Preconditii

1 Utilizatorul trebuie sa aiba un cont de Facebook pentru a se putea autentifica ınaplicatie

2 Utilizatorul trebuie sa fie autentificat ın aplicatie pentru a putea face orice actiunedin acest caz de utilizare

3 Utilizatorul trebuie sa deschida sectiunea de recomandare cadouri pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noua comanda este salvata ın baza de date2 Comanda apare ın sectiunea de comenzi a utilizatorului ımpreuna cu statusul ei

curent3 Producatorul este notificat ca are o noua comanda

432 Adaugare produs

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unproducator trebuie sa le urmeze pentru a introduce un nou produs ın aplicatie

20

Actorul principal

Utilizatorii cu rol de producator sau cu rol de administrator

Parti interesate si interese

Producatorul care doreste sa introduca produsul nou ın aplicatie

Utilizatorii simpli care au o mai mare varietate de produse din care sa li se reco-mande cadouri

Figura 43 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo

21

Flux de evenimente

Use-Case Start

Cazul de utilizare ıncepe atunci cand producatorul porneste aplicatia

11 Producatorul verifica daca are cont de Facebook si daca are urmeaza pasul111 daca nu 22

111 Producatorul se autentifica ın aplicatie cu ajutorul credentialelor de laFacebook

12 Producatorul deschide sectiunea de adaugare produs

13 Producatorul completeaza datele necesare despre noul produs ımpreuna cu tipulde persoana si eveniment care i s-ar potrivi

14 Producatorul verifica daca este multumit de datele introduse si daca da urmeazapasul 141 daca nu 23

141 Producatorul efectueaza operatia de adaugare produs

15 Sistemul adauga un nou produs ın baza de date

16 Sistemul notifica producatorul ca noul produs a fost introdus cu succes

17 Producatorul se dezautentifica din aplicatie

Use-Case End

Producatorul se va deconecta din aplicatie si o va ınchide

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Producatorul deschide sectiunea de adaugare produs

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca producatorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Producatorul deschide pagina de Facebook

222 Producatorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Producatorul revine la aplicatia de recomandare cadouri si ıncearca dinnou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca Producatorul nu e multumit de datele introduse despreprodus

Acest flux poate aparea la pasul 14

231 Producatorul sterge datele gresite despre produs

232 Producatorul adauga alte date despre produs

233 Cazul de utilizare continua de la pasul 141

22

Preconditii

1 Producatorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Producatorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Producatorul trebuie sa aiba cont cu rol de rdquoproducatorrdquo sau rdquoadminrdquo pentru aputea face operatia aceasta

4 Producatorul trebuie sa deschida sectiunea de adaugare produs pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noul produs este salvat ın baza de date2 Produsul poate fi adaugat la recomandarile unui utilizator din acel moment

433 Modificare rol utilizator

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unadministrator trebuie sa le urmeze pentru a modifica rolul unui utilizator al aplicatiei

Actorul principal

Un utilizator al aplicatiei care are rol de administrator

Parti interesate si interese

Administratorul care doreste sa modifice rolul unui utilizatorUtilizatorul care doreste sa ısi schimbe rolul

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand administratorul porneste aplicatia11 Administratorul verifica daca are cont de Facebook si daca are urmeaza pasul

111 daca nu 22111 Administratorul se autentifica ın aplicatie cu ajutorul credentialelor de

la Facebook12 Administratorul deschide sectiunea de utilizatori13 Sistemul ıi returneaza administratorului utilizatorii care nu sunt administratori14 Administratorul modifica rolul utilizatorului din utilizator simplu ın producator

sau invers

23

15 Administratorul cere executarea modificarii

16 Sistemul executa modificarea iar ın caz de succes urmeaza pasul 161 si ın cazde eroare pasul 23

161 Sistemul notifica administratorul ca modificarea a fost efectuata cusucces

17 Utilizatorul se dezautentifica din aplicatie

Use-Case End

Administratorul se va deconecta din aplicatie si o va ınchide

Figura 44 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo

24

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Administratorul deschide sectiunea de utilizatori

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca administratorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Administratorul deschide pagina de Facebook

222 Administratorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Administratorul revine la aplicatia de recomandare cadouri si ıncearcadin nou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca sistemul returneaza o eroare la modificarea utilizatorului

Acest flux poate aparea la pasul 16

231 Sistemul returneaza un mesaj de eroare la modificarea utilizatorului

232 Aplicatia afiseaza mesajul de eroare administratorului

233 Cazul de utilizare continua de la pasul 15

Preconditii

1 Administratorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Administratorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Utilizatorul trebuie sa aiba cont cu rol de administrator pentru a putea efectuaorice actiune din acest caz de utilizare

4 Administratorul trebuie sa deschida sectiunea utilizatori pentru a putea ındeplinicerintele din cazul de utilizare

Postconditii

1 Noul rol al utilizatorului este salvat ın baza de date

2 La urmatoarea autentificare a utilizatorului acesta va observa ca interfata si maiprecis meniurile si actiunile care le poate face ıi vor fi diferite

25

44 Perspectiva tehnologica

441 Neo4j

Neo4j 1 este un sistem de gestionare a bazelor de date sub forma de graf dezvoltatde Neo4j Inc Descris de dezvoltatorii sai ca o baza de date tranzactionala compatibilacu ACID Neo4j este cea mai populara baza de date sub forma de graf dupa clasamentulDB-Engines

Baza de date Neo4j (ca si orice alta baza de date sub forma de graf) este foartediferita de o baza de date relationala cum ar fi MS Access SQL Server MySQL etcBazele de date relationale utilizeaza tabele randuri si coloane pentru stocarea datelor

Neo4j nu utilizeaza tabele randuri si coloane pentru stocarea sau prezentarea datelorci noduri si relatii

Neo4j este foarte potrivit pentru stocarea datelor care au multe relatii interconec-tate Acestea sunt de fapt aplicatiile ın care merita sa fie folosite De fapt bazele de datesub forma de graf cum este Neo4j sunt mult mai bune la tratarea datelor interconectatedecat bazele de date relationale

Acest lucru se datoreaza faptului ca modelul sub forma de graf nu necesita de obiceio schema predefinita Nu e nevoie sa se creeze structura bazei de date ınainte de a fiıncarcate datele asa cum se face la o baza de date relationala

Dar principalul motiv pentru care Neo4j este mai bun pentru datele relationalepentru acest tip de aplicatii este modul ın care permite crearea relatiilor Neo4j este con-struit ın jurul relatiilor si atunci nu este nevoie sa se configureze chei primare constrangerichei straine pentru a predetermina nodurile care pot avea o relatie si la ce date Cu Neo4jse poate adauga orice legatura ıntre orice nod ori de cate ori este nevoie

Neo4j are aceste calitati care nu se gasesc nici la celelalte baze de date NoSQLBazele de date non-relationale pe langa cele sub forma de graf sunt cele de tip coloanade tip document de tip cheie-valoare si de tip multi-model Nici unul din aceste tipuri nuau ca principala functionalitate maparea relatiilor si facilitatea interogarilor ıntr-o baza dedate cu multe relatii ıntre entitati

Generarea de recomandari personalizate este unul dintre cele mai frecvente cazuride utilizare a unei baze de date sub forma de graf Unele dintre principalele beneficii aleutilizarii grafurilor pentru a genera recomandari includ

- Performanta Lipsa indexurilor permite calcularea recomandarilor ın timp realasigurand ca recomandarea este ıntotdeauna relevanta si reflecta informatii actualizate

- Model de date Modelul de graf cu proprietati permite combinarea cu usurinta aseturilor de date din mai multe surse

Un alt avantaj al bazelor de date sub forma de graf Neo4j este faptul ca respectatoate principiile din modelul de consistenta ACID

Garantia data de principiile ACID este ca ofera un mediu sigur ın care sa functionezedatele Acronimul ACID reprezinta

1httpsneo4jcomuse-casesreal-time-recommendation-engine

26

bull Atomic Toate operatiile dintr-o tranzactie reusesc sau fiecare operatie este reluatabull Consistent La finalizarea unei tranzactii baza de date este solida din punct de

vedere structuralbull Izolat Tranzactiile nu se lupta una cu cealalta Accesul controversat la date este

moderat de baza de date astfel ıncat tranzactiile par sa se execute succesivbull Durabil Rezultatele aplicarii unei tranzactii sunt permanente chiar si ın cazul unor

defectiuniCand vine vorba de tehnologiile NoSQL cele mai multe baze de date sub forma de

graf (inclusiv Neo4j) utilizeaza un model de consistenta ACID pentru a asigura ca datelesunt stocate ın siguranta si ın mod consecvent

Am ales baza de date sub forma de graf ca optiune pentru stocarea datelor deoarecedin toate lucrarile si articolele citite a fost optiunea cea mai buna pentru un sistem derecomandare Deci acesta se mapeaza perfect pe cerintele functionale ale proiectului Sidin optiunile de baze de date sub forma de graf Noe4j a avut de departe cele mai multeavantaje ea fiind si cea mai utilizata

442 Cypher

Cypher 2 este un limbaj declarativ de interogare pentru bazele de date sub formade graf care permite interogarea si actualizarea rapida a datelor Cypher este un limbajrelativ simplu dar foarte puternic Interogarile foarte complexe ale bazei de date pot fiusor exprimate prin intermediul limbajului Cypher

Este conceput pentru a fi un limbaj de interogare uman Scopul lui principal este dea face interogarile mult mai simple si unele interogari care la bazele de date relationale nuerau posibile le face posibile Constructiile sale se bazeaza pe grafica si pe limba englezalucru care ajuta la scrierea mai intuitiva a interogarilor Este construit pentru a fi maiintuitiv pentru citire si nu neaparat pentru scriere

Cypher se bazeaza pe modelul Graph Property care ın plus fata de elementelegrafice standard ale nodurilor si muchiilor (numite relatii ın Cypher) adauga etichete siproprietati ca si concepte Nodurile pot avea zero sau mai multe etichete ın timp ce fiecarerelatie este de exact un singur tip Nodurile si relatiile au de asemenea zero sau mai multeproprietati

Chypher este limbajul de interogare folosit la bazele de date Neo4j deci este opti-unea implicita atunci cand se alege Neo4j

443 Maven

Maven 3 este un instrument de management software si de ıntelegere a proiectelorsoftware Pe baza conceptului unui model de obiect de proiect (POM) Maven poategestiona construirea raportarea si documentarea unui proiect printr-o informatie centrala

2httpsneo4jcomdevelopercypher-query-language3httpswwwjavatpointcommaven-tutorial

27

Obiectivul principal al lui Maven este acela de a permite unui dezvoltator sa ınte-leaga starea completa a efortului de dezvoltare ın cel mai scurt timp Avantajele Mavensunt

bull instalarea rapida a proiectului fara fisiere buildxml complicate doar un POMbull procesul de construire este standardizat pentru toate proiectelebull usor de ınvatat si de utilizatbull configurarea unui proiect este foarte rapidabull bine documentat

Am ales sa folosesc Maven deoarece este una din cele mai comune optiuni pentru aimporta librariile ıntr-un proiect si este si cel mai documentat Deci mereu cand esti pusın dificultate poti cauta pe internet sugestii

444 Spring Boot

Spring Boot 4 este un framework din cadrul Spring care ofera setari implicite pentruconfigurarea codului si adnotari pentru a lansa rapid proiecte noi ın executie Urmaresteabordarea rdquoConfigurarea defectiunilor vizionaterdquo pentru a evita un numar mare de linii decod pentru configuratii si pentru a ımbunatati procesul de dezvoltare

Avantajele Spring Boot sunt1 Face foarte usoara dezvoltarea de aplicatii bazate pe Spring cu Java sau Groovy2 Reduce timpul de dezvoltare si creste productivitatea3 Evita scrierea multor linii de cod adnotari si configurare XML4 Este foarte usor de integrat cu alte framework-uri din aceasi familie Spring cum ar

fi Spring JDBC Spring ORM Spring Data Spring Security etc5 Urmareste abordarea rdquoConfigurarea implicita a optiunilorrdquo pentru a reduce efortul

pentru dezvoltatori6 Ofera servere HTTP ıncorporate cum ar fi Tomcat Jetty etc pentru a dezvolta si

testa aplicatiile web foarte usor7 Ofera instrumentul CLI (Command Line Interface) pentru a dezvolta si testa apli-

catiile de tip rdquoSpring Bootrdquo (Java sau Groovy) din linia de comanda foarte usor sirapidAm ales ca optiune pentru partea de backend acest framework deoarece simplifica

foarte mult lucrurile Datorita lui un programator poate sa ısi concentreze mai tare energiape a construi proiectul din punctul de vedere al buissness-ului logic nu din punctul devedere al configurarilor necesare

445 Sencha CMD si ExtJS

Sencha CMD 5 este un instrument linie de comanda cross-platform care ofera multesarcini automate ın ciclul complet de viata al unei aplicatii ExtJS de la generarea unui

4httpswwwjavatpointcomspring-boot-tutorial5httpsdocssenchacomcmd

28

nou proiect la lansarea unei aplicatii ın productie

Sencha Cmd ofera o colectie de caracteristici puternice pentru economisirea timpu-lui care functioneaza ımpreuna cu Sencha ExtJS si Sencha Touch

Ext JS 6 este un framework pur JavaScript pentru construirea de aplicatii webinteractive cross-platform utilizand tehnici precum scripting Ajax DHTML si DOM

Avantajele framework-ului ExtJS sunt

1 Documentatia Extjs este foarte cuprinzatoare si bine ıntretinuta2 Aspectul cheie al bibliotecii EXTJS este suportul de tip cross-browser3 Framework-ul ExtJS ofera o multitudine de elemente UI Aceste elemente includ

forme casete de dialog file arbori si tabele4 Framework-ul ExtJS include suport pentru implementarile Ajax5 ExtJS ofera performante excelente Framework-ul este complet orientat spre obiecte

si este extensibil asta pentru ca este scris ın JavaScript

Pentru partea de frontend se foloseste framework-ul ExtJS deoarece are o arhitec-tura ce se mapeaza foarte bine pe proiectele de frontend si anume arhitectura bazata pecomponente Aceasta face ca ın proiect codul sa fie mult mai organizat si procesul dedezvoltare al proiectului sa fie mult mai scurt prin identificarea mai usoara a erorilor

446 Facebook API(Graph API)

Graph API 7 este modul principal de a pune date ın platforma Facebook si de aobtine date din platforma Facebook Este un API bazat pe HTTP pe care aplicatiile ılpot utiliza pentru interogarea datelor pentru a introduce postari noi pentru gestionareaanunturilor sau pentru a ıncarca fotografii

Este denumit Graph API dupa ideea unui rdquograf socialrdquo - o reprezentare sub formade graf a informatiilor de pe Facebook Este compus din

bull noduri - ın esenta obiecte individuale cum ar fi un utilizator o fotografie o paginasau un comentariu

bull muchii - conexiuni ıntre o colectie de obiecte si un singur obiect cum ar fi fotografiilede pe o pagina sau comentariile de la o fotografie

bull campuri - date despre un obiect cum ar fi ziua de nastere a unui utilizator saunumele paginii

De obicei se utilizeaza noduri pentru a obtine date despre un anumit obiect se uti-lizeaza muchii pentru a obtine colectii de obiecte legate de un singur obiect si se utilizeazacampurile pentru a obtine date despre un singur obiect sau mai multe obiecte dintr-ocolectie

Am folosit Facebook API ca solutie pentru a ımbunatati problema de rdquocold startrdquopentru ca este singurul site pe care marea majoritate a oamenilor au cont si salveazalucrurile care le plac Deci se potrivea perfect peste nevoile aplicatiei mele

6httpdocssenchacomextjs6207httpsdevelopersfacebookcomdocsgraph-api

29

447 Git

Git 8 este un sistem de control a versionarii pentru urmarirea modificarilor ın fisierelede pe computer si coordonarea activitatii asupra acestor fisiere ın randul mai multor per-soane Este utilizat ın principal pentru gestionarea codului sursa ın dezvoltarea de softwaredar poate fi folosit pentru a urmari schimbarile ın orice set de fisiere

Avantaje ale Git

bull Modelul distribuit numai ceea ce se doreste se face publicbull Branching-ul si merging-ul sunt usoarebull Fluxul de lucru este flexibilbull Integritatea datelor este asigurata Deoarece GIT utilizeaza arbori SHA1 coruperea

datelor din motive externe poate fi usor detectatabull Rapid Git este foarte rapid chiar si ın comparatie cu alte sisteme de control a

versionarii

Am folosit Git pentru a avea la proiect un back-up ın caz ca se ıntampla ceva cuproiectul salvat pe calculator

45 Arhitectura conceptuala

In figura 45 este prezentata arhitectura conceptuala a sistemului Acesta este ım-partit ın doua mari parti backend-ul si frontend-ul care comunica ıntre ele si ısi trimitinformatii

Se poate observa ca baza de date este de tip graf mai exact Neo4j si comunica cubackend-ul pentru a putea lucra cu datele stocate Backend-ul este structurat pe nivelefiecare cu un diferit rol si care trebuie parcurs pentru a procesa datele din interfata ınbaza de date Cele trei nivele sunt cel de Repository cel de Service si cel ControllerToate interogarile venite din interfata utilizator ajung ın nivelul de Controller Dupa ceinterogarile trec de securitatea sistemului ajung ın nivelul de Service Acolo se proceseazasi se afla partea de logica a aplicatiei Pentru a interactiona cu baza de date din Servicese apeleaza metodele din nivelul de Repository

In continuare backend-ul comunica prin protocolul HTTP cu interfata grafica cucare interactioneaza clientii aplicatiei Interfata este scrisa ın Ext JS si are o parte de Viewsi o parte de Controller care este cea care comunica cu backend-ul

Pentru partea de autentificare sistemul interactioneaza cu API-ul de la Facebookde la care ia dupa autentificare un access token Cu ajutorul acestuia ia dupa aceea datelenecesare pentru a putea crea un profil utilizatorului

8httpsguidesgithubcomintroductiongit-handbook

30

Figura 45 Arhitectura conceptuala

31

Capitolul 5

Proiectare de Detaliu siImplementare

In acest capitol vor fi prezentate detalii de implementare ale sistemului de recoman-dare incluzand o ımpartire al acestuia ın componentele care ıl cuprind

Obiectivul este de a prezenta arhitectura si modul de implementare al aplicatieipe baza datelor descoperite ın studiul bibliografic de la capitolul trei si cu tehnologiilehotarate la capitolul patru Pe langa asta va fi prezentata si structura bazei de date sideciziile luate pentru securitatea aplicatiei

51 Arhitectura sistemului

Din punctul de vedere al arhitecturii aplicatia se poate considera ca este alcatuitadin patru mari componente

1 API-ul de la Facebook2 Aplicatia client care reprezinta interfata grafica a aplicatiei3 Aplicatia server adica backendul aplicatiei si partea ın care se afla partea de rdquobusiness

logicrdquo4 Baza de date

Partea componenta reprezentata de API-ul de la Facebook este doar o componentacu care aplicatia se integreaza si pe care aceasta o foloseste In interactiunea cu ea interfatada o cerere de autentificare apare o fereastra de la Facebook ın care utilizatorul introducecredentialele de la API-ul de Facebook se primeste ınapoi un access token si cu ajutorulacestuia face o cerere pentru a primi datele personale ale utilizatorului pentru creeareaprofilului utilizator

Urmatoarea parte a aplicatiei este interfata utilizator frontend-ul care reprezintapartea cu care utilizatorul interactioneaza si locul unde ıi sunt afisate informatiile

Cererile din interfata ajung ın a treia parte componenta a sistemului partea deserver adica backend-ul aplicatiei Acolo toate cererile sunt citite si procesate iar raspun-

33

sul lor este trimis la interfata utilizator Aceasta este partea care reprezinta rdquogandireardquoaplicatiei Aceea este componenta care face legatura ıntre cererile utilizatorului din inter-fata si datele stocate ın baza de date

Ultima componenta a aplicatiei o reprezinta baza de date care are ca rol sa stochezedatele despre utilizatori produse si comenzi Ea este o baza de date sub forma de grafde tipul Neo4j Acolo se salveaza entitatile aplicatiei sub forma de noduri si dependenteleıntre acestea sub forma de relatii ıntre aceste noduri

Figura 51 Diagrama de rdquodeploymentrdquo

In figura 51 este prezentata diagrama de rdquodeploymentrdquo a sistemului cu cele patrucomponente ale sistemului Aplicatia client comunica cu API-ul de la Facebook prin pro-tocolul securizat HTTPS cu backend-ul prin protocolul HTTP iar backend-ul cu baza dedate prin JDBC

Aplicatia a putut fi ımpartita ın aceste componente separate deoarece fiecare dintreele poate functiona independent de celelalte comunica cu ele doar prin mesaje Din acestmotiv locul unde ruleaza acestea pot sa fie pe servere diferite In plus daca aplicatiaar fi pusa pe servere pentru utilizatori ar putea fi mai multe servere pe care ruleaza ocomponenta si prin rdquoload balancingrdquo sa se trimita cererile ımpartite ıntre ele

Cum astfel componentele nu depind foarte mult unele de altele si pot rula faraa le interesa de unde le sunt trimise cererile este arhitectura cea mai corecta deoarecedefectarea sau o posibila eroare la una din ele nu o influenteaza cu nimic pe o alta Dacatoate ar rula pe acelasi server o eventuala defectiune a acestuia ar ınsemna o defectiune aıntregului sistem Insa daca exista mai multe noduri si se afla pe servere diferite pot doartoate cererile sa fie redirectionate spre un nod care functioneaza si aplicatia sa functionezepentru clienti la fel ca ınainte

34

Un alt avantaj al arhitecturii ar fi faptul ca la o lansare viitoare catre clienti se poatelansa doar componenta la care s-au facut modificari De asemenea aplicatia ar putea aveape viitor si o componenta mobila Iar cum serverul e independent poate fi acelasi serverfolosit de o alta aplicatie client

511 Arhitectura componentei backend

Arhitectura backend-ului este si ea ımpartita ın mai multe pachete pentru o maibuna structura si pentru o cat mai mica dependenta ıntre diversele componente Astfelcuplarea este minima ıntre clase si eventualele modificari ulterioare pot fi mai usor defacut

Serverul a fost implementat ın Java cu ajutorul framework-ului Spring Boot iarmediul de dezvoltare folosit a fost Intellij IDEA

Din punctul de vedere al ımpartirii arhitectura serverului aplicatiei este structurataın patru pachete si o clasa ın afara acestora Acea clasa este rdquomainrdquo-ul aplicatiei este parteacare trebuie rulata pentru a porni serverul Din cauza ca este o aplicatie Spring Boot si nuuna String singura adnotare necesara pentru a sti ca aceea este clasa rdquoradacinardquoa aplicatieieste SpringBootApplication

Cele patru pachete ale serverului sunt1 Cel de domeniu (domain) cu clasele POJO care reprezinta entitatile din baza de

date2 Cel de rdquomagazierdquo (repositories) care este cel care face direct actiunile ın baza de date3 Cel de serviciu (services) ın care se afla partea de logica a ıntregii aplicatii4 Cel de web ın care se afla clasele de rdquocontrollerrdquo

Figura 52 Diagrama de pachete pentru backend

35

Ca si dependente nivelul de web ıl foloseste pe cel de seviciu cel de serviciu ılfoloseste pe cel de rdquomagazierdquo iar clasele din pachetul de domeniu sunt folosite ın toatecelelalte pachete

In continuare voi prezenta pe rand fiecare nivel al serverului adica fiecare pachet

Figura 53 Diagrama de clase pentru pachetul rdquodomainrdquo

36

Nivelul de domeniu (domain) este alcatuit ın primul rand din clasele care suntentitati ın baza de date Acestea sunt reprezentate de toate clasele ce stocheaza informatiidespre utilizatori si despre produse si comenzi Pe langa informatiile personale despre unutilizator de genul numelui email-ului sau data nasterii care sunt salvate ın entitateapersoana se stocheaza despre utilizator ın clase diferite informatii de genul locului undelocuieste locul unde a copilarit locurilor unde a facut scoala locului unde lucreaza sau celmai important pentru aplicatia aceasta lucrurilor care ıi plac In afara acestor informatiidespre utilizatori sunt si clase cu informatiile despre prieteni despre produse sau desprecomenzi

Din cauza faptului ca aplicatia este de tipul unei retele sociale ın care exista prieteniiıntre persoane exista dependente ıntre toate entitatile aplicatiei Acesta este si motivulpentru care am ales baza de date sub forma de graf pe care sa se mapeze toate acesteentitati sub forma de noduri si toate aceste dependente sub forma de relatii

In pachetul de domeniu se afla si trei subpachete Unul dintre ele este pentruclasele folosite pentru a trata erorile aplicatiei In interiorul acestui pachet se afla douaclase pentru eroare si o exceptie cea folosita ın cazul ın care nu se gaseste ceea ce doresteutilizatorul Pe langa asta este clasa care are ca obiect raspunsul dat de sistem ın cazulunei erori la server Aceasta contine ın interiorul sau pe langa codul erorii si detalii despreeroarea trimisa Aceasta lista de detalii e reprezentata de obiectele de tipul celei de-a treiaclase din pachetul acesta

Celelalte doua subpachete aflate ın acest nivel sunt cele care contin clasele specialede cerere sau raspuns care au ajutat la maparea acestora mai bine In multe cazuri nua fost necesara trimiterea la interfata utilizator a tuturor informatiilor stocate despre oentitate si de aceea am ales sa creez ın aceste cazuri un obiect auxiliar care sa fie folositpe post de raspuns

Figura 54 Diagrama de clase pentru pachetul rdquorepositoriesrdquo

37

Cel de-al doilea nivel al aplicatiei backend este cel de rdquomagazierdquo (repositories) carecontine doar interfete de tip rdquoRepositoryrdquo

Aceste interfete sunt cele care fac operatiile directe asupra entitatilor din baza dedate

Unele interfete doar extind interfata care are deja implementate metodele CRUDsi din acest motiv nu au metode suplimentare iar altele au si metode ın plus care au carol sa execute interogari mai complexe asupra bazei de date In acele metode se pot scrieinterogarile ın Cypher pentru a putea primi informatii despre mai multe noduri sau desprerelatiile dintre acestea sau si pentru a returna doar anumite rezultate care ındeplinescanumite conditii In felul acesta a fost implementata si cererea de oferire a recomandarilorIn acel caz sistemul returneaza produsele care au ın descriere unul din lucrurile care se aflaın lista de obiecte sau servicii primite de la Facebook ca ıi plac utilizatorului

Nivelul de rdquoRepositoryrdquo este folosit direct de cel de-al treiea nivel cel de servi-ciu Acesta este nivelul la care se executa logica aplicatiei unde se comanda modul defunctionare al ıntregii aplicatii

Figura 55 Diagrama de clase pentru pachetul rdquoservicesrdquo

Pe acest nivel ajung toate cererile din server dupa ce trec de verificarile de securitateIn acest pachet se afla si clasa de securitate care face verificarile necesare In aceasta clasaexista o metoda ce se apeleaza la prima cerere cea de salvare a datelor de la Facebookdespre utilizator si care codifica id-ul utilizatorului si ıl trimite pe raspuns ınapoi interfeteiPe langa asta ın acea clasa se afla si o metoda care verifica faptul ca id-ul codificat esteal unui utilizator cu rol corespunzator pentru a face acea cerere

In plus ın acest pachet se afla si toate celelalte clase care fac diverse operatii pedatele din baza de date si dau raspunsuri cererilor din interfata Aici se afla logica care

38

comanda actiunile asupra utilizatorilor asupra prietenilor acestora asupra produselor siasupra comenzilor

Ultima clasa a acestui nivel este cea care se ocupa de trimiterea de email-uri Incazul ın care se face o noua comanda de catre un utilizator toti producatorii produselor depe comanda sunt notificati despre produsele lor pe care le doreste utilizatorul Din serviciulde comanda se apeleaza serviciul de email pentru fiecare producator din lista celor care auproduse care se afla pe lista comenzii utilizatorului

Ultimul si cel mai aproape de interfata utilizator este nivelul de web Acolo se aflatoate clasele de rdquoControllerrdquo ale aplicatiei server

Figura 56 Diagrama de clase pentru pachetul rdquowebrdquo

Toate cererile din interfata utilizator ıncearca sa se mapeze pe rutele declarate ınclase pentru a fi procesate ın metoda corespunzatoare Toata aceasta parte este foarteusor de implementat si mai ales foarte lizibil pentru programatori datorita adnotarilor dinJava Cu ajutorul acestora trebuie doar specificat care este numele URL-ului cererii careeste tipul de obiect asteptat si daca se trimite ca rdquoquery stringrdquo pe URL sau ın interiorulcorpului cererii si tipul raspunsului Pentru fiecare cerere care nu este apelata ın parteaneautentificata a utilizatorului primul lucru care se apeleaza este metoda de securitatepentru a verifica rolul si id-ul utilizatorului Daca din punctul de vedere al securitatii totuleste ın regula se apeleaza metoda corespunzatoare din pachetul de serviciu

39

O singura clasa este diferita de restul ın pachetul de controller si aceea este clasa deeroare Acolo se mapeaza erorile aparute ın timpul cererii si se trimite ınapoi ın interfatagrafica un raspuns cu cod de eroare specific nu numai 500 Generic Application Exceptioncum ar trimite fara aceasta clasa si cu detalii despre motivul aparitiei erorii

Datorita folosirii adnotarilor din java nu a fost necesara folosirea unor rdquodesignpatternrdquo-uri ın sistem De exemplu pentru a folosi ın nivelul de web ceva din pachetulde servicii trebuia doar acel obiect sa aiba adnotarea Autowired si se ınlocuieste atatfolosirea rdquodesign patternrdquo-ului Singleton cat si a celui de Factory Acel obiect nu trebuiecreat sau initializat se face asta implicit datorita adnotarii si de asemenea este folositapeste tot aceeasi instanta

In concluzie toate cererile venite din interfata grafica ajung ın nivelul de rdquocontrollerrdquode unde sunt trimise la cel de rdquoservicerdquopentru a fi procesate si facute eventualele modificarinecesare ın baza de date ca apoi raspunsul sa fie trimis ınapoi spre aplicatia client pentruafisare

512 Arhitectura componentei frontend

A doua componenta implementata a sistemului este aplicatia client frontend-ulAceasta a fost scrisa ın Java Script cu ajutorul framework-ului Ext JS compilarea

se face cu ajutorul Sencha CMD si mediul de implementare a fost IntelliJ IdeaCu ajutorul framework-ului Ext JS se scriu componente care apoi se initializeaza

unele pe altele Aplicatia porneste cu fisierul Applicationjs care este un fel de rdquomainrdquopentru aplicatie Aceasta initializeaza alte componente care la randul lor includ altecomponente si tot asa Structura poate fi foarte usor comparata cu una arborescenta dinacest punct de vedere

Framework-ul a fost creat sa functioneze ın felul acesta pentru ca scopul componen-telor este sa fie scrise ın asa fel ıncat sa poata pe viitor sa fie utilizate din nou Una dindorintele majore ın programare tot timpul este de a se scrie cod ıntr-o maniera ın care safie cat mai reutilizabil Iar framework-ul Ext JS exact asta ıncearca

Arhitectura aplicatiei client se gaseste ın figura 57 si este la randul ei ımpartita ınpachete ca si cea de server Similar cu pachetul de rdquodomainrdquo de la aplicatia de backendeste pachetul rdquomodelrdquo al interfetei utilizator Aici sunt rdquoclaserdquo care sunt simple POJO sicare sunt apoi folosite ın nivelele urmatoare Sunt mai putine decat clasele din rdquostorerdquodeoarece daca raspunsul de la server nu trebuie procesat nu sunt necesare se pot mapadirect obiectele din rdquostorerdquo pe componentele interfetei utilizator

Urmatorul nivel este cel pe care se afla clasele de rdquostorerdquo Acestea sunt cele careexecuta cererea spre backend si face legatura ıntre client si server Daca are o clasa derdquomodelrdquodeclarata atunci populeaza acel obiect cu datele primite de la server iar ın cazul ıncare nu este declarat un model se trimit datele exact asa cum s-au primit la nivelul urmatorde rdquoviewrdquo Acest nivel seamana din punct de vedere al functiei cu cel de rdquorepositoryrdquo de laaplicatia server deoarece ambele au rol de legatura Aceea facea legatura ıntre aplicatiesi baza de date si aceasta face legatura ıntre aplicatia client si aplicatia server

40

Figura 57 Diagrama de clase pentru aplicatia web

Cel de-al treilea pachet al aplicatiei este cel de rdquoviewrdquo In acest pachet se afla claselecare alcatuiesc partea vizuala a aplicatiei La randul ei si aceasta este alcatuita tot dincomponente Aplicatia deschide ın primul rand Main-ul care determina aparitia paginii deHome si afisarea ın meniu a optiunilor posibile ın functie de autentificare si rol Clasele deaici se executa de fapt la deschiderea aplicatiei fiind rdquosingle page applicationrdquo si tot atuncise ıncarca pe pagina componentele Ca si arhitectura a pachetului acesta este ımpartit larandul sau ın subpachete Pentru o mai buna organizare exista patru subpachete cateunul pentru fiecare tip de utilizator In felul acesta toate rdquoviewrdquo-urile care sunt specificeunui utilizator cu un anumit rol se afla ın acelasi subpachet

Cele patru subpachete existente ın pachetul rdquoviewrdquo sunt

1 Pachetul rdquomainrdquo care cuprinde rdquoviewrdquo-urile care se afla ın partea neautentificata aaplicatiei

2 Pachetul rdquoclientrdquo continand rdquoviewrdquo-urile pe care le poate accesa un utilizator simplu3 Pachetul rdquoproducerrdquo specific actiunilor unui utilizator care are rol de producator4 Pachetul rdquoadminrdquo care contine toate rdquoviewrdquo-urile care ıi apar unui utilizator care este

administrator al aplicatiei

Ultimul pachet si nivel al aplicatiei client este cel de rdquocontrollerrdquo In acest pachet

41

se afla clasele care fac actiunile din interfata grafica In timp ce pachetul rdquoviewrdquo continedoar partea grafica a aplicatiei adica modul ın care aceasta trebuie sa arate pachetulrdquocontrollerrdquo contine actiunea acestora modul ın care aplicatia trebuie sa functioneze

Ca si arhitectura si acest pachet a fost ımpartit la randul lui tot ın cele patrusubpachete ca si pachetul rdquoviewrdquo adica rdquomainrdquo rdquoclientrdquo rdquoproducerrdquo si rdquoadminrdquo In pluspentru a fi usor de gasit ce clasa de rdquocontrollerrdquo apartine carui rdquoviewrdquo am ales ca cele douasa aiba acelasi nume In felul acesta daca se doreste sa se gaseasca actiunile unui rdquoviewrdquose poate cauta dupa o clasa cu acelasi nume ın pachetul rdquocontrollerrdquo Numarul claselor dinacest pachet este mai mic decat cel al claselor din rdquoviewrdquo deoarece nu toate paginile dininterfata au actiuni suplimentare Daca singura actiune este ıncarcarea paginii cu date dela server adica doar o actiune simpla de GET datele se ıncarca cu ajutorul rdquostorerdquo-ului laıncarcarea paginii si nu este necesara nici o actiune suplimentara Paginile pe care se potface si actiuni de alt gen sau se deschid noi ferestre au nevoie de clase de rdquocontrollerrdquo

In concluzie arhitectura aplicatiei client este una bazata pe componente care ıncearcasa foloseasca cat mai multe clase reutilizabile

52 Structura bazei de date

Baza de date a aplicatiei este de tip graf de tipul Neo4j Pentru utilizare exista unprogram numit Neo4j ce trebuie instalat Acest program are si o interfata grafica ın carese pot vizualiza datele sub forma grafica si ın care se pot scrie de asemenea si interogariın limbajul acestei baze de date adica Cypher

Fiind o baza de date sub forma de graf datele stocate sunt salvate ın structurade date sub forma de noduri si relatii Entitatile din pachetul de domeniu din aplicatiabackend se gasesc ın baza de date sub forma unor noduri iar dependentele dintre nodurise mapeaza ın baza de date sub forma unor relatii Un element diferit fata de alte tipuride baze de date este faptul ca pe relatiile dintre noduri se pot salva atribute cum este ınaplicatie cazul pentru prieteniile dintre persoane In cazul acestora pe relatia dintre nodurise salveaza daca prietenia a fost sau nu acceptata

Pentru fiecare clasa POJO din aplicatia server clasa ce are doar metodele get si setsi se afla ın pachetul domain exista cate un tip de nod diferit ın baza de date cum estesi marcat ın diferite culori ın figura 58 Fiecare tip de nod are atributele proprii care potlua valori sau pot fi nule Iar fiecare obiect din Java reprezinta un nod diferit ın baza dedate

Neo4j a fost cea mai buna optiune pentru baza de date pentru ca aplicatia poate ficonsiderata o retea sociala Acest lucru se datoreaza relatiilor de prietenie dintre persoanesi a multiplelor relatii ıntre noduri Toate nodurile se afla ın acceasi componenta conexadeci nu exista noduri izolate care sa nu aiba nici o legatura cu nici un alt nod

Datorita acestei structuri a bazei de date este posibila implementarea cererii derecomandare ca o simpla interogare ın baza de date aceasta fiind cea mai simpla metodade implementare a unui sistem de genul acesta una mult mai complexa ar fi fost un

42

algoritm de ınvatare care sa ınvete tipare ale utilizatorilor si sa recomande cadouri pe bazaacestor informatii

Figura 58 Diagrama bazei de date pentru doi utilizatori

Un alt avantaj al acestui tip de baza de date este faptul ca datele nu sunt duplicateın baza de date Spre exemplu daca mai multi utilizatori au ca locatie acelasi oras nu secreaza cate un nod cu acea locatie de mai multe ori ci acel unic nod va avea cate o relatiecu fiecare utilizator care are ca locatie acel oras

In concluzie structura bazei de date a fost aleasa ın acest fel datorita tipului apli-catiei adica asemanatoare cu o retea sociala si datorita implementarii simple a unui sistemde recomandare pe o asemenea baza de date

53 Fluxul pentru diferite operatii

Pentru aplicatie cele mai importante cazuri de utilizare sunt salvarea informati-ilor despre utilizator primite de la Facebook pentru crearea unui profil si recomandareacadourilor pentru un utilizator al aplicatiei Din aceasta cauza cele doua cazuri de utilizarevor fi prezentate mai ın detaliu ın continuare

43

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 18: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

alegerea unor sugestii ce s-ar potrivi unei persoane cu acel tip de personalitate O primaıntrebare se refera la genul persoanei si ıntrebarea este daca cadoul este pentru o femeieun barbat o fetita sau un baietel Cea de-a doua ıntrebare se refera la marja de varsta ıncare se ıncadreaza acel om de exemplu pentru barbat optiunile sunt adolescent barbat ınjur de 30 de ani sau barbat ın varsta Cea de-a treia ıntrebare se refera la personalitateaomului Mai exact se fac sugestii pentru tipuri de lucruri ce i-ar putea placea unui omcare are trasaturile descrise ın primele doua ıntrebari De exemplu la barbati ın jur de30 de ani optiunile sunt ıi place sportul ıi place natura e aventurier ıi place golful ıiplace sa faca gratare sa serveasca bauturi sa gateasca sa animeze ıi place sa se ımbraceelegant este sef e entuziasmat de bere sau e un fan al sporturilor Iar ın final ın functiede raspunsurile date la ıntrebari se afiseaza sugestii de cadouri care se potrivesc oamenilorcu acel tip de personalitate

Figura 36 Site web Gifts

Nordstrom 7 care este prezentat ın imaginea 37 are o abordare similara avand pesite o multime de optiuni de filtrare a cadourilor Se pot cauta ın acest site cadouri pentrubebelusi cadouri de Craciun bijuterii pentru femei optiunile sunt multiple Acest lucruofera utilizatorilor sugestii pentru a le fi mai usor sa ıncadreze aceasta persoana ıntr-unanumit tip Iar dupa alegerea categoriei toate sugestiile de cadouri oferite de catre sitese ıncadreaza ın acel tip Ca avantaj al acestui site este ca ei ofera si serviciul de livrareal cadoului dupa cumparare oriunde ın lume Un dezavantaj al multor site-uri de genulacesta este ca ofera livrare doar ın zona sa apropiata

7httpsshopnordstromcomcgifts

13

Figura 37 Site web Nordstrom

14

Capitolul 4

Analiza si Fundamentare Teoretica

In acest capitol vor fi prezentate cerintele functionale ale lucrarii ımpreuna cucerintele non-functionale ale acesteia De asemenea va fi prezentata diagrama cazurilor deutilizare si vor fi prezentate mai ın detaliu cazurile de utilizare principale ale aplicatiei Incontinuare se va prezenta perspectiva tehnologica a proiectului si se vor explica deciziiletehnologice luate In final se va prezenta diagrama conceptuala a aplicatiei

41 Cerinte functionale

bull Posibilitatea autentificarii ın aplicatie si crearii unui profil propriu din care se potutiliza informatii si cu ajutorul caruia utilizatorul poate fi ıncadrat ıntr-un profil

bull Utilizatorii pot crea prietenii ca ıntr-o retea de socializare pentru a putea afla infor-matii despre prieteni si pentru a li se putea recomanda cadouri pentru acestia

bull Cu ajutorul informatiilor de la Facebook un utilizator poate fi notificat dinainte caurmeaza ziua de nastere a unuia din prietenii lui si sa i se ofere mai multe variantede cadouri potrivite pentru acesta Aceasta informatie o primeste cu suficient timpınainte pentru a nu fi surprins fara un cadou De la Facebook pe langa informatiiledespre data zilei de nastere sunt importante si varsta sau lucrurile care ıi plac uti-lizatorului Toate acestea ajuta la crearea profilului utilizatorului pe baza caruia serecomanda dupa aceea cadourile

bull De asemenea sistemul poate recomanda si un cadou pentru alt tip de evenimentdecat zi de nastere de genul cadou de Craciun cadou de nunta cadou pentru unnou-nascut etc

bull In aplicatie vor fi adaugate si diferite produse iar pentru a face mai usoara cumparareade cadouri se va putea face si comanda pe internet In momentul ın care un utilizatorface o noua comanda producatorii produselor comandate sunt ınstiintati de existentaacestei noi comenzi

15

bull Pentru persoanele la care pe profilul de Facebook este insuficient completat saupentru a putea cumpara cadouri pentru o persoana care nu are Facebook sau nuare cont ın aceasta aplicatie si despre care ın acest fel nu se cunosc nici un felde informatii se vor putea filtra cautarile pentru cadou printr-o serie de ıntrebaristandard Aceste ıntrebari vor putea creea un rdquomini-profilrdquo pentru acea persoanapentru ca sistemul sa poata recomanda cadouri

42 Cerinte non-functionale

bull Securitate sistemul nu raspunde cererilor decat atunci cand utilizatorul a fost au-tentificat ın aplicatie si are rolul necesar pentru a face acea cerere

bull Portabilitate aplicatia nu depinde de sistemul de operare pe care ruleaza De aseme-nea nu e dependenta de browserul folosit de utilizator

bull Disponibilitate sistemul ramane stabil ın fata erorilor si functioneaza la fel si dupaaparitia unei erori

bull Extensibilitate sistemul permite adaugarea sau modificarea unor componente atuncicand cerintele aplicatiei se modifica Pe langa asta e flexibila unor dezvoltari ulte-rioare

43 Cazuri de utilizare

In aceasta sectiune se vor prezenta actorii aplicatiei diagrama cazurilor de utilizaresi vor fi descrise cazurile de utilizare de baza ale fiecarui actor

Ca si actori aplicatia are patru tipuri de utilizatori

bull utilizator anonimbull clientbull producatorbull administrator

Aplicatia este conceputa ın asa fel ıncat ıntre actori este o relatie de mostenire Acestlucru presupune ca un actor are posibilitatea de a efectua tot ce putea cel dinaintea lui siceva ın plus Deci utilizatorii anonimi au cele mai putine permisiuni iar administratoriiau permisiuni totale Acest lucru se vede foarte clar si ın diagrama cazurilor de utilizaredin imaginea 41

In continuare vor fi prezentate cazurile de utilizare

1 recomandare cadouri2 adaugare produs3 modificare rol utilizator

16

Figura 41 Digrama cazurilor de utilizare

17

431 Recomandare cadouri

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unutilizator trebuie sa le urmeze pentru a primi recomandari de cadouri pentru un cunoscutsi pentru a efectua o comanda

Actorul principal

Orice utilizator al aplicatiei

Parti interesate si interese

Utilizatorul care doreste sa cumpere un cadou este interesat de a gasi un cadoupotrivit pentru cineva pe care ıl cunoaste

Producatorul care e interesat sa ısi poata vinde produseleUtilizatorul care primeste cadoul fiind interesat sa primeasca un cadou care sa i se

potriveasca si care sa ıi placa

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand utilizatorul porneste aplicatia11 Utilizatorul verifica daca are cont de Facebook si daca are urmeaza pasul 111

daca nu 22111 Utilizatorul se autentifica ın aplicatie cu ajutorul credentialelor de la

Facebook12 Utilizatorul deschide sectiunea de recomandare cadouri13 Utilizatorul completeaza formularul cu datele ce trebuie introduse pentru a primi

recomandari de cadouri pentru un prieten14 Utilizatorul poate fi satisfacut cu recomandarile primite si atunci urmeaza pasul

141 iar daca nu este atunci urmeaza cazul alternativ 23141 Utilizatorul adauga ın cosul de cumparaturi cadouri pe care doreste sa

le cumpere15 Utilizatorul cere sa ısi vada cosul de cumparaturi16 Utilizatorul poate sa se declare multumit de cosul de cumparaturi caz ın care

urmeaza pasul 161 sau poate sa aleaga cazul alternativ 24161 Utilizatorul aproba cosul de cumparaturi si accepta sa se faca comanda

17 Sistemul introduce ın baza de date comanda18 Utilizatorul va putea vedea la sectiunea comenzilor sale noua comanda si statusul

ei19 Sistemul notifica producatorul de aparitia noii comenzi110 Utilizatorul se dezautentifica din aplicatie

18

Use-Case EndUtilizatorul se va deconecta din aplicatie si o va ınchide

Figura 42 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueazaAcest flux poate aparea la orice pas211 Utilizatorul deschide sectiunea de recomandare cadouri212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca utilizatorul nu are cont de Facebook

19

Acest flux poate aparea la pasul 11221 Utilizatorul deschide pagina de Facebook222 Utilizatorul ısi face un cont pe pagina de Facebook si ısi completeaza

date despre el223 Utilizatorul revine la aplicatia de recomandare cadouri si ıncearca din

nou sa se autentifice ın aplicatie224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca utilizatorul nu e multumit de recomandariAcest flux poate aparea la pasul 14231 Utilizatorul sterge din cos cadourile pe care nu le mai doreste si revine

la pagina de recomandari232 Utilizatorul adauga alte cadouri ın cos233 Cazul de utilizare continua de la pasul 141

24 Flux-ul alternativ daca utilizatorul nu e multumit de produsele din cosul decumparaturi

Acest flux poate aparea la pasul 16241 Utilizatorul revine ınapoi la formularul cu introducerea datelor despre

beneficiarul cadoului242 Utilizatorul completeaza din nou datele243 Cazul de utilizare continua de la pasul 13

Preconditii

1 Utilizatorul trebuie sa aiba un cont de Facebook pentru a se putea autentifica ınaplicatie

2 Utilizatorul trebuie sa fie autentificat ın aplicatie pentru a putea face orice actiunedin acest caz de utilizare

3 Utilizatorul trebuie sa deschida sectiunea de recomandare cadouri pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noua comanda este salvata ın baza de date2 Comanda apare ın sectiunea de comenzi a utilizatorului ımpreuna cu statusul ei

curent3 Producatorul este notificat ca are o noua comanda

432 Adaugare produs

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unproducator trebuie sa le urmeze pentru a introduce un nou produs ın aplicatie

20

Actorul principal

Utilizatorii cu rol de producator sau cu rol de administrator

Parti interesate si interese

Producatorul care doreste sa introduca produsul nou ın aplicatie

Utilizatorii simpli care au o mai mare varietate de produse din care sa li se reco-mande cadouri

Figura 43 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo

21

Flux de evenimente

Use-Case Start

Cazul de utilizare ıncepe atunci cand producatorul porneste aplicatia

11 Producatorul verifica daca are cont de Facebook si daca are urmeaza pasul111 daca nu 22

111 Producatorul se autentifica ın aplicatie cu ajutorul credentialelor de laFacebook

12 Producatorul deschide sectiunea de adaugare produs

13 Producatorul completeaza datele necesare despre noul produs ımpreuna cu tipulde persoana si eveniment care i s-ar potrivi

14 Producatorul verifica daca este multumit de datele introduse si daca da urmeazapasul 141 daca nu 23

141 Producatorul efectueaza operatia de adaugare produs

15 Sistemul adauga un nou produs ın baza de date

16 Sistemul notifica producatorul ca noul produs a fost introdus cu succes

17 Producatorul se dezautentifica din aplicatie

Use-Case End

Producatorul se va deconecta din aplicatie si o va ınchide

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Producatorul deschide sectiunea de adaugare produs

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca producatorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Producatorul deschide pagina de Facebook

222 Producatorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Producatorul revine la aplicatia de recomandare cadouri si ıncearca dinnou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca Producatorul nu e multumit de datele introduse despreprodus

Acest flux poate aparea la pasul 14

231 Producatorul sterge datele gresite despre produs

232 Producatorul adauga alte date despre produs

233 Cazul de utilizare continua de la pasul 141

22

Preconditii

1 Producatorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Producatorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Producatorul trebuie sa aiba cont cu rol de rdquoproducatorrdquo sau rdquoadminrdquo pentru aputea face operatia aceasta

4 Producatorul trebuie sa deschida sectiunea de adaugare produs pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noul produs este salvat ın baza de date2 Produsul poate fi adaugat la recomandarile unui utilizator din acel moment

433 Modificare rol utilizator

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unadministrator trebuie sa le urmeze pentru a modifica rolul unui utilizator al aplicatiei

Actorul principal

Un utilizator al aplicatiei care are rol de administrator

Parti interesate si interese

Administratorul care doreste sa modifice rolul unui utilizatorUtilizatorul care doreste sa ısi schimbe rolul

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand administratorul porneste aplicatia11 Administratorul verifica daca are cont de Facebook si daca are urmeaza pasul

111 daca nu 22111 Administratorul se autentifica ın aplicatie cu ajutorul credentialelor de

la Facebook12 Administratorul deschide sectiunea de utilizatori13 Sistemul ıi returneaza administratorului utilizatorii care nu sunt administratori14 Administratorul modifica rolul utilizatorului din utilizator simplu ın producator

sau invers

23

15 Administratorul cere executarea modificarii

16 Sistemul executa modificarea iar ın caz de succes urmeaza pasul 161 si ın cazde eroare pasul 23

161 Sistemul notifica administratorul ca modificarea a fost efectuata cusucces

17 Utilizatorul se dezautentifica din aplicatie

Use-Case End

Administratorul se va deconecta din aplicatie si o va ınchide

Figura 44 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo

24

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Administratorul deschide sectiunea de utilizatori

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca administratorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Administratorul deschide pagina de Facebook

222 Administratorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Administratorul revine la aplicatia de recomandare cadouri si ıncearcadin nou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca sistemul returneaza o eroare la modificarea utilizatorului

Acest flux poate aparea la pasul 16

231 Sistemul returneaza un mesaj de eroare la modificarea utilizatorului

232 Aplicatia afiseaza mesajul de eroare administratorului

233 Cazul de utilizare continua de la pasul 15

Preconditii

1 Administratorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Administratorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Utilizatorul trebuie sa aiba cont cu rol de administrator pentru a putea efectuaorice actiune din acest caz de utilizare

4 Administratorul trebuie sa deschida sectiunea utilizatori pentru a putea ındeplinicerintele din cazul de utilizare

Postconditii

1 Noul rol al utilizatorului este salvat ın baza de date

2 La urmatoarea autentificare a utilizatorului acesta va observa ca interfata si maiprecis meniurile si actiunile care le poate face ıi vor fi diferite

25

44 Perspectiva tehnologica

441 Neo4j

Neo4j 1 este un sistem de gestionare a bazelor de date sub forma de graf dezvoltatde Neo4j Inc Descris de dezvoltatorii sai ca o baza de date tranzactionala compatibilacu ACID Neo4j este cea mai populara baza de date sub forma de graf dupa clasamentulDB-Engines

Baza de date Neo4j (ca si orice alta baza de date sub forma de graf) este foartediferita de o baza de date relationala cum ar fi MS Access SQL Server MySQL etcBazele de date relationale utilizeaza tabele randuri si coloane pentru stocarea datelor

Neo4j nu utilizeaza tabele randuri si coloane pentru stocarea sau prezentarea datelorci noduri si relatii

Neo4j este foarte potrivit pentru stocarea datelor care au multe relatii interconec-tate Acestea sunt de fapt aplicatiile ın care merita sa fie folosite De fapt bazele de datesub forma de graf cum este Neo4j sunt mult mai bune la tratarea datelor interconectatedecat bazele de date relationale

Acest lucru se datoreaza faptului ca modelul sub forma de graf nu necesita de obiceio schema predefinita Nu e nevoie sa se creeze structura bazei de date ınainte de a fiıncarcate datele asa cum se face la o baza de date relationala

Dar principalul motiv pentru care Neo4j este mai bun pentru datele relationalepentru acest tip de aplicatii este modul ın care permite crearea relatiilor Neo4j este con-struit ın jurul relatiilor si atunci nu este nevoie sa se configureze chei primare constrangerichei straine pentru a predetermina nodurile care pot avea o relatie si la ce date Cu Neo4jse poate adauga orice legatura ıntre orice nod ori de cate ori este nevoie

Neo4j are aceste calitati care nu se gasesc nici la celelalte baze de date NoSQLBazele de date non-relationale pe langa cele sub forma de graf sunt cele de tip coloanade tip document de tip cheie-valoare si de tip multi-model Nici unul din aceste tipuri nuau ca principala functionalitate maparea relatiilor si facilitatea interogarilor ıntr-o baza dedate cu multe relatii ıntre entitati

Generarea de recomandari personalizate este unul dintre cele mai frecvente cazuride utilizare a unei baze de date sub forma de graf Unele dintre principalele beneficii aleutilizarii grafurilor pentru a genera recomandari includ

- Performanta Lipsa indexurilor permite calcularea recomandarilor ın timp realasigurand ca recomandarea este ıntotdeauna relevanta si reflecta informatii actualizate

- Model de date Modelul de graf cu proprietati permite combinarea cu usurinta aseturilor de date din mai multe surse

Un alt avantaj al bazelor de date sub forma de graf Neo4j este faptul ca respectatoate principiile din modelul de consistenta ACID

Garantia data de principiile ACID este ca ofera un mediu sigur ın care sa functionezedatele Acronimul ACID reprezinta

1httpsneo4jcomuse-casesreal-time-recommendation-engine

26

bull Atomic Toate operatiile dintr-o tranzactie reusesc sau fiecare operatie este reluatabull Consistent La finalizarea unei tranzactii baza de date este solida din punct de

vedere structuralbull Izolat Tranzactiile nu se lupta una cu cealalta Accesul controversat la date este

moderat de baza de date astfel ıncat tranzactiile par sa se execute succesivbull Durabil Rezultatele aplicarii unei tranzactii sunt permanente chiar si ın cazul unor

defectiuniCand vine vorba de tehnologiile NoSQL cele mai multe baze de date sub forma de

graf (inclusiv Neo4j) utilizeaza un model de consistenta ACID pentru a asigura ca datelesunt stocate ın siguranta si ın mod consecvent

Am ales baza de date sub forma de graf ca optiune pentru stocarea datelor deoarecedin toate lucrarile si articolele citite a fost optiunea cea mai buna pentru un sistem derecomandare Deci acesta se mapeaza perfect pe cerintele functionale ale proiectului Sidin optiunile de baze de date sub forma de graf Noe4j a avut de departe cele mai multeavantaje ea fiind si cea mai utilizata

442 Cypher

Cypher 2 este un limbaj declarativ de interogare pentru bazele de date sub formade graf care permite interogarea si actualizarea rapida a datelor Cypher este un limbajrelativ simplu dar foarte puternic Interogarile foarte complexe ale bazei de date pot fiusor exprimate prin intermediul limbajului Cypher

Este conceput pentru a fi un limbaj de interogare uman Scopul lui principal este dea face interogarile mult mai simple si unele interogari care la bazele de date relationale nuerau posibile le face posibile Constructiile sale se bazeaza pe grafica si pe limba englezalucru care ajuta la scrierea mai intuitiva a interogarilor Este construit pentru a fi maiintuitiv pentru citire si nu neaparat pentru scriere

Cypher se bazeaza pe modelul Graph Property care ın plus fata de elementelegrafice standard ale nodurilor si muchiilor (numite relatii ın Cypher) adauga etichete siproprietati ca si concepte Nodurile pot avea zero sau mai multe etichete ın timp ce fiecarerelatie este de exact un singur tip Nodurile si relatiile au de asemenea zero sau mai multeproprietati

Chypher este limbajul de interogare folosit la bazele de date Neo4j deci este opti-unea implicita atunci cand se alege Neo4j

443 Maven

Maven 3 este un instrument de management software si de ıntelegere a proiectelorsoftware Pe baza conceptului unui model de obiect de proiect (POM) Maven poategestiona construirea raportarea si documentarea unui proiect printr-o informatie centrala

2httpsneo4jcomdevelopercypher-query-language3httpswwwjavatpointcommaven-tutorial

27

Obiectivul principal al lui Maven este acela de a permite unui dezvoltator sa ınte-leaga starea completa a efortului de dezvoltare ın cel mai scurt timp Avantajele Mavensunt

bull instalarea rapida a proiectului fara fisiere buildxml complicate doar un POMbull procesul de construire este standardizat pentru toate proiectelebull usor de ınvatat si de utilizatbull configurarea unui proiect este foarte rapidabull bine documentat

Am ales sa folosesc Maven deoarece este una din cele mai comune optiuni pentru aimporta librariile ıntr-un proiect si este si cel mai documentat Deci mereu cand esti pusın dificultate poti cauta pe internet sugestii

444 Spring Boot

Spring Boot 4 este un framework din cadrul Spring care ofera setari implicite pentruconfigurarea codului si adnotari pentru a lansa rapid proiecte noi ın executie Urmaresteabordarea rdquoConfigurarea defectiunilor vizionaterdquo pentru a evita un numar mare de linii decod pentru configuratii si pentru a ımbunatati procesul de dezvoltare

Avantajele Spring Boot sunt1 Face foarte usoara dezvoltarea de aplicatii bazate pe Spring cu Java sau Groovy2 Reduce timpul de dezvoltare si creste productivitatea3 Evita scrierea multor linii de cod adnotari si configurare XML4 Este foarte usor de integrat cu alte framework-uri din aceasi familie Spring cum ar

fi Spring JDBC Spring ORM Spring Data Spring Security etc5 Urmareste abordarea rdquoConfigurarea implicita a optiunilorrdquo pentru a reduce efortul

pentru dezvoltatori6 Ofera servere HTTP ıncorporate cum ar fi Tomcat Jetty etc pentru a dezvolta si

testa aplicatiile web foarte usor7 Ofera instrumentul CLI (Command Line Interface) pentru a dezvolta si testa apli-

catiile de tip rdquoSpring Bootrdquo (Java sau Groovy) din linia de comanda foarte usor sirapidAm ales ca optiune pentru partea de backend acest framework deoarece simplifica

foarte mult lucrurile Datorita lui un programator poate sa ısi concentreze mai tare energiape a construi proiectul din punctul de vedere al buissness-ului logic nu din punctul devedere al configurarilor necesare

445 Sencha CMD si ExtJS

Sencha CMD 5 este un instrument linie de comanda cross-platform care ofera multesarcini automate ın ciclul complet de viata al unei aplicatii ExtJS de la generarea unui

4httpswwwjavatpointcomspring-boot-tutorial5httpsdocssenchacomcmd

28

nou proiect la lansarea unei aplicatii ın productie

Sencha Cmd ofera o colectie de caracteristici puternice pentru economisirea timpu-lui care functioneaza ımpreuna cu Sencha ExtJS si Sencha Touch

Ext JS 6 este un framework pur JavaScript pentru construirea de aplicatii webinteractive cross-platform utilizand tehnici precum scripting Ajax DHTML si DOM

Avantajele framework-ului ExtJS sunt

1 Documentatia Extjs este foarte cuprinzatoare si bine ıntretinuta2 Aspectul cheie al bibliotecii EXTJS este suportul de tip cross-browser3 Framework-ul ExtJS ofera o multitudine de elemente UI Aceste elemente includ

forme casete de dialog file arbori si tabele4 Framework-ul ExtJS include suport pentru implementarile Ajax5 ExtJS ofera performante excelente Framework-ul este complet orientat spre obiecte

si este extensibil asta pentru ca este scris ın JavaScript

Pentru partea de frontend se foloseste framework-ul ExtJS deoarece are o arhitec-tura ce se mapeaza foarte bine pe proiectele de frontend si anume arhitectura bazata pecomponente Aceasta face ca ın proiect codul sa fie mult mai organizat si procesul dedezvoltare al proiectului sa fie mult mai scurt prin identificarea mai usoara a erorilor

446 Facebook API(Graph API)

Graph API 7 este modul principal de a pune date ın platforma Facebook si de aobtine date din platforma Facebook Este un API bazat pe HTTP pe care aplicatiile ılpot utiliza pentru interogarea datelor pentru a introduce postari noi pentru gestionareaanunturilor sau pentru a ıncarca fotografii

Este denumit Graph API dupa ideea unui rdquograf socialrdquo - o reprezentare sub formade graf a informatiilor de pe Facebook Este compus din

bull noduri - ın esenta obiecte individuale cum ar fi un utilizator o fotografie o paginasau un comentariu

bull muchii - conexiuni ıntre o colectie de obiecte si un singur obiect cum ar fi fotografiilede pe o pagina sau comentariile de la o fotografie

bull campuri - date despre un obiect cum ar fi ziua de nastere a unui utilizator saunumele paginii

De obicei se utilizeaza noduri pentru a obtine date despre un anumit obiect se uti-lizeaza muchii pentru a obtine colectii de obiecte legate de un singur obiect si se utilizeazacampurile pentru a obtine date despre un singur obiect sau mai multe obiecte dintr-ocolectie

Am folosit Facebook API ca solutie pentru a ımbunatati problema de rdquocold startrdquopentru ca este singurul site pe care marea majoritate a oamenilor au cont si salveazalucrurile care le plac Deci se potrivea perfect peste nevoile aplicatiei mele

6httpdocssenchacomextjs6207httpsdevelopersfacebookcomdocsgraph-api

29

447 Git

Git 8 este un sistem de control a versionarii pentru urmarirea modificarilor ın fisierelede pe computer si coordonarea activitatii asupra acestor fisiere ın randul mai multor per-soane Este utilizat ın principal pentru gestionarea codului sursa ın dezvoltarea de softwaredar poate fi folosit pentru a urmari schimbarile ın orice set de fisiere

Avantaje ale Git

bull Modelul distribuit numai ceea ce se doreste se face publicbull Branching-ul si merging-ul sunt usoarebull Fluxul de lucru este flexibilbull Integritatea datelor este asigurata Deoarece GIT utilizeaza arbori SHA1 coruperea

datelor din motive externe poate fi usor detectatabull Rapid Git este foarte rapid chiar si ın comparatie cu alte sisteme de control a

versionarii

Am folosit Git pentru a avea la proiect un back-up ın caz ca se ıntampla ceva cuproiectul salvat pe calculator

45 Arhitectura conceptuala

In figura 45 este prezentata arhitectura conceptuala a sistemului Acesta este ım-partit ın doua mari parti backend-ul si frontend-ul care comunica ıntre ele si ısi trimitinformatii

Se poate observa ca baza de date este de tip graf mai exact Neo4j si comunica cubackend-ul pentru a putea lucra cu datele stocate Backend-ul este structurat pe nivelefiecare cu un diferit rol si care trebuie parcurs pentru a procesa datele din interfata ınbaza de date Cele trei nivele sunt cel de Repository cel de Service si cel ControllerToate interogarile venite din interfata utilizator ajung ın nivelul de Controller Dupa ceinterogarile trec de securitatea sistemului ajung ın nivelul de Service Acolo se proceseazasi se afla partea de logica a aplicatiei Pentru a interactiona cu baza de date din Servicese apeleaza metodele din nivelul de Repository

In continuare backend-ul comunica prin protocolul HTTP cu interfata grafica cucare interactioneaza clientii aplicatiei Interfata este scrisa ın Ext JS si are o parte de Viewsi o parte de Controller care este cea care comunica cu backend-ul

Pentru partea de autentificare sistemul interactioneaza cu API-ul de la Facebookde la care ia dupa autentificare un access token Cu ajutorul acestuia ia dupa aceea datelenecesare pentru a putea crea un profil utilizatorului

8httpsguidesgithubcomintroductiongit-handbook

30

Figura 45 Arhitectura conceptuala

31

Capitolul 5

Proiectare de Detaliu siImplementare

In acest capitol vor fi prezentate detalii de implementare ale sistemului de recoman-dare incluzand o ımpartire al acestuia ın componentele care ıl cuprind

Obiectivul este de a prezenta arhitectura si modul de implementare al aplicatieipe baza datelor descoperite ın studiul bibliografic de la capitolul trei si cu tehnologiilehotarate la capitolul patru Pe langa asta va fi prezentata si structura bazei de date sideciziile luate pentru securitatea aplicatiei

51 Arhitectura sistemului

Din punctul de vedere al arhitecturii aplicatia se poate considera ca este alcatuitadin patru mari componente

1 API-ul de la Facebook2 Aplicatia client care reprezinta interfata grafica a aplicatiei3 Aplicatia server adica backendul aplicatiei si partea ın care se afla partea de rdquobusiness

logicrdquo4 Baza de date

Partea componenta reprezentata de API-ul de la Facebook este doar o componentacu care aplicatia se integreaza si pe care aceasta o foloseste In interactiunea cu ea interfatada o cerere de autentificare apare o fereastra de la Facebook ın care utilizatorul introducecredentialele de la API-ul de Facebook se primeste ınapoi un access token si cu ajutorulacestuia face o cerere pentru a primi datele personale ale utilizatorului pentru creeareaprofilului utilizator

Urmatoarea parte a aplicatiei este interfata utilizator frontend-ul care reprezintapartea cu care utilizatorul interactioneaza si locul unde ıi sunt afisate informatiile

Cererile din interfata ajung ın a treia parte componenta a sistemului partea deserver adica backend-ul aplicatiei Acolo toate cererile sunt citite si procesate iar raspun-

33

sul lor este trimis la interfata utilizator Aceasta este partea care reprezinta rdquogandireardquoaplicatiei Aceea este componenta care face legatura ıntre cererile utilizatorului din inter-fata si datele stocate ın baza de date

Ultima componenta a aplicatiei o reprezinta baza de date care are ca rol sa stochezedatele despre utilizatori produse si comenzi Ea este o baza de date sub forma de grafde tipul Neo4j Acolo se salveaza entitatile aplicatiei sub forma de noduri si dependenteleıntre acestea sub forma de relatii ıntre aceste noduri

Figura 51 Diagrama de rdquodeploymentrdquo

In figura 51 este prezentata diagrama de rdquodeploymentrdquo a sistemului cu cele patrucomponente ale sistemului Aplicatia client comunica cu API-ul de la Facebook prin pro-tocolul securizat HTTPS cu backend-ul prin protocolul HTTP iar backend-ul cu baza dedate prin JDBC

Aplicatia a putut fi ımpartita ın aceste componente separate deoarece fiecare dintreele poate functiona independent de celelalte comunica cu ele doar prin mesaje Din acestmotiv locul unde ruleaza acestea pot sa fie pe servere diferite In plus daca aplicatiaar fi pusa pe servere pentru utilizatori ar putea fi mai multe servere pe care ruleaza ocomponenta si prin rdquoload balancingrdquo sa se trimita cererile ımpartite ıntre ele

Cum astfel componentele nu depind foarte mult unele de altele si pot rula faraa le interesa de unde le sunt trimise cererile este arhitectura cea mai corecta deoarecedefectarea sau o posibila eroare la una din ele nu o influenteaza cu nimic pe o alta Dacatoate ar rula pe acelasi server o eventuala defectiune a acestuia ar ınsemna o defectiune aıntregului sistem Insa daca exista mai multe noduri si se afla pe servere diferite pot doartoate cererile sa fie redirectionate spre un nod care functioneaza si aplicatia sa functionezepentru clienti la fel ca ınainte

34

Un alt avantaj al arhitecturii ar fi faptul ca la o lansare viitoare catre clienti se poatelansa doar componenta la care s-au facut modificari De asemenea aplicatia ar putea aveape viitor si o componenta mobila Iar cum serverul e independent poate fi acelasi serverfolosit de o alta aplicatie client

511 Arhitectura componentei backend

Arhitectura backend-ului este si ea ımpartita ın mai multe pachete pentru o maibuna structura si pentru o cat mai mica dependenta ıntre diversele componente Astfelcuplarea este minima ıntre clase si eventualele modificari ulterioare pot fi mai usor defacut

Serverul a fost implementat ın Java cu ajutorul framework-ului Spring Boot iarmediul de dezvoltare folosit a fost Intellij IDEA

Din punctul de vedere al ımpartirii arhitectura serverului aplicatiei este structurataın patru pachete si o clasa ın afara acestora Acea clasa este rdquomainrdquo-ul aplicatiei este parteacare trebuie rulata pentru a porni serverul Din cauza ca este o aplicatie Spring Boot si nuuna String singura adnotare necesara pentru a sti ca aceea este clasa rdquoradacinardquoa aplicatieieste SpringBootApplication

Cele patru pachete ale serverului sunt1 Cel de domeniu (domain) cu clasele POJO care reprezinta entitatile din baza de

date2 Cel de rdquomagazierdquo (repositories) care este cel care face direct actiunile ın baza de date3 Cel de serviciu (services) ın care se afla partea de logica a ıntregii aplicatii4 Cel de web ın care se afla clasele de rdquocontrollerrdquo

Figura 52 Diagrama de pachete pentru backend

35

Ca si dependente nivelul de web ıl foloseste pe cel de seviciu cel de serviciu ılfoloseste pe cel de rdquomagazierdquo iar clasele din pachetul de domeniu sunt folosite ın toatecelelalte pachete

In continuare voi prezenta pe rand fiecare nivel al serverului adica fiecare pachet

Figura 53 Diagrama de clase pentru pachetul rdquodomainrdquo

36

Nivelul de domeniu (domain) este alcatuit ın primul rand din clasele care suntentitati ın baza de date Acestea sunt reprezentate de toate clasele ce stocheaza informatiidespre utilizatori si despre produse si comenzi Pe langa informatiile personale despre unutilizator de genul numelui email-ului sau data nasterii care sunt salvate ın entitateapersoana se stocheaza despre utilizator ın clase diferite informatii de genul locului undelocuieste locul unde a copilarit locurilor unde a facut scoala locului unde lucreaza sau celmai important pentru aplicatia aceasta lucrurilor care ıi plac In afara acestor informatiidespre utilizatori sunt si clase cu informatiile despre prieteni despre produse sau desprecomenzi

Din cauza faptului ca aplicatia este de tipul unei retele sociale ın care exista prieteniiıntre persoane exista dependente ıntre toate entitatile aplicatiei Acesta este si motivulpentru care am ales baza de date sub forma de graf pe care sa se mapeze toate acesteentitati sub forma de noduri si toate aceste dependente sub forma de relatii

In pachetul de domeniu se afla si trei subpachete Unul dintre ele este pentruclasele folosite pentru a trata erorile aplicatiei In interiorul acestui pachet se afla douaclase pentru eroare si o exceptie cea folosita ın cazul ın care nu se gaseste ceea ce doresteutilizatorul Pe langa asta este clasa care are ca obiect raspunsul dat de sistem ın cazulunei erori la server Aceasta contine ın interiorul sau pe langa codul erorii si detalii despreeroarea trimisa Aceasta lista de detalii e reprezentata de obiectele de tipul celei de-a treiaclase din pachetul acesta

Celelalte doua subpachete aflate ın acest nivel sunt cele care contin clasele specialede cerere sau raspuns care au ajutat la maparea acestora mai bine In multe cazuri nua fost necesara trimiterea la interfata utilizator a tuturor informatiilor stocate despre oentitate si de aceea am ales sa creez ın aceste cazuri un obiect auxiliar care sa fie folositpe post de raspuns

Figura 54 Diagrama de clase pentru pachetul rdquorepositoriesrdquo

37

Cel de-al doilea nivel al aplicatiei backend este cel de rdquomagazierdquo (repositories) carecontine doar interfete de tip rdquoRepositoryrdquo

Aceste interfete sunt cele care fac operatiile directe asupra entitatilor din baza dedate

Unele interfete doar extind interfata care are deja implementate metodele CRUDsi din acest motiv nu au metode suplimentare iar altele au si metode ın plus care au carol sa execute interogari mai complexe asupra bazei de date In acele metode se pot scrieinterogarile ın Cypher pentru a putea primi informatii despre mai multe noduri sau desprerelatiile dintre acestea sau si pentru a returna doar anumite rezultate care ındeplinescanumite conditii In felul acesta a fost implementata si cererea de oferire a recomandarilorIn acel caz sistemul returneaza produsele care au ın descriere unul din lucrurile care se aflaın lista de obiecte sau servicii primite de la Facebook ca ıi plac utilizatorului

Nivelul de rdquoRepositoryrdquo este folosit direct de cel de-al treiea nivel cel de servi-ciu Acesta este nivelul la care se executa logica aplicatiei unde se comanda modul defunctionare al ıntregii aplicatii

Figura 55 Diagrama de clase pentru pachetul rdquoservicesrdquo

Pe acest nivel ajung toate cererile din server dupa ce trec de verificarile de securitateIn acest pachet se afla si clasa de securitate care face verificarile necesare In aceasta clasaexista o metoda ce se apeleaza la prima cerere cea de salvare a datelor de la Facebookdespre utilizator si care codifica id-ul utilizatorului si ıl trimite pe raspuns ınapoi interfeteiPe langa asta ın acea clasa se afla si o metoda care verifica faptul ca id-ul codificat esteal unui utilizator cu rol corespunzator pentru a face acea cerere

In plus ın acest pachet se afla si toate celelalte clase care fac diverse operatii pedatele din baza de date si dau raspunsuri cererilor din interfata Aici se afla logica care

38

comanda actiunile asupra utilizatorilor asupra prietenilor acestora asupra produselor siasupra comenzilor

Ultima clasa a acestui nivel este cea care se ocupa de trimiterea de email-uri Incazul ın care se face o noua comanda de catre un utilizator toti producatorii produselor depe comanda sunt notificati despre produsele lor pe care le doreste utilizatorul Din serviciulde comanda se apeleaza serviciul de email pentru fiecare producator din lista celor care auproduse care se afla pe lista comenzii utilizatorului

Ultimul si cel mai aproape de interfata utilizator este nivelul de web Acolo se aflatoate clasele de rdquoControllerrdquo ale aplicatiei server

Figura 56 Diagrama de clase pentru pachetul rdquowebrdquo

Toate cererile din interfata utilizator ıncearca sa se mapeze pe rutele declarate ınclase pentru a fi procesate ın metoda corespunzatoare Toata aceasta parte este foarteusor de implementat si mai ales foarte lizibil pentru programatori datorita adnotarilor dinJava Cu ajutorul acestora trebuie doar specificat care este numele URL-ului cererii careeste tipul de obiect asteptat si daca se trimite ca rdquoquery stringrdquo pe URL sau ın interiorulcorpului cererii si tipul raspunsului Pentru fiecare cerere care nu este apelata ın parteaneautentificata a utilizatorului primul lucru care se apeleaza este metoda de securitatepentru a verifica rolul si id-ul utilizatorului Daca din punctul de vedere al securitatii totuleste ın regula se apeleaza metoda corespunzatoare din pachetul de serviciu

39

O singura clasa este diferita de restul ın pachetul de controller si aceea este clasa deeroare Acolo se mapeaza erorile aparute ın timpul cererii si se trimite ınapoi ın interfatagrafica un raspuns cu cod de eroare specific nu numai 500 Generic Application Exceptioncum ar trimite fara aceasta clasa si cu detalii despre motivul aparitiei erorii

Datorita folosirii adnotarilor din java nu a fost necesara folosirea unor rdquodesignpatternrdquo-uri ın sistem De exemplu pentru a folosi ın nivelul de web ceva din pachetulde servicii trebuia doar acel obiect sa aiba adnotarea Autowired si se ınlocuieste atatfolosirea rdquodesign patternrdquo-ului Singleton cat si a celui de Factory Acel obiect nu trebuiecreat sau initializat se face asta implicit datorita adnotarii si de asemenea este folositapeste tot aceeasi instanta

In concluzie toate cererile venite din interfata grafica ajung ın nivelul de rdquocontrollerrdquode unde sunt trimise la cel de rdquoservicerdquopentru a fi procesate si facute eventualele modificarinecesare ın baza de date ca apoi raspunsul sa fie trimis ınapoi spre aplicatia client pentruafisare

512 Arhitectura componentei frontend

A doua componenta implementata a sistemului este aplicatia client frontend-ulAceasta a fost scrisa ın Java Script cu ajutorul framework-ului Ext JS compilarea

se face cu ajutorul Sencha CMD si mediul de implementare a fost IntelliJ IdeaCu ajutorul framework-ului Ext JS se scriu componente care apoi se initializeaza

unele pe altele Aplicatia porneste cu fisierul Applicationjs care este un fel de rdquomainrdquopentru aplicatie Aceasta initializeaza alte componente care la randul lor includ altecomponente si tot asa Structura poate fi foarte usor comparata cu una arborescenta dinacest punct de vedere

Framework-ul a fost creat sa functioneze ın felul acesta pentru ca scopul componen-telor este sa fie scrise ın asa fel ıncat sa poata pe viitor sa fie utilizate din nou Una dindorintele majore ın programare tot timpul este de a se scrie cod ıntr-o maniera ın care safie cat mai reutilizabil Iar framework-ul Ext JS exact asta ıncearca

Arhitectura aplicatiei client se gaseste ın figura 57 si este la randul ei ımpartita ınpachete ca si cea de server Similar cu pachetul de rdquodomainrdquo de la aplicatia de backendeste pachetul rdquomodelrdquo al interfetei utilizator Aici sunt rdquoclaserdquo care sunt simple POJO sicare sunt apoi folosite ın nivelele urmatoare Sunt mai putine decat clasele din rdquostorerdquodeoarece daca raspunsul de la server nu trebuie procesat nu sunt necesare se pot mapadirect obiectele din rdquostorerdquo pe componentele interfetei utilizator

Urmatorul nivel este cel pe care se afla clasele de rdquostorerdquo Acestea sunt cele careexecuta cererea spre backend si face legatura ıntre client si server Daca are o clasa derdquomodelrdquodeclarata atunci populeaza acel obiect cu datele primite de la server iar ın cazul ıncare nu este declarat un model se trimit datele exact asa cum s-au primit la nivelul urmatorde rdquoviewrdquo Acest nivel seamana din punct de vedere al functiei cu cel de rdquorepositoryrdquo de laaplicatia server deoarece ambele au rol de legatura Aceea facea legatura ıntre aplicatiesi baza de date si aceasta face legatura ıntre aplicatia client si aplicatia server

40

Figura 57 Diagrama de clase pentru aplicatia web

Cel de-al treilea pachet al aplicatiei este cel de rdquoviewrdquo In acest pachet se afla claselecare alcatuiesc partea vizuala a aplicatiei La randul ei si aceasta este alcatuita tot dincomponente Aplicatia deschide ın primul rand Main-ul care determina aparitia paginii deHome si afisarea ın meniu a optiunilor posibile ın functie de autentificare si rol Clasele deaici se executa de fapt la deschiderea aplicatiei fiind rdquosingle page applicationrdquo si tot atuncise ıncarca pe pagina componentele Ca si arhitectura a pachetului acesta este ımpartit larandul sau ın subpachete Pentru o mai buna organizare exista patru subpachete cateunul pentru fiecare tip de utilizator In felul acesta toate rdquoviewrdquo-urile care sunt specificeunui utilizator cu un anumit rol se afla ın acelasi subpachet

Cele patru subpachete existente ın pachetul rdquoviewrdquo sunt

1 Pachetul rdquomainrdquo care cuprinde rdquoviewrdquo-urile care se afla ın partea neautentificata aaplicatiei

2 Pachetul rdquoclientrdquo continand rdquoviewrdquo-urile pe care le poate accesa un utilizator simplu3 Pachetul rdquoproducerrdquo specific actiunilor unui utilizator care are rol de producator4 Pachetul rdquoadminrdquo care contine toate rdquoviewrdquo-urile care ıi apar unui utilizator care este

administrator al aplicatiei

Ultimul pachet si nivel al aplicatiei client este cel de rdquocontrollerrdquo In acest pachet

41

se afla clasele care fac actiunile din interfata grafica In timp ce pachetul rdquoviewrdquo continedoar partea grafica a aplicatiei adica modul ın care aceasta trebuie sa arate pachetulrdquocontrollerrdquo contine actiunea acestora modul ın care aplicatia trebuie sa functioneze

Ca si arhitectura si acest pachet a fost ımpartit la randul lui tot ın cele patrusubpachete ca si pachetul rdquoviewrdquo adica rdquomainrdquo rdquoclientrdquo rdquoproducerrdquo si rdquoadminrdquo In pluspentru a fi usor de gasit ce clasa de rdquocontrollerrdquo apartine carui rdquoviewrdquo am ales ca cele douasa aiba acelasi nume In felul acesta daca se doreste sa se gaseasca actiunile unui rdquoviewrdquose poate cauta dupa o clasa cu acelasi nume ın pachetul rdquocontrollerrdquo Numarul claselor dinacest pachet este mai mic decat cel al claselor din rdquoviewrdquo deoarece nu toate paginile dininterfata au actiuni suplimentare Daca singura actiune este ıncarcarea paginii cu date dela server adica doar o actiune simpla de GET datele se ıncarca cu ajutorul rdquostorerdquo-ului laıncarcarea paginii si nu este necesara nici o actiune suplimentara Paginile pe care se potface si actiuni de alt gen sau se deschid noi ferestre au nevoie de clase de rdquocontrollerrdquo

In concluzie arhitectura aplicatiei client este una bazata pe componente care ıncearcasa foloseasca cat mai multe clase reutilizabile

52 Structura bazei de date

Baza de date a aplicatiei este de tip graf de tipul Neo4j Pentru utilizare exista unprogram numit Neo4j ce trebuie instalat Acest program are si o interfata grafica ın carese pot vizualiza datele sub forma grafica si ın care se pot scrie de asemenea si interogariın limbajul acestei baze de date adica Cypher

Fiind o baza de date sub forma de graf datele stocate sunt salvate ın structurade date sub forma de noduri si relatii Entitatile din pachetul de domeniu din aplicatiabackend se gasesc ın baza de date sub forma unor noduri iar dependentele dintre nodurise mapeaza ın baza de date sub forma unor relatii Un element diferit fata de alte tipuride baze de date este faptul ca pe relatiile dintre noduri se pot salva atribute cum este ınaplicatie cazul pentru prieteniile dintre persoane In cazul acestora pe relatia dintre nodurise salveaza daca prietenia a fost sau nu acceptata

Pentru fiecare clasa POJO din aplicatia server clasa ce are doar metodele get si setsi se afla ın pachetul domain exista cate un tip de nod diferit ın baza de date cum estesi marcat ın diferite culori ın figura 58 Fiecare tip de nod are atributele proprii care potlua valori sau pot fi nule Iar fiecare obiect din Java reprezinta un nod diferit ın baza dedate

Neo4j a fost cea mai buna optiune pentru baza de date pentru ca aplicatia poate ficonsiderata o retea sociala Acest lucru se datoreaza relatiilor de prietenie dintre persoanesi a multiplelor relatii ıntre noduri Toate nodurile se afla ın acceasi componenta conexadeci nu exista noduri izolate care sa nu aiba nici o legatura cu nici un alt nod

Datorita acestei structuri a bazei de date este posibila implementarea cererii derecomandare ca o simpla interogare ın baza de date aceasta fiind cea mai simpla metodade implementare a unui sistem de genul acesta una mult mai complexa ar fi fost un

42

algoritm de ınvatare care sa ınvete tipare ale utilizatorilor si sa recomande cadouri pe bazaacestor informatii

Figura 58 Diagrama bazei de date pentru doi utilizatori

Un alt avantaj al acestui tip de baza de date este faptul ca datele nu sunt duplicateın baza de date Spre exemplu daca mai multi utilizatori au ca locatie acelasi oras nu secreaza cate un nod cu acea locatie de mai multe ori ci acel unic nod va avea cate o relatiecu fiecare utilizator care are ca locatie acel oras

In concluzie structura bazei de date a fost aleasa ın acest fel datorita tipului apli-catiei adica asemanatoare cu o retea sociala si datorita implementarii simple a unui sistemde recomandare pe o asemenea baza de date

53 Fluxul pentru diferite operatii

Pentru aplicatie cele mai importante cazuri de utilizare sunt salvarea informati-ilor despre utilizator primite de la Facebook pentru crearea unui profil si recomandareacadourilor pentru un utilizator al aplicatiei Din aceasta cauza cele doua cazuri de utilizarevor fi prezentate mai ın detaliu ın continuare

43

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 19: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

Figura 37 Site web Nordstrom

14

Capitolul 4

Analiza si Fundamentare Teoretica

In acest capitol vor fi prezentate cerintele functionale ale lucrarii ımpreuna cucerintele non-functionale ale acesteia De asemenea va fi prezentata diagrama cazurilor deutilizare si vor fi prezentate mai ın detaliu cazurile de utilizare principale ale aplicatiei Incontinuare se va prezenta perspectiva tehnologica a proiectului si se vor explica deciziiletehnologice luate In final se va prezenta diagrama conceptuala a aplicatiei

41 Cerinte functionale

bull Posibilitatea autentificarii ın aplicatie si crearii unui profil propriu din care se potutiliza informatii si cu ajutorul caruia utilizatorul poate fi ıncadrat ıntr-un profil

bull Utilizatorii pot crea prietenii ca ıntr-o retea de socializare pentru a putea afla infor-matii despre prieteni si pentru a li se putea recomanda cadouri pentru acestia

bull Cu ajutorul informatiilor de la Facebook un utilizator poate fi notificat dinainte caurmeaza ziua de nastere a unuia din prietenii lui si sa i se ofere mai multe variantede cadouri potrivite pentru acesta Aceasta informatie o primeste cu suficient timpınainte pentru a nu fi surprins fara un cadou De la Facebook pe langa informatiiledespre data zilei de nastere sunt importante si varsta sau lucrurile care ıi plac uti-lizatorului Toate acestea ajuta la crearea profilului utilizatorului pe baza caruia serecomanda dupa aceea cadourile

bull De asemenea sistemul poate recomanda si un cadou pentru alt tip de evenimentdecat zi de nastere de genul cadou de Craciun cadou de nunta cadou pentru unnou-nascut etc

bull In aplicatie vor fi adaugate si diferite produse iar pentru a face mai usoara cumparareade cadouri se va putea face si comanda pe internet In momentul ın care un utilizatorface o noua comanda producatorii produselor comandate sunt ınstiintati de existentaacestei noi comenzi

15

bull Pentru persoanele la care pe profilul de Facebook este insuficient completat saupentru a putea cumpara cadouri pentru o persoana care nu are Facebook sau nuare cont ın aceasta aplicatie si despre care ın acest fel nu se cunosc nici un felde informatii se vor putea filtra cautarile pentru cadou printr-o serie de ıntrebaristandard Aceste ıntrebari vor putea creea un rdquomini-profilrdquo pentru acea persoanapentru ca sistemul sa poata recomanda cadouri

42 Cerinte non-functionale

bull Securitate sistemul nu raspunde cererilor decat atunci cand utilizatorul a fost au-tentificat ın aplicatie si are rolul necesar pentru a face acea cerere

bull Portabilitate aplicatia nu depinde de sistemul de operare pe care ruleaza De aseme-nea nu e dependenta de browserul folosit de utilizator

bull Disponibilitate sistemul ramane stabil ın fata erorilor si functioneaza la fel si dupaaparitia unei erori

bull Extensibilitate sistemul permite adaugarea sau modificarea unor componente atuncicand cerintele aplicatiei se modifica Pe langa asta e flexibila unor dezvoltari ulte-rioare

43 Cazuri de utilizare

In aceasta sectiune se vor prezenta actorii aplicatiei diagrama cazurilor de utilizaresi vor fi descrise cazurile de utilizare de baza ale fiecarui actor

Ca si actori aplicatia are patru tipuri de utilizatori

bull utilizator anonimbull clientbull producatorbull administrator

Aplicatia este conceputa ın asa fel ıncat ıntre actori este o relatie de mostenire Acestlucru presupune ca un actor are posibilitatea de a efectua tot ce putea cel dinaintea lui siceva ın plus Deci utilizatorii anonimi au cele mai putine permisiuni iar administratoriiau permisiuni totale Acest lucru se vede foarte clar si ın diagrama cazurilor de utilizaredin imaginea 41

In continuare vor fi prezentate cazurile de utilizare

1 recomandare cadouri2 adaugare produs3 modificare rol utilizator

16

Figura 41 Digrama cazurilor de utilizare

17

431 Recomandare cadouri

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unutilizator trebuie sa le urmeze pentru a primi recomandari de cadouri pentru un cunoscutsi pentru a efectua o comanda

Actorul principal

Orice utilizator al aplicatiei

Parti interesate si interese

Utilizatorul care doreste sa cumpere un cadou este interesat de a gasi un cadoupotrivit pentru cineva pe care ıl cunoaste

Producatorul care e interesat sa ısi poata vinde produseleUtilizatorul care primeste cadoul fiind interesat sa primeasca un cadou care sa i se

potriveasca si care sa ıi placa

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand utilizatorul porneste aplicatia11 Utilizatorul verifica daca are cont de Facebook si daca are urmeaza pasul 111

daca nu 22111 Utilizatorul se autentifica ın aplicatie cu ajutorul credentialelor de la

Facebook12 Utilizatorul deschide sectiunea de recomandare cadouri13 Utilizatorul completeaza formularul cu datele ce trebuie introduse pentru a primi

recomandari de cadouri pentru un prieten14 Utilizatorul poate fi satisfacut cu recomandarile primite si atunci urmeaza pasul

141 iar daca nu este atunci urmeaza cazul alternativ 23141 Utilizatorul adauga ın cosul de cumparaturi cadouri pe care doreste sa

le cumpere15 Utilizatorul cere sa ısi vada cosul de cumparaturi16 Utilizatorul poate sa se declare multumit de cosul de cumparaturi caz ın care

urmeaza pasul 161 sau poate sa aleaga cazul alternativ 24161 Utilizatorul aproba cosul de cumparaturi si accepta sa se faca comanda

17 Sistemul introduce ın baza de date comanda18 Utilizatorul va putea vedea la sectiunea comenzilor sale noua comanda si statusul

ei19 Sistemul notifica producatorul de aparitia noii comenzi110 Utilizatorul se dezautentifica din aplicatie

18

Use-Case EndUtilizatorul se va deconecta din aplicatie si o va ınchide

Figura 42 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueazaAcest flux poate aparea la orice pas211 Utilizatorul deschide sectiunea de recomandare cadouri212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca utilizatorul nu are cont de Facebook

19

Acest flux poate aparea la pasul 11221 Utilizatorul deschide pagina de Facebook222 Utilizatorul ısi face un cont pe pagina de Facebook si ısi completeaza

date despre el223 Utilizatorul revine la aplicatia de recomandare cadouri si ıncearca din

nou sa se autentifice ın aplicatie224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca utilizatorul nu e multumit de recomandariAcest flux poate aparea la pasul 14231 Utilizatorul sterge din cos cadourile pe care nu le mai doreste si revine

la pagina de recomandari232 Utilizatorul adauga alte cadouri ın cos233 Cazul de utilizare continua de la pasul 141

24 Flux-ul alternativ daca utilizatorul nu e multumit de produsele din cosul decumparaturi

Acest flux poate aparea la pasul 16241 Utilizatorul revine ınapoi la formularul cu introducerea datelor despre

beneficiarul cadoului242 Utilizatorul completeaza din nou datele243 Cazul de utilizare continua de la pasul 13

Preconditii

1 Utilizatorul trebuie sa aiba un cont de Facebook pentru a se putea autentifica ınaplicatie

2 Utilizatorul trebuie sa fie autentificat ın aplicatie pentru a putea face orice actiunedin acest caz de utilizare

3 Utilizatorul trebuie sa deschida sectiunea de recomandare cadouri pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noua comanda este salvata ın baza de date2 Comanda apare ın sectiunea de comenzi a utilizatorului ımpreuna cu statusul ei

curent3 Producatorul este notificat ca are o noua comanda

432 Adaugare produs

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unproducator trebuie sa le urmeze pentru a introduce un nou produs ın aplicatie

20

Actorul principal

Utilizatorii cu rol de producator sau cu rol de administrator

Parti interesate si interese

Producatorul care doreste sa introduca produsul nou ın aplicatie

Utilizatorii simpli care au o mai mare varietate de produse din care sa li se reco-mande cadouri

Figura 43 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo

21

Flux de evenimente

Use-Case Start

Cazul de utilizare ıncepe atunci cand producatorul porneste aplicatia

11 Producatorul verifica daca are cont de Facebook si daca are urmeaza pasul111 daca nu 22

111 Producatorul se autentifica ın aplicatie cu ajutorul credentialelor de laFacebook

12 Producatorul deschide sectiunea de adaugare produs

13 Producatorul completeaza datele necesare despre noul produs ımpreuna cu tipulde persoana si eveniment care i s-ar potrivi

14 Producatorul verifica daca este multumit de datele introduse si daca da urmeazapasul 141 daca nu 23

141 Producatorul efectueaza operatia de adaugare produs

15 Sistemul adauga un nou produs ın baza de date

16 Sistemul notifica producatorul ca noul produs a fost introdus cu succes

17 Producatorul se dezautentifica din aplicatie

Use-Case End

Producatorul se va deconecta din aplicatie si o va ınchide

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Producatorul deschide sectiunea de adaugare produs

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca producatorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Producatorul deschide pagina de Facebook

222 Producatorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Producatorul revine la aplicatia de recomandare cadouri si ıncearca dinnou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca Producatorul nu e multumit de datele introduse despreprodus

Acest flux poate aparea la pasul 14

231 Producatorul sterge datele gresite despre produs

232 Producatorul adauga alte date despre produs

233 Cazul de utilizare continua de la pasul 141

22

Preconditii

1 Producatorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Producatorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Producatorul trebuie sa aiba cont cu rol de rdquoproducatorrdquo sau rdquoadminrdquo pentru aputea face operatia aceasta

4 Producatorul trebuie sa deschida sectiunea de adaugare produs pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noul produs este salvat ın baza de date2 Produsul poate fi adaugat la recomandarile unui utilizator din acel moment

433 Modificare rol utilizator

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unadministrator trebuie sa le urmeze pentru a modifica rolul unui utilizator al aplicatiei

Actorul principal

Un utilizator al aplicatiei care are rol de administrator

Parti interesate si interese

Administratorul care doreste sa modifice rolul unui utilizatorUtilizatorul care doreste sa ısi schimbe rolul

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand administratorul porneste aplicatia11 Administratorul verifica daca are cont de Facebook si daca are urmeaza pasul

111 daca nu 22111 Administratorul se autentifica ın aplicatie cu ajutorul credentialelor de

la Facebook12 Administratorul deschide sectiunea de utilizatori13 Sistemul ıi returneaza administratorului utilizatorii care nu sunt administratori14 Administratorul modifica rolul utilizatorului din utilizator simplu ın producator

sau invers

23

15 Administratorul cere executarea modificarii

16 Sistemul executa modificarea iar ın caz de succes urmeaza pasul 161 si ın cazde eroare pasul 23

161 Sistemul notifica administratorul ca modificarea a fost efectuata cusucces

17 Utilizatorul se dezautentifica din aplicatie

Use-Case End

Administratorul se va deconecta din aplicatie si o va ınchide

Figura 44 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo

24

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Administratorul deschide sectiunea de utilizatori

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca administratorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Administratorul deschide pagina de Facebook

222 Administratorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Administratorul revine la aplicatia de recomandare cadouri si ıncearcadin nou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca sistemul returneaza o eroare la modificarea utilizatorului

Acest flux poate aparea la pasul 16

231 Sistemul returneaza un mesaj de eroare la modificarea utilizatorului

232 Aplicatia afiseaza mesajul de eroare administratorului

233 Cazul de utilizare continua de la pasul 15

Preconditii

1 Administratorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Administratorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Utilizatorul trebuie sa aiba cont cu rol de administrator pentru a putea efectuaorice actiune din acest caz de utilizare

4 Administratorul trebuie sa deschida sectiunea utilizatori pentru a putea ındeplinicerintele din cazul de utilizare

Postconditii

1 Noul rol al utilizatorului este salvat ın baza de date

2 La urmatoarea autentificare a utilizatorului acesta va observa ca interfata si maiprecis meniurile si actiunile care le poate face ıi vor fi diferite

25

44 Perspectiva tehnologica

441 Neo4j

Neo4j 1 este un sistem de gestionare a bazelor de date sub forma de graf dezvoltatde Neo4j Inc Descris de dezvoltatorii sai ca o baza de date tranzactionala compatibilacu ACID Neo4j este cea mai populara baza de date sub forma de graf dupa clasamentulDB-Engines

Baza de date Neo4j (ca si orice alta baza de date sub forma de graf) este foartediferita de o baza de date relationala cum ar fi MS Access SQL Server MySQL etcBazele de date relationale utilizeaza tabele randuri si coloane pentru stocarea datelor

Neo4j nu utilizeaza tabele randuri si coloane pentru stocarea sau prezentarea datelorci noduri si relatii

Neo4j este foarte potrivit pentru stocarea datelor care au multe relatii interconec-tate Acestea sunt de fapt aplicatiile ın care merita sa fie folosite De fapt bazele de datesub forma de graf cum este Neo4j sunt mult mai bune la tratarea datelor interconectatedecat bazele de date relationale

Acest lucru se datoreaza faptului ca modelul sub forma de graf nu necesita de obiceio schema predefinita Nu e nevoie sa se creeze structura bazei de date ınainte de a fiıncarcate datele asa cum se face la o baza de date relationala

Dar principalul motiv pentru care Neo4j este mai bun pentru datele relationalepentru acest tip de aplicatii este modul ın care permite crearea relatiilor Neo4j este con-struit ın jurul relatiilor si atunci nu este nevoie sa se configureze chei primare constrangerichei straine pentru a predetermina nodurile care pot avea o relatie si la ce date Cu Neo4jse poate adauga orice legatura ıntre orice nod ori de cate ori este nevoie

Neo4j are aceste calitati care nu se gasesc nici la celelalte baze de date NoSQLBazele de date non-relationale pe langa cele sub forma de graf sunt cele de tip coloanade tip document de tip cheie-valoare si de tip multi-model Nici unul din aceste tipuri nuau ca principala functionalitate maparea relatiilor si facilitatea interogarilor ıntr-o baza dedate cu multe relatii ıntre entitati

Generarea de recomandari personalizate este unul dintre cele mai frecvente cazuride utilizare a unei baze de date sub forma de graf Unele dintre principalele beneficii aleutilizarii grafurilor pentru a genera recomandari includ

- Performanta Lipsa indexurilor permite calcularea recomandarilor ın timp realasigurand ca recomandarea este ıntotdeauna relevanta si reflecta informatii actualizate

- Model de date Modelul de graf cu proprietati permite combinarea cu usurinta aseturilor de date din mai multe surse

Un alt avantaj al bazelor de date sub forma de graf Neo4j este faptul ca respectatoate principiile din modelul de consistenta ACID

Garantia data de principiile ACID este ca ofera un mediu sigur ın care sa functionezedatele Acronimul ACID reprezinta

1httpsneo4jcomuse-casesreal-time-recommendation-engine

26

bull Atomic Toate operatiile dintr-o tranzactie reusesc sau fiecare operatie este reluatabull Consistent La finalizarea unei tranzactii baza de date este solida din punct de

vedere structuralbull Izolat Tranzactiile nu se lupta una cu cealalta Accesul controversat la date este

moderat de baza de date astfel ıncat tranzactiile par sa se execute succesivbull Durabil Rezultatele aplicarii unei tranzactii sunt permanente chiar si ın cazul unor

defectiuniCand vine vorba de tehnologiile NoSQL cele mai multe baze de date sub forma de

graf (inclusiv Neo4j) utilizeaza un model de consistenta ACID pentru a asigura ca datelesunt stocate ın siguranta si ın mod consecvent

Am ales baza de date sub forma de graf ca optiune pentru stocarea datelor deoarecedin toate lucrarile si articolele citite a fost optiunea cea mai buna pentru un sistem derecomandare Deci acesta se mapeaza perfect pe cerintele functionale ale proiectului Sidin optiunile de baze de date sub forma de graf Noe4j a avut de departe cele mai multeavantaje ea fiind si cea mai utilizata

442 Cypher

Cypher 2 este un limbaj declarativ de interogare pentru bazele de date sub formade graf care permite interogarea si actualizarea rapida a datelor Cypher este un limbajrelativ simplu dar foarte puternic Interogarile foarte complexe ale bazei de date pot fiusor exprimate prin intermediul limbajului Cypher

Este conceput pentru a fi un limbaj de interogare uman Scopul lui principal este dea face interogarile mult mai simple si unele interogari care la bazele de date relationale nuerau posibile le face posibile Constructiile sale se bazeaza pe grafica si pe limba englezalucru care ajuta la scrierea mai intuitiva a interogarilor Este construit pentru a fi maiintuitiv pentru citire si nu neaparat pentru scriere

Cypher se bazeaza pe modelul Graph Property care ın plus fata de elementelegrafice standard ale nodurilor si muchiilor (numite relatii ın Cypher) adauga etichete siproprietati ca si concepte Nodurile pot avea zero sau mai multe etichete ın timp ce fiecarerelatie este de exact un singur tip Nodurile si relatiile au de asemenea zero sau mai multeproprietati

Chypher este limbajul de interogare folosit la bazele de date Neo4j deci este opti-unea implicita atunci cand se alege Neo4j

443 Maven

Maven 3 este un instrument de management software si de ıntelegere a proiectelorsoftware Pe baza conceptului unui model de obiect de proiect (POM) Maven poategestiona construirea raportarea si documentarea unui proiect printr-o informatie centrala

2httpsneo4jcomdevelopercypher-query-language3httpswwwjavatpointcommaven-tutorial

27

Obiectivul principal al lui Maven este acela de a permite unui dezvoltator sa ınte-leaga starea completa a efortului de dezvoltare ın cel mai scurt timp Avantajele Mavensunt

bull instalarea rapida a proiectului fara fisiere buildxml complicate doar un POMbull procesul de construire este standardizat pentru toate proiectelebull usor de ınvatat si de utilizatbull configurarea unui proiect este foarte rapidabull bine documentat

Am ales sa folosesc Maven deoarece este una din cele mai comune optiuni pentru aimporta librariile ıntr-un proiect si este si cel mai documentat Deci mereu cand esti pusın dificultate poti cauta pe internet sugestii

444 Spring Boot

Spring Boot 4 este un framework din cadrul Spring care ofera setari implicite pentruconfigurarea codului si adnotari pentru a lansa rapid proiecte noi ın executie Urmaresteabordarea rdquoConfigurarea defectiunilor vizionaterdquo pentru a evita un numar mare de linii decod pentru configuratii si pentru a ımbunatati procesul de dezvoltare

Avantajele Spring Boot sunt1 Face foarte usoara dezvoltarea de aplicatii bazate pe Spring cu Java sau Groovy2 Reduce timpul de dezvoltare si creste productivitatea3 Evita scrierea multor linii de cod adnotari si configurare XML4 Este foarte usor de integrat cu alte framework-uri din aceasi familie Spring cum ar

fi Spring JDBC Spring ORM Spring Data Spring Security etc5 Urmareste abordarea rdquoConfigurarea implicita a optiunilorrdquo pentru a reduce efortul

pentru dezvoltatori6 Ofera servere HTTP ıncorporate cum ar fi Tomcat Jetty etc pentru a dezvolta si

testa aplicatiile web foarte usor7 Ofera instrumentul CLI (Command Line Interface) pentru a dezvolta si testa apli-

catiile de tip rdquoSpring Bootrdquo (Java sau Groovy) din linia de comanda foarte usor sirapidAm ales ca optiune pentru partea de backend acest framework deoarece simplifica

foarte mult lucrurile Datorita lui un programator poate sa ısi concentreze mai tare energiape a construi proiectul din punctul de vedere al buissness-ului logic nu din punctul devedere al configurarilor necesare

445 Sencha CMD si ExtJS

Sencha CMD 5 este un instrument linie de comanda cross-platform care ofera multesarcini automate ın ciclul complet de viata al unei aplicatii ExtJS de la generarea unui

4httpswwwjavatpointcomspring-boot-tutorial5httpsdocssenchacomcmd

28

nou proiect la lansarea unei aplicatii ın productie

Sencha Cmd ofera o colectie de caracteristici puternice pentru economisirea timpu-lui care functioneaza ımpreuna cu Sencha ExtJS si Sencha Touch

Ext JS 6 este un framework pur JavaScript pentru construirea de aplicatii webinteractive cross-platform utilizand tehnici precum scripting Ajax DHTML si DOM

Avantajele framework-ului ExtJS sunt

1 Documentatia Extjs este foarte cuprinzatoare si bine ıntretinuta2 Aspectul cheie al bibliotecii EXTJS este suportul de tip cross-browser3 Framework-ul ExtJS ofera o multitudine de elemente UI Aceste elemente includ

forme casete de dialog file arbori si tabele4 Framework-ul ExtJS include suport pentru implementarile Ajax5 ExtJS ofera performante excelente Framework-ul este complet orientat spre obiecte

si este extensibil asta pentru ca este scris ın JavaScript

Pentru partea de frontend se foloseste framework-ul ExtJS deoarece are o arhitec-tura ce se mapeaza foarte bine pe proiectele de frontend si anume arhitectura bazata pecomponente Aceasta face ca ın proiect codul sa fie mult mai organizat si procesul dedezvoltare al proiectului sa fie mult mai scurt prin identificarea mai usoara a erorilor

446 Facebook API(Graph API)

Graph API 7 este modul principal de a pune date ın platforma Facebook si de aobtine date din platforma Facebook Este un API bazat pe HTTP pe care aplicatiile ılpot utiliza pentru interogarea datelor pentru a introduce postari noi pentru gestionareaanunturilor sau pentru a ıncarca fotografii

Este denumit Graph API dupa ideea unui rdquograf socialrdquo - o reprezentare sub formade graf a informatiilor de pe Facebook Este compus din

bull noduri - ın esenta obiecte individuale cum ar fi un utilizator o fotografie o paginasau un comentariu

bull muchii - conexiuni ıntre o colectie de obiecte si un singur obiect cum ar fi fotografiilede pe o pagina sau comentariile de la o fotografie

bull campuri - date despre un obiect cum ar fi ziua de nastere a unui utilizator saunumele paginii

De obicei se utilizeaza noduri pentru a obtine date despre un anumit obiect se uti-lizeaza muchii pentru a obtine colectii de obiecte legate de un singur obiect si se utilizeazacampurile pentru a obtine date despre un singur obiect sau mai multe obiecte dintr-ocolectie

Am folosit Facebook API ca solutie pentru a ımbunatati problema de rdquocold startrdquopentru ca este singurul site pe care marea majoritate a oamenilor au cont si salveazalucrurile care le plac Deci se potrivea perfect peste nevoile aplicatiei mele

6httpdocssenchacomextjs6207httpsdevelopersfacebookcomdocsgraph-api

29

447 Git

Git 8 este un sistem de control a versionarii pentru urmarirea modificarilor ın fisierelede pe computer si coordonarea activitatii asupra acestor fisiere ın randul mai multor per-soane Este utilizat ın principal pentru gestionarea codului sursa ın dezvoltarea de softwaredar poate fi folosit pentru a urmari schimbarile ın orice set de fisiere

Avantaje ale Git

bull Modelul distribuit numai ceea ce se doreste se face publicbull Branching-ul si merging-ul sunt usoarebull Fluxul de lucru este flexibilbull Integritatea datelor este asigurata Deoarece GIT utilizeaza arbori SHA1 coruperea

datelor din motive externe poate fi usor detectatabull Rapid Git este foarte rapid chiar si ın comparatie cu alte sisteme de control a

versionarii

Am folosit Git pentru a avea la proiect un back-up ın caz ca se ıntampla ceva cuproiectul salvat pe calculator

45 Arhitectura conceptuala

In figura 45 este prezentata arhitectura conceptuala a sistemului Acesta este ım-partit ın doua mari parti backend-ul si frontend-ul care comunica ıntre ele si ısi trimitinformatii

Se poate observa ca baza de date este de tip graf mai exact Neo4j si comunica cubackend-ul pentru a putea lucra cu datele stocate Backend-ul este structurat pe nivelefiecare cu un diferit rol si care trebuie parcurs pentru a procesa datele din interfata ınbaza de date Cele trei nivele sunt cel de Repository cel de Service si cel ControllerToate interogarile venite din interfata utilizator ajung ın nivelul de Controller Dupa ceinterogarile trec de securitatea sistemului ajung ın nivelul de Service Acolo se proceseazasi se afla partea de logica a aplicatiei Pentru a interactiona cu baza de date din Servicese apeleaza metodele din nivelul de Repository

In continuare backend-ul comunica prin protocolul HTTP cu interfata grafica cucare interactioneaza clientii aplicatiei Interfata este scrisa ın Ext JS si are o parte de Viewsi o parte de Controller care este cea care comunica cu backend-ul

Pentru partea de autentificare sistemul interactioneaza cu API-ul de la Facebookde la care ia dupa autentificare un access token Cu ajutorul acestuia ia dupa aceea datelenecesare pentru a putea crea un profil utilizatorului

8httpsguidesgithubcomintroductiongit-handbook

30

Figura 45 Arhitectura conceptuala

31

Capitolul 5

Proiectare de Detaliu siImplementare

In acest capitol vor fi prezentate detalii de implementare ale sistemului de recoman-dare incluzand o ımpartire al acestuia ın componentele care ıl cuprind

Obiectivul este de a prezenta arhitectura si modul de implementare al aplicatieipe baza datelor descoperite ın studiul bibliografic de la capitolul trei si cu tehnologiilehotarate la capitolul patru Pe langa asta va fi prezentata si structura bazei de date sideciziile luate pentru securitatea aplicatiei

51 Arhitectura sistemului

Din punctul de vedere al arhitecturii aplicatia se poate considera ca este alcatuitadin patru mari componente

1 API-ul de la Facebook2 Aplicatia client care reprezinta interfata grafica a aplicatiei3 Aplicatia server adica backendul aplicatiei si partea ın care se afla partea de rdquobusiness

logicrdquo4 Baza de date

Partea componenta reprezentata de API-ul de la Facebook este doar o componentacu care aplicatia se integreaza si pe care aceasta o foloseste In interactiunea cu ea interfatada o cerere de autentificare apare o fereastra de la Facebook ın care utilizatorul introducecredentialele de la API-ul de Facebook se primeste ınapoi un access token si cu ajutorulacestuia face o cerere pentru a primi datele personale ale utilizatorului pentru creeareaprofilului utilizator

Urmatoarea parte a aplicatiei este interfata utilizator frontend-ul care reprezintapartea cu care utilizatorul interactioneaza si locul unde ıi sunt afisate informatiile

Cererile din interfata ajung ın a treia parte componenta a sistemului partea deserver adica backend-ul aplicatiei Acolo toate cererile sunt citite si procesate iar raspun-

33

sul lor este trimis la interfata utilizator Aceasta este partea care reprezinta rdquogandireardquoaplicatiei Aceea este componenta care face legatura ıntre cererile utilizatorului din inter-fata si datele stocate ın baza de date

Ultima componenta a aplicatiei o reprezinta baza de date care are ca rol sa stochezedatele despre utilizatori produse si comenzi Ea este o baza de date sub forma de grafde tipul Neo4j Acolo se salveaza entitatile aplicatiei sub forma de noduri si dependenteleıntre acestea sub forma de relatii ıntre aceste noduri

Figura 51 Diagrama de rdquodeploymentrdquo

In figura 51 este prezentata diagrama de rdquodeploymentrdquo a sistemului cu cele patrucomponente ale sistemului Aplicatia client comunica cu API-ul de la Facebook prin pro-tocolul securizat HTTPS cu backend-ul prin protocolul HTTP iar backend-ul cu baza dedate prin JDBC

Aplicatia a putut fi ımpartita ın aceste componente separate deoarece fiecare dintreele poate functiona independent de celelalte comunica cu ele doar prin mesaje Din acestmotiv locul unde ruleaza acestea pot sa fie pe servere diferite In plus daca aplicatiaar fi pusa pe servere pentru utilizatori ar putea fi mai multe servere pe care ruleaza ocomponenta si prin rdquoload balancingrdquo sa se trimita cererile ımpartite ıntre ele

Cum astfel componentele nu depind foarte mult unele de altele si pot rula faraa le interesa de unde le sunt trimise cererile este arhitectura cea mai corecta deoarecedefectarea sau o posibila eroare la una din ele nu o influenteaza cu nimic pe o alta Dacatoate ar rula pe acelasi server o eventuala defectiune a acestuia ar ınsemna o defectiune aıntregului sistem Insa daca exista mai multe noduri si se afla pe servere diferite pot doartoate cererile sa fie redirectionate spre un nod care functioneaza si aplicatia sa functionezepentru clienti la fel ca ınainte

34

Un alt avantaj al arhitecturii ar fi faptul ca la o lansare viitoare catre clienti se poatelansa doar componenta la care s-au facut modificari De asemenea aplicatia ar putea aveape viitor si o componenta mobila Iar cum serverul e independent poate fi acelasi serverfolosit de o alta aplicatie client

511 Arhitectura componentei backend

Arhitectura backend-ului este si ea ımpartita ın mai multe pachete pentru o maibuna structura si pentru o cat mai mica dependenta ıntre diversele componente Astfelcuplarea este minima ıntre clase si eventualele modificari ulterioare pot fi mai usor defacut

Serverul a fost implementat ın Java cu ajutorul framework-ului Spring Boot iarmediul de dezvoltare folosit a fost Intellij IDEA

Din punctul de vedere al ımpartirii arhitectura serverului aplicatiei este structurataın patru pachete si o clasa ın afara acestora Acea clasa este rdquomainrdquo-ul aplicatiei este parteacare trebuie rulata pentru a porni serverul Din cauza ca este o aplicatie Spring Boot si nuuna String singura adnotare necesara pentru a sti ca aceea este clasa rdquoradacinardquoa aplicatieieste SpringBootApplication

Cele patru pachete ale serverului sunt1 Cel de domeniu (domain) cu clasele POJO care reprezinta entitatile din baza de

date2 Cel de rdquomagazierdquo (repositories) care este cel care face direct actiunile ın baza de date3 Cel de serviciu (services) ın care se afla partea de logica a ıntregii aplicatii4 Cel de web ın care se afla clasele de rdquocontrollerrdquo

Figura 52 Diagrama de pachete pentru backend

35

Ca si dependente nivelul de web ıl foloseste pe cel de seviciu cel de serviciu ılfoloseste pe cel de rdquomagazierdquo iar clasele din pachetul de domeniu sunt folosite ın toatecelelalte pachete

In continuare voi prezenta pe rand fiecare nivel al serverului adica fiecare pachet

Figura 53 Diagrama de clase pentru pachetul rdquodomainrdquo

36

Nivelul de domeniu (domain) este alcatuit ın primul rand din clasele care suntentitati ın baza de date Acestea sunt reprezentate de toate clasele ce stocheaza informatiidespre utilizatori si despre produse si comenzi Pe langa informatiile personale despre unutilizator de genul numelui email-ului sau data nasterii care sunt salvate ın entitateapersoana se stocheaza despre utilizator ın clase diferite informatii de genul locului undelocuieste locul unde a copilarit locurilor unde a facut scoala locului unde lucreaza sau celmai important pentru aplicatia aceasta lucrurilor care ıi plac In afara acestor informatiidespre utilizatori sunt si clase cu informatiile despre prieteni despre produse sau desprecomenzi

Din cauza faptului ca aplicatia este de tipul unei retele sociale ın care exista prieteniiıntre persoane exista dependente ıntre toate entitatile aplicatiei Acesta este si motivulpentru care am ales baza de date sub forma de graf pe care sa se mapeze toate acesteentitati sub forma de noduri si toate aceste dependente sub forma de relatii

In pachetul de domeniu se afla si trei subpachete Unul dintre ele este pentruclasele folosite pentru a trata erorile aplicatiei In interiorul acestui pachet se afla douaclase pentru eroare si o exceptie cea folosita ın cazul ın care nu se gaseste ceea ce doresteutilizatorul Pe langa asta este clasa care are ca obiect raspunsul dat de sistem ın cazulunei erori la server Aceasta contine ın interiorul sau pe langa codul erorii si detalii despreeroarea trimisa Aceasta lista de detalii e reprezentata de obiectele de tipul celei de-a treiaclase din pachetul acesta

Celelalte doua subpachete aflate ın acest nivel sunt cele care contin clasele specialede cerere sau raspuns care au ajutat la maparea acestora mai bine In multe cazuri nua fost necesara trimiterea la interfata utilizator a tuturor informatiilor stocate despre oentitate si de aceea am ales sa creez ın aceste cazuri un obiect auxiliar care sa fie folositpe post de raspuns

Figura 54 Diagrama de clase pentru pachetul rdquorepositoriesrdquo

37

Cel de-al doilea nivel al aplicatiei backend este cel de rdquomagazierdquo (repositories) carecontine doar interfete de tip rdquoRepositoryrdquo

Aceste interfete sunt cele care fac operatiile directe asupra entitatilor din baza dedate

Unele interfete doar extind interfata care are deja implementate metodele CRUDsi din acest motiv nu au metode suplimentare iar altele au si metode ın plus care au carol sa execute interogari mai complexe asupra bazei de date In acele metode se pot scrieinterogarile ın Cypher pentru a putea primi informatii despre mai multe noduri sau desprerelatiile dintre acestea sau si pentru a returna doar anumite rezultate care ındeplinescanumite conditii In felul acesta a fost implementata si cererea de oferire a recomandarilorIn acel caz sistemul returneaza produsele care au ın descriere unul din lucrurile care se aflaın lista de obiecte sau servicii primite de la Facebook ca ıi plac utilizatorului

Nivelul de rdquoRepositoryrdquo este folosit direct de cel de-al treiea nivel cel de servi-ciu Acesta este nivelul la care se executa logica aplicatiei unde se comanda modul defunctionare al ıntregii aplicatii

Figura 55 Diagrama de clase pentru pachetul rdquoservicesrdquo

Pe acest nivel ajung toate cererile din server dupa ce trec de verificarile de securitateIn acest pachet se afla si clasa de securitate care face verificarile necesare In aceasta clasaexista o metoda ce se apeleaza la prima cerere cea de salvare a datelor de la Facebookdespre utilizator si care codifica id-ul utilizatorului si ıl trimite pe raspuns ınapoi interfeteiPe langa asta ın acea clasa se afla si o metoda care verifica faptul ca id-ul codificat esteal unui utilizator cu rol corespunzator pentru a face acea cerere

In plus ın acest pachet se afla si toate celelalte clase care fac diverse operatii pedatele din baza de date si dau raspunsuri cererilor din interfata Aici se afla logica care

38

comanda actiunile asupra utilizatorilor asupra prietenilor acestora asupra produselor siasupra comenzilor

Ultima clasa a acestui nivel este cea care se ocupa de trimiterea de email-uri Incazul ın care se face o noua comanda de catre un utilizator toti producatorii produselor depe comanda sunt notificati despre produsele lor pe care le doreste utilizatorul Din serviciulde comanda se apeleaza serviciul de email pentru fiecare producator din lista celor care auproduse care se afla pe lista comenzii utilizatorului

Ultimul si cel mai aproape de interfata utilizator este nivelul de web Acolo se aflatoate clasele de rdquoControllerrdquo ale aplicatiei server

Figura 56 Diagrama de clase pentru pachetul rdquowebrdquo

Toate cererile din interfata utilizator ıncearca sa se mapeze pe rutele declarate ınclase pentru a fi procesate ın metoda corespunzatoare Toata aceasta parte este foarteusor de implementat si mai ales foarte lizibil pentru programatori datorita adnotarilor dinJava Cu ajutorul acestora trebuie doar specificat care este numele URL-ului cererii careeste tipul de obiect asteptat si daca se trimite ca rdquoquery stringrdquo pe URL sau ın interiorulcorpului cererii si tipul raspunsului Pentru fiecare cerere care nu este apelata ın parteaneautentificata a utilizatorului primul lucru care se apeleaza este metoda de securitatepentru a verifica rolul si id-ul utilizatorului Daca din punctul de vedere al securitatii totuleste ın regula se apeleaza metoda corespunzatoare din pachetul de serviciu

39

O singura clasa este diferita de restul ın pachetul de controller si aceea este clasa deeroare Acolo se mapeaza erorile aparute ın timpul cererii si se trimite ınapoi ın interfatagrafica un raspuns cu cod de eroare specific nu numai 500 Generic Application Exceptioncum ar trimite fara aceasta clasa si cu detalii despre motivul aparitiei erorii

Datorita folosirii adnotarilor din java nu a fost necesara folosirea unor rdquodesignpatternrdquo-uri ın sistem De exemplu pentru a folosi ın nivelul de web ceva din pachetulde servicii trebuia doar acel obiect sa aiba adnotarea Autowired si se ınlocuieste atatfolosirea rdquodesign patternrdquo-ului Singleton cat si a celui de Factory Acel obiect nu trebuiecreat sau initializat se face asta implicit datorita adnotarii si de asemenea este folositapeste tot aceeasi instanta

In concluzie toate cererile venite din interfata grafica ajung ın nivelul de rdquocontrollerrdquode unde sunt trimise la cel de rdquoservicerdquopentru a fi procesate si facute eventualele modificarinecesare ın baza de date ca apoi raspunsul sa fie trimis ınapoi spre aplicatia client pentruafisare

512 Arhitectura componentei frontend

A doua componenta implementata a sistemului este aplicatia client frontend-ulAceasta a fost scrisa ın Java Script cu ajutorul framework-ului Ext JS compilarea

se face cu ajutorul Sencha CMD si mediul de implementare a fost IntelliJ IdeaCu ajutorul framework-ului Ext JS se scriu componente care apoi se initializeaza

unele pe altele Aplicatia porneste cu fisierul Applicationjs care este un fel de rdquomainrdquopentru aplicatie Aceasta initializeaza alte componente care la randul lor includ altecomponente si tot asa Structura poate fi foarte usor comparata cu una arborescenta dinacest punct de vedere

Framework-ul a fost creat sa functioneze ın felul acesta pentru ca scopul componen-telor este sa fie scrise ın asa fel ıncat sa poata pe viitor sa fie utilizate din nou Una dindorintele majore ın programare tot timpul este de a se scrie cod ıntr-o maniera ın care safie cat mai reutilizabil Iar framework-ul Ext JS exact asta ıncearca

Arhitectura aplicatiei client se gaseste ın figura 57 si este la randul ei ımpartita ınpachete ca si cea de server Similar cu pachetul de rdquodomainrdquo de la aplicatia de backendeste pachetul rdquomodelrdquo al interfetei utilizator Aici sunt rdquoclaserdquo care sunt simple POJO sicare sunt apoi folosite ın nivelele urmatoare Sunt mai putine decat clasele din rdquostorerdquodeoarece daca raspunsul de la server nu trebuie procesat nu sunt necesare se pot mapadirect obiectele din rdquostorerdquo pe componentele interfetei utilizator

Urmatorul nivel este cel pe care se afla clasele de rdquostorerdquo Acestea sunt cele careexecuta cererea spre backend si face legatura ıntre client si server Daca are o clasa derdquomodelrdquodeclarata atunci populeaza acel obiect cu datele primite de la server iar ın cazul ıncare nu este declarat un model se trimit datele exact asa cum s-au primit la nivelul urmatorde rdquoviewrdquo Acest nivel seamana din punct de vedere al functiei cu cel de rdquorepositoryrdquo de laaplicatia server deoarece ambele au rol de legatura Aceea facea legatura ıntre aplicatiesi baza de date si aceasta face legatura ıntre aplicatia client si aplicatia server

40

Figura 57 Diagrama de clase pentru aplicatia web

Cel de-al treilea pachet al aplicatiei este cel de rdquoviewrdquo In acest pachet se afla claselecare alcatuiesc partea vizuala a aplicatiei La randul ei si aceasta este alcatuita tot dincomponente Aplicatia deschide ın primul rand Main-ul care determina aparitia paginii deHome si afisarea ın meniu a optiunilor posibile ın functie de autentificare si rol Clasele deaici se executa de fapt la deschiderea aplicatiei fiind rdquosingle page applicationrdquo si tot atuncise ıncarca pe pagina componentele Ca si arhitectura a pachetului acesta este ımpartit larandul sau ın subpachete Pentru o mai buna organizare exista patru subpachete cateunul pentru fiecare tip de utilizator In felul acesta toate rdquoviewrdquo-urile care sunt specificeunui utilizator cu un anumit rol se afla ın acelasi subpachet

Cele patru subpachete existente ın pachetul rdquoviewrdquo sunt

1 Pachetul rdquomainrdquo care cuprinde rdquoviewrdquo-urile care se afla ın partea neautentificata aaplicatiei

2 Pachetul rdquoclientrdquo continand rdquoviewrdquo-urile pe care le poate accesa un utilizator simplu3 Pachetul rdquoproducerrdquo specific actiunilor unui utilizator care are rol de producator4 Pachetul rdquoadminrdquo care contine toate rdquoviewrdquo-urile care ıi apar unui utilizator care este

administrator al aplicatiei

Ultimul pachet si nivel al aplicatiei client este cel de rdquocontrollerrdquo In acest pachet

41

se afla clasele care fac actiunile din interfata grafica In timp ce pachetul rdquoviewrdquo continedoar partea grafica a aplicatiei adica modul ın care aceasta trebuie sa arate pachetulrdquocontrollerrdquo contine actiunea acestora modul ın care aplicatia trebuie sa functioneze

Ca si arhitectura si acest pachet a fost ımpartit la randul lui tot ın cele patrusubpachete ca si pachetul rdquoviewrdquo adica rdquomainrdquo rdquoclientrdquo rdquoproducerrdquo si rdquoadminrdquo In pluspentru a fi usor de gasit ce clasa de rdquocontrollerrdquo apartine carui rdquoviewrdquo am ales ca cele douasa aiba acelasi nume In felul acesta daca se doreste sa se gaseasca actiunile unui rdquoviewrdquose poate cauta dupa o clasa cu acelasi nume ın pachetul rdquocontrollerrdquo Numarul claselor dinacest pachet este mai mic decat cel al claselor din rdquoviewrdquo deoarece nu toate paginile dininterfata au actiuni suplimentare Daca singura actiune este ıncarcarea paginii cu date dela server adica doar o actiune simpla de GET datele se ıncarca cu ajutorul rdquostorerdquo-ului laıncarcarea paginii si nu este necesara nici o actiune suplimentara Paginile pe care se potface si actiuni de alt gen sau se deschid noi ferestre au nevoie de clase de rdquocontrollerrdquo

In concluzie arhitectura aplicatiei client este una bazata pe componente care ıncearcasa foloseasca cat mai multe clase reutilizabile

52 Structura bazei de date

Baza de date a aplicatiei este de tip graf de tipul Neo4j Pentru utilizare exista unprogram numit Neo4j ce trebuie instalat Acest program are si o interfata grafica ın carese pot vizualiza datele sub forma grafica si ın care se pot scrie de asemenea si interogariın limbajul acestei baze de date adica Cypher

Fiind o baza de date sub forma de graf datele stocate sunt salvate ın structurade date sub forma de noduri si relatii Entitatile din pachetul de domeniu din aplicatiabackend se gasesc ın baza de date sub forma unor noduri iar dependentele dintre nodurise mapeaza ın baza de date sub forma unor relatii Un element diferit fata de alte tipuride baze de date este faptul ca pe relatiile dintre noduri se pot salva atribute cum este ınaplicatie cazul pentru prieteniile dintre persoane In cazul acestora pe relatia dintre nodurise salveaza daca prietenia a fost sau nu acceptata

Pentru fiecare clasa POJO din aplicatia server clasa ce are doar metodele get si setsi se afla ın pachetul domain exista cate un tip de nod diferit ın baza de date cum estesi marcat ın diferite culori ın figura 58 Fiecare tip de nod are atributele proprii care potlua valori sau pot fi nule Iar fiecare obiect din Java reprezinta un nod diferit ın baza dedate

Neo4j a fost cea mai buna optiune pentru baza de date pentru ca aplicatia poate ficonsiderata o retea sociala Acest lucru se datoreaza relatiilor de prietenie dintre persoanesi a multiplelor relatii ıntre noduri Toate nodurile se afla ın acceasi componenta conexadeci nu exista noduri izolate care sa nu aiba nici o legatura cu nici un alt nod

Datorita acestei structuri a bazei de date este posibila implementarea cererii derecomandare ca o simpla interogare ın baza de date aceasta fiind cea mai simpla metodade implementare a unui sistem de genul acesta una mult mai complexa ar fi fost un

42

algoritm de ınvatare care sa ınvete tipare ale utilizatorilor si sa recomande cadouri pe bazaacestor informatii

Figura 58 Diagrama bazei de date pentru doi utilizatori

Un alt avantaj al acestui tip de baza de date este faptul ca datele nu sunt duplicateın baza de date Spre exemplu daca mai multi utilizatori au ca locatie acelasi oras nu secreaza cate un nod cu acea locatie de mai multe ori ci acel unic nod va avea cate o relatiecu fiecare utilizator care are ca locatie acel oras

In concluzie structura bazei de date a fost aleasa ın acest fel datorita tipului apli-catiei adica asemanatoare cu o retea sociala si datorita implementarii simple a unui sistemde recomandare pe o asemenea baza de date

53 Fluxul pentru diferite operatii

Pentru aplicatie cele mai importante cazuri de utilizare sunt salvarea informati-ilor despre utilizator primite de la Facebook pentru crearea unui profil si recomandareacadourilor pentru un utilizator al aplicatiei Din aceasta cauza cele doua cazuri de utilizarevor fi prezentate mai ın detaliu ın continuare

43

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 20: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

Capitolul 4

Analiza si Fundamentare Teoretica

In acest capitol vor fi prezentate cerintele functionale ale lucrarii ımpreuna cucerintele non-functionale ale acesteia De asemenea va fi prezentata diagrama cazurilor deutilizare si vor fi prezentate mai ın detaliu cazurile de utilizare principale ale aplicatiei Incontinuare se va prezenta perspectiva tehnologica a proiectului si se vor explica deciziiletehnologice luate In final se va prezenta diagrama conceptuala a aplicatiei

41 Cerinte functionale

bull Posibilitatea autentificarii ın aplicatie si crearii unui profil propriu din care se potutiliza informatii si cu ajutorul caruia utilizatorul poate fi ıncadrat ıntr-un profil

bull Utilizatorii pot crea prietenii ca ıntr-o retea de socializare pentru a putea afla infor-matii despre prieteni si pentru a li se putea recomanda cadouri pentru acestia

bull Cu ajutorul informatiilor de la Facebook un utilizator poate fi notificat dinainte caurmeaza ziua de nastere a unuia din prietenii lui si sa i se ofere mai multe variantede cadouri potrivite pentru acesta Aceasta informatie o primeste cu suficient timpınainte pentru a nu fi surprins fara un cadou De la Facebook pe langa informatiiledespre data zilei de nastere sunt importante si varsta sau lucrurile care ıi plac uti-lizatorului Toate acestea ajuta la crearea profilului utilizatorului pe baza caruia serecomanda dupa aceea cadourile

bull De asemenea sistemul poate recomanda si un cadou pentru alt tip de evenimentdecat zi de nastere de genul cadou de Craciun cadou de nunta cadou pentru unnou-nascut etc

bull In aplicatie vor fi adaugate si diferite produse iar pentru a face mai usoara cumparareade cadouri se va putea face si comanda pe internet In momentul ın care un utilizatorface o noua comanda producatorii produselor comandate sunt ınstiintati de existentaacestei noi comenzi

15

bull Pentru persoanele la care pe profilul de Facebook este insuficient completat saupentru a putea cumpara cadouri pentru o persoana care nu are Facebook sau nuare cont ın aceasta aplicatie si despre care ın acest fel nu se cunosc nici un felde informatii se vor putea filtra cautarile pentru cadou printr-o serie de ıntrebaristandard Aceste ıntrebari vor putea creea un rdquomini-profilrdquo pentru acea persoanapentru ca sistemul sa poata recomanda cadouri

42 Cerinte non-functionale

bull Securitate sistemul nu raspunde cererilor decat atunci cand utilizatorul a fost au-tentificat ın aplicatie si are rolul necesar pentru a face acea cerere

bull Portabilitate aplicatia nu depinde de sistemul de operare pe care ruleaza De aseme-nea nu e dependenta de browserul folosit de utilizator

bull Disponibilitate sistemul ramane stabil ın fata erorilor si functioneaza la fel si dupaaparitia unei erori

bull Extensibilitate sistemul permite adaugarea sau modificarea unor componente atuncicand cerintele aplicatiei se modifica Pe langa asta e flexibila unor dezvoltari ulte-rioare

43 Cazuri de utilizare

In aceasta sectiune se vor prezenta actorii aplicatiei diagrama cazurilor de utilizaresi vor fi descrise cazurile de utilizare de baza ale fiecarui actor

Ca si actori aplicatia are patru tipuri de utilizatori

bull utilizator anonimbull clientbull producatorbull administrator

Aplicatia este conceputa ın asa fel ıncat ıntre actori este o relatie de mostenire Acestlucru presupune ca un actor are posibilitatea de a efectua tot ce putea cel dinaintea lui siceva ın plus Deci utilizatorii anonimi au cele mai putine permisiuni iar administratoriiau permisiuni totale Acest lucru se vede foarte clar si ın diagrama cazurilor de utilizaredin imaginea 41

In continuare vor fi prezentate cazurile de utilizare

1 recomandare cadouri2 adaugare produs3 modificare rol utilizator

16

Figura 41 Digrama cazurilor de utilizare

17

431 Recomandare cadouri

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unutilizator trebuie sa le urmeze pentru a primi recomandari de cadouri pentru un cunoscutsi pentru a efectua o comanda

Actorul principal

Orice utilizator al aplicatiei

Parti interesate si interese

Utilizatorul care doreste sa cumpere un cadou este interesat de a gasi un cadoupotrivit pentru cineva pe care ıl cunoaste

Producatorul care e interesat sa ısi poata vinde produseleUtilizatorul care primeste cadoul fiind interesat sa primeasca un cadou care sa i se

potriveasca si care sa ıi placa

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand utilizatorul porneste aplicatia11 Utilizatorul verifica daca are cont de Facebook si daca are urmeaza pasul 111

daca nu 22111 Utilizatorul se autentifica ın aplicatie cu ajutorul credentialelor de la

Facebook12 Utilizatorul deschide sectiunea de recomandare cadouri13 Utilizatorul completeaza formularul cu datele ce trebuie introduse pentru a primi

recomandari de cadouri pentru un prieten14 Utilizatorul poate fi satisfacut cu recomandarile primite si atunci urmeaza pasul

141 iar daca nu este atunci urmeaza cazul alternativ 23141 Utilizatorul adauga ın cosul de cumparaturi cadouri pe care doreste sa

le cumpere15 Utilizatorul cere sa ısi vada cosul de cumparaturi16 Utilizatorul poate sa se declare multumit de cosul de cumparaturi caz ın care

urmeaza pasul 161 sau poate sa aleaga cazul alternativ 24161 Utilizatorul aproba cosul de cumparaturi si accepta sa se faca comanda

17 Sistemul introduce ın baza de date comanda18 Utilizatorul va putea vedea la sectiunea comenzilor sale noua comanda si statusul

ei19 Sistemul notifica producatorul de aparitia noii comenzi110 Utilizatorul se dezautentifica din aplicatie

18

Use-Case EndUtilizatorul se va deconecta din aplicatie si o va ınchide

Figura 42 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueazaAcest flux poate aparea la orice pas211 Utilizatorul deschide sectiunea de recomandare cadouri212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca utilizatorul nu are cont de Facebook

19

Acest flux poate aparea la pasul 11221 Utilizatorul deschide pagina de Facebook222 Utilizatorul ısi face un cont pe pagina de Facebook si ısi completeaza

date despre el223 Utilizatorul revine la aplicatia de recomandare cadouri si ıncearca din

nou sa se autentifice ın aplicatie224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca utilizatorul nu e multumit de recomandariAcest flux poate aparea la pasul 14231 Utilizatorul sterge din cos cadourile pe care nu le mai doreste si revine

la pagina de recomandari232 Utilizatorul adauga alte cadouri ın cos233 Cazul de utilizare continua de la pasul 141

24 Flux-ul alternativ daca utilizatorul nu e multumit de produsele din cosul decumparaturi

Acest flux poate aparea la pasul 16241 Utilizatorul revine ınapoi la formularul cu introducerea datelor despre

beneficiarul cadoului242 Utilizatorul completeaza din nou datele243 Cazul de utilizare continua de la pasul 13

Preconditii

1 Utilizatorul trebuie sa aiba un cont de Facebook pentru a se putea autentifica ınaplicatie

2 Utilizatorul trebuie sa fie autentificat ın aplicatie pentru a putea face orice actiunedin acest caz de utilizare

3 Utilizatorul trebuie sa deschida sectiunea de recomandare cadouri pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noua comanda este salvata ın baza de date2 Comanda apare ın sectiunea de comenzi a utilizatorului ımpreuna cu statusul ei

curent3 Producatorul este notificat ca are o noua comanda

432 Adaugare produs

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unproducator trebuie sa le urmeze pentru a introduce un nou produs ın aplicatie

20

Actorul principal

Utilizatorii cu rol de producator sau cu rol de administrator

Parti interesate si interese

Producatorul care doreste sa introduca produsul nou ın aplicatie

Utilizatorii simpli care au o mai mare varietate de produse din care sa li se reco-mande cadouri

Figura 43 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo

21

Flux de evenimente

Use-Case Start

Cazul de utilizare ıncepe atunci cand producatorul porneste aplicatia

11 Producatorul verifica daca are cont de Facebook si daca are urmeaza pasul111 daca nu 22

111 Producatorul se autentifica ın aplicatie cu ajutorul credentialelor de laFacebook

12 Producatorul deschide sectiunea de adaugare produs

13 Producatorul completeaza datele necesare despre noul produs ımpreuna cu tipulde persoana si eveniment care i s-ar potrivi

14 Producatorul verifica daca este multumit de datele introduse si daca da urmeazapasul 141 daca nu 23

141 Producatorul efectueaza operatia de adaugare produs

15 Sistemul adauga un nou produs ın baza de date

16 Sistemul notifica producatorul ca noul produs a fost introdus cu succes

17 Producatorul se dezautentifica din aplicatie

Use-Case End

Producatorul se va deconecta din aplicatie si o va ınchide

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Producatorul deschide sectiunea de adaugare produs

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca producatorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Producatorul deschide pagina de Facebook

222 Producatorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Producatorul revine la aplicatia de recomandare cadouri si ıncearca dinnou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca Producatorul nu e multumit de datele introduse despreprodus

Acest flux poate aparea la pasul 14

231 Producatorul sterge datele gresite despre produs

232 Producatorul adauga alte date despre produs

233 Cazul de utilizare continua de la pasul 141

22

Preconditii

1 Producatorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Producatorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Producatorul trebuie sa aiba cont cu rol de rdquoproducatorrdquo sau rdquoadminrdquo pentru aputea face operatia aceasta

4 Producatorul trebuie sa deschida sectiunea de adaugare produs pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noul produs este salvat ın baza de date2 Produsul poate fi adaugat la recomandarile unui utilizator din acel moment

433 Modificare rol utilizator

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unadministrator trebuie sa le urmeze pentru a modifica rolul unui utilizator al aplicatiei

Actorul principal

Un utilizator al aplicatiei care are rol de administrator

Parti interesate si interese

Administratorul care doreste sa modifice rolul unui utilizatorUtilizatorul care doreste sa ısi schimbe rolul

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand administratorul porneste aplicatia11 Administratorul verifica daca are cont de Facebook si daca are urmeaza pasul

111 daca nu 22111 Administratorul se autentifica ın aplicatie cu ajutorul credentialelor de

la Facebook12 Administratorul deschide sectiunea de utilizatori13 Sistemul ıi returneaza administratorului utilizatorii care nu sunt administratori14 Administratorul modifica rolul utilizatorului din utilizator simplu ın producator

sau invers

23

15 Administratorul cere executarea modificarii

16 Sistemul executa modificarea iar ın caz de succes urmeaza pasul 161 si ın cazde eroare pasul 23

161 Sistemul notifica administratorul ca modificarea a fost efectuata cusucces

17 Utilizatorul se dezautentifica din aplicatie

Use-Case End

Administratorul se va deconecta din aplicatie si o va ınchide

Figura 44 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo

24

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Administratorul deschide sectiunea de utilizatori

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca administratorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Administratorul deschide pagina de Facebook

222 Administratorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Administratorul revine la aplicatia de recomandare cadouri si ıncearcadin nou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca sistemul returneaza o eroare la modificarea utilizatorului

Acest flux poate aparea la pasul 16

231 Sistemul returneaza un mesaj de eroare la modificarea utilizatorului

232 Aplicatia afiseaza mesajul de eroare administratorului

233 Cazul de utilizare continua de la pasul 15

Preconditii

1 Administratorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Administratorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Utilizatorul trebuie sa aiba cont cu rol de administrator pentru a putea efectuaorice actiune din acest caz de utilizare

4 Administratorul trebuie sa deschida sectiunea utilizatori pentru a putea ındeplinicerintele din cazul de utilizare

Postconditii

1 Noul rol al utilizatorului este salvat ın baza de date

2 La urmatoarea autentificare a utilizatorului acesta va observa ca interfata si maiprecis meniurile si actiunile care le poate face ıi vor fi diferite

25

44 Perspectiva tehnologica

441 Neo4j

Neo4j 1 este un sistem de gestionare a bazelor de date sub forma de graf dezvoltatde Neo4j Inc Descris de dezvoltatorii sai ca o baza de date tranzactionala compatibilacu ACID Neo4j este cea mai populara baza de date sub forma de graf dupa clasamentulDB-Engines

Baza de date Neo4j (ca si orice alta baza de date sub forma de graf) este foartediferita de o baza de date relationala cum ar fi MS Access SQL Server MySQL etcBazele de date relationale utilizeaza tabele randuri si coloane pentru stocarea datelor

Neo4j nu utilizeaza tabele randuri si coloane pentru stocarea sau prezentarea datelorci noduri si relatii

Neo4j este foarte potrivit pentru stocarea datelor care au multe relatii interconec-tate Acestea sunt de fapt aplicatiile ın care merita sa fie folosite De fapt bazele de datesub forma de graf cum este Neo4j sunt mult mai bune la tratarea datelor interconectatedecat bazele de date relationale

Acest lucru se datoreaza faptului ca modelul sub forma de graf nu necesita de obiceio schema predefinita Nu e nevoie sa se creeze structura bazei de date ınainte de a fiıncarcate datele asa cum se face la o baza de date relationala

Dar principalul motiv pentru care Neo4j este mai bun pentru datele relationalepentru acest tip de aplicatii este modul ın care permite crearea relatiilor Neo4j este con-struit ın jurul relatiilor si atunci nu este nevoie sa se configureze chei primare constrangerichei straine pentru a predetermina nodurile care pot avea o relatie si la ce date Cu Neo4jse poate adauga orice legatura ıntre orice nod ori de cate ori este nevoie

Neo4j are aceste calitati care nu se gasesc nici la celelalte baze de date NoSQLBazele de date non-relationale pe langa cele sub forma de graf sunt cele de tip coloanade tip document de tip cheie-valoare si de tip multi-model Nici unul din aceste tipuri nuau ca principala functionalitate maparea relatiilor si facilitatea interogarilor ıntr-o baza dedate cu multe relatii ıntre entitati

Generarea de recomandari personalizate este unul dintre cele mai frecvente cazuride utilizare a unei baze de date sub forma de graf Unele dintre principalele beneficii aleutilizarii grafurilor pentru a genera recomandari includ

- Performanta Lipsa indexurilor permite calcularea recomandarilor ın timp realasigurand ca recomandarea este ıntotdeauna relevanta si reflecta informatii actualizate

- Model de date Modelul de graf cu proprietati permite combinarea cu usurinta aseturilor de date din mai multe surse

Un alt avantaj al bazelor de date sub forma de graf Neo4j este faptul ca respectatoate principiile din modelul de consistenta ACID

Garantia data de principiile ACID este ca ofera un mediu sigur ın care sa functionezedatele Acronimul ACID reprezinta

1httpsneo4jcomuse-casesreal-time-recommendation-engine

26

bull Atomic Toate operatiile dintr-o tranzactie reusesc sau fiecare operatie este reluatabull Consistent La finalizarea unei tranzactii baza de date este solida din punct de

vedere structuralbull Izolat Tranzactiile nu se lupta una cu cealalta Accesul controversat la date este

moderat de baza de date astfel ıncat tranzactiile par sa se execute succesivbull Durabil Rezultatele aplicarii unei tranzactii sunt permanente chiar si ın cazul unor

defectiuniCand vine vorba de tehnologiile NoSQL cele mai multe baze de date sub forma de

graf (inclusiv Neo4j) utilizeaza un model de consistenta ACID pentru a asigura ca datelesunt stocate ın siguranta si ın mod consecvent

Am ales baza de date sub forma de graf ca optiune pentru stocarea datelor deoarecedin toate lucrarile si articolele citite a fost optiunea cea mai buna pentru un sistem derecomandare Deci acesta se mapeaza perfect pe cerintele functionale ale proiectului Sidin optiunile de baze de date sub forma de graf Noe4j a avut de departe cele mai multeavantaje ea fiind si cea mai utilizata

442 Cypher

Cypher 2 este un limbaj declarativ de interogare pentru bazele de date sub formade graf care permite interogarea si actualizarea rapida a datelor Cypher este un limbajrelativ simplu dar foarte puternic Interogarile foarte complexe ale bazei de date pot fiusor exprimate prin intermediul limbajului Cypher

Este conceput pentru a fi un limbaj de interogare uman Scopul lui principal este dea face interogarile mult mai simple si unele interogari care la bazele de date relationale nuerau posibile le face posibile Constructiile sale se bazeaza pe grafica si pe limba englezalucru care ajuta la scrierea mai intuitiva a interogarilor Este construit pentru a fi maiintuitiv pentru citire si nu neaparat pentru scriere

Cypher se bazeaza pe modelul Graph Property care ın plus fata de elementelegrafice standard ale nodurilor si muchiilor (numite relatii ın Cypher) adauga etichete siproprietati ca si concepte Nodurile pot avea zero sau mai multe etichete ın timp ce fiecarerelatie este de exact un singur tip Nodurile si relatiile au de asemenea zero sau mai multeproprietati

Chypher este limbajul de interogare folosit la bazele de date Neo4j deci este opti-unea implicita atunci cand se alege Neo4j

443 Maven

Maven 3 este un instrument de management software si de ıntelegere a proiectelorsoftware Pe baza conceptului unui model de obiect de proiect (POM) Maven poategestiona construirea raportarea si documentarea unui proiect printr-o informatie centrala

2httpsneo4jcomdevelopercypher-query-language3httpswwwjavatpointcommaven-tutorial

27

Obiectivul principal al lui Maven este acela de a permite unui dezvoltator sa ınte-leaga starea completa a efortului de dezvoltare ın cel mai scurt timp Avantajele Mavensunt

bull instalarea rapida a proiectului fara fisiere buildxml complicate doar un POMbull procesul de construire este standardizat pentru toate proiectelebull usor de ınvatat si de utilizatbull configurarea unui proiect este foarte rapidabull bine documentat

Am ales sa folosesc Maven deoarece este una din cele mai comune optiuni pentru aimporta librariile ıntr-un proiect si este si cel mai documentat Deci mereu cand esti pusın dificultate poti cauta pe internet sugestii

444 Spring Boot

Spring Boot 4 este un framework din cadrul Spring care ofera setari implicite pentruconfigurarea codului si adnotari pentru a lansa rapid proiecte noi ın executie Urmaresteabordarea rdquoConfigurarea defectiunilor vizionaterdquo pentru a evita un numar mare de linii decod pentru configuratii si pentru a ımbunatati procesul de dezvoltare

Avantajele Spring Boot sunt1 Face foarte usoara dezvoltarea de aplicatii bazate pe Spring cu Java sau Groovy2 Reduce timpul de dezvoltare si creste productivitatea3 Evita scrierea multor linii de cod adnotari si configurare XML4 Este foarte usor de integrat cu alte framework-uri din aceasi familie Spring cum ar

fi Spring JDBC Spring ORM Spring Data Spring Security etc5 Urmareste abordarea rdquoConfigurarea implicita a optiunilorrdquo pentru a reduce efortul

pentru dezvoltatori6 Ofera servere HTTP ıncorporate cum ar fi Tomcat Jetty etc pentru a dezvolta si

testa aplicatiile web foarte usor7 Ofera instrumentul CLI (Command Line Interface) pentru a dezvolta si testa apli-

catiile de tip rdquoSpring Bootrdquo (Java sau Groovy) din linia de comanda foarte usor sirapidAm ales ca optiune pentru partea de backend acest framework deoarece simplifica

foarte mult lucrurile Datorita lui un programator poate sa ısi concentreze mai tare energiape a construi proiectul din punctul de vedere al buissness-ului logic nu din punctul devedere al configurarilor necesare

445 Sencha CMD si ExtJS

Sencha CMD 5 este un instrument linie de comanda cross-platform care ofera multesarcini automate ın ciclul complet de viata al unei aplicatii ExtJS de la generarea unui

4httpswwwjavatpointcomspring-boot-tutorial5httpsdocssenchacomcmd

28

nou proiect la lansarea unei aplicatii ın productie

Sencha Cmd ofera o colectie de caracteristici puternice pentru economisirea timpu-lui care functioneaza ımpreuna cu Sencha ExtJS si Sencha Touch

Ext JS 6 este un framework pur JavaScript pentru construirea de aplicatii webinteractive cross-platform utilizand tehnici precum scripting Ajax DHTML si DOM

Avantajele framework-ului ExtJS sunt

1 Documentatia Extjs este foarte cuprinzatoare si bine ıntretinuta2 Aspectul cheie al bibliotecii EXTJS este suportul de tip cross-browser3 Framework-ul ExtJS ofera o multitudine de elemente UI Aceste elemente includ

forme casete de dialog file arbori si tabele4 Framework-ul ExtJS include suport pentru implementarile Ajax5 ExtJS ofera performante excelente Framework-ul este complet orientat spre obiecte

si este extensibil asta pentru ca este scris ın JavaScript

Pentru partea de frontend se foloseste framework-ul ExtJS deoarece are o arhitec-tura ce se mapeaza foarte bine pe proiectele de frontend si anume arhitectura bazata pecomponente Aceasta face ca ın proiect codul sa fie mult mai organizat si procesul dedezvoltare al proiectului sa fie mult mai scurt prin identificarea mai usoara a erorilor

446 Facebook API(Graph API)

Graph API 7 este modul principal de a pune date ın platforma Facebook si de aobtine date din platforma Facebook Este un API bazat pe HTTP pe care aplicatiile ılpot utiliza pentru interogarea datelor pentru a introduce postari noi pentru gestionareaanunturilor sau pentru a ıncarca fotografii

Este denumit Graph API dupa ideea unui rdquograf socialrdquo - o reprezentare sub formade graf a informatiilor de pe Facebook Este compus din

bull noduri - ın esenta obiecte individuale cum ar fi un utilizator o fotografie o paginasau un comentariu

bull muchii - conexiuni ıntre o colectie de obiecte si un singur obiect cum ar fi fotografiilede pe o pagina sau comentariile de la o fotografie

bull campuri - date despre un obiect cum ar fi ziua de nastere a unui utilizator saunumele paginii

De obicei se utilizeaza noduri pentru a obtine date despre un anumit obiect se uti-lizeaza muchii pentru a obtine colectii de obiecte legate de un singur obiect si se utilizeazacampurile pentru a obtine date despre un singur obiect sau mai multe obiecte dintr-ocolectie

Am folosit Facebook API ca solutie pentru a ımbunatati problema de rdquocold startrdquopentru ca este singurul site pe care marea majoritate a oamenilor au cont si salveazalucrurile care le plac Deci se potrivea perfect peste nevoile aplicatiei mele

6httpdocssenchacomextjs6207httpsdevelopersfacebookcomdocsgraph-api

29

447 Git

Git 8 este un sistem de control a versionarii pentru urmarirea modificarilor ın fisierelede pe computer si coordonarea activitatii asupra acestor fisiere ın randul mai multor per-soane Este utilizat ın principal pentru gestionarea codului sursa ın dezvoltarea de softwaredar poate fi folosit pentru a urmari schimbarile ın orice set de fisiere

Avantaje ale Git

bull Modelul distribuit numai ceea ce se doreste se face publicbull Branching-ul si merging-ul sunt usoarebull Fluxul de lucru este flexibilbull Integritatea datelor este asigurata Deoarece GIT utilizeaza arbori SHA1 coruperea

datelor din motive externe poate fi usor detectatabull Rapid Git este foarte rapid chiar si ın comparatie cu alte sisteme de control a

versionarii

Am folosit Git pentru a avea la proiect un back-up ın caz ca se ıntampla ceva cuproiectul salvat pe calculator

45 Arhitectura conceptuala

In figura 45 este prezentata arhitectura conceptuala a sistemului Acesta este ım-partit ın doua mari parti backend-ul si frontend-ul care comunica ıntre ele si ısi trimitinformatii

Se poate observa ca baza de date este de tip graf mai exact Neo4j si comunica cubackend-ul pentru a putea lucra cu datele stocate Backend-ul este structurat pe nivelefiecare cu un diferit rol si care trebuie parcurs pentru a procesa datele din interfata ınbaza de date Cele trei nivele sunt cel de Repository cel de Service si cel ControllerToate interogarile venite din interfata utilizator ajung ın nivelul de Controller Dupa ceinterogarile trec de securitatea sistemului ajung ın nivelul de Service Acolo se proceseazasi se afla partea de logica a aplicatiei Pentru a interactiona cu baza de date din Servicese apeleaza metodele din nivelul de Repository

In continuare backend-ul comunica prin protocolul HTTP cu interfata grafica cucare interactioneaza clientii aplicatiei Interfata este scrisa ın Ext JS si are o parte de Viewsi o parte de Controller care este cea care comunica cu backend-ul

Pentru partea de autentificare sistemul interactioneaza cu API-ul de la Facebookde la care ia dupa autentificare un access token Cu ajutorul acestuia ia dupa aceea datelenecesare pentru a putea crea un profil utilizatorului

8httpsguidesgithubcomintroductiongit-handbook

30

Figura 45 Arhitectura conceptuala

31

Capitolul 5

Proiectare de Detaliu siImplementare

In acest capitol vor fi prezentate detalii de implementare ale sistemului de recoman-dare incluzand o ımpartire al acestuia ın componentele care ıl cuprind

Obiectivul este de a prezenta arhitectura si modul de implementare al aplicatieipe baza datelor descoperite ın studiul bibliografic de la capitolul trei si cu tehnologiilehotarate la capitolul patru Pe langa asta va fi prezentata si structura bazei de date sideciziile luate pentru securitatea aplicatiei

51 Arhitectura sistemului

Din punctul de vedere al arhitecturii aplicatia se poate considera ca este alcatuitadin patru mari componente

1 API-ul de la Facebook2 Aplicatia client care reprezinta interfata grafica a aplicatiei3 Aplicatia server adica backendul aplicatiei si partea ın care se afla partea de rdquobusiness

logicrdquo4 Baza de date

Partea componenta reprezentata de API-ul de la Facebook este doar o componentacu care aplicatia se integreaza si pe care aceasta o foloseste In interactiunea cu ea interfatada o cerere de autentificare apare o fereastra de la Facebook ın care utilizatorul introducecredentialele de la API-ul de Facebook se primeste ınapoi un access token si cu ajutorulacestuia face o cerere pentru a primi datele personale ale utilizatorului pentru creeareaprofilului utilizator

Urmatoarea parte a aplicatiei este interfata utilizator frontend-ul care reprezintapartea cu care utilizatorul interactioneaza si locul unde ıi sunt afisate informatiile

Cererile din interfata ajung ın a treia parte componenta a sistemului partea deserver adica backend-ul aplicatiei Acolo toate cererile sunt citite si procesate iar raspun-

33

sul lor este trimis la interfata utilizator Aceasta este partea care reprezinta rdquogandireardquoaplicatiei Aceea este componenta care face legatura ıntre cererile utilizatorului din inter-fata si datele stocate ın baza de date

Ultima componenta a aplicatiei o reprezinta baza de date care are ca rol sa stochezedatele despre utilizatori produse si comenzi Ea este o baza de date sub forma de grafde tipul Neo4j Acolo se salveaza entitatile aplicatiei sub forma de noduri si dependenteleıntre acestea sub forma de relatii ıntre aceste noduri

Figura 51 Diagrama de rdquodeploymentrdquo

In figura 51 este prezentata diagrama de rdquodeploymentrdquo a sistemului cu cele patrucomponente ale sistemului Aplicatia client comunica cu API-ul de la Facebook prin pro-tocolul securizat HTTPS cu backend-ul prin protocolul HTTP iar backend-ul cu baza dedate prin JDBC

Aplicatia a putut fi ımpartita ın aceste componente separate deoarece fiecare dintreele poate functiona independent de celelalte comunica cu ele doar prin mesaje Din acestmotiv locul unde ruleaza acestea pot sa fie pe servere diferite In plus daca aplicatiaar fi pusa pe servere pentru utilizatori ar putea fi mai multe servere pe care ruleaza ocomponenta si prin rdquoload balancingrdquo sa se trimita cererile ımpartite ıntre ele

Cum astfel componentele nu depind foarte mult unele de altele si pot rula faraa le interesa de unde le sunt trimise cererile este arhitectura cea mai corecta deoarecedefectarea sau o posibila eroare la una din ele nu o influenteaza cu nimic pe o alta Dacatoate ar rula pe acelasi server o eventuala defectiune a acestuia ar ınsemna o defectiune aıntregului sistem Insa daca exista mai multe noduri si se afla pe servere diferite pot doartoate cererile sa fie redirectionate spre un nod care functioneaza si aplicatia sa functionezepentru clienti la fel ca ınainte

34

Un alt avantaj al arhitecturii ar fi faptul ca la o lansare viitoare catre clienti se poatelansa doar componenta la care s-au facut modificari De asemenea aplicatia ar putea aveape viitor si o componenta mobila Iar cum serverul e independent poate fi acelasi serverfolosit de o alta aplicatie client

511 Arhitectura componentei backend

Arhitectura backend-ului este si ea ımpartita ın mai multe pachete pentru o maibuna structura si pentru o cat mai mica dependenta ıntre diversele componente Astfelcuplarea este minima ıntre clase si eventualele modificari ulterioare pot fi mai usor defacut

Serverul a fost implementat ın Java cu ajutorul framework-ului Spring Boot iarmediul de dezvoltare folosit a fost Intellij IDEA

Din punctul de vedere al ımpartirii arhitectura serverului aplicatiei este structurataın patru pachete si o clasa ın afara acestora Acea clasa este rdquomainrdquo-ul aplicatiei este parteacare trebuie rulata pentru a porni serverul Din cauza ca este o aplicatie Spring Boot si nuuna String singura adnotare necesara pentru a sti ca aceea este clasa rdquoradacinardquoa aplicatieieste SpringBootApplication

Cele patru pachete ale serverului sunt1 Cel de domeniu (domain) cu clasele POJO care reprezinta entitatile din baza de

date2 Cel de rdquomagazierdquo (repositories) care este cel care face direct actiunile ın baza de date3 Cel de serviciu (services) ın care se afla partea de logica a ıntregii aplicatii4 Cel de web ın care se afla clasele de rdquocontrollerrdquo

Figura 52 Diagrama de pachete pentru backend

35

Ca si dependente nivelul de web ıl foloseste pe cel de seviciu cel de serviciu ılfoloseste pe cel de rdquomagazierdquo iar clasele din pachetul de domeniu sunt folosite ın toatecelelalte pachete

In continuare voi prezenta pe rand fiecare nivel al serverului adica fiecare pachet

Figura 53 Diagrama de clase pentru pachetul rdquodomainrdquo

36

Nivelul de domeniu (domain) este alcatuit ın primul rand din clasele care suntentitati ın baza de date Acestea sunt reprezentate de toate clasele ce stocheaza informatiidespre utilizatori si despre produse si comenzi Pe langa informatiile personale despre unutilizator de genul numelui email-ului sau data nasterii care sunt salvate ın entitateapersoana se stocheaza despre utilizator ın clase diferite informatii de genul locului undelocuieste locul unde a copilarit locurilor unde a facut scoala locului unde lucreaza sau celmai important pentru aplicatia aceasta lucrurilor care ıi plac In afara acestor informatiidespre utilizatori sunt si clase cu informatiile despre prieteni despre produse sau desprecomenzi

Din cauza faptului ca aplicatia este de tipul unei retele sociale ın care exista prieteniiıntre persoane exista dependente ıntre toate entitatile aplicatiei Acesta este si motivulpentru care am ales baza de date sub forma de graf pe care sa se mapeze toate acesteentitati sub forma de noduri si toate aceste dependente sub forma de relatii

In pachetul de domeniu se afla si trei subpachete Unul dintre ele este pentruclasele folosite pentru a trata erorile aplicatiei In interiorul acestui pachet se afla douaclase pentru eroare si o exceptie cea folosita ın cazul ın care nu se gaseste ceea ce doresteutilizatorul Pe langa asta este clasa care are ca obiect raspunsul dat de sistem ın cazulunei erori la server Aceasta contine ın interiorul sau pe langa codul erorii si detalii despreeroarea trimisa Aceasta lista de detalii e reprezentata de obiectele de tipul celei de-a treiaclase din pachetul acesta

Celelalte doua subpachete aflate ın acest nivel sunt cele care contin clasele specialede cerere sau raspuns care au ajutat la maparea acestora mai bine In multe cazuri nua fost necesara trimiterea la interfata utilizator a tuturor informatiilor stocate despre oentitate si de aceea am ales sa creez ın aceste cazuri un obiect auxiliar care sa fie folositpe post de raspuns

Figura 54 Diagrama de clase pentru pachetul rdquorepositoriesrdquo

37

Cel de-al doilea nivel al aplicatiei backend este cel de rdquomagazierdquo (repositories) carecontine doar interfete de tip rdquoRepositoryrdquo

Aceste interfete sunt cele care fac operatiile directe asupra entitatilor din baza dedate

Unele interfete doar extind interfata care are deja implementate metodele CRUDsi din acest motiv nu au metode suplimentare iar altele au si metode ın plus care au carol sa execute interogari mai complexe asupra bazei de date In acele metode se pot scrieinterogarile ın Cypher pentru a putea primi informatii despre mai multe noduri sau desprerelatiile dintre acestea sau si pentru a returna doar anumite rezultate care ındeplinescanumite conditii In felul acesta a fost implementata si cererea de oferire a recomandarilorIn acel caz sistemul returneaza produsele care au ın descriere unul din lucrurile care se aflaın lista de obiecte sau servicii primite de la Facebook ca ıi plac utilizatorului

Nivelul de rdquoRepositoryrdquo este folosit direct de cel de-al treiea nivel cel de servi-ciu Acesta este nivelul la care se executa logica aplicatiei unde se comanda modul defunctionare al ıntregii aplicatii

Figura 55 Diagrama de clase pentru pachetul rdquoservicesrdquo

Pe acest nivel ajung toate cererile din server dupa ce trec de verificarile de securitateIn acest pachet se afla si clasa de securitate care face verificarile necesare In aceasta clasaexista o metoda ce se apeleaza la prima cerere cea de salvare a datelor de la Facebookdespre utilizator si care codifica id-ul utilizatorului si ıl trimite pe raspuns ınapoi interfeteiPe langa asta ın acea clasa se afla si o metoda care verifica faptul ca id-ul codificat esteal unui utilizator cu rol corespunzator pentru a face acea cerere

In plus ın acest pachet se afla si toate celelalte clase care fac diverse operatii pedatele din baza de date si dau raspunsuri cererilor din interfata Aici se afla logica care

38

comanda actiunile asupra utilizatorilor asupra prietenilor acestora asupra produselor siasupra comenzilor

Ultima clasa a acestui nivel este cea care se ocupa de trimiterea de email-uri Incazul ın care se face o noua comanda de catre un utilizator toti producatorii produselor depe comanda sunt notificati despre produsele lor pe care le doreste utilizatorul Din serviciulde comanda se apeleaza serviciul de email pentru fiecare producator din lista celor care auproduse care se afla pe lista comenzii utilizatorului

Ultimul si cel mai aproape de interfata utilizator este nivelul de web Acolo se aflatoate clasele de rdquoControllerrdquo ale aplicatiei server

Figura 56 Diagrama de clase pentru pachetul rdquowebrdquo

Toate cererile din interfata utilizator ıncearca sa se mapeze pe rutele declarate ınclase pentru a fi procesate ın metoda corespunzatoare Toata aceasta parte este foarteusor de implementat si mai ales foarte lizibil pentru programatori datorita adnotarilor dinJava Cu ajutorul acestora trebuie doar specificat care este numele URL-ului cererii careeste tipul de obiect asteptat si daca se trimite ca rdquoquery stringrdquo pe URL sau ın interiorulcorpului cererii si tipul raspunsului Pentru fiecare cerere care nu este apelata ın parteaneautentificata a utilizatorului primul lucru care se apeleaza este metoda de securitatepentru a verifica rolul si id-ul utilizatorului Daca din punctul de vedere al securitatii totuleste ın regula se apeleaza metoda corespunzatoare din pachetul de serviciu

39

O singura clasa este diferita de restul ın pachetul de controller si aceea este clasa deeroare Acolo se mapeaza erorile aparute ın timpul cererii si se trimite ınapoi ın interfatagrafica un raspuns cu cod de eroare specific nu numai 500 Generic Application Exceptioncum ar trimite fara aceasta clasa si cu detalii despre motivul aparitiei erorii

Datorita folosirii adnotarilor din java nu a fost necesara folosirea unor rdquodesignpatternrdquo-uri ın sistem De exemplu pentru a folosi ın nivelul de web ceva din pachetulde servicii trebuia doar acel obiect sa aiba adnotarea Autowired si se ınlocuieste atatfolosirea rdquodesign patternrdquo-ului Singleton cat si a celui de Factory Acel obiect nu trebuiecreat sau initializat se face asta implicit datorita adnotarii si de asemenea este folositapeste tot aceeasi instanta

In concluzie toate cererile venite din interfata grafica ajung ın nivelul de rdquocontrollerrdquode unde sunt trimise la cel de rdquoservicerdquopentru a fi procesate si facute eventualele modificarinecesare ın baza de date ca apoi raspunsul sa fie trimis ınapoi spre aplicatia client pentruafisare

512 Arhitectura componentei frontend

A doua componenta implementata a sistemului este aplicatia client frontend-ulAceasta a fost scrisa ın Java Script cu ajutorul framework-ului Ext JS compilarea

se face cu ajutorul Sencha CMD si mediul de implementare a fost IntelliJ IdeaCu ajutorul framework-ului Ext JS se scriu componente care apoi se initializeaza

unele pe altele Aplicatia porneste cu fisierul Applicationjs care este un fel de rdquomainrdquopentru aplicatie Aceasta initializeaza alte componente care la randul lor includ altecomponente si tot asa Structura poate fi foarte usor comparata cu una arborescenta dinacest punct de vedere

Framework-ul a fost creat sa functioneze ın felul acesta pentru ca scopul componen-telor este sa fie scrise ın asa fel ıncat sa poata pe viitor sa fie utilizate din nou Una dindorintele majore ın programare tot timpul este de a se scrie cod ıntr-o maniera ın care safie cat mai reutilizabil Iar framework-ul Ext JS exact asta ıncearca

Arhitectura aplicatiei client se gaseste ın figura 57 si este la randul ei ımpartita ınpachete ca si cea de server Similar cu pachetul de rdquodomainrdquo de la aplicatia de backendeste pachetul rdquomodelrdquo al interfetei utilizator Aici sunt rdquoclaserdquo care sunt simple POJO sicare sunt apoi folosite ın nivelele urmatoare Sunt mai putine decat clasele din rdquostorerdquodeoarece daca raspunsul de la server nu trebuie procesat nu sunt necesare se pot mapadirect obiectele din rdquostorerdquo pe componentele interfetei utilizator

Urmatorul nivel este cel pe care se afla clasele de rdquostorerdquo Acestea sunt cele careexecuta cererea spre backend si face legatura ıntre client si server Daca are o clasa derdquomodelrdquodeclarata atunci populeaza acel obiect cu datele primite de la server iar ın cazul ıncare nu este declarat un model se trimit datele exact asa cum s-au primit la nivelul urmatorde rdquoviewrdquo Acest nivel seamana din punct de vedere al functiei cu cel de rdquorepositoryrdquo de laaplicatia server deoarece ambele au rol de legatura Aceea facea legatura ıntre aplicatiesi baza de date si aceasta face legatura ıntre aplicatia client si aplicatia server

40

Figura 57 Diagrama de clase pentru aplicatia web

Cel de-al treilea pachet al aplicatiei este cel de rdquoviewrdquo In acest pachet se afla claselecare alcatuiesc partea vizuala a aplicatiei La randul ei si aceasta este alcatuita tot dincomponente Aplicatia deschide ın primul rand Main-ul care determina aparitia paginii deHome si afisarea ın meniu a optiunilor posibile ın functie de autentificare si rol Clasele deaici se executa de fapt la deschiderea aplicatiei fiind rdquosingle page applicationrdquo si tot atuncise ıncarca pe pagina componentele Ca si arhitectura a pachetului acesta este ımpartit larandul sau ın subpachete Pentru o mai buna organizare exista patru subpachete cateunul pentru fiecare tip de utilizator In felul acesta toate rdquoviewrdquo-urile care sunt specificeunui utilizator cu un anumit rol se afla ın acelasi subpachet

Cele patru subpachete existente ın pachetul rdquoviewrdquo sunt

1 Pachetul rdquomainrdquo care cuprinde rdquoviewrdquo-urile care se afla ın partea neautentificata aaplicatiei

2 Pachetul rdquoclientrdquo continand rdquoviewrdquo-urile pe care le poate accesa un utilizator simplu3 Pachetul rdquoproducerrdquo specific actiunilor unui utilizator care are rol de producator4 Pachetul rdquoadminrdquo care contine toate rdquoviewrdquo-urile care ıi apar unui utilizator care este

administrator al aplicatiei

Ultimul pachet si nivel al aplicatiei client este cel de rdquocontrollerrdquo In acest pachet

41

se afla clasele care fac actiunile din interfata grafica In timp ce pachetul rdquoviewrdquo continedoar partea grafica a aplicatiei adica modul ın care aceasta trebuie sa arate pachetulrdquocontrollerrdquo contine actiunea acestora modul ın care aplicatia trebuie sa functioneze

Ca si arhitectura si acest pachet a fost ımpartit la randul lui tot ın cele patrusubpachete ca si pachetul rdquoviewrdquo adica rdquomainrdquo rdquoclientrdquo rdquoproducerrdquo si rdquoadminrdquo In pluspentru a fi usor de gasit ce clasa de rdquocontrollerrdquo apartine carui rdquoviewrdquo am ales ca cele douasa aiba acelasi nume In felul acesta daca se doreste sa se gaseasca actiunile unui rdquoviewrdquose poate cauta dupa o clasa cu acelasi nume ın pachetul rdquocontrollerrdquo Numarul claselor dinacest pachet este mai mic decat cel al claselor din rdquoviewrdquo deoarece nu toate paginile dininterfata au actiuni suplimentare Daca singura actiune este ıncarcarea paginii cu date dela server adica doar o actiune simpla de GET datele se ıncarca cu ajutorul rdquostorerdquo-ului laıncarcarea paginii si nu este necesara nici o actiune suplimentara Paginile pe care se potface si actiuni de alt gen sau se deschid noi ferestre au nevoie de clase de rdquocontrollerrdquo

In concluzie arhitectura aplicatiei client este una bazata pe componente care ıncearcasa foloseasca cat mai multe clase reutilizabile

52 Structura bazei de date

Baza de date a aplicatiei este de tip graf de tipul Neo4j Pentru utilizare exista unprogram numit Neo4j ce trebuie instalat Acest program are si o interfata grafica ın carese pot vizualiza datele sub forma grafica si ın care se pot scrie de asemenea si interogariın limbajul acestei baze de date adica Cypher

Fiind o baza de date sub forma de graf datele stocate sunt salvate ın structurade date sub forma de noduri si relatii Entitatile din pachetul de domeniu din aplicatiabackend se gasesc ın baza de date sub forma unor noduri iar dependentele dintre nodurise mapeaza ın baza de date sub forma unor relatii Un element diferit fata de alte tipuride baze de date este faptul ca pe relatiile dintre noduri se pot salva atribute cum este ınaplicatie cazul pentru prieteniile dintre persoane In cazul acestora pe relatia dintre nodurise salveaza daca prietenia a fost sau nu acceptata

Pentru fiecare clasa POJO din aplicatia server clasa ce are doar metodele get si setsi se afla ın pachetul domain exista cate un tip de nod diferit ın baza de date cum estesi marcat ın diferite culori ın figura 58 Fiecare tip de nod are atributele proprii care potlua valori sau pot fi nule Iar fiecare obiect din Java reprezinta un nod diferit ın baza dedate

Neo4j a fost cea mai buna optiune pentru baza de date pentru ca aplicatia poate ficonsiderata o retea sociala Acest lucru se datoreaza relatiilor de prietenie dintre persoanesi a multiplelor relatii ıntre noduri Toate nodurile se afla ın acceasi componenta conexadeci nu exista noduri izolate care sa nu aiba nici o legatura cu nici un alt nod

Datorita acestei structuri a bazei de date este posibila implementarea cererii derecomandare ca o simpla interogare ın baza de date aceasta fiind cea mai simpla metodade implementare a unui sistem de genul acesta una mult mai complexa ar fi fost un

42

algoritm de ınvatare care sa ınvete tipare ale utilizatorilor si sa recomande cadouri pe bazaacestor informatii

Figura 58 Diagrama bazei de date pentru doi utilizatori

Un alt avantaj al acestui tip de baza de date este faptul ca datele nu sunt duplicateın baza de date Spre exemplu daca mai multi utilizatori au ca locatie acelasi oras nu secreaza cate un nod cu acea locatie de mai multe ori ci acel unic nod va avea cate o relatiecu fiecare utilizator care are ca locatie acel oras

In concluzie structura bazei de date a fost aleasa ın acest fel datorita tipului apli-catiei adica asemanatoare cu o retea sociala si datorita implementarii simple a unui sistemde recomandare pe o asemenea baza de date

53 Fluxul pentru diferite operatii

Pentru aplicatie cele mai importante cazuri de utilizare sunt salvarea informati-ilor despre utilizator primite de la Facebook pentru crearea unui profil si recomandareacadourilor pentru un utilizator al aplicatiei Din aceasta cauza cele doua cazuri de utilizarevor fi prezentate mai ın detaliu ın continuare

43

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 21: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

bull Pentru persoanele la care pe profilul de Facebook este insuficient completat saupentru a putea cumpara cadouri pentru o persoana care nu are Facebook sau nuare cont ın aceasta aplicatie si despre care ın acest fel nu se cunosc nici un felde informatii se vor putea filtra cautarile pentru cadou printr-o serie de ıntrebaristandard Aceste ıntrebari vor putea creea un rdquomini-profilrdquo pentru acea persoanapentru ca sistemul sa poata recomanda cadouri

42 Cerinte non-functionale

bull Securitate sistemul nu raspunde cererilor decat atunci cand utilizatorul a fost au-tentificat ın aplicatie si are rolul necesar pentru a face acea cerere

bull Portabilitate aplicatia nu depinde de sistemul de operare pe care ruleaza De aseme-nea nu e dependenta de browserul folosit de utilizator

bull Disponibilitate sistemul ramane stabil ın fata erorilor si functioneaza la fel si dupaaparitia unei erori

bull Extensibilitate sistemul permite adaugarea sau modificarea unor componente atuncicand cerintele aplicatiei se modifica Pe langa asta e flexibila unor dezvoltari ulte-rioare

43 Cazuri de utilizare

In aceasta sectiune se vor prezenta actorii aplicatiei diagrama cazurilor de utilizaresi vor fi descrise cazurile de utilizare de baza ale fiecarui actor

Ca si actori aplicatia are patru tipuri de utilizatori

bull utilizator anonimbull clientbull producatorbull administrator

Aplicatia este conceputa ın asa fel ıncat ıntre actori este o relatie de mostenire Acestlucru presupune ca un actor are posibilitatea de a efectua tot ce putea cel dinaintea lui siceva ın plus Deci utilizatorii anonimi au cele mai putine permisiuni iar administratoriiau permisiuni totale Acest lucru se vede foarte clar si ın diagrama cazurilor de utilizaredin imaginea 41

In continuare vor fi prezentate cazurile de utilizare

1 recomandare cadouri2 adaugare produs3 modificare rol utilizator

16

Figura 41 Digrama cazurilor de utilizare

17

431 Recomandare cadouri

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unutilizator trebuie sa le urmeze pentru a primi recomandari de cadouri pentru un cunoscutsi pentru a efectua o comanda

Actorul principal

Orice utilizator al aplicatiei

Parti interesate si interese

Utilizatorul care doreste sa cumpere un cadou este interesat de a gasi un cadoupotrivit pentru cineva pe care ıl cunoaste

Producatorul care e interesat sa ısi poata vinde produseleUtilizatorul care primeste cadoul fiind interesat sa primeasca un cadou care sa i se

potriveasca si care sa ıi placa

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand utilizatorul porneste aplicatia11 Utilizatorul verifica daca are cont de Facebook si daca are urmeaza pasul 111

daca nu 22111 Utilizatorul se autentifica ın aplicatie cu ajutorul credentialelor de la

Facebook12 Utilizatorul deschide sectiunea de recomandare cadouri13 Utilizatorul completeaza formularul cu datele ce trebuie introduse pentru a primi

recomandari de cadouri pentru un prieten14 Utilizatorul poate fi satisfacut cu recomandarile primite si atunci urmeaza pasul

141 iar daca nu este atunci urmeaza cazul alternativ 23141 Utilizatorul adauga ın cosul de cumparaturi cadouri pe care doreste sa

le cumpere15 Utilizatorul cere sa ısi vada cosul de cumparaturi16 Utilizatorul poate sa se declare multumit de cosul de cumparaturi caz ın care

urmeaza pasul 161 sau poate sa aleaga cazul alternativ 24161 Utilizatorul aproba cosul de cumparaturi si accepta sa se faca comanda

17 Sistemul introduce ın baza de date comanda18 Utilizatorul va putea vedea la sectiunea comenzilor sale noua comanda si statusul

ei19 Sistemul notifica producatorul de aparitia noii comenzi110 Utilizatorul se dezautentifica din aplicatie

18

Use-Case EndUtilizatorul se va deconecta din aplicatie si o va ınchide

Figura 42 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueazaAcest flux poate aparea la orice pas211 Utilizatorul deschide sectiunea de recomandare cadouri212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca utilizatorul nu are cont de Facebook

19

Acest flux poate aparea la pasul 11221 Utilizatorul deschide pagina de Facebook222 Utilizatorul ısi face un cont pe pagina de Facebook si ısi completeaza

date despre el223 Utilizatorul revine la aplicatia de recomandare cadouri si ıncearca din

nou sa se autentifice ın aplicatie224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca utilizatorul nu e multumit de recomandariAcest flux poate aparea la pasul 14231 Utilizatorul sterge din cos cadourile pe care nu le mai doreste si revine

la pagina de recomandari232 Utilizatorul adauga alte cadouri ın cos233 Cazul de utilizare continua de la pasul 141

24 Flux-ul alternativ daca utilizatorul nu e multumit de produsele din cosul decumparaturi

Acest flux poate aparea la pasul 16241 Utilizatorul revine ınapoi la formularul cu introducerea datelor despre

beneficiarul cadoului242 Utilizatorul completeaza din nou datele243 Cazul de utilizare continua de la pasul 13

Preconditii

1 Utilizatorul trebuie sa aiba un cont de Facebook pentru a se putea autentifica ınaplicatie

2 Utilizatorul trebuie sa fie autentificat ın aplicatie pentru a putea face orice actiunedin acest caz de utilizare

3 Utilizatorul trebuie sa deschida sectiunea de recomandare cadouri pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noua comanda este salvata ın baza de date2 Comanda apare ın sectiunea de comenzi a utilizatorului ımpreuna cu statusul ei

curent3 Producatorul este notificat ca are o noua comanda

432 Adaugare produs

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unproducator trebuie sa le urmeze pentru a introduce un nou produs ın aplicatie

20

Actorul principal

Utilizatorii cu rol de producator sau cu rol de administrator

Parti interesate si interese

Producatorul care doreste sa introduca produsul nou ın aplicatie

Utilizatorii simpli care au o mai mare varietate de produse din care sa li se reco-mande cadouri

Figura 43 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo

21

Flux de evenimente

Use-Case Start

Cazul de utilizare ıncepe atunci cand producatorul porneste aplicatia

11 Producatorul verifica daca are cont de Facebook si daca are urmeaza pasul111 daca nu 22

111 Producatorul se autentifica ın aplicatie cu ajutorul credentialelor de laFacebook

12 Producatorul deschide sectiunea de adaugare produs

13 Producatorul completeaza datele necesare despre noul produs ımpreuna cu tipulde persoana si eveniment care i s-ar potrivi

14 Producatorul verifica daca este multumit de datele introduse si daca da urmeazapasul 141 daca nu 23

141 Producatorul efectueaza operatia de adaugare produs

15 Sistemul adauga un nou produs ın baza de date

16 Sistemul notifica producatorul ca noul produs a fost introdus cu succes

17 Producatorul se dezautentifica din aplicatie

Use-Case End

Producatorul se va deconecta din aplicatie si o va ınchide

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Producatorul deschide sectiunea de adaugare produs

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca producatorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Producatorul deschide pagina de Facebook

222 Producatorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Producatorul revine la aplicatia de recomandare cadouri si ıncearca dinnou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca Producatorul nu e multumit de datele introduse despreprodus

Acest flux poate aparea la pasul 14

231 Producatorul sterge datele gresite despre produs

232 Producatorul adauga alte date despre produs

233 Cazul de utilizare continua de la pasul 141

22

Preconditii

1 Producatorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Producatorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Producatorul trebuie sa aiba cont cu rol de rdquoproducatorrdquo sau rdquoadminrdquo pentru aputea face operatia aceasta

4 Producatorul trebuie sa deschida sectiunea de adaugare produs pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noul produs este salvat ın baza de date2 Produsul poate fi adaugat la recomandarile unui utilizator din acel moment

433 Modificare rol utilizator

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unadministrator trebuie sa le urmeze pentru a modifica rolul unui utilizator al aplicatiei

Actorul principal

Un utilizator al aplicatiei care are rol de administrator

Parti interesate si interese

Administratorul care doreste sa modifice rolul unui utilizatorUtilizatorul care doreste sa ısi schimbe rolul

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand administratorul porneste aplicatia11 Administratorul verifica daca are cont de Facebook si daca are urmeaza pasul

111 daca nu 22111 Administratorul se autentifica ın aplicatie cu ajutorul credentialelor de

la Facebook12 Administratorul deschide sectiunea de utilizatori13 Sistemul ıi returneaza administratorului utilizatorii care nu sunt administratori14 Administratorul modifica rolul utilizatorului din utilizator simplu ın producator

sau invers

23

15 Administratorul cere executarea modificarii

16 Sistemul executa modificarea iar ın caz de succes urmeaza pasul 161 si ın cazde eroare pasul 23

161 Sistemul notifica administratorul ca modificarea a fost efectuata cusucces

17 Utilizatorul se dezautentifica din aplicatie

Use-Case End

Administratorul se va deconecta din aplicatie si o va ınchide

Figura 44 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo

24

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Administratorul deschide sectiunea de utilizatori

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca administratorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Administratorul deschide pagina de Facebook

222 Administratorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Administratorul revine la aplicatia de recomandare cadouri si ıncearcadin nou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca sistemul returneaza o eroare la modificarea utilizatorului

Acest flux poate aparea la pasul 16

231 Sistemul returneaza un mesaj de eroare la modificarea utilizatorului

232 Aplicatia afiseaza mesajul de eroare administratorului

233 Cazul de utilizare continua de la pasul 15

Preconditii

1 Administratorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Administratorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Utilizatorul trebuie sa aiba cont cu rol de administrator pentru a putea efectuaorice actiune din acest caz de utilizare

4 Administratorul trebuie sa deschida sectiunea utilizatori pentru a putea ındeplinicerintele din cazul de utilizare

Postconditii

1 Noul rol al utilizatorului este salvat ın baza de date

2 La urmatoarea autentificare a utilizatorului acesta va observa ca interfata si maiprecis meniurile si actiunile care le poate face ıi vor fi diferite

25

44 Perspectiva tehnologica

441 Neo4j

Neo4j 1 este un sistem de gestionare a bazelor de date sub forma de graf dezvoltatde Neo4j Inc Descris de dezvoltatorii sai ca o baza de date tranzactionala compatibilacu ACID Neo4j este cea mai populara baza de date sub forma de graf dupa clasamentulDB-Engines

Baza de date Neo4j (ca si orice alta baza de date sub forma de graf) este foartediferita de o baza de date relationala cum ar fi MS Access SQL Server MySQL etcBazele de date relationale utilizeaza tabele randuri si coloane pentru stocarea datelor

Neo4j nu utilizeaza tabele randuri si coloane pentru stocarea sau prezentarea datelorci noduri si relatii

Neo4j este foarte potrivit pentru stocarea datelor care au multe relatii interconec-tate Acestea sunt de fapt aplicatiile ın care merita sa fie folosite De fapt bazele de datesub forma de graf cum este Neo4j sunt mult mai bune la tratarea datelor interconectatedecat bazele de date relationale

Acest lucru se datoreaza faptului ca modelul sub forma de graf nu necesita de obiceio schema predefinita Nu e nevoie sa se creeze structura bazei de date ınainte de a fiıncarcate datele asa cum se face la o baza de date relationala

Dar principalul motiv pentru care Neo4j este mai bun pentru datele relationalepentru acest tip de aplicatii este modul ın care permite crearea relatiilor Neo4j este con-struit ın jurul relatiilor si atunci nu este nevoie sa se configureze chei primare constrangerichei straine pentru a predetermina nodurile care pot avea o relatie si la ce date Cu Neo4jse poate adauga orice legatura ıntre orice nod ori de cate ori este nevoie

Neo4j are aceste calitati care nu se gasesc nici la celelalte baze de date NoSQLBazele de date non-relationale pe langa cele sub forma de graf sunt cele de tip coloanade tip document de tip cheie-valoare si de tip multi-model Nici unul din aceste tipuri nuau ca principala functionalitate maparea relatiilor si facilitatea interogarilor ıntr-o baza dedate cu multe relatii ıntre entitati

Generarea de recomandari personalizate este unul dintre cele mai frecvente cazuride utilizare a unei baze de date sub forma de graf Unele dintre principalele beneficii aleutilizarii grafurilor pentru a genera recomandari includ

- Performanta Lipsa indexurilor permite calcularea recomandarilor ın timp realasigurand ca recomandarea este ıntotdeauna relevanta si reflecta informatii actualizate

- Model de date Modelul de graf cu proprietati permite combinarea cu usurinta aseturilor de date din mai multe surse

Un alt avantaj al bazelor de date sub forma de graf Neo4j este faptul ca respectatoate principiile din modelul de consistenta ACID

Garantia data de principiile ACID este ca ofera un mediu sigur ın care sa functionezedatele Acronimul ACID reprezinta

1httpsneo4jcomuse-casesreal-time-recommendation-engine

26

bull Atomic Toate operatiile dintr-o tranzactie reusesc sau fiecare operatie este reluatabull Consistent La finalizarea unei tranzactii baza de date este solida din punct de

vedere structuralbull Izolat Tranzactiile nu se lupta una cu cealalta Accesul controversat la date este

moderat de baza de date astfel ıncat tranzactiile par sa se execute succesivbull Durabil Rezultatele aplicarii unei tranzactii sunt permanente chiar si ın cazul unor

defectiuniCand vine vorba de tehnologiile NoSQL cele mai multe baze de date sub forma de

graf (inclusiv Neo4j) utilizeaza un model de consistenta ACID pentru a asigura ca datelesunt stocate ın siguranta si ın mod consecvent

Am ales baza de date sub forma de graf ca optiune pentru stocarea datelor deoarecedin toate lucrarile si articolele citite a fost optiunea cea mai buna pentru un sistem derecomandare Deci acesta se mapeaza perfect pe cerintele functionale ale proiectului Sidin optiunile de baze de date sub forma de graf Noe4j a avut de departe cele mai multeavantaje ea fiind si cea mai utilizata

442 Cypher

Cypher 2 este un limbaj declarativ de interogare pentru bazele de date sub formade graf care permite interogarea si actualizarea rapida a datelor Cypher este un limbajrelativ simplu dar foarte puternic Interogarile foarte complexe ale bazei de date pot fiusor exprimate prin intermediul limbajului Cypher

Este conceput pentru a fi un limbaj de interogare uman Scopul lui principal este dea face interogarile mult mai simple si unele interogari care la bazele de date relationale nuerau posibile le face posibile Constructiile sale se bazeaza pe grafica si pe limba englezalucru care ajuta la scrierea mai intuitiva a interogarilor Este construit pentru a fi maiintuitiv pentru citire si nu neaparat pentru scriere

Cypher se bazeaza pe modelul Graph Property care ın plus fata de elementelegrafice standard ale nodurilor si muchiilor (numite relatii ın Cypher) adauga etichete siproprietati ca si concepte Nodurile pot avea zero sau mai multe etichete ın timp ce fiecarerelatie este de exact un singur tip Nodurile si relatiile au de asemenea zero sau mai multeproprietati

Chypher este limbajul de interogare folosit la bazele de date Neo4j deci este opti-unea implicita atunci cand se alege Neo4j

443 Maven

Maven 3 este un instrument de management software si de ıntelegere a proiectelorsoftware Pe baza conceptului unui model de obiect de proiect (POM) Maven poategestiona construirea raportarea si documentarea unui proiect printr-o informatie centrala

2httpsneo4jcomdevelopercypher-query-language3httpswwwjavatpointcommaven-tutorial

27

Obiectivul principal al lui Maven este acela de a permite unui dezvoltator sa ınte-leaga starea completa a efortului de dezvoltare ın cel mai scurt timp Avantajele Mavensunt

bull instalarea rapida a proiectului fara fisiere buildxml complicate doar un POMbull procesul de construire este standardizat pentru toate proiectelebull usor de ınvatat si de utilizatbull configurarea unui proiect este foarte rapidabull bine documentat

Am ales sa folosesc Maven deoarece este una din cele mai comune optiuni pentru aimporta librariile ıntr-un proiect si este si cel mai documentat Deci mereu cand esti pusın dificultate poti cauta pe internet sugestii

444 Spring Boot

Spring Boot 4 este un framework din cadrul Spring care ofera setari implicite pentruconfigurarea codului si adnotari pentru a lansa rapid proiecte noi ın executie Urmaresteabordarea rdquoConfigurarea defectiunilor vizionaterdquo pentru a evita un numar mare de linii decod pentru configuratii si pentru a ımbunatati procesul de dezvoltare

Avantajele Spring Boot sunt1 Face foarte usoara dezvoltarea de aplicatii bazate pe Spring cu Java sau Groovy2 Reduce timpul de dezvoltare si creste productivitatea3 Evita scrierea multor linii de cod adnotari si configurare XML4 Este foarte usor de integrat cu alte framework-uri din aceasi familie Spring cum ar

fi Spring JDBC Spring ORM Spring Data Spring Security etc5 Urmareste abordarea rdquoConfigurarea implicita a optiunilorrdquo pentru a reduce efortul

pentru dezvoltatori6 Ofera servere HTTP ıncorporate cum ar fi Tomcat Jetty etc pentru a dezvolta si

testa aplicatiile web foarte usor7 Ofera instrumentul CLI (Command Line Interface) pentru a dezvolta si testa apli-

catiile de tip rdquoSpring Bootrdquo (Java sau Groovy) din linia de comanda foarte usor sirapidAm ales ca optiune pentru partea de backend acest framework deoarece simplifica

foarte mult lucrurile Datorita lui un programator poate sa ısi concentreze mai tare energiape a construi proiectul din punctul de vedere al buissness-ului logic nu din punctul devedere al configurarilor necesare

445 Sencha CMD si ExtJS

Sencha CMD 5 este un instrument linie de comanda cross-platform care ofera multesarcini automate ın ciclul complet de viata al unei aplicatii ExtJS de la generarea unui

4httpswwwjavatpointcomspring-boot-tutorial5httpsdocssenchacomcmd

28

nou proiect la lansarea unei aplicatii ın productie

Sencha Cmd ofera o colectie de caracteristici puternice pentru economisirea timpu-lui care functioneaza ımpreuna cu Sencha ExtJS si Sencha Touch

Ext JS 6 este un framework pur JavaScript pentru construirea de aplicatii webinteractive cross-platform utilizand tehnici precum scripting Ajax DHTML si DOM

Avantajele framework-ului ExtJS sunt

1 Documentatia Extjs este foarte cuprinzatoare si bine ıntretinuta2 Aspectul cheie al bibliotecii EXTJS este suportul de tip cross-browser3 Framework-ul ExtJS ofera o multitudine de elemente UI Aceste elemente includ

forme casete de dialog file arbori si tabele4 Framework-ul ExtJS include suport pentru implementarile Ajax5 ExtJS ofera performante excelente Framework-ul este complet orientat spre obiecte

si este extensibil asta pentru ca este scris ın JavaScript

Pentru partea de frontend se foloseste framework-ul ExtJS deoarece are o arhitec-tura ce se mapeaza foarte bine pe proiectele de frontend si anume arhitectura bazata pecomponente Aceasta face ca ın proiect codul sa fie mult mai organizat si procesul dedezvoltare al proiectului sa fie mult mai scurt prin identificarea mai usoara a erorilor

446 Facebook API(Graph API)

Graph API 7 este modul principal de a pune date ın platforma Facebook si de aobtine date din platforma Facebook Este un API bazat pe HTTP pe care aplicatiile ılpot utiliza pentru interogarea datelor pentru a introduce postari noi pentru gestionareaanunturilor sau pentru a ıncarca fotografii

Este denumit Graph API dupa ideea unui rdquograf socialrdquo - o reprezentare sub formade graf a informatiilor de pe Facebook Este compus din

bull noduri - ın esenta obiecte individuale cum ar fi un utilizator o fotografie o paginasau un comentariu

bull muchii - conexiuni ıntre o colectie de obiecte si un singur obiect cum ar fi fotografiilede pe o pagina sau comentariile de la o fotografie

bull campuri - date despre un obiect cum ar fi ziua de nastere a unui utilizator saunumele paginii

De obicei se utilizeaza noduri pentru a obtine date despre un anumit obiect se uti-lizeaza muchii pentru a obtine colectii de obiecte legate de un singur obiect si se utilizeazacampurile pentru a obtine date despre un singur obiect sau mai multe obiecte dintr-ocolectie

Am folosit Facebook API ca solutie pentru a ımbunatati problema de rdquocold startrdquopentru ca este singurul site pe care marea majoritate a oamenilor au cont si salveazalucrurile care le plac Deci se potrivea perfect peste nevoile aplicatiei mele

6httpdocssenchacomextjs6207httpsdevelopersfacebookcomdocsgraph-api

29

447 Git

Git 8 este un sistem de control a versionarii pentru urmarirea modificarilor ın fisierelede pe computer si coordonarea activitatii asupra acestor fisiere ın randul mai multor per-soane Este utilizat ın principal pentru gestionarea codului sursa ın dezvoltarea de softwaredar poate fi folosit pentru a urmari schimbarile ın orice set de fisiere

Avantaje ale Git

bull Modelul distribuit numai ceea ce se doreste se face publicbull Branching-ul si merging-ul sunt usoarebull Fluxul de lucru este flexibilbull Integritatea datelor este asigurata Deoarece GIT utilizeaza arbori SHA1 coruperea

datelor din motive externe poate fi usor detectatabull Rapid Git este foarte rapid chiar si ın comparatie cu alte sisteme de control a

versionarii

Am folosit Git pentru a avea la proiect un back-up ın caz ca se ıntampla ceva cuproiectul salvat pe calculator

45 Arhitectura conceptuala

In figura 45 este prezentata arhitectura conceptuala a sistemului Acesta este ım-partit ın doua mari parti backend-ul si frontend-ul care comunica ıntre ele si ısi trimitinformatii

Se poate observa ca baza de date este de tip graf mai exact Neo4j si comunica cubackend-ul pentru a putea lucra cu datele stocate Backend-ul este structurat pe nivelefiecare cu un diferit rol si care trebuie parcurs pentru a procesa datele din interfata ınbaza de date Cele trei nivele sunt cel de Repository cel de Service si cel ControllerToate interogarile venite din interfata utilizator ajung ın nivelul de Controller Dupa ceinterogarile trec de securitatea sistemului ajung ın nivelul de Service Acolo se proceseazasi se afla partea de logica a aplicatiei Pentru a interactiona cu baza de date din Servicese apeleaza metodele din nivelul de Repository

In continuare backend-ul comunica prin protocolul HTTP cu interfata grafica cucare interactioneaza clientii aplicatiei Interfata este scrisa ın Ext JS si are o parte de Viewsi o parte de Controller care este cea care comunica cu backend-ul

Pentru partea de autentificare sistemul interactioneaza cu API-ul de la Facebookde la care ia dupa autentificare un access token Cu ajutorul acestuia ia dupa aceea datelenecesare pentru a putea crea un profil utilizatorului

8httpsguidesgithubcomintroductiongit-handbook

30

Figura 45 Arhitectura conceptuala

31

Capitolul 5

Proiectare de Detaliu siImplementare

In acest capitol vor fi prezentate detalii de implementare ale sistemului de recoman-dare incluzand o ımpartire al acestuia ın componentele care ıl cuprind

Obiectivul este de a prezenta arhitectura si modul de implementare al aplicatieipe baza datelor descoperite ın studiul bibliografic de la capitolul trei si cu tehnologiilehotarate la capitolul patru Pe langa asta va fi prezentata si structura bazei de date sideciziile luate pentru securitatea aplicatiei

51 Arhitectura sistemului

Din punctul de vedere al arhitecturii aplicatia se poate considera ca este alcatuitadin patru mari componente

1 API-ul de la Facebook2 Aplicatia client care reprezinta interfata grafica a aplicatiei3 Aplicatia server adica backendul aplicatiei si partea ın care se afla partea de rdquobusiness

logicrdquo4 Baza de date

Partea componenta reprezentata de API-ul de la Facebook este doar o componentacu care aplicatia se integreaza si pe care aceasta o foloseste In interactiunea cu ea interfatada o cerere de autentificare apare o fereastra de la Facebook ın care utilizatorul introducecredentialele de la API-ul de Facebook se primeste ınapoi un access token si cu ajutorulacestuia face o cerere pentru a primi datele personale ale utilizatorului pentru creeareaprofilului utilizator

Urmatoarea parte a aplicatiei este interfata utilizator frontend-ul care reprezintapartea cu care utilizatorul interactioneaza si locul unde ıi sunt afisate informatiile

Cererile din interfata ajung ın a treia parte componenta a sistemului partea deserver adica backend-ul aplicatiei Acolo toate cererile sunt citite si procesate iar raspun-

33

sul lor este trimis la interfata utilizator Aceasta este partea care reprezinta rdquogandireardquoaplicatiei Aceea este componenta care face legatura ıntre cererile utilizatorului din inter-fata si datele stocate ın baza de date

Ultima componenta a aplicatiei o reprezinta baza de date care are ca rol sa stochezedatele despre utilizatori produse si comenzi Ea este o baza de date sub forma de grafde tipul Neo4j Acolo se salveaza entitatile aplicatiei sub forma de noduri si dependenteleıntre acestea sub forma de relatii ıntre aceste noduri

Figura 51 Diagrama de rdquodeploymentrdquo

In figura 51 este prezentata diagrama de rdquodeploymentrdquo a sistemului cu cele patrucomponente ale sistemului Aplicatia client comunica cu API-ul de la Facebook prin pro-tocolul securizat HTTPS cu backend-ul prin protocolul HTTP iar backend-ul cu baza dedate prin JDBC

Aplicatia a putut fi ımpartita ın aceste componente separate deoarece fiecare dintreele poate functiona independent de celelalte comunica cu ele doar prin mesaje Din acestmotiv locul unde ruleaza acestea pot sa fie pe servere diferite In plus daca aplicatiaar fi pusa pe servere pentru utilizatori ar putea fi mai multe servere pe care ruleaza ocomponenta si prin rdquoload balancingrdquo sa se trimita cererile ımpartite ıntre ele

Cum astfel componentele nu depind foarte mult unele de altele si pot rula faraa le interesa de unde le sunt trimise cererile este arhitectura cea mai corecta deoarecedefectarea sau o posibila eroare la una din ele nu o influenteaza cu nimic pe o alta Dacatoate ar rula pe acelasi server o eventuala defectiune a acestuia ar ınsemna o defectiune aıntregului sistem Insa daca exista mai multe noduri si se afla pe servere diferite pot doartoate cererile sa fie redirectionate spre un nod care functioneaza si aplicatia sa functionezepentru clienti la fel ca ınainte

34

Un alt avantaj al arhitecturii ar fi faptul ca la o lansare viitoare catre clienti se poatelansa doar componenta la care s-au facut modificari De asemenea aplicatia ar putea aveape viitor si o componenta mobila Iar cum serverul e independent poate fi acelasi serverfolosit de o alta aplicatie client

511 Arhitectura componentei backend

Arhitectura backend-ului este si ea ımpartita ın mai multe pachete pentru o maibuna structura si pentru o cat mai mica dependenta ıntre diversele componente Astfelcuplarea este minima ıntre clase si eventualele modificari ulterioare pot fi mai usor defacut

Serverul a fost implementat ın Java cu ajutorul framework-ului Spring Boot iarmediul de dezvoltare folosit a fost Intellij IDEA

Din punctul de vedere al ımpartirii arhitectura serverului aplicatiei este structurataın patru pachete si o clasa ın afara acestora Acea clasa este rdquomainrdquo-ul aplicatiei este parteacare trebuie rulata pentru a porni serverul Din cauza ca este o aplicatie Spring Boot si nuuna String singura adnotare necesara pentru a sti ca aceea este clasa rdquoradacinardquoa aplicatieieste SpringBootApplication

Cele patru pachete ale serverului sunt1 Cel de domeniu (domain) cu clasele POJO care reprezinta entitatile din baza de

date2 Cel de rdquomagazierdquo (repositories) care este cel care face direct actiunile ın baza de date3 Cel de serviciu (services) ın care se afla partea de logica a ıntregii aplicatii4 Cel de web ın care se afla clasele de rdquocontrollerrdquo

Figura 52 Diagrama de pachete pentru backend

35

Ca si dependente nivelul de web ıl foloseste pe cel de seviciu cel de serviciu ılfoloseste pe cel de rdquomagazierdquo iar clasele din pachetul de domeniu sunt folosite ın toatecelelalte pachete

In continuare voi prezenta pe rand fiecare nivel al serverului adica fiecare pachet

Figura 53 Diagrama de clase pentru pachetul rdquodomainrdquo

36

Nivelul de domeniu (domain) este alcatuit ın primul rand din clasele care suntentitati ın baza de date Acestea sunt reprezentate de toate clasele ce stocheaza informatiidespre utilizatori si despre produse si comenzi Pe langa informatiile personale despre unutilizator de genul numelui email-ului sau data nasterii care sunt salvate ın entitateapersoana se stocheaza despre utilizator ın clase diferite informatii de genul locului undelocuieste locul unde a copilarit locurilor unde a facut scoala locului unde lucreaza sau celmai important pentru aplicatia aceasta lucrurilor care ıi plac In afara acestor informatiidespre utilizatori sunt si clase cu informatiile despre prieteni despre produse sau desprecomenzi

Din cauza faptului ca aplicatia este de tipul unei retele sociale ın care exista prieteniiıntre persoane exista dependente ıntre toate entitatile aplicatiei Acesta este si motivulpentru care am ales baza de date sub forma de graf pe care sa se mapeze toate acesteentitati sub forma de noduri si toate aceste dependente sub forma de relatii

In pachetul de domeniu se afla si trei subpachete Unul dintre ele este pentruclasele folosite pentru a trata erorile aplicatiei In interiorul acestui pachet se afla douaclase pentru eroare si o exceptie cea folosita ın cazul ın care nu se gaseste ceea ce doresteutilizatorul Pe langa asta este clasa care are ca obiect raspunsul dat de sistem ın cazulunei erori la server Aceasta contine ın interiorul sau pe langa codul erorii si detalii despreeroarea trimisa Aceasta lista de detalii e reprezentata de obiectele de tipul celei de-a treiaclase din pachetul acesta

Celelalte doua subpachete aflate ın acest nivel sunt cele care contin clasele specialede cerere sau raspuns care au ajutat la maparea acestora mai bine In multe cazuri nua fost necesara trimiterea la interfata utilizator a tuturor informatiilor stocate despre oentitate si de aceea am ales sa creez ın aceste cazuri un obiect auxiliar care sa fie folositpe post de raspuns

Figura 54 Diagrama de clase pentru pachetul rdquorepositoriesrdquo

37

Cel de-al doilea nivel al aplicatiei backend este cel de rdquomagazierdquo (repositories) carecontine doar interfete de tip rdquoRepositoryrdquo

Aceste interfete sunt cele care fac operatiile directe asupra entitatilor din baza dedate

Unele interfete doar extind interfata care are deja implementate metodele CRUDsi din acest motiv nu au metode suplimentare iar altele au si metode ın plus care au carol sa execute interogari mai complexe asupra bazei de date In acele metode se pot scrieinterogarile ın Cypher pentru a putea primi informatii despre mai multe noduri sau desprerelatiile dintre acestea sau si pentru a returna doar anumite rezultate care ındeplinescanumite conditii In felul acesta a fost implementata si cererea de oferire a recomandarilorIn acel caz sistemul returneaza produsele care au ın descriere unul din lucrurile care se aflaın lista de obiecte sau servicii primite de la Facebook ca ıi plac utilizatorului

Nivelul de rdquoRepositoryrdquo este folosit direct de cel de-al treiea nivel cel de servi-ciu Acesta este nivelul la care se executa logica aplicatiei unde se comanda modul defunctionare al ıntregii aplicatii

Figura 55 Diagrama de clase pentru pachetul rdquoservicesrdquo

Pe acest nivel ajung toate cererile din server dupa ce trec de verificarile de securitateIn acest pachet se afla si clasa de securitate care face verificarile necesare In aceasta clasaexista o metoda ce se apeleaza la prima cerere cea de salvare a datelor de la Facebookdespre utilizator si care codifica id-ul utilizatorului si ıl trimite pe raspuns ınapoi interfeteiPe langa asta ın acea clasa se afla si o metoda care verifica faptul ca id-ul codificat esteal unui utilizator cu rol corespunzator pentru a face acea cerere

In plus ın acest pachet se afla si toate celelalte clase care fac diverse operatii pedatele din baza de date si dau raspunsuri cererilor din interfata Aici se afla logica care

38

comanda actiunile asupra utilizatorilor asupra prietenilor acestora asupra produselor siasupra comenzilor

Ultima clasa a acestui nivel este cea care se ocupa de trimiterea de email-uri Incazul ın care se face o noua comanda de catre un utilizator toti producatorii produselor depe comanda sunt notificati despre produsele lor pe care le doreste utilizatorul Din serviciulde comanda se apeleaza serviciul de email pentru fiecare producator din lista celor care auproduse care se afla pe lista comenzii utilizatorului

Ultimul si cel mai aproape de interfata utilizator este nivelul de web Acolo se aflatoate clasele de rdquoControllerrdquo ale aplicatiei server

Figura 56 Diagrama de clase pentru pachetul rdquowebrdquo

Toate cererile din interfata utilizator ıncearca sa se mapeze pe rutele declarate ınclase pentru a fi procesate ın metoda corespunzatoare Toata aceasta parte este foarteusor de implementat si mai ales foarte lizibil pentru programatori datorita adnotarilor dinJava Cu ajutorul acestora trebuie doar specificat care este numele URL-ului cererii careeste tipul de obiect asteptat si daca se trimite ca rdquoquery stringrdquo pe URL sau ın interiorulcorpului cererii si tipul raspunsului Pentru fiecare cerere care nu este apelata ın parteaneautentificata a utilizatorului primul lucru care se apeleaza este metoda de securitatepentru a verifica rolul si id-ul utilizatorului Daca din punctul de vedere al securitatii totuleste ın regula se apeleaza metoda corespunzatoare din pachetul de serviciu

39

O singura clasa este diferita de restul ın pachetul de controller si aceea este clasa deeroare Acolo se mapeaza erorile aparute ın timpul cererii si se trimite ınapoi ın interfatagrafica un raspuns cu cod de eroare specific nu numai 500 Generic Application Exceptioncum ar trimite fara aceasta clasa si cu detalii despre motivul aparitiei erorii

Datorita folosirii adnotarilor din java nu a fost necesara folosirea unor rdquodesignpatternrdquo-uri ın sistem De exemplu pentru a folosi ın nivelul de web ceva din pachetulde servicii trebuia doar acel obiect sa aiba adnotarea Autowired si se ınlocuieste atatfolosirea rdquodesign patternrdquo-ului Singleton cat si a celui de Factory Acel obiect nu trebuiecreat sau initializat se face asta implicit datorita adnotarii si de asemenea este folositapeste tot aceeasi instanta

In concluzie toate cererile venite din interfata grafica ajung ın nivelul de rdquocontrollerrdquode unde sunt trimise la cel de rdquoservicerdquopentru a fi procesate si facute eventualele modificarinecesare ın baza de date ca apoi raspunsul sa fie trimis ınapoi spre aplicatia client pentruafisare

512 Arhitectura componentei frontend

A doua componenta implementata a sistemului este aplicatia client frontend-ulAceasta a fost scrisa ın Java Script cu ajutorul framework-ului Ext JS compilarea

se face cu ajutorul Sencha CMD si mediul de implementare a fost IntelliJ IdeaCu ajutorul framework-ului Ext JS se scriu componente care apoi se initializeaza

unele pe altele Aplicatia porneste cu fisierul Applicationjs care este un fel de rdquomainrdquopentru aplicatie Aceasta initializeaza alte componente care la randul lor includ altecomponente si tot asa Structura poate fi foarte usor comparata cu una arborescenta dinacest punct de vedere

Framework-ul a fost creat sa functioneze ın felul acesta pentru ca scopul componen-telor este sa fie scrise ın asa fel ıncat sa poata pe viitor sa fie utilizate din nou Una dindorintele majore ın programare tot timpul este de a se scrie cod ıntr-o maniera ın care safie cat mai reutilizabil Iar framework-ul Ext JS exact asta ıncearca

Arhitectura aplicatiei client se gaseste ın figura 57 si este la randul ei ımpartita ınpachete ca si cea de server Similar cu pachetul de rdquodomainrdquo de la aplicatia de backendeste pachetul rdquomodelrdquo al interfetei utilizator Aici sunt rdquoclaserdquo care sunt simple POJO sicare sunt apoi folosite ın nivelele urmatoare Sunt mai putine decat clasele din rdquostorerdquodeoarece daca raspunsul de la server nu trebuie procesat nu sunt necesare se pot mapadirect obiectele din rdquostorerdquo pe componentele interfetei utilizator

Urmatorul nivel este cel pe care se afla clasele de rdquostorerdquo Acestea sunt cele careexecuta cererea spre backend si face legatura ıntre client si server Daca are o clasa derdquomodelrdquodeclarata atunci populeaza acel obiect cu datele primite de la server iar ın cazul ıncare nu este declarat un model se trimit datele exact asa cum s-au primit la nivelul urmatorde rdquoviewrdquo Acest nivel seamana din punct de vedere al functiei cu cel de rdquorepositoryrdquo de laaplicatia server deoarece ambele au rol de legatura Aceea facea legatura ıntre aplicatiesi baza de date si aceasta face legatura ıntre aplicatia client si aplicatia server

40

Figura 57 Diagrama de clase pentru aplicatia web

Cel de-al treilea pachet al aplicatiei este cel de rdquoviewrdquo In acest pachet se afla claselecare alcatuiesc partea vizuala a aplicatiei La randul ei si aceasta este alcatuita tot dincomponente Aplicatia deschide ın primul rand Main-ul care determina aparitia paginii deHome si afisarea ın meniu a optiunilor posibile ın functie de autentificare si rol Clasele deaici se executa de fapt la deschiderea aplicatiei fiind rdquosingle page applicationrdquo si tot atuncise ıncarca pe pagina componentele Ca si arhitectura a pachetului acesta este ımpartit larandul sau ın subpachete Pentru o mai buna organizare exista patru subpachete cateunul pentru fiecare tip de utilizator In felul acesta toate rdquoviewrdquo-urile care sunt specificeunui utilizator cu un anumit rol se afla ın acelasi subpachet

Cele patru subpachete existente ın pachetul rdquoviewrdquo sunt

1 Pachetul rdquomainrdquo care cuprinde rdquoviewrdquo-urile care se afla ın partea neautentificata aaplicatiei

2 Pachetul rdquoclientrdquo continand rdquoviewrdquo-urile pe care le poate accesa un utilizator simplu3 Pachetul rdquoproducerrdquo specific actiunilor unui utilizator care are rol de producator4 Pachetul rdquoadminrdquo care contine toate rdquoviewrdquo-urile care ıi apar unui utilizator care este

administrator al aplicatiei

Ultimul pachet si nivel al aplicatiei client este cel de rdquocontrollerrdquo In acest pachet

41

se afla clasele care fac actiunile din interfata grafica In timp ce pachetul rdquoviewrdquo continedoar partea grafica a aplicatiei adica modul ın care aceasta trebuie sa arate pachetulrdquocontrollerrdquo contine actiunea acestora modul ın care aplicatia trebuie sa functioneze

Ca si arhitectura si acest pachet a fost ımpartit la randul lui tot ın cele patrusubpachete ca si pachetul rdquoviewrdquo adica rdquomainrdquo rdquoclientrdquo rdquoproducerrdquo si rdquoadminrdquo In pluspentru a fi usor de gasit ce clasa de rdquocontrollerrdquo apartine carui rdquoviewrdquo am ales ca cele douasa aiba acelasi nume In felul acesta daca se doreste sa se gaseasca actiunile unui rdquoviewrdquose poate cauta dupa o clasa cu acelasi nume ın pachetul rdquocontrollerrdquo Numarul claselor dinacest pachet este mai mic decat cel al claselor din rdquoviewrdquo deoarece nu toate paginile dininterfata au actiuni suplimentare Daca singura actiune este ıncarcarea paginii cu date dela server adica doar o actiune simpla de GET datele se ıncarca cu ajutorul rdquostorerdquo-ului laıncarcarea paginii si nu este necesara nici o actiune suplimentara Paginile pe care se potface si actiuni de alt gen sau se deschid noi ferestre au nevoie de clase de rdquocontrollerrdquo

In concluzie arhitectura aplicatiei client este una bazata pe componente care ıncearcasa foloseasca cat mai multe clase reutilizabile

52 Structura bazei de date

Baza de date a aplicatiei este de tip graf de tipul Neo4j Pentru utilizare exista unprogram numit Neo4j ce trebuie instalat Acest program are si o interfata grafica ın carese pot vizualiza datele sub forma grafica si ın care se pot scrie de asemenea si interogariın limbajul acestei baze de date adica Cypher

Fiind o baza de date sub forma de graf datele stocate sunt salvate ın structurade date sub forma de noduri si relatii Entitatile din pachetul de domeniu din aplicatiabackend se gasesc ın baza de date sub forma unor noduri iar dependentele dintre nodurise mapeaza ın baza de date sub forma unor relatii Un element diferit fata de alte tipuride baze de date este faptul ca pe relatiile dintre noduri se pot salva atribute cum este ınaplicatie cazul pentru prieteniile dintre persoane In cazul acestora pe relatia dintre nodurise salveaza daca prietenia a fost sau nu acceptata

Pentru fiecare clasa POJO din aplicatia server clasa ce are doar metodele get si setsi se afla ın pachetul domain exista cate un tip de nod diferit ın baza de date cum estesi marcat ın diferite culori ın figura 58 Fiecare tip de nod are atributele proprii care potlua valori sau pot fi nule Iar fiecare obiect din Java reprezinta un nod diferit ın baza dedate

Neo4j a fost cea mai buna optiune pentru baza de date pentru ca aplicatia poate ficonsiderata o retea sociala Acest lucru se datoreaza relatiilor de prietenie dintre persoanesi a multiplelor relatii ıntre noduri Toate nodurile se afla ın acceasi componenta conexadeci nu exista noduri izolate care sa nu aiba nici o legatura cu nici un alt nod

Datorita acestei structuri a bazei de date este posibila implementarea cererii derecomandare ca o simpla interogare ın baza de date aceasta fiind cea mai simpla metodade implementare a unui sistem de genul acesta una mult mai complexa ar fi fost un

42

algoritm de ınvatare care sa ınvete tipare ale utilizatorilor si sa recomande cadouri pe bazaacestor informatii

Figura 58 Diagrama bazei de date pentru doi utilizatori

Un alt avantaj al acestui tip de baza de date este faptul ca datele nu sunt duplicateın baza de date Spre exemplu daca mai multi utilizatori au ca locatie acelasi oras nu secreaza cate un nod cu acea locatie de mai multe ori ci acel unic nod va avea cate o relatiecu fiecare utilizator care are ca locatie acel oras

In concluzie structura bazei de date a fost aleasa ın acest fel datorita tipului apli-catiei adica asemanatoare cu o retea sociala si datorita implementarii simple a unui sistemde recomandare pe o asemenea baza de date

53 Fluxul pentru diferite operatii

Pentru aplicatie cele mai importante cazuri de utilizare sunt salvarea informati-ilor despre utilizator primite de la Facebook pentru crearea unui profil si recomandareacadourilor pentru un utilizator al aplicatiei Din aceasta cauza cele doua cazuri de utilizarevor fi prezentate mai ın detaliu ın continuare

43

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 22: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

Figura 41 Digrama cazurilor de utilizare

17

431 Recomandare cadouri

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unutilizator trebuie sa le urmeze pentru a primi recomandari de cadouri pentru un cunoscutsi pentru a efectua o comanda

Actorul principal

Orice utilizator al aplicatiei

Parti interesate si interese

Utilizatorul care doreste sa cumpere un cadou este interesat de a gasi un cadoupotrivit pentru cineva pe care ıl cunoaste

Producatorul care e interesat sa ısi poata vinde produseleUtilizatorul care primeste cadoul fiind interesat sa primeasca un cadou care sa i se

potriveasca si care sa ıi placa

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand utilizatorul porneste aplicatia11 Utilizatorul verifica daca are cont de Facebook si daca are urmeaza pasul 111

daca nu 22111 Utilizatorul se autentifica ın aplicatie cu ajutorul credentialelor de la

Facebook12 Utilizatorul deschide sectiunea de recomandare cadouri13 Utilizatorul completeaza formularul cu datele ce trebuie introduse pentru a primi

recomandari de cadouri pentru un prieten14 Utilizatorul poate fi satisfacut cu recomandarile primite si atunci urmeaza pasul

141 iar daca nu este atunci urmeaza cazul alternativ 23141 Utilizatorul adauga ın cosul de cumparaturi cadouri pe care doreste sa

le cumpere15 Utilizatorul cere sa ısi vada cosul de cumparaturi16 Utilizatorul poate sa se declare multumit de cosul de cumparaturi caz ın care

urmeaza pasul 161 sau poate sa aleaga cazul alternativ 24161 Utilizatorul aproba cosul de cumparaturi si accepta sa se faca comanda

17 Sistemul introduce ın baza de date comanda18 Utilizatorul va putea vedea la sectiunea comenzilor sale noua comanda si statusul

ei19 Sistemul notifica producatorul de aparitia noii comenzi110 Utilizatorul se dezautentifica din aplicatie

18

Use-Case EndUtilizatorul se va deconecta din aplicatie si o va ınchide

Figura 42 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueazaAcest flux poate aparea la orice pas211 Utilizatorul deschide sectiunea de recomandare cadouri212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca utilizatorul nu are cont de Facebook

19

Acest flux poate aparea la pasul 11221 Utilizatorul deschide pagina de Facebook222 Utilizatorul ısi face un cont pe pagina de Facebook si ısi completeaza

date despre el223 Utilizatorul revine la aplicatia de recomandare cadouri si ıncearca din

nou sa se autentifice ın aplicatie224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca utilizatorul nu e multumit de recomandariAcest flux poate aparea la pasul 14231 Utilizatorul sterge din cos cadourile pe care nu le mai doreste si revine

la pagina de recomandari232 Utilizatorul adauga alte cadouri ın cos233 Cazul de utilizare continua de la pasul 141

24 Flux-ul alternativ daca utilizatorul nu e multumit de produsele din cosul decumparaturi

Acest flux poate aparea la pasul 16241 Utilizatorul revine ınapoi la formularul cu introducerea datelor despre

beneficiarul cadoului242 Utilizatorul completeaza din nou datele243 Cazul de utilizare continua de la pasul 13

Preconditii

1 Utilizatorul trebuie sa aiba un cont de Facebook pentru a se putea autentifica ınaplicatie

2 Utilizatorul trebuie sa fie autentificat ın aplicatie pentru a putea face orice actiunedin acest caz de utilizare

3 Utilizatorul trebuie sa deschida sectiunea de recomandare cadouri pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noua comanda este salvata ın baza de date2 Comanda apare ın sectiunea de comenzi a utilizatorului ımpreuna cu statusul ei

curent3 Producatorul este notificat ca are o noua comanda

432 Adaugare produs

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unproducator trebuie sa le urmeze pentru a introduce un nou produs ın aplicatie

20

Actorul principal

Utilizatorii cu rol de producator sau cu rol de administrator

Parti interesate si interese

Producatorul care doreste sa introduca produsul nou ın aplicatie

Utilizatorii simpli care au o mai mare varietate de produse din care sa li se reco-mande cadouri

Figura 43 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo

21

Flux de evenimente

Use-Case Start

Cazul de utilizare ıncepe atunci cand producatorul porneste aplicatia

11 Producatorul verifica daca are cont de Facebook si daca are urmeaza pasul111 daca nu 22

111 Producatorul se autentifica ın aplicatie cu ajutorul credentialelor de laFacebook

12 Producatorul deschide sectiunea de adaugare produs

13 Producatorul completeaza datele necesare despre noul produs ımpreuna cu tipulde persoana si eveniment care i s-ar potrivi

14 Producatorul verifica daca este multumit de datele introduse si daca da urmeazapasul 141 daca nu 23

141 Producatorul efectueaza operatia de adaugare produs

15 Sistemul adauga un nou produs ın baza de date

16 Sistemul notifica producatorul ca noul produs a fost introdus cu succes

17 Producatorul se dezautentifica din aplicatie

Use-Case End

Producatorul se va deconecta din aplicatie si o va ınchide

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Producatorul deschide sectiunea de adaugare produs

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca producatorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Producatorul deschide pagina de Facebook

222 Producatorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Producatorul revine la aplicatia de recomandare cadouri si ıncearca dinnou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca Producatorul nu e multumit de datele introduse despreprodus

Acest flux poate aparea la pasul 14

231 Producatorul sterge datele gresite despre produs

232 Producatorul adauga alte date despre produs

233 Cazul de utilizare continua de la pasul 141

22

Preconditii

1 Producatorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Producatorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Producatorul trebuie sa aiba cont cu rol de rdquoproducatorrdquo sau rdquoadminrdquo pentru aputea face operatia aceasta

4 Producatorul trebuie sa deschida sectiunea de adaugare produs pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noul produs este salvat ın baza de date2 Produsul poate fi adaugat la recomandarile unui utilizator din acel moment

433 Modificare rol utilizator

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unadministrator trebuie sa le urmeze pentru a modifica rolul unui utilizator al aplicatiei

Actorul principal

Un utilizator al aplicatiei care are rol de administrator

Parti interesate si interese

Administratorul care doreste sa modifice rolul unui utilizatorUtilizatorul care doreste sa ısi schimbe rolul

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand administratorul porneste aplicatia11 Administratorul verifica daca are cont de Facebook si daca are urmeaza pasul

111 daca nu 22111 Administratorul se autentifica ın aplicatie cu ajutorul credentialelor de

la Facebook12 Administratorul deschide sectiunea de utilizatori13 Sistemul ıi returneaza administratorului utilizatorii care nu sunt administratori14 Administratorul modifica rolul utilizatorului din utilizator simplu ın producator

sau invers

23

15 Administratorul cere executarea modificarii

16 Sistemul executa modificarea iar ın caz de succes urmeaza pasul 161 si ın cazde eroare pasul 23

161 Sistemul notifica administratorul ca modificarea a fost efectuata cusucces

17 Utilizatorul se dezautentifica din aplicatie

Use-Case End

Administratorul se va deconecta din aplicatie si o va ınchide

Figura 44 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo

24

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Administratorul deschide sectiunea de utilizatori

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca administratorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Administratorul deschide pagina de Facebook

222 Administratorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Administratorul revine la aplicatia de recomandare cadouri si ıncearcadin nou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca sistemul returneaza o eroare la modificarea utilizatorului

Acest flux poate aparea la pasul 16

231 Sistemul returneaza un mesaj de eroare la modificarea utilizatorului

232 Aplicatia afiseaza mesajul de eroare administratorului

233 Cazul de utilizare continua de la pasul 15

Preconditii

1 Administratorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Administratorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Utilizatorul trebuie sa aiba cont cu rol de administrator pentru a putea efectuaorice actiune din acest caz de utilizare

4 Administratorul trebuie sa deschida sectiunea utilizatori pentru a putea ındeplinicerintele din cazul de utilizare

Postconditii

1 Noul rol al utilizatorului este salvat ın baza de date

2 La urmatoarea autentificare a utilizatorului acesta va observa ca interfata si maiprecis meniurile si actiunile care le poate face ıi vor fi diferite

25

44 Perspectiva tehnologica

441 Neo4j

Neo4j 1 este un sistem de gestionare a bazelor de date sub forma de graf dezvoltatde Neo4j Inc Descris de dezvoltatorii sai ca o baza de date tranzactionala compatibilacu ACID Neo4j este cea mai populara baza de date sub forma de graf dupa clasamentulDB-Engines

Baza de date Neo4j (ca si orice alta baza de date sub forma de graf) este foartediferita de o baza de date relationala cum ar fi MS Access SQL Server MySQL etcBazele de date relationale utilizeaza tabele randuri si coloane pentru stocarea datelor

Neo4j nu utilizeaza tabele randuri si coloane pentru stocarea sau prezentarea datelorci noduri si relatii

Neo4j este foarte potrivit pentru stocarea datelor care au multe relatii interconec-tate Acestea sunt de fapt aplicatiile ın care merita sa fie folosite De fapt bazele de datesub forma de graf cum este Neo4j sunt mult mai bune la tratarea datelor interconectatedecat bazele de date relationale

Acest lucru se datoreaza faptului ca modelul sub forma de graf nu necesita de obiceio schema predefinita Nu e nevoie sa se creeze structura bazei de date ınainte de a fiıncarcate datele asa cum se face la o baza de date relationala

Dar principalul motiv pentru care Neo4j este mai bun pentru datele relationalepentru acest tip de aplicatii este modul ın care permite crearea relatiilor Neo4j este con-struit ın jurul relatiilor si atunci nu este nevoie sa se configureze chei primare constrangerichei straine pentru a predetermina nodurile care pot avea o relatie si la ce date Cu Neo4jse poate adauga orice legatura ıntre orice nod ori de cate ori este nevoie

Neo4j are aceste calitati care nu se gasesc nici la celelalte baze de date NoSQLBazele de date non-relationale pe langa cele sub forma de graf sunt cele de tip coloanade tip document de tip cheie-valoare si de tip multi-model Nici unul din aceste tipuri nuau ca principala functionalitate maparea relatiilor si facilitatea interogarilor ıntr-o baza dedate cu multe relatii ıntre entitati

Generarea de recomandari personalizate este unul dintre cele mai frecvente cazuride utilizare a unei baze de date sub forma de graf Unele dintre principalele beneficii aleutilizarii grafurilor pentru a genera recomandari includ

- Performanta Lipsa indexurilor permite calcularea recomandarilor ın timp realasigurand ca recomandarea este ıntotdeauna relevanta si reflecta informatii actualizate

- Model de date Modelul de graf cu proprietati permite combinarea cu usurinta aseturilor de date din mai multe surse

Un alt avantaj al bazelor de date sub forma de graf Neo4j este faptul ca respectatoate principiile din modelul de consistenta ACID

Garantia data de principiile ACID este ca ofera un mediu sigur ın care sa functionezedatele Acronimul ACID reprezinta

1httpsneo4jcomuse-casesreal-time-recommendation-engine

26

bull Atomic Toate operatiile dintr-o tranzactie reusesc sau fiecare operatie este reluatabull Consistent La finalizarea unei tranzactii baza de date este solida din punct de

vedere structuralbull Izolat Tranzactiile nu se lupta una cu cealalta Accesul controversat la date este

moderat de baza de date astfel ıncat tranzactiile par sa se execute succesivbull Durabil Rezultatele aplicarii unei tranzactii sunt permanente chiar si ın cazul unor

defectiuniCand vine vorba de tehnologiile NoSQL cele mai multe baze de date sub forma de

graf (inclusiv Neo4j) utilizeaza un model de consistenta ACID pentru a asigura ca datelesunt stocate ın siguranta si ın mod consecvent

Am ales baza de date sub forma de graf ca optiune pentru stocarea datelor deoarecedin toate lucrarile si articolele citite a fost optiunea cea mai buna pentru un sistem derecomandare Deci acesta se mapeaza perfect pe cerintele functionale ale proiectului Sidin optiunile de baze de date sub forma de graf Noe4j a avut de departe cele mai multeavantaje ea fiind si cea mai utilizata

442 Cypher

Cypher 2 este un limbaj declarativ de interogare pentru bazele de date sub formade graf care permite interogarea si actualizarea rapida a datelor Cypher este un limbajrelativ simplu dar foarte puternic Interogarile foarte complexe ale bazei de date pot fiusor exprimate prin intermediul limbajului Cypher

Este conceput pentru a fi un limbaj de interogare uman Scopul lui principal este dea face interogarile mult mai simple si unele interogari care la bazele de date relationale nuerau posibile le face posibile Constructiile sale se bazeaza pe grafica si pe limba englezalucru care ajuta la scrierea mai intuitiva a interogarilor Este construit pentru a fi maiintuitiv pentru citire si nu neaparat pentru scriere

Cypher se bazeaza pe modelul Graph Property care ın plus fata de elementelegrafice standard ale nodurilor si muchiilor (numite relatii ın Cypher) adauga etichete siproprietati ca si concepte Nodurile pot avea zero sau mai multe etichete ın timp ce fiecarerelatie este de exact un singur tip Nodurile si relatiile au de asemenea zero sau mai multeproprietati

Chypher este limbajul de interogare folosit la bazele de date Neo4j deci este opti-unea implicita atunci cand se alege Neo4j

443 Maven

Maven 3 este un instrument de management software si de ıntelegere a proiectelorsoftware Pe baza conceptului unui model de obiect de proiect (POM) Maven poategestiona construirea raportarea si documentarea unui proiect printr-o informatie centrala

2httpsneo4jcomdevelopercypher-query-language3httpswwwjavatpointcommaven-tutorial

27

Obiectivul principal al lui Maven este acela de a permite unui dezvoltator sa ınte-leaga starea completa a efortului de dezvoltare ın cel mai scurt timp Avantajele Mavensunt

bull instalarea rapida a proiectului fara fisiere buildxml complicate doar un POMbull procesul de construire este standardizat pentru toate proiectelebull usor de ınvatat si de utilizatbull configurarea unui proiect este foarte rapidabull bine documentat

Am ales sa folosesc Maven deoarece este una din cele mai comune optiuni pentru aimporta librariile ıntr-un proiect si este si cel mai documentat Deci mereu cand esti pusın dificultate poti cauta pe internet sugestii

444 Spring Boot

Spring Boot 4 este un framework din cadrul Spring care ofera setari implicite pentruconfigurarea codului si adnotari pentru a lansa rapid proiecte noi ın executie Urmaresteabordarea rdquoConfigurarea defectiunilor vizionaterdquo pentru a evita un numar mare de linii decod pentru configuratii si pentru a ımbunatati procesul de dezvoltare

Avantajele Spring Boot sunt1 Face foarte usoara dezvoltarea de aplicatii bazate pe Spring cu Java sau Groovy2 Reduce timpul de dezvoltare si creste productivitatea3 Evita scrierea multor linii de cod adnotari si configurare XML4 Este foarte usor de integrat cu alte framework-uri din aceasi familie Spring cum ar

fi Spring JDBC Spring ORM Spring Data Spring Security etc5 Urmareste abordarea rdquoConfigurarea implicita a optiunilorrdquo pentru a reduce efortul

pentru dezvoltatori6 Ofera servere HTTP ıncorporate cum ar fi Tomcat Jetty etc pentru a dezvolta si

testa aplicatiile web foarte usor7 Ofera instrumentul CLI (Command Line Interface) pentru a dezvolta si testa apli-

catiile de tip rdquoSpring Bootrdquo (Java sau Groovy) din linia de comanda foarte usor sirapidAm ales ca optiune pentru partea de backend acest framework deoarece simplifica

foarte mult lucrurile Datorita lui un programator poate sa ısi concentreze mai tare energiape a construi proiectul din punctul de vedere al buissness-ului logic nu din punctul devedere al configurarilor necesare

445 Sencha CMD si ExtJS

Sencha CMD 5 este un instrument linie de comanda cross-platform care ofera multesarcini automate ın ciclul complet de viata al unei aplicatii ExtJS de la generarea unui

4httpswwwjavatpointcomspring-boot-tutorial5httpsdocssenchacomcmd

28

nou proiect la lansarea unei aplicatii ın productie

Sencha Cmd ofera o colectie de caracteristici puternice pentru economisirea timpu-lui care functioneaza ımpreuna cu Sencha ExtJS si Sencha Touch

Ext JS 6 este un framework pur JavaScript pentru construirea de aplicatii webinteractive cross-platform utilizand tehnici precum scripting Ajax DHTML si DOM

Avantajele framework-ului ExtJS sunt

1 Documentatia Extjs este foarte cuprinzatoare si bine ıntretinuta2 Aspectul cheie al bibliotecii EXTJS este suportul de tip cross-browser3 Framework-ul ExtJS ofera o multitudine de elemente UI Aceste elemente includ

forme casete de dialog file arbori si tabele4 Framework-ul ExtJS include suport pentru implementarile Ajax5 ExtJS ofera performante excelente Framework-ul este complet orientat spre obiecte

si este extensibil asta pentru ca este scris ın JavaScript

Pentru partea de frontend se foloseste framework-ul ExtJS deoarece are o arhitec-tura ce se mapeaza foarte bine pe proiectele de frontend si anume arhitectura bazata pecomponente Aceasta face ca ın proiect codul sa fie mult mai organizat si procesul dedezvoltare al proiectului sa fie mult mai scurt prin identificarea mai usoara a erorilor

446 Facebook API(Graph API)

Graph API 7 este modul principal de a pune date ın platforma Facebook si de aobtine date din platforma Facebook Este un API bazat pe HTTP pe care aplicatiile ılpot utiliza pentru interogarea datelor pentru a introduce postari noi pentru gestionareaanunturilor sau pentru a ıncarca fotografii

Este denumit Graph API dupa ideea unui rdquograf socialrdquo - o reprezentare sub formade graf a informatiilor de pe Facebook Este compus din

bull noduri - ın esenta obiecte individuale cum ar fi un utilizator o fotografie o paginasau un comentariu

bull muchii - conexiuni ıntre o colectie de obiecte si un singur obiect cum ar fi fotografiilede pe o pagina sau comentariile de la o fotografie

bull campuri - date despre un obiect cum ar fi ziua de nastere a unui utilizator saunumele paginii

De obicei se utilizeaza noduri pentru a obtine date despre un anumit obiect se uti-lizeaza muchii pentru a obtine colectii de obiecte legate de un singur obiect si se utilizeazacampurile pentru a obtine date despre un singur obiect sau mai multe obiecte dintr-ocolectie

Am folosit Facebook API ca solutie pentru a ımbunatati problema de rdquocold startrdquopentru ca este singurul site pe care marea majoritate a oamenilor au cont si salveazalucrurile care le plac Deci se potrivea perfect peste nevoile aplicatiei mele

6httpdocssenchacomextjs6207httpsdevelopersfacebookcomdocsgraph-api

29

447 Git

Git 8 este un sistem de control a versionarii pentru urmarirea modificarilor ın fisierelede pe computer si coordonarea activitatii asupra acestor fisiere ın randul mai multor per-soane Este utilizat ın principal pentru gestionarea codului sursa ın dezvoltarea de softwaredar poate fi folosit pentru a urmari schimbarile ın orice set de fisiere

Avantaje ale Git

bull Modelul distribuit numai ceea ce se doreste se face publicbull Branching-ul si merging-ul sunt usoarebull Fluxul de lucru este flexibilbull Integritatea datelor este asigurata Deoarece GIT utilizeaza arbori SHA1 coruperea

datelor din motive externe poate fi usor detectatabull Rapid Git este foarte rapid chiar si ın comparatie cu alte sisteme de control a

versionarii

Am folosit Git pentru a avea la proiect un back-up ın caz ca se ıntampla ceva cuproiectul salvat pe calculator

45 Arhitectura conceptuala

In figura 45 este prezentata arhitectura conceptuala a sistemului Acesta este ım-partit ın doua mari parti backend-ul si frontend-ul care comunica ıntre ele si ısi trimitinformatii

Se poate observa ca baza de date este de tip graf mai exact Neo4j si comunica cubackend-ul pentru a putea lucra cu datele stocate Backend-ul este structurat pe nivelefiecare cu un diferit rol si care trebuie parcurs pentru a procesa datele din interfata ınbaza de date Cele trei nivele sunt cel de Repository cel de Service si cel ControllerToate interogarile venite din interfata utilizator ajung ın nivelul de Controller Dupa ceinterogarile trec de securitatea sistemului ajung ın nivelul de Service Acolo se proceseazasi se afla partea de logica a aplicatiei Pentru a interactiona cu baza de date din Servicese apeleaza metodele din nivelul de Repository

In continuare backend-ul comunica prin protocolul HTTP cu interfata grafica cucare interactioneaza clientii aplicatiei Interfata este scrisa ın Ext JS si are o parte de Viewsi o parte de Controller care este cea care comunica cu backend-ul

Pentru partea de autentificare sistemul interactioneaza cu API-ul de la Facebookde la care ia dupa autentificare un access token Cu ajutorul acestuia ia dupa aceea datelenecesare pentru a putea crea un profil utilizatorului

8httpsguidesgithubcomintroductiongit-handbook

30

Figura 45 Arhitectura conceptuala

31

Capitolul 5

Proiectare de Detaliu siImplementare

In acest capitol vor fi prezentate detalii de implementare ale sistemului de recoman-dare incluzand o ımpartire al acestuia ın componentele care ıl cuprind

Obiectivul este de a prezenta arhitectura si modul de implementare al aplicatieipe baza datelor descoperite ın studiul bibliografic de la capitolul trei si cu tehnologiilehotarate la capitolul patru Pe langa asta va fi prezentata si structura bazei de date sideciziile luate pentru securitatea aplicatiei

51 Arhitectura sistemului

Din punctul de vedere al arhitecturii aplicatia se poate considera ca este alcatuitadin patru mari componente

1 API-ul de la Facebook2 Aplicatia client care reprezinta interfata grafica a aplicatiei3 Aplicatia server adica backendul aplicatiei si partea ın care se afla partea de rdquobusiness

logicrdquo4 Baza de date

Partea componenta reprezentata de API-ul de la Facebook este doar o componentacu care aplicatia se integreaza si pe care aceasta o foloseste In interactiunea cu ea interfatada o cerere de autentificare apare o fereastra de la Facebook ın care utilizatorul introducecredentialele de la API-ul de Facebook se primeste ınapoi un access token si cu ajutorulacestuia face o cerere pentru a primi datele personale ale utilizatorului pentru creeareaprofilului utilizator

Urmatoarea parte a aplicatiei este interfata utilizator frontend-ul care reprezintapartea cu care utilizatorul interactioneaza si locul unde ıi sunt afisate informatiile

Cererile din interfata ajung ın a treia parte componenta a sistemului partea deserver adica backend-ul aplicatiei Acolo toate cererile sunt citite si procesate iar raspun-

33

sul lor este trimis la interfata utilizator Aceasta este partea care reprezinta rdquogandireardquoaplicatiei Aceea este componenta care face legatura ıntre cererile utilizatorului din inter-fata si datele stocate ın baza de date

Ultima componenta a aplicatiei o reprezinta baza de date care are ca rol sa stochezedatele despre utilizatori produse si comenzi Ea este o baza de date sub forma de grafde tipul Neo4j Acolo se salveaza entitatile aplicatiei sub forma de noduri si dependenteleıntre acestea sub forma de relatii ıntre aceste noduri

Figura 51 Diagrama de rdquodeploymentrdquo

In figura 51 este prezentata diagrama de rdquodeploymentrdquo a sistemului cu cele patrucomponente ale sistemului Aplicatia client comunica cu API-ul de la Facebook prin pro-tocolul securizat HTTPS cu backend-ul prin protocolul HTTP iar backend-ul cu baza dedate prin JDBC

Aplicatia a putut fi ımpartita ın aceste componente separate deoarece fiecare dintreele poate functiona independent de celelalte comunica cu ele doar prin mesaje Din acestmotiv locul unde ruleaza acestea pot sa fie pe servere diferite In plus daca aplicatiaar fi pusa pe servere pentru utilizatori ar putea fi mai multe servere pe care ruleaza ocomponenta si prin rdquoload balancingrdquo sa se trimita cererile ımpartite ıntre ele

Cum astfel componentele nu depind foarte mult unele de altele si pot rula faraa le interesa de unde le sunt trimise cererile este arhitectura cea mai corecta deoarecedefectarea sau o posibila eroare la una din ele nu o influenteaza cu nimic pe o alta Dacatoate ar rula pe acelasi server o eventuala defectiune a acestuia ar ınsemna o defectiune aıntregului sistem Insa daca exista mai multe noduri si se afla pe servere diferite pot doartoate cererile sa fie redirectionate spre un nod care functioneaza si aplicatia sa functionezepentru clienti la fel ca ınainte

34

Un alt avantaj al arhitecturii ar fi faptul ca la o lansare viitoare catre clienti se poatelansa doar componenta la care s-au facut modificari De asemenea aplicatia ar putea aveape viitor si o componenta mobila Iar cum serverul e independent poate fi acelasi serverfolosit de o alta aplicatie client

511 Arhitectura componentei backend

Arhitectura backend-ului este si ea ımpartita ın mai multe pachete pentru o maibuna structura si pentru o cat mai mica dependenta ıntre diversele componente Astfelcuplarea este minima ıntre clase si eventualele modificari ulterioare pot fi mai usor defacut

Serverul a fost implementat ın Java cu ajutorul framework-ului Spring Boot iarmediul de dezvoltare folosit a fost Intellij IDEA

Din punctul de vedere al ımpartirii arhitectura serverului aplicatiei este structurataın patru pachete si o clasa ın afara acestora Acea clasa este rdquomainrdquo-ul aplicatiei este parteacare trebuie rulata pentru a porni serverul Din cauza ca este o aplicatie Spring Boot si nuuna String singura adnotare necesara pentru a sti ca aceea este clasa rdquoradacinardquoa aplicatieieste SpringBootApplication

Cele patru pachete ale serverului sunt1 Cel de domeniu (domain) cu clasele POJO care reprezinta entitatile din baza de

date2 Cel de rdquomagazierdquo (repositories) care este cel care face direct actiunile ın baza de date3 Cel de serviciu (services) ın care se afla partea de logica a ıntregii aplicatii4 Cel de web ın care se afla clasele de rdquocontrollerrdquo

Figura 52 Diagrama de pachete pentru backend

35

Ca si dependente nivelul de web ıl foloseste pe cel de seviciu cel de serviciu ılfoloseste pe cel de rdquomagazierdquo iar clasele din pachetul de domeniu sunt folosite ın toatecelelalte pachete

In continuare voi prezenta pe rand fiecare nivel al serverului adica fiecare pachet

Figura 53 Diagrama de clase pentru pachetul rdquodomainrdquo

36

Nivelul de domeniu (domain) este alcatuit ın primul rand din clasele care suntentitati ın baza de date Acestea sunt reprezentate de toate clasele ce stocheaza informatiidespre utilizatori si despre produse si comenzi Pe langa informatiile personale despre unutilizator de genul numelui email-ului sau data nasterii care sunt salvate ın entitateapersoana se stocheaza despre utilizator ın clase diferite informatii de genul locului undelocuieste locul unde a copilarit locurilor unde a facut scoala locului unde lucreaza sau celmai important pentru aplicatia aceasta lucrurilor care ıi plac In afara acestor informatiidespre utilizatori sunt si clase cu informatiile despre prieteni despre produse sau desprecomenzi

Din cauza faptului ca aplicatia este de tipul unei retele sociale ın care exista prieteniiıntre persoane exista dependente ıntre toate entitatile aplicatiei Acesta este si motivulpentru care am ales baza de date sub forma de graf pe care sa se mapeze toate acesteentitati sub forma de noduri si toate aceste dependente sub forma de relatii

In pachetul de domeniu se afla si trei subpachete Unul dintre ele este pentruclasele folosite pentru a trata erorile aplicatiei In interiorul acestui pachet se afla douaclase pentru eroare si o exceptie cea folosita ın cazul ın care nu se gaseste ceea ce doresteutilizatorul Pe langa asta este clasa care are ca obiect raspunsul dat de sistem ın cazulunei erori la server Aceasta contine ın interiorul sau pe langa codul erorii si detalii despreeroarea trimisa Aceasta lista de detalii e reprezentata de obiectele de tipul celei de-a treiaclase din pachetul acesta

Celelalte doua subpachete aflate ın acest nivel sunt cele care contin clasele specialede cerere sau raspuns care au ajutat la maparea acestora mai bine In multe cazuri nua fost necesara trimiterea la interfata utilizator a tuturor informatiilor stocate despre oentitate si de aceea am ales sa creez ın aceste cazuri un obiect auxiliar care sa fie folositpe post de raspuns

Figura 54 Diagrama de clase pentru pachetul rdquorepositoriesrdquo

37

Cel de-al doilea nivel al aplicatiei backend este cel de rdquomagazierdquo (repositories) carecontine doar interfete de tip rdquoRepositoryrdquo

Aceste interfete sunt cele care fac operatiile directe asupra entitatilor din baza dedate

Unele interfete doar extind interfata care are deja implementate metodele CRUDsi din acest motiv nu au metode suplimentare iar altele au si metode ın plus care au carol sa execute interogari mai complexe asupra bazei de date In acele metode se pot scrieinterogarile ın Cypher pentru a putea primi informatii despre mai multe noduri sau desprerelatiile dintre acestea sau si pentru a returna doar anumite rezultate care ındeplinescanumite conditii In felul acesta a fost implementata si cererea de oferire a recomandarilorIn acel caz sistemul returneaza produsele care au ın descriere unul din lucrurile care se aflaın lista de obiecte sau servicii primite de la Facebook ca ıi plac utilizatorului

Nivelul de rdquoRepositoryrdquo este folosit direct de cel de-al treiea nivel cel de servi-ciu Acesta este nivelul la care se executa logica aplicatiei unde se comanda modul defunctionare al ıntregii aplicatii

Figura 55 Diagrama de clase pentru pachetul rdquoservicesrdquo

Pe acest nivel ajung toate cererile din server dupa ce trec de verificarile de securitateIn acest pachet se afla si clasa de securitate care face verificarile necesare In aceasta clasaexista o metoda ce se apeleaza la prima cerere cea de salvare a datelor de la Facebookdespre utilizator si care codifica id-ul utilizatorului si ıl trimite pe raspuns ınapoi interfeteiPe langa asta ın acea clasa se afla si o metoda care verifica faptul ca id-ul codificat esteal unui utilizator cu rol corespunzator pentru a face acea cerere

In plus ın acest pachet se afla si toate celelalte clase care fac diverse operatii pedatele din baza de date si dau raspunsuri cererilor din interfata Aici se afla logica care

38

comanda actiunile asupra utilizatorilor asupra prietenilor acestora asupra produselor siasupra comenzilor

Ultima clasa a acestui nivel este cea care se ocupa de trimiterea de email-uri Incazul ın care se face o noua comanda de catre un utilizator toti producatorii produselor depe comanda sunt notificati despre produsele lor pe care le doreste utilizatorul Din serviciulde comanda se apeleaza serviciul de email pentru fiecare producator din lista celor care auproduse care se afla pe lista comenzii utilizatorului

Ultimul si cel mai aproape de interfata utilizator este nivelul de web Acolo se aflatoate clasele de rdquoControllerrdquo ale aplicatiei server

Figura 56 Diagrama de clase pentru pachetul rdquowebrdquo

Toate cererile din interfata utilizator ıncearca sa se mapeze pe rutele declarate ınclase pentru a fi procesate ın metoda corespunzatoare Toata aceasta parte este foarteusor de implementat si mai ales foarte lizibil pentru programatori datorita adnotarilor dinJava Cu ajutorul acestora trebuie doar specificat care este numele URL-ului cererii careeste tipul de obiect asteptat si daca se trimite ca rdquoquery stringrdquo pe URL sau ın interiorulcorpului cererii si tipul raspunsului Pentru fiecare cerere care nu este apelata ın parteaneautentificata a utilizatorului primul lucru care se apeleaza este metoda de securitatepentru a verifica rolul si id-ul utilizatorului Daca din punctul de vedere al securitatii totuleste ın regula se apeleaza metoda corespunzatoare din pachetul de serviciu

39

O singura clasa este diferita de restul ın pachetul de controller si aceea este clasa deeroare Acolo se mapeaza erorile aparute ın timpul cererii si se trimite ınapoi ın interfatagrafica un raspuns cu cod de eroare specific nu numai 500 Generic Application Exceptioncum ar trimite fara aceasta clasa si cu detalii despre motivul aparitiei erorii

Datorita folosirii adnotarilor din java nu a fost necesara folosirea unor rdquodesignpatternrdquo-uri ın sistem De exemplu pentru a folosi ın nivelul de web ceva din pachetulde servicii trebuia doar acel obiect sa aiba adnotarea Autowired si se ınlocuieste atatfolosirea rdquodesign patternrdquo-ului Singleton cat si a celui de Factory Acel obiect nu trebuiecreat sau initializat se face asta implicit datorita adnotarii si de asemenea este folositapeste tot aceeasi instanta

In concluzie toate cererile venite din interfata grafica ajung ın nivelul de rdquocontrollerrdquode unde sunt trimise la cel de rdquoservicerdquopentru a fi procesate si facute eventualele modificarinecesare ın baza de date ca apoi raspunsul sa fie trimis ınapoi spre aplicatia client pentruafisare

512 Arhitectura componentei frontend

A doua componenta implementata a sistemului este aplicatia client frontend-ulAceasta a fost scrisa ın Java Script cu ajutorul framework-ului Ext JS compilarea

se face cu ajutorul Sencha CMD si mediul de implementare a fost IntelliJ IdeaCu ajutorul framework-ului Ext JS se scriu componente care apoi se initializeaza

unele pe altele Aplicatia porneste cu fisierul Applicationjs care este un fel de rdquomainrdquopentru aplicatie Aceasta initializeaza alte componente care la randul lor includ altecomponente si tot asa Structura poate fi foarte usor comparata cu una arborescenta dinacest punct de vedere

Framework-ul a fost creat sa functioneze ın felul acesta pentru ca scopul componen-telor este sa fie scrise ın asa fel ıncat sa poata pe viitor sa fie utilizate din nou Una dindorintele majore ın programare tot timpul este de a se scrie cod ıntr-o maniera ın care safie cat mai reutilizabil Iar framework-ul Ext JS exact asta ıncearca

Arhitectura aplicatiei client se gaseste ın figura 57 si este la randul ei ımpartita ınpachete ca si cea de server Similar cu pachetul de rdquodomainrdquo de la aplicatia de backendeste pachetul rdquomodelrdquo al interfetei utilizator Aici sunt rdquoclaserdquo care sunt simple POJO sicare sunt apoi folosite ın nivelele urmatoare Sunt mai putine decat clasele din rdquostorerdquodeoarece daca raspunsul de la server nu trebuie procesat nu sunt necesare se pot mapadirect obiectele din rdquostorerdquo pe componentele interfetei utilizator

Urmatorul nivel este cel pe care se afla clasele de rdquostorerdquo Acestea sunt cele careexecuta cererea spre backend si face legatura ıntre client si server Daca are o clasa derdquomodelrdquodeclarata atunci populeaza acel obiect cu datele primite de la server iar ın cazul ıncare nu este declarat un model se trimit datele exact asa cum s-au primit la nivelul urmatorde rdquoviewrdquo Acest nivel seamana din punct de vedere al functiei cu cel de rdquorepositoryrdquo de laaplicatia server deoarece ambele au rol de legatura Aceea facea legatura ıntre aplicatiesi baza de date si aceasta face legatura ıntre aplicatia client si aplicatia server

40

Figura 57 Diagrama de clase pentru aplicatia web

Cel de-al treilea pachet al aplicatiei este cel de rdquoviewrdquo In acest pachet se afla claselecare alcatuiesc partea vizuala a aplicatiei La randul ei si aceasta este alcatuita tot dincomponente Aplicatia deschide ın primul rand Main-ul care determina aparitia paginii deHome si afisarea ın meniu a optiunilor posibile ın functie de autentificare si rol Clasele deaici se executa de fapt la deschiderea aplicatiei fiind rdquosingle page applicationrdquo si tot atuncise ıncarca pe pagina componentele Ca si arhitectura a pachetului acesta este ımpartit larandul sau ın subpachete Pentru o mai buna organizare exista patru subpachete cateunul pentru fiecare tip de utilizator In felul acesta toate rdquoviewrdquo-urile care sunt specificeunui utilizator cu un anumit rol se afla ın acelasi subpachet

Cele patru subpachete existente ın pachetul rdquoviewrdquo sunt

1 Pachetul rdquomainrdquo care cuprinde rdquoviewrdquo-urile care se afla ın partea neautentificata aaplicatiei

2 Pachetul rdquoclientrdquo continand rdquoviewrdquo-urile pe care le poate accesa un utilizator simplu3 Pachetul rdquoproducerrdquo specific actiunilor unui utilizator care are rol de producator4 Pachetul rdquoadminrdquo care contine toate rdquoviewrdquo-urile care ıi apar unui utilizator care este

administrator al aplicatiei

Ultimul pachet si nivel al aplicatiei client este cel de rdquocontrollerrdquo In acest pachet

41

se afla clasele care fac actiunile din interfata grafica In timp ce pachetul rdquoviewrdquo continedoar partea grafica a aplicatiei adica modul ın care aceasta trebuie sa arate pachetulrdquocontrollerrdquo contine actiunea acestora modul ın care aplicatia trebuie sa functioneze

Ca si arhitectura si acest pachet a fost ımpartit la randul lui tot ın cele patrusubpachete ca si pachetul rdquoviewrdquo adica rdquomainrdquo rdquoclientrdquo rdquoproducerrdquo si rdquoadminrdquo In pluspentru a fi usor de gasit ce clasa de rdquocontrollerrdquo apartine carui rdquoviewrdquo am ales ca cele douasa aiba acelasi nume In felul acesta daca se doreste sa se gaseasca actiunile unui rdquoviewrdquose poate cauta dupa o clasa cu acelasi nume ın pachetul rdquocontrollerrdquo Numarul claselor dinacest pachet este mai mic decat cel al claselor din rdquoviewrdquo deoarece nu toate paginile dininterfata au actiuni suplimentare Daca singura actiune este ıncarcarea paginii cu date dela server adica doar o actiune simpla de GET datele se ıncarca cu ajutorul rdquostorerdquo-ului laıncarcarea paginii si nu este necesara nici o actiune suplimentara Paginile pe care se potface si actiuni de alt gen sau se deschid noi ferestre au nevoie de clase de rdquocontrollerrdquo

In concluzie arhitectura aplicatiei client este una bazata pe componente care ıncearcasa foloseasca cat mai multe clase reutilizabile

52 Structura bazei de date

Baza de date a aplicatiei este de tip graf de tipul Neo4j Pentru utilizare exista unprogram numit Neo4j ce trebuie instalat Acest program are si o interfata grafica ın carese pot vizualiza datele sub forma grafica si ın care se pot scrie de asemenea si interogariın limbajul acestei baze de date adica Cypher

Fiind o baza de date sub forma de graf datele stocate sunt salvate ın structurade date sub forma de noduri si relatii Entitatile din pachetul de domeniu din aplicatiabackend se gasesc ın baza de date sub forma unor noduri iar dependentele dintre nodurise mapeaza ın baza de date sub forma unor relatii Un element diferit fata de alte tipuride baze de date este faptul ca pe relatiile dintre noduri se pot salva atribute cum este ınaplicatie cazul pentru prieteniile dintre persoane In cazul acestora pe relatia dintre nodurise salveaza daca prietenia a fost sau nu acceptata

Pentru fiecare clasa POJO din aplicatia server clasa ce are doar metodele get si setsi se afla ın pachetul domain exista cate un tip de nod diferit ın baza de date cum estesi marcat ın diferite culori ın figura 58 Fiecare tip de nod are atributele proprii care potlua valori sau pot fi nule Iar fiecare obiect din Java reprezinta un nod diferit ın baza dedate

Neo4j a fost cea mai buna optiune pentru baza de date pentru ca aplicatia poate ficonsiderata o retea sociala Acest lucru se datoreaza relatiilor de prietenie dintre persoanesi a multiplelor relatii ıntre noduri Toate nodurile se afla ın acceasi componenta conexadeci nu exista noduri izolate care sa nu aiba nici o legatura cu nici un alt nod

Datorita acestei structuri a bazei de date este posibila implementarea cererii derecomandare ca o simpla interogare ın baza de date aceasta fiind cea mai simpla metodade implementare a unui sistem de genul acesta una mult mai complexa ar fi fost un

42

algoritm de ınvatare care sa ınvete tipare ale utilizatorilor si sa recomande cadouri pe bazaacestor informatii

Figura 58 Diagrama bazei de date pentru doi utilizatori

Un alt avantaj al acestui tip de baza de date este faptul ca datele nu sunt duplicateın baza de date Spre exemplu daca mai multi utilizatori au ca locatie acelasi oras nu secreaza cate un nod cu acea locatie de mai multe ori ci acel unic nod va avea cate o relatiecu fiecare utilizator care are ca locatie acel oras

In concluzie structura bazei de date a fost aleasa ın acest fel datorita tipului apli-catiei adica asemanatoare cu o retea sociala si datorita implementarii simple a unui sistemde recomandare pe o asemenea baza de date

53 Fluxul pentru diferite operatii

Pentru aplicatie cele mai importante cazuri de utilizare sunt salvarea informati-ilor despre utilizator primite de la Facebook pentru crearea unui profil si recomandareacadourilor pentru un utilizator al aplicatiei Din aceasta cauza cele doua cazuri de utilizarevor fi prezentate mai ın detaliu ın continuare

43

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 23: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

431 Recomandare cadouri

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unutilizator trebuie sa le urmeze pentru a primi recomandari de cadouri pentru un cunoscutsi pentru a efectua o comanda

Actorul principal

Orice utilizator al aplicatiei

Parti interesate si interese

Utilizatorul care doreste sa cumpere un cadou este interesat de a gasi un cadoupotrivit pentru cineva pe care ıl cunoaste

Producatorul care e interesat sa ısi poata vinde produseleUtilizatorul care primeste cadoul fiind interesat sa primeasca un cadou care sa i se

potriveasca si care sa ıi placa

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand utilizatorul porneste aplicatia11 Utilizatorul verifica daca are cont de Facebook si daca are urmeaza pasul 111

daca nu 22111 Utilizatorul se autentifica ın aplicatie cu ajutorul credentialelor de la

Facebook12 Utilizatorul deschide sectiunea de recomandare cadouri13 Utilizatorul completeaza formularul cu datele ce trebuie introduse pentru a primi

recomandari de cadouri pentru un prieten14 Utilizatorul poate fi satisfacut cu recomandarile primite si atunci urmeaza pasul

141 iar daca nu este atunci urmeaza cazul alternativ 23141 Utilizatorul adauga ın cosul de cumparaturi cadouri pe care doreste sa

le cumpere15 Utilizatorul cere sa ısi vada cosul de cumparaturi16 Utilizatorul poate sa se declare multumit de cosul de cumparaturi caz ın care

urmeaza pasul 161 sau poate sa aleaga cazul alternativ 24161 Utilizatorul aproba cosul de cumparaturi si accepta sa se faca comanda

17 Sistemul introduce ın baza de date comanda18 Utilizatorul va putea vedea la sectiunea comenzilor sale noua comanda si statusul

ei19 Sistemul notifica producatorul de aparitia noii comenzi110 Utilizatorul se dezautentifica din aplicatie

18

Use-Case EndUtilizatorul se va deconecta din aplicatie si o va ınchide

Figura 42 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueazaAcest flux poate aparea la orice pas211 Utilizatorul deschide sectiunea de recomandare cadouri212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca utilizatorul nu are cont de Facebook

19

Acest flux poate aparea la pasul 11221 Utilizatorul deschide pagina de Facebook222 Utilizatorul ısi face un cont pe pagina de Facebook si ısi completeaza

date despre el223 Utilizatorul revine la aplicatia de recomandare cadouri si ıncearca din

nou sa se autentifice ın aplicatie224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca utilizatorul nu e multumit de recomandariAcest flux poate aparea la pasul 14231 Utilizatorul sterge din cos cadourile pe care nu le mai doreste si revine

la pagina de recomandari232 Utilizatorul adauga alte cadouri ın cos233 Cazul de utilizare continua de la pasul 141

24 Flux-ul alternativ daca utilizatorul nu e multumit de produsele din cosul decumparaturi

Acest flux poate aparea la pasul 16241 Utilizatorul revine ınapoi la formularul cu introducerea datelor despre

beneficiarul cadoului242 Utilizatorul completeaza din nou datele243 Cazul de utilizare continua de la pasul 13

Preconditii

1 Utilizatorul trebuie sa aiba un cont de Facebook pentru a se putea autentifica ınaplicatie

2 Utilizatorul trebuie sa fie autentificat ın aplicatie pentru a putea face orice actiunedin acest caz de utilizare

3 Utilizatorul trebuie sa deschida sectiunea de recomandare cadouri pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noua comanda este salvata ın baza de date2 Comanda apare ın sectiunea de comenzi a utilizatorului ımpreuna cu statusul ei

curent3 Producatorul este notificat ca are o noua comanda

432 Adaugare produs

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unproducator trebuie sa le urmeze pentru a introduce un nou produs ın aplicatie

20

Actorul principal

Utilizatorii cu rol de producator sau cu rol de administrator

Parti interesate si interese

Producatorul care doreste sa introduca produsul nou ın aplicatie

Utilizatorii simpli care au o mai mare varietate de produse din care sa li se reco-mande cadouri

Figura 43 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo

21

Flux de evenimente

Use-Case Start

Cazul de utilizare ıncepe atunci cand producatorul porneste aplicatia

11 Producatorul verifica daca are cont de Facebook si daca are urmeaza pasul111 daca nu 22

111 Producatorul se autentifica ın aplicatie cu ajutorul credentialelor de laFacebook

12 Producatorul deschide sectiunea de adaugare produs

13 Producatorul completeaza datele necesare despre noul produs ımpreuna cu tipulde persoana si eveniment care i s-ar potrivi

14 Producatorul verifica daca este multumit de datele introduse si daca da urmeazapasul 141 daca nu 23

141 Producatorul efectueaza operatia de adaugare produs

15 Sistemul adauga un nou produs ın baza de date

16 Sistemul notifica producatorul ca noul produs a fost introdus cu succes

17 Producatorul se dezautentifica din aplicatie

Use-Case End

Producatorul se va deconecta din aplicatie si o va ınchide

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Producatorul deschide sectiunea de adaugare produs

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca producatorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Producatorul deschide pagina de Facebook

222 Producatorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Producatorul revine la aplicatia de recomandare cadouri si ıncearca dinnou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca Producatorul nu e multumit de datele introduse despreprodus

Acest flux poate aparea la pasul 14

231 Producatorul sterge datele gresite despre produs

232 Producatorul adauga alte date despre produs

233 Cazul de utilizare continua de la pasul 141

22

Preconditii

1 Producatorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Producatorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Producatorul trebuie sa aiba cont cu rol de rdquoproducatorrdquo sau rdquoadminrdquo pentru aputea face operatia aceasta

4 Producatorul trebuie sa deschida sectiunea de adaugare produs pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noul produs este salvat ın baza de date2 Produsul poate fi adaugat la recomandarile unui utilizator din acel moment

433 Modificare rol utilizator

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unadministrator trebuie sa le urmeze pentru a modifica rolul unui utilizator al aplicatiei

Actorul principal

Un utilizator al aplicatiei care are rol de administrator

Parti interesate si interese

Administratorul care doreste sa modifice rolul unui utilizatorUtilizatorul care doreste sa ısi schimbe rolul

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand administratorul porneste aplicatia11 Administratorul verifica daca are cont de Facebook si daca are urmeaza pasul

111 daca nu 22111 Administratorul se autentifica ın aplicatie cu ajutorul credentialelor de

la Facebook12 Administratorul deschide sectiunea de utilizatori13 Sistemul ıi returneaza administratorului utilizatorii care nu sunt administratori14 Administratorul modifica rolul utilizatorului din utilizator simplu ın producator

sau invers

23

15 Administratorul cere executarea modificarii

16 Sistemul executa modificarea iar ın caz de succes urmeaza pasul 161 si ın cazde eroare pasul 23

161 Sistemul notifica administratorul ca modificarea a fost efectuata cusucces

17 Utilizatorul se dezautentifica din aplicatie

Use-Case End

Administratorul se va deconecta din aplicatie si o va ınchide

Figura 44 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo

24

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Administratorul deschide sectiunea de utilizatori

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca administratorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Administratorul deschide pagina de Facebook

222 Administratorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Administratorul revine la aplicatia de recomandare cadouri si ıncearcadin nou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca sistemul returneaza o eroare la modificarea utilizatorului

Acest flux poate aparea la pasul 16

231 Sistemul returneaza un mesaj de eroare la modificarea utilizatorului

232 Aplicatia afiseaza mesajul de eroare administratorului

233 Cazul de utilizare continua de la pasul 15

Preconditii

1 Administratorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Administratorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Utilizatorul trebuie sa aiba cont cu rol de administrator pentru a putea efectuaorice actiune din acest caz de utilizare

4 Administratorul trebuie sa deschida sectiunea utilizatori pentru a putea ındeplinicerintele din cazul de utilizare

Postconditii

1 Noul rol al utilizatorului este salvat ın baza de date

2 La urmatoarea autentificare a utilizatorului acesta va observa ca interfata si maiprecis meniurile si actiunile care le poate face ıi vor fi diferite

25

44 Perspectiva tehnologica

441 Neo4j

Neo4j 1 este un sistem de gestionare a bazelor de date sub forma de graf dezvoltatde Neo4j Inc Descris de dezvoltatorii sai ca o baza de date tranzactionala compatibilacu ACID Neo4j este cea mai populara baza de date sub forma de graf dupa clasamentulDB-Engines

Baza de date Neo4j (ca si orice alta baza de date sub forma de graf) este foartediferita de o baza de date relationala cum ar fi MS Access SQL Server MySQL etcBazele de date relationale utilizeaza tabele randuri si coloane pentru stocarea datelor

Neo4j nu utilizeaza tabele randuri si coloane pentru stocarea sau prezentarea datelorci noduri si relatii

Neo4j este foarte potrivit pentru stocarea datelor care au multe relatii interconec-tate Acestea sunt de fapt aplicatiile ın care merita sa fie folosite De fapt bazele de datesub forma de graf cum este Neo4j sunt mult mai bune la tratarea datelor interconectatedecat bazele de date relationale

Acest lucru se datoreaza faptului ca modelul sub forma de graf nu necesita de obiceio schema predefinita Nu e nevoie sa se creeze structura bazei de date ınainte de a fiıncarcate datele asa cum se face la o baza de date relationala

Dar principalul motiv pentru care Neo4j este mai bun pentru datele relationalepentru acest tip de aplicatii este modul ın care permite crearea relatiilor Neo4j este con-struit ın jurul relatiilor si atunci nu este nevoie sa se configureze chei primare constrangerichei straine pentru a predetermina nodurile care pot avea o relatie si la ce date Cu Neo4jse poate adauga orice legatura ıntre orice nod ori de cate ori este nevoie

Neo4j are aceste calitati care nu se gasesc nici la celelalte baze de date NoSQLBazele de date non-relationale pe langa cele sub forma de graf sunt cele de tip coloanade tip document de tip cheie-valoare si de tip multi-model Nici unul din aceste tipuri nuau ca principala functionalitate maparea relatiilor si facilitatea interogarilor ıntr-o baza dedate cu multe relatii ıntre entitati

Generarea de recomandari personalizate este unul dintre cele mai frecvente cazuride utilizare a unei baze de date sub forma de graf Unele dintre principalele beneficii aleutilizarii grafurilor pentru a genera recomandari includ

- Performanta Lipsa indexurilor permite calcularea recomandarilor ın timp realasigurand ca recomandarea este ıntotdeauna relevanta si reflecta informatii actualizate

- Model de date Modelul de graf cu proprietati permite combinarea cu usurinta aseturilor de date din mai multe surse

Un alt avantaj al bazelor de date sub forma de graf Neo4j este faptul ca respectatoate principiile din modelul de consistenta ACID

Garantia data de principiile ACID este ca ofera un mediu sigur ın care sa functionezedatele Acronimul ACID reprezinta

1httpsneo4jcomuse-casesreal-time-recommendation-engine

26

bull Atomic Toate operatiile dintr-o tranzactie reusesc sau fiecare operatie este reluatabull Consistent La finalizarea unei tranzactii baza de date este solida din punct de

vedere structuralbull Izolat Tranzactiile nu se lupta una cu cealalta Accesul controversat la date este

moderat de baza de date astfel ıncat tranzactiile par sa se execute succesivbull Durabil Rezultatele aplicarii unei tranzactii sunt permanente chiar si ın cazul unor

defectiuniCand vine vorba de tehnologiile NoSQL cele mai multe baze de date sub forma de

graf (inclusiv Neo4j) utilizeaza un model de consistenta ACID pentru a asigura ca datelesunt stocate ın siguranta si ın mod consecvent

Am ales baza de date sub forma de graf ca optiune pentru stocarea datelor deoarecedin toate lucrarile si articolele citite a fost optiunea cea mai buna pentru un sistem derecomandare Deci acesta se mapeaza perfect pe cerintele functionale ale proiectului Sidin optiunile de baze de date sub forma de graf Noe4j a avut de departe cele mai multeavantaje ea fiind si cea mai utilizata

442 Cypher

Cypher 2 este un limbaj declarativ de interogare pentru bazele de date sub formade graf care permite interogarea si actualizarea rapida a datelor Cypher este un limbajrelativ simplu dar foarte puternic Interogarile foarte complexe ale bazei de date pot fiusor exprimate prin intermediul limbajului Cypher

Este conceput pentru a fi un limbaj de interogare uman Scopul lui principal este dea face interogarile mult mai simple si unele interogari care la bazele de date relationale nuerau posibile le face posibile Constructiile sale se bazeaza pe grafica si pe limba englezalucru care ajuta la scrierea mai intuitiva a interogarilor Este construit pentru a fi maiintuitiv pentru citire si nu neaparat pentru scriere

Cypher se bazeaza pe modelul Graph Property care ın plus fata de elementelegrafice standard ale nodurilor si muchiilor (numite relatii ın Cypher) adauga etichete siproprietati ca si concepte Nodurile pot avea zero sau mai multe etichete ın timp ce fiecarerelatie este de exact un singur tip Nodurile si relatiile au de asemenea zero sau mai multeproprietati

Chypher este limbajul de interogare folosit la bazele de date Neo4j deci este opti-unea implicita atunci cand se alege Neo4j

443 Maven

Maven 3 este un instrument de management software si de ıntelegere a proiectelorsoftware Pe baza conceptului unui model de obiect de proiect (POM) Maven poategestiona construirea raportarea si documentarea unui proiect printr-o informatie centrala

2httpsneo4jcomdevelopercypher-query-language3httpswwwjavatpointcommaven-tutorial

27

Obiectivul principal al lui Maven este acela de a permite unui dezvoltator sa ınte-leaga starea completa a efortului de dezvoltare ın cel mai scurt timp Avantajele Mavensunt

bull instalarea rapida a proiectului fara fisiere buildxml complicate doar un POMbull procesul de construire este standardizat pentru toate proiectelebull usor de ınvatat si de utilizatbull configurarea unui proiect este foarte rapidabull bine documentat

Am ales sa folosesc Maven deoarece este una din cele mai comune optiuni pentru aimporta librariile ıntr-un proiect si este si cel mai documentat Deci mereu cand esti pusın dificultate poti cauta pe internet sugestii

444 Spring Boot

Spring Boot 4 este un framework din cadrul Spring care ofera setari implicite pentruconfigurarea codului si adnotari pentru a lansa rapid proiecte noi ın executie Urmaresteabordarea rdquoConfigurarea defectiunilor vizionaterdquo pentru a evita un numar mare de linii decod pentru configuratii si pentru a ımbunatati procesul de dezvoltare

Avantajele Spring Boot sunt1 Face foarte usoara dezvoltarea de aplicatii bazate pe Spring cu Java sau Groovy2 Reduce timpul de dezvoltare si creste productivitatea3 Evita scrierea multor linii de cod adnotari si configurare XML4 Este foarte usor de integrat cu alte framework-uri din aceasi familie Spring cum ar

fi Spring JDBC Spring ORM Spring Data Spring Security etc5 Urmareste abordarea rdquoConfigurarea implicita a optiunilorrdquo pentru a reduce efortul

pentru dezvoltatori6 Ofera servere HTTP ıncorporate cum ar fi Tomcat Jetty etc pentru a dezvolta si

testa aplicatiile web foarte usor7 Ofera instrumentul CLI (Command Line Interface) pentru a dezvolta si testa apli-

catiile de tip rdquoSpring Bootrdquo (Java sau Groovy) din linia de comanda foarte usor sirapidAm ales ca optiune pentru partea de backend acest framework deoarece simplifica

foarte mult lucrurile Datorita lui un programator poate sa ısi concentreze mai tare energiape a construi proiectul din punctul de vedere al buissness-ului logic nu din punctul devedere al configurarilor necesare

445 Sencha CMD si ExtJS

Sencha CMD 5 este un instrument linie de comanda cross-platform care ofera multesarcini automate ın ciclul complet de viata al unei aplicatii ExtJS de la generarea unui

4httpswwwjavatpointcomspring-boot-tutorial5httpsdocssenchacomcmd

28

nou proiect la lansarea unei aplicatii ın productie

Sencha Cmd ofera o colectie de caracteristici puternice pentru economisirea timpu-lui care functioneaza ımpreuna cu Sencha ExtJS si Sencha Touch

Ext JS 6 este un framework pur JavaScript pentru construirea de aplicatii webinteractive cross-platform utilizand tehnici precum scripting Ajax DHTML si DOM

Avantajele framework-ului ExtJS sunt

1 Documentatia Extjs este foarte cuprinzatoare si bine ıntretinuta2 Aspectul cheie al bibliotecii EXTJS este suportul de tip cross-browser3 Framework-ul ExtJS ofera o multitudine de elemente UI Aceste elemente includ

forme casete de dialog file arbori si tabele4 Framework-ul ExtJS include suport pentru implementarile Ajax5 ExtJS ofera performante excelente Framework-ul este complet orientat spre obiecte

si este extensibil asta pentru ca este scris ın JavaScript

Pentru partea de frontend se foloseste framework-ul ExtJS deoarece are o arhitec-tura ce se mapeaza foarte bine pe proiectele de frontend si anume arhitectura bazata pecomponente Aceasta face ca ın proiect codul sa fie mult mai organizat si procesul dedezvoltare al proiectului sa fie mult mai scurt prin identificarea mai usoara a erorilor

446 Facebook API(Graph API)

Graph API 7 este modul principal de a pune date ın platforma Facebook si de aobtine date din platforma Facebook Este un API bazat pe HTTP pe care aplicatiile ılpot utiliza pentru interogarea datelor pentru a introduce postari noi pentru gestionareaanunturilor sau pentru a ıncarca fotografii

Este denumit Graph API dupa ideea unui rdquograf socialrdquo - o reprezentare sub formade graf a informatiilor de pe Facebook Este compus din

bull noduri - ın esenta obiecte individuale cum ar fi un utilizator o fotografie o paginasau un comentariu

bull muchii - conexiuni ıntre o colectie de obiecte si un singur obiect cum ar fi fotografiilede pe o pagina sau comentariile de la o fotografie

bull campuri - date despre un obiect cum ar fi ziua de nastere a unui utilizator saunumele paginii

De obicei se utilizeaza noduri pentru a obtine date despre un anumit obiect se uti-lizeaza muchii pentru a obtine colectii de obiecte legate de un singur obiect si se utilizeazacampurile pentru a obtine date despre un singur obiect sau mai multe obiecte dintr-ocolectie

Am folosit Facebook API ca solutie pentru a ımbunatati problema de rdquocold startrdquopentru ca este singurul site pe care marea majoritate a oamenilor au cont si salveazalucrurile care le plac Deci se potrivea perfect peste nevoile aplicatiei mele

6httpdocssenchacomextjs6207httpsdevelopersfacebookcomdocsgraph-api

29

447 Git

Git 8 este un sistem de control a versionarii pentru urmarirea modificarilor ın fisierelede pe computer si coordonarea activitatii asupra acestor fisiere ın randul mai multor per-soane Este utilizat ın principal pentru gestionarea codului sursa ın dezvoltarea de softwaredar poate fi folosit pentru a urmari schimbarile ın orice set de fisiere

Avantaje ale Git

bull Modelul distribuit numai ceea ce se doreste se face publicbull Branching-ul si merging-ul sunt usoarebull Fluxul de lucru este flexibilbull Integritatea datelor este asigurata Deoarece GIT utilizeaza arbori SHA1 coruperea

datelor din motive externe poate fi usor detectatabull Rapid Git este foarte rapid chiar si ın comparatie cu alte sisteme de control a

versionarii

Am folosit Git pentru a avea la proiect un back-up ın caz ca se ıntampla ceva cuproiectul salvat pe calculator

45 Arhitectura conceptuala

In figura 45 este prezentata arhitectura conceptuala a sistemului Acesta este ım-partit ın doua mari parti backend-ul si frontend-ul care comunica ıntre ele si ısi trimitinformatii

Se poate observa ca baza de date este de tip graf mai exact Neo4j si comunica cubackend-ul pentru a putea lucra cu datele stocate Backend-ul este structurat pe nivelefiecare cu un diferit rol si care trebuie parcurs pentru a procesa datele din interfata ınbaza de date Cele trei nivele sunt cel de Repository cel de Service si cel ControllerToate interogarile venite din interfata utilizator ajung ın nivelul de Controller Dupa ceinterogarile trec de securitatea sistemului ajung ın nivelul de Service Acolo se proceseazasi se afla partea de logica a aplicatiei Pentru a interactiona cu baza de date din Servicese apeleaza metodele din nivelul de Repository

In continuare backend-ul comunica prin protocolul HTTP cu interfata grafica cucare interactioneaza clientii aplicatiei Interfata este scrisa ın Ext JS si are o parte de Viewsi o parte de Controller care este cea care comunica cu backend-ul

Pentru partea de autentificare sistemul interactioneaza cu API-ul de la Facebookde la care ia dupa autentificare un access token Cu ajutorul acestuia ia dupa aceea datelenecesare pentru a putea crea un profil utilizatorului

8httpsguidesgithubcomintroductiongit-handbook

30

Figura 45 Arhitectura conceptuala

31

Capitolul 5

Proiectare de Detaliu siImplementare

In acest capitol vor fi prezentate detalii de implementare ale sistemului de recoman-dare incluzand o ımpartire al acestuia ın componentele care ıl cuprind

Obiectivul este de a prezenta arhitectura si modul de implementare al aplicatieipe baza datelor descoperite ın studiul bibliografic de la capitolul trei si cu tehnologiilehotarate la capitolul patru Pe langa asta va fi prezentata si structura bazei de date sideciziile luate pentru securitatea aplicatiei

51 Arhitectura sistemului

Din punctul de vedere al arhitecturii aplicatia se poate considera ca este alcatuitadin patru mari componente

1 API-ul de la Facebook2 Aplicatia client care reprezinta interfata grafica a aplicatiei3 Aplicatia server adica backendul aplicatiei si partea ın care se afla partea de rdquobusiness

logicrdquo4 Baza de date

Partea componenta reprezentata de API-ul de la Facebook este doar o componentacu care aplicatia se integreaza si pe care aceasta o foloseste In interactiunea cu ea interfatada o cerere de autentificare apare o fereastra de la Facebook ın care utilizatorul introducecredentialele de la API-ul de Facebook se primeste ınapoi un access token si cu ajutorulacestuia face o cerere pentru a primi datele personale ale utilizatorului pentru creeareaprofilului utilizator

Urmatoarea parte a aplicatiei este interfata utilizator frontend-ul care reprezintapartea cu care utilizatorul interactioneaza si locul unde ıi sunt afisate informatiile

Cererile din interfata ajung ın a treia parte componenta a sistemului partea deserver adica backend-ul aplicatiei Acolo toate cererile sunt citite si procesate iar raspun-

33

sul lor este trimis la interfata utilizator Aceasta este partea care reprezinta rdquogandireardquoaplicatiei Aceea este componenta care face legatura ıntre cererile utilizatorului din inter-fata si datele stocate ın baza de date

Ultima componenta a aplicatiei o reprezinta baza de date care are ca rol sa stochezedatele despre utilizatori produse si comenzi Ea este o baza de date sub forma de grafde tipul Neo4j Acolo se salveaza entitatile aplicatiei sub forma de noduri si dependenteleıntre acestea sub forma de relatii ıntre aceste noduri

Figura 51 Diagrama de rdquodeploymentrdquo

In figura 51 este prezentata diagrama de rdquodeploymentrdquo a sistemului cu cele patrucomponente ale sistemului Aplicatia client comunica cu API-ul de la Facebook prin pro-tocolul securizat HTTPS cu backend-ul prin protocolul HTTP iar backend-ul cu baza dedate prin JDBC

Aplicatia a putut fi ımpartita ın aceste componente separate deoarece fiecare dintreele poate functiona independent de celelalte comunica cu ele doar prin mesaje Din acestmotiv locul unde ruleaza acestea pot sa fie pe servere diferite In plus daca aplicatiaar fi pusa pe servere pentru utilizatori ar putea fi mai multe servere pe care ruleaza ocomponenta si prin rdquoload balancingrdquo sa se trimita cererile ımpartite ıntre ele

Cum astfel componentele nu depind foarte mult unele de altele si pot rula faraa le interesa de unde le sunt trimise cererile este arhitectura cea mai corecta deoarecedefectarea sau o posibila eroare la una din ele nu o influenteaza cu nimic pe o alta Dacatoate ar rula pe acelasi server o eventuala defectiune a acestuia ar ınsemna o defectiune aıntregului sistem Insa daca exista mai multe noduri si se afla pe servere diferite pot doartoate cererile sa fie redirectionate spre un nod care functioneaza si aplicatia sa functionezepentru clienti la fel ca ınainte

34

Un alt avantaj al arhitecturii ar fi faptul ca la o lansare viitoare catre clienti se poatelansa doar componenta la care s-au facut modificari De asemenea aplicatia ar putea aveape viitor si o componenta mobila Iar cum serverul e independent poate fi acelasi serverfolosit de o alta aplicatie client

511 Arhitectura componentei backend

Arhitectura backend-ului este si ea ımpartita ın mai multe pachete pentru o maibuna structura si pentru o cat mai mica dependenta ıntre diversele componente Astfelcuplarea este minima ıntre clase si eventualele modificari ulterioare pot fi mai usor defacut

Serverul a fost implementat ın Java cu ajutorul framework-ului Spring Boot iarmediul de dezvoltare folosit a fost Intellij IDEA

Din punctul de vedere al ımpartirii arhitectura serverului aplicatiei este structurataın patru pachete si o clasa ın afara acestora Acea clasa este rdquomainrdquo-ul aplicatiei este parteacare trebuie rulata pentru a porni serverul Din cauza ca este o aplicatie Spring Boot si nuuna String singura adnotare necesara pentru a sti ca aceea este clasa rdquoradacinardquoa aplicatieieste SpringBootApplication

Cele patru pachete ale serverului sunt1 Cel de domeniu (domain) cu clasele POJO care reprezinta entitatile din baza de

date2 Cel de rdquomagazierdquo (repositories) care este cel care face direct actiunile ın baza de date3 Cel de serviciu (services) ın care se afla partea de logica a ıntregii aplicatii4 Cel de web ın care se afla clasele de rdquocontrollerrdquo

Figura 52 Diagrama de pachete pentru backend

35

Ca si dependente nivelul de web ıl foloseste pe cel de seviciu cel de serviciu ılfoloseste pe cel de rdquomagazierdquo iar clasele din pachetul de domeniu sunt folosite ın toatecelelalte pachete

In continuare voi prezenta pe rand fiecare nivel al serverului adica fiecare pachet

Figura 53 Diagrama de clase pentru pachetul rdquodomainrdquo

36

Nivelul de domeniu (domain) este alcatuit ın primul rand din clasele care suntentitati ın baza de date Acestea sunt reprezentate de toate clasele ce stocheaza informatiidespre utilizatori si despre produse si comenzi Pe langa informatiile personale despre unutilizator de genul numelui email-ului sau data nasterii care sunt salvate ın entitateapersoana se stocheaza despre utilizator ın clase diferite informatii de genul locului undelocuieste locul unde a copilarit locurilor unde a facut scoala locului unde lucreaza sau celmai important pentru aplicatia aceasta lucrurilor care ıi plac In afara acestor informatiidespre utilizatori sunt si clase cu informatiile despre prieteni despre produse sau desprecomenzi

Din cauza faptului ca aplicatia este de tipul unei retele sociale ın care exista prieteniiıntre persoane exista dependente ıntre toate entitatile aplicatiei Acesta este si motivulpentru care am ales baza de date sub forma de graf pe care sa se mapeze toate acesteentitati sub forma de noduri si toate aceste dependente sub forma de relatii

In pachetul de domeniu se afla si trei subpachete Unul dintre ele este pentruclasele folosite pentru a trata erorile aplicatiei In interiorul acestui pachet se afla douaclase pentru eroare si o exceptie cea folosita ın cazul ın care nu se gaseste ceea ce doresteutilizatorul Pe langa asta este clasa care are ca obiect raspunsul dat de sistem ın cazulunei erori la server Aceasta contine ın interiorul sau pe langa codul erorii si detalii despreeroarea trimisa Aceasta lista de detalii e reprezentata de obiectele de tipul celei de-a treiaclase din pachetul acesta

Celelalte doua subpachete aflate ın acest nivel sunt cele care contin clasele specialede cerere sau raspuns care au ajutat la maparea acestora mai bine In multe cazuri nua fost necesara trimiterea la interfata utilizator a tuturor informatiilor stocate despre oentitate si de aceea am ales sa creez ın aceste cazuri un obiect auxiliar care sa fie folositpe post de raspuns

Figura 54 Diagrama de clase pentru pachetul rdquorepositoriesrdquo

37

Cel de-al doilea nivel al aplicatiei backend este cel de rdquomagazierdquo (repositories) carecontine doar interfete de tip rdquoRepositoryrdquo

Aceste interfete sunt cele care fac operatiile directe asupra entitatilor din baza dedate

Unele interfete doar extind interfata care are deja implementate metodele CRUDsi din acest motiv nu au metode suplimentare iar altele au si metode ın plus care au carol sa execute interogari mai complexe asupra bazei de date In acele metode se pot scrieinterogarile ın Cypher pentru a putea primi informatii despre mai multe noduri sau desprerelatiile dintre acestea sau si pentru a returna doar anumite rezultate care ındeplinescanumite conditii In felul acesta a fost implementata si cererea de oferire a recomandarilorIn acel caz sistemul returneaza produsele care au ın descriere unul din lucrurile care se aflaın lista de obiecte sau servicii primite de la Facebook ca ıi plac utilizatorului

Nivelul de rdquoRepositoryrdquo este folosit direct de cel de-al treiea nivel cel de servi-ciu Acesta este nivelul la care se executa logica aplicatiei unde se comanda modul defunctionare al ıntregii aplicatii

Figura 55 Diagrama de clase pentru pachetul rdquoservicesrdquo

Pe acest nivel ajung toate cererile din server dupa ce trec de verificarile de securitateIn acest pachet se afla si clasa de securitate care face verificarile necesare In aceasta clasaexista o metoda ce se apeleaza la prima cerere cea de salvare a datelor de la Facebookdespre utilizator si care codifica id-ul utilizatorului si ıl trimite pe raspuns ınapoi interfeteiPe langa asta ın acea clasa se afla si o metoda care verifica faptul ca id-ul codificat esteal unui utilizator cu rol corespunzator pentru a face acea cerere

In plus ın acest pachet se afla si toate celelalte clase care fac diverse operatii pedatele din baza de date si dau raspunsuri cererilor din interfata Aici se afla logica care

38

comanda actiunile asupra utilizatorilor asupra prietenilor acestora asupra produselor siasupra comenzilor

Ultima clasa a acestui nivel este cea care se ocupa de trimiterea de email-uri Incazul ın care se face o noua comanda de catre un utilizator toti producatorii produselor depe comanda sunt notificati despre produsele lor pe care le doreste utilizatorul Din serviciulde comanda se apeleaza serviciul de email pentru fiecare producator din lista celor care auproduse care se afla pe lista comenzii utilizatorului

Ultimul si cel mai aproape de interfata utilizator este nivelul de web Acolo se aflatoate clasele de rdquoControllerrdquo ale aplicatiei server

Figura 56 Diagrama de clase pentru pachetul rdquowebrdquo

Toate cererile din interfata utilizator ıncearca sa se mapeze pe rutele declarate ınclase pentru a fi procesate ın metoda corespunzatoare Toata aceasta parte este foarteusor de implementat si mai ales foarte lizibil pentru programatori datorita adnotarilor dinJava Cu ajutorul acestora trebuie doar specificat care este numele URL-ului cererii careeste tipul de obiect asteptat si daca se trimite ca rdquoquery stringrdquo pe URL sau ın interiorulcorpului cererii si tipul raspunsului Pentru fiecare cerere care nu este apelata ın parteaneautentificata a utilizatorului primul lucru care se apeleaza este metoda de securitatepentru a verifica rolul si id-ul utilizatorului Daca din punctul de vedere al securitatii totuleste ın regula se apeleaza metoda corespunzatoare din pachetul de serviciu

39

O singura clasa este diferita de restul ın pachetul de controller si aceea este clasa deeroare Acolo se mapeaza erorile aparute ın timpul cererii si se trimite ınapoi ın interfatagrafica un raspuns cu cod de eroare specific nu numai 500 Generic Application Exceptioncum ar trimite fara aceasta clasa si cu detalii despre motivul aparitiei erorii

Datorita folosirii adnotarilor din java nu a fost necesara folosirea unor rdquodesignpatternrdquo-uri ın sistem De exemplu pentru a folosi ın nivelul de web ceva din pachetulde servicii trebuia doar acel obiect sa aiba adnotarea Autowired si se ınlocuieste atatfolosirea rdquodesign patternrdquo-ului Singleton cat si a celui de Factory Acel obiect nu trebuiecreat sau initializat se face asta implicit datorita adnotarii si de asemenea este folositapeste tot aceeasi instanta

In concluzie toate cererile venite din interfata grafica ajung ın nivelul de rdquocontrollerrdquode unde sunt trimise la cel de rdquoservicerdquopentru a fi procesate si facute eventualele modificarinecesare ın baza de date ca apoi raspunsul sa fie trimis ınapoi spre aplicatia client pentruafisare

512 Arhitectura componentei frontend

A doua componenta implementata a sistemului este aplicatia client frontend-ulAceasta a fost scrisa ın Java Script cu ajutorul framework-ului Ext JS compilarea

se face cu ajutorul Sencha CMD si mediul de implementare a fost IntelliJ IdeaCu ajutorul framework-ului Ext JS se scriu componente care apoi se initializeaza

unele pe altele Aplicatia porneste cu fisierul Applicationjs care este un fel de rdquomainrdquopentru aplicatie Aceasta initializeaza alte componente care la randul lor includ altecomponente si tot asa Structura poate fi foarte usor comparata cu una arborescenta dinacest punct de vedere

Framework-ul a fost creat sa functioneze ın felul acesta pentru ca scopul componen-telor este sa fie scrise ın asa fel ıncat sa poata pe viitor sa fie utilizate din nou Una dindorintele majore ın programare tot timpul este de a se scrie cod ıntr-o maniera ın care safie cat mai reutilizabil Iar framework-ul Ext JS exact asta ıncearca

Arhitectura aplicatiei client se gaseste ın figura 57 si este la randul ei ımpartita ınpachete ca si cea de server Similar cu pachetul de rdquodomainrdquo de la aplicatia de backendeste pachetul rdquomodelrdquo al interfetei utilizator Aici sunt rdquoclaserdquo care sunt simple POJO sicare sunt apoi folosite ın nivelele urmatoare Sunt mai putine decat clasele din rdquostorerdquodeoarece daca raspunsul de la server nu trebuie procesat nu sunt necesare se pot mapadirect obiectele din rdquostorerdquo pe componentele interfetei utilizator

Urmatorul nivel este cel pe care se afla clasele de rdquostorerdquo Acestea sunt cele careexecuta cererea spre backend si face legatura ıntre client si server Daca are o clasa derdquomodelrdquodeclarata atunci populeaza acel obiect cu datele primite de la server iar ın cazul ıncare nu este declarat un model se trimit datele exact asa cum s-au primit la nivelul urmatorde rdquoviewrdquo Acest nivel seamana din punct de vedere al functiei cu cel de rdquorepositoryrdquo de laaplicatia server deoarece ambele au rol de legatura Aceea facea legatura ıntre aplicatiesi baza de date si aceasta face legatura ıntre aplicatia client si aplicatia server

40

Figura 57 Diagrama de clase pentru aplicatia web

Cel de-al treilea pachet al aplicatiei este cel de rdquoviewrdquo In acest pachet se afla claselecare alcatuiesc partea vizuala a aplicatiei La randul ei si aceasta este alcatuita tot dincomponente Aplicatia deschide ın primul rand Main-ul care determina aparitia paginii deHome si afisarea ın meniu a optiunilor posibile ın functie de autentificare si rol Clasele deaici se executa de fapt la deschiderea aplicatiei fiind rdquosingle page applicationrdquo si tot atuncise ıncarca pe pagina componentele Ca si arhitectura a pachetului acesta este ımpartit larandul sau ın subpachete Pentru o mai buna organizare exista patru subpachete cateunul pentru fiecare tip de utilizator In felul acesta toate rdquoviewrdquo-urile care sunt specificeunui utilizator cu un anumit rol se afla ın acelasi subpachet

Cele patru subpachete existente ın pachetul rdquoviewrdquo sunt

1 Pachetul rdquomainrdquo care cuprinde rdquoviewrdquo-urile care se afla ın partea neautentificata aaplicatiei

2 Pachetul rdquoclientrdquo continand rdquoviewrdquo-urile pe care le poate accesa un utilizator simplu3 Pachetul rdquoproducerrdquo specific actiunilor unui utilizator care are rol de producator4 Pachetul rdquoadminrdquo care contine toate rdquoviewrdquo-urile care ıi apar unui utilizator care este

administrator al aplicatiei

Ultimul pachet si nivel al aplicatiei client este cel de rdquocontrollerrdquo In acest pachet

41

se afla clasele care fac actiunile din interfata grafica In timp ce pachetul rdquoviewrdquo continedoar partea grafica a aplicatiei adica modul ın care aceasta trebuie sa arate pachetulrdquocontrollerrdquo contine actiunea acestora modul ın care aplicatia trebuie sa functioneze

Ca si arhitectura si acest pachet a fost ımpartit la randul lui tot ın cele patrusubpachete ca si pachetul rdquoviewrdquo adica rdquomainrdquo rdquoclientrdquo rdquoproducerrdquo si rdquoadminrdquo In pluspentru a fi usor de gasit ce clasa de rdquocontrollerrdquo apartine carui rdquoviewrdquo am ales ca cele douasa aiba acelasi nume In felul acesta daca se doreste sa se gaseasca actiunile unui rdquoviewrdquose poate cauta dupa o clasa cu acelasi nume ın pachetul rdquocontrollerrdquo Numarul claselor dinacest pachet este mai mic decat cel al claselor din rdquoviewrdquo deoarece nu toate paginile dininterfata au actiuni suplimentare Daca singura actiune este ıncarcarea paginii cu date dela server adica doar o actiune simpla de GET datele se ıncarca cu ajutorul rdquostorerdquo-ului laıncarcarea paginii si nu este necesara nici o actiune suplimentara Paginile pe care se potface si actiuni de alt gen sau se deschid noi ferestre au nevoie de clase de rdquocontrollerrdquo

In concluzie arhitectura aplicatiei client este una bazata pe componente care ıncearcasa foloseasca cat mai multe clase reutilizabile

52 Structura bazei de date

Baza de date a aplicatiei este de tip graf de tipul Neo4j Pentru utilizare exista unprogram numit Neo4j ce trebuie instalat Acest program are si o interfata grafica ın carese pot vizualiza datele sub forma grafica si ın care se pot scrie de asemenea si interogariın limbajul acestei baze de date adica Cypher

Fiind o baza de date sub forma de graf datele stocate sunt salvate ın structurade date sub forma de noduri si relatii Entitatile din pachetul de domeniu din aplicatiabackend se gasesc ın baza de date sub forma unor noduri iar dependentele dintre nodurise mapeaza ın baza de date sub forma unor relatii Un element diferit fata de alte tipuride baze de date este faptul ca pe relatiile dintre noduri se pot salva atribute cum este ınaplicatie cazul pentru prieteniile dintre persoane In cazul acestora pe relatia dintre nodurise salveaza daca prietenia a fost sau nu acceptata

Pentru fiecare clasa POJO din aplicatia server clasa ce are doar metodele get si setsi se afla ın pachetul domain exista cate un tip de nod diferit ın baza de date cum estesi marcat ın diferite culori ın figura 58 Fiecare tip de nod are atributele proprii care potlua valori sau pot fi nule Iar fiecare obiect din Java reprezinta un nod diferit ın baza dedate

Neo4j a fost cea mai buna optiune pentru baza de date pentru ca aplicatia poate ficonsiderata o retea sociala Acest lucru se datoreaza relatiilor de prietenie dintre persoanesi a multiplelor relatii ıntre noduri Toate nodurile se afla ın acceasi componenta conexadeci nu exista noduri izolate care sa nu aiba nici o legatura cu nici un alt nod

Datorita acestei structuri a bazei de date este posibila implementarea cererii derecomandare ca o simpla interogare ın baza de date aceasta fiind cea mai simpla metodade implementare a unui sistem de genul acesta una mult mai complexa ar fi fost un

42

algoritm de ınvatare care sa ınvete tipare ale utilizatorilor si sa recomande cadouri pe bazaacestor informatii

Figura 58 Diagrama bazei de date pentru doi utilizatori

Un alt avantaj al acestui tip de baza de date este faptul ca datele nu sunt duplicateın baza de date Spre exemplu daca mai multi utilizatori au ca locatie acelasi oras nu secreaza cate un nod cu acea locatie de mai multe ori ci acel unic nod va avea cate o relatiecu fiecare utilizator care are ca locatie acel oras

In concluzie structura bazei de date a fost aleasa ın acest fel datorita tipului apli-catiei adica asemanatoare cu o retea sociala si datorita implementarii simple a unui sistemde recomandare pe o asemenea baza de date

53 Fluxul pentru diferite operatii

Pentru aplicatie cele mai importante cazuri de utilizare sunt salvarea informati-ilor despre utilizator primite de la Facebook pentru crearea unui profil si recomandareacadourilor pentru un utilizator al aplicatiei Din aceasta cauza cele doua cazuri de utilizarevor fi prezentate mai ın detaliu ın continuare

43

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 24: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

Use-Case EndUtilizatorul se va deconecta din aplicatie si o va ınchide

Figura 42 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueazaAcest flux poate aparea la orice pas211 Utilizatorul deschide sectiunea de recomandare cadouri212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca utilizatorul nu are cont de Facebook

19

Acest flux poate aparea la pasul 11221 Utilizatorul deschide pagina de Facebook222 Utilizatorul ısi face un cont pe pagina de Facebook si ısi completeaza

date despre el223 Utilizatorul revine la aplicatia de recomandare cadouri si ıncearca din

nou sa se autentifice ın aplicatie224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca utilizatorul nu e multumit de recomandariAcest flux poate aparea la pasul 14231 Utilizatorul sterge din cos cadourile pe care nu le mai doreste si revine

la pagina de recomandari232 Utilizatorul adauga alte cadouri ın cos233 Cazul de utilizare continua de la pasul 141

24 Flux-ul alternativ daca utilizatorul nu e multumit de produsele din cosul decumparaturi

Acest flux poate aparea la pasul 16241 Utilizatorul revine ınapoi la formularul cu introducerea datelor despre

beneficiarul cadoului242 Utilizatorul completeaza din nou datele243 Cazul de utilizare continua de la pasul 13

Preconditii

1 Utilizatorul trebuie sa aiba un cont de Facebook pentru a se putea autentifica ınaplicatie

2 Utilizatorul trebuie sa fie autentificat ın aplicatie pentru a putea face orice actiunedin acest caz de utilizare

3 Utilizatorul trebuie sa deschida sectiunea de recomandare cadouri pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noua comanda este salvata ın baza de date2 Comanda apare ın sectiunea de comenzi a utilizatorului ımpreuna cu statusul ei

curent3 Producatorul este notificat ca are o noua comanda

432 Adaugare produs

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unproducator trebuie sa le urmeze pentru a introduce un nou produs ın aplicatie

20

Actorul principal

Utilizatorii cu rol de producator sau cu rol de administrator

Parti interesate si interese

Producatorul care doreste sa introduca produsul nou ın aplicatie

Utilizatorii simpli care au o mai mare varietate de produse din care sa li se reco-mande cadouri

Figura 43 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo

21

Flux de evenimente

Use-Case Start

Cazul de utilizare ıncepe atunci cand producatorul porneste aplicatia

11 Producatorul verifica daca are cont de Facebook si daca are urmeaza pasul111 daca nu 22

111 Producatorul se autentifica ın aplicatie cu ajutorul credentialelor de laFacebook

12 Producatorul deschide sectiunea de adaugare produs

13 Producatorul completeaza datele necesare despre noul produs ımpreuna cu tipulde persoana si eveniment care i s-ar potrivi

14 Producatorul verifica daca este multumit de datele introduse si daca da urmeazapasul 141 daca nu 23

141 Producatorul efectueaza operatia de adaugare produs

15 Sistemul adauga un nou produs ın baza de date

16 Sistemul notifica producatorul ca noul produs a fost introdus cu succes

17 Producatorul se dezautentifica din aplicatie

Use-Case End

Producatorul se va deconecta din aplicatie si o va ınchide

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Producatorul deschide sectiunea de adaugare produs

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca producatorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Producatorul deschide pagina de Facebook

222 Producatorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Producatorul revine la aplicatia de recomandare cadouri si ıncearca dinnou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca Producatorul nu e multumit de datele introduse despreprodus

Acest flux poate aparea la pasul 14

231 Producatorul sterge datele gresite despre produs

232 Producatorul adauga alte date despre produs

233 Cazul de utilizare continua de la pasul 141

22

Preconditii

1 Producatorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Producatorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Producatorul trebuie sa aiba cont cu rol de rdquoproducatorrdquo sau rdquoadminrdquo pentru aputea face operatia aceasta

4 Producatorul trebuie sa deschida sectiunea de adaugare produs pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noul produs este salvat ın baza de date2 Produsul poate fi adaugat la recomandarile unui utilizator din acel moment

433 Modificare rol utilizator

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unadministrator trebuie sa le urmeze pentru a modifica rolul unui utilizator al aplicatiei

Actorul principal

Un utilizator al aplicatiei care are rol de administrator

Parti interesate si interese

Administratorul care doreste sa modifice rolul unui utilizatorUtilizatorul care doreste sa ısi schimbe rolul

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand administratorul porneste aplicatia11 Administratorul verifica daca are cont de Facebook si daca are urmeaza pasul

111 daca nu 22111 Administratorul se autentifica ın aplicatie cu ajutorul credentialelor de

la Facebook12 Administratorul deschide sectiunea de utilizatori13 Sistemul ıi returneaza administratorului utilizatorii care nu sunt administratori14 Administratorul modifica rolul utilizatorului din utilizator simplu ın producator

sau invers

23

15 Administratorul cere executarea modificarii

16 Sistemul executa modificarea iar ın caz de succes urmeaza pasul 161 si ın cazde eroare pasul 23

161 Sistemul notifica administratorul ca modificarea a fost efectuata cusucces

17 Utilizatorul se dezautentifica din aplicatie

Use-Case End

Administratorul se va deconecta din aplicatie si o va ınchide

Figura 44 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo

24

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Administratorul deschide sectiunea de utilizatori

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca administratorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Administratorul deschide pagina de Facebook

222 Administratorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Administratorul revine la aplicatia de recomandare cadouri si ıncearcadin nou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca sistemul returneaza o eroare la modificarea utilizatorului

Acest flux poate aparea la pasul 16

231 Sistemul returneaza un mesaj de eroare la modificarea utilizatorului

232 Aplicatia afiseaza mesajul de eroare administratorului

233 Cazul de utilizare continua de la pasul 15

Preconditii

1 Administratorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Administratorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Utilizatorul trebuie sa aiba cont cu rol de administrator pentru a putea efectuaorice actiune din acest caz de utilizare

4 Administratorul trebuie sa deschida sectiunea utilizatori pentru a putea ındeplinicerintele din cazul de utilizare

Postconditii

1 Noul rol al utilizatorului este salvat ın baza de date

2 La urmatoarea autentificare a utilizatorului acesta va observa ca interfata si maiprecis meniurile si actiunile care le poate face ıi vor fi diferite

25

44 Perspectiva tehnologica

441 Neo4j

Neo4j 1 este un sistem de gestionare a bazelor de date sub forma de graf dezvoltatde Neo4j Inc Descris de dezvoltatorii sai ca o baza de date tranzactionala compatibilacu ACID Neo4j este cea mai populara baza de date sub forma de graf dupa clasamentulDB-Engines

Baza de date Neo4j (ca si orice alta baza de date sub forma de graf) este foartediferita de o baza de date relationala cum ar fi MS Access SQL Server MySQL etcBazele de date relationale utilizeaza tabele randuri si coloane pentru stocarea datelor

Neo4j nu utilizeaza tabele randuri si coloane pentru stocarea sau prezentarea datelorci noduri si relatii

Neo4j este foarte potrivit pentru stocarea datelor care au multe relatii interconec-tate Acestea sunt de fapt aplicatiile ın care merita sa fie folosite De fapt bazele de datesub forma de graf cum este Neo4j sunt mult mai bune la tratarea datelor interconectatedecat bazele de date relationale

Acest lucru se datoreaza faptului ca modelul sub forma de graf nu necesita de obiceio schema predefinita Nu e nevoie sa se creeze structura bazei de date ınainte de a fiıncarcate datele asa cum se face la o baza de date relationala

Dar principalul motiv pentru care Neo4j este mai bun pentru datele relationalepentru acest tip de aplicatii este modul ın care permite crearea relatiilor Neo4j este con-struit ın jurul relatiilor si atunci nu este nevoie sa se configureze chei primare constrangerichei straine pentru a predetermina nodurile care pot avea o relatie si la ce date Cu Neo4jse poate adauga orice legatura ıntre orice nod ori de cate ori este nevoie

Neo4j are aceste calitati care nu se gasesc nici la celelalte baze de date NoSQLBazele de date non-relationale pe langa cele sub forma de graf sunt cele de tip coloanade tip document de tip cheie-valoare si de tip multi-model Nici unul din aceste tipuri nuau ca principala functionalitate maparea relatiilor si facilitatea interogarilor ıntr-o baza dedate cu multe relatii ıntre entitati

Generarea de recomandari personalizate este unul dintre cele mai frecvente cazuride utilizare a unei baze de date sub forma de graf Unele dintre principalele beneficii aleutilizarii grafurilor pentru a genera recomandari includ

- Performanta Lipsa indexurilor permite calcularea recomandarilor ın timp realasigurand ca recomandarea este ıntotdeauna relevanta si reflecta informatii actualizate

- Model de date Modelul de graf cu proprietati permite combinarea cu usurinta aseturilor de date din mai multe surse

Un alt avantaj al bazelor de date sub forma de graf Neo4j este faptul ca respectatoate principiile din modelul de consistenta ACID

Garantia data de principiile ACID este ca ofera un mediu sigur ın care sa functionezedatele Acronimul ACID reprezinta

1httpsneo4jcomuse-casesreal-time-recommendation-engine

26

bull Atomic Toate operatiile dintr-o tranzactie reusesc sau fiecare operatie este reluatabull Consistent La finalizarea unei tranzactii baza de date este solida din punct de

vedere structuralbull Izolat Tranzactiile nu se lupta una cu cealalta Accesul controversat la date este

moderat de baza de date astfel ıncat tranzactiile par sa se execute succesivbull Durabil Rezultatele aplicarii unei tranzactii sunt permanente chiar si ın cazul unor

defectiuniCand vine vorba de tehnologiile NoSQL cele mai multe baze de date sub forma de

graf (inclusiv Neo4j) utilizeaza un model de consistenta ACID pentru a asigura ca datelesunt stocate ın siguranta si ın mod consecvent

Am ales baza de date sub forma de graf ca optiune pentru stocarea datelor deoarecedin toate lucrarile si articolele citite a fost optiunea cea mai buna pentru un sistem derecomandare Deci acesta se mapeaza perfect pe cerintele functionale ale proiectului Sidin optiunile de baze de date sub forma de graf Noe4j a avut de departe cele mai multeavantaje ea fiind si cea mai utilizata

442 Cypher

Cypher 2 este un limbaj declarativ de interogare pentru bazele de date sub formade graf care permite interogarea si actualizarea rapida a datelor Cypher este un limbajrelativ simplu dar foarte puternic Interogarile foarte complexe ale bazei de date pot fiusor exprimate prin intermediul limbajului Cypher

Este conceput pentru a fi un limbaj de interogare uman Scopul lui principal este dea face interogarile mult mai simple si unele interogari care la bazele de date relationale nuerau posibile le face posibile Constructiile sale se bazeaza pe grafica si pe limba englezalucru care ajuta la scrierea mai intuitiva a interogarilor Este construit pentru a fi maiintuitiv pentru citire si nu neaparat pentru scriere

Cypher se bazeaza pe modelul Graph Property care ın plus fata de elementelegrafice standard ale nodurilor si muchiilor (numite relatii ın Cypher) adauga etichete siproprietati ca si concepte Nodurile pot avea zero sau mai multe etichete ın timp ce fiecarerelatie este de exact un singur tip Nodurile si relatiile au de asemenea zero sau mai multeproprietati

Chypher este limbajul de interogare folosit la bazele de date Neo4j deci este opti-unea implicita atunci cand se alege Neo4j

443 Maven

Maven 3 este un instrument de management software si de ıntelegere a proiectelorsoftware Pe baza conceptului unui model de obiect de proiect (POM) Maven poategestiona construirea raportarea si documentarea unui proiect printr-o informatie centrala

2httpsneo4jcomdevelopercypher-query-language3httpswwwjavatpointcommaven-tutorial

27

Obiectivul principal al lui Maven este acela de a permite unui dezvoltator sa ınte-leaga starea completa a efortului de dezvoltare ın cel mai scurt timp Avantajele Mavensunt

bull instalarea rapida a proiectului fara fisiere buildxml complicate doar un POMbull procesul de construire este standardizat pentru toate proiectelebull usor de ınvatat si de utilizatbull configurarea unui proiect este foarte rapidabull bine documentat

Am ales sa folosesc Maven deoarece este una din cele mai comune optiuni pentru aimporta librariile ıntr-un proiect si este si cel mai documentat Deci mereu cand esti pusın dificultate poti cauta pe internet sugestii

444 Spring Boot

Spring Boot 4 este un framework din cadrul Spring care ofera setari implicite pentruconfigurarea codului si adnotari pentru a lansa rapid proiecte noi ın executie Urmaresteabordarea rdquoConfigurarea defectiunilor vizionaterdquo pentru a evita un numar mare de linii decod pentru configuratii si pentru a ımbunatati procesul de dezvoltare

Avantajele Spring Boot sunt1 Face foarte usoara dezvoltarea de aplicatii bazate pe Spring cu Java sau Groovy2 Reduce timpul de dezvoltare si creste productivitatea3 Evita scrierea multor linii de cod adnotari si configurare XML4 Este foarte usor de integrat cu alte framework-uri din aceasi familie Spring cum ar

fi Spring JDBC Spring ORM Spring Data Spring Security etc5 Urmareste abordarea rdquoConfigurarea implicita a optiunilorrdquo pentru a reduce efortul

pentru dezvoltatori6 Ofera servere HTTP ıncorporate cum ar fi Tomcat Jetty etc pentru a dezvolta si

testa aplicatiile web foarte usor7 Ofera instrumentul CLI (Command Line Interface) pentru a dezvolta si testa apli-

catiile de tip rdquoSpring Bootrdquo (Java sau Groovy) din linia de comanda foarte usor sirapidAm ales ca optiune pentru partea de backend acest framework deoarece simplifica

foarte mult lucrurile Datorita lui un programator poate sa ısi concentreze mai tare energiape a construi proiectul din punctul de vedere al buissness-ului logic nu din punctul devedere al configurarilor necesare

445 Sencha CMD si ExtJS

Sencha CMD 5 este un instrument linie de comanda cross-platform care ofera multesarcini automate ın ciclul complet de viata al unei aplicatii ExtJS de la generarea unui

4httpswwwjavatpointcomspring-boot-tutorial5httpsdocssenchacomcmd

28

nou proiect la lansarea unei aplicatii ın productie

Sencha Cmd ofera o colectie de caracteristici puternice pentru economisirea timpu-lui care functioneaza ımpreuna cu Sencha ExtJS si Sencha Touch

Ext JS 6 este un framework pur JavaScript pentru construirea de aplicatii webinteractive cross-platform utilizand tehnici precum scripting Ajax DHTML si DOM

Avantajele framework-ului ExtJS sunt

1 Documentatia Extjs este foarte cuprinzatoare si bine ıntretinuta2 Aspectul cheie al bibliotecii EXTJS este suportul de tip cross-browser3 Framework-ul ExtJS ofera o multitudine de elemente UI Aceste elemente includ

forme casete de dialog file arbori si tabele4 Framework-ul ExtJS include suport pentru implementarile Ajax5 ExtJS ofera performante excelente Framework-ul este complet orientat spre obiecte

si este extensibil asta pentru ca este scris ın JavaScript

Pentru partea de frontend se foloseste framework-ul ExtJS deoarece are o arhitec-tura ce se mapeaza foarte bine pe proiectele de frontend si anume arhitectura bazata pecomponente Aceasta face ca ın proiect codul sa fie mult mai organizat si procesul dedezvoltare al proiectului sa fie mult mai scurt prin identificarea mai usoara a erorilor

446 Facebook API(Graph API)

Graph API 7 este modul principal de a pune date ın platforma Facebook si de aobtine date din platforma Facebook Este un API bazat pe HTTP pe care aplicatiile ılpot utiliza pentru interogarea datelor pentru a introduce postari noi pentru gestionareaanunturilor sau pentru a ıncarca fotografii

Este denumit Graph API dupa ideea unui rdquograf socialrdquo - o reprezentare sub formade graf a informatiilor de pe Facebook Este compus din

bull noduri - ın esenta obiecte individuale cum ar fi un utilizator o fotografie o paginasau un comentariu

bull muchii - conexiuni ıntre o colectie de obiecte si un singur obiect cum ar fi fotografiilede pe o pagina sau comentariile de la o fotografie

bull campuri - date despre un obiect cum ar fi ziua de nastere a unui utilizator saunumele paginii

De obicei se utilizeaza noduri pentru a obtine date despre un anumit obiect se uti-lizeaza muchii pentru a obtine colectii de obiecte legate de un singur obiect si se utilizeazacampurile pentru a obtine date despre un singur obiect sau mai multe obiecte dintr-ocolectie

Am folosit Facebook API ca solutie pentru a ımbunatati problema de rdquocold startrdquopentru ca este singurul site pe care marea majoritate a oamenilor au cont si salveazalucrurile care le plac Deci se potrivea perfect peste nevoile aplicatiei mele

6httpdocssenchacomextjs6207httpsdevelopersfacebookcomdocsgraph-api

29

447 Git

Git 8 este un sistem de control a versionarii pentru urmarirea modificarilor ın fisierelede pe computer si coordonarea activitatii asupra acestor fisiere ın randul mai multor per-soane Este utilizat ın principal pentru gestionarea codului sursa ın dezvoltarea de softwaredar poate fi folosit pentru a urmari schimbarile ın orice set de fisiere

Avantaje ale Git

bull Modelul distribuit numai ceea ce se doreste se face publicbull Branching-ul si merging-ul sunt usoarebull Fluxul de lucru este flexibilbull Integritatea datelor este asigurata Deoarece GIT utilizeaza arbori SHA1 coruperea

datelor din motive externe poate fi usor detectatabull Rapid Git este foarte rapid chiar si ın comparatie cu alte sisteme de control a

versionarii

Am folosit Git pentru a avea la proiect un back-up ın caz ca se ıntampla ceva cuproiectul salvat pe calculator

45 Arhitectura conceptuala

In figura 45 este prezentata arhitectura conceptuala a sistemului Acesta este ım-partit ın doua mari parti backend-ul si frontend-ul care comunica ıntre ele si ısi trimitinformatii

Se poate observa ca baza de date este de tip graf mai exact Neo4j si comunica cubackend-ul pentru a putea lucra cu datele stocate Backend-ul este structurat pe nivelefiecare cu un diferit rol si care trebuie parcurs pentru a procesa datele din interfata ınbaza de date Cele trei nivele sunt cel de Repository cel de Service si cel ControllerToate interogarile venite din interfata utilizator ajung ın nivelul de Controller Dupa ceinterogarile trec de securitatea sistemului ajung ın nivelul de Service Acolo se proceseazasi se afla partea de logica a aplicatiei Pentru a interactiona cu baza de date din Servicese apeleaza metodele din nivelul de Repository

In continuare backend-ul comunica prin protocolul HTTP cu interfata grafica cucare interactioneaza clientii aplicatiei Interfata este scrisa ın Ext JS si are o parte de Viewsi o parte de Controller care este cea care comunica cu backend-ul

Pentru partea de autentificare sistemul interactioneaza cu API-ul de la Facebookde la care ia dupa autentificare un access token Cu ajutorul acestuia ia dupa aceea datelenecesare pentru a putea crea un profil utilizatorului

8httpsguidesgithubcomintroductiongit-handbook

30

Figura 45 Arhitectura conceptuala

31

Capitolul 5

Proiectare de Detaliu siImplementare

In acest capitol vor fi prezentate detalii de implementare ale sistemului de recoman-dare incluzand o ımpartire al acestuia ın componentele care ıl cuprind

Obiectivul este de a prezenta arhitectura si modul de implementare al aplicatieipe baza datelor descoperite ın studiul bibliografic de la capitolul trei si cu tehnologiilehotarate la capitolul patru Pe langa asta va fi prezentata si structura bazei de date sideciziile luate pentru securitatea aplicatiei

51 Arhitectura sistemului

Din punctul de vedere al arhitecturii aplicatia se poate considera ca este alcatuitadin patru mari componente

1 API-ul de la Facebook2 Aplicatia client care reprezinta interfata grafica a aplicatiei3 Aplicatia server adica backendul aplicatiei si partea ın care se afla partea de rdquobusiness

logicrdquo4 Baza de date

Partea componenta reprezentata de API-ul de la Facebook este doar o componentacu care aplicatia se integreaza si pe care aceasta o foloseste In interactiunea cu ea interfatada o cerere de autentificare apare o fereastra de la Facebook ın care utilizatorul introducecredentialele de la API-ul de Facebook se primeste ınapoi un access token si cu ajutorulacestuia face o cerere pentru a primi datele personale ale utilizatorului pentru creeareaprofilului utilizator

Urmatoarea parte a aplicatiei este interfata utilizator frontend-ul care reprezintapartea cu care utilizatorul interactioneaza si locul unde ıi sunt afisate informatiile

Cererile din interfata ajung ın a treia parte componenta a sistemului partea deserver adica backend-ul aplicatiei Acolo toate cererile sunt citite si procesate iar raspun-

33

sul lor este trimis la interfata utilizator Aceasta este partea care reprezinta rdquogandireardquoaplicatiei Aceea este componenta care face legatura ıntre cererile utilizatorului din inter-fata si datele stocate ın baza de date

Ultima componenta a aplicatiei o reprezinta baza de date care are ca rol sa stochezedatele despre utilizatori produse si comenzi Ea este o baza de date sub forma de grafde tipul Neo4j Acolo se salveaza entitatile aplicatiei sub forma de noduri si dependenteleıntre acestea sub forma de relatii ıntre aceste noduri

Figura 51 Diagrama de rdquodeploymentrdquo

In figura 51 este prezentata diagrama de rdquodeploymentrdquo a sistemului cu cele patrucomponente ale sistemului Aplicatia client comunica cu API-ul de la Facebook prin pro-tocolul securizat HTTPS cu backend-ul prin protocolul HTTP iar backend-ul cu baza dedate prin JDBC

Aplicatia a putut fi ımpartita ın aceste componente separate deoarece fiecare dintreele poate functiona independent de celelalte comunica cu ele doar prin mesaje Din acestmotiv locul unde ruleaza acestea pot sa fie pe servere diferite In plus daca aplicatiaar fi pusa pe servere pentru utilizatori ar putea fi mai multe servere pe care ruleaza ocomponenta si prin rdquoload balancingrdquo sa se trimita cererile ımpartite ıntre ele

Cum astfel componentele nu depind foarte mult unele de altele si pot rula faraa le interesa de unde le sunt trimise cererile este arhitectura cea mai corecta deoarecedefectarea sau o posibila eroare la una din ele nu o influenteaza cu nimic pe o alta Dacatoate ar rula pe acelasi server o eventuala defectiune a acestuia ar ınsemna o defectiune aıntregului sistem Insa daca exista mai multe noduri si se afla pe servere diferite pot doartoate cererile sa fie redirectionate spre un nod care functioneaza si aplicatia sa functionezepentru clienti la fel ca ınainte

34

Un alt avantaj al arhitecturii ar fi faptul ca la o lansare viitoare catre clienti se poatelansa doar componenta la care s-au facut modificari De asemenea aplicatia ar putea aveape viitor si o componenta mobila Iar cum serverul e independent poate fi acelasi serverfolosit de o alta aplicatie client

511 Arhitectura componentei backend

Arhitectura backend-ului este si ea ımpartita ın mai multe pachete pentru o maibuna structura si pentru o cat mai mica dependenta ıntre diversele componente Astfelcuplarea este minima ıntre clase si eventualele modificari ulterioare pot fi mai usor defacut

Serverul a fost implementat ın Java cu ajutorul framework-ului Spring Boot iarmediul de dezvoltare folosit a fost Intellij IDEA

Din punctul de vedere al ımpartirii arhitectura serverului aplicatiei este structurataın patru pachete si o clasa ın afara acestora Acea clasa este rdquomainrdquo-ul aplicatiei este parteacare trebuie rulata pentru a porni serverul Din cauza ca este o aplicatie Spring Boot si nuuna String singura adnotare necesara pentru a sti ca aceea este clasa rdquoradacinardquoa aplicatieieste SpringBootApplication

Cele patru pachete ale serverului sunt1 Cel de domeniu (domain) cu clasele POJO care reprezinta entitatile din baza de

date2 Cel de rdquomagazierdquo (repositories) care este cel care face direct actiunile ın baza de date3 Cel de serviciu (services) ın care se afla partea de logica a ıntregii aplicatii4 Cel de web ın care se afla clasele de rdquocontrollerrdquo

Figura 52 Diagrama de pachete pentru backend

35

Ca si dependente nivelul de web ıl foloseste pe cel de seviciu cel de serviciu ılfoloseste pe cel de rdquomagazierdquo iar clasele din pachetul de domeniu sunt folosite ın toatecelelalte pachete

In continuare voi prezenta pe rand fiecare nivel al serverului adica fiecare pachet

Figura 53 Diagrama de clase pentru pachetul rdquodomainrdquo

36

Nivelul de domeniu (domain) este alcatuit ın primul rand din clasele care suntentitati ın baza de date Acestea sunt reprezentate de toate clasele ce stocheaza informatiidespre utilizatori si despre produse si comenzi Pe langa informatiile personale despre unutilizator de genul numelui email-ului sau data nasterii care sunt salvate ın entitateapersoana se stocheaza despre utilizator ın clase diferite informatii de genul locului undelocuieste locul unde a copilarit locurilor unde a facut scoala locului unde lucreaza sau celmai important pentru aplicatia aceasta lucrurilor care ıi plac In afara acestor informatiidespre utilizatori sunt si clase cu informatiile despre prieteni despre produse sau desprecomenzi

Din cauza faptului ca aplicatia este de tipul unei retele sociale ın care exista prieteniiıntre persoane exista dependente ıntre toate entitatile aplicatiei Acesta este si motivulpentru care am ales baza de date sub forma de graf pe care sa se mapeze toate acesteentitati sub forma de noduri si toate aceste dependente sub forma de relatii

In pachetul de domeniu se afla si trei subpachete Unul dintre ele este pentruclasele folosite pentru a trata erorile aplicatiei In interiorul acestui pachet se afla douaclase pentru eroare si o exceptie cea folosita ın cazul ın care nu se gaseste ceea ce doresteutilizatorul Pe langa asta este clasa care are ca obiect raspunsul dat de sistem ın cazulunei erori la server Aceasta contine ın interiorul sau pe langa codul erorii si detalii despreeroarea trimisa Aceasta lista de detalii e reprezentata de obiectele de tipul celei de-a treiaclase din pachetul acesta

Celelalte doua subpachete aflate ın acest nivel sunt cele care contin clasele specialede cerere sau raspuns care au ajutat la maparea acestora mai bine In multe cazuri nua fost necesara trimiterea la interfata utilizator a tuturor informatiilor stocate despre oentitate si de aceea am ales sa creez ın aceste cazuri un obiect auxiliar care sa fie folositpe post de raspuns

Figura 54 Diagrama de clase pentru pachetul rdquorepositoriesrdquo

37

Cel de-al doilea nivel al aplicatiei backend este cel de rdquomagazierdquo (repositories) carecontine doar interfete de tip rdquoRepositoryrdquo

Aceste interfete sunt cele care fac operatiile directe asupra entitatilor din baza dedate

Unele interfete doar extind interfata care are deja implementate metodele CRUDsi din acest motiv nu au metode suplimentare iar altele au si metode ın plus care au carol sa execute interogari mai complexe asupra bazei de date In acele metode se pot scrieinterogarile ın Cypher pentru a putea primi informatii despre mai multe noduri sau desprerelatiile dintre acestea sau si pentru a returna doar anumite rezultate care ındeplinescanumite conditii In felul acesta a fost implementata si cererea de oferire a recomandarilorIn acel caz sistemul returneaza produsele care au ın descriere unul din lucrurile care se aflaın lista de obiecte sau servicii primite de la Facebook ca ıi plac utilizatorului

Nivelul de rdquoRepositoryrdquo este folosit direct de cel de-al treiea nivel cel de servi-ciu Acesta este nivelul la care se executa logica aplicatiei unde se comanda modul defunctionare al ıntregii aplicatii

Figura 55 Diagrama de clase pentru pachetul rdquoservicesrdquo

Pe acest nivel ajung toate cererile din server dupa ce trec de verificarile de securitateIn acest pachet se afla si clasa de securitate care face verificarile necesare In aceasta clasaexista o metoda ce se apeleaza la prima cerere cea de salvare a datelor de la Facebookdespre utilizator si care codifica id-ul utilizatorului si ıl trimite pe raspuns ınapoi interfeteiPe langa asta ın acea clasa se afla si o metoda care verifica faptul ca id-ul codificat esteal unui utilizator cu rol corespunzator pentru a face acea cerere

In plus ın acest pachet se afla si toate celelalte clase care fac diverse operatii pedatele din baza de date si dau raspunsuri cererilor din interfata Aici se afla logica care

38

comanda actiunile asupra utilizatorilor asupra prietenilor acestora asupra produselor siasupra comenzilor

Ultima clasa a acestui nivel este cea care se ocupa de trimiterea de email-uri Incazul ın care se face o noua comanda de catre un utilizator toti producatorii produselor depe comanda sunt notificati despre produsele lor pe care le doreste utilizatorul Din serviciulde comanda se apeleaza serviciul de email pentru fiecare producator din lista celor care auproduse care se afla pe lista comenzii utilizatorului

Ultimul si cel mai aproape de interfata utilizator este nivelul de web Acolo se aflatoate clasele de rdquoControllerrdquo ale aplicatiei server

Figura 56 Diagrama de clase pentru pachetul rdquowebrdquo

Toate cererile din interfata utilizator ıncearca sa se mapeze pe rutele declarate ınclase pentru a fi procesate ın metoda corespunzatoare Toata aceasta parte este foarteusor de implementat si mai ales foarte lizibil pentru programatori datorita adnotarilor dinJava Cu ajutorul acestora trebuie doar specificat care este numele URL-ului cererii careeste tipul de obiect asteptat si daca se trimite ca rdquoquery stringrdquo pe URL sau ın interiorulcorpului cererii si tipul raspunsului Pentru fiecare cerere care nu este apelata ın parteaneautentificata a utilizatorului primul lucru care se apeleaza este metoda de securitatepentru a verifica rolul si id-ul utilizatorului Daca din punctul de vedere al securitatii totuleste ın regula se apeleaza metoda corespunzatoare din pachetul de serviciu

39

O singura clasa este diferita de restul ın pachetul de controller si aceea este clasa deeroare Acolo se mapeaza erorile aparute ın timpul cererii si se trimite ınapoi ın interfatagrafica un raspuns cu cod de eroare specific nu numai 500 Generic Application Exceptioncum ar trimite fara aceasta clasa si cu detalii despre motivul aparitiei erorii

Datorita folosirii adnotarilor din java nu a fost necesara folosirea unor rdquodesignpatternrdquo-uri ın sistem De exemplu pentru a folosi ın nivelul de web ceva din pachetulde servicii trebuia doar acel obiect sa aiba adnotarea Autowired si se ınlocuieste atatfolosirea rdquodesign patternrdquo-ului Singleton cat si a celui de Factory Acel obiect nu trebuiecreat sau initializat se face asta implicit datorita adnotarii si de asemenea este folositapeste tot aceeasi instanta

In concluzie toate cererile venite din interfata grafica ajung ın nivelul de rdquocontrollerrdquode unde sunt trimise la cel de rdquoservicerdquopentru a fi procesate si facute eventualele modificarinecesare ın baza de date ca apoi raspunsul sa fie trimis ınapoi spre aplicatia client pentruafisare

512 Arhitectura componentei frontend

A doua componenta implementata a sistemului este aplicatia client frontend-ulAceasta a fost scrisa ın Java Script cu ajutorul framework-ului Ext JS compilarea

se face cu ajutorul Sencha CMD si mediul de implementare a fost IntelliJ IdeaCu ajutorul framework-ului Ext JS se scriu componente care apoi se initializeaza

unele pe altele Aplicatia porneste cu fisierul Applicationjs care este un fel de rdquomainrdquopentru aplicatie Aceasta initializeaza alte componente care la randul lor includ altecomponente si tot asa Structura poate fi foarte usor comparata cu una arborescenta dinacest punct de vedere

Framework-ul a fost creat sa functioneze ın felul acesta pentru ca scopul componen-telor este sa fie scrise ın asa fel ıncat sa poata pe viitor sa fie utilizate din nou Una dindorintele majore ın programare tot timpul este de a se scrie cod ıntr-o maniera ın care safie cat mai reutilizabil Iar framework-ul Ext JS exact asta ıncearca

Arhitectura aplicatiei client se gaseste ın figura 57 si este la randul ei ımpartita ınpachete ca si cea de server Similar cu pachetul de rdquodomainrdquo de la aplicatia de backendeste pachetul rdquomodelrdquo al interfetei utilizator Aici sunt rdquoclaserdquo care sunt simple POJO sicare sunt apoi folosite ın nivelele urmatoare Sunt mai putine decat clasele din rdquostorerdquodeoarece daca raspunsul de la server nu trebuie procesat nu sunt necesare se pot mapadirect obiectele din rdquostorerdquo pe componentele interfetei utilizator

Urmatorul nivel este cel pe care se afla clasele de rdquostorerdquo Acestea sunt cele careexecuta cererea spre backend si face legatura ıntre client si server Daca are o clasa derdquomodelrdquodeclarata atunci populeaza acel obiect cu datele primite de la server iar ın cazul ıncare nu este declarat un model se trimit datele exact asa cum s-au primit la nivelul urmatorde rdquoviewrdquo Acest nivel seamana din punct de vedere al functiei cu cel de rdquorepositoryrdquo de laaplicatia server deoarece ambele au rol de legatura Aceea facea legatura ıntre aplicatiesi baza de date si aceasta face legatura ıntre aplicatia client si aplicatia server

40

Figura 57 Diagrama de clase pentru aplicatia web

Cel de-al treilea pachet al aplicatiei este cel de rdquoviewrdquo In acest pachet se afla claselecare alcatuiesc partea vizuala a aplicatiei La randul ei si aceasta este alcatuita tot dincomponente Aplicatia deschide ın primul rand Main-ul care determina aparitia paginii deHome si afisarea ın meniu a optiunilor posibile ın functie de autentificare si rol Clasele deaici se executa de fapt la deschiderea aplicatiei fiind rdquosingle page applicationrdquo si tot atuncise ıncarca pe pagina componentele Ca si arhitectura a pachetului acesta este ımpartit larandul sau ın subpachete Pentru o mai buna organizare exista patru subpachete cateunul pentru fiecare tip de utilizator In felul acesta toate rdquoviewrdquo-urile care sunt specificeunui utilizator cu un anumit rol se afla ın acelasi subpachet

Cele patru subpachete existente ın pachetul rdquoviewrdquo sunt

1 Pachetul rdquomainrdquo care cuprinde rdquoviewrdquo-urile care se afla ın partea neautentificata aaplicatiei

2 Pachetul rdquoclientrdquo continand rdquoviewrdquo-urile pe care le poate accesa un utilizator simplu3 Pachetul rdquoproducerrdquo specific actiunilor unui utilizator care are rol de producator4 Pachetul rdquoadminrdquo care contine toate rdquoviewrdquo-urile care ıi apar unui utilizator care este

administrator al aplicatiei

Ultimul pachet si nivel al aplicatiei client este cel de rdquocontrollerrdquo In acest pachet

41

se afla clasele care fac actiunile din interfata grafica In timp ce pachetul rdquoviewrdquo continedoar partea grafica a aplicatiei adica modul ın care aceasta trebuie sa arate pachetulrdquocontrollerrdquo contine actiunea acestora modul ın care aplicatia trebuie sa functioneze

Ca si arhitectura si acest pachet a fost ımpartit la randul lui tot ın cele patrusubpachete ca si pachetul rdquoviewrdquo adica rdquomainrdquo rdquoclientrdquo rdquoproducerrdquo si rdquoadminrdquo In pluspentru a fi usor de gasit ce clasa de rdquocontrollerrdquo apartine carui rdquoviewrdquo am ales ca cele douasa aiba acelasi nume In felul acesta daca se doreste sa se gaseasca actiunile unui rdquoviewrdquose poate cauta dupa o clasa cu acelasi nume ın pachetul rdquocontrollerrdquo Numarul claselor dinacest pachet este mai mic decat cel al claselor din rdquoviewrdquo deoarece nu toate paginile dininterfata au actiuni suplimentare Daca singura actiune este ıncarcarea paginii cu date dela server adica doar o actiune simpla de GET datele se ıncarca cu ajutorul rdquostorerdquo-ului laıncarcarea paginii si nu este necesara nici o actiune suplimentara Paginile pe care se potface si actiuni de alt gen sau se deschid noi ferestre au nevoie de clase de rdquocontrollerrdquo

In concluzie arhitectura aplicatiei client este una bazata pe componente care ıncearcasa foloseasca cat mai multe clase reutilizabile

52 Structura bazei de date

Baza de date a aplicatiei este de tip graf de tipul Neo4j Pentru utilizare exista unprogram numit Neo4j ce trebuie instalat Acest program are si o interfata grafica ın carese pot vizualiza datele sub forma grafica si ın care se pot scrie de asemenea si interogariın limbajul acestei baze de date adica Cypher

Fiind o baza de date sub forma de graf datele stocate sunt salvate ın structurade date sub forma de noduri si relatii Entitatile din pachetul de domeniu din aplicatiabackend se gasesc ın baza de date sub forma unor noduri iar dependentele dintre nodurise mapeaza ın baza de date sub forma unor relatii Un element diferit fata de alte tipuride baze de date este faptul ca pe relatiile dintre noduri se pot salva atribute cum este ınaplicatie cazul pentru prieteniile dintre persoane In cazul acestora pe relatia dintre nodurise salveaza daca prietenia a fost sau nu acceptata

Pentru fiecare clasa POJO din aplicatia server clasa ce are doar metodele get si setsi se afla ın pachetul domain exista cate un tip de nod diferit ın baza de date cum estesi marcat ın diferite culori ın figura 58 Fiecare tip de nod are atributele proprii care potlua valori sau pot fi nule Iar fiecare obiect din Java reprezinta un nod diferit ın baza dedate

Neo4j a fost cea mai buna optiune pentru baza de date pentru ca aplicatia poate ficonsiderata o retea sociala Acest lucru se datoreaza relatiilor de prietenie dintre persoanesi a multiplelor relatii ıntre noduri Toate nodurile se afla ın acceasi componenta conexadeci nu exista noduri izolate care sa nu aiba nici o legatura cu nici un alt nod

Datorita acestei structuri a bazei de date este posibila implementarea cererii derecomandare ca o simpla interogare ın baza de date aceasta fiind cea mai simpla metodade implementare a unui sistem de genul acesta una mult mai complexa ar fi fost un

42

algoritm de ınvatare care sa ınvete tipare ale utilizatorilor si sa recomande cadouri pe bazaacestor informatii

Figura 58 Diagrama bazei de date pentru doi utilizatori

Un alt avantaj al acestui tip de baza de date este faptul ca datele nu sunt duplicateın baza de date Spre exemplu daca mai multi utilizatori au ca locatie acelasi oras nu secreaza cate un nod cu acea locatie de mai multe ori ci acel unic nod va avea cate o relatiecu fiecare utilizator care are ca locatie acel oras

In concluzie structura bazei de date a fost aleasa ın acest fel datorita tipului apli-catiei adica asemanatoare cu o retea sociala si datorita implementarii simple a unui sistemde recomandare pe o asemenea baza de date

53 Fluxul pentru diferite operatii

Pentru aplicatie cele mai importante cazuri de utilizare sunt salvarea informati-ilor despre utilizator primite de la Facebook pentru crearea unui profil si recomandareacadourilor pentru un utilizator al aplicatiei Din aceasta cauza cele doua cazuri de utilizarevor fi prezentate mai ın detaliu ın continuare

43

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 25: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

Acest flux poate aparea la pasul 11221 Utilizatorul deschide pagina de Facebook222 Utilizatorul ısi face un cont pe pagina de Facebook si ısi completeaza

date despre el223 Utilizatorul revine la aplicatia de recomandare cadouri si ıncearca din

nou sa se autentifice ın aplicatie224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca utilizatorul nu e multumit de recomandariAcest flux poate aparea la pasul 14231 Utilizatorul sterge din cos cadourile pe care nu le mai doreste si revine

la pagina de recomandari232 Utilizatorul adauga alte cadouri ın cos233 Cazul de utilizare continua de la pasul 141

24 Flux-ul alternativ daca utilizatorul nu e multumit de produsele din cosul decumparaturi

Acest flux poate aparea la pasul 16241 Utilizatorul revine ınapoi la formularul cu introducerea datelor despre

beneficiarul cadoului242 Utilizatorul completeaza din nou datele243 Cazul de utilizare continua de la pasul 13

Preconditii

1 Utilizatorul trebuie sa aiba un cont de Facebook pentru a se putea autentifica ınaplicatie

2 Utilizatorul trebuie sa fie autentificat ın aplicatie pentru a putea face orice actiunedin acest caz de utilizare

3 Utilizatorul trebuie sa deschida sectiunea de recomandare cadouri pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noua comanda este salvata ın baza de date2 Comanda apare ın sectiunea de comenzi a utilizatorului ımpreuna cu statusul ei

curent3 Producatorul este notificat ca are o noua comanda

432 Adaugare produs

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unproducator trebuie sa le urmeze pentru a introduce un nou produs ın aplicatie

20

Actorul principal

Utilizatorii cu rol de producator sau cu rol de administrator

Parti interesate si interese

Producatorul care doreste sa introduca produsul nou ın aplicatie

Utilizatorii simpli care au o mai mare varietate de produse din care sa li se reco-mande cadouri

Figura 43 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo

21

Flux de evenimente

Use-Case Start

Cazul de utilizare ıncepe atunci cand producatorul porneste aplicatia

11 Producatorul verifica daca are cont de Facebook si daca are urmeaza pasul111 daca nu 22

111 Producatorul se autentifica ın aplicatie cu ajutorul credentialelor de laFacebook

12 Producatorul deschide sectiunea de adaugare produs

13 Producatorul completeaza datele necesare despre noul produs ımpreuna cu tipulde persoana si eveniment care i s-ar potrivi

14 Producatorul verifica daca este multumit de datele introduse si daca da urmeazapasul 141 daca nu 23

141 Producatorul efectueaza operatia de adaugare produs

15 Sistemul adauga un nou produs ın baza de date

16 Sistemul notifica producatorul ca noul produs a fost introdus cu succes

17 Producatorul se dezautentifica din aplicatie

Use-Case End

Producatorul se va deconecta din aplicatie si o va ınchide

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Producatorul deschide sectiunea de adaugare produs

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca producatorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Producatorul deschide pagina de Facebook

222 Producatorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Producatorul revine la aplicatia de recomandare cadouri si ıncearca dinnou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca Producatorul nu e multumit de datele introduse despreprodus

Acest flux poate aparea la pasul 14

231 Producatorul sterge datele gresite despre produs

232 Producatorul adauga alte date despre produs

233 Cazul de utilizare continua de la pasul 141

22

Preconditii

1 Producatorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Producatorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Producatorul trebuie sa aiba cont cu rol de rdquoproducatorrdquo sau rdquoadminrdquo pentru aputea face operatia aceasta

4 Producatorul trebuie sa deschida sectiunea de adaugare produs pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noul produs este salvat ın baza de date2 Produsul poate fi adaugat la recomandarile unui utilizator din acel moment

433 Modificare rol utilizator

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unadministrator trebuie sa le urmeze pentru a modifica rolul unui utilizator al aplicatiei

Actorul principal

Un utilizator al aplicatiei care are rol de administrator

Parti interesate si interese

Administratorul care doreste sa modifice rolul unui utilizatorUtilizatorul care doreste sa ısi schimbe rolul

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand administratorul porneste aplicatia11 Administratorul verifica daca are cont de Facebook si daca are urmeaza pasul

111 daca nu 22111 Administratorul se autentifica ın aplicatie cu ajutorul credentialelor de

la Facebook12 Administratorul deschide sectiunea de utilizatori13 Sistemul ıi returneaza administratorului utilizatorii care nu sunt administratori14 Administratorul modifica rolul utilizatorului din utilizator simplu ın producator

sau invers

23

15 Administratorul cere executarea modificarii

16 Sistemul executa modificarea iar ın caz de succes urmeaza pasul 161 si ın cazde eroare pasul 23

161 Sistemul notifica administratorul ca modificarea a fost efectuata cusucces

17 Utilizatorul se dezautentifica din aplicatie

Use-Case End

Administratorul se va deconecta din aplicatie si o va ınchide

Figura 44 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo

24

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Administratorul deschide sectiunea de utilizatori

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca administratorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Administratorul deschide pagina de Facebook

222 Administratorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Administratorul revine la aplicatia de recomandare cadouri si ıncearcadin nou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca sistemul returneaza o eroare la modificarea utilizatorului

Acest flux poate aparea la pasul 16

231 Sistemul returneaza un mesaj de eroare la modificarea utilizatorului

232 Aplicatia afiseaza mesajul de eroare administratorului

233 Cazul de utilizare continua de la pasul 15

Preconditii

1 Administratorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Administratorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Utilizatorul trebuie sa aiba cont cu rol de administrator pentru a putea efectuaorice actiune din acest caz de utilizare

4 Administratorul trebuie sa deschida sectiunea utilizatori pentru a putea ındeplinicerintele din cazul de utilizare

Postconditii

1 Noul rol al utilizatorului este salvat ın baza de date

2 La urmatoarea autentificare a utilizatorului acesta va observa ca interfata si maiprecis meniurile si actiunile care le poate face ıi vor fi diferite

25

44 Perspectiva tehnologica

441 Neo4j

Neo4j 1 este un sistem de gestionare a bazelor de date sub forma de graf dezvoltatde Neo4j Inc Descris de dezvoltatorii sai ca o baza de date tranzactionala compatibilacu ACID Neo4j este cea mai populara baza de date sub forma de graf dupa clasamentulDB-Engines

Baza de date Neo4j (ca si orice alta baza de date sub forma de graf) este foartediferita de o baza de date relationala cum ar fi MS Access SQL Server MySQL etcBazele de date relationale utilizeaza tabele randuri si coloane pentru stocarea datelor

Neo4j nu utilizeaza tabele randuri si coloane pentru stocarea sau prezentarea datelorci noduri si relatii

Neo4j este foarte potrivit pentru stocarea datelor care au multe relatii interconec-tate Acestea sunt de fapt aplicatiile ın care merita sa fie folosite De fapt bazele de datesub forma de graf cum este Neo4j sunt mult mai bune la tratarea datelor interconectatedecat bazele de date relationale

Acest lucru se datoreaza faptului ca modelul sub forma de graf nu necesita de obiceio schema predefinita Nu e nevoie sa se creeze structura bazei de date ınainte de a fiıncarcate datele asa cum se face la o baza de date relationala

Dar principalul motiv pentru care Neo4j este mai bun pentru datele relationalepentru acest tip de aplicatii este modul ın care permite crearea relatiilor Neo4j este con-struit ın jurul relatiilor si atunci nu este nevoie sa se configureze chei primare constrangerichei straine pentru a predetermina nodurile care pot avea o relatie si la ce date Cu Neo4jse poate adauga orice legatura ıntre orice nod ori de cate ori este nevoie

Neo4j are aceste calitati care nu se gasesc nici la celelalte baze de date NoSQLBazele de date non-relationale pe langa cele sub forma de graf sunt cele de tip coloanade tip document de tip cheie-valoare si de tip multi-model Nici unul din aceste tipuri nuau ca principala functionalitate maparea relatiilor si facilitatea interogarilor ıntr-o baza dedate cu multe relatii ıntre entitati

Generarea de recomandari personalizate este unul dintre cele mai frecvente cazuride utilizare a unei baze de date sub forma de graf Unele dintre principalele beneficii aleutilizarii grafurilor pentru a genera recomandari includ

- Performanta Lipsa indexurilor permite calcularea recomandarilor ın timp realasigurand ca recomandarea este ıntotdeauna relevanta si reflecta informatii actualizate

- Model de date Modelul de graf cu proprietati permite combinarea cu usurinta aseturilor de date din mai multe surse

Un alt avantaj al bazelor de date sub forma de graf Neo4j este faptul ca respectatoate principiile din modelul de consistenta ACID

Garantia data de principiile ACID este ca ofera un mediu sigur ın care sa functionezedatele Acronimul ACID reprezinta

1httpsneo4jcomuse-casesreal-time-recommendation-engine

26

bull Atomic Toate operatiile dintr-o tranzactie reusesc sau fiecare operatie este reluatabull Consistent La finalizarea unei tranzactii baza de date este solida din punct de

vedere structuralbull Izolat Tranzactiile nu se lupta una cu cealalta Accesul controversat la date este

moderat de baza de date astfel ıncat tranzactiile par sa se execute succesivbull Durabil Rezultatele aplicarii unei tranzactii sunt permanente chiar si ın cazul unor

defectiuniCand vine vorba de tehnologiile NoSQL cele mai multe baze de date sub forma de

graf (inclusiv Neo4j) utilizeaza un model de consistenta ACID pentru a asigura ca datelesunt stocate ın siguranta si ın mod consecvent

Am ales baza de date sub forma de graf ca optiune pentru stocarea datelor deoarecedin toate lucrarile si articolele citite a fost optiunea cea mai buna pentru un sistem derecomandare Deci acesta se mapeaza perfect pe cerintele functionale ale proiectului Sidin optiunile de baze de date sub forma de graf Noe4j a avut de departe cele mai multeavantaje ea fiind si cea mai utilizata

442 Cypher

Cypher 2 este un limbaj declarativ de interogare pentru bazele de date sub formade graf care permite interogarea si actualizarea rapida a datelor Cypher este un limbajrelativ simplu dar foarte puternic Interogarile foarte complexe ale bazei de date pot fiusor exprimate prin intermediul limbajului Cypher

Este conceput pentru a fi un limbaj de interogare uman Scopul lui principal este dea face interogarile mult mai simple si unele interogari care la bazele de date relationale nuerau posibile le face posibile Constructiile sale se bazeaza pe grafica si pe limba englezalucru care ajuta la scrierea mai intuitiva a interogarilor Este construit pentru a fi maiintuitiv pentru citire si nu neaparat pentru scriere

Cypher se bazeaza pe modelul Graph Property care ın plus fata de elementelegrafice standard ale nodurilor si muchiilor (numite relatii ın Cypher) adauga etichete siproprietati ca si concepte Nodurile pot avea zero sau mai multe etichete ın timp ce fiecarerelatie este de exact un singur tip Nodurile si relatiile au de asemenea zero sau mai multeproprietati

Chypher este limbajul de interogare folosit la bazele de date Neo4j deci este opti-unea implicita atunci cand se alege Neo4j

443 Maven

Maven 3 este un instrument de management software si de ıntelegere a proiectelorsoftware Pe baza conceptului unui model de obiect de proiect (POM) Maven poategestiona construirea raportarea si documentarea unui proiect printr-o informatie centrala

2httpsneo4jcomdevelopercypher-query-language3httpswwwjavatpointcommaven-tutorial

27

Obiectivul principal al lui Maven este acela de a permite unui dezvoltator sa ınte-leaga starea completa a efortului de dezvoltare ın cel mai scurt timp Avantajele Mavensunt

bull instalarea rapida a proiectului fara fisiere buildxml complicate doar un POMbull procesul de construire este standardizat pentru toate proiectelebull usor de ınvatat si de utilizatbull configurarea unui proiect este foarte rapidabull bine documentat

Am ales sa folosesc Maven deoarece este una din cele mai comune optiuni pentru aimporta librariile ıntr-un proiect si este si cel mai documentat Deci mereu cand esti pusın dificultate poti cauta pe internet sugestii

444 Spring Boot

Spring Boot 4 este un framework din cadrul Spring care ofera setari implicite pentruconfigurarea codului si adnotari pentru a lansa rapid proiecte noi ın executie Urmaresteabordarea rdquoConfigurarea defectiunilor vizionaterdquo pentru a evita un numar mare de linii decod pentru configuratii si pentru a ımbunatati procesul de dezvoltare

Avantajele Spring Boot sunt1 Face foarte usoara dezvoltarea de aplicatii bazate pe Spring cu Java sau Groovy2 Reduce timpul de dezvoltare si creste productivitatea3 Evita scrierea multor linii de cod adnotari si configurare XML4 Este foarte usor de integrat cu alte framework-uri din aceasi familie Spring cum ar

fi Spring JDBC Spring ORM Spring Data Spring Security etc5 Urmareste abordarea rdquoConfigurarea implicita a optiunilorrdquo pentru a reduce efortul

pentru dezvoltatori6 Ofera servere HTTP ıncorporate cum ar fi Tomcat Jetty etc pentru a dezvolta si

testa aplicatiile web foarte usor7 Ofera instrumentul CLI (Command Line Interface) pentru a dezvolta si testa apli-

catiile de tip rdquoSpring Bootrdquo (Java sau Groovy) din linia de comanda foarte usor sirapidAm ales ca optiune pentru partea de backend acest framework deoarece simplifica

foarte mult lucrurile Datorita lui un programator poate sa ısi concentreze mai tare energiape a construi proiectul din punctul de vedere al buissness-ului logic nu din punctul devedere al configurarilor necesare

445 Sencha CMD si ExtJS

Sencha CMD 5 este un instrument linie de comanda cross-platform care ofera multesarcini automate ın ciclul complet de viata al unei aplicatii ExtJS de la generarea unui

4httpswwwjavatpointcomspring-boot-tutorial5httpsdocssenchacomcmd

28

nou proiect la lansarea unei aplicatii ın productie

Sencha Cmd ofera o colectie de caracteristici puternice pentru economisirea timpu-lui care functioneaza ımpreuna cu Sencha ExtJS si Sencha Touch

Ext JS 6 este un framework pur JavaScript pentru construirea de aplicatii webinteractive cross-platform utilizand tehnici precum scripting Ajax DHTML si DOM

Avantajele framework-ului ExtJS sunt

1 Documentatia Extjs este foarte cuprinzatoare si bine ıntretinuta2 Aspectul cheie al bibliotecii EXTJS este suportul de tip cross-browser3 Framework-ul ExtJS ofera o multitudine de elemente UI Aceste elemente includ

forme casete de dialog file arbori si tabele4 Framework-ul ExtJS include suport pentru implementarile Ajax5 ExtJS ofera performante excelente Framework-ul este complet orientat spre obiecte

si este extensibil asta pentru ca este scris ın JavaScript

Pentru partea de frontend se foloseste framework-ul ExtJS deoarece are o arhitec-tura ce se mapeaza foarte bine pe proiectele de frontend si anume arhitectura bazata pecomponente Aceasta face ca ın proiect codul sa fie mult mai organizat si procesul dedezvoltare al proiectului sa fie mult mai scurt prin identificarea mai usoara a erorilor

446 Facebook API(Graph API)

Graph API 7 este modul principal de a pune date ın platforma Facebook si de aobtine date din platforma Facebook Este un API bazat pe HTTP pe care aplicatiile ılpot utiliza pentru interogarea datelor pentru a introduce postari noi pentru gestionareaanunturilor sau pentru a ıncarca fotografii

Este denumit Graph API dupa ideea unui rdquograf socialrdquo - o reprezentare sub formade graf a informatiilor de pe Facebook Este compus din

bull noduri - ın esenta obiecte individuale cum ar fi un utilizator o fotografie o paginasau un comentariu

bull muchii - conexiuni ıntre o colectie de obiecte si un singur obiect cum ar fi fotografiilede pe o pagina sau comentariile de la o fotografie

bull campuri - date despre un obiect cum ar fi ziua de nastere a unui utilizator saunumele paginii

De obicei se utilizeaza noduri pentru a obtine date despre un anumit obiect se uti-lizeaza muchii pentru a obtine colectii de obiecte legate de un singur obiect si se utilizeazacampurile pentru a obtine date despre un singur obiect sau mai multe obiecte dintr-ocolectie

Am folosit Facebook API ca solutie pentru a ımbunatati problema de rdquocold startrdquopentru ca este singurul site pe care marea majoritate a oamenilor au cont si salveazalucrurile care le plac Deci se potrivea perfect peste nevoile aplicatiei mele

6httpdocssenchacomextjs6207httpsdevelopersfacebookcomdocsgraph-api

29

447 Git

Git 8 este un sistem de control a versionarii pentru urmarirea modificarilor ın fisierelede pe computer si coordonarea activitatii asupra acestor fisiere ın randul mai multor per-soane Este utilizat ın principal pentru gestionarea codului sursa ın dezvoltarea de softwaredar poate fi folosit pentru a urmari schimbarile ın orice set de fisiere

Avantaje ale Git

bull Modelul distribuit numai ceea ce se doreste se face publicbull Branching-ul si merging-ul sunt usoarebull Fluxul de lucru este flexibilbull Integritatea datelor este asigurata Deoarece GIT utilizeaza arbori SHA1 coruperea

datelor din motive externe poate fi usor detectatabull Rapid Git este foarte rapid chiar si ın comparatie cu alte sisteme de control a

versionarii

Am folosit Git pentru a avea la proiect un back-up ın caz ca se ıntampla ceva cuproiectul salvat pe calculator

45 Arhitectura conceptuala

In figura 45 este prezentata arhitectura conceptuala a sistemului Acesta este ım-partit ın doua mari parti backend-ul si frontend-ul care comunica ıntre ele si ısi trimitinformatii

Se poate observa ca baza de date este de tip graf mai exact Neo4j si comunica cubackend-ul pentru a putea lucra cu datele stocate Backend-ul este structurat pe nivelefiecare cu un diferit rol si care trebuie parcurs pentru a procesa datele din interfata ınbaza de date Cele trei nivele sunt cel de Repository cel de Service si cel ControllerToate interogarile venite din interfata utilizator ajung ın nivelul de Controller Dupa ceinterogarile trec de securitatea sistemului ajung ın nivelul de Service Acolo se proceseazasi se afla partea de logica a aplicatiei Pentru a interactiona cu baza de date din Servicese apeleaza metodele din nivelul de Repository

In continuare backend-ul comunica prin protocolul HTTP cu interfata grafica cucare interactioneaza clientii aplicatiei Interfata este scrisa ın Ext JS si are o parte de Viewsi o parte de Controller care este cea care comunica cu backend-ul

Pentru partea de autentificare sistemul interactioneaza cu API-ul de la Facebookde la care ia dupa autentificare un access token Cu ajutorul acestuia ia dupa aceea datelenecesare pentru a putea crea un profil utilizatorului

8httpsguidesgithubcomintroductiongit-handbook

30

Figura 45 Arhitectura conceptuala

31

Capitolul 5

Proiectare de Detaliu siImplementare

In acest capitol vor fi prezentate detalii de implementare ale sistemului de recoman-dare incluzand o ımpartire al acestuia ın componentele care ıl cuprind

Obiectivul este de a prezenta arhitectura si modul de implementare al aplicatieipe baza datelor descoperite ın studiul bibliografic de la capitolul trei si cu tehnologiilehotarate la capitolul patru Pe langa asta va fi prezentata si structura bazei de date sideciziile luate pentru securitatea aplicatiei

51 Arhitectura sistemului

Din punctul de vedere al arhitecturii aplicatia se poate considera ca este alcatuitadin patru mari componente

1 API-ul de la Facebook2 Aplicatia client care reprezinta interfata grafica a aplicatiei3 Aplicatia server adica backendul aplicatiei si partea ın care se afla partea de rdquobusiness

logicrdquo4 Baza de date

Partea componenta reprezentata de API-ul de la Facebook este doar o componentacu care aplicatia se integreaza si pe care aceasta o foloseste In interactiunea cu ea interfatada o cerere de autentificare apare o fereastra de la Facebook ın care utilizatorul introducecredentialele de la API-ul de Facebook se primeste ınapoi un access token si cu ajutorulacestuia face o cerere pentru a primi datele personale ale utilizatorului pentru creeareaprofilului utilizator

Urmatoarea parte a aplicatiei este interfata utilizator frontend-ul care reprezintapartea cu care utilizatorul interactioneaza si locul unde ıi sunt afisate informatiile

Cererile din interfata ajung ın a treia parte componenta a sistemului partea deserver adica backend-ul aplicatiei Acolo toate cererile sunt citite si procesate iar raspun-

33

sul lor este trimis la interfata utilizator Aceasta este partea care reprezinta rdquogandireardquoaplicatiei Aceea este componenta care face legatura ıntre cererile utilizatorului din inter-fata si datele stocate ın baza de date

Ultima componenta a aplicatiei o reprezinta baza de date care are ca rol sa stochezedatele despre utilizatori produse si comenzi Ea este o baza de date sub forma de grafde tipul Neo4j Acolo se salveaza entitatile aplicatiei sub forma de noduri si dependenteleıntre acestea sub forma de relatii ıntre aceste noduri

Figura 51 Diagrama de rdquodeploymentrdquo

In figura 51 este prezentata diagrama de rdquodeploymentrdquo a sistemului cu cele patrucomponente ale sistemului Aplicatia client comunica cu API-ul de la Facebook prin pro-tocolul securizat HTTPS cu backend-ul prin protocolul HTTP iar backend-ul cu baza dedate prin JDBC

Aplicatia a putut fi ımpartita ın aceste componente separate deoarece fiecare dintreele poate functiona independent de celelalte comunica cu ele doar prin mesaje Din acestmotiv locul unde ruleaza acestea pot sa fie pe servere diferite In plus daca aplicatiaar fi pusa pe servere pentru utilizatori ar putea fi mai multe servere pe care ruleaza ocomponenta si prin rdquoload balancingrdquo sa se trimita cererile ımpartite ıntre ele

Cum astfel componentele nu depind foarte mult unele de altele si pot rula faraa le interesa de unde le sunt trimise cererile este arhitectura cea mai corecta deoarecedefectarea sau o posibila eroare la una din ele nu o influenteaza cu nimic pe o alta Dacatoate ar rula pe acelasi server o eventuala defectiune a acestuia ar ınsemna o defectiune aıntregului sistem Insa daca exista mai multe noduri si se afla pe servere diferite pot doartoate cererile sa fie redirectionate spre un nod care functioneaza si aplicatia sa functionezepentru clienti la fel ca ınainte

34

Un alt avantaj al arhitecturii ar fi faptul ca la o lansare viitoare catre clienti se poatelansa doar componenta la care s-au facut modificari De asemenea aplicatia ar putea aveape viitor si o componenta mobila Iar cum serverul e independent poate fi acelasi serverfolosit de o alta aplicatie client

511 Arhitectura componentei backend

Arhitectura backend-ului este si ea ımpartita ın mai multe pachete pentru o maibuna structura si pentru o cat mai mica dependenta ıntre diversele componente Astfelcuplarea este minima ıntre clase si eventualele modificari ulterioare pot fi mai usor defacut

Serverul a fost implementat ın Java cu ajutorul framework-ului Spring Boot iarmediul de dezvoltare folosit a fost Intellij IDEA

Din punctul de vedere al ımpartirii arhitectura serverului aplicatiei este structurataın patru pachete si o clasa ın afara acestora Acea clasa este rdquomainrdquo-ul aplicatiei este parteacare trebuie rulata pentru a porni serverul Din cauza ca este o aplicatie Spring Boot si nuuna String singura adnotare necesara pentru a sti ca aceea este clasa rdquoradacinardquoa aplicatieieste SpringBootApplication

Cele patru pachete ale serverului sunt1 Cel de domeniu (domain) cu clasele POJO care reprezinta entitatile din baza de

date2 Cel de rdquomagazierdquo (repositories) care este cel care face direct actiunile ın baza de date3 Cel de serviciu (services) ın care se afla partea de logica a ıntregii aplicatii4 Cel de web ın care se afla clasele de rdquocontrollerrdquo

Figura 52 Diagrama de pachete pentru backend

35

Ca si dependente nivelul de web ıl foloseste pe cel de seviciu cel de serviciu ılfoloseste pe cel de rdquomagazierdquo iar clasele din pachetul de domeniu sunt folosite ın toatecelelalte pachete

In continuare voi prezenta pe rand fiecare nivel al serverului adica fiecare pachet

Figura 53 Diagrama de clase pentru pachetul rdquodomainrdquo

36

Nivelul de domeniu (domain) este alcatuit ın primul rand din clasele care suntentitati ın baza de date Acestea sunt reprezentate de toate clasele ce stocheaza informatiidespre utilizatori si despre produse si comenzi Pe langa informatiile personale despre unutilizator de genul numelui email-ului sau data nasterii care sunt salvate ın entitateapersoana se stocheaza despre utilizator ın clase diferite informatii de genul locului undelocuieste locul unde a copilarit locurilor unde a facut scoala locului unde lucreaza sau celmai important pentru aplicatia aceasta lucrurilor care ıi plac In afara acestor informatiidespre utilizatori sunt si clase cu informatiile despre prieteni despre produse sau desprecomenzi

Din cauza faptului ca aplicatia este de tipul unei retele sociale ın care exista prieteniiıntre persoane exista dependente ıntre toate entitatile aplicatiei Acesta este si motivulpentru care am ales baza de date sub forma de graf pe care sa se mapeze toate acesteentitati sub forma de noduri si toate aceste dependente sub forma de relatii

In pachetul de domeniu se afla si trei subpachete Unul dintre ele este pentruclasele folosite pentru a trata erorile aplicatiei In interiorul acestui pachet se afla douaclase pentru eroare si o exceptie cea folosita ın cazul ın care nu se gaseste ceea ce doresteutilizatorul Pe langa asta este clasa care are ca obiect raspunsul dat de sistem ın cazulunei erori la server Aceasta contine ın interiorul sau pe langa codul erorii si detalii despreeroarea trimisa Aceasta lista de detalii e reprezentata de obiectele de tipul celei de-a treiaclase din pachetul acesta

Celelalte doua subpachete aflate ın acest nivel sunt cele care contin clasele specialede cerere sau raspuns care au ajutat la maparea acestora mai bine In multe cazuri nua fost necesara trimiterea la interfata utilizator a tuturor informatiilor stocate despre oentitate si de aceea am ales sa creez ın aceste cazuri un obiect auxiliar care sa fie folositpe post de raspuns

Figura 54 Diagrama de clase pentru pachetul rdquorepositoriesrdquo

37

Cel de-al doilea nivel al aplicatiei backend este cel de rdquomagazierdquo (repositories) carecontine doar interfete de tip rdquoRepositoryrdquo

Aceste interfete sunt cele care fac operatiile directe asupra entitatilor din baza dedate

Unele interfete doar extind interfata care are deja implementate metodele CRUDsi din acest motiv nu au metode suplimentare iar altele au si metode ın plus care au carol sa execute interogari mai complexe asupra bazei de date In acele metode se pot scrieinterogarile ın Cypher pentru a putea primi informatii despre mai multe noduri sau desprerelatiile dintre acestea sau si pentru a returna doar anumite rezultate care ındeplinescanumite conditii In felul acesta a fost implementata si cererea de oferire a recomandarilorIn acel caz sistemul returneaza produsele care au ın descriere unul din lucrurile care se aflaın lista de obiecte sau servicii primite de la Facebook ca ıi plac utilizatorului

Nivelul de rdquoRepositoryrdquo este folosit direct de cel de-al treiea nivel cel de servi-ciu Acesta este nivelul la care se executa logica aplicatiei unde se comanda modul defunctionare al ıntregii aplicatii

Figura 55 Diagrama de clase pentru pachetul rdquoservicesrdquo

Pe acest nivel ajung toate cererile din server dupa ce trec de verificarile de securitateIn acest pachet se afla si clasa de securitate care face verificarile necesare In aceasta clasaexista o metoda ce se apeleaza la prima cerere cea de salvare a datelor de la Facebookdespre utilizator si care codifica id-ul utilizatorului si ıl trimite pe raspuns ınapoi interfeteiPe langa asta ın acea clasa se afla si o metoda care verifica faptul ca id-ul codificat esteal unui utilizator cu rol corespunzator pentru a face acea cerere

In plus ın acest pachet se afla si toate celelalte clase care fac diverse operatii pedatele din baza de date si dau raspunsuri cererilor din interfata Aici se afla logica care

38

comanda actiunile asupra utilizatorilor asupra prietenilor acestora asupra produselor siasupra comenzilor

Ultima clasa a acestui nivel este cea care se ocupa de trimiterea de email-uri Incazul ın care se face o noua comanda de catre un utilizator toti producatorii produselor depe comanda sunt notificati despre produsele lor pe care le doreste utilizatorul Din serviciulde comanda se apeleaza serviciul de email pentru fiecare producator din lista celor care auproduse care se afla pe lista comenzii utilizatorului

Ultimul si cel mai aproape de interfata utilizator este nivelul de web Acolo se aflatoate clasele de rdquoControllerrdquo ale aplicatiei server

Figura 56 Diagrama de clase pentru pachetul rdquowebrdquo

Toate cererile din interfata utilizator ıncearca sa se mapeze pe rutele declarate ınclase pentru a fi procesate ın metoda corespunzatoare Toata aceasta parte este foarteusor de implementat si mai ales foarte lizibil pentru programatori datorita adnotarilor dinJava Cu ajutorul acestora trebuie doar specificat care este numele URL-ului cererii careeste tipul de obiect asteptat si daca se trimite ca rdquoquery stringrdquo pe URL sau ın interiorulcorpului cererii si tipul raspunsului Pentru fiecare cerere care nu este apelata ın parteaneautentificata a utilizatorului primul lucru care se apeleaza este metoda de securitatepentru a verifica rolul si id-ul utilizatorului Daca din punctul de vedere al securitatii totuleste ın regula se apeleaza metoda corespunzatoare din pachetul de serviciu

39

O singura clasa este diferita de restul ın pachetul de controller si aceea este clasa deeroare Acolo se mapeaza erorile aparute ın timpul cererii si se trimite ınapoi ın interfatagrafica un raspuns cu cod de eroare specific nu numai 500 Generic Application Exceptioncum ar trimite fara aceasta clasa si cu detalii despre motivul aparitiei erorii

Datorita folosirii adnotarilor din java nu a fost necesara folosirea unor rdquodesignpatternrdquo-uri ın sistem De exemplu pentru a folosi ın nivelul de web ceva din pachetulde servicii trebuia doar acel obiect sa aiba adnotarea Autowired si se ınlocuieste atatfolosirea rdquodesign patternrdquo-ului Singleton cat si a celui de Factory Acel obiect nu trebuiecreat sau initializat se face asta implicit datorita adnotarii si de asemenea este folositapeste tot aceeasi instanta

In concluzie toate cererile venite din interfata grafica ajung ın nivelul de rdquocontrollerrdquode unde sunt trimise la cel de rdquoservicerdquopentru a fi procesate si facute eventualele modificarinecesare ın baza de date ca apoi raspunsul sa fie trimis ınapoi spre aplicatia client pentruafisare

512 Arhitectura componentei frontend

A doua componenta implementata a sistemului este aplicatia client frontend-ulAceasta a fost scrisa ın Java Script cu ajutorul framework-ului Ext JS compilarea

se face cu ajutorul Sencha CMD si mediul de implementare a fost IntelliJ IdeaCu ajutorul framework-ului Ext JS se scriu componente care apoi se initializeaza

unele pe altele Aplicatia porneste cu fisierul Applicationjs care este un fel de rdquomainrdquopentru aplicatie Aceasta initializeaza alte componente care la randul lor includ altecomponente si tot asa Structura poate fi foarte usor comparata cu una arborescenta dinacest punct de vedere

Framework-ul a fost creat sa functioneze ın felul acesta pentru ca scopul componen-telor este sa fie scrise ın asa fel ıncat sa poata pe viitor sa fie utilizate din nou Una dindorintele majore ın programare tot timpul este de a se scrie cod ıntr-o maniera ın care safie cat mai reutilizabil Iar framework-ul Ext JS exact asta ıncearca

Arhitectura aplicatiei client se gaseste ın figura 57 si este la randul ei ımpartita ınpachete ca si cea de server Similar cu pachetul de rdquodomainrdquo de la aplicatia de backendeste pachetul rdquomodelrdquo al interfetei utilizator Aici sunt rdquoclaserdquo care sunt simple POJO sicare sunt apoi folosite ın nivelele urmatoare Sunt mai putine decat clasele din rdquostorerdquodeoarece daca raspunsul de la server nu trebuie procesat nu sunt necesare se pot mapadirect obiectele din rdquostorerdquo pe componentele interfetei utilizator

Urmatorul nivel este cel pe care se afla clasele de rdquostorerdquo Acestea sunt cele careexecuta cererea spre backend si face legatura ıntre client si server Daca are o clasa derdquomodelrdquodeclarata atunci populeaza acel obiect cu datele primite de la server iar ın cazul ıncare nu este declarat un model se trimit datele exact asa cum s-au primit la nivelul urmatorde rdquoviewrdquo Acest nivel seamana din punct de vedere al functiei cu cel de rdquorepositoryrdquo de laaplicatia server deoarece ambele au rol de legatura Aceea facea legatura ıntre aplicatiesi baza de date si aceasta face legatura ıntre aplicatia client si aplicatia server

40

Figura 57 Diagrama de clase pentru aplicatia web

Cel de-al treilea pachet al aplicatiei este cel de rdquoviewrdquo In acest pachet se afla claselecare alcatuiesc partea vizuala a aplicatiei La randul ei si aceasta este alcatuita tot dincomponente Aplicatia deschide ın primul rand Main-ul care determina aparitia paginii deHome si afisarea ın meniu a optiunilor posibile ın functie de autentificare si rol Clasele deaici se executa de fapt la deschiderea aplicatiei fiind rdquosingle page applicationrdquo si tot atuncise ıncarca pe pagina componentele Ca si arhitectura a pachetului acesta este ımpartit larandul sau ın subpachete Pentru o mai buna organizare exista patru subpachete cateunul pentru fiecare tip de utilizator In felul acesta toate rdquoviewrdquo-urile care sunt specificeunui utilizator cu un anumit rol se afla ın acelasi subpachet

Cele patru subpachete existente ın pachetul rdquoviewrdquo sunt

1 Pachetul rdquomainrdquo care cuprinde rdquoviewrdquo-urile care se afla ın partea neautentificata aaplicatiei

2 Pachetul rdquoclientrdquo continand rdquoviewrdquo-urile pe care le poate accesa un utilizator simplu3 Pachetul rdquoproducerrdquo specific actiunilor unui utilizator care are rol de producator4 Pachetul rdquoadminrdquo care contine toate rdquoviewrdquo-urile care ıi apar unui utilizator care este

administrator al aplicatiei

Ultimul pachet si nivel al aplicatiei client este cel de rdquocontrollerrdquo In acest pachet

41

se afla clasele care fac actiunile din interfata grafica In timp ce pachetul rdquoviewrdquo continedoar partea grafica a aplicatiei adica modul ın care aceasta trebuie sa arate pachetulrdquocontrollerrdquo contine actiunea acestora modul ın care aplicatia trebuie sa functioneze

Ca si arhitectura si acest pachet a fost ımpartit la randul lui tot ın cele patrusubpachete ca si pachetul rdquoviewrdquo adica rdquomainrdquo rdquoclientrdquo rdquoproducerrdquo si rdquoadminrdquo In pluspentru a fi usor de gasit ce clasa de rdquocontrollerrdquo apartine carui rdquoviewrdquo am ales ca cele douasa aiba acelasi nume In felul acesta daca se doreste sa se gaseasca actiunile unui rdquoviewrdquose poate cauta dupa o clasa cu acelasi nume ın pachetul rdquocontrollerrdquo Numarul claselor dinacest pachet este mai mic decat cel al claselor din rdquoviewrdquo deoarece nu toate paginile dininterfata au actiuni suplimentare Daca singura actiune este ıncarcarea paginii cu date dela server adica doar o actiune simpla de GET datele se ıncarca cu ajutorul rdquostorerdquo-ului laıncarcarea paginii si nu este necesara nici o actiune suplimentara Paginile pe care se potface si actiuni de alt gen sau se deschid noi ferestre au nevoie de clase de rdquocontrollerrdquo

In concluzie arhitectura aplicatiei client este una bazata pe componente care ıncearcasa foloseasca cat mai multe clase reutilizabile

52 Structura bazei de date

Baza de date a aplicatiei este de tip graf de tipul Neo4j Pentru utilizare exista unprogram numit Neo4j ce trebuie instalat Acest program are si o interfata grafica ın carese pot vizualiza datele sub forma grafica si ın care se pot scrie de asemenea si interogariın limbajul acestei baze de date adica Cypher

Fiind o baza de date sub forma de graf datele stocate sunt salvate ın structurade date sub forma de noduri si relatii Entitatile din pachetul de domeniu din aplicatiabackend se gasesc ın baza de date sub forma unor noduri iar dependentele dintre nodurise mapeaza ın baza de date sub forma unor relatii Un element diferit fata de alte tipuride baze de date este faptul ca pe relatiile dintre noduri se pot salva atribute cum este ınaplicatie cazul pentru prieteniile dintre persoane In cazul acestora pe relatia dintre nodurise salveaza daca prietenia a fost sau nu acceptata

Pentru fiecare clasa POJO din aplicatia server clasa ce are doar metodele get si setsi se afla ın pachetul domain exista cate un tip de nod diferit ın baza de date cum estesi marcat ın diferite culori ın figura 58 Fiecare tip de nod are atributele proprii care potlua valori sau pot fi nule Iar fiecare obiect din Java reprezinta un nod diferit ın baza dedate

Neo4j a fost cea mai buna optiune pentru baza de date pentru ca aplicatia poate ficonsiderata o retea sociala Acest lucru se datoreaza relatiilor de prietenie dintre persoanesi a multiplelor relatii ıntre noduri Toate nodurile se afla ın acceasi componenta conexadeci nu exista noduri izolate care sa nu aiba nici o legatura cu nici un alt nod

Datorita acestei structuri a bazei de date este posibila implementarea cererii derecomandare ca o simpla interogare ın baza de date aceasta fiind cea mai simpla metodade implementare a unui sistem de genul acesta una mult mai complexa ar fi fost un

42

algoritm de ınvatare care sa ınvete tipare ale utilizatorilor si sa recomande cadouri pe bazaacestor informatii

Figura 58 Diagrama bazei de date pentru doi utilizatori

Un alt avantaj al acestui tip de baza de date este faptul ca datele nu sunt duplicateın baza de date Spre exemplu daca mai multi utilizatori au ca locatie acelasi oras nu secreaza cate un nod cu acea locatie de mai multe ori ci acel unic nod va avea cate o relatiecu fiecare utilizator care are ca locatie acel oras

In concluzie structura bazei de date a fost aleasa ın acest fel datorita tipului apli-catiei adica asemanatoare cu o retea sociala si datorita implementarii simple a unui sistemde recomandare pe o asemenea baza de date

53 Fluxul pentru diferite operatii

Pentru aplicatie cele mai importante cazuri de utilizare sunt salvarea informati-ilor despre utilizator primite de la Facebook pentru crearea unui profil si recomandareacadourilor pentru un utilizator al aplicatiei Din aceasta cauza cele doua cazuri de utilizarevor fi prezentate mai ın detaliu ın continuare

43

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 26: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

Actorul principal

Utilizatorii cu rol de producator sau cu rol de administrator

Parti interesate si interese

Producatorul care doreste sa introduca produsul nou ın aplicatie

Utilizatorii simpli care au o mai mare varietate de produse din care sa li se reco-mande cadouri

Figura 43 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo

21

Flux de evenimente

Use-Case Start

Cazul de utilizare ıncepe atunci cand producatorul porneste aplicatia

11 Producatorul verifica daca are cont de Facebook si daca are urmeaza pasul111 daca nu 22

111 Producatorul se autentifica ın aplicatie cu ajutorul credentialelor de laFacebook

12 Producatorul deschide sectiunea de adaugare produs

13 Producatorul completeaza datele necesare despre noul produs ımpreuna cu tipulde persoana si eveniment care i s-ar potrivi

14 Producatorul verifica daca este multumit de datele introduse si daca da urmeazapasul 141 daca nu 23

141 Producatorul efectueaza operatia de adaugare produs

15 Sistemul adauga un nou produs ın baza de date

16 Sistemul notifica producatorul ca noul produs a fost introdus cu succes

17 Producatorul se dezautentifica din aplicatie

Use-Case End

Producatorul se va deconecta din aplicatie si o va ınchide

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Producatorul deschide sectiunea de adaugare produs

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca producatorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Producatorul deschide pagina de Facebook

222 Producatorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Producatorul revine la aplicatia de recomandare cadouri si ıncearca dinnou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca Producatorul nu e multumit de datele introduse despreprodus

Acest flux poate aparea la pasul 14

231 Producatorul sterge datele gresite despre produs

232 Producatorul adauga alte date despre produs

233 Cazul de utilizare continua de la pasul 141

22

Preconditii

1 Producatorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Producatorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Producatorul trebuie sa aiba cont cu rol de rdquoproducatorrdquo sau rdquoadminrdquo pentru aputea face operatia aceasta

4 Producatorul trebuie sa deschida sectiunea de adaugare produs pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noul produs este salvat ın baza de date2 Produsul poate fi adaugat la recomandarile unui utilizator din acel moment

433 Modificare rol utilizator

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unadministrator trebuie sa le urmeze pentru a modifica rolul unui utilizator al aplicatiei

Actorul principal

Un utilizator al aplicatiei care are rol de administrator

Parti interesate si interese

Administratorul care doreste sa modifice rolul unui utilizatorUtilizatorul care doreste sa ısi schimbe rolul

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand administratorul porneste aplicatia11 Administratorul verifica daca are cont de Facebook si daca are urmeaza pasul

111 daca nu 22111 Administratorul se autentifica ın aplicatie cu ajutorul credentialelor de

la Facebook12 Administratorul deschide sectiunea de utilizatori13 Sistemul ıi returneaza administratorului utilizatorii care nu sunt administratori14 Administratorul modifica rolul utilizatorului din utilizator simplu ın producator

sau invers

23

15 Administratorul cere executarea modificarii

16 Sistemul executa modificarea iar ın caz de succes urmeaza pasul 161 si ın cazde eroare pasul 23

161 Sistemul notifica administratorul ca modificarea a fost efectuata cusucces

17 Utilizatorul se dezautentifica din aplicatie

Use-Case End

Administratorul se va deconecta din aplicatie si o va ınchide

Figura 44 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo

24

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Administratorul deschide sectiunea de utilizatori

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca administratorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Administratorul deschide pagina de Facebook

222 Administratorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Administratorul revine la aplicatia de recomandare cadouri si ıncearcadin nou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca sistemul returneaza o eroare la modificarea utilizatorului

Acest flux poate aparea la pasul 16

231 Sistemul returneaza un mesaj de eroare la modificarea utilizatorului

232 Aplicatia afiseaza mesajul de eroare administratorului

233 Cazul de utilizare continua de la pasul 15

Preconditii

1 Administratorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Administratorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Utilizatorul trebuie sa aiba cont cu rol de administrator pentru a putea efectuaorice actiune din acest caz de utilizare

4 Administratorul trebuie sa deschida sectiunea utilizatori pentru a putea ındeplinicerintele din cazul de utilizare

Postconditii

1 Noul rol al utilizatorului este salvat ın baza de date

2 La urmatoarea autentificare a utilizatorului acesta va observa ca interfata si maiprecis meniurile si actiunile care le poate face ıi vor fi diferite

25

44 Perspectiva tehnologica

441 Neo4j

Neo4j 1 este un sistem de gestionare a bazelor de date sub forma de graf dezvoltatde Neo4j Inc Descris de dezvoltatorii sai ca o baza de date tranzactionala compatibilacu ACID Neo4j este cea mai populara baza de date sub forma de graf dupa clasamentulDB-Engines

Baza de date Neo4j (ca si orice alta baza de date sub forma de graf) este foartediferita de o baza de date relationala cum ar fi MS Access SQL Server MySQL etcBazele de date relationale utilizeaza tabele randuri si coloane pentru stocarea datelor

Neo4j nu utilizeaza tabele randuri si coloane pentru stocarea sau prezentarea datelorci noduri si relatii

Neo4j este foarte potrivit pentru stocarea datelor care au multe relatii interconec-tate Acestea sunt de fapt aplicatiile ın care merita sa fie folosite De fapt bazele de datesub forma de graf cum este Neo4j sunt mult mai bune la tratarea datelor interconectatedecat bazele de date relationale

Acest lucru se datoreaza faptului ca modelul sub forma de graf nu necesita de obiceio schema predefinita Nu e nevoie sa se creeze structura bazei de date ınainte de a fiıncarcate datele asa cum se face la o baza de date relationala

Dar principalul motiv pentru care Neo4j este mai bun pentru datele relationalepentru acest tip de aplicatii este modul ın care permite crearea relatiilor Neo4j este con-struit ın jurul relatiilor si atunci nu este nevoie sa se configureze chei primare constrangerichei straine pentru a predetermina nodurile care pot avea o relatie si la ce date Cu Neo4jse poate adauga orice legatura ıntre orice nod ori de cate ori este nevoie

Neo4j are aceste calitati care nu se gasesc nici la celelalte baze de date NoSQLBazele de date non-relationale pe langa cele sub forma de graf sunt cele de tip coloanade tip document de tip cheie-valoare si de tip multi-model Nici unul din aceste tipuri nuau ca principala functionalitate maparea relatiilor si facilitatea interogarilor ıntr-o baza dedate cu multe relatii ıntre entitati

Generarea de recomandari personalizate este unul dintre cele mai frecvente cazuride utilizare a unei baze de date sub forma de graf Unele dintre principalele beneficii aleutilizarii grafurilor pentru a genera recomandari includ

- Performanta Lipsa indexurilor permite calcularea recomandarilor ın timp realasigurand ca recomandarea este ıntotdeauna relevanta si reflecta informatii actualizate

- Model de date Modelul de graf cu proprietati permite combinarea cu usurinta aseturilor de date din mai multe surse

Un alt avantaj al bazelor de date sub forma de graf Neo4j este faptul ca respectatoate principiile din modelul de consistenta ACID

Garantia data de principiile ACID este ca ofera un mediu sigur ın care sa functionezedatele Acronimul ACID reprezinta

1httpsneo4jcomuse-casesreal-time-recommendation-engine

26

bull Atomic Toate operatiile dintr-o tranzactie reusesc sau fiecare operatie este reluatabull Consistent La finalizarea unei tranzactii baza de date este solida din punct de

vedere structuralbull Izolat Tranzactiile nu se lupta una cu cealalta Accesul controversat la date este

moderat de baza de date astfel ıncat tranzactiile par sa se execute succesivbull Durabil Rezultatele aplicarii unei tranzactii sunt permanente chiar si ın cazul unor

defectiuniCand vine vorba de tehnologiile NoSQL cele mai multe baze de date sub forma de

graf (inclusiv Neo4j) utilizeaza un model de consistenta ACID pentru a asigura ca datelesunt stocate ın siguranta si ın mod consecvent

Am ales baza de date sub forma de graf ca optiune pentru stocarea datelor deoarecedin toate lucrarile si articolele citite a fost optiunea cea mai buna pentru un sistem derecomandare Deci acesta se mapeaza perfect pe cerintele functionale ale proiectului Sidin optiunile de baze de date sub forma de graf Noe4j a avut de departe cele mai multeavantaje ea fiind si cea mai utilizata

442 Cypher

Cypher 2 este un limbaj declarativ de interogare pentru bazele de date sub formade graf care permite interogarea si actualizarea rapida a datelor Cypher este un limbajrelativ simplu dar foarte puternic Interogarile foarte complexe ale bazei de date pot fiusor exprimate prin intermediul limbajului Cypher

Este conceput pentru a fi un limbaj de interogare uman Scopul lui principal este dea face interogarile mult mai simple si unele interogari care la bazele de date relationale nuerau posibile le face posibile Constructiile sale se bazeaza pe grafica si pe limba englezalucru care ajuta la scrierea mai intuitiva a interogarilor Este construit pentru a fi maiintuitiv pentru citire si nu neaparat pentru scriere

Cypher se bazeaza pe modelul Graph Property care ın plus fata de elementelegrafice standard ale nodurilor si muchiilor (numite relatii ın Cypher) adauga etichete siproprietati ca si concepte Nodurile pot avea zero sau mai multe etichete ın timp ce fiecarerelatie este de exact un singur tip Nodurile si relatiile au de asemenea zero sau mai multeproprietati

Chypher este limbajul de interogare folosit la bazele de date Neo4j deci este opti-unea implicita atunci cand se alege Neo4j

443 Maven

Maven 3 este un instrument de management software si de ıntelegere a proiectelorsoftware Pe baza conceptului unui model de obiect de proiect (POM) Maven poategestiona construirea raportarea si documentarea unui proiect printr-o informatie centrala

2httpsneo4jcomdevelopercypher-query-language3httpswwwjavatpointcommaven-tutorial

27

Obiectivul principal al lui Maven este acela de a permite unui dezvoltator sa ınte-leaga starea completa a efortului de dezvoltare ın cel mai scurt timp Avantajele Mavensunt

bull instalarea rapida a proiectului fara fisiere buildxml complicate doar un POMbull procesul de construire este standardizat pentru toate proiectelebull usor de ınvatat si de utilizatbull configurarea unui proiect este foarte rapidabull bine documentat

Am ales sa folosesc Maven deoarece este una din cele mai comune optiuni pentru aimporta librariile ıntr-un proiect si este si cel mai documentat Deci mereu cand esti pusın dificultate poti cauta pe internet sugestii

444 Spring Boot

Spring Boot 4 este un framework din cadrul Spring care ofera setari implicite pentruconfigurarea codului si adnotari pentru a lansa rapid proiecte noi ın executie Urmaresteabordarea rdquoConfigurarea defectiunilor vizionaterdquo pentru a evita un numar mare de linii decod pentru configuratii si pentru a ımbunatati procesul de dezvoltare

Avantajele Spring Boot sunt1 Face foarte usoara dezvoltarea de aplicatii bazate pe Spring cu Java sau Groovy2 Reduce timpul de dezvoltare si creste productivitatea3 Evita scrierea multor linii de cod adnotari si configurare XML4 Este foarte usor de integrat cu alte framework-uri din aceasi familie Spring cum ar

fi Spring JDBC Spring ORM Spring Data Spring Security etc5 Urmareste abordarea rdquoConfigurarea implicita a optiunilorrdquo pentru a reduce efortul

pentru dezvoltatori6 Ofera servere HTTP ıncorporate cum ar fi Tomcat Jetty etc pentru a dezvolta si

testa aplicatiile web foarte usor7 Ofera instrumentul CLI (Command Line Interface) pentru a dezvolta si testa apli-

catiile de tip rdquoSpring Bootrdquo (Java sau Groovy) din linia de comanda foarte usor sirapidAm ales ca optiune pentru partea de backend acest framework deoarece simplifica

foarte mult lucrurile Datorita lui un programator poate sa ısi concentreze mai tare energiape a construi proiectul din punctul de vedere al buissness-ului logic nu din punctul devedere al configurarilor necesare

445 Sencha CMD si ExtJS

Sencha CMD 5 este un instrument linie de comanda cross-platform care ofera multesarcini automate ın ciclul complet de viata al unei aplicatii ExtJS de la generarea unui

4httpswwwjavatpointcomspring-boot-tutorial5httpsdocssenchacomcmd

28

nou proiect la lansarea unei aplicatii ın productie

Sencha Cmd ofera o colectie de caracteristici puternice pentru economisirea timpu-lui care functioneaza ımpreuna cu Sencha ExtJS si Sencha Touch

Ext JS 6 este un framework pur JavaScript pentru construirea de aplicatii webinteractive cross-platform utilizand tehnici precum scripting Ajax DHTML si DOM

Avantajele framework-ului ExtJS sunt

1 Documentatia Extjs este foarte cuprinzatoare si bine ıntretinuta2 Aspectul cheie al bibliotecii EXTJS este suportul de tip cross-browser3 Framework-ul ExtJS ofera o multitudine de elemente UI Aceste elemente includ

forme casete de dialog file arbori si tabele4 Framework-ul ExtJS include suport pentru implementarile Ajax5 ExtJS ofera performante excelente Framework-ul este complet orientat spre obiecte

si este extensibil asta pentru ca este scris ın JavaScript

Pentru partea de frontend se foloseste framework-ul ExtJS deoarece are o arhitec-tura ce se mapeaza foarte bine pe proiectele de frontend si anume arhitectura bazata pecomponente Aceasta face ca ın proiect codul sa fie mult mai organizat si procesul dedezvoltare al proiectului sa fie mult mai scurt prin identificarea mai usoara a erorilor

446 Facebook API(Graph API)

Graph API 7 este modul principal de a pune date ın platforma Facebook si de aobtine date din platforma Facebook Este un API bazat pe HTTP pe care aplicatiile ılpot utiliza pentru interogarea datelor pentru a introduce postari noi pentru gestionareaanunturilor sau pentru a ıncarca fotografii

Este denumit Graph API dupa ideea unui rdquograf socialrdquo - o reprezentare sub formade graf a informatiilor de pe Facebook Este compus din

bull noduri - ın esenta obiecte individuale cum ar fi un utilizator o fotografie o paginasau un comentariu

bull muchii - conexiuni ıntre o colectie de obiecte si un singur obiect cum ar fi fotografiilede pe o pagina sau comentariile de la o fotografie

bull campuri - date despre un obiect cum ar fi ziua de nastere a unui utilizator saunumele paginii

De obicei se utilizeaza noduri pentru a obtine date despre un anumit obiect se uti-lizeaza muchii pentru a obtine colectii de obiecte legate de un singur obiect si se utilizeazacampurile pentru a obtine date despre un singur obiect sau mai multe obiecte dintr-ocolectie

Am folosit Facebook API ca solutie pentru a ımbunatati problema de rdquocold startrdquopentru ca este singurul site pe care marea majoritate a oamenilor au cont si salveazalucrurile care le plac Deci se potrivea perfect peste nevoile aplicatiei mele

6httpdocssenchacomextjs6207httpsdevelopersfacebookcomdocsgraph-api

29

447 Git

Git 8 este un sistem de control a versionarii pentru urmarirea modificarilor ın fisierelede pe computer si coordonarea activitatii asupra acestor fisiere ın randul mai multor per-soane Este utilizat ın principal pentru gestionarea codului sursa ın dezvoltarea de softwaredar poate fi folosit pentru a urmari schimbarile ın orice set de fisiere

Avantaje ale Git

bull Modelul distribuit numai ceea ce se doreste se face publicbull Branching-ul si merging-ul sunt usoarebull Fluxul de lucru este flexibilbull Integritatea datelor este asigurata Deoarece GIT utilizeaza arbori SHA1 coruperea

datelor din motive externe poate fi usor detectatabull Rapid Git este foarte rapid chiar si ın comparatie cu alte sisteme de control a

versionarii

Am folosit Git pentru a avea la proiect un back-up ın caz ca se ıntampla ceva cuproiectul salvat pe calculator

45 Arhitectura conceptuala

In figura 45 este prezentata arhitectura conceptuala a sistemului Acesta este ım-partit ın doua mari parti backend-ul si frontend-ul care comunica ıntre ele si ısi trimitinformatii

Se poate observa ca baza de date este de tip graf mai exact Neo4j si comunica cubackend-ul pentru a putea lucra cu datele stocate Backend-ul este structurat pe nivelefiecare cu un diferit rol si care trebuie parcurs pentru a procesa datele din interfata ınbaza de date Cele trei nivele sunt cel de Repository cel de Service si cel ControllerToate interogarile venite din interfata utilizator ajung ın nivelul de Controller Dupa ceinterogarile trec de securitatea sistemului ajung ın nivelul de Service Acolo se proceseazasi se afla partea de logica a aplicatiei Pentru a interactiona cu baza de date din Servicese apeleaza metodele din nivelul de Repository

In continuare backend-ul comunica prin protocolul HTTP cu interfata grafica cucare interactioneaza clientii aplicatiei Interfata este scrisa ın Ext JS si are o parte de Viewsi o parte de Controller care este cea care comunica cu backend-ul

Pentru partea de autentificare sistemul interactioneaza cu API-ul de la Facebookde la care ia dupa autentificare un access token Cu ajutorul acestuia ia dupa aceea datelenecesare pentru a putea crea un profil utilizatorului

8httpsguidesgithubcomintroductiongit-handbook

30

Figura 45 Arhitectura conceptuala

31

Capitolul 5

Proiectare de Detaliu siImplementare

In acest capitol vor fi prezentate detalii de implementare ale sistemului de recoman-dare incluzand o ımpartire al acestuia ın componentele care ıl cuprind

Obiectivul este de a prezenta arhitectura si modul de implementare al aplicatieipe baza datelor descoperite ın studiul bibliografic de la capitolul trei si cu tehnologiilehotarate la capitolul patru Pe langa asta va fi prezentata si structura bazei de date sideciziile luate pentru securitatea aplicatiei

51 Arhitectura sistemului

Din punctul de vedere al arhitecturii aplicatia se poate considera ca este alcatuitadin patru mari componente

1 API-ul de la Facebook2 Aplicatia client care reprezinta interfata grafica a aplicatiei3 Aplicatia server adica backendul aplicatiei si partea ın care se afla partea de rdquobusiness

logicrdquo4 Baza de date

Partea componenta reprezentata de API-ul de la Facebook este doar o componentacu care aplicatia se integreaza si pe care aceasta o foloseste In interactiunea cu ea interfatada o cerere de autentificare apare o fereastra de la Facebook ın care utilizatorul introducecredentialele de la API-ul de Facebook se primeste ınapoi un access token si cu ajutorulacestuia face o cerere pentru a primi datele personale ale utilizatorului pentru creeareaprofilului utilizator

Urmatoarea parte a aplicatiei este interfata utilizator frontend-ul care reprezintapartea cu care utilizatorul interactioneaza si locul unde ıi sunt afisate informatiile

Cererile din interfata ajung ın a treia parte componenta a sistemului partea deserver adica backend-ul aplicatiei Acolo toate cererile sunt citite si procesate iar raspun-

33

sul lor este trimis la interfata utilizator Aceasta este partea care reprezinta rdquogandireardquoaplicatiei Aceea este componenta care face legatura ıntre cererile utilizatorului din inter-fata si datele stocate ın baza de date

Ultima componenta a aplicatiei o reprezinta baza de date care are ca rol sa stochezedatele despre utilizatori produse si comenzi Ea este o baza de date sub forma de grafde tipul Neo4j Acolo se salveaza entitatile aplicatiei sub forma de noduri si dependenteleıntre acestea sub forma de relatii ıntre aceste noduri

Figura 51 Diagrama de rdquodeploymentrdquo

In figura 51 este prezentata diagrama de rdquodeploymentrdquo a sistemului cu cele patrucomponente ale sistemului Aplicatia client comunica cu API-ul de la Facebook prin pro-tocolul securizat HTTPS cu backend-ul prin protocolul HTTP iar backend-ul cu baza dedate prin JDBC

Aplicatia a putut fi ımpartita ın aceste componente separate deoarece fiecare dintreele poate functiona independent de celelalte comunica cu ele doar prin mesaje Din acestmotiv locul unde ruleaza acestea pot sa fie pe servere diferite In plus daca aplicatiaar fi pusa pe servere pentru utilizatori ar putea fi mai multe servere pe care ruleaza ocomponenta si prin rdquoload balancingrdquo sa se trimita cererile ımpartite ıntre ele

Cum astfel componentele nu depind foarte mult unele de altele si pot rula faraa le interesa de unde le sunt trimise cererile este arhitectura cea mai corecta deoarecedefectarea sau o posibila eroare la una din ele nu o influenteaza cu nimic pe o alta Dacatoate ar rula pe acelasi server o eventuala defectiune a acestuia ar ınsemna o defectiune aıntregului sistem Insa daca exista mai multe noduri si se afla pe servere diferite pot doartoate cererile sa fie redirectionate spre un nod care functioneaza si aplicatia sa functionezepentru clienti la fel ca ınainte

34

Un alt avantaj al arhitecturii ar fi faptul ca la o lansare viitoare catre clienti se poatelansa doar componenta la care s-au facut modificari De asemenea aplicatia ar putea aveape viitor si o componenta mobila Iar cum serverul e independent poate fi acelasi serverfolosit de o alta aplicatie client

511 Arhitectura componentei backend

Arhitectura backend-ului este si ea ımpartita ın mai multe pachete pentru o maibuna structura si pentru o cat mai mica dependenta ıntre diversele componente Astfelcuplarea este minima ıntre clase si eventualele modificari ulterioare pot fi mai usor defacut

Serverul a fost implementat ın Java cu ajutorul framework-ului Spring Boot iarmediul de dezvoltare folosit a fost Intellij IDEA

Din punctul de vedere al ımpartirii arhitectura serverului aplicatiei este structurataın patru pachete si o clasa ın afara acestora Acea clasa este rdquomainrdquo-ul aplicatiei este parteacare trebuie rulata pentru a porni serverul Din cauza ca este o aplicatie Spring Boot si nuuna String singura adnotare necesara pentru a sti ca aceea este clasa rdquoradacinardquoa aplicatieieste SpringBootApplication

Cele patru pachete ale serverului sunt1 Cel de domeniu (domain) cu clasele POJO care reprezinta entitatile din baza de

date2 Cel de rdquomagazierdquo (repositories) care este cel care face direct actiunile ın baza de date3 Cel de serviciu (services) ın care se afla partea de logica a ıntregii aplicatii4 Cel de web ın care se afla clasele de rdquocontrollerrdquo

Figura 52 Diagrama de pachete pentru backend

35

Ca si dependente nivelul de web ıl foloseste pe cel de seviciu cel de serviciu ılfoloseste pe cel de rdquomagazierdquo iar clasele din pachetul de domeniu sunt folosite ın toatecelelalte pachete

In continuare voi prezenta pe rand fiecare nivel al serverului adica fiecare pachet

Figura 53 Diagrama de clase pentru pachetul rdquodomainrdquo

36

Nivelul de domeniu (domain) este alcatuit ın primul rand din clasele care suntentitati ın baza de date Acestea sunt reprezentate de toate clasele ce stocheaza informatiidespre utilizatori si despre produse si comenzi Pe langa informatiile personale despre unutilizator de genul numelui email-ului sau data nasterii care sunt salvate ın entitateapersoana se stocheaza despre utilizator ın clase diferite informatii de genul locului undelocuieste locul unde a copilarit locurilor unde a facut scoala locului unde lucreaza sau celmai important pentru aplicatia aceasta lucrurilor care ıi plac In afara acestor informatiidespre utilizatori sunt si clase cu informatiile despre prieteni despre produse sau desprecomenzi

Din cauza faptului ca aplicatia este de tipul unei retele sociale ın care exista prieteniiıntre persoane exista dependente ıntre toate entitatile aplicatiei Acesta este si motivulpentru care am ales baza de date sub forma de graf pe care sa se mapeze toate acesteentitati sub forma de noduri si toate aceste dependente sub forma de relatii

In pachetul de domeniu se afla si trei subpachete Unul dintre ele este pentruclasele folosite pentru a trata erorile aplicatiei In interiorul acestui pachet se afla douaclase pentru eroare si o exceptie cea folosita ın cazul ın care nu se gaseste ceea ce doresteutilizatorul Pe langa asta este clasa care are ca obiect raspunsul dat de sistem ın cazulunei erori la server Aceasta contine ın interiorul sau pe langa codul erorii si detalii despreeroarea trimisa Aceasta lista de detalii e reprezentata de obiectele de tipul celei de-a treiaclase din pachetul acesta

Celelalte doua subpachete aflate ın acest nivel sunt cele care contin clasele specialede cerere sau raspuns care au ajutat la maparea acestora mai bine In multe cazuri nua fost necesara trimiterea la interfata utilizator a tuturor informatiilor stocate despre oentitate si de aceea am ales sa creez ın aceste cazuri un obiect auxiliar care sa fie folositpe post de raspuns

Figura 54 Diagrama de clase pentru pachetul rdquorepositoriesrdquo

37

Cel de-al doilea nivel al aplicatiei backend este cel de rdquomagazierdquo (repositories) carecontine doar interfete de tip rdquoRepositoryrdquo

Aceste interfete sunt cele care fac operatiile directe asupra entitatilor din baza dedate

Unele interfete doar extind interfata care are deja implementate metodele CRUDsi din acest motiv nu au metode suplimentare iar altele au si metode ın plus care au carol sa execute interogari mai complexe asupra bazei de date In acele metode se pot scrieinterogarile ın Cypher pentru a putea primi informatii despre mai multe noduri sau desprerelatiile dintre acestea sau si pentru a returna doar anumite rezultate care ındeplinescanumite conditii In felul acesta a fost implementata si cererea de oferire a recomandarilorIn acel caz sistemul returneaza produsele care au ın descriere unul din lucrurile care se aflaın lista de obiecte sau servicii primite de la Facebook ca ıi plac utilizatorului

Nivelul de rdquoRepositoryrdquo este folosit direct de cel de-al treiea nivel cel de servi-ciu Acesta este nivelul la care se executa logica aplicatiei unde se comanda modul defunctionare al ıntregii aplicatii

Figura 55 Diagrama de clase pentru pachetul rdquoservicesrdquo

Pe acest nivel ajung toate cererile din server dupa ce trec de verificarile de securitateIn acest pachet se afla si clasa de securitate care face verificarile necesare In aceasta clasaexista o metoda ce se apeleaza la prima cerere cea de salvare a datelor de la Facebookdespre utilizator si care codifica id-ul utilizatorului si ıl trimite pe raspuns ınapoi interfeteiPe langa asta ın acea clasa se afla si o metoda care verifica faptul ca id-ul codificat esteal unui utilizator cu rol corespunzator pentru a face acea cerere

In plus ın acest pachet se afla si toate celelalte clase care fac diverse operatii pedatele din baza de date si dau raspunsuri cererilor din interfata Aici se afla logica care

38

comanda actiunile asupra utilizatorilor asupra prietenilor acestora asupra produselor siasupra comenzilor

Ultima clasa a acestui nivel este cea care se ocupa de trimiterea de email-uri Incazul ın care se face o noua comanda de catre un utilizator toti producatorii produselor depe comanda sunt notificati despre produsele lor pe care le doreste utilizatorul Din serviciulde comanda se apeleaza serviciul de email pentru fiecare producator din lista celor care auproduse care se afla pe lista comenzii utilizatorului

Ultimul si cel mai aproape de interfata utilizator este nivelul de web Acolo se aflatoate clasele de rdquoControllerrdquo ale aplicatiei server

Figura 56 Diagrama de clase pentru pachetul rdquowebrdquo

Toate cererile din interfata utilizator ıncearca sa se mapeze pe rutele declarate ınclase pentru a fi procesate ın metoda corespunzatoare Toata aceasta parte este foarteusor de implementat si mai ales foarte lizibil pentru programatori datorita adnotarilor dinJava Cu ajutorul acestora trebuie doar specificat care este numele URL-ului cererii careeste tipul de obiect asteptat si daca se trimite ca rdquoquery stringrdquo pe URL sau ın interiorulcorpului cererii si tipul raspunsului Pentru fiecare cerere care nu este apelata ın parteaneautentificata a utilizatorului primul lucru care se apeleaza este metoda de securitatepentru a verifica rolul si id-ul utilizatorului Daca din punctul de vedere al securitatii totuleste ın regula se apeleaza metoda corespunzatoare din pachetul de serviciu

39

O singura clasa este diferita de restul ın pachetul de controller si aceea este clasa deeroare Acolo se mapeaza erorile aparute ın timpul cererii si se trimite ınapoi ın interfatagrafica un raspuns cu cod de eroare specific nu numai 500 Generic Application Exceptioncum ar trimite fara aceasta clasa si cu detalii despre motivul aparitiei erorii

Datorita folosirii adnotarilor din java nu a fost necesara folosirea unor rdquodesignpatternrdquo-uri ın sistem De exemplu pentru a folosi ın nivelul de web ceva din pachetulde servicii trebuia doar acel obiect sa aiba adnotarea Autowired si se ınlocuieste atatfolosirea rdquodesign patternrdquo-ului Singleton cat si a celui de Factory Acel obiect nu trebuiecreat sau initializat se face asta implicit datorita adnotarii si de asemenea este folositapeste tot aceeasi instanta

In concluzie toate cererile venite din interfata grafica ajung ın nivelul de rdquocontrollerrdquode unde sunt trimise la cel de rdquoservicerdquopentru a fi procesate si facute eventualele modificarinecesare ın baza de date ca apoi raspunsul sa fie trimis ınapoi spre aplicatia client pentruafisare

512 Arhitectura componentei frontend

A doua componenta implementata a sistemului este aplicatia client frontend-ulAceasta a fost scrisa ın Java Script cu ajutorul framework-ului Ext JS compilarea

se face cu ajutorul Sencha CMD si mediul de implementare a fost IntelliJ IdeaCu ajutorul framework-ului Ext JS se scriu componente care apoi se initializeaza

unele pe altele Aplicatia porneste cu fisierul Applicationjs care este un fel de rdquomainrdquopentru aplicatie Aceasta initializeaza alte componente care la randul lor includ altecomponente si tot asa Structura poate fi foarte usor comparata cu una arborescenta dinacest punct de vedere

Framework-ul a fost creat sa functioneze ın felul acesta pentru ca scopul componen-telor este sa fie scrise ın asa fel ıncat sa poata pe viitor sa fie utilizate din nou Una dindorintele majore ın programare tot timpul este de a se scrie cod ıntr-o maniera ın care safie cat mai reutilizabil Iar framework-ul Ext JS exact asta ıncearca

Arhitectura aplicatiei client se gaseste ın figura 57 si este la randul ei ımpartita ınpachete ca si cea de server Similar cu pachetul de rdquodomainrdquo de la aplicatia de backendeste pachetul rdquomodelrdquo al interfetei utilizator Aici sunt rdquoclaserdquo care sunt simple POJO sicare sunt apoi folosite ın nivelele urmatoare Sunt mai putine decat clasele din rdquostorerdquodeoarece daca raspunsul de la server nu trebuie procesat nu sunt necesare se pot mapadirect obiectele din rdquostorerdquo pe componentele interfetei utilizator

Urmatorul nivel este cel pe care se afla clasele de rdquostorerdquo Acestea sunt cele careexecuta cererea spre backend si face legatura ıntre client si server Daca are o clasa derdquomodelrdquodeclarata atunci populeaza acel obiect cu datele primite de la server iar ın cazul ıncare nu este declarat un model se trimit datele exact asa cum s-au primit la nivelul urmatorde rdquoviewrdquo Acest nivel seamana din punct de vedere al functiei cu cel de rdquorepositoryrdquo de laaplicatia server deoarece ambele au rol de legatura Aceea facea legatura ıntre aplicatiesi baza de date si aceasta face legatura ıntre aplicatia client si aplicatia server

40

Figura 57 Diagrama de clase pentru aplicatia web

Cel de-al treilea pachet al aplicatiei este cel de rdquoviewrdquo In acest pachet se afla claselecare alcatuiesc partea vizuala a aplicatiei La randul ei si aceasta este alcatuita tot dincomponente Aplicatia deschide ın primul rand Main-ul care determina aparitia paginii deHome si afisarea ın meniu a optiunilor posibile ın functie de autentificare si rol Clasele deaici se executa de fapt la deschiderea aplicatiei fiind rdquosingle page applicationrdquo si tot atuncise ıncarca pe pagina componentele Ca si arhitectura a pachetului acesta este ımpartit larandul sau ın subpachete Pentru o mai buna organizare exista patru subpachete cateunul pentru fiecare tip de utilizator In felul acesta toate rdquoviewrdquo-urile care sunt specificeunui utilizator cu un anumit rol se afla ın acelasi subpachet

Cele patru subpachete existente ın pachetul rdquoviewrdquo sunt

1 Pachetul rdquomainrdquo care cuprinde rdquoviewrdquo-urile care se afla ın partea neautentificata aaplicatiei

2 Pachetul rdquoclientrdquo continand rdquoviewrdquo-urile pe care le poate accesa un utilizator simplu3 Pachetul rdquoproducerrdquo specific actiunilor unui utilizator care are rol de producator4 Pachetul rdquoadminrdquo care contine toate rdquoviewrdquo-urile care ıi apar unui utilizator care este

administrator al aplicatiei

Ultimul pachet si nivel al aplicatiei client este cel de rdquocontrollerrdquo In acest pachet

41

se afla clasele care fac actiunile din interfata grafica In timp ce pachetul rdquoviewrdquo continedoar partea grafica a aplicatiei adica modul ın care aceasta trebuie sa arate pachetulrdquocontrollerrdquo contine actiunea acestora modul ın care aplicatia trebuie sa functioneze

Ca si arhitectura si acest pachet a fost ımpartit la randul lui tot ın cele patrusubpachete ca si pachetul rdquoviewrdquo adica rdquomainrdquo rdquoclientrdquo rdquoproducerrdquo si rdquoadminrdquo In pluspentru a fi usor de gasit ce clasa de rdquocontrollerrdquo apartine carui rdquoviewrdquo am ales ca cele douasa aiba acelasi nume In felul acesta daca se doreste sa se gaseasca actiunile unui rdquoviewrdquose poate cauta dupa o clasa cu acelasi nume ın pachetul rdquocontrollerrdquo Numarul claselor dinacest pachet este mai mic decat cel al claselor din rdquoviewrdquo deoarece nu toate paginile dininterfata au actiuni suplimentare Daca singura actiune este ıncarcarea paginii cu date dela server adica doar o actiune simpla de GET datele se ıncarca cu ajutorul rdquostorerdquo-ului laıncarcarea paginii si nu este necesara nici o actiune suplimentara Paginile pe care se potface si actiuni de alt gen sau se deschid noi ferestre au nevoie de clase de rdquocontrollerrdquo

In concluzie arhitectura aplicatiei client este una bazata pe componente care ıncearcasa foloseasca cat mai multe clase reutilizabile

52 Structura bazei de date

Baza de date a aplicatiei este de tip graf de tipul Neo4j Pentru utilizare exista unprogram numit Neo4j ce trebuie instalat Acest program are si o interfata grafica ın carese pot vizualiza datele sub forma grafica si ın care se pot scrie de asemenea si interogariın limbajul acestei baze de date adica Cypher

Fiind o baza de date sub forma de graf datele stocate sunt salvate ın structurade date sub forma de noduri si relatii Entitatile din pachetul de domeniu din aplicatiabackend se gasesc ın baza de date sub forma unor noduri iar dependentele dintre nodurise mapeaza ın baza de date sub forma unor relatii Un element diferit fata de alte tipuride baze de date este faptul ca pe relatiile dintre noduri se pot salva atribute cum este ınaplicatie cazul pentru prieteniile dintre persoane In cazul acestora pe relatia dintre nodurise salveaza daca prietenia a fost sau nu acceptata

Pentru fiecare clasa POJO din aplicatia server clasa ce are doar metodele get si setsi se afla ın pachetul domain exista cate un tip de nod diferit ın baza de date cum estesi marcat ın diferite culori ın figura 58 Fiecare tip de nod are atributele proprii care potlua valori sau pot fi nule Iar fiecare obiect din Java reprezinta un nod diferit ın baza dedate

Neo4j a fost cea mai buna optiune pentru baza de date pentru ca aplicatia poate ficonsiderata o retea sociala Acest lucru se datoreaza relatiilor de prietenie dintre persoanesi a multiplelor relatii ıntre noduri Toate nodurile se afla ın acceasi componenta conexadeci nu exista noduri izolate care sa nu aiba nici o legatura cu nici un alt nod

Datorita acestei structuri a bazei de date este posibila implementarea cererii derecomandare ca o simpla interogare ın baza de date aceasta fiind cea mai simpla metodade implementare a unui sistem de genul acesta una mult mai complexa ar fi fost un

42

algoritm de ınvatare care sa ınvete tipare ale utilizatorilor si sa recomande cadouri pe bazaacestor informatii

Figura 58 Diagrama bazei de date pentru doi utilizatori

Un alt avantaj al acestui tip de baza de date este faptul ca datele nu sunt duplicateın baza de date Spre exemplu daca mai multi utilizatori au ca locatie acelasi oras nu secreaza cate un nod cu acea locatie de mai multe ori ci acel unic nod va avea cate o relatiecu fiecare utilizator care are ca locatie acel oras

In concluzie structura bazei de date a fost aleasa ın acest fel datorita tipului apli-catiei adica asemanatoare cu o retea sociala si datorita implementarii simple a unui sistemde recomandare pe o asemenea baza de date

53 Fluxul pentru diferite operatii

Pentru aplicatie cele mai importante cazuri de utilizare sunt salvarea informati-ilor despre utilizator primite de la Facebook pentru crearea unui profil si recomandareacadourilor pentru un utilizator al aplicatiei Din aceasta cauza cele doua cazuri de utilizarevor fi prezentate mai ın detaliu ın continuare

43

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 27: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

Flux de evenimente

Use-Case Start

Cazul de utilizare ıncepe atunci cand producatorul porneste aplicatia

11 Producatorul verifica daca are cont de Facebook si daca are urmeaza pasul111 daca nu 22

111 Producatorul se autentifica ın aplicatie cu ajutorul credentialelor de laFacebook

12 Producatorul deschide sectiunea de adaugare produs

13 Producatorul completeaza datele necesare despre noul produs ımpreuna cu tipulde persoana si eveniment care i s-ar potrivi

14 Producatorul verifica daca este multumit de datele introduse si daca da urmeazapasul 141 daca nu 23

141 Producatorul efectueaza operatia de adaugare produs

15 Sistemul adauga un nou produs ın baza de date

16 Sistemul notifica producatorul ca noul produs a fost introdus cu succes

17 Producatorul se dezautentifica din aplicatie

Use-Case End

Producatorul se va deconecta din aplicatie si o va ınchide

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Producatorul deschide sectiunea de adaugare produs

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca producatorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Producatorul deschide pagina de Facebook

222 Producatorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Producatorul revine la aplicatia de recomandare cadouri si ıncearca dinnou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca Producatorul nu e multumit de datele introduse despreprodus

Acest flux poate aparea la pasul 14

231 Producatorul sterge datele gresite despre produs

232 Producatorul adauga alte date despre produs

233 Cazul de utilizare continua de la pasul 141

22

Preconditii

1 Producatorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Producatorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Producatorul trebuie sa aiba cont cu rol de rdquoproducatorrdquo sau rdquoadminrdquo pentru aputea face operatia aceasta

4 Producatorul trebuie sa deschida sectiunea de adaugare produs pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noul produs este salvat ın baza de date2 Produsul poate fi adaugat la recomandarile unui utilizator din acel moment

433 Modificare rol utilizator

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unadministrator trebuie sa le urmeze pentru a modifica rolul unui utilizator al aplicatiei

Actorul principal

Un utilizator al aplicatiei care are rol de administrator

Parti interesate si interese

Administratorul care doreste sa modifice rolul unui utilizatorUtilizatorul care doreste sa ısi schimbe rolul

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand administratorul porneste aplicatia11 Administratorul verifica daca are cont de Facebook si daca are urmeaza pasul

111 daca nu 22111 Administratorul se autentifica ın aplicatie cu ajutorul credentialelor de

la Facebook12 Administratorul deschide sectiunea de utilizatori13 Sistemul ıi returneaza administratorului utilizatorii care nu sunt administratori14 Administratorul modifica rolul utilizatorului din utilizator simplu ın producator

sau invers

23

15 Administratorul cere executarea modificarii

16 Sistemul executa modificarea iar ın caz de succes urmeaza pasul 161 si ın cazde eroare pasul 23

161 Sistemul notifica administratorul ca modificarea a fost efectuata cusucces

17 Utilizatorul se dezautentifica din aplicatie

Use-Case End

Administratorul se va deconecta din aplicatie si o va ınchide

Figura 44 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo

24

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Administratorul deschide sectiunea de utilizatori

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca administratorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Administratorul deschide pagina de Facebook

222 Administratorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Administratorul revine la aplicatia de recomandare cadouri si ıncearcadin nou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca sistemul returneaza o eroare la modificarea utilizatorului

Acest flux poate aparea la pasul 16

231 Sistemul returneaza un mesaj de eroare la modificarea utilizatorului

232 Aplicatia afiseaza mesajul de eroare administratorului

233 Cazul de utilizare continua de la pasul 15

Preconditii

1 Administratorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Administratorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Utilizatorul trebuie sa aiba cont cu rol de administrator pentru a putea efectuaorice actiune din acest caz de utilizare

4 Administratorul trebuie sa deschida sectiunea utilizatori pentru a putea ındeplinicerintele din cazul de utilizare

Postconditii

1 Noul rol al utilizatorului este salvat ın baza de date

2 La urmatoarea autentificare a utilizatorului acesta va observa ca interfata si maiprecis meniurile si actiunile care le poate face ıi vor fi diferite

25

44 Perspectiva tehnologica

441 Neo4j

Neo4j 1 este un sistem de gestionare a bazelor de date sub forma de graf dezvoltatde Neo4j Inc Descris de dezvoltatorii sai ca o baza de date tranzactionala compatibilacu ACID Neo4j este cea mai populara baza de date sub forma de graf dupa clasamentulDB-Engines

Baza de date Neo4j (ca si orice alta baza de date sub forma de graf) este foartediferita de o baza de date relationala cum ar fi MS Access SQL Server MySQL etcBazele de date relationale utilizeaza tabele randuri si coloane pentru stocarea datelor

Neo4j nu utilizeaza tabele randuri si coloane pentru stocarea sau prezentarea datelorci noduri si relatii

Neo4j este foarte potrivit pentru stocarea datelor care au multe relatii interconec-tate Acestea sunt de fapt aplicatiile ın care merita sa fie folosite De fapt bazele de datesub forma de graf cum este Neo4j sunt mult mai bune la tratarea datelor interconectatedecat bazele de date relationale

Acest lucru se datoreaza faptului ca modelul sub forma de graf nu necesita de obiceio schema predefinita Nu e nevoie sa se creeze structura bazei de date ınainte de a fiıncarcate datele asa cum se face la o baza de date relationala

Dar principalul motiv pentru care Neo4j este mai bun pentru datele relationalepentru acest tip de aplicatii este modul ın care permite crearea relatiilor Neo4j este con-struit ın jurul relatiilor si atunci nu este nevoie sa se configureze chei primare constrangerichei straine pentru a predetermina nodurile care pot avea o relatie si la ce date Cu Neo4jse poate adauga orice legatura ıntre orice nod ori de cate ori este nevoie

Neo4j are aceste calitati care nu se gasesc nici la celelalte baze de date NoSQLBazele de date non-relationale pe langa cele sub forma de graf sunt cele de tip coloanade tip document de tip cheie-valoare si de tip multi-model Nici unul din aceste tipuri nuau ca principala functionalitate maparea relatiilor si facilitatea interogarilor ıntr-o baza dedate cu multe relatii ıntre entitati

Generarea de recomandari personalizate este unul dintre cele mai frecvente cazuride utilizare a unei baze de date sub forma de graf Unele dintre principalele beneficii aleutilizarii grafurilor pentru a genera recomandari includ

- Performanta Lipsa indexurilor permite calcularea recomandarilor ın timp realasigurand ca recomandarea este ıntotdeauna relevanta si reflecta informatii actualizate

- Model de date Modelul de graf cu proprietati permite combinarea cu usurinta aseturilor de date din mai multe surse

Un alt avantaj al bazelor de date sub forma de graf Neo4j este faptul ca respectatoate principiile din modelul de consistenta ACID

Garantia data de principiile ACID este ca ofera un mediu sigur ın care sa functionezedatele Acronimul ACID reprezinta

1httpsneo4jcomuse-casesreal-time-recommendation-engine

26

bull Atomic Toate operatiile dintr-o tranzactie reusesc sau fiecare operatie este reluatabull Consistent La finalizarea unei tranzactii baza de date este solida din punct de

vedere structuralbull Izolat Tranzactiile nu se lupta una cu cealalta Accesul controversat la date este

moderat de baza de date astfel ıncat tranzactiile par sa se execute succesivbull Durabil Rezultatele aplicarii unei tranzactii sunt permanente chiar si ın cazul unor

defectiuniCand vine vorba de tehnologiile NoSQL cele mai multe baze de date sub forma de

graf (inclusiv Neo4j) utilizeaza un model de consistenta ACID pentru a asigura ca datelesunt stocate ın siguranta si ın mod consecvent

Am ales baza de date sub forma de graf ca optiune pentru stocarea datelor deoarecedin toate lucrarile si articolele citite a fost optiunea cea mai buna pentru un sistem derecomandare Deci acesta se mapeaza perfect pe cerintele functionale ale proiectului Sidin optiunile de baze de date sub forma de graf Noe4j a avut de departe cele mai multeavantaje ea fiind si cea mai utilizata

442 Cypher

Cypher 2 este un limbaj declarativ de interogare pentru bazele de date sub formade graf care permite interogarea si actualizarea rapida a datelor Cypher este un limbajrelativ simplu dar foarte puternic Interogarile foarte complexe ale bazei de date pot fiusor exprimate prin intermediul limbajului Cypher

Este conceput pentru a fi un limbaj de interogare uman Scopul lui principal este dea face interogarile mult mai simple si unele interogari care la bazele de date relationale nuerau posibile le face posibile Constructiile sale se bazeaza pe grafica si pe limba englezalucru care ajuta la scrierea mai intuitiva a interogarilor Este construit pentru a fi maiintuitiv pentru citire si nu neaparat pentru scriere

Cypher se bazeaza pe modelul Graph Property care ın plus fata de elementelegrafice standard ale nodurilor si muchiilor (numite relatii ın Cypher) adauga etichete siproprietati ca si concepte Nodurile pot avea zero sau mai multe etichete ın timp ce fiecarerelatie este de exact un singur tip Nodurile si relatiile au de asemenea zero sau mai multeproprietati

Chypher este limbajul de interogare folosit la bazele de date Neo4j deci este opti-unea implicita atunci cand se alege Neo4j

443 Maven

Maven 3 este un instrument de management software si de ıntelegere a proiectelorsoftware Pe baza conceptului unui model de obiect de proiect (POM) Maven poategestiona construirea raportarea si documentarea unui proiect printr-o informatie centrala

2httpsneo4jcomdevelopercypher-query-language3httpswwwjavatpointcommaven-tutorial

27

Obiectivul principal al lui Maven este acela de a permite unui dezvoltator sa ınte-leaga starea completa a efortului de dezvoltare ın cel mai scurt timp Avantajele Mavensunt

bull instalarea rapida a proiectului fara fisiere buildxml complicate doar un POMbull procesul de construire este standardizat pentru toate proiectelebull usor de ınvatat si de utilizatbull configurarea unui proiect este foarte rapidabull bine documentat

Am ales sa folosesc Maven deoarece este una din cele mai comune optiuni pentru aimporta librariile ıntr-un proiect si este si cel mai documentat Deci mereu cand esti pusın dificultate poti cauta pe internet sugestii

444 Spring Boot

Spring Boot 4 este un framework din cadrul Spring care ofera setari implicite pentruconfigurarea codului si adnotari pentru a lansa rapid proiecte noi ın executie Urmaresteabordarea rdquoConfigurarea defectiunilor vizionaterdquo pentru a evita un numar mare de linii decod pentru configuratii si pentru a ımbunatati procesul de dezvoltare

Avantajele Spring Boot sunt1 Face foarte usoara dezvoltarea de aplicatii bazate pe Spring cu Java sau Groovy2 Reduce timpul de dezvoltare si creste productivitatea3 Evita scrierea multor linii de cod adnotari si configurare XML4 Este foarte usor de integrat cu alte framework-uri din aceasi familie Spring cum ar

fi Spring JDBC Spring ORM Spring Data Spring Security etc5 Urmareste abordarea rdquoConfigurarea implicita a optiunilorrdquo pentru a reduce efortul

pentru dezvoltatori6 Ofera servere HTTP ıncorporate cum ar fi Tomcat Jetty etc pentru a dezvolta si

testa aplicatiile web foarte usor7 Ofera instrumentul CLI (Command Line Interface) pentru a dezvolta si testa apli-

catiile de tip rdquoSpring Bootrdquo (Java sau Groovy) din linia de comanda foarte usor sirapidAm ales ca optiune pentru partea de backend acest framework deoarece simplifica

foarte mult lucrurile Datorita lui un programator poate sa ısi concentreze mai tare energiape a construi proiectul din punctul de vedere al buissness-ului logic nu din punctul devedere al configurarilor necesare

445 Sencha CMD si ExtJS

Sencha CMD 5 este un instrument linie de comanda cross-platform care ofera multesarcini automate ın ciclul complet de viata al unei aplicatii ExtJS de la generarea unui

4httpswwwjavatpointcomspring-boot-tutorial5httpsdocssenchacomcmd

28

nou proiect la lansarea unei aplicatii ın productie

Sencha Cmd ofera o colectie de caracteristici puternice pentru economisirea timpu-lui care functioneaza ımpreuna cu Sencha ExtJS si Sencha Touch

Ext JS 6 este un framework pur JavaScript pentru construirea de aplicatii webinteractive cross-platform utilizand tehnici precum scripting Ajax DHTML si DOM

Avantajele framework-ului ExtJS sunt

1 Documentatia Extjs este foarte cuprinzatoare si bine ıntretinuta2 Aspectul cheie al bibliotecii EXTJS este suportul de tip cross-browser3 Framework-ul ExtJS ofera o multitudine de elemente UI Aceste elemente includ

forme casete de dialog file arbori si tabele4 Framework-ul ExtJS include suport pentru implementarile Ajax5 ExtJS ofera performante excelente Framework-ul este complet orientat spre obiecte

si este extensibil asta pentru ca este scris ın JavaScript

Pentru partea de frontend se foloseste framework-ul ExtJS deoarece are o arhitec-tura ce se mapeaza foarte bine pe proiectele de frontend si anume arhitectura bazata pecomponente Aceasta face ca ın proiect codul sa fie mult mai organizat si procesul dedezvoltare al proiectului sa fie mult mai scurt prin identificarea mai usoara a erorilor

446 Facebook API(Graph API)

Graph API 7 este modul principal de a pune date ın platforma Facebook si de aobtine date din platforma Facebook Este un API bazat pe HTTP pe care aplicatiile ılpot utiliza pentru interogarea datelor pentru a introduce postari noi pentru gestionareaanunturilor sau pentru a ıncarca fotografii

Este denumit Graph API dupa ideea unui rdquograf socialrdquo - o reprezentare sub formade graf a informatiilor de pe Facebook Este compus din

bull noduri - ın esenta obiecte individuale cum ar fi un utilizator o fotografie o paginasau un comentariu

bull muchii - conexiuni ıntre o colectie de obiecte si un singur obiect cum ar fi fotografiilede pe o pagina sau comentariile de la o fotografie

bull campuri - date despre un obiect cum ar fi ziua de nastere a unui utilizator saunumele paginii

De obicei se utilizeaza noduri pentru a obtine date despre un anumit obiect se uti-lizeaza muchii pentru a obtine colectii de obiecte legate de un singur obiect si se utilizeazacampurile pentru a obtine date despre un singur obiect sau mai multe obiecte dintr-ocolectie

Am folosit Facebook API ca solutie pentru a ımbunatati problema de rdquocold startrdquopentru ca este singurul site pe care marea majoritate a oamenilor au cont si salveazalucrurile care le plac Deci se potrivea perfect peste nevoile aplicatiei mele

6httpdocssenchacomextjs6207httpsdevelopersfacebookcomdocsgraph-api

29

447 Git

Git 8 este un sistem de control a versionarii pentru urmarirea modificarilor ın fisierelede pe computer si coordonarea activitatii asupra acestor fisiere ın randul mai multor per-soane Este utilizat ın principal pentru gestionarea codului sursa ın dezvoltarea de softwaredar poate fi folosit pentru a urmari schimbarile ın orice set de fisiere

Avantaje ale Git

bull Modelul distribuit numai ceea ce se doreste se face publicbull Branching-ul si merging-ul sunt usoarebull Fluxul de lucru este flexibilbull Integritatea datelor este asigurata Deoarece GIT utilizeaza arbori SHA1 coruperea

datelor din motive externe poate fi usor detectatabull Rapid Git este foarte rapid chiar si ın comparatie cu alte sisteme de control a

versionarii

Am folosit Git pentru a avea la proiect un back-up ın caz ca se ıntampla ceva cuproiectul salvat pe calculator

45 Arhitectura conceptuala

In figura 45 este prezentata arhitectura conceptuala a sistemului Acesta este ım-partit ın doua mari parti backend-ul si frontend-ul care comunica ıntre ele si ısi trimitinformatii

Se poate observa ca baza de date este de tip graf mai exact Neo4j si comunica cubackend-ul pentru a putea lucra cu datele stocate Backend-ul este structurat pe nivelefiecare cu un diferit rol si care trebuie parcurs pentru a procesa datele din interfata ınbaza de date Cele trei nivele sunt cel de Repository cel de Service si cel ControllerToate interogarile venite din interfata utilizator ajung ın nivelul de Controller Dupa ceinterogarile trec de securitatea sistemului ajung ın nivelul de Service Acolo se proceseazasi se afla partea de logica a aplicatiei Pentru a interactiona cu baza de date din Servicese apeleaza metodele din nivelul de Repository

In continuare backend-ul comunica prin protocolul HTTP cu interfata grafica cucare interactioneaza clientii aplicatiei Interfata este scrisa ın Ext JS si are o parte de Viewsi o parte de Controller care este cea care comunica cu backend-ul

Pentru partea de autentificare sistemul interactioneaza cu API-ul de la Facebookde la care ia dupa autentificare un access token Cu ajutorul acestuia ia dupa aceea datelenecesare pentru a putea crea un profil utilizatorului

8httpsguidesgithubcomintroductiongit-handbook

30

Figura 45 Arhitectura conceptuala

31

Capitolul 5

Proiectare de Detaliu siImplementare

In acest capitol vor fi prezentate detalii de implementare ale sistemului de recoman-dare incluzand o ımpartire al acestuia ın componentele care ıl cuprind

Obiectivul este de a prezenta arhitectura si modul de implementare al aplicatieipe baza datelor descoperite ın studiul bibliografic de la capitolul trei si cu tehnologiilehotarate la capitolul patru Pe langa asta va fi prezentata si structura bazei de date sideciziile luate pentru securitatea aplicatiei

51 Arhitectura sistemului

Din punctul de vedere al arhitecturii aplicatia se poate considera ca este alcatuitadin patru mari componente

1 API-ul de la Facebook2 Aplicatia client care reprezinta interfata grafica a aplicatiei3 Aplicatia server adica backendul aplicatiei si partea ın care se afla partea de rdquobusiness

logicrdquo4 Baza de date

Partea componenta reprezentata de API-ul de la Facebook este doar o componentacu care aplicatia se integreaza si pe care aceasta o foloseste In interactiunea cu ea interfatada o cerere de autentificare apare o fereastra de la Facebook ın care utilizatorul introducecredentialele de la API-ul de Facebook se primeste ınapoi un access token si cu ajutorulacestuia face o cerere pentru a primi datele personale ale utilizatorului pentru creeareaprofilului utilizator

Urmatoarea parte a aplicatiei este interfata utilizator frontend-ul care reprezintapartea cu care utilizatorul interactioneaza si locul unde ıi sunt afisate informatiile

Cererile din interfata ajung ın a treia parte componenta a sistemului partea deserver adica backend-ul aplicatiei Acolo toate cererile sunt citite si procesate iar raspun-

33

sul lor este trimis la interfata utilizator Aceasta este partea care reprezinta rdquogandireardquoaplicatiei Aceea este componenta care face legatura ıntre cererile utilizatorului din inter-fata si datele stocate ın baza de date

Ultima componenta a aplicatiei o reprezinta baza de date care are ca rol sa stochezedatele despre utilizatori produse si comenzi Ea este o baza de date sub forma de grafde tipul Neo4j Acolo se salveaza entitatile aplicatiei sub forma de noduri si dependenteleıntre acestea sub forma de relatii ıntre aceste noduri

Figura 51 Diagrama de rdquodeploymentrdquo

In figura 51 este prezentata diagrama de rdquodeploymentrdquo a sistemului cu cele patrucomponente ale sistemului Aplicatia client comunica cu API-ul de la Facebook prin pro-tocolul securizat HTTPS cu backend-ul prin protocolul HTTP iar backend-ul cu baza dedate prin JDBC

Aplicatia a putut fi ımpartita ın aceste componente separate deoarece fiecare dintreele poate functiona independent de celelalte comunica cu ele doar prin mesaje Din acestmotiv locul unde ruleaza acestea pot sa fie pe servere diferite In plus daca aplicatiaar fi pusa pe servere pentru utilizatori ar putea fi mai multe servere pe care ruleaza ocomponenta si prin rdquoload balancingrdquo sa se trimita cererile ımpartite ıntre ele

Cum astfel componentele nu depind foarte mult unele de altele si pot rula faraa le interesa de unde le sunt trimise cererile este arhitectura cea mai corecta deoarecedefectarea sau o posibila eroare la una din ele nu o influenteaza cu nimic pe o alta Dacatoate ar rula pe acelasi server o eventuala defectiune a acestuia ar ınsemna o defectiune aıntregului sistem Insa daca exista mai multe noduri si se afla pe servere diferite pot doartoate cererile sa fie redirectionate spre un nod care functioneaza si aplicatia sa functionezepentru clienti la fel ca ınainte

34

Un alt avantaj al arhitecturii ar fi faptul ca la o lansare viitoare catre clienti se poatelansa doar componenta la care s-au facut modificari De asemenea aplicatia ar putea aveape viitor si o componenta mobila Iar cum serverul e independent poate fi acelasi serverfolosit de o alta aplicatie client

511 Arhitectura componentei backend

Arhitectura backend-ului este si ea ımpartita ın mai multe pachete pentru o maibuna structura si pentru o cat mai mica dependenta ıntre diversele componente Astfelcuplarea este minima ıntre clase si eventualele modificari ulterioare pot fi mai usor defacut

Serverul a fost implementat ın Java cu ajutorul framework-ului Spring Boot iarmediul de dezvoltare folosit a fost Intellij IDEA

Din punctul de vedere al ımpartirii arhitectura serverului aplicatiei este structurataın patru pachete si o clasa ın afara acestora Acea clasa este rdquomainrdquo-ul aplicatiei este parteacare trebuie rulata pentru a porni serverul Din cauza ca este o aplicatie Spring Boot si nuuna String singura adnotare necesara pentru a sti ca aceea este clasa rdquoradacinardquoa aplicatieieste SpringBootApplication

Cele patru pachete ale serverului sunt1 Cel de domeniu (domain) cu clasele POJO care reprezinta entitatile din baza de

date2 Cel de rdquomagazierdquo (repositories) care este cel care face direct actiunile ın baza de date3 Cel de serviciu (services) ın care se afla partea de logica a ıntregii aplicatii4 Cel de web ın care se afla clasele de rdquocontrollerrdquo

Figura 52 Diagrama de pachete pentru backend

35

Ca si dependente nivelul de web ıl foloseste pe cel de seviciu cel de serviciu ılfoloseste pe cel de rdquomagazierdquo iar clasele din pachetul de domeniu sunt folosite ın toatecelelalte pachete

In continuare voi prezenta pe rand fiecare nivel al serverului adica fiecare pachet

Figura 53 Diagrama de clase pentru pachetul rdquodomainrdquo

36

Nivelul de domeniu (domain) este alcatuit ın primul rand din clasele care suntentitati ın baza de date Acestea sunt reprezentate de toate clasele ce stocheaza informatiidespre utilizatori si despre produse si comenzi Pe langa informatiile personale despre unutilizator de genul numelui email-ului sau data nasterii care sunt salvate ın entitateapersoana se stocheaza despre utilizator ın clase diferite informatii de genul locului undelocuieste locul unde a copilarit locurilor unde a facut scoala locului unde lucreaza sau celmai important pentru aplicatia aceasta lucrurilor care ıi plac In afara acestor informatiidespre utilizatori sunt si clase cu informatiile despre prieteni despre produse sau desprecomenzi

Din cauza faptului ca aplicatia este de tipul unei retele sociale ın care exista prieteniiıntre persoane exista dependente ıntre toate entitatile aplicatiei Acesta este si motivulpentru care am ales baza de date sub forma de graf pe care sa se mapeze toate acesteentitati sub forma de noduri si toate aceste dependente sub forma de relatii

In pachetul de domeniu se afla si trei subpachete Unul dintre ele este pentruclasele folosite pentru a trata erorile aplicatiei In interiorul acestui pachet se afla douaclase pentru eroare si o exceptie cea folosita ın cazul ın care nu se gaseste ceea ce doresteutilizatorul Pe langa asta este clasa care are ca obiect raspunsul dat de sistem ın cazulunei erori la server Aceasta contine ın interiorul sau pe langa codul erorii si detalii despreeroarea trimisa Aceasta lista de detalii e reprezentata de obiectele de tipul celei de-a treiaclase din pachetul acesta

Celelalte doua subpachete aflate ın acest nivel sunt cele care contin clasele specialede cerere sau raspuns care au ajutat la maparea acestora mai bine In multe cazuri nua fost necesara trimiterea la interfata utilizator a tuturor informatiilor stocate despre oentitate si de aceea am ales sa creez ın aceste cazuri un obiect auxiliar care sa fie folositpe post de raspuns

Figura 54 Diagrama de clase pentru pachetul rdquorepositoriesrdquo

37

Cel de-al doilea nivel al aplicatiei backend este cel de rdquomagazierdquo (repositories) carecontine doar interfete de tip rdquoRepositoryrdquo

Aceste interfete sunt cele care fac operatiile directe asupra entitatilor din baza dedate

Unele interfete doar extind interfata care are deja implementate metodele CRUDsi din acest motiv nu au metode suplimentare iar altele au si metode ın plus care au carol sa execute interogari mai complexe asupra bazei de date In acele metode se pot scrieinterogarile ın Cypher pentru a putea primi informatii despre mai multe noduri sau desprerelatiile dintre acestea sau si pentru a returna doar anumite rezultate care ındeplinescanumite conditii In felul acesta a fost implementata si cererea de oferire a recomandarilorIn acel caz sistemul returneaza produsele care au ın descriere unul din lucrurile care se aflaın lista de obiecte sau servicii primite de la Facebook ca ıi plac utilizatorului

Nivelul de rdquoRepositoryrdquo este folosit direct de cel de-al treiea nivel cel de servi-ciu Acesta este nivelul la care se executa logica aplicatiei unde se comanda modul defunctionare al ıntregii aplicatii

Figura 55 Diagrama de clase pentru pachetul rdquoservicesrdquo

Pe acest nivel ajung toate cererile din server dupa ce trec de verificarile de securitateIn acest pachet se afla si clasa de securitate care face verificarile necesare In aceasta clasaexista o metoda ce se apeleaza la prima cerere cea de salvare a datelor de la Facebookdespre utilizator si care codifica id-ul utilizatorului si ıl trimite pe raspuns ınapoi interfeteiPe langa asta ın acea clasa se afla si o metoda care verifica faptul ca id-ul codificat esteal unui utilizator cu rol corespunzator pentru a face acea cerere

In plus ın acest pachet se afla si toate celelalte clase care fac diverse operatii pedatele din baza de date si dau raspunsuri cererilor din interfata Aici se afla logica care

38

comanda actiunile asupra utilizatorilor asupra prietenilor acestora asupra produselor siasupra comenzilor

Ultima clasa a acestui nivel este cea care se ocupa de trimiterea de email-uri Incazul ın care se face o noua comanda de catre un utilizator toti producatorii produselor depe comanda sunt notificati despre produsele lor pe care le doreste utilizatorul Din serviciulde comanda se apeleaza serviciul de email pentru fiecare producator din lista celor care auproduse care se afla pe lista comenzii utilizatorului

Ultimul si cel mai aproape de interfata utilizator este nivelul de web Acolo se aflatoate clasele de rdquoControllerrdquo ale aplicatiei server

Figura 56 Diagrama de clase pentru pachetul rdquowebrdquo

Toate cererile din interfata utilizator ıncearca sa se mapeze pe rutele declarate ınclase pentru a fi procesate ın metoda corespunzatoare Toata aceasta parte este foarteusor de implementat si mai ales foarte lizibil pentru programatori datorita adnotarilor dinJava Cu ajutorul acestora trebuie doar specificat care este numele URL-ului cererii careeste tipul de obiect asteptat si daca se trimite ca rdquoquery stringrdquo pe URL sau ın interiorulcorpului cererii si tipul raspunsului Pentru fiecare cerere care nu este apelata ın parteaneautentificata a utilizatorului primul lucru care se apeleaza este metoda de securitatepentru a verifica rolul si id-ul utilizatorului Daca din punctul de vedere al securitatii totuleste ın regula se apeleaza metoda corespunzatoare din pachetul de serviciu

39

O singura clasa este diferita de restul ın pachetul de controller si aceea este clasa deeroare Acolo se mapeaza erorile aparute ın timpul cererii si se trimite ınapoi ın interfatagrafica un raspuns cu cod de eroare specific nu numai 500 Generic Application Exceptioncum ar trimite fara aceasta clasa si cu detalii despre motivul aparitiei erorii

Datorita folosirii adnotarilor din java nu a fost necesara folosirea unor rdquodesignpatternrdquo-uri ın sistem De exemplu pentru a folosi ın nivelul de web ceva din pachetulde servicii trebuia doar acel obiect sa aiba adnotarea Autowired si se ınlocuieste atatfolosirea rdquodesign patternrdquo-ului Singleton cat si a celui de Factory Acel obiect nu trebuiecreat sau initializat se face asta implicit datorita adnotarii si de asemenea este folositapeste tot aceeasi instanta

In concluzie toate cererile venite din interfata grafica ajung ın nivelul de rdquocontrollerrdquode unde sunt trimise la cel de rdquoservicerdquopentru a fi procesate si facute eventualele modificarinecesare ın baza de date ca apoi raspunsul sa fie trimis ınapoi spre aplicatia client pentruafisare

512 Arhitectura componentei frontend

A doua componenta implementata a sistemului este aplicatia client frontend-ulAceasta a fost scrisa ın Java Script cu ajutorul framework-ului Ext JS compilarea

se face cu ajutorul Sencha CMD si mediul de implementare a fost IntelliJ IdeaCu ajutorul framework-ului Ext JS se scriu componente care apoi se initializeaza

unele pe altele Aplicatia porneste cu fisierul Applicationjs care este un fel de rdquomainrdquopentru aplicatie Aceasta initializeaza alte componente care la randul lor includ altecomponente si tot asa Structura poate fi foarte usor comparata cu una arborescenta dinacest punct de vedere

Framework-ul a fost creat sa functioneze ın felul acesta pentru ca scopul componen-telor este sa fie scrise ın asa fel ıncat sa poata pe viitor sa fie utilizate din nou Una dindorintele majore ın programare tot timpul este de a se scrie cod ıntr-o maniera ın care safie cat mai reutilizabil Iar framework-ul Ext JS exact asta ıncearca

Arhitectura aplicatiei client se gaseste ın figura 57 si este la randul ei ımpartita ınpachete ca si cea de server Similar cu pachetul de rdquodomainrdquo de la aplicatia de backendeste pachetul rdquomodelrdquo al interfetei utilizator Aici sunt rdquoclaserdquo care sunt simple POJO sicare sunt apoi folosite ın nivelele urmatoare Sunt mai putine decat clasele din rdquostorerdquodeoarece daca raspunsul de la server nu trebuie procesat nu sunt necesare se pot mapadirect obiectele din rdquostorerdquo pe componentele interfetei utilizator

Urmatorul nivel este cel pe care se afla clasele de rdquostorerdquo Acestea sunt cele careexecuta cererea spre backend si face legatura ıntre client si server Daca are o clasa derdquomodelrdquodeclarata atunci populeaza acel obiect cu datele primite de la server iar ın cazul ıncare nu este declarat un model se trimit datele exact asa cum s-au primit la nivelul urmatorde rdquoviewrdquo Acest nivel seamana din punct de vedere al functiei cu cel de rdquorepositoryrdquo de laaplicatia server deoarece ambele au rol de legatura Aceea facea legatura ıntre aplicatiesi baza de date si aceasta face legatura ıntre aplicatia client si aplicatia server

40

Figura 57 Diagrama de clase pentru aplicatia web

Cel de-al treilea pachet al aplicatiei este cel de rdquoviewrdquo In acest pachet se afla claselecare alcatuiesc partea vizuala a aplicatiei La randul ei si aceasta este alcatuita tot dincomponente Aplicatia deschide ın primul rand Main-ul care determina aparitia paginii deHome si afisarea ın meniu a optiunilor posibile ın functie de autentificare si rol Clasele deaici se executa de fapt la deschiderea aplicatiei fiind rdquosingle page applicationrdquo si tot atuncise ıncarca pe pagina componentele Ca si arhitectura a pachetului acesta este ımpartit larandul sau ın subpachete Pentru o mai buna organizare exista patru subpachete cateunul pentru fiecare tip de utilizator In felul acesta toate rdquoviewrdquo-urile care sunt specificeunui utilizator cu un anumit rol se afla ın acelasi subpachet

Cele patru subpachete existente ın pachetul rdquoviewrdquo sunt

1 Pachetul rdquomainrdquo care cuprinde rdquoviewrdquo-urile care se afla ın partea neautentificata aaplicatiei

2 Pachetul rdquoclientrdquo continand rdquoviewrdquo-urile pe care le poate accesa un utilizator simplu3 Pachetul rdquoproducerrdquo specific actiunilor unui utilizator care are rol de producator4 Pachetul rdquoadminrdquo care contine toate rdquoviewrdquo-urile care ıi apar unui utilizator care este

administrator al aplicatiei

Ultimul pachet si nivel al aplicatiei client este cel de rdquocontrollerrdquo In acest pachet

41

se afla clasele care fac actiunile din interfata grafica In timp ce pachetul rdquoviewrdquo continedoar partea grafica a aplicatiei adica modul ın care aceasta trebuie sa arate pachetulrdquocontrollerrdquo contine actiunea acestora modul ın care aplicatia trebuie sa functioneze

Ca si arhitectura si acest pachet a fost ımpartit la randul lui tot ın cele patrusubpachete ca si pachetul rdquoviewrdquo adica rdquomainrdquo rdquoclientrdquo rdquoproducerrdquo si rdquoadminrdquo In pluspentru a fi usor de gasit ce clasa de rdquocontrollerrdquo apartine carui rdquoviewrdquo am ales ca cele douasa aiba acelasi nume In felul acesta daca se doreste sa se gaseasca actiunile unui rdquoviewrdquose poate cauta dupa o clasa cu acelasi nume ın pachetul rdquocontrollerrdquo Numarul claselor dinacest pachet este mai mic decat cel al claselor din rdquoviewrdquo deoarece nu toate paginile dininterfata au actiuni suplimentare Daca singura actiune este ıncarcarea paginii cu date dela server adica doar o actiune simpla de GET datele se ıncarca cu ajutorul rdquostorerdquo-ului laıncarcarea paginii si nu este necesara nici o actiune suplimentara Paginile pe care se potface si actiuni de alt gen sau se deschid noi ferestre au nevoie de clase de rdquocontrollerrdquo

In concluzie arhitectura aplicatiei client este una bazata pe componente care ıncearcasa foloseasca cat mai multe clase reutilizabile

52 Structura bazei de date

Baza de date a aplicatiei este de tip graf de tipul Neo4j Pentru utilizare exista unprogram numit Neo4j ce trebuie instalat Acest program are si o interfata grafica ın carese pot vizualiza datele sub forma grafica si ın care se pot scrie de asemenea si interogariın limbajul acestei baze de date adica Cypher

Fiind o baza de date sub forma de graf datele stocate sunt salvate ın structurade date sub forma de noduri si relatii Entitatile din pachetul de domeniu din aplicatiabackend se gasesc ın baza de date sub forma unor noduri iar dependentele dintre nodurise mapeaza ın baza de date sub forma unor relatii Un element diferit fata de alte tipuride baze de date este faptul ca pe relatiile dintre noduri se pot salva atribute cum este ınaplicatie cazul pentru prieteniile dintre persoane In cazul acestora pe relatia dintre nodurise salveaza daca prietenia a fost sau nu acceptata

Pentru fiecare clasa POJO din aplicatia server clasa ce are doar metodele get si setsi se afla ın pachetul domain exista cate un tip de nod diferit ın baza de date cum estesi marcat ın diferite culori ın figura 58 Fiecare tip de nod are atributele proprii care potlua valori sau pot fi nule Iar fiecare obiect din Java reprezinta un nod diferit ın baza dedate

Neo4j a fost cea mai buna optiune pentru baza de date pentru ca aplicatia poate ficonsiderata o retea sociala Acest lucru se datoreaza relatiilor de prietenie dintre persoanesi a multiplelor relatii ıntre noduri Toate nodurile se afla ın acceasi componenta conexadeci nu exista noduri izolate care sa nu aiba nici o legatura cu nici un alt nod

Datorita acestei structuri a bazei de date este posibila implementarea cererii derecomandare ca o simpla interogare ın baza de date aceasta fiind cea mai simpla metodade implementare a unui sistem de genul acesta una mult mai complexa ar fi fost un

42

algoritm de ınvatare care sa ınvete tipare ale utilizatorilor si sa recomande cadouri pe bazaacestor informatii

Figura 58 Diagrama bazei de date pentru doi utilizatori

Un alt avantaj al acestui tip de baza de date este faptul ca datele nu sunt duplicateın baza de date Spre exemplu daca mai multi utilizatori au ca locatie acelasi oras nu secreaza cate un nod cu acea locatie de mai multe ori ci acel unic nod va avea cate o relatiecu fiecare utilizator care are ca locatie acel oras

In concluzie structura bazei de date a fost aleasa ın acest fel datorita tipului apli-catiei adica asemanatoare cu o retea sociala si datorita implementarii simple a unui sistemde recomandare pe o asemenea baza de date

53 Fluxul pentru diferite operatii

Pentru aplicatie cele mai importante cazuri de utilizare sunt salvarea informati-ilor despre utilizator primite de la Facebook pentru crearea unui profil si recomandareacadourilor pentru un utilizator al aplicatiei Din aceasta cauza cele doua cazuri de utilizarevor fi prezentate mai ın detaliu ın continuare

43

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 28: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

Preconditii

1 Producatorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Producatorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Producatorul trebuie sa aiba cont cu rol de rdquoproducatorrdquo sau rdquoadminrdquo pentru aputea face operatia aceasta

4 Producatorul trebuie sa deschida sectiunea de adaugare produs pentru a puteaındeplini cerintele din cazul de utilizare

Postconditii

1 Noul produs este salvat ın baza de date2 Produsul poate fi adaugat la recomandarile unui utilizator din acel moment

433 Modificare rol utilizator

Descriere

Scopul acestui caz de utilizare este de a prezenta fluxul evenimentelor pe care unadministrator trebuie sa le urmeze pentru a modifica rolul unui utilizator al aplicatiei

Actorul principal

Un utilizator al aplicatiei care are rol de administrator

Parti interesate si interese

Administratorul care doreste sa modifice rolul unui utilizatorUtilizatorul care doreste sa ısi schimbe rolul

Flux de evenimente

Use-Case StartCazul de utilizare ıncepe atunci cand administratorul porneste aplicatia11 Administratorul verifica daca are cont de Facebook si daca are urmeaza pasul

111 daca nu 22111 Administratorul se autentifica ın aplicatie cu ajutorul credentialelor de

la Facebook12 Administratorul deschide sectiunea de utilizatori13 Sistemul ıi returneaza administratorului utilizatorii care nu sunt administratori14 Administratorul modifica rolul utilizatorului din utilizator simplu ın producator

sau invers

23

15 Administratorul cere executarea modificarii

16 Sistemul executa modificarea iar ın caz de succes urmeaza pasul 161 si ın cazde eroare pasul 23

161 Sistemul notifica administratorul ca modificarea a fost efectuata cusucces

17 Utilizatorul se dezautentifica din aplicatie

Use-Case End

Administratorul se va deconecta din aplicatie si o va ınchide

Figura 44 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo

24

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Administratorul deschide sectiunea de utilizatori

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca administratorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Administratorul deschide pagina de Facebook

222 Administratorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Administratorul revine la aplicatia de recomandare cadouri si ıncearcadin nou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca sistemul returneaza o eroare la modificarea utilizatorului

Acest flux poate aparea la pasul 16

231 Sistemul returneaza un mesaj de eroare la modificarea utilizatorului

232 Aplicatia afiseaza mesajul de eroare administratorului

233 Cazul de utilizare continua de la pasul 15

Preconditii

1 Administratorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Administratorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Utilizatorul trebuie sa aiba cont cu rol de administrator pentru a putea efectuaorice actiune din acest caz de utilizare

4 Administratorul trebuie sa deschida sectiunea utilizatori pentru a putea ındeplinicerintele din cazul de utilizare

Postconditii

1 Noul rol al utilizatorului este salvat ın baza de date

2 La urmatoarea autentificare a utilizatorului acesta va observa ca interfata si maiprecis meniurile si actiunile care le poate face ıi vor fi diferite

25

44 Perspectiva tehnologica

441 Neo4j

Neo4j 1 este un sistem de gestionare a bazelor de date sub forma de graf dezvoltatde Neo4j Inc Descris de dezvoltatorii sai ca o baza de date tranzactionala compatibilacu ACID Neo4j este cea mai populara baza de date sub forma de graf dupa clasamentulDB-Engines

Baza de date Neo4j (ca si orice alta baza de date sub forma de graf) este foartediferita de o baza de date relationala cum ar fi MS Access SQL Server MySQL etcBazele de date relationale utilizeaza tabele randuri si coloane pentru stocarea datelor

Neo4j nu utilizeaza tabele randuri si coloane pentru stocarea sau prezentarea datelorci noduri si relatii

Neo4j este foarte potrivit pentru stocarea datelor care au multe relatii interconec-tate Acestea sunt de fapt aplicatiile ın care merita sa fie folosite De fapt bazele de datesub forma de graf cum este Neo4j sunt mult mai bune la tratarea datelor interconectatedecat bazele de date relationale

Acest lucru se datoreaza faptului ca modelul sub forma de graf nu necesita de obiceio schema predefinita Nu e nevoie sa se creeze structura bazei de date ınainte de a fiıncarcate datele asa cum se face la o baza de date relationala

Dar principalul motiv pentru care Neo4j este mai bun pentru datele relationalepentru acest tip de aplicatii este modul ın care permite crearea relatiilor Neo4j este con-struit ın jurul relatiilor si atunci nu este nevoie sa se configureze chei primare constrangerichei straine pentru a predetermina nodurile care pot avea o relatie si la ce date Cu Neo4jse poate adauga orice legatura ıntre orice nod ori de cate ori este nevoie

Neo4j are aceste calitati care nu se gasesc nici la celelalte baze de date NoSQLBazele de date non-relationale pe langa cele sub forma de graf sunt cele de tip coloanade tip document de tip cheie-valoare si de tip multi-model Nici unul din aceste tipuri nuau ca principala functionalitate maparea relatiilor si facilitatea interogarilor ıntr-o baza dedate cu multe relatii ıntre entitati

Generarea de recomandari personalizate este unul dintre cele mai frecvente cazuride utilizare a unei baze de date sub forma de graf Unele dintre principalele beneficii aleutilizarii grafurilor pentru a genera recomandari includ

- Performanta Lipsa indexurilor permite calcularea recomandarilor ın timp realasigurand ca recomandarea este ıntotdeauna relevanta si reflecta informatii actualizate

- Model de date Modelul de graf cu proprietati permite combinarea cu usurinta aseturilor de date din mai multe surse

Un alt avantaj al bazelor de date sub forma de graf Neo4j este faptul ca respectatoate principiile din modelul de consistenta ACID

Garantia data de principiile ACID este ca ofera un mediu sigur ın care sa functionezedatele Acronimul ACID reprezinta

1httpsneo4jcomuse-casesreal-time-recommendation-engine

26

bull Atomic Toate operatiile dintr-o tranzactie reusesc sau fiecare operatie este reluatabull Consistent La finalizarea unei tranzactii baza de date este solida din punct de

vedere structuralbull Izolat Tranzactiile nu se lupta una cu cealalta Accesul controversat la date este

moderat de baza de date astfel ıncat tranzactiile par sa se execute succesivbull Durabil Rezultatele aplicarii unei tranzactii sunt permanente chiar si ın cazul unor

defectiuniCand vine vorba de tehnologiile NoSQL cele mai multe baze de date sub forma de

graf (inclusiv Neo4j) utilizeaza un model de consistenta ACID pentru a asigura ca datelesunt stocate ın siguranta si ın mod consecvent

Am ales baza de date sub forma de graf ca optiune pentru stocarea datelor deoarecedin toate lucrarile si articolele citite a fost optiunea cea mai buna pentru un sistem derecomandare Deci acesta se mapeaza perfect pe cerintele functionale ale proiectului Sidin optiunile de baze de date sub forma de graf Noe4j a avut de departe cele mai multeavantaje ea fiind si cea mai utilizata

442 Cypher

Cypher 2 este un limbaj declarativ de interogare pentru bazele de date sub formade graf care permite interogarea si actualizarea rapida a datelor Cypher este un limbajrelativ simplu dar foarte puternic Interogarile foarte complexe ale bazei de date pot fiusor exprimate prin intermediul limbajului Cypher

Este conceput pentru a fi un limbaj de interogare uman Scopul lui principal este dea face interogarile mult mai simple si unele interogari care la bazele de date relationale nuerau posibile le face posibile Constructiile sale se bazeaza pe grafica si pe limba englezalucru care ajuta la scrierea mai intuitiva a interogarilor Este construit pentru a fi maiintuitiv pentru citire si nu neaparat pentru scriere

Cypher se bazeaza pe modelul Graph Property care ın plus fata de elementelegrafice standard ale nodurilor si muchiilor (numite relatii ın Cypher) adauga etichete siproprietati ca si concepte Nodurile pot avea zero sau mai multe etichete ın timp ce fiecarerelatie este de exact un singur tip Nodurile si relatiile au de asemenea zero sau mai multeproprietati

Chypher este limbajul de interogare folosit la bazele de date Neo4j deci este opti-unea implicita atunci cand se alege Neo4j

443 Maven

Maven 3 este un instrument de management software si de ıntelegere a proiectelorsoftware Pe baza conceptului unui model de obiect de proiect (POM) Maven poategestiona construirea raportarea si documentarea unui proiect printr-o informatie centrala

2httpsneo4jcomdevelopercypher-query-language3httpswwwjavatpointcommaven-tutorial

27

Obiectivul principal al lui Maven este acela de a permite unui dezvoltator sa ınte-leaga starea completa a efortului de dezvoltare ın cel mai scurt timp Avantajele Mavensunt

bull instalarea rapida a proiectului fara fisiere buildxml complicate doar un POMbull procesul de construire este standardizat pentru toate proiectelebull usor de ınvatat si de utilizatbull configurarea unui proiect este foarte rapidabull bine documentat

Am ales sa folosesc Maven deoarece este una din cele mai comune optiuni pentru aimporta librariile ıntr-un proiect si este si cel mai documentat Deci mereu cand esti pusın dificultate poti cauta pe internet sugestii

444 Spring Boot

Spring Boot 4 este un framework din cadrul Spring care ofera setari implicite pentruconfigurarea codului si adnotari pentru a lansa rapid proiecte noi ın executie Urmaresteabordarea rdquoConfigurarea defectiunilor vizionaterdquo pentru a evita un numar mare de linii decod pentru configuratii si pentru a ımbunatati procesul de dezvoltare

Avantajele Spring Boot sunt1 Face foarte usoara dezvoltarea de aplicatii bazate pe Spring cu Java sau Groovy2 Reduce timpul de dezvoltare si creste productivitatea3 Evita scrierea multor linii de cod adnotari si configurare XML4 Este foarte usor de integrat cu alte framework-uri din aceasi familie Spring cum ar

fi Spring JDBC Spring ORM Spring Data Spring Security etc5 Urmareste abordarea rdquoConfigurarea implicita a optiunilorrdquo pentru a reduce efortul

pentru dezvoltatori6 Ofera servere HTTP ıncorporate cum ar fi Tomcat Jetty etc pentru a dezvolta si

testa aplicatiile web foarte usor7 Ofera instrumentul CLI (Command Line Interface) pentru a dezvolta si testa apli-

catiile de tip rdquoSpring Bootrdquo (Java sau Groovy) din linia de comanda foarte usor sirapidAm ales ca optiune pentru partea de backend acest framework deoarece simplifica

foarte mult lucrurile Datorita lui un programator poate sa ısi concentreze mai tare energiape a construi proiectul din punctul de vedere al buissness-ului logic nu din punctul devedere al configurarilor necesare

445 Sencha CMD si ExtJS

Sencha CMD 5 este un instrument linie de comanda cross-platform care ofera multesarcini automate ın ciclul complet de viata al unei aplicatii ExtJS de la generarea unui

4httpswwwjavatpointcomspring-boot-tutorial5httpsdocssenchacomcmd

28

nou proiect la lansarea unei aplicatii ın productie

Sencha Cmd ofera o colectie de caracteristici puternice pentru economisirea timpu-lui care functioneaza ımpreuna cu Sencha ExtJS si Sencha Touch

Ext JS 6 este un framework pur JavaScript pentru construirea de aplicatii webinteractive cross-platform utilizand tehnici precum scripting Ajax DHTML si DOM

Avantajele framework-ului ExtJS sunt

1 Documentatia Extjs este foarte cuprinzatoare si bine ıntretinuta2 Aspectul cheie al bibliotecii EXTJS este suportul de tip cross-browser3 Framework-ul ExtJS ofera o multitudine de elemente UI Aceste elemente includ

forme casete de dialog file arbori si tabele4 Framework-ul ExtJS include suport pentru implementarile Ajax5 ExtJS ofera performante excelente Framework-ul este complet orientat spre obiecte

si este extensibil asta pentru ca este scris ın JavaScript

Pentru partea de frontend se foloseste framework-ul ExtJS deoarece are o arhitec-tura ce se mapeaza foarte bine pe proiectele de frontend si anume arhitectura bazata pecomponente Aceasta face ca ın proiect codul sa fie mult mai organizat si procesul dedezvoltare al proiectului sa fie mult mai scurt prin identificarea mai usoara a erorilor

446 Facebook API(Graph API)

Graph API 7 este modul principal de a pune date ın platforma Facebook si de aobtine date din platforma Facebook Este un API bazat pe HTTP pe care aplicatiile ılpot utiliza pentru interogarea datelor pentru a introduce postari noi pentru gestionareaanunturilor sau pentru a ıncarca fotografii

Este denumit Graph API dupa ideea unui rdquograf socialrdquo - o reprezentare sub formade graf a informatiilor de pe Facebook Este compus din

bull noduri - ın esenta obiecte individuale cum ar fi un utilizator o fotografie o paginasau un comentariu

bull muchii - conexiuni ıntre o colectie de obiecte si un singur obiect cum ar fi fotografiilede pe o pagina sau comentariile de la o fotografie

bull campuri - date despre un obiect cum ar fi ziua de nastere a unui utilizator saunumele paginii

De obicei se utilizeaza noduri pentru a obtine date despre un anumit obiect se uti-lizeaza muchii pentru a obtine colectii de obiecte legate de un singur obiect si se utilizeazacampurile pentru a obtine date despre un singur obiect sau mai multe obiecte dintr-ocolectie

Am folosit Facebook API ca solutie pentru a ımbunatati problema de rdquocold startrdquopentru ca este singurul site pe care marea majoritate a oamenilor au cont si salveazalucrurile care le plac Deci se potrivea perfect peste nevoile aplicatiei mele

6httpdocssenchacomextjs6207httpsdevelopersfacebookcomdocsgraph-api

29

447 Git

Git 8 este un sistem de control a versionarii pentru urmarirea modificarilor ın fisierelede pe computer si coordonarea activitatii asupra acestor fisiere ın randul mai multor per-soane Este utilizat ın principal pentru gestionarea codului sursa ın dezvoltarea de softwaredar poate fi folosit pentru a urmari schimbarile ın orice set de fisiere

Avantaje ale Git

bull Modelul distribuit numai ceea ce se doreste se face publicbull Branching-ul si merging-ul sunt usoarebull Fluxul de lucru este flexibilbull Integritatea datelor este asigurata Deoarece GIT utilizeaza arbori SHA1 coruperea

datelor din motive externe poate fi usor detectatabull Rapid Git este foarte rapid chiar si ın comparatie cu alte sisteme de control a

versionarii

Am folosit Git pentru a avea la proiect un back-up ın caz ca se ıntampla ceva cuproiectul salvat pe calculator

45 Arhitectura conceptuala

In figura 45 este prezentata arhitectura conceptuala a sistemului Acesta este ım-partit ın doua mari parti backend-ul si frontend-ul care comunica ıntre ele si ısi trimitinformatii

Se poate observa ca baza de date este de tip graf mai exact Neo4j si comunica cubackend-ul pentru a putea lucra cu datele stocate Backend-ul este structurat pe nivelefiecare cu un diferit rol si care trebuie parcurs pentru a procesa datele din interfata ınbaza de date Cele trei nivele sunt cel de Repository cel de Service si cel ControllerToate interogarile venite din interfata utilizator ajung ın nivelul de Controller Dupa ceinterogarile trec de securitatea sistemului ajung ın nivelul de Service Acolo se proceseazasi se afla partea de logica a aplicatiei Pentru a interactiona cu baza de date din Servicese apeleaza metodele din nivelul de Repository

In continuare backend-ul comunica prin protocolul HTTP cu interfata grafica cucare interactioneaza clientii aplicatiei Interfata este scrisa ın Ext JS si are o parte de Viewsi o parte de Controller care este cea care comunica cu backend-ul

Pentru partea de autentificare sistemul interactioneaza cu API-ul de la Facebookde la care ia dupa autentificare un access token Cu ajutorul acestuia ia dupa aceea datelenecesare pentru a putea crea un profil utilizatorului

8httpsguidesgithubcomintroductiongit-handbook

30

Figura 45 Arhitectura conceptuala

31

Capitolul 5

Proiectare de Detaliu siImplementare

In acest capitol vor fi prezentate detalii de implementare ale sistemului de recoman-dare incluzand o ımpartire al acestuia ın componentele care ıl cuprind

Obiectivul este de a prezenta arhitectura si modul de implementare al aplicatieipe baza datelor descoperite ın studiul bibliografic de la capitolul trei si cu tehnologiilehotarate la capitolul patru Pe langa asta va fi prezentata si structura bazei de date sideciziile luate pentru securitatea aplicatiei

51 Arhitectura sistemului

Din punctul de vedere al arhitecturii aplicatia se poate considera ca este alcatuitadin patru mari componente

1 API-ul de la Facebook2 Aplicatia client care reprezinta interfata grafica a aplicatiei3 Aplicatia server adica backendul aplicatiei si partea ın care se afla partea de rdquobusiness

logicrdquo4 Baza de date

Partea componenta reprezentata de API-ul de la Facebook este doar o componentacu care aplicatia se integreaza si pe care aceasta o foloseste In interactiunea cu ea interfatada o cerere de autentificare apare o fereastra de la Facebook ın care utilizatorul introducecredentialele de la API-ul de Facebook se primeste ınapoi un access token si cu ajutorulacestuia face o cerere pentru a primi datele personale ale utilizatorului pentru creeareaprofilului utilizator

Urmatoarea parte a aplicatiei este interfata utilizator frontend-ul care reprezintapartea cu care utilizatorul interactioneaza si locul unde ıi sunt afisate informatiile

Cererile din interfata ajung ın a treia parte componenta a sistemului partea deserver adica backend-ul aplicatiei Acolo toate cererile sunt citite si procesate iar raspun-

33

sul lor este trimis la interfata utilizator Aceasta este partea care reprezinta rdquogandireardquoaplicatiei Aceea este componenta care face legatura ıntre cererile utilizatorului din inter-fata si datele stocate ın baza de date

Ultima componenta a aplicatiei o reprezinta baza de date care are ca rol sa stochezedatele despre utilizatori produse si comenzi Ea este o baza de date sub forma de grafde tipul Neo4j Acolo se salveaza entitatile aplicatiei sub forma de noduri si dependenteleıntre acestea sub forma de relatii ıntre aceste noduri

Figura 51 Diagrama de rdquodeploymentrdquo

In figura 51 este prezentata diagrama de rdquodeploymentrdquo a sistemului cu cele patrucomponente ale sistemului Aplicatia client comunica cu API-ul de la Facebook prin pro-tocolul securizat HTTPS cu backend-ul prin protocolul HTTP iar backend-ul cu baza dedate prin JDBC

Aplicatia a putut fi ımpartita ın aceste componente separate deoarece fiecare dintreele poate functiona independent de celelalte comunica cu ele doar prin mesaje Din acestmotiv locul unde ruleaza acestea pot sa fie pe servere diferite In plus daca aplicatiaar fi pusa pe servere pentru utilizatori ar putea fi mai multe servere pe care ruleaza ocomponenta si prin rdquoload balancingrdquo sa se trimita cererile ımpartite ıntre ele

Cum astfel componentele nu depind foarte mult unele de altele si pot rula faraa le interesa de unde le sunt trimise cererile este arhitectura cea mai corecta deoarecedefectarea sau o posibila eroare la una din ele nu o influenteaza cu nimic pe o alta Dacatoate ar rula pe acelasi server o eventuala defectiune a acestuia ar ınsemna o defectiune aıntregului sistem Insa daca exista mai multe noduri si se afla pe servere diferite pot doartoate cererile sa fie redirectionate spre un nod care functioneaza si aplicatia sa functionezepentru clienti la fel ca ınainte

34

Un alt avantaj al arhitecturii ar fi faptul ca la o lansare viitoare catre clienti se poatelansa doar componenta la care s-au facut modificari De asemenea aplicatia ar putea aveape viitor si o componenta mobila Iar cum serverul e independent poate fi acelasi serverfolosit de o alta aplicatie client

511 Arhitectura componentei backend

Arhitectura backend-ului este si ea ımpartita ın mai multe pachete pentru o maibuna structura si pentru o cat mai mica dependenta ıntre diversele componente Astfelcuplarea este minima ıntre clase si eventualele modificari ulterioare pot fi mai usor defacut

Serverul a fost implementat ın Java cu ajutorul framework-ului Spring Boot iarmediul de dezvoltare folosit a fost Intellij IDEA

Din punctul de vedere al ımpartirii arhitectura serverului aplicatiei este structurataın patru pachete si o clasa ın afara acestora Acea clasa este rdquomainrdquo-ul aplicatiei este parteacare trebuie rulata pentru a porni serverul Din cauza ca este o aplicatie Spring Boot si nuuna String singura adnotare necesara pentru a sti ca aceea este clasa rdquoradacinardquoa aplicatieieste SpringBootApplication

Cele patru pachete ale serverului sunt1 Cel de domeniu (domain) cu clasele POJO care reprezinta entitatile din baza de

date2 Cel de rdquomagazierdquo (repositories) care este cel care face direct actiunile ın baza de date3 Cel de serviciu (services) ın care se afla partea de logica a ıntregii aplicatii4 Cel de web ın care se afla clasele de rdquocontrollerrdquo

Figura 52 Diagrama de pachete pentru backend

35

Ca si dependente nivelul de web ıl foloseste pe cel de seviciu cel de serviciu ılfoloseste pe cel de rdquomagazierdquo iar clasele din pachetul de domeniu sunt folosite ın toatecelelalte pachete

In continuare voi prezenta pe rand fiecare nivel al serverului adica fiecare pachet

Figura 53 Diagrama de clase pentru pachetul rdquodomainrdquo

36

Nivelul de domeniu (domain) este alcatuit ın primul rand din clasele care suntentitati ın baza de date Acestea sunt reprezentate de toate clasele ce stocheaza informatiidespre utilizatori si despre produse si comenzi Pe langa informatiile personale despre unutilizator de genul numelui email-ului sau data nasterii care sunt salvate ın entitateapersoana se stocheaza despre utilizator ın clase diferite informatii de genul locului undelocuieste locul unde a copilarit locurilor unde a facut scoala locului unde lucreaza sau celmai important pentru aplicatia aceasta lucrurilor care ıi plac In afara acestor informatiidespre utilizatori sunt si clase cu informatiile despre prieteni despre produse sau desprecomenzi

Din cauza faptului ca aplicatia este de tipul unei retele sociale ın care exista prieteniiıntre persoane exista dependente ıntre toate entitatile aplicatiei Acesta este si motivulpentru care am ales baza de date sub forma de graf pe care sa se mapeze toate acesteentitati sub forma de noduri si toate aceste dependente sub forma de relatii

In pachetul de domeniu se afla si trei subpachete Unul dintre ele este pentruclasele folosite pentru a trata erorile aplicatiei In interiorul acestui pachet se afla douaclase pentru eroare si o exceptie cea folosita ın cazul ın care nu se gaseste ceea ce doresteutilizatorul Pe langa asta este clasa care are ca obiect raspunsul dat de sistem ın cazulunei erori la server Aceasta contine ın interiorul sau pe langa codul erorii si detalii despreeroarea trimisa Aceasta lista de detalii e reprezentata de obiectele de tipul celei de-a treiaclase din pachetul acesta

Celelalte doua subpachete aflate ın acest nivel sunt cele care contin clasele specialede cerere sau raspuns care au ajutat la maparea acestora mai bine In multe cazuri nua fost necesara trimiterea la interfata utilizator a tuturor informatiilor stocate despre oentitate si de aceea am ales sa creez ın aceste cazuri un obiect auxiliar care sa fie folositpe post de raspuns

Figura 54 Diagrama de clase pentru pachetul rdquorepositoriesrdquo

37

Cel de-al doilea nivel al aplicatiei backend este cel de rdquomagazierdquo (repositories) carecontine doar interfete de tip rdquoRepositoryrdquo

Aceste interfete sunt cele care fac operatiile directe asupra entitatilor din baza dedate

Unele interfete doar extind interfata care are deja implementate metodele CRUDsi din acest motiv nu au metode suplimentare iar altele au si metode ın plus care au carol sa execute interogari mai complexe asupra bazei de date In acele metode se pot scrieinterogarile ın Cypher pentru a putea primi informatii despre mai multe noduri sau desprerelatiile dintre acestea sau si pentru a returna doar anumite rezultate care ındeplinescanumite conditii In felul acesta a fost implementata si cererea de oferire a recomandarilorIn acel caz sistemul returneaza produsele care au ın descriere unul din lucrurile care se aflaın lista de obiecte sau servicii primite de la Facebook ca ıi plac utilizatorului

Nivelul de rdquoRepositoryrdquo este folosit direct de cel de-al treiea nivel cel de servi-ciu Acesta este nivelul la care se executa logica aplicatiei unde se comanda modul defunctionare al ıntregii aplicatii

Figura 55 Diagrama de clase pentru pachetul rdquoservicesrdquo

Pe acest nivel ajung toate cererile din server dupa ce trec de verificarile de securitateIn acest pachet se afla si clasa de securitate care face verificarile necesare In aceasta clasaexista o metoda ce se apeleaza la prima cerere cea de salvare a datelor de la Facebookdespre utilizator si care codifica id-ul utilizatorului si ıl trimite pe raspuns ınapoi interfeteiPe langa asta ın acea clasa se afla si o metoda care verifica faptul ca id-ul codificat esteal unui utilizator cu rol corespunzator pentru a face acea cerere

In plus ın acest pachet se afla si toate celelalte clase care fac diverse operatii pedatele din baza de date si dau raspunsuri cererilor din interfata Aici se afla logica care

38

comanda actiunile asupra utilizatorilor asupra prietenilor acestora asupra produselor siasupra comenzilor

Ultima clasa a acestui nivel este cea care se ocupa de trimiterea de email-uri Incazul ın care se face o noua comanda de catre un utilizator toti producatorii produselor depe comanda sunt notificati despre produsele lor pe care le doreste utilizatorul Din serviciulde comanda se apeleaza serviciul de email pentru fiecare producator din lista celor care auproduse care se afla pe lista comenzii utilizatorului

Ultimul si cel mai aproape de interfata utilizator este nivelul de web Acolo se aflatoate clasele de rdquoControllerrdquo ale aplicatiei server

Figura 56 Diagrama de clase pentru pachetul rdquowebrdquo

Toate cererile din interfata utilizator ıncearca sa se mapeze pe rutele declarate ınclase pentru a fi procesate ın metoda corespunzatoare Toata aceasta parte este foarteusor de implementat si mai ales foarte lizibil pentru programatori datorita adnotarilor dinJava Cu ajutorul acestora trebuie doar specificat care este numele URL-ului cererii careeste tipul de obiect asteptat si daca se trimite ca rdquoquery stringrdquo pe URL sau ın interiorulcorpului cererii si tipul raspunsului Pentru fiecare cerere care nu este apelata ın parteaneautentificata a utilizatorului primul lucru care se apeleaza este metoda de securitatepentru a verifica rolul si id-ul utilizatorului Daca din punctul de vedere al securitatii totuleste ın regula se apeleaza metoda corespunzatoare din pachetul de serviciu

39

O singura clasa este diferita de restul ın pachetul de controller si aceea este clasa deeroare Acolo se mapeaza erorile aparute ın timpul cererii si se trimite ınapoi ın interfatagrafica un raspuns cu cod de eroare specific nu numai 500 Generic Application Exceptioncum ar trimite fara aceasta clasa si cu detalii despre motivul aparitiei erorii

Datorita folosirii adnotarilor din java nu a fost necesara folosirea unor rdquodesignpatternrdquo-uri ın sistem De exemplu pentru a folosi ın nivelul de web ceva din pachetulde servicii trebuia doar acel obiect sa aiba adnotarea Autowired si se ınlocuieste atatfolosirea rdquodesign patternrdquo-ului Singleton cat si a celui de Factory Acel obiect nu trebuiecreat sau initializat se face asta implicit datorita adnotarii si de asemenea este folositapeste tot aceeasi instanta

In concluzie toate cererile venite din interfata grafica ajung ın nivelul de rdquocontrollerrdquode unde sunt trimise la cel de rdquoservicerdquopentru a fi procesate si facute eventualele modificarinecesare ın baza de date ca apoi raspunsul sa fie trimis ınapoi spre aplicatia client pentruafisare

512 Arhitectura componentei frontend

A doua componenta implementata a sistemului este aplicatia client frontend-ulAceasta a fost scrisa ın Java Script cu ajutorul framework-ului Ext JS compilarea

se face cu ajutorul Sencha CMD si mediul de implementare a fost IntelliJ IdeaCu ajutorul framework-ului Ext JS se scriu componente care apoi se initializeaza

unele pe altele Aplicatia porneste cu fisierul Applicationjs care este un fel de rdquomainrdquopentru aplicatie Aceasta initializeaza alte componente care la randul lor includ altecomponente si tot asa Structura poate fi foarte usor comparata cu una arborescenta dinacest punct de vedere

Framework-ul a fost creat sa functioneze ın felul acesta pentru ca scopul componen-telor este sa fie scrise ın asa fel ıncat sa poata pe viitor sa fie utilizate din nou Una dindorintele majore ın programare tot timpul este de a se scrie cod ıntr-o maniera ın care safie cat mai reutilizabil Iar framework-ul Ext JS exact asta ıncearca

Arhitectura aplicatiei client se gaseste ın figura 57 si este la randul ei ımpartita ınpachete ca si cea de server Similar cu pachetul de rdquodomainrdquo de la aplicatia de backendeste pachetul rdquomodelrdquo al interfetei utilizator Aici sunt rdquoclaserdquo care sunt simple POJO sicare sunt apoi folosite ın nivelele urmatoare Sunt mai putine decat clasele din rdquostorerdquodeoarece daca raspunsul de la server nu trebuie procesat nu sunt necesare se pot mapadirect obiectele din rdquostorerdquo pe componentele interfetei utilizator

Urmatorul nivel este cel pe care se afla clasele de rdquostorerdquo Acestea sunt cele careexecuta cererea spre backend si face legatura ıntre client si server Daca are o clasa derdquomodelrdquodeclarata atunci populeaza acel obiect cu datele primite de la server iar ın cazul ıncare nu este declarat un model se trimit datele exact asa cum s-au primit la nivelul urmatorde rdquoviewrdquo Acest nivel seamana din punct de vedere al functiei cu cel de rdquorepositoryrdquo de laaplicatia server deoarece ambele au rol de legatura Aceea facea legatura ıntre aplicatiesi baza de date si aceasta face legatura ıntre aplicatia client si aplicatia server

40

Figura 57 Diagrama de clase pentru aplicatia web

Cel de-al treilea pachet al aplicatiei este cel de rdquoviewrdquo In acest pachet se afla claselecare alcatuiesc partea vizuala a aplicatiei La randul ei si aceasta este alcatuita tot dincomponente Aplicatia deschide ın primul rand Main-ul care determina aparitia paginii deHome si afisarea ın meniu a optiunilor posibile ın functie de autentificare si rol Clasele deaici se executa de fapt la deschiderea aplicatiei fiind rdquosingle page applicationrdquo si tot atuncise ıncarca pe pagina componentele Ca si arhitectura a pachetului acesta este ımpartit larandul sau ın subpachete Pentru o mai buna organizare exista patru subpachete cateunul pentru fiecare tip de utilizator In felul acesta toate rdquoviewrdquo-urile care sunt specificeunui utilizator cu un anumit rol se afla ın acelasi subpachet

Cele patru subpachete existente ın pachetul rdquoviewrdquo sunt

1 Pachetul rdquomainrdquo care cuprinde rdquoviewrdquo-urile care se afla ın partea neautentificata aaplicatiei

2 Pachetul rdquoclientrdquo continand rdquoviewrdquo-urile pe care le poate accesa un utilizator simplu3 Pachetul rdquoproducerrdquo specific actiunilor unui utilizator care are rol de producator4 Pachetul rdquoadminrdquo care contine toate rdquoviewrdquo-urile care ıi apar unui utilizator care este

administrator al aplicatiei

Ultimul pachet si nivel al aplicatiei client este cel de rdquocontrollerrdquo In acest pachet

41

se afla clasele care fac actiunile din interfata grafica In timp ce pachetul rdquoviewrdquo continedoar partea grafica a aplicatiei adica modul ın care aceasta trebuie sa arate pachetulrdquocontrollerrdquo contine actiunea acestora modul ın care aplicatia trebuie sa functioneze

Ca si arhitectura si acest pachet a fost ımpartit la randul lui tot ın cele patrusubpachete ca si pachetul rdquoviewrdquo adica rdquomainrdquo rdquoclientrdquo rdquoproducerrdquo si rdquoadminrdquo In pluspentru a fi usor de gasit ce clasa de rdquocontrollerrdquo apartine carui rdquoviewrdquo am ales ca cele douasa aiba acelasi nume In felul acesta daca se doreste sa se gaseasca actiunile unui rdquoviewrdquose poate cauta dupa o clasa cu acelasi nume ın pachetul rdquocontrollerrdquo Numarul claselor dinacest pachet este mai mic decat cel al claselor din rdquoviewrdquo deoarece nu toate paginile dininterfata au actiuni suplimentare Daca singura actiune este ıncarcarea paginii cu date dela server adica doar o actiune simpla de GET datele se ıncarca cu ajutorul rdquostorerdquo-ului laıncarcarea paginii si nu este necesara nici o actiune suplimentara Paginile pe care se potface si actiuni de alt gen sau se deschid noi ferestre au nevoie de clase de rdquocontrollerrdquo

In concluzie arhitectura aplicatiei client este una bazata pe componente care ıncearcasa foloseasca cat mai multe clase reutilizabile

52 Structura bazei de date

Baza de date a aplicatiei este de tip graf de tipul Neo4j Pentru utilizare exista unprogram numit Neo4j ce trebuie instalat Acest program are si o interfata grafica ın carese pot vizualiza datele sub forma grafica si ın care se pot scrie de asemenea si interogariın limbajul acestei baze de date adica Cypher

Fiind o baza de date sub forma de graf datele stocate sunt salvate ın structurade date sub forma de noduri si relatii Entitatile din pachetul de domeniu din aplicatiabackend se gasesc ın baza de date sub forma unor noduri iar dependentele dintre nodurise mapeaza ın baza de date sub forma unor relatii Un element diferit fata de alte tipuride baze de date este faptul ca pe relatiile dintre noduri se pot salva atribute cum este ınaplicatie cazul pentru prieteniile dintre persoane In cazul acestora pe relatia dintre nodurise salveaza daca prietenia a fost sau nu acceptata

Pentru fiecare clasa POJO din aplicatia server clasa ce are doar metodele get si setsi se afla ın pachetul domain exista cate un tip de nod diferit ın baza de date cum estesi marcat ın diferite culori ın figura 58 Fiecare tip de nod are atributele proprii care potlua valori sau pot fi nule Iar fiecare obiect din Java reprezinta un nod diferit ın baza dedate

Neo4j a fost cea mai buna optiune pentru baza de date pentru ca aplicatia poate ficonsiderata o retea sociala Acest lucru se datoreaza relatiilor de prietenie dintre persoanesi a multiplelor relatii ıntre noduri Toate nodurile se afla ın acceasi componenta conexadeci nu exista noduri izolate care sa nu aiba nici o legatura cu nici un alt nod

Datorita acestei structuri a bazei de date este posibila implementarea cererii derecomandare ca o simpla interogare ın baza de date aceasta fiind cea mai simpla metodade implementare a unui sistem de genul acesta una mult mai complexa ar fi fost un

42

algoritm de ınvatare care sa ınvete tipare ale utilizatorilor si sa recomande cadouri pe bazaacestor informatii

Figura 58 Diagrama bazei de date pentru doi utilizatori

Un alt avantaj al acestui tip de baza de date este faptul ca datele nu sunt duplicateın baza de date Spre exemplu daca mai multi utilizatori au ca locatie acelasi oras nu secreaza cate un nod cu acea locatie de mai multe ori ci acel unic nod va avea cate o relatiecu fiecare utilizator care are ca locatie acel oras

In concluzie structura bazei de date a fost aleasa ın acest fel datorita tipului apli-catiei adica asemanatoare cu o retea sociala si datorita implementarii simple a unui sistemde recomandare pe o asemenea baza de date

53 Fluxul pentru diferite operatii

Pentru aplicatie cele mai importante cazuri de utilizare sunt salvarea informati-ilor despre utilizator primite de la Facebook pentru crearea unui profil si recomandareacadourilor pentru un utilizator al aplicatiei Din aceasta cauza cele doua cazuri de utilizarevor fi prezentate mai ın detaliu ın continuare

43

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 29: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

15 Administratorul cere executarea modificarii

16 Sistemul executa modificarea iar ın caz de succes urmeaza pasul 161 si ın cazde eroare pasul 23

161 Sistemul notifica administratorul ca modificarea a fost efectuata cusucces

17 Utilizatorul se dezautentifica din aplicatie

Use-Case End

Administratorul se va deconecta din aplicatie si o va ınchide

Figura 44 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo

24

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Administratorul deschide sectiunea de utilizatori

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca administratorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Administratorul deschide pagina de Facebook

222 Administratorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Administratorul revine la aplicatia de recomandare cadouri si ıncearcadin nou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca sistemul returneaza o eroare la modificarea utilizatorului

Acest flux poate aparea la pasul 16

231 Sistemul returneaza un mesaj de eroare la modificarea utilizatorului

232 Aplicatia afiseaza mesajul de eroare administratorului

233 Cazul de utilizare continua de la pasul 15

Preconditii

1 Administratorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Administratorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Utilizatorul trebuie sa aiba cont cu rol de administrator pentru a putea efectuaorice actiune din acest caz de utilizare

4 Administratorul trebuie sa deschida sectiunea utilizatori pentru a putea ındeplinicerintele din cazul de utilizare

Postconditii

1 Noul rol al utilizatorului este salvat ın baza de date

2 La urmatoarea autentificare a utilizatorului acesta va observa ca interfata si maiprecis meniurile si actiunile care le poate face ıi vor fi diferite

25

44 Perspectiva tehnologica

441 Neo4j

Neo4j 1 este un sistem de gestionare a bazelor de date sub forma de graf dezvoltatde Neo4j Inc Descris de dezvoltatorii sai ca o baza de date tranzactionala compatibilacu ACID Neo4j este cea mai populara baza de date sub forma de graf dupa clasamentulDB-Engines

Baza de date Neo4j (ca si orice alta baza de date sub forma de graf) este foartediferita de o baza de date relationala cum ar fi MS Access SQL Server MySQL etcBazele de date relationale utilizeaza tabele randuri si coloane pentru stocarea datelor

Neo4j nu utilizeaza tabele randuri si coloane pentru stocarea sau prezentarea datelorci noduri si relatii

Neo4j este foarte potrivit pentru stocarea datelor care au multe relatii interconec-tate Acestea sunt de fapt aplicatiile ın care merita sa fie folosite De fapt bazele de datesub forma de graf cum este Neo4j sunt mult mai bune la tratarea datelor interconectatedecat bazele de date relationale

Acest lucru se datoreaza faptului ca modelul sub forma de graf nu necesita de obiceio schema predefinita Nu e nevoie sa se creeze structura bazei de date ınainte de a fiıncarcate datele asa cum se face la o baza de date relationala

Dar principalul motiv pentru care Neo4j este mai bun pentru datele relationalepentru acest tip de aplicatii este modul ın care permite crearea relatiilor Neo4j este con-struit ın jurul relatiilor si atunci nu este nevoie sa se configureze chei primare constrangerichei straine pentru a predetermina nodurile care pot avea o relatie si la ce date Cu Neo4jse poate adauga orice legatura ıntre orice nod ori de cate ori este nevoie

Neo4j are aceste calitati care nu se gasesc nici la celelalte baze de date NoSQLBazele de date non-relationale pe langa cele sub forma de graf sunt cele de tip coloanade tip document de tip cheie-valoare si de tip multi-model Nici unul din aceste tipuri nuau ca principala functionalitate maparea relatiilor si facilitatea interogarilor ıntr-o baza dedate cu multe relatii ıntre entitati

Generarea de recomandari personalizate este unul dintre cele mai frecvente cazuride utilizare a unei baze de date sub forma de graf Unele dintre principalele beneficii aleutilizarii grafurilor pentru a genera recomandari includ

- Performanta Lipsa indexurilor permite calcularea recomandarilor ın timp realasigurand ca recomandarea este ıntotdeauna relevanta si reflecta informatii actualizate

- Model de date Modelul de graf cu proprietati permite combinarea cu usurinta aseturilor de date din mai multe surse

Un alt avantaj al bazelor de date sub forma de graf Neo4j este faptul ca respectatoate principiile din modelul de consistenta ACID

Garantia data de principiile ACID este ca ofera un mediu sigur ın care sa functionezedatele Acronimul ACID reprezinta

1httpsneo4jcomuse-casesreal-time-recommendation-engine

26

bull Atomic Toate operatiile dintr-o tranzactie reusesc sau fiecare operatie este reluatabull Consistent La finalizarea unei tranzactii baza de date este solida din punct de

vedere structuralbull Izolat Tranzactiile nu se lupta una cu cealalta Accesul controversat la date este

moderat de baza de date astfel ıncat tranzactiile par sa se execute succesivbull Durabil Rezultatele aplicarii unei tranzactii sunt permanente chiar si ın cazul unor

defectiuniCand vine vorba de tehnologiile NoSQL cele mai multe baze de date sub forma de

graf (inclusiv Neo4j) utilizeaza un model de consistenta ACID pentru a asigura ca datelesunt stocate ın siguranta si ın mod consecvent

Am ales baza de date sub forma de graf ca optiune pentru stocarea datelor deoarecedin toate lucrarile si articolele citite a fost optiunea cea mai buna pentru un sistem derecomandare Deci acesta se mapeaza perfect pe cerintele functionale ale proiectului Sidin optiunile de baze de date sub forma de graf Noe4j a avut de departe cele mai multeavantaje ea fiind si cea mai utilizata

442 Cypher

Cypher 2 este un limbaj declarativ de interogare pentru bazele de date sub formade graf care permite interogarea si actualizarea rapida a datelor Cypher este un limbajrelativ simplu dar foarte puternic Interogarile foarte complexe ale bazei de date pot fiusor exprimate prin intermediul limbajului Cypher

Este conceput pentru a fi un limbaj de interogare uman Scopul lui principal este dea face interogarile mult mai simple si unele interogari care la bazele de date relationale nuerau posibile le face posibile Constructiile sale se bazeaza pe grafica si pe limba englezalucru care ajuta la scrierea mai intuitiva a interogarilor Este construit pentru a fi maiintuitiv pentru citire si nu neaparat pentru scriere

Cypher se bazeaza pe modelul Graph Property care ın plus fata de elementelegrafice standard ale nodurilor si muchiilor (numite relatii ın Cypher) adauga etichete siproprietati ca si concepte Nodurile pot avea zero sau mai multe etichete ın timp ce fiecarerelatie este de exact un singur tip Nodurile si relatiile au de asemenea zero sau mai multeproprietati

Chypher este limbajul de interogare folosit la bazele de date Neo4j deci este opti-unea implicita atunci cand se alege Neo4j

443 Maven

Maven 3 este un instrument de management software si de ıntelegere a proiectelorsoftware Pe baza conceptului unui model de obiect de proiect (POM) Maven poategestiona construirea raportarea si documentarea unui proiect printr-o informatie centrala

2httpsneo4jcomdevelopercypher-query-language3httpswwwjavatpointcommaven-tutorial

27

Obiectivul principal al lui Maven este acela de a permite unui dezvoltator sa ınte-leaga starea completa a efortului de dezvoltare ın cel mai scurt timp Avantajele Mavensunt

bull instalarea rapida a proiectului fara fisiere buildxml complicate doar un POMbull procesul de construire este standardizat pentru toate proiectelebull usor de ınvatat si de utilizatbull configurarea unui proiect este foarte rapidabull bine documentat

Am ales sa folosesc Maven deoarece este una din cele mai comune optiuni pentru aimporta librariile ıntr-un proiect si este si cel mai documentat Deci mereu cand esti pusın dificultate poti cauta pe internet sugestii

444 Spring Boot

Spring Boot 4 este un framework din cadrul Spring care ofera setari implicite pentruconfigurarea codului si adnotari pentru a lansa rapid proiecte noi ın executie Urmaresteabordarea rdquoConfigurarea defectiunilor vizionaterdquo pentru a evita un numar mare de linii decod pentru configuratii si pentru a ımbunatati procesul de dezvoltare

Avantajele Spring Boot sunt1 Face foarte usoara dezvoltarea de aplicatii bazate pe Spring cu Java sau Groovy2 Reduce timpul de dezvoltare si creste productivitatea3 Evita scrierea multor linii de cod adnotari si configurare XML4 Este foarte usor de integrat cu alte framework-uri din aceasi familie Spring cum ar

fi Spring JDBC Spring ORM Spring Data Spring Security etc5 Urmareste abordarea rdquoConfigurarea implicita a optiunilorrdquo pentru a reduce efortul

pentru dezvoltatori6 Ofera servere HTTP ıncorporate cum ar fi Tomcat Jetty etc pentru a dezvolta si

testa aplicatiile web foarte usor7 Ofera instrumentul CLI (Command Line Interface) pentru a dezvolta si testa apli-

catiile de tip rdquoSpring Bootrdquo (Java sau Groovy) din linia de comanda foarte usor sirapidAm ales ca optiune pentru partea de backend acest framework deoarece simplifica

foarte mult lucrurile Datorita lui un programator poate sa ısi concentreze mai tare energiape a construi proiectul din punctul de vedere al buissness-ului logic nu din punctul devedere al configurarilor necesare

445 Sencha CMD si ExtJS

Sencha CMD 5 este un instrument linie de comanda cross-platform care ofera multesarcini automate ın ciclul complet de viata al unei aplicatii ExtJS de la generarea unui

4httpswwwjavatpointcomspring-boot-tutorial5httpsdocssenchacomcmd

28

nou proiect la lansarea unei aplicatii ın productie

Sencha Cmd ofera o colectie de caracteristici puternice pentru economisirea timpu-lui care functioneaza ımpreuna cu Sencha ExtJS si Sencha Touch

Ext JS 6 este un framework pur JavaScript pentru construirea de aplicatii webinteractive cross-platform utilizand tehnici precum scripting Ajax DHTML si DOM

Avantajele framework-ului ExtJS sunt

1 Documentatia Extjs este foarte cuprinzatoare si bine ıntretinuta2 Aspectul cheie al bibliotecii EXTJS este suportul de tip cross-browser3 Framework-ul ExtJS ofera o multitudine de elemente UI Aceste elemente includ

forme casete de dialog file arbori si tabele4 Framework-ul ExtJS include suport pentru implementarile Ajax5 ExtJS ofera performante excelente Framework-ul este complet orientat spre obiecte

si este extensibil asta pentru ca este scris ın JavaScript

Pentru partea de frontend se foloseste framework-ul ExtJS deoarece are o arhitec-tura ce se mapeaza foarte bine pe proiectele de frontend si anume arhitectura bazata pecomponente Aceasta face ca ın proiect codul sa fie mult mai organizat si procesul dedezvoltare al proiectului sa fie mult mai scurt prin identificarea mai usoara a erorilor

446 Facebook API(Graph API)

Graph API 7 este modul principal de a pune date ın platforma Facebook si de aobtine date din platforma Facebook Este un API bazat pe HTTP pe care aplicatiile ılpot utiliza pentru interogarea datelor pentru a introduce postari noi pentru gestionareaanunturilor sau pentru a ıncarca fotografii

Este denumit Graph API dupa ideea unui rdquograf socialrdquo - o reprezentare sub formade graf a informatiilor de pe Facebook Este compus din

bull noduri - ın esenta obiecte individuale cum ar fi un utilizator o fotografie o paginasau un comentariu

bull muchii - conexiuni ıntre o colectie de obiecte si un singur obiect cum ar fi fotografiilede pe o pagina sau comentariile de la o fotografie

bull campuri - date despre un obiect cum ar fi ziua de nastere a unui utilizator saunumele paginii

De obicei se utilizeaza noduri pentru a obtine date despre un anumit obiect se uti-lizeaza muchii pentru a obtine colectii de obiecte legate de un singur obiect si se utilizeazacampurile pentru a obtine date despre un singur obiect sau mai multe obiecte dintr-ocolectie

Am folosit Facebook API ca solutie pentru a ımbunatati problema de rdquocold startrdquopentru ca este singurul site pe care marea majoritate a oamenilor au cont si salveazalucrurile care le plac Deci se potrivea perfect peste nevoile aplicatiei mele

6httpdocssenchacomextjs6207httpsdevelopersfacebookcomdocsgraph-api

29

447 Git

Git 8 este un sistem de control a versionarii pentru urmarirea modificarilor ın fisierelede pe computer si coordonarea activitatii asupra acestor fisiere ın randul mai multor per-soane Este utilizat ın principal pentru gestionarea codului sursa ın dezvoltarea de softwaredar poate fi folosit pentru a urmari schimbarile ın orice set de fisiere

Avantaje ale Git

bull Modelul distribuit numai ceea ce se doreste se face publicbull Branching-ul si merging-ul sunt usoarebull Fluxul de lucru este flexibilbull Integritatea datelor este asigurata Deoarece GIT utilizeaza arbori SHA1 coruperea

datelor din motive externe poate fi usor detectatabull Rapid Git este foarte rapid chiar si ın comparatie cu alte sisteme de control a

versionarii

Am folosit Git pentru a avea la proiect un back-up ın caz ca se ıntampla ceva cuproiectul salvat pe calculator

45 Arhitectura conceptuala

In figura 45 este prezentata arhitectura conceptuala a sistemului Acesta este ım-partit ın doua mari parti backend-ul si frontend-ul care comunica ıntre ele si ısi trimitinformatii

Se poate observa ca baza de date este de tip graf mai exact Neo4j si comunica cubackend-ul pentru a putea lucra cu datele stocate Backend-ul este structurat pe nivelefiecare cu un diferit rol si care trebuie parcurs pentru a procesa datele din interfata ınbaza de date Cele trei nivele sunt cel de Repository cel de Service si cel ControllerToate interogarile venite din interfata utilizator ajung ın nivelul de Controller Dupa ceinterogarile trec de securitatea sistemului ajung ın nivelul de Service Acolo se proceseazasi se afla partea de logica a aplicatiei Pentru a interactiona cu baza de date din Servicese apeleaza metodele din nivelul de Repository

In continuare backend-ul comunica prin protocolul HTTP cu interfata grafica cucare interactioneaza clientii aplicatiei Interfata este scrisa ın Ext JS si are o parte de Viewsi o parte de Controller care este cea care comunica cu backend-ul

Pentru partea de autentificare sistemul interactioneaza cu API-ul de la Facebookde la care ia dupa autentificare un access token Cu ajutorul acestuia ia dupa aceea datelenecesare pentru a putea crea un profil utilizatorului

8httpsguidesgithubcomintroductiongit-handbook

30

Figura 45 Arhitectura conceptuala

31

Capitolul 5

Proiectare de Detaliu siImplementare

In acest capitol vor fi prezentate detalii de implementare ale sistemului de recoman-dare incluzand o ımpartire al acestuia ın componentele care ıl cuprind

Obiectivul este de a prezenta arhitectura si modul de implementare al aplicatieipe baza datelor descoperite ın studiul bibliografic de la capitolul trei si cu tehnologiilehotarate la capitolul patru Pe langa asta va fi prezentata si structura bazei de date sideciziile luate pentru securitatea aplicatiei

51 Arhitectura sistemului

Din punctul de vedere al arhitecturii aplicatia se poate considera ca este alcatuitadin patru mari componente

1 API-ul de la Facebook2 Aplicatia client care reprezinta interfata grafica a aplicatiei3 Aplicatia server adica backendul aplicatiei si partea ın care se afla partea de rdquobusiness

logicrdquo4 Baza de date

Partea componenta reprezentata de API-ul de la Facebook este doar o componentacu care aplicatia se integreaza si pe care aceasta o foloseste In interactiunea cu ea interfatada o cerere de autentificare apare o fereastra de la Facebook ın care utilizatorul introducecredentialele de la API-ul de Facebook se primeste ınapoi un access token si cu ajutorulacestuia face o cerere pentru a primi datele personale ale utilizatorului pentru creeareaprofilului utilizator

Urmatoarea parte a aplicatiei este interfata utilizator frontend-ul care reprezintapartea cu care utilizatorul interactioneaza si locul unde ıi sunt afisate informatiile

Cererile din interfata ajung ın a treia parte componenta a sistemului partea deserver adica backend-ul aplicatiei Acolo toate cererile sunt citite si procesate iar raspun-

33

sul lor este trimis la interfata utilizator Aceasta este partea care reprezinta rdquogandireardquoaplicatiei Aceea este componenta care face legatura ıntre cererile utilizatorului din inter-fata si datele stocate ın baza de date

Ultima componenta a aplicatiei o reprezinta baza de date care are ca rol sa stochezedatele despre utilizatori produse si comenzi Ea este o baza de date sub forma de grafde tipul Neo4j Acolo se salveaza entitatile aplicatiei sub forma de noduri si dependenteleıntre acestea sub forma de relatii ıntre aceste noduri

Figura 51 Diagrama de rdquodeploymentrdquo

In figura 51 este prezentata diagrama de rdquodeploymentrdquo a sistemului cu cele patrucomponente ale sistemului Aplicatia client comunica cu API-ul de la Facebook prin pro-tocolul securizat HTTPS cu backend-ul prin protocolul HTTP iar backend-ul cu baza dedate prin JDBC

Aplicatia a putut fi ımpartita ın aceste componente separate deoarece fiecare dintreele poate functiona independent de celelalte comunica cu ele doar prin mesaje Din acestmotiv locul unde ruleaza acestea pot sa fie pe servere diferite In plus daca aplicatiaar fi pusa pe servere pentru utilizatori ar putea fi mai multe servere pe care ruleaza ocomponenta si prin rdquoload balancingrdquo sa se trimita cererile ımpartite ıntre ele

Cum astfel componentele nu depind foarte mult unele de altele si pot rula faraa le interesa de unde le sunt trimise cererile este arhitectura cea mai corecta deoarecedefectarea sau o posibila eroare la una din ele nu o influenteaza cu nimic pe o alta Dacatoate ar rula pe acelasi server o eventuala defectiune a acestuia ar ınsemna o defectiune aıntregului sistem Insa daca exista mai multe noduri si se afla pe servere diferite pot doartoate cererile sa fie redirectionate spre un nod care functioneaza si aplicatia sa functionezepentru clienti la fel ca ınainte

34

Un alt avantaj al arhitecturii ar fi faptul ca la o lansare viitoare catre clienti se poatelansa doar componenta la care s-au facut modificari De asemenea aplicatia ar putea aveape viitor si o componenta mobila Iar cum serverul e independent poate fi acelasi serverfolosit de o alta aplicatie client

511 Arhitectura componentei backend

Arhitectura backend-ului este si ea ımpartita ın mai multe pachete pentru o maibuna structura si pentru o cat mai mica dependenta ıntre diversele componente Astfelcuplarea este minima ıntre clase si eventualele modificari ulterioare pot fi mai usor defacut

Serverul a fost implementat ın Java cu ajutorul framework-ului Spring Boot iarmediul de dezvoltare folosit a fost Intellij IDEA

Din punctul de vedere al ımpartirii arhitectura serverului aplicatiei este structurataın patru pachete si o clasa ın afara acestora Acea clasa este rdquomainrdquo-ul aplicatiei este parteacare trebuie rulata pentru a porni serverul Din cauza ca este o aplicatie Spring Boot si nuuna String singura adnotare necesara pentru a sti ca aceea este clasa rdquoradacinardquoa aplicatieieste SpringBootApplication

Cele patru pachete ale serverului sunt1 Cel de domeniu (domain) cu clasele POJO care reprezinta entitatile din baza de

date2 Cel de rdquomagazierdquo (repositories) care este cel care face direct actiunile ın baza de date3 Cel de serviciu (services) ın care se afla partea de logica a ıntregii aplicatii4 Cel de web ın care se afla clasele de rdquocontrollerrdquo

Figura 52 Diagrama de pachete pentru backend

35

Ca si dependente nivelul de web ıl foloseste pe cel de seviciu cel de serviciu ılfoloseste pe cel de rdquomagazierdquo iar clasele din pachetul de domeniu sunt folosite ın toatecelelalte pachete

In continuare voi prezenta pe rand fiecare nivel al serverului adica fiecare pachet

Figura 53 Diagrama de clase pentru pachetul rdquodomainrdquo

36

Nivelul de domeniu (domain) este alcatuit ın primul rand din clasele care suntentitati ın baza de date Acestea sunt reprezentate de toate clasele ce stocheaza informatiidespre utilizatori si despre produse si comenzi Pe langa informatiile personale despre unutilizator de genul numelui email-ului sau data nasterii care sunt salvate ın entitateapersoana se stocheaza despre utilizator ın clase diferite informatii de genul locului undelocuieste locul unde a copilarit locurilor unde a facut scoala locului unde lucreaza sau celmai important pentru aplicatia aceasta lucrurilor care ıi plac In afara acestor informatiidespre utilizatori sunt si clase cu informatiile despre prieteni despre produse sau desprecomenzi

Din cauza faptului ca aplicatia este de tipul unei retele sociale ın care exista prieteniiıntre persoane exista dependente ıntre toate entitatile aplicatiei Acesta este si motivulpentru care am ales baza de date sub forma de graf pe care sa se mapeze toate acesteentitati sub forma de noduri si toate aceste dependente sub forma de relatii

In pachetul de domeniu se afla si trei subpachete Unul dintre ele este pentruclasele folosite pentru a trata erorile aplicatiei In interiorul acestui pachet se afla douaclase pentru eroare si o exceptie cea folosita ın cazul ın care nu se gaseste ceea ce doresteutilizatorul Pe langa asta este clasa care are ca obiect raspunsul dat de sistem ın cazulunei erori la server Aceasta contine ın interiorul sau pe langa codul erorii si detalii despreeroarea trimisa Aceasta lista de detalii e reprezentata de obiectele de tipul celei de-a treiaclase din pachetul acesta

Celelalte doua subpachete aflate ın acest nivel sunt cele care contin clasele specialede cerere sau raspuns care au ajutat la maparea acestora mai bine In multe cazuri nua fost necesara trimiterea la interfata utilizator a tuturor informatiilor stocate despre oentitate si de aceea am ales sa creez ın aceste cazuri un obiect auxiliar care sa fie folositpe post de raspuns

Figura 54 Diagrama de clase pentru pachetul rdquorepositoriesrdquo

37

Cel de-al doilea nivel al aplicatiei backend este cel de rdquomagazierdquo (repositories) carecontine doar interfete de tip rdquoRepositoryrdquo

Aceste interfete sunt cele care fac operatiile directe asupra entitatilor din baza dedate

Unele interfete doar extind interfata care are deja implementate metodele CRUDsi din acest motiv nu au metode suplimentare iar altele au si metode ın plus care au carol sa execute interogari mai complexe asupra bazei de date In acele metode se pot scrieinterogarile ın Cypher pentru a putea primi informatii despre mai multe noduri sau desprerelatiile dintre acestea sau si pentru a returna doar anumite rezultate care ındeplinescanumite conditii In felul acesta a fost implementata si cererea de oferire a recomandarilorIn acel caz sistemul returneaza produsele care au ın descriere unul din lucrurile care se aflaın lista de obiecte sau servicii primite de la Facebook ca ıi plac utilizatorului

Nivelul de rdquoRepositoryrdquo este folosit direct de cel de-al treiea nivel cel de servi-ciu Acesta este nivelul la care se executa logica aplicatiei unde se comanda modul defunctionare al ıntregii aplicatii

Figura 55 Diagrama de clase pentru pachetul rdquoservicesrdquo

Pe acest nivel ajung toate cererile din server dupa ce trec de verificarile de securitateIn acest pachet se afla si clasa de securitate care face verificarile necesare In aceasta clasaexista o metoda ce se apeleaza la prima cerere cea de salvare a datelor de la Facebookdespre utilizator si care codifica id-ul utilizatorului si ıl trimite pe raspuns ınapoi interfeteiPe langa asta ın acea clasa se afla si o metoda care verifica faptul ca id-ul codificat esteal unui utilizator cu rol corespunzator pentru a face acea cerere

In plus ın acest pachet se afla si toate celelalte clase care fac diverse operatii pedatele din baza de date si dau raspunsuri cererilor din interfata Aici se afla logica care

38

comanda actiunile asupra utilizatorilor asupra prietenilor acestora asupra produselor siasupra comenzilor

Ultima clasa a acestui nivel este cea care se ocupa de trimiterea de email-uri Incazul ın care se face o noua comanda de catre un utilizator toti producatorii produselor depe comanda sunt notificati despre produsele lor pe care le doreste utilizatorul Din serviciulde comanda se apeleaza serviciul de email pentru fiecare producator din lista celor care auproduse care se afla pe lista comenzii utilizatorului

Ultimul si cel mai aproape de interfata utilizator este nivelul de web Acolo se aflatoate clasele de rdquoControllerrdquo ale aplicatiei server

Figura 56 Diagrama de clase pentru pachetul rdquowebrdquo

Toate cererile din interfata utilizator ıncearca sa se mapeze pe rutele declarate ınclase pentru a fi procesate ın metoda corespunzatoare Toata aceasta parte este foarteusor de implementat si mai ales foarte lizibil pentru programatori datorita adnotarilor dinJava Cu ajutorul acestora trebuie doar specificat care este numele URL-ului cererii careeste tipul de obiect asteptat si daca se trimite ca rdquoquery stringrdquo pe URL sau ın interiorulcorpului cererii si tipul raspunsului Pentru fiecare cerere care nu este apelata ın parteaneautentificata a utilizatorului primul lucru care se apeleaza este metoda de securitatepentru a verifica rolul si id-ul utilizatorului Daca din punctul de vedere al securitatii totuleste ın regula se apeleaza metoda corespunzatoare din pachetul de serviciu

39

O singura clasa este diferita de restul ın pachetul de controller si aceea este clasa deeroare Acolo se mapeaza erorile aparute ın timpul cererii si se trimite ınapoi ın interfatagrafica un raspuns cu cod de eroare specific nu numai 500 Generic Application Exceptioncum ar trimite fara aceasta clasa si cu detalii despre motivul aparitiei erorii

Datorita folosirii adnotarilor din java nu a fost necesara folosirea unor rdquodesignpatternrdquo-uri ın sistem De exemplu pentru a folosi ın nivelul de web ceva din pachetulde servicii trebuia doar acel obiect sa aiba adnotarea Autowired si se ınlocuieste atatfolosirea rdquodesign patternrdquo-ului Singleton cat si a celui de Factory Acel obiect nu trebuiecreat sau initializat se face asta implicit datorita adnotarii si de asemenea este folositapeste tot aceeasi instanta

In concluzie toate cererile venite din interfata grafica ajung ın nivelul de rdquocontrollerrdquode unde sunt trimise la cel de rdquoservicerdquopentru a fi procesate si facute eventualele modificarinecesare ın baza de date ca apoi raspunsul sa fie trimis ınapoi spre aplicatia client pentruafisare

512 Arhitectura componentei frontend

A doua componenta implementata a sistemului este aplicatia client frontend-ulAceasta a fost scrisa ın Java Script cu ajutorul framework-ului Ext JS compilarea

se face cu ajutorul Sencha CMD si mediul de implementare a fost IntelliJ IdeaCu ajutorul framework-ului Ext JS se scriu componente care apoi se initializeaza

unele pe altele Aplicatia porneste cu fisierul Applicationjs care este un fel de rdquomainrdquopentru aplicatie Aceasta initializeaza alte componente care la randul lor includ altecomponente si tot asa Structura poate fi foarte usor comparata cu una arborescenta dinacest punct de vedere

Framework-ul a fost creat sa functioneze ın felul acesta pentru ca scopul componen-telor este sa fie scrise ın asa fel ıncat sa poata pe viitor sa fie utilizate din nou Una dindorintele majore ın programare tot timpul este de a se scrie cod ıntr-o maniera ın care safie cat mai reutilizabil Iar framework-ul Ext JS exact asta ıncearca

Arhitectura aplicatiei client se gaseste ın figura 57 si este la randul ei ımpartita ınpachete ca si cea de server Similar cu pachetul de rdquodomainrdquo de la aplicatia de backendeste pachetul rdquomodelrdquo al interfetei utilizator Aici sunt rdquoclaserdquo care sunt simple POJO sicare sunt apoi folosite ın nivelele urmatoare Sunt mai putine decat clasele din rdquostorerdquodeoarece daca raspunsul de la server nu trebuie procesat nu sunt necesare se pot mapadirect obiectele din rdquostorerdquo pe componentele interfetei utilizator

Urmatorul nivel este cel pe care se afla clasele de rdquostorerdquo Acestea sunt cele careexecuta cererea spre backend si face legatura ıntre client si server Daca are o clasa derdquomodelrdquodeclarata atunci populeaza acel obiect cu datele primite de la server iar ın cazul ıncare nu este declarat un model se trimit datele exact asa cum s-au primit la nivelul urmatorde rdquoviewrdquo Acest nivel seamana din punct de vedere al functiei cu cel de rdquorepositoryrdquo de laaplicatia server deoarece ambele au rol de legatura Aceea facea legatura ıntre aplicatiesi baza de date si aceasta face legatura ıntre aplicatia client si aplicatia server

40

Figura 57 Diagrama de clase pentru aplicatia web

Cel de-al treilea pachet al aplicatiei este cel de rdquoviewrdquo In acest pachet se afla claselecare alcatuiesc partea vizuala a aplicatiei La randul ei si aceasta este alcatuita tot dincomponente Aplicatia deschide ın primul rand Main-ul care determina aparitia paginii deHome si afisarea ın meniu a optiunilor posibile ın functie de autentificare si rol Clasele deaici se executa de fapt la deschiderea aplicatiei fiind rdquosingle page applicationrdquo si tot atuncise ıncarca pe pagina componentele Ca si arhitectura a pachetului acesta este ımpartit larandul sau ın subpachete Pentru o mai buna organizare exista patru subpachete cateunul pentru fiecare tip de utilizator In felul acesta toate rdquoviewrdquo-urile care sunt specificeunui utilizator cu un anumit rol se afla ın acelasi subpachet

Cele patru subpachete existente ın pachetul rdquoviewrdquo sunt

1 Pachetul rdquomainrdquo care cuprinde rdquoviewrdquo-urile care se afla ın partea neautentificata aaplicatiei

2 Pachetul rdquoclientrdquo continand rdquoviewrdquo-urile pe care le poate accesa un utilizator simplu3 Pachetul rdquoproducerrdquo specific actiunilor unui utilizator care are rol de producator4 Pachetul rdquoadminrdquo care contine toate rdquoviewrdquo-urile care ıi apar unui utilizator care este

administrator al aplicatiei

Ultimul pachet si nivel al aplicatiei client este cel de rdquocontrollerrdquo In acest pachet

41

se afla clasele care fac actiunile din interfata grafica In timp ce pachetul rdquoviewrdquo continedoar partea grafica a aplicatiei adica modul ın care aceasta trebuie sa arate pachetulrdquocontrollerrdquo contine actiunea acestora modul ın care aplicatia trebuie sa functioneze

Ca si arhitectura si acest pachet a fost ımpartit la randul lui tot ın cele patrusubpachete ca si pachetul rdquoviewrdquo adica rdquomainrdquo rdquoclientrdquo rdquoproducerrdquo si rdquoadminrdquo In pluspentru a fi usor de gasit ce clasa de rdquocontrollerrdquo apartine carui rdquoviewrdquo am ales ca cele douasa aiba acelasi nume In felul acesta daca se doreste sa se gaseasca actiunile unui rdquoviewrdquose poate cauta dupa o clasa cu acelasi nume ın pachetul rdquocontrollerrdquo Numarul claselor dinacest pachet este mai mic decat cel al claselor din rdquoviewrdquo deoarece nu toate paginile dininterfata au actiuni suplimentare Daca singura actiune este ıncarcarea paginii cu date dela server adica doar o actiune simpla de GET datele se ıncarca cu ajutorul rdquostorerdquo-ului laıncarcarea paginii si nu este necesara nici o actiune suplimentara Paginile pe care se potface si actiuni de alt gen sau se deschid noi ferestre au nevoie de clase de rdquocontrollerrdquo

In concluzie arhitectura aplicatiei client este una bazata pe componente care ıncearcasa foloseasca cat mai multe clase reutilizabile

52 Structura bazei de date

Baza de date a aplicatiei este de tip graf de tipul Neo4j Pentru utilizare exista unprogram numit Neo4j ce trebuie instalat Acest program are si o interfata grafica ın carese pot vizualiza datele sub forma grafica si ın care se pot scrie de asemenea si interogariın limbajul acestei baze de date adica Cypher

Fiind o baza de date sub forma de graf datele stocate sunt salvate ın structurade date sub forma de noduri si relatii Entitatile din pachetul de domeniu din aplicatiabackend se gasesc ın baza de date sub forma unor noduri iar dependentele dintre nodurise mapeaza ın baza de date sub forma unor relatii Un element diferit fata de alte tipuride baze de date este faptul ca pe relatiile dintre noduri se pot salva atribute cum este ınaplicatie cazul pentru prieteniile dintre persoane In cazul acestora pe relatia dintre nodurise salveaza daca prietenia a fost sau nu acceptata

Pentru fiecare clasa POJO din aplicatia server clasa ce are doar metodele get si setsi se afla ın pachetul domain exista cate un tip de nod diferit ın baza de date cum estesi marcat ın diferite culori ın figura 58 Fiecare tip de nod are atributele proprii care potlua valori sau pot fi nule Iar fiecare obiect din Java reprezinta un nod diferit ın baza dedate

Neo4j a fost cea mai buna optiune pentru baza de date pentru ca aplicatia poate ficonsiderata o retea sociala Acest lucru se datoreaza relatiilor de prietenie dintre persoanesi a multiplelor relatii ıntre noduri Toate nodurile se afla ın acceasi componenta conexadeci nu exista noduri izolate care sa nu aiba nici o legatura cu nici un alt nod

Datorita acestei structuri a bazei de date este posibila implementarea cererii derecomandare ca o simpla interogare ın baza de date aceasta fiind cea mai simpla metodade implementare a unui sistem de genul acesta una mult mai complexa ar fi fost un

42

algoritm de ınvatare care sa ınvete tipare ale utilizatorilor si sa recomande cadouri pe bazaacestor informatii

Figura 58 Diagrama bazei de date pentru doi utilizatori

Un alt avantaj al acestui tip de baza de date este faptul ca datele nu sunt duplicateın baza de date Spre exemplu daca mai multi utilizatori au ca locatie acelasi oras nu secreaza cate un nod cu acea locatie de mai multe ori ci acel unic nod va avea cate o relatiecu fiecare utilizator care are ca locatie acel oras

In concluzie structura bazei de date a fost aleasa ın acest fel datorita tipului apli-catiei adica asemanatoare cu o retea sociala si datorita implementarii simple a unui sistemde recomandare pe o asemenea baza de date

53 Fluxul pentru diferite operatii

Pentru aplicatie cele mai importante cazuri de utilizare sunt salvarea informati-ilor despre utilizator primite de la Facebook pentru crearea unui profil si recomandareacadourilor pentru un utilizator al aplicatiei Din aceasta cauza cele doua cazuri de utilizarevor fi prezentate mai ın detaliu ın continuare

43

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 30: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

Flux-uri alternative

21 Flux-ul alternativ daca sistemul esueaza

Acest flux poate aparea la orice pas

211 Administratorul deschide sectiunea de utilizatori

212 Cazul de utilizare continua de la pasul 13

22 Flux-ul alternativ daca administratorul nu are cont de Facebook

Acest flux poate aparea la pasul 11

221 Administratorul deschide pagina de Facebook

222 Administratorul ısi face un cont pe pagina de Facebook si ısi completeazadate despre el

223 Administratorul revine la aplicatia de recomandare cadouri si ıncearcadin nou sa se autentifice ın aplicatie

224 Cazul de utilizare continua de la pasul 111

23 Flux-ul alternativ daca sistemul returneaza o eroare la modificarea utilizatorului

Acest flux poate aparea la pasul 16

231 Sistemul returneaza un mesaj de eroare la modificarea utilizatorului

232 Aplicatia afiseaza mesajul de eroare administratorului

233 Cazul de utilizare continua de la pasul 15

Preconditii

1 Administratorul trebuie sa aiba un cont de Facebook pentru a se putea autentificaın aplicatie

2 Administratorul trebuie sa fie autentificat ın aplicatie pentru a putea face oriceactiune din acest caz de utilizare

3 Utilizatorul trebuie sa aiba cont cu rol de administrator pentru a putea efectuaorice actiune din acest caz de utilizare

4 Administratorul trebuie sa deschida sectiunea utilizatori pentru a putea ındeplinicerintele din cazul de utilizare

Postconditii

1 Noul rol al utilizatorului este salvat ın baza de date

2 La urmatoarea autentificare a utilizatorului acesta va observa ca interfata si maiprecis meniurile si actiunile care le poate face ıi vor fi diferite

25

44 Perspectiva tehnologica

441 Neo4j

Neo4j 1 este un sistem de gestionare a bazelor de date sub forma de graf dezvoltatde Neo4j Inc Descris de dezvoltatorii sai ca o baza de date tranzactionala compatibilacu ACID Neo4j este cea mai populara baza de date sub forma de graf dupa clasamentulDB-Engines

Baza de date Neo4j (ca si orice alta baza de date sub forma de graf) este foartediferita de o baza de date relationala cum ar fi MS Access SQL Server MySQL etcBazele de date relationale utilizeaza tabele randuri si coloane pentru stocarea datelor

Neo4j nu utilizeaza tabele randuri si coloane pentru stocarea sau prezentarea datelorci noduri si relatii

Neo4j este foarte potrivit pentru stocarea datelor care au multe relatii interconec-tate Acestea sunt de fapt aplicatiile ın care merita sa fie folosite De fapt bazele de datesub forma de graf cum este Neo4j sunt mult mai bune la tratarea datelor interconectatedecat bazele de date relationale

Acest lucru se datoreaza faptului ca modelul sub forma de graf nu necesita de obiceio schema predefinita Nu e nevoie sa se creeze structura bazei de date ınainte de a fiıncarcate datele asa cum se face la o baza de date relationala

Dar principalul motiv pentru care Neo4j este mai bun pentru datele relationalepentru acest tip de aplicatii este modul ın care permite crearea relatiilor Neo4j este con-struit ın jurul relatiilor si atunci nu este nevoie sa se configureze chei primare constrangerichei straine pentru a predetermina nodurile care pot avea o relatie si la ce date Cu Neo4jse poate adauga orice legatura ıntre orice nod ori de cate ori este nevoie

Neo4j are aceste calitati care nu se gasesc nici la celelalte baze de date NoSQLBazele de date non-relationale pe langa cele sub forma de graf sunt cele de tip coloanade tip document de tip cheie-valoare si de tip multi-model Nici unul din aceste tipuri nuau ca principala functionalitate maparea relatiilor si facilitatea interogarilor ıntr-o baza dedate cu multe relatii ıntre entitati

Generarea de recomandari personalizate este unul dintre cele mai frecvente cazuride utilizare a unei baze de date sub forma de graf Unele dintre principalele beneficii aleutilizarii grafurilor pentru a genera recomandari includ

- Performanta Lipsa indexurilor permite calcularea recomandarilor ın timp realasigurand ca recomandarea este ıntotdeauna relevanta si reflecta informatii actualizate

- Model de date Modelul de graf cu proprietati permite combinarea cu usurinta aseturilor de date din mai multe surse

Un alt avantaj al bazelor de date sub forma de graf Neo4j este faptul ca respectatoate principiile din modelul de consistenta ACID

Garantia data de principiile ACID este ca ofera un mediu sigur ın care sa functionezedatele Acronimul ACID reprezinta

1httpsneo4jcomuse-casesreal-time-recommendation-engine

26

bull Atomic Toate operatiile dintr-o tranzactie reusesc sau fiecare operatie este reluatabull Consistent La finalizarea unei tranzactii baza de date este solida din punct de

vedere structuralbull Izolat Tranzactiile nu se lupta una cu cealalta Accesul controversat la date este

moderat de baza de date astfel ıncat tranzactiile par sa se execute succesivbull Durabil Rezultatele aplicarii unei tranzactii sunt permanente chiar si ın cazul unor

defectiuniCand vine vorba de tehnologiile NoSQL cele mai multe baze de date sub forma de

graf (inclusiv Neo4j) utilizeaza un model de consistenta ACID pentru a asigura ca datelesunt stocate ın siguranta si ın mod consecvent

Am ales baza de date sub forma de graf ca optiune pentru stocarea datelor deoarecedin toate lucrarile si articolele citite a fost optiunea cea mai buna pentru un sistem derecomandare Deci acesta se mapeaza perfect pe cerintele functionale ale proiectului Sidin optiunile de baze de date sub forma de graf Noe4j a avut de departe cele mai multeavantaje ea fiind si cea mai utilizata

442 Cypher

Cypher 2 este un limbaj declarativ de interogare pentru bazele de date sub formade graf care permite interogarea si actualizarea rapida a datelor Cypher este un limbajrelativ simplu dar foarte puternic Interogarile foarte complexe ale bazei de date pot fiusor exprimate prin intermediul limbajului Cypher

Este conceput pentru a fi un limbaj de interogare uman Scopul lui principal este dea face interogarile mult mai simple si unele interogari care la bazele de date relationale nuerau posibile le face posibile Constructiile sale se bazeaza pe grafica si pe limba englezalucru care ajuta la scrierea mai intuitiva a interogarilor Este construit pentru a fi maiintuitiv pentru citire si nu neaparat pentru scriere

Cypher se bazeaza pe modelul Graph Property care ın plus fata de elementelegrafice standard ale nodurilor si muchiilor (numite relatii ın Cypher) adauga etichete siproprietati ca si concepte Nodurile pot avea zero sau mai multe etichete ın timp ce fiecarerelatie este de exact un singur tip Nodurile si relatiile au de asemenea zero sau mai multeproprietati

Chypher este limbajul de interogare folosit la bazele de date Neo4j deci este opti-unea implicita atunci cand se alege Neo4j

443 Maven

Maven 3 este un instrument de management software si de ıntelegere a proiectelorsoftware Pe baza conceptului unui model de obiect de proiect (POM) Maven poategestiona construirea raportarea si documentarea unui proiect printr-o informatie centrala

2httpsneo4jcomdevelopercypher-query-language3httpswwwjavatpointcommaven-tutorial

27

Obiectivul principal al lui Maven este acela de a permite unui dezvoltator sa ınte-leaga starea completa a efortului de dezvoltare ın cel mai scurt timp Avantajele Mavensunt

bull instalarea rapida a proiectului fara fisiere buildxml complicate doar un POMbull procesul de construire este standardizat pentru toate proiectelebull usor de ınvatat si de utilizatbull configurarea unui proiect este foarte rapidabull bine documentat

Am ales sa folosesc Maven deoarece este una din cele mai comune optiuni pentru aimporta librariile ıntr-un proiect si este si cel mai documentat Deci mereu cand esti pusın dificultate poti cauta pe internet sugestii

444 Spring Boot

Spring Boot 4 este un framework din cadrul Spring care ofera setari implicite pentruconfigurarea codului si adnotari pentru a lansa rapid proiecte noi ın executie Urmaresteabordarea rdquoConfigurarea defectiunilor vizionaterdquo pentru a evita un numar mare de linii decod pentru configuratii si pentru a ımbunatati procesul de dezvoltare

Avantajele Spring Boot sunt1 Face foarte usoara dezvoltarea de aplicatii bazate pe Spring cu Java sau Groovy2 Reduce timpul de dezvoltare si creste productivitatea3 Evita scrierea multor linii de cod adnotari si configurare XML4 Este foarte usor de integrat cu alte framework-uri din aceasi familie Spring cum ar

fi Spring JDBC Spring ORM Spring Data Spring Security etc5 Urmareste abordarea rdquoConfigurarea implicita a optiunilorrdquo pentru a reduce efortul

pentru dezvoltatori6 Ofera servere HTTP ıncorporate cum ar fi Tomcat Jetty etc pentru a dezvolta si

testa aplicatiile web foarte usor7 Ofera instrumentul CLI (Command Line Interface) pentru a dezvolta si testa apli-

catiile de tip rdquoSpring Bootrdquo (Java sau Groovy) din linia de comanda foarte usor sirapidAm ales ca optiune pentru partea de backend acest framework deoarece simplifica

foarte mult lucrurile Datorita lui un programator poate sa ısi concentreze mai tare energiape a construi proiectul din punctul de vedere al buissness-ului logic nu din punctul devedere al configurarilor necesare

445 Sencha CMD si ExtJS

Sencha CMD 5 este un instrument linie de comanda cross-platform care ofera multesarcini automate ın ciclul complet de viata al unei aplicatii ExtJS de la generarea unui

4httpswwwjavatpointcomspring-boot-tutorial5httpsdocssenchacomcmd

28

nou proiect la lansarea unei aplicatii ın productie

Sencha Cmd ofera o colectie de caracteristici puternice pentru economisirea timpu-lui care functioneaza ımpreuna cu Sencha ExtJS si Sencha Touch

Ext JS 6 este un framework pur JavaScript pentru construirea de aplicatii webinteractive cross-platform utilizand tehnici precum scripting Ajax DHTML si DOM

Avantajele framework-ului ExtJS sunt

1 Documentatia Extjs este foarte cuprinzatoare si bine ıntretinuta2 Aspectul cheie al bibliotecii EXTJS este suportul de tip cross-browser3 Framework-ul ExtJS ofera o multitudine de elemente UI Aceste elemente includ

forme casete de dialog file arbori si tabele4 Framework-ul ExtJS include suport pentru implementarile Ajax5 ExtJS ofera performante excelente Framework-ul este complet orientat spre obiecte

si este extensibil asta pentru ca este scris ın JavaScript

Pentru partea de frontend se foloseste framework-ul ExtJS deoarece are o arhitec-tura ce se mapeaza foarte bine pe proiectele de frontend si anume arhitectura bazata pecomponente Aceasta face ca ın proiect codul sa fie mult mai organizat si procesul dedezvoltare al proiectului sa fie mult mai scurt prin identificarea mai usoara a erorilor

446 Facebook API(Graph API)

Graph API 7 este modul principal de a pune date ın platforma Facebook si de aobtine date din platforma Facebook Este un API bazat pe HTTP pe care aplicatiile ılpot utiliza pentru interogarea datelor pentru a introduce postari noi pentru gestionareaanunturilor sau pentru a ıncarca fotografii

Este denumit Graph API dupa ideea unui rdquograf socialrdquo - o reprezentare sub formade graf a informatiilor de pe Facebook Este compus din

bull noduri - ın esenta obiecte individuale cum ar fi un utilizator o fotografie o paginasau un comentariu

bull muchii - conexiuni ıntre o colectie de obiecte si un singur obiect cum ar fi fotografiilede pe o pagina sau comentariile de la o fotografie

bull campuri - date despre un obiect cum ar fi ziua de nastere a unui utilizator saunumele paginii

De obicei se utilizeaza noduri pentru a obtine date despre un anumit obiect se uti-lizeaza muchii pentru a obtine colectii de obiecte legate de un singur obiect si se utilizeazacampurile pentru a obtine date despre un singur obiect sau mai multe obiecte dintr-ocolectie

Am folosit Facebook API ca solutie pentru a ımbunatati problema de rdquocold startrdquopentru ca este singurul site pe care marea majoritate a oamenilor au cont si salveazalucrurile care le plac Deci se potrivea perfect peste nevoile aplicatiei mele

6httpdocssenchacomextjs6207httpsdevelopersfacebookcomdocsgraph-api

29

447 Git

Git 8 este un sistem de control a versionarii pentru urmarirea modificarilor ın fisierelede pe computer si coordonarea activitatii asupra acestor fisiere ın randul mai multor per-soane Este utilizat ın principal pentru gestionarea codului sursa ın dezvoltarea de softwaredar poate fi folosit pentru a urmari schimbarile ın orice set de fisiere

Avantaje ale Git

bull Modelul distribuit numai ceea ce se doreste se face publicbull Branching-ul si merging-ul sunt usoarebull Fluxul de lucru este flexibilbull Integritatea datelor este asigurata Deoarece GIT utilizeaza arbori SHA1 coruperea

datelor din motive externe poate fi usor detectatabull Rapid Git este foarte rapid chiar si ın comparatie cu alte sisteme de control a

versionarii

Am folosit Git pentru a avea la proiect un back-up ın caz ca se ıntampla ceva cuproiectul salvat pe calculator

45 Arhitectura conceptuala

In figura 45 este prezentata arhitectura conceptuala a sistemului Acesta este ım-partit ın doua mari parti backend-ul si frontend-ul care comunica ıntre ele si ısi trimitinformatii

Se poate observa ca baza de date este de tip graf mai exact Neo4j si comunica cubackend-ul pentru a putea lucra cu datele stocate Backend-ul este structurat pe nivelefiecare cu un diferit rol si care trebuie parcurs pentru a procesa datele din interfata ınbaza de date Cele trei nivele sunt cel de Repository cel de Service si cel ControllerToate interogarile venite din interfata utilizator ajung ın nivelul de Controller Dupa ceinterogarile trec de securitatea sistemului ajung ın nivelul de Service Acolo se proceseazasi se afla partea de logica a aplicatiei Pentru a interactiona cu baza de date din Servicese apeleaza metodele din nivelul de Repository

In continuare backend-ul comunica prin protocolul HTTP cu interfata grafica cucare interactioneaza clientii aplicatiei Interfata este scrisa ın Ext JS si are o parte de Viewsi o parte de Controller care este cea care comunica cu backend-ul

Pentru partea de autentificare sistemul interactioneaza cu API-ul de la Facebookde la care ia dupa autentificare un access token Cu ajutorul acestuia ia dupa aceea datelenecesare pentru a putea crea un profil utilizatorului

8httpsguidesgithubcomintroductiongit-handbook

30

Figura 45 Arhitectura conceptuala

31

Capitolul 5

Proiectare de Detaliu siImplementare

In acest capitol vor fi prezentate detalii de implementare ale sistemului de recoman-dare incluzand o ımpartire al acestuia ın componentele care ıl cuprind

Obiectivul este de a prezenta arhitectura si modul de implementare al aplicatieipe baza datelor descoperite ın studiul bibliografic de la capitolul trei si cu tehnologiilehotarate la capitolul patru Pe langa asta va fi prezentata si structura bazei de date sideciziile luate pentru securitatea aplicatiei

51 Arhitectura sistemului

Din punctul de vedere al arhitecturii aplicatia se poate considera ca este alcatuitadin patru mari componente

1 API-ul de la Facebook2 Aplicatia client care reprezinta interfata grafica a aplicatiei3 Aplicatia server adica backendul aplicatiei si partea ın care se afla partea de rdquobusiness

logicrdquo4 Baza de date

Partea componenta reprezentata de API-ul de la Facebook este doar o componentacu care aplicatia se integreaza si pe care aceasta o foloseste In interactiunea cu ea interfatada o cerere de autentificare apare o fereastra de la Facebook ın care utilizatorul introducecredentialele de la API-ul de Facebook se primeste ınapoi un access token si cu ajutorulacestuia face o cerere pentru a primi datele personale ale utilizatorului pentru creeareaprofilului utilizator

Urmatoarea parte a aplicatiei este interfata utilizator frontend-ul care reprezintapartea cu care utilizatorul interactioneaza si locul unde ıi sunt afisate informatiile

Cererile din interfata ajung ın a treia parte componenta a sistemului partea deserver adica backend-ul aplicatiei Acolo toate cererile sunt citite si procesate iar raspun-

33

sul lor este trimis la interfata utilizator Aceasta este partea care reprezinta rdquogandireardquoaplicatiei Aceea este componenta care face legatura ıntre cererile utilizatorului din inter-fata si datele stocate ın baza de date

Ultima componenta a aplicatiei o reprezinta baza de date care are ca rol sa stochezedatele despre utilizatori produse si comenzi Ea este o baza de date sub forma de grafde tipul Neo4j Acolo se salveaza entitatile aplicatiei sub forma de noduri si dependenteleıntre acestea sub forma de relatii ıntre aceste noduri

Figura 51 Diagrama de rdquodeploymentrdquo

In figura 51 este prezentata diagrama de rdquodeploymentrdquo a sistemului cu cele patrucomponente ale sistemului Aplicatia client comunica cu API-ul de la Facebook prin pro-tocolul securizat HTTPS cu backend-ul prin protocolul HTTP iar backend-ul cu baza dedate prin JDBC

Aplicatia a putut fi ımpartita ın aceste componente separate deoarece fiecare dintreele poate functiona independent de celelalte comunica cu ele doar prin mesaje Din acestmotiv locul unde ruleaza acestea pot sa fie pe servere diferite In plus daca aplicatiaar fi pusa pe servere pentru utilizatori ar putea fi mai multe servere pe care ruleaza ocomponenta si prin rdquoload balancingrdquo sa se trimita cererile ımpartite ıntre ele

Cum astfel componentele nu depind foarte mult unele de altele si pot rula faraa le interesa de unde le sunt trimise cererile este arhitectura cea mai corecta deoarecedefectarea sau o posibila eroare la una din ele nu o influenteaza cu nimic pe o alta Dacatoate ar rula pe acelasi server o eventuala defectiune a acestuia ar ınsemna o defectiune aıntregului sistem Insa daca exista mai multe noduri si se afla pe servere diferite pot doartoate cererile sa fie redirectionate spre un nod care functioneaza si aplicatia sa functionezepentru clienti la fel ca ınainte

34

Un alt avantaj al arhitecturii ar fi faptul ca la o lansare viitoare catre clienti se poatelansa doar componenta la care s-au facut modificari De asemenea aplicatia ar putea aveape viitor si o componenta mobila Iar cum serverul e independent poate fi acelasi serverfolosit de o alta aplicatie client

511 Arhitectura componentei backend

Arhitectura backend-ului este si ea ımpartita ın mai multe pachete pentru o maibuna structura si pentru o cat mai mica dependenta ıntre diversele componente Astfelcuplarea este minima ıntre clase si eventualele modificari ulterioare pot fi mai usor defacut

Serverul a fost implementat ın Java cu ajutorul framework-ului Spring Boot iarmediul de dezvoltare folosit a fost Intellij IDEA

Din punctul de vedere al ımpartirii arhitectura serverului aplicatiei este structurataın patru pachete si o clasa ın afara acestora Acea clasa este rdquomainrdquo-ul aplicatiei este parteacare trebuie rulata pentru a porni serverul Din cauza ca este o aplicatie Spring Boot si nuuna String singura adnotare necesara pentru a sti ca aceea este clasa rdquoradacinardquoa aplicatieieste SpringBootApplication

Cele patru pachete ale serverului sunt1 Cel de domeniu (domain) cu clasele POJO care reprezinta entitatile din baza de

date2 Cel de rdquomagazierdquo (repositories) care este cel care face direct actiunile ın baza de date3 Cel de serviciu (services) ın care se afla partea de logica a ıntregii aplicatii4 Cel de web ın care se afla clasele de rdquocontrollerrdquo

Figura 52 Diagrama de pachete pentru backend

35

Ca si dependente nivelul de web ıl foloseste pe cel de seviciu cel de serviciu ılfoloseste pe cel de rdquomagazierdquo iar clasele din pachetul de domeniu sunt folosite ın toatecelelalte pachete

In continuare voi prezenta pe rand fiecare nivel al serverului adica fiecare pachet

Figura 53 Diagrama de clase pentru pachetul rdquodomainrdquo

36

Nivelul de domeniu (domain) este alcatuit ın primul rand din clasele care suntentitati ın baza de date Acestea sunt reprezentate de toate clasele ce stocheaza informatiidespre utilizatori si despre produse si comenzi Pe langa informatiile personale despre unutilizator de genul numelui email-ului sau data nasterii care sunt salvate ın entitateapersoana se stocheaza despre utilizator ın clase diferite informatii de genul locului undelocuieste locul unde a copilarit locurilor unde a facut scoala locului unde lucreaza sau celmai important pentru aplicatia aceasta lucrurilor care ıi plac In afara acestor informatiidespre utilizatori sunt si clase cu informatiile despre prieteni despre produse sau desprecomenzi

Din cauza faptului ca aplicatia este de tipul unei retele sociale ın care exista prieteniiıntre persoane exista dependente ıntre toate entitatile aplicatiei Acesta este si motivulpentru care am ales baza de date sub forma de graf pe care sa se mapeze toate acesteentitati sub forma de noduri si toate aceste dependente sub forma de relatii

In pachetul de domeniu se afla si trei subpachete Unul dintre ele este pentruclasele folosite pentru a trata erorile aplicatiei In interiorul acestui pachet se afla douaclase pentru eroare si o exceptie cea folosita ın cazul ın care nu se gaseste ceea ce doresteutilizatorul Pe langa asta este clasa care are ca obiect raspunsul dat de sistem ın cazulunei erori la server Aceasta contine ın interiorul sau pe langa codul erorii si detalii despreeroarea trimisa Aceasta lista de detalii e reprezentata de obiectele de tipul celei de-a treiaclase din pachetul acesta

Celelalte doua subpachete aflate ın acest nivel sunt cele care contin clasele specialede cerere sau raspuns care au ajutat la maparea acestora mai bine In multe cazuri nua fost necesara trimiterea la interfata utilizator a tuturor informatiilor stocate despre oentitate si de aceea am ales sa creez ın aceste cazuri un obiect auxiliar care sa fie folositpe post de raspuns

Figura 54 Diagrama de clase pentru pachetul rdquorepositoriesrdquo

37

Cel de-al doilea nivel al aplicatiei backend este cel de rdquomagazierdquo (repositories) carecontine doar interfete de tip rdquoRepositoryrdquo

Aceste interfete sunt cele care fac operatiile directe asupra entitatilor din baza dedate

Unele interfete doar extind interfata care are deja implementate metodele CRUDsi din acest motiv nu au metode suplimentare iar altele au si metode ın plus care au carol sa execute interogari mai complexe asupra bazei de date In acele metode se pot scrieinterogarile ın Cypher pentru a putea primi informatii despre mai multe noduri sau desprerelatiile dintre acestea sau si pentru a returna doar anumite rezultate care ındeplinescanumite conditii In felul acesta a fost implementata si cererea de oferire a recomandarilorIn acel caz sistemul returneaza produsele care au ın descriere unul din lucrurile care se aflaın lista de obiecte sau servicii primite de la Facebook ca ıi plac utilizatorului

Nivelul de rdquoRepositoryrdquo este folosit direct de cel de-al treiea nivel cel de servi-ciu Acesta este nivelul la care se executa logica aplicatiei unde se comanda modul defunctionare al ıntregii aplicatii

Figura 55 Diagrama de clase pentru pachetul rdquoservicesrdquo

Pe acest nivel ajung toate cererile din server dupa ce trec de verificarile de securitateIn acest pachet se afla si clasa de securitate care face verificarile necesare In aceasta clasaexista o metoda ce se apeleaza la prima cerere cea de salvare a datelor de la Facebookdespre utilizator si care codifica id-ul utilizatorului si ıl trimite pe raspuns ınapoi interfeteiPe langa asta ın acea clasa se afla si o metoda care verifica faptul ca id-ul codificat esteal unui utilizator cu rol corespunzator pentru a face acea cerere

In plus ın acest pachet se afla si toate celelalte clase care fac diverse operatii pedatele din baza de date si dau raspunsuri cererilor din interfata Aici se afla logica care

38

comanda actiunile asupra utilizatorilor asupra prietenilor acestora asupra produselor siasupra comenzilor

Ultima clasa a acestui nivel este cea care se ocupa de trimiterea de email-uri Incazul ın care se face o noua comanda de catre un utilizator toti producatorii produselor depe comanda sunt notificati despre produsele lor pe care le doreste utilizatorul Din serviciulde comanda se apeleaza serviciul de email pentru fiecare producator din lista celor care auproduse care se afla pe lista comenzii utilizatorului

Ultimul si cel mai aproape de interfata utilizator este nivelul de web Acolo se aflatoate clasele de rdquoControllerrdquo ale aplicatiei server

Figura 56 Diagrama de clase pentru pachetul rdquowebrdquo

Toate cererile din interfata utilizator ıncearca sa se mapeze pe rutele declarate ınclase pentru a fi procesate ın metoda corespunzatoare Toata aceasta parte este foarteusor de implementat si mai ales foarte lizibil pentru programatori datorita adnotarilor dinJava Cu ajutorul acestora trebuie doar specificat care este numele URL-ului cererii careeste tipul de obiect asteptat si daca se trimite ca rdquoquery stringrdquo pe URL sau ın interiorulcorpului cererii si tipul raspunsului Pentru fiecare cerere care nu este apelata ın parteaneautentificata a utilizatorului primul lucru care se apeleaza este metoda de securitatepentru a verifica rolul si id-ul utilizatorului Daca din punctul de vedere al securitatii totuleste ın regula se apeleaza metoda corespunzatoare din pachetul de serviciu

39

O singura clasa este diferita de restul ın pachetul de controller si aceea este clasa deeroare Acolo se mapeaza erorile aparute ın timpul cererii si se trimite ınapoi ın interfatagrafica un raspuns cu cod de eroare specific nu numai 500 Generic Application Exceptioncum ar trimite fara aceasta clasa si cu detalii despre motivul aparitiei erorii

Datorita folosirii adnotarilor din java nu a fost necesara folosirea unor rdquodesignpatternrdquo-uri ın sistem De exemplu pentru a folosi ın nivelul de web ceva din pachetulde servicii trebuia doar acel obiect sa aiba adnotarea Autowired si se ınlocuieste atatfolosirea rdquodesign patternrdquo-ului Singleton cat si a celui de Factory Acel obiect nu trebuiecreat sau initializat se face asta implicit datorita adnotarii si de asemenea este folositapeste tot aceeasi instanta

In concluzie toate cererile venite din interfata grafica ajung ın nivelul de rdquocontrollerrdquode unde sunt trimise la cel de rdquoservicerdquopentru a fi procesate si facute eventualele modificarinecesare ın baza de date ca apoi raspunsul sa fie trimis ınapoi spre aplicatia client pentruafisare

512 Arhitectura componentei frontend

A doua componenta implementata a sistemului este aplicatia client frontend-ulAceasta a fost scrisa ın Java Script cu ajutorul framework-ului Ext JS compilarea

se face cu ajutorul Sencha CMD si mediul de implementare a fost IntelliJ IdeaCu ajutorul framework-ului Ext JS se scriu componente care apoi se initializeaza

unele pe altele Aplicatia porneste cu fisierul Applicationjs care este un fel de rdquomainrdquopentru aplicatie Aceasta initializeaza alte componente care la randul lor includ altecomponente si tot asa Structura poate fi foarte usor comparata cu una arborescenta dinacest punct de vedere

Framework-ul a fost creat sa functioneze ın felul acesta pentru ca scopul componen-telor este sa fie scrise ın asa fel ıncat sa poata pe viitor sa fie utilizate din nou Una dindorintele majore ın programare tot timpul este de a se scrie cod ıntr-o maniera ın care safie cat mai reutilizabil Iar framework-ul Ext JS exact asta ıncearca

Arhitectura aplicatiei client se gaseste ın figura 57 si este la randul ei ımpartita ınpachete ca si cea de server Similar cu pachetul de rdquodomainrdquo de la aplicatia de backendeste pachetul rdquomodelrdquo al interfetei utilizator Aici sunt rdquoclaserdquo care sunt simple POJO sicare sunt apoi folosite ın nivelele urmatoare Sunt mai putine decat clasele din rdquostorerdquodeoarece daca raspunsul de la server nu trebuie procesat nu sunt necesare se pot mapadirect obiectele din rdquostorerdquo pe componentele interfetei utilizator

Urmatorul nivel este cel pe care se afla clasele de rdquostorerdquo Acestea sunt cele careexecuta cererea spre backend si face legatura ıntre client si server Daca are o clasa derdquomodelrdquodeclarata atunci populeaza acel obiect cu datele primite de la server iar ın cazul ıncare nu este declarat un model se trimit datele exact asa cum s-au primit la nivelul urmatorde rdquoviewrdquo Acest nivel seamana din punct de vedere al functiei cu cel de rdquorepositoryrdquo de laaplicatia server deoarece ambele au rol de legatura Aceea facea legatura ıntre aplicatiesi baza de date si aceasta face legatura ıntre aplicatia client si aplicatia server

40

Figura 57 Diagrama de clase pentru aplicatia web

Cel de-al treilea pachet al aplicatiei este cel de rdquoviewrdquo In acest pachet se afla claselecare alcatuiesc partea vizuala a aplicatiei La randul ei si aceasta este alcatuita tot dincomponente Aplicatia deschide ın primul rand Main-ul care determina aparitia paginii deHome si afisarea ın meniu a optiunilor posibile ın functie de autentificare si rol Clasele deaici se executa de fapt la deschiderea aplicatiei fiind rdquosingle page applicationrdquo si tot atuncise ıncarca pe pagina componentele Ca si arhitectura a pachetului acesta este ımpartit larandul sau ın subpachete Pentru o mai buna organizare exista patru subpachete cateunul pentru fiecare tip de utilizator In felul acesta toate rdquoviewrdquo-urile care sunt specificeunui utilizator cu un anumit rol se afla ın acelasi subpachet

Cele patru subpachete existente ın pachetul rdquoviewrdquo sunt

1 Pachetul rdquomainrdquo care cuprinde rdquoviewrdquo-urile care se afla ın partea neautentificata aaplicatiei

2 Pachetul rdquoclientrdquo continand rdquoviewrdquo-urile pe care le poate accesa un utilizator simplu3 Pachetul rdquoproducerrdquo specific actiunilor unui utilizator care are rol de producator4 Pachetul rdquoadminrdquo care contine toate rdquoviewrdquo-urile care ıi apar unui utilizator care este

administrator al aplicatiei

Ultimul pachet si nivel al aplicatiei client este cel de rdquocontrollerrdquo In acest pachet

41

se afla clasele care fac actiunile din interfata grafica In timp ce pachetul rdquoviewrdquo continedoar partea grafica a aplicatiei adica modul ın care aceasta trebuie sa arate pachetulrdquocontrollerrdquo contine actiunea acestora modul ın care aplicatia trebuie sa functioneze

Ca si arhitectura si acest pachet a fost ımpartit la randul lui tot ın cele patrusubpachete ca si pachetul rdquoviewrdquo adica rdquomainrdquo rdquoclientrdquo rdquoproducerrdquo si rdquoadminrdquo In pluspentru a fi usor de gasit ce clasa de rdquocontrollerrdquo apartine carui rdquoviewrdquo am ales ca cele douasa aiba acelasi nume In felul acesta daca se doreste sa se gaseasca actiunile unui rdquoviewrdquose poate cauta dupa o clasa cu acelasi nume ın pachetul rdquocontrollerrdquo Numarul claselor dinacest pachet este mai mic decat cel al claselor din rdquoviewrdquo deoarece nu toate paginile dininterfata au actiuni suplimentare Daca singura actiune este ıncarcarea paginii cu date dela server adica doar o actiune simpla de GET datele se ıncarca cu ajutorul rdquostorerdquo-ului laıncarcarea paginii si nu este necesara nici o actiune suplimentara Paginile pe care se potface si actiuni de alt gen sau se deschid noi ferestre au nevoie de clase de rdquocontrollerrdquo

In concluzie arhitectura aplicatiei client este una bazata pe componente care ıncearcasa foloseasca cat mai multe clase reutilizabile

52 Structura bazei de date

Baza de date a aplicatiei este de tip graf de tipul Neo4j Pentru utilizare exista unprogram numit Neo4j ce trebuie instalat Acest program are si o interfata grafica ın carese pot vizualiza datele sub forma grafica si ın care se pot scrie de asemenea si interogariın limbajul acestei baze de date adica Cypher

Fiind o baza de date sub forma de graf datele stocate sunt salvate ın structurade date sub forma de noduri si relatii Entitatile din pachetul de domeniu din aplicatiabackend se gasesc ın baza de date sub forma unor noduri iar dependentele dintre nodurise mapeaza ın baza de date sub forma unor relatii Un element diferit fata de alte tipuride baze de date este faptul ca pe relatiile dintre noduri se pot salva atribute cum este ınaplicatie cazul pentru prieteniile dintre persoane In cazul acestora pe relatia dintre nodurise salveaza daca prietenia a fost sau nu acceptata

Pentru fiecare clasa POJO din aplicatia server clasa ce are doar metodele get si setsi se afla ın pachetul domain exista cate un tip de nod diferit ın baza de date cum estesi marcat ın diferite culori ın figura 58 Fiecare tip de nod are atributele proprii care potlua valori sau pot fi nule Iar fiecare obiect din Java reprezinta un nod diferit ın baza dedate

Neo4j a fost cea mai buna optiune pentru baza de date pentru ca aplicatia poate ficonsiderata o retea sociala Acest lucru se datoreaza relatiilor de prietenie dintre persoanesi a multiplelor relatii ıntre noduri Toate nodurile se afla ın acceasi componenta conexadeci nu exista noduri izolate care sa nu aiba nici o legatura cu nici un alt nod

Datorita acestei structuri a bazei de date este posibila implementarea cererii derecomandare ca o simpla interogare ın baza de date aceasta fiind cea mai simpla metodade implementare a unui sistem de genul acesta una mult mai complexa ar fi fost un

42

algoritm de ınvatare care sa ınvete tipare ale utilizatorilor si sa recomande cadouri pe bazaacestor informatii

Figura 58 Diagrama bazei de date pentru doi utilizatori

Un alt avantaj al acestui tip de baza de date este faptul ca datele nu sunt duplicateın baza de date Spre exemplu daca mai multi utilizatori au ca locatie acelasi oras nu secreaza cate un nod cu acea locatie de mai multe ori ci acel unic nod va avea cate o relatiecu fiecare utilizator care are ca locatie acel oras

In concluzie structura bazei de date a fost aleasa ın acest fel datorita tipului apli-catiei adica asemanatoare cu o retea sociala si datorita implementarii simple a unui sistemde recomandare pe o asemenea baza de date

53 Fluxul pentru diferite operatii

Pentru aplicatie cele mai importante cazuri de utilizare sunt salvarea informati-ilor despre utilizator primite de la Facebook pentru crearea unui profil si recomandareacadourilor pentru un utilizator al aplicatiei Din aceasta cauza cele doua cazuri de utilizarevor fi prezentate mai ın detaliu ın continuare

43

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 31: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

44 Perspectiva tehnologica

441 Neo4j

Neo4j 1 este un sistem de gestionare a bazelor de date sub forma de graf dezvoltatde Neo4j Inc Descris de dezvoltatorii sai ca o baza de date tranzactionala compatibilacu ACID Neo4j este cea mai populara baza de date sub forma de graf dupa clasamentulDB-Engines

Baza de date Neo4j (ca si orice alta baza de date sub forma de graf) este foartediferita de o baza de date relationala cum ar fi MS Access SQL Server MySQL etcBazele de date relationale utilizeaza tabele randuri si coloane pentru stocarea datelor

Neo4j nu utilizeaza tabele randuri si coloane pentru stocarea sau prezentarea datelorci noduri si relatii

Neo4j este foarte potrivit pentru stocarea datelor care au multe relatii interconec-tate Acestea sunt de fapt aplicatiile ın care merita sa fie folosite De fapt bazele de datesub forma de graf cum este Neo4j sunt mult mai bune la tratarea datelor interconectatedecat bazele de date relationale

Acest lucru se datoreaza faptului ca modelul sub forma de graf nu necesita de obiceio schema predefinita Nu e nevoie sa se creeze structura bazei de date ınainte de a fiıncarcate datele asa cum se face la o baza de date relationala

Dar principalul motiv pentru care Neo4j este mai bun pentru datele relationalepentru acest tip de aplicatii este modul ın care permite crearea relatiilor Neo4j este con-struit ın jurul relatiilor si atunci nu este nevoie sa se configureze chei primare constrangerichei straine pentru a predetermina nodurile care pot avea o relatie si la ce date Cu Neo4jse poate adauga orice legatura ıntre orice nod ori de cate ori este nevoie

Neo4j are aceste calitati care nu se gasesc nici la celelalte baze de date NoSQLBazele de date non-relationale pe langa cele sub forma de graf sunt cele de tip coloanade tip document de tip cheie-valoare si de tip multi-model Nici unul din aceste tipuri nuau ca principala functionalitate maparea relatiilor si facilitatea interogarilor ıntr-o baza dedate cu multe relatii ıntre entitati

Generarea de recomandari personalizate este unul dintre cele mai frecvente cazuride utilizare a unei baze de date sub forma de graf Unele dintre principalele beneficii aleutilizarii grafurilor pentru a genera recomandari includ

- Performanta Lipsa indexurilor permite calcularea recomandarilor ın timp realasigurand ca recomandarea este ıntotdeauna relevanta si reflecta informatii actualizate

- Model de date Modelul de graf cu proprietati permite combinarea cu usurinta aseturilor de date din mai multe surse

Un alt avantaj al bazelor de date sub forma de graf Neo4j este faptul ca respectatoate principiile din modelul de consistenta ACID

Garantia data de principiile ACID este ca ofera un mediu sigur ın care sa functionezedatele Acronimul ACID reprezinta

1httpsneo4jcomuse-casesreal-time-recommendation-engine

26

bull Atomic Toate operatiile dintr-o tranzactie reusesc sau fiecare operatie este reluatabull Consistent La finalizarea unei tranzactii baza de date este solida din punct de

vedere structuralbull Izolat Tranzactiile nu se lupta una cu cealalta Accesul controversat la date este

moderat de baza de date astfel ıncat tranzactiile par sa se execute succesivbull Durabil Rezultatele aplicarii unei tranzactii sunt permanente chiar si ın cazul unor

defectiuniCand vine vorba de tehnologiile NoSQL cele mai multe baze de date sub forma de

graf (inclusiv Neo4j) utilizeaza un model de consistenta ACID pentru a asigura ca datelesunt stocate ın siguranta si ın mod consecvent

Am ales baza de date sub forma de graf ca optiune pentru stocarea datelor deoarecedin toate lucrarile si articolele citite a fost optiunea cea mai buna pentru un sistem derecomandare Deci acesta se mapeaza perfect pe cerintele functionale ale proiectului Sidin optiunile de baze de date sub forma de graf Noe4j a avut de departe cele mai multeavantaje ea fiind si cea mai utilizata

442 Cypher

Cypher 2 este un limbaj declarativ de interogare pentru bazele de date sub formade graf care permite interogarea si actualizarea rapida a datelor Cypher este un limbajrelativ simplu dar foarte puternic Interogarile foarte complexe ale bazei de date pot fiusor exprimate prin intermediul limbajului Cypher

Este conceput pentru a fi un limbaj de interogare uman Scopul lui principal este dea face interogarile mult mai simple si unele interogari care la bazele de date relationale nuerau posibile le face posibile Constructiile sale se bazeaza pe grafica si pe limba englezalucru care ajuta la scrierea mai intuitiva a interogarilor Este construit pentru a fi maiintuitiv pentru citire si nu neaparat pentru scriere

Cypher se bazeaza pe modelul Graph Property care ın plus fata de elementelegrafice standard ale nodurilor si muchiilor (numite relatii ın Cypher) adauga etichete siproprietati ca si concepte Nodurile pot avea zero sau mai multe etichete ın timp ce fiecarerelatie este de exact un singur tip Nodurile si relatiile au de asemenea zero sau mai multeproprietati

Chypher este limbajul de interogare folosit la bazele de date Neo4j deci este opti-unea implicita atunci cand se alege Neo4j

443 Maven

Maven 3 este un instrument de management software si de ıntelegere a proiectelorsoftware Pe baza conceptului unui model de obiect de proiect (POM) Maven poategestiona construirea raportarea si documentarea unui proiect printr-o informatie centrala

2httpsneo4jcomdevelopercypher-query-language3httpswwwjavatpointcommaven-tutorial

27

Obiectivul principal al lui Maven este acela de a permite unui dezvoltator sa ınte-leaga starea completa a efortului de dezvoltare ın cel mai scurt timp Avantajele Mavensunt

bull instalarea rapida a proiectului fara fisiere buildxml complicate doar un POMbull procesul de construire este standardizat pentru toate proiectelebull usor de ınvatat si de utilizatbull configurarea unui proiect este foarte rapidabull bine documentat

Am ales sa folosesc Maven deoarece este una din cele mai comune optiuni pentru aimporta librariile ıntr-un proiect si este si cel mai documentat Deci mereu cand esti pusın dificultate poti cauta pe internet sugestii

444 Spring Boot

Spring Boot 4 este un framework din cadrul Spring care ofera setari implicite pentruconfigurarea codului si adnotari pentru a lansa rapid proiecte noi ın executie Urmaresteabordarea rdquoConfigurarea defectiunilor vizionaterdquo pentru a evita un numar mare de linii decod pentru configuratii si pentru a ımbunatati procesul de dezvoltare

Avantajele Spring Boot sunt1 Face foarte usoara dezvoltarea de aplicatii bazate pe Spring cu Java sau Groovy2 Reduce timpul de dezvoltare si creste productivitatea3 Evita scrierea multor linii de cod adnotari si configurare XML4 Este foarte usor de integrat cu alte framework-uri din aceasi familie Spring cum ar

fi Spring JDBC Spring ORM Spring Data Spring Security etc5 Urmareste abordarea rdquoConfigurarea implicita a optiunilorrdquo pentru a reduce efortul

pentru dezvoltatori6 Ofera servere HTTP ıncorporate cum ar fi Tomcat Jetty etc pentru a dezvolta si

testa aplicatiile web foarte usor7 Ofera instrumentul CLI (Command Line Interface) pentru a dezvolta si testa apli-

catiile de tip rdquoSpring Bootrdquo (Java sau Groovy) din linia de comanda foarte usor sirapidAm ales ca optiune pentru partea de backend acest framework deoarece simplifica

foarte mult lucrurile Datorita lui un programator poate sa ısi concentreze mai tare energiape a construi proiectul din punctul de vedere al buissness-ului logic nu din punctul devedere al configurarilor necesare

445 Sencha CMD si ExtJS

Sencha CMD 5 este un instrument linie de comanda cross-platform care ofera multesarcini automate ın ciclul complet de viata al unei aplicatii ExtJS de la generarea unui

4httpswwwjavatpointcomspring-boot-tutorial5httpsdocssenchacomcmd

28

nou proiect la lansarea unei aplicatii ın productie

Sencha Cmd ofera o colectie de caracteristici puternice pentru economisirea timpu-lui care functioneaza ımpreuna cu Sencha ExtJS si Sencha Touch

Ext JS 6 este un framework pur JavaScript pentru construirea de aplicatii webinteractive cross-platform utilizand tehnici precum scripting Ajax DHTML si DOM

Avantajele framework-ului ExtJS sunt

1 Documentatia Extjs este foarte cuprinzatoare si bine ıntretinuta2 Aspectul cheie al bibliotecii EXTJS este suportul de tip cross-browser3 Framework-ul ExtJS ofera o multitudine de elemente UI Aceste elemente includ

forme casete de dialog file arbori si tabele4 Framework-ul ExtJS include suport pentru implementarile Ajax5 ExtJS ofera performante excelente Framework-ul este complet orientat spre obiecte

si este extensibil asta pentru ca este scris ın JavaScript

Pentru partea de frontend se foloseste framework-ul ExtJS deoarece are o arhitec-tura ce se mapeaza foarte bine pe proiectele de frontend si anume arhitectura bazata pecomponente Aceasta face ca ın proiect codul sa fie mult mai organizat si procesul dedezvoltare al proiectului sa fie mult mai scurt prin identificarea mai usoara a erorilor

446 Facebook API(Graph API)

Graph API 7 este modul principal de a pune date ın platforma Facebook si de aobtine date din platforma Facebook Este un API bazat pe HTTP pe care aplicatiile ılpot utiliza pentru interogarea datelor pentru a introduce postari noi pentru gestionareaanunturilor sau pentru a ıncarca fotografii

Este denumit Graph API dupa ideea unui rdquograf socialrdquo - o reprezentare sub formade graf a informatiilor de pe Facebook Este compus din

bull noduri - ın esenta obiecte individuale cum ar fi un utilizator o fotografie o paginasau un comentariu

bull muchii - conexiuni ıntre o colectie de obiecte si un singur obiect cum ar fi fotografiilede pe o pagina sau comentariile de la o fotografie

bull campuri - date despre un obiect cum ar fi ziua de nastere a unui utilizator saunumele paginii

De obicei se utilizeaza noduri pentru a obtine date despre un anumit obiect se uti-lizeaza muchii pentru a obtine colectii de obiecte legate de un singur obiect si se utilizeazacampurile pentru a obtine date despre un singur obiect sau mai multe obiecte dintr-ocolectie

Am folosit Facebook API ca solutie pentru a ımbunatati problema de rdquocold startrdquopentru ca este singurul site pe care marea majoritate a oamenilor au cont si salveazalucrurile care le plac Deci se potrivea perfect peste nevoile aplicatiei mele

6httpdocssenchacomextjs6207httpsdevelopersfacebookcomdocsgraph-api

29

447 Git

Git 8 este un sistem de control a versionarii pentru urmarirea modificarilor ın fisierelede pe computer si coordonarea activitatii asupra acestor fisiere ın randul mai multor per-soane Este utilizat ın principal pentru gestionarea codului sursa ın dezvoltarea de softwaredar poate fi folosit pentru a urmari schimbarile ın orice set de fisiere

Avantaje ale Git

bull Modelul distribuit numai ceea ce se doreste se face publicbull Branching-ul si merging-ul sunt usoarebull Fluxul de lucru este flexibilbull Integritatea datelor este asigurata Deoarece GIT utilizeaza arbori SHA1 coruperea

datelor din motive externe poate fi usor detectatabull Rapid Git este foarte rapid chiar si ın comparatie cu alte sisteme de control a

versionarii

Am folosit Git pentru a avea la proiect un back-up ın caz ca se ıntampla ceva cuproiectul salvat pe calculator

45 Arhitectura conceptuala

In figura 45 este prezentata arhitectura conceptuala a sistemului Acesta este ım-partit ın doua mari parti backend-ul si frontend-ul care comunica ıntre ele si ısi trimitinformatii

Se poate observa ca baza de date este de tip graf mai exact Neo4j si comunica cubackend-ul pentru a putea lucra cu datele stocate Backend-ul este structurat pe nivelefiecare cu un diferit rol si care trebuie parcurs pentru a procesa datele din interfata ınbaza de date Cele trei nivele sunt cel de Repository cel de Service si cel ControllerToate interogarile venite din interfata utilizator ajung ın nivelul de Controller Dupa ceinterogarile trec de securitatea sistemului ajung ın nivelul de Service Acolo se proceseazasi se afla partea de logica a aplicatiei Pentru a interactiona cu baza de date din Servicese apeleaza metodele din nivelul de Repository

In continuare backend-ul comunica prin protocolul HTTP cu interfata grafica cucare interactioneaza clientii aplicatiei Interfata este scrisa ın Ext JS si are o parte de Viewsi o parte de Controller care este cea care comunica cu backend-ul

Pentru partea de autentificare sistemul interactioneaza cu API-ul de la Facebookde la care ia dupa autentificare un access token Cu ajutorul acestuia ia dupa aceea datelenecesare pentru a putea crea un profil utilizatorului

8httpsguidesgithubcomintroductiongit-handbook

30

Figura 45 Arhitectura conceptuala

31

Capitolul 5

Proiectare de Detaliu siImplementare

In acest capitol vor fi prezentate detalii de implementare ale sistemului de recoman-dare incluzand o ımpartire al acestuia ın componentele care ıl cuprind

Obiectivul este de a prezenta arhitectura si modul de implementare al aplicatieipe baza datelor descoperite ın studiul bibliografic de la capitolul trei si cu tehnologiilehotarate la capitolul patru Pe langa asta va fi prezentata si structura bazei de date sideciziile luate pentru securitatea aplicatiei

51 Arhitectura sistemului

Din punctul de vedere al arhitecturii aplicatia se poate considera ca este alcatuitadin patru mari componente

1 API-ul de la Facebook2 Aplicatia client care reprezinta interfata grafica a aplicatiei3 Aplicatia server adica backendul aplicatiei si partea ın care se afla partea de rdquobusiness

logicrdquo4 Baza de date

Partea componenta reprezentata de API-ul de la Facebook este doar o componentacu care aplicatia se integreaza si pe care aceasta o foloseste In interactiunea cu ea interfatada o cerere de autentificare apare o fereastra de la Facebook ın care utilizatorul introducecredentialele de la API-ul de Facebook se primeste ınapoi un access token si cu ajutorulacestuia face o cerere pentru a primi datele personale ale utilizatorului pentru creeareaprofilului utilizator

Urmatoarea parte a aplicatiei este interfata utilizator frontend-ul care reprezintapartea cu care utilizatorul interactioneaza si locul unde ıi sunt afisate informatiile

Cererile din interfata ajung ın a treia parte componenta a sistemului partea deserver adica backend-ul aplicatiei Acolo toate cererile sunt citite si procesate iar raspun-

33

sul lor este trimis la interfata utilizator Aceasta este partea care reprezinta rdquogandireardquoaplicatiei Aceea este componenta care face legatura ıntre cererile utilizatorului din inter-fata si datele stocate ın baza de date

Ultima componenta a aplicatiei o reprezinta baza de date care are ca rol sa stochezedatele despre utilizatori produse si comenzi Ea este o baza de date sub forma de grafde tipul Neo4j Acolo se salveaza entitatile aplicatiei sub forma de noduri si dependenteleıntre acestea sub forma de relatii ıntre aceste noduri

Figura 51 Diagrama de rdquodeploymentrdquo

In figura 51 este prezentata diagrama de rdquodeploymentrdquo a sistemului cu cele patrucomponente ale sistemului Aplicatia client comunica cu API-ul de la Facebook prin pro-tocolul securizat HTTPS cu backend-ul prin protocolul HTTP iar backend-ul cu baza dedate prin JDBC

Aplicatia a putut fi ımpartita ın aceste componente separate deoarece fiecare dintreele poate functiona independent de celelalte comunica cu ele doar prin mesaje Din acestmotiv locul unde ruleaza acestea pot sa fie pe servere diferite In plus daca aplicatiaar fi pusa pe servere pentru utilizatori ar putea fi mai multe servere pe care ruleaza ocomponenta si prin rdquoload balancingrdquo sa se trimita cererile ımpartite ıntre ele

Cum astfel componentele nu depind foarte mult unele de altele si pot rula faraa le interesa de unde le sunt trimise cererile este arhitectura cea mai corecta deoarecedefectarea sau o posibila eroare la una din ele nu o influenteaza cu nimic pe o alta Dacatoate ar rula pe acelasi server o eventuala defectiune a acestuia ar ınsemna o defectiune aıntregului sistem Insa daca exista mai multe noduri si se afla pe servere diferite pot doartoate cererile sa fie redirectionate spre un nod care functioneaza si aplicatia sa functionezepentru clienti la fel ca ınainte

34

Un alt avantaj al arhitecturii ar fi faptul ca la o lansare viitoare catre clienti se poatelansa doar componenta la care s-au facut modificari De asemenea aplicatia ar putea aveape viitor si o componenta mobila Iar cum serverul e independent poate fi acelasi serverfolosit de o alta aplicatie client

511 Arhitectura componentei backend

Arhitectura backend-ului este si ea ımpartita ın mai multe pachete pentru o maibuna structura si pentru o cat mai mica dependenta ıntre diversele componente Astfelcuplarea este minima ıntre clase si eventualele modificari ulterioare pot fi mai usor defacut

Serverul a fost implementat ın Java cu ajutorul framework-ului Spring Boot iarmediul de dezvoltare folosit a fost Intellij IDEA

Din punctul de vedere al ımpartirii arhitectura serverului aplicatiei este structurataın patru pachete si o clasa ın afara acestora Acea clasa este rdquomainrdquo-ul aplicatiei este parteacare trebuie rulata pentru a porni serverul Din cauza ca este o aplicatie Spring Boot si nuuna String singura adnotare necesara pentru a sti ca aceea este clasa rdquoradacinardquoa aplicatieieste SpringBootApplication

Cele patru pachete ale serverului sunt1 Cel de domeniu (domain) cu clasele POJO care reprezinta entitatile din baza de

date2 Cel de rdquomagazierdquo (repositories) care este cel care face direct actiunile ın baza de date3 Cel de serviciu (services) ın care se afla partea de logica a ıntregii aplicatii4 Cel de web ın care se afla clasele de rdquocontrollerrdquo

Figura 52 Diagrama de pachete pentru backend

35

Ca si dependente nivelul de web ıl foloseste pe cel de seviciu cel de serviciu ılfoloseste pe cel de rdquomagazierdquo iar clasele din pachetul de domeniu sunt folosite ın toatecelelalte pachete

In continuare voi prezenta pe rand fiecare nivel al serverului adica fiecare pachet

Figura 53 Diagrama de clase pentru pachetul rdquodomainrdquo

36

Nivelul de domeniu (domain) este alcatuit ın primul rand din clasele care suntentitati ın baza de date Acestea sunt reprezentate de toate clasele ce stocheaza informatiidespre utilizatori si despre produse si comenzi Pe langa informatiile personale despre unutilizator de genul numelui email-ului sau data nasterii care sunt salvate ın entitateapersoana se stocheaza despre utilizator ın clase diferite informatii de genul locului undelocuieste locul unde a copilarit locurilor unde a facut scoala locului unde lucreaza sau celmai important pentru aplicatia aceasta lucrurilor care ıi plac In afara acestor informatiidespre utilizatori sunt si clase cu informatiile despre prieteni despre produse sau desprecomenzi

Din cauza faptului ca aplicatia este de tipul unei retele sociale ın care exista prieteniiıntre persoane exista dependente ıntre toate entitatile aplicatiei Acesta este si motivulpentru care am ales baza de date sub forma de graf pe care sa se mapeze toate acesteentitati sub forma de noduri si toate aceste dependente sub forma de relatii

In pachetul de domeniu se afla si trei subpachete Unul dintre ele este pentruclasele folosite pentru a trata erorile aplicatiei In interiorul acestui pachet se afla douaclase pentru eroare si o exceptie cea folosita ın cazul ın care nu se gaseste ceea ce doresteutilizatorul Pe langa asta este clasa care are ca obiect raspunsul dat de sistem ın cazulunei erori la server Aceasta contine ın interiorul sau pe langa codul erorii si detalii despreeroarea trimisa Aceasta lista de detalii e reprezentata de obiectele de tipul celei de-a treiaclase din pachetul acesta

Celelalte doua subpachete aflate ın acest nivel sunt cele care contin clasele specialede cerere sau raspuns care au ajutat la maparea acestora mai bine In multe cazuri nua fost necesara trimiterea la interfata utilizator a tuturor informatiilor stocate despre oentitate si de aceea am ales sa creez ın aceste cazuri un obiect auxiliar care sa fie folositpe post de raspuns

Figura 54 Diagrama de clase pentru pachetul rdquorepositoriesrdquo

37

Cel de-al doilea nivel al aplicatiei backend este cel de rdquomagazierdquo (repositories) carecontine doar interfete de tip rdquoRepositoryrdquo

Aceste interfete sunt cele care fac operatiile directe asupra entitatilor din baza dedate

Unele interfete doar extind interfata care are deja implementate metodele CRUDsi din acest motiv nu au metode suplimentare iar altele au si metode ın plus care au carol sa execute interogari mai complexe asupra bazei de date In acele metode se pot scrieinterogarile ın Cypher pentru a putea primi informatii despre mai multe noduri sau desprerelatiile dintre acestea sau si pentru a returna doar anumite rezultate care ındeplinescanumite conditii In felul acesta a fost implementata si cererea de oferire a recomandarilorIn acel caz sistemul returneaza produsele care au ın descriere unul din lucrurile care se aflaın lista de obiecte sau servicii primite de la Facebook ca ıi plac utilizatorului

Nivelul de rdquoRepositoryrdquo este folosit direct de cel de-al treiea nivel cel de servi-ciu Acesta este nivelul la care se executa logica aplicatiei unde se comanda modul defunctionare al ıntregii aplicatii

Figura 55 Diagrama de clase pentru pachetul rdquoservicesrdquo

Pe acest nivel ajung toate cererile din server dupa ce trec de verificarile de securitateIn acest pachet se afla si clasa de securitate care face verificarile necesare In aceasta clasaexista o metoda ce se apeleaza la prima cerere cea de salvare a datelor de la Facebookdespre utilizator si care codifica id-ul utilizatorului si ıl trimite pe raspuns ınapoi interfeteiPe langa asta ın acea clasa se afla si o metoda care verifica faptul ca id-ul codificat esteal unui utilizator cu rol corespunzator pentru a face acea cerere

In plus ın acest pachet se afla si toate celelalte clase care fac diverse operatii pedatele din baza de date si dau raspunsuri cererilor din interfata Aici se afla logica care

38

comanda actiunile asupra utilizatorilor asupra prietenilor acestora asupra produselor siasupra comenzilor

Ultima clasa a acestui nivel este cea care se ocupa de trimiterea de email-uri Incazul ın care se face o noua comanda de catre un utilizator toti producatorii produselor depe comanda sunt notificati despre produsele lor pe care le doreste utilizatorul Din serviciulde comanda se apeleaza serviciul de email pentru fiecare producator din lista celor care auproduse care se afla pe lista comenzii utilizatorului

Ultimul si cel mai aproape de interfata utilizator este nivelul de web Acolo se aflatoate clasele de rdquoControllerrdquo ale aplicatiei server

Figura 56 Diagrama de clase pentru pachetul rdquowebrdquo

Toate cererile din interfata utilizator ıncearca sa se mapeze pe rutele declarate ınclase pentru a fi procesate ın metoda corespunzatoare Toata aceasta parte este foarteusor de implementat si mai ales foarte lizibil pentru programatori datorita adnotarilor dinJava Cu ajutorul acestora trebuie doar specificat care este numele URL-ului cererii careeste tipul de obiect asteptat si daca se trimite ca rdquoquery stringrdquo pe URL sau ın interiorulcorpului cererii si tipul raspunsului Pentru fiecare cerere care nu este apelata ın parteaneautentificata a utilizatorului primul lucru care se apeleaza este metoda de securitatepentru a verifica rolul si id-ul utilizatorului Daca din punctul de vedere al securitatii totuleste ın regula se apeleaza metoda corespunzatoare din pachetul de serviciu

39

O singura clasa este diferita de restul ın pachetul de controller si aceea este clasa deeroare Acolo se mapeaza erorile aparute ın timpul cererii si se trimite ınapoi ın interfatagrafica un raspuns cu cod de eroare specific nu numai 500 Generic Application Exceptioncum ar trimite fara aceasta clasa si cu detalii despre motivul aparitiei erorii

Datorita folosirii adnotarilor din java nu a fost necesara folosirea unor rdquodesignpatternrdquo-uri ın sistem De exemplu pentru a folosi ın nivelul de web ceva din pachetulde servicii trebuia doar acel obiect sa aiba adnotarea Autowired si se ınlocuieste atatfolosirea rdquodesign patternrdquo-ului Singleton cat si a celui de Factory Acel obiect nu trebuiecreat sau initializat se face asta implicit datorita adnotarii si de asemenea este folositapeste tot aceeasi instanta

In concluzie toate cererile venite din interfata grafica ajung ın nivelul de rdquocontrollerrdquode unde sunt trimise la cel de rdquoservicerdquopentru a fi procesate si facute eventualele modificarinecesare ın baza de date ca apoi raspunsul sa fie trimis ınapoi spre aplicatia client pentruafisare

512 Arhitectura componentei frontend

A doua componenta implementata a sistemului este aplicatia client frontend-ulAceasta a fost scrisa ın Java Script cu ajutorul framework-ului Ext JS compilarea

se face cu ajutorul Sencha CMD si mediul de implementare a fost IntelliJ IdeaCu ajutorul framework-ului Ext JS se scriu componente care apoi se initializeaza

unele pe altele Aplicatia porneste cu fisierul Applicationjs care este un fel de rdquomainrdquopentru aplicatie Aceasta initializeaza alte componente care la randul lor includ altecomponente si tot asa Structura poate fi foarte usor comparata cu una arborescenta dinacest punct de vedere

Framework-ul a fost creat sa functioneze ın felul acesta pentru ca scopul componen-telor este sa fie scrise ın asa fel ıncat sa poata pe viitor sa fie utilizate din nou Una dindorintele majore ın programare tot timpul este de a se scrie cod ıntr-o maniera ın care safie cat mai reutilizabil Iar framework-ul Ext JS exact asta ıncearca

Arhitectura aplicatiei client se gaseste ın figura 57 si este la randul ei ımpartita ınpachete ca si cea de server Similar cu pachetul de rdquodomainrdquo de la aplicatia de backendeste pachetul rdquomodelrdquo al interfetei utilizator Aici sunt rdquoclaserdquo care sunt simple POJO sicare sunt apoi folosite ın nivelele urmatoare Sunt mai putine decat clasele din rdquostorerdquodeoarece daca raspunsul de la server nu trebuie procesat nu sunt necesare se pot mapadirect obiectele din rdquostorerdquo pe componentele interfetei utilizator

Urmatorul nivel este cel pe care se afla clasele de rdquostorerdquo Acestea sunt cele careexecuta cererea spre backend si face legatura ıntre client si server Daca are o clasa derdquomodelrdquodeclarata atunci populeaza acel obiect cu datele primite de la server iar ın cazul ıncare nu este declarat un model se trimit datele exact asa cum s-au primit la nivelul urmatorde rdquoviewrdquo Acest nivel seamana din punct de vedere al functiei cu cel de rdquorepositoryrdquo de laaplicatia server deoarece ambele au rol de legatura Aceea facea legatura ıntre aplicatiesi baza de date si aceasta face legatura ıntre aplicatia client si aplicatia server

40

Figura 57 Diagrama de clase pentru aplicatia web

Cel de-al treilea pachet al aplicatiei este cel de rdquoviewrdquo In acest pachet se afla claselecare alcatuiesc partea vizuala a aplicatiei La randul ei si aceasta este alcatuita tot dincomponente Aplicatia deschide ın primul rand Main-ul care determina aparitia paginii deHome si afisarea ın meniu a optiunilor posibile ın functie de autentificare si rol Clasele deaici se executa de fapt la deschiderea aplicatiei fiind rdquosingle page applicationrdquo si tot atuncise ıncarca pe pagina componentele Ca si arhitectura a pachetului acesta este ımpartit larandul sau ın subpachete Pentru o mai buna organizare exista patru subpachete cateunul pentru fiecare tip de utilizator In felul acesta toate rdquoviewrdquo-urile care sunt specificeunui utilizator cu un anumit rol se afla ın acelasi subpachet

Cele patru subpachete existente ın pachetul rdquoviewrdquo sunt

1 Pachetul rdquomainrdquo care cuprinde rdquoviewrdquo-urile care se afla ın partea neautentificata aaplicatiei

2 Pachetul rdquoclientrdquo continand rdquoviewrdquo-urile pe care le poate accesa un utilizator simplu3 Pachetul rdquoproducerrdquo specific actiunilor unui utilizator care are rol de producator4 Pachetul rdquoadminrdquo care contine toate rdquoviewrdquo-urile care ıi apar unui utilizator care este

administrator al aplicatiei

Ultimul pachet si nivel al aplicatiei client este cel de rdquocontrollerrdquo In acest pachet

41

se afla clasele care fac actiunile din interfata grafica In timp ce pachetul rdquoviewrdquo continedoar partea grafica a aplicatiei adica modul ın care aceasta trebuie sa arate pachetulrdquocontrollerrdquo contine actiunea acestora modul ın care aplicatia trebuie sa functioneze

Ca si arhitectura si acest pachet a fost ımpartit la randul lui tot ın cele patrusubpachete ca si pachetul rdquoviewrdquo adica rdquomainrdquo rdquoclientrdquo rdquoproducerrdquo si rdquoadminrdquo In pluspentru a fi usor de gasit ce clasa de rdquocontrollerrdquo apartine carui rdquoviewrdquo am ales ca cele douasa aiba acelasi nume In felul acesta daca se doreste sa se gaseasca actiunile unui rdquoviewrdquose poate cauta dupa o clasa cu acelasi nume ın pachetul rdquocontrollerrdquo Numarul claselor dinacest pachet este mai mic decat cel al claselor din rdquoviewrdquo deoarece nu toate paginile dininterfata au actiuni suplimentare Daca singura actiune este ıncarcarea paginii cu date dela server adica doar o actiune simpla de GET datele se ıncarca cu ajutorul rdquostorerdquo-ului laıncarcarea paginii si nu este necesara nici o actiune suplimentara Paginile pe care se potface si actiuni de alt gen sau se deschid noi ferestre au nevoie de clase de rdquocontrollerrdquo

In concluzie arhitectura aplicatiei client este una bazata pe componente care ıncearcasa foloseasca cat mai multe clase reutilizabile

52 Structura bazei de date

Baza de date a aplicatiei este de tip graf de tipul Neo4j Pentru utilizare exista unprogram numit Neo4j ce trebuie instalat Acest program are si o interfata grafica ın carese pot vizualiza datele sub forma grafica si ın care se pot scrie de asemenea si interogariın limbajul acestei baze de date adica Cypher

Fiind o baza de date sub forma de graf datele stocate sunt salvate ın structurade date sub forma de noduri si relatii Entitatile din pachetul de domeniu din aplicatiabackend se gasesc ın baza de date sub forma unor noduri iar dependentele dintre nodurise mapeaza ın baza de date sub forma unor relatii Un element diferit fata de alte tipuride baze de date este faptul ca pe relatiile dintre noduri se pot salva atribute cum este ınaplicatie cazul pentru prieteniile dintre persoane In cazul acestora pe relatia dintre nodurise salveaza daca prietenia a fost sau nu acceptata

Pentru fiecare clasa POJO din aplicatia server clasa ce are doar metodele get si setsi se afla ın pachetul domain exista cate un tip de nod diferit ın baza de date cum estesi marcat ın diferite culori ın figura 58 Fiecare tip de nod are atributele proprii care potlua valori sau pot fi nule Iar fiecare obiect din Java reprezinta un nod diferit ın baza dedate

Neo4j a fost cea mai buna optiune pentru baza de date pentru ca aplicatia poate ficonsiderata o retea sociala Acest lucru se datoreaza relatiilor de prietenie dintre persoanesi a multiplelor relatii ıntre noduri Toate nodurile se afla ın acceasi componenta conexadeci nu exista noduri izolate care sa nu aiba nici o legatura cu nici un alt nod

Datorita acestei structuri a bazei de date este posibila implementarea cererii derecomandare ca o simpla interogare ın baza de date aceasta fiind cea mai simpla metodade implementare a unui sistem de genul acesta una mult mai complexa ar fi fost un

42

algoritm de ınvatare care sa ınvete tipare ale utilizatorilor si sa recomande cadouri pe bazaacestor informatii

Figura 58 Diagrama bazei de date pentru doi utilizatori

Un alt avantaj al acestui tip de baza de date este faptul ca datele nu sunt duplicateın baza de date Spre exemplu daca mai multi utilizatori au ca locatie acelasi oras nu secreaza cate un nod cu acea locatie de mai multe ori ci acel unic nod va avea cate o relatiecu fiecare utilizator care are ca locatie acel oras

In concluzie structura bazei de date a fost aleasa ın acest fel datorita tipului apli-catiei adica asemanatoare cu o retea sociala si datorita implementarii simple a unui sistemde recomandare pe o asemenea baza de date

53 Fluxul pentru diferite operatii

Pentru aplicatie cele mai importante cazuri de utilizare sunt salvarea informati-ilor despre utilizator primite de la Facebook pentru crearea unui profil si recomandareacadourilor pentru un utilizator al aplicatiei Din aceasta cauza cele doua cazuri de utilizarevor fi prezentate mai ın detaliu ın continuare

43

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 32: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

bull Atomic Toate operatiile dintr-o tranzactie reusesc sau fiecare operatie este reluatabull Consistent La finalizarea unei tranzactii baza de date este solida din punct de

vedere structuralbull Izolat Tranzactiile nu se lupta una cu cealalta Accesul controversat la date este

moderat de baza de date astfel ıncat tranzactiile par sa se execute succesivbull Durabil Rezultatele aplicarii unei tranzactii sunt permanente chiar si ın cazul unor

defectiuniCand vine vorba de tehnologiile NoSQL cele mai multe baze de date sub forma de

graf (inclusiv Neo4j) utilizeaza un model de consistenta ACID pentru a asigura ca datelesunt stocate ın siguranta si ın mod consecvent

Am ales baza de date sub forma de graf ca optiune pentru stocarea datelor deoarecedin toate lucrarile si articolele citite a fost optiunea cea mai buna pentru un sistem derecomandare Deci acesta se mapeaza perfect pe cerintele functionale ale proiectului Sidin optiunile de baze de date sub forma de graf Noe4j a avut de departe cele mai multeavantaje ea fiind si cea mai utilizata

442 Cypher

Cypher 2 este un limbaj declarativ de interogare pentru bazele de date sub formade graf care permite interogarea si actualizarea rapida a datelor Cypher este un limbajrelativ simplu dar foarte puternic Interogarile foarte complexe ale bazei de date pot fiusor exprimate prin intermediul limbajului Cypher

Este conceput pentru a fi un limbaj de interogare uman Scopul lui principal este dea face interogarile mult mai simple si unele interogari care la bazele de date relationale nuerau posibile le face posibile Constructiile sale se bazeaza pe grafica si pe limba englezalucru care ajuta la scrierea mai intuitiva a interogarilor Este construit pentru a fi maiintuitiv pentru citire si nu neaparat pentru scriere

Cypher se bazeaza pe modelul Graph Property care ın plus fata de elementelegrafice standard ale nodurilor si muchiilor (numite relatii ın Cypher) adauga etichete siproprietati ca si concepte Nodurile pot avea zero sau mai multe etichete ın timp ce fiecarerelatie este de exact un singur tip Nodurile si relatiile au de asemenea zero sau mai multeproprietati

Chypher este limbajul de interogare folosit la bazele de date Neo4j deci este opti-unea implicita atunci cand se alege Neo4j

443 Maven

Maven 3 este un instrument de management software si de ıntelegere a proiectelorsoftware Pe baza conceptului unui model de obiect de proiect (POM) Maven poategestiona construirea raportarea si documentarea unui proiect printr-o informatie centrala

2httpsneo4jcomdevelopercypher-query-language3httpswwwjavatpointcommaven-tutorial

27

Obiectivul principal al lui Maven este acela de a permite unui dezvoltator sa ınte-leaga starea completa a efortului de dezvoltare ın cel mai scurt timp Avantajele Mavensunt

bull instalarea rapida a proiectului fara fisiere buildxml complicate doar un POMbull procesul de construire este standardizat pentru toate proiectelebull usor de ınvatat si de utilizatbull configurarea unui proiect este foarte rapidabull bine documentat

Am ales sa folosesc Maven deoarece este una din cele mai comune optiuni pentru aimporta librariile ıntr-un proiect si este si cel mai documentat Deci mereu cand esti pusın dificultate poti cauta pe internet sugestii

444 Spring Boot

Spring Boot 4 este un framework din cadrul Spring care ofera setari implicite pentruconfigurarea codului si adnotari pentru a lansa rapid proiecte noi ın executie Urmaresteabordarea rdquoConfigurarea defectiunilor vizionaterdquo pentru a evita un numar mare de linii decod pentru configuratii si pentru a ımbunatati procesul de dezvoltare

Avantajele Spring Boot sunt1 Face foarte usoara dezvoltarea de aplicatii bazate pe Spring cu Java sau Groovy2 Reduce timpul de dezvoltare si creste productivitatea3 Evita scrierea multor linii de cod adnotari si configurare XML4 Este foarte usor de integrat cu alte framework-uri din aceasi familie Spring cum ar

fi Spring JDBC Spring ORM Spring Data Spring Security etc5 Urmareste abordarea rdquoConfigurarea implicita a optiunilorrdquo pentru a reduce efortul

pentru dezvoltatori6 Ofera servere HTTP ıncorporate cum ar fi Tomcat Jetty etc pentru a dezvolta si

testa aplicatiile web foarte usor7 Ofera instrumentul CLI (Command Line Interface) pentru a dezvolta si testa apli-

catiile de tip rdquoSpring Bootrdquo (Java sau Groovy) din linia de comanda foarte usor sirapidAm ales ca optiune pentru partea de backend acest framework deoarece simplifica

foarte mult lucrurile Datorita lui un programator poate sa ısi concentreze mai tare energiape a construi proiectul din punctul de vedere al buissness-ului logic nu din punctul devedere al configurarilor necesare

445 Sencha CMD si ExtJS

Sencha CMD 5 este un instrument linie de comanda cross-platform care ofera multesarcini automate ın ciclul complet de viata al unei aplicatii ExtJS de la generarea unui

4httpswwwjavatpointcomspring-boot-tutorial5httpsdocssenchacomcmd

28

nou proiect la lansarea unei aplicatii ın productie

Sencha Cmd ofera o colectie de caracteristici puternice pentru economisirea timpu-lui care functioneaza ımpreuna cu Sencha ExtJS si Sencha Touch

Ext JS 6 este un framework pur JavaScript pentru construirea de aplicatii webinteractive cross-platform utilizand tehnici precum scripting Ajax DHTML si DOM

Avantajele framework-ului ExtJS sunt

1 Documentatia Extjs este foarte cuprinzatoare si bine ıntretinuta2 Aspectul cheie al bibliotecii EXTJS este suportul de tip cross-browser3 Framework-ul ExtJS ofera o multitudine de elemente UI Aceste elemente includ

forme casete de dialog file arbori si tabele4 Framework-ul ExtJS include suport pentru implementarile Ajax5 ExtJS ofera performante excelente Framework-ul este complet orientat spre obiecte

si este extensibil asta pentru ca este scris ın JavaScript

Pentru partea de frontend se foloseste framework-ul ExtJS deoarece are o arhitec-tura ce se mapeaza foarte bine pe proiectele de frontend si anume arhitectura bazata pecomponente Aceasta face ca ın proiect codul sa fie mult mai organizat si procesul dedezvoltare al proiectului sa fie mult mai scurt prin identificarea mai usoara a erorilor

446 Facebook API(Graph API)

Graph API 7 este modul principal de a pune date ın platforma Facebook si de aobtine date din platforma Facebook Este un API bazat pe HTTP pe care aplicatiile ılpot utiliza pentru interogarea datelor pentru a introduce postari noi pentru gestionareaanunturilor sau pentru a ıncarca fotografii

Este denumit Graph API dupa ideea unui rdquograf socialrdquo - o reprezentare sub formade graf a informatiilor de pe Facebook Este compus din

bull noduri - ın esenta obiecte individuale cum ar fi un utilizator o fotografie o paginasau un comentariu

bull muchii - conexiuni ıntre o colectie de obiecte si un singur obiect cum ar fi fotografiilede pe o pagina sau comentariile de la o fotografie

bull campuri - date despre un obiect cum ar fi ziua de nastere a unui utilizator saunumele paginii

De obicei se utilizeaza noduri pentru a obtine date despre un anumit obiect se uti-lizeaza muchii pentru a obtine colectii de obiecte legate de un singur obiect si se utilizeazacampurile pentru a obtine date despre un singur obiect sau mai multe obiecte dintr-ocolectie

Am folosit Facebook API ca solutie pentru a ımbunatati problema de rdquocold startrdquopentru ca este singurul site pe care marea majoritate a oamenilor au cont si salveazalucrurile care le plac Deci se potrivea perfect peste nevoile aplicatiei mele

6httpdocssenchacomextjs6207httpsdevelopersfacebookcomdocsgraph-api

29

447 Git

Git 8 este un sistem de control a versionarii pentru urmarirea modificarilor ın fisierelede pe computer si coordonarea activitatii asupra acestor fisiere ın randul mai multor per-soane Este utilizat ın principal pentru gestionarea codului sursa ın dezvoltarea de softwaredar poate fi folosit pentru a urmari schimbarile ın orice set de fisiere

Avantaje ale Git

bull Modelul distribuit numai ceea ce se doreste se face publicbull Branching-ul si merging-ul sunt usoarebull Fluxul de lucru este flexibilbull Integritatea datelor este asigurata Deoarece GIT utilizeaza arbori SHA1 coruperea

datelor din motive externe poate fi usor detectatabull Rapid Git este foarte rapid chiar si ın comparatie cu alte sisteme de control a

versionarii

Am folosit Git pentru a avea la proiect un back-up ın caz ca se ıntampla ceva cuproiectul salvat pe calculator

45 Arhitectura conceptuala

In figura 45 este prezentata arhitectura conceptuala a sistemului Acesta este ım-partit ın doua mari parti backend-ul si frontend-ul care comunica ıntre ele si ısi trimitinformatii

Se poate observa ca baza de date este de tip graf mai exact Neo4j si comunica cubackend-ul pentru a putea lucra cu datele stocate Backend-ul este structurat pe nivelefiecare cu un diferit rol si care trebuie parcurs pentru a procesa datele din interfata ınbaza de date Cele trei nivele sunt cel de Repository cel de Service si cel ControllerToate interogarile venite din interfata utilizator ajung ın nivelul de Controller Dupa ceinterogarile trec de securitatea sistemului ajung ın nivelul de Service Acolo se proceseazasi se afla partea de logica a aplicatiei Pentru a interactiona cu baza de date din Servicese apeleaza metodele din nivelul de Repository

In continuare backend-ul comunica prin protocolul HTTP cu interfata grafica cucare interactioneaza clientii aplicatiei Interfata este scrisa ın Ext JS si are o parte de Viewsi o parte de Controller care este cea care comunica cu backend-ul

Pentru partea de autentificare sistemul interactioneaza cu API-ul de la Facebookde la care ia dupa autentificare un access token Cu ajutorul acestuia ia dupa aceea datelenecesare pentru a putea crea un profil utilizatorului

8httpsguidesgithubcomintroductiongit-handbook

30

Figura 45 Arhitectura conceptuala

31

Capitolul 5

Proiectare de Detaliu siImplementare

In acest capitol vor fi prezentate detalii de implementare ale sistemului de recoman-dare incluzand o ımpartire al acestuia ın componentele care ıl cuprind

Obiectivul este de a prezenta arhitectura si modul de implementare al aplicatieipe baza datelor descoperite ın studiul bibliografic de la capitolul trei si cu tehnologiilehotarate la capitolul patru Pe langa asta va fi prezentata si structura bazei de date sideciziile luate pentru securitatea aplicatiei

51 Arhitectura sistemului

Din punctul de vedere al arhitecturii aplicatia se poate considera ca este alcatuitadin patru mari componente

1 API-ul de la Facebook2 Aplicatia client care reprezinta interfata grafica a aplicatiei3 Aplicatia server adica backendul aplicatiei si partea ın care se afla partea de rdquobusiness

logicrdquo4 Baza de date

Partea componenta reprezentata de API-ul de la Facebook este doar o componentacu care aplicatia se integreaza si pe care aceasta o foloseste In interactiunea cu ea interfatada o cerere de autentificare apare o fereastra de la Facebook ın care utilizatorul introducecredentialele de la API-ul de Facebook se primeste ınapoi un access token si cu ajutorulacestuia face o cerere pentru a primi datele personale ale utilizatorului pentru creeareaprofilului utilizator

Urmatoarea parte a aplicatiei este interfata utilizator frontend-ul care reprezintapartea cu care utilizatorul interactioneaza si locul unde ıi sunt afisate informatiile

Cererile din interfata ajung ın a treia parte componenta a sistemului partea deserver adica backend-ul aplicatiei Acolo toate cererile sunt citite si procesate iar raspun-

33

sul lor este trimis la interfata utilizator Aceasta este partea care reprezinta rdquogandireardquoaplicatiei Aceea este componenta care face legatura ıntre cererile utilizatorului din inter-fata si datele stocate ın baza de date

Ultima componenta a aplicatiei o reprezinta baza de date care are ca rol sa stochezedatele despre utilizatori produse si comenzi Ea este o baza de date sub forma de grafde tipul Neo4j Acolo se salveaza entitatile aplicatiei sub forma de noduri si dependenteleıntre acestea sub forma de relatii ıntre aceste noduri

Figura 51 Diagrama de rdquodeploymentrdquo

In figura 51 este prezentata diagrama de rdquodeploymentrdquo a sistemului cu cele patrucomponente ale sistemului Aplicatia client comunica cu API-ul de la Facebook prin pro-tocolul securizat HTTPS cu backend-ul prin protocolul HTTP iar backend-ul cu baza dedate prin JDBC

Aplicatia a putut fi ımpartita ın aceste componente separate deoarece fiecare dintreele poate functiona independent de celelalte comunica cu ele doar prin mesaje Din acestmotiv locul unde ruleaza acestea pot sa fie pe servere diferite In plus daca aplicatiaar fi pusa pe servere pentru utilizatori ar putea fi mai multe servere pe care ruleaza ocomponenta si prin rdquoload balancingrdquo sa se trimita cererile ımpartite ıntre ele

Cum astfel componentele nu depind foarte mult unele de altele si pot rula faraa le interesa de unde le sunt trimise cererile este arhitectura cea mai corecta deoarecedefectarea sau o posibila eroare la una din ele nu o influenteaza cu nimic pe o alta Dacatoate ar rula pe acelasi server o eventuala defectiune a acestuia ar ınsemna o defectiune aıntregului sistem Insa daca exista mai multe noduri si se afla pe servere diferite pot doartoate cererile sa fie redirectionate spre un nod care functioneaza si aplicatia sa functionezepentru clienti la fel ca ınainte

34

Un alt avantaj al arhitecturii ar fi faptul ca la o lansare viitoare catre clienti se poatelansa doar componenta la care s-au facut modificari De asemenea aplicatia ar putea aveape viitor si o componenta mobila Iar cum serverul e independent poate fi acelasi serverfolosit de o alta aplicatie client

511 Arhitectura componentei backend

Arhitectura backend-ului este si ea ımpartita ın mai multe pachete pentru o maibuna structura si pentru o cat mai mica dependenta ıntre diversele componente Astfelcuplarea este minima ıntre clase si eventualele modificari ulterioare pot fi mai usor defacut

Serverul a fost implementat ın Java cu ajutorul framework-ului Spring Boot iarmediul de dezvoltare folosit a fost Intellij IDEA

Din punctul de vedere al ımpartirii arhitectura serverului aplicatiei este structurataın patru pachete si o clasa ın afara acestora Acea clasa este rdquomainrdquo-ul aplicatiei este parteacare trebuie rulata pentru a porni serverul Din cauza ca este o aplicatie Spring Boot si nuuna String singura adnotare necesara pentru a sti ca aceea este clasa rdquoradacinardquoa aplicatieieste SpringBootApplication

Cele patru pachete ale serverului sunt1 Cel de domeniu (domain) cu clasele POJO care reprezinta entitatile din baza de

date2 Cel de rdquomagazierdquo (repositories) care este cel care face direct actiunile ın baza de date3 Cel de serviciu (services) ın care se afla partea de logica a ıntregii aplicatii4 Cel de web ın care se afla clasele de rdquocontrollerrdquo

Figura 52 Diagrama de pachete pentru backend

35

Ca si dependente nivelul de web ıl foloseste pe cel de seviciu cel de serviciu ılfoloseste pe cel de rdquomagazierdquo iar clasele din pachetul de domeniu sunt folosite ın toatecelelalte pachete

In continuare voi prezenta pe rand fiecare nivel al serverului adica fiecare pachet

Figura 53 Diagrama de clase pentru pachetul rdquodomainrdquo

36

Nivelul de domeniu (domain) este alcatuit ın primul rand din clasele care suntentitati ın baza de date Acestea sunt reprezentate de toate clasele ce stocheaza informatiidespre utilizatori si despre produse si comenzi Pe langa informatiile personale despre unutilizator de genul numelui email-ului sau data nasterii care sunt salvate ın entitateapersoana se stocheaza despre utilizator ın clase diferite informatii de genul locului undelocuieste locul unde a copilarit locurilor unde a facut scoala locului unde lucreaza sau celmai important pentru aplicatia aceasta lucrurilor care ıi plac In afara acestor informatiidespre utilizatori sunt si clase cu informatiile despre prieteni despre produse sau desprecomenzi

Din cauza faptului ca aplicatia este de tipul unei retele sociale ın care exista prieteniiıntre persoane exista dependente ıntre toate entitatile aplicatiei Acesta este si motivulpentru care am ales baza de date sub forma de graf pe care sa se mapeze toate acesteentitati sub forma de noduri si toate aceste dependente sub forma de relatii

In pachetul de domeniu se afla si trei subpachete Unul dintre ele este pentruclasele folosite pentru a trata erorile aplicatiei In interiorul acestui pachet se afla douaclase pentru eroare si o exceptie cea folosita ın cazul ın care nu se gaseste ceea ce doresteutilizatorul Pe langa asta este clasa care are ca obiect raspunsul dat de sistem ın cazulunei erori la server Aceasta contine ın interiorul sau pe langa codul erorii si detalii despreeroarea trimisa Aceasta lista de detalii e reprezentata de obiectele de tipul celei de-a treiaclase din pachetul acesta

Celelalte doua subpachete aflate ın acest nivel sunt cele care contin clasele specialede cerere sau raspuns care au ajutat la maparea acestora mai bine In multe cazuri nua fost necesara trimiterea la interfata utilizator a tuturor informatiilor stocate despre oentitate si de aceea am ales sa creez ın aceste cazuri un obiect auxiliar care sa fie folositpe post de raspuns

Figura 54 Diagrama de clase pentru pachetul rdquorepositoriesrdquo

37

Cel de-al doilea nivel al aplicatiei backend este cel de rdquomagazierdquo (repositories) carecontine doar interfete de tip rdquoRepositoryrdquo

Aceste interfete sunt cele care fac operatiile directe asupra entitatilor din baza dedate

Unele interfete doar extind interfata care are deja implementate metodele CRUDsi din acest motiv nu au metode suplimentare iar altele au si metode ın plus care au carol sa execute interogari mai complexe asupra bazei de date In acele metode se pot scrieinterogarile ın Cypher pentru a putea primi informatii despre mai multe noduri sau desprerelatiile dintre acestea sau si pentru a returna doar anumite rezultate care ındeplinescanumite conditii In felul acesta a fost implementata si cererea de oferire a recomandarilorIn acel caz sistemul returneaza produsele care au ın descriere unul din lucrurile care se aflaın lista de obiecte sau servicii primite de la Facebook ca ıi plac utilizatorului

Nivelul de rdquoRepositoryrdquo este folosit direct de cel de-al treiea nivel cel de servi-ciu Acesta este nivelul la care se executa logica aplicatiei unde se comanda modul defunctionare al ıntregii aplicatii

Figura 55 Diagrama de clase pentru pachetul rdquoservicesrdquo

Pe acest nivel ajung toate cererile din server dupa ce trec de verificarile de securitateIn acest pachet se afla si clasa de securitate care face verificarile necesare In aceasta clasaexista o metoda ce se apeleaza la prima cerere cea de salvare a datelor de la Facebookdespre utilizator si care codifica id-ul utilizatorului si ıl trimite pe raspuns ınapoi interfeteiPe langa asta ın acea clasa se afla si o metoda care verifica faptul ca id-ul codificat esteal unui utilizator cu rol corespunzator pentru a face acea cerere

In plus ın acest pachet se afla si toate celelalte clase care fac diverse operatii pedatele din baza de date si dau raspunsuri cererilor din interfata Aici se afla logica care

38

comanda actiunile asupra utilizatorilor asupra prietenilor acestora asupra produselor siasupra comenzilor

Ultima clasa a acestui nivel este cea care se ocupa de trimiterea de email-uri Incazul ın care se face o noua comanda de catre un utilizator toti producatorii produselor depe comanda sunt notificati despre produsele lor pe care le doreste utilizatorul Din serviciulde comanda se apeleaza serviciul de email pentru fiecare producator din lista celor care auproduse care se afla pe lista comenzii utilizatorului

Ultimul si cel mai aproape de interfata utilizator este nivelul de web Acolo se aflatoate clasele de rdquoControllerrdquo ale aplicatiei server

Figura 56 Diagrama de clase pentru pachetul rdquowebrdquo

Toate cererile din interfata utilizator ıncearca sa se mapeze pe rutele declarate ınclase pentru a fi procesate ın metoda corespunzatoare Toata aceasta parte este foarteusor de implementat si mai ales foarte lizibil pentru programatori datorita adnotarilor dinJava Cu ajutorul acestora trebuie doar specificat care este numele URL-ului cererii careeste tipul de obiect asteptat si daca se trimite ca rdquoquery stringrdquo pe URL sau ın interiorulcorpului cererii si tipul raspunsului Pentru fiecare cerere care nu este apelata ın parteaneautentificata a utilizatorului primul lucru care se apeleaza este metoda de securitatepentru a verifica rolul si id-ul utilizatorului Daca din punctul de vedere al securitatii totuleste ın regula se apeleaza metoda corespunzatoare din pachetul de serviciu

39

O singura clasa este diferita de restul ın pachetul de controller si aceea este clasa deeroare Acolo se mapeaza erorile aparute ın timpul cererii si se trimite ınapoi ın interfatagrafica un raspuns cu cod de eroare specific nu numai 500 Generic Application Exceptioncum ar trimite fara aceasta clasa si cu detalii despre motivul aparitiei erorii

Datorita folosirii adnotarilor din java nu a fost necesara folosirea unor rdquodesignpatternrdquo-uri ın sistem De exemplu pentru a folosi ın nivelul de web ceva din pachetulde servicii trebuia doar acel obiect sa aiba adnotarea Autowired si se ınlocuieste atatfolosirea rdquodesign patternrdquo-ului Singleton cat si a celui de Factory Acel obiect nu trebuiecreat sau initializat se face asta implicit datorita adnotarii si de asemenea este folositapeste tot aceeasi instanta

In concluzie toate cererile venite din interfata grafica ajung ın nivelul de rdquocontrollerrdquode unde sunt trimise la cel de rdquoservicerdquopentru a fi procesate si facute eventualele modificarinecesare ın baza de date ca apoi raspunsul sa fie trimis ınapoi spre aplicatia client pentruafisare

512 Arhitectura componentei frontend

A doua componenta implementata a sistemului este aplicatia client frontend-ulAceasta a fost scrisa ın Java Script cu ajutorul framework-ului Ext JS compilarea

se face cu ajutorul Sencha CMD si mediul de implementare a fost IntelliJ IdeaCu ajutorul framework-ului Ext JS se scriu componente care apoi se initializeaza

unele pe altele Aplicatia porneste cu fisierul Applicationjs care este un fel de rdquomainrdquopentru aplicatie Aceasta initializeaza alte componente care la randul lor includ altecomponente si tot asa Structura poate fi foarte usor comparata cu una arborescenta dinacest punct de vedere

Framework-ul a fost creat sa functioneze ın felul acesta pentru ca scopul componen-telor este sa fie scrise ın asa fel ıncat sa poata pe viitor sa fie utilizate din nou Una dindorintele majore ın programare tot timpul este de a se scrie cod ıntr-o maniera ın care safie cat mai reutilizabil Iar framework-ul Ext JS exact asta ıncearca

Arhitectura aplicatiei client se gaseste ın figura 57 si este la randul ei ımpartita ınpachete ca si cea de server Similar cu pachetul de rdquodomainrdquo de la aplicatia de backendeste pachetul rdquomodelrdquo al interfetei utilizator Aici sunt rdquoclaserdquo care sunt simple POJO sicare sunt apoi folosite ın nivelele urmatoare Sunt mai putine decat clasele din rdquostorerdquodeoarece daca raspunsul de la server nu trebuie procesat nu sunt necesare se pot mapadirect obiectele din rdquostorerdquo pe componentele interfetei utilizator

Urmatorul nivel este cel pe care se afla clasele de rdquostorerdquo Acestea sunt cele careexecuta cererea spre backend si face legatura ıntre client si server Daca are o clasa derdquomodelrdquodeclarata atunci populeaza acel obiect cu datele primite de la server iar ın cazul ıncare nu este declarat un model se trimit datele exact asa cum s-au primit la nivelul urmatorde rdquoviewrdquo Acest nivel seamana din punct de vedere al functiei cu cel de rdquorepositoryrdquo de laaplicatia server deoarece ambele au rol de legatura Aceea facea legatura ıntre aplicatiesi baza de date si aceasta face legatura ıntre aplicatia client si aplicatia server

40

Figura 57 Diagrama de clase pentru aplicatia web

Cel de-al treilea pachet al aplicatiei este cel de rdquoviewrdquo In acest pachet se afla claselecare alcatuiesc partea vizuala a aplicatiei La randul ei si aceasta este alcatuita tot dincomponente Aplicatia deschide ın primul rand Main-ul care determina aparitia paginii deHome si afisarea ın meniu a optiunilor posibile ın functie de autentificare si rol Clasele deaici se executa de fapt la deschiderea aplicatiei fiind rdquosingle page applicationrdquo si tot atuncise ıncarca pe pagina componentele Ca si arhitectura a pachetului acesta este ımpartit larandul sau ın subpachete Pentru o mai buna organizare exista patru subpachete cateunul pentru fiecare tip de utilizator In felul acesta toate rdquoviewrdquo-urile care sunt specificeunui utilizator cu un anumit rol se afla ın acelasi subpachet

Cele patru subpachete existente ın pachetul rdquoviewrdquo sunt

1 Pachetul rdquomainrdquo care cuprinde rdquoviewrdquo-urile care se afla ın partea neautentificata aaplicatiei

2 Pachetul rdquoclientrdquo continand rdquoviewrdquo-urile pe care le poate accesa un utilizator simplu3 Pachetul rdquoproducerrdquo specific actiunilor unui utilizator care are rol de producator4 Pachetul rdquoadminrdquo care contine toate rdquoviewrdquo-urile care ıi apar unui utilizator care este

administrator al aplicatiei

Ultimul pachet si nivel al aplicatiei client este cel de rdquocontrollerrdquo In acest pachet

41

se afla clasele care fac actiunile din interfata grafica In timp ce pachetul rdquoviewrdquo continedoar partea grafica a aplicatiei adica modul ın care aceasta trebuie sa arate pachetulrdquocontrollerrdquo contine actiunea acestora modul ın care aplicatia trebuie sa functioneze

Ca si arhitectura si acest pachet a fost ımpartit la randul lui tot ın cele patrusubpachete ca si pachetul rdquoviewrdquo adica rdquomainrdquo rdquoclientrdquo rdquoproducerrdquo si rdquoadminrdquo In pluspentru a fi usor de gasit ce clasa de rdquocontrollerrdquo apartine carui rdquoviewrdquo am ales ca cele douasa aiba acelasi nume In felul acesta daca se doreste sa se gaseasca actiunile unui rdquoviewrdquose poate cauta dupa o clasa cu acelasi nume ın pachetul rdquocontrollerrdquo Numarul claselor dinacest pachet este mai mic decat cel al claselor din rdquoviewrdquo deoarece nu toate paginile dininterfata au actiuni suplimentare Daca singura actiune este ıncarcarea paginii cu date dela server adica doar o actiune simpla de GET datele se ıncarca cu ajutorul rdquostorerdquo-ului laıncarcarea paginii si nu este necesara nici o actiune suplimentara Paginile pe care se potface si actiuni de alt gen sau se deschid noi ferestre au nevoie de clase de rdquocontrollerrdquo

In concluzie arhitectura aplicatiei client este una bazata pe componente care ıncearcasa foloseasca cat mai multe clase reutilizabile

52 Structura bazei de date

Baza de date a aplicatiei este de tip graf de tipul Neo4j Pentru utilizare exista unprogram numit Neo4j ce trebuie instalat Acest program are si o interfata grafica ın carese pot vizualiza datele sub forma grafica si ın care se pot scrie de asemenea si interogariın limbajul acestei baze de date adica Cypher

Fiind o baza de date sub forma de graf datele stocate sunt salvate ın structurade date sub forma de noduri si relatii Entitatile din pachetul de domeniu din aplicatiabackend se gasesc ın baza de date sub forma unor noduri iar dependentele dintre nodurise mapeaza ın baza de date sub forma unor relatii Un element diferit fata de alte tipuride baze de date este faptul ca pe relatiile dintre noduri se pot salva atribute cum este ınaplicatie cazul pentru prieteniile dintre persoane In cazul acestora pe relatia dintre nodurise salveaza daca prietenia a fost sau nu acceptata

Pentru fiecare clasa POJO din aplicatia server clasa ce are doar metodele get si setsi se afla ın pachetul domain exista cate un tip de nod diferit ın baza de date cum estesi marcat ın diferite culori ın figura 58 Fiecare tip de nod are atributele proprii care potlua valori sau pot fi nule Iar fiecare obiect din Java reprezinta un nod diferit ın baza dedate

Neo4j a fost cea mai buna optiune pentru baza de date pentru ca aplicatia poate ficonsiderata o retea sociala Acest lucru se datoreaza relatiilor de prietenie dintre persoanesi a multiplelor relatii ıntre noduri Toate nodurile se afla ın acceasi componenta conexadeci nu exista noduri izolate care sa nu aiba nici o legatura cu nici un alt nod

Datorita acestei structuri a bazei de date este posibila implementarea cererii derecomandare ca o simpla interogare ın baza de date aceasta fiind cea mai simpla metodade implementare a unui sistem de genul acesta una mult mai complexa ar fi fost un

42

algoritm de ınvatare care sa ınvete tipare ale utilizatorilor si sa recomande cadouri pe bazaacestor informatii

Figura 58 Diagrama bazei de date pentru doi utilizatori

Un alt avantaj al acestui tip de baza de date este faptul ca datele nu sunt duplicateın baza de date Spre exemplu daca mai multi utilizatori au ca locatie acelasi oras nu secreaza cate un nod cu acea locatie de mai multe ori ci acel unic nod va avea cate o relatiecu fiecare utilizator care are ca locatie acel oras

In concluzie structura bazei de date a fost aleasa ın acest fel datorita tipului apli-catiei adica asemanatoare cu o retea sociala si datorita implementarii simple a unui sistemde recomandare pe o asemenea baza de date

53 Fluxul pentru diferite operatii

Pentru aplicatie cele mai importante cazuri de utilizare sunt salvarea informati-ilor despre utilizator primite de la Facebook pentru crearea unui profil si recomandareacadourilor pentru un utilizator al aplicatiei Din aceasta cauza cele doua cazuri de utilizarevor fi prezentate mai ın detaliu ın continuare

43

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 33: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

Obiectivul principal al lui Maven este acela de a permite unui dezvoltator sa ınte-leaga starea completa a efortului de dezvoltare ın cel mai scurt timp Avantajele Mavensunt

bull instalarea rapida a proiectului fara fisiere buildxml complicate doar un POMbull procesul de construire este standardizat pentru toate proiectelebull usor de ınvatat si de utilizatbull configurarea unui proiect este foarte rapidabull bine documentat

Am ales sa folosesc Maven deoarece este una din cele mai comune optiuni pentru aimporta librariile ıntr-un proiect si este si cel mai documentat Deci mereu cand esti pusın dificultate poti cauta pe internet sugestii

444 Spring Boot

Spring Boot 4 este un framework din cadrul Spring care ofera setari implicite pentruconfigurarea codului si adnotari pentru a lansa rapid proiecte noi ın executie Urmaresteabordarea rdquoConfigurarea defectiunilor vizionaterdquo pentru a evita un numar mare de linii decod pentru configuratii si pentru a ımbunatati procesul de dezvoltare

Avantajele Spring Boot sunt1 Face foarte usoara dezvoltarea de aplicatii bazate pe Spring cu Java sau Groovy2 Reduce timpul de dezvoltare si creste productivitatea3 Evita scrierea multor linii de cod adnotari si configurare XML4 Este foarte usor de integrat cu alte framework-uri din aceasi familie Spring cum ar

fi Spring JDBC Spring ORM Spring Data Spring Security etc5 Urmareste abordarea rdquoConfigurarea implicita a optiunilorrdquo pentru a reduce efortul

pentru dezvoltatori6 Ofera servere HTTP ıncorporate cum ar fi Tomcat Jetty etc pentru a dezvolta si

testa aplicatiile web foarte usor7 Ofera instrumentul CLI (Command Line Interface) pentru a dezvolta si testa apli-

catiile de tip rdquoSpring Bootrdquo (Java sau Groovy) din linia de comanda foarte usor sirapidAm ales ca optiune pentru partea de backend acest framework deoarece simplifica

foarte mult lucrurile Datorita lui un programator poate sa ısi concentreze mai tare energiape a construi proiectul din punctul de vedere al buissness-ului logic nu din punctul devedere al configurarilor necesare

445 Sencha CMD si ExtJS

Sencha CMD 5 este un instrument linie de comanda cross-platform care ofera multesarcini automate ın ciclul complet de viata al unei aplicatii ExtJS de la generarea unui

4httpswwwjavatpointcomspring-boot-tutorial5httpsdocssenchacomcmd

28

nou proiect la lansarea unei aplicatii ın productie

Sencha Cmd ofera o colectie de caracteristici puternice pentru economisirea timpu-lui care functioneaza ımpreuna cu Sencha ExtJS si Sencha Touch

Ext JS 6 este un framework pur JavaScript pentru construirea de aplicatii webinteractive cross-platform utilizand tehnici precum scripting Ajax DHTML si DOM

Avantajele framework-ului ExtJS sunt

1 Documentatia Extjs este foarte cuprinzatoare si bine ıntretinuta2 Aspectul cheie al bibliotecii EXTJS este suportul de tip cross-browser3 Framework-ul ExtJS ofera o multitudine de elemente UI Aceste elemente includ

forme casete de dialog file arbori si tabele4 Framework-ul ExtJS include suport pentru implementarile Ajax5 ExtJS ofera performante excelente Framework-ul este complet orientat spre obiecte

si este extensibil asta pentru ca este scris ın JavaScript

Pentru partea de frontend se foloseste framework-ul ExtJS deoarece are o arhitec-tura ce se mapeaza foarte bine pe proiectele de frontend si anume arhitectura bazata pecomponente Aceasta face ca ın proiect codul sa fie mult mai organizat si procesul dedezvoltare al proiectului sa fie mult mai scurt prin identificarea mai usoara a erorilor

446 Facebook API(Graph API)

Graph API 7 este modul principal de a pune date ın platforma Facebook si de aobtine date din platforma Facebook Este un API bazat pe HTTP pe care aplicatiile ılpot utiliza pentru interogarea datelor pentru a introduce postari noi pentru gestionareaanunturilor sau pentru a ıncarca fotografii

Este denumit Graph API dupa ideea unui rdquograf socialrdquo - o reprezentare sub formade graf a informatiilor de pe Facebook Este compus din

bull noduri - ın esenta obiecte individuale cum ar fi un utilizator o fotografie o paginasau un comentariu

bull muchii - conexiuni ıntre o colectie de obiecte si un singur obiect cum ar fi fotografiilede pe o pagina sau comentariile de la o fotografie

bull campuri - date despre un obiect cum ar fi ziua de nastere a unui utilizator saunumele paginii

De obicei se utilizeaza noduri pentru a obtine date despre un anumit obiect se uti-lizeaza muchii pentru a obtine colectii de obiecte legate de un singur obiect si se utilizeazacampurile pentru a obtine date despre un singur obiect sau mai multe obiecte dintr-ocolectie

Am folosit Facebook API ca solutie pentru a ımbunatati problema de rdquocold startrdquopentru ca este singurul site pe care marea majoritate a oamenilor au cont si salveazalucrurile care le plac Deci se potrivea perfect peste nevoile aplicatiei mele

6httpdocssenchacomextjs6207httpsdevelopersfacebookcomdocsgraph-api

29

447 Git

Git 8 este un sistem de control a versionarii pentru urmarirea modificarilor ın fisierelede pe computer si coordonarea activitatii asupra acestor fisiere ın randul mai multor per-soane Este utilizat ın principal pentru gestionarea codului sursa ın dezvoltarea de softwaredar poate fi folosit pentru a urmari schimbarile ın orice set de fisiere

Avantaje ale Git

bull Modelul distribuit numai ceea ce se doreste se face publicbull Branching-ul si merging-ul sunt usoarebull Fluxul de lucru este flexibilbull Integritatea datelor este asigurata Deoarece GIT utilizeaza arbori SHA1 coruperea

datelor din motive externe poate fi usor detectatabull Rapid Git este foarte rapid chiar si ın comparatie cu alte sisteme de control a

versionarii

Am folosit Git pentru a avea la proiect un back-up ın caz ca se ıntampla ceva cuproiectul salvat pe calculator

45 Arhitectura conceptuala

In figura 45 este prezentata arhitectura conceptuala a sistemului Acesta este ım-partit ın doua mari parti backend-ul si frontend-ul care comunica ıntre ele si ısi trimitinformatii

Se poate observa ca baza de date este de tip graf mai exact Neo4j si comunica cubackend-ul pentru a putea lucra cu datele stocate Backend-ul este structurat pe nivelefiecare cu un diferit rol si care trebuie parcurs pentru a procesa datele din interfata ınbaza de date Cele trei nivele sunt cel de Repository cel de Service si cel ControllerToate interogarile venite din interfata utilizator ajung ın nivelul de Controller Dupa ceinterogarile trec de securitatea sistemului ajung ın nivelul de Service Acolo se proceseazasi se afla partea de logica a aplicatiei Pentru a interactiona cu baza de date din Servicese apeleaza metodele din nivelul de Repository

In continuare backend-ul comunica prin protocolul HTTP cu interfata grafica cucare interactioneaza clientii aplicatiei Interfata este scrisa ın Ext JS si are o parte de Viewsi o parte de Controller care este cea care comunica cu backend-ul

Pentru partea de autentificare sistemul interactioneaza cu API-ul de la Facebookde la care ia dupa autentificare un access token Cu ajutorul acestuia ia dupa aceea datelenecesare pentru a putea crea un profil utilizatorului

8httpsguidesgithubcomintroductiongit-handbook

30

Figura 45 Arhitectura conceptuala

31

Capitolul 5

Proiectare de Detaliu siImplementare

In acest capitol vor fi prezentate detalii de implementare ale sistemului de recoman-dare incluzand o ımpartire al acestuia ın componentele care ıl cuprind

Obiectivul este de a prezenta arhitectura si modul de implementare al aplicatieipe baza datelor descoperite ın studiul bibliografic de la capitolul trei si cu tehnologiilehotarate la capitolul patru Pe langa asta va fi prezentata si structura bazei de date sideciziile luate pentru securitatea aplicatiei

51 Arhitectura sistemului

Din punctul de vedere al arhitecturii aplicatia se poate considera ca este alcatuitadin patru mari componente

1 API-ul de la Facebook2 Aplicatia client care reprezinta interfata grafica a aplicatiei3 Aplicatia server adica backendul aplicatiei si partea ın care se afla partea de rdquobusiness

logicrdquo4 Baza de date

Partea componenta reprezentata de API-ul de la Facebook este doar o componentacu care aplicatia se integreaza si pe care aceasta o foloseste In interactiunea cu ea interfatada o cerere de autentificare apare o fereastra de la Facebook ın care utilizatorul introducecredentialele de la API-ul de Facebook se primeste ınapoi un access token si cu ajutorulacestuia face o cerere pentru a primi datele personale ale utilizatorului pentru creeareaprofilului utilizator

Urmatoarea parte a aplicatiei este interfata utilizator frontend-ul care reprezintapartea cu care utilizatorul interactioneaza si locul unde ıi sunt afisate informatiile

Cererile din interfata ajung ın a treia parte componenta a sistemului partea deserver adica backend-ul aplicatiei Acolo toate cererile sunt citite si procesate iar raspun-

33

sul lor este trimis la interfata utilizator Aceasta este partea care reprezinta rdquogandireardquoaplicatiei Aceea este componenta care face legatura ıntre cererile utilizatorului din inter-fata si datele stocate ın baza de date

Ultima componenta a aplicatiei o reprezinta baza de date care are ca rol sa stochezedatele despre utilizatori produse si comenzi Ea este o baza de date sub forma de grafde tipul Neo4j Acolo se salveaza entitatile aplicatiei sub forma de noduri si dependenteleıntre acestea sub forma de relatii ıntre aceste noduri

Figura 51 Diagrama de rdquodeploymentrdquo

In figura 51 este prezentata diagrama de rdquodeploymentrdquo a sistemului cu cele patrucomponente ale sistemului Aplicatia client comunica cu API-ul de la Facebook prin pro-tocolul securizat HTTPS cu backend-ul prin protocolul HTTP iar backend-ul cu baza dedate prin JDBC

Aplicatia a putut fi ımpartita ın aceste componente separate deoarece fiecare dintreele poate functiona independent de celelalte comunica cu ele doar prin mesaje Din acestmotiv locul unde ruleaza acestea pot sa fie pe servere diferite In plus daca aplicatiaar fi pusa pe servere pentru utilizatori ar putea fi mai multe servere pe care ruleaza ocomponenta si prin rdquoload balancingrdquo sa se trimita cererile ımpartite ıntre ele

Cum astfel componentele nu depind foarte mult unele de altele si pot rula faraa le interesa de unde le sunt trimise cererile este arhitectura cea mai corecta deoarecedefectarea sau o posibila eroare la una din ele nu o influenteaza cu nimic pe o alta Dacatoate ar rula pe acelasi server o eventuala defectiune a acestuia ar ınsemna o defectiune aıntregului sistem Insa daca exista mai multe noduri si se afla pe servere diferite pot doartoate cererile sa fie redirectionate spre un nod care functioneaza si aplicatia sa functionezepentru clienti la fel ca ınainte

34

Un alt avantaj al arhitecturii ar fi faptul ca la o lansare viitoare catre clienti se poatelansa doar componenta la care s-au facut modificari De asemenea aplicatia ar putea aveape viitor si o componenta mobila Iar cum serverul e independent poate fi acelasi serverfolosit de o alta aplicatie client

511 Arhitectura componentei backend

Arhitectura backend-ului este si ea ımpartita ın mai multe pachete pentru o maibuna structura si pentru o cat mai mica dependenta ıntre diversele componente Astfelcuplarea este minima ıntre clase si eventualele modificari ulterioare pot fi mai usor defacut

Serverul a fost implementat ın Java cu ajutorul framework-ului Spring Boot iarmediul de dezvoltare folosit a fost Intellij IDEA

Din punctul de vedere al ımpartirii arhitectura serverului aplicatiei este structurataın patru pachete si o clasa ın afara acestora Acea clasa este rdquomainrdquo-ul aplicatiei este parteacare trebuie rulata pentru a porni serverul Din cauza ca este o aplicatie Spring Boot si nuuna String singura adnotare necesara pentru a sti ca aceea este clasa rdquoradacinardquoa aplicatieieste SpringBootApplication

Cele patru pachete ale serverului sunt1 Cel de domeniu (domain) cu clasele POJO care reprezinta entitatile din baza de

date2 Cel de rdquomagazierdquo (repositories) care este cel care face direct actiunile ın baza de date3 Cel de serviciu (services) ın care se afla partea de logica a ıntregii aplicatii4 Cel de web ın care se afla clasele de rdquocontrollerrdquo

Figura 52 Diagrama de pachete pentru backend

35

Ca si dependente nivelul de web ıl foloseste pe cel de seviciu cel de serviciu ılfoloseste pe cel de rdquomagazierdquo iar clasele din pachetul de domeniu sunt folosite ın toatecelelalte pachete

In continuare voi prezenta pe rand fiecare nivel al serverului adica fiecare pachet

Figura 53 Diagrama de clase pentru pachetul rdquodomainrdquo

36

Nivelul de domeniu (domain) este alcatuit ın primul rand din clasele care suntentitati ın baza de date Acestea sunt reprezentate de toate clasele ce stocheaza informatiidespre utilizatori si despre produse si comenzi Pe langa informatiile personale despre unutilizator de genul numelui email-ului sau data nasterii care sunt salvate ın entitateapersoana se stocheaza despre utilizator ın clase diferite informatii de genul locului undelocuieste locul unde a copilarit locurilor unde a facut scoala locului unde lucreaza sau celmai important pentru aplicatia aceasta lucrurilor care ıi plac In afara acestor informatiidespre utilizatori sunt si clase cu informatiile despre prieteni despre produse sau desprecomenzi

Din cauza faptului ca aplicatia este de tipul unei retele sociale ın care exista prieteniiıntre persoane exista dependente ıntre toate entitatile aplicatiei Acesta este si motivulpentru care am ales baza de date sub forma de graf pe care sa se mapeze toate acesteentitati sub forma de noduri si toate aceste dependente sub forma de relatii

In pachetul de domeniu se afla si trei subpachete Unul dintre ele este pentruclasele folosite pentru a trata erorile aplicatiei In interiorul acestui pachet se afla douaclase pentru eroare si o exceptie cea folosita ın cazul ın care nu se gaseste ceea ce doresteutilizatorul Pe langa asta este clasa care are ca obiect raspunsul dat de sistem ın cazulunei erori la server Aceasta contine ın interiorul sau pe langa codul erorii si detalii despreeroarea trimisa Aceasta lista de detalii e reprezentata de obiectele de tipul celei de-a treiaclase din pachetul acesta

Celelalte doua subpachete aflate ın acest nivel sunt cele care contin clasele specialede cerere sau raspuns care au ajutat la maparea acestora mai bine In multe cazuri nua fost necesara trimiterea la interfata utilizator a tuturor informatiilor stocate despre oentitate si de aceea am ales sa creez ın aceste cazuri un obiect auxiliar care sa fie folositpe post de raspuns

Figura 54 Diagrama de clase pentru pachetul rdquorepositoriesrdquo

37

Cel de-al doilea nivel al aplicatiei backend este cel de rdquomagazierdquo (repositories) carecontine doar interfete de tip rdquoRepositoryrdquo

Aceste interfete sunt cele care fac operatiile directe asupra entitatilor din baza dedate

Unele interfete doar extind interfata care are deja implementate metodele CRUDsi din acest motiv nu au metode suplimentare iar altele au si metode ın plus care au carol sa execute interogari mai complexe asupra bazei de date In acele metode se pot scrieinterogarile ın Cypher pentru a putea primi informatii despre mai multe noduri sau desprerelatiile dintre acestea sau si pentru a returna doar anumite rezultate care ındeplinescanumite conditii In felul acesta a fost implementata si cererea de oferire a recomandarilorIn acel caz sistemul returneaza produsele care au ın descriere unul din lucrurile care se aflaın lista de obiecte sau servicii primite de la Facebook ca ıi plac utilizatorului

Nivelul de rdquoRepositoryrdquo este folosit direct de cel de-al treiea nivel cel de servi-ciu Acesta este nivelul la care se executa logica aplicatiei unde se comanda modul defunctionare al ıntregii aplicatii

Figura 55 Diagrama de clase pentru pachetul rdquoservicesrdquo

Pe acest nivel ajung toate cererile din server dupa ce trec de verificarile de securitateIn acest pachet se afla si clasa de securitate care face verificarile necesare In aceasta clasaexista o metoda ce se apeleaza la prima cerere cea de salvare a datelor de la Facebookdespre utilizator si care codifica id-ul utilizatorului si ıl trimite pe raspuns ınapoi interfeteiPe langa asta ın acea clasa se afla si o metoda care verifica faptul ca id-ul codificat esteal unui utilizator cu rol corespunzator pentru a face acea cerere

In plus ın acest pachet se afla si toate celelalte clase care fac diverse operatii pedatele din baza de date si dau raspunsuri cererilor din interfata Aici se afla logica care

38

comanda actiunile asupra utilizatorilor asupra prietenilor acestora asupra produselor siasupra comenzilor

Ultima clasa a acestui nivel este cea care se ocupa de trimiterea de email-uri Incazul ın care se face o noua comanda de catre un utilizator toti producatorii produselor depe comanda sunt notificati despre produsele lor pe care le doreste utilizatorul Din serviciulde comanda se apeleaza serviciul de email pentru fiecare producator din lista celor care auproduse care se afla pe lista comenzii utilizatorului

Ultimul si cel mai aproape de interfata utilizator este nivelul de web Acolo se aflatoate clasele de rdquoControllerrdquo ale aplicatiei server

Figura 56 Diagrama de clase pentru pachetul rdquowebrdquo

Toate cererile din interfata utilizator ıncearca sa se mapeze pe rutele declarate ınclase pentru a fi procesate ın metoda corespunzatoare Toata aceasta parte este foarteusor de implementat si mai ales foarte lizibil pentru programatori datorita adnotarilor dinJava Cu ajutorul acestora trebuie doar specificat care este numele URL-ului cererii careeste tipul de obiect asteptat si daca se trimite ca rdquoquery stringrdquo pe URL sau ın interiorulcorpului cererii si tipul raspunsului Pentru fiecare cerere care nu este apelata ın parteaneautentificata a utilizatorului primul lucru care se apeleaza este metoda de securitatepentru a verifica rolul si id-ul utilizatorului Daca din punctul de vedere al securitatii totuleste ın regula se apeleaza metoda corespunzatoare din pachetul de serviciu

39

O singura clasa este diferita de restul ın pachetul de controller si aceea este clasa deeroare Acolo se mapeaza erorile aparute ın timpul cererii si se trimite ınapoi ın interfatagrafica un raspuns cu cod de eroare specific nu numai 500 Generic Application Exceptioncum ar trimite fara aceasta clasa si cu detalii despre motivul aparitiei erorii

Datorita folosirii adnotarilor din java nu a fost necesara folosirea unor rdquodesignpatternrdquo-uri ın sistem De exemplu pentru a folosi ın nivelul de web ceva din pachetulde servicii trebuia doar acel obiect sa aiba adnotarea Autowired si se ınlocuieste atatfolosirea rdquodesign patternrdquo-ului Singleton cat si a celui de Factory Acel obiect nu trebuiecreat sau initializat se face asta implicit datorita adnotarii si de asemenea este folositapeste tot aceeasi instanta

In concluzie toate cererile venite din interfata grafica ajung ın nivelul de rdquocontrollerrdquode unde sunt trimise la cel de rdquoservicerdquopentru a fi procesate si facute eventualele modificarinecesare ın baza de date ca apoi raspunsul sa fie trimis ınapoi spre aplicatia client pentruafisare

512 Arhitectura componentei frontend

A doua componenta implementata a sistemului este aplicatia client frontend-ulAceasta a fost scrisa ın Java Script cu ajutorul framework-ului Ext JS compilarea

se face cu ajutorul Sencha CMD si mediul de implementare a fost IntelliJ IdeaCu ajutorul framework-ului Ext JS se scriu componente care apoi se initializeaza

unele pe altele Aplicatia porneste cu fisierul Applicationjs care este un fel de rdquomainrdquopentru aplicatie Aceasta initializeaza alte componente care la randul lor includ altecomponente si tot asa Structura poate fi foarte usor comparata cu una arborescenta dinacest punct de vedere

Framework-ul a fost creat sa functioneze ın felul acesta pentru ca scopul componen-telor este sa fie scrise ın asa fel ıncat sa poata pe viitor sa fie utilizate din nou Una dindorintele majore ın programare tot timpul este de a se scrie cod ıntr-o maniera ın care safie cat mai reutilizabil Iar framework-ul Ext JS exact asta ıncearca

Arhitectura aplicatiei client se gaseste ın figura 57 si este la randul ei ımpartita ınpachete ca si cea de server Similar cu pachetul de rdquodomainrdquo de la aplicatia de backendeste pachetul rdquomodelrdquo al interfetei utilizator Aici sunt rdquoclaserdquo care sunt simple POJO sicare sunt apoi folosite ın nivelele urmatoare Sunt mai putine decat clasele din rdquostorerdquodeoarece daca raspunsul de la server nu trebuie procesat nu sunt necesare se pot mapadirect obiectele din rdquostorerdquo pe componentele interfetei utilizator

Urmatorul nivel este cel pe care se afla clasele de rdquostorerdquo Acestea sunt cele careexecuta cererea spre backend si face legatura ıntre client si server Daca are o clasa derdquomodelrdquodeclarata atunci populeaza acel obiect cu datele primite de la server iar ın cazul ıncare nu este declarat un model se trimit datele exact asa cum s-au primit la nivelul urmatorde rdquoviewrdquo Acest nivel seamana din punct de vedere al functiei cu cel de rdquorepositoryrdquo de laaplicatia server deoarece ambele au rol de legatura Aceea facea legatura ıntre aplicatiesi baza de date si aceasta face legatura ıntre aplicatia client si aplicatia server

40

Figura 57 Diagrama de clase pentru aplicatia web

Cel de-al treilea pachet al aplicatiei este cel de rdquoviewrdquo In acest pachet se afla claselecare alcatuiesc partea vizuala a aplicatiei La randul ei si aceasta este alcatuita tot dincomponente Aplicatia deschide ın primul rand Main-ul care determina aparitia paginii deHome si afisarea ın meniu a optiunilor posibile ın functie de autentificare si rol Clasele deaici se executa de fapt la deschiderea aplicatiei fiind rdquosingle page applicationrdquo si tot atuncise ıncarca pe pagina componentele Ca si arhitectura a pachetului acesta este ımpartit larandul sau ın subpachete Pentru o mai buna organizare exista patru subpachete cateunul pentru fiecare tip de utilizator In felul acesta toate rdquoviewrdquo-urile care sunt specificeunui utilizator cu un anumit rol se afla ın acelasi subpachet

Cele patru subpachete existente ın pachetul rdquoviewrdquo sunt

1 Pachetul rdquomainrdquo care cuprinde rdquoviewrdquo-urile care se afla ın partea neautentificata aaplicatiei

2 Pachetul rdquoclientrdquo continand rdquoviewrdquo-urile pe care le poate accesa un utilizator simplu3 Pachetul rdquoproducerrdquo specific actiunilor unui utilizator care are rol de producator4 Pachetul rdquoadminrdquo care contine toate rdquoviewrdquo-urile care ıi apar unui utilizator care este

administrator al aplicatiei

Ultimul pachet si nivel al aplicatiei client este cel de rdquocontrollerrdquo In acest pachet

41

se afla clasele care fac actiunile din interfata grafica In timp ce pachetul rdquoviewrdquo continedoar partea grafica a aplicatiei adica modul ın care aceasta trebuie sa arate pachetulrdquocontrollerrdquo contine actiunea acestora modul ın care aplicatia trebuie sa functioneze

Ca si arhitectura si acest pachet a fost ımpartit la randul lui tot ın cele patrusubpachete ca si pachetul rdquoviewrdquo adica rdquomainrdquo rdquoclientrdquo rdquoproducerrdquo si rdquoadminrdquo In pluspentru a fi usor de gasit ce clasa de rdquocontrollerrdquo apartine carui rdquoviewrdquo am ales ca cele douasa aiba acelasi nume In felul acesta daca se doreste sa se gaseasca actiunile unui rdquoviewrdquose poate cauta dupa o clasa cu acelasi nume ın pachetul rdquocontrollerrdquo Numarul claselor dinacest pachet este mai mic decat cel al claselor din rdquoviewrdquo deoarece nu toate paginile dininterfata au actiuni suplimentare Daca singura actiune este ıncarcarea paginii cu date dela server adica doar o actiune simpla de GET datele se ıncarca cu ajutorul rdquostorerdquo-ului laıncarcarea paginii si nu este necesara nici o actiune suplimentara Paginile pe care se potface si actiuni de alt gen sau se deschid noi ferestre au nevoie de clase de rdquocontrollerrdquo

In concluzie arhitectura aplicatiei client este una bazata pe componente care ıncearcasa foloseasca cat mai multe clase reutilizabile

52 Structura bazei de date

Baza de date a aplicatiei este de tip graf de tipul Neo4j Pentru utilizare exista unprogram numit Neo4j ce trebuie instalat Acest program are si o interfata grafica ın carese pot vizualiza datele sub forma grafica si ın care se pot scrie de asemenea si interogariın limbajul acestei baze de date adica Cypher

Fiind o baza de date sub forma de graf datele stocate sunt salvate ın structurade date sub forma de noduri si relatii Entitatile din pachetul de domeniu din aplicatiabackend se gasesc ın baza de date sub forma unor noduri iar dependentele dintre nodurise mapeaza ın baza de date sub forma unor relatii Un element diferit fata de alte tipuride baze de date este faptul ca pe relatiile dintre noduri se pot salva atribute cum este ınaplicatie cazul pentru prieteniile dintre persoane In cazul acestora pe relatia dintre nodurise salveaza daca prietenia a fost sau nu acceptata

Pentru fiecare clasa POJO din aplicatia server clasa ce are doar metodele get si setsi se afla ın pachetul domain exista cate un tip de nod diferit ın baza de date cum estesi marcat ın diferite culori ın figura 58 Fiecare tip de nod are atributele proprii care potlua valori sau pot fi nule Iar fiecare obiect din Java reprezinta un nod diferit ın baza dedate

Neo4j a fost cea mai buna optiune pentru baza de date pentru ca aplicatia poate ficonsiderata o retea sociala Acest lucru se datoreaza relatiilor de prietenie dintre persoanesi a multiplelor relatii ıntre noduri Toate nodurile se afla ın acceasi componenta conexadeci nu exista noduri izolate care sa nu aiba nici o legatura cu nici un alt nod

Datorita acestei structuri a bazei de date este posibila implementarea cererii derecomandare ca o simpla interogare ın baza de date aceasta fiind cea mai simpla metodade implementare a unui sistem de genul acesta una mult mai complexa ar fi fost un

42

algoritm de ınvatare care sa ınvete tipare ale utilizatorilor si sa recomande cadouri pe bazaacestor informatii

Figura 58 Diagrama bazei de date pentru doi utilizatori

Un alt avantaj al acestui tip de baza de date este faptul ca datele nu sunt duplicateın baza de date Spre exemplu daca mai multi utilizatori au ca locatie acelasi oras nu secreaza cate un nod cu acea locatie de mai multe ori ci acel unic nod va avea cate o relatiecu fiecare utilizator care are ca locatie acel oras

In concluzie structura bazei de date a fost aleasa ın acest fel datorita tipului apli-catiei adica asemanatoare cu o retea sociala si datorita implementarii simple a unui sistemde recomandare pe o asemenea baza de date

53 Fluxul pentru diferite operatii

Pentru aplicatie cele mai importante cazuri de utilizare sunt salvarea informati-ilor despre utilizator primite de la Facebook pentru crearea unui profil si recomandareacadourilor pentru un utilizator al aplicatiei Din aceasta cauza cele doua cazuri de utilizarevor fi prezentate mai ın detaliu ın continuare

43

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 34: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

nou proiect la lansarea unei aplicatii ın productie

Sencha Cmd ofera o colectie de caracteristici puternice pentru economisirea timpu-lui care functioneaza ımpreuna cu Sencha ExtJS si Sencha Touch

Ext JS 6 este un framework pur JavaScript pentru construirea de aplicatii webinteractive cross-platform utilizand tehnici precum scripting Ajax DHTML si DOM

Avantajele framework-ului ExtJS sunt

1 Documentatia Extjs este foarte cuprinzatoare si bine ıntretinuta2 Aspectul cheie al bibliotecii EXTJS este suportul de tip cross-browser3 Framework-ul ExtJS ofera o multitudine de elemente UI Aceste elemente includ

forme casete de dialog file arbori si tabele4 Framework-ul ExtJS include suport pentru implementarile Ajax5 ExtJS ofera performante excelente Framework-ul este complet orientat spre obiecte

si este extensibil asta pentru ca este scris ın JavaScript

Pentru partea de frontend se foloseste framework-ul ExtJS deoarece are o arhitec-tura ce se mapeaza foarte bine pe proiectele de frontend si anume arhitectura bazata pecomponente Aceasta face ca ın proiect codul sa fie mult mai organizat si procesul dedezvoltare al proiectului sa fie mult mai scurt prin identificarea mai usoara a erorilor

446 Facebook API(Graph API)

Graph API 7 este modul principal de a pune date ın platforma Facebook si de aobtine date din platforma Facebook Este un API bazat pe HTTP pe care aplicatiile ılpot utiliza pentru interogarea datelor pentru a introduce postari noi pentru gestionareaanunturilor sau pentru a ıncarca fotografii

Este denumit Graph API dupa ideea unui rdquograf socialrdquo - o reprezentare sub formade graf a informatiilor de pe Facebook Este compus din

bull noduri - ın esenta obiecte individuale cum ar fi un utilizator o fotografie o paginasau un comentariu

bull muchii - conexiuni ıntre o colectie de obiecte si un singur obiect cum ar fi fotografiilede pe o pagina sau comentariile de la o fotografie

bull campuri - date despre un obiect cum ar fi ziua de nastere a unui utilizator saunumele paginii

De obicei se utilizeaza noduri pentru a obtine date despre un anumit obiect se uti-lizeaza muchii pentru a obtine colectii de obiecte legate de un singur obiect si se utilizeazacampurile pentru a obtine date despre un singur obiect sau mai multe obiecte dintr-ocolectie

Am folosit Facebook API ca solutie pentru a ımbunatati problema de rdquocold startrdquopentru ca este singurul site pe care marea majoritate a oamenilor au cont si salveazalucrurile care le plac Deci se potrivea perfect peste nevoile aplicatiei mele

6httpdocssenchacomextjs6207httpsdevelopersfacebookcomdocsgraph-api

29

447 Git

Git 8 este un sistem de control a versionarii pentru urmarirea modificarilor ın fisierelede pe computer si coordonarea activitatii asupra acestor fisiere ın randul mai multor per-soane Este utilizat ın principal pentru gestionarea codului sursa ın dezvoltarea de softwaredar poate fi folosit pentru a urmari schimbarile ın orice set de fisiere

Avantaje ale Git

bull Modelul distribuit numai ceea ce se doreste se face publicbull Branching-ul si merging-ul sunt usoarebull Fluxul de lucru este flexibilbull Integritatea datelor este asigurata Deoarece GIT utilizeaza arbori SHA1 coruperea

datelor din motive externe poate fi usor detectatabull Rapid Git este foarte rapid chiar si ın comparatie cu alte sisteme de control a

versionarii

Am folosit Git pentru a avea la proiect un back-up ın caz ca se ıntampla ceva cuproiectul salvat pe calculator

45 Arhitectura conceptuala

In figura 45 este prezentata arhitectura conceptuala a sistemului Acesta este ım-partit ın doua mari parti backend-ul si frontend-ul care comunica ıntre ele si ısi trimitinformatii

Se poate observa ca baza de date este de tip graf mai exact Neo4j si comunica cubackend-ul pentru a putea lucra cu datele stocate Backend-ul este structurat pe nivelefiecare cu un diferit rol si care trebuie parcurs pentru a procesa datele din interfata ınbaza de date Cele trei nivele sunt cel de Repository cel de Service si cel ControllerToate interogarile venite din interfata utilizator ajung ın nivelul de Controller Dupa ceinterogarile trec de securitatea sistemului ajung ın nivelul de Service Acolo se proceseazasi se afla partea de logica a aplicatiei Pentru a interactiona cu baza de date din Servicese apeleaza metodele din nivelul de Repository

In continuare backend-ul comunica prin protocolul HTTP cu interfata grafica cucare interactioneaza clientii aplicatiei Interfata este scrisa ın Ext JS si are o parte de Viewsi o parte de Controller care este cea care comunica cu backend-ul

Pentru partea de autentificare sistemul interactioneaza cu API-ul de la Facebookde la care ia dupa autentificare un access token Cu ajutorul acestuia ia dupa aceea datelenecesare pentru a putea crea un profil utilizatorului

8httpsguidesgithubcomintroductiongit-handbook

30

Figura 45 Arhitectura conceptuala

31

Capitolul 5

Proiectare de Detaliu siImplementare

In acest capitol vor fi prezentate detalii de implementare ale sistemului de recoman-dare incluzand o ımpartire al acestuia ın componentele care ıl cuprind

Obiectivul este de a prezenta arhitectura si modul de implementare al aplicatieipe baza datelor descoperite ın studiul bibliografic de la capitolul trei si cu tehnologiilehotarate la capitolul patru Pe langa asta va fi prezentata si structura bazei de date sideciziile luate pentru securitatea aplicatiei

51 Arhitectura sistemului

Din punctul de vedere al arhitecturii aplicatia se poate considera ca este alcatuitadin patru mari componente

1 API-ul de la Facebook2 Aplicatia client care reprezinta interfata grafica a aplicatiei3 Aplicatia server adica backendul aplicatiei si partea ın care se afla partea de rdquobusiness

logicrdquo4 Baza de date

Partea componenta reprezentata de API-ul de la Facebook este doar o componentacu care aplicatia se integreaza si pe care aceasta o foloseste In interactiunea cu ea interfatada o cerere de autentificare apare o fereastra de la Facebook ın care utilizatorul introducecredentialele de la API-ul de Facebook se primeste ınapoi un access token si cu ajutorulacestuia face o cerere pentru a primi datele personale ale utilizatorului pentru creeareaprofilului utilizator

Urmatoarea parte a aplicatiei este interfata utilizator frontend-ul care reprezintapartea cu care utilizatorul interactioneaza si locul unde ıi sunt afisate informatiile

Cererile din interfata ajung ın a treia parte componenta a sistemului partea deserver adica backend-ul aplicatiei Acolo toate cererile sunt citite si procesate iar raspun-

33

sul lor este trimis la interfata utilizator Aceasta este partea care reprezinta rdquogandireardquoaplicatiei Aceea este componenta care face legatura ıntre cererile utilizatorului din inter-fata si datele stocate ın baza de date

Ultima componenta a aplicatiei o reprezinta baza de date care are ca rol sa stochezedatele despre utilizatori produse si comenzi Ea este o baza de date sub forma de grafde tipul Neo4j Acolo se salveaza entitatile aplicatiei sub forma de noduri si dependenteleıntre acestea sub forma de relatii ıntre aceste noduri

Figura 51 Diagrama de rdquodeploymentrdquo

In figura 51 este prezentata diagrama de rdquodeploymentrdquo a sistemului cu cele patrucomponente ale sistemului Aplicatia client comunica cu API-ul de la Facebook prin pro-tocolul securizat HTTPS cu backend-ul prin protocolul HTTP iar backend-ul cu baza dedate prin JDBC

Aplicatia a putut fi ımpartita ın aceste componente separate deoarece fiecare dintreele poate functiona independent de celelalte comunica cu ele doar prin mesaje Din acestmotiv locul unde ruleaza acestea pot sa fie pe servere diferite In plus daca aplicatiaar fi pusa pe servere pentru utilizatori ar putea fi mai multe servere pe care ruleaza ocomponenta si prin rdquoload balancingrdquo sa se trimita cererile ımpartite ıntre ele

Cum astfel componentele nu depind foarte mult unele de altele si pot rula faraa le interesa de unde le sunt trimise cererile este arhitectura cea mai corecta deoarecedefectarea sau o posibila eroare la una din ele nu o influenteaza cu nimic pe o alta Dacatoate ar rula pe acelasi server o eventuala defectiune a acestuia ar ınsemna o defectiune aıntregului sistem Insa daca exista mai multe noduri si se afla pe servere diferite pot doartoate cererile sa fie redirectionate spre un nod care functioneaza si aplicatia sa functionezepentru clienti la fel ca ınainte

34

Un alt avantaj al arhitecturii ar fi faptul ca la o lansare viitoare catre clienti se poatelansa doar componenta la care s-au facut modificari De asemenea aplicatia ar putea aveape viitor si o componenta mobila Iar cum serverul e independent poate fi acelasi serverfolosit de o alta aplicatie client

511 Arhitectura componentei backend

Arhitectura backend-ului este si ea ımpartita ın mai multe pachete pentru o maibuna structura si pentru o cat mai mica dependenta ıntre diversele componente Astfelcuplarea este minima ıntre clase si eventualele modificari ulterioare pot fi mai usor defacut

Serverul a fost implementat ın Java cu ajutorul framework-ului Spring Boot iarmediul de dezvoltare folosit a fost Intellij IDEA

Din punctul de vedere al ımpartirii arhitectura serverului aplicatiei este structurataın patru pachete si o clasa ın afara acestora Acea clasa este rdquomainrdquo-ul aplicatiei este parteacare trebuie rulata pentru a porni serverul Din cauza ca este o aplicatie Spring Boot si nuuna String singura adnotare necesara pentru a sti ca aceea este clasa rdquoradacinardquoa aplicatieieste SpringBootApplication

Cele patru pachete ale serverului sunt1 Cel de domeniu (domain) cu clasele POJO care reprezinta entitatile din baza de

date2 Cel de rdquomagazierdquo (repositories) care este cel care face direct actiunile ın baza de date3 Cel de serviciu (services) ın care se afla partea de logica a ıntregii aplicatii4 Cel de web ın care se afla clasele de rdquocontrollerrdquo

Figura 52 Diagrama de pachete pentru backend

35

Ca si dependente nivelul de web ıl foloseste pe cel de seviciu cel de serviciu ılfoloseste pe cel de rdquomagazierdquo iar clasele din pachetul de domeniu sunt folosite ın toatecelelalte pachete

In continuare voi prezenta pe rand fiecare nivel al serverului adica fiecare pachet

Figura 53 Diagrama de clase pentru pachetul rdquodomainrdquo

36

Nivelul de domeniu (domain) este alcatuit ın primul rand din clasele care suntentitati ın baza de date Acestea sunt reprezentate de toate clasele ce stocheaza informatiidespre utilizatori si despre produse si comenzi Pe langa informatiile personale despre unutilizator de genul numelui email-ului sau data nasterii care sunt salvate ın entitateapersoana se stocheaza despre utilizator ın clase diferite informatii de genul locului undelocuieste locul unde a copilarit locurilor unde a facut scoala locului unde lucreaza sau celmai important pentru aplicatia aceasta lucrurilor care ıi plac In afara acestor informatiidespre utilizatori sunt si clase cu informatiile despre prieteni despre produse sau desprecomenzi

Din cauza faptului ca aplicatia este de tipul unei retele sociale ın care exista prieteniiıntre persoane exista dependente ıntre toate entitatile aplicatiei Acesta este si motivulpentru care am ales baza de date sub forma de graf pe care sa se mapeze toate acesteentitati sub forma de noduri si toate aceste dependente sub forma de relatii

In pachetul de domeniu se afla si trei subpachete Unul dintre ele este pentruclasele folosite pentru a trata erorile aplicatiei In interiorul acestui pachet se afla douaclase pentru eroare si o exceptie cea folosita ın cazul ın care nu se gaseste ceea ce doresteutilizatorul Pe langa asta este clasa care are ca obiect raspunsul dat de sistem ın cazulunei erori la server Aceasta contine ın interiorul sau pe langa codul erorii si detalii despreeroarea trimisa Aceasta lista de detalii e reprezentata de obiectele de tipul celei de-a treiaclase din pachetul acesta

Celelalte doua subpachete aflate ın acest nivel sunt cele care contin clasele specialede cerere sau raspuns care au ajutat la maparea acestora mai bine In multe cazuri nua fost necesara trimiterea la interfata utilizator a tuturor informatiilor stocate despre oentitate si de aceea am ales sa creez ın aceste cazuri un obiect auxiliar care sa fie folositpe post de raspuns

Figura 54 Diagrama de clase pentru pachetul rdquorepositoriesrdquo

37

Cel de-al doilea nivel al aplicatiei backend este cel de rdquomagazierdquo (repositories) carecontine doar interfete de tip rdquoRepositoryrdquo

Aceste interfete sunt cele care fac operatiile directe asupra entitatilor din baza dedate

Unele interfete doar extind interfata care are deja implementate metodele CRUDsi din acest motiv nu au metode suplimentare iar altele au si metode ın plus care au carol sa execute interogari mai complexe asupra bazei de date In acele metode se pot scrieinterogarile ın Cypher pentru a putea primi informatii despre mai multe noduri sau desprerelatiile dintre acestea sau si pentru a returna doar anumite rezultate care ındeplinescanumite conditii In felul acesta a fost implementata si cererea de oferire a recomandarilorIn acel caz sistemul returneaza produsele care au ın descriere unul din lucrurile care se aflaın lista de obiecte sau servicii primite de la Facebook ca ıi plac utilizatorului

Nivelul de rdquoRepositoryrdquo este folosit direct de cel de-al treiea nivel cel de servi-ciu Acesta este nivelul la care se executa logica aplicatiei unde se comanda modul defunctionare al ıntregii aplicatii

Figura 55 Diagrama de clase pentru pachetul rdquoservicesrdquo

Pe acest nivel ajung toate cererile din server dupa ce trec de verificarile de securitateIn acest pachet se afla si clasa de securitate care face verificarile necesare In aceasta clasaexista o metoda ce se apeleaza la prima cerere cea de salvare a datelor de la Facebookdespre utilizator si care codifica id-ul utilizatorului si ıl trimite pe raspuns ınapoi interfeteiPe langa asta ın acea clasa se afla si o metoda care verifica faptul ca id-ul codificat esteal unui utilizator cu rol corespunzator pentru a face acea cerere

In plus ın acest pachet se afla si toate celelalte clase care fac diverse operatii pedatele din baza de date si dau raspunsuri cererilor din interfata Aici se afla logica care

38

comanda actiunile asupra utilizatorilor asupra prietenilor acestora asupra produselor siasupra comenzilor

Ultima clasa a acestui nivel este cea care se ocupa de trimiterea de email-uri Incazul ın care se face o noua comanda de catre un utilizator toti producatorii produselor depe comanda sunt notificati despre produsele lor pe care le doreste utilizatorul Din serviciulde comanda se apeleaza serviciul de email pentru fiecare producator din lista celor care auproduse care se afla pe lista comenzii utilizatorului

Ultimul si cel mai aproape de interfata utilizator este nivelul de web Acolo se aflatoate clasele de rdquoControllerrdquo ale aplicatiei server

Figura 56 Diagrama de clase pentru pachetul rdquowebrdquo

Toate cererile din interfata utilizator ıncearca sa se mapeze pe rutele declarate ınclase pentru a fi procesate ın metoda corespunzatoare Toata aceasta parte este foarteusor de implementat si mai ales foarte lizibil pentru programatori datorita adnotarilor dinJava Cu ajutorul acestora trebuie doar specificat care este numele URL-ului cererii careeste tipul de obiect asteptat si daca se trimite ca rdquoquery stringrdquo pe URL sau ın interiorulcorpului cererii si tipul raspunsului Pentru fiecare cerere care nu este apelata ın parteaneautentificata a utilizatorului primul lucru care se apeleaza este metoda de securitatepentru a verifica rolul si id-ul utilizatorului Daca din punctul de vedere al securitatii totuleste ın regula se apeleaza metoda corespunzatoare din pachetul de serviciu

39

O singura clasa este diferita de restul ın pachetul de controller si aceea este clasa deeroare Acolo se mapeaza erorile aparute ın timpul cererii si se trimite ınapoi ın interfatagrafica un raspuns cu cod de eroare specific nu numai 500 Generic Application Exceptioncum ar trimite fara aceasta clasa si cu detalii despre motivul aparitiei erorii

Datorita folosirii adnotarilor din java nu a fost necesara folosirea unor rdquodesignpatternrdquo-uri ın sistem De exemplu pentru a folosi ın nivelul de web ceva din pachetulde servicii trebuia doar acel obiect sa aiba adnotarea Autowired si se ınlocuieste atatfolosirea rdquodesign patternrdquo-ului Singleton cat si a celui de Factory Acel obiect nu trebuiecreat sau initializat se face asta implicit datorita adnotarii si de asemenea este folositapeste tot aceeasi instanta

In concluzie toate cererile venite din interfata grafica ajung ın nivelul de rdquocontrollerrdquode unde sunt trimise la cel de rdquoservicerdquopentru a fi procesate si facute eventualele modificarinecesare ın baza de date ca apoi raspunsul sa fie trimis ınapoi spre aplicatia client pentruafisare

512 Arhitectura componentei frontend

A doua componenta implementata a sistemului este aplicatia client frontend-ulAceasta a fost scrisa ın Java Script cu ajutorul framework-ului Ext JS compilarea

se face cu ajutorul Sencha CMD si mediul de implementare a fost IntelliJ IdeaCu ajutorul framework-ului Ext JS se scriu componente care apoi se initializeaza

unele pe altele Aplicatia porneste cu fisierul Applicationjs care este un fel de rdquomainrdquopentru aplicatie Aceasta initializeaza alte componente care la randul lor includ altecomponente si tot asa Structura poate fi foarte usor comparata cu una arborescenta dinacest punct de vedere

Framework-ul a fost creat sa functioneze ın felul acesta pentru ca scopul componen-telor este sa fie scrise ın asa fel ıncat sa poata pe viitor sa fie utilizate din nou Una dindorintele majore ın programare tot timpul este de a se scrie cod ıntr-o maniera ın care safie cat mai reutilizabil Iar framework-ul Ext JS exact asta ıncearca

Arhitectura aplicatiei client se gaseste ın figura 57 si este la randul ei ımpartita ınpachete ca si cea de server Similar cu pachetul de rdquodomainrdquo de la aplicatia de backendeste pachetul rdquomodelrdquo al interfetei utilizator Aici sunt rdquoclaserdquo care sunt simple POJO sicare sunt apoi folosite ın nivelele urmatoare Sunt mai putine decat clasele din rdquostorerdquodeoarece daca raspunsul de la server nu trebuie procesat nu sunt necesare se pot mapadirect obiectele din rdquostorerdquo pe componentele interfetei utilizator

Urmatorul nivel este cel pe care se afla clasele de rdquostorerdquo Acestea sunt cele careexecuta cererea spre backend si face legatura ıntre client si server Daca are o clasa derdquomodelrdquodeclarata atunci populeaza acel obiect cu datele primite de la server iar ın cazul ıncare nu este declarat un model se trimit datele exact asa cum s-au primit la nivelul urmatorde rdquoviewrdquo Acest nivel seamana din punct de vedere al functiei cu cel de rdquorepositoryrdquo de laaplicatia server deoarece ambele au rol de legatura Aceea facea legatura ıntre aplicatiesi baza de date si aceasta face legatura ıntre aplicatia client si aplicatia server

40

Figura 57 Diagrama de clase pentru aplicatia web

Cel de-al treilea pachet al aplicatiei este cel de rdquoviewrdquo In acest pachet se afla claselecare alcatuiesc partea vizuala a aplicatiei La randul ei si aceasta este alcatuita tot dincomponente Aplicatia deschide ın primul rand Main-ul care determina aparitia paginii deHome si afisarea ın meniu a optiunilor posibile ın functie de autentificare si rol Clasele deaici se executa de fapt la deschiderea aplicatiei fiind rdquosingle page applicationrdquo si tot atuncise ıncarca pe pagina componentele Ca si arhitectura a pachetului acesta este ımpartit larandul sau ın subpachete Pentru o mai buna organizare exista patru subpachete cateunul pentru fiecare tip de utilizator In felul acesta toate rdquoviewrdquo-urile care sunt specificeunui utilizator cu un anumit rol se afla ın acelasi subpachet

Cele patru subpachete existente ın pachetul rdquoviewrdquo sunt

1 Pachetul rdquomainrdquo care cuprinde rdquoviewrdquo-urile care se afla ın partea neautentificata aaplicatiei

2 Pachetul rdquoclientrdquo continand rdquoviewrdquo-urile pe care le poate accesa un utilizator simplu3 Pachetul rdquoproducerrdquo specific actiunilor unui utilizator care are rol de producator4 Pachetul rdquoadminrdquo care contine toate rdquoviewrdquo-urile care ıi apar unui utilizator care este

administrator al aplicatiei

Ultimul pachet si nivel al aplicatiei client este cel de rdquocontrollerrdquo In acest pachet

41

se afla clasele care fac actiunile din interfata grafica In timp ce pachetul rdquoviewrdquo continedoar partea grafica a aplicatiei adica modul ın care aceasta trebuie sa arate pachetulrdquocontrollerrdquo contine actiunea acestora modul ın care aplicatia trebuie sa functioneze

Ca si arhitectura si acest pachet a fost ımpartit la randul lui tot ın cele patrusubpachete ca si pachetul rdquoviewrdquo adica rdquomainrdquo rdquoclientrdquo rdquoproducerrdquo si rdquoadminrdquo In pluspentru a fi usor de gasit ce clasa de rdquocontrollerrdquo apartine carui rdquoviewrdquo am ales ca cele douasa aiba acelasi nume In felul acesta daca se doreste sa se gaseasca actiunile unui rdquoviewrdquose poate cauta dupa o clasa cu acelasi nume ın pachetul rdquocontrollerrdquo Numarul claselor dinacest pachet este mai mic decat cel al claselor din rdquoviewrdquo deoarece nu toate paginile dininterfata au actiuni suplimentare Daca singura actiune este ıncarcarea paginii cu date dela server adica doar o actiune simpla de GET datele se ıncarca cu ajutorul rdquostorerdquo-ului laıncarcarea paginii si nu este necesara nici o actiune suplimentara Paginile pe care se potface si actiuni de alt gen sau se deschid noi ferestre au nevoie de clase de rdquocontrollerrdquo

In concluzie arhitectura aplicatiei client este una bazata pe componente care ıncearcasa foloseasca cat mai multe clase reutilizabile

52 Structura bazei de date

Baza de date a aplicatiei este de tip graf de tipul Neo4j Pentru utilizare exista unprogram numit Neo4j ce trebuie instalat Acest program are si o interfata grafica ın carese pot vizualiza datele sub forma grafica si ın care se pot scrie de asemenea si interogariın limbajul acestei baze de date adica Cypher

Fiind o baza de date sub forma de graf datele stocate sunt salvate ın structurade date sub forma de noduri si relatii Entitatile din pachetul de domeniu din aplicatiabackend se gasesc ın baza de date sub forma unor noduri iar dependentele dintre nodurise mapeaza ın baza de date sub forma unor relatii Un element diferit fata de alte tipuride baze de date este faptul ca pe relatiile dintre noduri se pot salva atribute cum este ınaplicatie cazul pentru prieteniile dintre persoane In cazul acestora pe relatia dintre nodurise salveaza daca prietenia a fost sau nu acceptata

Pentru fiecare clasa POJO din aplicatia server clasa ce are doar metodele get si setsi se afla ın pachetul domain exista cate un tip de nod diferit ın baza de date cum estesi marcat ın diferite culori ın figura 58 Fiecare tip de nod are atributele proprii care potlua valori sau pot fi nule Iar fiecare obiect din Java reprezinta un nod diferit ın baza dedate

Neo4j a fost cea mai buna optiune pentru baza de date pentru ca aplicatia poate ficonsiderata o retea sociala Acest lucru se datoreaza relatiilor de prietenie dintre persoanesi a multiplelor relatii ıntre noduri Toate nodurile se afla ın acceasi componenta conexadeci nu exista noduri izolate care sa nu aiba nici o legatura cu nici un alt nod

Datorita acestei structuri a bazei de date este posibila implementarea cererii derecomandare ca o simpla interogare ın baza de date aceasta fiind cea mai simpla metodade implementare a unui sistem de genul acesta una mult mai complexa ar fi fost un

42

algoritm de ınvatare care sa ınvete tipare ale utilizatorilor si sa recomande cadouri pe bazaacestor informatii

Figura 58 Diagrama bazei de date pentru doi utilizatori

Un alt avantaj al acestui tip de baza de date este faptul ca datele nu sunt duplicateın baza de date Spre exemplu daca mai multi utilizatori au ca locatie acelasi oras nu secreaza cate un nod cu acea locatie de mai multe ori ci acel unic nod va avea cate o relatiecu fiecare utilizator care are ca locatie acel oras

In concluzie structura bazei de date a fost aleasa ın acest fel datorita tipului apli-catiei adica asemanatoare cu o retea sociala si datorita implementarii simple a unui sistemde recomandare pe o asemenea baza de date

53 Fluxul pentru diferite operatii

Pentru aplicatie cele mai importante cazuri de utilizare sunt salvarea informati-ilor despre utilizator primite de la Facebook pentru crearea unui profil si recomandareacadourilor pentru un utilizator al aplicatiei Din aceasta cauza cele doua cazuri de utilizarevor fi prezentate mai ın detaliu ın continuare

43

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 35: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

447 Git

Git 8 este un sistem de control a versionarii pentru urmarirea modificarilor ın fisierelede pe computer si coordonarea activitatii asupra acestor fisiere ın randul mai multor per-soane Este utilizat ın principal pentru gestionarea codului sursa ın dezvoltarea de softwaredar poate fi folosit pentru a urmari schimbarile ın orice set de fisiere

Avantaje ale Git

bull Modelul distribuit numai ceea ce se doreste se face publicbull Branching-ul si merging-ul sunt usoarebull Fluxul de lucru este flexibilbull Integritatea datelor este asigurata Deoarece GIT utilizeaza arbori SHA1 coruperea

datelor din motive externe poate fi usor detectatabull Rapid Git este foarte rapid chiar si ın comparatie cu alte sisteme de control a

versionarii

Am folosit Git pentru a avea la proiect un back-up ın caz ca se ıntampla ceva cuproiectul salvat pe calculator

45 Arhitectura conceptuala

In figura 45 este prezentata arhitectura conceptuala a sistemului Acesta este ım-partit ın doua mari parti backend-ul si frontend-ul care comunica ıntre ele si ısi trimitinformatii

Se poate observa ca baza de date este de tip graf mai exact Neo4j si comunica cubackend-ul pentru a putea lucra cu datele stocate Backend-ul este structurat pe nivelefiecare cu un diferit rol si care trebuie parcurs pentru a procesa datele din interfata ınbaza de date Cele trei nivele sunt cel de Repository cel de Service si cel ControllerToate interogarile venite din interfata utilizator ajung ın nivelul de Controller Dupa ceinterogarile trec de securitatea sistemului ajung ın nivelul de Service Acolo se proceseazasi se afla partea de logica a aplicatiei Pentru a interactiona cu baza de date din Servicese apeleaza metodele din nivelul de Repository

In continuare backend-ul comunica prin protocolul HTTP cu interfata grafica cucare interactioneaza clientii aplicatiei Interfata este scrisa ın Ext JS si are o parte de Viewsi o parte de Controller care este cea care comunica cu backend-ul

Pentru partea de autentificare sistemul interactioneaza cu API-ul de la Facebookde la care ia dupa autentificare un access token Cu ajutorul acestuia ia dupa aceea datelenecesare pentru a putea crea un profil utilizatorului

8httpsguidesgithubcomintroductiongit-handbook

30

Figura 45 Arhitectura conceptuala

31

Capitolul 5

Proiectare de Detaliu siImplementare

In acest capitol vor fi prezentate detalii de implementare ale sistemului de recoman-dare incluzand o ımpartire al acestuia ın componentele care ıl cuprind

Obiectivul este de a prezenta arhitectura si modul de implementare al aplicatieipe baza datelor descoperite ın studiul bibliografic de la capitolul trei si cu tehnologiilehotarate la capitolul patru Pe langa asta va fi prezentata si structura bazei de date sideciziile luate pentru securitatea aplicatiei

51 Arhitectura sistemului

Din punctul de vedere al arhitecturii aplicatia se poate considera ca este alcatuitadin patru mari componente

1 API-ul de la Facebook2 Aplicatia client care reprezinta interfata grafica a aplicatiei3 Aplicatia server adica backendul aplicatiei si partea ın care se afla partea de rdquobusiness

logicrdquo4 Baza de date

Partea componenta reprezentata de API-ul de la Facebook este doar o componentacu care aplicatia se integreaza si pe care aceasta o foloseste In interactiunea cu ea interfatada o cerere de autentificare apare o fereastra de la Facebook ın care utilizatorul introducecredentialele de la API-ul de Facebook se primeste ınapoi un access token si cu ajutorulacestuia face o cerere pentru a primi datele personale ale utilizatorului pentru creeareaprofilului utilizator

Urmatoarea parte a aplicatiei este interfata utilizator frontend-ul care reprezintapartea cu care utilizatorul interactioneaza si locul unde ıi sunt afisate informatiile

Cererile din interfata ajung ın a treia parte componenta a sistemului partea deserver adica backend-ul aplicatiei Acolo toate cererile sunt citite si procesate iar raspun-

33

sul lor este trimis la interfata utilizator Aceasta este partea care reprezinta rdquogandireardquoaplicatiei Aceea este componenta care face legatura ıntre cererile utilizatorului din inter-fata si datele stocate ın baza de date

Ultima componenta a aplicatiei o reprezinta baza de date care are ca rol sa stochezedatele despre utilizatori produse si comenzi Ea este o baza de date sub forma de grafde tipul Neo4j Acolo se salveaza entitatile aplicatiei sub forma de noduri si dependenteleıntre acestea sub forma de relatii ıntre aceste noduri

Figura 51 Diagrama de rdquodeploymentrdquo

In figura 51 este prezentata diagrama de rdquodeploymentrdquo a sistemului cu cele patrucomponente ale sistemului Aplicatia client comunica cu API-ul de la Facebook prin pro-tocolul securizat HTTPS cu backend-ul prin protocolul HTTP iar backend-ul cu baza dedate prin JDBC

Aplicatia a putut fi ımpartita ın aceste componente separate deoarece fiecare dintreele poate functiona independent de celelalte comunica cu ele doar prin mesaje Din acestmotiv locul unde ruleaza acestea pot sa fie pe servere diferite In plus daca aplicatiaar fi pusa pe servere pentru utilizatori ar putea fi mai multe servere pe care ruleaza ocomponenta si prin rdquoload balancingrdquo sa se trimita cererile ımpartite ıntre ele

Cum astfel componentele nu depind foarte mult unele de altele si pot rula faraa le interesa de unde le sunt trimise cererile este arhitectura cea mai corecta deoarecedefectarea sau o posibila eroare la una din ele nu o influenteaza cu nimic pe o alta Dacatoate ar rula pe acelasi server o eventuala defectiune a acestuia ar ınsemna o defectiune aıntregului sistem Insa daca exista mai multe noduri si se afla pe servere diferite pot doartoate cererile sa fie redirectionate spre un nod care functioneaza si aplicatia sa functionezepentru clienti la fel ca ınainte

34

Un alt avantaj al arhitecturii ar fi faptul ca la o lansare viitoare catre clienti se poatelansa doar componenta la care s-au facut modificari De asemenea aplicatia ar putea aveape viitor si o componenta mobila Iar cum serverul e independent poate fi acelasi serverfolosit de o alta aplicatie client

511 Arhitectura componentei backend

Arhitectura backend-ului este si ea ımpartita ın mai multe pachete pentru o maibuna structura si pentru o cat mai mica dependenta ıntre diversele componente Astfelcuplarea este minima ıntre clase si eventualele modificari ulterioare pot fi mai usor defacut

Serverul a fost implementat ın Java cu ajutorul framework-ului Spring Boot iarmediul de dezvoltare folosit a fost Intellij IDEA

Din punctul de vedere al ımpartirii arhitectura serverului aplicatiei este structurataın patru pachete si o clasa ın afara acestora Acea clasa este rdquomainrdquo-ul aplicatiei este parteacare trebuie rulata pentru a porni serverul Din cauza ca este o aplicatie Spring Boot si nuuna String singura adnotare necesara pentru a sti ca aceea este clasa rdquoradacinardquoa aplicatieieste SpringBootApplication

Cele patru pachete ale serverului sunt1 Cel de domeniu (domain) cu clasele POJO care reprezinta entitatile din baza de

date2 Cel de rdquomagazierdquo (repositories) care este cel care face direct actiunile ın baza de date3 Cel de serviciu (services) ın care se afla partea de logica a ıntregii aplicatii4 Cel de web ın care se afla clasele de rdquocontrollerrdquo

Figura 52 Diagrama de pachete pentru backend

35

Ca si dependente nivelul de web ıl foloseste pe cel de seviciu cel de serviciu ılfoloseste pe cel de rdquomagazierdquo iar clasele din pachetul de domeniu sunt folosite ın toatecelelalte pachete

In continuare voi prezenta pe rand fiecare nivel al serverului adica fiecare pachet

Figura 53 Diagrama de clase pentru pachetul rdquodomainrdquo

36

Nivelul de domeniu (domain) este alcatuit ın primul rand din clasele care suntentitati ın baza de date Acestea sunt reprezentate de toate clasele ce stocheaza informatiidespre utilizatori si despre produse si comenzi Pe langa informatiile personale despre unutilizator de genul numelui email-ului sau data nasterii care sunt salvate ın entitateapersoana se stocheaza despre utilizator ın clase diferite informatii de genul locului undelocuieste locul unde a copilarit locurilor unde a facut scoala locului unde lucreaza sau celmai important pentru aplicatia aceasta lucrurilor care ıi plac In afara acestor informatiidespre utilizatori sunt si clase cu informatiile despre prieteni despre produse sau desprecomenzi

Din cauza faptului ca aplicatia este de tipul unei retele sociale ın care exista prieteniiıntre persoane exista dependente ıntre toate entitatile aplicatiei Acesta este si motivulpentru care am ales baza de date sub forma de graf pe care sa se mapeze toate acesteentitati sub forma de noduri si toate aceste dependente sub forma de relatii

In pachetul de domeniu se afla si trei subpachete Unul dintre ele este pentruclasele folosite pentru a trata erorile aplicatiei In interiorul acestui pachet se afla douaclase pentru eroare si o exceptie cea folosita ın cazul ın care nu se gaseste ceea ce doresteutilizatorul Pe langa asta este clasa care are ca obiect raspunsul dat de sistem ın cazulunei erori la server Aceasta contine ın interiorul sau pe langa codul erorii si detalii despreeroarea trimisa Aceasta lista de detalii e reprezentata de obiectele de tipul celei de-a treiaclase din pachetul acesta

Celelalte doua subpachete aflate ın acest nivel sunt cele care contin clasele specialede cerere sau raspuns care au ajutat la maparea acestora mai bine In multe cazuri nua fost necesara trimiterea la interfata utilizator a tuturor informatiilor stocate despre oentitate si de aceea am ales sa creez ın aceste cazuri un obiect auxiliar care sa fie folositpe post de raspuns

Figura 54 Diagrama de clase pentru pachetul rdquorepositoriesrdquo

37

Cel de-al doilea nivel al aplicatiei backend este cel de rdquomagazierdquo (repositories) carecontine doar interfete de tip rdquoRepositoryrdquo

Aceste interfete sunt cele care fac operatiile directe asupra entitatilor din baza dedate

Unele interfete doar extind interfata care are deja implementate metodele CRUDsi din acest motiv nu au metode suplimentare iar altele au si metode ın plus care au carol sa execute interogari mai complexe asupra bazei de date In acele metode se pot scrieinterogarile ın Cypher pentru a putea primi informatii despre mai multe noduri sau desprerelatiile dintre acestea sau si pentru a returna doar anumite rezultate care ındeplinescanumite conditii In felul acesta a fost implementata si cererea de oferire a recomandarilorIn acel caz sistemul returneaza produsele care au ın descriere unul din lucrurile care se aflaın lista de obiecte sau servicii primite de la Facebook ca ıi plac utilizatorului

Nivelul de rdquoRepositoryrdquo este folosit direct de cel de-al treiea nivel cel de servi-ciu Acesta este nivelul la care se executa logica aplicatiei unde se comanda modul defunctionare al ıntregii aplicatii

Figura 55 Diagrama de clase pentru pachetul rdquoservicesrdquo

Pe acest nivel ajung toate cererile din server dupa ce trec de verificarile de securitateIn acest pachet se afla si clasa de securitate care face verificarile necesare In aceasta clasaexista o metoda ce se apeleaza la prima cerere cea de salvare a datelor de la Facebookdespre utilizator si care codifica id-ul utilizatorului si ıl trimite pe raspuns ınapoi interfeteiPe langa asta ın acea clasa se afla si o metoda care verifica faptul ca id-ul codificat esteal unui utilizator cu rol corespunzator pentru a face acea cerere

In plus ın acest pachet se afla si toate celelalte clase care fac diverse operatii pedatele din baza de date si dau raspunsuri cererilor din interfata Aici se afla logica care

38

comanda actiunile asupra utilizatorilor asupra prietenilor acestora asupra produselor siasupra comenzilor

Ultima clasa a acestui nivel este cea care se ocupa de trimiterea de email-uri Incazul ın care se face o noua comanda de catre un utilizator toti producatorii produselor depe comanda sunt notificati despre produsele lor pe care le doreste utilizatorul Din serviciulde comanda se apeleaza serviciul de email pentru fiecare producator din lista celor care auproduse care se afla pe lista comenzii utilizatorului

Ultimul si cel mai aproape de interfata utilizator este nivelul de web Acolo se aflatoate clasele de rdquoControllerrdquo ale aplicatiei server

Figura 56 Diagrama de clase pentru pachetul rdquowebrdquo

Toate cererile din interfata utilizator ıncearca sa se mapeze pe rutele declarate ınclase pentru a fi procesate ın metoda corespunzatoare Toata aceasta parte este foarteusor de implementat si mai ales foarte lizibil pentru programatori datorita adnotarilor dinJava Cu ajutorul acestora trebuie doar specificat care este numele URL-ului cererii careeste tipul de obiect asteptat si daca se trimite ca rdquoquery stringrdquo pe URL sau ın interiorulcorpului cererii si tipul raspunsului Pentru fiecare cerere care nu este apelata ın parteaneautentificata a utilizatorului primul lucru care se apeleaza este metoda de securitatepentru a verifica rolul si id-ul utilizatorului Daca din punctul de vedere al securitatii totuleste ın regula se apeleaza metoda corespunzatoare din pachetul de serviciu

39

O singura clasa este diferita de restul ın pachetul de controller si aceea este clasa deeroare Acolo se mapeaza erorile aparute ın timpul cererii si se trimite ınapoi ın interfatagrafica un raspuns cu cod de eroare specific nu numai 500 Generic Application Exceptioncum ar trimite fara aceasta clasa si cu detalii despre motivul aparitiei erorii

Datorita folosirii adnotarilor din java nu a fost necesara folosirea unor rdquodesignpatternrdquo-uri ın sistem De exemplu pentru a folosi ın nivelul de web ceva din pachetulde servicii trebuia doar acel obiect sa aiba adnotarea Autowired si se ınlocuieste atatfolosirea rdquodesign patternrdquo-ului Singleton cat si a celui de Factory Acel obiect nu trebuiecreat sau initializat se face asta implicit datorita adnotarii si de asemenea este folositapeste tot aceeasi instanta

In concluzie toate cererile venite din interfata grafica ajung ın nivelul de rdquocontrollerrdquode unde sunt trimise la cel de rdquoservicerdquopentru a fi procesate si facute eventualele modificarinecesare ın baza de date ca apoi raspunsul sa fie trimis ınapoi spre aplicatia client pentruafisare

512 Arhitectura componentei frontend

A doua componenta implementata a sistemului este aplicatia client frontend-ulAceasta a fost scrisa ın Java Script cu ajutorul framework-ului Ext JS compilarea

se face cu ajutorul Sencha CMD si mediul de implementare a fost IntelliJ IdeaCu ajutorul framework-ului Ext JS se scriu componente care apoi se initializeaza

unele pe altele Aplicatia porneste cu fisierul Applicationjs care este un fel de rdquomainrdquopentru aplicatie Aceasta initializeaza alte componente care la randul lor includ altecomponente si tot asa Structura poate fi foarte usor comparata cu una arborescenta dinacest punct de vedere

Framework-ul a fost creat sa functioneze ın felul acesta pentru ca scopul componen-telor este sa fie scrise ın asa fel ıncat sa poata pe viitor sa fie utilizate din nou Una dindorintele majore ın programare tot timpul este de a se scrie cod ıntr-o maniera ın care safie cat mai reutilizabil Iar framework-ul Ext JS exact asta ıncearca

Arhitectura aplicatiei client se gaseste ın figura 57 si este la randul ei ımpartita ınpachete ca si cea de server Similar cu pachetul de rdquodomainrdquo de la aplicatia de backendeste pachetul rdquomodelrdquo al interfetei utilizator Aici sunt rdquoclaserdquo care sunt simple POJO sicare sunt apoi folosite ın nivelele urmatoare Sunt mai putine decat clasele din rdquostorerdquodeoarece daca raspunsul de la server nu trebuie procesat nu sunt necesare se pot mapadirect obiectele din rdquostorerdquo pe componentele interfetei utilizator

Urmatorul nivel este cel pe care se afla clasele de rdquostorerdquo Acestea sunt cele careexecuta cererea spre backend si face legatura ıntre client si server Daca are o clasa derdquomodelrdquodeclarata atunci populeaza acel obiect cu datele primite de la server iar ın cazul ıncare nu este declarat un model se trimit datele exact asa cum s-au primit la nivelul urmatorde rdquoviewrdquo Acest nivel seamana din punct de vedere al functiei cu cel de rdquorepositoryrdquo de laaplicatia server deoarece ambele au rol de legatura Aceea facea legatura ıntre aplicatiesi baza de date si aceasta face legatura ıntre aplicatia client si aplicatia server

40

Figura 57 Diagrama de clase pentru aplicatia web

Cel de-al treilea pachet al aplicatiei este cel de rdquoviewrdquo In acest pachet se afla claselecare alcatuiesc partea vizuala a aplicatiei La randul ei si aceasta este alcatuita tot dincomponente Aplicatia deschide ın primul rand Main-ul care determina aparitia paginii deHome si afisarea ın meniu a optiunilor posibile ın functie de autentificare si rol Clasele deaici se executa de fapt la deschiderea aplicatiei fiind rdquosingle page applicationrdquo si tot atuncise ıncarca pe pagina componentele Ca si arhitectura a pachetului acesta este ımpartit larandul sau ın subpachete Pentru o mai buna organizare exista patru subpachete cateunul pentru fiecare tip de utilizator In felul acesta toate rdquoviewrdquo-urile care sunt specificeunui utilizator cu un anumit rol se afla ın acelasi subpachet

Cele patru subpachete existente ın pachetul rdquoviewrdquo sunt

1 Pachetul rdquomainrdquo care cuprinde rdquoviewrdquo-urile care se afla ın partea neautentificata aaplicatiei

2 Pachetul rdquoclientrdquo continand rdquoviewrdquo-urile pe care le poate accesa un utilizator simplu3 Pachetul rdquoproducerrdquo specific actiunilor unui utilizator care are rol de producator4 Pachetul rdquoadminrdquo care contine toate rdquoviewrdquo-urile care ıi apar unui utilizator care este

administrator al aplicatiei

Ultimul pachet si nivel al aplicatiei client este cel de rdquocontrollerrdquo In acest pachet

41

se afla clasele care fac actiunile din interfata grafica In timp ce pachetul rdquoviewrdquo continedoar partea grafica a aplicatiei adica modul ın care aceasta trebuie sa arate pachetulrdquocontrollerrdquo contine actiunea acestora modul ın care aplicatia trebuie sa functioneze

Ca si arhitectura si acest pachet a fost ımpartit la randul lui tot ın cele patrusubpachete ca si pachetul rdquoviewrdquo adica rdquomainrdquo rdquoclientrdquo rdquoproducerrdquo si rdquoadminrdquo In pluspentru a fi usor de gasit ce clasa de rdquocontrollerrdquo apartine carui rdquoviewrdquo am ales ca cele douasa aiba acelasi nume In felul acesta daca se doreste sa se gaseasca actiunile unui rdquoviewrdquose poate cauta dupa o clasa cu acelasi nume ın pachetul rdquocontrollerrdquo Numarul claselor dinacest pachet este mai mic decat cel al claselor din rdquoviewrdquo deoarece nu toate paginile dininterfata au actiuni suplimentare Daca singura actiune este ıncarcarea paginii cu date dela server adica doar o actiune simpla de GET datele se ıncarca cu ajutorul rdquostorerdquo-ului laıncarcarea paginii si nu este necesara nici o actiune suplimentara Paginile pe care se potface si actiuni de alt gen sau se deschid noi ferestre au nevoie de clase de rdquocontrollerrdquo

In concluzie arhitectura aplicatiei client este una bazata pe componente care ıncearcasa foloseasca cat mai multe clase reutilizabile

52 Structura bazei de date

Baza de date a aplicatiei este de tip graf de tipul Neo4j Pentru utilizare exista unprogram numit Neo4j ce trebuie instalat Acest program are si o interfata grafica ın carese pot vizualiza datele sub forma grafica si ın care se pot scrie de asemenea si interogariın limbajul acestei baze de date adica Cypher

Fiind o baza de date sub forma de graf datele stocate sunt salvate ın structurade date sub forma de noduri si relatii Entitatile din pachetul de domeniu din aplicatiabackend se gasesc ın baza de date sub forma unor noduri iar dependentele dintre nodurise mapeaza ın baza de date sub forma unor relatii Un element diferit fata de alte tipuride baze de date este faptul ca pe relatiile dintre noduri se pot salva atribute cum este ınaplicatie cazul pentru prieteniile dintre persoane In cazul acestora pe relatia dintre nodurise salveaza daca prietenia a fost sau nu acceptata

Pentru fiecare clasa POJO din aplicatia server clasa ce are doar metodele get si setsi se afla ın pachetul domain exista cate un tip de nod diferit ın baza de date cum estesi marcat ın diferite culori ın figura 58 Fiecare tip de nod are atributele proprii care potlua valori sau pot fi nule Iar fiecare obiect din Java reprezinta un nod diferit ın baza dedate

Neo4j a fost cea mai buna optiune pentru baza de date pentru ca aplicatia poate ficonsiderata o retea sociala Acest lucru se datoreaza relatiilor de prietenie dintre persoanesi a multiplelor relatii ıntre noduri Toate nodurile se afla ın acceasi componenta conexadeci nu exista noduri izolate care sa nu aiba nici o legatura cu nici un alt nod

Datorita acestei structuri a bazei de date este posibila implementarea cererii derecomandare ca o simpla interogare ın baza de date aceasta fiind cea mai simpla metodade implementare a unui sistem de genul acesta una mult mai complexa ar fi fost un

42

algoritm de ınvatare care sa ınvete tipare ale utilizatorilor si sa recomande cadouri pe bazaacestor informatii

Figura 58 Diagrama bazei de date pentru doi utilizatori

Un alt avantaj al acestui tip de baza de date este faptul ca datele nu sunt duplicateın baza de date Spre exemplu daca mai multi utilizatori au ca locatie acelasi oras nu secreaza cate un nod cu acea locatie de mai multe ori ci acel unic nod va avea cate o relatiecu fiecare utilizator care are ca locatie acel oras

In concluzie structura bazei de date a fost aleasa ın acest fel datorita tipului apli-catiei adica asemanatoare cu o retea sociala si datorita implementarii simple a unui sistemde recomandare pe o asemenea baza de date

53 Fluxul pentru diferite operatii

Pentru aplicatie cele mai importante cazuri de utilizare sunt salvarea informati-ilor despre utilizator primite de la Facebook pentru crearea unui profil si recomandareacadourilor pentru un utilizator al aplicatiei Din aceasta cauza cele doua cazuri de utilizarevor fi prezentate mai ın detaliu ın continuare

43

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 36: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

Figura 45 Arhitectura conceptuala

31

Capitolul 5

Proiectare de Detaliu siImplementare

In acest capitol vor fi prezentate detalii de implementare ale sistemului de recoman-dare incluzand o ımpartire al acestuia ın componentele care ıl cuprind

Obiectivul este de a prezenta arhitectura si modul de implementare al aplicatieipe baza datelor descoperite ın studiul bibliografic de la capitolul trei si cu tehnologiilehotarate la capitolul patru Pe langa asta va fi prezentata si structura bazei de date sideciziile luate pentru securitatea aplicatiei

51 Arhitectura sistemului

Din punctul de vedere al arhitecturii aplicatia se poate considera ca este alcatuitadin patru mari componente

1 API-ul de la Facebook2 Aplicatia client care reprezinta interfata grafica a aplicatiei3 Aplicatia server adica backendul aplicatiei si partea ın care se afla partea de rdquobusiness

logicrdquo4 Baza de date

Partea componenta reprezentata de API-ul de la Facebook este doar o componentacu care aplicatia se integreaza si pe care aceasta o foloseste In interactiunea cu ea interfatada o cerere de autentificare apare o fereastra de la Facebook ın care utilizatorul introducecredentialele de la API-ul de Facebook se primeste ınapoi un access token si cu ajutorulacestuia face o cerere pentru a primi datele personale ale utilizatorului pentru creeareaprofilului utilizator

Urmatoarea parte a aplicatiei este interfata utilizator frontend-ul care reprezintapartea cu care utilizatorul interactioneaza si locul unde ıi sunt afisate informatiile

Cererile din interfata ajung ın a treia parte componenta a sistemului partea deserver adica backend-ul aplicatiei Acolo toate cererile sunt citite si procesate iar raspun-

33

sul lor este trimis la interfata utilizator Aceasta este partea care reprezinta rdquogandireardquoaplicatiei Aceea este componenta care face legatura ıntre cererile utilizatorului din inter-fata si datele stocate ın baza de date

Ultima componenta a aplicatiei o reprezinta baza de date care are ca rol sa stochezedatele despre utilizatori produse si comenzi Ea este o baza de date sub forma de grafde tipul Neo4j Acolo se salveaza entitatile aplicatiei sub forma de noduri si dependenteleıntre acestea sub forma de relatii ıntre aceste noduri

Figura 51 Diagrama de rdquodeploymentrdquo

In figura 51 este prezentata diagrama de rdquodeploymentrdquo a sistemului cu cele patrucomponente ale sistemului Aplicatia client comunica cu API-ul de la Facebook prin pro-tocolul securizat HTTPS cu backend-ul prin protocolul HTTP iar backend-ul cu baza dedate prin JDBC

Aplicatia a putut fi ımpartita ın aceste componente separate deoarece fiecare dintreele poate functiona independent de celelalte comunica cu ele doar prin mesaje Din acestmotiv locul unde ruleaza acestea pot sa fie pe servere diferite In plus daca aplicatiaar fi pusa pe servere pentru utilizatori ar putea fi mai multe servere pe care ruleaza ocomponenta si prin rdquoload balancingrdquo sa se trimita cererile ımpartite ıntre ele

Cum astfel componentele nu depind foarte mult unele de altele si pot rula faraa le interesa de unde le sunt trimise cererile este arhitectura cea mai corecta deoarecedefectarea sau o posibila eroare la una din ele nu o influenteaza cu nimic pe o alta Dacatoate ar rula pe acelasi server o eventuala defectiune a acestuia ar ınsemna o defectiune aıntregului sistem Insa daca exista mai multe noduri si se afla pe servere diferite pot doartoate cererile sa fie redirectionate spre un nod care functioneaza si aplicatia sa functionezepentru clienti la fel ca ınainte

34

Un alt avantaj al arhitecturii ar fi faptul ca la o lansare viitoare catre clienti se poatelansa doar componenta la care s-au facut modificari De asemenea aplicatia ar putea aveape viitor si o componenta mobila Iar cum serverul e independent poate fi acelasi serverfolosit de o alta aplicatie client

511 Arhitectura componentei backend

Arhitectura backend-ului este si ea ımpartita ın mai multe pachete pentru o maibuna structura si pentru o cat mai mica dependenta ıntre diversele componente Astfelcuplarea este minima ıntre clase si eventualele modificari ulterioare pot fi mai usor defacut

Serverul a fost implementat ın Java cu ajutorul framework-ului Spring Boot iarmediul de dezvoltare folosit a fost Intellij IDEA

Din punctul de vedere al ımpartirii arhitectura serverului aplicatiei este structurataın patru pachete si o clasa ın afara acestora Acea clasa este rdquomainrdquo-ul aplicatiei este parteacare trebuie rulata pentru a porni serverul Din cauza ca este o aplicatie Spring Boot si nuuna String singura adnotare necesara pentru a sti ca aceea este clasa rdquoradacinardquoa aplicatieieste SpringBootApplication

Cele patru pachete ale serverului sunt1 Cel de domeniu (domain) cu clasele POJO care reprezinta entitatile din baza de

date2 Cel de rdquomagazierdquo (repositories) care este cel care face direct actiunile ın baza de date3 Cel de serviciu (services) ın care se afla partea de logica a ıntregii aplicatii4 Cel de web ın care se afla clasele de rdquocontrollerrdquo

Figura 52 Diagrama de pachete pentru backend

35

Ca si dependente nivelul de web ıl foloseste pe cel de seviciu cel de serviciu ılfoloseste pe cel de rdquomagazierdquo iar clasele din pachetul de domeniu sunt folosite ın toatecelelalte pachete

In continuare voi prezenta pe rand fiecare nivel al serverului adica fiecare pachet

Figura 53 Diagrama de clase pentru pachetul rdquodomainrdquo

36

Nivelul de domeniu (domain) este alcatuit ın primul rand din clasele care suntentitati ın baza de date Acestea sunt reprezentate de toate clasele ce stocheaza informatiidespre utilizatori si despre produse si comenzi Pe langa informatiile personale despre unutilizator de genul numelui email-ului sau data nasterii care sunt salvate ın entitateapersoana se stocheaza despre utilizator ın clase diferite informatii de genul locului undelocuieste locul unde a copilarit locurilor unde a facut scoala locului unde lucreaza sau celmai important pentru aplicatia aceasta lucrurilor care ıi plac In afara acestor informatiidespre utilizatori sunt si clase cu informatiile despre prieteni despre produse sau desprecomenzi

Din cauza faptului ca aplicatia este de tipul unei retele sociale ın care exista prieteniiıntre persoane exista dependente ıntre toate entitatile aplicatiei Acesta este si motivulpentru care am ales baza de date sub forma de graf pe care sa se mapeze toate acesteentitati sub forma de noduri si toate aceste dependente sub forma de relatii

In pachetul de domeniu se afla si trei subpachete Unul dintre ele este pentruclasele folosite pentru a trata erorile aplicatiei In interiorul acestui pachet se afla douaclase pentru eroare si o exceptie cea folosita ın cazul ın care nu se gaseste ceea ce doresteutilizatorul Pe langa asta este clasa care are ca obiect raspunsul dat de sistem ın cazulunei erori la server Aceasta contine ın interiorul sau pe langa codul erorii si detalii despreeroarea trimisa Aceasta lista de detalii e reprezentata de obiectele de tipul celei de-a treiaclase din pachetul acesta

Celelalte doua subpachete aflate ın acest nivel sunt cele care contin clasele specialede cerere sau raspuns care au ajutat la maparea acestora mai bine In multe cazuri nua fost necesara trimiterea la interfata utilizator a tuturor informatiilor stocate despre oentitate si de aceea am ales sa creez ın aceste cazuri un obiect auxiliar care sa fie folositpe post de raspuns

Figura 54 Diagrama de clase pentru pachetul rdquorepositoriesrdquo

37

Cel de-al doilea nivel al aplicatiei backend este cel de rdquomagazierdquo (repositories) carecontine doar interfete de tip rdquoRepositoryrdquo

Aceste interfete sunt cele care fac operatiile directe asupra entitatilor din baza dedate

Unele interfete doar extind interfata care are deja implementate metodele CRUDsi din acest motiv nu au metode suplimentare iar altele au si metode ın plus care au carol sa execute interogari mai complexe asupra bazei de date In acele metode se pot scrieinterogarile ın Cypher pentru a putea primi informatii despre mai multe noduri sau desprerelatiile dintre acestea sau si pentru a returna doar anumite rezultate care ındeplinescanumite conditii In felul acesta a fost implementata si cererea de oferire a recomandarilorIn acel caz sistemul returneaza produsele care au ın descriere unul din lucrurile care se aflaın lista de obiecte sau servicii primite de la Facebook ca ıi plac utilizatorului

Nivelul de rdquoRepositoryrdquo este folosit direct de cel de-al treiea nivel cel de servi-ciu Acesta este nivelul la care se executa logica aplicatiei unde se comanda modul defunctionare al ıntregii aplicatii

Figura 55 Diagrama de clase pentru pachetul rdquoservicesrdquo

Pe acest nivel ajung toate cererile din server dupa ce trec de verificarile de securitateIn acest pachet se afla si clasa de securitate care face verificarile necesare In aceasta clasaexista o metoda ce se apeleaza la prima cerere cea de salvare a datelor de la Facebookdespre utilizator si care codifica id-ul utilizatorului si ıl trimite pe raspuns ınapoi interfeteiPe langa asta ın acea clasa se afla si o metoda care verifica faptul ca id-ul codificat esteal unui utilizator cu rol corespunzator pentru a face acea cerere

In plus ın acest pachet se afla si toate celelalte clase care fac diverse operatii pedatele din baza de date si dau raspunsuri cererilor din interfata Aici se afla logica care

38

comanda actiunile asupra utilizatorilor asupra prietenilor acestora asupra produselor siasupra comenzilor

Ultima clasa a acestui nivel este cea care se ocupa de trimiterea de email-uri Incazul ın care se face o noua comanda de catre un utilizator toti producatorii produselor depe comanda sunt notificati despre produsele lor pe care le doreste utilizatorul Din serviciulde comanda se apeleaza serviciul de email pentru fiecare producator din lista celor care auproduse care se afla pe lista comenzii utilizatorului

Ultimul si cel mai aproape de interfata utilizator este nivelul de web Acolo se aflatoate clasele de rdquoControllerrdquo ale aplicatiei server

Figura 56 Diagrama de clase pentru pachetul rdquowebrdquo

Toate cererile din interfata utilizator ıncearca sa se mapeze pe rutele declarate ınclase pentru a fi procesate ın metoda corespunzatoare Toata aceasta parte este foarteusor de implementat si mai ales foarte lizibil pentru programatori datorita adnotarilor dinJava Cu ajutorul acestora trebuie doar specificat care este numele URL-ului cererii careeste tipul de obiect asteptat si daca se trimite ca rdquoquery stringrdquo pe URL sau ın interiorulcorpului cererii si tipul raspunsului Pentru fiecare cerere care nu este apelata ın parteaneautentificata a utilizatorului primul lucru care se apeleaza este metoda de securitatepentru a verifica rolul si id-ul utilizatorului Daca din punctul de vedere al securitatii totuleste ın regula se apeleaza metoda corespunzatoare din pachetul de serviciu

39

O singura clasa este diferita de restul ın pachetul de controller si aceea este clasa deeroare Acolo se mapeaza erorile aparute ın timpul cererii si se trimite ınapoi ın interfatagrafica un raspuns cu cod de eroare specific nu numai 500 Generic Application Exceptioncum ar trimite fara aceasta clasa si cu detalii despre motivul aparitiei erorii

Datorita folosirii adnotarilor din java nu a fost necesara folosirea unor rdquodesignpatternrdquo-uri ın sistem De exemplu pentru a folosi ın nivelul de web ceva din pachetulde servicii trebuia doar acel obiect sa aiba adnotarea Autowired si se ınlocuieste atatfolosirea rdquodesign patternrdquo-ului Singleton cat si a celui de Factory Acel obiect nu trebuiecreat sau initializat se face asta implicit datorita adnotarii si de asemenea este folositapeste tot aceeasi instanta

In concluzie toate cererile venite din interfata grafica ajung ın nivelul de rdquocontrollerrdquode unde sunt trimise la cel de rdquoservicerdquopentru a fi procesate si facute eventualele modificarinecesare ın baza de date ca apoi raspunsul sa fie trimis ınapoi spre aplicatia client pentruafisare

512 Arhitectura componentei frontend

A doua componenta implementata a sistemului este aplicatia client frontend-ulAceasta a fost scrisa ın Java Script cu ajutorul framework-ului Ext JS compilarea

se face cu ajutorul Sencha CMD si mediul de implementare a fost IntelliJ IdeaCu ajutorul framework-ului Ext JS se scriu componente care apoi se initializeaza

unele pe altele Aplicatia porneste cu fisierul Applicationjs care este un fel de rdquomainrdquopentru aplicatie Aceasta initializeaza alte componente care la randul lor includ altecomponente si tot asa Structura poate fi foarte usor comparata cu una arborescenta dinacest punct de vedere

Framework-ul a fost creat sa functioneze ın felul acesta pentru ca scopul componen-telor este sa fie scrise ın asa fel ıncat sa poata pe viitor sa fie utilizate din nou Una dindorintele majore ın programare tot timpul este de a se scrie cod ıntr-o maniera ın care safie cat mai reutilizabil Iar framework-ul Ext JS exact asta ıncearca

Arhitectura aplicatiei client se gaseste ın figura 57 si este la randul ei ımpartita ınpachete ca si cea de server Similar cu pachetul de rdquodomainrdquo de la aplicatia de backendeste pachetul rdquomodelrdquo al interfetei utilizator Aici sunt rdquoclaserdquo care sunt simple POJO sicare sunt apoi folosite ın nivelele urmatoare Sunt mai putine decat clasele din rdquostorerdquodeoarece daca raspunsul de la server nu trebuie procesat nu sunt necesare se pot mapadirect obiectele din rdquostorerdquo pe componentele interfetei utilizator

Urmatorul nivel este cel pe care se afla clasele de rdquostorerdquo Acestea sunt cele careexecuta cererea spre backend si face legatura ıntre client si server Daca are o clasa derdquomodelrdquodeclarata atunci populeaza acel obiect cu datele primite de la server iar ın cazul ıncare nu este declarat un model se trimit datele exact asa cum s-au primit la nivelul urmatorde rdquoviewrdquo Acest nivel seamana din punct de vedere al functiei cu cel de rdquorepositoryrdquo de laaplicatia server deoarece ambele au rol de legatura Aceea facea legatura ıntre aplicatiesi baza de date si aceasta face legatura ıntre aplicatia client si aplicatia server

40

Figura 57 Diagrama de clase pentru aplicatia web

Cel de-al treilea pachet al aplicatiei este cel de rdquoviewrdquo In acest pachet se afla claselecare alcatuiesc partea vizuala a aplicatiei La randul ei si aceasta este alcatuita tot dincomponente Aplicatia deschide ın primul rand Main-ul care determina aparitia paginii deHome si afisarea ın meniu a optiunilor posibile ın functie de autentificare si rol Clasele deaici se executa de fapt la deschiderea aplicatiei fiind rdquosingle page applicationrdquo si tot atuncise ıncarca pe pagina componentele Ca si arhitectura a pachetului acesta este ımpartit larandul sau ın subpachete Pentru o mai buna organizare exista patru subpachete cateunul pentru fiecare tip de utilizator In felul acesta toate rdquoviewrdquo-urile care sunt specificeunui utilizator cu un anumit rol se afla ın acelasi subpachet

Cele patru subpachete existente ın pachetul rdquoviewrdquo sunt

1 Pachetul rdquomainrdquo care cuprinde rdquoviewrdquo-urile care se afla ın partea neautentificata aaplicatiei

2 Pachetul rdquoclientrdquo continand rdquoviewrdquo-urile pe care le poate accesa un utilizator simplu3 Pachetul rdquoproducerrdquo specific actiunilor unui utilizator care are rol de producator4 Pachetul rdquoadminrdquo care contine toate rdquoviewrdquo-urile care ıi apar unui utilizator care este

administrator al aplicatiei

Ultimul pachet si nivel al aplicatiei client este cel de rdquocontrollerrdquo In acest pachet

41

se afla clasele care fac actiunile din interfata grafica In timp ce pachetul rdquoviewrdquo continedoar partea grafica a aplicatiei adica modul ın care aceasta trebuie sa arate pachetulrdquocontrollerrdquo contine actiunea acestora modul ın care aplicatia trebuie sa functioneze

Ca si arhitectura si acest pachet a fost ımpartit la randul lui tot ın cele patrusubpachete ca si pachetul rdquoviewrdquo adica rdquomainrdquo rdquoclientrdquo rdquoproducerrdquo si rdquoadminrdquo In pluspentru a fi usor de gasit ce clasa de rdquocontrollerrdquo apartine carui rdquoviewrdquo am ales ca cele douasa aiba acelasi nume In felul acesta daca se doreste sa se gaseasca actiunile unui rdquoviewrdquose poate cauta dupa o clasa cu acelasi nume ın pachetul rdquocontrollerrdquo Numarul claselor dinacest pachet este mai mic decat cel al claselor din rdquoviewrdquo deoarece nu toate paginile dininterfata au actiuni suplimentare Daca singura actiune este ıncarcarea paginii cu date dela server adica doar o actiune simpla de GET datele se ıncarca cu ajutorul rdquostorerdquo-ului laıncarcarea paginii si nu este necesara nici o actiune suplimentara Paginile pe care se potface si actiuni de alt gen sau se deschid noi ferestre au nevoie de clase de rdquocontrollerrdquo

In concluzie arhitectura aplicatiei client este una bazata pe componente care ıncearcasa foloseasca cat mai multe clase reutilizabile

52 Structura bazei de date

Baza de date a aplicatiei este de tip graf de tipul Neo4j Pentru utilizare exista unprogram numit Neo4j ce trebuie instalat Acest program are si o interfata grafica ın carese pot vizualiza datele sub forma grafica si ın care se pot scrie de asemenea si interogariın limbajul acestei baze de date adica Cypher

Fiind o baza de date sub forma de graf datele stocate sunt salvate ın structurade date sub forma de noduri si relatii Entitatile din pachetul de domeniu din aplicatiabackend se gasesc ın baza de date sub forma unor noduri iar dependentele dintre nodurise mapeaza ın baza de date sub forma unor relatii Un element diferit fata de alte tipuride baze de date este faptul ca pe relatiile dintre noduri se pot salva atribute cum este ınaplicatie cazul pentru prieteniile dintre persoane In cazul acestora pe relatia dintre nodurise salveaza daca prietenia a fost sau nu acceptata

Pentru fiecare clasa POJO din aplicatia server clasa ce are doar metodele get si setsi se afla ın pachetul domain exista cate un tip de nod diferit ın baza de date cum estesi marcat ın diferite culori ın figura 58 Fiecare tip de nod are atributele proprii care potlua valori sau pot fi nule Iar fiecare obiect din Java reprezinta un nod diferit ın baza dedate

Neo4j a fost cea mai buna optiune pentru baza de date pentru ca aplicatia poate ficonsiderata o retea sociala Acest lucru se datoreaza relatiilor de prietenie dintre persoanesi a multiplelor relatii ıntre noduri Toate nodurile se afla ın acceasi componenta conexadeci nu exista noduri izolate care sa nu aiba nici o legatura cu nici un alt nod

Datorita acestei structuri a bazei de date este posibila implementarea cererii derecomandare ca o simpla interogare ın baza de date aceasta fiind cea mai simpla metodade implementare a unui sistem de genul acesta una mult mai complexa ar fi fost un

42

algoritm de ınvatare care sa ınvete tipare ale utilizatorilor si sa recomande cadouri pe bazaacestor informatii

Figura 58 Diagrama bazei de date pentru doi utilizatori

Un alt avantaj al acestui tip de baza de date este faptul ca datele nu sunt duplicateın baza de date Spre exemplu daca mai multi utilizatori au ca locatie acelasi oras nu secreaza cate un nod cu acea locatie de mai multe ori ci acel unic nod va avea cate o relatiecu fiecare utilizator care are ca locatie acel oras

In concluzie structura bazei de date a fost aleasa ın acest fel datorita tipului apli-catiei adica asemanatoare cu o retea sociala si datorita implementarii simple a unui sistemde recomandare pe o asemenea baza de date

53 Fluxul pentru diferite operatii

Pentru aplicatie cele mai importante cazuri de utilizare sunt salvarea informati-ilor despre utilizator primite de la Facebook pentru crearea unui profil si recomandareacadourilor pentru un utilizator al aplicatiei Din aceasta cauza cele doua cazuri de utilizarevor fi prezentate mai ın detaliu ın continuare

43

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 37: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

Capitolul 5

Proiectare de Detaliu siImplementare

In acest capitol vor fi prezentate detalii de implementare ale sistemului de recoman-dare incluzand o ımpartire al acestuia ın componentele care ıl cuprind

Obiectivul este de a prezenta arhitectura si modul de implementare al aplicatieipe baza datelor descoperite ın studiul bibliografic de la capitolul trei si cu tehnologiilehotarate la capitolul patru Pe langa asta va fi prezentata si structura bazei de date sideciziile luate pentru securitatea aplicatiei

51 Arhitectura sistemului

Din punctul de vedere al arhitecturii aplicatia se poate considera ca este alcatuitadin patru mari componente

1 API-ul de la Facebook2 Aplicatia client care reprezinta interfata grafica a aplicatiei3 Aplicatia server adica backendul aplicatiei si partea ın care se afla partea de rdquobusiness

logicrdquo4 Baza de date

Partea componenta reprezentata de API-ul de la Facebook este doar o componentacu care aplicatia se integreaza si pe care aceasta o foloseste In interactiunea cu ea interfatada o cerere de autentificare apare o fereastra de la Facebook ın care utilizatorul introducecredentialele de la API-ul de Facebook se primeste ınapoi un access token si cu ajutorulacestuia face o cerere pentru a primi datele personale ale utilizatorului pentru creeareaprofilului utilizator

Urmatoarea parte a aplicatiei este interfata utilizator frontend-ul care reprezintapartea cu care utilizatorul interactioneaza si locul unde ıi sunt afisate informatiile

Cererile din interfata ajung ın a treia parte componenta a sistemului partea deserver adica backend-ul aplicatiei Acolo toate cererile sunt citite si procesate iar raspun-

33

sul lor este trimis la interfata utilizator Aceasta este partea care reprezinta rdquogandireardquoaplicatiei Aceea este componenta care face legatura ıntre cererile utilizatorului din inter-fata si datele stocate ın baza de date

Ultima componenta a aplicatiei o reprezinta baza de date care are ca rol sa stochezedatele despre utilizatori produse si comenzi Ea este o baza de date sub forma de grafde tipul Neo4j Acolo se salveaza entitatile aplicatiei sub forma de noduri si dependenteleıntre acestea sub forma de relatii ıntre aceste noduri

Figura 51 Diagrama de rdquodeploymentrdquo

In figura 51 este prezentata diagrama de rdquodeploymentrdquo a sistemului cu cele patrucomponente ale sistemului Aplicatia client comunica cu API-ul de la Facebook prin pro-tocolul securizat HTTPS cu backend-ul prin protocolul HTTP iar backend-ul cu baza dedate prin JDBC

Aplicatia a putut fi ımpartita ın aceste componente separate deoarece fiecare dintreele poate functiona independent de celelalte comunica cu ele doar prin mesaje Din acestmotiv locul unde ruleaza acestea pot sa fie pe servere diferite In plus daca aplicatiaar fi pusa pe servere pentru utilizatori ar putea fi mai multe servere pe care ruleaza ocomponenta si prin rdquoload balancingrdquo sa se trimita cererile ımpartite ıntre ele

Cum astfel componentele nu depind foarte mult unele de altele si pot rula faraa le interesa de unde le sunt trimise cererile este arhitectura cea mai corecta deoarecedefectarea sau o posibila eroare la una din ele nu o influenteaza cu nimic pe o alta Dacatoate ar rula pe acelasi server o eventuala defectiune a acestuia ar ınsemna o defectiune aıntregului sistem Insa daca exista mai multe noduri si se afla pe servere diferite pot doartoate cererile sa fie redirectionate spre un nod care functioneaza si aplicatia sa functionezepentru clienti la fel ca ınainte

34

Un alt avantaj al arhitecturii ar fi faptul ca la o lansare viitoare catre clienti se poatelansa doar componenta la care s-au facut modificari De asemenea aplicatia ar putea aveape viitor si o componenta mobila Iar cum serverul e independent poate fi acelasi serverfolosit de o alta aplicatie client

511 Arhitectura componentei backend

Arhitectura backend-ului este si ea ımpartita ın mai multe pachete pentru o maibuna structura si pentru o cat mai mica dependenta ıntre diversele componente Astfelcuplarea este minima ıntre clase si eventualele modificari ulterioare pot fi mai usor defacut

Serverul a fost implementat ın Java cu ajutorul framework-ului Spring Boot iarmediul de dezvoltare folosit a fost Intellij IDEA

Din punctul de vedere al ımpartirii arhitectura serverului aplicatiei este structurataın patru pachete si o clasa ın afara acestora Acea clasa este rdquomainrdquo-ul aplicatiei este parteacare trebuie rulata pentru a porni serverul Din cauza ca este o aplicatie Spring Boot si nuuna String singura adnotare necesara pentru a sti ca aceea este clasa rdquoradacinardquoa aplicatieieste SpringBootApplication

Cele patru pachete ale serverului sunt1 Cel de domeniu (domain) cu clasele POJO care reprezinta entitatile din baza de

date2 Cel de rdquomagazierdquo (repositories) care este cel care face direct actiunile ın baza de date3 Cel de serviciu (services) ın care se afla partea de logica a ıntregii aplicatii4 Cel de web ın care se afla clasele de rdquocontrollerrdquo

Figura 52 Diagrama de pachete pentru backend

35

Ca si dependente nivelul de web ıl foloseste pe cel de seviciu cel de serviciu ılfoloseste pe cel de rdquomagazierdquo iar clasele din pachetul de domeniu sunt folosite ın toatecelelalte pachete

In continuare voi prezenta pe rand fiecare nivel al serverului adica fiecare pachet

Figura 53 Diagrama de clase pentru pachetul rdquodomainrdquo

36

Nivelul de domeniu (domain) este alcatuit ın primul rand din clasele care suntentitati ın baza de date Acestea sunt reprezentate de toate clasele ce stocheaza informatiidespre utilizatori si despre produse si comenzi Pe langa informatiile personale despre unutilizator de genul numelui email-ului sau data nasterii care sunt salvate ın entitateapersoana se stocheaza despre utilizator ın clase diferite informatii de genul locului undelocuieste locul unde a copilarit locurilor unde a facut scoala locului unde lucreaza sau celmai important pentru aplicatia aceasta lucrurilor care ıi plac In afara acestor informatiidespre utilizatori sunt si clase cu informatiile despre prieteni despre produse sau desprecomenzi

Din cauza faptului ca aplicatia este de tipul unei retele sociale ın care exista prieteniiıntre persoane exista dependente ıntre toate entitatile aplicatiei Acesta este si motivulpentru care am ales baza de date sub forma de graf pe care sa se mapeze toate acesteentitati sub forma de noduri si toate aceste dependente sub forma de relatii

In pachetul de domeniu se afla si trei subpachete Unul dintre ele este pentruclasele folosite pentru a trata erorile aplicatiei In interiorul acestui pachet se afla douaclase pentru eroare si o exceptie cea folosita ın cazul ın care nu se gaseste ceea ce doresteutilizatorul Pe langa asta este clasa care are ca obiect raspunsul dat de sistem ın cazulunei erori la server Aceasta contine ın interiorul sau pe langa codul erorii si detalii despreeroarea trimisa Aceasta lista de detalii e reprezentata de obiectele de tipul celei de-a treiaclase din pachetul acesta

Celelalte doua subpachete aflate ın acest nivel sunt cele care contin clasele specialede cerere sau raspuns care au ajutat la maparea acestora mai bine In multe cazuri nua fost necesara trimiterea la interfata utilizator a tuturor informatiilor stocate despre oentitate si de aceea am ales sa creez ın aceste cazuri un obiect auxiliar care sa fie folositpe post de raspuns

Figura 54 Diagrama de clase pentru pachetul rdquorepositoriesrdquo

37

Cel de-al doilea nivel al aplicatiei backend este cel de rdquomagazierdquo (repositories) carecontine doar interfete de tip rdquoRepositoryrdquo

Aceste interfete sunt cele care fac operatiile directe asupra entitatilor din baza dedate

Unele interfete doar extind interfata care are deja implementate metodele CRUDsi din acest motiv nu au metode suplimentare iar altele au si metode ın plus care au carol sa execute interogari mai complexe asupra bazei de date In acele metode se pot scrieinterogarile ın Cypher pentru a putea primi informatii despre mai multe noduri sau desprerelatiile dintre acestea sau si pentru a returna doar anumite rezultate care ındeplinescanumite conditii In felul acesta a fost implementata si cererea de oferire a recomandarilorIn acel caz sistemul returneaza produsele care au ın descriere unul din lucrurile care se aflaın lista de obiecte sau servicii primite de la Facebook ca ıi plac utilizatorului

Nivelul de rdquoRepositoryrdquo este folosit direct de cel de-al treiea nivel cel de servi-ciu Acesta este nivelul la care se executa logica aplicatiei unde se comanda modul defunctionare al ıntregii aplicatii

Figura 55 Diagrama de clase pentru pachetul rdquoservicesrdquo

Pe acest nivel ajung toate cererile din server dupa ce trec de verificarile de securitateIn acest pachet se afla si clasa de securitate care face verificarile necesare In aceasta clasaexista o metoda ce se apeleaza la prima cerere cea de salvare a datelor de la Facebookdespre utilizator si care codifica id-ul utilizatorului si ıl trimite pe raspuns ınapoi interfeteiPe langa asta ın acea clasa se afla si o metoda care verifica faptul ca id-ul codificat esteal unui utilizator cu rol corespunzator pentru a face acea cerere

In plus ın acest pachet se afla si toate celelalte clase care fac diverse operatii pedatele din baza de date si dau raspunsuri cererilor din interfata Aici se afla logica care

38

comanda actiunile asupra utilizatorilor asupra prietenilor acestora asupra produselor siasupra comenzilor

Ultima clasa a acestui nivel este cea care se ocupa de trimiterea de email-uri Incazul ın care se face o noua comanda de catre un utilizator toti producatorii produselor depe comanda sunt notificati despre produsele lor pe care le doreste utilizatorul Din serviciulde comanda se apeleaza serviciul de email pentru fiecare producator din lista celor care auproduse care se afla pe lista comenzii utilizatorului

Ultimul si cel mai aproape de interfata utilizator este nivelul de web Acolo se aflatoate clasele de rdquoControllerrdquo ale aplicatiei server

Figura 56 Diagrama de clase pentru pachetul rdquowebrdquo

Toate cererile din interfata utilizator ıncearca sa se mapeze pe rutele declarate ınclase pentru a fi procesate ın metoda corespunzatoare Toata aceasta parte este foarteusor de implementat si mai ales foarte lizibil pentru programatori datorita adnotarilor dinJava Cu ajutorul acestora trebuie doar specificat care este numele URL-ului cererii careeste tipul de obiect asteptat si daca se trimite ca rdquoquery stringrdquo pe URL sau ın interiorulcorpului cererii si tipul raspunsului Pentru fiecare cerere care nu este apelata ın parteaneautentificata a utilizatorului primul lucru care se apeleaza este metoda de securitatepentru a verifica rolul si id-ul utilizatorului Daca din punctul de vedere al securitatii totuleste ın regula se apeleaza metoda corespunzatoare din pachetul de serviciu

39

O singura clasa este diferita de restul ın pachetul de controller si aceea este clasa deeroare Acolo se mapeaza erorile aparute ın timpul cererii si se trimite ınapoi ın interfatagrafica un raspuns cu cod de eroare specific nu numai 500 Generic Application Exceptioncum ar trimite fara aceasta clasa si cu detalii despre motivul aparitiei erorii

Datorita folosirii adnotarilor din java nu a fost necesara folosirea unor rdquodesignpatternrdquo-uri ın sistem De exemplu pentru a folosi ın nivelul de web ceva din pachetulde servicii trebuia doar acel obiect sa aiba adnotarea Autowired si se ınlocuieste atatfolosirea rdquodesign patternrdquo-ului Singleton cat si a celui de Factory Acel obiect nu trebuiecreat sau initializat se face asta implicit datorita adnotarii si de asemenea este folositapeste tot aceeasi instanta

In concluzie toate cererile venite din interfata grafica ajung ın nivelul de rdquocontrollerrdquode unde sunt trimise la cel de rdquoservicerdquopentru a fi procesate si facute eventualele modificarinecesare ın baza de date ca apoi raspunsul sa fie trimis ınapoi spre aplicatia client pentruafisare

512 Arhitectura componentei frontend

A doua componenta implementata a sistemului este aplicatia client frontend-ulAceasta a fost scrisa ın Java Script cu ajutorul framework-ului Ext JS compilarea

se face cu ajutorul Sencha CMD si mediul de implementare a fost IntelliJ IdeaCu ajutorul framework-ului Ext JS se scriu componente care apoi se initializeaza

unele pe altele Aplicatia porneste cu fisierul Applicationjs care este un fel de rdquomainrdquopentru aplicatie Aceasta initializeaza alte componente care la randul lor includ altecomponente si tot asa Structura poate fi foarte usor comparata cu una arborescenta dinacest punct de vedere

Framework-ul a fost creat sa functioneze ın felul acesta pentru ca scopul componen-telor este sa fie scrise ın asa fel ıncat sa poata pe viitor sa fie utilizate din nou Una dindorintele majore ın programare tot timpul este de a se scrie cod ıntr-o maniera ın care safie cat mai reutilizabil Iar framework-ul Ext JS exact asta ıncearca

Arhitectura aplicatiei client se gaseste ın figura 57 si este la randul ei ımpartita ınpachete ca si cea de server Similar cu pachetul de rdquodomainrdquo de la aplicatia de backendeste pachetul rdquomodelrdquo al interfetei utilizator Aici sunt rdquoclaserdquo care sunt simple POJO sicare sunt apoi folosite ın nivelele urmatoare Sunt mai putine decat clasele din rdquostorerdquodeoarece daca raspunsul de la server nu trebuie procesat nu sunt necesare se pot mapadirect obiectele din rdquostorerdquo pe componentele interfetei utilizator

Urmatorul nivel este cel pe care se afla clasele de rdquostorerdquo Acestea sunt cele careexecuta cererea spre backend si face legatura ıntre client si server Daca are o clasa derdquomodelrdquodeclarata atunci populeaza acel obiect cu datele primite de la server iar ın cazul ıncare nu este declarat un model se trimit datele exact asa cum s-au primit la nivelul urmatorde rdquoviewrdquo Acest nivel seamana din punct de vedere al functiei cu cel de rdquorepositoryrdquo de laaplicatia server deoarece ambele au rol de legatura Aceea facea legatura ıntre aplicatiesi baza de date si aceasta face legatura ıntre aplicatia client si aplicatia server

40

Figura 57 Diagrama de clase pentru aplicatia web

Cel de-al treilea pachet al aplicatiei este cel de rdquoviewrdquo In acest pachet se afla claselecare alcatuiesc partea vizuala a aplicatiei La randul ei si aceasta este alcatuita tot dincomponente Aplicatia deschide ın primul rand Main-ul care determina aparitia paginii deHome si afisarea ın meniu a optiunilor posibile ın functie de autentificare si rol Clasele deaici se executa de fapt la deschiderea aplicatiei fiind rdquosingle page applicationrdquo si tot atuncise ıncarca pe pagina componentele Ca si arhitectura a pachetului acesta este ımpartit larandul sau ın subpachete Pentru o mai buna organizare exista patru subpachete cateunul pentru fiecare tip de utilizator In felul acesta toate rdquoviewrdquo-urile care sunt specificeunui utilizator cu un anumit rol se afla ın acelasi subpachet

Cele patru subpachete existente ın pachetul rdquoviewrdquo sunt

1 Pachetul rdquomainrdquo care cuprinde rdquoviewrdquo-urile care se afla ın partea neautentificata aaplicatiei

2 Pachetul rdquoclientrdquo continand rdquoviewrdquo-urile pe care le poate accesa un utilizator simplu3 Pachetul rdquoproducerrdquo specific actiunilor unui utilizator care are rol de producator4 Pachetul rdquoadminrdquo care contine toate rdquoviewrdquo-urile care ıi apar unui utilizator care este

administrator al aplicatiei

Ultimul pachet si nivel al aplicatiei client este cel de rdquocontrollerrdquo In acest pachet

41

se afla clasele care fac actiunile din interfata grafica In timp ce pachetul rdquoviewrdquo continedoar partea grafica a aplicatiei adica modul ın care aceasta trebuie sa arate pachetulrdquocontrollerrdquo contine actiunea acestora modul ın care aplicatia trebuie sa functioneze

Ca si arhitectura si acest pachet a fost ımpartit la randul lui tot ın cele patrusubpachete ca si pachetul rdquoviewrdquo adica rdquomainrdquo rdquoclientrdquo rdquoproducerrdquo si rdquoadminrdquo In pluspentru a fi usor de gasit ce clasa de rdquocontrollerrdquo apartine carui rdquoviewrdquo am ales ca cele douasa aiba acelasi nume In felul acesta daca se doreste sa se gaseasca actiunile unui rdquoviewrdquose poate cauta dupa o clasa cu acelasi nume ın pachetul rdquocontrollerrdquo Numarul claselor dinacest pachet este mai mic decat cel al claselor din rdquoviewrdquo deoarece nu toate paginile dininterfata au actiuni suplimentare Daca singura actiune este ıncarcarea paginii cu date dela server adica doar o actiune simpla de GET datele se ıncarca cu ajutorul rdquostorerdquo-ului laıncarcarea paginii si nu este necesara nici o actiune suplimentara Paginile pe care se potface si actiuni de alt gen sau se deschid noi ferestre au nevoie de clase de rdquocontrollerrdquo

In concluzie arhitectura aplicatiei client este una bazata pe componente care ıncearcasa foloseasca cat mai multe clase reutilizabile

52 Structura bazei de date

Baza de date a aplicatiei este de tip graf de tipul Neo4j Pentru utilizare exista unprogram numit Neo4j ce trebuie instalat Acest program are si o interfata grafica ın carese pot vizualiza datele sub forma grafica si ın care se pot scrie de asemenea si interogariın limbajul acestei baze de date adica Cypher

Fiind o baza de date sub forma de graf datele stocate sunt salvate ın structurade date sub forma de noduri si relatii Entitatile din pachetul de domeniu din aplicatiabackend se gasesc ın baza de date sub forma unor noduri iar dependentele dintre nodurise mapeaza ın baza de date sub forma unor relatii Un element diferit fata de alte tipuride baze de date este faptul ca pe relatiile dintre noduri se pot salva atribute cum este ınaplicatie cazul pentru prieteniile dintre persoane In cazul acestora pe relatia dintre nodurise salveaza daca prietenia a fost sau nu acceptata

Pentru fiecare clasa POJO din aplicatia server clasa ce are doar metodele get si setsi se afla ın pachetul domain exista cate un tip de nod diferit ın baza de date cum estesi marcat ın diferite culori ın figura 58 Fiecare tip de nod are atributele proprii care potlua valori sau pot fi nule Iar fiecare obiect din Java reprezinta un nod diferit ın baza dedate

Neo4j a fost cea mai buna optiune pentru baza de date pentru ca aplicatia poate ficonsiderata o retea sociala Acest lucru se datoreaza relatiilor de prietenie dintre persoanesi a multiplelor relatii ıntre noduri Toate nodurile se afla ın acceasi componenta conexadeci nu exista noduri izolate care sa nu aiba nici o legatura cu nici un alt nod

Datorita acestei structuri a bazei de date este posibila implementarea cererii derecomandare ca o simpla interogare ın baza de date aceasta fiind cea mai simpla metodade implementare a unui sistem de genul acesta una mult mai complexa ar fi fost un

42

algoritm de ınvatare care sa ınvete tipare ale utilizatorilor si sa recomande cadouri pe bazaacestor informatii

Figura 58 Diagrama bazei de date pentru doi utilizatori

Un alt avantaj al acestui tip de baza de date este faptul ca datele nu sunt duplicateın baza de date Spre exemplu daca mai multi utilizatori au ca locatie acelasi oras nu secreaza cate un nod cu acea locatie de mai multe ori ci acel unic nod va avea cate o relatiecu fiecare utilizator care are ca locatie acel oras

In concluzie structura bazei de date a fost aleasa ın acest fel datorita tipului apli-catiei adica asemanatoare cu o retea sociala si datorita implementarii simple a unui sistemde recomandare pe o asemenea baza de date

53 Fluxul pentru diferite operatii

Pentru aplicatie cele mai importante cazuri de utilizare sunt salvarea informati-ilor despre utilizator primite de la Facebook pentru crearea unui profil si recomandareacadourilor pentru un utilizator al aplicatiei Din aceasta cauza cele doua cazuri de utilizarevor fi prezentate mai ın detaliu ın continuare

43

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 38: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

sul lor este trimis la interfata utilizator Aceasta este partea care reprezinta rdquogandireardquoaplicatiei Aceea este componenta care face legatura ıntre cererile utilizatorului din inter-fata si datele stocate ın baza de date

Ultima componenta a aplicatiei o reprezinta baza de date care are ca rol sa stochezedatele despre utilizatori produse si comenzi Ea este o baza de date sub forma de grafde tipul Neo4j Acolo se salveaza entitatile aplicatiei sub forma de noduri si dependenteleıntre acestea sub forma de relatii ıntre aceste noduri

Figura 51 Diagrama de rdquodeploymentrdquo

In figura 51 este prezentata diagrama de rdquodeploymentrdquo a sistemului cu cele patrucomponente ale sistemului Aplicatia client comunica cu API-ul de la Facebook prin pro-tocolul securizat HTTPS cu backend-ul prin protocolul HTTP iar backend-ul cu baza dedate prin JDBC

Aplicatia a putut fi ımpartita ın aceste componente separate deoarece fiecare dintreele poate functiona independent de celelalte comunica cu ele doar prin mesaje Din acestmotiv locul unde ruleaza acestea pot sa fie pe servere diferite In plus daca aplicatiaar fi pusa pe servere pentru utilizatori ar putea fi mai multe servere pe care ruleaza ocomponenta si prin rdquoload balancingrdquo sa se trimita cererile ımpartite ıntre ele

Cum astfel componentele nu depind foarte mult unele de altele si pot rula faraa le interesa de unde le sunt trimise cererile este arhitectura cea mai corecta deoarecedefectarea sau o posibila eroare la una din ele nu o influenteaza cu nimic pe o alta Dacatoate ar rula pe acelasi server o eventuala defectiune a acestuia ar ınsemna o defectiune aıntregului sistem Insa daca exista mai multe noduri si se afla pe servere diferite pot doartoate cererile sa fie redirectionate spre un nod care functioneaza si aplicatia sa functionezepentru clienti la fel ca ınainte

34

Un alt avantaj al arhitecturii ar fi faptul ca la o lansare viitoare catre clienti se poatelansa doar componenta la care s-au facut modificari De asemenea aplicatia ar putea aveape viitor si o componenta mobila Iar cum serverul e independent poate fi acelasi serverfolosit de o alta aplicatie client

511 Arhitectura componentei backend

Arhitectura backend-ului este si ea ımpartita ın mai multe pachete pentru o maibuna structura si pentru o cat mai mica dependenta ıntre diversele componente Astfelcuplarea este minima ıntre clase si eventualele modificari ulterioare pot fi mai usor defacut

Serverul a fost implementat ın Java cu ajutorul framework-ului Spring Boot iarmediul de dezvoltare folosit a fost Intellij IDEA

Din punctul de vedere al ımpartirii arhitectura serverului aplicatiei este structurataın patru pachete si o clasa ın afara acestora Acea clasa este rdquomainrdquo-ul aplicatiei este parteacare trebuie rulata pentru a porni serverul Din cauza ca este o aplicatie Spring Boot si nuuna String singura adnotare necesara pentru a sti ca aceea este clasa rdquoradacinardquoa aplicatieieste SpringBootApplication

Cele patru pachete ale serverului sunt1 Cel de domeniu (domain) cu clasele POJO care reprezinta entitatile din baza de

date2 Cel de rdquomagazierdquo (repositories) care este cel care face direct actiunile ın baza de date3 Cel de serviciu (services) ın care se afla partea de logica a ıntregii aplicatii4 Cel de web ın care se afla clasele de rdquocontrollerrdquo

Figura 52 Diagrama de pachete pentru backend

35

Ca si dependente nivelul de web ıl foloseste pe cel de seviciu cel de serviciu ılfoloseste pe cel de rdquomagazierdquo iar clasele din pachetul de domeniu sunt folosite ın toatecelelalte pachete

In continuare voi prezenta pe rand fiecare nivel al serverului adica fiecare pachet

Figura 53 Diagrama de clase pentru pachetul rdquodomainrdquo

36

Nivelul de domeniu (domain) este alcatuit ın primul rand din clasele care suntentitati ın baza de date Acestea sunt reprezentate de toate clasele ce stocheaza informatiidespre utilizatori si despre produse si comenzi Pe langa informatiile personale despre unutilizator de genul numelui email-ului sau data nasterii care sunt salvate ın entitateapersoana se stocheaza despre utilizator ın clase diferite informatii de genul locului undelocuieste locul unde a copilarit locurilor unde a facut scoala locului unde lucreaza sau celmai important pentru aplicatia aceasta lucrurilor care ıi plac In afara acestor informatiidespre utilizatori sunt si clase cu informatiile despre prieteni despre produse sau desprecomenzi

Din cauza faptului ca aplicatia este de tipul unei retele sociale ın care exista prieteniiıntre persoane exista dependente ıntre toate entitatile aplicatiei Acesta este si motivulpentru care am ales baza de date sub forma de graf pe care sa se mapeze toate acesteentitati sub forma de noduri si toate aceste dependente sub forma de relatii

In pachetul de domeniu se afla si trei subpachete Unul dintre ele este pentruclasele folosite pentru a trata erorile aplicatiei In interiorul acestui pachet se afla douaclase pentru eroare si o exceptie cea folosita ın cazul ın care nu se gaseste ceea ce doresteutilizatorul Pe langa asta este clasa care are ca obiect raspunsul dat de sistem ın cazulunei erori la server Aceasta contine ın interiorul sau pe langa codul erorii si detalii despreeroarea trimisa Aceasta lista de detalii e reprezentata de obiectele de tipul celei de-a treiaclase din pachetul acesta

Celelalte doua subpachete aflate ın acest nivel sunt cele care contin clasele specialede cerere sau raspuns care au ajutat la maparea acestora mai bine In multe cazuri nua fost necesara trimiterea la interfata utilizator a tuturor informatiilor stocate despre oentitate si de aceea am ales sa creez ın aceste cazuri un obiect auxiliar care sa fie folositpe post de raspuns

Figura 54 Diagrama de clase pentru pachetul rdquorepositoriesrdquo

37

Cel de-al doilea nivel al aplicatiei backend este cel de rdquomagazierdquo (repositories) carecontine doar interfete de tip rdquoRepositoryrdquo

Aceste interfete sunt cele care fac operatiile directe asupra entitatilor din baza dedate

Unele interfete doar extind interfata care are deja implementate metodele CRUDsi din acest motiv nu au metode suplimentare iar altele au si metode ın plus care au carol sa execute interogari mai complexe asupra bazei de date In acele metode se pot scrieinterogarile ın Cypher pentru a putea primi informatii despre mai multe noduri sau desprerelatiile dintre acestea sau si pentru a returna doar anumite rezultate care ındeplinescanumite conditii In felul acesta a fost implementata si cererea de oferire a recomandarilorIn acel caz sistemul returneaza produsele care au ın descriere unul din lucrurile care se aflaın lista de obiecte sau servicii primite de la Facebook ca ıi plac utilizatorului

Nivelul de rdquoRepositoryrdquo este folosit direct de cel de-al treiea nivel cel de servi-ciu Acesta este nivelul la care se executa logica aplicatiei unde se comanda modul defunctionare al ıntregii aplicatii

Figura 55 Diagrama de clase pentru pachetul rdquoservicesrdquo

Pe acest nivel ajung toate cererile din server dupa ce trec de verificarile de securitateIn acest pachet se afla si clasa de securitate care face verificarile necesare In aceasta clasaexista o metoda ce se apeleaza la prima cerere cea de salvare a datelor de la Facebookdespre utilizator si care codifica id-ul utilizatorului si ıl trimite pe raspuns ınapoi interfeteiPe langa asta ın acea clasa se afla si o metoda care verifica faptul ca id-ul codificat esteal unui utilizator cu rol corespunzator pentru a face acea cerere

In plus ın acest pachet se afla si toate celelalte clase care fac diverse operatii pedatele din baza de date si dau raspunsuri cererilor din interfata Aici se afla logica care

38

comanda actiunile asupra utilizatorilor asupra prietenilor acestora asupra produselor siasupra comenzilor

Ultima clasa a acestui nivel este cea care se ocupa de trimiterea de email-uri Incazul ın care se face o noua comanda de catre un utilizator toti producatorii produselor depe comanda sunt notificati despre produsele lor pe care le doreste utilizatorul Din serviciulde comanda se apeleaza serviciul de email pentru fiecare producator din lista celor care auproduse care se afla pe lista comenzii utilizatorului

Ultimul si cel mai aproape de interfata utilizator este nivelul de web Acolo se aflatoate clasele de rdquoControllerrdquo ale aplicatiei server

Figura 56 Diagrama de clase pentru pachetul rdquowebrdquo

Toate cererile din interfata utilizator ıncearca sa se mapeze pe rutele declarate ınclase pentru a fi procesate ın metoda corespunzatoare Toata aceasta parte este foarteusor de implementat si mai ales foarte lizibil pentru programatori datorita adnotarilor dinJava Cu ajutorul acestora trebuie doar specificat care este numele URL-ului cererii careeste tipul de obiect asteptat si daca se trimite ca rdquoquery stringrdquo pe URL sau ın interiorulcorpului cererii si tipul raspunsului Pentru fiecare cerere care nu este apelata ın parteaneautentificata a utilizatorului primul lucru care se apeleaza este metoda de securitatepentru a verifica rolul si id-ul utilizatorului Daca din punctul de vedere al securitatii totuleste ın regula se apeleaza metoda corespunzatoare din pachetul de serviciu

39

O singura clasa este diferita de restul ın pachetul de controller si aceea este clasa deeroare Acolo se mapeaza erorile aparute ın timpul cererii si se trimite ınapoi ın interfatagrafica un raspuns cu cod de eroare specific nu numai 500 Generic Application Exceptioncum ar trimite fara aceasta clasa si cu detalii despre motivul aparitiei erorii

Datorita folosirii adnotarilor din java nu a fost necesara folosirea unor rdquodesignpatternrdquo-uri ın sistem De exemplu pentru a folosi ın nivelul de web ceva din pachetulde servicii trebuia doar acel obiect sa aiba adnotarea Autowired si se ınlocuieste atatfolosirea rdquodesign patternrdquo-ului Singleton cat si a celui de Factory Acel obiect nu trebuiecreat sau initializat se face asta implicit datorita adnotarii si de asemenea este folositapeste tot aceeasi instanta

In concluzie toate cererile venite din interfata grafica ajung ın nivelul de rdquocontrollerrdquode unde sunt trimise la cel de rdquoservicerdquopentru a fi procesate si facute eventualele modificarinecesare ın baza de date ca apoi raspunsul sa fie trimis ınapoi spre aplicatia client pentruafisare

512 Arhitectura componentei frontend

A doua componenta implementata a sistemului este aplicatia client frontend-ulAceasta a fost scrisa ın Java Script cu ajutorul framework-ului Ext JS compilarea

se face cu ajutorul Sencha CMD si mediul de implementare a fost IntelliJ IdeaCu ajutorul framework-ului Ext JS se scriu componente care apoi se initializeaza

unele pe altele Aplicatia porneste cu fisierul Applicationjs care este un fel de rdquomainrdquopentru aplicatie Aceasta initializeaza alte componente care la randul lor includ altecomponente si tot asa Structura poate fi foarte usor comparata cu una arborescenta dinacest punct de vedere

Framework-ul a fost creat sa functioneze ın felul acesta pentru ca scopul componen-telor este sa fie scrise ın asa fel ıncat sa poata pe viitor sa fie utilizate din nou Una dindorintele majore ın programare tot timpul este de a se scrie cod ıntr-o maniera ın care safie cat mai reutilizabil Iar framework-ul Ext JS exact asta ıncearca

Arhitectura aplicatiei client se gaseste ın figura 57 si este la randul ei ımpartita ınpachete ca si cea de server Similar cu pachetul de rdquodomainrdquo de la aplicatia de backendeste pachetul rdquomodelrdquo al interfetei utilizator Aici sunt rdquoclaserdquo care sunt simple POJO sicare sunt apoi folosite ın nivelele urmatoare Sunt mai putine decat clasele din rdquostorerdquodeoarece daca raspunsul de la server nu trebuie procesat nu sunt necesare se pot mapadirect obiectele din rdquostorerdquo pe componentele interfetei utilizator

Urmatorul nivel este cel pe care se afla clasele de rdquostorerdquo Acestea sunt cele careexecuta cererea spre backend si face legatura ıntre client si server Daca are o clasa derdquomodelrdquodeclarata atunci populeaza acel obiect cu datele primite de la server iar ın cazul ıncare nu este declarat un model se trimit datele exact asa cum s-au primit la nivelul urmatorde rdquoviewrdquo Acest nivel seamana din punct de vedere al functiei cu cel de rdquorepositoryrdquo de laaplicatia server deoarece ambele au rol de legatura Aceea facea legatura ıntre aplicatiesi baza de date si aceasta face legatura ıntre aplicatia client si aplicatia server

40

Figura 57 Diagrama de clase pentru aplicatia web

Cel de-al treilea pachet al aplicatiei este cel de rdquoviewrdquo In acest pachet se afla claselecare alcatuiesc partea vizuala a aplicatiei La randul ei si aceasta este alcatuita tot dincomponente Aplicatia deschide ın primul rand Main-ul care determina aparitia paginii deHome si afisarea ın meniu a optiunilor posibile ın functie de autentificare si rol Clasele deaici se executa de fapt la deschiderea aplicatiei fiind rdquosingle page applicationrdquo si tot atuncise ıncarca pe pagina componentele Ca si arhitectura a pachetului acesta este ımpartit larandul sau ın subpachete Pentru o mai buna organizare exista patru subpachete cateunul pentru fiecare tip de utilizator In felul acesta toate rdquoviewrdquo-urile care sunt specificeunui utilizator cu un anumit rol se afla ın acelasi subpachet

Cele patru subpachete existente ın pachetul rdquoviewrdquo sunt

1 Pachetul rdquomainrdquo care cuprinde rdquoviewrdquo-urile care se afla ın partea neautentificata aaplicatiei

2 Pachetul rdquoclientrdquo continand rdquoviewrdquo-urile pe care le poate accesa un utilizator simplu3 Pachetul rdquoproducerrdquo specific actiunilor unui utilizator care are rol de producator4 Pachetul rdquoadminrdquo care contine toate rdquoviewrdquo-urile care ıi apar unui utilizator care este

administrator al aplicatiei

Ultimul pachet si nivel al aplicatiei client este cel de rdquocontrollerrdquo In acest pachet

41

se afla clasele care fac actiunile din interfata grafica In timp ce pachetul rdquoviewrdquo continedoar partea grafica a aplicatiei adica modul ın care aceasta trebuie sa arate pachetulrdquocontrollerrdquo contine actiunea acestora modul ın care aplicatia trebuie sa functioneze

Ca si arhitectura si acest pachet a fost ımpartit la randul lui tot ın cele patrusubpachete ca si pachetul rdquoviewrdquo adica rdquomainrdquo rdquoclientrdquo rdquoproducerrdquo si rdquoadminrdquo In pluspentru a fi usor de gasit ce clasa de rdquocontrollerrdquo apartine carui rdquoviewrdquo am ales ca cele douasa aiba acelasi nume In felul acesta daca se doreste sa se gaseasca actiunile unui rdquoviewrdquose poate cauta dupa o clasa cu acelasi nume ın pachetul rdquocontrollerrdquo Numarul claselor dinacest pachet este mai mic decat cel al claselor din rdquoviewrdquo deoarece nu toate paginile dininterfata au actiuni suplimentare Daca singura actiune este ıncarcarea paginii cu date dela server adica doar o actiune simpla de GET datele se ıncarca cu ajutorul rdquostorerdquo-ului laıncarcarea paginii si nu este necesara nici o actiune suplimentara Paginile pe care se potface si actiuni de alt gen sau se deschid noi ferestre au nevoie de clase de rdquocontrollerrdquo

In concluzie arhitectura aplicatiei client este una bazata pe componente care ıncearcasa foloseasca cat mai multe clase reutilizabile

52 Structura bazei de date

Baza de date a aplicatiei este de tip graf de tipul Neo4j Pentru utilizare exista unprogram numit Neo4j ce trebuie instalat Acest program are si o interfata grafica ın carese pot vizualiza datele sub forma grafica si ın care se pot scrie de asemenea si interogariın limbajul acestei baze de date adica Cypher

Fiind o baza de date sub forma de graf datele stocate sunt salvate ın structurade date sub forma de noduri si relatii Entitatile din pachetul de domeniu din aplicatiabackend se gasesc ın baza de date sub forma unor noduri iar dependentele dintre nodurise mapeaza ın baza de date sub forma unor relatii Un element diferit fata de alte tipuride baze de date este faptul ca pe relatiile dintre noduri se pot salva atribute cum este ınaplicatie cazul pentru prieteniile dintre persoane In cazul acestora pe relatia dintre nodurise salveaza daca prietenia a fost sau nu acceptata

Pentru fiecare clasa POJO din aplicatia server clasa ce are doar metodele get si setsi se afla ın pachetul domain exista cate un tip de nod diferit ın baza de date cum estesi marcat ın diferite culori ın figura 58 Fiecare tip de nod are atributele proprii care potlua valori sau pot fi nule Iar fiecare obiect din Java reprezinta un nod diferit ın baza dedate

Neo4j a fost cea mai buna optiune pentru baza de date pentru ca aplicatia poate ficonsiderata o retea sociala Acest lucru se datoreaza relatiilor de prietenie dintre persoanesi a multiplelor relatii ıntre noduri Toate nodurile se afla ın acceasi componenta conexadeci nu exista noduri izolate care sa nu aiba nici o legatura cu nici un alt nod

Datorita acestei structuri a bazei de date este posibila implementarea cererii derecomandare ca o simpla interogare ın baza de date aceasta fiind cea mai simpla metodade implementare a unui sistem de genul acesta una mult mai complexa ar fi fost un

42

algoritm de ınvatare care sa ınvete tipare ale utilizatorilor si sa recomande cadouri pe bazaacestor informatii

Figura 58 Diagrama bazei de date pentru doi utilizatori

Un alt avantaj al acestui tip de baza de date este faptul ca datele nu sunt duplicateın baza de date Spre exemplu daca mai multi utilizatori au ca locatie acelasi oras nu secreaza cate un nod cu acea locatie de mai multe ori ci acel unic nod va avea cate o relatiecu fiecare utilizator care are ca locatie acel oras

In concluzie structura bazei de date a fost aleasa ın acest fel datorita tipului apli-catiei adica asemanatoare cu o retea sociala si datorita implementarii simple a unui sistemde recomandare pe o asemenea baza de date

53 Fluxul pentru diferite operatii

Pentru aplicatie cele mai importante cazuri de utilizare sunt salvarea informati-ilor despre utilizator primite de la Facebook pentru crearea unui profil si recomandareacadourilor pentru un utilizator al aplicatiei Din aceasta cauza cele doua cazuri de utilizarevor fi prezentate mai ın detaliu ın continuare

43

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 39: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

Un alt avantaj al arhitecturii ar fi faptul ca la o lansare viitoare catre clienti se poatelansa doar componenta la care s-au facut modificari De asemenea aplicatia ar putea aveape viitor si o componenta mobila Iar cum serverul e independent poate fi acelasi serverfolosit de o alta aplicatie client

511 Arhitectura componentei backend

Arhitectura backend-ului este si ea ımpartita ın mai multe pachete pentru o maibuna structura si pentru o cat mai mica dependenta ıntre diversele componente Astfelcuplarea este minima ıntre clase si eventualele modificari ulterioare pot fi mai usor defacut

Serverul a fost implementat ın Java cu ajutorul framework-ului Spring Boot iarmediul de dezvoltare folosit a fost Intellij IDEA

Din punctul de vedere al ımpartirii arhitectura serverului aplicatiei este structurataın patru pachete si o clasa ın afara acestora Acea clasa este rdquomainrdquo-ul aplicatiei este parteacare trebuie rulata pentru a porni serverul Din cauza ca este o aplicatie Spring Boot si nuuna String singura adnotare necesara pentru a sti ca aceea este clasa rdquoradacinardquoa aplicatieieste SpringBootApplication

Cele patru pachete ale serverului sunt1 Cel de domeniu (domain) cu clasele POJO care reprezinta entitatile din baza de

date2 Cel de rdquomagazierdquo (repositories) care este cel care face direct actiunile ın baza de date3 Cel de serviciu (services) ın care se afla partea de logica a ıntregii aplicatii4 Cel de web ın care se afla clasele de rdquocontrollerrdquo

Figura 52 Diagrama de pachete pentru backend

35

Ca si dependente nivelul de web ıl foloseste pe cel de seviciu cel de serviciu ılfoloseste pe cel de rdquomagazierdquo iar clasele din pachetul de domeniu sunt folosite ın toatecelelalte pachete

In continuare voi prezenta pe rand fiecare nivel al serverului adica fiecare pachet

Figura 53 Diagrama de clase pentru pachetul rdquodomainrdquo

36

Nivelul de domeniu (domain) este alcatuit ın primul rand din clasele care suntentitati ın baza de date Acestea sunt reprezentate de toate clasele ce stocheaza informatiidespre utilizatori si despre produse si comenzi Pe langa informatiile personale despre unutilizator de genul numelui email-ului sau data nasterii care sunt salvate ın entitateapersoana se stocheaza despre utilizator ın clase diferite informatii de genul locului undelocuieste locul unde a copilarit locurilor unde a facut scoala locului unde lucreaza sau celmai important pentru aplicatia aceasta lucrurilor care ıi plac In afara acestor informatiidespre utilizatori sunt si clase cu informatiile despre prieteni despre produse sau desprecomenzi

Din cauza faptului ca aplicatia este de tipul unei retele sociale ın care exista prieteniiıntre persoane exista dependente ıntre toate entitatile aplicatiei Acesta este si motivulpentru care am ales baza de date sub forma de graf pe care sa se mapeze toate acesteentitati sub forma de noduri si toate aceste dependente sub forma de relatii

In pachetul de domeniu se afla si trei subpachete Unul dintre ele este pentruclasele folosite pentru a trata erorile aplicatiei In interiorul acestui pachet se afla douaclase pentru eroare si o exceptie cea folosita ın cazul ın care nu se gaseste ceea ce doresteutilizatorul Pe langa asta este clasa care are ca obiect raspunsul dat de sistem ın cazulunei erori la server Aceasta contine ın interiorul sau pe langa codul erorii si detalii despreeroarea trimisa Aceasta lista de detalii e reprezentata de obiectele de tipul celei de-a treiaclase din pachetul acesta

Celelalte doua subpachete aflate ın acest nivel sunt cele care contin clasele specialede cerere sau raspuns care au ajutat la maparea acestora mai bine In multe cazuri nua fost necesara trimiterea la interfata utilizator a tuturor informatiilor stocate despre oentitate si de aceea am ales sa creez ın aceste cazuri un obiect auxiliar care sa fie folositpe post de raspuns

Figura 54 Diagrama de clase pentru pachetul rdquorepositoriesrdquo

37

Cel de-al doilea nivel al aplicatiei backend este cel de rdquomagazierdquo (repositories) carecontine doar interfete de tip rdquoRepositoryrdquo

Aceste interfete sunt cele care fac operatiile directe asupra entitatilor din baza dedate

Unele interfete doar extind interfata care are deja implementate metodele CRUDsi din acest motiv nu au metode suplimentare iar altele au si metode ın plus care au carol sa execute interogari mai complexe asupra bazei de date In acele metode se pot scrieinterogarile ın Cypher pentru a putea primi informatii despre mai multe noduri sau desprerelatiile dintre acestea sau si pentru a returna doar anumite rezultate care ındeplinescanumite conditii In felul acesta a fost implementata si cererea de oferire a recomandarilorIn acel caz sistemul returneaza produsele care au ın descriere unul din lucrurile care se aflaın lista de obiecte sau servicii primite de la Facebook ca ıi plac utilizatorului

Nivelul de rdquoRepositoryrdquo este folosit direct de cel de-al treiea nivel cel de servi-ciu Acesta este nivelul la care se executa logica aplicatiei unde se comanda modul defunctionare al ıntregii aplicatii

Figura 55 Diagrama de clase pentru pachetul rdquoservicesrdquo

Pe acest nivel ajung toate cererile din server dupa ce trec de verificarile de securitateIn acest pachet se afla si clasa de securitate care face verificarile necesare In aceasta clasaexista o metoda ce se apeleaza la prima cerere cea de salvare a datelor de la Facebookdespre utilizator si care codifica id-ul utilizatorului si ıl trimite pe raspuns ınapoi interfeteiPe langa asta ın acea clasa se afla si o metoda care verifica faptul ca id-ul codificat esteal unui utilizator cu rol corespunzator pentru a face acea cerere

In plus ın acest pachet se afla si toate celelalte clase care fac diverse operatii pedatele din baza de date si dau raspunsuri cererilor din interfata Aici se afla logica care

38

comanda actiunile asupra utilizatorilor asupra prietenilor acestora asupra produselor siasupra comenzilor

Ultima clasa a acestui nivel este cea care se ocupa de trimiterea de email-uri Incazul ın care se face o noua comanda de catre un utilizator toti producatorii produselor depe comanda sunt notificati despre produsele lor pe care le doreste utilizatorul Din serviciulde comanda se apeleaza serviciul de email pentru fiecare producator din lista celor care auproduse care se afla pe lista comenzii utilizatorului

Ultimul si cel mai aproape de interfata utilizator este nivelul de web Acolo se aflatoate clasele de rdquoControllerrdquo ale aplicatiei server

Figura 56 Diagrama de clase pentru pachetul rdquowebrdquo

Toate cererile din interfata utilizator ıncearca sa se mapeze pe rutele declarate ınclase pentru a fi procesate ın metoda corespunzatoare Toata aceasta parte este foarteusor de implementat si mai ales foarte lizibil pentru programatori datorita adnotarilor dinJava Cu ajutorul acestora trebuie doar specificat care este numele URL-ului cererii careeste tipul de obiect asteptat si daca se trimite ca rdquoquery stringrdquo pe URL sau ın interiorulcorpului cererii si tipul raspunsului Pentru fiecare cerere care nu este apelata ın parteaneautentificata a utilizatorului primul lucru care se apeleaza este metoda de securitatepentru a verifica rolul si id-ul utilizatorului Daca din punctul de vedere al securitatii totuleste ın regula se apeleaza metoda corespunzatoare din pachetul de serviciu

39

O singura clasa este diferita de restul ın pachetul de controller si aceea este clasa deeroare Acolo se mapeaza erorile aparute ın timpul cererii si se trimite ınapoi ın interfatagrafica un raspuns cu cod de eroare specific nu numai 500 Generic Application Exceptioncum ar trimite fara aceasta clasa si cu detalii despre motivul aparitiei erorii

Datorita folosirii adnotarilor din java nu a fost necesara folosirea unor rdquodesignpatternrdquo-uri ın sistem De exemplu pentru a folosi ın nivelul de web ceva din pachetulde servicii trebuia doar acel obiect sa aiba adnotarea Autowired si se ınlocuieste atatfolosirea rdquodesign patternrdquo-ului Singleton cat si a celui de Factory Acel obiect nu trebuiecreat sau initializat se face asta implicit datorita adnotarii si de asemenea este folositapeste tot aceeasi instanta

In concluzie toate cererile venite din interfata grafica ajung ın nivelul de rdquocontrollerrdquode unde sunt trimise la cel de rdquoservicerdquopentru a fi procesate si facute eventualele modificarinecesare ın baza de date ca apoi raspunsul sa fie trimis ınapoi spre aplicatia client pentruafisare

512 Arhitectura componentei frontend

A doua componenta implementata a sistemului este aplicatia client frontend-ulAceasta a fost scrisa ın Java Script cu ajutorul framework-ului Ext JS compilarea

se face cu ajutorul Sencha CMD si mediul de implementare a fost IntelliJ IdeaCu ajutorul framework-ului Ext JS se scriu componente care apoi se initializeaza

unele pe altele Aplicatia porneste cu fisierul Applicationjs care este un fel de rdquomainrdquopentru aplicatie Aceasta initializeaza alte componente care la randul lor includ altecomponente si tot asa Structura poate fi foarte usor comparata cu una arborescenta dinacest punct de vedere

Framework-ul a fost creat sa functioneze ın felul acesta pentru ca scopul componen-telor este sa fie scrise ın asa fel ıncat sa poata pe viitor sa fie utilizate din nou Una dindorintele majore ın programare tot timpul este de a se scrie cod ıntr-o maniera ın care safie cat mai reutilizabil Iar framework-ul Ext JS exact asta ıncearca

Arhitectura aplicatiei client se gaseste ın figura 57 si este la randul ei ımpartita ınpachete ca si cea de server Similar cu pachetul de rdquodomainrdquo de la aplicatia de backendeste pachetul rdquomodelrdquo al interfetei utilizator Aici sunt rdquoclaserdquo care sunt simple POJO sicare sunt apoi folosite ın nivelele urmatoare Sunt mai putine decat clasele din rdquostorerdquodeoarece daca raspunsul de la server nu trebuie procesat nu sunt necesare se pot mapadirect obiectele din rdquostorerdquo pe componentele interfetei utilizator

Urmatorul nivel este cel pe care se afla clasele de rdquostorerdquo Acestea sunt cele careexecuta cererea spre backend si face legatura ıntre client si server Daca are o clasa derdquomodelrdquodeclarata atunci populeaza acel obiect cu datele primite de la server iar ın cazul ıncare nu este declarat un model se trimit datele exact asa cum s-au primit la nivelul urmatorde rdquoviewrdquo Acest nivel seamana din punct de vedere al functiei cu cel de rdquorepositoryrdquo de laaplicatia server deoarece ambele au rol de legatura Aceea facea legatura ıntre aplicatiesi baza de date si aceasta face legatura ıntre aplicatia client si aplicatia server

40

Figura 57 Diagrama de clase pentru aplicatia web

Cel de-al treilea pachet al aplicatiei este cel de rdquoviewrdquo In acest pachet se afla claselecare alcatuiesc partea vizuala a aplicatiei La randul ei si aceasta este alcatuita tot dincomponente Aplicatia deschide ın primul rand Main-ul care determina aparitia paginii deHome si afisarea ın meniu a optiunilor posibile ın functie de autentificare si rol Clasele deaici se executa de fapt la deschiderea aplicatiei fiind rdquosingle page applicationrdquo si tot atuncise ıncarca pe pagina componentele Ca si arhitectura a pachetului acesta este ımpartit larandul sau ın subpachete Pentru o mai buna organizare exista patru subpachete cateunul pentru fiecare tip de utilizator In felul acesta toate rdquoviewrdquo-urile care sunt specificeunui utilizator cu un anumit rol se afla ın acelasi subpachet

Cele patru subpachete existente ın pachetul rdquoviewrdquo sunt

1 Pachetul rdquomainrdquo care cuprinde rdquoviewrdquo-urile care se afla ın partea neautentificata aaplicatiei

2 Pachetul rdquoclientrdquo continand rdquoviewrdquo-urile pe care le poate accesa un utilizator simplu3 Pachetul rdquoproducerrdquo specific actiunilor unui utilizator care are rol de producator4 Pachetul rdquoadminrdquo care contine toate rdquoviewrdquo-urile care ıi apar unui utilizator care este

administrator al aplicatiei

Ultimul pachet si nivel al aplicatiei client este cel de rdquocontrollerrdquo In acest pachet

41

se afla clasele care fac actiunile din interfata grafica In timp ce pachetul rdquoviewrdquo continedoar partea grafica a aplicatiei adica modul ın care aceasta trebuie sa arate pachetulrdquocontrollerrdquo contine actiunea acestora modul ın care aplicatia trebuie sa functioneze

Ca si arhitectura si acest pachet a fost ımpartit la randul lui tot ın cele patrusubpachete ca si pachetul rdquoviewrdquo adica rdquomainrdquo rdquoclientrdquo rdquoproducerrdquo si rdquoadminrdquo In pluspentru a fi usor de gasit ce clasa de rdquocontrollerrdquo apartine carui rdquoviewrdquo am ales ca cele douasa aiba acelasi nume In felul acesta daca se doreste sa se gaseasca actiunile unui rdquoviewrdquose poate cauta dupa o clasa cu acelasi nume ın pachetul rdquocontrollerrdquo Numarul claselor dinacest pachet este mai mic decat cel al claselor din rdquoviewrdquo deoarece nu toate paginile dininterfata au actiuni suplimentare Daca singura actiune este ıncarcarea paginii cu date dela server adica doar o actiune simpla de GET datele se ıncarca cu ajutorul rdquostorerdquo-ului laıncarcarea paginii si nu este necesara nici o actiune suplimentara Paginile pe care se potface si actiuni de alt gen sau se deschid noi ferestre au nevoie de clase de rdquocontrollerrdquo

In concluzie arhitectura aplicatiei client este una bazata pe componente care ıncearcasa foloseasca cat mai multe clase reutilizabile

52 Structura bazei de date

Baza de date a aplicatiei este de tip graf de tipul Neo4j Pentru utilizare exista unprogram numit Neo4j ce trebuie instalat Acest program are si o interfata grafica ın carese pot vizualiza datele sub forma grafica si ın care se pot scrie de asemenea si interogariın limbajul acestei baze de date adica Cypher

Fiind o baza de date sub forma de graf datele stocate sunt salvate ın structurade date sub forma de noduri si relatii Entitatile din pachetul de domeniu din aplicatiabackend se gasesc ın baza de date sub forma unor noduri iar dependentele dintre nodurise mapeaza ın baza de date sub forma unor relatii Un element diferit fata de alte tipuride baze de date este faptul ca pe relatiile dintre noduri se pot salva atribute cum este ınaplicatie cazul pentru prieteniile dintre persoane In cazul acestora pe relatia dintre nodurise salveaza daca prietenia a fost sau nu acceptata

Pentru fiecare clasa POJO din aplicatia server clasa ce are doar metodele get si setsi se afla ın pachetul domain exista cate un tip de nod diferit ın baza de date cum estesi marcat ın diferite culori ın figura 58 Fiecare tip de nod are atributele proprii care potlua valori sau pot fi nule Iar fiecare obiect din Java reprezinta un nod diferit ın baza dedate

Neo4j a fost cea mai buna optiune pentru baza de date pentru ca aplicatia poate ficonsiderata o retea sociala Acest lucru se datoreaza relatiilor de prietenie dintre persoanesi a multiplelor relatii ıntre noduri Toate nodurile se afla ın acceasi componenta conexadeci nu exista noduri izolate care sa nu aiba nici o legatura cu nici un alt nod

Datorita acestei structuri a bazei de date este posibila implementarea cererii derecomandare ca o simpla interogare ın baza de date aceasta fiind cea mai simpla metodade implementare a unui sistem de genul acesta una mult mai complexa ar fi fost un

42

algoritm de ınvatare care sa ınvete tipare ale utilizatorilor si sa recomande cadouri pe bazaacestor informatii

Figura 58 Diagrama bazei de date pentru doi utilizatori

Un alt avantaj al acestui tip de baza de date este faptul ca datele nu sunt duplicateın baza de date Spre exemplu daca mai multi utilizatori au ca locatie acelasi oras nu secreaza cate un nod cu acea locatie de mai multe ori ci acel unic nod va avea cate o relatiecu fiecare utilizator care are ca locatie acel oras

In concluzie structura bazei de date a fost aleasa ın acest fel datorita tipului apli-catiei adica asemanatoare cu o retea sociala si datorita implementarii simple a unui sistemde recomandare pe o asemenea baza de date

53 Fluxul pentru diferite operatii

Pentru aplicatie cele mai importante cazuri de utilizare sunt salvarea informati-ilor despre utilizator primite de la Facebook pentru crearea unui profil si recomandareacadourilor pentru un utilizator al aplicatiei Din aceasta cauza cele doua cazuri de utilizarevor fi prezentate mai ın detaliu ın continuare

43

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 40: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

Ca si dependente nivelul de web ıl foloseste pe cel de seviciu cel de serviciu ılfoloseste pe cel de rdquomagazierdquo iar clasele din pachetul de domeniu sunt folosite ın toatecelelalte pachete

In continuare voi prezenta pe rand fiecare nivel al serverului adica fiecare pachet

Figura 53 Diagrama de clase pentru pachetul rdquodomainrdquo

36

Nivelul de domeniu (domain) este alcatuit ın primul rand din clasele care suntentitati ın baza de date Acestea sunt reprezentate de toate clasele ce stocheaza informatiidespre utilizatori si despre produse si comenzi Pe langa informatiile personale despre unutilizator de genul numelui email-ului sau data nasterii care sunt salvate ın entitateapersoana se stocheaza despre utilizator ın clase diferite informatii de genul locului undelocuieste locul unde a copilarit locurilor unde a facut scoala locului unde lucreaza sau celmai important pentru aplicatia aceasta lucrurilor care ıi plac In afara acestor informatiidespre utilizatori sunt si clase cu informatiile despre prieteni despre produse sau desprecomenzi

Din cauza faptului ca aplicatia este de tipul unei retele sociale ın care exista prieteniiıntre persoane exista dependente ıntre toate entitatile aplicatiei Acesta este si motivulpentru care am ales baza de date sub forma de graf pe care sa se mapeze toate acesteentitati sub forma de noduri si toate aceste dependente sub forma de relatii

In pachetul de domeniu se afla si trei subpachete Unul dintre ele este pentruclasele folosite pentru a trata erorile aplicatiei In interiorul acestui pachet se afla douaclase pentru eroare si o exceptie cea folosita ın cazul ın care nu se gaseste ceea ce doresteutilizatorul Pe langa asta este clasa care are ca obiect raspunsul dat de sistem ın cazulunei erori la server Aceasta contine ın interiorul sau pe langa codul erorii si detalii despreeroarea trimisa Aceasta lista de detalii e reprezentata de obiectele de tipul celei de-a treiaclase din pachetul acesta

Celelalte doua subpachete aflate ın acest nivel sunt cele care contin clasele specialede cerere sau raspuns care au ajutat la maparea acestora mai bine In multe cazuri nua fost necesara trimiterea la interfata utilizator a tuturor informatiilor stocate despre oentitate si de aceea am ales sa creez ın aceste cazuri un obiect auxiliar care sa fie folositpe post de raspuns

Figura 54 Diagrama de clase pentru pachetul rdquorepositoriesrdquo

37

Cel de-al doilea nivel al aplicatiei backend este cel de rdquomagazierdquo (repositories) carecontine doar interfete de tip rdquoRepositoryrdquo

Aceste interfete sunt cele care fac operatiile directe asupra entitatilor din baza dedate

Unele interfete doar extind interfata care are deja implementate metodele CRUDsi din acest motiv nu au metode suplimentare iar altele au si metode ın plus care au carol sa execute interogari mai complexe asupra bazei de date In acele metode se pot scrieinterogarile ın Cypher pentru a putea primi informatii despre mai multe noduri sau desprerelatiile dintre acestea sau si pentru a returna doar anumite rezultate care ındeplinescanumite conditii In felul acesta a fost implementata si cererea de oferire a recomandarilorIn acel caz sistemul returneaza produsele care au ın descriere unul din lucrurile care se aflaın lista de obiecte sau servicii primite de la Facebook ca ıi plac utilizatorului

Nivelul de rdquoRepositoryrdquo este folosit direct de cel de-al treiea nivel cel de servi-ciu Acesta este nivelul la care se executa logica aplicatiei unde se comanda modul defunctionare al ıntregii aplicatii

Figura 55 Diagrama de clase pentru pachetul rdquoservicesrdquo

Pe acest nivel ajung toate cererile din server dupa ce trec de verificarile de securitateIn acest pachet se afla si clasa de securitate care face verificarile necesare In aceasta clasaexista o metoda ce se apeleaza la prima cerere cea de salvare a datelor de la Facebookdespre utilizator si care codifica id-ul utilizatorului si ıl trimite pe raspuns ınapoi interfeteiPe langa asta ın acea clasa se afla si o metoda care verifica faptul ca id-ul codificat esteal unui utilizator cu rol corespunzator pentru a face acea cerere

In plus ın acest pachet se afla si toate celelalte clase care fac diverse operatii pedatele din baza de date si dau raspunsuri cererilor din interfata Aici se afla logica care

38

comanda actiunile asupra utilizatorilor asupra prietenilor acestora asupra produselor siasupra comenzilor

Ultima clasa a acestui nivel este cea care se ocupa de trimiterea de email-uri Incazul ın care se face o noua comanda de catre un utilizator toti producatorii produselor depe comanda sunt notificati despre produsele lor pe care le doreste utilizatorul Din serviciulde comanda se apeleaza serviciul de email pentru fiecare producator din lista celor care auproduse care se afla pe lista comenzii utilizatorului

Ultimul si cel mai aproape de interfata utilizator este nivelul de web Acolo se aflatoate clasele de rdquoControllerrdquo ale aplicatiei server

Figura 56 Diagrama de clase pentru pachetul rdquowebrdquo

Toate cererile din interfata utilizator ıncearca sa se mapeze pe rutele declarate ınclase pentru a fi procesate ın metoda corespunzatoare Toata aceasta parte este foarteusor de implementat si mai ales foarte lizibil pentru programatori datorita adnotarilor dinJava Cu ajutorul acestora trebuie doar specificat care este numele URL-ului cererii careeste tipul de obiect asteptat si daca se trimite ca rdquoquery stringrdquo pe URL sau ın interiorulcorpului cererii si tipul raspunsului Pentru fiecare cerere care nu este apelata ın parteaneautentificata a utilizatorului primul lucru care se apeleaza este metoda de securitatepentru a verifica rolul si id-ul utilizatorului Daca din punctul de vedere al securitatii totuleste ın regula se apeleaza metoda corespunzatoare din pachetul de serviciu

39

O singura clasa este diferita de restul ın pachetul de controller si aceea este clasa deeroare Acolo se mapeaza erorile aparute ın timpul cererii si se trimite ınapoi ın interfatagrafica un raspuns cu cod de eroare specific nu numai 500 Generic Application Exceptioncum ar trimite fara aceasta clasa si cu detalii despre motivul aparitiei erorii

Datorita folosirii adnotarilor din java nu a fost necesara folosirea unor rdquodesignpatternrdquo-uri ın sistem De exemplu pentru a folosi ın nivelul de web ceva din pachetulde servicii trebuia doar acel obiect sa aiba adnotarea Autowired si se ınlocuieste atatfolosirea rdquodesign patternrdquo-ului Singleton cat si a celui de Factory Acel obiect nu trebuiecreat sau initializat se face asta implicit datorita adnotarii si de asemenea este folositapeste tot aceeasi instanta

In concluzie toate cererile venite din interfata grafica ajung ın nivelul de rdquocontrollerrdquode unde sunt trimise la cel de rdquoservicerdquopentru a fi procesate si facute eventualele modificarinecesare ın baza de date ca apoi raspunsul sa fie trimis ınapoi spre aplicatia client pentruafisare

512 Arhitectura componentei frontend

A doua componenta implementata a sistemului este aplicatia client frontend-ulAceasta a fost scrisa ın Java Script cu ajutorul framework-ului Ext JS compilarea

se face cu ajutorul Sencha CMD si mediul de implementare a fost IntelliJ IdeaCu ajutorul framework-ului Ext JS se scriu componente care apoi se initializeaza

unele pe altele Aplicatia porneste cu fisierul Applicationjs care este un fel de rdquomainrdquopentru aplicatie Aceasta initializeaza alte componente care la randul lor includ altecomponente si tot asa Structura poate fi foarte usor comparata cu una arborescenta dinacest punct de vedere

Framework-ul a fost creat sa functioneze ın felul acesta pentru ca scopul componen-telor este sa fie scrise ın asa fel ıncat sa poata pe viitor sa fie utilizate din nou Una dindorintele majore ın programare tot timpul este de a se scrie cod ıntr-o maniera ın care safie cat mai reutilizabil Iar framework-ul Ext JS exact asta ıncearca

Arhitectura aplicatiei client se gaseste ın figura 57 si este la randul ei ımpartita ınpachete ca si cea de server Similar cu pachetul de rdquodomainrdquo de la aplicatia de backendeste pachetul rdquomodelrdquo al interfetei utilizator Aici sunt rdquoclaserdquo care sunt simple POJO sicare sunt apoi folosite ın nivelele urmatoare Sunt mai putine decat clasele din rdquostorerdquodeoarece daca raspunsul de la server nu trebuie procesat nu sunt necesare se pot mapadirect obiectele din rdquostorerdquo pe componentele interfetei utilizator

Urmatorul nivel este cel pe care se afla clasele de rdquostorerdquo Acestea sunt cele careexecuta cererea spre backend si face legatura ıntre client si server Daca are o clasa derdquomodelrdquodeclarata atunci populeaza acel obiect cu datele primite de la server iar ın cazul ıncare nu este declarat un model se trimit datele exact asa cum s-au primit la nivelul urmatorde rdquoviewrdquo Acest nivel seamana din punct de vedere al functiei cu cel de rdquorepositoryrdquo de laaplicatia server deoarece ambele au rol de legatura Aceea facea legatura ıntre aplicatiesi baza de date si aceasta face legatura ıntre aplicatia client si aplicatia server

40

Figura 57 Diagrama de clase pentru aplicatia web

Cel de-al treilea pachet al aplicatiei este cel de rdquoviewrdquo In acest pachet se afla claselecare alcatuiesc partea vizuala a aplicatiei La randul ei si aceasta este alcatuita tot dincomponente Aplicatia deschide ın primul rand Main-ul care determina aparitia paginii deHome si afisarea ın meniu a optiunilor posibile ın functie de autentificare si rol Clasele deaici se executa de fapt la deschiderea aplicatiei fiind rdquosingle page applicationrdquo si tot atuncise ıncarca pe pagina componentele Ca si arhitectura a pachetului acesta este ımpartit larandul sau ın subpachete Pentru o mai buna organizare exista patru subpachete cateunul pentru fiecare tip de utilizator In felul acesta toate rdquoviewrdquo-urile care sunt specificeunui utilizator cu un anumit rol se afla ın acelasi subpachet

Cele patru subpachete existente ın pachetul rdquoviewrdquo sunt

1 Pachetul rdquomainrdquo care cuprinde rdquoviewrdquo-urile care se afla ın partea neautentificata aaplicatiei

2 Pachetul rdquoclientrdquo continand rdquoviewrdquo-urile pe care le poate accesa un utilizator simplu3 Pachetul rdquoproducerrdquo specific actiunilor unui utilizator care are rol de producator4 Pachetul rdquoadminrdquo care contine toate rdquoviewrdquo-urile care ıi apar unui utilizator care este

administrator al aplicatiei

Ultimul pachet si nivel al aplicatiei client este cel de rdquocontrollerrdquo In acest pachet

41

se afla clasele care fac actiunile din interfata grafica In timp ce pachetul rdquoviewrdquo continedoar partea grafica a aplicatiei adica modul ın care aceasta trebuie sa arate pachetulrdquocontrollerrdquo contine actiunea acestora modul ın care aplicatia trebuie sa functioneze

Ca si arhitectura si acest pachet a fost ımpartit la randul lui tot ın cele patrusubpachete ca si pachetul rdquoviewrdquo adica rdquomainrdquo rdquoclientrdquo rdquoproducerrdquo si rdquoadminrdquo In pluspentru a fi usor de gasit ce clasa de rdquocontrollerrdquo apartine carui rdquoviewrdquo am ales ca cele douasa aiba acelasi nume In felul acesta daca se doreste sa se gaseasca actiunile unui rdquoviewrdquose poate cauta dupa o clasa cu acelasi nume ın pachetul rdquocontrollerrdquo Numarul claselor dinacest pachet este mai mic decat cel al claselor din rdquoviewrdquo deoarece nu toate paginile dininterfata au actiuni suplimentare Daca singura actiune este ıncarcarea paginii cu date dela server adica doar o actiune simpla de GET datele se ıncarca cu ajutorul rdquostorerdquo-ului laıncarcarea paginii si nu este necesara nici o actiune suplimentara Paginile pe care se potface si actiuni de alt gen sau se deschid noi ferestre au nevoie de clase de rdquocontrollerrdquo

In concluzie arhitectura aplicatiei client este una bazata pe componente care ıncearcasa foloseasca cat mai multe clase reutilizabile

52 Structura bazei de date

Baza de date a aplicatiei este de tip graf de tipul Neo4j Pentru utilizare exista unprogram numit Neo4j ce trebuie instalat Acest program are si o interfata grafica ın carese pot vizualiza datele sub forma grafica si ın care se pot scrie de asemenea si interogariın limbajul acestei baze de date adica Cypher

Fiind o baza de date sub forma de graf datele stocate sunt salvate ın structurade date sub forma de noduri si relatii Entitatile din pachetul de domeniu din aplicatiabackend se gasesc ın baza de date sub forma unor noduri iar dependentele dintre nodurise mapeaza ın baza de date sub forma unor relatii Un element diferit fata de alte tipuride baze de date este faptul ca pe relatiile dintre noduri se pot salva atribute cum este ınaplicatie cazul pentru prieteniile dintre persoane In cazul acestora pe relatia dintre nodurise salveaza daca prietenia a fost sau nu acceptata

Pentru fiecare clasa POJO din aplicatia server clasa ce are doar metodele get si setsi se afla ın pachetul domain exista cate un tip de nod diferit ın baza de date cum estesi marcat ın diferite culori ın figura 58 Fiecare tip de nod are atributele proprii care potlua valori sau pot fi nule Iar fiecare obiect din Java reprezinta un nod diferit ın baza dedate

Neo4j a fost cea mai buna optiune pentru baza de date pentru ca aplicatia poate ficonsiderata o retea sociala Acest lucru se datoreaza relatiilor de prietenie dintre persoanesi a multiplelor relatii ıntre noduri Toate nodurile se afla ın acceasi componenta conexadeci nu exista noduri izolate care sa nu aiba nici o legatura cu nici un alt nod

Datorita acestei structuri a bazei de date este posibila implementarea cererii derecomandare ca o simpla interogare ın baza de date aceasta fiind cea mai simpla metodade implementare a unui sistem de genul acesta una mult mai complexa ar fi fost un

42

algoritm de ınvatare care sa ınvete tipare ale utilizatorilor si sa recomande cadouri pe bazaacestor informatii

Figura 58 Diagrama bazei de date pentru doi utilizatori

Un alt avantaj al acestui tip de baza de date este faptul ca datele nu sunt duplicateın baza de date Spre exemplu daca mai multi utilizatori au ca locatie acelasi oras nu secreaza cate un nod cu acea locatie de mai multe ori ci acel unic nod va avea cate o relatiecu fiecare utilizator care are ca locatie acel oras

In concluzie structura bazei de date a fost aleasa ın acest fel datorita tipului apli-catiei adica asemanatoare cu o retea sociala si datorita implementarii simple a unui sistemde recomandare pe o asemenea baza de date

53 Fluxul pentru diferite operatii

Pentru aplicatie cele mai importante cazuri de utilizare sunt salvarea informati-ilor despre utilizator primite de la Facebook pentru crearea unui profil si recomandareacadourilor pentru un utilizator al aplicatiei Din aceasta cauza cele doua cazuri de utilizarevor fi prezentate mai ın detaliu ın continuare

43

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 41: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

Nivelul de domeniu (domain) este alcatuit ın primul rand din clasele care suntentitati ın baza de date Acestea sunt reprezentate de toate clasele ce stocheaza informatiidespre utilizatori si despre produse si comenzi Pe langa informatiile personale despre unutilizator de genul numelui email-ului sau data nasterii care sunt salvate ın entitateapersoana se stocheaza despre utilizator ın clase diferite informatii de genul locului undelocuieste locul unde a copilarit locurilor unde a facut scoala locului unde lucreaza sau celmai important pentru aplicatia aceasta lucrurilor care ıi plac In afara acestor informatiidespre utilizatori sunt si clase cu informatiile despre prieteni despre produse sau desprecomenzi

Din cauza faptului ca aplicatia este de tipul unei retele sociale ın care exista prieteniiıntre persoane exista dependente ıntre toate entitatile aplicatiei Acesta este si motivulpentru care am ales baza de date sub forma de graf pe care sa se mapeze toate acesteentitati sub forma de noduri si toate aceste dependente sub forma de relatii

In pachetul de domeniu se afla si trei subpachete Unul dintre ele este pentruclasele folosite pentru a trata erorile aplicatiei In interiorul acestui pachet se afla douaclase pentru eroare si o exceptie cea folosita ın cazul ın care nu se gaseste ceea ce doresteutilizatorul Pe langa asta este clasa care are ca obiect raspunsul dat de sistem ın cazulunei erori la server Aceasta contine ın interiorul sau pe langa codul erorii si detalii despreeroarea trimisa Aceasta lista de detalii e reprezentata de obiectele de tipul celei de-a treiaclase din pachetul acesta

Celelalte doua subpachete aflate ın acest nivel sunt cele care contin clasele specialede cerere sau raspuns care au ajutat la maparea acestora mai bine In multe cazuri nua fost necesara trimiterea la interfata utilizator a tuturor informatiilor stocate despre oentitate si de aceea am ales sa creez ın aceste cazuri un obiect auxiliar care sa fie folositpe post de raspuns

Figura 54 Diagrama de clase pentru pachetul rdquorepositoriesrdquo

37

Cel de-al doilea nivel al aplicatiei backend este cel de rdquomagazierdquo (repositories) carecontine doar interfete de tip rdquoRepositoryrdquo

Aceste interfete sunt cele care fac operatiile directe asupra entitatilor din baza dedate

Unele interfete doar extind interfata care are deja implementate metodele CRUDsi din acest motiv nu au metode suplimentare iar altele au si metode ın plus care au carol sa execute interogari mai complexe asupra bazei de date In acele metode se pot scrieinterogarile ın Cypher pentru a putea primi informatii despre mai multe noduri sau desprerelatiile dintre acestea sau si pentru a returna doar anumite rezultate care ındeplinescanumite conditii In felul acesta a fost implementata si cererea de oferire a recomandarilorIn acel caz sistemul returneaza produsele care au ın descriere unul din lucrurile care se aflaın lista de obiecte sau servicii primite de la Facebook ca ıi plac utilizatorului

Nivelul de rdquoRepositoryrdquo este folosit direct de cel de-al treiea nivel cel de servi-ciu Acesta este nivelul la care se executa logica aplicatiei unde se comanda modul defunctionare al ıntregii aplicatii

Figura 55 Diagrama de clase pentru pachetul rdquoservicesrdquo

Pe acest nivel ajung toate cererile din server dupa ce trec de verificarile de securitateIn acest pachet se afla si clasa de securitate care face verificarile necesare In aceasta clasaexista o metoda ce se apeleaza la prima cerere cea de salvare a datelor de la Facebookdespre utilizator si care codifica id-ul utilizatorului si ıl trimite pe raspuns ınapoi interfeteiPe langa asta ın acea clasa se afla si o metoda care verifica faptul ca id-ul codificat esteal unui utilizator cu rol corespunzator pentru a face acea cerere

In plus ın acest pachet se afla si toate celelalte clase care fac diverse operatii pedatele din baza de date si dau raspunsuri cererilor din interfata Aici se afla logica care

38

comanda actiunile asupra utilizatorilor asupra prietenilor acestora asupra produselor siasupra comenzilor

Ultima clasa a acestui nivel este cea care se ocupa de trimiterea de email-uri Incazul ın care se face o noua comanda de catre un utilizator toti producatorii produselor depe comanda sunt notificati despre produsele lor pe care le doreste utilizatorul Din serviciulde comanda se apeleaza serviciul de email pentru fiecare producator din lista celor care auproduse care se afla pe lista comenzii utilizatorului

Ultimul si cel mai aproape de interfata utilizator este nivelul de web Acolo se aflatoate clasele de rdquoControllerrdquo ale aplicatiei server

Figura 56 Diagrama de clase pentru pachetul rdquowebrdquo

Toate cererile din interfata utilizator ıncearca sa se mapeze pe rutele declarate ınclase pentru a fi procesate ın metoda corespunzatoare Toata aceasta parte este foarteusor de implementat si mai ales foarte lizibil pentru programatori datorita adnotarilor dinJava Cu ajutorul acestora trebuie doar specificat care este numele URL-ului cererii careeste tipul de obiect asteptat si daca se trimite ca rdquoquery stringrdquo pe URL sau ın interiorulcorpului cererii si tipul raspunsului Pentru fiecare cerere care nu este apelata ın parteaneautentificata a utilizatorului primul lucru care se apeleaza este metoda de securitatepentru a verifica rolul si id-ul utilizatorului Daca din punctul de vedere al securitatii totuleste ın regula se apeleaza metoda corespunzatoare din pachetul de serviciu

39

O singura clasa este diferita de restul ın pachetul de controller si aceea este clasa deeroare Acolo se mapeaza erorile aparute ın timpul cererii si se trimite ınapoi ın interfatagrafica un raspuns cu cod de eroare specific nu numai 500 Generic Application Exceptioncum ar trimite fara aceasta clasa si cu detalii despre motivul aparitiei erorii

Datorita folosirii adnotarilor din java nu a fost necesara folosirea unor rdquodesignpatternrdquo-uri ın sistem De exemplu pentru a folosi ın nivelul de web ceva din pachetulde servicii trebuia doar acel obiect sa aiba adnotarea Autowired si se ınlocuieste atatfolosirea rdquodesign patternrdquo-ului Singleton cat si a celui de Factory Acel obiect nu trebuiecreat sau initializat se face asta implicit datorita adnotarii si de asemenea este folositapeste tot aceeasi instanta

In concluzie toate cererile venite din interfata grafica ajung ın nivelul de rdquocontrollerrdquode unde sunt trimise la cel de rdquoservicerdquopentru a fi procesate si facute eventualele modificarinecesare ın baza de date ca apoi raspunsul sa fie trimis ınapoi spre aplicatia client pentruafisare

512 Arhitectura componentei frontend

A doua componenta implementata a sistemului este aplicatia client frontend-ulAceasta a fost scrisa ın Java Script cu ajutorul framework-ului Ext JS compilarea

se face cu ajutorul Sencha CMD si mediul de implementare a fost IntelliJ IdeaCu ajutorul framework-ului Ext JS se scriu componente care apoi se initializeaza

unele pe altele Aplicatia porneste cu fisierul Applicationjs care este un fel de rdquomainrdquopentru aplicatie Aceasta initializeaza alte componente care la randul lor includ altecomponente si tot asa Structura poate fi foarte usor comparata cu una arborescenta dinacest punct de vedere

Framework-ul a fost creat sa functioneze ın felul acesta pentru ca scopul componen-telor este sa fie scrise ın asa fel ıncat sa poata pe viitor sa fie utilizate din nou Una dindorintele majore ın programare tot timpul este de a se scrie cod ıntr-o maniera ın care safie cat mai reutilizabil Iar framework-ul Ext JS exact asta ıncearca

Arhitectura aplicatiei client se gaseste ın figura 57 si este la randul ei ımpartita ınpachete ca si cea de server Similar cu pachetul de rdquodomainrdquo de la aplicatia de backendeste pachetul rdquomodelrdquo al interfetei utilizator Aici sunt rdquoclaserdquo care sunt simple POJO sicare sunt apoi folosite ın nivelele urmatoare Sunt mai putine decat clasele din rdquostorerdquodeoarece daca raspunsul de la server nu trebuie procesat nu sunt necesare se pot mapadirect obiectele din rdquostorerdquo pe componentele interfetei utilizator

Urmatorul nivel este cel pe care se afla clasele de rdquostorerdquo Acestea sunt cele careexecuta cererea spre backend si face legatura ıntre client si server Daca are o clasa derdquomodelrdquodeclarata atunci populeaza acel obiect cu datele primite de la server iar ın cazul ıncare nu este declarat un model se trimit datele exact asa cum s-au primit la nivelul urmatorde rdquoviewrdquo Acest nivel seamana din punct de vedere al functiei cu cel de rdquorepositoryrdquo de laaplicatia server deoarece ambele au rol de legatura Aceea facea legatura ıntre aplicatiesi baza de date si aceasta face legatura ıntre aplicatia client si aplicatia server

40

Figura 57 Diagrama de clase pentru aplicatia web

Cel de-al treilea pachet al aplicatiei este cel de rdquoviewrdquo In acest pachet se afla claselecare alcatuiesc partea vizuala a aplicatiei La randul ei si aceasta este alcatuita tot dincomponente Aplicatia deschide ın primul rand Main-ul care determina aparitia paginii deHome si afisarea ın meniu a optiunilor posibile ın functie de autentificare si rol Clasele deaici se executa de fapt la deschiderea aplicatiei fiind rdquosingle page applicationrdquo si tot atuncise ıncarca pe pagina componentele Ca si arhitectura a pachetului acesta este ımpartit larandul sau ın subpachete Pentru o mai buna organizare exista patru subpachete cateunul pentru fiecare tip de utilizator In felul acesta toate rdquoviewrdquo-urile care sunt specificeunui utilizator cu un anumit rol se afla ın acelasi subpachet

Cele patru subpachete existente ın pachetul rdquoviewrdquo sunt

1 Pachetul rdquomainrdquo care cuprinde rdquoviewrdquo-urile care se afla ın partea neautentificata aaplicatiei

2 Pachetul rdquoclientrdquo continand rdquoviewrdquo-urile pe care le poate accesa un utilizator simplu3 Pachetul rdquoproducerrdquo specific actiunilor unui utilizator care are rol de producator4 Pachetul rdquoadminrdquo care contine toate rdquoviewrdquo-urile care ıi apar unui utilizator care este

administrator al aplicatiei

Ultimul pachet si nivel al aplicatiei client este cel de rdquocontrollerrdquo In acest pachet

41

se afla clasele care fac actiunile din interfata grafica In timp ce pachetul rdquoviewrdquo continedoar partea grafica a aplicatiei adica modul ın care aceasta trebuie sa arate pachetulrdquocontrollerrdquo contine actiunea acestora modul ın care aplicatia trebuie sa functioneze

Ca si arhitectura si acest pachet a fost ımpartit la randul lui tot ın cele patrusubpachete ca si pachetul rdquoviewrdquo adica rdquomainrdquo rdquoclientrdquo rdquoproducerrdquo si rdquoadminrdquo In pluspentru a fi usor de gasit ce clasa de rdquocontrollerrdquo apartine carui rdquoviewrdquo am ales ca cele douasa aiba acelasi nume In felul acesta daca se doreste sa se gaseasca actiunile unui rdquoviewrdquose poate cauta dupa o clasa cu acelasi nume ın pachetul rdquocontrollerrdquo Numarul claselor dinacest pachet este mai mic decat cel al claselor din rdquoviewrdquo deoarece nu toate paginile dininterfata au actiuni suplimentare Daca singura actiune este ıncarcarea paginii cu date dela server adica doar o actiune simpla de GET datele se ıncarca cu ajutorul rdquostorerdquo-ului laıncarcarea paginii si nu este necesara nici o actiune suplimentara Paginile pe care se potface si actiuni de alt gen sau se deschid noi ferestre au nevoie de clase de rdquocontrollerrdquo

In concluzie arhitectura aplicatiei client este una bazata pe componente care ıncearcasa foloseasca cat mai multe clase reutilizabile

52 Structura bazei de date

Baza de date a aplicatiei este de tip graf de tipul Neo4j Pentru utilizare exista unprogram numit Neo4j ce trebuie instalat Acest program are si o interfata grafica ın carese pot vizualiza datele sub forma grafica si ın care se pot scrie de asemenea si interogariın limbajul acestei baze de date adica Cypher

Fiind o baza de date sub forma de graf datele stocate sunt salvate ın structurade date sub forma de noduri si relatii Entitatile din pachetul de domeniu din aplicatiabackend se gasesc ın baza de date sub forma unor noduri iar dependentele dintre nodurise mapeaza ın baza de date sub forma unor relatii Un element diferit fata de alte tipuride baze de date este faptul ca pe relatiile dintre noduri se pot salva atribute cum este ınaplicatie cazul pentru prieteniile dintre persoane In cazul acestora pe relatia dintre nodurise salveaza daca prietenia a fost sau nu acceptata

Pentru fiecare clasa POJO din aplicatia server clasa ce are doar metodele get si setsi se afla ın pachetul domain exista cate un tip de nod diferit ın baza de date cum estesi marcat ın diferite culori ın figura 58 Fiecare tip de nod are atributele proprii care potlua valori sau pot fi nule Iar fiecare obiect din Java reprezinta un nod diferit ın baza dedate

Neo4j a fost cea mai buna optiune pentru baza de date pentru ca aplicatia poate ficonsiderata o retea sociala Acest lucru se datoreaza relatiilor de prietenie dintre persoanesi a multiplelor relatii ıntre noduri Toate nodurile se afla ın acceasi componenta conexadeci nu exista noduri izolate care sa nu aiba nici o legatura cu nici un alt nod

Datorita acestei structuri a bazei de date este posibila implementarea cererii derecomandare ca o simpla interogare ın baza de date aceasta fiind cea mai simpla metodade implementare a unui sistem de genul acesta una mult mai complexa ar fi fost un

42

algoritm de ınvatare care sa ınvete tipare ale utilizatorilor si sa recomande cadouri pe bazaacestor informatii

Figura 58 Diagrama bazei de date pentru doi utilizatori

Un alt avantaj al acestui tip de baza de date este faptul ca datele nu sunt duplicateın baza de date Spre exemplu daca mai multi utilizatori au ca locatie acelasi oras nu secreaza cate un nod cu acea locatie de mai multe ori ci acel unic nod va avea cate o relatiecu fiecare utilizator care are ca locatie acel oras

In concluzie structura bazei de date a fost aleasa ın acest fel datorita tipului apli-catiei adica asemanatoare cu o retea sociala si datorita implementarii simple a unui sistemde recomandare pe o asemenea baza de date

53 Fluxul pentru diferite operatii

Pentru aplicatie cele mai importante cazuri de utilizare sunt salvarea informati-ilor despre utilizator primite de la Facebook pentru crearea unui profil si recomandareacadourilor pentru un utilizator al aplicatiei Din aceasta cauza cele doua cazuri de utilizarevor fi prezentate mai ın detaliu ın continuare

43

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 42: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

Cel de-al doilea nivel al aplicatiei backend este cel de rdquomagazierdquo (repositories) carecontine doar interfete de tip rdquoRepositoryrdquo

Aceste interfete sunt cele care fac operatiile directe asupra entitatilor din baza dedate

Unele interfete doar extind interfata care are deja implementate metodele CRUDsi din acest motiv nu au metode suplimentare iar altele au si metode ın plus care au carol sa execute interogari mai complexe asupra bazei de date In acele metode se pot scrieinterogarile ın Cypher pentru a putea primi informatii despre mai multe noduri sau desprerelatiile dintre acestea sau si pentru a returna doar anumite rezultate care ındeplinescanumite conditii In felul acesta a fost implementata si cererea de oferire a recomandarilorIn acel caz sistemul returneaza produsele care au ın descriere unul din lucrurile care se aflaın lista de obiecte sau servicii primite de la Facebook ca ıi plac utilizatorului

Nivelul de rdquoRepositoryrdquo este folosit direct de cel de-al treiea nivel cel de servi-ciu Acesta este nivelul la care se executa logica aplicatiei unde se comanda modul defunctionare al ıntregii aplicatii

Figura 55 Diagrama de clase pentru pachetul rdquoservicesrdquo

Pe acest nivel ajung toate cererile din server dupa ce trec de verificarile de securitateIn acest pachet se afla si clasa de securitate care face verificarile necesare In aceasta clasaexista o metoda ce se apeleaza la prima cerere cea de salvare a datelor de la Facebookdespre utilizator si care codifica id-ul utilizatorului si ıl trimite pe raspuns ınapoi interfeteiPe langa asta ın acea clasa se afla si o metoda care verifica faptul ca id-ul codificat esteal unui utilizator cu rol corespunzator pentru a face acea cerere

In plus ın acest pachet se afla si toate celelalte clase care fac diverse operatii pedatele din baza de date si dau raspunsuri cererilor din interfata Aici se afla logica care

38

comanda actiunile asupra utilizatorilor asupra prietenilor acestora asupra produselor siasupra comenzilor

Ultima clasa a acestui nivel este cea care se ocupa de trimiterea de email-uri Incazul ın care se face o noua comanda de catre un utilizator toti producatorii produselor depe comanda sunt notificati despre produsele lor pe care le doreste utilizatorul Din serviciulde comanda se apeleaza serviciul de email pentru fiecare producator din lista celor care auproduse care se afla pe lista comenzii utilizatorului

Ultimul si cel mai aproape de interfata utilizator este nivelul de web Acolo se aflatoate clasele de rdquoControllerrdquo ale aplicatiei server

Figura 56 Diagrama de clase pentru pachetul rdquowebrdquo

Toate cererile din interfata utilizator ıncearca sa se mapeze pe rutele declarate ınclase pentru a fi procesate ın metoda corespunzatoare Toata aceasta parte este foarteusor de implementat si mai ales foarte lizibil pentru programatori datorita adnotarilor dinJava Cu ajutorul acestora trebuie doar specificat care este numele URL-ului cererii careeste tipul de obiect asteptat si daca se trimite ca rdquoquery stringrdquo pe URL sau ın interiorulcorpului cererii si tipul raspunsului Pentru fiecare cerere care nu este apelata ın parteaneautentificata a utilizatorului primul lucru care se apeleaza este metoda de securitatepentru a verifica rolul si id-ul utilizatorului Daca din punctul de vedere al securitatii totuleste ın regula se apeleaza metoda corespunzatoare din pachetul de serviciu

39

O singura clasa este diferita de restul ın pachetul de controller si aceea este clasa deeroare Acolo se mapeaza erorile aparute ın timpul cererii si se trimite ınapoi ın interfatagrafica un raspuns cu cod de eroare specific nu numai 500 Generic Application Exceptioncum ar trimite fara aceasta clasa si cu detalii despre motivul aparitiei erorii

Datorita folosirii adnotarilor din java nu a fost necesara folosirea unor rdquodesignpatternrdquo-uri ın sistem De exemplu pentru a folosi ın nivelul de web ceva din pachetulde servicii trebuia doar acel obiect sa aiba adnotarea Autowired si se ınlocuieste atatfolosirea rdquodesign patternrdquo-ului Singleton cat si a celui de Factory Acel obiect nu trebuiecreat sau initializat se face asta implicit datorita adnotarii si de asemenea este folositapeste tot aceeasi instanta

In concluzie toate cererile venite din interfata grafica ajung ın nivelul de rdquocontrollerrdquode unde sunt trimise la cel de rdquoservicerdquopentru a fi procesate si facute eventualele modificarinecesare ın baza de date ca apoi raspunsul sa fie trimis ınapoi spre aplicatia client pentruafisare

512 Arhitectura componentei frontend

A doua componenta implementata a sistemului este aplicatia client frontend-ulAceasta a fost scrisa ın Java Script cu ajutorul framework-ului Ext JS compilarea

se face cu ajutorul Sencha CMD si mediul de implementare a fost IntelliJ IdeaCu ajutorul framework-ului Ext JS se scriu componente care apoi se initializeaza

unele pe altele Aplicatia porneste cu fisierul Applicationjs care este un fel de rdquomainrdquopentru aplicatie Aceasta initializeaza alte componente care la randul lor includ altecomponente si tot asa Structura poate fi foarte usor comparata cu una arborescenta dinacest punct de vedere

Framework-ul a fost creat sa functioneze ın felul acesta pentru ca scopul componen-telor este sa fie scrise ın asa fel ıncat sa poata pe viitor sa fie utilizate din nou Una dindorintele majore ın programare tot timpul este de a se scrie cod ıntr-o maniera ın care safie cat mai reutilizabil Iar framework-ul Ext JS exact asta ıncearca

Arhitectura aplicatiei client se gaseste ın figura 57 si este la randul ei ımpartita ınpachete ca si cea de server Similar cu pachetul de rdquodomainrdquo de la aplicatia de backendeste pachetul rdquomodelrdquo al interfetei utilizator Aici sunt rdquoclaserdquo care sunt simple POJO sicare sunt apoi folosite ın nivelele urmatoare Sunt mai putine decat clasele din rdquostorerdquodeoarece daca raspunsul de la server nu trebuie procesat nu sunt necesare se pot mapadirect obiectele din rdquostorerdquo pe componentele interfetei utilizator

Urmatorul nivel este cel pe care se afla clasele de rdquostorerdquo Acestea sunt cele careexecuta cererea spre backend si face legatura ıntre client si server Daca are o clasa derdquomodelrdquodeclarata atunci populeaza acel obiect cu datele primite de la server iar ın cazul ıncare nu este declarat un model se trimit datele exact asa cum s-au primit la nivelul urmatorde rdquoviewrdquo Acest nivel seamana din punct de vedere al functiei cu cel de rdquorepositoryrdquo de laaplicatia server deoarece ambele au rol de legatura Aceea facea legatura ıntre aplicatiesi baza de date si aceasta face legatura ıntre aplicatia client si aplicatia server

40

Figura 57 Diagrama de clase pentru aplicatia web

Cel de-al treilea pachet al aplicatiei este cel de rdquoviewrdquo In acest pachet se afla claselecare alcatuiesc partea vizuala a aplicatiei La randul ei si aceasta este alcatuita tot dincomponente Aplicatia deschide ın primul rand Main-ul care determina aparitia paginii deHome si afisarea ın meniu a optiunilor posibile ın functie de autentificare si rol Clasele deaici se executa de fapt la deschiderea aplicatiei fiind rdquosingle page applicationrdquo si tot atuncise ıncarca pe pagina componentele Ca si arhitectura a pachetului acesta este ımpartit larandul sau ın subpachete Pentru o mai buna organizare exista patru subpachete cateunul pentru fiecare tip de utilizator In felul acesta toate rdquoviewrdquo-urile care sunt specificeunui utilizator cu un anumit rol se afla ın acelasi subpachet

Cele patru subpachete existente ın pachetul rdquoviewrdquo sunt

1 Pachetul rdquomainrdquo care cuprinde rdquoviewrdquo-urile care se afla ın partea neautentificata aaplicatiei

2 Pachetul rdquoclientrdquo continand rdquoviewrdquo-urile pe care le poate accesa un utilizator simplu3 Pachetul rdquoproducerrdquo specific actiunilor unui utilizator care are rol de producator4 Pachetul rdquoadminrdquo care contine toate rdquoviewrdquo-urile care ıi apar unui utilizator care este

administrator al aplicatiei

Ultimul pachet si nivel al aplicatiei client este cel de rdquocontrollerrdquo In acest pachet

41

se afla clasele care fac actiunile din interfata grafica In timp ce pachetul rdquoviewrdquo continedoar partea grafica a aplicatiei adica modul ın care aceasta trebuie sa arate pachetulrdquocontrollerrdquo contine actiunea acestora modul ın care aplicatia trebuie sa functioneze

Ca si arhitectura si acest pachet a fost ımpartit la randul lui tot ın cele patrusubpachete ca si pachetul rdquoviewrdquo adica rdquomainrdquo rdquoclientrdquo rdquoproducerrdquo si rdquoadminrdquo In pluspentru a fi usor de gasit ce clasa de rdquocontrollerrdquo apartine carui rdquoviewrdquo am ales ca cele douasa aiba acelasi nume In felul acesta daca se doreste sa se gaseasca actiunile unui rdquoviewrdquose poate cauta dupa o clasa cu acelasi nume ın pachetul rdquocontrollerrdquo Numarul claselor dinacest pachet este mai mic decat cel al claselor din rdquoviewrdquo deoarece nu toate paginile dininterfata au actiuni suplimentare Daca singura actiune este ıncarcarea paginii cu date dela server adica doar o actiune simpla de GET datele se ıncarca cu ajutorul rdquostorerdquo-ului laıncarcarea paginii si nu este necesara nici o actiune suplimentara Paginile pe care se potface si actiuni de alt gen sau se deschid noi ferestre au nevoie de clase de rdquocontrollerrdquo

In concluzie arhitectura aplicatiei client este una bazata pe componente care ıncearcasa foloseasca cat mai multe clase reutilizabile

52 Structura bazei de date

Baza de date a aplicatiei este de tip graf de tipul Neo4j Pentru utilizare exista unprogram numit Neo4j ce trebuie instalat Acest program are si o interfata grafica ın carese pot vizualiza datele sub forma grafica si ın care se pot scrie de asemenea si interogariın limbajul acestei baze de date adica Cypher

Fiind o baza de date sub forma de graf datele stocate sunt salvate ın structurade date sub forma de noduri si relatii Entitatile din pachetul de domeniu din aplicatiabackend se gasesc ın baza de date sub forma unor noduri iar dependentele dintre nodurise mapeaza ın baza de date sub forma unor relatii Un element diferit fata de alte tipuride baze de date este faptul ca pe relatiile dintre noduri se pot salva atribute cum este ınaplicatie cazul pentru prieteniile dintre persoane In cazul acestora pe relatia dintre nodurise salveaza daca prietenia a fost sau nu acceptata

Pentru fiecare clasa POJO din aplicatia server clasa ce are doar metodele get si setsi se afla ın pachetul domain exista cate un tip de nod diferit ın baza de date cum estesi marcat ın diferite culori ın figura 58 Fiecare tip de nod are atributele proprii care potlua valori sau pot fi nule Iar fiecare obiect din Java reprezinta un nod diferit ın baza dedate

Neo4j a fost cea mai buna optiune pentru baza de date pentru ca aplicatia poate ficonsiderata o retea sociala Acest lucru se datoreaza relatiilor de prietenie dintre persoanesi a multiplelor relatii ıntre noduri Toate nodurile se afla ın acceasi componenta conexadeci nu exista noduri izolate care sa nu aiba nici o legatura cu nici un alt nod

Datorita acestei structuri a bazei de date este posibila implementarea cererii derecomandare ca o simpla interogare ın baza de date aceasta fiind cea mai simpla metodade implementare a unui sistem de genul acesta una mult mai complexa ar fi fost un

42

algoritm de ınvatare care sa ınvete tipare ale utilizatorilor si sa recomande cadouri pe bazaacestor informatii

Figura 58 Diagrama bazei de date pentru doi utilizatori

Un alt avantaj al acestui tip de baza de date este faptul ca datele nu sunt duplicateın baza de date Spre exemplu daca mai multi utilizatori au ca locatie acelasi oras nu secreaza cate un nod cu acea locatie de mai multe ori ci acel unic nod va avea cate o relatiecu fiecare utilizator care are ca locatie acel oras

In concluzie structura bazei de date a fost aleasa ın acest fel datorita tipului apli-catiei adica asemanatoare cu o retea sociala si datorita implementarii simple a unui sistemde recomandare pe o asemenea baza de date

53 Fluxul pentru diferite operatii

Pentru aplicatie cele mai importante cazuri de utilizare sunt salvarea informati-ilor despre utilizator primite de la Facebook pentru crearea unui profil si recomandareacadourilor pentru un utilizator al aplicatiei Din aceasta cauza cele doua cazuri de utilizarevor fi prezentate mai ın detaliu ın continuare

43

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 43: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

comanda actiunile asupra utilizatorilor asupra prietenilor acestora asupra produselor siasupra comenzilor

Ultima clasa a acestui nivel este cea care se ocupa de trimiterea de email-uri Incazul ın care se face o noua comanda de catre un utilizator toti producatorii produselor depe comanda sunt notificati despre produsele lor pe care le doreste utilizatorul Din serviciulde comanda se apeleaza serviciul de email pentru fiecare producator din lista celor care auproduse care se afla pe lista comenzii utilizatorului

Ultimul si cel mai aproape de interfata utilizator este nivelul de web Acolo se aflatoate clasele de rdquoControllerrdquo ale aplicatiei server

Figura 56 Diagrama de clase pentru pachetul rdquowebrdquo

Toate cererile din interfata utilizator ıncearca sa se mapeze pe rutele declarate ınclase pentru a fi procesate ın metoda corespunzatoare Toata aceasta parte este foarteusor de implementat si mai ales foarte lizibil pentru programatori datorita adnotarilor dinJava Cu ajutorul acestora trebuie doar specificat care este numele URL-ului cererii careeste tipul de obiect asteptat si daca se trimite ca rdquoquery stringrdquo pe URL sau ın interiorulcorpului cererii si tipul raspunsului Pentru fiecare cerere care nu este apelata ın parteaneautentificata a utilizatorului primul lucru care se apeleaza este metoda de securitatepentru a verifica rolul si id-ul utilizatorului Daca din punctul de vedere al securitatii totuleste ın regula se apeleaza metoda corespunzatoare din pachetul de serviciu

39

O singura clasa este diferita de restul ın pachetul de controller si aceea este clasa deeroare Acolo se mapeaza erorile aparute ın timpul cererii si se trimite ınapoi ın interfatagrafica un raspuns cu cod de eroare specific nu numai 500 Generic Application Exceptioncum ar trimite fara aceasta clasa si cu detalii despre motivul aparitiei erorii

Datorita folosirii adnotarilor din java nu a fost necesara folosirea unor rdquodesignpatternrdquo-uri ın sistem De exemplu pentru a folosi ın nivelul de web ceva din pachetulde servicii trebuia doar acel obiect sa aiba adnotarea Autowired si se ınlocuieste atatfolosirea rdquodesign patternrdquo-ului Singleton cat si a celui de Factory Acel obiect nu trebuiecreat sau initializat se face asta implicit datorita adnotarii si de asemenea este folositapeste tot aceeasi instanta

In concluzie toate cererile venite din interfata grafica ajung ın nivelul de rdquocontrollerrdquode unde sunt trimise la cel de rdquoservicerdquopentru a fi procesate si facute eventualele modificarinecesare ın baza de date ca apoi raspunsul sa fie trimis ınapoi spre aplicatia client pentruafisare

512 Arhitectura componentei frontend

A doua componenta implementata a sistemului este aplicatia client frontend-ulAceasta a fost scrisa ın Java Script cu ajutorul framework-ului Ext JS compilarea

se face cu ajutorul Sencha CMD si mediul de implementare a fost IntelliJ IdeaCu ajutorul framework-ului Ext JS se scriu componente care apoi se initializeaza

unele pe altele Aplicatia porneste cu fisierul Applicationjs care este un fel de rdquomainrdquopentru aplicatie Aceasta initializeaza alte componente care la randul lor includ altecomponente si tot asa Structura poate fi foarte usor comparata cu una arborescenta dinacest punct de vedere

Framework-ul a fost creat sa functioneze ın felul acesta pentru ca scopul componen-telor este sa fie scrise ın asa fel ıncat sa poata pe viitor sa fie utilizate din nou Una dindorintele majore ın programare tot timpul este de a se scrie cod ıntr-o maniera ın care safie cat mai reutilizabil Iar framework-ul Ext JS exact asta ıncearca

Arhitectura aplicatiei client se gaseste ın figura 57 si este la randul ei ımpartita ınpachete ca si cea de server Similar cu pachetul de rdquodomainrdquo de la aplicatia de backendeste pachetul rdquomodelrdquo al interfetei utilizator Aici sunt rdquoclaserdquo care sunt simple POJO sicare sunt apoi folosite ın nivelele urmatoare Sunt mai putine decat clasele din rdquostorerdquodeoarece daca raspunsul de la server nu trebuie procesat nu sunt necesare se pot mapadirect obiectele din rdquostorerdquo pe componentele interfetei utilizator

Urmatorul nivel este cel pe care se afla clasele de rdquostorerdquo Acestea sunt cele careexecuta cererea spre backend si face legatura ıntre client si server Daca are o clasa derdquomodelrdquodeclarata atunci populeaza acel obiect cu datele primite de la server iar ın cazul ıncare nu este declarat un model se trimit datele exact asa cum s-au primit la nivelul urmatorde rdquoviewrdquo Acest nivel seamana din punct de vedere al functiei cu cel de rdquorepositoryrdquo de laaplicatia server deoarece ambele au rol de legatura Aceea facea legatura ıntre aplicatiesi baza de date si aceasta face legatura ıntre aplicatia client si aplicatia server

40

Figura 57 Diagrama de clase pentru aplicatia web

Cel de-al treilea pachet al aplicatiei este cel de rdquoviewrdquo In acest pachet se afla claselecare alcatuiesc partea vizuala a aplicatiei La randul ei si aceasta este alcatuita tot dincomponente Aplicatia deschide ın primul rand Main-ul care determina aparitia paginii deHome si afisarea ın meniu a optiunilor posibile ın functie de autentificare si rol Clasele deaici se executa de fapt la deschiderea aplicatiei fiind rdquosingle page applicationrdquo si tot atuncise ıncarca pe pagina componentele Ca si arhitectura a pachetului acesta este ımpartit larandul sau ın subpachete Pentru o mai buna organizare exista patru subpachete cateunul pentru fiecare tip de utilizator In felul acesta toate rdquoviewrdquo-urile care sunt specificeunui utilizator cu un anumit rol se afla ın acelasi subpachet

Cele patru subpachete existente ın pachetul rdquoviewrdquo sunt

1 Pachetul rdquomainrdquo care cuprinde rdquoviewrdquo-urile care se afla ın partea neautentificata aaplicatiei

2 Pachetul rdquoclientrdquo continand rdquoviewrdquo-urile pe care le poate accesa un utilizator simplu3 Pachetul rdquoproducerrdquo specific actiunilor unui utilizator care are rol de producator4 Pachetul rdquoadminrdquo care contine toate rdquoviewrdquo-urile care ıi apar unui utilizator care este

administrator al aplicatiei

Ultimul pachet si nivel al aplicatiei client este cel de rdquocontrollerrdquo In acest pachet

41

se afla clasele care fac actiunile din interfata grafica In timp ce pachetul rdquoviewrdquo continedoar partea grafica a aplicatiei adica modul ın care aceasta trebuie sa arate pachetulrdquocontrollerrdquo contine actiunea acestora modul ın care aplicatia trebuie sa functioneze

Ca si arhitectura si acest pachet a fost ımpartit la randul lui tot ın cele patrusubpachete ca si pachetul rdquoviewrdquo adica rdquomainrdquo rdquoclientrdquo rdquoproducerrdquo si rdquoadminrdquo In pluspentru a fi usor de gasit ce clasa de rdquocontrollerrdquo apartine carui rdquoviewrdquo am ales ca cele douasa aiba acelasi nume In felul acesta daca se doreste sa se gaseasca actiunile unui rdquoviewrdquose poate cauta dupa o clasa cu acelasi nume ın pachetul rdquocontrollerrdquo Numarul claselor dinacest pachet este mai mic decat cel al claselor din rdquoviewrdquo deoarece nu toate paginile dininterfata au actiuni suplimentare Daca singura actiune este ıncarcarea paginii cu date dela server adica doar o actiune simpla de GET datele se ıncarca cu ajutorul rdquostorerdquo-ului laıncarcarea paginii si nu este necesara nici o actiune suplimentara Paginile pe care se potface si actiuni de alt gen sau se deschid noi ferestre au nevoie de clase de rdquocontrollerrdquo

In concluzie arhitectura aplicatiei client este una bazata pe componente care ıncearcasa foloseasca cat mai multe clase reutilizabile

52 Structura bazei de date

Baza de date a aplicatiei este de tip graf de tipul Neo4j Pentru utilizare exista unprogram numit Neo4j ce trebuie instalat Acest program are si o interfata grafica ın carese pot vizualiza datele sub forma grafica si ın care se pot scrie de asemenea si interogariın limbajul acestei baze de date adica Cypher

Fiind o baza de date sub forma de graf datele stocate sunt salvate ın structurade date sub forma de noduri si relatii Entitatile din pachetul de domeniu din aplicatiabackend se gasesc ın baza de date sub forma unor noduri iar dependentele dintre nodurise mapeaza ın baza de date sub forma unor relatii Un element diferit fata de alte tipuride baze de date este faptul ca pe relatiile dintre noduri se pot salva atribute cum este ınaplicatie cazul pentru prieteniile dintre persoane In cazul acestora pe relatia dintre nodurise salveaza daca prietenia a fost sau nu acceptata

Pentru fiecare clasa POJO din aplicatia server clasa ce are doar metodele get si setsi se afla ın pachetul domain exista cate un tip de nod diferit ın baza de date cum estesi marcat ın diferite culori ın figura 58 Fiecare tip de nod are atributele proprii care potlua valori sau pot fi nule Iar fiecare obiect din Java reprezinta un nod diferit ın baza dedate

Neo4j a fost cea mai buna optiune pentru baza de date pentru ca aplicatia poate ficonsiderata o retea sociala Acest lucru se datoreaza relatiilor de prietenie dintre persoanesi a multiplelor relatii ıntre noduri Toate nodurile se afla ın acceasi componenta conexadeci nu exista noduri izolate care sa nu aiba nici o legatura cu nici un alt nod

Datorita acestei structuri a bazei de date este posibila implementarea cererii derecomandare ca o simpla interogare ın baza de date aceasta fiind cea mai simpla metodade implementare a unui sistem de genul acesta una mult mai complexa ar fi fost un

42

algoritm de ınvatare care sa ınvete tipare ale utilizatorilor si sa recomande cadouri pe bazaacestor informatii

Figura 58 Diagrama bazei de date pentru doi utilizatori

Un alt avantaj al acestui tip de baza de date este faptul ca datele nu sunt duplicateın baza de date Spre exemplu daca mai multi utilizatori au ca locatie acelasi oras nu secreaza cate un nod cu acea locatie de mai multe ori ci acel unic nod va avea cate o relatiecu fiecare utilizator care are ca locatie acel oras

In concluzie structura bazei de date a fost aleasa ın acest fel datorita tipului apli-catiei adica asemanatoare cu o retea sociala si datorita implementarii simple a unui sistemde recomandare pe o asemenea baza de date

53 Fluxul pentru diferite operatii

Pentru aplicatie cele mai importante cazuri de utilizare sunt salvarea informati-ilor despre utilizator primite de la Facebook pentru crearea unui profil si recomandareacadourilor pentru un utilizator al aplicatiei Din aceasta cauza cele doua cazuri de utilizarevor fi prezentate mai ın detaliu ın continuare

43

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 44: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

O singura clasa este diferita de restul ın pachetul de controller si aceea este clasa deeroare Acolo se mapeaza erorile aparute ın timpul cererii si se trimite ınapoi ın interfatagrafica un raspuns cu cod de eroare specific nu numai 500 Generic Application Exceptioncum ar trimite fara aceasta clasa si cu detalii despre motivul aparitiei erorii

Datorita folosirii adnotarilor din java nu a fost necesara folosirea unor rdquodesignpatternrdquo-uri ın sistem De exemplu pentru a folosi ın nivelul de web ceva din pachetulde servicii trebuia doar acel obiect sa aiba adnotarea Autowired si se ınlocuieste atatfolosirea rdquodesign patternrdquo-ului Singleton cat si a celui de Factory Acel obiect nu trebuiecreat sau initializat se face asta implicit datorita adnotarii si de asemenea este folositapeste tot aceeasi instanta

In concluzie toate cererile venite din interfata grafica ajung ın nivelul de rdquocontrollerrdquode unde sunt trimise la cel de rdquoservicerdquopentru a fi procesate si facute eventualele modificarinecesare ın baza de date ca apoi raspunsul sa fie trimis ınapoi spre aplicatia client pentruafisare

512 Arhitectura componentei frontend

A doua componenta implementata a sistemului este aplicatia client frontend-ulAceasta a fost scrisa ın Java Script cu ajutorul framework-ului Ext JS compilarea

se face cu ajutorul Sencha CMD si mediul de implementare a fost IntelliJ IdeaCu ajutorul framework-ului Ext JS se scriu componente care apoi se initializeaza

unele pe altele Aplicatia porneste cu fisierul Applicationjs care este un fel de rdquomainrdquopentru aplicatie Aceasta initializeaza alte componente care la randul lor includ altecomponente si tot asa Structura poate fi foarte usor comparata cu una arborescenta dinacest punct de vedere

Framework-ul a fost creat sa functioneze ın felul acesta pentru ca scopul componen-telor este sa fie scrise ın asa fel ıncat sa poata pe viitor sa fie utilizate din nou Una dindorintele majore ın programare tot timpul este de a se scrie cod ıntr-o maniera ın care safie cat mai reutilizabil Iar framework-ul Ext JS exact asta ıncearca

Arhitectura aplicatiei client se gaseste ın figura 57 si este la randul ei ımpartita ınpachete ca si cea de server Similar cu pachetul de rdquodomainrdquo de la aplicatia de backendeste pachetul rdquomodelrdquo al interfetei utilizator Aici sunt rdquoclaserdquo care sunt simple POJO sicare sunt apoi folosite ın nivelele urmatoare Sunt mai putine decat clasele din rdquostorerdquodeoarece daca raspunsul de la server nu trebuie procesat nu sunt necesare se pot mapadirect obiectele din rdquostorerdquo pe componentele interfetei utilizator

Urmatorul nivel este cel pe care se afla clasele de rdquostorerdquo Acestea sunt cele careexecuta cererea spre backend si face legatura ıntre client si server Daca are o clasa derdquomodelrdquodeclarata atunci populeaza acel obiect cu datele primite de la server iar ın cazul ıncare nu este declarat un model se trimit datele exact asa cum s-au primit la nivelul urmatorde rdquoviewrdquo Acest nivel seamana din punct de vedere al functiei cu cel de rdquorepositoryrdquo de laaplicatia server deoarece ambele au rol de legatura Aceea facea legatura ıntre aplicatiesi baza de date si aceasta face legatura ıntre aplicatia client si aplicatia server

40

Figura 57 Diagrama de clase pentru aplicatia web

Cel de-al treilea pachet al aplicatiei este cel de rdquoviewrdquo In acest pachet se afla claselecare alcatuiesc partea vizuala a aplicatiei La randul ei si aceasta este alcatuita tot dincomponente Aplicatia deschide ın primul rand Main-ul care determina aparitia paginii deHome si afisarea ın meniu a optiunilor posibile ın functie de autentificare si rol Clasele deaici se executa de fapt la deschiderea aplicatiei fiind rdquosingle page applicationrdquo si tot atuncise ıncarca pe pagina componentele Ca si arhitectura a pachetului acesta este ımpartit larandul sau ın subpachete Pentru o mai buna organizare exista patru subpachete cateunul pentru fiecare tip de utilizator In felul acesta toate rdquoviewrdquo-urile care sunt specificeunui utilizator cu un anumit rol se afla ın acelasi subpachet

Cele patru subpachete existente ın pachetul rdquoviewrdquo sunt

1 Pachetul rdquomainrdquo care cuprinde rdquoviewrdquo-urile care se afla ın partea neautentificata aaplicatiei

2 Pachetul rdquoclientrdquo continand rdquoviewrdquo-urile pe care le poate accesa un utilizator simplu3 Pachetul rdquoproducerrdquo specific actiunilor unui utilizator care are rol de producator4 Pachetul rdquoadminrdquo care contine toate rdquoviewrdquo-urile care ıi apar unui utilizator care este

administrator al aplicatiei

Ultimul pachet si nivel al aplicatiei client este cel de rdquocontrollerrdquo In acest pachet

41

se afla clasele care fac actiunile din interfata grafica In timp ce pachetul rdquoviewrdquo continedoar partea grafica a aplicatiei adica modul ın care aceasta trebuie sa arate pachetulrdquocontrollerrdquo contine actiunea acestora modul ın care aplicatia trebuie sa functioneze

Ca si arhitectura si acest pachet a fost ımpartit la randul lui tot ın cele patrusubpachete ca si pachetul rdquoviewrdquo adica rdquomainrdquo rdquoclientrdquo rdquoproducerrdquo si rdquoadminrdquo In pluspentru a fi usor de gasit ce clasa de rdquocontrollerrdquo apartine carui rdquoviewrdquo am ales ca cele douasa aiba acelasi nume In felul acesta daca se doreste sa se gaseasca actiunile unui rdquoviewrdquose poate cauta dupa o clasa cu acelasi nume ın pachetul rdquocontrollerrdquo Numarul claselor dinacest pachet este mai mic decat cel al claselor din rdquoviewrdquo deoarece nu toate paginile dininterfata au actiuni suplimentare Daca singura actiune este ıncarcarea paginii cu date dela server adica doar o actiune simpla de GET datele se ıncarca cu ajutorul rdquostorerdquo-ului laıncarcarea paginii si nu este necesara nici o actiune suplimentara Paginile pe care se potface si actiuni de alt gen sau se deschid noi ferestre au nevoie de clase de rdquocontrollerrdquo

In concluzie arhitectura aplicatiei client este una bazata pe componente care ıncearcasa foloseasca cat mai multe clase reutilizabile

52 Structura bazei de date

Baza de date a aplicatiei este de tip graf de tipul Neo4j Pentru utilizare exista unprogram numit Neo4j ce trebuie instalat Acest program are si o interfata grafica ın carese pot vizualiza datele sub forma grafica si ın care se pot scrie de asemenea si interogariın limbajul acestei baze de date adica Cypher

Fiind o baza de date sub forma de graf datele stocate sunt salvate ın structurade date sub forma de noduri si relatii Entitatile din pachetul de domeniu din aplicatiabackend se gasesc ın baza de date sub forma unor noduri iar dependentele dintre nodurise mapeaza ın baza de date sub forma unor relatii Un element diferit fata de alte tipuride baze de date este faptul ca pe relatiile dintre noduri se pot salva atribute cum este ınaplicatie cazul pentru prieteniile dintre persoane In cazul acestora pe relatia dintre nodurise salveaza daca prietenia a fost sau nu acceptata

Pentru fiecare clasa POJO din aplicatia server clasa ce are doar metodele get si setsi se afla ın pachetul domain exista cate un tip de nod diferit ın baza de date cum estesi marcat ın diferite culori ın figura 58 Fiecare tip de nod are atributele proprii care potlua valori sau pot fi nule Iar fiecare obiect din Java reprezinta un nod diferit ın baza dedate

Neo4j a fost cea mai buna optiune pentru baza de date pentru ca aplicatia poate ficonsiderata o retea sociala Acest lucru se datoreaza relatiilor de prietenie dintre persoanesi a multiplelor relatii ıntre noduri Toate nodurile se afla ın acceasi componenta conexadeci nu exista noduri izolate care sa nu aiba nici o legatura cu nici un alt nod

Datorita acestei structuri a bazei de date este posibila implementarea cererii derecomandare ca o simpla interogare ın baza de date aceasta fiind cea mai simpla metodade implementare a unui sistem de genul acesta una mult mai complexa ar fi fost un

42

algoritm de ınvatare care sa ınvete tipare ale utilizatorilor si sa recomande cadouri pe bazaacestor informatii

Figura 58 Diagrama bazei de date pentru doi utilizatori

Un alt avantaj al acestui tip de baza de date este faptul ca datele nu sunt duplicateın baza de date Spre exemplu daca mai multi utilizatori au ca locatie acelasi oras nu secreaza cate un nod cu acea locatie de mai multe ori ci acel unic nod va avea cate o relatiecu fiecare utilizator care are ca locatie acel oras

In concluzie structura bazei de date a fost aleasa ın acest fel datorita tipului apli-catiei adica asemanatoare cu o retea sociala si datorita implementarii simple a unui sistemde recomandare pe o asemenea baza de date

53 Fluxul pentru diferite operatii

Pentru aplicatie cele mai importante cazuri de utilizare sunt salvarea informati-ilor despre utilizator primite de la Facebook pentru crearea unui profil si recomandareacadourilor pentru un utilizator al aplicatiei Din aceasta cauza cele doua cazuri de utilizarevor fi prezentate mai ın detaliu ın continuare

43

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 45: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

Figura 57 Diagrama de clase pentru aplicatia web

Cel de-al treilea pachet al aplicatiei este cel de rdquoviewrdquo In acest pachet se afla claselecare alcatuiesc partea vizuala a aplicatiei La randul ei si aceasta este alcatuita tot dincomponente Aplicatia deschide ın primul rand Main-ul care determina aparitia paginii deHome si afisarea ın meniu a optiunilor posibile ın functie de autentificare si rol Clasele deaici se executa de fapt la deschiderea aplicatiei fiind rdquosingle page applicationrdquo si tot atuncise ıncarca pe pagina componentele Ca si arhitectura a pachetului acesta este ımpartit larandul sau ın subpachete Pentru o mai buna organizare exista patru subpachete cateunul pentru fiecare tip de utilizator In felul acesta toate rdquoviewrdquo-urile care sunt specificeunui utilizator cu un anumit rol se afla ın acelasi subpachet

Cele patru subpachete existente ın pachetul rdquoviewrdquo sunt

1 Pachetul rdquomainrdquo care cuprinde rdquoviewrdquo-urile care se afla ın partea neautentificata aaplicatiei

2 Pachetul rdquoclientrdquo continand rdquoviewrdquo-urile pe care le poate accesa un utilizator simplu3 Pachetul rdquoproducerrdquo specific actiunilor unui utilizator care are rol de producator4 Pachetul rdquoadminrdquo care contine toate rdquoviewrdquo-urile care ıi apar unui utilizator care este

administrator al aplicatiei

Ultimul pachet si nivel al aplicatiei client este cel de rdquocontrollerrdquo In acest pachet

41

se afla clasele care fac actiunile din interfata grafica In timp ce pachetul rdquoviewrdquo continedoar partea grafica a aplicatiei adica modul ın care aceasta trebuie sa arate pachetulrdquocontrollerrdquo contine actiunea acestora modul ın care aplicatia trebuie sa functioneze

Ca si arhitectura si acest pachet a fost ımpartit la randul lui tot ın cele patrusubpachete ca si pachetul rdquoviewrdquo adica rdquomainrdquo rdquoclientrdquo rdquoproducerrdquo si rdquoadminrdquo In pluspentru a fi usor de gasit ce clasa de rdquocontrollerrdquo apartine carui rdquoviewrdquo am ales ca cele douasa aiba acelasi nume In felul acesta daca se doreste sa se gaseasca actiunile unui rdquoviewrdquose poate cauta dupa o clasa cu acelasi nume ın pachetul rdquocontrollerrdquo Numarul claselor dinacest pachet este mai mic decat cel al claselor din rdquoviewrdquo deoarece nu toate paginile dininterfata au actiuni suplimentare Daca singura actiune este ıncarcarea paginii cu date dela server adica doar o actiune simpla de GET datele se ıncarca cu ajutorul rdquostorerdquo-ului laıncarcarea paginii si nu este necesara nici o actiune suplimentara Paginile pe care se potface si actiuni de alt gen sau se deschid noi ferestre au nevoie de clase de rdquocontrollerrdquo

In concluzie arhitectura aplicatiei client este una bazata pe componente care ıncearcasa foloseasca cat mai multe clase reutilizabile

52 Structura bazei de date

Baza de date a aplicatiei este de tip graf de tipul Neo4j Pentru utilizare exista unprogram numit Neo4j ce trebuie instalat Acest program are si o interfata grafica ın carese pot vizualiza datele sub forma grafica si ın care se pot scrie de asemenea si interogariın limbajul acestei baze de date adica Cypher

Fiind o baza de date sub forma de graf datele stocate sunt salvate ın structurade date sub forma de noduri si relatii Entitatile din pachetul de domeniu din aplicatiabackend se gasesc ın baza de date sub forma unor noduri iar dependentele dintre nodurise mapeaza ın baza de date sub forma unor relatii Un element diferit fata de alte tipuride baze de date este faptul ca pe relatiile dintre noduri se pot salva atribute cum este ınaplicatie cazul pentru prieteniile dintre persoane In cazul acestora pe relatia dintre nodurise salveaza daca prietenia a fost sau nu acceptata

Pentru fiecare clasa POJO din aplicatia server clasa ce are doar metodele get si setsi se afla ın pachetul domain exista cate un tip de nod diferit ın baza de date cum estesi marcat ın diferite culori ın figura 58 Fiecare tip de nod are atributele proprii care potlua valori sau pot fi nule Iar fiecare obiect din Java reprezinta un nod diferit ın baza dedate

Neo4j a fost cea mai buna optiune pentru baza de date pentru ca aplicatia poate ficonsiderata o retea sociala Acest lucru se datoreaza relatiilor de prietenie dintre persoanesi a multiplelor relatii ıntre noduri Toate nodurile se afla ın acceasi componenta conexadeci nu exista noduri izolate care sa nu aiba nici o legatura cu nici un alt nod

Datorita acestei structuri a bazei de date este posibila implementarea cererii derecomandare ca o simpla interogare ın baza de date aceasta fiind cea mai simpla metodade implementare a unui sistem de genul acesta una mult mai complexa ar fi fost un

42

algoritm de ınvatare care sa ınvete tipare ale utilizatorilor si sa recomande cadouri pe bazaacestor informatii

Figura 58 Diagrama bazei de date pentru doi utilizatori

Un alt avantaj al acestui tip de baza de date este faptul ca datele nu sunt duplicateın baza de date Spre exemplu daca mai multi utilizatori au ca locatie acelasi oras nu secreaza cate un nod cu acea locatie de mai multe ori ci acel unic nod va avea cate o relatiecu fiecare utilizator care are ca locatie acel oras

In concluzie structura bazei de date a fost aleasa ın acest fel datorita tipului apli-catiei adica asemanatoare cu o retea sociala si datorita implementarii simple a unui sistemde recomandare pe o asemenea baza de date

53 Fluxul pentru diferite operatii

Pentru aplicatie cele mai importante cazuri de utilizare sunt salvarea informati-ilor despre utilizator primite de la Facebook pentru crearea unui profil si recomandareacadourilor pentru un utilizator al aplicatiei Din aceasta cauza cele doua cazuri de utilizarevor fi prezentate mai ın detaliu ın continuare

43

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 46: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

se afla clasele care fac actiunile din interfata grafica In timp ce pachetul rdquoviewrdquo continedoar partea grafica a aplicatiei adica modul ın care aceasta trebuie sa arate pachetulrdquocontrollerrdquo contine actiunea acestora modul ın care aplicatia trebuie sa functioneze

Ca si arhitectura si acest pachet a fost ımpartit la randul lui tot ın cele patrusubpachete ca si pachetul rdquoviewrdquo adica rdquomainrdquo rdquoclientrdquo rdquoproducerrdquo si rdquoadminrdquo In pluspentru a fi usor de gasit ce clasa de rdquocontrollerrdquo apartine carui rdquoviewrdquo am ales ca cele douasa aiba acelasi nume In felul acesta daca se doreste sa se gaseasca actiunile unui rdquoviewrdquose poate cauta dupa o clasa cu acelasi nume ın pachetul rdquocontrollerrdquo Numarul claselor dinacest pachet este mai mic decat cel al claselor din rdquoviewrdquo deoarece nu toate paginile dininterfata au actiuni suplimentare Daca singura actiune este ıncarcarea paginii cu date dela server adica doar o actiune simpla de GET datele se ıncarca cu ajutorul rdquostorerdquo-ului laıncarcarea paginii si nu este necesara nici o actiune suplimentara Paginile pe care se potface si actiuni de alt gen sau se deschid noi ferestre au nevoie de clase de rdquocontrollerrdquo

In concluzie arhitectura aplicatiei client este una bazata pe componente care ıncearcasa foloseasca cat mai multe clase reutilizabile

52 Structura bazei de date

Baza de date a aplicatiei este de tip graf de tipul Neo4j Pentru utilizare exista unprogram numit Neo4j ce trebuie instalat Acest program are si o interfata grafica ın carese pot vizualiza datele sub forma grafica si ın care se pot scrie de asemenea si interogariın limbajul acestei baze de date adica Cypher

Fiind o baza de date sub forma de graf datele stocate sunt salvate ın structurade date sub forma de noduri si relatii Entitatile din pachetul de domeniu din aplicatiabackend se gasesc ın baza de date sub forma unor noduri iar dependentele dintre nodurise mapeaza ın baza de date sub forma unor relatii Un element diferit fata de alte tipuride baze de date este faptul ca pe relatiile dintre noduri se pot salva atribute cum este ınaplicatie cazul pentru prieteniile dintre persoane In cazul acestora pe relatia dintre nodurise salveaza daca prietenia a fost sau nu acceptata

Pentru fiecare clasa POJO din aplicatia server clasa ce are doar metodele get si setsi se afla ın pachetul domain exista cate un tip de nod diferit ın baza de date cum estesi marcat ın diferite culori ın figura 58 Fiecare tip de nod are atributele proprii care potlua valori sau pot fi nule Iar fiecare obiect din Java reprezinta un nod diferit ın baza dedate

Neo4j a fost cea mai buna optiune pentru baza de date pentru ca aplicatia poate ficonsiderata o retea sociala Acest lucru se datoreaza relatiilor de prietenie dintre persoanesi a multiplelor relatii ıntre noduri Toate nodurile se afla ın acceasi componenta conexadeci nu exista noduri izolate care sa nu aiba nici o legatura cu nici un alt nod

Datorita acestei structuri a bazei de date este posibila implementarea cererii derecomandare ca o simpla interogare ın baza de date aceasta fiind cea mai simpla metodade implementare a unui sistem de genul acesta una mult mai complexa ar fi fost un

42

algoritm de ınvatare care sa ınvete tipare ale utilizatorilor si sa recomande cadouri pe bazaacestor informatii

Figura 58 Diagrama bazei de date pentru doi utilizatori

Un alt avantaj al acestui tip de baza de date este faptul ca datele nu sunt duplicateın baza de date Spre exemplu daca mai multi utilizatori au ca locatie acelasi oras nu secreaza cate un nod cu acea locatie de mai multe ori ci acel unic nod va avea cate o relatiecu fiecare utilizator care are ca locatie acel oras

In concluzie structura bazei de date a fost aleasa ın acest fel datorita tipului apli-catiei adica asemanatoare cu o retea sociala si datorita implementarii simple a unui sistemde recomandare pe o asemenea baza de date

53 Fluxul pentru diferite operatii

Pentru aplicatie cele mai importante cazuri de utilizare sunt salvarea informati-ilor despre utilizator primite de la Facebook pentru crearea unui profil si recomandareacadourilor pentru un utilizator al aplicatiei Din aceasta cauza cele doua cazuri de utilizarevor fi prezentate mai ın detaliu ın continuare

43

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 47: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

algoritm de ınvatare care sa ınvete tipare ale utilizatorilor si sa recomande cadouri pe bazaacestor informatii

Figura 58 Diagrama bazei de date pentru doi utilizatori

Un alt avantaj al acestui tip de baza de date este faptul ca datele nu sunt duplicateın baza de date Spre exemplu daca mai multi utilizatori au ca locatie acelasi oras nu secreaza cate un nod cu acea locatie de mai multe ori ci acel unic nod va avea cate o relatiecu fiecare utilizator care are ca locatie acel oras

In concluzie structura bazei de date a fost aleasa ın acest fel datorita tipului apli-catiei adica asemanatoare cu o retea sociala si datorita implementarii simple a unui sistemde recomandare pe o asemenea baza de date

53 Fluxul pentru diferite operatii

Pentru aplicatie cele mai importante cazuri de utilizare sunt salvarea informati-ilor despre utilizator primite de la Facebook pentru crearea unui profil si recomandareacadourilor pentru un utilizator al aplicatiei Din aceasta cauza cele doua cazuri de utilizarevor fi prezentate mai ın detaliu ın continuare

43

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 48: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

531 Fluxul pentru sub-sistemul de creare al unui utilizator sipreluarea datelor necesare

Una din cele mai grave probleme a sistemelor de recomandare se numeste rdquocoldstartrdquo-ul Aceasta problema e reprezentata de faptul ca un sistem de recomandare sebazeaza ori pe istoricul utilizatorului ori pe datele unor utilizatori care sunt similari cuacest utilizator Cand un utilizator nou este introdus ın aplicatie cea mai mare problemaeste faptul ca nu se cunoaste nici o informatie deespre el si sistemul nu stie ce i-ar putearecomanda Dupa ce ar folosi aplicatia o perioada de timp ar avea suficiente informatiidespre el pentru a-i putea oferi recomandari Insa de cele mai multe ori daca recomandarileoferite nu sunt bune utilizatorul nu va mai folosi aplicatia si atunci nu va avea cum sistemulsa ınvete intrand ıntr-un cerc vicios

Figura 59 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelornecesare

Pentru a rezolva aceasta problema sistemul utilizeaza autentificarea cu Facebookcum este prezentat ın diagrama de secventa 59 Folosind o astfel de autentificare sicu acordul utilizatorului dupa autentificare se primeste un rdquoaccess tokenrdquo Cu ajutorulacestuia aplicatia poate face o noua cerere spre API-ul de la Facebook pentru a primiinformatii despre utilizator doar cele asupra carora utilizatorul si-a dat acordul Cele maiimportante informatii ce ar putea fi folosite pentru un sistem de recomandare cadouri suntlike-urile date de catre utilizator altor pagini pe Facebook Intre acestea de cele mai multeori sunt carti autori filme actori cantareti sau alte persoane publice Si spre exemplu

44

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 49: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

daca unui om i-a placut o carte a unui autor sunt foarte multe sanse sa ıi placa si adaptareaca si film a cartii Pe langa informatiile despre like-uri se iau si informatii despre numelecomplet al utilizatorului email-ul acestuia deoarece mai apoi la comenzi va putea primiemail data nasterii pentru ca sistemul sa stie cand urmeaza ziua de nastere sau locul undelocuieste

Toate aceste informatii sunt mai apoi trimise din aplicatia client catre aplicatiaserver unde se trimit la baza de date si se stocheaza

Acest flux se efectueaza la fiecare autentificare ın aplicatie deoarece informatiile peFacebook pot fi modificate si astfel aplicatia sa aiba ın permanenta informatii curenteDaca unele informatii s-au modificat sunt modificate fara a sterge informatiile despreprietenii care se refera doar la aplicatia curenta si nu au legatura cu Facebook-ul

In concluzie utilizand aceasta metoda pentru a obtine informatii despre utilizatorse rezolva pentru cele mai multe persoane problema rdquocold startrdquo-ului

532 Fluxul pentru sub-sistemul de recomandare

O alta parte mai complexa a aplicatiei a fost sistemul recomandare De multe oricand se doresc recomandari ın functie de un anumit aspect implementarea unui asemeneasistem se face cu ajutorul unor algoritmi de ınvatare Scopul acestora este sa ınvete lucruridespre utilizator si pe baza acestora sa ofere recomandarile Dazavantajul unei asemeneaabordari ıl reprezinta durata Pentru ca un algoritm de ınvatare sa ruleze si sa ınvetelucruri despre comportamentul unui utilizator din instoricul acestuia este un proces caredureaza prea mult timp O aplicatie web trebuie sa ofere recomandarile ın timp real Nuar fi utilizat ın practica un site la care ıi dai o cerere si te ıntorci ın urmatoarea zi pentruraspuns

De aceea solutia cu o baza de date sub forma de graf este foarte buna deoarece cuajutorul ei se pot obtine recomandari ın timp real

Cand utilizatorul doreste recomandari pentru cadouri pentru o persoana pe care oare la priteni trebuie sa specifice doar daca cadoul este pentru o femeie sau un barbatcare este marja de varsta pe care o are acea persoana pentru ce ocazie este cadoul si cineeste destinatarul In functie de aceste informatii sistemul cauta ın baza de date produsecare ındeplinesc primele trei cerinte si se afla ın una din doua situatii Ori acele produseau ın descriere vreun nume al unuia din lucrurile care a precizat utilizatorul pe Facebookca ıi plac ori este un cadou care ın aplicatie a spus ca ıi place cand cauta la randul luicadouri pentru altcineva In interfata ıi sunt returnate utilizatorului toate produsele careındeplinesc aceste cerinte Intreg acest flux este prezentat si ın diagrama de secventa 510

Un avantaj al sistemului este faptul ca poate oricand sa fie ımbunatatit Luandu-sede la Facebook si informatii despre locatia sau orasul de nastere al utilizatorului s-ar puteaoferi ca recomandari si lucruri care le plac multor oameni din acel oras Adica sa fie unsistem de recomandare care sa ia ın calcul si partea demografica

45

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 50: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

Figura 510 Fluxul pentru sub-sistemul de recomandare

Deci ın felul acesta toata implementarea sistemului de recomandare reprezinta caimplementare un simplu query ın baza de date

54 Securitatea sistemului

Una din cerintele non-functionale ale proiectului pe care am vrut sa o ındeplinesceste securitatea Fiind o aplicatie web este foarte predispusa diverselor atacuri din exteriormotiv pentru care securitatea este un aspect foarte important

Pentru a fi cat mai sigura aplicatia s-a luat ın considerare siguranta din patrupuncte de vedere

O parte sensibila a oricarei aplicatii web este partea de autentificare Acolo estefoarte important ca cererea care face autentificarea sa fie sigura deoarece contine numelede utilizator al clientului si mai important parola acestuia Aplicatia folosind autentifi-carea de la Facebook nu numai ca face o cerere de tip POST dar se afla si pe un URLsigur Restul aplicatiei fiind una locala se afla pe URL nesigur de tip HTTP Dar pentruautentificare cei de la Facebook deschid deasupra aplicatiei o alta fereastra care se afla peun URL sigur de tip HTTPS Din aceasta cauza transportul datelor se face pe un canalsigur si encriptat de date ıntre web browser si web server

O a doua parte ce tine de autentificare si care asigura securitatea sistemului estefaptul ca ın baza de date nu se salveaza nici o parola Autentificarea facandu-se cu Face-book parolele se afla stocate ın baza lor de date Raspunsul de la ei contine doar un

46

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 51: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

rdquoaccess tokenrdquo cu ajutorul caruia se iau datele publice de la Facebook deci nu se retinnicaieri parole In felul acesta ın fata unui atac ın urma caruia se fura datele din baza dedate nu este foarte grav deoarece datele furate nu sunt foarte sensibile

A treia componenta care face aplicatia mai sigura este faptul ca interfata graficaeste de tipul rdquosingle page applicationrdquo Aplicatia este de acest tip deoarece este scrisa ınExt JS Acest lucru presupune faptul ca atunci cand se deschide aplictia se ıncarca toatepaginile iar dupa prima ıncarcare cand se schimba paginile trecerea va fi instantanee faraa necesita timp de ıncarcare Avantajul din punctul de vedere al securitatii ce ıl are faptulca este rdquosingle page applicationrdquo este ca toata aplicatia se afla pe acelasi URL Datoritaacestui lucru utilizatorul nu poate sa acceseze o pagina pentru care nu este autentificatsau nu are permisiunile necesare doar cunoscand URL-ul Deci utilizatorul poate apelaURL-ul de oricate ori doreste ca aplicatia tot pe aceeasi pagina ramane

Urmatoarea parte de securitate ce vizeaza aplicatia se refera la securitatea backend-ului Daca sistemul nu ar avea implementat nimic pentru securitate orice utilizator dacastie URL-ul service-ului care trebuie apelat si parametri necesari cererii poate face oriceın aplicatie fara interfata utilizator Diversele framework-uri ce pot fi intregrate ıntr-unproiect si asigura partea de securitate sunt destul de standardizate si nu pot fi configuratesa asigure securitatea cand ın baza de date nu se afla parole Toata implementarea lor sebazeaza pe faptul ca ei cauta ın baza de date un utilizator cu numele si parola trimise dininterfata si daca le gaseste ısi salveaza pe sesiune un cod care numai pentru el are sens Inplus de asta exista un fisier de configurari ın care se precizeaza la fiecare cerere ce rol artrebui sa aiba utilizatorul autentificat pentru a putea primi un raspuns de la backend Cuajutorul codului la fiecare cerere poate sa afle cine e utilizatorul care a facut-o sa verificedaca rolul acestuia este potrivit si sa trimita eroare ınapoi daca nu este Deoarece ın cazulaplicatiei mele nu se putea aplica acest framework am creat un service de securitate caresa ıncerce sa imite functionalitatea frameworkului pe o aplicatie fara autentificare clasicaAstfel pe cererea de salvare sau modificare a profilului unui utilizator care e cererea cese face doar imediat dupa autentificare se trimite ınapoi id-ul utilizatorului codificat Infelul acesta pentru fiecare cerere care urmeaza nu mai trebuie sa se specifice din interfatautilizatorul care a dorit sa faca cererea trebuie numai sa se trimita pe header aceasta cheieDaca cineva face rost de o astfel de cheie nu are cum sa stie care a fost utilizatorul care afacut cererea In plus pe fiecare cerere primul lucru care se executa este apelarea metodeidin serviciul de securitate care verifica daca codul primit pe header este al unui utilizatorcare are rolul necesar pentru a efectua acea cerere Daca nu are atunci se ıntoarce spreinterfata o eroare daca ıl are atunci executia continua

In concluzie datorita acestor masuri de securitate nici ın interfata grafica utiliza-torul nu poate sa pacaleasca sistemul si sa intre pe o pagina pentru care nu are credentialelepotrivite si de asemenea nici daca ocoleste interfata si face el direct cererile ın backendnu poate sa faca nimic decat daca trimite un cod valid cu cererea

47

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 52: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

Capitolul 6

Testare si Validare

In acest capitol vor fi prezentate metodele de testare ale aplicatiei si cele de evaluarePentru testare s-a verificat codul aplicatiei prin testare unitara cu JUnit iar pentru averifica comportamentul s-au scris cazuri de testare si apoi prin testare manuala s-a verificatdaca comportamentul aplicatiei este cel asteptat Pentru evaluarea sistemului aplicatia afost data spre utilizare catre zece persoane care apoi au comparat cu alte metode de gasirea unui cadou pentru o persoana

61 Testare unitara

Primul tip de testare efectuat asupra aplicatiei a fost testarea unitara Aceastatestare se face ın paralel cu dezvoltarea Pentru fiecare componenta a sistemului se creeazacazuri de test asupra metodelor pentru a vedea daca modul de functionare este cel asteptat

Scopul testelor unitare este de a verifica logica metodelor pentru a vedea pe bucatimai mici modul de functionare al aplicatiei Daca eroarea ar aparea numai ın interfataar putea fi foarte confuz unde exact e problema Dar daca fiecare metoda a aplicatieifunctioneaza ın modul asteptat este foarte mic riscul de a aparea o eroare cand se ımbinatoate metodele ımpreuna

Testele au fost scrise cu ajutorul framework-urilor JUnit si Mockito

JUnit face posibila scrierea si testarea codului sursa rapid si usor JUnit este unframework care permite dezvoltatorului sa construiasca treptat suite de testare pentru amasura progresul si pentru a detecta erorile nedorite Testele pot fi executate continuuRezultatele sunt furnizate imediat JUnit arata progresul testului ıntr-o bara care este ınmod normal verde dar devine rosie atunci cand un test nu reuseste O lista continua deteste nereusite apare ıntr-un spatiu din partea de jos a ferestrei de afisare Testele multiplepot fi executate simultan Simplitatea lui JUnit face posibil ca dezvoltatorul de softwaresa corecteze cu usurinta bug-urile de cum se gasesc

Cu ajutorul framework-ului JUnit se pot scrie clase de test care contin metode detest ın care se scriu datele de intrare se apeleaza metoda ce se doreste sa se testeze se scriu

49

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 53: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

datele ce se asteapta sa fie returnate de metoda si apoi se verifica daca valorile asteptatesunt egale cu cele reale

Mockito este un framework popular pentru mock-uire care poate fi folosit ımpreunacu JUnit Mockito permite crearea si configurarea de obiecte macheta Utilizarea Mockitosimplifica semnificativ dezvoltarea testelor pentru clase cu dependente externe

Utilizand Mockito ın teste de obicei

bull se ındeparteaza dependentele externe si se introduc rdquofalsurirdquo ın codul testatbull se executa codul ce trebuie testatbull se verifica daca codul e executat corect

Framework-ul Mockito a fost necesar sa fie folosit datorita faptului ca aplicatiafoloseste Spring Boot si adnotarile acestuia Exista dependente ıntre clasele de pe un nivelcu cele de pe un altul si obiectele sunt injectate ın clasa ın care sunt folosite cu adnotareaAutowired Pentru teste aceste obiecte ce sunt injectate ıntr-o clasa este necesar sa fierdquomockrdquo-uite In testele unitare este normal sa nu se apeleze cu adevarat baza de date deciın felul acesta utilizarea acesteia este pacalita ın teste

Pentru testarea unitara nu este necesara decat testarea claselor din pachetul deserviciu Clasele din domain sunt doar simple clase POJO deci nu au decat metodele getsi set pachetul rdquorepositoriesrdquo contine doar clase ce fac query-uri ın baza de date iar nivelulde web contine clasele rdquocontrollerrdquo ın care numai se apeleaza metoda corespunzatoare dinserviciu Asa ca ın teste sunt un numar egal de clase cu numarul de clase de serviciuexistente ın aplicatie Apoi ın fiecare clasa sunt metode care testeaza diverse scenarii alemetodelor din clasa ce doreste a fi testata

Testarea unitara ofera statistici care arata gradul de acoperire al codului Scopulacestor statistici este de a arata cat de aproape sau departe de acoperire 100 este aplicatiaAvand o acoperire cu testarea de 100 asupra codului sansele ca posibile erori sa scapecu vederea este mult mai mica

Prin metoda aceasta de testare aplicatia are testat back-endul evitand astfel des-coperirea multor erori doar dupa implementarea interfetei sau posibil nici dupa

62 Cazuri de testare

Urmatorul tip de testare realizat a fost teastarea manuala asupra aplicatiei de dataaceasta incluzandu-se si interfata grafica

Doar testand diverse scenarii prin aplicatie sunt mari sanse ca unele lucruri sa sepiarda sau sa fie uitate Iar sansele ca acest lucru sa se ıntample sunt si mai mari pentru caatat implementarea cat si testarea sunt facute de aceasi persoana In general este o regulacum ca persoana care testeaza trebuie sa fie diferita de cea care implementeaza deoarececel ce implementeaza de foarte multe ori cauta ca un sistem sa functioneze ın modul ıncare stie ca este construit nu cum se dorea initial O solutie pentru aceasta problema afost scrierea cazurilor de teastare dinainte de a ıncepe partea de implementare

50

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 54: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

In felul aceasta actiunile asteptate pot fi comparate cu modul real de functionare alsistemului si asa se verifica daca cerintele de la ınceput sunt respectate ın aplicatie

In continuare vor fi prezentate patru cazuri de testare ca exemplu

Autentificarea utilizatorului ın aplicatieEtapa Rezultatul obtinut

Se deschide aplicatia Se va afisa pagina de HomeSe apasa pe butonul pentru au-tentificare

Apare un pop-up de la Facebookpentru autentificare

Se introduc numele de utilizatorsi parola unui cont valid de Face-book

Credentialele vor fi introduse ıncampuri

Se cere optiunea de autentificarecu credentialele tocmai introduse

Pop-up-ul pentru autentificare seva ınchide

Se primeste rezultatul de la API-ul de Facebook

Se afiseaza pagina cu prieteniicare au zi de nastere ın lunacurenta

Tabelul 61 Caz de utilizare - Autentificare ın aplicatie

Recomandare cadou pentru utilizator autentificat si plasare comandaEtapa Rezultatul obtinut

Se alege submeniul pentru reco-mandare cadou

Se va deschide pagina pentru re-comandarea cadourilor

Se alege genul varsta evenimen-tul si destinatarul

Toate cele patru combobox-urisunt completate cu optiuniledorite

Se cere optiunea de afisare reco-mandari

Se deschide o noua fereastra carecontine un tabel cu produse reco-mandate

Se aleg produsele dorite si seadauga ın cosul de cumparaturi

Se afiseaza mesaj de confirmare lafiecare adaugare

Se alege submeniul de comandacurenta

Pagina se modifica si ın tabelulcu produse se afla cele introduseın cos

Se introduce adresa Campurile comenzii sunt com-plete

Se plaseaza comanda Se afiseaza mesaj de confirmaresi se trimite email cu comanda laproducatori

Tabelul 62 Caz de utilizare - Recomandare cadou si adaugare comanda

51

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 55: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

Acceptare cerere de prietenieEtapa Rezultatul obtinut

Se intra ın submeniul de oamenicare nu sunt prieteni

Se afiseaza pagina cu tabelul cuoameni

Se introduce numele sau prenu-mele utilizatorului pentru sortare

In lista raman doar persoanelecare ındeplinesc conditia desortare

Se apasa pe optiunea de adau-gare prieten pe randul utilizatoru-lui dorit

Apare o fereastra de confirmare

Se confirma dorinta de adaugarela priteni

Utilizatorul dispare din lista deoameni care nu sunt prieteni

Intr-un alt browser se autentificacel de-al doilea utilizator

Dupa autentificare ıi apare o fe-reastra ın care i se cere acceptulprieteniei

Se accepta prietenia Apare fereastra de confirmareSe confirma acceptul prieteniei Utilizatorul apare ın tabelul cu

prieteniSe cere reıncarcarea tabelului deprieteni la primul utilizator

Cel de-al doilea utilizator apare ınlista

Tabelul 63 Caz de utilizare - Acceptare cerere de prietenie

Modificare rol utilizatorEtapa Rezultatul obtinut

Se intra ın submeniul de utiliza-tori

Se afiseaza un tabel cu utilizatoriiaplicatiei care nu sunt adminis-tratori

Se alege un utilizator cu rol sim-plu de client si se selecteazaacesta

Pe coloana rolului checkbox-ulpentru producator devine editabil

Se seteaza checkbox-ul si seaproba modificarea

Pe coloana rolului de producatoreste setat rolul acesta pentru uti-lizator

Intr-un alt browser se autentificaacel utilizator

In optiunile din meniul de susapar noi optiuni spre exemplu celde introducere produs

Tabelul 64 Caz de utilizare - Modificare rol utilizator

52

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 56: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

63 Evaluarea sistemului de catre utilizatori

Pentru evaluarea sistemului am ales ca metoda evaluarea facuta de catre utilizatoriPentru aceasta am ales zece persoane carora li s-a cerut sa caute un cadou pentru o altapersoana din aplicatie si sa ıncerce prin mai multe metode sa gaseasca un cadou si maiapoi sa evalueze aceste metode pe o rdquoscara cu sapte puncterdquo

Am ales ca pentru evaluare fiecare utilizator sa ıncerce ın trei moduri sa gaseascaun cadou pentru un alt utilizator al aplicatiei Modurile de gasire a unui cadou pentrucineva ıncercate de catre utilizatori pentru evaluare sunt

bull Internetul - cautare simpla pe internet ın functie de deciziile propri pentu filtrarearezultatelor

bull Quiz-ul - cu ajutorul chestionarului de ıntrebari din aplicatie ıntrebari referitoare lagen varsta si evenimentul pentru care se cumpara cadoul

bull Sistemul de recomandare - prin recomandarea data de aplicatie specifica pentrudestinatarDupa aceste ıncercari utilizatorii au fost rugati sa raspunda la un set compus din

cinci ıntrebari care vizeaza aspecte diferite ale avantajelor sau dezavantajelor sistemuluide recomandare

Setul de ıntrebari de pe chestionar este1 Pe scara celor 7 puncte cat de satisfacut ati fost de modul acesta de cautate al unui

cadou2 In ce proportie ati fost satisfacut de rezultatele obtinute3 Cat de satisfacut ati fost de timpul care a fost necesar pentru a gasi un cadou potrivit4 Credeti ca destinatarul cadoului va fi satisfacut de cadoul primit5 Considerati ca veti mai utiliza pe viitor aceeasi varianta pentru a gasi un cadou Pe

scara celor 7 puncte evaluati acest aspect

Figura 61 Scara cu sapte puncte1

Scara celor sapte puncte reprezinta un mod de notare al rezultatelor pe un stilasemanator cu o notare ıntre unu si sapte unde fiecare nota reprezinta gradul de satisfactieal utilizatorului In acest caz unu reprezentand cel mai putin satisfacut si sapte ınsemnandcel mai satisfacut In figura 61 este prezentata scara folosita pentru chestionar

1httpswwwqualtricscomblogthree-tips-for-effectively-using-scale-point-questions

53

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 57: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

In figura 65 este prezentata media notelor date de utilizatori pe rand pentru fiecaremetoda iar ın imaginea 62 sunt prezentate sub forma grafica aceste rezultate

Rezultatele obtinuteNumar ıntrebare Internet Quiz Recomandare1 2 35 642 24 33 583 19 34 574 23 39 555 17 36 57

Tabelul 65 Tabelul cu rezultatele obtinute

Figura 62 Raport rezultate

In concluzie se poate observa si ın diagrama de mai sus ca pentru oricare dintrecele cinci ıntrebari adresate nota oferita sistemului de recomandare este cea mai bunaAsta ınseamna ca sopul aplicatiei este ındeplinit sistemul inplementat poate fi o optiunemai buna ın gasirea unui cadou potrivit

54

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 58: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

Capitolul 7

Manual de Instalare si Utilizare

In acest capitol vor fi prezentate resursele necesare pentru a putea rula aplicatiaımpreuna cu programele ce trebuie instalate pentru a o putea rula si modul de instalareal acestora Iar la final va fi prezentat modul ın care se utilizeaza aplicatia ca un fel demanual pentru utilizatori

71 Resurse necesare

Din punctul de vedere al resurselor hardware este necesar minim un server pe caresa fie pornita baza de date sa ruleze backendul si sa ruleze frontend-ul Insa acestea nueste obligatoriu sa se afle pe acelasi server si ar putea rula la fel de bine Din punctul devedere al specificatiilor serverului acestea variaza ın functie de numarul de utilizatori

Ca si resurse software sunt necesarebull Baza de date Neo4jbull Development Kits JDK 18bull Frameworks Spring Boot JUnit Mockito ExtJS Bootstrapbull Build Automation Mavenbull Architectural Styles RESTbull Libraries jQuerybull IDEs IntelliJ

Din punctul de vedere al utilizatorilor fiind o aplicatie web este necesar un browserindiferent care dintre ele

72 Manualul de instalare

721 Instalare si pornire baza de date

Pentru baza de date Neo4j singurul program care trebuie instalat este baza de dateın sine Instalarea acesteia se poate face de la URL-ul httpsneo4jcomdownload Se

55

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 59: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

urmeaza pasii impliciti ai instalarii si se tin minte numele de utilizator si parola configuratedeoarece trebuie folosite Dupa ce baza de date este instalata pentru pornire se cautaprintre programele instalate si se alege aceasta apoi locul de stocare si se apasa pe Start

Figura 71 Baza de date dupa pornire

Pentru ca apoi backend-ul sa cunoasca unde este locul unde trebuie sa stochezedatele se deschide din aplicatia de server fisierul rdquoapplicationpropertiesrdquo ın care se modificaURL-ul cu cel afisat la baza de date si apoi se schimba numele de utilizator si parola cucele configurate la instalare

722 Tehnologii necesare si pornirea aplicatiei backend

Deoarece nu este necesara si implementarea ci doar rularea aplicatiei singureletehnologii ce trebuie instalate sunt Java si Maven

Pentru Java versiunea minima necesara este Java 8Aceasta versiune se gaseste la adresa webhttpwwworaclecomtechnetwork

javajavasedownloadsjdk8-downloads-2133151html de unde se poate descarcaDupa ce se urmeaza toti pasii impliciti pentru instalare trebuie adaugata Java la

variabilele de mediu ale serverului adica locul unde s-a instalat trebuie salvat ca valoarela cheia JAVA HOME

Pentru a instala Maven trebuie ca fisierul zip sa se descarce de pe site-ul httpsmavenapacheorgdownloadcgi Trebuie ca acel fisier sa se dezarhiveze si apoi lavariabilele de mediu trebuie adaugata acea adresa la cheia M2 HOME si MAVEN HOME

Apoi pentru rulare ın radacina proiectului trebuie sa se deschida un terminal ıncare sa se scrie comanda rdquomvn spring-bootrunrdquo

723 Tehnologii necesare si pornirea aplicatiei frontend

Pentru aplicatia frontend trebuie doar un singur program instalat si acesta este Sen-cha CMD Acesta se instaleaza de pe site-ul oficial httpswwwsenchacomproducts

56

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 60: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

extjscmd-download De acolo se descarca un fisier executabil care se executa pentru aıncepe instalarea La instalare se urmeaza pasii impliciti iar dupa instalare se seteaza sase adauge ın variabilele de mediu implicit

Apoi pentru rularea aplicatiei trebuie ın radacina aplicatiei client sa se deschida unterminal ın care sa se scrie comanda rdquosencha app watchrdquo

724 Configurarea integrarii cu Facebook

Pentru a putea folosi autentificarea cu Facebook si mai ales pentru a putea lua sidate de acolo trebuie folosita aplicatia Facebook-ului pentru programatori Graph API ıncare sa se creeze o noua aplicatie Instructiuni despre modul ın care o astfel de aplicatiepoate fi creata se gasesc la URL-ul httpsdevelopersfacebookcomdocsgraph-apireferenceapplication Dupa autentificare se creeaza noua aplicatie In cazul acestaaplicatia a fost creeata si informatii despre ea se gasesc ın imaginea 72

Figura 72 Aplicatia creata la Facebook

Pe langa informatiile generale despre aplicatie site-ul lor prezinta si rapoarte carearata activitatea utilizatorilor ın aplicatie si se numesc analitice

73 Manualul de utilizare

Pentru ca un utilizator sa poata folosi aplicatia trebuie ın primul rand sa deschidaun browser web Deoarece aplicatia nu se gaseste pe un server si este doar local URL-ulla care aceasta se gaseste este httplocalhost1841

57

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 61: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

Cand se deschide aplicatia apare pagina de acasa In partea de sus a ecranuluieste bara de meniu ın care apar optiunile de efectuare a chestionarului despre destinatarsi cel pentru adaugarea unei comenzi Acestea sunt singurele optiuni ale unui utilizatorneautentificat

Figura 73 Pagina de acasa a aplicatiei

Butonul pentru autentificare este ın coltul stanga-sus al aplicatiei si deschide fe-reastra pentru autentificare de la Facebook

Figura 74 Fereastra de autentificare de la Facebook

58

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 62: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

Cand un utilizator se autentifica pentru prima oara ın aplicatie el trebuie sa ısi deaacordul pentru preluarea datelor deci dupa autentificare apare o fereastra suplimentaraAceasta apare doar la prima autentificare

Figura 75 Fereastra de acceptare pentru preluarea datelor de la Facebook

Dupa autentificare aplicatia se reıncarca cu noile optiuni ın meniu ın functie derolul utilizatorului autentificat

Figura 76 Pagina de recomandare de dupa autentificare

59

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 63: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

Capitolul 8

Concluzii

In acest capitol se va face o analiza asupra rezultatelor obtinute si asupra obiec-tivelor proiectului ce au fost ındeplinite De asemenea se vor prezenta posibile dezvoltariulterioare ce pot fi facute pentru ımbunatatirea acestuia

81 Analiza rezultatelor obtinute

Din punctul de vedere al cerintelor initiale ale proiectului scopul acestuia de laınceput a fost realizarea unui sistem de recomandare cadouri scop ce a fost si ındeplinit

O problema foarte importanta ce sistemul o avea ca obiectiv sa o rezolve a fostproblema numita rdquocold startrdquo-ul Datorita datelor primite de la Facebook acest obiectiva fost ındeplinit Fara acestea rezultatele primite ca recomandari ar fi fost foarte gresitepana cand sistemul s-ar obisnui cu lucrurile care ıi plac utilizatorului Dar primind dateleledespre lucrurile ce ıi plac utilizatorului de la Facebook la autentificare si salvandu-le ınbaza de date rezultatele recomandarii sunt bune ınca de la prima autentificare Aceastaeste o solutie mult mai eleganta decat un chestionar de ıntrebari pentru utilizator la primaautentificare

Din rezultatele obtinute ın urma evaluarii se poate concluziona faptul ca sistemulde recomandare construit este o solutie buna pentru aceasta problema a gasirii unui cadoupotrivit Solutia pare mai usoara de folosit mai rapida si mai buna decat un chestionarcu ıntrebari sau ca o cautare clasica pe internet Deci obiectivul aplicatiei a fost atins

82 Dezvoltari ulterioare

Prima dezvoltare posibila a sistemului ar fi construirea unei aplicatii pentru mobilIn prezent tehnologia telefoanelor avanseaza cu o viteza foarte mare iar tot mai multefunctii ce ın trecut se puteau face doar pe un calculator acum se pot executa si pe untelefon Din acest motiv o aplicatie mobila care sa foloseasca acelasi server si sa poata fiinstalata atat pe Android cat si pe iOS este foarte importanta

61

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 64: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

O alta dezvoltare posibila ar fi asupra sistemului de recomandare Acesta poatefi imbunatatit sa ofere cat mai bune recomandari De la Facebook se salveaza si datedespre locatia utilizatorului sau orasul ın care a copilarit Acestea pot fi si ele incluse ınrecomandari si sistemul astfel sa dea si recomandari demografice Pe langa asta se salveazasi data nasterii iar sistemul ar putea si ın functie de varsta sa ofere recomandari Deasemenea recomandarile ar putea fi ımbunatatite ın timp ın functie de cadourile cumparatede altii pentru acea persoana Imbunatatirile la aceasta componenta pot fi nenumarate

Tot ca si dezvoltare posibila ar fi integrarea cu o alta aplicatie ın afara de FacebookAlegerea pentru Facebook a fost pentru ca este o aplicatie extrem de utilizata si stocheazaexact informatii despre lucrurile care ıi plac unui utilizator Dar e posibila aparitia uneinoi aplicatii mult mai potrivite pentru asa ceva iar la partea de autentificare ar puteafoarte usor sa se adauge si autentificarea cu aceasta

In concluzie aplicatia realizata este un rdquoproof of conceptrdquo pentru un sistem derecomandare cadouri care capteaza datele personale despre utilizator dintr-o aplicatieexterna pentru a oferi recomandari de calitate ınca de la prima autentificare

62

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 65: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

Bibliografie

[1] Yaowen Chen Comparison of Graph Databases and Relational Databases When Han-dling Large-Scale Social Data Masterprimes thesis College of Graduate Studies and Re-search University of Saskatchewan Saskatchewan 2016

[2] Johannes Eifert Generating Dynamic Profiles based on User Interaction with the Helpof a Graph Database Masterprimes thesis Department of Computer Science Universityof Fribourg Fribourg 2015

[3] Jorg Gottschlich Irina Heimbach and Oliver Hinz The value of usersacebook profiledata - generating product recommendations for online social shopping sites ECIS2013 Completed Research 117 2013

[4] Michael Hunger Ryan Boyd and William Lyon The Definitive Guide to GraphDatabases for the RDBMS Developer Ebook edition 2016

[5] Vojtech Kolomicenko Analysis and Experimental Comparison of Graph DatabasesMasterprimes thesis Charles University in Prague Faculty of Mathematics and PhysicsPrague 2013

[6] Jakub Krzemien Facebook user interests exploration and recommendation based onFacebook Social Graph data analysis Masterprimes thesis The Faculty of Electronics andInformation Technology Warsaw University of Technology Warsaw 2014

[7] Matias Pettersen and Adrian Kristoffer Tvete A Hybrid Recommender System forContext-Aware Recommendations of Restaurants Masterprimes thesis Department ofComputer and Information Science Norwegian University of Science and Technol-ogy 2016

[8] Nevena Radovanovic Integration of Trust-Awareness in Political Recommender Sys-tems Masterprimes thesis Department of Informatics University of Fribourg Informationsystems Fribourg 2015

[9] Francesco Ricci Lior Rokach Bracha Shapira and Paul B Kantor RecommenderSystems Handbook Springer New York Dordrecht Heidelberg London 2011

63

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 66: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

[10] Ian Robinson Jim Webber and Emil Eifrem Graph Databases New Opportunitiesfor Connected Data Oeilly Media second edition 2015

[11] Jan Skrasek Social Network Recommendation using Graph Databases Masterprimes thesisMasaryk University Faculty of Informatics Brno 2015

[12] Kristine Steine Graph-Based Storage In Social Networks Masterprimes thesis Depart-ment of Computer and Information Science Norwegian University of Science andTechnology Norway 2016

[13] Purnima Tomar Prateek Arora Aakash Goel and Dharmender Saini Social profilebased gift recommendation system International Journal of Computer Science andInformation Technologies 5(3)3670ndash3673 2014

64

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 67: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

Lista tabelelor

61 Caz de utilizare - Autentificare ın aplicatie 5162 Caz de utilizare - Recomandare cadou si adaugare comanda 5163 Caz de utilizare - Acceptare cerere de prietenie 5264 Caz de utilizare - Modificare rol utilizator 5265 Tabelul cu rezultatele obtinute 54

65

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 68: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

Lista figurilor

31 Fazele unui sistem de recomandare 632 Tipurile sistemelor de recomandare 733 Tipuri de recomandari oferite de Netflix 834 Site web Giftly 1135 Site web Etsy 1236 Site web Gifts 1337 Site web Nordstrom 14

41 Digrama cazurilor de utilizare 1742 Digrama de activitate al cazului de utilizare rdquorecomandare cadourirdquo 1943 Digrama de activitate al cazului de utilizare rdquoadaugare produsrdquo 2144 Digrama de activitate al cazului de utilizare rdquomodificare rol utilizatorrdquo 2445 Arhitectura conceptuala 31

51 Diagrama de rdquodeploymentrdquo 3452 Diagrama de pachete pentru backend 3553 Diagrama de clase pentru pachetul rdquodomainrdquo 3654 Diagrama de clase pentru pachetul rdquorepositoriesrdquo 3755 Diagrama de clase pentru pachetul rdquoservicesrdquo 3856 Diagrama de clase pentru pachetul rdquowebrdquo 3957 Diagrama de clase pentru aplicatia web 4158 Diagrama bazei de date pentru doi utilizatori 4359 Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor

necesare 44510 Fluxul pentru sub-sistemul de recomandare 46

61 Scara cu sapte puncte 5362 Raport rezultate 54

71 Baza de date dupa pornire 5672 Aplicatia creata la Facebook 5773 Pagina de acasa a aplicatiei 5874 Fereastra de autentificare de la Facebook 58

67

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 69: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

75 Fereastra de acceptare pentru preluarea datelor de la Facebook 5976 Pagina de recomandare de dupa autentificare 59

68

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni
Page 70: SISTEM DE RECOMANDARE CADOURI BAZAT PE PROFIL …users.utcluj.ro/~civan/thesis_files/2018_Biris_Denisa.pdf · Testare ˘si Validare (Capitolul 6) - acest capitol descrie modurile

Anexa A

Glosar de termeni

Termen Definitie

AJAX Asynchronous JavaScript And XMLAPI Application Programming InterfaceCRUD Create Read Update DeleteCSS Cascading Style SheetsHTML HyperText Markup LanguageHTTP Hypertext Transfer ProtocolHTTPS Secure Hyper Text Transfer ProtocolIDE Integrated Development EnvironmentJDBC Java Database ConnectivityJDK Java Development KitJSON JavaScript Object NotationPOJO Plain Old Java ObjectPOM Project Object ModelREST Representational State TransferURL Uniform Resource Locator

69

  • Capitolul Introducere
    • Contextul proiectului
    • Motivatia
    • Continutul lucrarii
      • Capitolul Obiectivele Proiectului
        • Obiectivul principal
        • Obiective specifice
          • Capitolul Studiu Bibliografic
            • Modul de functionare al sistemelor de recomandare
            • Tipuri de sisteme de recomandare
            • Abordarea Netflix
            • Sisteme de recomandare cu Neo4j
            • Utilizarea retelei Facebook pentru crearea unui profil utilizatorilor
            • Solutii similare
              • Capitolul Analiza si Fundamentare Teoretica
                • Cerinte functionale
                • Cerinte non-functionale
                • Cazuri de utilizare
                  • Recomandare cadouri
                  • Adaugare produs
                  • Modificare rol utilizator
                    • Perspectiva tehnologica
                      • Neo4j
                      • Cypher
                      • Maven
                      • Spring Boot
                      • Sencha CMD si ExtJS
                      • Facebook API(Graph API)
                      • Git
                        • Arhitectura conceptuala
                          • Capitolul Proiectare de Detaliu si Implementare
                            • Arhitectura sistemului
                              • Arhitectura componentei backend
                              • Arhitectura componentei frontend
                                • Structura bazei de date
                                • Fluxul pentru diferite operatii
                                  • Fluxul pentru sub-sistemul de creare al unui utilizator si preluarea datelor necesare
                                  • Fluxul pentru sub-sistemul de recomandare
                                    • Securitatea sistemului
                                      • Capitolul Testare si Validare
                                        • Testare unitara
                                        • Cazuri de testare
                                        • Evaluarea sistemului de catre utilizatori
                                          • Capitolul Manual de Instalare si Utilizare
                                            • Resurse necesare
                                            • Manualul de instalare
                                              • Instalare si pornire baza de date
                                              • Tehnologii necesare si pornirea aplicatiei backend
                                              • Tehnologii necesare si pornirea aplicatiei frontend
                                              • Configurarea integrarii cu Facebook
                                                • Manualul de utilizare
                                                  • Capitolul Concluzii
                                                    • Analiza rezultatelor obtinute
                                                    • Dezvoltari ulterioare
                                                      • Bibliografie
                                                      • Lista tabelelor
                                                      • Lista figurilor
                                                      • Anexa Glosar de termeni