Cum poti sa devii test automation engineer?

In ultimii ani, testarea automata este din ce in ce mai des folosita, ceea ce a generat un numar foarte mare de job-uri pentru care companiile depun eforturi in gasirea candidatilor potriviti.  Surse din industrie spun ca cererea de candidati calificati depaseste oferta existenta pe piata.

Ce inseamna asta?

Inseamna ca nu exista un moment mai bun decat prezentul sa iti faci upgrade carierei si sa investesti in dezvoltarea ta profesionala.

De ce sa faci trecerea catre zona de test automation?

  • Ar trebui sa faci aceasta trecere in primul rand daca iti doresti sa treci in zona de programare. Persoanele care scriu teste automate, scriu cod. De aceea multi Test Automation Engineeri  care fac testare automata pe o perioada lunga de timp, ajung in cele din urma sa faca trecerea complet catre programare.
  • In al doilea rand, gradul de dificultate al muncii depuse de catre cel care face testare automata este ridicat si acest lucru se reflecta un valoarea salariului platit pentru astfel de roluri. De foarte multe ori, un Senior Test Automation Engineer are acelasi salariu ca un programator. Si este normal sa fie asa pentru ca ambii scriu cod: unul scrie codul aplicatiei si altul scrie codul care testeaza aplicatia intr-un mod automat.

Ce ar trebui sa stii ca sa devii test automation engineer?

  • Ar trebui sa ai cel putin bazele testarii manuale.Un Test Automation Engineer bun este o persoana care intelege arhitectura unei aplicatii si intelege foarte bine procesele de testare. In acest sens ai nevoie de cunostinte legate de : Test cases, Test Design,  Agile,DevOps, SQL , Continuous delivery, etc. Daca nu lucrezi deja in industria IT ca si tester manual, aceste baze le poti obtine fie prin studiu individual cautand resurse pe internet, fie prin varianta mai simpla accesand un curs de testare.
  • Ai nevoie sa inveti un limbaj de programare.Daca esti incepator atunci recomandarea este sa urmezi un curs de programare pentru a putea invata corect bazele programarii. Fireste ca de unul singur, prin studiu individual folosind resursele de pe internet  te poti perfectiona, dar nu poti invata bazele, principiile si bunele practice intr-un mod corect, daca acestea nu iti sunt explicate. In acest caz, vei ajunge sa copiezi solutii de pe internet, insa fara  a intelege cu adevarat ce a stat la baza acelei abordari. In ceea ce priveste limbajul de programare, cele mai populare si usor de invatat pentru incepatori (si din perspectiva resurselor de testare automata disponibile) sunt Java si Python.
  • Ai nevoie sa inveti programele specifice folosite in testarea automata.Sunt foarte multe programe disponibile pe internet. O parte pot si accesate in mod gratuit, iar pentru cealalta parte este nevoie de o investitie financiara. Si in acest caz, utilitatea poate fi diferita, variind de la foarte bune la inutile. Un mod foarte simplu de a iti valida alegerea facuta poate fi daca te uiti la job-urile de test automation ce fel de programe au in cerinte. Vei intelege astfel care sunt cele mai folosite si in acelasi timp poate fi un bun indicator al toot-urile pe care sa iti doresti sa le intelegi cum functioneaza.

O sursa la fel de buna de inspiratie in alegerea unui program pot fi chiar cei care au deja experienta in testare automata. Ei pot sa iti spuna ce programe folosesc, plusurile si minusurile pe care ei le vad folosindu-le constant.

  • Ai nevoie sa inveti cum sunt construite si cum functioneaza aplicatiile atat din interior cat si din exterior.
  • Cateva din intrebarile la care ar trebui sa poti raspunde sunt:
    • Care au fost limbajele de programare utilizate pentru a dezvolta aplicatia?
    • Pe ce platforma este consturita aplicatia?
    • Ce baze de date implica?
    • Exista API-uri sau servicii web conectate la diferite parti ale sistemului? Daca da, cum se face aceasta conectare?
    • Care sunt caracteristicile si funcționalitatile asteptate de la aplicatie?
    • Care este procesul de CI (continuous delivery) al aplicatiei?

Acestea sunt doar cateva puncte si pot varia in functie de complexitatea aplicației testate.

De unde poti incepe?

Sa incepi ceva nou este intodeauna dificil. La fel ca si mersul pe bicicleta, la inceput este mai dificil si mai nesigur, dar pe masura ce exersezi devii din ce in ce mai bun.

