Differences

This shows you the differences between two versions of the page.

Link to this comparison view

poo-ca-cd:laboratoare:programare-avansata-java [2026/01/11 23:38]
florian_luis.micu [[Nice to know] Folosirea lui var în teste]
poo-ca-cd:laboratoare:programare-avansata-java [2026/01/12 12:12] (current)
florian_luis.micu [Unit testing vs Assertions]
Line 7: Line 7:
 =====Obiective===== =====Obiective=====
  
-=====Serializare și Deserializare=====+Scopul acestui laborator este introducerea studenților în concepte mai avansate care permit crearea framework-urilor și a aplicațiilor enterprise. 
 + 
 +Aspectele urmărite sunt: 
 +  * înțelegerea conceptelor de testare. 
 +  * utilizarea corectă a mecanismului de reflection. 
 +  * exersarea serializărilor și deserealizărilor. 
 +  * implementarea și utilizarea corectă a adnotărilor. 
 +  * exersarea folosirii aserților. 
 +  * familiarizarea cu dependențe populare cum ar fi JUnit, Mockito, Jackson. 
 + 
 +Aspectele **bonus** urmărite sunt: 
 +  * înțelegerea mecanismelor de logging. 
 +  * aprofundarea metodologiilor de dezvoltare software. 
 +  * Diferența dintre getClass() și instanceof. 
 +  * Organizarea memoriei pentru moștenire în Java. 
 + 
 +<note warning>​ 
 +  * În acest laborator există mai multe secțiuni marcate **[Optional]**. Aceste secțiuni cuprind informații **bonus** care vă pot fi prezentate în **timpul laboratorului** sau pe care le puteți aprofunda **în afara** acestuia, ele nefiind necesare pentru laboratoarele viitoare sau pentru teme. 
 +  * De asemenea, veți întâlni câteva secțiuni marcate **[Nice to know]**. Vă recomandăm ca acestea să aibă **prioritate** în parcurgerea secțiunilor de tip **[Optional]**,​ deoarece vă pot oferi informații bonus care să fie și foarte probabil utile pentru **teme** sau **laboratoare viitoare**. 
 +</​note>​ 
 + 
 +=====🔄 Serializare și Deserializare=====
  
 ====Ce este serializarea?​==== ====Ce este serializarea?​====
Line 174: Line 195:
 ===De ce este Jackson preferat în aplicațiile moderne?=== ===De ce este Jackson preferat în aplicațiile moderne?===
  
-De ce este Jackson preferat în aplicațiile moderne? 
   * JSON este lizibil și ușor de debugat,   * JSON este lizibil și ușor de debugat,
   * este interoperabil cu alte limbaje,   * este interoperabil cu alte limbaje,
Line 339: Line 359:
 </​code>​ </​code>​
  
-=====Adnotări în Java=====+=====🏷️ ​Adnotări în Java=====
  
 ====Ce sunt adnotările?​==== ====Ce sunt adnotările?​====
Line 594: Line 614:
  
  
-=====Reflection în Java=====+=====🪞 Reflection în Java=====
  
 ====Ce este Reflection?​==== ====Ce este Reflection?​====
Line 783: Line 803:
  
  
-=====Assertions=====+=====🔍 Assertions=====
  
 ====Ce sunt assertions?​==== ====Ce sunt assertions?​====
Line 844: Line 864:
  
  
-=====Unit Testing=====+=====🔬 Unit Testing=====
  
 ====Ce este Unit Testing?​==== ====Ce este Unit Testing?​====
Line 981: Line 1001:
  
 <note warning> <note warning>
-Interacțiunile cu+Interacțiunile cu **componente externe** precum ​baze de daterețea, sistemul de fișiere sau servicii externe ​nu mai țin de testarea izolată a unei unități de cod, ci fac parte din i**ntegration ​testing** sau, la un nivel mai larg, din **system testing**.
-  ​* baze de date +
-  * rețea +
-  * filesystem +
-  * servicii externe +
- +
-Acestea aparțin+
-  ​integration ​testing +
-  ​* system testing+
 </​note>​ </​note>​
  
-=====Integration Testing & Mocking=====+=====🧪 Integration Testing & Mocking=====
  
 ====Ce este Integration Testing?​==== ====Ce este Integration Testing?​====
Line 1133: Line 1145:
 </​note>​ </​note>​
  
-=====[Nice to know] Logging în Java =====+=====[Nice to know] 🪵 Logging în Java =====
  
 ==== Ce este logging-ul? ==== ==== Ce este logging-ul? ====
Line 1205: Line 1217:
 </​code>​ </​code>​
  
