Ya existe una excelente respuesta de Aaronaught, pero dado que había otras respuestas, ahora eliminadas, que estaban totalmente equivocadas sobre qué es un requisito no funcional, creo que sería útil agregar algunas explicaciones para evitar los errores sobre qué requisito no funcional es.
Un requisito no funcional es "una cualidad, o propiedad que el producto debe tener" ¹. James Taylor dice que un requisito no funcional "[...] es [no obstante] un requisito, y es importante para el cliente, a veces incluso más importante que un requisito funcional" . Luego da dos ejemplos: el logotipo del producto y la precisión y confiabilidad del equipo. Esos dos ejemplos muestran muy bien que:
- Los requisitos no funcionales no son una comercialización parloteo como: "Internet es importante hoy en día y que quieren tener un sitio web".
- Los requisitos no funcionales conciernen a los clientes, ya que pueden tener un gran impacto en su productividad y en la capacidad misma de usar el producto.
- Los requisitos no funcionales son totalmente objetivos.
El último punto es esencial. Si el requisito es subjetivo, no tiene nada que ver en la lista de requisitos. Sería imposible construir pruebas de validación a partir de algo que sea subjetivo . El único propósito de la lista de requisitos es enumerar las expectativas no ambiguas del cliente. "Quiero que este cuadrado sea rojo" es un requisito. "Quiero que este cuadrado tenga un color agradable" es un deseo que requiere explicación.
Recuerde que la lista de requisitos es como un contrato (y en la mayoría de los casos es parte de un contrato). Está firmado por el cliente y la empresa de desarrollo, y en caso de litigio, se usará legalmente para determinar si ha realizado su trabajo correctamente. ¿Qué sucede si le pido un producto de software, especifico que "el producto debe ser excelente" y me niego a pagar cuando el producto está listo, porque para mí, lo que realmente ha hecho no es un producto excelente ?
Entonces, veamos algunos ejemplos.
1. El producto de software responde al usuario final.
Esto no es un requisito. No es funcional. No es un no funcional. Simplemente no es un requisito. En absoluto. Tiene valor cero. No puede verificar si el sistema de software cumple con este requisito durante las pruebas de validación. Ni usted, ni el departamento de control de calidad, ni el cliente.
2. La recarga de las estadísticas del usuario se realiza el 90% del tiempo por debajo de 100 ms. cuando se prueba en la máquina con los rendimientos especificados en el apéndice G parte 2 y la carga por debajo del 10% para la CPU, por debajo del 50% para la memoria y sin operaciones de disco R / W activas.
Es un requisito. Si el apéndice G parte 2 es lo suficientemente preciso, puedo tomar la máquina con el hardware similar y realizar la prueba de validación en el departamento de control de calidad, y siempre obtendré un resultado binario: aprobado o reprobado.
¿Es un requisito funcional? No. No especifica qué debe hacer el sistema. Probablemente hubo un requisito funcional antes, especificando que la aplicación de software debe poder recargar las estadísticas del usuario.
¿Es un requisito no funcional? Es. Especifica una propiedad que debe tener un producto, es decir, el tiempo de respuesta máximo / promedio, dado el umbral de porcentaje.
3. La aplicación está escrita en C #.
¿Es esto un requisito? Realmente no lo sabemos sin un contexto. Podría ser un deseo del desarrollador principal, que quiere, al insertar este requisito, evitar más adelante una discusión con sus colegas sobre el lenguaje que se utilizará. También podría ser un requisito basado en hardware / software, elementos heredados o de compatibilidad. No lo sabemos
4. La base de código C # del producto sigue las Reglas mínimas recomendadas de Microsoft y las Reglas de globalización de Microsoft.
Esto es algo extraño Personalmente, preferiría no llamarlo un requisito y ponerlo en un documento separado que especifique los estándares y las mejores prácticas.
5. La ventana principal de la aplicación tiene un borde azul (# 00f) de 10px con círculos rellenos de rosa (#fcc), esos círculos se colocan en el borde interno del borde y tienen un diámetro de 3px, separados por 20px entre sí.
Es un requisito y no funcional. Especifica algo que podemos probar durante las pruebas de validación, y especifica una propiedad del producto, no lo que el producto está destinado a hacer.
6. El sistema de seguimiento del vehículo mide la velocidad con una precisión de ± 0.016 mph.
También un requisito no funcional. Da un umbral medible de la precisión del sistema. No dice qué debe hacer el sistema, pero sí qué tan preciso es hacer su trabajo. ¿Pero espera? Indica que el sistema de seguimiento del vehículo mide la velocidad, ¿no es así? Entonces, ¿es un requisito funcional también? Bueno, no, ya que ponemos énfasis en la precisión de la medición, no en el hecho de que la medición se realiza.
7. El sistema de seguimiento del vehículo mide la velocidad del vehículo.
Ahora es un requisito funcional. No dice cómo funciona el sistema, sino qué está haciendo. A través de los requisitos funcionales, podríamos aprender que el sistema de seguimiento del vehículo mide la velocidad, la energía de la batería, la presión de No sé qué y si las luces están encendidas o no.
8. Las páginas del sitio web tardan 850 ms. cargar.
Esto no es un requisito. Se trata de ser uno, pero es totalmente inválido. ¿Cómo valorarías esto? Que paginas ¿Todos? Probado a través de una red local de 1 Gbps en una máquina cliente de cuatro núcleos y un servidor de ocho núcleos con SSD utilizados al 2%, o mediante un módem de una computadora portátil vieja y mala mientras el sitio web está alojado en un pequeño servidor utilizado al 99% ? ¿Qué se entiende por "cargar"? ¿Significa descargar la página? ¿Descargarlo y mostrarlo? ¿Enviar la solicitud POST con algunos datos grandes, luego cargar la respuesta y mostrarla?
Para concluir, un requisito no funcional siempre es un requisito, lo que significa que describe algo que es totalmente objetivo y puede verificarse mediante una prueba de validación automática o manual, pero en lugar de decir qué está haciendo el sistema, explica cómo funciona el sistema. está haciendo algo o cómo es el sistema en sí .
¹ Gestión de proyectos de tecnología de la información: aplicación de estrategias de gestión de proyectos a iniciativas de software, hardware e integración, James Taylor, ISBN: 0814408117.