Incearca sa fii informat si sa afli care sunt noile technologii, incearca sa te conectezi cu oameni care fac deja asta si cere sfaturi. Urmeaza cursuri care te invata de la zero si iti dau astfel un start foarte bun in directia aceasta. Un astfel de curs gasesti aici !

Este important sa profiti de acest context in care se afla piata IT si sa perseverezi in dezvoltarea skill-urilor tale care te pot ajuta sa accesezi roluri din aceasta industrie.

Ce presupune testarea unui website?

Testarea unui site web sau web testing cum i se mai spune, presupune verficarea si validarea mai multor aspecte care tin de functionalitate, utilizare, siguranta datelor, performanta, integrarea si compatibilitea unei aplicatii web inainte de a fi lansata catre utilizatorii finali.

Astfel, putem extrage foarte usor din explicatia de mai sus care sunt cele mai importante tipuri de testare pe care trebuie sa le avem in vedere in momentul in care facem web testing.

Sa le luam pe rand.

Functionalitate (Functional testing)

Aici va trebui sa testam toate functionalitatile de bussines definite pentru website. Toate scenariile pe care ne asteptam sa le execute utilizatorii finali.
Deasemenea trebuie sa ne asiguram nu doar de scenariile pozitive merg, cat si de scenariile negative.
Ce se intampla daca un utilizator iese de pe un scenariu predefinit si incearca altceva?
De exemplu, ce se intampla daca pe website un produs are stocul afisat ca fiind de 5 bucati si utilizatorul incearca sa adauge 6 in cos? Este lasat? Poate sa ajunga la plata cu produse care nu sunt pe stoc?
Desigur, acest scenariu este posibil, insa este datoria testerului sa il preintampine sau sa sesizeze aceasta situatie.

Functionalitatile adiacente ale websiteului vor fi deasemenea testate. Poate utilizatorul sa isi actualizeze profilul cu o poza noua ? Sau sa isi stearga contul?
Testarea tuturor linkurilor din site se va face tot aici. Precum si verificarea eventualelor erori de HTML sau CSS.
La fel si testarea formularelor si testarea functionalitaii diferitelor elemente ale siteului.
Practic acest tip de testarea este cea mai complexa si poate include inclusiv elemente din tipurile de testare enumerate si mai jos.
Scopul prinicipal ramane insa testarea functionalitatlior de bussines. Verificarea si validarea ca website- ul isi indeplineste scopul pentru care a fost creat.

Utilizare (Usability testing)

Testarea de utilizare este foarte importanta pentru experienta finala a utilizatorului care foloseste aplicatia.
Acest tip de testare verifica cat de usoara este navigarea intre diferite pagini ale siteului spre exemplu.
Sau cat de usor si de intuitiv de folosit sunt diversele meniuri din website.
Sau cat de usor lizibile sunt prezentate anumite informatii importante pentru utilizator.
Deasemenea cat de usor este de folosit website-ul in scopul in care el a fost creat. Sau de exemplu, aaca vorbim de un magazine online, cat de usor ii este unui utilizator sa gaseasca gasi pe website un produs si de a il adauge in cosul de cumparaturi pentru a finaliza comanda.

Siguranta datelor (Security testing)

Acest tip de testare este vital pentru orice aplicatie, mai ales daca este expusa publicului larg.
Trebuie sa ne asiguram ca urmatoarele aspect sunt acoperite :
• Accesul neautorizat nu ar trebui sa fie permis. Aici vorbim de la utilizatorii care au cont valid de a utiliza aplicatia pana la drepturile pe care fiecare dintre utilizatori le au in interiorul aplicatiei si accesul lor la diferite seturi de date.
• Verificarea sesiunilor si a datelor care se inregistreaza la nivel de sesiune, cookies etc
• Token-urile de acces. Acestea pot fi vazute ca niste chei cu periodata de expirare. Spre exemplu in urma unei autentificari, se genereaza un token de acces, dar acesta poate avea o valabilitate de cateva ore sa zicem. Trebuie sa verificam daca dupa expirarea timpului acel token mai poate fi folosit pentru autentificare. In realitate acesta nu ar trebui sa mai mearga.
• Deasemenea verificarea certificatelor SSL si redirect-urile pe care websiteul le face trebuies verificate.

Performanta (Performance testing)

