A close-up photograph capturing an engineer's hand wearing a white glove, gently probing a central processor unit (CPU) on an open automotive engine control unit (ECU). The ECU is connected by a cable to a multi-channel signal generator with a display showing waveform, and then to a laptop. The laptop screen displays 'Fault Injection Management' software, showcasing charts like 'Fault Detection Rate' (green bars) and 'Fault Injector Status', indicating an ongoing fault injection reliability test. The background is a well-lit, professional electronics development lab with an oscilloscope and other equipment blurred.

Tests de fiabilité des circuits intégrés et des logiciels : Guide pratique d’injection de défauts

Auteur: Johnny Liu, PDG de Dowway Vehicle

Publié : 21 juillet 2026

Catégorie: Systèmes embarqués, sécurité automobile, ingénierie matérielle, conformité

En tant que PDG de Dowway Vehicle, entreprise spécialisée dans la conception et la fabrication de systèmes critiques pour la sécurité automobile, je sais que la fiabilité n’est pas une simple formalité. Dans notre secteur, une défaillance de puce non détectée ou une brève erreur logicielle peuvent engendrer des problèmes de sécurité majeurs.

L’injection de fautes est la méthode la plus fiable pour tester la capacité d’un système à gérer les erreurs. Ce guide présente les principales méthodes d’injection de fautes et vous aide à concevoir des systèmes qui gèrent les défaillances avec élégance et sont conformes aux normes telles que la norme IEC 61508.

1. Pourquoi devons-nous injecter des défauts ?

Au milieu des années 1970, les premières missions spatiales ont signalé des comportements anormaux des systèmes, causés par des erreurs de puces. Depuis, les concepteurs et les fabricants de puces ont dû accorder une importance capitale à la fiabilité. Aujourd’hui, il est essentiel d’analyser le comportement des circuits numériques des avions, des voitures et autres systèmes critiques en cas d’erreur. Les tests d’injection de défauts constituent l’une des meilleures méthodes pour évaluer cette fiabilité. De fait, les normes de sécurité fonctionnelle telles que la norme CEI 61508 recommandent fortement l’injection de défauts à chaque étape du cycle de développement.

Lorsqu’un système tombe en panne, la panne est souvent brutale et détruit des données d’état précieuses. Les erreurs peuvent également rester longtemps masquées avant de provoquer un problème visible. Il est donc extrêmement difficile de trouver la cause première d’une panne dans un système en production. Pour les configurations vastes et complexes, reproduire ces conditions de panne rares est quasiment impossible.

L’injection de fautes résout ce problème. Elle permet de tester la performance d’un système :

  • Détecte les défauts.
  • Isole les défauts pour empêcher leur propagation.
  • Se reconfigure automatiquement pour continuer à fonctionner en toute sécurité.
  • Revient à un état normal.

2. À l’intérieur d’un environnement d’injection de fautes

Un système professionnel d’injection de pannes est un écosystème structuré. Il utilise neuf composants essentiels pour exécuter des tests sans perturber le système cible :

  1. Système cible : Le matériel ou le logiciel que vous testez.
  2. Injecteur de défauts : L’outil (matériel ou logiciel) qui introduit l’erreur.
  3. Bibliothèque de défauts : Une base de données distincte contient les paramètres des tests, tels que les types de défauts, leurs emplacements, leur durée et les règles matérielles ou logicielles. L’indépendance de cette bibliothèque confère au système une grande flexibilité et facilite son réutilisation dans d’autres projets.
  4. Générateur de charge de travail : Un outil qui transmet des commandes opérationnelles au système cible. Ces commandes peuvent être des applications réelles, des benchmarks standardisés ou des tâches synthétisées.
  5. Bibliothèque de charges de travail : Un ensemble de charges de travail et de cas de test prédéfinis.
  6. Contrôleur: Le programme qui exécute l’expérience complète. Il peut s’exécuter sur le système cible lui-même ou sur un ordinateur hôte indépendant.
  7. Moniteur: Un outil qui suit l’exécution du système en temps réel afin de repérer l’exécution des commandes et l’apparition d’anomalies.
  8. Collecteur de données : Un outil qui enregistre les données système en temps réel lorsqu’il est déclenché par le moniteur.
  9. Analyseur de données : Un outil hors ligne qui traite et analyse les données collectées afin d’en mesurer la fiabilité.

