Skip to content
IRC-CodingIRC-Coding
Aseguramiento de CalidadCode ReviewAuditoríaAnálisis Estático de CódigoPair ProgrammingBugtrackingCICDContinuous Deployment

Medidas de QA: CI/CD, Code Reviews y Tests

Guía completa de aseguramiento de calidad: auditorías, revisiones de código, análisis estático, CI/CD y métricas.

S

schutzgeist

13 min read
Medidas de QA: CI/CD, Code Reviews y Tests

Medidas de Aseguramiento de Calidad

Este artículo es una definición conceptual sobre medidas de aseguramiento de calidad, incluyendo preguntas de examen y etiquetas.

Resumen Ejecutivo

La calidad integral se logra mediante medidas coordinadas: auditorías, revisiones de código, métodos de prueba, análisis estático de código, pair programming, seguimiento de defectos, un proceso de desarrollo sólido y pipelines CI/CD consistentes, medibles a través de objetivos de calidad y quality gates.

Descripción Técnica Compacta

Preventivo vs. Detectivo

  • Preventivo: directrices, capacitación, pair programming, definition of done
  • Detectivo: análisis estático de código, pruebas, revisiones de código, auditorías

Lo central es una pipeline automatizada con Continuous Integration que construye, analiza y prueba cada cambio, reportando resultados, y que entrega mediante Continuous Delivery o Continuous Deployment. El bugtracking gestiona el ciclo de vida de los defectos (estado, severidad, vinculación a commits, releases). La documentación (arquitectura, ADRs, operaciones) se mantiene como parte de la calidad y se versionan.

Puntos Clave para Examen

Auditorías (internas/externas)

  • Catálogos de verificación: listas predefinidas para aspectos de seguridad, cumplimiento y calidad
  • Documentación de evidencia: registro de medidas, resultados de pruebas y revisiones
  • Plan de acción: pasos concretos para corregir deficiencias identificadas con cronogramas
  • Muestreo estadístico: verificación de artefactos y procesos mediante técnicas estadísticas
  • Audit-Trail: documentación completa de todos los cambios y decisiones

Procesos de Revisión de Código

  • Principio de cuatro ojos: al menos dos personas deben revisar y aprobar el código
  • Lista de verificación de revisión: criterios estandarizados para arquitectura, seguridad, desempeño, pruebas
  • Pre-chequeos automatizados: linting, formateo, unit tests antes de revisión manual
  • Tipos de revisión: revisión informal, technical review, inspection con roles definidos
  • Métricas: cobertura de revisión, tasa de detección de defectos, tiempo de revisión

Métodos y Estrategias de Prueba

  • Pirámide de pruebas: unit tests (70%), integration tests (20%), E2E tests (10%)
  • Tipos de prueba: pruebas funcionales, pruebas no funcionales, pruebas de aceptación, pruebas de regresión
  • Automatización de pruebas: integración CI, ejecución paralela, gestión de datos de prueba
  • Pruebas exploratorias: pruebas basadas en experiencia sin scripts predefinidos
  • Mutation Testing: medida de calidad de penetración de pruebas mediante mutaciones de código

Análisis Estático de Código

  • Métricas de calidad: cyclomatic complexity, code smells, technical debt
  • Security Scanning: OWASP Top 10, verificación de dependencias, SAST (Static Application Security Testing)
  • Quality Gates de código: umbrales definidos para métricas y violaciones de reglas
  • Herramientas: SonarQube, ESLint, Checkstyle, PMD, Fortify
  • Monitoreo continuo: análisis de tendencias y evolución de calidad a lo largo del tiempo

Pair/Mob Programming

  • Distribución de roles: driver (escribe código), navigator (observa, participa en la reflexión)
  • Mecánica de rotación: cambio regular de roles (por ejemplo, cada 25 minutos)
  • Transferencia de conocimiento: intercambio directo de experiencia y mentoría
  • Ventajas de calidad: detección de errores en tiempo real, mejores decisiones arquitectónicas
  • Configuración remota: screen-sharing, herramientas de live-coding, plataformas virtuales de pairing

Seguimiento de Defectos y Gestión de Errores

  • Ciclo de vida del defecto: new → in progress → fixed → tested → closed
  • Priorización: severity (impacto) vs. priority (urgencia)
  • MTTR (Mean Time To Repair): métrica de velocidad de reparación
  • Densidad de defectos: número de errores por línea de código o punto de función
  • Análisis de causa raíz: investigación sistemática de causas en errores críticos

Proceso de Desarrollo y Estándares

  • Definition of Ready (DoR): criterios para incluir en sprint/backlog
  • Definition of Done (DoD): criterios de finalización para user stories/tareas
  • Estrategias de branching: git flow, github flow, trunk-based development
  • Release Management: versionado, release notes, estrategias de deployment
  • Requisitos de cumplimiento: GDPR, normas ISO, estándares de industria

Arquitectura de Pipeline CI/CD

  • Fases de pipeline: build → test → analyze → package → deploy → monitor
  • Quality Gates: puntos de decisión automatizados con criterios definidos
  • Estrategias de rollback: reversión automática ante fallos en deployment
  • Feature Flags: control de activación de funcionalidades sin nuevos releases
  • Canary/Blue-Green: estrategias de deployment con riesgo minimizado

Métricas de Calidad e Indicadores Clave

  • ISO 25010: funcionalidad, confiabilidad, usabilidad, eficiencia, mantenibilidad, portabilidad
  • Métricas DORA: deployment frequency, lead time, MTTR, change failure rate
  • Calidad de código: test coverage, code duplication, technical debt ratio
  • Desempeño: response time, throughput, resource utilization
  • Seguridad: vulnerability count, security score, compliance rate

Documentación y Gestión del Conocimiento

  • Documentación de arquitectura: C4-model, ADRs (architecture decision records)
  • Documentación de API: OpenAPI/Swagger, ejemplos, versionado
  • Documentación operativa: guías de deployment, manuales de monitoring
  • Base de conocimiento: FAQ, best practices, lessons learned
  • Versionado: documentos como parte del repositorio con change log

Componentes Clave

  1. Objetivos de calidad y métricas (características ISO 25010)
  2. Prácticas de revisión (código, arquitectura, seguridad)
  3. Estrategia de pruebas (pirámide de pruebas, mutation testing, control de flakiness)
  4. Análisis estático de código y security scans
  5. Pair/Mob Programming
  6. Proceso de bugtracking (triage, priorización)
  7. Proceso de desarrollo (DoR, DoD, flujos de release)
  8. Pipeline CI (build, lint, test, análisis, artefactos)
  9. Continuous Delivery (liberación manual, staging, canary, blue-green)
  10. Continuous Deployment (automático cuando gates se cumplen)

Ejemplo Práctico (cadena de QA simplificada para un webservice)

DoD: Unit tests presentes, coverage creciente, análisis verde, revisión confirmada, ticket vinculado, changelog, documentación actualizada
Pipeline:
1) Lint + Format
2) Unit Tests + Mutation Testing
3) Análisis estático de código (Quality Gate)
4) Build + firma de artefacto
5) Integration tests en contenedor
6) Contract Tests contra servicios vecinos
7) Deployment a staging (CD)
8) E2E Smoke Tests
9) Liberación / go-live automático (Deployment)
10) Monitoring activo
Revisiones: Checklist de PR (arquitectura, seguridad, tests, documentación)
Bugtracking: Ticket (alto) → reproducción → caso de prueba → fix (commit) → regressión test → verificado → cerrado

Ventajas y Desventajas

Ventajas

  • Detección temprana de defectos
  • Menores costos de retrabajo
  • Calidad reproducible
  • Mejor evidencia de cumplimiento
  • Mayor conocimiento del equipo
  • Releases más rápidas y seguras

Desventajas

  • Esfuerzo inicial de implementación
  • Curva de aprendizaje
  • Posible ralentización sin disciplina
  • La dirección por métricas puede sesgar el comportamiento

Preguntas Típicas de Examen (con Respuesta Corta)

  1. ¿Continuous Delivery vs. Continuous Deployment? Delivery: técnicamente posible en cualquier momento, liberación manual. Deployment: automático cuando los gates están en verde.
  2. ¿Qué va en una checklist de revisión? Conformidad arquitectónica, verificación de seguridad, manejo de errores, tests, naming, complejidad, logging, documentación.
  3. ¿Cómo se prepara una auditoría? Definir alcance, recopilar evidencia, proporcionar políticas/ADRs, tomar muestras, elaborar plan de acción.
  4. ¿Rol del análisis estático de código? Automatiza detección de violaciones de estilo, estructura y seguridad, establece quality gate.
  5. ¿Cómo se mide la efectividad de las pruebas? Mutation score, tasa de flakiness, detección de defectos antes de release, coverage como tendencia.

Fuentes principales

  1. https://martinfowler.com/articles/continuousIntegration.html
  2. https://testing.googleblog.com
  3. https://owasp.org

Preguntas típicas que un evaluador podría hacer

1. ¿Cuál es la diferencia entre Continuous Delivery y Continuous Deployment?

Respuesta: Continuous Delivery significa que el software está técnicamente listo para producción en cualquier momento, pero requiere una liberación manual. Continuous Deployment va más allá y automatiza todo el proceso hasta la puesta en producción cuando se cumplen todos los Quality Gates. En resumen: Delivery es “listo para desplegar”, Deployment es “desplegado automáticamente”.

2. ¿Qué componentes debe incluir una lista de verificación para Code Review?

Respuesta: Una lista de verificación completa debe contener: conformidad arquitectónica (decisiones, patrones), verificación de seguridad (validación de entrada, autenticación), manejo de errores (Exception Handling, Logging), cobertura de pruebas (Unit Tests, tests de integración), convenciones de nombres, complejidad del código (Cyclomatic Complexity), aspectos de rendimiento y documentación (comentarios, API Doc).

3. ¿Cómo se prepara una auditoría de aseguramiento de calidad?

Respuesta: La preparación de auditoría incluye: definir el alcance (procesos, sistemas, períodos), recopilar evidencia (documentación, resultados de pruebas, registros), proporcionar políticas y ADRs, crear un plan de muestreo, capacitar al personal, desarrollar un plan de acciones para deficiencias identificadas y asegurar el Audit Trail.

4. ¿Qué papel juega el análisis estático de código en la aseguración de calidad?

Respuesta: El análisis estático de código permite la detección automatizada de violaciones estilísticas, estructurales y relacionadas con seguridad sin ejecutar el código. Establece Quality Gates, monitorea Technical Debt, verifica reglas de cumplimiento y proporciona métricas como Cyclomatic Complexity. Herramientas como SonarQube se integran en pipelines CI/CD y previenen la integración de código de baja calidad.

5. ¿Cómo se mide la efectividad de las pruebas?

Respuesta: La efectividad de las pruebas se mide a través de varias métricas: Mutation Score (qué tan bien las pruebas detectan mutaciones de código), Flaky Rate (estabilidad de las pruebas), detección de defectos antes del lanzamiento, Test Coverage como tendencia (no como número absoluto), tiempo de ejecución de pruebas y tasa de éxito de pruebas de regresión. Alta efectividad se demuestra con detección temprana de errores y pocos defectos en producción.

6. ¿Qué son los Quality Gates y cómo se implementan?

Respuesta: Los Quality Gates son puntos de decisión automatizados en pipelines CI/CD que permiten o bloquean el avance basándose en criterios de calidad definidos. La implementación ocurre a través de umbrales para métricas (Coverage < 80% = bloqueo), escaneos de seguridad, pruebas de rendimiento y estado de Code Review. Los gates se configuran en herramientas de pipeline como Jenkins, GitLab CI o GitHub Actions.

7. Explique la pirámide de pruebas y su importancia.

Respuesta: La pirámide de pruebas describe la distribución ideal de tipos de pruebas: Unit Tests (70%) rápidos, aislados y numerosos; Tests de integración (20%) moderados, verifican interacción de componentes; E2E Tests (10%) lentos, prueban todo el sistema. Su importancia radica en: retroalimentación rápida con muchos Unit Tests, eficiencia de costos al usar menos E2E Tests costosos, mejor aislamiento de fallos y suite de pruebas estable.

8. ¿Qué es Mutation Testing y cuándo se utiliza?

Respuesta: Mutation Testing es una técnica para evaluar la calidad de las pruebas. Realiza pequeños cambios (mutaciones) en el código y verifica si las pruebas los detectan. Se utiliza en sistemas críticos, para optimizar pruebas y en Quality Gates. Un alto Mutation Score (mayor que 80%) indica buena cobertura de pruebas. Herramientas como PIT (Java) o Stryker (JavaScript) automatizan este proceso.

9. ¿Qué ventajas ofrece Pair Programming para la aseguración de calidad?