In cazul testarii de perfomanta va trebui sa ne asiguram ca urmatoarele aspecte sunt in parametrii aceeptati.
• Aplicatia raspunde intr-un timp optim. Spre exemplu, o cautare mai ampla pe site care poate aduce multe rezultate in interfata nu dureaza foarte mult.
• Trebuie sa verificam daca cum se comporta aplicatia cand este supusa unui volum foarte mare de date. Se poate intampla ca in acecst caz, webserverul ar putea sa nu faca fata unui volum mare de cereri si sa nu raspunda in timp util sau chiar sa opreasca procesarea.
• Trebuie sa verificam comportamentul aplicatiei in momentul in care este accesata de volume mari de useri. In acest caz cerintele de business legate de numarul de utilizatori preconizat are un impact foarte mare.
• Deaseamea, putem sa verificam si cum se comporta aplicatia pe un timp indelungat de folosinta cu diverse volume de useri si/sau volume de date care trebuiesc procesate.
Acestea sunt doar cateva exemple.

Multe dintre tipurile de teste care intra in sfera testarii de performanta trebuiesc definite in functie de specificatiile de bussines ale aplicatiei: un website de prezentare nu va fi supus acelorlasi teste cum este supus un magazine online.

Compatibilitatea (Compatibility testing)

Testele de compatibilitate ne asigura ca websiteul functioneaza in parametrii optimi pe diferite configuratii.
Aceste configuratii pot fi:
• Browsere (Chrome, Firefox, Edge, Safari, Opera)
• Sisteme de operare (MacOS, Linux, Windows, Android, iOS)
• Laptopuri, telefoane mobile, tablete
Avem nevoie sa facem aceste teste pentru ca in functie de configuratie, elementele site-ului (poze, butoane, diverse form-uri) pot sa fie afisate diferit din cauza rezolutiei ecranului , executiei JavaScript in functie de browser, etc.

Integrarea (Integration testing)

In testarea de integrare va trebui sa ne asiguram ca exista o comunicare optima a tuturor componentelor care alcatuiesc aplicatia.
Aici vor fi implicate, in principal, trei componente: aplicatia, serverul web si baza de date.
Din partea de aplicatie vor pleca toate cererile catre web server si baza de date.
Din zona de web server trebuie sa ne asiguram ca aceste cereri sunt gestionate corect si redirectionate acolo unde este cazul catre alte componente cum ar fi baza de date.
Din zona bazei de date trebuie sa ne asiguram ca atunci cand cerem anumite date ele sunt gestionate corect. Spre exemplu, o simpla cautare intr-o pagina web va ajunge in spate sa execute un query in baza de date, care va raspunde cu anumite date in functine de criteriile de cautare.

Acestea sunt principalele tipuri de testare care se executa in procesul de dezvoltare al unui website, dar nu sunt singurele.  De asemenea , fiecare dintre ele poate cuprinde mai mult elemente decat cele enumerate mai sus in functie de specificul si scopul aplicatiei.

 

Happy testing!

PS: In curand vom incepe un nou Curs Practic de Testare Software. Poti afla mai multe despre acesta aici. 

Ce este testarea software?

In zilele noastre, lumea a ajuns sa fie condusa de catre technologie. Regasim programe software aproape in orice dispozitiv cu care interactionam. In multe cazuri ne lasam viata pe mana unor programe software fie fara sa stim, fie sperand ca ele nu vor esua niciodata.

Pe masura ce numarul dizpozitivelor care se bazeaza pe diverse programe software creste, nevoia de testare software este din ce in ce mai crescuta si abilitatile pe care testerii software le detin au devenit din ce in ce mai cautate.

In ciclul de viata al unui produs de la design pana in productie, testarea este primul proces prin care se evalueaza calitatea software-ului construit.
Testarea software este un proces prin care se evalueaza criteriile functionale si nefunctionale ale uneii aplicatii cu scopul de a identifica defecte.
Este un proces de verificare si validare a unui produs software.

Care este scopul testarii software?

Scopul testarii software nu este sa gaseasca defecte asa cum multi cred. Scopul testarii este sa ne asiguram ca produsul dezvoltat este in conformitate cu cerintele utilizatorilor finali si ca este dezvoltat asa cum a fost specificat in documentele de design.

Astfel, prin testare ne asiguram ca produsul poate fi folosit asa cum este intentionat a fi folosit, ca respecta cerintele utilizatorilor si nu are defecte majore care sa pericliteze experienta utilizatorului final.

De ce avem nevoie de testare software?

Avem nevoie de testare software pentru ca aceasta minimizeaza riscul aparitiei defectelor in programele software.

Aceste defecte, pot cauza de la pierderi monetare foare mari pana la pierderi de vieti omenesti.

