Qu'est-ce que le test de thread dans les tests de logiciels ?
โก Rรฉsumรฉ intelligent
Les tests de threads vรฉrifient la capacitรฉ fonctionnelle clรฉ d'une tรขche mรฉtier unique lors de son parcours au sein d'un systรจme intรฉgrรฉ, et ils sont exรฉcutรฉs au dรฉbut des tests d'intรฉgration plutรดt qu'aprรจs la finalisation de chaque composant.
Quโest-ce que le test de thread ?
Test de thread Il s'agit d'un type de test logiciel qui vรฉrifie les fonctionnalitรฉs clรฉs d'une tรขche spรฉcifique, appelรฉe thread. Il est gรฉnรฉralement effectuรฉ au dรฉbut du dรฉveloppement. test d'intรฉgration phase. Les tests basรฉs sur les threads constituent l'une des stratรฉgies incrรฉmentales adoptรฉes lors des tests d'intรฉgration systรจme. C'est pourquoi un test basรฉ sur les threads est plus justement dรฉcrit comme une test d'interaction des threads.
Ici, un thread n'est pas seulement un thread du systรจme d'exploitation. gรฉnie logiciel En termes de termes, un fil de discussion reprรฉsente une transaction commerciale complรจte, par exemple ยซ un client passe une commande ยป. tracLe test de thread vรฉrifie si ce chemin unique se comporte toujours correctement une fois les modules connectรฉs.
Le schรฉma ci-dessous montre comment les diffรฉrents รฉlรฉments sont intรฉgrรฉs et mis en ลuvre en tant que sous-systรจme avant l'assemblage du systรจme complet.
Types de tests de fils
Les tests basรฉs sur les threads sont classรฉs en deux catรฉgories, et cette distinction dรฉtermine ร la fois les donnรฉes de test et les dรฉfauts que vous รชtes susceptible de trouver.
- Test monothread : Un test monothread n'exรฉcute qu'une seule transaction applicative ร la fois. Une seule requรชte est traitรฉe, ce qui garantit un comportement prรฉvisible et facilite la crรฉation et la rรฉpรฉtition du test.
- Tests multithread : Un test multithread implique plusieurs transactions actives simultanรฉment. Des threads distincts sont prรฉparรฉs pour un mรชme service afin d'observer la rรฉactivitรฉ et la gestion de l'รฉtat partagรฉ sous une charge simultanรฉe.
Une transaction qui rรฉussit sans problรจme lors d'un test monothread peut tout de mรชme รฉchouer lors d'une exรฉcution multithread, car la seconde exรฉcution ajoute une contention pour les mรชmes enregistrements, connexions et mรฉmoire.
Comment faire des tests de thread
Le processus par fil de discussion se concentre sur les activitรฉs d'intรฉgration plutรดt que sur l'ensemble du cycle de dรฉveloppement. En pratique, l'approche fonctionne comme suit.
- Les tests basรฉs sur les threads sont une forme gรฉnรฉralisรฉe de tests basรฉs sur les sessions, dans le sens oรน les sessions sont une forme de thread, mais un thread n'est pas nรฉcessairement une session.
- Le thread ou programme (petite fonctionnalitรฉ) est intรฉgrรฉ et testรฉ de maniรจre incrรฉmentale en tant que sous-systรจme, puis exรฉcutรฉ pour l'ensemble du systรจme.
- Au niveau le plus bas, il permet aux intรฉgrateurs de mieux comprendre l'รฉtendue des tests ร effectuer.
- Au lieu de tester directement les composants logiciels, cela exige des intรฉgrateurs qu'ils se concentrent sur le test des chemins d'exรฉcution logiques dans le contexte de l'ensemble du systรจme.
รtant donnรฉ que l'unitรฉ de travail est un chemin mรฉtier plutรดt qu'un composant, les tests de threads se situent naturellement entre les deux. test de module et plein test du systรจme.
Conseils pour les tests multithread
Les dรฉfauts multithreadรฉs รฉtant liรฉs au timing, un seul test rรฉussi ne suffit pas ร les dรฉtecter. Les conseils ci-dessous augmentent les chances de les dรฉceler.
- Testez votre programme multithread en l'exรฉcutant de maniรจre rรฉpรฉtรฉe avec diffรฉrentes combinaisons d'applications en cours d'exรฉcution.
- Testez votre programme multithread en exรฉcutant plusieurs instances du programme simultanรฉment.
- Exรฉcutez votre programme multithread sur diffรฉrents modรจles de matรฉriel avec des niveaux de stress et des charges de travail variables.
- Utilisez l'inspection du code, car certaines erreurs de synchronisation sont plus faciles ร lire qu'ร reproduire.
- Ne collecter que les erreurs et les รฉchecs survenus dans des threads autres que le thread principal.
Dรฉfauts courants constatรฉs lors des tests de filetage
Les erreurs de concurrence se manifestent rarement par une pile propre. trace. Les catรฉgories ci-dessous reprรฉsentent la plupart des รฉlรฉments exposรฉs par une exรฉcution multithread, et chacune prรฉsente un symptรดme distinct qu'il convient de reconnaรฎtre.
- Conditions de course : Deux threads lisent et รฉcrivent la mรชme valeur sans ordre particulier ; le rรฉsultat final dรฉpend donc du thread qui a terminรฉ en premier. Symptรดme : les totaux sont corrects dans certains cas et incorrects dans dโautres.
- Impasse: Deux threads dรฉtiennent chacun un verrou dont l'autre a besoin, et aucun ne progresse. Symptรดme : la transaction reste bloquรฉe indรฉfiniment au lieu de gรฉnรฉrer une erreur.
- Conflit de ressources : Les threads s'accumulent dans la file d'attente pour une mรชme connexion, un mรชme descripteur de fichier ou un mรชme enregistrement, et le dรฉbit s'effondre bien avant que la limite matรฉrielle ne soit atteinte.
- Corruption de donnรฉes: Les structures partagรฉes partiellement รฉcrites laissent des enregistrements dans un รฉtat qu'aucune transaction valide ne pourrait produire.
- Famine: Un thread de faible prioritรฉ n'obtient jamais la ressource dont il a besoin, ce qui provoque l'expiration d'un chemin utilisateur alors que le reste du systรจme semble fonctionner correctement.
Chacune de ces opรฉrations nรฉcessite que l'exรฉcution dรฉfaillante soit consignรฉe dans les journaux, car un dรฉfaut qui se reproduit une fois sur cinquante est autrement impossible ร signaler. processus de gestion des dรฉfauts.
Tests de threads vs tests de concurrence vs tests d'intรฉgration
Ces trois termes se recoupent et sont souvent confondus dans les plans de test. Le tableau les distingue selon leur finalitรฉ.
| Aspect | Test de thread | Tests de concurrence | Test d'intรฉgration |
| Unitรฉ en cours de test | Une seule transaction commerciale ร travers les modules | Plusieurs utilisateurs ou threads agissant simultanรฉment | Interfaces entre deux ou plusieurs composants |
| Question principale | Ce chemin de clรฉ fonctionne-t-il de bout en bout ? | Qu'est-ce qui dysfonctionne lorsque l'accรจs est simultanรฉ ? | Les modules communiquent-ils correctement entre eux ? |
| Stade typique | tests d'intรฉgration prรฉcoce | Tests de systรจme ou de performance | Aprรจs les tests unitaires |
| Dรฉfauts ciblรฉs | Chemins d'exรฉcution interrompus, transferts de responsabilitรฉ manquants | Interblocages, conditions de concurrence, contention de verrous | Incompatibilitรฉs d'interface, donnรฉes incorrectestracts |
| Lien familial | La variante multithread prรฉsente des chevauchements avec les tests de concurrence | Plus large que la tranche multithread des tests de threads | Les tests de threads constituent une stratรฉgie incrรฉmentale parmi d'autres. |
En bref, tests de concurrence Le test de thread vรฉrifie l'impact des accรจs simultanรฉs sur le systรจme, tandis que le test de thread vรฉrifie si un chemin d'accรจs important survit ร l'intรฉgration. Les รฉquipes qui effectuent les deux tests planifient gรฉnรฉralement le test de thread en premier.
Avantages du test de filetage
Cette technique trouve sa place dans un plan d'intรฉgration pour plusieurs raisons pratiques.
- Les principaux processus mรฉtier sont validรฉs en amont, ce qui permet de dรฉtecter une rupture de transmission avant l'assemblage complet du systรจme.
- Les intรฉgrateurs obtiennent une vision claire du pรฉrimรจtre, car l'unitรฉ de test est une transaction identifiable plutรดt qu'une valeur absolue.tracLimite du composant t.
- Tester les chemins d'exรฉcution logiques dans le contexte du systรจme permet de dรฉceler des dรฉfauts isolรฉs. test de composants Je ne peux pas voir.
- L'exรฉcution multithread met en รฉvidence les dรฉfauts de concurrence โ blocages, conditions de concurrence et conflits de ressources โ qui autrement atteindraient la production.
- L'intรฉgration incrรฉmentale permet de limiter la surface de dรฉbogage, puisqu'un seul thread est ajoutรฉ ร la fois.
- Les rรฉsultats alimentent directement les tests de rรฉgression, car un thread rรฉussi constitue un candidat รฉvident pour la suite de tests de rรฉgression.
Inconvรฉnients des tests de thread
- Pour les tests multithread, le plus grand dรฉfi consiste ร pouvoir programmer un test reproductible pour un test unitaire.
- รcrire des tests unitaires pour du code multithreadรฉ est une tรขche complexe.
- Les critรจres de test multithread diffรจrent de ceux des tests monothread. En multithreading, des facteurs tels que la taille de la mรฉmoire, la capacitรฉ de stockage et les problรจmes de synchronisation varient selon le matรฉriel exรฉcutรฉ.
- Les threads ne peuvent pas รชtre testรฉs avant que les modules qu'ils traversent ne soient disponibles ; la planification dรฉpend donc de l'ordre d'intรฉgration.
- Les pannes intermittentes sont faciles ร attribuer ร des bruits environnementaux, ce qui rend l'enregistrement rigoureux des donnรฉes essentiel.

