Dev + Eficiente: Engenharia de Requisitos para Devs parte 2
Hoje conclui o curso de Engenharia de Requisitos para Devs ao estudar a definição de requisitos funcionais e não funcionais, além de passos práticos para o entendimento e refinamento de requisitos.
Tipos de requisitos
As definições abaixo foram retiradas do livro de Engenharia de Software do Ian Sommerville em adaptação livre minha. Acredito serem definições bem claras e de fácil entendimento, por isso achei por bem trazê-las aqui sem muitas modificações.
Os requisitos funcionais definem os serviços que o sistema deve prover, como o sistema deve reagir a determinadas entradas e como o sistema deve se comportar em determinadas situações. Também pode incluir o que o sistema não deve fazer.
Os requisitos não funcionais, também conhecidos como atributos de qualidade, são limitações às quais os serviços e funções que o sistema fornece estão submetidos. Podem ser limitações de tempo, padrões, processos, custo, etc.
5 passos para refinar um requisito
O curso nos apresenta 5 passos práticos para refinar um requisito, de forma a minimizar as chances de termos surpresas na entrega de uma funcionalidade ou correção de software. São eles:
- Busque acesso a quem idealizou o requisito. A fonte mais confiável possível deve ser encontrada para sanar qualquer dúvida. Se não tem acesso a essa pessoa, busque a segunda mais confiável e assim por diante.
- Entreviste quem solicitou o requisito. Não deve haver dúvidas sobre o que está sendo pedido, portanto esgote as possibilidades com a pessoa de referência, preenchendo as lacunas e mantendo o canal aberto para eventuais reencontros. Uma boa técnica para encontrar motivações é a dos 5 porquês. Esse número 5 é só um número mágico, mas o importante é que se entenda o objetivo real do requisito para melhorar seu refinamento.
- Confira o entendimento do requisito. Uma vez que você entreviste a pessoa e tenha suas respostas, escreva com suas palavras o que entendeu e retorne à pessoa para conferir se você entendeu corretamente o requisito. Nesse momento, também é importante trazer representações do funcionamento do requisito rabiscado em um desenho. Assim, fica mais fácil para a pessoa validar o seu entendimento.
- Especifique cenários de testes. Escreva um conjunto de especificações de testes contemplando os cenários de como o sistema deve se comportar diante desse novo requisito (e também de como ele não deve se comportar). Acrescente os cenários que verifiquem atributos de qualidade, caso existam.
- Descreva como você implementaria o requisito. Antes de começar a codificar o requisito, escreva como faria essa implementação, passo-a-passo, para que fique claro para você mesmo que você entendeu o requisito e que não esteja faltando nenhuma informação necessária. Adicionalmente, submeta essa descrição aos cenários de teste especificados.
Executando esses passos, você estará pronto para abrir o editor de código e entregar o requisito com muito mais confiança de estar resolvendo o problema do seu cliente.
Amanhã começarei a leitura do livro Shape Up, principal referência para esse método de refinamento de requisitos. Tchau!