3. Injection de défauts matériels vs. logiciels

Le choix entre les méthodes matérielles et logicielles dépend des types de pannes que vous souhaitez tester et des efforts nécessaires à leur mise en place.

Type de défaut / ModèleInjection de défauts matérielsInjection de défauts logiciels
Circuit ouvertOuiNon
PontageOuiNon
Inversion de bitOuiOui
Courant parasiteOuiNon
SurtensionOuiNon
Bloqué àOui (Idéal pour le contrôle de la localisation)Difficile / Frais généraux élevés
Corruption des données stockées (mémoire, registres, disque)RarementOui
Corruption des données de communication (bus, réseau)RarementOui
Manifestation d’un défaut logiciel (niveau machine et supérieur)NonOui

Pour tester les défauts de blocage (où une ligne physique reste bloquée à l’état 1 ou 0), un injecteur matériel est la meilleure solution, car il permet de contrôler précisément l’emplacement physique. Simuler des défauts de blocage permanents par logiciel est soit extrêmement lent, soit impossible.

Si votre objectif est de détecter la corruption de données, les outils logiciels suffisent généralement. Certaines erreurs, comme l’inversion d’un bit dans une cellule mémoire, peuvent être reproduites par voie matérielle ou logicielle. Dans ce cas, le choix doit se baser sur le coût, la précision, l’impact de l’outil sur le système et la facilité de reproduction du test.

4. Injection de défauts implémentée matériellement

Les méthodes matérielles utilisent des équipements physiques supplémentaires pour introduire des erreurs directement dans le matériel cible. On distingue deux grandes catégories de méthodes : avec contact et sans contact.

Injection de matériel de contact (au niveau des broches)

Il s’agit de la méthode d’injection matérielle la plus courante. Elle nécessite un contact physique direct avec les broches de la puce cible.

  • Sondes actives : Les sondes se connectent directement aux broches pour y injecter du courant, ce qui modifie leur état. Cette technique est principalement utilisée pour les défauts de type « bloqué », mais il est également possible de relier deux broches. Attention : une surintensité injectée avec des sondes actives peut endommager irrémédiablement la puce cible.
  • Insertion de la douille : Un support personnalisé est inséré entre la puce cible et son circuit imprimé. Ce support impose des niveaux de tension analogiques spécifiques aux broches afin de simuler des erreurs de type « bloqué », « circuit ouvert » ou des erreurs logiques complexes. Il peut inverser les signaux des broches, effectuer des opérations ET ou OU avec les broches voisines, ou même combiner le signal actuel avec les signaux précédents sur cette même broche.

Ces méthodes de contact offrent un contrôle précis du moment et de l’emplacement du défaut. Elles n’interfèrent quasiment pas avec le logiciel exécuté sur la cible. Cependant, comme ces défauts se produisent au niveau des broches, ils diffèrent des véritables défauts internes de type blocage ou court-circuit qui surviennent au cœur du silicium. Ils restent néanmoins excellents pour tester les circuits de détection d’erreurs. Il est également possible de connecter des sondes actives à l’alimentation pour induire des fluctuations de tension, même si cette opération comporte un risque élevé d’endommager le dispositif.

Injection matérielle sans contact

L’injecteur ne touche pas le système. Il utilise plutôt des forces physiques externes pour provoquer des dysfonctionnements à l’intérieur de la puce.

  • Rayonnement par ions lourds : Les ions traversent les zones de déplétion des puces, créant des courants électriques transitoires.
  • Champs électromagnétiques : Placer le matériel dans ou à proximité de champs électromagnétiques puissants imite les interférences physiques naturelles.

Ces méthodes sans contact sont idéales pour tester les prototypes de conception préliminaires, notamment lorsqu’un suivi matériel à haute vitesse est nécessaire (par exemple, mesurer le temps de réaction d’un processeur à une erreur) ou lorsqu’il faut atteindre des zones internes inaccessibles aux sondes physiques. Les systèmes matériels peuvent suivre et déclencher ces erreurs rapidement et avec une interférence système minimale, souvent grâce à des temporisateurs matériels ou en attendant un événement spécifique (comme l’apparition d’une adresse sur le bus).

