Skip to content

Estado Actual de Testing

Este documento describe el estado actual de la cobertura de tests en mcp-scan.


Resumen Ejecutivo

Metrica Valor Objetivo
Archivos de test 18 -
Tests totales ~150 200+
Cobertura estimada ~70% 80%+
Benchmarks 8 15+

Cobertura por Paquete

Alta Cobertura (>80%)

Paquete Archivo Test Tests Estado
internal/pattern engine_test.go 50+ Excelente
internal/callgraph graph_test.go 15 Buena
internal/ml classifier_test.go 12 Buena
internal/imports resolver_test.go 12 Buena
internal/typeinfo types_test.go 8 Buena

Cobertura Media (50-80%)

Paquete Archivo Test Tests Gaps
internal/parser parser_test.go 15 Falta Go parser
internal/taint engine_test.go 12 Interprocedural parcial
pkg/scanner scanner_test.go 8 Mas integracion
internal/surface surface_test.go 6 Mas frameworks
internal/catalog catalog_test.go 6 Validar completitud

Baja Cobertura (<50%)

Paquete Archivo Test Tests Necesita
internal/reporter reporter_test.go 4 SARIF validation
internal/baseline baseline_test.go 3 Diff testing
internal/msss msss_test.go 2 Scoring validation
internal/config config_test.go 3 Edge cases

Analisis por Componente

1. Parser (internal/parser/)

Estado: Parcial

Lo que esta testeado: - Parsing Python basico - Parsing TypeScript basico - Extraccion de funciones - Deteccion de decoradores MCP - Funciones async - Imports - Clases y metodos - Parametros tipados

Lo que falta: - Parser Go (no implementado) - Parser JavaScript (parcial) - Herencia de clases - Closures y lambdas complejas - Type annotations avanzadas - Error recovery

Prioridad: Alta - Go parser necesario


2. Motor de Patrones (internal/pattern/)

Estado: Excelente

Lo que esta testeado:

Detector Tests Estado
PromptInjectionDetector 8 Completo
UnicodeDetector 6 Completo
HardcodedSecretDetector 10 Completo
DirectShellDetector 8 Completo
DangerousFunctionDetector 6 Completo
SQLConcatDetector 8 Completo
SecretLoggingDetector 6 Completo
WeakJWTDetector 6 Completo
OAuthStateDetector 4 Bueno
ToolShadowingDetector 6 Completo
UntrustedDependencyDetector 6 Completo
PathTraversalPatternDetector 6 Completo
InsecureCookieDetector 6 Completo
UnvalidatedURLDetector 4 Bueno

Lo que falta: - Tests de combinaciones de detectores - Tests de performance bajo carga - Mas casos de edge cases

Prioridad: Baja - bien cubierto


3. Motor de Taint (internal/taint/)

Estado: Parcial

Lo que esta testeado: - Flujo directo source → sink - Propagacion por asignacion - Propagacion por concatenacion - Llamadas a funciones (basico) - Sanitizadores

Lo que falta: - Analisis interprocedural completo - Flujos a traves de callbacks - Flujos a traves de closures - Propagacion en estructuras de datos - Context sensitivity - Taint en retornos de funciones externas

Prioridad: Alta - core del analisis


4. Grafo de Llamadas (internal/callgraph/)

Estado: Bueno

Lo que esta testeado: - Creacion y manipulacion del grafo - Agregar/remover nodos y aristas - Busqueda de callees/callers - Alcanzabilidad (BFS) - Deteccion de ciclos - Funciones por archivo - Estadisticas

Lo que falta: - Callbacks y funciones de orden superior - Virtual calls (metodos de clases) - Resolucion dinamica

Prioridad: Media


5. Clasificador ML (internal/ml/)

Estado: Bueno

Lo que esta testeado: - Clasificador basado en reglas - Clasificador con pesos - Clasificador ensemble - Carga de pesos desde JSON - Niveles de confianza - Serializacion JSON - Benchmarks de performance

Lo que falta: - Tests con datasets grandes - Validacion de precision/recall - Tests de robustez (adversarial) - Cross-validation

Prioridad: Media


6. Scanner (pkg/scanner/)

Estado: Parcial

Lo que esta testeado: - Creacion con opciones - Escaneo de archivo individual - Escaneo de directorio - Patrones de exclusion - Deteccion de superficie MCP - Generacion de findings

Lo que falta: - Tests E2E completos - Modo deep vs fast - Integracion con todos los detectores - Performance con proyectos grandes - Multiples lenguajes mezclados

Prioridad: Alta


7. Reporter (internal/reporter/)

Estado: Bajo

Lo que esta testeado: - Generacion JSON basica - Generacion SARIF basica

