Domanda

C'è qualche strumento/libreria che calcola percentuale di "condizione/decisione copertura" di codice python.Ho trovato solo coverage.py ma calcola solo la percentuale di "copertura di istruzione".

È stato utile?

Soluzione

Coverage.py ora comprende la copertura ramo .

Per i curiosi: il codice non viene modificato prima di eseguire. La funzione di traccia tracce che seguono le linee che nell'esecuzione, e confrontare le informazioni con l'analisi statica del codice di byte compilato per trovare possibilità di percorso non eseguita.

Altri suggerimenti

Sei alla ricerca di complessità ciclomatica (Wikipedia) ? Calcola sostanzialmente il numero di percorsi attraverso un pezzo di codice. Ci sono alcuni progetti per calcolare che per il codice Python, per esempio PyMetrics o questo . Google porterà certamente su più.

Ma io non conosco nessun ulteriore integrazione con test di unità che vi mostrerà la copertura.

Non so di qualsiasi ramo di copertura di strumenti per Python, anche se ho contemplato la scrittura di uno.Il mio pensiero era quello di iniziare con l'AST e inserire strumentazione aggiuntiva per ogni punto di ramo.È fattibile, ma ci sono alcuni casi complessi.

Per esempio,

raise SomeException(x)

Filiale di copertura per questo deve verificare che SomeException(x) è stato completamente istanziato e non aumentare la propria eccezione.

assert x, "Oh No!: %r" % (x, y)

Questo deve verificare che il testo sul lato destro dell'affermazione affermazione è pienamente valutati.

return args.name or os.getenv("NAME") or die("no name present")

Ciascuno dei primi due termini deve essere controllato per il true/false percorso, ma non l'ultimo.L'ultimo, infatti, potrebbe anche non tornare.

Ci sono stati un sacco di casi di cui preoccuparsi e non avevo urgente bisogno di altri di curiosità, quindi non ho di andare ovunque.Anch'io mi chiedevo se potevo ottenere un sacco di falsi positivi, dove avrei bisogno di qualche modo per reprimere le avvertenze specifiche.

Se volete provare questa strada, iniziare con Python 2.6 o 3.0.In quelle versioni AST modulo è documentato ed è possibile creare il proprio AST nodi prima di generare il codice o .pyc file.

Non ho usato io stesso, ma se siete disposti a sostituire l'analisi di copertura con mutazione test , ho sentito parlare di un tester mutazione chiamata 'pester'.

Mentre facevo googling, ho anche imbattuto un elenco di strumenti di test pitone che menziona alcuni possibili strumenti di copertura del codice.

Lo stesso manutentore di coverage.py ha un articolo che discute un modo per ottenere informazioni sulla copertura a il livello di bytecode. Il metodo è un po 'kludgey: si tratta di ri-assemblare i file con i numeri di riga tweaked .pyc. Tuttavia, fornisce circa tanto granularità nella misura di copertura, come si può chiedere.

Analizzare e modificare l'AST è la risposta giusta, IMHO. Vedere questo documento Per una descrizione completa di ciò che dovete fare: "Branch Copertura Made Easy per arbitrarie Lingue"

http://www.semanticdesigns.com/Company/Publications/TestCoverage.pdf

Si presenta come "strumentale" implementa copertura delle condizioni:

strumentale su PyPI

link di coverage.py e strumentale

Qualcuno ha provato? Ha un piccolo numero di versione. Ho bisogno di qualcosa che posso fidarmi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top