Tok testsuiten fra seks tester over en grense på seksti sekunder til 135 beståtte på 8,9 sekunder ved å profilere hovedtråden og fjerne de to kallene den satt fast i under 3 989 av 4 017 prøver.
Arbeidet utført: september 2026
8.9 sekunder for en testsuite som før tok seksti
Situasjon. Testsuiten hadde en tidsgrense på seksti sekunder, og seks tester lå over den. En testsuite som tar over et minutt, slutter å bli kjørt før hver endring, og en suite som ikke kjøres før hver endring, er en rapport om fortiden. Instinktet i en slik situasjon er å heve grensen, og det er ved å heve grensen at en suite ender på ti minutter.
Oppgave. Tiden måtte finnes i stedet for å budsjetteres med, og det betydde å profilere suiten i stedet for å resonnere seg frem til hvilke tester som så dyre ut.
Handling. Profilen ble tatt på hovedtråden mens suiten kjørte, og resultatet motsa gjetningen. Hovedtråden befant seg inne i to kall i 3 989 av 4 017 målepunkter — så de trege testene var ikke de som gjorde mest arbeid, og nesten hver test gikk gjennom de samme to stedene. Det første var en fast ventetid som skulle la asynkront arbeid falle til ro før testen sjekket resultatet — i praksis en sleep, betalt av hver test som berørte hendelsesveien, enten arbeidet allerede var ferdig eller ikke. Den ble erstattet av venting på selve betingelsen med en tidsgrense, så en test som er klar på fem millisekunder, tar fem millisekunder, og bare en test som virkelig har hengt seg opp, betaler hele ventetiden. Det andre var oppsett per test som bygde en kostbar fixture på nytt hver gang, mens fixturen var skrivebeskyttet og kunne bygges én gang for hele suiten. Ingen av dem lå i en test noen ville ha pekt ut som treg; begge lå i den felles kodeveien, og det er derfor hele suiten var jevnt treg i stedet for at noen få tester skilte seg ut.
Resultat. Suiten gikk fra seks tester over seksti sekunder — 74 sekunder veggklokketid — til 135 tester som besto på 8,9, og dermed ligger den innenfor vinduet der den kjøres ved hver lagring. Forbeholdet er at den delte, skrivebeskyttede fixturen nå er et koblingspunkt — en test som endrer den, vil gi en feil i en annen test, og suitens fart avhenger av en disiplin som kompilatoren ikke håndhever.
Se tilbake på Fant ut at commit‑hookene og kvalitetsporten kjørte ulike kontroller mens et dokument lovet at de var de samme, ved å sammenligne de to listene i en test — de fem som bare noen gang ble kjørt manuelt, var de som leste CV‑teksten. Eller ta en titt på hele porteføljen.
Ett stykke av en lengre oversikt — og den ligger i sin helhet her.
Hver oppføring er skrevet på samme måte: situasjonen, oppgaven, hva vi gjorde, og hva som endret seg.