ISO/IEC 25010 Aplicada al Desarrollo de Software: Guía Práctica Paso a Paso

INNODEV SOLUTIONS INNODEV SOLUTIONS •
ISO/IEC 25010 Aplicada al Desarrollo de Software: Guía Práctica Paso a Paso
Metodología de Ingeniería Guía de Implementación SDLC Lectura: 15 min Norma ISO/IEC 25010:2023

De la teoría a la trinchera del código: cómo aplicar estándares de calidad en cada fase del desarrollo real.

Muchos equipos perciben las normas ISO como documentos burocráticos redactados por auditores que nunca han desplegado una línea de código a producción. Sin embargo, cuando la norma ISO/IEC 25010 se traduce a prácticas concretas dentro de Jira, revisiones de código (Pull Requests) y pipelines de integración continua (CI/CD), se convierte en el manual operativo más eficaz para reducir deuda técnica, prevenir caídas de servidores y entregar productos de alta ingeniería.

Principio fundamental: La calidad no se prueba al final, se diseña desde el inicio

Intentar inyectar calidad a un software únicamente en la fase de control de calidad (QA) es tan inútil como intentar hornear un pastel y agregarle el azúcar después de sacarlo del horno. Los atributos de calidad (rendimiento, seguridad, mantenibilidad, fiabilidad) deben gobernarse de forma sistemática a lo largo de las 7 fases del ciclo de vida del software (SDLC).


Paso 1: Levantamiento y Especificación de Criterios No Funcionales (Fase de Análisis)

El 80% de los problemas de rendimiento y estabilidad en producción nacen en la toma de requisitos. Cuando un cliente o Product Owner formula requerimientos ambiguos, el equipo programa a ciegas.

En esta fase, la ISO/IEC 25010 sirve como diccionario de traducción para transformar deseos vagos en criterios de aceptación verificables:

Requerimiento Habitual (Ambiguo) Dimensión ISO 25010 Criterio de Aceptación Técnico (Verificable)
"El sistema debe cargar rápido." Eficiencia / Comportamiento Temporal El tiempo de respuesta de la API para consultas de catálogo debe tener una latencia p95 < 250 ms bajo una carga sostenida de 200 peticiones concurrentes.
"La aplicación debe ser segura." Seguridad / Confidencialidad & Autenticidad Toda comunicación externa debe usar TLS 1.3. Las contraseñas deben cifrarse con Argon2id. El endpoint de login debe bloquear la IP tras 5 intentos fallidos consecutivos.
"No debe caerse nunca." Fiabilidad / Disponibilidad & Tolerancia a Fallos Uptime garantizado de 99.9%. Si la pasarela de pagos externa deja de responder, el sistema activará un Circuit Breaker en 3 segundos y encolará la orden para reintento.
"Cualquiera debe poder usarlo." Capacidad de Interacción / Accesibilidad Cumplimiento formal de WCAG 2.2 nivel AA: contraste mínimo de texto 4.5:1, navegación completa mediante teclado y atributos ARIA en todos los componentes interactivos.

Paso 2: Diseño de la Arquitectura de Software

La arquitectura de una aplicación representa el conjunto de decisiones estructurales más difíciles y costosas de cambiar una vez iniciado el desarrollo. Cada decisión debe responder directamente a uno o más atributos de calidad de la norma.

Ecosistema Arquitectónico Basado en Atributos de Calidad

1. Clientes
Web / Móvil (SPA/PWA)

Foco: Usabilidad y tiempos de carga ligeros (Core Web Vitals).

2. Frontera
API Gateway & WAF

Foco: Seguridad (filtrado de ataques, rate limiting y mTLS).

3. Núcleo
Servicios Desacoplados

Foco: Mantenibilidad (SOLID) y Fiabilidad (Circuit Breakers).

4. Datos
Caché & BD Replicada

Foco: Rendimiento (Redis) y Tolerancia a Fallos (Failover).

Decisiones técnicas prioritarias en la arquitectura:

  1. Modularidad y Modificabilidad (Mantenibilidad): Implementa una Arquitectura Hexagonal (Puertos y Adaptadores) o Arquitectura Limpia. Separa el núcleo de dominio (reglas puras del negocio) de los adaptadores de infraestructura (controladores HTTP, repositorios de base de datos, clientes de correo). Esto permite migrar de base de datos o sustituir librerías externas sin alterar una sola línea del modelo de negocio.
  2. Interoperabilidad (Compatibilidad): Establece contratos de interfaz formales utilizando especificaciones estandarizadas como OpenAPI 3.1 para servicios REST o esquemas tipados con Protocol Buffers para comunicaciones gRPC. Los sistemas externos deben integrarse a través de especificaciones claras y contratos versionados.
  3. Resiliencia y Tolerancia a Fallos (Fiabilidad): Aplica el patrón Circuit Breaker en cada llamada a dependencias de red externas. Si un servicio externo comienza a arrojar errores o retrasos anormales, el interruptor se abre para evitar saturar los hilos de ejecución del backend, respondiendo con un comportamiento de contingencia (fallback).

