TestMigrationsInPy: A Dataset of Test Migrations from Unittest to Pytest
Dit artikel introduceert TestMigrationsInPy, een publiekelijk beschikbare dataset bestaande uit 923 echte testmigraties van unittest naar pytest, ontworpen om te dienen als een grondwaarheid voor het ontwikkelen en verifiëren van geautomatiseerde tools die het migratieproces in het Python-ecosysteem vergemakkelijken.
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 bent die al jarenlang kookt met een zeer oude, rigide set keukengereedschappen. Deze tools werken prima, maar ze zijn zwaar, vereisen een specifiek receptformaat en zijn een beetje lomp. Plotseling komt er een nieuwe set moderne, lichtgewicht en flexibele tools op de markt. Iedereen is het erover eens dat de nieuwe tools het koken sneller en lekkerder maken, maar de overstap maken is een nachtmerrie. Je kunt de oude tools niet zomaar weggooien; je moet elk recept dat je ooit hebt geschreven zorgvuldig vertalen zodat het werkt met de nieuwe apparatuur.
Dit is precies de situatie waar Python-programmeurs voor staan met hun testtools.
Het Probleem: Twee Keukens, Eén Receptenboek
In de wereld van Python-programmeren zijn er twee manieren om "testrecepten" te schrijven (code die controleert of software correct werkt):
unittest: De ouderwetse tool. Het maakt deel uit van de standaard keukenset. Het is strikt; je moet je tests schrijven binnen speciale "classes" (alsof je elk recept in een specifieke map plaatst) en je moet lange, specifieke commando's gebruiken om te controleren of dingen kloppen.pytest: De moderne, populaire tool. Het is lichter en flexibeler. Je kunt tests schrijven als eenvoudige functies (zoals losse receptkaarten) en het gebruikt kortere, schonere commando's.
Omdat pytest veel prettiger in gebruik is, willen veel softwareprojecten over te stappen van unittest naar pytest. Echter, dit handmatig doen is alsof je een hele bibliotheek aan kookboeken handmatig vertaalt. Het duurt eeuwen en het is gemakkelijk om fouten te maken.
De Oplossing: Een "Migratie Kookboek"
De auteurs van dit artikel, Altino Alves en Andre Hora, realiseerden zich dat om een robot (of een AI) te bouwen die deze vertaling automatisch kan uitvoeren, ze eerst een enorme bibliotheek van voorbeelden nodig hadden die laten zien hoe mensen dit daadwerkelijk deden.
Zij creëerden TestMigrationsInPy.
Beschouw deze dataset als een enorm, geannoteerd kookboek met 923 echte voorbeelden van ontwikkelaars die hun testrecepten succesvol hebben overgeschakeld van de oude stijl naar de nieuwe stijl.
Hoe Ze het Kookboek Hebben Gemaakt
Ze hebben niet gewoon geraden; ze gingen op een digitale schattenjacht:
- De Detector: Ze gebruikten een slimme tool om door de geschiedenis van 100 van de meest populaire Python-projecten (zoals de beroemde bibliotheken Pandas en Flask) te scannen. Ze zochten naar specifieke "commit"-berichten waar ontwikkelaars expliciet zeiden: "Ik ben deze test aan het veranderen van
unittestnaarpytest." - De Filter: Soms, wanneer ontwikkelaars code bijwerken, lossen ze tegelijkertijd bugs op of voegen ze nieuwe functies toe terwijl ze ook van tools wisselen. Dit creëert "verstrengelde" wijzigingen die verwarrend zijn om te bestuderen. De auteurs bekeken deze wijzigingen handmatig en kozen alleen de "zuivere" migraties uit—gevallen waarin de ontwikkelaar alleen van teststijl wisselde zonder iets anders te doen.
- Het Resultaat: Ze kwamen uit op 923 schone, geïsoleerde voorbeelden van deze wisselingen.
Wat Zit Er In het Kookboek?
De dataset is georganiseerd als een digitaal archief. Voor elk voorbeeld krijg je:
- Het "Vóór"-beeld: De testcode geschreven in de oude
unittest-stijl. - Het "Ná"-beeld: Dezelfde testcode herschreven in de nieuwe
pytest-stijl. - Het "Type" Label: Een tag die vertelt wat voor soort verandering er heeft plaatsgevonden.
De auteurs ontdekten twee hoofdtypen veranderingen, die zij vergelijken met verschillende niveaus van moeilijkheid:
- Eenvoudige Wissels (De "Assertion" Migratie): Dit is als het veranderen van een maateenheid van "kopjes" naar "grammen". Het is rechttoe rechtaan. Bijvoorbeeld het veranderen van een lang commando zoals
self.assertEqual(a, b)naar een simpeleassert a == b. - Complexe Herschrijvingen (De "Fixture" Migratie): Dit is als beseffen dat je oude recept een specifieke stap voor het voorverwarmen van de oven vereiste, maar de nieuwe oven werkt anders. Je moet de manier waarop ingrediënten worden bereid volledig herstructureren. In
unittestheb je misschien eensetup-methode die voor elke test wordt uitgevoerd. Inpytestwordt dit een "fixture"—een herbruikbare helperfunctie. Soms moet één oudesetup-methode worden opgesplitst in vier verschillende nieuwe fixtures. Dit is veel moeilijker te automatiseren.
Waarom Is Dit Belangrijk?
Het artikel betoogt dat deze dataset een "ground truth" (een perfect referentiemanual) is voor onderzoekers.
Stel je voor dat je een AI-assistent probeert te bouwen (zoals een super-slimme robotkok) om ontwikkelaars te helpen van tools te wisselen. Je kunt de robot niet simpelweg vertellen: "Ga deze tests aanpassen." Je moet hem voorbeelden laten zien.
- Gebruik 1: Onderzoekers kunnen deze dataset gebruiken om AI-modellen (zoals Large Language Models) te trainen om code automatisch te vertalen.
- Gebruik 2: Ze kunnen testen of hun nieuwe AI goed is in de "eenvoudige wissels" versus de "complexe herschrijvingen".
De auteurs hebben dit zelfs zelf geprobeerd met een krachtig AI-model (GPT-4o). Ze ontdekten dat de AI redelijk goed was in de eenvoudige wissels, maar soms menselijke hulp nodig had bij de complexe fixture-wijzigingen, wat bewijst dat hoewel AI processen kan versnellen, het nog niet perfect is.
De Kernboodschap
Dit artikel beweert niet dat ze vandaag de dag de perfecte robot hebben gebouwd die de migratie voor je doet. In plaats daarvan hebben ze de trainingshandleiding (de dataset) gebouwd die onderzoekers in staat stelt die robot te bouwen. Het biedt een heldere, geverifieerde collectie van 923 echte voorbeelden van hoe men overgaat van de oude, lompe teststijl naar de nieuwe, gestroomlijnde stijl, wat de softwaregemeenschap helpt om dit tijdrovende proces in de toekomst te automatiseren.
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.