Présentation
L'article présente dix cas où des contrôles ont échoué à détecter des problèmes sur un site web, malgré leur passage réussi. Ces exemples sont basés sur une journée d'audit du site, où chaque défaut grave était masqué par un contrôle qui avait déjà passé avec succès.
Les différents types de contrôles défaillants
Le premier cas concerne un script de vérification qui imprime douze lignes avec le message « BAD » avant de conclure « PASS ». Le problème est que le drapeau d'erreur est défini à l'intérieur d'une sous-shell et disparaît avec elle, ce qui rend le contrôle incapable de détecter les erreurs. Un autre cas concerne un test suite enregistré à partir du comportement actuel d'un système, qui passe avec succès le jour où il est écrit et pour toujours, car il asserte que le système fait ce qu'il fait.
Un autre exemple concerne un contrôle qui recherche un lien avec l'attribut « href=/courses » mais ne trouve rien, car le framework émet « href=/courses/ ». Le contrôle est bien formé, mais il ne parle pas le même dialecte que le système qu'il contrôle. Le contrôle et le système contrôlé parlent deux dialectes différents, ce qui entraîne un désaccord qui se traduit par le silence, et le silence est interprété comme une réussite.
Les leçons tirées de ces exemples
Ces exemples montrent que les contrôles ne sont pas toujours fiables et qu'il est important de les tester et de les valider. Un contrôle qui n'a jamais échoué n'est pas nécessairement un bon contrôle, car il peut être incapable de détecter les erreurs. Il est également important de s'assurer que les contrôles sont bien conçus et qu'ils testent les bonnes choses.
Un autre point important est que les contrôles doivent être exécutés au niveau où les conséquences se produisent. Un contrôle qui s'exécute au niveau du code source ne peut pas détecter les problèmes qui se produisent au niveau de la page web. Il est également important de s'assurer que les contrôles sont indépendants et qu'ils ne sont pas influencés par les hypothèses ou les préjugés des développeurs.
Conclusion
En conclusion, les contrôles sont importants pour garantir la qualité et la fiabilité des systèmes, mais ils ne sont pas infaillibles. Il est important de les tester et de les valider régulièrement pour s'assurer qu'ils fonctionnent correctement. Les développeurs doivent également être conscients des limites et des pièges potentiels des contrôles et prendre des mesures pour les éviter.