AegisAsync suit le code Python asynchrone pour signaler des risques
En termes simples
Dans un programme Python asynchrone, un risque peut dépendre de ce qui arrive plus tard à la même tâche, ou de la suite de l’exécution après une erreur ou une annulation. AegisAsync examine les instructions compilées sans lancer le programme, relie les événements asynchrones concernés et vérifie certains chemins d’exécution pour six types de risques.
Sur un ensemble de tests construits, il a trouvé les 180 risques étiquetés et n’a produit aucune fausse alerte sur les cas sûrs, dans cinq versions de Python testées. Ce résultat vaut pour ces cas de test.
La recherche
Un outil peut-il reconnaître un risque asynchrone lorsqu’il dépend de ce qui arrive plus tard à la même tâche, ou de la suite du programme après une annulation ?
Ces indices peuvent se trouver dans plusieurs opérations et chemins d’exécution : repérer seulement un appel à une fonction potentiellement risquée ne suffit pas toujours à établir que le risque se présente.
AegisAsync relie les instructions compilées, les événements asynchrones et les objets possibles, puis vérifie des chemins d’exécution limités pour six types de risques dans le code Python asynchrone.
Sur AsyncBench, un ensemble construit de risques asynchrones étiquetés et de programmes sûrs, AegisAsync détecte les 180 risques étiquetés et ne signale aucun des 14 cas sûrs, pour cinq versions de CPython. Il détecte aussi les 90 risques des trois catégories communes avec flake8-async, qui en détecte 40.
Dans un échantillon stratifié d’artefacts PyPI, les personnes chargées de l’examen confirment 457 des 910 alertes candidates d’AegisAsync comme bugs distincts.
Des reproductions exécutables relient certains problèmes confirmés dans le code source à un comportement observé à l’exécution, dans les six catégories de risques.
Les résultats des tests portent sur des cas construits, tandis que les conclusions sur les packages proviennent d’un échantillon stratifié et d’un protocole de vérification précis.
Les chemins d’exécution limités et l’analyse des objets d’AegisAsync peuvent manquer certains comportements ou produire de fausses alertes.
Analyse
Détails
- Auteurs de l’article original
- Baihong Chen, Wen Li
- Soumis à arXiv
- Licence
- arXiv non-exclusive