Read in English · Lire en français · Auf Deutsch lesen
Sección 2.1 de 2.8 · Intermedio · 18 min de lectura
Requisitos funcionales, atributos de calidad y restricciones
Videolección
5 min · narrado en inglés, con subtítulosSolo escuchar (audio)
Leer la transcripción
Esta lección trata de los tres tipos de requisito que tiene todo sistema. Al final, sabrás detectar el pequeño número de requisitos que realmente deciden un diseño.
Piensa en encargar una tarta de boda. Tres pisos, bizcocho de limón, glaseado blanco. Eso describe qué es la tarta: sus funciones. Lista a las dos de la tarde del sábado, capaz de aguantar un trayecto de cuarenta minutos, apta para un invitado con alergia a los frutos secos. Eso describe con qué calidad debe funcionar: sus cualidades. Y el lugar del banquete solo admite tartas de pasteleros autorizados. Eso es una restricción, una elección que ya se ha hecho por ti. Son las cualidades y las restricciones, no el sabor, las que deciden cómo se hace y se transporta la tarta. Con el software ocurre lo mismo.
En el software, un requisito funcional dice qué debe hacer el sistema. Por ejemplo, un cliente puede añadir un artículo al carrito. Un atributo de calidad dice con qué calidad debe hacerlo. Los resultados de búsqueda aparecen en medio segundo. Los atributos de calidad solo tienen sentido con una medida asociada: ¿suficientemente rápido para quién, con qué carga, medido cómo? Una restricción es una decisión ya tomada: una normativa, una tecnología obligatoria, un plazo o un presupuesto. Las restricciones eliminan opciones.
Verás a menudo el término requisitos no funcionales. Necesitas reconocerlo, pero muchos arquitectos lo evitan, por tres razones. Primero, define una categoría grande e importante por lo que no es. Segundo, sugiere que estos requisitos están separados de las funciones y pueden añadirse más tarde. No es así. Es el proceso de pago el que debe ser rápido, y el pago el que nunca debe perderse. Tercero, no funcional suena opcional. Sin embargo, los sistemas que funcionan pero son lentos, inseguros o imposibles de cambiar son exactamente los que acaban reescribiéndose. Este curso habla, en cambio, de atributos de calidad y restricciones.
La mayoría de los requisitos no afectan en absoluto a la arquitectura. Este diagrama muestra cómo distinguir los que sí lo hacen. Los tres tipos de requisito, funciones, cualidades y restricciones, entran por la izquierda. Para cada uno, hazte una sola pregunta: si este requisito cambiara, ¿tendría que cambiar la estructura del sistema? Si la respuesta es sí, es un requisito arquitectónicamente significativo, o ASR, y guía las decisiones de arquitectura. La mayoría son cualidades o restricciones. Si la respuesta es no, pertenece al diseño detallado y al código, y se puede cambiar en una tarde.
Esta es la idea central de este capítulo. Dos sistemas de venta de entradas tienen funcionalidades idénticas: explorar eventos, reservar asientos, pagar. Un salón local de trescientas plazas recibe unas pocas solicitudes por segundo en su momento de más actividad. Una aplicación web y una base de datos son la respuesta correcta: barata, sencilla y fácil de cambiar. Una gira por estadios de sesenta mil plazas debe absorber una ráfaga miles de veces mayor. Por eso necesita una red de distribución de contenidos, una sala de espera virtual, muchas instancias web y una cola de pagos. Y como nunca debe vender el mismo asiento dos veces, necesita un inventario de asientos cuidadosamente diseñado sobre un almacenamiento particionado. Las mismas funciones, arquitecturas completamente distintas.
Analicemos una venta real. Una empresa de venta de entradas vende cuatro noches en un estadio de sesenta mil plazas. Eso son doscientas cuarenta mil entradas. Marketing espera un millón y medio de personas en los diez primeros minutos. Eso son dos mil quinientas llegadas por segundo, unas cuatro mil quinientas veces la tasa normal. Si cada navegador hace unas ocho solicitudes en el primer minuto, el sitio se enfrenta a veinte mil solicitudes por segundo. El proveedor de pagos permite trescientas autorizaciones por segundo. Con dos entradas y media por pedido, eso son noventa y seis mil pedidos, que tardan al menos trescientos veinte segundos, o cinco punto tres minutos. Así que el sistema debe reservar los asientos y poner en cola los pagos. Eso da cinco requisitos arquitectónicamente significativos: carga pico, ningún asiento vendido dos veces, equidad mediante una sala de espera, resistencia a los bots y degradación elegante. Ni uno solo aparece en la lista de funcionalidades.
Algunas de las cualidades más importantes nunca se ponen por escrito, porque todo el mundo las da por supuestas. No perder pedidos. No cobrar dos veces al cliente. Estos requisitos implícitos solo salen a la luz cuando se incumplen, normalmente en producción. Para sacarlos a la luz, pregunta a las partes interesadas qué las pondría furiosas o qué haría salir a la empresa en los periódicos. Dos errores comunes que conviene evitar. Escribir cualidades sin medidas: altamente disponible no se puede diseñar ni probar. Y suponer que la calidad se puede añadir después de construir las funcionalidades. El rendimiento, la seguridad y la disponibilidad dependen de la estructura, y es caro incorporarlos a posteriori.
La sección completa incluye los tipos de restricción, una lista de comprobación para detectar requisitos significativos y el ejemplo completo de la venta de entradas. A continuación, en la sección dos punto dos, veremos los modelos de calidad y cómo usarlos como lista de comprobación. Nos vemos allí.
Lo que necesitas saber
- Los requisitos funcionales indican qué debe hacer un sistema; los atributos de calidad indican con qué calidad debe hacerlo; las restricciones son decisiones ya tomadas, como normativas, tecnologías obligatorias, plazos y presupuestos.
- Muchos arquitectos evitan el término 'requisitos no funcionales' porque define una gran categoría por exclusión, sugiere que los requisitos están separados de las funciones y suena opcional.
- Un requisito arquitectónicamente significativo (ASR) es aquel cuyo cambio obligaría a cambiar la estructura del sistema; la mayoría de los ASR son atributos de calidad o restricciones, pero algunas funciones también son significativas.
- Las mismas funciones pueden ofrecerse con arquitecturas muy distintas; son los atributos de calidad y las restricciones los que deciden entre ellas.
- Los requisitos implícitos, como no perder nunca pedidos o no cobrar nunca dos veces, rara vez se ponen por escrito y hay que obtenerlos activamente de las partes interesadas, los incidentes y las normativas.
Tres tipos de requisito
Un requisito es cualquier cosa que un sistema debe cumplir para que sus partes interesadas lo acepten. A los arquitectos les resulta útil clasificar los requisitos en tres tipos, porque cada tipo influye en el diseño de una forma distinta. Un requisito funcional dice qué debe hacer el sistema: 'un cliente puede añadir un artículo al carrito', 'el sistema de farmacia comprueba cada nueva receta frente a las alergias del paciente', 'un pasajero puede ver la posición del conductor en un mapa'. Los requisitos funcionales describen el comportamiento, los datos y las reglas que los relacionan. Son lo que recogen la mayoría de las historias de usuario y los casos de uso.
Un atributo de calidad dice con qué calidad debe hacerlo el sistema. 'Los resultados de búsqueda aparecen en medio segundo', 'el servicio de reservas está disponible el 99.95% del tiempo', 'se puede añadir un nuevo proveedor de pagos en menos de dos semanas', 'los historiales de los pacientes solo pueden leerlos los clínicos que tratan a ese paciente'. Los atributos de calidad son propiedades del sistema en su conjunto o de una función, y solo tienen sentido con una medida asociada: ¿suficientemente rápido para quién, con qué carga, medido cómo?
Una restricción es una decisión que ya se ha tomado por ti. 'El sistema debe ejecutarse en el tenant de Azure que ya tiene la empresa', 'todos los datos personales permanecen en la Unión Europea', 'el equipo sabe Java y no tiene presupuesto para formarse en otra cosa', 'el primer lanzamiento debe estar en producción antes de que empiece el año fiscal el 6 de abril'. Las restricciones eliminan opciones en lugar de describir comportamiento. No son negociables dentro del proyecto, aunque un buen arquitecto comprueba que cada una sea de verdad una restricción y no solo una costumbre o una suposición.
Los límites no siempre son nítidos, y no pasa nada. El objetivo de la clasificación no es el orden burocrático; es asegurarse de que nadie reúna cincuenta historias de usuario y se olvide de preguntar cuántos usuarios habrá, cuánto tiempo puede sobrevivir el negocio a una caída o qué regulador está vigilando.
Cómo llegan los requisitos a la arquitectura
Por qué muchos arquitectos evitan el término 'requisitos no funcionales'
Los documentos de requisitos dividen tradicionalmente todo en requisitos funcionales y requisitos no funcionales (NFR). El término está en todas partes, en contratos, pliegos de licitación y ofertas de empleo, así que necesitas reconocerlo. Aun así, muchos arquitectos e investigadores lo evitan, por tres razones.
Primero, define una categoría grande e importante por lo que no es. Todo lo que no es una función acaba en el mismo cajón: los tiempos de respuesta, las reglas de cifrado, la elección del proveedor de nube y el color del logotipo. El artículo de Martin Glinz On Non-Functional Requirements (IEEE International Requirements Engineering Conference, 2007) mostró que las definiciones publicadas no coinciden en qué pertenece a la categoría y que una misma necesidad puede clasificarse de una u otra forma según cómo se formule: 'solo el personal autorizado puede ver los salarios' se lee como una función cuando se escribe como regla de acceso y como una cualidad cuando se escribe como objetivo de seguridad.
Segundo, el nombre sugiere que estos requisitos están separados de las funciones y pueden añadirse más tarde. No es así. Un atributo de calidad califica una función: es el proceso de pago el que debe ser rápido, el pago el que nunca debe perderse, el historial médico el que debe ser confidencial. Por eso Bass, Clements y Kazman, en Software Architecture in Practice, hablan de requisitos de atributos de calidad y tratan las restricciones como una categoría aparte.
Tercero, 'no funcional' suena opcional, como si un sistema que funciona pero es lento, inseguro o imposible de cambiar siguiera 'funcionando'. En la práctica, esos son exactamente los sistemas que acaban reescribiéndose. Algunos equipos prefieren 'requisitos de calidad'; otros, en particular en Thoughtworks, dicen 'requisitos transversales' (cross-functional requirements) para subrayar que atraviesan todas las funcionalidades. Este curso usa atributos de calidad y restricciones. Si tu organización dice NFR, no hace falta pelearse por la palabra; basta con asegurarse de que cada NFR sea una cualidad medible o una restricción claramente enunciada.
Restricciones: técnicas, organizativas, regulatorias, de plazo y de presupuesto
Las restricciones merecen más atención de la que suelen recibir, porque a menudo deciden más de la arquitectura que cualquier funcionalidad. Una restricción no es más que un requisito sin libertad restante. Ayuda agruparlas según su origen.
Tipos de restricción y su efecto en la arquitectura
| Tipo | Ejemplo | Efecto típico en la arquitectura |
|---|---|---|
| Técnica | Debe integrarse con el sistema financiero SAP existente a través de sus interfaces publicadas; debe ejecutarse en la plataforma Kubernetes de la empresa. | Fija los estilos de integración, los formatos de datos y el modelo de despliegue; puede descartar algunas bases de datos o lenguajes. |
| Organizativa | Tres equipos en dos husos horarios; el equipo de operaciones solo da soporte a PostgreSQL; el equipo de seguridad debe aprobar cada dependencia externa. | Determina cómo se divide el sistema (ley de Conway, Capítulo 3) y qué tecnologías son realistas. |
| Regulatoria y legal | Los datos personales de residentes en la UE se tratan conforme al RGPD (GDPR); los datos de tarjetas están sujetos a PCI DSS; un dispositivo médico debe cumplir la normativa de seguridad. | Determina la ubicación de los datos, el cifrado, el registro de auditoría, las reglas de conservación y la separación de los componentes sensibles. |
| Tiempo | Las nuevas normas fiscales se aplican desde una fecha fija; una plataforma de comercio minorista debe estar lista antes del pico de noviembre. | Favorece la tecnología probada y los diseños más sencillos; puede obligar a un lanzamiento por fases con deuda técnica conocida. |
| Presupuesto | Los costos de operación deben mantenerse por debajo de una cantidad fija al mes; no hay dinero para licencias comerciales. | Limita la redundancia, las regiones y los servicios gestionados; convierte el costo por transacción en una cualidad explícita. |
Dos hábitos ayudan. Primero, anota el origen de cada restricción (una normativa, un contrato, una persona concreta con poder de decisión) para que pueda comprobarse y, si cambian las circunstancias, revisarse. Segundo, distingue las restricciones reales de las preferencias disfrazadas de restricciones. 'Debemos usar microservicios' rara vez es una restricción; es una decisión de diseño que alguien tomó pronto, y debe justificarse con atributos de calidad como cualquier otra decisión. La sección del Capítulo 1 sobre decisiones y compromisos explica por qué las decisiones tempranas y difíciles de revertir merecen ese examen.
Requisitos arquitectónicamente significativos
La mayoría de los requisitos no afectan a la arquitectura. Que la factura muestre el código postal del cliente encima o debajo del nombre de la calle es un detalle; se puede cambiar en una tarde. Un requisito arquitectónicamente significativo (ASR) es aquel que tiene un efecto medible en la arquitectura: si cambiara, la estructura del sistema tendría que cambiar. Reconocer los ASR pronto importa porque es caro acomodarlos tarde. Añadir una sala de espera a un sitio de venta de entradas la semana antes de una venta es posible; particionar el inventario de asientos entre servidores después del lanzamiento es reescribirlo.
Lianping Chen, Muhammad Ali Babar y Bashar Nuseibeh entrevistaron a profesionales sobre cómo reconocen los ASR (Characterizing Architecturally Significant Requirements, IEEE Software, 2013). Sus conclusiones coinciden con la experiencia de la mayoría de los arquitectos. Los ASR suelen ser difíciles de satisfacer, a menudo afectan al sistema en su conjunto y no a una sola funcionalidad, con frecuencia entran en conflicto entre sí y a menudo se enuncian de forma vaga o no se enuncian en absoluto. Los atributos de calidad y las restricciones son la mayoría, pero algunos requisitos funcionales también son significativos.
Ejemplos de ASR funcionales: 'todo cambio en el historial de un paciente debe poder atribuirse a una persona y a un momento' (necesita un mecanismo de auditoría en todos los componentes), 'los usuarios pueden colaborar en el mismo documento en tiempo real' (exige un modelo de sincronización y probablemente otro estilo de comunicación) y 'los clientes pueden deshacer una transferencia bancaria en un plazo de 30 minutos' (afecta a cómo se mueve el dinero entre cuentas). Cada uno obliga a una decisión estructural, no solo a escribir más código.
Por qué las cualidades dan forma a la arquitectura más que las funciones
Esta es la idea central de este capítulo. Si solo importara la funcionalidad, casi cualquier estructura serviría: podrías escribir todo el sistema como un único programa grande y seguiría calculando las respuestas correctas. Bass, Clements y Kazman lo dicen directamente: la funcionalidad no determina la arquitectura, porque muchas arquitecturas distintas pueden ofrecer las mismas funciones. Lo que las separa es lo bien que cada una logra las cualidades.
Piensa en dos sistemas de venta de entradas con funcionalidades idénticas: explorar eventos, reservar asientos, pagar. Uno vende entradas para un salón local de 300 plazas; el otro vende una gira por estadios de 60 000 plazas. El momento de más actividad del salón local puede traer unas pocas solicitudes por segundo, y una única aplicación web con una base de datos es la respuesta correcta: barata, sencilla y fácil de cambiar. La gira por estadios debe absorber una ráfaga miles de veces mayor, no debe vender nunca el mismo asiento dos veces y debe impedir que los bots lo compren todo en el primer segundo. Ese sistema necesita una red de distribución de contenidos, una cola delante de la tienda, un inventario de asientos cuidadosamente diseñado, un almacenamiento particionado y un flujo de pago capaz de esperar a un proveedor sobrecargado. Las mismas funciones, arquitecturas completamente distintas, y la diferencia procede por completo de los atributos de calidad y las restricciones.
Mismas funciones, cualidades distintas
Cualidades implícitas que nadie pone por escrito
Algunas de las cualidades más importantes nunca se enuncian porque todas las partes interesadas las dan por supuestas. Estos requisitos implícitos solo salen a la luz cuando se incumplen, normalmente en producción. Nadie escribe 'no perder pedidos', 'no cobrar dos veces al cliente', 'seguir funcionando cuando se adelanta la hora', 'mostrar el mismo saldo en el teléfono y en el sitio web' o 'no filtrar los datos de un cliente a otro'. Sin embargo, cada uno de ellos es un ASR con consecuencias importantes: un tratamiento idempotente de los pagos, escrituras duraderas, una programación segura frente a los husos horarios, consistencia entre canales y un aislamiento estricto entre tenants.
Los requisitos implícitos se esconden por razones sociales. Las partes interesadas del negocio creen que son demasiado obvios para mencionarlos; los desarrolladores suponen que otra persona se ha ocupado de ellos; y las plantillas de requisitos rara vez los piden. Algunas preguntas útiles para sacarlos a la luz son: '¿Qué te pondría furioso si ocurriera?', '¿Qué nos haría salir en los periódicos?', '¿Qué ha fallado en el sistema que vamos a sustituir?' y '¿Por qué despiertan de noche al equipo de operaciones?'. Los informes de incidentes y las incidencias de soporte de los sistemas anteriores son una fuente muy rica; también lo son las guías publicadas por los reguladores y las obligaciones de los contratos con clientes.
Ejemplo práctico
Ejemplo práctico: un sistema de venta de entradas para conciertos el día de la venta
Una empresa de venta de entradas pondrá a la venta cuatro noches seguidas en un estadio (60 000 plazas por noche) a las 10:00 de un viernes. En un día normal, el sitio recibe unos 2000 visitantes por hora. Marketing espera que lleguen 1.5 millones de personas en los diez primeros minutos. Las funcionalidades son las habituales: explorar, elegir asientos, reservarlos durante diez minutos, pagar. ¿Cuáles son los requisitos arquitectónicamente significativos?
| Entradas a la venta | 4 noches × 60 000 plazas = 240 000 entradas |
|---|---|
| Tasa de llegada normal | 2000 visitantes ÷ 3600 s ≈ 0.56 visitantes por segundo |
| Tasa de llegada el día de la venta | 1 500 000 visitantes ÷ 600 s = 2500 visitantes por segundo, unas 4500 veces la tasa normal |
| Tasa de solicitudes | Si el navegador de cada visitante hace unas 8 solicitudes al sitio en el primer minuto (páginas, mapas de asientos, llamadas a la API): 2500 × 8 = 20 000 solicitudes por segundo |
| Demanda frente a oferta | 1 500 000 visitantes para 240 000 entradas: la mayoría de la gente se llevará una decepción sea cual sea el diseño, así que la equidad y la comunicación clara importan tanto como la velocidad |
| Restricción de pago | El contrato del proveedor de pagos permite 300 autorizaciones de pago por segundo. Con una media de 2.5 entradas por pedido, 240 000 ÷ 2.5 = 96 000 pedidos; 96 000 ÷ 300 = 320 s, así que solo los pagos tardan al menos 5.3 minutos aunque todo lo demás sea instantáneo |
| ASR 1: carga pico (rendimiento) | Absorber 2500 llegadas por segundo sin colapsar; servir las páginas estáticas y los mapas de asientos desde una caché o una CDN para que solo las compras reales lleguen al núcleo |
| ASR 2: ningún asiento vendido dos veces (consistencia) | Las reservas de asientos deben ser atómicas incluso cuando miles de personas hacen clic en el mismo bloque a la vez; esto determina el diseño del inventario y su almacenamiento |
| ASR 3: equidad (regla de negocio con impacto estructural) | Admitir a los compradores por orden de llegada mediante una sala de espera virtual, para que el sistema central reciba un flujo controlado y no una estampida |
| ASR 4: resistencia a los bots (seguridad) | Detectar y bloquear a los compradores automatizados antes de que lleguen al inventario; aplicar limitación de tasa (rate limiting) por cuenta y por dispositivo |
| ASR 5: degradación elegante (disponibilidad) | Si los pagos se ralentizan, mantener válidas las reservas y poner en cola los intentos de pago en lugar de hacer fallar pedidos completos |
| Restricción | Fecha y hora fijas anunciadas de antemano; límite del proveedor de pagos de 300 por segundo |
Ninguno de estos ASR aparece en la lista de funcionalidades. Todos proceden de la carga, la consistencia, la equidad, la seguridad y una restricción de un tercero.
El límite de pagos se traduce directamente en una decisión de diseño: como los compradores no pueden pagar todos a la vez, el sistema debe reservar los asientos y poner en cola los pagos, lo que a su vez fija el tiempo de reserva.
El mundo real ofrece un recordatorio. En noviembre de 2022, la preventa de Ticketmaster para una gran gira por estadios sufrió largos retrasos y fallos por la demanda; la empresa informó de 3.5 mil millones de solicitudes en total al sistema, cuatro veces su pico anterior.
Lista de comprobación: detectar requisitos arquitectónicamente significativos
Repasa estas preguntas para cada requisito candidato, y para el sistema en su conjunto, al principio de un proyecto.
- ¿Cambiaría la estructura si cambiara?Si duplicar la cifra, relajar la regla o eliminar el requisito movería componentes, datos o caminos de comunicación, es significativo.
- ¿Se aplica a muchas funcionalidades?Los requisitos que atraviesan todo el sistema (auditoría, seguridad, disponibilidad, internacionalización) suelen necesitar una respuesta estructural.
- ¿Es difícil o nuevo?Una cifra exigente (menos de 100 ms, 99.99%), una carga muy superior a cualquiera que haya manejado el equipo o una funcionalidad sin precedentes son una señal fuerte.
- ¿Tiene un gran valor o riesgo para el negocio?Si no cumplirlo supondría perder ingresos, infringir la ley o causar daño a alguien, trátalo como significativo aunque parezca sencillo.
- ¿Entra en conflicto con otra cualidad?Los requisitos en tensión (rápido y fuertemente consistente, abierto y seguro) necesitan compromisos deliberados, que son decisiones arquitectónicas.
- ¿Es una restricción disfrazada?Las tecnologías fijadas, las normativas, los plazos y los presupuestos eliminan opciones; regístralos junto con su origen.
- ¿Ha causado problemas antes?Revisa los incidentes, las incidencias de soporte y los post-mortems del sistema que se sustituye, y de sistemas similares de otros lugares.
- ¿Alguien lo está dando por supuesto en silencio?Pregunta qué pondría furiosas a las partes interesadas o haría salir a la empresa en las noticias; esas respuestas revelan los requisitos implícitos.
Cómo trabajan los profesionales con los ASR
Los arquitectos con experiencia mantienen una lista breve y viva de ASR, normalmente de cinco a quince elementos, en lugar de un largo documento de requisitos. Cada elemento enuncia la cualidad como un escenario comprobable (Sección 2.3), nombra a la parte interesada a la que le importa, registra su prioridad y enlaza con las decisiones que motivó. La plantilla arc42, por ejemplo, pide los tres a cinco objetivos de calidad principales en su primera página y una lista más completa de requisitos de calidad más adelante. La lista se revisa cada vez que se toma una decisión importante o el negocio cambia de rumbo, y los elementos más importantes acaban respaldados por comprobaciones automatizadas llamadas funciones de aptitud, que se presentan en la Sección 2.8.
Comprueba lo que has entendido
¿'Los pacientes pueden reservar citas en línea' es un requisito funcional, un atributo de calidad o una restricción?
Un requisito funcional: dice qué debe hacer el sistema. Una cualidad añadiría con qué calidad, por ejemplo con qué rapidez se confirman las reservas o cuántas se pueden atender a las 8 de la mañana de un lunes.
¿Por qué 'el sistema debe ser escalable' todavía no es un requisito útil?
No tiene estímulo, contexto ni medida. No dice cuánta carga, con qué rapidez crece la carga ni qué respuesta debe mantenerse, así que nadie puede diseñar para él ni probarlo.
Da un ejemplo de requisito funcional que sea arquitectónicamente significativo.
Por ejemplo, una pista de auditoría completa de cada cambio en los historiales médicos, o la edición colaborativa en tiempo real. Cada uno necesita un mecanismo estructural en todo el sistema, no solo más código en un lugar.
¿Qué pregunta separa mejor un requisito significativo de uno corriente?
¿Tendría que cambiar la estructura del sistema si cambiara este requisito? Si la respuesta es sí, es arquitectónicamente significativo.
Fuentes y lecturas recomendadas
¿Tienes una pregunta sobre esta sección? ArchitectBot, el asistente de estudio con IA del curso, responde primero a partir del curso.
Pregunta: “¿Cómo sé si un requisito de mi proyecto es arquitectónicamente significativo o solo un detalle para los desarrolladores?”