Migrating from Legacy Systems

Le facteur bus en ingénierie de test

Ce que le facteur bus signifie pour un poste de test, comment auditer chaque poste en un après-midi, et les étapes qui évitent qu'un départ n'arrête la ligne.

JJulien Buteau
beginner7 min de lecture23 septembre 2026

Le facteur bus est le nombre de personnes qui peuvent partir avant qu'un poste de test ne puisse plus être reconstruit ni modifié. Sur la plupart des lignes de production qui tournent sous LabVIEW, ce nombre est un. Vous pouvez le mesurer en un après-midi, et les remèdes vont du document de passation à la réécriture en texte sous Git.

Ce que le facteur bus signifie pour un poste de test

Le terme vient du logiciel : combien de personnes devraient se faire renverser par un bus avant que le projet ne s'arrête. Pour un poste de test, la question est plus concrète. Si la personne qui l'a construit partait demain, quelqu'un d'autre pourrait-il ouvrir la séquence, changer une limite et le redéployer d'ici vendredi ?

Trois conditions doivent être réunies pour que la réponse soit oui. Quelqu'un d'autre peut lire la source, et quelqu'un d'autre dispose d'une licence et d'une machine capable de le compiler. Et les résultats vivent à un endroit que l'équipe peut consulter, pas sur le disque local du poste.

Le nombre de personnes qui remplissent les trois conditions est le facteur bus. Un poste avec un facteur bus de un n'est pas cassé, c'est juste un point de défaillance unique qui se trouve encore fonctionner.

Auditez-le en un après-midi

Vous n'avez pas besoin d'outil. Parcourez l'atelier avec un tableur et remplissez une ligne par poste.

stations.csv
station,product,runs_per_week,tool,who_can_open,who_can_rebuild,last_changeFCT-01,controller-pcba,420,LabVIEW 2020,marc,marc,2024-11-03FCT-02,controller-pcba,380,LabVIEW 2020,marc,marc,2024-11-03EOL-01,drone-assembly,150,TestStand 2019,marc;priya,marc,2023-06-18BURN-01,battery-module,90,Python,priya;tom;lena,priya;tom;lena,2026-08-21CAL-01,imu-module,60,LabVIEW 2018,marc,,2021-02-09

Deux colonnes portent la réponse. who_can_open liste toutes les personnes capables de lire la source et de dire ce qu'elle fait. who_can_rebuild liste toutes celles qui ont la licence, la bonne version de la chaîne d'outils et une compréhension suffisante pour produire un nouveau livrable déployable. Séparez les noms par des points-virgules. Laissez la cellule vide quand la réponse honnête est personne.

Soyez strict sur who_can_rebuild. « Priya a regardé Marc le faire une fois » ne compte pas. Si la version de la chaîne d'outils n'est plus installée nulle part, la cellule est vide même si Marc est encore salarié.

Ce script lit le fichier et affiche les postes à risque, les plus gros volumes en premier.

bus_factor.py
20 lines
# Affiche les postes qu'une seule personne (ou personne) peut reconstruire, plus gros volume en premier.import csvdef people(cell):    return {name.strip() for name in cell.split(";") if name.strip()}with open("stations.csv", newline="") as f:    rows = list(csv.DictReader(f))at_risk = []for row in rows:    rebuilders = people(row["who_can_rebuild"])    if len(rebuilders) <= 1:        at_risk.append((int(row["runs_per_week"]), row["station"], rebuilders))for runs, station, rebuilders in sorted(at_risk, reverse=True):    who = ", ".join(sorted(rebuilders)) or "nobody"    print(f"{station:8} {runs:5d} runs/week  bus factor {len(rebuilders)}  ({who})")

Pour le fichier d'exemple, il affiche FCT-01, FCT-02 et EOL-01 à un facteur bus de 1, tous sur Marc, et CAL-01 à un facteur bus de 0. C'est aussi votre ordre de correction : le poste avec le plus de runs par semaine et le moins de reconstructeurs passe en premier.

La plupart des usines découvrent leur facteur bus la semaine où elles découvrent un préavis. L'audit d'un après-midi coûte moins cher.

Ce qui le fait baisser

Rien de tout cela n'est une erreur. Ce sont les réglages par défaut de la chaîne d'outils et la façon dont les petites équipes grandissent, et chacune de ces causes retire discrètement un nom de who_can_rebuild.

CausePourquoi elle fait baisser le nombreComment vous le remarquez
VI binairesUn fichier .vi se compare comme un blob. Personne ne peut relire une modification sans l'ouvrir dans la même version de LabVIEW.Les pull requests n'existent pas. Une modification, c'est « Marc m'a envoyé le nouveau build ».
Langage propriétaireLabVIEW est capable, et de moins en moins d'ingénieurs l'apprennent chaque année. Le vivier de personnes capables de lire la source rétrécit tout seul.Les offres d'emploi restent ouvertes pendant des mois.
Licences liées à un poste nominatifDepuis 2023, LabVIEW et TestStand sont uniquement sur abonnement. La licence, la machine de build et la personne sont généralement la même chose.Désactiver le compte d'un partant désactive aussi la capacité de compiler.
Montages non documentésLe plan des pogo pins, la matrice de relais et le « ne touchez pas au DIP switch 3 » vivent dans une seule tête.Le plan du montage est une photo sur le téléphone de quelqu'un.
Résultats dans des fichiers TDMS ou CSV locauxLes données de rendement et de Cpk restent sur le disque du poste. La seule personne capable de répondre à « quel est le FPY ce mois-ci » est celle qui a écrit le VI de rapport.La direction demande un chiffre de rendement et attend deux jours.

