Los requerimientos no funcionales son un tipo de requerimiento de software que no especifica una función particular del software, sino una característica del mismo. Algunos ejemplos de requerimientos no funcionales son el rendimiento, la usabilidad, la fiabilidad, la portabilidad y la escalabilidad. Estos requerimientos suelen ser expresados en términos de restricciones, objetivos o atributos deseados.
Los requerimientos no funcionales suelen ser más difíciles de especificar que los requerimientos funcionales, ya que no se trata de una función particular del software, sino de una característica del mismo. Sin embargo, son igualmente importantes, ya que un software que no cumpla con los requerimientos no funcionales puede ser inutilizable, poco fiable o difícil de usar.
Por ejemplo, un software de gestión de contenidos (CMS) debe tener una buena usabilidad, ya que de lo contrario será difícil de usar para los usuarios. Asimismo, debe ser escalable, ya que es probable que el número de usuarios y de contenidos a gestionar aumente con el tiempo. Otro ejemplo podría ser un software de tienda online, que debe ser seguro y fiable, ya que de lo contrario los usuarios no confiarán en él y no lo utilizarán.
En general, los requerimientos no funcionales suelen ser expresados en términos de restricciones (por ejemplo, el software debe ser seguro), objetivos (por ejemplo, el software debe tener una buena usabilidad) o atributos deseados (por ejemplo, el software debe ser escalable).
Aunque los requerimientos no funcionales son importantes, muchas veces se les da menos importancia que a los requerimientos funcionales. Esto es un error, ya que un software que no cumpla con los requerimientos no funcionales puede ser inutilizable, poco fiable o difícil de usar. Por tanto, es importante que los requerimientos no funcionales sean especificados de forma clara y precisa para evitar problemas en el desarrollo y el uso del software.