Question

Quelles sont les bonnes pratiques et stratégies sont là pour l'exécution des tests de régression dans des environnements intégrés ou dans d'autres situations où la possibilité d'automatiser les tests est très limité.

Dans mon expérience beaucoup de tests doit être effectuée manuellement à savoir un testeur doit pousser une séquence de boutons et de vérifier que la machine se comporte correctement. En tant que développeur, il est vraiment difficile de vous assurer que vos changements ne cassent pas autre chose.

Sans régression appropriée teste la situation est encore pire pendant les grandes refactoring et autres.

Quelqu'un reconnaît le problème? Avez-vous trouvé une bonne solution ou d'un processus pour faire face à ce genre de problème?

Était-ce utile?

La solution

Personnellement, je suis un grand fan d'avoir mon code embarqué compiler à la fois sur le matériel cible et mon propre ordinateur. Par exemple, lors du ciblage d'un 8086, je comprend à la fois un point d'entrée qui correspond à réinitialiser sur le matériel et 8086 un point d'entrée DOS. Le matériel a été conçu pour tous les IO a été mis en correspondance la mémoire. Je puis conditionnellement compilé dans un simulateur de matériel et conditionnellement changé les emplacements de mémoire matérielle à la mémoire matérielle simulée.

Si je devais travailler sur une plate-forme non-x86, je serais probablement écrire un émulateur à la place.

Une autre approche est de créer un banc d'essai où toutes les entrées et sorties du matériel sont contrôlés par le logiciel. Nous utilisons ce lot dans les essais en usine.

Une fois que nous avons construit un simulateur dans le matériel IO. De cette façon, le reste du système pourrait être testé en envoyant quelques commandes sur CAN pour mettre le matériel en mode simulé. De même, le logiciel bien factorisé pourrait avoir un « mode simulé » où l'IO est simulée en réponse aux commandes du logiciel.

Autres conseils

Pour les tests embarqués, je suggère que vous concevez votre chemin de ce très tôt dans le processus de développement. Sandboxing votre code embarqué pour fonctionner sur une plate-forme PC aide beaucoup, puis faire un mock après :)

Cela permettra d'assurer integrety pour la plupart de celui-ci, mais vous auriez encore besoin de faire système et les tests d'acceptation manuellement plus tard.

  

Quelqu'un reconnaît le problème?

Très certainement.

  

Avez-vous trouvé une bonne solution ou   processus pour faire face à ce genre de   problème?

Une combinaison de techniques:

  • Les tests automatisés;
  • Tests force brute, à savoir ceux qui ne sont pas aussi intelligents que les tests automatisés, mais qui testent de manière répétée une caractéristique sur une longue période (heures ou jours), et peuvent être laissés à fonctionner sans intervention humaine;
  • Les tests manuels (souvent difficiles à éviter);
  • Test sur un émulateur de logiciel sur un PC (ou en dernier recours, un émulateur de matériel).

En ce qui concerne la compilation sur un compilateur PC. Qui serait certainement logique pour les modules de haut niveau, et pour les modules à faible niveau avec un test harnais adapté

En ce qui concerne, par exemple, les parties du code qui doivent traiter des signaux en temps réel à partir de sources multiples, l'émulation est un bon endroit pour commencer, mais je ne pense pas que ce soit suffisant. Il n'y a souvent pas de substitut pour tester le code sur le matériel réel, dans un environnement aussi réaliste que possible.

Contrairement à la plupart des intervenants à ce jour, je travaille avec des environnements intégrés qui ne ressemblent pas à des systèmes de bureau du tout, et ne peut donc pas imiter le système embarqué sur le bureau.

Pour écrire de bons systèmes de test, vous avez besoin de votre système de test pour avoir anticipatrice et des commentaires. JTAG est le moyen d'alimentation vers l'avant le plus courant pour commander le dispositif. Vous pouvez définir l'état complet du dispositif (peut-être même l'ensemble du conseil si vous avez de la chance), puis sélectionnez le code de test à exécuter. À quel point vous obtenez vos commentaires. JTAG peut également servir de dispositif de rétroaction. Cependant, un analyseur logique avec un API logiciel est le meilleur dans cette situation. Vous pouvez rechercher certains niveaux sur les broches, compter les impulsions et même analyser les flux de données à partir de périphériques de streaming.

Fournir harnais test / sandboxes / pour les sous-systèmes individuels mockups, et pour l'ensemble du projet, qui émulent l'environnement cible.

Cela ne supprime pas la nécessité de tests dans l'environnement réel, mais réduit considérablement leur nombre que la simulation va attraper la plupart des problèmes si au moment où ils passent tous et que vous effectuez le test coûteux conduit humain vous êtes raisonnablement confiants que vous passer la première fois.