Deux de ces causes (le langage propriétaire et les licences nominatives) sont structurelles et vous ne pouvez pas les corriger à l'intérieur de la chaîne d'outils. Les trois autres, oui, et c'est l'objet de l'échelle ci-dessous.

L'échelle des parades

Chaque niveau est une vraie étape et chacun coûte quelque chose. Choisissez le niveau que vous pouvez tenir, puis montez quand vous avez le budget.

NiveauActionFacteur bus après
0Rien. Un ingénieur, des VI binaires, les résultats sur le poste.1
1Un document de passation par poste et une machine de build sur laquelle une deuxième personne peut se connecter.1, mais la reprise prend des jours au lieu de mois
2La source sous Git, une deuxième licence, et un autre ingénieur réalise une fois une reconstruction complète depuis zéro.2
3Les résultats poussés hors du poste vers TofuPilot via l'API REST, pour que le rendement, le Cpk et l'historique par unité ne dépendent plus du VI de rapport.2, et les données survivent au poste
4Poste réécrit en texte (procedure, phases, plugs) en Python sous Git, résultats dans TofuPilot.Tous les membres de l'équipe qui lisent Python

Le niveau 1 est ce que couvre que faire quand votre ingénieur LabVIEW part, et documenter un poste de test pour la passation contient le modèle. Faites-le cette semaine pour chaque poste à facteur bus 1. Cela ne change pas le nombre, cela change la durée pendant laquelle vous êtes à l'arrêt.

Le niveau 2 est là où la plupart des équipes calent. La deuxième licence coûte un abonnement, et le deuxième ingénieur doit être quelqu'un qui lit LabVIEW, ce qui vous ramène à pourquoi les ingénieurs LabVIEW sont difficiles à recruter.

Le niveau 3 ne demande aucune réécriture. Un poste LabVIEW peut envoyer chaque run en POST vers https://www.tofupilot.app/api/v2/runs depuis les VI HTTP Client, avec le résultat, le numéro de série et les mesures. Le poste reste tel quel, mais les données deviennent quelque chose que toute l'équipe voit.

Pourquoi le texte, Git et une plateforme partagée sont la solution durable

Les niveaux 1 à 3 rapiècent le problème. Ils se dégradent : le document de passation dérive, la deuxième licence expire, le deuxième ingénieur passe sur un autre projet. Le niveau 4 change ce dont le poste est fait, et c'est pour cela qu'il tient.

Trois propriétés font le travail.

Le poste est du texte. Un procedure.yaml plus un dossier de phases/*.py et de plugs/*.py se compare ligne par ligne. Quiconque lit Python peut relire un changement de limite dans une pull request, et Git conserve l'historique de chaque modification et de qui l'a approuvée.

La chaîne d'outils est gratuite et installée partout. Il n'y a pas de licence nominative qui expire, et un portable avec Python et le CLI TofuPilot peut reconstruire n'importe quel poste du dépôt.

Les résultats sont partagés. Chaque run atterrit dans TofuPilot avec ses mesures, donc le FPY, le Cpk et le Pareto des défaillances sont sur un tableau de bord que toute l'équipe ouvre, pas dans un fichier TDMS qu'une seule personne sait lire.

Voici à quoi ressemble « relisible dans une pull request ». Un relecteur qui n'a jamais vu le poste peut vous dire ce qu'il teste et quelles sont les limites en moins d'une minute.

procedure.yaml
34 lines
# Test fonctionnel de la PCBA contrôleur. Les limites sont la surface de relecture.name: Controller PCBA FCTversion: 2.4.0unit:  serial_number:    default_value: SN-000000  part_number:    default_value: CTRL-PCBA-Aplugs:  - name: psu    python: plugs.psu:PowerSupply  - name: dmm    python: plugs.dmm:Multimetermain:  - name: Power Rails    python: phases.power_rails    measurements:      - name: rail_3v3        unit: V        validators:          - operator: ">="            expected_value: 3.2          - operator: "<="            expected_value: 3.4      - name: rail_5v        unit: V        validators:          - operator: ">="            expected_value: 4.85          - operator: "<="            expected_value: 5.15

Quand la limite de 3,3 V doit s'élargir à 3,15 V, le diff tient en une ligne. Le relecteur voit l'ancienne valeur, la nouvelle et l'auteur. C'est tout le mécanisme, et c'est la raison pour laquelle le facteur bus cesse d'être une propriété d'un ingénieur pour devenir une propriété de l'équipe.

Le facteur bus après le niveau 4 n'est pas infini. Quelqu'un doit encore connaître le montage et le produit. Mais la connaissance qui était enfermée dans un binaire est maintenant dans un fichier que n'importe qui peut ouvrir, et c'est cette partie-là qui franchissait la porte à chaque départ.

Commencez par un poste

Prenez le poste que votre audit a placé en tête : le plus gros volume avec le moins de reconstructeurs. Reconstruisez-le en Python avec le TofuPilot Framework, gardez les mêmes limites, et faites-le tourner en parallèle de la version LabVIEW sur les mêmes unités pendant deux semaines. Quand les deux concordent, basculez les opérateurs et mettez à jour le CSV.

install-and-run.sh
# Installe le CLI, puis lance le poste en local (sans compte) ou avec upload.curl -fsSL https://www.tofupilot.app/install | shtofupilot run ./procedure.yamltofupilot run ./procedure.yaml --upload

La reconstruction pas à pas est dans comment migrer de LabVIEW vers Python pour les tests de fabrication avec TofuPilot, et le framework lui-même est sur tofupilot.com/products/framework. L'offre Lab est gratuite, et tofupilot run fonctionne sans compte.

Plus de guides

Mettez ce guide en pratique