Lo que falta: - Validacion de schema SARIF - Evidence bundle - Formatos de salida adicionales - Pretty printing - Streaming output

Prioridad: Media


Fixtures

Estado por Clase

Clase Vulnerables Benignos Python TS Go Estado
A (RCE) 4 2 Si Si No Bueno
B (Path) 3 1 Si Si No Bueno
C (SSRF) 2 1 Si No No Parcial
D (SQLi) 4 2 Si Si No Bueno
E (Secrets) 5 1 Si Si No Bueno
F (Auth) 4 2 Si Si No Bueno
G (Poisoning) 4 1 Si No No Bueno
H (Decl/Behav) 2 1 Si No No Parcial
I (Multi-tool) 2 0 Si No No Minimo
J (Memory) 1 0 Si No No Minimo
K (Task) 1 0 Si No No Minimo
L (Lifecycle) 1 0 Si No No Minimo
M (Network) 1 0 Si No No Minimo
N (Supply) 2 1 Si No No Parcial

Necesidades

  1. TypeScript: Agregar fixtures TS para clases C, G-N
  2. Go: Agregar fixtures Go para todas las clases
  3. Benignos: Agregar mas fixtures benignos para validar FP rate
  4. Edge cases: Casos limite para cada clase

DVMCP

Estado de Deteccion

Challenge Esperado Detectado Estado
1 (Prompt Inj) 1-2 2 OK
2 (Poisoning) 1-2 1 OK
3 (Permissions) 1 0 FALTA
4 (Rug Pull) 1 0 FALTA
5 (Shadowing) 1-2 1 OK
6 (Indirect) 1-2 1 PARCIAL
7 (Token) 2-3 2 OK
8 (Code Exec) 2-3 2 OK
9 (Backdoor) 2-3 1 PARCIAL
10 (Multi) 5+ 3 PARCIAL

Tasa de deteccion: ~65%


Benchmarks

Existentes

Benchmark Paquete ns/op Memoria
RuleBasedClassifier ml ~500 ~1KB
FeatureExtraction ml ~200 ~512B

Necesarios

Benchmark Paquete Razon
Parser_Python parser Baseline parsing
Parser_TypeScript parser Baseline parsing
TaintEngine_Simple taint Performance taint
TaintEngine_Complex taint Scaling
Scanner_SmallProject scanner E2E baseline
Scanner_MediumProject scanner E2E scaling
Scanner_LargeProject scanner Limits

Plan de Mejora

Corto Plazo (Sprint actual)

  1. Aumentar cobertura taint:
  2. Agregar tests interprocedurales
  3. Tests de callbacks y closures

  4. Completar fixtures TypeScript:

  5. Clases C, G, H, I

  6. Scanner E2E:

  7. Tests de integracion completos
  8. Validar todos los detectores

Mediano Plazo (Proximo mes)

  1. Go parser y fixtures:
  2. Implementar parser Go
  3. Fixtures Go para clases principales

  4. Reporter completo:

  5. Validacion SARIF schema
  6. Evidence bundle testing

  7. Benchmarks completos:

  8. Parser benchmarks
  9. Scanner benchmarks

Largo Plazo (Trimestre)

  1. DVMCP cobertura 90%:
  2. Detectar challenges 3, 4
  3. Mejorar deteccion multi-vector

  4. ML validation:

  5. Dataset de validacion
  6. Metricas precision/recall

  7. Fuzzing:

  8. Fuzzing del parser
  9. Fuzzing de detectores

Metricas de Calidad

Actuales

Metrica Valor Target
Cobertura lineas ~70% 80%
Tests por paquete 8-50 15+
Tiempo CI ~2min <3min
Flaky tests 0 0

Tracking

# Generar reporte de cobertura
go test -coverprofile=coverage.out ./...
go tool cover -func=coverage.out | tail -1

# Contar tests
go test -v ./... 2>&1 | grep -c "=== RUN"

# Verificar flaky
for i in {1..10}; do go test ./... || echo "FLAKY"; done

Contribuir

Para mejorar la cobertura de tests:

  1. Identificar gaps en este documento
  2. Priorizar segun la tabla de prioridades
  3. Crear issue describiendo los tests a agregar
  4. Implementar siguiendo patrones existentes
  5. Actualizar este documento

Template de Issue

## Agregar tests para [componente]

### Contexto
[Descripcion del gap identificado]

### Tests a agregar
- [ ] Test 1: descripcion
- [ ] Test 2: descripcion
- [ ] Test 3: descripcion

### Fixtures necesarios
- [ ] Fixture vulnerable
- [ ] Fixture benigno

### Criterio de aceptacion
- Cobertura del componente >= 80%
- Todos los tests pasan
- Documentacion actualizada

Ultima actualizacion: Enero 2026