Cateva exemple de asfel de defecte:

  • Din cauza unui defect software un avion Airbus A300 al companiei China Airlines s-a prabusit in anul 1994. Au murit 264 de oameni.
  • Tot din cauza unui defect software, racheta Ariane5 a explodat la cateva zeci de secunde de la lansare. Racheta nu avea echipaj uman la bord, dar urma sa plaseze pe orbita doi sateliti. Costul pierderii rachetei si celor doi sateliti se ridica la peste 400 milioane de dolari.
  • Starbucks a fost nevoit la un moment dat sa inchida peste 60% din localurile din USA si Canada din cauza unui defect la sistemul de plati.

Astfel de erori apar zilnic in procesul de dezvoltare al unui produs software. De aceea, companiile producatoare de software acorda o importanta la fel de mare testarii precum este acordata si procesului de dezvoltare.

Companii precum Google, nu mai fac de foarte mult timp diferente intre programatori si testeri. Pentru Google toti sunt ingineri software responsabili de calitatea produsului dezvoltat.

Cine poate face testare software?

Sunt multe voci care spun ca nu oricine poate face testare software. Pentru ca testerii au un anumit tip de gandire (mindset) care ii ajuta sa gaseasca probleme acolo unde un dezvoltator spre exemplu nu s-ar uita niciodata.

Aceasta afirmatie este partial adevarata: nu oricine are acest tip de gandire, pentru ca acesta se invata. Oricine poate fi tester daca are un mentor bun, daca ii place testarea si investeste timp si pasiune in a invata aceasta meserie. Sa fii tester fara a trece print-un program de invatare nu este posibil.

In general un tester bun isi dezvolta urmatoarele abilitati:

  • Gandire critica.
  • Capacitatea de analiza.
  • Comunicare eficienta.
  • Abilitati technice.
  • Capacitatea de a intelege cerinte de bussines.

Toate aceste abilitati pot fi invatate si transpuse catre caracteristicile domeniului IT.

Testing is a skill. While this may come as a surprise to some people it is a simple fact..

Fewster and Graham

Tipuri de testare software?

In practica testarea software este impartita in foarte multe tipuri. In functie de natura si scopul aplicatiei testate decidem ce fel de teste trebuie sa executam.Aceste tipuri de teste pot fi impartite in doua mari categorii: teste functionale si teste nefunctionale.

Cateva exemple din categoria testelor functionale sunt:
  • Unit testing
  • Integration testing
  • System testing
  • Sanity testing
  • Smoke testing
  • Interface testing
  • Regression testing
  • Acceptance testing
  • Black box testing
  • White box testing
Cateva exemple din categoria testelor nefunctionale sunt:
  • Performance testing
  • Load testing
  • Volume testing
  • Stress testing
  • Security testing
  • Compatibility testing
  • Penetration testing

Viitorul testarii software?

O data cu revolutia social media a aparut un fenomen care da o putere extraordinar de mare consumatorilor. Puterea de a raspandi feedback-ul lor foarte rapid in grupuri foarte mari de oameni.

Acesta viralizare a feedbackului poate foarte simplu sa induca sucessul sau esecul unui produs. Din aceasta cauza companiile producatoare de software, sunt si vor fi si mai mult pe viitor atente la nevoile si parerile consumatorilor finali.

Un exemplu foarte bun in acest sens il reprezinta lansarea jocului Cyberpunk 2077. O lansare cu foarte multe defecte nerezolvate. In comunitatile de gaming aceste defecte au iscat un val masiv de nemultumiri,  care apoi sau viralizat foarte rapid, astfel incat o parte din cei care cumparasera jocul au cerut returnarea banilor. Firma producatoare a fost nevoita sa ofere si reduceri masive din pretul initial al jocului in urma valurilor de nemultumiri.

Toate aceste actiuni reprezinta pierderi financiare si de imagine pentru companiile producatoare.De aceea, va exista pe viitor un focus si mai mare pe zona de testare, pentru ca testarea diminueaza riscul consumatorilor finali de a avea o experienta neplacuta cu produsul software.

Astfel testarea, indiferent ca este facuta manual sau automat, ajuta companiile sa livreze produsele cu nivelul de calitate adecvat, minimizand astfel eventuale pierderi financiare sau de imagine. Testarea software va continua sa reprezinte o plasa de siguranta inaintea lansarii produselor mult timp de acum inainte.

In testare exista o zicala: daca nu l-ai testat, nu stii daca functioneaza!

Happy testing!

PS: In curand vom incepe un nou Curs Practic de Testare Software. Poti afla mai multe despre acesta aici. 

Ce face un software tester?

Un software tester, sau QA analyst sau software test engineer este o persoana la fel de importanta in procesul de dezvoltare a unui produs cum este si un dezvoltator, sau programator sau software engineer.

Cele doua roluri sunt complementare in ciclul de viata al unui produs software.

