Por que incomodar a diferenciação entre requisitos funcionais e não funcionais?

12

Entendo a diferença entre os dois, mas sou questionado por meus colegas sobre o benefício dos requisitos de rotulagem como funcionais ou não funcionais (ou transitórios). Por que se preocupar em fazer isso? Ele passou o que ele disse serem dois dias revisando uma lista de requisitos para um projeto e não viu nenhum benefício para ele, porque o resultado final foi enviar o documento para outra entidade comercial com o edital "Faça tudo".

O que temo são os requisitos agrupados em um documento. Tentei explicar o benefício em termos práticos, mas não consegui vendê-lo. Como posso vender o benefício de documentar quais requisitos são funcionais e quais não são funcionais.


fonte
Há uma discussão interessante em c2.com/cgi/wiki?NonFunctionalRequirements, mas não encontrei nada que forneça uma resposta definitiva.
Thomas Owens
A listagem de requisitos funcionais e não funcionais separadamente facilita a 'rastreabilidade de requisitos'. Na minha experiência, houve alguns processos em lote que não tiveram impactos funcionais, mas apenas requisitos não funcionais. Nesses casos, essa demarcação clara ajudou muito. Cada um deve ter um identificador diferente adicionado a ele para garantir uma verificação e validação mais suave dos requisitos.
Abi

Respostas:

6

Separar explicitamente os requisitos facilitará o projeto do sistema certo.

Com requisitos não funcionais (prefiro os atributos de qualidade do conceito / termo - deve fornecer novos insights além do funcional versus não funcional), você está mais preocupado com as propriedades do software do que com a funcionalidade. É assim que o sistema executa alguma função, não apenas o que o sistema faz. Os requisitos de qualidade têm uma influência significativa na arquitetura do sistema, de maneira que os requisitos funcionais não têm e, por esse motivo, devem ser tratados de maneira diferente.

Manter os atributos de qualidade separados dos requisitos funcionais permite analisar, especificar e priorizar diferentes tipos de requisitos de maneiras diferentes. Por exemplo, os atributos de qualidade são normalmente especificados usando um cenário de atributo de qualidade, enquanto os requisitos funcionais podem assumir a forma de histórias, casos de uso, declarações de dever ou qualquer outro número de formatos. A maioria dos sistemas em que trabalhei tinha menos de uma dúzia de atributos de qualidade e muitos, muitos mais requisitos funcionais.

Na verdade, eu introduziria outro tipo de requisitos - restrições técnicas . Novamente, a separação explícita dos requisitos nesses três blocos fornece dicas sobre como fazer as trocas corretas ao criar o sistema. Os requisitos funcionais geralmente são bastante negociáveis, os atributos de qualidade influenciam fortemente sua arquitetura e as estruturas que você escolher; as restrições técnicas não são negociáveis.

Se essa fosse minha equipe, eu diria a eles que os requisitos devem ser claramente anotados por tipo para garantir que não perdamos algo importante na arquitetura. Pense nos drivers de arquitetura, não apenas na funcionalidade.

Anthony Lattanze em Arquitetura de sistemas intensivos de software: um guia para profissionais fornece uma visão geral prática dos drivers de arquitetura e por que eles devem ser tratados de maneira diferente, muito mais abrangente do que o meu resumo aqui.

Michael
fonte
+1 para NFRs vinculados à arquitetura. É mais difícil fazê-las acontecer se você não olhar o sistema como um todo. Desempenho e tolerância a falhas são ótimos exemplos de NFRs que geralmente precisam ser projetados no nível do sistema.
Fuhrmanator 28/10
5

Quando todo requisito tem uma prioridade / peso iguais (particularmente "Obrigatório"), provavelmente você tem mais com o que se preocupar do que apenas dividir os requisitos Funcionais e Não Funcionais.

No entanto, existem várias razões para separar as duas categorias de requisitos:

Responsabilidade pela implementação Descobri que muitos requisitos não funcionais - particularmente aqueles focados no desempenho, são apenas moderadamente aplicáveis ​​ao desenvolvedor. Embora um design possa suportar escalabilidade e velocidade (e seções de código específicas possam ser ajustadas), em geral, a capacidade de atender a qualquer requisito de desempenho depende da arquitetura e geralmente depende da configuração do hardware.

Responsabilidade pelos testes Qual é a aptidão do usuário ou da equipe de controle de qualidade para verificar se os requisitos de segurança, tolerância a falhas, segurança e confiabilidade são atendidos?

