În Python, continue, break și pass sunt trei declarații distincte care pot fi utilizate pentru a controla fluxul
unui program. Iată o scurtă prezentare a fiecăreia:
1. Continue
Declarația continue este utilizată pentru a sări peste restul codului dintr-o buclă pentru iterarea curentă.
Apoi, trece la următoarea iterație a buclei.
Exemplu:
pentru i în range(1, 6):
dacă i == 3:
continue
print(i)
Rezultat:
1
2
4
5
În acest exemplu, atunci când i este 3, declarația continue sare peste instrucțiunea print(i) și trece la
următoarea iterație a buclei.
2. Break
Declarația break este utilizată pentru a termina o buclă în întregime. Atunci când o declarație break este
întâlnită, bucla este ieșită imediat, și programul continuă executarea codului care urmează după buclă.
Exemplu:
pentru i în range(1, 6):
dacă i == 3:
break
print(i)
Rezultat:
1
2
În acest exemplu, atunci când i este 3, declarația break iese din buclă în întregime, și programul se oprește
din imprimarea numerelor.
3. Pass
Declarația pass este un locaș deținător atunci când o declarație este necesară, dar nu se dorește a se
executa nicio acțiune. Este adesea utilizată ca un locaș deținător în structurile de control, cum ar fi buclele
sau condițiile, atunci când nu se dorește a se executa nicio acțiune.
Exemplu:
dacă True:
pass
print("Acesta este un exemplu")
Rezultat:
Acesta este un exemplu
În acest exemplu, declarația pass nu face nimic, și programul continuă executarea codului care urmează
după condiție.
În Python, listele și dicționarele sunt două tipuri de structuri de date fundamentale care pot fi utilizate pentru a
stoca și a manipula date. Iată câteva operații comune care pot fi efectuate cu listele și dicționarele:
Liste
1. Crearea unei liste: lista = [1, 2, 3, 4, 5]
2. Accesarea unui element: lista <sup> </sup> (accesează primul element)
3. Adăugarea unui element: [Link](6) (adăugă elementul 6 la sfârșitul listei)
4. Ștergerea unui element: [Link](2) (șterge primul element care are valoarea 2)
5. Sortarea listei: [Link]() (sortează lista în ordine crescătoare)
6. Inversarea listei: [Link]() (inversează lista)
7. Concatenarea listelor: lista1 + lista2 (concatenează două liste)
8. Verificarea existenței unui element: 2 in lista (verifică dacă elementul 2 există în listă)
Dicționare
1. Crearea unui dicționar: dict = {'nume': 'Ion', 'varsta': 25}
2. Accesarea unei valori: dict['nume'] (accesează valoarea asociată cheii 'nume')
3. Adăugarea unei perechi cheie-valoare: dict['adresa'] = 'București' (adăugă o nouă pereche
cheie-valoare)
4. Ștergerea unei perechi cheie-valoare: del dict['varsta'] (șterge perechea cheie-valoare cu cheia
'varsta')
5. Actualizarea unei valori: dict['nume'] = 'Maria' (actualizează valoarea asociată cheii 'nume')
6. Verificarea existenței unei chei: 'nume' in dict (verifică dacă cheia 'nume' există în dicționar)
7. Obținerea unei liste cu cheile: [Link]() (obține o listă cu toate cheile din dicționar)
8. Obținerea unei liste cu valorile: [Link]() (obține o listă cu toate valorile din dicționar)
Operații comune
1. Iterarea: for element in lista: (iterează prin toate elementele din listă)
2. Filtrarea: [x for x in lista if x > 3] (filtrează elementele din listă care îndeplinesc o condiție)
3. Transformarea: [x**2 for x in lista] (transformă elementele din listă aplicând o funcție)
Iată câteva exemple de cod care demonstrează aceste operații:
# Liste
lista = [1, 2, 3, 4, 5]
print(lista <sup> </sup>) # 1
[Link](6)
print(lista) # [1, 2, 3, 4, 5, 6]
[Link](2)
print(lista) # [1, 3, 4, 5, 6]
# Dicționare
dict = {'nume': 'Ion', 'varsta': 25}
print(dict['nume']) # Ion
dict['adresa'] = 'București'
print(dict) # {'nume': 'Ion', 'varsta': 25, 'adresa': 'București'}
del dict['varsta']
print(dict) # {'nume': 'Ion', 'adresa': 'București'}
# Operații comune
lista = [1, 2, 3, 4, 5]
for element in lista:
print(element) # 1, 2, 3, 4, 5
filtrata = [x for x in lista if x > 3]
print(filtrata) # [4, 5]
transformata = [x**2 for x in lista]
print(transformata) # [1, 4, 9,
În Python, există patru tipuri de structuri de date fundamentale: liste, seturi, tupluri și dicționare. În acest
răspuns, vom discuta despre liste, seturi, tupluri și imutabilitate.
Liste
O listă este o colecție ordonată de elemente, care pot fi de orice tip (numere, șiruri de caractere, alte
liste, etc.).
Liste pot fi modificate (adăugarea, ștergerea, modificarea elementelor).
Liste sunt definite folosind paranteze pătrate [].
Exemplu: lista = [1, 2, 3, 4, 5]
Seturi
Un set este o colecție neordonată de elemente unice, care pot fi de orice tip (numere, șiruri de
caractere, etc.).
Seturi nu pot conține elemente duplicate.
Seturi pot fi modificate (adăugarea, ștergerea elementelor).
Seturi sunt definite folosind paranteze cu acolade {}.
Exemplu: setul = {1, 2, 3, 4, 5}
Tupluri
Un tuplu este o colecție ordonată de elemente, care pot fi de orice tip (numere, șiruri de caractere,
etc.).
Tupluri sunt imutabile, adică nu pot fi modificate după creare.
Tupluri sunt definite folosind paranteze rotunde ().
Exemplu: tuplu = (1, 2, 3, 4, 5)
Imutabilitate
Imutabilitatea înseamnă că o structură de date nu poate fi modificată după creare.
Tupluri și șiruri de caractere sunt imutabile în Python.
Liste și seturi sunt mutabile, adică pot fi modificate după creare.
Exemple de cod care demonstrează aceste concepte:
# Liste
lista = [1, 2, 3, 4, 5]
[Link](6) # adăugarea unui element
print(lista) # [1, 2, 3, 4, 5, 6]
# Seturi
setul = {1, 2, 3, 4, 5}
[Link](6) # adăugarea unui element
print(setul) # {1, 2, 3, 4, 5, 6}
# Tupluri
tuplu = (1, 2, 3, 4, 5)
# tuplu <sup> </sup> = 6 # eroare, tupluri sunt imutabile
print(tuplu) # (1, 2, 3, 4, 5)
# Imutabilitate
sir = "hello"
# sir <sup> </sup> = "H" # eroare, șiruri de caractere sunt imutabile
print(sir) # "hello"
În rezumat, liste și seturi sunt structuri de date mutabile, în timp ce tupluri și șiruri de caractere sunt
imutabile. Este important să înțelegem aceste concepte pentru a scrie cod eficient și corect în Python.
În Python, un generator este un tip de obiect care poate fi utilizat pentru a genera o secvență de valori, dar
nu stochează toate valorile în memoria la un moment dat. În schimb, generatorul calculează și returnează
valorile una câte una, pe măsură ce sunt solicitate.
Caracteristici ale generatorilor
1. Lazy evaluation: Generatorii evaluează expresiile numai atunci când sunt solicitate, ceea ce
înseamnă că nu se calculează toate valorile la început.
2. Memorie eficientă: Generatorii nu stochează toate valorile în memoria la un moment dat, ceea ce
înseamnă că pot fi utilizați pentru a genera secvențe foarte lungi de valori fără a consuma prea multă
memorie.
3. Flexibilitate: Generatorii pot fi utilizați pentru a genera secvențe de valori de orice tip, inclusiv
numere, șiruri de caractere, liste, dicționare, etc.
Crearea unui generator
Pentru a crea un generator, se utilizează cuvântul cheie yield în loc de return. Când o funcție conține yield,
ea devine un generator.
Exemplu:
def generator_de_numere():
for i in range(10):
yield i
gen = generator_de_numere()
print(next(gen)) # 0
print(next(gen)) # 1
print(next(gen)) # 2
Copied
În acest exemplu, generator_de_numere este o funcție care generează o secvență de numere de la 0 la 9.
Când se apelează next(gen), generatorul returnează următoarea valoare din secvență.
Utilizarea generatorilor
Generatorii pot fi utilizați în diverse situații, cum ar fi:
1. Generarea de secvențe lungi de valori: Generatorii pot fi utilizați pentru a genera secvențe foarte
lungi de valori fără a consuma prea multă memorie.
2. Procesarea de date în timp real: Generatorii pot fi utilizați pentru a procesa date în timp real, fără a
trebui să se stocheze toate datele în memoria la un moment dat.
3. Crearea de iteratori personalizați: Generatorii pot fi utilizați pentru a crea iteratori personalizați care
pot fi utilizați pentru a itera prin secvențe de valori.
Exemplu:
def generator_de_fibonacci():
a, b = 0, 1
while True:
yield a
a, b = b, a + b
gen = generator_de_fibonacci()
for _ in range(10):
print(next(gen)) # 0, 1, 1, 2, 3, 5, 8, 13, 21, 34
Copied
În acest exemplu, generator_de_fibonacci este un generator care generează secvența de numere
Fibonacci. Se utilizează un buclă for pentru a itera prin primele 10 valori din secvență.
În Python, o funcție lambda (cunoscută și sub numele de funcție anonimă) este o funcție mică, care poate fi
definită într-o singură linie de cod. Funcțiile lambda sunt utilizate pentru a crea funcții simple, care pot fi
utilizate imediat, fără a trebui să se definească o funcție separată.
Sintaxa funcțiilor lambda
Funcțiile lambda au următoarea sintaxă:
lambda argumente: expresie
Copied
Unde:
argumente este o listă de argumente, separate prin virgulă, care vor fi transmise funcției.
expresie este o expresie Python, care va fi evaluată și returnată de funcție.
Exemple de funcții lambda
1. O funcție lambda care returnează suma a două numere:
suma = lambda x, y: x + y
print(suma(2, 3)) # 5
Copied
2. O funcție lambda care returnează pătratul unui număr:
patrat = lambda x: x ** 2
print(patrat(4)) # 16
Copied
3. O funcție lambda care returnează o listă de numere pătrate:
numere = [1, 2, 3, 4, 5]
patrate = list(map(lambda x: x ** 2, numere))
print(patrate) # [1, 4, 9, 16, 25]
Copied
Utilizarea funcțiilor lambda
Funcțiile lambda pot fi utilizate în diverse situații, cum ar fi:
1. Crearea de funcții simple: Funcțiile lambda pot fi utilizate pentru a crea funcții simple, care pot fi
utilizate imediat.
2. Utilizarea în funcții de ordonare: Funcțiile lambda pot fi utilizate ca argumente pentru funcții de
ordonare, cum ar fi sorted() sau sort().
3. Utilizarea în funcții de filtrare: Funcțiile lambda pot fi utilizate ca argumente pentru funcții de
filtrare, cum ar fi filter().
Avantajele funcțiilor lambda
1. Simplifică codul: Funcțiile lambda pot simplifica codul, prin reducerea numărului de linii de cod.
2. Crește flexibilitatea: Funcțiile lambda pot fi utilizate în diverse situații, ceea ce crește flexibilitatea
codului.
3. Reduce memoria: Funcțiile lambda pot reduce memoria necesară, prin evitarea creării de funcții
separate.
Dezavantajele funcțiilor lambda
1. Limitări: Funcțiile lambda au limitări, cum ar fi faptul că nu pot conține declarații de tip if sau for.
2. Dificultatea de citire: Funcțiile lambda pot fi dificil de citit, datorită sintaxei concise.
3. Dificultatea de debugare: Funcțiile lambda pot fi dificil de debugat, datorită faptului că nu au un
nume explicit.
În Python, concatenarea a două stringuri se poate face în mai multe moduri:
1. Utilizând operatorul +:
str1 = "Hello"
str2 = "World"
result = str1 + " " + str2
print(result) # "Hello World"
Copied
2. Utilizând metoda join():
str1 = "Hello"
str2 = "World"
result = " ".join([str1, str2])
print(result) # "Hello World"
Copied
3. Utilizând f-strings (Python 3.6+):
str1 = "Hello"
str2 = "World"
result = f"{str1} {str2}"
print(result) # "Hello World"
Copied
4. Utilizând metoda format():
str1 = "Hello"
str2 = "World"
result = "{} {}".format(str1, str2)
print(result) # "Hello World"
Copied
5. Utilizând operatorul %:
str1 = "Hello"
str2 = "World"
result = "%s %s" % (str1, str2)
print(result) # "Hello World"
Copied
Toate aceste metode pot fi utilizate pentru a concatena două stringuri, dar f-strings și metoda join() sunt
considerate mai moderne și mai eficiente.
Exemple suplimentare
Concatenarea mai multor stringuri:
str1 = "Hello"
str2 = "World"
str3 = "Python"
result = str1 + " " + str2 + " " + str3
print(result) # "Hello World Python"
Copied
Concatenarea unui string cu un număr:
str1 = "Hello"
num = 42
result = str1 + " " + str(num)
print(result) # "Hello 42"
Copied
Concatenarea unui string cu o listă:
str1 = "Hello"
lista = ["World", "Python"]
result = str1 + " " + ", ".join(lista)
print(result) # "Hello World, Python"
În dezvoltarea de software, testingul este un proces crucial care asigură că produsul final îndeplinește
cerințele și funcționează corect. Iată câteva cunoștințe despre testing processes și test framework
architecture în proiecte:
Testing Processes
1. Unit Testing: Testarea unităților de cod, cum ar fi funcții sau metode, pentru a verifica că
funcționează corect.
2. Integration Testing: Testarea integrării unităților de cod pentru a verifica că funcționează corect
împreună.
3. System Testing: Testarea sistemului în ansamblu pentru a verifica că funcționează corect și
îndeplinește cerințele.
4. Acceptance Testing: Testarea finală a sistemului pentru a verifica că îndeplinește cerințele și
funcționează corect.
5. Regression Testing: Testarea sistemului pentru a verifica că modificările nu au introdus erori noi.
Test Framework Architecture
1. Test Framework: Un cadru de testare care oferă un set de unelte și biblioteci pentru a scrie și a rula
teste.
2. Test Suite: Un set de teste care sunt rulate împreună pentru a verifica o anumită funcționalitate.
3. Test Case: Un test individual care verifică o anumită funcționalitate.
4. Test Data: Datele utilizate pentru a rula teste.
5. Test Environment: Mediul în care se rulează teste, inclusiv hardware, software și configurări.
Tipuri de Test Framework
1. JUnit: Un cadru de testare pentru Java.
2. PyUnit: Un cadru de testare pentru Python.
3. NUnit: Un cadru de testare [Link].
4. TestNG: Un cadru de testare pentru Java.
5. Pytest: Un cadru de testare pentru Python.
Arhitectura de Test
1. Layered Architecture: O arhitectură de testare care separă teste în straturi, cum ar fi unit testing,
integration testing și system testing.
2. Modular Architecture: O arhitectură de testare care separă teste în module, cum ar fi teste pentru
funcționalități individuale.
3. Service-Oriented Architecture: O arhitectură de testare care se concentrează pe testarea
serviciilor individuale.
Unelte de Test
1. Selenium: Unelte de testare pentru aplicații web.
2. Appium: Unelte de testare pentru aplicații mobile.
3. JMeter: Unelte de testare pentru încărcare și performanță.
4. Postman: Unelte de testare pentru API-uri.
5. Docker: Unelte de testare pentru containere.
Best Practices
1. Scrieți teste automate: Scrieți teste automate pentru a reduce timpul de testare și a crește calitatea.
2. Utilizați un cadru de testare: Utilizați un cadru de testare pentru a standardiza și a simplifica
testarea.
3. Testați într-un mediu de testare: Testați într-un mediu de testare separat de mediu de producție.
4. Utilizați date de testare: Utilizați date de testare pentru a simula scenarii reale.
5. Rulați teste regulate: Rulați teste regulate pentru a detecta erori și a preveni regresii.
În dezvoltarea de software, testingul este un proces crucial care asigură că produsul final îndeplinește
cerințele și funcționează corect. Iată câteva principii de testare:
Stress vs Performance vs Load
1. Stress Testing: Testarea sistemului sub o încărcare extremă, pentru a verifica că funcționează
corect și nu se prăbușește.
2. Performance Testing: Testarea sistemului pentru a verifica că funcționează la parametrii de
performanță așteptați, cum ar fi timp de răspuns, utilizare a resurselor, etc.
3. Load Testing: Testarea sistemului sub o încărcare crescândă, pentru a verifica că funcționează
corect și nu se prăbușește.
Functional vs Non-Functional
1. Functional Testing: Testarea sistemului pentru a verifica că funcționează corect și îndeplinește
cerințele funcționale, cum ar fi procesarea datelor, calcularea rezultatelor, etc.
2. Non-Functional Testing: Testarea sistemului pentru a verifica că funcționează corect și îndeplinește
cerințele non-funcționale, cum ar fi securitatea, scalabilitatea, utilizabilitatea, etc.
Negative Test
1. Negative Test: Testarea sistemului cu date și scenarii care nu sunt așteptate, pentru a verifica că
funcționează corect și nu se prăbușește.
Smoke Testing
1. Smoke Testing: Testarea sistemului pentru a verifica că funcționează corect și nu are erori critice,
înainte de a continua cu testarea detaliată.
Sanity Testing
1. Sanity Testing: Testarea sistemului pentru a verifica că funcționează corect și nu are erori critice,
după o modificare sau o actualizare.
Regression Testing
1. Regression Testing: Testarea sistemului pentru a verifica că modificările sau actualizările nu au
introdus erori noi și că funcționează corect.
Alte tipuri de testare
1. Unit Testing: Testarea unităților de cod, cum ar fi funcții sau metode, pentru a verifica că
funcționează corect.
2. Integration Testing: Testarea integrării unităților de cod pentru a verifica că funcționează corect
împreună.
3. System Testing: Testarea sistemului în ansamblu pentru a verifica că funcționează corect și
îndeplinește cerințele.
4. Acceptance Testing: Testarea finală a sistemului pentru a verifica că îndeplinește cerințele și
funcționează corect.
Beneficiile testării
1. Îmbunătățirea calității: Testarea ajută la îmbunătățirea calității produsului final.
2. Reducerea erorilor: Testarea ajută la reducerea erorilor și a defectelor.
3. Creșterea încrederii: Testarea ajută la creșterea încrederii în produsul final.
4. Reducerea costurilor: Testarea ajută la reducerea costurilor de dezvoltare și de întreținere.
Best Practices
1. Scrieți teste automate: Scrieți teste automate pentru a reduce timpul de testare și a crește calitatea.
2. Utilizați un cadru de testare: Utilizați un cadru de testare pentru a standardiza și a simplifica
testarea.
3. Testați într-un mediu de testare: Testați într-un mediu de testare separat de mediu de producție.
4. Utilizați date de testare: Utilizați date de testare pentru a simula scenarii reale.
5. Rulați teste regulate: Rulați teste regulate pentru a detecta erori și a preveni regresii.
În Programarea Orientată pe Obiecte (POO), există câteva concepte fundamentale care sunt utilizate pentru
a crea și a manipula obiecte. Iată câteva dintre aceste concepte:
Constructor
Un constructor este o metodă specială care este apelată atunci când un obiect este creat. Constructorul este
utilizat pentru a inițializa proprietățile și starea obiectului. În general, constructorul are același nume cu clasa
și nu returnează niciun valor.
Exemplu:
class Persoana:
def __init__(self, nume, varsta):
[Link] = nume
[Link] = varsta
persoana = Persoana("Ion", 30)
print([Link]) # "Ion"
print([Link]) # 30
Copied
Destructor
Un destructor este o metodă specială care este apelată atunci când un obiect este distrus. Destructorul este
utilizat pentru a elibera resursele alocate de obiect și pentru a face curățenie. În general, destructorul are
numele __del__.
Exemplu:
class Persoana:
def __init__(self, nume, varsta):
[Link] = nume
[Link] = varsta
def __del__(self):
print("Obiectul a fost distrus")
persoana = Persoana("Ion", 30)
del persoana # "Obiectul a fost distrus"
Copied
Moștenire
Moștenirea este un mecanism care permite unei clase să moștenească proprietățile și metodele unei alte
clase. Clasa care moștenește se numește clasă derivată, iar clasa de la care se moștenește se numește
clasă de bază.
Exemplu:
class Persoana:
def __init__(self, nume, varsta):
[Link] = nume
[Link] = varsta
class Student(Persoana):
def __init__(self, nume, varsta, facultate):
super().__init__(nume, varsta)
[Link] = facultate
student = Student("Ion", 20, "Informatică")
print([Link]) # "Ion"
print([Link]) # 20
print([Link]) # "Informatică"
Copied
Polimorfism
Polimorfismul este un mecanism care permite unui obiect să se comporte diferit în funcție de context. Există
două tipuri de polimorfism: polimorfism static și polimorfism dinamic.
Polimorfism static:
class Persoana:
def saluta(self):
print("Salut!")
class Student(Persoana):
def saluta(self):
print("Salut, sunt student!")
persoana = Persoana()
student = Student()
[Link]() # "Salut!"
[Link]() # "Salut, sunt student!"
Copied
Polimorfism dinamic:
class Persoana:
def saluta(self):
print("Salut!")
class Student(Persoana):
def saluta(self):
print("Salut, sunt student!")
def saluta(persoana):
[Link]()
persoana = Persoana()
student = Student()
saluta(persoana) # "Salut!"
saluta(student) # "Salut, sunt student!"
Copied
Acestea sunt câteva dintre conceptele fundamentale ale POO. Există multe alte concepte și tehnici care pot
fi utilizate pentru a crea și a manipula obiecte într-un program.
1. Linux (20 întrebări)
2. Cum verifici spațiul liber pe disc și raportezi doar fișierele cu dimensiune mare?
o df -h arată spațiul liber pe partiții.
o du -h /dir --max-depth=1 | sort -hr | head -n 10 arată directoarele mari.
3. Cum găsești recursiv un fișier după nume?
o find /cale -name "[Link]" caută exact.
o find /cale -iname "*error*.log" este insensibil la majuscule.
4. Cum afișezi ultimele 100 linii dintr-un log și continui vizualizarea în timp real?
o tail -n 100 [Link] și tail -f [Link].
5. Cum găsești procesele care consumă multă memorie sau CPU?
o ps aux --sort=-%mem | head, ps aux --sort=-%cpu | head, top sau htop.
6. Cum rulezi un comanda periodic (cron)?
o Editezi crontab: crontab -e. Exemplu: 0 2 * * * /usr/bin/[Link].
7. Cum verifici porturile deschise și procesele care le folosesc?
o ss -tulnp sau netstat -tulnp.
8. Cum modifici permisiunile fișierelor și directoarelor?
o chmod 644 [Link], chmod -R 755 /folder.
9. Cum schimbi proprietarul fișierelor/directoarelor?
o chown user:group file, chown -R user:group /folder.
10. Cum vezi jurnalele de sistem în real-time?
o journalctl -f pentru systemd logs, tail -f /var/log/syslog altfel.
11. Cum inspectezi variabilele de mediu?
o printenv, env, echo $PATH.
12. Cum arhivezi și comprimi directoare?
o tar -czvf [Link] /cale și tar -xzvf [Link].
13. Cum decupezi fișiere mari în bucăți mai mici?
o split -b 100M [Link] parte_.
14. Cum monitorizezi utilizarea discului în timp real?
o iostat -xz 1, iotop, dstat.
15. Cum configurezi SSH key-based authentication?
o Generezi cheia: ssh-keygen, copiezi: ssh-copy-id user@host.
16. Cum debugezi permisiuni în Linux?
o ls -l, stat file, verifici SELinux cu sestatus, getenforce.
17. Ce comenzi folosești pentru a lucra cu procese?
o kill PID, pkill -f name, nice, renice.
18. Cum verifici uptime și încărcarea sistemului?
o uptime, who -b, w.
19. Cum măsori timpul de execuție a unui script?
o Prefix time ./[Link].
20. Cum inspectezi parametrii nucleului la boot?
o cat /proc/cmdline.
21. Cum aplici patch-uri sau actualizări?
o Distribuții Debian/Ubuntu: apt update && apt upgrade; RedHat: yum update sau dnf update.
22. ☎️VOIP (20 întrebări)
1. Ce este SIP și pentru ce se folosește?
o Protocol de semnalizare pentru inițiere, modificare și terminare apelurilor (ex: SIP INVITE,
ACK, BYE).
2. Ce înseamnă SIP INVITE și ce conține headerele sale?
o Inițiază sesiunea. Headerele includ From, To, Call-ID, CSeq, Via, Contact.
3. Ce este SDP și ce făcea în contextul SIP?
o Session Description Protocol pentru negocierea codec-urilor, porturi, IP-uri.
4. Cum inspectezi pachete VOIP cu Wireshark?
o Aplici filtre: sip, rtp, rtcp, [Link] == 5060, poți demasca fluxurile audio.
5. Ce face un RTP stream?
o Transportă datele audio/video (în timp real), conține timestamp și sequence number pentru
sincronizare și detectarea pierderilor.
6. De ce codec-urile G.711, G.729, Opus sunt importante?
o G.711: calitate ridicată, >64 kbps; G.729: compresie eficientă la ~8 kbps; Opus: flexibilitate,
bun pentru web/audio.
7. Ce e jitter buffer și de ce contează?
o Buffer folosit pentru stabilizarea fluxului audio. Fără el, pachetele întârziate sau pierdute pot
genera audio sărit.
8. Cum testezi calitatea audio automatizat?
o Folosești tool-uri precum PJSIP, SIPp, Wireshark pentru a măsura Jitter, MOS, packet loss.
9. Ce sunt STUN și TURN?
o STUN: determină IP/public port din spatele NAT. TURN: proxy media dacă STUN nu
funcționează.
10. Cum verifici compatibilitatea NAT în NAT-T VoIP?
o Testezi folosind STUN/TURN și SIP ALG din router.
11. Ce comenzi SIPp ai folosi pentru un test de volum?
o sipp -sn uac uas -d 5000 -l 100 creează 5000 de apeluri cu 100 simultane.
12. Cum validezi sesiunea SDP?
o Verifici IP-urile, porturile, codec-urile compatibile între endpoint-uri.
13. Ce rol are portul 5060 vs 5061 în SIP?
o 5060: SIP fără TLS. 5061: SIP cu TLS criptat.
14. Cum testezi fallback-ul din SIP UDP în TCP?
o Forțezi dezactivarea UDP pe client și monitorizezi upgrade-ul prin Via/Transport headers.
15. Ce este QoS în VoIP și cum-l verifici?
o Quality of Service: prioritizarea pachetelor audio. Verifici DSCP, marca pachetelor, MIB-uri
SNMP ale routerelor.
16. Ce este și ce impact are jitter?
o Variația de întârziere între pachete. Dacă e mare >30 ms, se pot pierde pachete audio.
17. Ce metrici analizezi pentru calitatea unui apel?
o MOS (Mean Opinion Score), packet loss %, jitter, latency.
18. Cele mai comune probleme de VoIP?
o NAT, firewall, jitter, latență, compatibilitate codec, probleme de autorizare și certificare TLS.
19. Cum simulezi apeluri distructive sau de marcă negativă?
o Folosești fluxuri malformed SIP, autentificări invalide, SIP fuzzing cu VoIP tester.
20. Cum testezi auto-scaling-ul unui server VoIP sub încărcare?
o Folosești SIPp/JMeter cu scenarii de vârf (peak), monitorizezi CPU, memorie, conexiuni,
calitate apel.
23. 🐍 Python (20 întrebări)
1. Cum scrii un test unit cu unittest și cum rulezi doar un test specific?
python
CopyEdit
import unittest
class TestCalc([Link]):
def test_add(self):
[Link](add(2,3),5)
if __name__=='__main__':
[Link](argv=['first-arg-is-ignored','-k','test_add'])
2. Cum optimizezi un test cu pytest folosind fixtures?
python
CopyEdit
@[Link]
def clinet_db():
return connect_db(...)
def test_user(clinet_db):
assert clinet_db.get_user(1).name=='Alice'
3. Explică decoratorii cu argument.
python
CopyEdit
def repeat(n):
def decorator(f):
def wrapper(*args,**kw):
for _ in range(n): f(*args,**kw)
return wrapper
return decorator
@repeat(3)
def greet(): print("Hello")
4. Ce e un generator și de ce folosim yield?
o Generatorii economisesc memorie, produc secvențe lazy. yield returnează un element și
păstrează starea.
5. Cum gestionezi excepțiile în teste automatizate?
python
CopyEdit
with [Link](ValueError):
call_bad_func()
6. Cum mock-uiești o funcție sau un obiect?
python
CopyEdit
from [Link] import patch
with patch('[Link]') as mock_f:
mock_f.return_value = 42
assert module.uses_func() == 42
7. Ce e parametrization în pytest?
o Rulezi un singur test cu multiple seturi de date:
python
CopyEdit
@[Link]("a,b,expected", [(1,2,3),(2,3,5)])
def test_add(a,b,expected):
assert add(a,b)==expected
8. Cum rulezi teste în paralel cu pytest-xdist?
o Instalezi pip install pytest-xdist, apoi pytest -n auto.
9. Cum verifici acoperirea codului?
o Usezi [Link]: coverage run -m pytest + coverage report / coverage html.
10. Cum parcurgi un JSON mare în Python performant?
o Folosești ijson pentru parsare incrementală.
11. Cum gestionezi conexiuni multiple la API în paralelo?
o Cu asyncio + aiohttp.
12. În ce situații folosesc listă, set, dict?
o Listă: ordone, set: unicitate, dict: mapare cheie-valoare, toate cu complexități predictibile
O(1) sau O(n).
13. Ce face GIL-ul în Python și cum îl evităm?
o Global Interpreter Lock face ca doar un thread să execute bytecode. Evităm cu
multiprocessing sau extensii C.
14. Cum validezi schema JSON automatizat?
o Folosești [Link](data, schema).
15. Cum trasezi execuția și gasesti bottleneck-uri?
o Folosești cProfile sau line_profiler.
16. Cum faci retry la request-uri eșuate (ex: timeouts)?
o requests + [Link].
17. Cum definesc o clasă cu proprietăți și validări?
python
CopyEdit
class User:
def __init__(self,name,age):
[Link]=name
[Link]=age
@property
def age(self):
return self._age
@[Link]
def age(self,value):
if value<0: raise ValueError
self._age = value
18. Cum structurezi un proiect Python de testare?
o src/ pentru cod, tests/ separat, [Link], [Link], .flake8 pentru linter.
19. Cum rulezi teste în pipeline CI/CD?
o Integrezi pytest, coverage, și generați rapoarte în Jenkins, GitLab CI, GitHub Actions.
20. Cum documentezi testele și codul în Python?
o Folosești docstrings în formatoare reST sau Google style și generezi automat cu Sphinx.
24. Baze de Date – SQL (20 întrebări)
1. Select simplu: SELECT * FROM users;
o Arată toate coloanele și rândurile din tabel.
2. Filtrare cu WHERE și operatori:
o SELECT id, name FROM users WHERE age > 30 AND status = 'active';
3. LIKE și wildcard-uri:
o SELECT email FROM users WHERE email LIKE '%@[Link]';
4. Count și aggregate:
o SELECT COUNT(*) FROM orders WHERE created_at >= '2025-01-01';
5. Grupe și HAVING:
o SELECT status, COUNT(*) FROM users GROUP BY status HAVING COUNT(*) > 10;
6. Join între tabele:
o SELECT [Link], [Link] FROM orders o JOIN users u ON o.user_id = [Link];
7. Left/Right/Full Join:
o LEFT JOIN: toate din stânga + coincid din dreapta.
o RIGHT/FULL similar.
8. Subinterogări:
o SELECT name FROM users WHERE id IN (SELECT user_id FROM orders WHERE total >
1000);
9. CTE (Common Table Expression):
sql
CopyEdit
WITH recent_orders AS (
SELECT user_id, MAX(created_at) AS last_order
FROM orders GROUP BY user_id
)
SELECT [Link], ro.last_order
FROM users u JOIN recent_orders ro USING(user_id);
10. Update cu WHERE:
o UPDATE users SET status='inactive' WHERE last_login < '2024-01-01';
11. Delete cu condiție:
o DELETE FROM sessions WHERE created_at < NOW() - INTERVAL '30 days';
12. Indexuri și când le folosești:
o CREATE INDEX idx_user_email ON users(email); – îmbunătățește căutările pe email.
13. EXPLAIN plan:
o EXPLAIN ANALYZE SELECT ...: arată cum rulează query-ul, costuri, indexuri folosite.
14. Transacții:
sql
CopyEdit
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id=1;
UPDATE accounts SET balance = balance + 100 WHERE id=2;
COMMIT;
15. Rollback:
o În cazul unei erori folosești ROLLBACK;.
16. View-uri și când le folosești:
o CREATE VIEW active_users AS SELECT * FROM users WHERE status='active';
17. Stored procedures / functions:
o PostgreSQL: CREATE FUNCTION calc_tax(amount numeric) RETURNS numeric AS $$
BEGIN RETURN amount*0.2; END $$ LANGUAGE plpgsql;
18. Concepte de normalizare:
o 1NF, 2NF, 3NF reduc redundanța și anomalii de update.
19. Backups și restore:
o PostgreSQL: pg_dump db > [Link], psql db < [Link].
20. Conexiune prin Python:
python
CopyEdit
import psycopg2
conn = [Link](dbname='test', user='u', password='p')
cur = [Link]()
[Link]("SELECT * FROM users;")
rows = [Link]()
25. 🧪 Testare Automată & Manuală (ISTQB) (20 întrebări)
1. Ce este testarea funcțională vs. non-funcțională?
o Funcțională: verifică dacă funcțiile lucrează corect.
o Non-funcțională: performanță, securitate, scalabilitate, UX.
2. Ce este un test case și ce conține?
o ID, obiectiv, pre-condiții, pași, input, rezultat așteptat, rezultat real, post-condiții, status.
3. Care e diferența între bug și defect?
o Bug: greșeală de implementat. Defect: diferență între cerință și comportament.
4. Explică ciclul vieții unui defect.
o New → Assigned → Open → Fixed → Retest → Closed/Rejected.
5. Ce este testarea regresivă?
o Re-rularea testelor după schimbări pentru a asigura că nu apar erori noi.
6. Care sunt nivelurile de testare?
o Unit, Integration, System, Acceptance.
7. Tipuri de testare automată?
o Unit, Integration, E2E, Smoke, Regression, Performance, API, Security.
8. Cum determinezi ce se testează manual vs automat?
o Teste repetitive și stabile → automatizare.
o Exploratory, UX, edge cases → manual.
9. Ce este un test plan și ce include?
o Document strategic cu scop, obiective, resurse, timeline, criterii de acceptare.
10. Care sunt criteriile de intrare și ieșire ale testării?
o Intrare: specificații gata, mediu configurat.
o Ieșire: rapoarte, buguri critice rezolvate, acoperire OK.
11. Ce este Boundary Value Analysis?
o Teste la limită a domeniului inputurilor. Ex: pentru [1..10], testezi 1,10 și valori +/-1: 0,11.
12. Ce este Equivalence Partitioning?
o Împarți input-ul în clase valide/invalide și testezi câte un element din fiecare.
13. Ce este Pairwise Testing?
o Combină doi parametri la un moment dat în loc de toate combinațiile (reduce numărul
testelor).
14. Testare exploratorie – ce și când?
o Testare ad-hoc bazată pe experiență, utilă când nu există cerințe detaliate.
15. Ce este MTBF / MTTR?
o MTBF (Mean Time Between Failures): medie timp între defecte.
o MTTR (Mean Time To Repair): medie timp de remediere.
16. Care sunt vocile risk-based testing?
o Atestarea amplificată în zone riscante: business critical, rezultate greșite, securitate.
17. Ce este testarea de regresie automată?
o Automatizarea suitei de regresie pentru rulări continue (fiecare build).
18. Ce tool-uri de testare ai mai folosit?
o Selenium, Cypress, Postman, JMeter, Appium, Jenkins, JIRA, TestRail.
19. Cum măsori acoperirea testelor?
o Funcțional: traceability matrix între cerințe și teste.
o Automat: cod coverage tools ([Link], Istanbul).
20. Cum raportezi calitatea software-ului?
o Rapoarte cu metrici: bug-uri, sev, acoperire, test execution, tendințe, riscuri, recomandări.
1 1. Linux – 20 întrebări și răspunsuri detaliate
1. Cum verifici spațiul liber pe disc în Linux?
✅ Răspuns:
bash
CopyEdit
df -h
💡 Explicație:
Comanda df (disk free) îți arată cât spațiu este utilizat și cât este disponibil pe sistemul de fișiere. Opțiunea -h
(„human-readable”) transformă valorile brute în formate ușor de înțeles, precum MB sau GB. Este foarte utilă
în QA pentru a verifica dacă există suficient spațiu pentru loguri, fișiere de test etc.
2. Cum verifici spațiul ocupat de un anumit director?
✅ Răspuns:
bash
CopyEdit
du -sh /cale/catre/director
💡 Explicație:
du (disk usage) arată cât spațiu ocupă fișierele/directoarele. -s face sumar doar pentru directorul respectiv
(nu recursiv), iar -h îl afișează în formă prietenoasă (MB, GB). Este util pentru debugging – de exemplu, când
vezi că spațiul pe disc scade brusc.
3. Cum cauți recursiv un fișier după nume?
✅ Răspuns:
bash
CopyEdit
find / -name "nume_fisier.txt"
💡 Explicație:
Comanda find pornește de la un director (aici /, adică rădăcina) și caută toate fișierele care se potrivesc
exact cu numele specificat. Dacă vrei să ignori majusculele: -iname.
4. Cum vezi ce procese rulează pe sistem?
✅ Răspuns:
bash
CopyEdit
ps aux | less
💡 Explicație:
ps aux afișează toate procesele (a = toți utilizatorii, u = cu informații despre utilizator, x = inclusiv cele fără
terminal asociat). Este extrem de util în QA pentru a verifica dacă scripturile de test, serverele, aplicațiile sunt
active.
5. Cum identifici procesul care folosește un anumit port?
✅ Răspuns:
bash
CopyEdit
sudo lsof -i :8080
💡 Explicație:
lsof = list open files. În Linux, totul este tratat ca fișier, inclusiv conexiunile de rețea. Comanda arată ce
proces ascultă pe portul 8080, util pentru debugging servere.
6. Cum monitorizezi în timp real utilizarea procesorului și memoriei?
✅ Răspuns:
bash
CopyEdit
top
💡 Explicație:
top oferă un view live al resurselor utilizate. Poți vedea care procese consumă cel mai mult CPU/RAM. Ideal
pentru când testele par lente sau un server QA este suprasolicitat.
7. Cum urmărești un fișier log în timp real?
✅ Răspuns:
bash
CopyEdit
tail -f /var/log/syslog
💡 Explicație:
tail -f deschide un fișier și continuă să afișeze liniile noi pe măsură ce sunt scrise. Este indispensabil pentru
debugging aplicații sau pentru testare automatizată (verificarea logurilor după rularea unui test).
8. Cum configurezi o sarcină automată în cron?
✅ Răspuns:
bash
CopyEdit
crontab -e
💡 Explicație:
Deschide editorul crontab pentru utilizatorul curent. Aici poți adăuga comenzi care să ruleze periodic, cum ar
fi backupuri automate, curățarea logurilor, rularea de scripturi QA.
9. Cum schimbi permisiunile unui fișier?
✅ Răspuns:
bash
CopyEdit
chmod 644 [Link]
💡 Explicație:
chmod (change mode) schimbă permisiunile. Exemplu: 644 = proprietarul poate citi și scrie, ceilalți doar pot
citi. În QA, poate fi important când scripturile nu au acces la loguri sau configuri.
10. Cum schimbi proprietarul unui fișier?
✅ Răspuns:
bash
CopyEdit
chown user:grup [Link]
💡 Explicație:
chown (change ownership) schimbă utilizatorul și grupul care dețin fișierul. Este util mai ales în CI/CD când
fișierele sunt generate cu alt user.
11. Cum instalezi un pachet folosind apt?
✅ Răspuns:
bash
CopyEdit
sudo apt update && sudo apt install nume_pachet
💡 Explicație:
apt update actualizează lista de pachete. apt install instalează pachetul dorit (ex: curl, python3, nginx). Pe
Ubuntu/Debian, aceste comenzi sunt de bază.
12. Cum creezi un alias personalizat?
✅ Răspuns:
bash
CopyEdit
alias gs='git status'
💡 Explicație:
Aliasurile scurtează comenzi repetitive. Le poți adăuga în .bashrc sau .zshrc pentru a fi persistente.
13. Cum arhivezi un folder?
✅ Răspuns:
bash
CopyEdit
tar -czvf [Link] /folder
💡 Explicație:
tar creează arhive. -c = create, -z = compresie cu gzip, -v = verbose (afișează progres), -f = numele fișierului
rezultat.
14. Cum dezarhivezi un fișier .[Link]?
✅ Răspuns:
bash
CopyEdit
tar -xzvf [Link]
💡 Explicație:
Aceeași comandă ca mai sus, doar că -x = extract.
15. Cum vezi adresa IP a sistemului?
✅ Răspuns:
bash
CopyEdit
ip a
💡 Explicație:
Comanda ip este alternativa modernă pentru ifconfig. ip a (short for ip addr) arată interfețele de rețea și IP-
urile aferente.
16. Cum vezi uptime-ul sistemului?
✅ Răspuns:
bash
CopyEdit
uptime
💡 Explicație:
Arată de cât timp este pornit sistemul, cât de încărcat este (load average) și câți utilizatori sunt logați.
17. Cum execuți un script shell?
✅ Răspuns:
bash
CopyEdit
bash [Link]
💡 Explicație:
Poți rula și cu ./[Link], dar atunci fișierul trebuie să aibă permisiuni de execuție (chmod +x).
18. Cum vezi diferența dintre două fișiere text?
✅ Răspuns:
bash
CopyEdit
diff [Link] [Link]
💡 Explicație:
diff compară fișiere și afișează diferențele. Este folosit adesea pentru loguri, outputuri de test etc.
19. Cum folosești grep pentru a căuta un text în fișiere?
✅ Răspuns:
bash
CopyEdit
grep -r "eroare" /var/log
💡 Explicație:
grep este comandă esențială în QA pentru a căuta mesaje de eroare în loguri. -r = recursiv.
20. Cum vezi informații despre sistemul de operare?
✅ Răspuns:
bash
CopyEdit
cat /etc/os-release
💡 Explicație:
Fișierul /etc/os-release conține numele și versiunea distribuției (Ubuntu, Debian, CentOS etc).
2 📞 2. VoIP – 20 întrebări și răspunsuri
detaliate
1. Ce este VoIP?
✅ Răspuns:
VoIP (Voice over Internet Protocol) este o tehnologie care permite transmiterea apelurilor vocale
prin internet sau alte rețele IP, în locul liniilor telefonice tradiționale. VoIP transformă vocea în
pachete de date digitale care sunt transmise prin rețea.
💡 Explicație:
Avantajele principale sunt costul redus, scalabilitatea și posibilitatea integrării cu alte servicii
digitale. În QA, înțelegerea VoIP e importantă pentru testarea calității apelurilor, latenței și
interoperabilității între echipamente.
2. Ce este SIP și ce rol are în VoIP?
✅ Răspuns:
SIP (Session Initiation Protocol) este un protocol de semnalizare folosit pentru a iniția, menține și
termina apelurile VoIP.
💡 Explicație:
SIP gestionează stabilirea conexiunii, negocierea codec-urilor și terminarea apelului, dar nu
transmite vocea propriu-zisă. În testarea VoIP, monitorizarea mesajelor SIP este crucială pentru
depanare.
3. Ce este RTP?
✅ Răspuns:
RTP (Real-Time Transport Protocol) este protocolul folosit pentru transmiterea datelor media (voce,
video) în timp real peste IP.
💡 Explicație:
RTP transportă efectiv pachetele audio și video în apelurile VoIP. În testarea calității apelului,
măsurarea pierderilor și latenței RTP este esențială.
4. Ce înseamnă jitter și cum afectează calitatea apelului?
✅ Răspuns:
Jitter este variația întârzierii pachetelor audio în rețea.
💡 Explicație:
Un jitter mare cauzează apeluri cu sunet neclar sau întreruperi, deoarece pachetele ajung la intervale
neregulate. În testarea VoIP, se folosesc jitter buffer pentru a minimiza impactul.
5. Ce este un codec în VoIP?
✅ Răspuns:
Codec-urile sunt algoritmi care comprimă și decomprimă semnalul audio pentru a reduce lățimea de
bandă necesară.
💡 Explicație:
Exemple: G.711 (fără compresie, calitate înaltă), G.729 (compresie mare, calitate mai scăzută).
Alegerea codec-ului afectează calitatea și consumul de bandă, important în testare.
6. Ce este un proxy SIP?
✅ Răspuns:
Un proxy SIP este un server care primește cererile SIP și le retransmite către destinație.
💡 Explicație:
El facilitează comunicarea între endpoint-uri și poate aplica reguli de securitate, autentificare,
routing. În testare, verifici dacă proxy-ul gestionează corect apelurile.
7. Cum testezi calitatea audio în VoIP?
✅ Răspuns:
Folosind metrici ca MOS (Mean Opinion Score), R-factor, pierderi de pachete, jitter și latență.
💡 Explicație:
MOS e o evaluare subiectivă a calității. R-factor e calculat pe baza măsurilor tehnice. Testele
automate pot simula apeluri și monitoriza aceste valori.
8. Ce este un softphone?
✅ Răspuns:
Un softphone este o aplicație software care permite efectuarea de apeluri VoIP de pe un computer
sau telefon mobil.
💡 Explicație:
În testare, softphone-urile sunt folosite pentru a simula apeluri, verifica funcționalități și integrarea
cu serverele VoIP.
9. Cum funcționează NAT traversal în VoIP?
✅ Răspuns:
NAT traversal este procesul de gestionare a pachetelor VoIP când clientul este în spatele unui NAT
(Network Address Translation).
💡 Explicație:
NAT ascunde IP-ul real al dispozitivului, ceea ce poate bloca pachetele RTP. Protocoale ca STUN,
TURN și ICE ajută la depășirea acestei probleme.
10. Ce este un PBX?
✅ Răspuns:
PBX (Private Branch Exchange) este un sistem telefonic intern care gestionează apelurile într-o
organizație.
💡 Explicație:
În VoIP, există PBX-uri software (ex: Asterisk) care permit rutarea apelurilor interne și externe.
Testarea implică verificarea configurării și fluxurilor de apel.
11. Cum depanezi un apel VoIP care nu sună?
✅ Răspuns:
Verifici mai întâi mesajele SIP (INVITE, 200 OK), conectivitatea de rețea, configurarea firewall,
codec-urile și traseul RTP.
💡 Explicație:
Un apel poate eșua din diverse cauze: pachete SIP blocate, incompatibilitate codec, probleme NAT
sau PBX. În testare, analiza pachetelor cu Wireshark este esențială.
12. Ce este SRTP?
✅ Răspuns:
SRTP (Secure RTP) oferă criptarea fluxului audio pentru securizarea apelurilor VoIP.
💡 Explicație:
În testarea securității VoIP, verificarea funcționării SRTP este vitală pentru protecția împotriva
interceptării apelurilor.
13. Cum funcționează înregistrarea apelurilor în VoIP?
✅ Răspuns:
Apelurile sunt capturate și stocate în formate audio (ex: WAV). Poate fi făcută la nivel de server
PBX sau client.
💡 Explicație:
Pentru testare, înregistrările ajută la verificarea calității sau la audit.
14. Ce este un trunk SIP?
✅ Răspuns:
Un trunk SIP este o legătură digitală între PBX și un furnizor de servicii VoIP.
💡 Explicație:
Este echivalentul unei linii telefonice tradiționale. Testarea trunk-urilor implică verificarea
apelurilor inbound/outbound și calitatea acestora.
15. Ce tipuri de testare se aplică în VoIP?
✅ Răspuns:
Testare funcțională, testare de performanță, testare de securitate, testare de interoperabilitate și
testare a calității serviciului (QoS).
💡 Explicație:
Toate aceste teste sunt importante pentru a garanta că sistemul VoIP funcționează corect și fiabil.
16. Cum monitorizezi traficul VoIP?
✅ Răspuns:
Cu ajutorul Wireshark, SIPp sau alte tool-uri specifice pentru capturarea și analiza pachetelor
SIP/RTP.
💡 Explicație:
Wireshark permite vizualizarea detaliată a protocoalelor și depistarea problemelor în rețea.
17. Ce sunt protocoalele H.323 și MGCP?
✅ Răspuns:
H.323 și MGCP sunt protocoale alternative de semnalizare VoIP.
💡 Explicație:
Ele sunt mai vechi comparativ cu SIP, dar încă utilizate în anumite rețele. În testare trebuie să le
cunoști pentru interoperabilitate.
18. Ce înseamnă QoS în VoIP?
✅ Răspuns:
Quality of Service este un set de tehnici care prioritizează traficul VoIP pentru a asigura calitatea
apelului.
💡 Explicație:
QoS reduce întârzierea și pierderile de pachete, prioritizând vocea față de alte date.
19. Cum verifici dacă un server VoIP este disponibil?
✅ Răspuns:
Poți face un ping la IP-ul serverului, sau trimite un mesaj SIP OPTIONS pentru a verifica starea.
💡 Explicație:
Mesajul SIP OPTIONS nu inițiază un apel, ci verifică dacă serverul răspunde și este funcțional.
20. Ce sunt endpoint-urile în VoIP?
✅ Răspuns:
Sunt dispozitivele finale ce pot fi telefoane IP, softphone-uri sau gateway-uri.
💡 Explicație:
În testare, trebuie să verifici compatibilitatea endpoint-urilor cu sistemul VoIP.
3 🐍 3. Python – 20 întrebări și răspunsuri
detaliate
1. Ce este Python și de ce este folosit în QA Automation?
✅ Răspuns:
Python este un limbaj de programare interpretat, de nivel înalt, cunoscut pentru sintaxa sa clară și
suportul larg pentru biblioteci.
💡 Explicație:
Este preferat în QA Automation pentru rapiditatea dezvoltării scripturilor, integrarea ușoară cu tool-
uri de testare (ex: Selenium, Pytest) și suportul puternic pentru manipularea datelor.
2. Cum definești o funcție în Python?
✅ Răspuns:
python
CopyEdit
def nume_functie(param1, param2):
# corpul funcției
return rezultat
💡 Explicație:
Funcțiile sunt blocuri de cod reutilizabile. Ele pot primi argumente și pot returna valori. Ajută la
organizarea codului în testele automate.
3. Ce sunt listele în Python?
✅ Răspuns:
Listele sunt colecții ordonate, mutabile, care pot conține elemente de tipuri diferite.
💡 Explicație:
Ex: lista = [1, "text", 3.14]. Listele sunt folosite frecvent pentru stocarea și manipularea
datelor în testare.
4. Cum parcurgi o listă în Python?
✅ Răspuns:
python
CopyEdit
for element in lista:
print(element)
💡 Explicație:
Bucla for iterează prin fiecare element. Este foarte comună în test automation pentru verificări și
operații repetate.
5. Ce este un dicționar în Python?
✅ Răspuns:
Dicționarele sunt colecții neordonate de perechi cheie-valoare.
💡 Explicație:
Ex: dict = {"nume": "Ana", "varsta": 25}. În testare sunt utile pentru maparea datelor și
pentru a reprezenta obiecte JSON.
6. Cum tratezi excepțiile în Python?
✅ Răspuns:
python
CopyEdit
try:
# cod posibil problematic
except ExceptieType:
# tratare eroare
💡 Explicație:
Mecanismul try-except previne oprirea neașteptată a scriptului, permițând gestionarea elegantă a
erorilor (ex: fișier lipsă, eroare de rețea).
7. Ce este o clasă în Python?
✅ Răspuns:
O clasă este un șablon pentru crearea obiectelor ce pot avea atribute și metode.
💡 Explicație:
În testarea automată, OOP ajută la organizarea codului, crearea de pagini de obiecte (POM) sau
componente reutilizabile.
8. Cum imporți un modul în Python?
✅ Răspuns:
python
CopyEdit
import nume_modul
💡 Explicație:
Modulele extind funcționalitatea. Ex: import requests pentru HTTP, import selenium pentru
automatizare browser.
9. Cum faci o aserțiune în Python?
✅ Răspuns:
python
CopyEdit
assert conditie, "Mesaj de eroare"
💡 Explicație:
Aserțiunile verifică dacă o condiție este adevărată, iar dacă nu, opresc execuția cu un mesaj. Folosite
masiv în test automation.
10. Ce este Pytest?
✅ Răspuns:
Un framework popular pentru scrierea și rularea testelor automate în Python.
💡 Explicație:
Pytest suportă testare simplă, fixture-uri, parametrizare, și raportare detaliată — toate importante
pentru o suită de testare robustă.
11. Cum deschizi un fișier în Python?
✅ Răspuns:
python
CopyEdit
with open('[Link]', 'r') as f:
continut = [Link]()
💡 Explicație:
with asigură închiderea automată a fișierului după citire/scriere. Este o practică bună pentru
manipularea fișierelor în teste.
12. Cum instalezi o bibliotecă Python?
✅ Răspuns:
bash
CopyEdit
pip install nume_pachet
💡 Explicație:
pip este managerul de pachete Python. De exemplu, pip install selenium adaugă suport pentru
automatizarea browserului.
13. Cum gestionezi listele în comprehensions?
✅ Răspuns:
python
CopyEdit
lista_patrate = [x**2 for x in range(10)]
💡 Explicație:
List comprehensions sunt o sintaxă concisă pentru crearea listelor. Ajută la scrierea codului curat și
eficient.
14. Ce este o funcție lambda?
✅ Răspuns:
Funcție anonimă, folosită pentru expresii scurte.
Ex:
python
CopyEdit
f = lambda x: x + 1
print(f(3)) # Output: 4
💡 Explicație:
Utilă în testare pentru funcții rapide, cum ar fi sortări sau filtre.
15. Cum gestionezi dependențele în proiectele Python?
✅ Răspuns:
Folosești un fișier [Link] sau un manager ca pipenv ori poetry.
💡 Explicație:
Aceste instrumente păstrează un istoric al pachetelor necesare, ajutând la reproducerea mediului de
test.
16. Ce este un decorator în Python?
✅ Răspuns:
Un decorator este o funcție care modifică comportamentul altei funcții.
💡 Explicație:
În testare, decoratorii pot fi folosiți pentru setup/teardown, logare sau timing.
17. Cum faci parametrizarea testelor în Pytest?
✅ Răspuns:
python
CopyEdit
import pytest
@[Link]("input,expected", [(1,2), (3,4)])
def test_func(input, expected):
assert input + 1 == expected
💡 Explicație:
Parametrizarea permite rularea aceleiași funcții de test cu date multiple, eficientizând testele.
18. Cum rulezi un test Pytest?
✅ Răspuns:
bash
CopyEdit
pytest nume_test.py
💡 Explicație:
Aceasta comandă caută și execută testele, afișând rezultatele în consolă.
19. Ce sunt fixture-urile în Pytest?
✅ Răspuns:
Fixture-urile sunt funcții care pregătesc și curăță mediul de test.
💡 Explicație:
Ex: deschid un browser, inițializez o bază de date, și apoi închid la final.
20. Cum faci importuri relative în Python?
✅ Răspuns:
python
CopyEdit
from .modul import clasa
💡 Explicație:
Importurile relative sunt folosite pentru structuri de proiecte mari, facilitând organizarea pachetelor.
4 4. Baze de date (SQL) – 20 întrebări și
răspunsuri detaliate
1. Ce este SQL?
✅ Răspuns:
SQL (Structured Query Language) este limbajul standard pentru interogarea și manipularea bazelor
de date relaționale.
💡 Explicație:
SQL permite crearea, citirea, actualizarea și ștergerea datelor (CRUD). Este esențial în QA pentru
validarea datelor.
2. Cum faci o interogare simplă SELECT?
✅ Răspuns:
sql
CopyEdit
SELECT * FROM clienti;
💡 Explicație:
Această comandă returnează toate coloanele și rândurile din tabelul clienti.
3. Cum filtrezi rezultatele folosind WHERE?
✅ Răspuns:
sql
CopyEdit
SELECT * FROM clienti WHERE tara = 'Romania';
💡 Explicație:
WHERE filtrează rândurile după o condiție, aici doar clienții din România.
4. Cum sortezi rezultatele?
✅ Răspuns:
sql
CopyEdit
SELECT * FROM clienti ORDER BY nume ASC;
💡 Explicație:
ORDER BY sortează după o coloană. ASC = ascendent, DESC = descendent.
5. Ce este o cheie primară (Primary Key)?
✅ Răspuns:
Este o coloană (sau set de coloane) care identifică unic fiecare rând din tabel.
💡 Explicație:
Cheia primară garantează unicitatea și este importantă pentru integritatea datelor.
6. Ce este o cheie străină (Foreign Key)?
✅ Răspuns:
O coloană care face referire la o cheie primară din alt tabel, menținând legătura între tabele.
💡 Explicație:
Este baza relațiilor în bazele relaționale.
7. Cum faci o inserare de date?
✅ Răspuns:
sql
CopyEdit
INSERT INTO clienti (nume, tara) VALUES ('Popescu', 'Romania');
💡 Explicație:
Aceasta adaugă un nou rând în tabelul clienti.
8. Cum actualizezi datele?
✅ Răspuns:
sql
CopyEdit
UPDATE clienti SET tara = 'Ungaria' WHERE nume = 'Popescu';
💡 Explicație:
Modifică rândurile care respectă condiția.
9. Cum ștergi datele?
✅ Răspuns:
sql
CopyEdit
DELETE FROM clienti WHERE nume = 'Popescu';
💡 Explicație:
Șterge rândurile respective.
10. Cum faci un JOIN între două tabele?
✅ Răspuns:
sql
CopyEdit
SELECT [Link], [Link] FROM clienti
JOIN comenzi ON [Link] = comenzi.client_id;
💡 Explicație:
JOIN combină rândurile din ambele tabele pe baza unei condiții.
11. Ce este un INNER JOIN?
✅ Răspuns:
Un JOIN care returnează doar rândurile ce au potrivire în ambele tabele.
12. Ce este un LEFT JOIN?
✅ Răspuns:
Un JOIN care returnează toate rândurile din tabelul din stânga și cele potrivite din dreapta.
13. Ce este normalizarea?
✅ Răspuns:
Procesul de organizare a datelor pentru a reduce redundanța.
14. Ce este un index?
✅ Răspuns:
O structură care accelerează interogările pe coloane specifice.
15. Cum creezi o tabelă?
✅ Răspuns:
sql
CopyEdit
CREATE TABLE clienti (
id INT PRIMARY KEY,
nume VARCHAR(100),
tara VARCHAR(50)
);
16. Cum adaugi o coloană nouă?
✅ Răspuns:
sql
CopyEdit
ALTER TABLE clienti ADD email VARCHAR(100);
17. Cum faci o interogare cu GROUP BY?
✅ Răspuns:
sql
CopyEdit
SELECT tara, COUNT(*) FROM clienti GROUP BY tara;
18. Ce este o subinterogare?
✅ Răspuns:
O interogare în interiorul altei interogări.
19. Ce este tranzacția?
✅ Răspuns:
Un set de operații care sunt executate complet sau deloc (atomicitate).
20. Cum verifici integritatea datelor?
✅ Răspuns:
Prin chei primare, străine și constrângeri (ex: NOT NULL, UNIQUE).
🧪 5. Testare automată/manuală (ISTQB) – 20 întrebări și răspunsuri detaliate
1. Ce este testarea software?
✅ Răspuns:
Testarea software este procesul de evaluare a unui sistem sau componentă pentru a verifica dacă
îndeplinește cerințele specificate și identificarea eventualelor defecte.
💡 Explicație:
Scopul principal este să asigure calitatea produsului și să prevină apariția problemelor în producție.
2. Care sunt nivelurile de testare?
✅ Răspuns:
Testare unitate
Testare integrată
Testare sistem
Testare acceptanță
💡 Explicație:
Fiecare nivel testează sistemul dintr-un unghi diferit, începând cu componente individuale și terminând cu
întregul sistem și cerințele utilizatorului.
3. Ce este un caz de test?
✅ Răspuns:
Un set de condiții și pași pentru a verifica o funcționalitate sau caracteristică a aplicației.
💡 Explicație:
Cazurile de test documentează ce trebuie testat, ce date sunt folosite și rezultatul așteptat.
4. Ce diferență există între testarea manuală și cea automată?
✅ Răspuns:
Manuală: testele sunt executate de oameni.
Automată: testele sunt executate de scripturi/software.
💡 Explicație:
Automatizarea crește viteza și repetabilitatea testelor, dar testarea manuală e necesară pentru explorare și
teste ad-hoc.
5. Ce este un defect (bug)?
✅ Răspuns:
O discrepanță între comportamentul așteptat și cel real al aplicației.
6. Ce este o suită de teste?
✅ Răspuns:
Un set organizat de cazuri de test care sunt rulate împreună pentru a verifica o componentă sau sistem.
7. Ce este o testare regresivă?
✅ Răspuns:
Testarea repetitivă a funcționalităților existente pentru a verifica că nu au apărut defecte noi după modificări.
8. Ce este testarea de performanță?
✅ Răspuns:
Testarea pentru a evalua comportamentul aplicației sub sarcină (ex: timp de răspuns, stabilitate).
9. Ce este testarea black-box?
✅ Răspuns:
Testarea fără cunoașterea internă a codului, se concentrează pe inputuri și outputuri.
10. Ce este testarea white-box?
✅ Răspuns:
Testarea cu acces la codul sursă, verificând logica internă și acoperirea codului.
11. Ce este acoperirea testelor?
✅ Răspuns:
Procentajul codului sau cerințelor acoperite de testele existente.
12. Ce este un plan de testare?
✅ Răspuns:
Un document care descrie strategia, resursele și calendarul pentru activitățile de testare.
13. Ce înseamnă defect severity și priority?
✅ Răspuns:
Severity indică impactul defectului, priority cât de urgent trebuie rezolvat.
14. Ce este testarea exploratorie?
✅ Răspuns:
Testare neplanificată, creativă, bazată pe experiența testerului.
15. Ce este un test case pozitiv și unul negativ?
✅ Răspuns:
Pozitiv verifică comportamentul corect; negativ verifică comportamentul la inputuri invalide.
16. Ce este un bug lifecycle?
✅ Răspuns:
Stările prin care trece un defect de la raportare până la rezolvare și închidere.
17. Ce este un test automatizat bun?
✅ Răspuns:
Fiabil, repetabil, rapid, ușor de întreținut și oferă feedback clar.
18. Ce înseamnă testarea end-to-end?
✅ Răspuns:
Testarea întregului flux de utilizare, de la început până la final.
19. Ce rol au mediile de testare?
✅ Răspuns:
Mediile asigură un spațiu controlat pentru testare, similar cu producția.
20. Cum se raportează un bug eficient?
✅ Răspuns:
Cu descriere clară, pași de reproducere, rezultat așteptat și cel real, priorități.
🧰 6. Git, GitHub, Jira, Confluence, Bitbucket, SVN – 20 întrebări și răspunsuri detaliate
Git & GitHub
1. Ce este Git?
✅ Răspuns:
Git este un sistem de control al versiunilor distribuit, care permite urmărirea modificărilor din cod și
colaborarea între developeri.
💡 Explicație:
Permite ramificarea (branching), fuziunea (merging) și revenirea la versiuni anterioare. În QA, este important
să știi cum să folosești Git pentru gestionarea codului testelor automate.
2. Ce este un commit?
✅ Răspuns:
Un commit este o salvare a modificărilor făcute în cod, cu un mesaj descriptiv.
3. Ce este un branch?
✅ Răspuns:
O ramură paralelă a codului unde poți dezvolta independent.
4. Ce face comanda git merge?
✅ Răspuns:
Combină modificările dintr-un branch în altul.
5. Ce este un pull request (PR)?
✅ Răspuns:
O cerere de revizuire și integrare a modificărilor dintr-un branch în branch-ul principal.
6. Cum rezolvi conflictele de merge?
✅ Răspuns:
Revizuind manual fișierele marcate cu conflicte, păstrând versiunea corectă.
7. Ce este un fork?
✅ Răspuns:
O copie a unui repository pe care o poți modifica independent.
8. Ce face git pull?
✅ Răspuns:
Aduce modificările de pe repository-ul remote și le integrează în branch-ul local.
9. Cum vezi istoricul commit-urilor?
✅ Răspuns:**
git log afișează lista commit-urilor.
10. Cum faci revert la un commit?
✅ Răspuns:
git revert <commit_id> creează un nou commit care inversează modificările.
Jira & Confluence
11. Ce este Jira?
✅ Răspuns:
Jira este un tool de management al proiectelor și tracking al defectelor.
💡 Explicație:
Este folosit pentru organizarea task-urilor, raportarea bug-urilor, și urmărirea progresului.
12. Ce este un issue în Jira?
✅ Răspuns:
O unitate de muncă, cum ar fi un bug, task sau user story.
13. Ce este un sprint în Jira?
✅ Răspuns:
O perioadă fixă în care se lucrează la un set de task-uri (metodologia Agile).
14. Cum se face raportarea unui bug în Jira?
✅ Răspuns:
Se creează un issue de tip bug, se adaugă descriere, pași de reproducere, severitate și prioritate.
15. Ce este Confluence?
✅ Răspuns:
Un tool de documentare colaborativă integrat cu Jira.
Bitbucket & SVN
16. Ce este Bitbucket?
✅ Răspuns:
Un serviciu online pentru găzduirea repository-urilor Git, similar cu GitHub.
17. Ce este SVN?
✅ Răspuns:
Subversion este un sistem centralizat de control al versiunilor.
18. Care este diferența majoră între Git și SVN?
✅ Răspuns:
Git este distribuit, SVN centralizat. Git permite lucrul offline mai ușor și branching mai flexibil.
19. Cum faci checkout în SVN?
✅ Răspuns:
svn checkout <url_repo> copiază codul pe calculator.
20. Cum faci update la ultima versiune în SVN?
✅ Răspuns:
svn update aduce ultimele modificări din repository.
1. Linux (QA Automation)
2. Cum verifici utilizarea memoriei pe un server Linux?
o Comanda free -m îți arată memoria totală, folosită și liberă în MB. E important să
monitorizezi memoria pentru a detecta scurgeri sau probleme de performanță în aplicațiile
testate.
3. Ce este un proces zombie și cum îl identifici?
o Un proces zombie este un proces terminat, dar al cărui părinte nu a citit încă statusul lui. Îl
poți vedea cu ps aux | grep Z. Dacă sunt prea mulți, poate afecta stabilitatea sistemului.
4. VOIP
1. Ce este SIP și cum funcționează?
o SIP (Session Initiation Protocol) este un protocol pentru inițierea, modificarea și terminarea
sesiunilor multimedia (ex: apeluri VoIP). În testare, trebuie să verifici semnalizarea SIP
pentru a asigura conexiuni stabile.
2. Ce înseamnă jitter și cum afectează calitatea apelului VoIP?
o Jitter este variația întârzierii pachetelor de date, care poate duce la calitate slabă a sunetului.
Testarea QoS (Quality of Service) include măsurarea jitter-ului.
5. Python
1. Cum gestionezi excepțiile în Python?
o Folosești blocurile try-except. Prin captarea excepțiilor previi crash-uri neașteptate ale
testelor automate și poți loga erorile.
2. Ce este un generator în Python?
o Un generator returnează un iterator cu yield, economisind memorie când lucrezi cu seturi
mari de date.
6. Baze de date
1. Ce sunt tranzacțiile ACID?
o Atomicitate, Consistență, Izolare, Durabilitate – proprietăți care garantează integritatea
datelor chiar și în caz de erori.
2. Cum optimizezi o interogare SQL lentă?
o Folosești indexuri, analizezi planul de execuție (EXPLAIN), eviți subinterogările complexe și
selectezi doar coloanele necesare.
7. Testare automată/manuală (ISTQB)
1. Ce este un test stub și un test driver?
o Sunt componente folosite în testarea unităților pentru a înlocui module dependente (stub)
sau a iniția module (driver).
2. Ce rol are revizuirea testelor (test review)?
o Ajută la detectarea din timp a lacunelor sau erorilor în cazurile de test, crescând calitatea
testării.
8. Git, GitHub, Jira, Confluence, Bitbucket, SVN
1. Cum faci un cherry-pick în Git și când îl folosești?
o Comanda git cherry-pick <commit> aplică un commit specific pe alt branch. Util când vrei să
iei doar anumite modificări, fără a face merge complet.
2. Cum configurezi un workflow în Jira?
o Workflow-ul definește stările și tranzițiile unui issue. Personalizarea lui ajută echipele să
urmărească progresul conform proceselor interne.
3. 1. Linux (QA Automation) – întrebări
suplimentare
1. Cum identifici un proces care consumă mult CPU?
✅ Răspuns:
Folosești comanda top sau htop. Acestea afișează procesele active și procentul de CPU folosit. E
important pentru a identifica procesele care pot bloca testele automate sau încetinesc sistemul.
2. Cum verifici dacă un serviciu este activ?
✅ Răspuns:
Comanda: systemctl status <nume_serviciu> arată dacă serviciul este pornit, oprit sau are
erori. În testare, verifici serviciile critice ca parte din setup-ul mediului.
3. Ce este un fișier de configurare .bashrc?
✅ Răspuns:
Este un script care se execută la fiecare inițializare a shell-ului Bash. Poți seta variabile de mediu,
alias-uri utile pentru testare sau comenzi automate.
4. Cum verifici permisiunile unui fișier?
✅ Răspuns:
Comanda ls -l arată drepturile de citire (r), scriere (w), și execuție (x) pentru utilizator, grup și
alții. În QA, permisiunile incorecte pot bloca rularea testelor sau accesul la fișiere.
5. Cum faci un backup al unui fișier?
✅ Răspuns:
Poți copia fișierul cu cp fisier fisier_backup. Backup-urile sunt importante înainte de a face
modificări pe medii de test.
6. Ce este un symlink (link simbolic)?
✅ Răspuns:
Un fișier special care indică către alt fișier sau director. Ajută la gestionarea ușoară a resurselor și
poate simplifica structura mediului de test.
7. Cum urmărești live logurile unui fișier?
✅ Răspuns:
Folosești tail -f /cale/catre/log. E util să vezi în timp real rezultatele execuției sau erorile
apărute în timpul testelor.
8. Ce comenzi folosești pentru a căuta într-un fișier?
✅ Răspuns:
grep 'termen' fisier caută textul specificat. Poți folosi și expresii regulate pentru căutări
avansate.
9. Cum verifici spațiul liber pe disc?
✅ Răspuns:
df -h afișează spațiul disponibil în formate ușor de citit, util pentru evitarea erorilor de stocare în
timpul testării.
10. Cum schimbi permisiunile unui fișier?
✅ Răspuns:
Comanda chmod 755 fisier schimbă permisiunile. În QA, poți avea nevoie să setezi
executabilitatea scripturilor.
4. 2. VOIP – întrebări suplimentare
1. Ce protocoale sunt folosite în VoIP?
✅ Răspuns:
SIP pentru semnalizare, RTP pentru transportul media. În testare, monitorizarea și validarea acestor
protocoale sunt esențiale pentru calitatea apelurilor.
2. Cum se măsoară calitatea apelului VoIP?
✅ Răspuns:
Prin parametri ca jitter, latență, pierderi de pachete, MOS (Mean Opinion Score). Acești indicatori
ajută la identificarea problemelor legate de rețea sau echipament.
3. Ce este NAT traversal și de ce e important în VoIP?
✅ Răspuns:
NAT (Network Address Translation) poate bloca pachetele VoIP. Traversal-ul NAT ajută la
comunicarea între dispozitive din rețele private și publice, esențial pentru apelurile funcționale.
4. Ce este un proxy SIP?
✅ Răspuns:
Un server care intermediază și controlează semnalizarea SIP, adesea pentru securitate și
management al apelurilor.
5. Ce sunt codec-urile în VoIP?
✅ Răspuns:
Algoritmi pentru codificarea/decodificarea sunetului (ex: G.711, G.729). Alegerea codec-ului
influențează calitatea și consumul de bandă.
5. 3. Python – întrebări suplimentare
1. Cum folosești decoratori în Python?
✅ Răspuns:
Decoratori sunt funcții care modifică comportamentul altor funcții. Sunt utili în testare pentru
logging, măsurarea timpului, autentificare.
2. Ce este o list comprehension?
✅ Răspuns:
O metodă concisă de a crea liste folosind o singură linie de cod, ajutând la scrierea codului testelor
mai clar și eficient.
3. Cum folosești un context manager (with)?
✅ Răspuns:
Pentru a gestiona resurse automat, ex: deschiderea și închiderea fișierelor, important pentru evitarea
scurgerilor în testele automate.
4. Ce sunt module și pachete în Python?
✅ Răspuns:
Module = fișiere .py; pachete = directoare cu module și un fișier __init__.py. Organizarea
codului ajută la întreținerea testelor automate.
6. 4. Baze de date – întrebări suplimentare
1. Cum previi injecțiile SQL?
✅ Răspuns:
Prin folosirea de interogări parametrizate și validarea input-urilor. În testare automată, verifici dacă
aplicația e vulnerabilă la astfel de atacuri.
2. Ce este un view?
✅ Răspuns:
O tabelă virtuală generată dintr-o interogare, folosită pentru simplificarea interogărilor complexe.
3. Cum optimizezi performanța unei baze de date?
✅ Răspuns:
Folosind indexuri, optimizând interogările, arhitectura bazei și folosind caching.
7. 5. Testare automată/manuală (ISTQB) –
întrebări suplimentare
1. Cum testezi o aplicație care nu are specificații complete?
✅ Răspuns:
Prin testare exploratorie și colaborare strânsă cu echipa de dezvoltare pentru clarificări.
2. Ce este testarea de securitate?
✅ Răspuns:
Evaluarea aplicației pentru vulnerabilități care pot fi exploatate de atacatori.
8. 6. Git, GitHub, Jira, Confluence,
Bitbucket, SVN – întrebări suplimentare
1. Ce face comanda git stash?
✅ Răspuns:
Salvează temporar modificările necomise pentru a reveni la o stare curată, util când schimbi rapid
branch-ul.
2. Cum faci un rollback în Jira?
✅ Răspuns:
Jira nu are rollback nativ, dar poți închide sau redeschide issue-uri, sau folosi plugin-uri pentru a
urmări istoricul.
1. Linux – scenariu de testare complex
Scenariu: Testarea unui script automat care monitorizează spațiul pe disc și trimite alerte
Obiectiv: Verifică dacă scriptul detectează corect când spațiul pe disc depășește 80% și trimite un
email de alertă.
Pași:
1. Setează spațiul pe disc aproape de limita critică (poți folosi un volum temporar).
2. Rulează scriptul de monitorizare.
3. Verifică dacă alerta este generată și trimisă.
4. Monitorizează logurile pentru eventuale erori.
Verificări:
o Scriptul pornește fără erori.
o Detectează corect pragul.
o Email-ul conține informații corecte.
o Scriptul continuă să ruleze periodic.
2. VOIP – scenariu de testare complex
Scenariu: Testarea unui sistem VoIP pentru calitatea apelului în condiții de rețea cu jitter și pierderi de
pachete
Obiectiv: Evaluează dacă apelul VoIP rămâne clar și fără întreruperi la valori de jitter < 30 ms și
pierderi de pachete < 2%.
Pași:
1. Configurează un emulator de rețea pentru a introduce jitter și pierderi.
2. Inițiază apeluri între două terminale VoIP.
3. Monitorizează calitatea folosind un instrument de măsurare (ex: Wireshark, MOS score).
4. Repetă testul pentru diverse nivele crescătoare ale parametrilor.
Verificări:
o Sunet clar, fără întârziere perceptibilă până la pragurile stabilite.
o Corectitudinea și stabilitatea semnalizării SIP.
o Detectarea automată a calității slabe și eventuala ajustare a codec-ului.
3. Python – scenariu de testare complex
Scenariu: Testarea unui framework de testare automată bazat pe Python care rulează testele în
paralel
Obiectiv: Verifică dacă testele sunt executate corect și paralel, iar rezultatele sunt raportate corect.
Pași:
1. Scrie mai multe teste simple (ex: verificări de funcționalitate) și configurează framework-ul să
le execute paralel (folosind pytest-xdist sau similar).
2. Rulează testele.
3. Verifică logurile și rapoartele pentru fiecare test.
4. Introdu un test intenționat eșuat pentru a vedea cum este raportat.
Verificări:
o Toate testele rulează fără conflict de resurse.
o Eșecurile sunt raportate corect, fără a afecta alte teste.
o Performanța totală este îmbunătățită față de rularea secvențială.
4. Baze de date – scenariu de testare complex
Scenariu: Testarea integrității datelor în tranzacții concurente
Obiectiv: Verifică dacă baza de date menține integritatea datelor în situații cu multiple tranzacții
simultane.
Pași:
1. Creează un test care pornește două tranzacții concurente ce încearcă să modifice aceleași
înregistrări.
2. Configurează nivelul de izolare (ex: Serializable, Repeatable Read).
3. Monitorizează dacă apar deadlock-uri sau pierderi de date.
4. Verifică rezultatele după finalizarea tranzacțiilor.
Verificări:
o Integritatea datelor este păstrată (fără valori inconsistene).
o Tranzacțiile respectă nivelul de izolare setat.
o Deadlock-urile sunt tratate corect (retry sau rollback).
5. Testare automată/manuală (ISTQB) – scenariu complex
Scenariu: Testarea end-to-end a unui proces de plată online
Obiectiv: Verifică întregul flux de plată, de la alegerea produsului până la confirmarea comenzii.
Pași:
1. Selectează produsul, adaugă în coș.
2. Completează datele personale și metoda de plată.
3. Verifică validarea câmpurilor (ex: card valid, date obligatorii).
4. Finalizează plata.
5. Verifică mesajul de confirmare și generarea facturii.
Verificări:
o Validarea corectă a inputurilor.
o Plățile valide sunt acceptate și procesate.
o În cazul erorilor (card invalid, fonduri insuficiente), mesajele sunt clare și corecte.
o Comanda este salvată în baza de date corect.
6. Git, GitHub, Jira, Confluence, Bitbucket, SVN – scenariu complex
Scenariu: Gestionarea unui bug critic într-un workflow Agile folosind Jira și Git
Obiectiv: Demonstrează procesul complet de identificare, fixare și integrare a unui bug critic folosind
instrumentele specifice.
Pași:
1. Raportează bug-ul în Jira cu toate detaliile și prioritatea maximă.
2. Alocă bug-ul unui developer.
3. Developer creează un branch nou în Git pentru fixare.
4. Fix-ul este implementat și testat local.
5. Se face un pull request pentru review.
6. După aprobarea PR, fix-ul este integrat în branch-ul principal.
7. Jira issue este închis cu referința la commit.
Verificări:
o Jira reflectă starea curentă a bug-ului.
o Codul fix este separat și bine documentat.
o Review-ul și testele automate trec cu succes.
o Procesul este transparent și urmărit de toate părțile implicate.