Programatorul este responsabil pentru scrierea codului sursa al programului respectiv, iar testerul este persoana care se asigura de integritatea, calitatea , eficienta si buna functionalitate a codului scris.

Mai pe scurt, un tester software se ocupa cu verficarea unui program, sau a unei parti a unui program cu scopul de a identifica eventuale deficiente de rulare.

Aceste deficiente pot fi cauzate de: erori de design, intelegere gresita a cerintelor clientului, erori de programare, etc.

In general in industria IT ne referim la membrii echipei de testare sub titulatura de QA (Quality Assurance).

Aceasta este o denumire generica, iar in realitate vom intalni testeri care sunt specializati pe anumite tipuri de testare, sau care au diferite roluri in cadrul echipei de testare sau a echipei de proiect.

Ca si structura generala (care poate avea mici variatii de la companie la companie) a unei echipe de QA, cel mai des intalnim urmatoarele roluri:

 

Structura tipica a unei echipe de QA

In functie de cat de mare este echipa de QA, aceste roluri se pot granula in specializari pe diverse tipuri de testare (performance tester, uat tester, security tester , etc) sau nivele de senioritate (junior, regular, senior, expert).

Aceste diferentieri se fac pentru a defini cat mai bine care sunt competentele si responsabilitatile fiecaruia.

Responsabilitati generale ale unui tester software

In general o mare parte a proceselor si responsabilitatilor sunt comune.

Ca si termini generali, cand ne referim la responsabilitatile de zi cu zi ale unui tester ne gandim la urmatoarele aspect:

  • Crearea si documentarea scenariilor de test
  • Executia testelor conform test planului si a strategiei de testare asumate la nivel de produs sau companie
  • Analiza si raportarea rezultatelor procesului de testare
  • Analiza si raportarea deficietelor (defecte) gasite in procesul de testare

Un tester are cunsostinte foarte bune legate de metodele de design al scenariilor de test, modelelor de test aplicabile in functie de aplicatia testata, metodelor de executie a testelor si nu in ultimul rand abilitati de comunicare foarte bune.

 

Cum am pus in diagrama de mai sus, intalnim foarte des doua ramuri clar differentiate in ceea ce priveste cariera de tester software.

Prima este zona de testare manuala a aplicatiilor si cea de a doua este zona de testare autoamata a acelorasi aplicatii.

QA Manual Tester

Acest tip de testare se bazeaza pe executarea scenariilor de test intr-un mod manual. Adica exact cum procedeaza un utilizator final cu aplicatia.

Spre exemplu, daca testam un magazine online, un scenariu tipic de test presupune parcurgerea de la crearea unui cont pana la adaugarea in cos a unui produs si incercarea platii.

Acest scenariu se executa manual, prin deschidera intr-un browser a magazinului respectiv si parcurgerea tuturor pasilor de test folosind mouse-ul si tastatura. Exact cum facem oricare dintre noi cand comandam un produs online.

Testerul manual este specializat in a gasi defecte acolo unde testarea automata nu poate, bazandu-se pe experienta, pe abilitatile de observare si pe ceea ce in industria IT numim “Tester mindset”.

Acest “tester mindset” se invata si reprezinta un mod de a gandi scenariile de test si executia lor in functine de unde este cel mai probabil a se gasi defecte.

De obicei ne referim la acest mindset sub forma : Testerul intodeauna se gandeste cum sa “strice” programul testat.

Responsabilitatile de zi cu zi ale unui tester manual pot include:

  • Parcurgerea documentatiei primite de la client pentru a intelege cerintele si nevoile clientului
  • Comunicarea continua cu clientul
  • Scrierea de scenarii de test
  • Raportarea defectelor gasite
  • Ajutarea programatorilor in reproducerea defetelor
  • Executarea scenariilor de test
  • Raportarea progresului testarii
  • Contribuirea la definirea strategiei de test sau a planului de testare

Aceste sunt cele mai comune, dar in functie de specificul si stadiul proiectului sau de nivelul de senioritate al testerului se pot adauga sau scoate din responsabilitati.

 

QA Automation Tester

Acest tip de testare se bazeaza pe scrierea de programe (scripturi) care in mod automat (programatic) sa execute scenarii de test.

Daca ne referim la acealsi scenariu de mai sus in magazinul online, un test automat presupune scrierea de cod sursa, care sa simuleze parcurgerea acelorasi pasi fara utilizarea mouseului sau a tastaturii. Totul se face prin simulare programatica.

Testerul automat este cel mai aproape de dezvoltator ca si profil pentru ca ambii scriu cod sursa, difernta fiind ca unul (dezvoltatorul) scrie un program, iar testerul automat scrie un program cu care testeaza programul scris de dezvoltator.

