Projetando Arquitetura de Software: Attribute Driven Design (ADD)
Published: 2023-01-13 17:44:15


![Pattern ADD](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4acpcunq6a9yon2okt34.jpeg)


A origem do **Attribute Driven Design (ADD)** pode ser rastreada até a década de 90, quando foi desenvolvido pelo Software Engineering Institute (SEI) do Carnegie Mellon University. Ele foi criado como uma abordagem para o projeto de software que se concentra em identificar e modelar atributos (características) de um sistema que são importantes para seus usuários e stakeholders, com o objetivo de criar sistemas que sejam altamente adaptáveis, fáceis de manter e escaláveis, e que atendam às necessidades dos usuários e stakeholders.

O **Attribute Driven Design (ADD)** foi originalmente desenvolvido para aplicações de software de missão crítica, como sistemas de controle de tráfego aéreo e sistemas de gerenciamento de energia, mas tem sido utilizado em uma variedade de outros tipos de projetos de software desde então. Ele tem sido amplamente utilizado e pesquisado no setor aeroespacial, militar e de defesa, mas também tem aplicações em outros setores, incluindo transporte, saúde, finanças e tecnologia da informação.

Antes de iniciar o esboço da arquitetura, deve-se avaliar os atributos de qualidade como: escopo do sistema, interfaces internas/externas, objetivo do projeto, requisitos funcionais, cenários de qualidade, restrições e preocupações. 

Segue abaixo etapas do **Attribute Driven Design (ADD)** e a forma que é feita suas iterações.


![Modelagem](https://cacoo.com/diagrams/3Tw0ugBSR7BMUWkl-F5377.png)

**Passo 1: Revisão de entradas**

Antes de iniciar uma implementação do primeiro passo as etapas de finalidade de projeto, requisitos funcionais, cenários de atributos de qualidade, restrições e preocupações  anteriores deverão ser analisadas para garantir a iteratividade das etapas 2 a 7.

**Passo 2: Filtro de elemento para sistema**

Neste passo você escolhe qual elemento do sistema será o foco do projeto para iteração das etapas subsequentes.

**Passo 3: Escolha de um ou mais elemento para refinamento.**

Neste passo analisamos o elemento escolhido para decompor e listar as prioridades de requisitos dos stakeholders que afetam o elemento. Eles podem colocar como prioridade Alta, Média ou baixa de cada requisito enumerado.

**Passo 4: Escolha de um ou mais conceito de design.**

Neste passo, precisamos escolher nosso conceito de design, o que sifnifica escolher os principais tipos de elementos e seus relacionamentos.

Você pode identificar as preocupações associadas ao seu design e os componentes de arquitetura que tendem a resolver a problemática.

**Passo 5: Lista de elementos de arquitetura.**

Neste passo, você tem em mãos vários tipos de elementos de software escolhido no passo anterior. Este elementos são atribuídas responsabilidades de acordo com o seu tipo.
A responsabilidade dos elementos enumerados são derividados por cada requisito funcional associado a ele.

**Passo 6: Visualização do esboço.**

Neste passo, os serviços e propriedades necessários e fornecidos para cada elemento são chamados de interface e não simplesmenete uma lista de componente de operação. As interfaces pode incluir qualuqer um dos seguintes pontos:

- sintaxe das operações (por exemplo, assinatura)
- semântica de operações (por exemplo, descrição, pré e pós-condições, restrições)
- informações trocadas (por exemplo, eventos sinalizados, dados globais)
- requisitos de atributo de qualidade de elementos ou operações individuais
- Manipulação de erros.

**Passo 7: Analise de perfomance**

Nesta passo, será analisado o trabalho que foi realizado nas etapas anteriores com intuito de não ter um retrabalho. Nesta etapa o arquiteto poderá voltar para etapa 2 e começar tudo de novo caso algo saia fora do contexto. Se tudo ocorrer conforme esperado o próximo passo é fornecer um novo elemento para uma nova iteração para que o passo 1 seja iniciada. 



No modelo **Attribute Driven Design (ADD)** existem várias vantagens, que são:

- Foco no usuário: O ADD se concentra em identificar e modelar os atributos que são importantes para os usuários e stakeholders, garantindo que o sistema atenda às suas necessidades e expectativas.

- Arquitetura flexível: Ao modelar os atributos do sistema, o ADD permite uma arquitetura flexível e adaptável, que pode ser facilmente modificada e escalada conforme as necessidades do sistema mudam.

- Manutenção fácil: Como o ADD se concentra em atributos importantes e relevantes, os sistemas projetados com essa abordagem tendem a ser mais fáceis de manter e escalar.

- Comunicação eficaz: O ADD ajuda a criar uma comunicação eficaz entre os desenvolvedores, usuários e stakeholders, tornando mais fácil alinhar expectativas e garantir que o sistema atenda às necessidades de todos os envolvidos.

- Redução de custos: Ao projetar sistemas com arquitetura flexível, fácil de manter e escalar, o ADD pode ajudar a reduzir custos de manutenção e desenvolvimento a longo prazo.


O **Attribute Driven Design (ADD)** pode ser utilizado em uma variedade de projetos de software, incluindo:

- Sistemas de missão crítica: ADD foi originalmente desenvolvido para aplicações de software de missão crítica, como sistemas de controle de tráfego aéreo e sistemas de gerenciamento de energia.

- Sistemas embarcados: ADD é uma abordagem popular para o projeto de sistemas embarcados, como dispositivos móveis, sistemas de automação industrial e veículos autônomos.

- Sistemas de gerenciamento de dados: ADD pode ser usado para projetar sistemas de gerenciamento de dados, como bancos de dados distribuídos, sistemas de gerenciamento de armazenamento e sistemas de gerenciamento de big data.

- Sistemas de segurança: ADD pode ser usado para projetar sistemas de segurança, como sistemas de detecção de intrusão, sistemas de gerenciamento de acesso e sistemas de proteção de dados.

- Sistemas de tempo real: ADD é uma abordagem popular para o projeto de sistemas de tempo real, como sistemas de controle de processos, sistemas de gerenciamento de tráfego e sistemas de gerenciamento de operações.

- Sistemas distribuidos: ADD pode ser usado para projetar sistemas distribuídos, como sistemas de gerenciamento de nuvem, sistemas de gerenciamento de borda e sistemas de Internet das coisas (IoT).

- Além disso, ADD pode ser aplicado em outros tipos de projetos de software, dependendo da necessidade.


**Conclusão**


O ADD pode ser aplicado em uma variedade de projetos de software, incluindo sistemas de missão crítica, embarcados, gerenciamento de dados, segurança, tempo real e distribuidos. Ele é uma abordagem útil para o projeto de software, pois permite que os desenvolvedores criem sistemas que sejam altamente adaptáveis, fáceis de manter e escaláveis, e que 
atendam às necessidades dos usuários e stakeholders.


Espero ter ajudado, até a próxima.