Não se repita A documentação deve seguir o mesmo princípio DRY do código. Os requisitos comuns de estilo da interface do usuário devem ser agrupados. Se a pessoa responsável pelos requisitos realmente deseja, pode fazer referência a requisitos não funcionais (individualmente ou em grupo) nos requisitos funcionais.

Controle de versão Se você estiver em um ambiente corporativo com muitos "padrões" - poderá escrever documentos específicos de requisitos de interface do usuário ou segurança (para citar alguns) que podem ser versionados. Dessa forma, você pode escrever nos requisitos específicos do aplicativo (principalmente Requisitos funcionais): "O aplicativo deve seguir a V2.3 dos Requisitos de segurança definidos em XYZ-Company-SecReq-DocumnentNamingStandard.docx".

Ethan Cabiac
fonte
1

Por que incomodar a diferenciação entre requisitos funcionais e não funcionais?

Uma razão para diferenciar é o nível de abstração entre os dois tipos. Os requisitos não funcionais estão no nível do sistema e dizem como o sistema como um todo deve se comportar. Os requisitos funcionais se referem a um recurso específico e quais recursos e funcionalidades devem ser fornecidos aos clientes.

Os requisitos não funcionais também restringem o sistema, enquanto os requisitos funcionais dizem o que o sistema deve fazer. Os requisitos não funcionais fornecem limitações sobre como os requisitos funcionais devem ser projetados e implementados posteriormente. Ao separá-los, torna-se possível identificar claramente os recursos das restrições e limitações.

O que temo são os requisitos agrupados em um documento. Tentei explicar o benefício em termos práticos, mas não consegui vendê-lo. Como posso vender o benefício de documentar quais requisitos são funcionais e quais não são funcionais.

Nas minhas experiências, os requisitos funcionais e não funcionais são realmente agrupados no mesmo documento ou rastreados no mesmo sistema. No entanto, eles recebem seções próprias e separadas do documento, bem como critérios de sucesso para atender a cada uma.

Thomas Owens
fonte
1

Geralmente, você categoriza os requisitos para ajudar a equipe a cumprir com eles. Se houver um requisito especificamente direcionado a uma necessidade de arquitetura, chamá-lo de requisito de "Arquitetura" deve ajudar a equipe ao trabalhar na arquitetura.

Um documento grande e único de todos os requisitos não é necessariamente uma coisa ruim ... Passar 2 dias revendo também não é ruim. O problema geralmente é que, uma vez que uma pessoa reviu os requisitos, eles os compreendem, mas não é mais fácil para ninguém fazer o mesmo. Pode ser uma grande ajuda começar a rotular requisitos com metadados que ajudarão as outras pessoas que ingressam no projeto.

Talvez tente descrevê-lo como um problema de abstração. Se você precisar trabalhar em uma base de código herdada, não basta ler todas as linhas de código existentes e começar a trabalhar. Você segue a estrutura do código para ajudá-lo. Ter alguma estrutura nos requisitos ajuda da mesma maneira.

Al Biglan
fonte
-3

Existem vários benefícios para a separação.

  1. Economize tempo no teste (ou seja, apenas teste os requisitos funcionais)
  2. Economiza tempo em futuras alterações nos requisitos (ou seja, requisitos não funcionais levarão menos tempo para revisar / aprovar / implementar / testar)
  3. Em um mundo regulamentado (isto é, FDA, etc.), Os requisitos não funcionais exigem 1/10 da quantidade de papelada exigida por um requisito funcional.
  4. Dá à equipe a capacidade de dividir o trabalho entre os membros seniores (funcionais) e juniores (não funcionais) da equipe.

Eu poderia continuar ...

Na superfície, dois dias parecem muito tempo, a longo prazo, poderia economizar semanas ou até meses de trabalho futuro.

SLoret
fonte
um exemplo de requisito não funcional seria "cargas em menos de 10 segundos". Ele não descreve o que o sistema precisa fazer (isso seria um requisito funcional), descreve algum outro aspecto do sistema. Eu não daria essa exigência aos membros da equipe júnior :)
gbjbaanb
"teste apenas os requisitos funcionais" - que tal um requisito não-funcional que diga que o "sistema deve tolerar falhas do banco de dados" (boa sorte, não teste isso e veja como o seu cliente gosta). Concordo com @gbjbaanb que os requisitos não funcionais (que geralmente são tratados no nível da arquitetura!) Não serão fornecidos aos membros da equipe júnior. Você entende realmente o que são NFRs?
Fuhrmanator 28/10