AI & Metode

Grøn, og alligevel i stykker

Et link på en af vores egne sider pegede på www.trailmem.com. Det så rigtigt ud. Det var stylet rigtigt, det lyste op når musen kørte hen over det, og markup'en var korrekt HTML.

Det førte ingen steder hen.

En adresse uden https:// foran læser browseren som en side på det site man allerede står på. Så linket landede på /bag-om/www.trailmem.com — en side der ikke findes. Ingen fejl. Ingen advarsel. Man opdager det først når man klikker.

Det er den fejlform der koster mest i software, og den har ingenting med at være uopmærksom at gøre: noget der lykkes uden at bevirke noget.

Hvad en test faktisk kan se

En test spørger koden. Den spørger: blev funktionen kaldt, returnerede den det rigtige, svarede serveren 200. Det er gode spørgsmål, og de fanger meget.

Men de er alle sammen spørgsmål stillet indefra. En test kan bekræfte at en knap findes i koden, at den har den rigtige tekst, og at et klik på den kalder det rigtige. Den kan ikke se at knappen sidder bag en anden knap. Den kan ikke se at teksten er klippet af på en telefon. Den kan ikke se at menuen er forsvundet i Safari.

Vi målte det på et af vores egne sites i denne uge: forsiden linkede til en prisside der ikke fandtes. Ikke i en time — i tre måneder. Alle tests var grønne. Alle sider svarede korrekt. Menupunktet var kommet frem, fordi menuer er indhold; siden det pegede på var ikke, fordi den var kode. To halvdele af den samme ting tog hver sin vej, og kun den ene ankom.

Der var ingen fejl at opdage. Der var kun en side der manglede.

Derfor åbner vi den

Lens er vores svar. Den åbner den rigtige side i en rigtig browser, gør det en bruger ville gøre, og gemmer billedet.

Det lyder mindre teknisk end det er. En browser er ikke en formalitet — det er det eneste sted hvor en side eksisterer som det den skal være. Alt før det er en beskrivelse af siden.

Så Lens klikker. Skriver i felter. Logger ind, hvis det man skal se ligger bag en adgangskode. Venter på at noget bliver færdigt. Og efter hvert skridt kan den tage et billede, som et menneske kan åbne bagefter.

Manuskriptet skrives i almindelige sætninger:

gå til forsiden
klik på Book tid
skriv navnet
forvent at der står Tak
tag et billede

Ingen kode. Det er med vilje: den der skal kunne læse hvad der blev kontrolleret, er ikke nødvendigvis den der skrev det.

Det et skærmbillede alene ikke kan

Her holder de fleste værktøjer op. De sammenligner det nye billede med det gamle og siger hvor mange pixels der har flyttet sig.

Det er en dårlig måling, og grunden er værd at forstå: et pixel-diff kan sige at noget har ændret sig. Det kan ikke sige om resultatet er brugbart. Flytter en knap sig ti pixels ned fordi teksten over den blev længere, er alt fint. Flytter den sig ti pixels ned og havner under en anden knap, er den væk. Samme tal, modsat konklusion.

Så Lens måler i stedet geometrien på den færdige side og spørger om skærmen hænger sammen:

  • Ligger noget oven på noget andet?
  • Er en tekst klippet af midt i en sætning?
  • Er et element havnet uden for skærmkanten?
  • Er kontrasten for lav til at nogen kan læse det?

Det er spørgsmål med et rigtigt svar, og de er uafhængige af hvad siden så ud som i går. Et alvorligt fund gør kørslen rød og standser leveringen — ikke fordi noget har ændret sig, men fordi resultatet ikke kan bruges.

Vil man have en model til at kigge med oveni, kan det slås til. Den kører på Mistral, hostet i Europa.

Den fælde vi selv gik i

Her er en historie mod os selv, og den er den bedste begrundelse vi har.

Vi kørte en kontrol af en side. Kontrollen klikkede på et felt for at begynde at redigere. Klikket lykkedes. Elementet var der. Der skete ingenting.

Fejlen dukkede først op et skridt senere — værktøjslinjen der skulle være kommet frem, kom ikke. Så alt pegede på værktøjslinjen, mens problemet var at klikket kom for tidligt: siden var stadig ved at starte op, og feltet var endnu ikke koblet til noget.

Fire kørsler gik med at lede det forkerte sted, fordi hvert instrument sagde at klikket var fint.

Det er samme form som det døde link, bare et lag dybere. En handling der lykkes uden at bevirke noget, og som rapporterer sig selv grøn. Det er ikke en fejl man finder ved at læse en log. Det er en fejl man finder ved at kigge.

Tre svar, ikke to

Den vigtigste enkeltting vi har lært af at bygge det her, kan skrives på én linje:

En kontrol der kun kan svare «ja» og «nej», er farlig. Den skal kunne svare «jeg kunne ikke se efter».

Vi rettede i denne uge et af vores egne værktøjer der meldte 37 fejl på et kundesite. Sytten af dem var værktøjets egne. Levende sider meldt døde, mailadresser den forsøgte at «hente», en server der bare ikke svarer på den ene slags forespørgsel.

Skaden er ikke tiden. Skaden er at et værktøj hvor halvdelen af advarslerne er forkerte, holder man op med at læse — og så bliver den ene ægte fejl usynlig blandt de nitten forkerte. Der var én ægte i bunken: et dødt link i en juridisk henvisning på siden med handelsbetingelser.

Derfor må en kontrol aldrig runde «jeg kunne ikke nå frem» op til «alt er fint», og heller ikke ned til «det er i stykker». Den tredje mulighed skal stå der som sin egen.

Hvad det betyder for dig

Du får ikke en rapport der siger at det virker. Du får et billede.

Hver ændring på dit website går igennem det her trin før den bliver til noget du kan se. Fejler kontrollen, ryger arbejdet tilbage til den AI-medarbejder der lavede det, og du får det aldrig at se. Går den igennem, følger der et skærmbillede med — gemt, så det stadig kan åbnes om et halvt år hvis nogen spørger hvordan siden så ud dengang.

Og det gælder uden undtagelse. Ingen af vores AI-medarbejdere har lov til at bruge en browser ved siden af. Der er én vej, og den efterlader et spor.

«Det virker» er en påstand. Et billede er et bevis.