Gros plan sur un crayon mécanique posé sur un papier à dessin, à côté d'une puce électronique lumineuse.

Anthropic utilise un agent IA pour trouver des bugs dans des paquets Python

Anthropic annonce avoir développé un agent capable de repérer des erreurs de logique dans de grands projets logiciels, en appliquant une méthode de test avancée. Cet outil a permis de signaler des centaines de potentiels bugs dans des paquets Python très utilisés, dont NumPy, SciPy et Pandas, après un processus de validation très rigoureux.

Le cœur de cette démarche repose sur le property-based testing (PBT), un paradigme qui cherche à vérifier si une propriété générale d’un code tient pour l’ensemble des entrées possibles, plutôt que de tester des cas d’usage spécifiques. Contrairement aux tests classiques où l’on vérifie qu’une entrée donnée produit une sortie attendue, le PBT exige de spécifier une invariance : par exemple, que la désérialisation JSON soit l’inverse de la sérialisation. Le cadre de test génère alors automatiquement des scénarios pour trouver les failles.

L’équipe a utilisé un command Claude personnalisé pour automatiser ce processus. L’agent lit le code cible, analyse la documentation et les annotations de type, puis propose lui-même des propriétés logiques. Il écrit ensuite les tests correspondants en utilisant le framework Hypothesis, ce qui lui permet de simuler des scénarios bien au-delà de ce qu’un développeur pourrait anticiper.

Un manuel technique ouvert avec des notes de code, baigné dans une forte lumière créant une ombre longue.

Ce système n’est pas une simple démonstration académique. Pour éviter de surcharger les mainteneurs des projets open source avec des faux positifs, le processus d’audit est particulièrement laborieux. Les bugs identifiés sont soumis à l’avis de trois experts humains, et seuls ceux jugés valides par ces relecteurs passent à une vérification finale par les auteurs avant d’être signalés.

Le PBT face aux limites des tests unitaires

La différence entre les tests basés sur des exemples et les tests basés sur les propriétés est fondamentale. Un test unitaire standard vérifie un comportement connu ; il est excellent pour confirmer des fonctionnalités spécifiques. Cependant, s’il manque un cas limite que le développeur n’a pas imaginé, le bug persiste. Le PBT, en revanche, agit comme un explorateur systématique. Il ne se contente pas de vérifier ce qui devrait se passer pour des entrées choisies, il vérifie les règles générales que le code doit respecter, même lorsque l’entrée est radicalement différente.

Ce mécanisme permet de trouver des failles logiques, celles qui sont la source de beaucoup de vulnérabilités, même lorsque le code semble fonctionner parfaitement avec les exemples fournis. On peut penser au cas d’une fonction de normalisation de requêtes : elle devrait toujours produire le même résultat si on la passe deux fois de suite, une propriété appelée idempotence. Le PBT est fait pour attraper ces incohérences.

Vers une détection proactive des failles

En se concentrant sur l’identification de bugs en général, et non uniquement sur les failles de sécurité, les chercheurs d’Anthropic montrent que cette approche est applicable à de nombreux domaines. Bien que les vulnérabilités de sécurité soient souvent le résultat d’erreurs logiques, cette méthode ouvre la porte à une surveillance prédictive. Les auteurs mentionnent qu’ils envisagent d’appliquer ces techniques pour identifier des problèmes avant même le déploiement d’un logiciel.

Ils ont rendu publics tous les jeux de données générés, y compris les bugs qui n’ont pas encore été validés, permettant ainsi aux contributeurs des dépôts de les examiner directement. Les équipes prévoient de continuer à soumettre les rapports de bugs restants et d’étendre l’application de ce système à davantage de projets PyPI.

Sources