Orquesta Agentes IA que desarrollan por ti
Verificando...
35-dead-code-detection
Procedimiento: Dead Code Detection
Calidad de Codigo
1 plugin(s)
Editor
Preview
Tareas
1
Info
Titulo
Detecta c├│digo muerto o no utilizado. Identifica funciones, clases, y archivos que pueden eliminarse de forma segura.
Descripcion
Contenido Markdown
9302 caracteres
Guardar
# Procedimiento: Dead Code Detection ## Metadata - **ID**: PROC-35 - **Frecuencia**: Mensual - **Duraci├│n estimada**: 20-30 min - **Requiere**: Acceso al c├│digo fuente, build funcional - **Dependencias**: Ninguna - **Bloquea**: Ninguno - **Agentes**: dotnet-architect --- ## Objetivo Detectar y eliminar c├│digo muerto: 1. M├®todos nunca llamados 2. Clases no instanciadas 3. Variables no usadas 4. Imports/usings innecesarios 5. C├│digo comentado 6. Feature flags nunca activos --- ## Tipos de C├│digo Muerto | Tipo | Descripci├│n | Riesgo de Falso Positivo | |------|-------------|-------------------------| | Unreachable | C├│digo despu├®s de return/throw | Bajo | | Unused method | M├®todo privado sin llamadas | Bajo | | Unused class | Clase sin instancias | Medio | | Unused parameter | Par├ímetro ignorado | Bajo | | Dead branch | If siempre false | Bajo | | Commented code | C├│digo en comentarios | Bajo | | Reflection usage | Llamado via reflexi├│n | Alto | | API endpoint | Usado externamente | Alto | --- ## Herramientas | Herramienta | Lenguaje | Detecci├│n | |-------------|----------|-----------| | Roslyn Analyzers | C# | IDE + Build | | ReSharper/Rider | C# | IDE | | SonarQube | Multi | Server | | ESLint | JavaScript | CLI/IDE | | deadcode (Go) | Go | CLI | --- ## Checklist Ejecutable ### 1. Habilitar Analyzers de C├│digo Muerto #### .NET ```xml <!-- En .csproj o Directory.Build.props --> <PropertyGroup> <EnableNETAnalyzers>true</EnableNETAnalyzers> <AnalysisLevel>latest</AnalysisLevel> <!-- Detectar c├│digo no usado --> <NoWarn>$(NoWarn);IDE0051;IDE0052</NoWarn> <!-- Quitar para ver warnings --> </PropertyGroup> ``` ```bash # Build con warnings dotnet build /p:TreatWarningsAsErrors=false 2>&1 | grep -E "IDE0051|IDE0052|CS0169|CS0414" # IDE0051: Private member is never used # IDE0052: Private member can be removed # CS0169: Field is never used # CS0414: Field is assigned but never used ``` - [ ] Analyzers habilitados - [ ] Warnings recopilados ### 2. Detectar M├®todos Privados No Usados ```bash # .NET - Buscar m├®todos privados y verificar si se llaman grep -rn "private.*\s\w\+\s*(" src --include="*.cs" | \ while read line; do method=$(echo "$line" | grep -oE "\s\w+\s*\(" | tr -d '(' | tr -d ' ') file=$(echo "$line" | cut -d: -f1) # Buscar llamadas a este m├®todo count=$(grep -rn "\.$method\s*(" src --include="*.cs" | grep -v "private" | wc -l) if [ "$count" -eq 0 ]; then echo "POSIBLE NO USADO: $method en $file" fi done ``` - [ ] M├®todos privados sin llamadas: ___ ### 3. Detectar Clases No Instanciadas ```bash # Buscar clases y verificar instanciaci├│n grep -rn "class\s\+\w\+" src --include="*.cs" | \ grep -v "abstract\|static\|interface" | \ while read line; do class=$(echo "$line" | grep -oE "class\s+\w+" | cut -d' ' -f2) # Buscar new ClassName( count=$(grep -rn "new\s\+$class\s*(" src --include="*.cs" | wc -l) # Buscar DI registration di_count=$(grep -rn "AddScoped.*$class\|AddTransient.*$class\|AddSingleton.*$class" src --include="*.cs" | wc -l) if [ "$count" -eq 0 ] && [ "$di_count" -eq 0 ]; then echo "POSIBLE NO USADO: $class" fi done ``` - [ ] Clases no instanciadas: ___ ### 4. Detectar Usings Innecesarios ```bash # .NET - Buscar usings no utilizados # Mejor usar IDE o: dotnet format analyzers --verify-no-changes 2>&1 | grep "IDE0005" # IDE0005: Using directive is unnecessary ``` - [ ] Usings innecesarios: ___ ### 5. Detectar C├│digo Comentado ```bash # Buscar bloques de c├│digo comentado grep -rn "//\s*public\|//\s*private\|//\s*if\s*(\|//\s*for\s*(\|//\s*while\s*(" \ src --include="*.cs" | head -30 # Buscar /* */ con c├│digo grep -rn "/\*" src --include="*.cs" -A 5 | grep -E "public|private|class|void" | head -20 # Contar l├¡neas comentadas grep -rc "^\s*//" src --include="*.cs" | awk -F: '{sum += $2} END {print "Total comentarios: " sum}' ``` - [ ] Archivos con c├│digo comentado: ___ ### 6. Detectar Variables No Usadas ```bash # Warnings de compilaci├│n dotnet build 2>&1 | grep -E "CS0168|CS0219|CS0414" # CS0168: Variable declared but never used # CS0219: Variable assigned but never used # CS0414: Field assigned but never read ``` - [ ] Variables no usadas: ___ ### 7. Detectar Dead Branches ```bash # Condiciones siempre true/false grep -rn "if\s*(true)\|if\s*(false)\|if\s*(1)\|if\s*(0)" src --include="*.cs" # Constantes que hacen c├│digo unreachable grep -rn "#if\s\+false" src --include="*.cs" ``` - [ ] Dead branches: ___ ### 8. Verificar Falsos Positivos **C├│digo que parece muerto pero NO lo es:** | Caso | Verificaci├│n | |------|--------------| | Reflexi├│n | Buscar `GetMethod`, `Invoke`, `Activator` | | Serializaci├│n | Atributos `[JsonProperty]`, `[DataMember]` | | API endpoints | Controllers p├║blicos | | Event handlers | M├®todos con `event`, `+=` | | Interface implementations | Puede ser llamado via interface | | Test helpers | Usado en tests | ```bash # Verificar uso por reflexi├│n grep -rn "GetMethod\|GetType\|Activator\|Invoke" src --include="*.cs" | head -20 # Verificar atributos de serializaci├│n grep -rn "\[Json\|DataMember\|XmlElement" src --include="*.cs" | head -20 ``` - [ ] Falsos positivos descartados ### 9. Limpiar C├│digo Muerto ```bash # Generar lista de archivos a limpiar echo "Archivos para limpiar:" > dead_code_cleanup.md # Para cada item detectado, decidir: # - ELIMINAR: C├│digo claramente muerto # - REVISAR: Posible uso no detectado # - MANTENER: Falso positivo confirmado ``` - [ ] Lista de limpieza generada - [ ] Decisiones documentadas --- ## Output Esperado ``` ====== PROC-35 COMPLETADO [TIMESTAMP] ====== Proyecto: [nombre] RESUMEN: - Archivos analizados: X - Warnings de c├│digo muerto: Y POR CATEGOR├ìA: - M├®todos privados no usados: X - Clases no instanciadas: Y - Variables no usadas: Z - Usings innecesarios: W - C├│digo comentado: V l├¡neas DETALLE: | Tipo | Ubicaci├│n | Acci├│n | |------|-----------|--------| | M├®todo no usado | OrderService.cs:45 | Eliminar | | Clase no usada | OldHelper.cs | Eliminar | | C├│digo comentado | Utils.cs:100-150 | Eliminar | FALSOS POSITIVOS (mantener): - PaymentHandler.cs:Process - Llamado por reflexi├│n - ApiController.cs - Endpoints p├║blicos ACCIONES: 1. Eliminar X m├®todos no usados 2. Eliminar Y clases obsoletas 3. Limpiar Z l├¡neas comentadas 4. Quitar W usings ESTIMACI├ôN: X horas de limpieza ``` --- ## Criterios de ├ëxito - [ ] 0 warnings de c├│digo no usado (IDE0051, IDE0052) - [ ] 0 c├│digo comentado > 5 l├¡neas - [ ] 0 clases sin uso confirmado - [ ] Falsos positivos documentados --- ## Alertas y Escalaci├│n | Severidad | Condici├│n | Acci├│n | |-----------|-----------|--------| | WARNING | >50 warnings de c├│digo muerto | Planificar sprint de limpieza | | WARNING | >500 l├¡neas comentadas | Limpiar progresivamente | | INFO | <10 warnings | Mantener limpio | --- ## Automatizaci├│n En ejecuci├│n no-interactiva: 1. Ejecutar build con analyzers 2. Parsear warnings 3. Clasificar por tipo 4. Detectar falsos positivos conocidos 5. Generar reporte --- ## Exclusiones V├ílidas ```csharp // Suprimir warning para c├│digo usado por reflexi├│n [System.Diagnostics.CodeAnalysis.SuppressMessage("CodeQuality", "IDE0051:Remove unused private members", Justification = "Used by reflection")] private void OnPaymentReceived() { } // O con pragma #pragma warning disable IDE0051 private void ReflectionTarget() { } #pragma warning restore IDE0051 ``` --- --- ## Output Estructurado (Nexus) Al finalizar, el agente DEBE generar un bloque JSON con el siguiente formato para que Nexus pueda procesarlo automaticamente: ```json { "result": "success", "summary": "Ejecucion de PROC-35 completada. [Descripcion breve de resultados]", "metrics": { "issues_found": 0, "issues_resolved": 0, "issues_found": 10, "issues_fixed": 8, "custom": { "procedure_specific_metric": "value" } }, "backlog_items": [ { "title": "Titulo del item de seguimiento", "description": "Descripcion detallada si se requiere accion futura", "priority": "medium", "type": "improvement", "tags": ["proc-35"] } ], "next_steps": [ "Accion recomendada 1", "Accion recomendada 2" ], "warnings": [ "Advertencias encontradas durante la ejecucion" ] } ``` **Campos requeridos:** - `result`: `"success"` | `"partial"` | `"failed"` - `summary`: Resumen ejecutivo en 1-3 lineas **Metricas especificas de este procedure:** - dead_code_lines, files_affected, code_removed **Criterios de resultado:** - `success`: Procedimiento completado sin errores criticos - `partial`: Completado con algunos problemas menores o items pendientes - `failed`: Error critico o no se pudo completar ## Historial de Ejecuciones | Fecha | Proyecto | Warnings | Eliminados | L├¡neas Limpiadas | Estado | |-------|----------|----------|------------|------------------|--------| | | | | | | |
H1
H2
H3
Bold
Italic
Code
Lista
Num
Task
Code Block
Link
Nexus Platform
Reconectando
Recuperando la conexion
Se ha interrumpido la conexion con el servidor. Estamos reconectando automaticamente.
Reconectando...
Manten esta pestana abierta, volvemos enseguida.
No hemos podido reconectar
El servidor puede estar reiniciandose o tu conexion a internet es inestable.
Reintentar
La sesion ha expirado
Recarga la pagina para iniciar una nueva sesion.
Recargar
Si no vuelve en 30 segundos, recarga la pagina.