Les performances de votre système de test peuvent avoir une incidence importante sur la productivité et les coûts de votre chaîne de fabrication. Les systèmes de test lents peuvent nécessiter une duplication coûteuse ou réduire la couverture des tests, ce qui peut avoir des répercussions sur la qualité. L’optimisation des performances de votre logiciel de test peut améliorer les temps de test et assurer des tests approfondis en utilisant moins de stations de test.
Cet article décrit certaines pratiques exemplaires pour optimiser les performances des stations de test développées avec le logiciel TestStand de NI. Il est important de se rappeler qu’aucune solution ne s’applique à tous les systèmes de test. Certaines approches réduiront les performances de certains systèmes de test tout en les augmentant dans d’autres. Prenez le temps de comparer les résultats de vos tests avant et après l’implémentation de tout changement dans votre système afin de pouvoir évaluer les avantages et les inconvénients potentiels.
TestStand a plusieurs options de configuration qui peuvent avoir une incidence sur les performances. Les sections suivantes décrivent ces options.
Le traçage de séquence fournit un retour immédiat et l’état de l’opération en cours, comme Réussi (Pass), Échec (Fail), Erreur (Error) ou Omis (Skipped). Cependant, le traçage de séquence a des conséquences sur les performances en diminuant la vitesse d’exécution. Les approches suivantes peuvent vous aider à améliorer la vitesse d’exécution sans sacrifier les avantages du traçage de séquence.
Pour améliorer les performances lorsque le traçage de séquence est activé, définissez la vitesse de traçage sur rapide pour vous assurer qu’aucun délai supplémentaire n’est ajouté entre les pas. Utilisez l’onglet Exécution (Execution) de la boîte de dialogue Options de la station (Station Options) pour configurer le traçage, accessible via Configurer » Options de la station (Configure » Station Options).
Même lorsqu’il est défini sur la vitesse la plus rapide, le traçage ajoute quelques millisecondes de temps système par pas pour mettre à jour le volet Affichage de l’exécution (Execution View) après l’exécution de chaque pas. Pour des performances optimales, vous pouvez procéder à la désactivation totale du traçage. Toutefois, si vous désactivez le traçage de séquence, l’affichage d’exécution n’est pas mis à jour pendant l’exécution de la séquence.
Pour équilibrer les performances avec les avantages du traçage en termes de convivialité, utilisez le paramètre Traçage des appels de séquence (Sequence call trace) pour désactiver le traçage dans des sous-séquences particulières. Pour utiliser cette approche, organisez vos tests en groupes logiques et créez des sous-séquences pour chacun. Par exemple, dans une séquence de test pour un dispositif mobile, des tests pour chaque composant, tels que les données cellulaires, l’entrée utilisateur et les systèmes audio, peuvent être implémentés dans des séquences séparées. Pour le pas SequenceCall de chaque composant, désactivez le traçage dans l’appel de séquence.
L’organisation de la séquence de test de cette manière vous permet d’utiliser le traçage de séquence pour la séquence de niveau supérieur sans la surcharge de performance du traçage de chaque sous-pas. Cette approche peut également être facilement adaptée aux tests parallèles, car vous pouvez appeler chaque sous-séquence de manière asynchrone. Reportez-vous à la section Amélioration des performances de test grâce à des tests parallèles pour plus d’informations sur la mise en parallèle de votre séquence de test.
Utilisez les pas d’appel de séquence avec le traçage désactivé pour améliorer les performances et voir l’état d’exécution
TestStand vous permet de configurer le moment où les modules de code sont chargés et déchargés de la mémoire, ce qui peut avoir une incidence importante sur l’utilisation de la mémoire et la vitesse d’exécution d’une séquence de test. La configuration des modules pour qu’ils restent en mémoire plus longtemps améliorera le temps d’exécution, car les modules n’auront pas besoin d’être rechargés pendant les exécutions de sous-séquences. Cependant, si trop de modules sont conservés en mémoire, vous pouvez dépasser les limites de mémoire de l’application ou la mémoire physique disponible, ce qui peut également ralentir l’exécution.
Idéalement, vous pouvez apporter des améliorations à votre système de test pour augmenter les limitations de mémoire, plutôt que de décharger les modules de code pour économiser la mémoire. Par exemple :
Si l’utilisation de la mémoire pose toujours un problème, vous pouvez définir les options de chargement/déchargement au niveau du pas ou au niveau du fichier de séquence. Dans la plupart des systèmes de test, vous pouvez combiner les options Précharger pendant l’ouverture du fichier de séquence (Preload when opening sequence file) ou Précharger au début de l’exécution (Preload when execution begins) avec l’option Décharger lorsque le fichier de séquence est fermé (Unload when sequence file is closed) pour des performances optimales.
Objectif | Paramètres optimaux |
Optimiser les temps d’exécution | Utilisez Précharger (Preload) pendant l’ouverture du fichier de séquence et Décharger (Unload) lorsque le fichier de séquence est fermé pour conserver les modules en mémoire jusqu’à ce que la séquence soit fermée. La conservation des modules chargés en mémoire augmente la vitesse des appels ultérieurs. |
Réduire l’utilisation de la mémoire | Utilisez Charger dynamiquement (Load Dynamically) et Décharger après l’exécution du pas (Unload after Step Executes) pour supprimer les modules de la mémoire dès qu’ils ne sont plus utilisés. Cependant, les performances diminuent, car le module doit être rechargé chaque fois qu’un pas s’exécute. Ce paramètre présente des risques supplémentaires, tels que la possibilité de perdre des données globales dans un module de code lorsque ce module de code se décharge. |
Le format de fichier peut influencer la vitesse et les performances pendant le chargement de fichiers de séquence volumineux. TestStand vous permet d’enregistrer des séquences dans les formats de fichiers suivants : INI, XML et binaire.
Pour spécifier le format à utiliser pour les nouveaux fichiers de séquence :
Pour modifier le format d’un fichier de séquence existant :
Utilisez le format de fichier binaire pour les temps de chargement des fichiers de séquence les plus rapides
La configuration du répertoire de recherche a une incidence directe sur le temps requis pour charger les fichiers de séquence et les modules de code dotés de chemins relatifs. La configuration du répertoire de recherche a une incidence sur les performances du chargement initial et sur l’exécution des tests, ainsi que sur les itérations suivantes si les modules sont chargés dynamiquement. Utilisez la boîte de dialogue de configuration du répertoire de recherche pour afficher et modifier les répertoires de recherche. Sélectionnez Configurer » Rechercher les répertoires (Configure » Search Directories) pour ouvrir la boîte de dialogue Éditer les répertoires de recherche (Edit Search Directories).
Pendant la résolution d’un chemin relatif de module de code, TestStand utilise la procédure suivante :
TestStand vérifie la liste des répertoires de recherche pour résoudre un chemin relatif vers un fichier de module de code
Étant donné qu’un seul chemin est calculé pour chaque répertoire de recherche, ce processus n’a généralement pas d’incidence importante sur les performances.
Toutefois, si un répertoire de recherche a l’option Rechercher les sous-répertoires (Search Subdirectories), le processus se répète pour chaque sous-répertoire dans le chemin spécifié. Si le chemin contient une grande hiérarchie de répertoires, cette option peut grandement nuire aux performances. En outre, si plusieurs fichiers portant le même nom existent dans la hiérarchie, le fichier incorrect peut être chargé. Pour ces raisons, évitez d’utiliser cette option pour les répertoires de recherche que vous ajoutez. À la place, assurez-vous que tous les chemins du module de code sont spécifiés à l’aide d’un chemin relatif vers le répertoire de recherche de base.
Pour optimiser davantage l’ordre des répertoires de recherche, suivez les instructions suivantes :
Pendant la conception de la structure de répertoires de votre système de test, pensez à enregistrer les modules de code dans un répertoire sous le chemin du fichier de séquence ou à un emplacement de module de code précis.
TestStand peut appeler des modules de code dans divers environnements de développement pour effectuer des pas de test. La configuration de ces modules de code et des environnements de développement peut avoir une incidence importante sur les performances. Dans n’importe quel environnement de module de code, vous pouvez obtenir de meilleures performances en transmettant uniquement les données nécessaires dans et hors d’un module de code. Évitez de transmettre de grandes quantités de données qui ne seront pas accessibles ou modifiées par le module de code.
Les modules de code compilés, tels que les assemblys .NET ou les DLL C/C ++, peuvent réduire les performances lorsque vous utilisez une version de débogage de la DLL plutôt qu’une version commerciale. En règle générale, les développeurs utilisent des DLL de débogage dans le développement pour faciliter la recherche et la correction des problèmes dans les modules. Une fois que la séquence de test est prête pour le déploiement, passez à la version des DLL pour améliorer les performances.
Les VIs LabVIEW étant exécutés directement, ils peuvent être exécutés soit dans l’environnement de développement LabVIEW, soit dans le moteur d’exécution LabVIEW. Lorsque vous exécutez des VIs LabVIEW dans l’environnement de développement, vous pouvez utiliser les fonctionnalités de débogage pour résoudre les problèmes de module de code, mais la vitesse d’exécution est plus lente. Pour les tests en production, utilisez le moteur d’exécution LabVIEW pour appeler des VIs. Vous pouvez configurer le serveur LabVIEW utilisé pour exécuter le code LabVIEW à l’aide de la boîte de dialogue de l’adaptateur LabVIEW :
Pour optimiser davantage les temps de chargement du code LabVIEW, vous pouvez créer vos VIs de module de code dans des bibliothèques de projets empaquetées (PPL). Comme les PPL contiennent des versions compilées de toutes les dépendances de VI du module de code VIs, LabVIEW peut charger les dépendances en mémoire plus rapidement. Sinon, si vous déployez votre code à l’aide de l’utilitaire de déploiement TestStand, il peut générer des PPL pour votre VIs dans le cadre du processus de déploiement.
Pour plus d’informations sur l’utilisation des PPL avec l’utilitaire de déploiement TestStand, reportez-vous à la rubrique d’aide Organisation des fichiers de programme de test avec les bibliothèques de projets empaquetées LabVIEW.
Vous pouvez souvent améliorer la vitesse des tests en utilisant des tests parallèles pour effectuer plusieurs tests simultanément. TestStand fournit des fonctionnalités pour vous aider à paralléliser le test d’un seul UUT, ou pour tester plusieurs UUT simultanément.
Pendant le test d’un seul UUT, vous pourrez peut-être tester plusieurs parties du système en même temps. Par exemple, considérons la séquence de test pour un appareil mobile. Les tests pour chaque composant, tels que les données cellulaires, l’entrée utilisateur et les systèmes audio, peuvent être implémenté dans des séquences séparées. Plutôt que d’appeler chaque séquence de manière séquentielle, vous pouvez configurer le pas d’appel de séquence pour les appeler de manière asynchrone afin d’accélérer le test.
Pour spécifier qu’un appel de séquence doit être exécuté de manière asynchrone :
L’appel d’une séquence dans un nouveau thread vous permet de tester simultanément différentes parties d’un UUT
Pendant la configuration des appels de séquence asynchrones, tenez compte des différences entre l’utilisation d’un nouveau thread et une nouvelle exécution :
Un nouveau thread | Une nouvelle exécution |
Partage la même collecte de résultats et le même rapport que l’appelant | Possède sa propre collecte et rapport de résultats |
Est exécuté directement | Peut être exécuté à l’aide d’un point d’entrée de modèle de processus |
Partage les valeurs globales du fichier de séquence avec l’appelant | A une nouvelle copie des valeurs globales du fichier de séquence |
Est résilié ou suspendu avec l’appelant | Est indépendamment résilié ou suspendu |
En règle générale, vous devez utiliser la nouvelle option de thread pour les tests associés dans une séquence de test. L’utilisation d’une nouvelle exécution est plus appropriée pour des fonctionnalités plus indépendantes, telles qu’un moniteur d’état qui doit s’exécuter indépendamment de la séquence de test.
Pour plus d’informations sur le choix d’utiliser un nouveau thread ou une nouvelle exécution, reportez-vous à Quand exécuter une séquence dans une nouvelle exécution ou dans un nouveau thread.
Pour obtenir les résultats de vos sous-séquences asynchrones pour la création de rapports ou l’enregistrement de bases de données, utilisez les pas Attendre (Wait) à la fin de la séquence de lancement pour attendre la fin des appels de séquence asynchrone. Une fois le thread de sous-séquence terminé, TestStand attache les résultats de la sous-séquence asynchrone aux résultats du pas Attendre (Wait), les rendant disponibles pour la génération de rapports et l’enregistrement de bases de données. Pour attendre l’exécution d’une séquence ou d’un thread, sélectionnez Exécution (Execution) ou Thread dans Attendre (Wait) pour le contrôle et spécifiez l’exécution ou le thread à attendre. Gardez à l’esprit que l’ajout de cette attente peut entraîner un retard d’exécution si la séquence d’appel se termine avant le thread, n’utilisez donc cette approche que lorsque vous avez besoin des résultats du nouveau thread
Utilisez un pas d’attente pour obtenir les résultats d’un appel de séquence asynchrone
En plus d’utiliser des appels asynchrones dans votre séquence de test, TestStand vous permet de tester plusieurs UUT en parallèle à l’aide des modèles de processus parallèle et par lots. Ces modèles de processus créent plusieurs exécutions qui exécutent chacune la séquence de test sur un UUT distinct. Vous pouvez modifier le modèle de processus pour la station actuelle ou pour un fichier de séquence de test individuel.
Testez plusieurs UUT simultanément à l’aide des modèles de processus parallèle et par lots
Pour une démonstration de la façon dont les tests parallèles peuvent améliorer les temps de test, reportez-vous à la démonstration des stratégies de test parallèle incluse avec TestStand.
Alors que le modèle de processus parallèle vous permet de démarrer et de terminer les tests des UUT à des moments différents, le modèle de processus Lot (Batch) est conçu pour démarrer et terminer la séquence de test sur tous les UUT en même temps.
En plus de démarrer et de terminer chaque test par lots en même temps, le modèle de processus par lots vous permet d’utiliser des étapes et des paramètres de synchronisation par lots pour synchroniser davantage les tests entre les UUT du lot. Si certaines parties du test doivent être exécutées en même temps pour tous les UUT, vous pouvez définir des sections synchronisées pour un seul pas à l’aide des paramètres de pas ou pour plusieurs pas à l’aide du type de pas de test de synchronisation par lots.
Utilisez la synchronisation par lots pour vous assurer que certaines parties du test sont synchronisées pour tous les UUT du lot
Pour tous les types de sections de synchronisation par lots, toutes les interfaces de connexion entrent et sortent ensemble de la section. Vous pouvez en outre configurer la synchronisation pour qu’elle s’exécute séquentiellement ou uniquement dans un seul thread.
Pour plus d’informations sur la synchronisation par lots, reportez-vous à l’exemple Types de pas de test de synchronisation : Synchronisation par lots.
Pendant le test de plusieurs UUT en parallèle, le matériel de test disponible peut devenir un problème pour les performances. Lorsque vous utilisez une ressource matérielle partagée, vous devez vous assurer qu’un seul thread accède à une ressource matérielle partagée à tout moment pour éviter les conflits de ressources. En règle générale, vous utilisez les paramètres de verrouillage ou les types de pas de test pour réserver une ressource partagée. Cependant, si plusieurs threads attendent sur une seule ressource pour terminer un test, la plupart des améliorations potentielles du test parallèle ne seront pas réalisées. Pour atténuer ce phénomène, vous pouvez utiliser les approches suivantes :
Le type de pas de test Planification automatique (Auto Schedule) vous permet de configurer un ensemble de tests qui peuvent être exécutés dans n’importe quel ordre pour optimiser le temps de test et l’utilisation du matériel. Lorsqu’une section programmée automatiquement est exécutée à l’aide du modèle de processus parallèle ou par lots, chaque interface de connexion exécute la première section qui ne nécessite pas de ressource réservée. Pour cette raison, l’ordre d’exécution peut varier entre les différentes exécutions du même test
Utilisez le planificateur automatique pour optimiser l’utilisation du matériel lorsque l’ordre d’exécution n’est pas important
Utilisez cette approche lorsque l’ordre d’exécution des tests n’est pas important. Si votre test nécessite que les résultats du test soient présentés dans un ordre précis, n’utilisez pas la planification automatique.
L’outil Execution Profiler fourni avec TestStand est utile pour indiquer le matériel de test qui limite la vitesse d’exécution du système de test. Lancez Execution Profiler à partir de l’éditeur de séquence en utilisant Outils » Execution Profiler (Tools » Profile Execution).
Profile Execution vous permet de voir combien de temps chaque ressource matérielle est active, vous permettant de prendre des décisions éclairées sur l’incidence de l’ajout de matériel au système de test. Dans l’exemple de profil ci-dessous, le multimètre numérique est pleinement utilisé alors que l’oscilloscope n’est utilisé qu’à 66 %. Selon ce profil, l’ajout d’un deuxième multimètre numérique ou d’un multimètre numérique avec plus de voies améliorerait le temps de test pour cette séquence.
Profile Execution vous permet de visualiser quelles ressources sont des problèmes potentiels dans votre configuration de test
Vous pouvez améliorer les temps de test en vous assurant que vous interagissez avec le matériel de la manière la plus efficace possible. Cette section traite des considérations relatives à la gestion des références matérielles et des techniques de mesure pour améliorer les performances.
Pour toute configuration matérielle donnée, plusieurs facteurs communs peuvent réduire l’efficacité des tests. Par exemple, vous pouvez utiliser un oscilloscope pour mesurer le temps de montée, le temps de descente, la valeur efficace et les valeurs de crête d’un signal. Si vous programmez l’oscilloscope pour capturer le waveform en entier, transférez le waveform vers le système de test, puis effectuez un post-traitement sur les données pour extraire les mesures souhaitées, vous constaterez une baisse des performances en raison de la grande quantité de données transférées. La latence du bus de communication peut avoir des répercussions sur les performances. C’est pourquoi vous devez déterminer si votre instrument a une latence élevée, comme une connexion LAN ou série, ou un bus à faible latence, comme PCI ou PXI.
Si vous configurez l’oscilloscope pour mesurer le temps de montée, déclenchez une acquisition, relisez le temps de montée de l’instrument et répétez pour chaque mesure. Vous devez alors reconfigurer et redéclencher l’oscilloscope pour chaque mesure. Cette option a également tendance à être lente et inefficace.
Étant donné que de nombreux oscilloscopes modernes ont plusieurs voies de mesure, utilisez les étapes suivantes pour accélérer l’exécution des tests :
L’ouverture et la fermeture fréquentes de sessions sur le matériel peuvent ralentir les performances : durant l’initialisation de la communication avec un périphérique, de nombreux drivers transfèrent de grandes quantités de données pour vérifier les communications et les configurations. Pour cette raison, il est préférable d’initialiser le matériel une seule fois par test, tout en conservant un descripteur de session qui est utilisé tout au long du test pour accéder au matériel.
Pour initialiser le matériel une seule fois dans un test, vous pouvez utiliser le callback du modèle de processus ProcessSetup, qui s’exécute avant tout le code de test. Dans le cas des modèles de processus parallèle et par lots, ProcessSetup ne s’exécute qu’une seule fois, quel que soit le nombre d’interfaces de connexion de test. Pour nettoyer les références, vous pouvez utiliser le callback ProcessCleanup, qui s’exécute une fois que tous les tests sont terminés. Pour plus d’informations sur la création et l’utilisation de callbacks de modèle de processus, reportez-vous à Utilisation des callbacks dans NI TestStand.
Pour accéder aux sessions matérielles ouvertes dans un callback de modèle de processus, vous pouvez utiliser une variable globale de fichier qui est partagée entre la séquence de callback et MainSequence. Vous pouvez également utiliser le gestionnaire de session, qui peut gérer automatiquement la durée de vie des sessions matérielles à l’aide d’un objet ActiveX. Reportez-vous aux exemples de gestionnaire de session pour plus d’informations sur l’utilisation du gestionnaire de session.
Il existe plusieurs façons d’optimiser l’incidence de la collecte des résultats sur les performances du système.
Pour les processeurs de résultats intégrés, vous pouvez sélectionner l’option À la volée (On-The-Fly) pour effectuer l’enregistrement pendant que la séquence s’exécute, plutôt qu’à la fin de la séquence de test. Tenez compte de ces avantages et inconvénients lorsque vous choisissez d’utiliser ou non ce paramètre
Avantages de l’enregistrement à la volée :
Inconvénients de l’enregistrement à la volée :
Si une certaine réduction de la vitesse est acceptable afin de bénéficier des avantages de l’enregistrement à la volée, vous pouvez atténuer l’incidence sur les performances en ajustant les paramètres à la volée. Pour accéder à ces paramètres :
Pour améliorer les performances, augmentez l’intervalle de traitement et/ou le nombre maximum de résultats pour diminuer la fréquence à laquelle TestStand enregistre les résultats.
Pour réduire le temps passé à générer des résultats, vous pouvez enregistrer les données des résultats dans un fichier de résultats hors ligne, qui est un format de résultat brut rapide et compact contenant toutes les informations dont TestStand a besoin pour générer un rapport ou un journal dans une base de données. Étant donné que le fichier ne contient que des données de résultats brutes, son traitement prend moins de temps et peut améliorer le débit des tests.
Vous utilisez l’utilitaire de traitement des résultats hors ligne pour traiter les fichiers de résultats bruts dans un rapport de test ou pour enregistrer les données dans une base de données. Comme il s’agit d’un utilitaire distinct, vous pouvez l’exécuter indépendamment des tests, ce qui vous permet de traiter les résultats ultérieurement ou sur un autre ordinateur. Utilisez cet utilitaire dans les situations où les performances du système de test sont plus importantes que la génération immédiate de rapports. Pour plus d’informations, reportez-vous à l’aide de l’ utilitaire de traitement des résultats hors ligne TestStand.
Les données stockées localement sur un disque dur sont enregistrées plus rapidement que les données stockées sur un emplacement réseau, bien que certains mécanismes de transfert de données réseau soient plus rapides que d’autres. Par exemple, l’utilisation de Microsoft Message Queues (MSMQ) pour communiquer avec une base de données crée des fichiers de données intermédiaires locaux qui sont ensuite transférés sur le réseau. Ce procédé est généralement plus rapide et plus sûr que l’écriture directe dans la base de données distante. Alors que TestStand ne fournit pas de fonctionnalité native pour l’utilisation de MSMQ, des outils tiers pour implémenter ce type de communication sont disponibles.
La quantité de données enregistrées dans le système est un autre facteur à considérer. Les performances diminuent à mesure que la quantité de données enregistrées augmente. Afin de ne consigner que les données utiles, vous pouvez désactiver l’enregistrement des résultats pour certains pas ou certaines séquences.
Vous pouvez exclure les résultats d’enregistrement pour des pas individuels en désélectionnant l’option Enregistrer les résultats (Record Result) dans Pas » Propriétés » Options d’exécution (Step » Properties » Run Options). Vous pouvez également définir une séquence entière pour exclure l’enregistrement des résultats à l’aide du paramètre Désactiver l’enregistrement des résultats pour tous les pas (Disable Result Recording For All Steps) de la boîte de dialogue Propriétés de la séquence (Sequence Properties).
Dans un environnement de production, vous devrez peut-être seulement savoir qu’un UUT a échoué à un test, plutôt que de savoir précisément quel test a échoué. Dans ces cas, vous pouvez mettre fin au test au premier échec pour libérer des ressources système, puis obtenir une analyse plus détaillée des échecs ultérieurement.
Selon votre test, certains échecs peuvent être plus graves que d’autres. Vous souhaiterez peut-être terminer le test uniquement lorsque certains pas échouent. Vous pouvez configurer le comportement d’échec pour des séquences ou des pas individuels
Pour terminer le test en cas d’échec d’un pas précis :
Pour terminer le test en cas d’échec d’une séquence particulière :
Vous pouvez également configurer ce paramètre pour des stations de test particulières, par exemple en se terminant uniquement tôt sur les machines de test en production, tout en effectuant toujours le test dans son intégralité sur les machines de diagnostic en dehors de la ligne de production. Pour configurer des machines de test particulières pour qu’elles se terminent en cas d’échec du test :