28. Calidad del producto software y atributos de calidad

28.1 Introducción

La calidad del producto software no se limita a que el sistema "funcione". Un sistema puede cumplir una función básica y aun así tener mala calidad si es lento, inseguro, difícil de usar, inaccesible, frágil, costoso de mantener o imposible de adaptar.

Los atributos de calidad describen características importantes del producto, más allá de sus funcionalidades. Ayudan a evaluar si el software es adecuado para su contexto de uso.

En este tema veremos qué significa calidad del producto software, cuáles son los atributos más frecuentes y cómo se relacionan con requisitos, diseño, arquitectura, pruebas y mantenimiento.

28.2 ¿Qué es calidad del producto software?

La calidad del producto software es el grado en que un sistema satisface necesidades explícitas e implícitas de sus usuarios, clientes y demás actores interesados. Incluye comportamiento funcional y características de calidad.

Un producto de software con calidad debería:

  • Resolver correctamente las necesidades para las que fue creado.
  • Ser confiable en condiciones esperadas de uso.
  • Proteger datos y operaciones sensibles.
  • Responder en tiempos razonables.
  • Ser comprensible y usable para sus usuarios.
  • Poder mantenerse y evolucionar.
  • Funcionar en los entornos definidos.
  • Permitir operación y soporte adecuados.
Idea clave: la calidad depende del contexto. No todos los sistemas necesitan el mismo nivel de rendimiento, seguridad, disponibilidad o mantenibilidad.

28.3 Calidad funcional y calidad no funcional

Podemos distinguir entre calidad funcional y calidad no funcional.

Tipo Pregunta principal Ejemplo
Calidad funcional ¿El sistema hace correctamente lo que debe hacer? Calcula bien el total de una compra y aplica descuentos correctos.
Calidad no funcional ¿Cómo lo hace y bajo qué condiciones? Responde en menos de dos segundos, protege datos y es fácil de usar.

Ambas son necesarias. Una función correcta puede ser inútil si tarda demasiado, expone datos sensibles o resulta incomprensible para el usuario.

28.4 Corrección funcional

La corrección funcional indica si el sistema realiza las funciones esperadas de acuerdo con los requisitos y reglas de negocio.

Ejemplos:

  • Un sistema de reservas no permite reservar horarios ocupados.
  • Una tienda calcula correctamente impuestos, descuentos y envío.
  • Un sistema académico impide inscripciones duplicadas.
  • Un sistema bancario registra movimientos con importes correctos.

La corrección funcional suele evaluarse con pruebas funcionales, criterios de aceptación, revisiones de reglas y validación con usuarios.

28.5 Confiabilidad

La confiabilidad indica la capacidad del sistema para funcionar correctamente durante un período y bajo condiciones determinadas.

Un sistema confiable:

  • No falla frecuentemente en operaciones normales.
  • Maneja errores esperados sin perder información.
  • Se comporta de forma consistente.
  • Permite recuperar o continuar ante ciertas fallas.
  • Registra información útil para diagnóstico.

La confiabilidad es especialmente importante en sistemas críticos, transaccionales o de uso continuo.

28.6 Usabilidad

La usabilidad se refiere a qué tan fácil y eficiente es para los usuarios lograr sus objetivos usando el sistema. Un sistema usable reduce errores, frustración, capacitación innecesaria y abandono.

Aspectos de usabilidad:

  • Claridad de la interfaz.
  • Mensajes comprensibles.
  • Flujos simples y coherentes.
  • Consistencia visual y funcional.
  • Prevención de errores.
  • Facilidad de aprendizaje.
  • Rapidez para completar tareas frecuentes.

La usabilidad debe evaluarse con usuarios reales o representativos siempre que sea posible.

28.7 Rendimiento

El rendimiento describe cómo responde el sistema respecto del tiempo, capacidad y uso de recursos. No se limita a "ser rápido"; debe definirse con condiciones concretas.

Algunos indicadores:

  • Tiempo de respuesta.
  • Cantidad de usuarios simultáneos soportados.
  • Volumen de datos procesado.
  • Uso de CPU, memoria, red o almacenamiento.
  • Tiempo de procesamiento de tareas largas.
  • Capacidad de escalar ante mayor demanda.

Un requisito de rendimiento debe ser medible. "La búsqueda debe ser rápida" es ambiguo; "debe responder en menos de dos segundos para 10.000 registros" es más verificable.

