AegisAsync segue l'esecuzione asincrona di Python per segnalare rischi
In parole semplici
Nei programmi asincroni Python, alcuni rischi dipendono da ciò che accade in seguito allo stesso task, oppure da come prosegue il programma dopo un errore o una cancellazione. AegisAsync è uno strumento che esamina le istruzioni compilate senza eseguire il programma, collega gli eventi asincroni correlati e controlla alcuni percorsi di esecuzione per cercare sei tipi di rischio.
In una raccolta di test costruiti appositamente, ha trovato tutti i 180 rischi etichettati e non ha prodotto segnalazioni errate sui casi di controllo sicuri nelle cinque versioni di Python testate. Il risultato vale per quei casi di test.
La ricerca
Uno strumento di analisi può riconoscere un rischio asincrono quando dipende da ciò che accade in seguito allo stesso task o da come prosegue il programma dopo una cancellazione?
Gli indizi possono trovarsi in operazioni e percorsi di esecuzione diversi: individuare una singola chiamata rischiosa potrebbe quindi non bastare a stabilire che il rischio si presenti.
AegisAsync collega istruzioni bytecode, eventi asincroni e rappresentazioni di possibili oggetti, poi controlla percorsi di esecuzione limitati per cercare sei tipi di rischio nei programmi asincroni Python.
In AsyncBench, una raccolta costruita appositamente con rischi asincroni etichettati e programmi sicuri, AegisAsync rileva tutti i 180 rischi etichettati e non segnala problemi nei 14 casi di controllo sicuri nelle cinque versioni di CPython testate. Rileva inoltre tutti i 90 rischi nelle tre categorie comuni a flake8-async, che ne rileva 40.
In un campione stratificato di artefatti PyPI, i revisori confermano 457 delle 910 segnalazioni di AegisAsync come bug distinti. Alcuni test eseguibili riproducono durante l'esecuzione i comportamenti riscontrati nel codice sorgente, in tutte e sei le categorie di rischio.
I risultati dei test riguardano casi costruiti appositamente; i risultati sui pacchetti provengono invece da un campione stratificato e da uno specifico protocollo di revisione.
I percorsi limitati e l'analisi degli oggetti di AegisAsync possono tralasciare alcuni comportamenti o produrre segnalazioni errate.
Analisi
Dettagli
- Autori del paper originale
- Baihong Chen, Wen Li
- Inviato ad arXiv
- Licenza
- arXiv non-exclusive