Este foarte des intalnit in idustria IT ca  foarte multi QA Automation testeri sa faca pasul catre cariera de dezvoltator dupa o perioada.

De ce avem nevoie de acest profil cand dezvoltam software? Pentru ca de cele mai multe ori numarul scenariilor de test cresc pe masura ce produsul software se dezvolta sin oi functionalitati sunt adaugate.

Astfel avem nevoie de o modaliate de a testa cat mai repede ce a fost deja dezvoltat pentru a ne asigura ca noile functionalitati adaugate nu strica vechile functionalitati. Astfel testarea autoamata ajuta testerul manual sa se concentreze pe testarea functionalitatilor noi in loc sa piarda timpul cu retestarea celor vechi.

Cateva dintre responsabilitatile  de zi cu zi pot include:

 

  • Scrierea de teste automate folosind diverse limbaje de programare si framework-uri (instrumente specifice cu ajutorul carora se scriu si executa testele)
  • Executia testelor automate
  • Analiza rezultatelor testelor
  • Mentenanta testelor automate
  • Raportarea defectelor intalnite
  • Analiza de programe noi pentru testare automata.

 

QA Lead/ QA Manager

Acestea reprezinta roluri de management de echipa. Sunt roluri de coordonare a caror principala responsabiliate este aigurarea la nivel de companie a unui proces si strategie de testare in conformitate cu standardele companiei.

In general aceste pozitii sunt ocupate de catre testerii care au ajuns la un nivel de senioritate de expert si care demonstreaza deasemenea si abilitati de coordonare.

Ca si responsabilitati generale putem enumera:

  • Pregatirea strategiei de testare la nivel de companie au proiect
  • Recrutarea de personal (testeri)
  • Alocarea testerilor in functie de competente si senioritate pe proiecte
  • Definirea de indicatori de calitate
  • Reprezentarea echipei de QA in sedintele de management
  • Supervizarea activitailor de testare si raportarea lor catre managementul superior
  • Identificarea de noi procese de testare si ajustarea proceselor naturale.

Acestea sunt responsabilitatile comune, care se regasesc indiferent de specificul companiei in care opereaza echipa de QA.

 

 

Ce reprezinta un ”load balancer”?

Acest articol face parte dintr-o serie, in care ne propunem sa explicam in termeni cat mai simpli, o parte din notiunile folosite in industria IT.

Pentru ca o mare parte din termenii folositi in industrie sunt in limba engleza si nu au neaparat o traducere exacta in limba romana. De aici si confuzia multora in ceea ce priveste semnificatia multora dintre acesti termeni.

Asadar, astazi vom vorbi despre “Load balancer

Cand ne referim la termenul de “load balancing”, ce vrem sa spunem este procesul prin care se face distributia traficului pe care serverele aplicatiei noastre il primesc de la consumatorii ei.

De ce avem nevoie de load balancing ?

Pentru ca aplicatiile din zilele noastre sunt accesate concomitent de un numar foarte mare de utilizatori in acelasi timp. Acest lucru pune presiune pe serverele aplicatiei si poate cauza un timp de raspuns mai mic asupra actiunilor utilizatorilor finali, ceea ce inseamna o nemultumire a acestora legata de modul in care aplicatia raspunde la comenzi.

Sa luam exemplu Instagram, unde sute de mii sau milioane de oameni cer sa acceseze fotografii in acelasi timp.
Serverul trebuie sa fie capabil sa raspunda cu fotografia ceruta in cel mai scurt timp posibil.

Ca acest lucru sa se intample dezvoltatorii adauga din ce in ce mai multe servere care sa proceseze aceste requesturi cat mai repede.

Astfel avem nevoie de o modalitate de a distribui aceste request-uri, catre toate serverele aplicatiei, si aici apare nevoia de load balancing.

Un load balancer se intrepune intre utilizatorii finali si serverele aplicatiei cu scopul de a :

  • Distribui requesturile venite din partea utilizatorilor pe mai multe servere
    • Sa asigure disponibilitatea si accesibilitatea aplicatiei prin distributia cererilor doar catre serverle care le pot gestiona (nu au load mare, nu sunt offline, etc)
    • Permite adaugarea si scoaterea de servere din ecosistemul aplicatiei in functie de cerinte
    • Automat redirecteaza toate requesturile cand un server trece offline catre restul serverelor

Mai jos o sunt cativa algoritmi care se folosesc pentru load balancing:

Round robin : Acest tip de algoritm permite ca requesturile sa fie distribuite secvential catre fiecare server in parte.

