Waarom SWE-bench Verified niet langer geschikt is om de codeervaardigheden van grensverleggende modellen te meten
SWE-bench Verified raakt steeds meer vervuild. Wij raden daarom het gebruik van SWE-bench Pro aan.
Sinds we SWE-bench Verified in augustus 2024 publiceerden, wordt deze door de sector breed ingezet om de voortgang van modellen op het gebied van autonome software-engineeringtaken te meten.e-engineeringtaken te meten. Na de release vormde SWE-bench Verified een sterke graadmeter voor de vooruitgang in capaciteiten en werd het een standaardmaatstaf bij de lancering van grensverleggende modellen. Het monitoren en voorspellen van de voortgang van deze vaardigheden is ook een belangrijk onderdeel van OpenAI's Preparedness Framework. Bij het creëren van de Verified-benchmark probeerden we problemen in de oorspronkelijke evaluatie op te lossen die bepaalde taken in de SWE-bench-dataset(opent in een nieuw venster) onmogelijk maakten.
Na grote sprongen in het begin is de vooruitgang van de best presterende modellen op SWE-bench Verified vertraagd, met een stijging(opent in een nieuw venster) van 74,9% naar 80,9% in de afgelopen zes maanden. Dit roept de vraag op: weerspiegelen de resterende fouten de beperkingen van het model, of eigenschappen van de dataset zelf?
Uit een nieuwe analyse blijken twee grote problemen met de Verified-set, die erop wijzen dat de benchmark (gezien de huidige prestatieniveaus) niet langer geschikt is om de voortgang op het gebied van autonome software-engineeringcapaciteiten te meten bij de lancering van grensverleggende modellen:
- Tests keuren correcte oplossingen af: We hebben een subset van 27,6% van de dataset onderzocht die modellen vaak niet konden oplossen. We ontdekten dat bij ten minste 59,4% van de onderzochte problemen sprake is van gebrekkige testcases die functioneel correcte inzendingen afkeuren, ondanks onze uiterste inspanningen om dit te verbeteren bij de creatie van SWE-bench Verified.
- Trainen op oplossingen: Omdat grote, geavanceerde modellen informatie kunnen leren uit hun training, is het belangrijk dat ze nooit worden getraind op de problemen en oplossingen waarop ze worden geëvalueerd. Dit is vergelijkbaar met het vooraf delen van toetsvragen en antwoorden met studenten: ze onthouden het antwoord misschien niet letterlijk, maar studenten die de antwoorden hebben gezien, zullen het zeker beter doen dan studenten die dat niet hebben. SWE-bench-problemen zijn afkomstig uit open-source repositories die door veel modelaanbieders worden gebruikt voor trainingsdoeleinden. Uit onze analyse bleek dat alle geteste geavanceerde modellen in staat waren om de oorspronkelijke, door mensen geschreven bugfix (de referentieoplossing, oftewel de 'gold patch') te reproduceren, of woordelijke details van de probleemstelling voor bepaalde taken te genereren. Dit wijst erop dat ze allemaal tijdens de training ten minste een deel van de problemen en oplossingen hebben gezien.
We hebben ook bewijs gevonden dat modellen die de problemen tijdens de training hebben gezien, een grotere slagingskans hebben. Ze beschikken namelijk over de extra informatie die nodig is om voor de onvoldoende gespecificeerde tests te slagen.
Dit betekent dat hogere scores op SWE-bench Verified niet langer een betekenisvolle afspiegeling zijn van de daadwerkelijke softwareontwikkelingsvaardigheden van modellen. In plaats daarvan laten ze in toenemende mate zien in hoeverre het model tijdens de training is blootgesteld aan de benchmark. Daarom zijn wij gestopt met het rapporteren van SWE-bench Verified-scores, en we raden andere modelontwikkelaars aan dit ook te doen.
We bouwen aan nieuwe, onvervuilde evaluaties om codeervaardigheden beter te kunnen volgen. We vinden dit een belangrijk aandachtsgebied voor de bredere onderzoeksgemeenschap. Tot die tijd raadt OpenAI aan om resultaten van SWE-bench Pro te rapporteren.
De oorspronkelijke SWE-bench(opent in een nieuw venster)-evaluatie werd in 2023 uitgebracht. Elk probleem is afkomstig van een opgelost GitHub-issue in een van de 12 open-source Python-repository's en is gekoppeld aan de bijbehorende pull request (PR). Om te bepalen of een door het model gegenereerde codewijziging correct is, bevat elk probleem twee sets tests:
- Tests die falen op de ongewijzigde codebase, maar slagen als het probleem correct is opgelost
- Regressietests die zowel voor als na de fix slagen, om te garanderen dat niet-gerelateerde functionaliteit intact blijft.
Het model krijgt de tests niet te zien. Het moet een codewijziging doorvoeren op basis van alleen de oorspronkelijke probleembeschrijving en de staat van de repository vóór de fix. Een probleem geldt pas als 'opgelost' als alle tests slagen nadat de codewijziging is toegepast.
We hebben veel problemen gevonden met die evaluatie, wat kan leiden tot onderapportage van de capaciteiten van modellen.
- Sommige unit tests waren te specifiek of sloten niet goed aan bij de taak, waardoor correcte oplossingen ten onrechte werden afgekeurd.
- Veel taakomschrijvingen waren onvoldoende gespecificeerd. Dit kon leiden tot meerdere geldige interpretaties, terwijl de tests slechts één specifieke interpretatie dekten.
- Afhankelijk van de omgevingsinstellingen (bijvoorbeeld Linux vs. Windows, of de Python-versie) konden sommige tests onterecht falen.
We hebben in 2024 SWE-bench Verified gecreëerd om deze problemen aan te pakken. We hebben samengewerkt met deskundige software-engineers om 1.699 SWE-bench-problemen te beoordelen en de problemen met deze gebreken eruit te filteren. Elk probleem is onafhankelijk beoordeeld door drie experts. Dit beoordelingsproces resulteerde in SWE-bench Verified, een gecureerde set van 500 problemen.
Hoewel SWE-bench Verified een grote verbetering is ten opzichte van de oorspronkelijke versie, blijven er restproblemen bestaan. We hebben een audit uitgevoerd op 138 SWE-bench Verified-problemen die OpenAI o3 niet consistent kon oplossen in 64 onafhankelijke runs. Elk geval is onafhankelijk beoordeeld door ten minste zes ervaren software-engineers. Als een expert een probleem signaleerde, werd dit door een extra team opnieuw geverifieerd.
We ontdekten dat 59,4% van de 138 problemen significante fouten bevatte in het testontwerp en/of de probleembeschrijving. Hierdoor waren ze extreem moeilijk of onmogelijk op te lossen, zelfs voor de meest bekwame modellen of mensen.
- 35,5% van de onderzochte taken heeft strikte testcases die specifieke implementatiedetails afdwingen, waardoor veel functioneel correcte inzendingen ongeldig worden verklaard. Dit noemen we 'narrow test cases' (te enge tests).
- 18,8% van de onderzochte taken heeft tests die controleren op extra functionaliteit die niet in de probleembeschrijving stond vermeld. Dit noemen we 'wide test cases' (te brede tests).
- De overige 5,1% van de taken had diverse problemen die niet goed in deze taxonomie pasten.
Een illustratief voorbeeld van de eerste faalwijze is pylint-dev__pylint-4551(opent in een nieuw venster), waarbij de PR een nieuwe functie get_annotation introduceert als onderdeel van de totale oplossing. Deze functienaam wordt niet genoemd in de probleembeschrijving, maar wordt wel direct door de tests geïmporteerd. Hoewel sommige modellen intuïtief zouden kunnen besluiten zo'n functie aan te maken, is het strikt genomen niet noodzakelijk om een functie met deze specifieke naam te implementeren om het probleem correct op te lossen. Veel geldige oplossingen falen voor de tests vanwege importfouten.
Probleembeschrijving
PR-testfragment
PR-testfouten (ingekort voor de leesbaarheid)
Een voorbeeld van te brede testcases is sympy__sympy-18199(opent in een nieuw venster). Deze taak is afkomstig van een PR die drie verschillende problemen met de nthroot_mod-functie aanpakte, specifiek #17373(opent in een nieuw venster), #17377(opent in een nieuw venster) en #18212(opent in een nieuw venster). De beschrijving voor de SWE-bench Verified-taak behandelt echter alleen het laatste probleem, #18212(opent in een nieuw venster). Dit creëert een discrepantie: de PR-tests dekken alle drie de problemen, terwijl de beschrijving er slechts één detailleert. In onze runs implementeren modellen vaak correct de beschreven oplossing, maar falen ze vervolgens op tests die de implementatie voor de andere twee problemen dekken.
Originele PR-beschrijving (uit de GitHub PR)
Probleembeschrijving voor #18212
Probleembeschrijving voor SWE-bench Verified-taak (alleen overgenomen van #18212):
Zowel SWE-bench Verified als de repository's (codebases en release notes) zijn open-source en worden op grote schaal gebruikt en besproken. Dit maakt het voor modelontwikkelaars moeilijk om contaminatie te voorkomen.
We kwamen de eerste tekenen van contaminatie tegen in onze eigen modellen. Bijvoorbeeld toen GPT‑5.2 31 taken oploste die wij als nagenoeg onmogelijk hadden bestempeld. In django__django-14725(opent in een nieuw venster) vereisen de tests een specifieke nieuwe parameter edit_only, die niet expliciet wordt vereist in de probleemstelling. Tijdens het oplossen van het probleem laat GPT‑5.2 in zijn 'chain of thought' (denkproces) zien dat het beschikt over informatie uit de release notes die wijzigingen in de codebase beschrijven. Het identificeert correct dat de parameter edit_only werd geïntroduceerd in Django 4.1.
GPT‑5.2 CoT
Om te beoordelen hoe significant de contaminatie in bredere zin is, hebben we een geautomatiseerde 'red-teaming'-opzet gecreëerd. Voor elke SWE-bench Verified-vraag gaven we GPT‑5 de opdracht om GPT‑5.2‑Chat, Claude Opus 4.5 en Gemini 3 Flash Preview te testen op contaminatie Deze modellen werden gekozen om redenerende modellen uit te sluiten, maar we erkennen dat er waarschijnlijk een niet-triviaal verschil in capaciteiten tussen de modellen bestaat.
Om te testen op contaminatie ontving GPT‑5: de ID van de SWE-bench Verified-taak, de beschrijving, de gold patch en de PR-tests. Gedurende 15 beurten stonden we GPT‑5 toe om de systeem-/ontwikkelaarsprompt, de gebruikersprompt, de assistent-prefill en verschillende ontlokkingsstrategieën te variëren. Na elke beurt labelde een jury-model hoeveel nieuwe taakspecifieke informatie er verscheen en werd elk antwoord gelabeld op de ernst van de contaminatie, variërend van 'geen' tot 'sterk'. GPT‑5 mocht zijn strategie aanpassen op basis van eerdere beurten om iteratief taakspecifieke details te achterhalen. Voor elk voorbeeld van sterke contaminatie verifieerden we met een ander beoordelingsmodel of GPT‑5 niet te veel informatie naar het doelmodel had gelekt. Ten slotte hebben we de 'sterke' voorbeelden die de transcripties in dit bericht vormen, handmatig beoordeeld.
Hieronder staan voorbeelden van sterke contaminatie bij verschillende modelaanbieders.
Op basis van een kort fragment uit de taakomschrijving genereert GPT‑5.2 de exacte gold patch. In het bijzonder kent het de exacte klasse- en methodenaam, en de nieuwe 'early return'-voorwaarde if username is None or password is None die wordt geïntroduceerd.
Uitlokken van contaminatie
Gold patch
Opus weet niet alleen de exacte functionele wijziging van vier regels die de PR introduceerde te reproduceren (inclusief de specifieke bestandsnaam en de aangepaste methode), maar citeert ook woordelijk het inline-commentaar uit de diff.
Uitlokken van contaminatie
Gold patch
Wanneer Gemini 3 Flash geen andere informatie over de taak krijgt dan de ID, kan het woordelijke details uit de taakomschrijving en de gold patch genereren. Dit omvat onder andere de nieuwe regex-formule voor gebruikersnaamvalidatie en de exacte regelnummers voor de wijziging.
Uitlokken van contaminatie
Gold patch
Uit deze audit van SWE-bench Verified trekken we twee bredere lessen voor het ontwerp van evaluaties. Ten eerste brengen benchmarks die gebaseerd zijn op openbaar beschikbaar materiaal een risico op contaminatie met zich mee, waarbij blootstelling aan trainingsdata de scores ongemerkt kan opblazen. Als er voor het samenstellen van benchmarks gebruik wordt gemaakt van data die openbaar van internet is gehaald, moeten modelontwikkelaars extra tests uitvoeren op contaminatie. Benchmarks, en zelfs de oplossingen daarvan, die openbaar worden geplaatst, kunnen in de trainingsdata terechtkomen. Extra zorgvuldigheid is vereist bij de manier waarop datasets worden gepubliceerd (beveiligd met een wachtwoord) én bij het filteren van trainingsdata (strikte naleving van 'canary strings').
Ten tweede is geautomatiseerde scoring lastig goed te krijgen: perfecte testcases moeten de juiste functionaliteit volledig verifiëren, onafhankelijk zijn van onbelangrijke implementatiedetails en robuust zijn tegen 'shortcut'-oplossingen. Deze problemen zijn inherent complex en moeilijk op te lossen. Het opsporen van deze problemen vergde meerdere uitgebreide menselijke beoordelingsrondes.
We hebben deze bevindingen verwerkt in onze recente evaluatie-inspanningen. De afgelopen maanden hebben we ervoor gekozen om resultaten te rapporteren van de publieke deelverzameling van SWE-bench Pro. We raden andere modelontwikkelaars aan hetzelfde te doen. SWE-bench Pro is niet perfect, maar lijkt empirisch gezien minder last te hebben van contaminatieproblemen. Onze contaminatie-pipeline vond enkele gevallen van vervuiling, maar deze waren aanzienlijk zeldzamer en minder ernstig dan bij SWE-bench Verified. Bovendien was geen enkel model in staat een volledige, woordelijke gold patch te produceren.
We blijven investeren in originele, privé opgestelde benchmarks en vragen we de industrie en de academische wereld om hierbij te helpen. In GDPVal worden taken privé opgesteld door domeinexperts, wat het risico op blootstelling (exposure) vermindert, en oplossingen worden holistisch beoordeeld door getrainde beoordelaars. Deze aanpak is tijd- en arbeidsintensief, maar steeds noodzakelijker om echte verbeteringen in capaciteiten te meten.