28.8 Seguridad

La seguridad busca proteger datos, operaciones, usuarios y recursos frente a accesos no autorizados, uso indebido, pérdida o manipulación.

Aspectos de seguridad:

  • Autenticación: comprobar identidad.
  • Autorización: controlar permisos.
  • Confidencialidad: proteger información sensible.
  • Integridad: evitar modificaciones no autorizadas.
  • Disponibilidad: proteger continuidad del servicio.
  • Auditoría: registrar acciones relevantes.
  • Gestión segura de contraseñas, claves y tokens.

La seguridad debe considerarse desde el diseño, no agregarse al final como parche.

28.9 Mantenibilidad

La mantenibilidad es la facilidad con la que un sistema puede corregirse, adaptarse y mejorarse. Afecta directamente el costo de evolución.

Un sistema mantenible suele tener:

  • Código claro.
  • Responsabilidades bien separadas.
  • Bajo acoplamiento y alta cohesión.
  • Pruebas útiles.
  • Documentación técnica suficiente.
  • Arquitectura comprensible.
  • Dependencias controladas.
  • Convenciones consistentes.

La mantenibilidad suele no verse directamente por el usuario, pero determina qué tan costoso será cambiar el producto.

28.10 Disponibilidad y recuperabilidad

La disponibilidad indica cuánto tiempo el sistema está operativo y accesible. La recuperabilidad indica qué tan bien puede volver a funcionar después de una falla.

Ejemplos de requisitos:

  • El sistema debe estar disponible el 99% del tiempo durante horario comercial.
  • Ante una falla crítica, el servicio debe recuperarse en menos de una hora.
  • Los respaldos deben permitir recuperar datos hasta el cierre del día anterior.
  • Las tareas de mantenimiento programado deben comunicarse con 48 horas de anticipación.

Estos atributos influyen en arquitectura, infraestructura, monitoreo, respaldo y operación.

28.11 Compatibilidad y portabilidad

La compatibilidad indica si el sistema puede funcionar correctamente con otros sistemas, navegadores, dispositivos o plataformas. La portabilidad indica qué tan fácil es moverlo o adaptarlo a otros entornos.

Ejemplos:

  • La aplicación debe funcionar en las dos últimas versiones de Chrome, Edge y Firefox.
  • La API debe integrarse con el sistema de facturación existente.
  • El sistema debe poder desplegarse en ambientes de prueba y producción con configuración externa.
  • La interfaz debe adaptarse a teléfonos y computadoras de escritorio.

28.12 Accesibilidad

La accesibilidad busca que el sistema pueda ser usado por personas con distintas capacidades, dispositivos y condiciones de uso. No es solo una mejora opcional; en muchos contextos es una necesidad ética, legal y de calidad.

Aspectos de accesibilidad:

  • Navegación mediante teclado.
  • Contraste adecuado.
  • Textos claros.
  • Compatibilidad con lectores de pantalla.
  • Etiquetas en formularios.
  • Mensajes de error comprensibles.
  • No depender únicamente del color para comunicar información.

La accesibilidad se relaciona con usabilidad, diseño de interfaz y calidad del producto.

28.13 Atributos de calidad y trade-offs

Los atributos de calidad pueden entrar en tensión. Mejorar uno puede afectar otro. Por eso se deben priorizar según el contexto.

Decisión Mejora posible Costo o tensión
Agregar controles fuertes de seguridad. Mayor protección. Puede aumentar fricción para el usuario.
Optimizar agresivamente rendimiento. Mejor tiempo de respuesta. Puede hacer el código más complejo.
Dividir el sistema en muchos servicios. Escalabilidad independiente. Mayor complejidad operativa.
Agregar mucha configuración. Mayor flexibilidad. Más riesgo de errores de configuración.

No hay calidad absoluta. Hay calidad adecuada para un contexto y objetivos determinados.

28.14 Requisitos de calidad

Los atributos de calidad deben expresarse como requisitos verificables. De lo contrario quedan como deseos generales.

Deseo ambiguo Requisito más verificable
El sistema debe ser rápido. El 95% de las búsquedas debe responder en menos de dos segundos con 10.000 productos.
El sistema debe ser seguro. Después de cinco intentos fallidos, la cuenta debe bloquearse durante quince minutos.
El sistema debe ser fácil de usar. Un usuario nuevo debe completar una reserva sin asistencia durante una prueba guiada.
El sistema debe estar siempre disponible. El sistema debe estar disponible el 99% del tiempo mensual durante horario comercial.

