Orquesta Agentes IA que desarrollan por ti
Verificando...
33-code-duplication-analysis
Procedimiento: Code Duplication Analysis
Calidad de Codigo
1 plugin(s)
Editor
Preview
Tareas
3
Info
Titulo
Detecta c├│digo duplicado en el proyecto. Identifica patrones repetidos, sugiere refactorizaciones, y calcula impacto de la duplicaci├│n.
Descripcion
Contenido Markdown
8065 caracteres
Guardar
# Procedimiento: Code Duplication Analysis ## Metadata - **ID**: PROC-33 - **Frecuencia**: Mensual - **Duraci├│n estimada**: 20-30 min - **Requiere**: Acceso al c├│digo fuente - **Dependencias**: Ninguna - **Bloquea**: Ninguno - **Agentes**: dotnet-architect --- ## Objetivo Detectar y reducir c├│digo duplicado: 1. Identificar bloques de c├│digo duplicados 2. Priorizar refactorizaciones de alto impacto 3. Proponer abstracciones (m├®todos, clases, utilities) 4. Reducir deuda t├®cnica por duplicaci├│n --- ## Umbrales | M├®trica | Aceptable | Warning | Cr├¡tico | |---------|-----------|---------|---------| | % Duplicaci├│n total | <5% | 5-10% | >10% | | Bloques duplicados | <20 | 20-50 | >50 | | L├¡neas en bloque | >6 l├¡neas | >10 l├¡neas | >20 l├¡neas | | Copias del mismo bloque | 2 | 3-4 | >5 | --- ## Herramientas | Herramienta | Lenguaje | Instalaci├│n | |-------------|----------|-------------| | jscpd | Multi-lenguaje | `npm install -g jscpd` | | CPD (PMD) | Java, C#, JS | Parte de PMD | | Simian | Multi-lenguaje | JAR | | dotnet-format | C# | `dotnet tool` | --- ## Checklist Ejecutable ### 1. Configurar Herramienta ```bash # Instalar jscpd (recomendado para multi-lenguaje) npm install -g jscpd # Verificar instalaci├│n jscpd --version ``` - [ ] Herramienta instalada ### 2. Ejecutar An├ílisis ```bash # An├ílisis con jscpd jscpd src/ \ --min-lines 6 \ --min-tokens 50 \ --reporters "console,json,html" \ --output ./reports/duplication \ --ignore "**/bin/**,**/obj/**,**/node_modules/**,**/*.generated.cs" # Para proyectos espec├¡ficos jscpd src/ \ --format "csharp" \ --min-lines 10 \ --threshold 10 ``` **Opciones importantes:** - `--min-lines`: M├¡nimo de l├¡neas para considerar duplicado (default: 5) - `--min-tokens`: M├¡nimo de tokens (default: 50) - `--threshold`: Porcentaje m├íximo aceptable - [ ] An├ílisis ejecutado - [ ] Reporte generado ### 3. Analizar Resultados ```bash # Leer reporte JSON cat reports/duplication/jscpd-report.json | jq '.statistics' # Ejemplo de salida: # { # "total": { # "lines": 50000, # "sources": 200, # "clones": 35, # "duplicatedLines": 1200, # "percentage": 2.4 # } # } ``` **M├®tricas clave:** - [ ] % Duplicaci├│n total: ___% - [ ] Total de clones: ___ - [ ] L├¡neas duplicadas: ___ ### 4. Identificar Duplicaciones Cr├¡ticas ```bash # Ordenar por impacto (m├ís l├¡neas = m├ís impacto) cat reports/duplication/jscpd-report.json | jq ' .duplicates | sort_by(-.lines) | .[0:10] | .[] | { lines: .lines, file1: .firstFile.name, file2: .secondFile.name, startLine1: .firstFile.start, startLine2: .secondFile.start }' ``` **Top 10 duplicaciones:** | # | L├¡neas | Archivo 1 | Archivo 2 | Prioridad | |---|--------|-----------|-----------|-----------| | 1 | ___ | ___ | ___ | Alta | | 2 | ___ | ___ | ___ | Alta | | ... | ... | ... | ... | ... | - [ ] Top 10 duplicaciones identificadas - [ ] Prioridades asignadas ### 5. Clasificar Tipo de Duplicaci├│n | Tipo | Descripci├│n | Soluci├│n | |------|-------------|----------| | Exacta | Mismo c├│digo | Extraer m├®todo/clase | | Similar | Peque├▒as diferencias | Parametrizar | | Estructural | Mismo patr├│n | Template/Generics | | Accidental | No relacionada | Puede ignorarse | ```bash # Revisar cada duplicaci├│n y clasificar # Abrir archivos y comparar contexto ``` - [ ] Duplicaciones clasificadas - [ ] Soluciones propuestas ### 6. Proponer Refactorizaciones **Template de propuesta:** ```markdown ## Refactorizaci├│n: [Nombre] ### Archivos Afectados - src/Services/OrderService.cs:45-80 - src/Services/InvoiceService.cs:120-155 ### C├│digo Duplicado (35 l├¡neas) ```csharp // L├│gica duplicada de validaci├│n public bool ValidateDocument(...) { // ... c├│digo duplicado ... } ``` ### Soluci├│n Propuesta Extraer a clase com├║n: ```csharp public class DocumentValidator { public bool Validate(IDocument doc) { ... } } ``` ### Impacto - L├¡neas eliminadas: 35 - Archivos modificados: 2 - Riesgo: Bajo ``` - [ ] Propuestas de refactorizaci├│n documentadas ### 7. Crear Tareas de Refactorizaci├│n ```bash # Generar issues/tareas # Para cada refactorizaci├│n prioritaria ``` | Tarea | Archivos | L├¡neas | Esfuerzo | Sprint | |-------|----------|--------|----------|--------| | Extraer DocumentValidator | 2 | 35 | 2h | Actual | | Unificar mappers | 4 | 80 | 4h | Pr├│ximo | - [ ] Tareas creadas en Holded/Jira --- ## Configuraci├│n Recomendada ```json // .jscpd.json { "threshold": 5, "reporters": ["html", "console", "json"], "ignore": [ "**/node_modules/**", "**/bin/**", "**/obj/**", "**/*.generated.cs", "**/*.Designer.cs", "**/Migrations/**" ], "format": ["csharp", "typescript", "javascript"], "minLines": 6, "minTokens": 50, "output": "./reports/duplication" } ``` --- ## Output Esperado ``` ====== PROC-33 COMPLETADO [TIMESTAMP] ====== Proyecto: [nombre] RESUMEN: - Total l├¡neas analizadas: X - L├¡neas duplicadas: Y - % Duplicaci├│n: Z% - Estado: Ô£à OK / ÔÜá´©Å Warning / ÔØî Cr├¡tico CLONES DETECTADOS: X TOP 5 DUPLICACIONES: | # | L├¡neas | Archivos | Tipo | |---|--------|----------|------| | 1 | 45 | OrderService, InvoiceService | Exacta | | 2 | 30 | UserMapper, ProductMapper | Similar | ... REFACTORIZACIONES PROPUESTAS: 1. Extraer DocumentValidator (35 l├¡neas, 2h) 2. Unificar Mappers (80 l├¡neas, 4h) 3. ... TAREAS CREADAS: - [TASK-123] Refactorizar validadores - [TASK-124] Unificar mappers ARCHIVOS PARA IGNORAR (falsos positivos): - Migrations/*.cs - *.Designer.cs ``` --- ## Criterios de ├ëxito - [ ] % Duplicaci├│n < 5% - [ ] No hay bloques > 20 l├¡neas duplicados - [ ] Refactorizaciones prioritarias planificadas --- ## Alertas y Escalaci├│n | Severidad | Condici├│n | Acci├│n | |-----------|-----------|--------| | CRITICAL | Duplicaci├│n > 10% | Planificar sprint de refactorizaci├│n | | WARNING | Duplicaci├│n > 5% | Crear tareas de mejora | | WARNING | Bloque > 50 l├¡neas | Refactorizar prioritariamente | | INFO | Duplicaci├│n < 5% | Documentar buen estado | --- ## Automatizaci├│n En ejecuci├│n no-interactiva: 1. Ejecutar jscpd con configuraci├│n 2. Parsear resultados 3. Calcular m├®tricas 4. Identificar top duplicaciones 5. Generar reporte --- --- ## 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-33 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-33"] } ], "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:** - duplications_found, duplications_fixed, similarity_percent **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 | % Duplicaci├│n | Clones | Refactorizados | 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.