Requisitos De Software: Análise, Elicitação e Técnicas
Vamos sair um pouco dos artigos práticos e aprender a teoria?
Os requisitos de software são elementos fundamentais no processo de desenvolvimento de sistemas, pois definem as funcionalidades, restrições e características que um software deve possuir para atender às necessidades e expectativas dos usuários. Segundo Roger S. Pressman, os requisitos de software podem ser classificados em requisitos funcionais, que descrevem o que o sistema deve fazer, e requisitos não funcionais, que especificam as propriedades e restrições do sistema, como desempenho, usabilidade e segurança.
Os requisitos funcionais são uma categoria essencial de requisitos de software que descrevem as funções específicas que o sistema deve executar para atender às necessidades do usuário. Eles definem as operações, serviços ou ações que o software deve ser capaz de realizar. Essas são algumas características e considerações importantes sobre os requisitos funcionais:
- Especificidade: Os requisitos funcionais devem ser específicos e detalhados o suficiente para que os desenvolvedores entendam exatamente o que precisa ser implementado. Eles geralmente são expressos em termos de comportamento do sistema em resposta a entradas específicas.
- Documentação: Os requisitos funcionais são frequentemente documentados usando técnicas como diagramas de casos de uso, histórias de usuário ou especificações de requisitos formais. Esses artefatos ajudam a capturar e comunicar as expectativas dos usuários e das partes interessadas em relação ao sistema.
- Testabilidade: Os requisitos funcionais devem ser testáveis, ou seja, deve ser possível verificar se o software implementa corretamente as funções especificadas. Isso implica em criar casos de teste que possam validar se cada requisito funcional está sendo atendido pelo sistema.
- Priorização: Durante o processo de desenvolvimento de software, é comum priorizar os requisitos funcionais com base na sua importância e na necessidade do usuário. Isso ajuda a equipe de desenvolvimento a focar nos recursos mais críticos e a entregar valor ao cliente de forma incremental.
- Evolução: Os requisitos funcionais podem evoluir ao longo do tempo à medida que novas necessidades surgem ou são identificadas. Portanto, é importante ter processos e mecanismos de gerenciamento de mudanças para garantir que as alterações nos requisitos sejam devidamente avaliadas, documentadas e implementadas.
Na prática, por exemplo, em um projeto de um software bancário, os requisitos funcionais seriam:
Saque; Depósito; Troca De Senha; entre outras funções.
Em resumo, os requisitos funcionais devem fornecer uma descrição detalhada das funções que o software deve desempenhar. Eles exercem um papel central na definição do escopo do projeto e na orientação do trabalho de desenvolvimento, garantindo que o software atenda às necessidades e expectativas dos usuários finais.
Os requisitos não funcionais, ao contrário dos requisitos funcionais, não estão diretamente relacionados às funcionalidades específicas que o sistema deve realizar, mas sim às qualidades ou restrições que o sistema deve possuir para atender aos critérios de desempenho, usabilidade, segurança, entre outros. Esses estão alguns aspectos importantes sobre os requisitos não funcionais:
- Descrevendo atributos de qualidade: Os requisitos não funcionais descrevem os atributos de qualidade do sistema, como desempenho, confiabilidade, usabilidade, segurança e escalabilidade. Eles são críticos para garantir que o sistema seja eficaz, eficiente e satisfatório para os usuários.
- Avaliação subjetiva: Ao contrário dos requisitos funcionais, que podem ser verificados objetivamente através de testes, os requisitos não funcionais muitas vezes envolvem avaliações subjetivas. Por exemplo, a usabilidade de um sistema pode ser medida através de testes de usuário ou avaliações de especialistas.
- Trade-offs: Muitas vezes, os requisitos não funcionais estão em conflito uns com os outros e com os requisitos funcionais. Por exemplo, melhorar o desempenho de um sistema pode aumentar os custos de desenvolvimento. Portanto, é importante realizar trade-offs e encontrar um equilíbrio entre diferentes requisitos não funcionais para atender às necessidades globais do sistema.
- Evolução do sistema: Os requisitos não funcionais também podem evoluir ao longo do ciclo de vida do sistema. Por exemplo, os requisitos de segurança podem precisar ser atualizados para lidar com novas ameaças cibernéticas. Portanto, é importante revisar e atualizar os requisitos não funcionais conforme necessário para garantir que o sistema permaneça robusto e seguro.
- Documentação e medição: Os requisitos não funcionais devem ser documentados de forma clara e precisa, para que possam ser entendidos e avaliados pela equipe de desenvolvimento e pelas partes interessadas. Além disso, é importante estabelecer métricas e critérios de aceitação para medir o cumprimento dos requisitos não funcionais durante o desenvolvimento e teste do sistema.
Na prática, por exemplo, em um projeto de software bancário, os requisitos não funcionais seriam:
Desempenho em relação hardware como memória e processadores; Segurança em relação a Firewall e boas práticas de segurança cibernética, entre outros.
Em resumo, os requisitos não funcionais são essenciais para garantir que um sistema de software atenda aos padrões de qualidade e desempenho esperados pelos usuários e pelas partes interessadas. Eles representam uma parte crítica da especificação do sistema e devem ser cuidadosamente considerados e gerenciados ao longo de todo o ciclo de vida do desenvolvimento de software.
Além disso, a análise e a especificação dos requisitos são atividades essenciais para garantir a correta compreensão e representação das necessidades dos usuários. Klaus Pohl e Cris Rupp enfatizam a importância de técnicas formais e informais para analisar e documentar os requisitos de software, como diagramas de casos de uso, prototipagem e modelagem de requisitos.
De certa forma, temos um passo a passo para elicitação dos requisitos:
1. Entendimento do Contexto e Identificação de Stakeholders:
● Técnicas: Entrevistas, questionários, workshops.
● Ferramentas: Documentação de requisitos, diagramas de contexto.
2. Elicitação De Requisitos:
● Técnicas: Brainstorming, entrevistas, análise de documentos, observação.
● Ferramentas: Documentação de requisitos, mapas conceituais, modelos de negócio.
3. Análise e Especificação de Requisitos:
● Técnicas: Análise de cenários, análise de casos de uso, modelagem de dados.
● Ferramentas: Diagramas de casos de uso, diagramas de sequência, diagramas de classe.
4. Validação de Requisitos:
● Técnicas: Revisões técnicas, prototipagem, validação cruzada.
● Ferramentas: Protótipos de software, modelos de requisitos validados.
5. Gerenciamento de Requisitos:
● Técnicas: Rastreamento de requisitos, gerenciamento de mudanças, priorização.
● Ferramentas: Ferramentas de gerenciamento de requisitos (como IBM Rational DOORS, Jira, Trello), sistemas de controle de versão (Git).
Considerações finais:
Esta pesquisa reforça a importância dos requisitos de software como uma área fundamental na engenharia de software. Ao reconhecer e valorizar a importância dos requisitos desde as fases iniciais do desenvolvimento, as equipes podem construir uma base sólida para o sucesso de seus projetos, garantindo a entrega de sistemas de software de alta qualidade que impulsionam a inovação e agregam valor aos usuários e às organizações.