Un requisito no funcional (RNF) es una característica de un software que no se relaciona directamente con una tarea específica que el software realiza. En cambio, se relaciona con la forma en que el software debe realizar su trabajo. Los requisitos no funcionales pueden incluir características como la fiabilidad, la escalabilidad, la portabilidad, la seguridad, la usabilidad, el rendimiento y el tiempo de respuesta. A menudo se les llama "requisitos de calidad" o "requisitos de no-funcionalidad".
Los requisitos no funcionales son importantes porque pueden tener un gran impacto en el éxito de un software. Por ejemplo, si el software no es fiable, es poco probable que los usuarios confíen en él. Si el software no es seguro, es posible que los usuarios no quieran usarlo. Y si el software no es fácil de usar, es probable que los usuarios lo encuentren frustrante y lo abandonen.
Algunos requisitos no funcionales son más importantes que otros. Por ejemplo, la seguridad y la fiabilidad son generalmente requisitos muy importantes, mientras que la portabilidad y el rendimiento pueden ser menos importantes. El grado de importancia de un requisito no funcional depende de las necesidades específicas del software.
Los requisitos no funcionales suelen ser expresados como restricciones. Por ejemplo, un requisito no funcional puede ser que el software debe ser "seguro" o que debe tener "un tiempo de respuesta rápido". También pueden ser expresados como objetivos. Por ejemplo, un requisito no funcional puede ser que el software debe "minimizar el número de errores" o "maximizar la usabilidad".
Los requisitos no funcionales son a menudo olvidados o mal entendidos. Esto es un problema porque los requisitos no funcionales son tan importantes como los requisitos funcionales. Los desarrolladores de software deben asegurarse de comprender completamente todos los requisitos no funcionales antes de comenzar el desarrollo.