Press "Enter" to skip to content

GOTO 2015 • Mutation Testing in Python • Austin Bingham


quindi è tardi nel pomeriggio quindi energia
è un po ‘basso che hai appena avuto un po’
per mangiare così ciao saluta , dai, dai
riempire la stanza ciao ok grande grande um
come probabilmente saprai, ora saremo
parlando di test di mutazione ed è
un test di mutazione in Python perché
Parlerò di un’implementazione
in Python ma la maggior parte di questo discorso è di più
ampiamente applicabile non ha
qualsiasi cosa da fare necessariamente con Python I
capita di scrivere molto di Python
codice e questo è quello che ho scritto qui chi
ha fatto test di mutazione o addirittura lo sa
quello che è appena alzare la mano non lo è
tutti bravi come molti di voi
esperienza con qualcosa come p i– t
java sta testando lo strumento di test di Python
nessuno di interessante va bene perché è così
questo è il gold standard che il mio è
molta ricerca ha confrontato con la loro i
lavorare per in parte sessanta a nord un piccolo
società di consulenza software in Norvegia
siamo basati tutti in oslo e in Stavanger
da dove vengo sulla costa occidentale
rappresentare giusto quindi c’è un’app tu
Probabilmente tutti sanno su di esso ormai il
unica cosa che dovete sapere su di esso è
la faccina verde che puoi ignorare
resto di esso comprese le domande ma
prenderemo le domande alla fine sono
cercherò di risparmiare tempo per quelli a
un po ‘di me stesso questo è il mio mondo
quel punto arancione in Texas è Austin Texas
da dove vengo originariamente verso le sette
beh, Austin è una città fantastica
Università del Texas, quindi noi
la più grande università e noi
università pubblica di alto livello è dove io
è andato alla scuola di specializzazione è meraviglioso
posto vai corna Austin è una città bellissima
ed è avuto una vera personalità ad esso
è la parte migliore del Texas, se mai
andare in Texas andare ad Austin questo è un
statua di Stevie Ray Vaughan un famoso
chitarrista di Austin che è morto
tragicamente e questa è una statua della città
costruito questo è un po ‘come rappresenta
si sentono su se stessi sono
davvero grande nella musica dal vivo rock and roll
blues quel tipo di roba è davvero
bella città se ne hai la possibilità
visitatelo circa sette anni fa mi sono trasferito
in un posto che è molto diverso questo è
Steve Unger questo è Lucifer ode dal
pulpito rock se sei mai stato in
Stavanger probabilmente sei stato a
esattamente quella vista è la più bella
posizionare in Norvegia nessun argomento che abbiamo
diversi tipi di statue lì questi
sono spade di pietra alte 20 metri
la terra per rappresentare l’unificazione
dei regni della Norvegia centinaia di
anni fa
circa 20 minuti da casa mia tutto questo
roba è un bel posto da visitare se
non sei mai stato Devon è stato grande e
è lì che ho trovato 60 North pochi
anni fa, così tanto su di me, muoviamoci
su test di mutazione ho sentito parlare per la prima volta
test di mutazione forse due anni fa
da un tizio di nome sev Rose che se tu
mai se vai alle conferenze puoi farlo
aver sentito parlare di lui è davvero fantastico
speaker se hai la possibilità di vederlo parlare
su qualsiasi argomento e chiedergli cosa è
appassionato di questo lo farà finita
lui è un bravo ragazzo ed era qualcosa
che ha risuonato con me test di mutazione
che descriverò in grande dettaglio
in risonanza con il mio modo di pensare
programmazione e il tipo di questo il modo
il mio cervello funziona e mi sono molto interessato
in esso e si appresta a scriverne
roba di test sulle mutazioni in Python che
è la lingua che uso dato dato
la scelta è una tecnica davvero accurata
è una specie di ricerca II non interamente
pratico ma penso che lo troverete tutti
che le idee e sono davvero buone
e qualcosa a cui dovremmo sforzarci
avere buoni strumenti per la maggior parte di ciò che sono
sperando di fare in questo discorso è quello di ottenere
attraverso quali test di mutazione è ciò che sono
le sfide e come e come ottenerti
interessati in esso sufficiente che si potrebbe
cominciare a pensarci come bene e
contribuendo con il tuo contributo personale
a questi strumenti per gli altri strumenti e
rendendolo un ecosistema migliore perché
questo è il tipo di dove siamo nel mondo
con test di mutazione penso che sia così
test di mutazione si inizia con due
locali hai il tuo codice sotto test
la tua domanda o il tuo grimorio
tutto ciò è il codice che si presume
lavoro e hai una suite di test che tu
presumere completamente la funzionalità di
quel corpo di codice che tu introduci a
cambiamento controllato singolo e lo faremo
discuterne con una buona dose di dettagli
ma una piccola modifica al codice
solo uno alla volta perché questo è
scienza giusta uno alla volta che vuoi
deke gonfia le modifiche che esegui
la tua suite di test e se la tua suite di test
è perfetto sarà non lo rileverà
fallirà dirà nah qualcosa
hai rotto un cambiamento nel tuo test
suite lo scoprirà questo è l’ideale
il tipo di test sulle mutazioni funziona
questa base è l’ assunto che il tuo
la suite di test cattura bene tutti i difetti
in realtà ti aiuta a fare un test migliore
suite nel processo, ma quando si ottiene
questi test falliscono quando non si effettua il test
fallimenti questo è quando sai di avere
un problema che hai apportato una modifica al tuo
codice ma la tua suite di test non ha capito
fuori così questo ha implicazioni per
o la tua suite di test o il tuo codice
noi parleremo in un po ‘di dettagli
ma questa è l’ idea fondamentale piccola
cambiare eseguire la suite di test vedere se è così
fallisce e se non lo fa, allora esamina
il tuo codice o i tuoi test di base
l’algoritmo è davvero semplice almeno il
algoritmo di base come vi ho implementato
sono presenti alcuni operatori di operatori
le cose che fanno i piccoli cambiamenti
al tuo codice hai un numero di siti
nel tuo codice dove possono essere questi operatori
applicato e quindi così hai questo
questo due spazio su cui lavori
operatori e siti che gli operatori lavorano
e potresti modificare il codice e tu
eseguire i test è l’idea di base
e probabilmente subito dicendo che
ok, questo si tradurrà in un sacco di
succedono cose e tu hai ragione
fa succedere un sacco di cose
ci vuole molto tempo per fare un pieno
suite di test di mutazioni su qualsiasi cosa di
dimensioni apprezzabili ma questa è la base
idea molto molto semplice, quindi cosa succede
quando noi quando eseguiamo questa suite di test, cosa?
sono quali sono i possibili risultati lì
sono tre classi di risultati quando corro
la mia suite di test è quella che chiamiamo uccisa
questo è questo è dalla ricerca
la letteratura è davvero oh tu hai ucciso
il mutante la tua suite di test ha fallito
ed è fallito perché ha rilevato
il cambiamento che hai fatto in qualche modo
forma o forma così è la tua suite di test
svolgere il suo lavoro e questo è bello è
ha rilevato correttamente il mutante che stiamo per
inizia a usare parole come mutanti e uccisi
e sopravvissuto e cose e suoni
molto brutale ed è un po ‘ come
un fumetto che è un po ‘il motivo per cui lo è
divertimento un’altra classe di risultati sono ciò che noi
chiama incompetente ottieni un mutante che è
incompetente e questi sono in genere
casi in cui la modifica causa il tuo
programma o la tua suite di test per solo seg
colpa o di fare un’eccezione o di fare
qualcosa in cui proprio non può continuare così
la tua suite di test in realtà non finisce
e dai risultati in cui muore
un modo orribile che è normalmente cosa
i mutanti incompetenti sono come se ci fosse un
classe molto peggiore di mutanti incompetenti
oh e quelli sono quelli che entrano in
loop infiniti e discuteremo di quelli
in un po ‘e loro sono
difficile tecnicamente impossibile da affrontare
con finalmente hai le cose che
sopravvissuto ai mutanti che non lo sono
rilevato dalla tua suite di test questo è ciò che
non vuoi succedere questo è ciò che
stai cercando di evitare di provarci
ridurre il numero di sopravvissuti che hai
in ogni corsa e ci sono sopravvissuti
ottieni significa una delle due cose e questa
richiede la tua analisi per determinare
quale di queste due cose è, ma è così
trova un riflettore sul tuo codice
i tuoi test sono inadeguati e questo è
molto tipico nessuno di noi veramente in realtà
la vita ha le suite di prova perfette così
test di mutazione ci aiuta a identificare il
debolezza
nei nostri test Suite e stringili
un’altra possibilità reale però e
in particolare sui sistemi legacy loro
sistemi che sono in forte sviluppo
è che hai qualcosa di mutato
codice che non ha alcun test e questo
non ha alcun test da quando nessuno
si preoccupa di quel codice che non sta facendo
qualsiasi cosa non rappresenta una caratteristica
o supporta qualsiasi funzionalità nel tuo codice e
così il riflettore che prova la mutazione
brilla nel tuo codice dice che ne hai bisogno
test più o migliori o è necessario eseguire lo zapping
quel codice se ti interessa liberarti
di codice estraneo perché codice intendo
come penso che siamo tutti d’accordo ora è a
responsabilità non è un bene che non lo fai
voglio più codice intorno a cui entra
il modo in cui le cose vuoi rimuovere
codice se effettivamente non supporta nessuno
caratteristiche importanti quindi l’obiettivo ovviamente
è uccidere tutti i mutanti che vuoi
tasso di mortalità del cento per cento zero per cento
tasso di sopravvivenza e quindi spero di usare a
meme mi impegno tutte le le persone nel
pubblico giusto il famoso meme uccidere tutti
il qualcosa sono i mutanti quali sono i
obiettivi quindi di mutazione per capire perché lo farebbero
si passa attraverso il problema di fare questo
l’obiettivo numero uno è la copertura
analisi molte persone già ne fanno
tipo di analisi della copertura in cui vengono eseguiti
la loro suite di test e ottengono un po ‘
seleziona la casella per ogni riga di codice che dice
questa linea è stata eseguita questa linea era
eseguito e questo è fantastico che è un tipo
di copertura ma questo è puramente
dicendoti qual è la linea che la esegue
non ti dice nulla sul fatto
i test hanno verificato significativamente il
funzionalità o la logica di quello
linea di codice quindi quale test di mutazione
ti lascia fare è verificare il
funzionalità verifica la logica il
significato di quella linea di codice che dice
te se ho fatto un arbitrario
cambiamento effettivamente arbitrario in questo
linea di codice rileva la mia suite di test
e questo è molto importante, lo adoro
grafico perché in qualche modo comunica
una specie di cieco stupido
ottimismo di sì sai che abbiamo coperto tutto
le nostre linee di codice il nostro test Suites
perfetto quando in realtà lo sono
non ci sono molte suite di prova
perdere tempo perché funzionano bene
una riga di codice ma non te lo dico
qualsiasi cosa sulla tua qualità
software che è l’obiettivo numero uno e
questo è che è probabilmente il più comune
obiettivo è quello che la gente vuole
pensa più spesso quando pensano
sulla mutazione testando l’altro di
corso sta rilevando il codice non necessario
quello di cui ho parlato prima si è sbarazzato di
il codice che non ti serve più così
questa immagine molto probabilmente voi
riconoscere che è una foto di parte di
il sistema gastrointestinale e il
un po ‘importante è qui alla fine
il processo vermiforme è a forma di verme
processo o l’appendice
giustamente siamo andati tutti bene
almeno avere un’appendice statisticamente
molti di noi hanno un’appendice e quando io
Stavo crescendo mi è stato insegnato che sai
che l’ appendice è parte vestigiale
del corpo per cui non ne abbiamo bisogno
qualsiasi cosa e in effetti se si va a
dipendenza e ectomia e averlo
rimosso sarai sopravvissuto sarai giusto
bene e quindi in un certo senso questo è gentile
di ciò che sta facendo il test della mutazione
trovare le cose che non abbiamo più
bisogno in modo siamo in grado di sbarazzarsi di loro
è interessante il tipo di svolta
morale per la storia, lo sai nel
negli ultimi anni stiamo iniziando a trovare
sai che i dottori stanno dicendo bene
in realtà qualcosa sta succedendo
nell’appendice non è terribile
più importante ma in realtà lo fa
fare qualcosa quindi immagino la morale qui
è questo quando il test delle mutazioni brilla a
luce sul vostro codice che devi davvero
riflettere su è un problema nel
test suite o è un po ‘
codice che non ho più bisogno non è
sempre che taglia e asciuga e questo è
dove i tuoi ragionamenti sono le tue abilità
uno sviluppatore entra in gioco, quindi non farlo
necessariamente tagliare sempre l’appendice
pensa se tu o no davvero
ho bisogno dell’appendice e mi piace la grafica
è una specie di immagine fredda penso che sia
um Grey’s Anatomy quindi è un po ‘famoso
Grey’s Anatomy il libro non lo show televisivo
che non ho mai visto così quali sono
alcuni esempi di mutazioni che ho parlato
su questa nozione di operatori è giusto
qualcuno sa che cosa è questa falena perché io
potrebbe averlo lì è si chiama
il muschio al pepe
potrebbe avere un nome diverso nell’altro
lingue ma durante l’industriale
rivoluzione o pre rivoluzione industriale
nel Regno Unito queste falene erano in gran parte bianche
e potevano sedersi su calcare
edifici e in gran parte camuffato la
La rivoluzione industriale arriva a bruciare a
sacco di carbone è tutto coperto
polvere di carbone e diventa nero e questi mod
e tu Teta ad essere nero quasi dentro
nel giro di poche generazioni
perché i bianchi hanno mangiato bene
in modo che sia lassù perché loro
evoluto in questo tipo di studio e
era la prova dell’evoluzione, così avanti
avanti una foto carina un tipico esempio
di un operatore viene sostituito relazionale
operatore in questo caso stiamo sostituendo
più grande che con meno di così siamo
andando letteralmente alla ricerca del codice
per maggiori di simboli e scambi
li fuori e tu speri che il tuo
test possiamo prendere qualcosa di simile
questo è un bel cambiamento egregio vero
Saresti sorpreso, ma questo è un problema
è un tipico esempio del tipo di
cosa che un operatore di mutazione farebbe
in realtà non erano queste le scienze missilistiche
cose semplici e ricorda che stai facendo
questi uno alla volta e poi correndo
la tua suite di test completa così puoi immaginare
come questo si gonfia in un’enorme quantità di
runtime necessario per eseguire una mutazione completa
test eseguire un altro grande esempio è
interrompere la sostituzione continua dove tu
fare una pausa da qualche parte nel codice I
Supponiamo che tutti sappiano cosa rompono e
continuano sono e il loro linguaggio di
scelta e sostituirlo con il continuare
e questo è un ottimo modo per presentare
Ovviamente i cicli infiniti sono proprio una rottura
presunto per buttarti fuori da un ciclo e
si continua dice oh solo continuare ad andare
quindi questo è un ottimo modo per creare un ordinamento
di mutanti che è incompetente perché
la suite di test non finisce mai ma non puoi
lo scopriamo davvero e dobbiamo parlare
sui modi per migliorare questo problema
questa è la lista degli operatori che io
piano per implementare per il Python per il
Implementazione di Python e intendo che non lo sono
intenzione di andare oltre tutti questi avete
un po ‘di senso di quello che sono ma vedi
cose come l’ eccezione di deglutire
quindi aggiungendo del codice che prende solo un
eccezione e non lascia nessuno dei
i gestori lavorano cose come penso
c’è sì soppressione super chiamata dove
tu rimuovi le chiamate alla classe base
implementazioni di funzioni come cose
e va bene se stai programmando
avanzato lis lingue diverse da
Python dirai che questi non si applicano a
io e tu hai ragione una specie di ricerca
l’area del test di mutazione è
decidere quali sono i ragionevoli
operatori per una determinata lingua cosa
si applica in Lisp non ha intenzione di applicare
e C non sta andando ad un piano Haskell ecc
ecc ecc, quindi questi sono necessariamente
Python specifico ma alcuni di questi lo farebbero
applicare al lavoro su di voi sanno cose
eccezioni in classi e così via ma
questi ti danno un’idea di che tipo di
operatori che dovresti affrontare in modo completo
suite di test di mutazioni e si potrebbe
inventa il tuo e vedremo
in realtà l’implementazione che ho
utilizza un sistema plug-in per gli operatori
se ne hai di speciali forse per a
l’ API specifica che stai sviluppando potresti
considera di aggiungere quelli nel sistema come
bene se questo ha senso per il tuo um per
il tuo caso d’uso quindi quali sono i
complessità di test di mutazione è
sai che è concettualmente piuttosto semplice
in molti modi apporta una modifica al tuo test
suite registra i risultati ma sta facendo
questo in modo ciecamente e ingenuamente risulta in alcuni
le difficoltà piuttosto gravi fanno nessuno
sai cos’è
questo è l’ esperimento del campo base della regina
e questo è un filtro pieno di tonalità
drenando in un barattolo e la goccia
succede una volta e una volta su circa
due anni e non so davvero cosa
l’obiettivo della X
Behrman, ma è stato in esecuzione per a
da molto tempo penso che l’obiettivo del
l’esperimento è per il ragazzo che sta correndo
per vederlo realmente capita, penso
non l’ha mai visto , quindi lo sai sempre
fa una pausa caffè e torna indietro
ed è caduto povero ragazzo ma è così
rappresenta le cose che richiedono molto un
passo di lunga data che cade da un imbuto
ci vuole molto tempo per cosa facciamo
conto di questo ovviamente non può essere
gestendo questo ogni giorno se ne occorrono di più
di un giorno per eseguire una cosa è che si
può paralizzare il più possibile è
un parallelo imbarazzante dice che dieci
volte imbarazzante il parallelo
problema che puoi se ne hai mille
core puoi eseguire migliaia di test a
allo stesso tempo potresti uccidere il tuo disco
a quel punto ma concettualmente è possibile
estendetelo così tanto e questo è
sono tutti gli strumenti che conosco
fare questo in qualche modo il mio conta
quanti core ha ciascun sistema e viene eseguito
che molti alla volta un’altra cosa tu
può fare è eseguire eseguire una linea di base completa
iniziare con una linea di base completa dove
si esegue la mutazione completa della suite di test
suite di test e ottenere alcune statistiche da
che conosci il tasso di sopravvivenza del cinque percento
o qualunque cosa sia dopo di ciò che puoi
fare cose come solo eseguire i test che
pensi che il codice touch modificato e quello
riduce drasticamente lo spazio del test
devi correre un po ‘ più facilmente
è di mormorare solo il codice che conosci
stato modificato o aggiunto il motivo il
la ragione è un po ‘ più semplice la seconda
uno è un po ‘più facile che il primo è
questo primo che potrebbe essere un po ‘
difficile da ottenere lo so in Python
strumenti per determinare che sono un po ‘
se proprio quelli che ho provato almeno questo
d’ altra parte è davvero
Semplicemente guardi il tuo
git diff e dire ok a questa linea questo
allinea questa linea muta solo quelle linee
e che ridurrà di nuovo drasticamente
lo spazio che avete per la ricerca in a
la tua mutazione non è una di queste
esattamente perfetto però perché è possibile
immagina che qualsiasi cambiamento tu faccia
in realtà cambia è sicuro in questo caso
solo eseguendo test sul codice modificato bene
se ho modificato il mio codice e ci penso io
conosci il percorso attraverso il codice che a
sta per andare il test che potrei avere
modificato quel percorso che significa che ora
c’è altro codice che non sto testando
che dovrei provare ed è così
per poter scendere uno di questi
percorsi e questo ha la stessa identica
problemi ma puoi usare questi almeno
come euristica per davvero drasticamente
ridurre la quantità di tempo necessario per fare
esecuzioni successive dopo una linea di base, infine
puoi accelerare le tue suite di test se
hai mai visto Dan North o altri
di
BDD TDD star DD guys ti diranno
hai bisogno di veloci suite di prova e comunque
questa è un’altra ragione per cui lo sei
puoi fare test di mutazione in alcuni
modo ragionevole se le tue suite di prova prendono
due giorni potresti avere altri problemi
In genere, accelerare le prove su Suites
parlando una cosa buona anche se non lo è
sempre possibile ammetto il secondo
la complessità è una competenza che ti identifica
so che l’ho menzionato più incompetente
mutanti questi sono quelli che solo
tipo di errore seg o semplicemente crash
arbitrariamente non lo fanno loro
in realtà completare la suite di test e
quelli sono davvero facili da individuare naturalmente
basta dire oh morto cassa incompetente
ma poi c’è la classe di quelli
potenzialmente correre per sempre giusto così chi è
quello è Alan Turing e lui
detto sì , non è proprio Alan Turing
questo è davvero Alan Turing e
apocrifo ha detto sì buona fortuna con
che buona fortuna nel rilevare se o
non il programma che stai usando è mai
andando alla fine intendo che lo ha dimostrato
il problema dell’arresto è indecidibile
non puoi sapere prima del tempo del programma
finirà quindi non puoi
principio prendere un mutante e dire oh sì
beh lui correrà per sempre quindi sono solo
per ucciderlo devi averne un po ‘
euristiche qualche altro tipo di analisi
dice che è scappato troppo a lungo e lo uccide
ora così la cosa tipica da fare sei tu
eseguire alcuni di base della suite di test appena
su un mutante sano del sano
codice immutato e dire che prende 10
secondi e dici qualsiasi mutante per il quale
la suite di test richiede più di 30
secondi lo chiameremo semplicemente un infinito
loop e lo uccideremo e lo chiameremo
incompetenza quindi è questo il tipo
di strategia che devi applicare questo è
di nuovo tipo di parte della ricerca
elemento di test di mutazione tipo di cosa
lo rende interessante ad un certo livello e a
un po ‘poco pratico e il terzo
la complessità è ciò che chiamiamo il
mutanti equivalenti e su ok c’è
un po ‘di codice e la maggior parte non lo fai
devo davvero croc ma questo e
mutante equivalente è un mutante che è
praticamente inosservabile
quando dico praticamente non rilevabile
significa che potresti potenzialmente scrivere un
test per rilevare mutanti di determinati
classi ma farlo sarebbe ridicolo
e lo farò e quando lo attraverserò
esempio capirai forse un po ‘
meglio perché questo viene fuori dal
Documentazione Python effettivamente e poi
la funzione consuma solo in alcuni
sequenza di cose e itera attraverso
efficacemente per gli effetti collaterali
questo è ciò che consuma è no
preoccuparsi di più di ciò che questo fa questo è
il pezzo importante qui
costruisce una coda a doppio attacco e
passa quella cosa iterabile dentro e
che itera efficacemente attraverso il
cosa il più veloce possibile perché
la coda a doppio attacco è scritta in c non
in python e il bit interessante qui
è alla fine Max Lane 0, quindi stiamo dicendo
la coda a doppio attacco non può mai essere
più grande di 0 quindi non lo farai davvero
qualsiasi cosa tranne forzare l’iterazione ora
cosa succederà quando lo farai
test di mutazione è la mutazione il
mutazione testando dove sarà
alla fine arriva allo zero e lo farà
avere un operatore chiamato costante
sostituzione che cerca costanti
e li sostituisce con un diverso
costante ora sostituirlo con uno o
un migliaio o un sei negativo o qualcosa del genere
così se lo sostituisce con uno
che è quello che fa il raggio cosmico adesso
il mio strumento per test di mutazioni tutto
funziona ancora bene e l’unico modo
per rilevare che è stato cambiato in a
Uno è se riesci a scavare nella tua memoria
allocatore non solo il tuo sistema operativo ma i pitoni
allocatore di memoria e determinato che a
extra int o oggetto è stato assegnato
da qualche parte e nessuno ha prove da fare
è che è così ridicolo
prova a scrivere che non lo faresti mai
ed è per questo che è praticamente
inosservabile no ma non sprecheresti
è il momento di farlo, questo è il genere
di cosa è quello che è un
ti equivalente e questo è un buon esempio
di un mutante equivalente e mi piace questo
esempio perché questo è idiota Python
questo è quello che ti dicono di fare da parte del
piccola documentazione ufficiale ufficiale
se se ne volessi consumare un po ‘iterabile
quindi tre complessità con mutazione
test in modo che è una sorta di rapido
panoramica dei test di mutazione in generale
e poi di cosa abbiamo appena parlato lì
si applica essenzialmente ad ogni istanza di
strumento di test delle mutazioni per ogni lingua
nel mondo che è la teoria di
test di mutazione va bene che stiamo facendo abbastanza
bene qui il resto di questo discorso è di circa
cosmic-ray uno strumento di test di mutazione per
python di nuovo questo strumento non lo sai
non è una forza industriale, non lo è
davvero pronto per qualcosa di diverso da
altri tipo di hacking in giro su
altri hobbisti forse ma di nuovo io
voglio avere queste idee là fuori
perché penso che siano davvero il tipo
di necessità e spero che alcuni di voi
essere afferrato dalle idee tanto quanto me
è stato afferrato da loro quando ho visto parlare Seb
di tanto in tanto iniziamo a guardare alcuni
Codice Python qui ma in realtà non lo fa
importa facilmente qualsiasi pitone
leggi ma puoi sperare un po ‘
traduci ciò che vedi qui al tuo
linguaggio
la primissima cosa che cava cosmica
ha a che fare ancora una volta non ti preoccupare
dondolo tutto quel codice è capito
cosa cambierà e
quello che facciamo è quello che chiediamo all’utente
per favore dacci il nome del pacchetto
vuoi lavorare di nuovo così è un po ‘
la granularità e questo modulo sottile
funzione non fa tutto quel lavoro che
le cose belle qui sono dove
le frecce rosse sono così lasciatemi fare un backup a
seconda una delle cose che davvero
mi ha afferrato per l’intero sviluppo
il processo di pioggia cosmica era come i pitoni
sembrava avere tutti i pezzi e i pezzi
c’è bisogno di molte cose che potrebbero
essere davvero molto difficile in mutazione
test per trovare il codice da testare
modificando il codice forse dovendo
ricompilare il codice eseguendo Suite di test
generando dinamicamente cose multiple
processi e così via e tipo Python
di fatto che relativamente semplice
piacevolmente così e molto di ciò viene
fino al tipo di architettura di
come le lingue messe insieme se tu um
fare un piccolo diversivo nel software
architettura se sei veramente fisico
l’architettura c’è che c’è un ragazzo
chiamato Vitruvio da Roma antica e lui
ha scritto il sai la cosa su
architettura nel corso della giornata e ha detto
c’erano tre cose su
architettura che era importante per te
la durata di esso efficacemente il
merce se ha fatto cosa
doveva fare e se o no
è stato delizioso e sì ho dimenticato il
latino di esso, ma la parte deliziosa è
quello che mi ha portato qui è stato continuamente
felice come ho scritto questo codice per trovare
che le parti dure erano almeno state
pensato dai progettisti della
lingua e spero che se lo fai
tipo di lavoro nella propria lingua
trova la stessa cosa perché altrimenti io
avrebbe rinunciato se queste parti dure
non era stato scritto per me avrei voluto
ha detto che non ne vale la pena perché
sono pigro e non ho tempo infinito così
una cosa che era veramente pulita è questa
questo api accede al sistema di importazione
quindi c’è una parola chiave chiamata import e
gli dai un nome e ne importa il
pacchetto e lega i nomi e le cose per
tutto ciò è programmaticamente
accessibile attraverso questa cosa chiamata
laboratorio di importazione che fa parte dello standard
libreria così posso passarlo il nome del modulo
e importa il modulo per me grande
è una cosa davvero difficile da fare
il modo in cui ora posso eseguire la scansione di questo modulo
oggetto per sottomoduli che è veramente
tutta questa funzione lo sta facendo ora che ho
ho il modulo e cerco il suo percorso
il file system e utilizzare l’utilità del pacchetto
iterare i suoi sub-moduli in modo da non volere
dedicare troppo tempo a questo eccetto a
Dite questo questo era un pezzo di codice che io
era preoccupato per la scrittura e ho trovato
che in realtà era piacevolmente semplice
e ho imparato un po ‘su come
– importa sotto il cofano che è
bene perché faccio un sacco di Python
allenarsi aiuta se conosco questo tipo di
roba giusta il tipo di prossima parte in movimento
è come si esegue test questo è uno dei
le cose primarie ovviamente
il raggio cosmico deve fare ora ci sono circa
un migliaio di test o test unitari diversi
sistemi e pacchetti di automazione e
framework per Python quindi non ho potuto
ovviamente implementare il supporto per tutti
loro quindi ho implementato un sistema plug-in
che ti consente di fornire un
implementazione per il tuo gusto di
unità di prova che devo – che io
fornire test unitari interni che è il
o in-house ma come parte del raggio cosmico
uno è l’unit test stesso dello standard
sistema di test unità di biblioteche e PI
test che è probabilmente il più popolare
uno là fuori ma a causa del plug-in
il sistema che sto usando è in grado di fornire
quello che vuoi se ne hai uno
sistema di test in-house si può carina
banale a fornire supporto per se tu
stavo usando Python e tu vuoi un bene
sistema di plug-in voglio dare un po ‘
gridare a stivatore parte del
Il sistema OpenStack è meraviglioso è a
ottimo sistema di plugin e ha fatto questo lavoro
molto molto facile l’unica cosa che davvero
deve fare per implementarne uno nuovo
implementare una sottoclasse di ciò che viene chiamato
prova Runner e in quella classe implementa
una funzione di corsa di sottolineatura ed è lavoro
è solo eseguire tutti i test che trova
sotto una directory è davvero così
semplice è probabilmente semplicistico lo farò
probabilmente incontrerò eventualmente qualche unità
sistema di test per il quale questo è
insufficiente, nel qual caso lo faremo
modifica un po ‘l’API del plug-in ma
di nuovo i dettagli non sono tutto questo
importante ma è un elemento importante
di qualsiasi sistema di mutazione che trova i test
che stanno per essere eseguito è qualcosa
si deve affrontare questo è dove ottiene
davvero divertente e bello giusto questo è quando
entriamo nell’informatica di te
ora uno STS suoni albero di sintassi astratta
molto scientifico ed è questo tipo di
è molto tecnico questo è questo quando
pensi alla mutazione testando il
il tipo di carne del problema è divertente
roba che manipola la manipolazione del codice
il tuo ambiente eseguibile e così via
Python fornisce una cosa chiamata modulo
chiamato ast astratto sintassi albero è
parte della libreria standard e può
fare due fondamentalmente molto importante
cose per raggi cosmici
uno è può prendere il codice sorgente solo a
stringa con codice sorgente al suo interno e svolta
in un ast ti dà una struttura ad albero
puoi quindi attraversare in vari modi
e fornisce un set di essenzialmente
implementazioni di modelli di visitatori questi
i piccoli visitatori non hanno chiamato trasformatori
che può essere fatto per attraversare l’ albero
e avere la possibilità di sostituire le note
come vanno e questi due bit qui sono
essenzialmente come implementiamo il
fase di mutazione del raggio cosmico che troviamo
il file del codice sorgente rumoreggia il file
ingannare il codice un po ‘passarlo dentro
l’ ast generatore ottiene l’ ast e poi
attraversalo e lascia fare agli operatori
operare sui nodi mentre andiamo e lo faremo
guardalo con un po ‘di dettagli, ma questo
è la distanza in un certo senso il nucleo
le budella ordinate di qualsiasi mutazione
suite di test in modo che ci conduce direttamente
a cosa è un operatore cosa intendiamo?
quando diciamo che gli operatori dell’operatore sono
essenzialmente le cose responsabili
manipolando ad ast usano l’ast
modulo per sostituire i nodi sai cambiare
il più a un meno si può vedere in questo
caso questo tutto ciò che un operatore gli dà
questo pezzettino dell’albero e se il suo
il lavoro è sostituire + con – ecco cosa
lo fa sputa che fuori e lo infila
nell’albero e poi qualcuno esegue il
codice è molto semplice crearne uno nuovo
operatore se vuoi solo te
sottoclasse dall’operatore che a sua volta
occhiali da sole dal trasformatore di nodo noi
menzionato in precedenza e tu puoi fornire
anche questi come plugin
stivatore che ancora una volta biblioteca meravigliosa
hanno due lavori principali uno è quello di
identificare i luoghi nell’albero che
hanno il permesso di sapere come
mutare così questo ragazzo avrebbe segnalato quando lui
vede un nodo positivo che dici oh sì, lo so
come modificarlo riportandolo a
raggio cosmico e cosmico dove direbbe
ok bene, voglio che tu vada avanti e
modifica che è così che funzionano gli operatori
fondamentalmente sono molto molto semplici
no nessun singolo operatore è davvero tutto questo
complesso perché fanno sempre molto bene
cambiamenti di controllo molto piccoli in genere
vale a sostituire un nodo o eliminare un
intero sottoalbero fuori dal campo questo è un
esempio completo di un tipico operatore
davvero il punto qui è solo per
vedi che in realtà è molto molto piccolo
le sue sottoclassi dall’operatore che è
qualcosa di cosmico proprio questo
visitt unario ufficio del sapere
API del trasformatore e ha un nodo
e controlliamo di vedere ok questo nodo e
istanza di sottrazione unaria in caso affermativo
voglio segnalare che questo è un sito noi
sapere come mutare e se il macchinario
vuole che facciamo davvero la mutazione noi
ottenere questo viene chiamato e il nodo è
sostituito
essenzialmente sostituito sul posto con a
aggiunta unaria e sputare indietro questo è il
sapore di quasi tutti gli operatori e
tutti quelli che ho pensato pure
Non ho implementato tutti gli operatori
Ho detto prima molto molto semplice
molto semplice e il tipo di
cosa potresti aggiungere a parte tua
sistema come andate ora prima di entrare
alcuni dei prossimi frammenti di raggi cosmici
Voglio dare una rapida panoramica di come
funziona il sistema di caricamento del modulo dei pitoni
perché senza sapere che il resto di
non ha senso quindi questo è
entrare in un po ‘di specifiche Python
ma è una bella carina sofisticata
sistema elegante che ho trovato com’ero
alla ricerca di questa roba ci sono
tre parti principali la prima è queste
cose chiamate i cercatori e un Finder
è solo un oggetto che quando viene dato un nome
risponde con si o no so come
carica un modulo con quel nome così puoi
hai dei cercatori che nessuno sa come caricare
moduli fuori dai file zip fuori dalle reti
memorizza HTTP dal disco rigido o
ovunque ci siano tutti i tipi di metodi
per l’importazione di moduli in Python e tu
avere cercatori diversi per ognuno di essi
metodi quando un Finder sa come
caricare qualcosa intendo che dice sì
è il nome che il nome è qualcosa che io
riconosciuto che si suppone di sputare indietro a
caricatore
ora loader è il prossimo bit è
responsabile di prendere con quali importi
a un oggetto modulo vuoto solo tipo di
un guscio vuoto e riempiendolo
spazio dei nomi con nome nome collegamenti a
nome della classe per il nome della funzione per qualsiasi cosa
quindi il cercatore dice che sì, so come fare
qualcosa ma che importa il
loader fa il vero lavoro di riempimento
nello spazio dei nomi l’ultimo bit è questo
cosa chiamata sis meta path e sis meta
percorso è solo un elenco letteralmente un elenco di
cercatori e quando qualcuno dice in pitone
import foo python va bene prima cerca
lo sai che ho colpito l’importazione non va bene
next finder sai come importare
pippo scende la lista fino a quando qualcuno
dice di sì e se nessuno dice sì, allora tu
ottenere un’eccezione non è possibile importare che
quindi tutti questi messi insieme danno fondamentalmente
hai il controllo completo su come l’importazione
parola chiave mappa i nomi che ottiene
cose che effettivamente fa e questo è quello che
abbiamo bisogno di un controllo completo su come fare
i test funzionano per effettuare test di mutazione
lavoro perché i test del test Suites
noi stessi non modifichiamo mai le prove
bisogno di poter dire import foo e
ottenere mutato foo quando vogliamo mutato
cibo per essere a posto e quindi abbiamo bisogno di
avere un controllo a grana fine su questo e
catena del fuoco e quindi questo è quello che
il raggio cosmico fa la prima cosa
attuare è un cercatore ovviamente e il
finder non fa altro che associare
un nome un nome di modulo con un ast a
mutato ast così noi come parte del
l’algoritmo prende il pristine ast mutato
in qualche modo creare un cercatore che si lega
il nome del modulo muto è ast e stick
su nel meta percorso di sistema in modo che quando
qualcuno dice quando un test dice di importare
quel modulo ottiene la versione mutata
questo è questo mi ha colpito come davvero tipo di
pulito ed elegante e una specie di regalo
con un po ‘ conosci l’arco legato in cima
ti sei sentito davvero bene quando questo
il testimone ha iniziato a lavorare sul codice
incredibilmente semplice questo è tutto
proprio qui – documentazione ovviamente
di cui ho abbondanti quantità perché
Sono un buon programmatore
l’ unica cosa di cui hai davvero bisogno
capisco è che spec. così bene è cosa
Python chiama quando lo richiede
se questo finder può caricare il modulo
e diciamo solo che sai è il nome
che vogliono uguale al nome che
Mi è stata data in caso affermativo passare indietro l’ast
proprio qui nel contesto di un caricatore no
grande affare questo è davvero molto semplice
e il fatto che fosse così semplice
ti dà la sensazione che i designer di
questo sistema ha davvero pensato a loro
probabilmente non pensavo alla mutazione
testare se stessi ma non loro
pensate troppo strettamente hanno davvero pensato
in generale, per dare i programmatori a
runtime pieno controllo su loro hanno coraggio
il meccanismo del linguaggio stesso e
questo è ciò che stiamo entrando davvero
il coraggio di come Python lavora in toda
questo è il piano interrato inferiore di come
Python funziona tranne alcuni gruppi di C
il codice che arriva il prossimo bit è
caricatori così il cercatore quando riconosce
un nome sputa un caricatore e questo
caricatore tutto ciò che fa è prendere il ast
oggetto lo compili in un oggetto codice e
quindi esegui quell’oggetto codice nel file
lo spazio dei nomi del modulo va bene, a
il mazzo di verbage praticamente si riempie
una cosa del modulo per te usando il
mutato ast Oh
di nuovo super super sporco semplice questo è
l’ intera implementazione – ik e
commenti del ast loader e
puoi vedere che è una specie di magia di
la magia quaggiù ne abbiamo avuti alcuni
mutato ast lo compiliamo producendo
un oggetto codice eseguiamo quel codice
oggetto nel namespace del modulo
questo è passato a noi
che viene associato al nome del modulo in
il contesto del chiamante e questo è come il
i test hanno accesso a mutati ast e
questo sì di nuovo questo è un po ‘ caldo
sentimenti confusi che ottengo quando sono io quando penso
su questo codice e su che tipo di piacevole
era scrivere che progetto pulito
doveva lavorare su perché io
non doveva fare molto lavoro
e ne ho ricavato uno strumento preciso
ci sono alcuni altri pezzi e pezzi
non sono troppo specifici per i pitoni
Hai bisogno di pensare a se
finisci per sapere di pensare alla mutazione
testare da soli è il sandboxing
potenzialmente un mutante può fare ogni sorta di
cose bizzarre come il mutante potrebbe iniziare
fare cose come manipolare il sistema
meta percorsi o eliminazione di file o invio
ping a una stazione spaziale orbitante o
non sai che non sai cosa?
sta andando bene perché hai
mutato probabilmente non sta andando a pingare
una stazione spaziale ma intendo che abbiamo un missile
scienziati qui quindi chi lo sa in pratica
anche se vuoi evitare ciò che chiamo
cross mutante interferenza il potenziale
che possono influenzare l’un l’altro
funziona e quindi inquina e corrompe
l’output dal tuo test così
c’è questa libreria chiamata
multielaborazione che ha una sorta di a
discussioni come API che mi consente di farlo
generare i processi in un modo molto semplice
ed è così che faccio sandboxing ogni volta
Faccio una corsa per ogni mutante e ogni test
coppia di suite che ho creato a
processo separato per eseguire quello e quello
modo in cui posso garantire che nessuno lo è
calpestare lo spazio dei nomi di qualcun altro
nessuno spazio del modulo o altro
così è un po ‘pesante in un
un po ‘ un trucco ma funziona o sembra
lavoro davvero molto bene e lo sono
comodo che stia facendo il giusto
cosa almeno finché qualcuno non me lo dice
altrimenti prendi questo sono molto pitoni
specifico tranne il piccone è un attore
implementazione di un modello di attore in Python
è qualcuno qui intendo se tu sei un
programmatore erudito credo che probabilmente tu
chissà che modello di attore non dovresti
tutti conosco il modello di attore, voglio dire questo è questo
è una delle cose più importanti in
la mia opinione che dovremmo essere tutti
pensarci è fantastico
paradigma per lo sviluppo di programmi
in particolare i programmi che potrebbero prendere
vantaggio di enorme sai
parallelismo e tutti i core che abbiamo
sono disponibili al giorno d’oggi attori sono
semplice pensare che sono robusti
si adattano molto bene e scalano
davvero bene sono provati
matematicamente potresti leggerne un po ‘
libri affascinanti sul modello di attore
teoria
ce n’è uno chiamato il libro nero di a
ragazzo di nome Google, un ragazzo della stampa del MIT
e lui sa che spiega attore / modella
teoria in termini di relatività generale
e cose del genere che è solo veramente
affascinante da leggere e tu vieni via
pensando sì, questa è la risposta
davvero è ma sì per me attore / modello
roba è davvero semplifica la progettazione
semplifica lo spazio cognitivo che io
lavorare come programmatore perché
Non devo pensare a cose come
serrature e fili e come tante gare
condizioni e tutte queste cose che se
stai facendo la programmazione dei thread che hai
preoccuparsi di tutto questo scompare
perché semplifica enormemente il modello
con cui puoi lavorare senza
davvero vincolante le mani troppo strette così io
vedo davvero solo a guardarlo
benefici che vedo da quanto tempo fa
Ho mi va bene dieci che c’è di buono è che
questi tester mutanti ognuno di questi questo
questi sono i miei attori che sono
effettivamente eseguendo il test in modo che ciascuno di
questi è responsabile dell’avvio a
processo che poi esegue i test e io
basta fare tutti gli attori di cui ho bisogno
e ognuno di loro si nutre di questa cosa
chiamato la coda di processo erano loro il
attore del Queue Manager e tirano semplicemente
il prossimo pezzo di lavoro da fare
quella fila e loro lo fanno e non c’è
modo in cui potrebbero interferire con uno
un altro tutto quello che possono fare è parlarne
piccoli messaggi e potrei ridimensionarmi
potrebbe ridimensionarlo solo creando
più tester mutanti se ho 16 core I
crea 16 tester mutanti su questo solo io
fai quattro o cinque o qualunque sia il numero
è davvero ho visto questo schema finita
e ancora una volta che quello che inizi
con qualche programma che ha qualcosa di inerente
la concorrenza e si tenta di codificarlo
con discussioni o qualche altro paradigma
e poi fai un passo indietro e vai questo è un
vero casino questo dovrebbe essere semplice
perché concettualmente è molto semplice
e poi applichi il modello dell’attore ad esso
e il tuo codice diventa semplice diventa
qualcosa che puoi ragionare su qualcosa
puoi testare molto più facilmente perché
testare gli attori è banale solo per te
istanziare l’attore e lanciare messaggi
a questo e vedere quali messaggi vengono fuori
questa è l’unica cosa che gli attori possono fare
diventano davvero facili da testare e
sono davvero robusti e vanno avanti e avanti
ma sto finendo il tempo per cui guardo
l’attore modella qualunque lingua tu sia
usando qualunque cosa tu faccia, è davvero
davvero importante penso ed è divertente
è davvero divertente
finalmente uso una funzione in Python chiamata
IO asincrono è una caratteristica relativamente nuova
solo un ciclo di eventi che è stato progettato per
supporta l’ IO simultaneo ad alte prestazioni
e ho appena avuto questo ciclo di eventi seduti in un
loop che controlla i tester che dice di essere
siete tutti morti siete tutti morti voi
tutti morti e una volta che sono tutti morti il
il programma è fatto quindi questo è davvero un
Dettagli di implementazione Python di come farlo
determiniamo quando tutti gli attori sono
fatto ma se stai usando Python tu
dovrebbe imparare l’ I / O asincrono
perché è il futuro per molti
molte cose per la programmazione basata sugli eventi
programmare reattivo quel tipo di cose
in Python vero così come fa tutto questo
sorta di stare insieme la prima cosa
quel raggio cosmico è capire quale
test Runner utilizzerà il test unitario
PI test qualunque sia una linea di comando
opzione che l’utente passa e poi
capisce i moduli che sta per
muta lo scannerizza il pacchetto
elenco che individua tutto il
operatori che utilizzerà a causa di
Naturalmente gli operatori potrebbero essere forniti
da plugin esterni poi pigramente
genera una sequenza di mutati s s
e il pigro è importante perché se tu
cercare di generare la sequenza completa si
sarebbe davvero molto grande e c’è
nessun motivo per avere tutto in memoria a
allo stesso tempo, comunque, loro solo loro
viene generato come il test dei mutanti o
gli attori decidono di aver bisogno di un altro loro
vai e dammi un altro dammi
un altro me ne dà un altro e il
gestore code è responsabile
essenzialmente a dare il via a quelli come
sono necessari e poi per ciascuno
pendolarismo eseguiamo i test ogni test
gira in un nuovo processo e ogni stroncare
Laced il suo sistema locale etta percorsi nella sua
proprio processo e questo è veramente importante
fare in modo che voglio dire questo è
il sandboxing qui questo che ciascuno
processo ha il proprio sistema fuori dal percorso
e questo è fondamentale se tutti hanno condiviso un
sistema in un percorso ci sarebbe solo
il caos completo e capire come
fare questo correttamente era sì era
Completa il caos per un po ‘che stavo perdendo
la mia mente mi scusi bene che su di
è lì che ho potuto fare una rapida demo ma
è davvero solo a me sulla riga di comando
tipo di mostrare come funziona il programma
Penso che forse è meglio usare il tempo per
prendere le domande così se qualcuno ha qualche
domande ora è il momento e posso fare
una demo più tardi come dopo di noi che qualcuno vuole
per vederlo sono felice di mostrartelo prima
facciamo le domande lasciatemi dire
ricorda di valutare la sessione e il
solo il tasto importante è il grande
faccina sorridente e grazie sì
Ho pensato di usare la manipolazione AST
per altre cose non intendo davvero
è che è una domanda generale
Avevo pensato di usare l’ISD
modulo per cose al di là delle mutazioni
testando non proprio voglio dire è che è un
strumento per scopi generali non è mutazione
test specifici in qualsiasi senso ed è
una specie di cosa carina se vuoi farlo
generazione di codice e cose del genere
può certamente usare AST per farlo, ma io
non ho nessun piano in questo momento per usarlo
per qualsiasi altra cosa, ma se ne hai
idee pulite sai che è facile
modulo per usare correttamente la domanda era
ci sono altre mutazione di strumenti
testare strumenti che conosco sull’unico
quello che conosco è chiamato PIT o
forse è buca pronunciata ma è a
lo strumento java è apparentemente completo
robusta resistenza industriale pronta per l’uso
che ha un sacco di fan e un sacco di
utenti e un ragazzo davvero intelligente dietro il
progetto
Penso che la PI test org sia forse la
il nome è questo URL ma è pith
prova java che quello che google
lo troverai che lo è
sì è apparentemente un ottimo strumento e
solo una specie di anni luce oltre qualsiasi cosa
altro che è disponibile adesso ho detto
la domanda era che ho pensato
su come assistere gli utenti in
interpretando l’output che ottengono
perché sì, la prova della mutazione è giusta
tipo di brilla una luce e dice va bene
questo test è fallito o questo test lo sai
tutto è passato e blah blah blah
tipicamente quando ottieni i risultati
di raggi cosmici i risultati ti dicono il
linea che è stata cambiata e ti dice
la natura dell’operatore così è
abbastanza facile da capire cosa fosse
cambiato e quindi non è sempre tutto questo
difficile da capire cosa cosa
potrebbe essere davvero difficile da capire
a volte se quello che hai dentro è
equivalente a mutante che puoi ignorare
o se è qualcosa che devi davvero
preoccupati perché puoi immaginare
situazioni in cui si sostituisce maggiore
che con maggiore di uguale è a
abbastanza piccolo cambiamento logico e può
essere davvero può essere in realtà essere
impossibile come in C ++ e privato
metodo per testarlo effettivamente in modo diretto
modo quindi penso di rispondere alla tua domanda I
non ho pensato troppo a fornire
assistenza perché sembra che solo
avendo la posizione del cambiamento
sopravvissuto è in genere sufficiente e oltre
che dovresti avere davvero
sistema davvero intelligente per essere in grado di assistere
al di là
che penso di avere qualcos’altro che ero
devo dire e mi è volato via dal cervello
Mi scuso, okay, la domanda: cos’è?
tipico tasso di fallimento era o un tipico
tasso di sopravvivenza um non so che lo farei
sentire che mentirei se te lo dicessi
c’era un numero tipico ma sul
test che ho eseguito
Vedo che tutto da te ne conosce cento
cento per cento di mortalità
tasso che è quello che vuoi e questo è un
suite di test davvero buona ma in genere
è su piccoli progetti per te se tu
ha un povero e questo significa tipo di
tipica suite di test che potresti avere a
tasso di sopravvivenza davvero molto alto e
sei come il 90% in più perché
perché le suite di test non sono così
sensibile risulta molto spesso uno
una cosa su cui mi sto prendendo gioco e che rifletto
circa nelle prime ore del mattino è
quanto se il test di mutazione decolla
e diventa uno strumento più popolare
iniziamo a guidare il modo in cui scriviamo
test mi chiedo perché le cose
come Newton equivalenti e roba buona
se ci preoccupiamo di quelli che potrebbero
modificare il modo in cui scriviamo il nostro codice per rendere
è più testabile in un test di mutazione
il senso dentro è che una buona cosa o una
cosa brutta che questo questo tipo di arcano
il sistema di test ci obbliga a scrivere
codice in un certo modo e me ne sono andato
su un po ‘ di tangente, ma io
Non c’è una non c’è un numero che
potrei darti davvero dipende pesantemente
sul tipo di codice che hai il
numero di test e la qualità del tuo
domanda interessante relativa alla suite di test
e uno a cui non ho una risposta
ma spero che qualcuno lo capisca
è quanto il linguaggio determina il
efficacia del test dei mutanti sai se
parli con gli appassionati di haskell
ti dirò che ovviamente haskell è
il linguaggio perfetto e se compila
funziona e il test delle mutazioni non dovrebbe
anche essere necessario o in un utente potrebbe
dirti la stessa cosa che il codice è
così stretto che ogni mutante qualsiasi mutazione è
andando a far crollare le cose
e sarei interessante interessato a vedere
ricerca in quell’area solo su una specie
di livello personale si si la domanda
era come è correlato al tipo di
analisi di copertura del codice standard è
in realtà è come la copertura del codice
analisi sul codice standard degli steroidi
analisi della copertura più strumenti sarà semplicemente
vi dico va bene ho gestito la mia suite di test in
ogni riga di codice è stata eseguita se
quella linea di codice ha fatto la cosa giusta o
se la nostra suite di test è sensibile
abbastanza da dirci che abbiamo rotto
qualcosa che intendo perché è una mutazione
solo un sostituto per un sì è un bene
domanda intendo generalmente
che il follow-up è stato un bene
ragione per usare l’ uno sull’altro
Sono gli strumenti di analisi della copertura
generalmente molto più veloce, quindi c’è un
motivo per usarli ma non vorrei
non aspetterei di ottenere una copertura del 100% con
uno strumento standard quindi iniziare a utilizzare
test di mutazione vorrei usarli
in parallelo possono lavorare insieme
perché spesso gli strumenti di analisi di copertura
anche dirvi quali test esercitano quali
linea di codice e se si desidera utilizzare
quelli che le informazioni a ridurti
spazio di test della mutazione su un cambiamento
base che può essere davvero utile così loro
posso lavorare in tandem, suppongo in questo modo
sì
la ragione per cui lo fai è così
puoi essere sicuro che il
risultati sai quale cambiamento ha causato il
fallimento test suite se io se cambio dieci
cose in una volta e inizia la mia suite di test
a fallire Ho lasciato lasciato graffiare la mia testa
andando bene che cambia in qualche modo
di riduzione dello spazio binario come fare a
un sacco di test e poi se otteniamo un
fallimento poi solo la metà e poi solo
metà o qualcosa del genere sì II
questa è una buona domanda
Sono sicuro di aver pensato a questo ad alcuni
grado ma dentro e concluso che tu
fare un test alla volta è la strada da percorrere
vai e forse c’è una matematica
motivo per questo ma um penso che il
la spiegazione definitiva è che è il
modo scientifico cambia solo una variabile
alla volta ma suppongo che alla fine se
non sei troppo preoccupato per
mutazioni conflating come forse ho
una mutazione fatta da sola
causare un fallimento ma poi dentro se lo è
fatto in cambio con questo ragazzo allora
non ci sono fallimenti e tutto ad un tratto
sei davvero sicuro del tuo codice ma
in effetti è una merda, sì, non lo vuoi
essere in quella posizione sì così così
la domanda era se potessimo accelerare le cose
essenzialmente riducendo la portata del
test stiamo correndo e suppongo che sia così
quello è quello che sarebbe un raffinamento
al modo in cui corre il raggio cosmico ora puoi
diciamo invece di testare il tastic nel suo complesso
pacchetto di prova solo questa classe penso
è ragionevole ma dal momento che è
generalmente il tuo test Suites
responsabilità di inserire i mock e
roba che ottieni tutto gratis quando tu
prova la classe non è non è un po ‘
nuova responsabilità del Mutai
testando dolce sì, possono lavorare dentro
concerto molto bene ok grazie ancora e
se vuoi parlarne più tardi
solo prendimi nei corridoi Grazie
tu

Please follow and like us: