Cuando desarrollamos software, es muy importante definir lo que este debe hacer y cómo se debe comportar. Para este fin se utilizan los requerimientos y pueden ser funcionales y no funcionales.
Estos requerimientos son especificaciones clave que van a guiar el diseño y desarrollo del proyecto, así que como podrás notar estimado dev, es importante conocer bien qué son y como definirlos correctamente, saber esto te hará un developer más completo ✌🏼
Requerimientos funcionales
Son aquellos que describen las funcionalidades específicas que el sistema debe proporcionar, estos requerimientos responden a preguntas como:
- ¿Qué tareas debe realizar el sistema?
- ¿Qué entradas recibirá y qué salidas generará?
- ¿Cómo van a interactuar los usuarios con el sistema?
En palabras sencillas, los requerimientos funcionales se centran en el qué del sistema.
Ejemplos:
- Un usuario debe poder registrarse con un correo electrónico y una contraseña.
- La aplicación debe permitir filtrar los productos por categoría, marca y precio.
- El sistema debe enviar una notificación por correo electrónico cuando se registre un nuevo usuario
- El sistema debe notificar al jefe de almacén cuando se realice una transferencia de mercadería.
Como puedes notar, estos requerimientos son directamente observables por los usuarios, si no se cumplen se notaría de inmediato por los usuarios involucrados.
Requerimientos no funcionales
Estos requerimientos por su parte especifican el cómo el sistema debe operar. No describen características específicas sino atributos de calidad y restricciones como:
- Rendimiento
- Escalabilidad
- Seguridad
- Usabilidad
- Disponibilidad
- Mantenibilidad
- Confiabilidad
Estos aspectos van a garantizar que el sistema cumpla con los estándares de calidad y además sea eficiente bajo distintas condiciones de trabajo.
Ejemplos:
- La aplicación web debe cargar en menos de 1 segundo con 10 mil usuario simultáneos.
- Todas las contraseñas deben almacenarse de manera encriptada en la base de datos.
- La aplicación móvil del sistema debe ser compatible con Android y iOS.
- El sistema debe ser capaz de mantener un nivel de servicio SLA de uptime de 99.9%.
Aunque no son directamente visibles por el usuario, si no se cumplen estos requerimientos definitivamente van a causar una degradación en la calidad del servicio en general o hasta fallos graves en todo el sistema.
Si te preguntas de dónde salen esos atributos de calidad, estos están definidos formalmente en el ISO/IEC 25010. En este artículo te hablo más del tema 🐿️
Relación con scrum
Y si uso el framework scrum, ¿dónde están estos requerimientos funcionales y no funcionales?
Es una pregunta bastante válida, y la respuesta es sencilla:
Los requerimientos funcionales suelen representarse como historias de usuario dentro del Product Backlog.
Los requerimientos no funcionales se gestionan en los siguientes documentos de scrum:
- Definition of Ready (DoR)
- Definition of Done (DoD) y en
- Historias o tareas técnicas.
Errores comunes al definirlos
Podría parecer tarea sencilla el definir los requerimientos funcionales y no funcionales, sin embargo no es así, hay que saber definirlos bien para poder hacer un proyecto exitoso desde las etapas tempranas, aquí te menciono 3 errores comunes que debes evitar:
- Ambigüedad: No use términos ambiguos como "el sistema debe ser veloz", utiliza métricas claras y medibles.
- Falta de adaptabilidad: Hay que saber y reconocer que los requerimientos pueden y van a evolucionar, hay que saber adaptarse a esta realidad para que el proyecto no se estanque y pueda ser ágil.
- Falta de priorización clara: No todos los requerimientos son igual de importantes, priorizalos y asígnalos a los equipos de una manera clara y directa.
Conclusiones
Los requerimientos funcionales y no funcionales son la base de un buen diseño de software. Los funcionales aseguran que el sistema haga lo necesario, mientras que los no funcionales garantizan que lo haga con calidad. Trabajar en ambos desde el inicio es esencial para evitar errores y cumplir con las expectativas del cliente.
Créditos de foto de portada: Foto de Parabol | The Agile Meeting Tool en Unsplash