Le principal inconvénient est que les méthodes sans contact sont difficiles à déclencher avec précision au moment ou à l’endroit voulu, car il est impossible de contrôler parfaitement le moment où un ion lourd est projeté ou celui où une onde électromagnétique frappe un transistor spécifique.

5. Injection de fautes implémentée par logiciel (SFI)

Les outils d’injection de pannes logiciels sont très populaires. La principale raison est leur coût : ils permettent de s’affranchir de l’achat d’équipements de laboratoire onéreux. L’injection de pannes logicielle permet également de tester directement les applications et les systèmes d’exploitation, ce qui est très difficile à réaliser avec du matériel.

Pour tester une application, vous placez l’injecteur soit au sein même de l’application, soit entre l’application et le système d’exploitation. Pour tester le système d’exploitation, vous devez impérativement intégrer l’injecteur au code source, car l’ajout d’une couche supplémentaire entre le matériel et le système d’exploitation est extrêmement complexe.

Malgré sa flexibilité, le SFI présente trois inconvénients majeurs :

  1. Limites d’accès : Il ne peut pas accéder à des zones inaccessibles au logiciel (comme les portes logiques physiques).
  2. Interférences du système : Le code injecteur peut ralentir le système cible, voire modifier la structure originale du logiciel.
  3. Résolution temporelle faible : Cela peut fausser la précision du test. Le SFI fonctionne correctement pour les défauts à évolution lente (comme les problèmes de mémoire). Mais pour les défauts ultra-rapides (comme les anomalies de synchronisation du processeur ou du bus), le logiciel risque de ne pas détecter la propagation de l’erreur dans le système.

L’approche hybride

Pour résoudre ces problèmes de synchronisation, les ingénieurs utilisent parfois une méthode hybride. Celle-ci combine la flexibilité de l’injection logicielle avec la rapidité et la précision du suivi matériel. Elle est idéale pour mesurer de très faibles délais. Cependant, l’ajout d’outils de suivi matériel augmente les coûts et limite la flexibilité des tests en raison des contraintes de stockage physique des données.

6. Injection logicielle à la compilation vs. à l’exécution

L’injection de défauts logiciels est divisée en deux catégories selon le moment où le défaut est introduit : à la compilation ou à l’exécution.

SFI à la compilation

Vous modifiez les instructions du programme avant son chargement ou son exécution. Au lieu de modifier le matériel physique, vous modifiez le code source ou le code assembleur pour simuler des erreurs matérielles, logicielles ou transitoires. Cela crée une image de programme modifiée et défectueuse. Lorsque le système exécute cette image, le défaut se produit.

Cela ne nécessite aucun logiciel supplémentaire à l’exécution et n’entraîne aucun ralentissement des performances. L’erreur étant inscrite de manière permanente dans le code, cette méthode est idéale pour simuler des pannes matérielles permanentes. En revanche, il est impossible d’injecter des erreurs dynamiquement pendant l’exécution du programme.

Durée d’exécution SFI

Il vous faut un moyen de déclencher des erreurs pendant l’exécution du programme. Il existe trois méthodes courantes pour y parvenir :

  • Délais d’attente : Un minuteur (matériel ou logiciel) déclenche une interruption après un délai prédéfini, appelant ainsi l’injecteur de défauts. Ceci ne nécessite aucune modification du code de votre application. Cependant, comme le déclenchement est basé sur le temps et non sur l’activité du programme, les résultats peuvent être imprévisibles. Cette solution est particulièrement adaptée pour simuler des défauts matériels transitoires ou temporaires aléatoires.
  • Exceptions et pièges : Une exception matérielle ou une instruction d’interruption logicielle (comme un point d’arrêt) transfère le contrôle à l’injecteur. Contrairement aux délais d’attente, cela permet d’injecter des erreurs précisément lorsqu’un événement ou une condition spécifique se produit (par exemple, lorsque le programme tente d’accéder à un emplacement mémoire spécifique). Les deux doivent être connectés directement aux gestionnaires d’interruptions du système.
  • Insertion de code : Vous ajoutez de nouvelles instructions au programme, qui s’exécutent juste avant le code cible. Cela s’apparente à la modification de code, mais se produit à l’exécution et ajoute de nouvelles instructions au lieu de modifier les anciennes. Contrairement aux interruptions, l’injecteur peut s’exécuter entièrement en mode utilisateur et non en mode système ; il ne nécessite donc pas de privilèges système élevés.