Paso 3: Desarrollo Backend con Código Limpio y Seguridad Defensiva

Durante la fase de construcción, el equipo de desarrollo debe convertir los principios de calidad en hábitos cotidianos de codificación.

Comparativa: Código Monolítico vs. Código Orientado a Calidad

Observa la diferencia entre un código escrito sin estándares frente a una implementación desacoplada y preparada para pruebas unitarias:

// IMPLEMENTACIÓN DEFICIENTE
// Viola el Principio de Responsabilidad Única. Difícil de probar, acoplado y frágil.
async function procesarOrden(ordenData: any) {
  // 1. Validación manual débil (Riesgo de Adecuación Funcional y Seguridad)
  if (!ordenData.clienteId || ordenData.total <= 0) {
    throw new Error("Datos inválidos");
  }
  
  // 2. Consulta SQL directa con riesgo de inyección si no se parametriza
  const query = `INSERT INTO ordenes (cliente_id, total) VALUES ('${ordenData.clienteId}', ${ordenData.total})`;
  await database.raw(query);
  
  // 3. Llamada directa acoplada a servicio de terceros (Riesgo de Fiabilidad)
  const respuestaPago = await http.post("https://api.pagos.com/cobrar", { monto: ordenData.total });
  
  // 4. Envío directo de email dependiente de red
  await smtp.sendMail({ to: "[email protected]", subject: "Orden lista" });
}
// IMPLEMENTACIÓN ORIENTADA A ISO 25010 (Mantenibilidad, Fiabilidad, Seguridad)
// Separación de responsabilidades, inyección de dependencias y código comprobable.
export class ProcesadorOrdenUseCase {
  constructor(
    private readonly validador: ValidadorOrden,
    private readonly ordenRepository: OrdenRepositoryPort,
    private readonly pasarelaPagos: PasarelaPagosPort,
    private readonly notificador: NotificadorPort
  ) {}

  async ejecutar(command: CrearOrdenCommand): Promise<ResultadoOrden> {
    // Seguridad y Adecuación: validación estricta de esquema
    const ordenValida = this.validador.validar(command);

    // Mantenibilidad: persistencia desacoplada mediante interfaz
    const ordenGuardada = await this.ordenRepository.guardar(ordenValida);

    // Fiabilidad: llamada protegida por adaptador con Circuit Breaker y timeout
    await this.pasarelaPagos.cobrar(ordenGuardada.id, ordenGuardada.total);

    // Resiliencia asincrónica: evento emitido a cola de mensajería
    await this.notificador.notificarCreacion(ordenGuardada);

    return new ResultadoOrden(ordenGuardada.id, "PROCESADA");
  }
}
Beneficio directo: La segunda implementación permite simular (mockear) la base de datos y la pasarela de pagos en pruebas unitarias en milisegundos, no depende de la red externa para verificar la lógica y permite cambiar el proveedor de pagos sin modificar el flujo de negocio.

Paso 4: Optimización de Frontend (Interaction Capability & Rendimiento)

El frontend es el punto de contacto directo con el usuario. Las directrices de la versión 2023 de la norma priorizan la Capacidad de Interacción y el Comportamiento Temporal:

1. Métricas Core Web Vitals

Optimiza los tres indicadores esenciales: LCP (Largest Contentful Paint < 2.5s), INP (Interaction to Next Paint < 200ms) y CLS (Cumulative Layout Shift < 0.1) mediante carga diferida de imágenes y minimización de paquetes JavaScript.

2. Prevención de Errores de Usuario

Valida formularios en tiempo real antes del envío. Proporciona mensajes contextuales explicativos, estados de carga claros que deshabiliten dobles clics y mecanismos de confirmación explícita para acciones destructivas.

3. Accesibilidad e Inclusividad

Garantiza que la interfaz sea operable mediante teclado, que los textos mantengan un contraste accesible y que todos los controles cuenten con etiquetas legibles por lectores de pantalla (cumplimiento WCAG 2.2).


Paso 5: Estrategia de Pruebas Automatizadas (La Pirámide de Testing)

El equipo de aseguramiento de calidad (QA) debe articular una estrategia de pruebas que cubra las distintas dimensiones de la norma según la Pirámide de Automatización:

Estrategia de Pruebas Mapeada a ISO 25010

Cúspide: 10% Pruebas End-to-End y de Rendimiento
Pruebas con Playwright/Cypress y pruebas de carga con k6 (Eficiencia y Usabilidad).
Centro: 20% Pruebas de Integración y Contrato
Validación de base de datos, endpoints REST y contratos de API (Compatibilidad y Fiabilidad).
Base: 70% Pruebas Unitarias Automatizadas
Pruebas de lógica pura de negocio con JUnit, Jest o PyTest (Adecuación Funcional y Mantenibilidad).

Paso 6: Automatización en CI/CD y Quality Gates Infranqueables

El control de calidad no debe depender de la memoria de las personas ni de listas de verificación manuales. Debe ejecutarse automáticamente en cada git push o Pull Request mediante un flujo de Quality Gate:

