10. Requerimientos no funcionales y atributos de calidad

10.1 Introducción

Los requerimientos no funcionales describen condiciones de calidad, restricciones y características que el sistema debe cumplir. No indican una función específica como "registrar cliente" o "generar reporte", sino cómo debe comportarse el sistema al ofrecer sus funciones.

Un sistema puede tener todas las funciones solicitadas y aun así ser inaceptable si es lento, inseguro, difícil de usar, poco disponible, imposible de mantener o incapaz de crecer.

Por eso, los requerimientos no funcionales son esenciales para definir la calidad esperada del producto.

10.2 Definición

Podemos definirlos así:

Un requerimiento no funcional describe una propiedad, condición, restricción o nivel de calidad que el sistema debe cumplir al ejecutar sus funciones o al operar en su contexto.

Estos requerimientos suelen estar relacionados con rendimiento, seguridad, usabilidad, disponibilidad, confiabilidad, mantenibilidad, escalabilidad, accesibilidad, compatibilidad y cumplimiento normativo.

10.3 Diferencia con los requerimientos funcionales

Los requerimientos funcionales describen qué debe hacer el sistema. Los no funcionales describen cómo debe hacerlo o bajo qué condiciones debe funcionar.

Funcional No funcional relacionado
El sistema debe permitir iniciar sesión. Después de 5 intentos fallidos, la cuenta debe bloquearse durante 15 minutos.
El sistema debe permitir consultar productos. La consulta debe responder en menos de 2 segundos para catálogos de hasta 50.000 productos.
El sistema debe generar reportes de ventas. Los reportes deben poder exportarse en PDF y conservarse durante 5 años.
El sistema debe permitir registrar reclamos. La pantalla de registro debe poder usarse desde teléfonos móviles.

Ambos tipos de requerimientos se complementan y deben analizarse juntos.

10.4 ¿Por qué son importantes?

Los requerimientos no funcionales son importantes porque afectan directamente la aceptación y utilidad del sistema.

Si se ignoran, pueden aparecer problemas como:

  • El sistema funciona, pero tarda demasiado.
  • Los usuarios no entienden cómo usarlo.
  • La información sensible queda expuesta.
  • El sistema no soporta la cantidad real de usuarios.
  • Las fallas interrumpen procesos críticos.
  • Modificar el software resulta demasiado costoso.
  • No se cumplen normas legales o auditorías necesarias.

Muchos de estos problemas son caros de corregir si se descubren tarde.

10.5 Atributos de calidad

Los atributos de calidad son características que permiten evaluar qué tan bueno es un producto de software en distintos aspectos.

Atributo Pregunta principal
Rendimiento ¿Responde en tiempos aceptables y usa recursos razonablemente?
Seguridad ¿Protege datos, accesos y operaciones sensibles?
Usabilidad ¿Puede ser usado con facilidad por sus usuarios?
Disponibilidad ¿Está operativo cuando se lo necesita?
Confiabilidad ¿Funciona de manera estable bajo condiciones previstas?
Mantenibilidad ¿Puede modificarse, corregirse y evolucionar sin esfuerzo excesivo?
Escalabilidad ¿Puede crecer ante más usuarios, datos o transacciones?
Accesibilidad ¿Puede ser usado por personas con distintas capacidades y dispositivos?

10.6 Rendimiento

El rendimiento describe qué tan rápido responde el sistema y cuántos recursos consume. Puede medirse mediante tiempos de respuesta, cantidad de transacciones, uso de memoria, uso de procesador o volumen de datos soportado.

Ejemplos de requerimientos de rendimiento:

  • La búsqueda de clientes debe responder en menos de 2 segundos para una base de hasta 100.000 clientes.
  • El sistema debe permitir registrar al menos 50 pedidos por minuto durante horario comercial.
  • La generación del reporte mensual no debe superar los 30 segundos para períodos de hasta 12 meses.

Frases como "el sistema debe ser rápido" no son suficientes porque no indican cómo medir el rendimiento.

10.7 Seguridad

La seguridad se relaciona con proteger datos, usuarios, permisos y operaciones. Incluye autenticación, autorización, confidencialidad, integridad, auditoría y protección frente a accesos indebidos.

Ejemplos:

  • El sistema debe requerir autenticación para acceder a funciones administrativas.
  • Solo usuarios con rol supervisor deben poder aprobar descuentos superiores al 20%.
  • El sistema debe registrar fecha, hora, usuario y acción para toda modificación de datos sensibles.
  • Las contraseñas no deben almacenarse en texto plano.
  • La sesión debe cerrarse automáticamente luego de 20 minutos de inactividad.

La seguridad debe considerarse desde el inicio, no agregarse solo al final.

10.8 Usabilidad

La usabilidad indica qué tan fácil, eficiente y comprensible es el sistema para sus usuarios. Un sistema puede ser funcionalmente correcto, pero difícil de usar.

