Test Types & Methods

Qu'est-ce que le test fonctionnel

Le test fonctionnel valide qu'un matériel se comporte correctement en tant que système complet. Découvrez la différence avec l'ICT, comment construire des.

JJulien Buteau
beginner8 min de lecture14 mars 2026

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éthodeCe qu'elle testeCommentDétecte
ICT (Test In-Circuit)Composants individuelsFixation à lit de clous, sous tensionCircuits ouverts, courts-circuits, mauvaises valeurs
Sonde volanteComposants individuelsSondes mobiles, hors tension/sous tensionIdentique à l'ICT, pas de fixation nécessaire
Test fonctionnel (FCT)Comportement systèmeSous tension, exercé via les interfacesBugs d'intégration, problèmes firmware, performances
Boundary scan (JTAG)Connexions des CI numériquesVia la chaîne JTAGConnectivité 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égorieExemples de vérifications
AlimentationCourant de démarrage, régulation de tension, séquencement d'alimentation
CommunicationUART, SPI, I2C, CAN, Ethernet répondent correctement
AnalogiqueLes lectures ADC correspondent aux entrées connues dans la tolérance
E/S numériquesLes états GPIO correspondent aux niveaux logiques attendus
ActionneursMoteurs, relais, LED répondent aux commandes
FirmwareVé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.

functional_test.py
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.

functional_test.py
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énarioUtiliser le FCT ?
PCBA avec firmwareOui, après le CMS et la programmation
Carte passive simpleNon, l'ICT ou la sonde volante est suffisante
Produit assemblé avec capteurs/actionneursOui, 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.

Plus de guides

Mettez ce guide en pratique