# Ejemplo representativo de GitHub Actions con Quality Gate
name: Pipeline de Calidad ISO 25010

on: [push, pull_request]

jobs:
  calidad-y-seguridad:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Configurar Entorno
        uses: actions/setup-node@v4
        with:
          node-version: 20

      # 1. Mantenibilidad: Verificación de estilo y complejidad
      - name: Ejecutar Linter y Reglas de Código
        run: npm run lint

      # 2. Adecuación y Mantenibilidad: Pruebas unitarias con umbral de cobertura
      - name: Pruebas Unitarias con Cobertura
        run: npm run test:coverage -- --coverageThreshold='{"global":{"lines":80}}'

      # 3. Seguridad: Análisis Estático de Vulnerabilidades (SAST)
      - name: Escaneo de Seguridad y Deuda Técnica
        uses: sonarsource/sonarqube-scan-action@master
        env:
          SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}

      # 4. Compatibilidad y Portabilidad: Verificación de construcción en contenedor
      - name: Build de Imagen Docker
        run: docker build -t app:${{ github.sha }} .
Compuerta de calidad infranqueable: Si la cobertura de código cae por debajo del 80%, si el linter detecta código con complejidad ciclomática excesiva o si SonarQube identifica una vulnerabilidad de seguridad crítica, el pipeline se detiene automáticamente y bloquea la fusión del código hacia la rama principal.

Paso 7: Observabilidad y Operaciones en Producción

La evaluación de la calidad bajo ISO 25010 no concluye con el despliegue; se valida continuamente mediante la telemetría en tiempo real:

Los Cuatro Señales de Oro (SRE)

Latencia: Tiempo que tarda el sistema en atender peticiones exitosas y fallidas.
Tráfico: Demanda y volumen de peticiones procesadas por segundo.
Errores: Tasa de respuestas con códigos de error HTTP 5xx o excepciones internas.
Saturación: Porcentaje de consumo de recursos críticos (memoria, CPU, conexiones de base de datos).

Captura de Errores y Post-Mortems

Sentry / Datadog: Detección inmediata de excepciones no controladas antes de que los usuarios las reporten.
Logs Estructurados: Registro en formato JSON con Correlation IDs para rastrear una petición a lo largo de múltiples microservicios.
Post-Mortem Sin Culpa: Análisis técnico tras cualquier incidente mayor para identificar causas de raíz y alimentar la mejora continua.

Checklist Práctico de Implementación para el Tech Lead

Utiliza esta lista de verificación paso a paso para auditar el cumplimiento del estándar en tu equipo:

Fase de Análisis: ¿Están definidos los requisitos no funcionales con métricas objetivas (p95, concurrencia, Uptime) antes de estimar las tareas?
Fase de Arquitectura: ¿El núcleo del negocio está desacoplado de las librerías externas mediante una Arquitectura Hexagonal o Limpia?
Fase de Desarrollo: ¿Se aplican principios SOLID y revisiones de código obligatorias enfocadas en mantenibilidad y seguridad?
Fase de QA: ¿Existe una pirámide de testing automatizada que cubra pruebas unitarias, de integración y de estrés?
Fase de CI/CD: ¿El pipeline cuenta con compuertas de calidad que impidan desplegar código con fallos de seguridad o baja cobertura?
Fase de Operaciones: ¿Están instrumentadas métricas de rendimiento y trazabilidad distribuida para monitorear el comportamiento en producción?

Conclusión

Adoptar la norma ISO/IEC 25010 no requiere cambiar radicalmente la metodología de trabajo ni detener las operaciones del negocio. Se trata de incorporar disciplina técnica en cada paso: definir requisitos medibles, diseñar arquitecturas tolerantes a fallos, escribir código limpio y automatizar las comprobaciones de calidad en el pipeline.

Al ejecutar este proceso paso a paso, los equipos de desarrollo dejan de apagar incendios en producción y construyen sistemas escalables, robustos y rentables para la organización.


INNODEV SOLUTIONS S.A.S.

¿Quieres implementar estas prácticas de ingeniería en tu equipo de desarrollo?

En INNODEV SOLUTIONS acompañamos a empresas de tecnología, departamentos de TI y fábricas de software en la modernización de sus procesos de ingeniería, diseño de arquitecturas resilientes, automatización de pruebas y aseguramiento de calidad bajo estándares internacionales.

Agenda una Sesión de Trabajo con Nuestros Ingenieros →

Referencias Oficiales y Recursos de Consulta:

  • [1] ISO — ISO/IEC 25010:2023: Systems and software engineering — Systems and software Quality Requirements and Evaluation (SQuaRE). iso.org
  • [2] Google Site Reliability Engineering (SRE): Monitoring Distributed Systems and The Four Golden Signals. sre.google
  • [3] OWASP Foundation: DevSecOps Guideline and Secure Coding Practices. owasp.org
  • [4] W3C Web Accessibility Initiative (WAI): Web Content Accessibility Guidelines (WCAG) 2.2. w3.org/WAI

Vaciar Lista

¿Estás seguro de que deseas eliminar todos los productos de tu lista de consultas?

Comparativa de Productos