TestMigrationsInPy: A Dataset of Test Migrations from Unittest to Pytest
Dieses Paper stellt TestMigrationsInPy vor, einen öffentlich verfügbaren Datensatz bestehend aus 923 realen Testmigrationen von unittest zu pytest, der dazu konzipiert wurde, als Ground Truth für die Entwicklung und Verifizierung automatisierter Werkzeuge zu dienen, welche den Migrationsprozess im Python-Ökosystem erleichtern.
Originalarbeit lizenziert unter CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Dies ist eine KI-generierte Erklärung des untenstehenden Papers. Sie wurde nicht von den Autoren verfasst oder gebilligt. Für technische Genauigkeit konsultieren Sie das Originalpaper. Vollständigen Haftungsausschluss lesen
Stellen Sie sich vor, Sie sind ein Koch, der seit Jahren mit einem sehr alten, starren Set an Küchenwerkzeugen arbeitet. Diese Werkzeuge funktionieren gut, aber sie sind schwer, erfordern ein spezielles Rezeptformat und sind etwas klobig. Plötzlich schlägt der Markt ein neues, leichtes und flexibles Set an Werkzeugen ein. Alle sind sich einig, dass die neuen Werkzeuge das Kochen schneller und geschmackvoller machen, aber der Wechsel ist ein Albtraum. Sie können die alten Werkzeuge nicht einfach wegwerfen; Sie müssen jedes einzelne Rezept, das Sie je geschrieben haben, sorgfältig übersetzen, damit es mit der neuen Ausrüstung funktioniert.
Genau das ist die Situation, der Python-Programmierer bei ihren Test-Tools gegenüberstehen.
Das Problem: Zwei Küchen, ein Rezeptbuch
In der Welt der Python-Programmierung gibt es zwei Hauptwege, um „Testrezepte“ zu schreiben (Code, der prüft, ob eine Software korrekt funktioniert):
unittest: Das Oldschool-Werkzeug. Es ist Teil des Standard-Küchenkits. Es ist streng; man muss seine Tests innerhalb spezieller „Klassen“ schreiben (wie das Ablegen jedes Rezepts in einem bestimmten Ordner) und lange, spezifische Befehle verwenden, um zu prüfen, ob die Dinge richtig sind.pytest: Das moderne, populäre Werkzeug. Es ist leichter und flexibler. Man kann Tests als einfache Funktionen schreiben (wie lose Rezeptkarten) und es verwendet kürzere, sauberere Befehle.
Da pytest viel angenehmer zu benutzen ist, wollen viele Softwareprojekte von unittest zu pytest wechseln. Das manuelle Übersetzen eines ganzen Bibliotheksbestands an Kochbüchern ist jedoch so, als würde man jedes Rezept von Hand umschreiben. Es dauert ewig und es passieren leicht Fehler.
Die Lösung: Ein „Migrations-Kochbuch“
Die Autoren dieser Arbeit, Altino Alves und Andre Hora, erkannten, dass sie zuerst eine massive Bibliothek an Beispielen benötigen, die zeigen, wie Menschen dies tatsächlich gemacht haben, um einen Roboter (oder eine KI) zu bauen, das diese Übersetzung automatisch durchzuführen.
Sie erstellen TestMigrationsInPy.
Betrachten Sie diesen Datensatz als ein riesiges, annotiertes Kochbuch, das 923 reale Beispiele enthält, in denen Entwickler ihre Testrezepte erfolgreich vom alten Stil zum neuen Stil gewechselt haben.
Wie sie das Kochbuch erstellt haben
Sie haben nicht einfach geraten; sie haben eine digitale Schnitzeljagd unternommen:
- Der Detektor: Sie verwendeten ein intelligentes Tool, um durch die Historie von 100 der populärsten Python-Projekte (wie die berühmten Bibliotheken Pandas und Flask) zu scannen. Sie suchten nach spezifischen „Commit“-Nachrichten, in denen Entwickler explizit sagten: „Ich ändere diesen Test von
unittestzupytest.“ - Der Filter: Manchmal, wenn Entwickler Code aktualisieren, beheben sie gleichzeitig Bugs oder fügen neue Funktionen hinzu. Dies erzeugt „verwickelte“ Änderungen, die schwierig zu studieren sind. Die Autoren gingen diese Änderungen manuell durch und wählten nur die „reinen“ Migrationen aus – Fälle, in denen der Entwickler nur den Teststil gewechselt hat, ohne sonst etwas anderes zu tun.
- Das Ergebnis: Sie erhielten 923 saubere, isolierte Beispiele dieser Wechsel.
Was ist im Kochbuch enthalten?
Der Datensatz ist wie ein digitales Archiv organisiert. Für jedes Beispiel erhalten Sie:
- Das „Vorher“-Bild: Den Testcode, der im alten
unittest-Stil geschrieben wurde. - Das „Nachher“-Bild: Derselbe Testcode, der im neuen
pytest-Stil umgeschrieben wurde. - Das „Typ“-Label: Ein Tag, der angibt, welche Art von Änderung stattgefunden hat.
Die Autoren fanden zwei Hauptarten von Änderungen heraus, die sie mit unterschiedlichen Schwierigkeitsgraden vergleichen:
- Einfache Austauschvorgänge (Die „Assertion“-Migration): Dies ist wie das Ändern einer Maßeinheit von „Tassen“ zu „Gramm“. Es ist unkompliziert. Zum Beispiel das Ändern eines langen Befehls wie
self.assertEqual(a, b)zu einem einfachenassert a == b. - Komplexe Umgestaltungen (Die „Fixture“-Migration): Dies ist wie die Erkenntnis, dass Ihr altes Rezept einen spezifischen Schritt zum Vorheizen des Ofens erforderte, der neue Ofen aber anders funktioniert. Sie müssen die Art und Weise, wie die Zutaten vorbereitet werden, komplett umstrukturieren. In
unittestkönnten Sie einesetup-Methode haben, die vor jedem Test ausgeführt wird. Inpytestwird dies in eine „Fixture“ umgewandelt – eine wiederverwendbare Hilfsfunktion. Manchmal muss eine altesetup-Methode in vier verschiedene neue Fixtures aufgeteilt werden. Dies ist viel schwieriger zu automatisieren.
Warum ist das wichtig?
Die Autoren argumentieren, dass dieser Datensatz eine „Ground Truth“ (ein perfektes Referenzhandbuch) für Forscher ist.
Stellen Sie sich vor, Sie versuchen, einen KI-Assistenten (wie einen superintelligenten Roboterkoch) zu bauen, der Entwicklern hilft, Werkzeuge zu wechseln. Sie können dem Roboter nicht einfach sagen: „Geh und wechsle diese Tests.“ Sie müssen ihn mit Beispielen füttern.
- Nutzung 1: Forscher können diesen Datensatz verwenden, um KI-Modelle (wie Large Language Models) zu trainieren, damit diese lernen, Code automatisch zu übersetzen.
- Nutzung 2: Sie können testen, ob ihre neue KI besser bei den „einfachen Austauschvorgängen“ oder den „komplexen Umgestaltungen“ ist.
Die Autoren haben dies selbst mit einem leistungsstarken KI-Modell (GPT-4o) ausprobiert. Sie fanden heraus, dass die KI bei den einfachen Austauschvorgängen ziemlich gut war, aber bei den komplexen Fixture-Änderungen manchmal menschliche Hilfe benötigte, was beweist, dass KI zwar den Prozess beschleunigen kann, aber noch nicht perfekt ist.
Das Fazit
Dieses Paper behauptet nicht, bereits den perfekten Roboter gebaut zu haben, der die Migration heute für Sie erledigt. Stattdessen hat es das Trainingshandbuch (den Datensatz) geschaffen, das es Forschern ermöglicht, diesen Roboter zu bauen. Es bietet eine klare, verifizierte Sammlung von 923 realen Beispielen dafür, wie man vom alten, klobigen Teststil zum neuen, eleganten wechselt, und hilft der Software-Community, diesen mühsamen Prozess in der Zukunft zu automatisieren.
Ertrinken Sie in Arbeiten in Ihrem Fachgebiet?
Erhalten Sie tägliche Digests der neuesten Arbeiten passend zu Ihren Forschungsbegriffen — mit technischen Zusammenfassungen, in Ihrer Sprache.