muttest 0.3.0: Transformă mutanții supraviețuitori într-o listă de lucruri de făcut

URMĂREȘTE-NE
16,065FaniÎmi place
1,142CititoriConectați-vă

(Acest articol a fost publicat pentru prima dată pe Jakub Sobolewskiși cu amabilitate a contribuit la R-bloggeri). (Puteți raporta problema legată de conținutul acestei pagini aici)


Doriți să vă distribuiți conținutul pe R-bloggeri? dați clic aici dacă aveți un blog, sau aici dacă nu aveți.

muttest 0.3.0: Transformă mutanții supraviețuitori într-o listă de lucruri de făcut

muttest până acum a imprimat doar pe consolă mutanții care au fost uciși și care au supraviețuit.

Aceasta este configurația minimă de care aveți nevoie pentru a acționa asupra rezultatelor testării mutațiilor, dar este departe de a fi optimă. Ștergeți terminalul, închideți IDE-ul și rezultatele dispar, dacă nu ați salvat rezultatul.

(email protected) rezolvă asta cu un raport HTML.

  1. Rulați-vă testele cu noul reporter JSON.
  2. Redați raportul.
  3. Deschideți-l în browser și fiecare mutant este așezat peste codul dvs. sursă.

Faceți clic pe cele care au supraviețuit și vedeți exact ce a alunecat pe lângă suita dvs. Acea listă de supraviețuitori este lista ta de lucru: fiecare este un test de candidat. Tu decizi care merită scris și care sunt doar zgomot.

📝 Citiți jurnalul complet de modificări aici.

Nou în testarea mutațiilor?

Acoperirea vă spune ce linii au rulat. Nu spune nimic despre dacă testele dvs. ar observa dacă acele linii ar fi greșite. Puteți șterge fiecare afirmație din suita dvs., alergați covrși încă vezi 100%.

Testarea mutațiilor pune întrebarea mai dificilă: dacă acest cod ar fi rupt subtil, ar eșua un test? Face mici modificări sursei dvs. (> devine >=, TRUE devine FALSE) și redă testele pentru fiecare versiune. Fiecare versiune modificată este a mutant. Dacă un test eșuează, mutantul este ucis. Dacă fiecare test încă trece, mutantul supravietuitși ai găsit un gol.

Un mutant supraviețuitor nu este o eroare de remediat. Este un test care lipsește, care ar putea ascunde un bug costisitor mai târziu.

Dacă doriți să vă scufundați mai adânc, postarea 0.2.0 trece prin el cu un exemplu.

Raportul

Rulați-vă testele de mutație cu JSONMutationReportersunați report()și obțineți un fișier HTML autonom.

Raport HTMLRaport HTML

Raport HTMLRaport HTML

Vezi aici exemplul de raport complet.

Iată ce face raportul pe care consola nu le poate face:

  • Codul sursă adnotat cu mutanți. Fiecare fișier este afișat cu codul său real și fiecare linie mutantă este marcată în linie. Îl citești pe supraviețuitor în context, în loc să reconstruiești unde era o anumită linie.
  • Scoruri pe fișier. Numărul total este un punct de plecare, nu un diagnostic. Raportul defalcă scorul în funcție de fișier, astfel încât să puteți vedea analizatorul la 95%, în timp ce modulul de validare este la 40%. Aceasta vă spune ce fișier să deschideți mai întâi.
  • Diferențele mutante pe linie. Faceți clic pe un mutant și vedeți exact ce s-a schimbat: linia originală, linia mutantă și dacă testele dvs. au distrus-o. Când ceva a supraviețuit, diferența vă spune prin ce fel de eroare potențială a scăpat.
  • Filtrați după stare. Raportul se deschide axat pe supraviețuitori, deoarece mutanții uciși și-au făcut deja treaba. Îi puteți aduce pe ceilalți înapoi când doriți imaginea completă, dar implicit este vizualizarea pentru care ați venit de fapt.
  • Navigare prin tastatură. Treceți prin mutanți fără a derula întregul fișier.