-<note warning> Log4j a fost implicat în vulnerabilitatea **Log4Shell (2021)**, una dintre cele mai grave din istoria Java. Acest lucru NU înseamnă că logging-ul este periculos, ci că**bibliotecile trebuie actualizate** ​configurațiile trebuie tratate cu atenție ​</​note>​+<note warning> Log4j a fost implicat în vulnerabilitatea **Log4Shell (2021)**, una dintre cele mai grave din istoria Java. Acest lucru NU înseamnă că logging-ul este periculos, ci că **bibliotecile trebuie actualizate ​și verificate pentru vulnerabilități**. În prezent, există utilitare care fac acest lucru automat cum ar fi [[https://​snyk.io/​|Snyk]]</​note>​
  
 <note tip> <note tip>
Line 1212: Line 1224:
   * ''​System.out.println''​ → nu este logging   * ''​System.out.println''​ → nu este logging
 </​note>​ </​note>​
 +
 +=====[Optional] 🗺️ Software Development Methodologies=====
 +
 +În urma paradigmei OOP, au fost concepute mai multe metodologii care pot augmenta performanța sau anumite abilități ale unui proiect conform necesităților.
 +
 +De exemplu, **Data Oriented Design** (DOD) este o paradigmă care ajută programarea folosind obiecte prin folosirea **cache-ului**. Practic, clasele sunt refactorizate astfel încât să țină cont de mărimea cache-ului din procesor pentru a scădea drastic timpii de acces. Această paradigmă începe să fie destul de folosită în mediile în care viteza este importantă,​ cum ar fi programarea jocurilor video, drept urmare chiar și engine-ul Unity a fost rescris astfel încât să folosească DOD (găsiți articolul [[https://​unity.com/​dots|aici]].
 +
 +<note tip>
 +Vă recomandăm să parcurgeți secvențe din acest videoclip de la [[https://​www.youtube.com/​watch?​v=yy8jQgmhbAU|CppCon]].
 +</​note>​
 +
 +O altă metodologie utilă este **Test Driven Development** (TDD) în care accentul este pus pe dezvoltarea testelor înainte de a dezvolta codul propriu-zis. Practic, după etapa de ideație, putem trece la crearea testelor care vor defini comportamentul corect al programului nostru, apoi vom dezvolta codul necesar pentru a putea trece cu succes peste testele scrise de noi. Puteți citi mai multe despre această abordare [[https://​agilealliance.org/​glossary/​tdd/​|aici]].
 +
 +De asemenea, o altă metodologie folosită este **Domain Driven Design** (DDD) care este o abordare de proiectare software în care structura aplicației este ghidată de domeniul de business, iar logica esențială este modelată prin concepte clare (entități,​ valori, agregate) definite împreună cu experți din domeniu, folosind un limbaj comun (ubiquitous language) pentru a menține codul aliniat cu realitatea problemei. Această abordare este detaliată în articolul scris de Redis [[https://​redis.io/​glossary/​domain-driven-design-ddd/​|aici]].
 =====Exerciții===== =====Exerciții=====
  
 +<note tip>
 +Pentru exercițiile de mai jos va trebui să vă creați propriile proiecte Maven. Vă recomandăm să luați dependențele necesare de pe [[https://​mvnrepository.com/​repos/​central|Maven Repository]],​ concret JUnit și Mockito.
 +
 +De asemenea, vă recomandăm să parcurgeți documentația Mockito și JUnit sau să folosiți ghiduri de pe site-uri de specialitate cum ar fi [[https://​www.baeldung.com/​mockito-series|Baeldung Mockito series]].
 +</​note>​
 +
 +<note important>​
 +Acest laborator nu va fi încărcat pe Devmind Code, deoarece va fi verificat manual de către laborantul vostru.
 +</​note>​
 ====Task 1 – Unit Testing cu coverage ≥ 80% (6p)==== ====Task 1 – Unit Testing cu coverage ≥ 80% (6p)====
  
Line 1260: Line 1295:
   * toate ramurile importante să fie testate   * toate ramurile importante să fie testate
   * testele să fie clare, independente și deterministe   * testele să fie clare, independente și deterministe
 +
 +<note tip>
 +În industrie, testarea este importantă,​ iar o metrică consacrată în acest sens este ca 80% din cod să fie acoperit de teste. Pentru a verifica cât cod este acoperit de testele voastre puteți folosi [[https://​www.jetbrains.com/​help/​idea/​code-coverage.html|ghidul oficial IntelliJ]] sau să întrebați laborantul.
 +</​note>​
  
 <note important>​ <note important>​
Line 1315: Line 1354:
  
 <note tip>​Denumirea și scopul claselor de mai sus respectă un standard folosit de framework-ul Spring.</​note>​ <note tip>​Denumirea și scopul claselor de mai sus respectă un standard folosit de framework-ul Spring.</​note>​
 +
 +===== Resurse și link-uri utile =====
 +  * [[https://​site.mockito.org/​ | Mockito]] ​
 +  * [[https://​www.atlassian.com/​continuous-delivery/​software-testing/​types-of-software-testing | Different types of software testing]]
 +  * [[https://​www.baeldung.com/​java-logging-intro | Introduction to Java logging - Baeldung]]
 +  * [[https://​softwareengineering.stackexchange.com/​questions/​123956/​why-should-i-use-reflection | Why should I use reflection and when? - StackOverflow]]
  
  
poo-ca-cd/laboratoare/programare-avansata-java.1768167505.txt.gz · Last modified: 2026/01/11 23:38 by florian_luis.micu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0