Requisitos são descrições do que um sistema deve fazer em questão de serviços a serem prestados(Requisitos Funcionais) e as restrições dessses serviços (Requisitos Não-Funcionais). Os requisitos também podem ser divididos em requisitos do usuário e requisitos do sistema, ambos podendo ser funcionais ou não-funcionais. O processo de descobrir, analisar, documentar e verificar esses serviços e restrições é chamado de Engenharia de Requisitos.
Requisitos do Usuário
Os requisitos do usuário são abstratos, tem como ponto de vista a necessidade do cliente sem indicar uma solução, são feitos para gerentes e usuários finais e sempre usando linguagem natural com diagramas simples.
Requisitos do Sistema
Os requisitos do sistema são mais detalhados, são escritos para a equipe de desenvolvimento e fazem inclusive parte do contrato. Um requisito do sistema é um detalhamento de um requisito do usuário, podendo um requisito de usuário ser expandido e diversos requisitos de sistemas.
Requisito Funcional
São serviços que o sistema deve prover. A especificação de um requisito funcional deve ser completa e consistente, mesmo em sistemas grandes e complexos onde isso na prática é praticamente impossível. A imprecisão é a causa de muitos problemas na engenharia de software devido a interpretações ambíguas feitas pelos desenvolvedores. Omissões, erros em forma de contradições são fáceis de serem cometidos pelo grande número de stakeholders em sistemas grandes e complexos.
Requisito Não-Funcional
São resumidos como qualidade de um requisito funcional específico. Todo requisito não-funcional deve ser testável, por isso, devem ser escritos especificando quantidades para que essas possam ser testadas e não devem deixar margem.
O Documento de Requisitos de Software
Em alguns casos, os requisitos de usuário e de sistema são integrados em uma única descrição. Em outros, os requisitos de usuário são definidos om uma introdução à especificação de requisitos de sistema. Se houver um grande número de requisitos, os requisitos detalahdos de sistema podem ser apresentados em um documento separado. SOMMERVILLE, pag. 63
Há um grande número de usuário desse documento, desde clientes, passando por desenvolvedores e testadores, até enegenheiros de manutenção do sistema. Sendo assim, o compromisso desse documento é maior.
O número detalhamento depende do tipo de sistema que será desenvolvimento e do processo que será usado para esse tal desenvolvimento. Por exemplo, para os métodos ágeis, os requisitos mudam tão rapidamente que quando o documento chega a ser concluído, já está ultrapassado, então, esses processos de desenvolvimento escrevem um pequeno documento de apoio, sem um grande número de detalhes.
O documento de requisitos não deve conter detalhes da arquitetura ou projeto do sistema, pois não devem se preocupar com a forma como o sistema deve ser projetado ou implementado. No entanto, apesar de não entrar em um requisito, um projeto inicial as vezes é importante para ajudar a estruturar as especificações de requisitos e, até mesmo em alguns casos, restrições do projeto na interoperação entre sistemas geram novos requisitos.
Notações para Escrever os Requisitos
Sentenças em Linguagem Natural
Os requisitos são escritos em frases numeradas em linguagem natural. Para esse tipo de notação, há muito grandes riscos de mal-entendidos, por isso, para minizar tal situação, invente um formato-padrão e garanta que as definições sigam ele, use linguagem consistente para distinguir requisitos obrigatórios (‘deve’) de requisitos desejáveis (‘pode’), não use linguagem técnica da engenharia de software e descreva uma justificativa para a existência do requisito que auxilie nas futuras alterações.
Linguagem Natural Estruturada
Os requisitos são escritos em uma linguagem natural em um formulário padrão ou template, onde cada campo fornece informação sobre um aspecto do requisito, como por exemplo, descrição da função, descrição das entradas, descrição das saídas,informação sobre a ação a ser tomada, pré-condições e pós-condições, e até mesmo efeitos colaterais.
Linguagem de Descrição de Projeto
Uso de uma espécie de linguagem de programação, porém com características mais abstratas para especificar os requisitos. É uma notação pouco utilizada atualmente.
Notações Gráficas
Uso de modelos gráficos, suplementados por anotações de texto. Nesse tipo de notação, diagramas UML são comumente usados.
Especificações Matemáticas
Uso de conceitos matemáticos, como máquinas de estado finito ou conjuntos. Apesar de reduzir as possibilidades de ambiguidade, a maioria dos clientes não compreende essa notação.
