Tester une application de décodeur : émulateur, banc et vrai boîtier
Une application destinée à un décodeur passe par trois environnements de test successifs, et chacun attrape une catégorie de problèmes que le précédent laisse passer. La faute classique est de croire qu'ils forment une gradation de fidélité, comme si le dernier ne faisait que confirmer les autres. Ils attrapent des choses différentes.
L'émulateur, ou le navigateur déguisé
Le premier niveau est un environnement de bureau qui simule la plateforme cible: un moteur de rendu avec les bonnes dimensions d'écran, une correspondance clavier vers codes de télécommande, et des interfaces de service factices. Il est rapide, il se recharge instantanément, et c'est là qu'on passe l'essentiel de son temps.
Il attrape ce qui relève de la logique: navigation entre les écrans, gestion du focus, état de l'application, appels aux services, mise en page. C'est déjà beaucoup, et ça justifie amplement de commencer là.
Mais il ment sur trois points, toujours les mêmes. Il ment sur la mémoire, parce qu'il tourne sur une machine qui en a vingt fois plus. Il ment sur la performance graphique, parce qu'un poste de travail compose des effets qu'un boîtier ne peut pas se permettre. Et il ment sur la vidéo, parce qu'il l'affiche dans la page alors que le vrai matériel la place sur un plan distinct, derrière l'interface. Une maquette qui superpose un dégradé au lecteur fonctionnera parfaitement ici et nulle part ailleurs.
Le banc de test
Le deuxième niveau est un ensemble de vrais boîtiers, câblés, alimentés, reliés à des sources vidéo et pilotés à distance: injection de commandes de télécommande, capture de la sortie vidéo, relevé de la mémoire et de la charge processeur.
C'est là que se règle la couverture du parc. Un opérateur exploite plusieurs générations de matériel, et une application doit fonctionner sur toutes, y compris la plus ancienne encore en service. Faire tourner la même suite de tests sur chaque modèle, et surveiller la mémoire pendant des sessions longues plutôt que sur un parcours de deux minutes, est ce qui attrape les fuites et les régressions de performance.
Le banc excelle aussi sur ce que personne n'a envie de faire à la main: relancer le même parcours des centaines de fois, laisser une application ouverte huit heures, couper le réseau au milieu d'une lecture. Les défauts qui ne se manifestent qu'après une longue durée sont ceux qui coûtent le plus cher en production, et ce sont exactement ceux qu'un test manuel ne trouvera jamais.
Le vrai boîtier, dans un vrai salon
Le troisième niveau ne s'automatise pas, et c'est celui qu'on saute le plus souvent parce qu'il semble redondant. Il ne l'est pas.
Un banc de test est branché sur un réseau parfait et un écran de laboratoire. Un salon a un réseau domestique chargé, un téléviseur avec ses propres traitements d'image et son propre retard, une distance de trois mètres, une télécommande dont les piles faiblissent, et parfois un répartiteur bon marché qui fait échouer la négociation de protection de liaison. Aucun de ces facteurs n'apparaît dans un rapport de test automatisé, et chacun a déjà transformé une application validée en une application inutilisable.
C'est aussi le seul endroit où l'on juge ce qui ne se mesure pas: est-ce que l'indicateur de focus se voit depuis le divan, est-ce que la fonction courante demande trois appuis ou neuf, est-ce que l'animation qui paraissait élégante devient agaçante à la centième fois.
Une règle simple
La règle que j'applique est de sortir de l'émulateur beaucoup plus tôt qu'on n'en a envie. Pas à la fin, quand tout est terminé et qu'il ne reste qu'à valider, mais dès que le premier écran est navigable. Les trois mensonges de l'émulateur — mémoire, performance graphique, plan vidéo — touchent des décisions d'architecture, pas des détails de finition. Les découvrir tard signifie refaire, pas ajuster.
Corollaire: une démonstration réussie ne prouve rien. Elle prouve que le parcours démontré fonctionne, sur ce boîtier-là, à froid, après un redémarrage récent. C'est précisément le scénario que l'abonné ne vit jamais.