Contexte et méthodologie
Le test porte sur l’implémentation de l’algorithme de compression Zstd en Rust. Vingt‑six variantes d’instructions ont été soumises à un agent de programmation basé sur Codex/GPT‑5.6 Sol, chacune ajoutant une technique ou un outil de test : TDD, QuickCheck, property‑based testing, fuzzing, differential testing, SMT‑solvers (Z3, cvc5, Yices), Spin, Lean 4, etc. Chaque condition a été exécutée avec deux niveaux d’effort (medium et xhigh) et une moyenne de 80 runs, ce qui permet de mesurer le coût (temps de calcul) contre le taux de réussite (fraction de runs qui passent 100 % des tests cachés).
Use test-driven developmentQuatre compétences externes ont également été testées : le skill officiel Hegel, le skill ECC Rust (250 k étoiles GitHub), le skill Trail of Bits et un skill maison basé sur des prompts.
Résultats quantitatifs
Le graphique agrégé montre que aucune condition ne dépasse largement les autres. Le scénario « Default » (sans instruction supplémentaire) se situe au‑dessus de la moyenne globale. À l’effort xhigh, les conditions basées sur le fuzzing et le property‑based testing affichent un léger avantage sur les méthodes formelles, tandis qu’au niveau medium les performances sont plus dispersées. Les compétences recommandées par Codex sous‑performent, à l’exception du skill maison qui obtient un résultat comparable au défaut.
Le TDD, prévu comme sous‑performant, confirme la prédiction : le taux de réussite est inférieur à la moyenne, même lorsque le skill associé incite explicitement l’agent à appliquer la méthodologie. De même, les instructions « Make no mistakes » et les compétences volumineuses (Hegel, ECC, Trail of Bits) n’apportent aucune amélioration mesurable.
Analyse des comportements des agents
En examinant les traces d’exécution, il apparaît que les agents ne maîtrisent pas les bibliothèques de test. Par exemple, lorsqu’on leur demande d’utiliser QuickCheck, ils génèrent souvent des stubs incomplets ou omettent l’enregistrement des propriétés. Les agents tendent à reproduire des scénarios de test « pathologiques » inspirés de critiques historiques, sans adapter ces cas à la logique du code cible. Cette approche conduit à des suites de tests superficielles qui ne détectent pas les défauts introduits par les implémentations de Zstd.
Les compétences externes, bien que riches en documentation, sont traitées comme de longs tutoriels : l’agent consomme les tokens sans extraire les actions concrètes, ce qui explique leur faible impact. Le skill maison, en revanche, agit comme un nudge : il oriente le modèle vers des comportements plus productifs sans imposer une surcharge informationnelle.
Implications et limites
Les résultats suggèrent que, dans leur état actuel, les agents de code ne tirent pas parti des techniques de test avancées simplement en les nommant. La capacité à intégrer correctement des frameworks comme Proptest ou des solveurs SMT reste limitée, ce qui réduit l’utilité des instructions détaillées. Le fait que le scénario par défaut surpasse la plupart des variantes indique que les modèles possèdent déjà une stratégie de test implicite, mais que celle‑ci n’est pas optimisée pour la rigueur formelle.
La méthodologie comporte des incertitudes : le nombre de runs (80) reste modeste, les coûts de calcul varient selon le matériel, et les tests cachés ne sont pas publiés, ce qui empêche une validation indépendante. De plus, l’étude se limite à Rust et à un seul problème algorithmique ; les conclusions pourraient différer avec d’autres langages ou domaines d’application.