Ejemplos de requerimientos de usabilidad:

  • Un vendedor debe poder registrar un pedido básico en menos de 3 minutos después de recibir capacitación inicial.
  • Los mensajes de error deben indicar qué campo debe corregirse y cuál es el motivo.
  • Las funciones principales del perfil administrativo deben estar disponibles desde el menú principal.
  • El sistema debe conservar los datos ya ingresados cuando una validación falle.

La usabilidad debe analizarse según los usuarios reales y su contexto de trabajo.

10.9 Disponibilidad y confiabilidad

La disponibilidad indica cuánto tiempo el sistema debe estar operativo. La confiabilidad indica qué tan estable y correcto debe ser su comportamiento durante el uso.

Ejemplos:

  • El sistema debe estar disponible el 99,5% del tiempo durante el horario comercial.
  • Ante una falla al enviar una notificación, el sistema debe registrar el error y reintentar el envío hasta 3 veces.
  • El sistema no debe perder pedidos confirmados ante una interrupción momentánea de conexión.
  • Las operaciones de pago deben confirmar o rechazar la transacción sin dejar estados intermedios inconsistentes.

Estos requerimientos son críticos en sistemas donde una interrupción afecta operaciones importantes.

10.10 Mantenibilidad

La mantenibilidad expresa qué tan fácil será corregir, adaptar y mejorar el sistema después de su entrega. Aunque parece un tema interno del equipo técnico, puede afectar costos y evolución del producto.

Ejemplos:

  • Las reglas de cálculo de comisiones deben poder modificarse sin cambiar el código fuente.
  • El sistema debe registrar errores técnicos con información suficiente para diagnóstico por soporte.
  • La configuración de motivos de reclamo debe poder administrarse desde una función interna autorizada.

Un sistema poco mantenible puede volverse caro y riesgoso, aunque al principio funcione correctamente.

10.11 Escalabilidad

La escalabilidad describe la capacidad del sistema para crecer ante más usuarios, datos, operaciones o carga de trabajo.

Ejemplos:

  • El sistema debe soportar hasta 2.000 usuarios registrados y 300 usuarios concurrentes en la primera etapa.
  • El sistema debe permitir aumentar la capacidad de procesamiento sin modificar las funciones visibles para el usuario.
  • La base de datos debe soportar al menos 1.000.000 de registros de movimientos sin degradar las consultas principales por encima de 3 segundos.

La escalabilidad debe definirse según expectativas reales. Pedir escalabilidad ilimitada no es útil ni verificable.

10.12 Accesibilidad y compatibilidad

La accesibilidad busca que el sistema pueda ser usado por personas con distintas capacidades, dispositivos y condiciones de uso. La compatibilidad indica en qué ambientes, navegadores, sistemas operativos o dispositivos debe funcionar.

Ejemplos:

  • El sistema debe poder utilizarse mediante teclado en las funciones principales.
  • Los formularios deben mostrar etiquetas asociadas a sus campos de entrada.
  • La aplicación debe funcionar en las dos versiones más recientes de Chrome, Edge y Firefox.
  • Las pantallas principales deben adaptarse a dispositivos móviles con ancho mínimo de 360 píxeles.

Estos aspectos afectan la experiencia real de uso y deben considerarse al definir el producto.

10.13 Cumplimiento normativo

Algunos sistemas deben cumplir leyes, normas, contratos o políticas internas. Estos requerimientos pueden ser no funcionales o restricciones, según cómo se expresen.

Ejemplos:

  • El sistema debe conservar comprobantes emitidos durante el período exigido por la normativa aplicable.
  • Los datos personales deben tratarse de acuerdo con las políticas de privacidad aprobadas por la organización.
  • Las operaciones críticas deben dejar trazabilidad para auditoría.
  • Los usuarios deben aceptar términos y condiciones antes de utilizar el servicio por primera vez.

Cuando hay cumplimiento normativo, conviene involucrar a áreas legales, auditoría o seguridad desde el inicio.

10.14 Cómo hacerlos medibles

Un problema común es redactar requerimientos no funcionales de forma vaga. Para que sean útiles, deben poder verificarse.

Redacción débil Problema Redacción más medible
El sistema debe ser rápido. No indica operación, carga ni tiempo esperado. La búsqueda de productos debe responder en menos de 2 segundos para hasta 50.000 productos.
El sistema debe ser seguro. No define controles concretos. El sistema debe bloquear la cuenta durante 15 minutos luego de 5 intentos fallidos de inicio de sesión.
El sistema debe ser fácil de usar. No indica tarea, usuario ni criterio observable. Un usuario administrativo capacitado debe poder registrar una inscripción completa en menos de 5 minutos.
El sistema debe estar siempre disponible. "Siempre" no es realista ni verificable. El sistema debe estar disponible el 99,5% del tiempo durante días hábiles de 8 a 18 horas.

