← Nieuwste papers
💻 computer science

Test Behaviors, Not Methods! Detecting Tests Obsessed by Methods

Dit artikel stelt een nieuwe testgeur voor genaamd "Test Obsessed by Method", die tests identificeert die meerdere uitvoeringspaden van een enkele productiemethode dekken, en valideert de detectie ervan door middel van een empirische studie naar de Python Standard Library, waaruit blijkt dat dergelijke tests vaak meerdere gedragingen verifiëren en kunnen worden gerefactord naar meer gefocuste eenheden.

Oorspronkelijke auteurs: Andre Hora, Andy Zaidman

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

Oorspronkelijke auteurs: Andre Hora, Andy Zaidman

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 proefmenu bereidt voor een voedingscriticus. De gouden regel van goed koken is: serveer één duidelijke smaak per gerecht. Als je een enkel bord serveert met een biefstuk, een plak taart en een bolletje ijs allemaal door elkaar, raakt de criticus in de war. Ze kunnen niet zien of de biefstuk te rauw is, de taart te zoet is, of het ijs aan het smelten is. Als er iets misgaat, weten ze niet welk deel van de maaltijd ze de schuld moeten geven.

In de wereld van software zijn "gerechten" tests en zijn "smaken" gedragingen (wat de software moet doen).

Dit artikel, getiteld "Test Behaviors, Not Methods!", betoogt dat veel softwaretests momenteel worden geserveerd als dat rommelige gemengde bord. De auteurs, Andre Hora en Andy Zaidman, introduceren een nieuwe manier om deze verwarrende tests te herkennen, wat zij "Tests Obsessed by Methods" noemen.

Hier is de uiteenzetting van hun ontdekking met behulp van eenvoudige analogieën:

1. De oude manier: Ingrediënten tellen

Voorheen probeerden experts deze rommelige tests te vinden door simpelweg te tellen hoe vaak een test de code "raakte". Ze dachten: "Als een test de productiecode 3 of meer keer aanroept, doet het waarschijnlijk te veel."

De auteurs noemen dit de "Eager Test"-geur. Ze ontdekten echter dat deze methode lijkt op het beoordelen van een maaltijd door alleen te tellen hoeveel lepels er zijn gebruikt. Het is onnauwkeurig. Een test kan een functie veel keren aanroepen om een scène op te zetten, zonder daadwerkelijk verschillende smaken te testen. Het is een onhandige manier om het probleem te vinden.

2. Het nieuwe idee: De film bekijken (Runtime Analysis)

In plaats van alleen maar lepels te tellen, stellen de auteurs voor om de film van de test te bekijken terwijl deze wordt afgespeeld. Ze stellen een nieuwe regel voor: Als een enkele test een stuk code dwingt om meerdere verschillende "wegen" (paden) te nemen om de finishlijn te bereiken, dan is die test "geobsedeerd".

Beschouw een productiemethode (een stuk code) als een doolhof.

  • Goede Test: Je stuurt één ontdekkingsreiziger het doolhof in om te controlen of de linker deur werkt. Daarna stuur je een tweede ontdekkingsreiziger om te controleren of de rechter deur werkt. Helder en gefocust.
  • Geobsedeerde Test: Je stuurt één ontdekkingsreiziger die door de linker deur loopt, dan terugkeert, door de rechter deur loopt en vervolgens de geheime tunnel probeert, allemaal in één keer.

De auteurs noemen dit "Test Obsessed by Method". De test is "hebzuchtig" omdat hij probeert elk mogelijk pad van een enkel doolhof in één keer te dekken, in plaats van de taken op te splitsen.

3. Het experiment: De Python-bibliotheek controleren

Om te zien of deze "obsessie" een echt probleem is, gingen de auteurs op een speurtocht door de Python Standard Library (een enorme collectie vooraf geschreven code die door miljoenen ontwikkelaars wordt gebruikt).

Ze keken naar 2.054 tests. Dit is wat ze vonden:

  • De zoektocht: Ze vonden 44 tests die "geobsedeerd" waren. Deze tests probeerden in één keer verschillende uitkomsten van een enkele functie te controleren.
  • De verspreiding: Deze rommelige tests werden gevonden in 11 van de 12 verschillende bibliotheken die ze controleerden. Het is geen zeldzame glitch; het is een veelvoorkomende gewoonte.
  • De oplossing: Gemiddeld probeerde elke van deze 44 rommelige tests eigenlijk twee verschillende taken te doen. Als je ze zou opsplitsen, zouden die 44 tests 118 schone, gefocuste tests kunnen worden.
  • Het "Aha!"-moment: In ongeveer 23% van deze rommelige tests hadden de programmeurs zelfs commentaar geschreven waarin ze toegaven: "Hé, we testen hier twee verschillende dingen!" Ze wisten dat het rommelig was, maar deden het toch.

4. Waarom is dit belangrijk?

De auteurs betogen dat wanneer een test probeert te veel paden tegelijk te dekken:

  • Het is moeilijk te begrijpen: Net als dat gemengde bord, kun je niet zien welke smaak je proeft.
  • Het is fragiel: Als je de code voor de "linker deur" verandert, kun je per ongeluk de test voor de "rechter deur" breken, ook al zijn ze ongerelateerd.
  • Het is moeilijk te repareren: Wanneer een test faalt, weet je niet welk specifiek gedrag kapot is gegaan.

De essentie

Het artikel beweert niet elk testprobleem op te lossen. In plaats daarvan biedt het een nieuw, scherper instrument (door gebruik te maken van runtime analysis in plaats van alleen tellen) om tests op te sporen die te veel proberen te doen met een enkel stuk code.

Ze suggereren dat als een test een functie dwingt om meerdere verschillende paden te nemen, de test moet worden opgesplitst. Net zoals een chef de biefstuk, de taart en het ijs op aparte borden moet serveren, moet een ontwikkelaar aparte tests schrijven voor elk afzonderlijk gedrag.

Kortom: Wees niet hebzuchtig met je tests. Test één gedrag, één pad, één smaak tegelijk.

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 →