Adicionalmente, tanto la investigación como la práctica de desarrollo de software se han enfocado en desarrollar técnicas y prácticas para descubrir los requisitos funcionales del sistema de software. Un requisito funcional describe las funciones que el software es capaz de ejecutar cuando está en operación. También se describe el requisito funcional como aquel para el cual se puede definir un conjunto finito de pasos de prueba para validar su comportamiento. Los requisitos funcionales incluyen: los datos de entrada para las funciones que ejecuta el software, los datos de salida, los cálculos y algoritmos que se deben implementar en el software.
Pondremos como ejemplo un sistema de gestión de nóminas. El requisito de determinar las horas extras trabajadas por cada uno de los integrantes de la plantilla de trabajadores es un requisito funcional, al igual que calcular el ingreso bruto que le corresponde a cada trabajador por el total de las horas extras. Las reglas del negocio, en este caso las que corresponden al manejo contable de la empresa, incluye los algoritmos que deben emplearse para realizar los cálculos. Los datos de entrada serán las horas trabajadas por día, el periodo en que se contabilizan las horas, y los rangos aceptables por ley de horas extras trabajadas. La salida sería el total de horas trabajadas para el primer caso, según la reglamentación aplicable.
Los requisitos no funcionales describen la manera en que el software se debe comportar. Generalmente se ven como restricciones en las alternativas de solución que podrán proponerse en el diseño. Los requisitos no funcionales consideran aspectos como:
Los requisitos del software, funcionales y no funcionales se derivan de distintas fuentes y de distintos niveles de abstracción. La figura 1 muestra la relación que existe entre los distintos tipos de requisitos que podemos encontrar en el proyecto de desarrollo de software. Durante la etapa de requisitos del software, el conocimiento general y planteado como un objetivo al inicio del proyecto deriva los requisitos de los usuarios a través, de la elaboración de casos de uso, y estos a su vez permiten derivar los requisitos funcionales del software o del sistema de software.