Engenharia de Requisitos
Tags: software, engineering, development
Published: 2023-05-07 18:39:09

---
title: Engenharia de Requisitos
published: true
description: Engenharia de Requisitos
cover_image: https://img.freepik.com/fotos-gratis/conceito-de-colagem-de-controle-de-qualidade-padrao_23-2149595850.jpg?w=1380&t=st=1683475578~exp=1683476178~hmac=e05ceaaf1179f1cebc73ae4010c63fda97a6791164344a1a9d54ec42bd368fa6
tags: 'software, engineering, development'
series: 'Engenharia de Software'
---

Compreender os requisitos é fundamental para garantir a satisfação do cliente ao final de um projeto de software. Muitas vezes, os clientes não têm uma visão clara do que precisam e isso pode dificultar o desenvolvimento de um projeto que atenda às expectativas. É por isso que a identificação cuidadosa dos requisitos no início do projeto é crucial para garantir um bom resultado. Os requisitos podem ser qualquer coisa, desde condições, capacidades, funções, objetivos, propriedades até restrições, e devem caracterizar o sistema e satisfazer as regras de negócio ou contrato. Dessa forma, o levantamento de requisitos ajuda a evitar a frustração do cliente ao final do projeto.

## O que é Engenharia de Requisitos?

A engenharia de requisitos é uma área da engenharia que tem como objetivo identificar e documentar os requisitos necessários para o desenvolvimento de um sistema, considerando as restrições e objetivos envolvidos. É um processo fundamental para garantir que o sistema atenda às necessidades dos usuários e dos stakeholders, evitando o retrabalho e reduzindo os custos e riscos do projeto. A engenharia de requisitos envolve a colaboração de várias partes interessadas, incluindo usuários, clientes, especialistas em negócio e desenvolvedores, e usa técnicas e ferramentas para identificar, documentar, analisar, validar e gerenciar os requisitos do sistema ao logo do ciclo de vida do desenvolvimento de software. É uma prática essencial para garantir a qualidade e a satisfação do cliente no processo de desenvolvimento de software.

## Lista de técnicas de coleta de dados

Na engenharia de requisitos, é importante considerar diferentes técnicas de coleta de dados para obter informações precisas e relevantes sobre o sistema que está sendo desenvolvido. As técnicas mais comuns incluem entrevistas, questionários, observação, prototipagem, entre outras. Cada técnica tem suas próprias vantagens e desvantagens, e a escolha da técnica mais apropriada dependerá do tipo de informação necessária, do perfil dos usuários e das restrições do projeto.

- **Entrevistas:** As entrevistas são uma das técnicas mais comuns e eficazes para coletar informações sobre as necessidades e expectativas dos usuários e stakeholders. Por exemplo, um engenheiro de requisitos pode entrevistar um cliente para entender melhor o problema que ele quer resolver com o software.

- **Questionários:** Os questionários é uma técnica de coleta de dados padronizada que pode ser usada para coletar informações de um grande número de pessoas. Por exemplo, é criado um questionário online para coletar informações sobre as funcionalidades mais importantes que os usuários esperam encontrar no software.

- **Grupo focais:** Os grupos focais é uma técnica de coleta de dados que reúne um grupo de pessoas para discutir e compartilhar opiniões sobre um tema específico. Por exemplo, é reunido um grupo de usuários para discutir sobre as funcionalidades que eles gostariam de ver no software e que julgam ser mais importantes.

- **Análise documental:** A análise documental é uma técnica de coleta de dados que envolve a análise de documentos existentes para obter informações sobre o sistema que está sendo desenvolvido. Por exemplo, pode ser feita uma análise nos documentos de negócio para entender melhor o contexto do sistema.

- **Prototipagem:** A prototipagem é uma técnica de coleta de dados que envolve a criação de protótipos para obter feedback dos usuários. Por exemplo, é criado um protótipo de baixa fidelidade para obter feedback dos usuários sobre a interface do software.

## Diferenças entre requisitos funcionais e não funcionais

Na engenharia de requisitos, é importante diferenciar entre requisitos funcionais e não funcionais para garantir que todos os aspectos importantes do sistema sejam levados em consideração durante o processo de desenvolvimento. Os requisitos funcionais descrevem o comportamento esperado do sistema e suas funcionalidades específicas, enquanto os requisitos não funcionais se referem as características e restrições que o sistema deve atender para satisfazer os seus usuários.

- **Requisitos funcionais:** Os requisitos funcionais são geralmente descritos em termos de entradas, processamentos e saídas esperadas do sistema.

  - Registro de usuário: o sistema deve permitir que novos usuários se registrem e criem suas contas de usuários.
  - Autenticação: o sistema deve verificar a identidade do usuário antes de permitir o acesso às funcionalidades do sistema.
  - Busca de produtos: o sistema deve permitir que os usuários procurem produtos com base em diferentes critérios, como nome, categoria ou condição.