7. Résumé des différences

Comparons maintenant les deux principales approches :

  • Points cibles : Le matériel cible les broches du boîtier et les composants physiques internes. Le logiciel cible la mémoire active, les registres du processeur et l’état global du logiciel.
  • Ingérence: Le matériel n’entraîne quasiment aucun délai d’exécution. Le logiciel, quant à lui, engendre une surcharge de performance car du code supplémentaire doit être exécuté.
  • Coût: Le matériel informatique est coûteux et nécessite un laboratoire dédié. Le logiciel, quant à lui, repose sur du code et est peu onéreux à mettre en œuvre.
  • Résolution temporelle : Le matériel est extrêmement précis (nanosecondes). Le logiciel a une résolution plus grossière (microsecondes ou millisecondes).
  • Objectif des tests : Le matériel évalue la détection et la protection contre les erreurs de bas niveau. Le logiciel teste les programmes de récupération de haut niveau, les systèmes d’exploitation et les applications.

8. Questions fréquentes

Quelle est la principale différence entre l’injection de pannes matérielles et logicielles ?

L’injection matérielle cible les broches et les circuits physiques, tandis que l’injection logicielle cible la mémoire, les registres et le code. Les méthodes matérielles utilisent des outils physiques, comme des sondes ou des rayonnements, pour tester les réactions de bas niveau dans les circuits. Les méthodes logicielles modifient le code ou la mémoire système pour tester la façon dont les applications et les systèmes d’exploitation gèrent les erreurs.

L’injection de défauts logiciels peut-elle simuler des pannes matérielles permanentes ?

Oui, en utilisant l’injection de dépendances à la compilation pour modifier de façon permanente le code du programme. En modifiant le code source ou les instructions d’assemblage avant l’exécution, on crée une image de programme présentant un défaut permanent. Ceci simule une panne physique permanente sans entraîner de ralentissement des performances à l’exécution.

Pourquoi l’insertion dans un socket est-elle plus sûre que l’utilisation de sondes actives pour les tests au niveau des broches ?

L’insertion dans un support utilise une manipulation contrôlée du signal, tandis que les sondes actives injectent des courants externes susceptibles de griller la puce. Les sondes actives injectent directement du courant dans les broches physiques, ce qui peut facilement entraîner une surchauffe du silicium. Les supports de dérivation interceptent les broches en toute sécurité et utilisent des portes logiques (ET, OU, inversion) pour simuler des défauts sans risque électrique.

Dernières réflexions à l’intention des architectes système

Chez Dowway Vehicle, nous suivons une règle simple : Si vous n’avez pas testé la réaction de votre système à une panne, vous devez supposer que votre système tombera en panne lorsque cette panne se produira. Ne vous fiez pas à une seule méthode de test. Utilisez l’injection logicielle dès les premières phases de développement pour tester les automates d’état de l’application et les routines de récupération du système d’exploitation. Par la suite, utilisez l’injection matérielle sur des prototypes physiques pour vous assurer que vos mécanismes de surveillance, vos systèmes de protection de la mémoire et les défaillances des broches ne provoquent pas une panne système.

Références

  • [1] Techniques et outils d’injection de fautes (Enquête académique exhaustive)
  • [2] Un environnement d’injection de défauts basé sur la vérification fonctionnelle (Symposium IEEE sur la fiabilité et la maintenabilité)
  • [3] ISO 26262-11:2018 – Lignes directrices relatives à l’application des semi-conducteurs à la sécurité fonctionnelle automobile.
  • [4] CEI 61508 – Sécurité fonctionnelle des systèmes électriques/électroniques/électroniques programmables liés à la sécurité.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Need a Quote or Have Questions?

Please fill out the form below, our engineers will contact you within 24 hours.