| """ |
| Patrones comunes de ambigüedad en historias de usuario. |
| """ |
|
|
| AMBIGUITY_PATTERNS = { |
| "lexicos": { |
| |
| "fácil", "simple", "rápido", "eficiente", |
| "mejor", "adecuado", "apropiado", |
| "flexible", "dinámico", "intuitivo", |
| "amigable", "óptimo", "robusto", |
| |
| |
| "algunos", "varios", "muchos", "pocos", |
| "más", "menos", "suficiente", |
| "bastante", "demasiado", "aproximadamente", |
| |
| |
| "pronto", "rápidamente", "periódicamente", |
| "regularmente", "ocasionalmente", "frecuentemente", |
| "en tiempo real", "instantáneamente", "ágilmente", |
| |
| |
| "moderno", "innovador", "avanzado", |
| "inteligente", "sofisticado", "elegante", |
| |
| |
| "user-friendly", "intuitivo", "natural", |
| "seamless", "fluido", "sin problemas" |
| }, |
| |
| "sintacticos": { |
| |
| r"(.*?) y (.*?) con (.*?)", |
| r"no (.*?) y (.*?)", |
| r"(.*?) o (.*?) y (.*?)", |
| r"(.*?) pero (.*?) si (.*?)", |
| r"(.*?) cuando (.*?) o (.*?)", |
| r"(.*?) excepto (.*?) y (.*?)", |
| r"(.*?) antes de (.*?) y (.*?)", |
| r"(.*?) después de (.*?) o (.*?)", |
| }, |
| |
| "semanticos": { |
| |
| "si es posible", |
| "cuando sea necesario", |
| "si se requiere", |
| "según corresponda", |
| "como sea apropiado", |
| "en caso de ser necesario", |
| "dependiendo del caso", |
| "si aplica", |
| "cuando corresponda", |
| "si es factible", |
| "en la medida de lo posible", |
| "siempre que sea posible" |
| }, |
| |
| "contextuales": { |
| |
| r"(?i)similar a (.*?)", |
| r"(?i)como en (.*?)", |
| r"(?i)igual que (.*?)", |
| |
| |
| r"(?i)de la manera usual", |
| r"(?i)como siempre", |
| r"(?i)de forma estándar", |
| |
| |
| r"(?i)esto", |
| r"(?i)eso", |
| r"(?i)aquello", |
| r"(?i)lo mismo" |
| } |
| } |
|
|
| |
| TECHNICAL_TERMS = { |
| |
| "OAuth", "autenticación", "autorización", |
| "token", "JWT", "SSO", "2FA", "MFA", |
| |
| |
| "base de datos", "SQL", "NoSQL", "cache", |
| "índice", "backup", "restauración", |
| |
| |
| "responsive", "CSS", "HTML", "JavaScript", |
| "React", "Angular", "Vue", "DOM", |
| |
| |
| "API", "REST", "GraphQL", "webhook", |
| "microservicio", "contenedor", "Docker", |
| |
| |
| "logging", "monitoreo", "alertas", |
| "deployment", "CI/CD", "pipeline", |
| |
| |
| "ROI", "KPI", "SLA", "métrica", |
| "dashboard", "reporte", "análisis" |
| } |
|
|
| |
| USER_STORY_PATTERNS = { |
| 'estandar': r"(?i)^como\s+(.+?),?\s+quiero\s+(.+?)(?:\s+para\s+(?:que\s+)?(.+))?$", |
| 'modal': r"(?i)^(?:un|una|el|la)\s+(.+?)\s+(?:puede|debe|debería)\s+(.+?)(?:\s+para\s+(?:que\s+)?(.+))?$", |
| 'pasiva': r"(?i)^(?:el|la|los|las)\s+(.+?)\s+(?:debe|deben|debería|deberían)\s+(?:ser|estar)\s+(.+?)(?:\s+para\s+(?:que\s+)?(.+))?$", |
| 'declarativa': r"(?i)^(?:los|las)\s+(.+?)\s+(?:deben|deberían)\s+(.+?)(?:\s+para\s+(?:que\s+)?(.+))?$", |
| 'necesidad': r"(?i)^(?:necesito|necesitamos|se\s+necesita)\s+(.+?)(?:\s+para\s+(?:que\s+)?(.+))?$", |
| 'deseo': r"(?i)^(?:deseo|deseamos|se\s+desea)\s+(.+?)(?:\s+para\s+(?:que\s+)?(.+))?$" |
| } |
|
|
| |
| PATRONES_AMBIGUEDAD_LEXICA = [ |
| { |
| "patron": r"\b(rápido|eficiente|fácil|simple|intuitivo|amigable|flexible|robusto)\b(?![^{]*\})", |
| "tipo": "adjetivo_subjetivo", |
| "descripcion": "Uso de adjetivos subjetivos que pueden interpretarse de diferentes maneras" |
| }, |
| { |
| "patron": r"\b(varios|algunos|muchos|pocos|diversos|múltiples)\b(?!\s+(?:formatos?|tipos?|archivos?|reportes?)\s+(?:como|:|\(|\{))", |
| "tipo": "cuantificador_ambiguo", |
| "descripcion": "Uso de cuantificadores ambiguos que no especifican una cantidad concreta" |
| }, |
| { |
| "patron": r"\b(etc|etcétera|entre otros|y más|y otros)\b", |
| "tipo": "enumeracion_incompleta", |
| "descripcion": "Uso de expresiones que dejan la enumeración incompleta o abierta" |
| }, |
| { |
| "patron": r"\b(sistema|aplicación|plataforma|herramienta|solución)\b(?!\s+(?:debe|debería|tiene que|ha de))", |
| "tipo": "termino_generico", |
| "descripcion": "Uso de términos genéricos que no especifican la funcionalidad concreta" |
| } |
| ] |
|
|
| |
| PATRONES_AMBIGUEDAD_SINTACTICA = [ |
| { |
| "patron": r"(?i)(?<![\w{])(y|o|y/o)(?!\s+(?:\d+|\{|\w+\s*[=:<>]))", |
| "tipo": "coordinacion_ambigua", |
| "descripcion": "Uso de coordinaciones que pueden crear ambigüedad en la interpretación" |
| }, |
| { |
| "patron": r"(?i)\b(esto|eso|aquello|el cual|la cual|lo cual|que)\b(?!\s+(?:significa|implica|requiere|incluye))", |
| "tipo": "referencia_ambigua", |
| "descripcion": "Uso de referencias ambiguas que pueden tener múltiples antecedentes" |
| }, |
| { |
| "patron": r"(?i)\b(si|cuando|mientras|después|antes|luego)\b(?!\s+(?:el|la|los|las|se)\s+(?:\w+\s+){0,3}(?:\d+|específico|definido))", |
| "tipo": "condicion_temporal_ambigua", |
| "descripcion": "Uso de condiciones o referencias temporales ambiguas" |
| }, |
| { |
| "patron": r"(?i)(poder|deber|necesitar|querer)\s+\w+\s+(y|o)\s+\w+(?!\s+(?:en|durante|cada|por)\s+(?:\d+|un|una)\s+(?:segundo|minuto|hora)s?)", |
| "tipo": "alcance_verbo_modal", |
| "descripcion": "Ambigüedad en el alcance de verbos modales con múltiples acciones" |
| } |
| ] |
|
|
| |
| SUGERENCIAS_MEJORA = { |
| "adjetivo_subjetivo": [ |
| "Especificar métricas o criterios medibles (ej: tiempo de respuesta en segundos)", |
| "Definir valores concretos o rangos aceptables", |
| "Usar términos más específicos y cuantificables" |
| ], |
| "cuantificador_ambiguo": [ |
| "Especificar cantidades exactas o rangos definidos", |
| "Listar explícitamente los elementos o tipos", |
| "Definir límites mínimos y máximos" |
| ], |
| "enumeracion_incompleta": [ |
| "Listar todos los elementos requeridos", |
| "Especificar criterios de inclusión/exclusión", |
| "Definir el alcance completo de la funcionalidad" |
| ], |
| "termino_generico": [ |
| "Especificar la funcionalidad concreta", |
| "Describir las características técnicas específicas", |
| "Detallar los componentes o módulos involucrados" |
| ], |
| "coordinacion_ambigua": [ |
| "Separar en historias de usuario independientes", |
| "Usar listas numeradas o viñetas para clarificar", |
| "Especificar la relación entre los elementos" |
| ], |
| "referencia_ambigua": [ |
| "Repetir el sustantivo al que se hace referencia", |
| "Usar referencias específicas y directas", |
| "Evitar pronombres ambiguos" |
| ], |
| "condicion_temporal_ambigua": [ |
| "Especificar intervalos de tiempo exactos", |
| "Definir el orden preciso de las acciones", |
| "Usar referencias temporales específicas (ej: cada 5 minutos)" |
| ], |
| "alcance_verbo_modal": [ |
| "Separar las acciones en requisitos independientes", |
| "Especificar las condiciones para cada acción", |
| "Definir la prioridad o secuencia de las acciones" |
| ] |
| } |