En dehors des suggestions jusqu'à présent à s'assurer votre application peut construire et au moins en partie sur l'essai est normal PC (qui est également utile pour en utilisant des outils tels que Valgrind) Je pense à votre conception de logiciels.

Un projet que je travaillais sur comportait un élément d'entraînement du matériel, un pour faire face aux tâches de gestion et une autre de la gestion du réseau. La gestion du réseau a été gérée par SNMP il était donc facile d'écrire scripts qui ont fonctionné à distance pour conduire le matériel pour faire quelque chose.

Pour exécuter les tests de matériel bas niveau j'ai écrit un simple lecteur de script qui analysait les scripts de test et des commandes dans l'injection de mon IPC chauffeur. Comme la sortie vidéo a été basée, il était difficile d'automatiser la vérification de la manipulation autre que l'oeil, mais il a certainement sauvé me RSI. Il a également été très utile dans la génération de scripts que le stress testé ou dans des conditions simulées de défaillance connus pour assurer des bugs ne l'ont pas se reproduire.

Si j'où faire encore une fois je ne serais probablement mettre en œuvre une responsabilité partagée bibliothèque utilisée par le logiciel de test et le code réel pour envoyer le noyau messages. Je puis enveloppez la lib en python (ou quelque chose similaire) donc mon test pourrait être un peu plus « scriptable ».

Je suis d'accord avec tout le monde qui dit matériel automatisé est un must - nous utilisons cette approche pour tester les logiciels embarqués avec certains de nos unités. Nous avons construit de grandes stations d'essai de deux rack complet de simulateurs de matériel et nous utilisons NI TestStand avec un mélange de Labview VIs, code C #, DLLs fournisseur, etc pour gérer tout cela. Nous devons tester beaucoup de matériel - c'est la raison pour laquelle nous avons tous ces conneries. Si vous êtes juste tester le logiciel, vous pouvez l'échelle revenir à l'essentiel. Test d'une interface série? Il suffit de construire un dispositif pour simuler le trafic série et exercer tous les messages (et quelques messages non valides) pour assurer que le logiciel répond correctement. DIO test? C'est facile il y a beaucoup de périphériques USB ou les périphériques embarqués pour simuler DIO. Si le timing est important que vous devrez utiliser un autre appareil embarqué pour obtenir les tolérances serrées que vous recherchez, sinon un PC fera très bien.

La partie importante est de savoir toujours ce que vous testez et de ne pas tester autre chose que cela. Si c'est un logiciel, assurez-vous que le test est indépendant du matériel au plus grand degré possible. Si vous testez la génération de formes d'ondes ou quelque chose avec un D / A, séparer les tâches - tester le D / A matériel avec une version spéciale du logiciel sur le dispositif embarqué qui ne fait rien de fantaisie, sauf cracher une séquence de prédisposé niveaux de tension. Ensuite, vous pouvez voir si vos références sont éteintes, si vos filtres sont mis à la mauvaise fréquence, etc. Ensuite, vous devriez être en mesure de tester le logiciel indépendant du matériel - utilisez une carte de développement pour tester le logiciel et de vérifier le comportement au niveau du processeur broches est correcte.

Une solution en cours d'utilisation où je travaille est automatisé nightly build et la procédure de test.

  1. Consultez le code de la tête du tronc du contrôle de source.
  2. Construire projet et charger sur cible.
  3. Exécuter des scripts de test automatisés contrôlés par ordinateur.

Les scripts de test sont faciles à exécuter si vous utilisez une sorte de protocole de communication. C'est bon pour les tests unitaires internes. Ce qui rend la situation plus intéressante (et complète) est de faire un faisceau de câblage qui se branche sur la carte pour simuler IO externe.

est Émulation bon pour le développement et les tests initiaux de base, mais le temps réel de fonctionnement physique est la seule méthode fiable pour la validation du système. fonctionnement physique peut débusquer les problèmes non-code (causé par les méthodes de codage) telles que les creux de tension, le bruit, les dissonances, les problèmes de débounce, les conditions de course, etc.

test du système prolongé est important. La mise en place d'un test automatisé d'abuser d'un système est droit en continu pendant des jours / semaines une bonne façon de forcer des problèmes qui ne peuvent surgir que plusieurs mois plus tard dans le domaine. Dire à un client juste pouvoir du cycle chaque fois que les choses commencent à agir drôle est pas un luxe que toutes les industries peuvent divertir.

Dans mon expérience, les tests de matériel automatisé a été critique. - Investir dans la double compilation dans les deux PC et cible est un « agréable d'avoir » fonctionnalité, mais étant donné le choix, j'investir beaucoup plutôt dans des tests de matériel automatisé. Ce sera une solution plus rentable à la fin puisque les bras de fabrication voudront / besoin de la capacité de toute façon pour l'analyse de l'échec.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top