- **Requisitos não funcionais:** Requisitos não funcionais, por outro lado, referem-se a aspectos do sistema que não se relacionam diretamente com suas funcionalidades específicas, mas que são importantes para a sua efetividade e eficiência. Podemos destacar nos requisitos não funcionais:

  - Usabilidade: o sistema deve ser fácil de usar e aprender, para que os usuários possam navegar e utilizar as funcionalidades sem dificuldade.
  - Desempenho: deve ser rápido e responsivo, dando maior agilidade ao uso do sistema.
  - Segurança: o sistema deve garantir a segurança dos dados dos usuários, evitando o acesso não autorizado.

Ao considera a distinção entre requisitos funcionais e não funcionais, é possível definir de forma mais clara as necessidades e expectativas dos usuários e stakeholders, garantindo a entrega de um produto de software que atenda a todas as necessidades dos usuários.

![diagrama](https://i.imgur.com/fHvYfjn.png)

## Identificar as regras de negócio

No processo de desenvolvimento e software, as regras de negócio são um conjunto de normas que definem o modo como uma empresa opera e se relaciona com seus clientes. Essas regras são cruciais para orientar o comportamento dos usuários e garantir que o sistema desenvolvido atenda as necessidades e expectativas de todos os envolvidos na construção do software.

Em um projeto de desenvolvimento de software, é essencial compreender as regras de negócio do cliente para que o sistema desenvolvido satisfaça as necessidades e expectativas do cliente. A coleta dessas regras pode ser realizada por meio das mesmas técnicas utilizadas na coleta de dados, já que as restrições e especificidades do sistema estão diretamente relacionadas às regras de negócio.

Para um melhor entendimento do negócio do cliente, é importante criar um modelo de negócio que permita visualizar a organização como um todo. Com esse conhecimento, os desenvolvedores podem oferecer sugestões e conselhos ao cliente, bem como identificar quais partes do negócio precisam ser informatizadas. Se o projeto envolver a extensão de um sistema já existente, o conhecimento do modelo de negócio existente será fundamental para determinar como incorporar a nova funcionalidade e saber se será necessário modificar partes do sistema já existente.

## Características das regras de negócio

- **Atômica:** Uma RN (Regra de negócio) precisa ser atômica para evitar perda de informação e perda semântica quando dividida em subunidades. Cada RN deve ser clara e precisa em sua definição.

- **Declaração de negócio:** Uma RN deve descrever a lógica do negócio e não a tecnologia que irá implementá-la. Isso ajuda a manter o foco no objetivo do negócio e não nas especificidades técnicas.

- **Restritiva:** Uma RN deve limitar as ações que podem ser aplicadas no contexto do negócio. Isso mantém a integridade e consistência dos dados e do sistema.

- **Representa em linguagem natural:** Uma RN deve ser expressada em linguagem natural, ajuda no entendimento e dispensa treinamento específico ou uso de ferramentas. No entanto, isso pode levar a  expressões ambíguas, tornando necessário o mapeamento para uma linguagem formal.

- **Rastreável:** Uma RN precisa ser rastreável dede sua origem até a realização para manter o acompanhamento de todo o ciclo de vida do sistema. Isso ajuda a garantir a qualidade e a conformidade com as normas e regulamentações.

- **Estruturada:** As RNs devem ser escritas de forma estruturada para facilitar a leitura e o entendimento. É importante determinar padrões estruturais para representação de regras, o que pode apoiar o processo de automatização de regra e a implementação desejada.

## Por fim

A engenharia de requisitos é fundamental para garantir que um projeto de software atenda às expectativas dos clientes e usuários. Isso envolve a identificação cuidadosa dos requisitos necessários, considerando as restrições e objetivos do projeto. Existem várias técnicas de coleta de dados disponíveis, como entrevistas, questionários, grupos focais e análise documental. Além disso, é importante diferenciar entre requisitos funcionais e não funcionais para garantir que todos os aspectos importantes do sistema sejam levados em consideração. A engenharia de requisitos é uma prática essencial para garantir a qualidade e a satisfação do cliente no processo de desenvolvimento de software.

Além disso, a engenharia de requisitos é um processo contínuo e iterativo que deve ser acompanhado durante todo o ciclo de vida do software, desde a fase de concepção até a entrega do produto final. Uma vez que os requisitos são coletados, eles devem ser documentados e validados pelos stakeholders para garantir que sejam completos, claros e compreensíveis. Também é importante monitorar possíveis mudanças nos requisitos ao longo do tempo, pois isso pode afetar significativamente o cronograma e o orçamento do projeto. Em resumo, a engenharia de requisitos é uma disciplina crítica que ajuda a maximizar as chances de sucesso do projeto de software, garantindo que as necessidades do cliente sejam atendidas de forma eficaz e eficiente.