Já existe uma excelente resposta de Aaronaught, mas como outras respostas, agora removidas, estavam totalmente erradas sobre o que é um requisito não-funcional, acho que seria útil adicionar algumas explicações para evitar erros. requisito não-funcional é.
Um requisito não funcional é "uma qualidade ou propriedade que o produto deve ter" ¹. James Taylor diz que um requisito não-funcional "[...] é [no entanto] um requisito, e é importante para o cliente - às vezes até mais importante que um requisito funcional" . Ele então dá dois exemplos: o logotipo do produto e a precisão e confiabilidade do equipamento. Esses dois exemplos mostram muito bem que:
- Os requisitos não-funcionais não são como um tagarela de marketing: "A Internet é importante hoje em dia e queremos ter um site".
- Os requisitos não funcionais dizem respeito aos clientes, pois eles podem impactar fortemente sua produtividade e a capacidade de usar o produto.
- Os requisitos não funcionais são totalmente objetivos.
O último ponto é essencial. Se o requisito é subjetivo, não há nada a fazer na lista de requisitos. Seria impossível criar testes de validação a partir de algo subjetivo . O único objetivo da lista de requisitos é enumerar as expectativas não ambíguas do cliente. "Quero que este quadrado seja vermelho" é um requisito. "Quero que este quadrado tenha uma cor bonita" é um desejo que requer explicação.
Lembre-se de que a lista de requisitos é como um contrato (e na maioria dos casos faz parte de um contrato). Ele é assinado pelo cliente e pela empresa de desenvolvimento e, no caso de um litígio, será usado legalmente para determinar se você fez seu trabalho corretamente. E se eu solicitar um produto de software, especificar que "o produto deve ser ótimo" e se recusar a pagar quando o produto estiver pronto, porque, para mim, o que você realmente fez não é um ótimo produto?
Então, vamos ver alguns exemplos.
1. O produto de software é responsivo ao usuário final.
Isso não é um requerimento. Não é funcional. Não é um não funcional. Não é apenas um requisito. Em absoluto. Tem valor zero. Você não pode verificar se o sistema de software atende a esse requisito durante o teste de validação. Nem você - o departamento de controle de qualidade, nem o cliente.
2. O recarregamento das estatísticas do usuário executa 90% do tempo abaixo de 100 ms. quando testado na máquina com os desempenhos especificados no apêndice G, parte 2, e a carga abaixo de 10% para a CPU, abaixo de 50% para memória e nenhuma operação de disco R / W ativa.
É um requisito. Se o apêndice G, parte 2, for preciso o suficiente, posso levar a máquina com o hardware semelhante e executar o teste de validação no departamento de controle de qualidade e sempre obterei um resultado binário: aprovado ou reprovado.
É um requisito funcional? Não. Ele não especifica o que o sistema deve fazer. Provavelmente havia um requisito funcional antes, especificando que o aplicativo de software deve poder recarregar as estatísticas do usuário.
É um requisito não funcional? Isto é. Ele especifica uma propriedade que um produto deve ter, ou seja, o tempo máximo / médio de resposta, dado o limite percentual.
3. O aplicativo está escrito em C #.
Isso é um requisito? Realmente não sabemos sem um contexto. Pode ser um desejo do desenvolvedor principal, que deseja, inserindo esse requisito, evitar mais tarde uma discussão com seus colegas sobre o idioma a ser usado. Também pode ser um requisito baseado em hardware / software, elementos herdados ou de compatibilidade. Nós não sabemos.
4. A base de código C # do produto segue as Regras Mínimas Recomendadas da Microsoft e as Regras de Globalização da Microsoft.
Isso é uma coisa estranha. Pessoalmente, prefiro não chamá-lo de requisito e colocá-lo em um documento separado, especificando os padrões e as melhores práticas.
5. A janela principal do aplicativo possui uma borda azul (# 00f) de 10 px com círculos preenchidos em rosa (#fcc), esses círculos sendo colocados na borda interna da borda e com 3 px de diâmetro, separados por 20 px.
É um requisito e não funcional. Ele especifica algo que podemos testar durante o teste de validação e especifica uma propriedade do produto, não o que o produto deve fazer.
6. O sistema de rastreamento de veículos mede a velocidade com uma precisão de ± 0,016 mph.
Também um requisito não funcional. Ele fornece um limite mensurável da precisão do sistema. Ele não diz o que o sistema deve fazer, mas diz quão preciso é seu trabalho. Mas espere? Diz que o sistema de rastreamento de veículos mede a velocidade, não é? Portanto, também é um requisito funcional? Bem, não, uma vez que enfatizamos a precisão da medição, não o fato de a medição ser feita.
7. O sistema de rastreamento de veículos mede a velocidade do veículo.
Agora é um requisito funcional. Não diz como o sistema funciona, mas o que está fazendo. Através de requisitos funcionais, pudemos aprender que o sistema de rastreamento de veículos mede a velocidade, a energia da bateria, a pressão de não sei o que e se as luzes estão acesas ou não.
8. As páginas do site levam 850 ms. carregar.
Isso não é um requerimento. Is tenta ser um, mas é totalmente inválido. Como você classificaria isso? Que páginas? Todos? Testado através de uma rede local de 1 Gbps em uma máquina cliente de quatro núcleos e um servidor de oito núcleos com SSDs usados a 2% ou através de um modem de um laptop antigo e ruim enquanto o site está sendo hospedado por um pequeno servidor usado a 99% ? O que se entende por "carregar"? Isso significa baixar a página? Baixando e exibindo? Enviando a solicitação POST com alguns dados grandes, carregando a resposta e exibindo-a?
Para concluir, um requisito não-funcional é sempre um requisito, o que significa que descreve algo que é totalmente objetivo e pode ser verificado através de um teste de validação manual ou automatizado, mas, em vez de dizer o que o sistema está fazendo, explica como o sistema está fazendo algo ou como o próprio sistema é .
¹ Gerenciamento de projetos de tecnologia da informação: Aplicação de estratégias de gerenciamento de projetos a iniciativas de software, hardware e integração, James Taylor, ISBN: 0814408117.