Requisitos Funcionais
Um requisito funcional define uma funcionalidade ou componente de um sistema de software. É descrita como um conjunto de entradas, seu comportamento e as saídas, podendo ser cálculos, detalhes técnicos, manipulação de dados e de processamento e outras funcionalidades específicas que definem o que um sistema, idealmente, será capaz de realizar. Requisitos comportamentais, que descrevem todos os casos em que o sistema utiliza os requisitos funcionais, são extraídos dos casos de uso. Os requisitos funcionais são suportados por requisitos não-funcionais (também conhecidos como requisitos de qualidade), que impõem restrições sobre o projeto ou execução (tais como requisitos de desempenho, segurança ou confiabilidade). O plano para a implementação dos requisitos funcionais é detalhado no projeto do sistema. Já o plano para a implementação de requisitos não funcionais é detalhado na arquitetura do sistema.
Tal como definido na engenharia de requisitos, os requisitos funcionais especificam como o sistema deve reagir a entradas específicas de um sistema, como deve se comportar em determinadas situações e o que o sistema não deve fazer. Isto deve ser contrastado com requisitos não-funcionais, os quais especificam características gerais, como custo e confiabilidade. Os requisitos funcionais fazem parte da arquitetura do aplicativo de um sistema, enquanto os requisitos não funcionais denotam a arquitetura técnica de um sistema.
Requisitos Não-Funcionais
Requisitos não-funcionais são os requisitos relacionados ao uso da aplicação em termos de desempenho, usabilidade, confiabilidade, segurança, disponibilidade, manutenção e tecnologias envolvidas, definindo propriedades e restrições do sistema. Podem ser do sistema todo ou de partes do sistema. Não é preciso o cliente dizer sobre eles, pois eles são características mínimas de um software de qualidade, ficando a cargo do desenvolvedor optar por atender esses requisitos ou não.