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.

  • ๐Ÿงต Idรฉe centrale : Un thread reprรฉsente une transaction commerciale de bout en bout, et le test suit ce chemin ร  travers les modules intรฉgrรฉs.
  • ๏ธ Lorsqu'il s'exรฉcute : Au dรฉbut de la phase de tests d'intรฉgration, dans le cadre d'une stratรฉgie d'intรฉgration systรจme incrรฉmentale.
  • ๐Ÿ”€ Deux saveurs : Les tests monothread exรฉcutent une transaction ร  la fois, les tests multithread en exรฉcutent plusieurs simultanรฉment.
  • ๐Ÿž Ce qu'il attrape : Conditions de concurrence, blocages, conflits de ressources partagรฉes et corruption de donnรฉes que les tests ร  chemin unique ne dรฉtectent pas.
  • ๐Ÿงฐ Comment l'exรฉcuter : Exรฉcutions rรฉpรฉtรฉes avec diffรฉrentes combinaisons d'applications, plusieurs instances, diffรฉrents matรฉriels et inspections de code.
  • (I.e. Limite honnรชte : Les tests unitaires reproductibles pour le code multithread restent difficiles, de sorte que les dรฉfauts de synchronisation peuvent รชtre intermittents.

Qu'est-ce que le test de threads dans les tests logiciels avec des types mono-thread et multi-thread ?

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.

Diagramme de test des threads montrant l'intรฉgration progressive des threads dans un sous-systรจme, puis dans un 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.

FAQ

Le responsable des tests collabore avec les analystes mรฉtier pour classer les transactions selon leur impact sur le chiffre d'affaires et leur frรฉquence d'utilisation. Les chemins les plus importants sont intรฉgrรฉs et traitรฉs en prioritรฉ, ce qui permet de dรฉtecter une dรฉfaillance critique lors d'un transfert de donnรฉes avant la fin du dรฉlai imparti.

Il enregistre le parcours mรฉtier, les modules traversรฉs, les donnรฉes รฉchangรฉes entre eux et l'รฉtat final attendu. Contrairement ร  un composant cas de test, la condition de rรฉussite se situe ร  la fin de la transaction.

Les gรฉnรฉrateurs de charge qui crรฉent des utilisateurs virtuels configurables sont le choix habituel. JMeter est l'option open source courante. Les paramรจtres de nombre de threads, de montรฉe en charge et de boucle correspondent directement aux scรฉnarios multithread.

Les modรจles d'apprentissage automatique regroupent les schรฉmas de journalisation issus de milliers d'exรฉcutions rรฉpรฉtรฉes et repรจrent les entrelacements qui prรฉcรจdent un blocage ou un enregistrement corrompu. Cela permet de restreindre un dรฉfaut de synchronisation intermittent ร  un petit ensemble de sรฉquences suspectes.

Copilote GitHub Il gรฉnรจre rapidement des รฉbauches de pools de threads, de verrous et de boucles de charge. Le testeur doit nรฉanmoins dรฉterminer les points de synchronisation pertinents, car les tests gรฉnรฉrรฉs rรฉussissent souvent sans jamais imposer un vรฉritable entrelacement.

Il n'y a pas de nombre fixe. Les รฉquipes rรฉpรจtent l'exรฉcution sur diffรฉrentes charges de travail et configurations matรฉrielles jusqu'ร  ce que les erreurs cessent, puis conservent le scรฉnario dans la suite de tests nocturnes, car les dรฉfauts de synchronisation rรฉapparaissent lorsque l'environnement change.

Chaque thread prioritaire s'exรฉcute de bout en bout sans dรฉfaut non rรฉsolu, les exรฉcutions multithread se terminent ร  la concurrence cible et aucun problรจme ouvert n'est un blocage ou une erreur de classe de corruption de donnรฉes au sein du systรจme. cycle de vie des tests.

Oui, le thread devient un chemin de requรชtes entre les services plutรดt qu'entre les modules. Distribuรฉ tracing remplace la pile d'appels locale, et la mรชme question se pose : une transaction commerciale survit-elle intacte ร  chaque saut ?

Rรฉsumez cet article avec :