Weighted Round Robin : Acest alogritm functioneaza la fel ca metoda round robin, doar ca in cazut acesta, fiecarui server I se atribuie o pondere, si serverul cu o pondere mai mare va primi mai mult trafic iar serverul cu o pondere mai mica ba primi un trafic mai mic.

Least connection : Acest algoritm ia in considerare incarcarea serverului, astfel, traficul va fi distribui pe baza numarului de sesiuni active. Serverul cu cele mai putine sesiuni active va fi favorizat in a primi traficul.

Weighted least connection:  Acest algoritm este construit pe baza technicii de mai sus, doar ca in plus fiecarui server I se atribuie o pondere. Daca doua servere detin acelasi numar de sesiuni active, atunci se ia in considerare si ponderea, iar traficul va fi directionat catre serverul cu ponderea mai mare.

Least response : Acest algoritm ia in considerare atunci cand redirectioneaza traficul catre un server, care este serverul cu cel mai mic timp de raspuns si care are cele mai putine sesiuni active.

Acestia sunt doar cativa algoritmi care sunt folositi, in general difera in functie de cum sunt construite applicatiile din punt de vedere architectural.

Ce reprezinta “Technology stack” sau “Tech stack”

Acest articol face parte dintr-o serie, in care ne propunem sa explicam in termeni cat mai simpli, o parte din notiunile folosite in industria IT.

Pentru ca o mare parte din termenii folositi in industrie sunt in limba engleza si nu au neaparat o traducere exacta in limba romana. De aici si confuzia multora in ceea ce priveste semnificatia multora dintre acesti termeni.

Asadar, astazi vom vorbi despre “Technology stack”, “Tech stack” sau “Application stack”

In interiorul industriei IT, folosim zilinc aceasta expresie pentru a ne referi la technologiile care sunt folosite intr-un anumit proiect.

Exemplu : Care este tech stack-ul proiectului tau ?

Intrebarea se refera la :

Care sunt limbajele de programare  si bazele de date care sunt folosite in interiorul proiectului.

Care sunt technologiile folosite in interiorul aceluiasi proiect si care sunt produsele software care sunt folosite pentru dezvoltarea produsului.

Putem spune ca este o sumarizare a technologiilor folosite pentru crearea unui produs software.

In general, atunci cand recruteaza, companiile se refera direct la tech stack-urile folosite pentru a recruta candidati.

Cateva categorii care compun un tech stack sunt (nu va faceti griji pentru denumirile in engleza, le vom explica in articole ulterioare):

Limbajele de programare : Aceste sunt alese in functie de specificul aplicatiei pentru care se dezvolta, daca este doar pentru aparate mobile sau de orice tip, in functie de zona de dezvoltare, daca vorbim de partea de server sau de partea cu care utilizatorul final interactioneaza (UI = user interaction; website sau interfata unei aplicatii).

Exemple de limbaje de programare populare sunt : Java; Python, JavaScript, Ruby, Swift, C#, C++, Go, PHP

Servere si load balancing  : Acestea reprezinta partea de server, partea de distributie a continutului in cadrul retelei, partea de rutare si de cache (datele “cache” sunt informatii transmise de catre un website sau o aplicatie care sunt ulterior stocate, pentru a fi folosite mai tarziu)

Servicii populare in aceasta categorie sunt : AWS, Google Cloud, Azure, Apache, Ngnix, CloudFlare

Stocare si cautare de date : Aceasta parte este reprezenta de catre bazele de date si alte tipuri de aplicatii care iti permit sa stochezi si sa cauti in acele stocuri de date. Spre exemplu date legate de produsele unui site de cumparaturi, sau datele legate de comportamentul unui user care mai tarziu iti permit sa imbunatatesti aplicatie pe baza acestui comportament.

Produse populare in aceasta categorie sunt : MySql, MongoDD, Cassandra, PostgresSql, Azure SQL, RedShift, Oracle

Frameworks pentru zona de backend :  Simplist spus, framework este o colectie de limbaje, librarii si alte utilitati care sunt folosite de catre programatori pentru a crea aplicatii. Tot simplist, backend se refera la zona de management de contiut a aplicatie. Este compus din mai multe parti (server, baza de date, aplicatie).

Produse populare in aceasta categorie sunt : Spring, Django, Laravel, RubyOnRails, .Net

Frameworks pentru zona de frontend : Simplist spus frontend se refera la zona de interactiune cu userul final. Website-ul sau interfata unei aplicatii.

Produse populare in aceasta categorie sunt : AngularJs, React, Flutter, Boostrap, JQuery, EmberJS

