Ce este testarea firelor în testarea software-ului?
⚡ Rezumat inteligent
Testarea firelor de execuție verifică capacitatea funcțională cheie a unei singure sarcini de business pe măsură ce aceasta trece printr-un sistem integrat și se execută la începutul testării integrării, mai degrabă decât după ce fiecare componentă este finalizată.

Ce este testarea firelor?
Testarea firelor de ață este un tip de testare software care verifică capacitatea funcțională cheie a unei sarcini specifice, numită fir de execuție. De obicei, se efectuează în stadiul incipient al testarea de integrare fază. Testarea bazată pe fire de execuție este una dintre strategiile incrementale adoptate în timpul testării integrării sistemului. Din acest motiv, un test de fire de execuție este mai potrivit descris ca o testul de interacțiune a firelor de execuție.
Un fir de execuție aici nu este doar un fir de execuție al sistemului de operare. În Inginerie software termeni, un fir de acțiune este o tranzacție comercială completă — de exemplu „un client plasează o comandă” — tractrece prin fiecare modul pe care îl atinge. Testarea firelor de execuție întreabă dacă acea singură cale se comportă corect după ce modulele sunt conectate împreună.
Diagrama de mai jos arată cum firele de execuție individuale sunt integrate și exercitate ca un subsistem înainte de asamblarea întregului sistem.
Tipuri de testare a firelor
Testarea bazată pe fire de execuție este clasificată în două categorii, iar distincția decide atât datele de testare, cât și defectele pe care este probabil să le găsiți.
- Testarea cu un singur fir de execuție: Un test cu un singur fir de execuție implică o singură tranzacție a aplicației la un moment dat. Este servită o singură cerere, deci comportamentul răspunsului este previzibil, iar testul este ușor de scriptat și repetat.
- Testare multi-thread: Un test multi-thread implică mai multe tranzacții active concomitent. Fire de execuție separate sunt pregătite pentru același serviciu, astfel încât răspunsul și gestionarea stării partajate să poată fi observate sub sarcină simultană.
O tranzacție care trece fără probleme în testarea cu un singur fir de execuție poate eșua totuși într-o rulare cu mai multe fire de execuție, deoarece a doua rulare adaugă concurență pentru aceleași înregistrări, conexiuni și memorie.
Cum se face testarea firelor
Procesul de tip thread se concentrează pe activitățile de integrare, mai degrabă decât pe întregul ciclu de dezvoltare. În practică, abordarea funcționează după cum urmează.
- Testarea bazată pe fire este o formă generalizată de testare bazată pe sesiune, prin aceea că sesiunile sunt o formă de fir, dar un fir nu este neapărat o sesiune.
- Firul de execuție sau programul (funcționalitate mică) este integrat și testat incremental ca subsistem, apoi executat pentru întregul sistem.
- La cel mai scăzut nivel, oferă integratorilor o mai bună cunoaștere a domeniului de aplicare a ceea ce trebuie testat.
- În loc să testeze direct componentele software, integratorii trebuie să se concentreze pe testarea căilor logice de execuție în contextul întregului sistem.
Deoarece unitatea de lucru este o cale de afaceri mai degrabă decât o componentă, testarea firelor de execuție se situează în mod natural între testarea modulelor și plin testarea sistemului.
Sfaturi pentru testarea cu mai multe fire
Defectele cu fire de execuție multiple depind de sincronizare, așa că o singură rulare curată dovedește foarte puțin. Sfaturile de mai jos cresc șansa de a le scoate la iveală.
- Testați programul multithreaded executându-l în mod repetat cu un amestec diferit de aplicații care rulează.
- Testați programul multithreaded având mai multe instanțe ale programului active în același timp.
- Executați programul multithreaded pe diferite modele hardware cu niveluri de solicitare și sarcini de lucru variate.
- Folosește inspecția codului, deoarece unele erori de sincronizare sunt mai ușor de citit decât de reprodus.
- Colectează doar erorile și eșecurile care au apărut în alte fire de execuție decât cel principal.
Defecte comune descoperite în timpul testării filetului
Erorile de concurență se anunță rareori cu o stivă curată trace. Categoriile de mai jos prezintă majoritatea aspectelor expuse de o rulare multi-thread, iar fiecare are un simptom distinct care merită recunoscut.
- Condiții de cursă: Două fire de execuție citesc și scriu aceeași valoare fără a fi ordonate, deci rezultatul final depinde de firul de execuție care s-a terminat primul. Simptom: totaluri corecte la unele rulări și greșite la altele.
- Impas: Două fire de execuție au fiecare o blocare de care are nevoie celălalt și niciuna nu continuă. Simptom: tranzacția se blochează pe termen nelimitat în loc să eșueze cu o eroare.
- Contestație privind resursele: Firele de execuție stau la coadă pentru aceeași conexiune, identificator de fișier sau înregistrare, iar debitul se reduce cu mult înainte ca limita hardware să fie atinsă.
- Coruperea datelor: Structurile partajate parțial scrise lasă înregistrările într-o stare pe care nicio tranzacție validă nu ar putea-o produce.
- Foame: Un fir de execuție cu prioritate scăzută nu obține niciodată resursa de care are nevoie, așa că o cale de utilizator expiră în timp ce restul sistemului pare sănătos.
Fiecare dintre acestea necesită înregistrarea rulării eșuate în jurnale, deoarece un defect care se reproduce o dată la cincizeci de încercări este altfel imposibil de ridicat prin intermediul procesul de management al defectelor.
Testarea firelor de execuție vs. testarea concurenței vs. testarea integrării
Cei trei termeni se suprapun și sunt frecvent amestecați în planurile de testare. Tabelul îi separă în funcție de intenție.
| Aspect | Testarea firelor de ață | Testarea concurenței | Testarea integrării |
| Unitatea testată | O singură tranzacție comercială în mai multe module | Mai mulți utilizatori sau fire de execuție care acționează simultan | Interfețe între două sau mai multe componente |
| Întrebare principală | Această cale cheie funcționează de la un capăt la altul? | Ce se întrerupe când accesul este simultan? | Modulele comunică corect între ele? |
| Etapa tipică | Testarea timpurie a integrării | Testarea sistemului sau a performanței | După testarea unității |
| Defecte vizate | Căi de execuție întrerupte, predări ratate | Blocaje, condiții de concurență, dispute prin blocaje | Neconcordanțe de interfață, conexiuni de date greșitetracts |
| Relaţie | Varianta multi-thread se suprapune cu testarea concurenței | Mai amplu decât secțiunea multi-thread a testării firelor de execuție | Testarea firelor de execuție este o strategie incrementală în cadrul acesteia |
Pe scurt, testarea concurenței întreabă ce efect are accesul simultan asupra sistemului, în timp ce testarea firelor de execuție întreabă dacă o cale importantă supraviețuiește integrării. Echipele care rulează ambele programează de obicei mai întâi testarea firelor de execuție.
Avantajele testării filetelor
Tehnica își câștigă locul într-un plan de integrare din mai multe motive practice.
- Căile cheie de afaceri sunt validate din timp, astfel încât o predare defectuoasă este identificată înainte de asamblarea întregului sistem.
- Integratorii obțin o imagine clară a domeniului de aplicare, deoarece unitatea de testare este o tranzacție recognoscibilă, mai degrabă decât un element abs.traclimita componentei t.
- Testarea căilor logice de execuție în contextul sistemului expune erori care au izolat testarea componentelor nu pot vedea.
- Rulările multi-thread scot la iveală defecte de concurență - blocaje, condiții de concurență și conflicte de resurse - care altfel ar ajunge în producție.
- Integrarea incrementală menține suprafața de depanare mică, deoarece se adaugă un singur fir de execuție odată.
- Rezultatele sunt introduse direct în testarea regresiei, deoarece un fir de execuție care trece reprezintă un candidat evident pentru suita de regresie.
Dezavantajele testării firelor
- Pentru testarea multithreading, cea mai mare provocare este posibilitatea de a programa un test reproductibil pentru un test unitar.
- Scrierea testelor unitare pentru cod multithreaded este o sarcină dificilă.
- Criteriile de testare pentru testarea multi-thread diferă de testarea cu un singur thread. Pentru testarea multi-thread, factori precum dimensiunea memoriei, capacitatea de stocare și problemele de sincronizare variază atunci când codul este apelat pe hardware diferit.
- Firele de execuție nu pot fi testate înainte ca modulele pe care le traversează să fie disponibile, așadar programarea depinde de ordinea integrării.
- Defecțiunile intermitente sunt ușor de trecut cu vederea drept zgomot ambiental, ceea ce face ca exploatarea disciplinată a forestieră să fie esențială.

