Por qué SWE-bench Verified ya no mide las capacidades de programación de vanguardia
SWE-bench Verified está cada vez más contaminado. Recomendamos SWE-bench Pro.
Desde que publicamos por primera vez SWE-bench Verified en agosto de 2024, la industria lo ha utilizado ampliamente para medir el progreso de los modelos en tareas autónomas de ingeniería de software. Tras su lanzamiento, SWE-bench Verified proporcionó una señal sólida del progreso de las capacidades y se convirtió en una métrica estándar que se informa en los lanzamientos de modelos de vanguardia. El seguimiento y la previsión del progreso de estas capacidades también son una parte importante del Marco de preparación de OpenAI. Cuando creamos inicialmente la prueba comparativa Verified, intentamos resolver problemas en la evaluación original que hacían que ciertas tareas fueran imposibles de realizar en el conjunto de datos de SWE-bench(se abre en una ventana nueva).
Tras los avances iniciales, el progreso de vanguardia en SWE-bench Verified se ha ralentizado, mejorando(se abre en una ventana nueva) del 74,9 % al 80,9 % en los últimos 6 meses. Esto plantea la pregunta: ¿los fallos restantes reflejan limitaciones del modelo o propiedades del propio conjunto de datos?
En un nuevo análisis, encontramos dos problemas importantes con el conjunto Verified que indican que el benchmark ya no es adecuado para medir el progreso en capacidades de ingeniería de software autónoma para lanzamientos de vanguardia a los niveles de rendimiento actuales:
- Las pruebas rechazan soluciones correctas: Auditamos un subconjunto del 27,6 % del conjunto de datos que los modelos a menudo no lograban resolver y descubrimos que al menos el 59,4 % de los problemas auditados tienen casos de prueba defectuosos que rechazan envíos funcionalmente correctos, a pesar de nuestros mejores esfuerzos por mejorar esto en la creación inicial de SWE-bench Verified.
- Entrenamiento con soluciones: dado que los grandes modelos de vanguardia pueden aprender información a partir de su entrenamiento, es importante que nunca se entrenen con los problemas y las soluciones con los que se evalúan. Esto es similar a compartir con los estudiantes los problemas y las soluciones de un examen próximo antes del examen: puede que no memoricen la respuesta, pero los estudiantes que ya hayan visto las respuestas sin duda lo harán mejor que quienes no. Los problemas de SWE-bench proceden de repositorios de código abierto que muchos proveedores de modelos utilizan con fines de entrenamiento. En nuestro análisis, descubrimos que todos los modelos de vanguardia que probamos pudieron reproducir la corrección de errores original, escrita por humanos, utilizada como referencia de verdad fundamental, conocida como el parche dorado, o los detalles literales del enunciado del problema para determinadas tareas, lo que indica que todos ellos han visto al menos algunos de los problemas y soluciones durante el entrenamiento.
También encontramos indicios de que los modelos que han visto los problemas durante el entrenamiento tienen más probabilidades de tener éxito, porque cuentan con información adicional necesaria para superar las pruebas poco específicas.
Esto significa que las mejoras en SWE-bench Verified ya no reflejan mejoras significativas en las capacidades reales de desarrollo de software de los modelos. En su lugar, reflejan cada vez más cuánto estuvo expuesto el modelo a la prueba de referencia durante el entrenamiento. Por eso hemos dejado de informar de las puntuaciones de SWE-bench Verified, y recomendamos que otros desarrolladores de modelos hagan lo mismo.
Estamos desarrollando nuevas evaluaciones no contaminadas para hacer un mejor seguimiento de las capacidades de programación, y creemos que este es un ámbito importante en el que centrarse para la comunidad investigadora en general. Hasta que los tengamos, OpenAI recomienda informar de los resultados para SWE-bench Pro.
La evaluación original de SWE-bench(se abre en una ventana nueva) se publicó en 2023. Cada problema se obtiene de una incidencia de GitHub resuelta en uno de los 12 repositorios de Python de código abierto y se empareja con la pull request (PR) correspondiente. Para determinar si un cambio de código generado por un modelo es correcto, cada problema incluye dos conjuntos de pruebas:
- Pruebas que fallan en la base de código sin modificar, pero pasan si el problema se corrige correctamente
- Pruebas de regresión que pasan tanto antes como después de la corrección para garantizar que la funcionalidad no relacionada permanezca intacta.
El modelo no ve las pruebas. Tiene que producir un cambio de código dado únicamente el texto original de la incidencia y el estado del repositorio antes de la corrección. Solo supera un problema si todas las pruebas se superan después de aplicar el cambio de código.
Encontramos muchos problemas con esa evaluación que podrían llevar a subestimar la capacidad de los modelos.
- Algunas pruebas unitarias eran demasiado específicas o estaban mal alineadas con la tarea, por lo que se podían rechazar correcciones correctas.
- Muchos enunciados de tareas eran poco específicos, lo que podría dar lugar a múltiples interpretaciones válidas, mientras que las pruebas solo cubrían una específica.
- Dependiendo de la configuración del entorno (por ejemplo, Linux frente a Windows, o la versión de Python), algunas pruebas podrían fallar de forma espuria
Creamos SWE-bench Verified en 2024 para abordar estos problemas. Colaboramos con ingenieros de software expertos para revisar 1 699 problemas de SWE-bench y filtrar aquellos que presentaban estos problemas. Cada problema fue revisado de forma independiente por tres expertos. Este proceso de revisión dio como resultado SWE-bench Verified, un conjunto seleccionado de 500 problemas.
Aunque SWE-bench Verified supone una gran mejora respecto a la versión inicial, persisten problemas residuales. Realizamos una auditoría de 138 problemas de SWE-bench Verified que OpenAI o3 no resolvió de forma consistente en 64 ejecuciones independientes. Cada caso fue revisado de forma independiente por al menos seis ingenieros de software con experiencia. Si un experto marcó un problema, un equipo adicional lo volvió a verificar.
Descubrimos que el 59,4 % de los 138 problemas contenían problemas materiales en el diseño de las pruebas y/o la descripción del problema, lo que los hacía extremadamente difíciles o imposibles de resolver incluso para el modelo o el ser humano más capaz.
- El 35.,5% de las tareas auditadas tienen casos de prueba estrictos que imponen detalles específicos de implementación, invalidando muchas entregas funcionalmente correctas, a los que llamamos casos de prueba restrictivos.
- El 18,8 % de las tareas auditadas tienen pruebas que comprueban funcionalidad adicional que no se especificó en la descripción del problema, a lo que llamamos casos de prueba amplios.
- El 5,1 % restante de las tareas presentaba problemas diversos que no estaban bien agrupados dentro de esta taxonomía.
Un ejemplo ilustrativo del primer modo de fallo es pylint-dev__pylint-4551(se abre en una ventana nueva), donde la PR introduce una nueva función "get_annotation" como parte de la solución global. Este nombre de función no se menciona en la descripción del problema, pero las pruebas lo importan directamente. Aunque algunos modelos podrían intuir que deben crear una función de este tipo, no es estrictamente necesario implementar una función con este nombre específico para abordar correctamente el problema. Muchas soluciones válidas fallan las pruebas debido a errores de importación.
Descripción del problema
Fragmento de prueba de PR
Fallos de pruebas de PR (truncados para facilitar la lectura)
Un ejemplo de casos de prueba demasiado amplios es sympy__sympy-18199(se abre en una ventana nueva). Esta tarea se obtuvo de una PR que abordaba tres problemas distintos con la función "nthroot_mod", concretamente #17373(se abre en una ventana nueva), #17377(se abre en una ventana nueva) y #18212(se abre en una ventana nueva). Sin embargo, la descripción de la tarea SWE-bench Verified solo cubre la incidencia final #18212(se abre en una ventana nueva). Esto crea una discrepancia: las pruebas de la PR cubren los tres problemas, mientras que la descripción detalla solo uno. En nuestras ejecuciones, los modelos suelen implementar correctamente la solución descrita y luego fallan las pruebas que cubren la implementación de los otros dos problemas.
Descripción original de PR (PR de GitHub)
Descripción del problema para #18212
Descripción del problema para la tarea de SWE-bench Verified (solo tomada de #18212):
SWE-bench Verified y los repositorios (bases de código y notas de la versión) son de código abierto y se usan y se comentan ampliamente, lo que dificulta evitar la contaminación para los desarrolladores de modelos.
Primero detectamos indicios de contaminación en nuestros propios modelos. Por ejemplo, cuando GPT‑5.2 resolvió 31 tareas que identificamos como casi imposibles de resolver. En django__django-14725(se abre en una ventana nueva) las pruebas requieren un nuevo parámetro específico "edit_only" que no se exige explícitamente en el enunciado del problema. Mientras resuelve el problema, GPT‑5.2 muestra en su cadena de pensamiento que tiene información sobre las notas de la versión que detallan cambios en la base de código, e identifica correctamente que el parámetro "edit_only" se introdujo en Django 4.1.
GPT‑5.2 CoT
Para evaluar de forma más amplia la importancia de la contaminación, creamos una configuración automatizada de red teaming. Para cada pregunta de SWE-bench Verified, encargamos a GPT‑5 que sondeara un GPT‑5.2‑Chat, Claude Opus 4.5 y Gemini 3 Flash Preview para la contaminación. Estos modelos se eligieron para excluir los modelos de razonamiento, pero reconocemos que probablemente exista una brecha de capacidad no trivial entre ellos.
Para sondear la contaminación, GPT‑5 recibió: el ID, la descripción, el parche dorado y las pruebas de PR de la tarea de SWE-bench Verified. A lo largo de 15 turnos, permitimos que GPT‑5 variara el prompt del sistema/desarrollador, el prompt del usuario y el prefill del asistente y diferentes estrategias de elicitación. Después de cada turno, un modelo juez etiquetó cuánta información novedosa específica de la tarea aparecía y cada respuesta se etiquetó según la gravedad de la contaminación, de “none” a “strong.” Se permitió que GPT‑5 adaptara su estrategia en función de los turnos anteriores para recuperar de forma iterativa detalles específicos de la tarea. Para cada ejemplo de contaminación grave, verificamos con otro juez que GPT‑5 no filtrara demasiada información al modelo objetivo. Por último, revisamos manualmente los ejemplos “strong” que componen las transcripciones de esta publicación.
A continuación se muestran ejemplos de contaminación fuerte en distintos proveedores de modelos.
Dado un breve fragmento de la descripción de la tarea, GPT‑5.2 genera el parche exacto de referencia. En particular, conoce el nombre exacto de la clase y del método, y la nueva condición de retorno anticipado "if username is None or password is None" que se introduce.
ID de tarea: django__django-11451(se abre en una ventana nueva)
Obtención de contaminación
Parche dorado
Opus es capaz no solo de recordar el cambio funcional exacto de 4 líneas que introdujo la PR, junto con el nombre de archivo y el método específicos que tocó, sino que también cita literalmente el comentario en línea que formaba parte de la diferencia.
Obtención de contaminación
Parche dorado
Gemini 3 Flash, cuando no se le proporciona más información sobre la tarea aparte del ID, es capaz de reproducir literalmente detalles de la descripción de la tarea y del parche de referencia. Esto incluye la nueva fórmula de regex para la validación del nombre de usuario y los números de línea exactos del cambio.
ID de tarea: django__django-11099(se abre en una ventana nueva)
Obtención de contaminación
Parche dorado
A partir de esta auditoría de SWE-bench Verified, observamos dos lecciones más generales para el diseño de evaluaciones. En primer lugar, las pruebas comparativas obtenidas a partir de material disponible públicamente conllevan un riesgo de contaminación, ya que la exposición a los datos de entrenamiento puede inflar las puntuaciones de forma silenciosa. Si se utilizan datos rastreados públicamente en la construcción de pruebas comparativas, los desarrolladores de modelos deben realizar pruebas adicionales para detectar contaminación. Los benchmarks, e incluso sus soluciones, publicados públicamente pueden acabar en datos de entrenamiento. Se debe tener aún más cuidado tanto en la forma en que se publican los conjuntos de datos (i.e. protegidos con contraseña) y el filtrado de datos de entrenamiento (i.e. cumplimiento estricto de canary strings).
En segundo lugar, la puntuación automatizada es difícil de hacer bien; los casos de prueba perfectos deberían verificar plenamente la funcionalidad correcta, siendo a la vez agnósticos respecto a detalles de implementación específicos e irrelevantes y también sólidos frente a soluciones de atajo. Estos problemas son intrínsecamente complejos y difíciles de resolver. Detectar estos problemas requirió múltiples campañas extensas de etiquetado humano.
Hemos incorporado estas conclusiones en nuestros recientes esfuerzos de evaluación. En los últimos meses hemos optado por informar de los resultados del split público de SWE-Bench Pro. Recomendamos que otros desarrolladores de modelos hagan lo mismo. SWE-bench Pro no es perfecto, pero empíricamente parece sufrir menos problemas de contaminación. Nuestra canalización de contaminación encontró algunos casos de contaminación, pero estos casos fueron significativamente más raros y menos graves que en SWE-bench Verified, y ningún modelo fue capaz de producir un parche de referencia completo y literalmente idéntico.
Seguiremos invirtiendo en pruebas comparativas originales, de autoría privada, y pediremos ayuda a la industria y al mundo académico para que hagan lo mismo. En GDPVal, las tareas son elaboradas de forma privada por expertos del dominio, lo que reduce el riesgo de exposición, y las soluciones se evalúan de forma holística por revisores formados. Este enfoque consume muchos recursos, pero es cada vez más necesario para medir mejoras reales de las capacidades.