Respuesta: Pair Programming proporciona revisión en tiempo real (los errores se detectan inmediatamente), transferencia de conocimiento (intercambio de experiencias entre compañeros), tasa de defectos más baja (dos pares de ojos ven más), mejores decisiones arquitectónicas (discusión en equipo) y aprendizaje continuo. Es especialmente valioso para problemas complejos, integración de nuevos empleados y áreas críticas del código.

10. ¿Cómo funciona un proceso efectivo de seguimiento de errores?

Respuesta: Un proceso efectivo de seguimiento de errores incluye: captura estructurada (pasos de reproducción, entorno, logs), priorización según severidad e importancia, asignación a desarrolladores responsables, seguimiento de estado (Nuevo → En progreso → Corregido → Probado → Cerrado), vinculación con commits y lanzamientos, análisis de causa raíz y métricas como MTTR y densidad de defectos.

11. ¿Qué son Definition of Ready (DoR) y Definition of Done (DoD)?

Respuesta: Definition of Ready (DoR) define criterios que una User Story debe cumplir antes de ser incluida en un sprint (requisitos claros, criterios de aceptación, técnicamente factible). Definition of Done (DoD) describe criterios de conclusión para una tarea (Code Review aprobado, pruebas en verde, documentación actualizada, listo para desplegar). Ambos actúan como mecanismos de aseguración de calidad en el proceso ágil.

12. ¿Qué estrategias de ramificación son adecuadas para la aseguración de calidad?

Respuesta: Git Flow (ramas feature, develop, release, master) es apropiado para lanzamientos estructurados con pruebas extensas. GitHub Flow (rama feature → master → deploy) funciona bien para ciclos rápidos de despliegue. Trunk-Based Development favorece una integración continua extrema con ramas mínimas. La elección depende de frecuencia de lanzamiento, tamaño del equipo, requisitos de cumplimiento y tolerancia al riesgo.

13. ¿Cómo se integran los aspectos de seguridad en las pipelines CI/CD?

Respuesta: La integración de seguridad se realiza mediante: SAST (Static Application Security Testing) durante la compilación, escaneo de dependencias para vulnerabilidades conocidas, DAST (Dynamic Application Security Testing) en staging, escaneo de contenedores, gestión de secretos, comprobaciones de cumplimiento y Quality Gates de seguridad. Herramientas como OWASP ZAP, SonarQube Security o Trivy se integran en fases de la pipeline.

14. ¿Qué son Feature Flags y cómo apoyan la aseguración de calidad?

Respuesta: Feature Flags son interruptores de configuración que habilitan o deshabilitan funcionalidades en tiempo de ejecución. Apoyan la aseguración de calidad mediante liberación gradual (Canary Releases), A/B Testing, desactivación rápida en caso de problemas, desarrollo paralelo y despliegues con riesgo minimizado. Se implementan a través de servidores de configuración, herramientas de Feature Toggle o archivos de configuración simples.

15. Explique las estrategias de despliegue Canary y Blue-Green.

Respuesta: El despliegue Canary lanza la nueva versión gradualmente a pequeños grupos de usuarios y monitorea métricas. El despliegue Blue-Green mantiene dos entornos de producción idénticos y cambia todo el tráfico al nuevo entorno (Green). Ambos minimizan riesgos de despliegue, permiten rollback rápido y proporcionan retroalimentación temprana. La elección depende de la infraestructura y la estrategia de riesgo.

16. ¿Qué métricas se utilizan según DORA (DevOps Research and Assessment)?

Respuesta: Las métricas DORA incluyen: Deployment Frequency (con qué frecuencia se despliega), Lead Time for Changes (tiempo desde commit hasta despliegue), Mean Time To Recovery (MTTR) (tiempo para recuperarse tras un incidente) y Change Failure Rate (porcentaje de despliegues fallidos). Los de alto rendimiento muestran despliegues frecuentes, Lead Times cortos, recuperación rápida y baja tasa de fallos.

17. ¿Qué es Technical Debt y cómo se gestiona?

Respuesta: Technical Debt describe los costos futuros de decisiones técnicas subóptimas. Se gestiona mediante identificación (análisis de código, retroalimentación del equipo), priorización (impacto vs. esfuerzo), seguimiento (Technical Debt Ratio, SonarQube), estrategia de reembolso (sprints regulares de refactoring) y prevención (Code Reviews, decisiones arquitectónicas). El objetivo es tomar decisiones conscientes en lugar de permitir deterioro descontrolado.

