Tras una evaluacion, los resultados se guardan en el directorio de salida con esta estructura:
evaluation_results/
|-- {run_id}/
|-- {instance_id}.jsonl # Resultado por instancia
|-- evaluation_summary.json # Resumen agregado
|-- bceval_results.jsonl # Exportacion formato bceval
|-- claude_debug.log # Log de debug (Claude Code)
|-- copilot-*.log # Log de debug (Copilot)
Cada fichero .jsonl contiene una linea JSON por resultado con:
{
"instance_id": "microsoft__BCApps-4822",
"project": "BCApps",
"model": "claude-sonnet-4-6",
"agent_name": "Claude Code",
"category": "bug-fix",
"resolved": true,
"build": true,
"timeout": false,
"generated_patch": "--- a/...\n+++ b/...",
"error_message": null,
"benchmark_version": "0.4.0",
"metrics": {
"execution_time": 145.3,
"llm_duration": 120.5,
"turn_count": 12,
"prompt_tokens": 450000,
"completion_tokens": 3500,
"tool_usage": { "Read": 15, "Grep": 8, "Edit": 3 }
},
"experiment": {
"mcp_servers": ["altool"],
"custom_instructions": true,
"skills_enabled": true,
"custom_agent": "al-developer-bench"
}
}
uv run bcbench result summarize {run_id}
Lee todos los ficheros .jsonl del directorio evaluation_results/{run_id}/, calcula metricas agregadas y muestra un resumen en consola:
Tambien genera:
evaluation_summary.json - Resumen en formato JSONbceval_results.jsonl - Exportacion para analisis externouv run bcbench result aggregate --input-dir notebooks/result/bug-fix/mi-directorio/
Similar a summarize, pero no requiere un run_id especifico. Escanea recursivamente el directorio buscando todos los ficheros .jsonl de resultado.
# Revisar todos los resultados no resueltos de un fichero
uv run bcbench result review resultados.jsonl --category bug-fix
# Revisar una instancia especifica en todos los runs de un directorio
uv run bcbench result review notebooks/result/bug-fix/ \
--category bug-fix \
--instance-id microsoft__BCApps-4822
# Incluir tambien los resueltos
uv run bcbench result review resultados.jsonl \
--category bug-fix \
--include-resolved
La TUI muestra una vista dividida: parche esperado (gold) vs parche generado (agente). Usa j/k o flechas para navegar, 1-7 para clasificar categorias de fallo.
uv run bcbench result update evaluation_results/{run_id}/evaluation_summary.json
Toma el resumen de una ejecucion y lo anade al leaderboard publico en docs/_data/{category}.json. Almacena hasta 5 runs por combinacion de agente + modelo + configuracion.
uv run bcbench result refresh
Recalcula las metricas agregadas del leaderboard sin anadir datos nuevos. Util cuando cambia la logica de agregacion.
BC-Bench calcula metricas estadisticas avanzadas:
pass_rate = resolved / total * 100
La metrica basica: porcentaje de instancias resueltas.
BC-Bench usa bootstrapping BCa (bias-corrected and accelerated) para calcular intervalos de confianza al 95%. Esto permite responder: “Con que confianza podemos decir que la tasa de exito es X%?”
Probabilidad de obtener al menos 1 solucion correcta en k intentos:
pass@k = 1 - C(n-c, k) / C(n, k)
Donde n = total, c = correctos. Util cuando ejecutas multiples runs del mismo escenario.
Probabilidad de que TODOS los k intentos sean correctos:
pass^k = estimacion de la probabilidad de exito consistente
BC-Bench incluye Jupyter notebooks para analisis visual de resultados:
notebooks/
|-- dataset.ipynb # Estadisticas del dataset
|-- bug-fix/
| |-- overview.ipynb # Vista general bug-fix
| |-- claude-vs-copilot.ipynb # Comparacion Claude vs Copilot
| |-- failure-analysis.ipynb # Analisis de fallos
| |-- altool-comparison.ipynb # Impacto del AL MCP
| |-- claude-code-aldc-comparison.ipynb # Comparacion con/sin configuracion personalizada
| |-- aldc-comparison-full.ipynb # Comparacion completa de escenarios
|-- test-generation/
|-- overview.ipynb # Vista general test-generation
|-- altest-comparison.ipynb # Comparacion de configuraciones
# Instalar dependencias de analisis
uv sync --group analysis
# Lanzar Jupyter
uv run jupyter lab
Las dependencias de analisis incluyen: pandas, plotly, ipykernel, nbformat.
Los notebooks leen los datos agregados de:
docs/_data/bug-fix.json
docs/_data/test-generation.json
Estructura del leaderboard:
{
"runs": [
{
"total": 101,
"resolved": 57,
"failed": 44,
"build": 100,
"percentage": 56.4,
"date": "2026-01-29",
"model": "claude-opus-4-5",
"agent_name": "Claude Code",
"category": "bug-fix",
"average_duration": 197.3,
"average_prompt_tokens": 685413.2,
"average_completion_tokens": 4821.8,
"instance_results": {
"microsoftInternal__NAV-204450": false,
"microsoftInternal__NAV-179733": true
}
}
],
"aggregate": [...]
}
# En la VM
.\scripts\Run-FullComparison.ps1 `
-InstanceIds @("microsoft__BCApps-4822") `
-LlmFamily sonnet `
-OnlyMissing
# En tu maquina de desarrollo
uv run bcbench result aggregate --input-dir notebooks/result/bug-fix/claude-baseline-sonnet-4-6/
uv run bcbench result aggregate --input-dir notebooks/result/bug-fix/claude-aldc-developer-sonnet-4-6/
uv run bcbench result update evaluation_results/mi_run/evaluation_summary.json
# Revisar instancias que fallaron
uv run bcbench result review notebooks/result/bug-fix/claude-baseline-sonnet-4-6/ \
--category bug-fix \
--instance-id microsoft__BCApps-4822
uv run jupyter lab notebooks/bug-fix/overview.ipynb
BC-Bench usa versionado semantico. La version actual se define en pyproject.toml:
[project]
version = "0.4.0"
| Tipo de cambio | Bump | Ejemplos |
|---|---|---|
| Major (X.0.0) | Cambios en dataset o metodologia | Anadir/eliminar entradas, cambiar criterios de pass |
| Minor (0.X.0) | Cambios en tooling que afecten resultados | Actualizar version de Copilot, cambiar prompts de agente |
| Patch (0.0.X) | Fixes y documentacion | Corregir un bug de parsing, actualizar docs |
Los resultados de versiones distintas NO se pueden agregar juntos. El comando bcbench result update valida que todos los runs tengan el mismo benchmark_version. Esto asegura que el leaderboard siempre compara manzanas con manzanas.
Al documentar los resultados de una evaluacion, asegurate de incluir:
pyproject.toml)bcbench run mini-inspector para trajectories)environment_setup_versionbase_commit correcto-PauseBetweenScenarios 180 (3 minutos entre escenarios)docker ps para ver si esta corriendodocker rm -f bcbench y vuelve a ejecutar el setuppyproject.tomlVolver al indice: Indice de la Guia