Acesta este fluxul de lucru – filtrați pentru supraviețuitori, parcurgeți lista de sus în jos și fiecare este o decizie: scrieți testul sau numiți-i zgomot și mergeți mai departe.

O listă de verificare prin care puteți lucra.

Ieșire JSON

Noul JSONMutationReporter scrie rezultatele într-un fișier care se conformează schemei elementelor de testare a mutațiilor. Schema aia nu este ceva ce am inventat-o. Este formatul partajat de StrykerJS, Stryker.NET, Stryker for Scala și alții. Dacă alte echipe din organizația dvs. folosesc deja Stryker și instrumentele sale de raportare, puteți conecta muttest rezultate direct în aceleași tablouri de bord.

library(muttest)

plan <- muttest_plan(
  source_files = "R/shipping.R",
  mutators = comparison_operators()
)

muttest(plan, reporter = JSONMutationReporter$new())

report()

JSONMutationReporter scrie lui muttest.json implicit și report() citește același fișier și scrie muttest.html lângă el, așa că cu setările implicite nu există nimic de conectat.

Dacă nu vă place raportul încorporat, fișierul JSON este acolo pentru a vă crea propriul. Plănuiesc să mențin această schemă stabilă, așa că nu vă faceți griji că raportul dvs. se va rupe la fiecare lansare următoare.

Urmăriți-l cum rulează, păstrați-l pentru mai târziu

De obicei, doriți ambele: un tabel de progres live în timp ce rularea are loc și un fișier salvat pentru a deschide ulterior. Înainte, ai ales un reporter și ai avut un singur comportament.

MultiReporter conduce mai mulți reporteri deodată. Hrăniți-l a ProgressMutationReporter si a JSONMutationReporter împreună. Consola se umple pe măsură ce mutanții sunt testați, iar fișierul JSON așteaptă când se termină.

muttest(
  plan,
  reporter = MultiReporter$new(
    ProgressMutationReporter$new(),
    JSONMutationReporter$new()
  )
)

Este exact aceeași idee ca testthatlui MultiReporter.

Schimbări de punctaj despre care merită să știți

Două modificări din această versiune vă vor muta scorul:

  • Mutanții eronați sunt acum uciși. Unele mutații nu eșuează doar o așteptare; ei fac codul aruncat înainte ca un test să poată afirma ceva. O mutație care produce o eroare este încă o mutație detectată de suita dvs., așa că 0.3.0 o consideră ucisă. Aceasta se potrivește cu PIT, Stryker și mutmut. Anterior muttest le-a socotit ca supraviețuiți, ceea ce a fost prea dur: testul a făcut prind schimbarea, doar a prins-o explodând.
  • Codul descoperit primește propria categorie. Sub FileTestStrategyun mutant dintr-un fișier sursă fără niciun fișier de test care se potrivește, folosit pentru a arăta identic cu un mutant pe care l-ai executat testele tale și l-a ratat. Sunt probleme diferite. Un mutant supraviețuit înseamnă că testele tale sunt slabe; un mutant descoperit înseamnă că nu există deloc teste. 0.3.0 raportează mutanții descoperiți ca separat no coverage categorie și îi lasă afară din punctaj, așa că codul netestat încetează să se mai mascheze ca mutanți scăpați și să-ți tragă numărul în jos pentru un motiv greșit.

Dacă scorul tău se schimbă după actualizare, acesta este motivul. E mai sincer așa.

Povestește-mi despre experiența ta de utilizare muttest

Sper că această ediție va facilita analiza rezultatelor.

Solicitările de funcții sunt la fel de binevenite ca și rapoartele de erori.

Dominic Botezariu
Dominic Botezariuhttps://www.noobz.ro/
Creator de site și redactor-șef.

Cele mai noi știri

Pe același subiect

LĂSAȚI UN MESAJ

Vă rugăm să introduceți comentariul dvs.!
Introduceți aici numele dvs.