ISO/IEC 25010 Aplicada al Desarrollo de Software: Guía Práctica Paso a Paso
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
Foco: Usabilidad y tiempos de carga ligeros (Core Web Vitals).
Foco: Seguridad (filtrado de ataques, rate limiting y mTLS).
Foco: Mantenibilidad (SOLID) y Fiabilidad (Circuit Breakers).
Foco: Rendimiento (Redis) y Tolerancia a Fallos (Failover).
Decisiones técnicas prioritarias en la arquitectura:
- 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.
- 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.
- 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");
}
}
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:
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.
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.
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
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 }} .
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)
Captura de Errores y Post-Mortems
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:
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.
¿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?