10.15 Relación con arquitectura y diseño

Los requerimientos no funcionales influyen fuertemente en decisiones de arquitectura y diseño. Por ejemplo, alta disponibilidad, seguridad estricta o gran volumen de datos pueden requerir decisiones técnicas distintas a las de un sistema pequeño de uso interno.

Algunas decisiones afectadas por estos requerimientos son:

  • Modelo de autenticación y autorización.
  • Tipo de base de datos y estrategia de almacenamiento.
  • Arquitectura de despliegue.
  • Mecanismos de respaldo y recuperación.
  • Monitoreo y registro de errores.
  • Estrategias de cache, procesamiento y escalabilidad.

Por eso deben conocerse temprano. Si aparecen tarde, pueden obligar a rediseñar partes importantes del sistema.

10.16 Conflictos entre atributos de calidad

Los atributos de calidad pueden entrar en tensión. Mejorar uno puede afectar otro.

Ejemplos:

  • Más controles de seguridad pueden aumentar pasos para el usuario.
  • Mayor flexibilidad de configuración puede aumentar complejidad de mantenimiento.
  • Más trazabilidad puede requerir mayor almacenamiento y procesamiento.
  • Mayor rendimiento puede exigir decisiones técnicas más costosas.
  • Mayor disponibilidad puede aumentar infraestructura y presupuesto.

Estos conflictos deben discutirse con interesados para decidir prioridades realistas.

10.17 Ejemplo aplicado

Para un sistema de pedidos, los requerimientos funcionales podrían indicar registrar pedidos, consultar stock y generar reportes. Los no funcionales agregan condiciones de calidad:

  • La consulta de stock debe responder en menos de 2 segundos para hasta 20.000 productos.
  • Solo vendedores autenticados deben poder registrar pedidos.
  • Los supervisores deben poder auditar cambios de estado de pedidos.
  • El sistema debe estar disponible de lunes a sábado de 8 a 20 horas con disponibilidad mensual mínima del 99%.
  • Las pantallas de registro de pedidos deben poder utilizarse desde teléfonos móviles.
  • Ante pérdida de conexión durante la confirmación, el sistema no debe duplicar pedidos.

Estas condiciones pueden cambiar completamente el esfuerzo necesario para construir la solución.

10.18 Errores frecuentes

Al trabajar con requerimientos no funcionales, suelen cometerse estos errores:

  • Escribir frases vagas como rápido, seguro, amigable o robusto sin criterios medibles.
  • Dejarlos para el final del proyecto.
  • No relacionarlos con funciones críticas.
  • No consultar a seguridad, operaciones, soporte o auditoría cuando corresponde.
  • Pedir niveles de calidad innecesariamente altos sin evaluar costo.
  • No definir condiciones de carga, volumen o contexto.
  • No incluirlos en pruebas ni criterios de aceptación.
  • Confundir preferencias generales con necesidades reales de calidad.

10.19 Buenas prácticas

Algunas buenas prácticas son:

  • Redactar requerimientos no funcionales de forma verificable.
  • Indicar operación, condición, volumen, tiempo o criterio de medición cuando corresponda.
  • Relacionarlos con objetivos, riesgos y funciones importantes.
  • Definir prioridades entre atributos de calidad.
  • Involucrar a interesados técnicos y de control desde el inicio.
  • Evitar metas absolutas como "siempre", "nunca" o "ilimitado" si no son realistas.
  • Considerar su impacto en arquitectura, costos y pruebas.
  • Revisarlos cuando cambia el alcance o el contexto del proyecto.
La calidad también se especifica. Si no se define, cada persona puede imaginar un nivel distinto de calidad esperada.

10.20 Qué debes recordar de este tema

  • Los requerimientos no funcionales describen condiciones de calidad y restricciones del sistema.
  • Complementan a los requerimientos funcionales.
  • Deben redactarse de forma medible y verificable.
  • Incluyen atributos como rendimiento, seguridad, usabilidad, disponibilidad, confiabilidad, mantenibilidad y escalabilidad.
  • Pueden afectar arquitectura, diseño, costos y pruebas.
  • Los atributos de calidad pueden entrar en conflicto y deben priorizarse.
  • Ignorarlos hasta el final puede producir cambios costosos.

10.21 Conclusión

Los requerimientos no funcionales definen la calidad esperada del sistema. Sin ellos, el equipo puede construir funciones correctas pero insuficientes para el contexto real de uso.

La clave está en expresarlos con precisión: qué atributo importa, en qué operación, bajo qué condiciones y cómo se verificará. Esto permite diseñar, construir y probar con expectativas compartidas.

En el próximo tema estudiaremos las reglas de negocio y las políticas de la organización, que muchas veces condicionan directamente el comportamiento del sistema.