Vale lembrar que requisito é uma condição ou capacidade com a qual o sistema deve estar de acordo, ou seja, sua exigência deve ser satisfeita. Se a condição é produzir algo, dizemos que o requisito é funcional. Se a condição é caracterizar algo (seja propriedade, atributo, comportamento, restrição etc.), dizemos que o requisito é não funcional.
Segundo Sommerville requisitos funcionais são declarações de serviços que o sistema deve prover, descrevendo o que o sistema deve fazer. As especificações dos requisitos funcionais devem determinar o que se espera que o software faça, sem preocupar em como ele irá fazer.
Assim, requisito funcional representa o funcionamento perceptível do sistema pelos usuários, por exemplo: telas, relatórios, informações, fluxo de negócio etc.
Segundo Sommerville, requisitos não funcionais descrevem restrições sobre os serviços ou funções oferecidos pelo sistema. Assim, os requisitos não funcionais são muito importantes para o projeto, pois definirão a arquitetura necessária para que o sistema funcione adequadamente.
Sommerville destaca que os requisitos não funcionais têm origem nas necessidades dos usuários, em restrições de orçamento, em políticas organizacionais, em necessidades de interoperabilidade com outros sistemas de software ou hardware ou em fatores externos, como regulamentos e legislações. Assim, os requisitos não funcionais podem ser classificados quanto à sua origem, conforme veremos a seguir.