Qu'est-ce que le test fonctionnel pour le matériel avec TofuPilot
Le test fonctionnel valide qu'un produit matériel se comporte correctement en tant que système complet. Contrairement au test in-circuit (ICT), qui vérifie les composants individuels et les joints de soudure, le test fonctionnel traite la carte ou le produit comme une boîte noire et vérifie ses entrées et sorties. Ce guide couvre ce qu'implique le test fonctionnel, comment il se compare aux autres méthodes de test, et comment construire des tests fonctionnels en Python avec TofuPilot.
Test fonctionnel vs autres méthodes
| Méthode | Ce qu'elle teste | Comment | Détecte |
|---|---|---|---|
| ICT (Test In-Circuit) | Composants individuels | Fixation à lit de clous, sous tension | Circuits ouverts, courts-circuits, mauvaises valeurs |
| Sonde volante | Composants individuels | Sondes mobiles, hors tension/sous tension | Identique à l'ICT, pas de fixation nécessaire |
| Test fonctionnel (FCT) | Comportement système | Sous tension, exercé via les interfaces | Bugs d'intégration, problèmes firmware, performances |
| Boundary scan (JTAG) | Connexions des CI numériques | Via la chaîne JTAG | Connectivité numérique |
L'ICT vous dit que les bons composants sont soudés correctement. Le test fonctionnel vous dit que le produit fonctionne réellement.
Ce que couvrent les tests fonctionnels
Un test fonctionnel exerce le produit à travers ses interfaces réelles : entrée d'alimentation, ports de communication, capteurs, actionneurs et commandes utilisateur.
| Catégorie | Exemples de vérifications |
|---|---|
| Alimentation | Courant de démarrage, régulation de tension, séquencement d'alimentation |
| Communication | UART, SPI, I2C, CAN, Ethernet répondent correctement |
| Analogique | Les lectures ADC correspondent aux entrées connues dans la tolérance |
| E/S numériques | Les états GPIO correspondent aux niveaux logiques attendus |
| Actionneurs | Moteurs, relais, LED répondent aux commandes |
| Firmware | Vérification de version, autotest réussi, temps de démarrage |
| RF (si applicable) | Puissance d'émission, sensibilité de réception, précision de fréquence |
Prérequis
- Python 3.10+
- OpenHTF installé (
pip install openhtf) - SDK Python TofuPilot installé (
pip install tofupilot)
Étape 1 : Définir les phases de test fonctionnel
Chaque vérification fonctionnelle devient une phase OpenHTF. Regroupez les vérifications connexes mais gardez les phases suffisamment ciblées pour qu'un échec pointe vers un sous-système spécifique.
import openhtf as htf
from openhtf.util import units
@htf.measures(
htf.Measurement("boot_time_ms")
.in_range(maximum=2000)
.with_units(units.MILLISECOND),
htf.Measurement("firmware_version").equals("1.3.0"),
)
def phase_power_and_boot(test):
"""Mettre sous tension le DUT et vérifier la séquence de démarrage."""
test.measurements.boot_time_ms = 1240
test.measurements.firmware_version = "1.3.0"
@htf.measures(
htf.Measurement("uart_loopback").equals("PASS"),
htf.Measurement("i2c_sensor_id").equals("0x68"),
)
def phase_communication(test):
"""Vérifier que les interfaces de communication répondent correctement."""
test.measurements.uart_loopback = "PASS"
test.measurements.i2c_sensor_id = "0x68"
@htf.measures(
htf.Measurement("adc_channel_0_V")
.in_range(minimum=2.45, maximum=2.55)
.with_units(units.VOLT),
htf.Measurement("adc_channel_1_V")
.in_range(minimum=1.60, maximum=1.70)
.with_units(units.VOLT),
)
def phase_analog_inputs(test):
"""Appliquer des tensions connues et vérifier les lectures ADC."""
test.measurements.adc_channel_0_V = 2.50
test.measurements.adc_channel_1_V = 1.65Étape 2 : Exécuter et enregistrer les résultats
Connectez le test à TofuPilot. Le résultat du test fonctionnel de chaque unité est téléversé automatiquement avec le détail complet des mesures.
from tofupilot.openhtf import TofuPilot
test = htf.Test(
phase_power_and_boot,
phase_communication,
phase_analog_inputs,
)
with TofuPilot(test):
test.execute(test_start=lambda: input("Scanner le numéro de série : "))Étape 3 : Suivre les résultats dans TofuPilot
TofuPilot suit automatiquement les résultats des tests fonctionnels. Ouvrez l'onglet Analytics pour voir :
- Le rendement au premier passage pour chaque procédure de test fonctionnel
- Le Pareto des défaillances montrant quelles phases échouent le plus souvent (alimentation ? communication ? analogique ?)
- Les distributions de mesures avec superposition des limites pour repérer les tendances de resserrement
- La comparaison des stations si vous exécutez le même test sur plusieurs stations
Ces données vous aident à décider où investir. Si 80% des échecs de tests fonctionnels proviennent d'une seule phase, c'est là qu'il faut concentrer votre amélioration de conception ou de processus.
Quand utiliser le test fonctionnel
| Scénario | Utiliser le FCT ? |
|---|---|
| PCBA avec firmware | Oui, après le CMS et la programmation |
| Carte passive simple | Non, l'ICT ou la sonde volante est suffisante |
| Produit assemblé avec capteurs/actionneurs | Oui, comme test EOL |
| Produit critique pour la sécurité | Oui, avec une procédure de test documentée |
| Haut volume, faible complexité | Peut-être, dépend du coût des défaillances terrain |
Le test fonctionnel ajoute du temps de cycle, mais il détecte les défaillances d'intégration que l'ICT ne peut pas trouver. Pour les produits avec firmware, interfaces de communication ou circuits analogiques, c'est l'étape de test la plus importante.