18. ¿Cómo se prueban los requisitos no funcionales?

Respuesta: Las pruebas no funcionales incluyen: pruebas de rendimiento (carga, estrés, picos), pruebas de seguridad (penetración, vulnerabilidades), pruebas de usabilidad (experiencia de usuario, accesibilidad), pruebas de disponibilidad (alta disponibilidad, failover), pruebas de escalabilidad (escalado horizontal/vertical) y pruebas de cumplimiento (GDPR, normas ISO). Estas pruebas se ejecutan frecuentemente en entornos especializados con herramientas dedicadas.

19. ¿Qué son Architecture Decision Records (ADRs) y por qué son importantes?

Respuesta: Los ADRs documentan decisiones arquitectónicas importantes con contexto, decisión, justificación y consecuencias. Son importantes para la trazabilidad, transferencia de conocimiento, consistencia e incorporación de nuevos miembros. Los ADRs se versionan, típicamente en formato Markdown, y se tratan como parte de la documentación del proyecto. Apoyan la gobernanza arquitectónica y la toma de decisiones.

20. ¿Cómo se separa el entorno de prueba del entorno de producción?

Respuesta: La separación de entornos se logra mediante separación física (diferentes servidores/clusters), separación lógica (esquemas de base de datos, configuraciones), separación de red (firewalls, VPNs), separación de datos (datos de prueba anonimizados) y control de acceso (RBAC). El objetivo es proteger la seguridad de datos de producción, mantener pruebas estables y facilitar el desarrollo paralelo. Las tecnologías de contenedores (Docker, Kubernetes) simplifican esta separación.

21. ¿Qué es Contract Testing y cuándo se utiliza?

Respuesta: Contract Testing verifica la compatibilidad entre Microservicios a través de “contratos” definidos (especificaciones de API). Se utiliza en arquitecturas de Microservicios para acelerar pruebas de integración, detectar cambios que rompan la compatibilidad tempranamente y permitir desarrollo paralelo. Herramientas como Pact o Spring Cloud Contract automatizan este proceso e integran la verificación en pipelines CI/CD.

22. ¿Cómo se asegura la calidad de la documentación?

Respuesta: La calidad de la documentación se asegura mediante versionado (en el repositorio), automatización (generación de documentación a partir del código), procesos de revisión (revisión por Technical Writer), plantillas (estructuras estandarizadas), vinculación con código (API Doc), actualizaciones regulares (como parte de DoD) y retroalimentación de usuarios. Herramientas como Swagger/OpenAPI, Javadoc o MkDocs apoyan este proceso.

23. ¿Qué son Smoke Tests y cuándo se ejecutan?

Respuesta: Los Smoke Tests son pruebas simples que verifican la funcionalidad básica de una aplicación tras el despliegue. Se ejecutan después de cada despliegue para detectar errores críticos tempranamente. Ejemplos típicos: función de login, conexión a base de datos, endpoints de API, servicios externos. Son rápidos (pocos minutos) y proporcionan una señal clara de éxito o fallo para continuar con pruebas adicionales.

24. ¿Cómo se gestiona la preparación de datos de prueba en CI/CD?

Respuesta: La gestión de datos de prueba abarca Test Data Factories (generación programática), containerización (Docker con datos de prueba), migraciones de base de datos (Flyway, Liquibase), mocking para dependencias externas, limpieza de datos entre pruebas y versionado de datos de prueba. El objetivo es lograr pruebas reproducibles, rendimiento e aislamiento de entornos de prueba.

25. Prepárese para una pregunta típica de examen de QS.

Respuesta: Pregunta: “Describa un proceso de aseguración de calidad completo para un nuevo proyecto web.” Estructura de respuesta: 1. Medidas preventivas (Coding Standards, Architecture Guidelines), 2. Pipeline CI/CD (Build → Test → Analyze → Deploy), 3. Code Reviews (lista de verificación, principio de cuatro ojos), 4. Estrategia de pruebas (Unit, Integration, E2E), 5. Quality Gates (métricas, seguridad), 6. Monitoreo (métricas de producción), 7. Mejora continua (retrospectivas, métricas). Esta estructura demuestra enfoque sistemático y competencia en QS.

Volver al blog
Share:

Entradas relacionadas