28.15 Evaluación de calidad

La calidad puede evaluarse mediante distintas técnicas:

  • Pruebas funcionales.
  • Pruebas de rendimiento.
  • Pruebas de seguridad.
  • Evaluaciones de usabilidad.
  • Revisión de accesibilidad.
  • Revisión de código.
  • Análisis estático.
  • Monitoreo en producción.
  • Encuestas o retroalimentación de usuarios.
  • Métricas de defectos e incidentes.

La evaluación debe diseñarse según los atributos más importantes para el producto.

28.16 Ejemplo: sistema de turnos médicos

Para un sistema de turnos médicos, los atributos de calidad pueden ser tan importantes como las funcionalidades.

Atributo Ejemplo de necesidad
Corrección No debe asignar dos pacientes al mismo turno.
Seguridad Los datos personales deben estar protegidos y accesibles solo para roles autorizados.
Usabilidad Un paciente debe poder reservar un turno con pocos pasos.
Disponibilidad Debe estar disponible durante el horario de atención de la clínica.
Mantenibilidad Debe ser posible agregar nuevas especialidades sin modificar muchas partes del sistema.
Auditoría Los cambios de turnos deben registrar usuario, fecha y acción realizada.

28.17 Calidad y ciclo de vida

La calidad no se agrega al final. Debe considerarse durante todo el ciclo de vida:

  • En requisitos, definiendo atributos de calidad verificables.
  • En arquitectura, tomando decisiones que soporten esos atributos.
  • En diseño, separando responsabilidades y reduciendo acoplamiento.
  • En construcción, escribiendo código claro y probado.
  • En pruebas, evaluando comportamiento funcional y no funcional.
  • En despliegue, controlando configuración y versiones.
  • En operación, monitoreando disponibilidad, errores y rendimiento.
  • En mantenimiento, corrigiendo defectos y reduciendo deuda técnica.

28.18 Errores comunes

Al trabajar con calidad del producto suelen aparecer errores como:

  • Reducir calidad a ausencia de defectos visibles.
  • No definir atributos de calidad desde requisitos.
  • Usar términos ambiguos como "rápido", "seguro" o "simple" sin criterios.
  • Ignorar mantenibilidad porque el usuario no la ve directamente.
  • Descubrir tarde que la arquitectura no soporta rendimiento o seguridad necesarios.
  • No medir atributos críticos.
  • Intentar maximizar todos los atributos sin priorizar.
  • No considerar operación y soporte como parte de la calidad.

28.19 Buenas prácticas

Algunas buenas prácticas son:

  • Identificar atributos de calidad importantes desde el inicio.
  • Convertir deseos generales en requisitos verificables.
  • Priorizar atributos según contexto y riesgo.
  • Relacionar atributos de calidad con decisiones de arquitectura.
  • Diseñar pruebas o mediciones adecuadas para atributos críticos.
  • Revisar calidad interna de forma continua.
  • Monitorear comportamiento real en producción.
  • Analizar trade-offs antes de tomar decisiones costosas.

28.20 Qué debes recordar de este tema

  • La calidad del producto software incluye funcionalidad y atributos de calidad.
  • Un sistema puede funcionar y aun así tener mala calidad si es inseguro, lento o difícil de mantener.
  • Los atributos de calidad dependen del contexto del producto.
  • Usabilidad, rendimiento, seguridad, confiabilidad y mantenibilidad son atributos importantes.
  • Los atributos de calidad deben expresarse de forma verificable.
  • La arquitectura y el diseño influyen fuertemente en la calidad.
  • La calidad se construye durante todo el ciclo de vida, no solo al final.

28.21 Conclusión

La calidad del producto software es una característica amplia que combina corrección funcional, atributos de calidad y adecuación al contexto. No se logra únicamente probando al final, sino tomando buenas decisiones desde requisitos, arquitectura, diseño, construcción, despliegue y mantenimiento.

Para quien comienza, la idea principal es esta: un producto de software de calidad no solo hace lo pedido; lo hace de manera útil, confiable, segura, eficiente, usable y sostenible para su contexto.

En el próximo tema veremos usabilidad, accesibilidad y experiencia de usuario, profundizando en la calidad desde la perspectiva de las personas que interactúan con el sistema.