Monitorizare : In aceasta categorie intra produsele folosite pentru a tine sub observatie performanta si modul in care o aplicatie se comporta in momentul in care este folosita. Se iau in considerare diverse tipuri decomportamente (performanta, scalabilitate, etc). Ele analizeaza intreaga aplicatie de la bazele de date pana la zona de interactiune cu utilizatorul final.

Produse populare in aceasta categorie sunt : DataDog, Nagios, Zabbix, Dynatrace, AppDinamics

Acestea sunt doar cateva dintre categorii, dar care sunt printre cele mai importante de mentionat.

Acum ca sa ne facem o idee si mai clara, haideti sa vedem care sunt cateva dintre tech stack-urile catorva dintre cele mai uzuale aplicatii de zi cu zi :

SnapChat :

Limbaje de programare:  Java, Kotlin, Objective-C, Swift, JavaScript

            Frameworks: AngluarJs, JQuery, React, Boostrap

            Cloud: Google App Engine, Google Compute Engine, Google Cloud Datastore

            Baze de date: MySql, MongoDB, Redis

Netflix:

Limbaje de programare:  Java, Python, Kotlin, Swift, JavaScript

            Frameworks: NodeJS, React, Restify, RxJS

            Cloud: Amazon EC2, AMAzon S3, Amazon RDS, Amazon EMR etc

            Baze de date: MySql, PostgresSQL, Redis, Cassandra

Uber:

Limbaje de programare:  Java, Python, Objective-C, Swift, JavaScript, GO

            Frameworks: NodeJS, React, ExpressJS, BackboneJS

            Cloud: Amazon EC2, AMAzon S3, Amazon RDS, Amazon EMR etc

            Baze de date: MySql, PostgresSQL, Redis, Cassandra, MongoDB

Ce reprezinta ”SaaS”?

Acest articol face parte dintr-o serie, in care ne propunem sa explicam in termeni cat mai simpli, o parte din notiunile folosite in industria IT.

Pentru ca o mare parte din termenii folositi in industrie sunt in limba engleza si nu au neaparat o traducere exacta in limba romana. De aici si confuzia multora in ceea ce priveste semnificatia multora dintre acesti termeni.

Asadar, astazi vom vorbi despre “Saas” sau “Software as a Service

SaaS (Software ca serviciu) este unul din cele trei mari categorii ale cloud computing. Pe scurt, cloud computing este un concept care reprezinta un ansamblu distribuit de servicii, aplicatii si baze de date, pe care utilizatorul le acceseaza via internet, fara a avea nevoie sa le instaleze sau sa le configureze local.

O traducere in limba romana pentru termenul cloud computing nu exista.

Dar sa revenim. Cum spuneam, Saas este unul din cele trei mari categorii ale cloud computing, alturi de IaaS (Infrastructure as a Service = Infrastructura ca serviciu) si PaaS (Platform as a Service = Platforma ca serviciu)

SaaS ne permite sa utilizam aplicatii care nu sunt instalate la noi pe calculator, sau in reteaua noastra. Putem spune astfel, ca orice aplicatie care ofera un serviciu si pe care o accesam via internet reprezinta un SaaS.

Multi oameni folosesc deja SaaS fara sa stie ca o fac. Aplicatii ca Gmail, Hotmail, Yahoo, Google Docs, WordPress, Slack, toate sunt SaaS.

Chiar si Netflix este tot un SaaS. Netflix vinde un serviciu pe care il platesti sub forma de subscriptie lunara pentru a urmari filme si documentare care sunt licentiate (deci nu pot fi descarcate gratuit).

Tot ce tine de partea de hardware si software necesar pentru functionarea aplicatiei este gestionata de catre cei care pun la dispozitie aceasta aplicatie, din partea noastra neffind necesar sa instalam sau sa configuram aplicatia respectiva.

Aplicatiile SaaS sunt atat pentru scop personal cat si pentru bussines. Cum spuneam sim ai sus, Gmail este un exemplu foarte uzual pentru scop personal. Pentru firme, aplicatii gen Salesforce, Sap, sau diverse alte ERP-uri sunt foarte commune.

O confuzie des intalnita, este daca toate website-urile sunt SaaS ?, pentru ca sunt applicatii accesibile via internet.

Raspunsul simplu este nu. Raspunsul mai lung suna asa: Nu toate website-urile ofera servicii. Multe website-uri sunt doar pentru prezentare, sunt bloguri sau doar pentru impartasit idei si asa mai departe. Dar nu ofera un serviciu pe care utilizatorul final il foloseste.

Cateva (doar cateva) exemple de tipuri de servicii sunt mai jos: