← Nieuwste papers
💻 computer science

A Systematic Evaluation of Environmental Flakiness in JavaScript Tests

Dit artikel presenteert een systematische evaluatie van omgevingsafhankelijke flakiness in JavaScript-tests, identificeert de oorzaken gerelateerd aan besturingssystemen, Node.js-versies en browsers, en introduceert een lichtgewicht tool genaamd js-env-sanitizer om dergelijke tests te detecteren en te omzeilen zodat CI-pipelines stabiel blijven.

Oorspronkelijke auteurs: Negar Hashemi, Amjed Tahir, August Shi, Shawn Rasheed, Rachel Blagojevic

Gepubliceerd 2026-02-24
📖 5 min leestijd🧠 Diepgaand

Oorspronkelijke auteurs: Negar Hashemi, Amjed Tahir, August Shi, Shawn Rasheed, Rachel Blagojevic

Oorspronkelijk artikel gelicentieerd onder CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Dit is een AI-gegenereerde uitleg van het onderstaande artikel. Het is niet geschreven of goedgekeurd door de auteurs. Raadpleeg het oorspronkelijke artikel voor technische nauwkeurigheid. Lees de volledige disclaimer

Stel je voor dat je een chef-kok bent die een recept (een computerprogramma) test. Je hebt een perfecte taart gemaakt. Maar als je de taart in je eigen keuken bakt, is hij perfect. Zodra je hem echter in de keuken van je buurman bakt, zakt hij in elkaar. Of als je hem in een andere oven bakt, wordt hij verbrand.

In de wereld van softwareontwikkeling noemen we dit "flakiness" (wispelturigheid). Het betekent dat een test soms wel lukt en soms niet, zonder dat er iets aan de code is veranderd. Het is alsof de test "nervous" is.

Deze paper onderzoekt een specifiek soort van deze nervositeit: omgevingsflakiness. De auteurs vragen zich af: "Is het de taart die slecht is, of is het gewoon dat de ovens (de computers) anders zijn?"

Hier is een simpele uitleg van wat ze hebben gedaan, met behulp van alledaagse vergelijkingen:

1. Het Grote Experiment: De "Reis door de Wereld"

De onderzoekers (van universiteiten in Nieuw-Zeeland en de VS) wilden weten hoe vaak dit gebeurt in JavaScript (een populaire programmeertaal voor websites).

Ze pakten 116 populaire projecten (zoals grote, bekende receptenboeken) en stuurden ze op reis. Ze lieten dezelfde tests draaien op drie verschillende "locaties":

  • De Ovens (Besturingssystemen): Windows, macOS en Linux.
  • De Keukens (Node.js-versies): Verschillende versies van de software die de code uitvoert.
  • De Serveerders (Browsers): Chrome, Firefox, Safari, etc.

Het resultaat?
Het bleek een ware ramp. Van de 116 projecten waren 65 projecten "wispelturig" door de omgeving.

  • Sommige projecten faalden alleen op Windows (net als een taart die alleen in een gasoven lukt).
  • Sommige faalden alleen op bepaalde browsers (alsof een drankje alleen goed smaakt als je het uit een glazen beker drinkt, niet uit een plastic).
  • Het bleek dat Windows de grootste boosdoener was, vooral omdat het anders omgaat met bestandsnamen en paden dan de andere systemen.

2. Waarom gebeurt dit? (De Oorzaken)

De onderzoekers keken naar de "lijken" (de foutmeldingen) en vonden drie hoofdredenen waarom de taart mislukte:

  • De Taal van de Keuken (Besturingssysteem): Windows gebruikt soms andere tekens voor paden (zoals C:\map) dan Linux of Mac (/map). Als je code zegt "ga naar map", en de computer denkt "ik zoek een backslash", dan faalt het.
  • De Versie van het Recept (Node.js): Soms verandert een nieuwe versie van de software de regels. Een oude functie die "mag" in versie 18, is "verboden" in versie 22. De code probeert iets te doen dat de nieuwe versie niet meer toestaat.
  • De Serveerders (Browsers): Sommige browsers zijn net iets anders dan anderen. Wat in Chrome werkt, kan in Safari vastlopen omdat ze de regels voor het weergeven van websites anders interpreteren.

3. De Oplossing: De "Slimme Filter" (js-env-sanitizer)

Normaal gesproken, als een test faalt, stopt de hele bouwproces (CI/CD). De ontwikkelaars moeten dan stoppen met werken, de fout zoeken, en vaak is het gewoon een "nep-fout" omdat de test niet op die specifieke computer hoort te werken. Dit kost tijd en geld.

De onderzoekers bedachten een slimme oplossing: js-env-sanitizer.

Stel je voor dat je een slimme keukentimer hebt.

  • Normaal gesproken zegt de timer: "Als de taart niet perfect is, roep je de brandweer!" (De test faalt, het proces stopt).
  • Met deze nieuwe timer zeg je: "Als de taart mislukt alleen omdat we in de verkeerde keuken zitten, negeer het dan en schrijf het op in een logboek."

Hoe werkt het?
De ontwikkelaars kunnen een klein labeltje (een "annotatie") op hun test plakken. Bijvoorbeeld:

  • "Doe deze test alleen als we op Windows zitten."
  • "Negeer deze test als we Node.js versie 20 gebruiken."

Als de test nu faalt op de verkeerde omgeving, zegt het systeem niet: "FOUT!" (en stopt alles), maar zegt het: "Oke, deze test is voor een andere situatie. Ik sla hem over en ik schrijf het op."

Waarom is dit geweldig?

  1. Geen paniek: De bouwprocessen stoppen niet meer voor nep-fouten.
  2. Tijdwinst: Ontwikkelaars hoeven niet elke keer te kijken naar fouten die ze al weten te zijn.
  3. Duidelijkheid: Het systeem maakt een lijstje van alle "overgeslagen" tests, zodat ontwikkelaars later kunnen zien: "Ah, deze test werkt niet op Windows, laten we dat later fixen."

Conclusie

De boodschap van dit papier is simpel: Software is niet altijd overal hetzelfde. Net als een taart die in de ene oven lukt en in de andere niet, gedraagt software zich anders op verschillende computers.

In plaats van te proberen elke computer exact hetzelfde te maken (wat bijna onmogelijk is), hebben de onderzoekers een slimme tool bedacht die zegt: "Weet je wat? Als het op deze computer niet werkt, laten we het dan gewoon overslaan en noteren, zodat we kunnen blijven werken."

Het is een manier om de chaos van verschillende computers te temmen, zodat ontwikkelaars zich kunnen focussen op het maken van goede software, in plaats van het oplossen van nep-fouten.

Verdrinkt u in papers in uw vakgebied?

Ontvang dagelijkse digests van de nieuwste papers die bij uw onderzoekswoorden passen — met technische samenvattingen, in uw taal.

Probeer Digest →